Repository: AndrewScheidecker/WAVM Branch: master Commit: 4e82bb9fecf9 Files: 1062 Total size: 25.6 MB Directory structure: gitextract_8thbuf1h/ ├── .clang-format ├── .clang-tidy ├── .editorconfig ├── .gitattributes ├── .github/ │ └── workflows/ │ └── build.yml ├── .gitignore ├── Benchmarks/ │ ├── binary-trees.wasm │ ├── blake2b-memory64.wast │ ├── blake2b.wast │ ├── coremark.wasm │ ├── fannkuch-redux.wasm │ ├── fasta.wasm │ ├── mandelbrot.wasm │ ├── nbody.wasm │ ├── spectral-norm.wasm │ └── zlib.wasm ├── Build/ │ ├── dev.py │ ├── lib/ │ │ ├── __init__.py │ │ ├── benchmark.py │ │ ├── build.py │ │ ├── context.py │ │ ├── coverage.py │ │ ├── cpp_files.py │ │ ├── format.py │ │ ├── fuzz.py │ │ ├── lint.py │ │ ├── llvm.py │ │ ├── output.py │ │ ├── platform.py │ │ ├── run.py │ │ ├── task_graph.py │ │ ├── test.py │ │ ├── test_def.py │ │ ├── tidy.py │ │ ├── toolchain.py │ │ ├── wasi.py │ │ └── workspace.py │ └── ruff.toml ├── CMakeLists.txt ├── Doc/ │ ├── BuildSystem.md │ ├── Building.md │ ├── CodeOrganization.md │ ├── GettingStarted.md │ ├── PortabilityMatrix.md │ ├── SignalsAndExceptions.md │ └── WAVMObjectReachability.dot ├── Dockerfile ├── Examples/ │ ├── CMakeLists.txt │ ├── echo.wast │ ├── embedder/ │ │ ├── c/ │ │ │ ├── CMakeLists.txt │ │ │ └── embedder-example.c │ │ ├── cpp/ │ │ │ ├── CMakeLists.txt │ │ │ ├── build.sh │ │ │ └── embedder-example.cpp │ │ └── cpp-wasi/ │ │ ├── CMakeLists.txt │ │ └── embedder-example.cpp │ ├── helloworld.wast │ ├── tee.wast │ └── trap.wast ├── Include/ │ └── WAVM/ │ ├── DWARF/ │ │ ├── Constants.h │ │ ├── DWARF.h │ │ └── Sections.h │ ├── IR/ │ │ ├── FeatureSpec.h │ │ ├── IR.h │ │ ├── Module.h │ │ ├── OperatorPrinter.h │ │ ├── OperatorSignatures.h │ │ ├── OperatorTable.h │ │ ├── Operators.h │ │ ├── RandomModule.h │ │ ├── Types.h │ │ ├── Types.natvis │ │ ├── Validate.h │ │ └── Value.h │ ├── Inline/ │ │ ├── Assert.h │ │ ├── BasicTypes.h │ │ ├── CLI.h │ │ ├── CMakeLists.txt │ │ ├── Config.h.in │ │ ├── DenseStaticIntSet.h │ │ ├── Errors.h │ │ ├── FixedString.h │ │ ├── FloatComponents.h │ │ ├── Hash.h │ │ ├── HashMap.h │ │ ├── HashSet.h │ │ ├── HashTable.h │ │ ├── I128.h │ │ ├── Impl/ │ │ │ ├── HashMap.natvis │ │ │ ├── HashMapImpl.h │ │ │ ├── HashSet.natvis │ │ │ ├── HashSetImpl.h │ │ │ ├── HashTable.natvis │ │ │ ├── HashTableImpl.h │ │ │ ├── I128Impl.LICENSE │ │ │ ├── I128Impl.h │ │ │ ├── OptionalStorage.h │ │ │ └── OptionalStorage.natvis │ │ ├── IndexMap.h │ │ ├── InlineArray.h │ │ ├── IntCasts.h │ │ ├── IntrusiveSharedPtr.h │ │ ├── IsNameChar.h │ │ ├── LEB128.h │ │ ├── RandomStream.h │ │ ├── Serialization.h │ │ ├── StringBuilder.h │ │ ├── Time.h │ │ ├── Timing.h │ │ ├── UnalignedArrayView.h │ │ ├── Unicode.h │ │ ├── Version.h.in │ │ └── xxhash/ │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── xxh3.h │ │ ├── xxhash.c │ │ └── xxhash.h │ ├── LLVMJIT/ │ │ └── LLVMJIT.h │ ├── Logging/ │ │ └── Logging.h │ ├── NFA/ │ │ └── NFA.h │ ├── ObjectCache/ │ │ └── ObjectCache.h │ ├── ObjectLinker/ │ │ └── ObjectLinker.h │ ├── Platform/ │ │ ├── Alloca.h │ │ ├── CPU.h │ │ ├── Clock.h │ │ ├── ConditionVariable.h │ │ ├── Defines.h │ │ ├── Diagnostics.h │ │ ├── Error.h │ │ ├── File.h │ │ ├── Intrinsic.h │ │ ├── Memory.h │ │ ├── Mutex.h │ │ ├── RWMutex.h │ │ ├── Random.h │ │ ├── Signal.h │ │ ├── Thread.h │ │ └── Unwind.h │ ├── RegExp/ │ │ └── RegExp.h │ ├── Runtime/ │ │ ├── Intrinsics.h │ │ ├── Linker.h │ │ └── Runtime.h │ ├── RuntimeABI/ │ │ ├── CMakeLists.txt │ │ └── RuntimeABI.h │ ├── ThreadTest/ │ │ └── ThreadTest.h │ ├── VFS/ │ │ ├── SandboxFS.h │ │ └── VFS.h │ ├── WASI/ │ │ ├── WASI.h │ │ ├── WASIABI.LICENSE │ │ └── WASIABI.h │ ├── WASM/ │ │ └── WASM.h │ ├── WASTParse/ │ │ ├── TestScript.h │ │ └── WASTParse.h │ ├── WASTPrint/ │ │ └── WASTPrint.h │ └── wavm-c/ │ ├── wasm-c-api.LICENSE │ └── wavm-c.h ├── LICENSE.txt ├── Lib/ │ ├── DWARF/ │ │ ├── CMakeLists.txt │ │ └── DWARF.cpp │ ├── IR/ │ │ ├── CMakeLists.txt │ │ ├── DisassemblyNames.cpp │ │ ├── FeatureSpec.cpp │ │ ├── FloatPrinting.cpp │ │ ├── Module.cpp │ │ ├── Operators.cpp │ │ ├── RandomModule.cpp │ │ ├── Types.cpp │ │ └── Validate.cpp │ ├── LLVMJIT/ │ │ ├── CMakeLists.txt │ │ ├── Disassembler.cpp │ │ ├── EmitContext.h │ │ ├── EmitConvert.cpp │ │ ├── EmitCore.cpp │ │ ├── EmitExceptions.cpp │ │ ├── EmitFunction.cpp │ │ ├── EmitFunctionContext.h │ │ ├── EmitMem.cpp │ │ ├── EmitModule.cpp │ │ ├── EmitModuleContext.h │ │ ├── EmitNumeric.cpp │ │ ├── EmitTable.cpp │ │ ├── EmitVar.cpp │ │ ├── GDBRegistration.cpp │ │ ├── LLVMCompile.cpp │ │ ├── LLVMJIT.cpp │ │ ├── LLVMJITPrivate.h │ │ ├── LLVMModule.cpp │ │ └── Thunk.cpp │ ├── Logging/ │ │ ├── CMakeLists.txt │ │ └── Logging.cpp │ ├── NFA/ │ │ ├── CMakeLists.txt │ │ └── NFA.cpp │ ├── ObjectCache/ │ │ ├── CMakeLists.txt │ │ └── ObjectCache.cpp │ ├── ObjectLinker/ │ │ ├── CMakeLists.txt │ │ ├── COFF.cpp │ │ ├── ELF.cpp │ │ ├── MachO.cpp │ │ ├── ObjectLinker.cpp │ │ └── ObjectLinkerPrivate.h │ ├── Platform/ │ │ ├── CMakeLists.txt │ │ ├── POSIX/ │ │ │ ├── CPUPOSIX.cpp │ │ │ ├── ClockPOSIX.cpp │ │ │ ├── ConditionVariablePOSIX.cpp │ │ │ ├── DebugPersonality.cpp │ │ │ ├── DiagnosticsPOSIX.cpp │ │ │ ├── EHFrameDecode.cpp │ │ │ ├── ErrorPOSIX.cpp │ │ │ ├── FilePOSIX.cpp │ │ │ ├── MemoryPOSIX.cpp │ │ │ ├── MutexPOSIX.cpp │ │ │ ├── POSIXPrivate.h │ │ │ ├── RWMutexPOSIX.cpp │ │ │ ├── RandomPOSIX.cpp │ │ │ ├── SignalPOSIX.cpp │ │ │ ├── ThreadPOSIX.cpp │ │ │ └── UnwindPOSIX.cpp │ │ └── Windows/ │ │ ├── CPUWindows.cpp │ │ ├── ClockWindows.cpp │ │ ├── ConditionVariableWindows.cpp │ │ ├── DiagnosticsWindows.cpp │ │ ├── ErrorWindows.cpp │ │ ├── FileWindows.cpp │ │ ├── MemoryWindows.cpp │ │ ├── MutexWindows.cpp │ │ ├── RWMutexWindows.cpp │ │ ├── RandomWindows.cpp │ │ ├── SignalWindows.cpp │ │ ├── ThreadWindows.cpp │ │ ├── UnwindWindows.cpp │ │ └── WindowsPrivate.h │ ├── RegExp/ │ │ ├── CMakeLists.txt │ │ └── RegExp.cpp │ ├── Runtime/ │ │ ├── Atomics.cpp │ │ ├── CMakeLists.txt │ │ ├── Compartment.cpp │ │ ├── Context.cpp │ │ ├── Diagnostics.cpp │ │ ├── Exception.cpp │ │ ├── Global.cpp │ │ ├── Instance.cpp │ │ ├── Intrinsics.cpp │ │ ├── Invoke.cpp │ │ ├── Linker.cpp │ │ ├── Memory.cpp │ │ ├── Module.cpp │ │ ├── ObjectGC.cpp │ │ ├── ResourceQuota.cpp │ │ ├── Runtime.cpp │ │ ├── RuntimePrivate.h │ │ ├── Table.cpp │ │ └── WAVMIntrinsics.cpp │ ├── ThreadTest/ │ │ ├── CMakeLists.txt │ │ └── ThreadTest.cpp │ ├── VFS/ │ │ ├── CMakeLists.txt │ │ ├── SandboxFS.cpp │ │ └── VFS.cpp │ ├── WASI/ │ │ ├── CMakeLists.txt │ │ ├── WASI.cpp │ │ ├── WASIArgsEnvs.cpp │ │ ├── WASIClocks.cpp │ │ ├── WASIDiagnostics.cpp │ │ ├── WASIFile.cpp │ │ └── WASIPrivate.h │ ├── WASM/ │ │ ├── CMakeLists.txt │ │ └── WASMSerialization.cpp │ ├── WASTParse/ │ │ ├── CMakeLists.txt │ │ ├── Lexer.cpp │ │ ├── Lexer.h │ │ ├── Parse.cpp │ │ ├── Parse.h │ │ ├── ParseFunction.cpp │ │ ├── ParseModule.cpp │ │ ├── ParseNumbers.cpp │ │ └── ParseTests.cpp │ ├── WASTPrint/ │ │ ├── CMakeLists.txt │ │ └── Print.cpp │ └── wavm-c/ │ ├── CMakeLists.txt │ └── wavm-c.cpp ├── Programs/ │ └── wavm/ │ ├── CMakeLists.txt │ ├── Testing/ │ │ ├── Benchmark.cpp │ │ ├── DumpTestModules.cpp │ │ ├── RunTestScript.cpp │ │ ├── TestAPI.cpp │ │ ├── TestCAPI.c │ │ ├── TestDWARF.cpp │ │ ├── TestHashMap.cpp │ │ ├── TestHashSet.cpp │ │ ├── TestI128.cpp │ │ ├── TestLEB128.cpp │ │ ├── TestObjectLinker.cpp │ │ ├── TestUtils.h │ │ ├── wavm-test.cpp │ │ └── wavm-test.h │ ├── wavm-assemble.cpp │ ├── wavm-compile.cpp │ ├── wavm-disassemble.cpp │ ├── wavm-run.cpp │ ├── wavm.cpp │ └── wavm.h ├── README.md ├── THIRD-PARTY.md ├── Test/ │ ├── CMakeLists.txt │ ├── WebAssembly/ │ │ ├── LICENSE.txt │ │ ├── memory64/ │ │ │ ├── address.wast │ │ │ ├── address64.wast │ │ │ ├── align.wast │ │ │ ├── align64.wast │ │ │ ├── binary-leb128.wast │ │ │ ├── binary.wast │ │ │ ├── block.wast │ │ │ ├── br.wast │ │ │ ├── br_if.wast │ │ │ ├── br_table.wast │ │ │ ├── bulk64._wast │ │ │ ├── call.wast │ │ │ ├── call_indirect.wast │ │ │ ├── comments.wast │ │ │ ├── const.wast │ │ │ ├── conversions.wast │ │ │ ├── custom.wast │ │ │ ├── data.wast │ │ │ ├── elem.wast │ │ │ ├── endianness.wast │ │ │ ├── endianness64.wast │ │ │ ├── exports.wast │ │ │ ├── f32.wast │ │ │ ├── f32_bitwise.wast │ │ │ ├── f32_cmp.wast │ │ │ ├── f64.wast │ │ │ ├── f64_bitwise.wast │ │ │ ├── f64_cmp.wast │ │ │ ├── fac.wast │ │ │ ├── float_exprs.wast │ │ │ ├── float_literals.wast │ │ │ ├── float_memory.wast │ │ │ ├── float_memory64.wast │ │ │ ├── float_misc.wast │ │ │ ├── forward.wast │ │ │ ├── func.wast │ │ │ ├── func_ptrs.wast │ │ │ ├── global.wast │ │ │ ├── i32.wast │ │ │ ├── i64.wast │ │ │ ├── if.wast │ │ │ ├── imports.wast │ │ │ ├── inline-module.wast │ │ │ ├── int_exprs.wast │ │ │ ├── int_literals.wast │ │ │ ├── labels.wast │ │ │ ├── left-to-right.wast │ │ │ ├── linking.wast │ │ │ ├── load.wast │ │ │ ├── load64.wast │ │ │ ├── local_get.wast │ │ │ ├── local_set.wast │ │ │ ├── local_tee.wast │ │ │ ├── loop.wast │ │ │ ├── memory.wast │ │ │ ├── memory64.wast │ │ │ ├── memory_grow.wast │ │ │ ├── memory_grow64.wast │ │ │ ├── memory_redundancy.wast │ │ │ ├── memory_redundancy64.wast │ │ │ ├── memory_size.wast │ │ │ ├── memory_trap.wast │ │ │ ├── memory_trap64.wast │ │ │ ├── names.wast │ │ │ ├── nop.wast │ │ │ ├── return.wast │ │ │ ├── select.wast │ │ │ ├── skip-stack-guard-page.wast │ │ │ ├── stack.wast │ │ │ ├── start.wast │ │ │ ├── store.wast │ │ │ ├── switch.wast │ │ │ ├── table.wast │ │ │ ├── token.wast │ │ │ ├── traps.wast │ │ │ ├── type.wast │ │ │ ├── unreachable.wast │ │ │ ├── unreached-invalid.wast │ │ │ ├── unwind.wast │ │ │ ├── utf8-custom-section-id.wast │ │ │ ├── utf8-import-field.wast │ │ │ ├── utf8-import-module.wast │ │ │ └── utf8-invalid-encoding.wast │ │ ├── multi-memory/ │ │ │ ├── address.wast │ │ │ ├── align.wast │ │ │ ├── binary-leb128.wast │ │ │ ├── binary.wast │ │ │ ├── block.wast │ │ │ ├── br.wast │ │ │ ├── br_if.wast │ │ │ ├── br_table.wast │ │ │ ├── bulk.wast │ │ │ ├── call.wast │ │ │ ├── call_indirect.wast │ │ │ ├── comments.wast │ │ │ ├── const.wast │ │ │ ├── conversions.wast │ │ │ ├── custom.wast │ │ │ ├── data.wast │ │ │ ├── elem.wast │ │ │ ├── endianness.wast │ │ │ ├── exports.wast │ │ │ ├── f32.wast │ │ │ ├── f32_bitwise.wast │ │ │ ├── f32_cmp.wast │ │ │ ├── f64.wast │ │ │ ├── f64_bitwise.wast │ │ │ ├── f64_cmp.wast │ │ │ ├── fac.wast │ │ │ ├── float_exprs.wast │ │ │ ├── float_literals.wast │ │ │ ├── float_memory.wast │ │ │ ├── float_misc.wast │ │ │ ├── forward.wast │ │ │ ├── func.wast │ │ │ ├── func_ptrs.wast │ │ │ ├── global.wast │ │ │ ├── i32.wast │ │ │ ├── i64.wast │ │ │ ├── if.wast │ │ │ ├── imports.wast │ │ │ ├── inline-module.wast │ │ │ ├── int_exprs.wast │ │ │ ├── int_literals.wast │ │ │ ├── labels.wast │ │ │ ├── left-to-right.wast │ │ │ ├── linking.wast │ │ │ ├── load.wast │ │ │ ├── local_get.wast │ │ │ ├── local_set.wast │ │ │ ├── local_tee.wast │ │ │ ├── loop.wast │ │ │ ├── memory-multi.wast │ │ │ ├── memory.wast │ │ │ ├── memory_copy.wast │ │ │ ├── memory_fill.wast │ │ │ ├── memory_grow.wast │ │ │ ├── memory_init.wast │ │ │ ├── memory_redundancy.wast │ │ │ ├── memory_size.wast │ │ │ ├── memory_trap.wast │ │ │ ├── names.wast │ │ │ ├── nop.wast │ │ │ ├── ref_func.wast │ │ │ ├── ref_is_null.wast │ │ │ ├── ref_null.wast │ │ │ ├── return.wast │ │ │ ├── select.wast │ │ │ ├── skip-stack-guard-page.wast │ │ │ ├── stack.wast │ │ │ ├── start.wast │ │ │ ├── store.wast │ │ │ ├── switch.wast │ │ │ ├── table-sub.wast │ │ │ ├── table.wast │ │ │ ├── table_copy.wast │ │ │ ├── table_fill.wast │ │ │ ├── table_get.wast │ │ │ ├── table_grow.wast │ │ │ ├── table_init.wast │ │ │ ├── table_set.wast │ │ │ ├── table_size.wast │ │ │ ├── token.wast │ │ │ ├── traps.wast │ │ │ ├── type.wast │ │ │ ├── unreachable.wast │ │ │ ├── unreached-invalid.wast │ │ │ ├── unreached-valid.wast │ │ │ ├── unwind.wast │ │ │ ├── utf8-custom-section-id.wast │ │ │ ├── utf8-import-field.wast │ │ │ ├── utf8-import-module.wast │ │ │ └── utf8-invalid-encoding.wast │ │ ├── spec/ │ │ │ ├── address.wast │ │ │ ├── align.wast │ │ │ ├── binary-leb128.wast │ │ │ ├── binary.wast │ │ │ ├── block.wast │ │ │ ├── br.wast │ │ │ ├── br_if.wast │ │ │ ├── br_table.wast │ │ │ ├── bulk.wast │ │ │ ├── call.wast │ │ │ ├── call_indirect.wast │ │ │ ├── comments.wast │ │ │ ├── const.wast │ │ │ ├── conversions.wast │ │ │ ├── custom.wast │ │ │ ├── data.wast │ │ │ ├── elem.wast │ │ │ ├── endianness.wast │ │ │ ├── exports.wast │ │ │ ├── f32.wast │ │ │ ├── f32_bitwise.wast │ │ │ ├── f32_cmp.wast │ │ │ ├── f64.wast │ │ │ ├── f64_bitwise.wast │ │ │ ├── f64_cmp.wast │ │ │ ├── fac.wast │ │ │ ├── float_exprs.wast │ │ │ ├── float_literals.wast │ │ │ ├── float_memory.wast │ │ │ ├── float_misc.wast │ │ │ ├── forward.wast │ │ │ ├── func.wast │ │ │ ├── func_ptrs.wast │ │ │ ├── global.wast │ │ │ ├── i32.wast │ │ │ ├── i64.wast │ │ │ ├── if.wast │ │ │ ├── imports.wast │ │ │ ├── inline-module.wast │ │ │ ├── int_exprs.wast │ │ │ ├── int_literals.wast │ │ │ ├── labels.wast │ │ │ ├── left-to-right.wast │ │ │ ├── linking.wast │ │ │ ├── load.wast │ │ │ ├── local_get.wast │ │ │ ├── local_set.wast │ │ │ ├── local_tee.wast │ │ │ ├── loop.wast │ │ │ ├── memory.wast │ │ │ ├── memory_copy.wast │ │ │ ├── memory_fill.wast │ │ │ ├── memory_grow.wast │ │ │ ├── memory_init.wast │ │ │ ├── memory_redundancy.wast │ │ │ ├── memory_size.wast │ │ │ ├── memory_trap.wast │ │ │ ├── names.wast │ │ │ ├── nop.wast │ │ │ ├── ref_func.wast │ │ │ ├── ref_is_null.wast │ │ │ ├── ref_null.wast │ │ │ ├── return.wast │ │ │ ├── select.wast │ │ │ ├── simd/ │ │ │ │ ├── meta/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── gen_tests.py │ │ │ │ │ ├── simd.py │ │ │ │ │ ├── simd_arithmetic.py │ │ │ │ │ ├── simd_bitwise.py │ │ │ │ │ ├── simd_compare.py │ │ │ │ │ ├── simd_ext_mul.py │ │ │ │ │ ├── simd_extadd_pairwise.py │ │ │ │ │ ├── simd_f32x4.py │ │ │ │ │ ├── simd_f32x4_arith.py │ │ │ │ │ ├── simd_f32x4_cmp.py │ │ │ │ │ ├── simd_f32x4_pmin_pmax.py │ │ │ │ │ ├── simd_f32x4_rounding.py │ │ │ │ │ ├── simd_f64x2.py │ │ │ │ │ ├── simd_f64x2_arith.py │ │ │ │ │ ├── simd_f64x2_cmp.py │ │ │ │ │ ├── simd_f64x2_pmin_pmax.py │ │ │ │ │ ├── simd_f64x2_rounding.py │ │ │ │ │ ├── simd_float_op.py │ │ │ │ │ ├── simd_i16x8_arith.py │ │ │ │ │ ├── simd_i16x8_cmp.py │ │ │ │ │ ├── simd_i16x8_q15mulr_sat_s.py │ │ │ │ │ ├── simd_i32x4_arith.py │ │ │ │ │ ├── simd_i32x4_cmp.py │ │ │ │ │ ├── simd_i32x4_dot_i16x8.py │ │ │ │ │ ├── simd_i64x2_arith.py │ │ │ │ │ ├── simd_i64x2_cmp.py │ │ │ │ │ ├── simd_i8x16_arith.py │ │ │ │ │ ├── simd_i8x16_cmp.py │ │ │ │ │ ├── simd_int_arith2.py │ │ │ │ │ ├── simd_int_to_int_extend.py │ │ │ │ │ ├── simd_int_trunc_sat_float.py │ │ │ │ │ ├── simd_integer_op.py │ │ │ │ │ ├── simd_lane_value.py │ │ │ │ │ ├── simd_load_lane.py │ │ │ │ │ ├── simd_sat_arith.py │ │ │ │ │ ├── simd_store_lane.py │ │ │ │ │ └── test_assert.py │ │ │ │ ├── simd_address.wast │ │ │ │ ├── simd_align.wast │ │ │ │ ├── simd_bit_shift.wast │ │ │ │ ├── simd_bitwise.wast │ │ │ │ ├── simd_boolean.wast │ │ │ │ ├── simd_const.wast │ │ │ │ ├── simd_conversions.wast │ │ │ │ ├── simd_f32x4.wast │ │ │ │ ├── simd_f32x4_arith.wast │ │ │ │ ├── simd_f32x4_cmp.wast │ │ │ │ ├── simd_f32x4_pmin_pmax.wast │ │ │ │ ├── simd_f32x4_rounding.wast │ │ │ │ ├── simd_f64x2.wast │ │ │ │ ├── simd_f64x2_arith.wast │ │ │ │ ├── simd_f64x2_cmp.wast │ │ │ │ ├── simd_f64x2_pmin_pmax.wast │ │ │ │ ├── simd_f64x2_rounding.wast │ │ │ │ ├── simd_i16x8_arith.wast │ │ │ │ ├── simd_i16x8_arith2.wast │ │ │ │ ├── simd_i16x8_cmp.wast │ │ │ │ ├── simd_i16x8_extadd_pairwise_i8x16.wast │ │ │ │ ├── simd_i16x8_extmul_i8x16.wast │ │ │ │ ├── simd_i16x8_q15mulr_sat_s.wast │ │ │ │ ├── simd_i16x8_sat_arith.wast │ │ │ │ ├── simd_i32x4_arith.wast │ │ │ │ ├── simd_i32x4_arith2.wast │ │ │ │ ├── simd_i32x4_cmp.wast │ │ │ │ ├── simd_i32x4_dot_i16x8.wast │ │ │ │ ├── simd_i32x4_extadd_pairwise_i16x8.wast │ │ │ │ ├── simd_i32x4_extmul_i16x8.wast │ │ │ │ ├── simd_i32x4_trunc_sat_f32x4.wast │ │ │ │ ├── simd_i32x4_trunc_sat_f64x2.wast │ │ │ │ ├── simd_i64x2_arith.wast │ │ │ │ ├── simd_i64x2_arith2.wast │ │ │ │ ├── simd_i64x2_cmp.wast │ │ │ │ ├── simd_i64x2_extmul_i32x4.wast │ │ │ │ ├── simd_i8x16_arith.wast │ │ │ │ ├── simd_i8x16_arith2.wast │ │ │ │ ├── simd_i8x16_cmp.wast │ │ │ │ ├── simd_i8x16_sat_arith.wast │ │ │ │ ├── simd_int_to_int_extend.wast │ │ │ │ ├── simd_lane.wast │ │ │ │ ├── simd_load.wast │ │ │ │ ├── simd_load16_lane.wast │ │ │ │ ├── simd_load32_lane.wast │ │ │ │ ├── simd_load64_lane.wast │ │ │ │ ├── simd_load8_lane.wast │ │ │ │ ├── simd_load_extend.wast │ │ │ │ ├── simd_load_splat.wast │ │ │ │ ├── simd_load_zero.wast │ │ │ │ ├── simd_splat.wast │ │ │ │ ├── simd_store.wast │ │ │ │ ├── simd_store16_lane.wast │ │ │ │ ├── simd_store32_lane.wast │ │ │ │ ├── simd_store64_lane.wast │ │ │ │ └── simd_store8_lane.wast │ │ │ ├── skip-stack-guard-page.wast │ │ │ ├── stack.wast │ │ │ ├── start.wast │ │ │ ├── store.wast │ │ │ ├── switch.wast │ │ │ ├── table-sub.wast │ │ │ ├── table.wast │ │ │ ├── table_copy.wast │ │ │ ├── table_fill.wast │ │ │ ├── table_get.wast │ │ │ ├── table_grow.wast │ │ │ ├── table_init.wast │ │ │ ├── table_set.wast │ │ │ ├── table_size.wast │ │ │ ├── token.wast │ │ │ ├── traps.wast │ │ │ ├── type.wast │ │ │ ├── unreachable.wast │ │ │ ├── unreached-invalid.wast │ │ │ ├── unreached-valid.wast │ │ │ ├── unwind.wast │ │ │ ├── utf8-custom-section-id.wast │ │ │ ├── utf8-import-field.wast │ │ │ ├── utf8-import-module.wast │ │ │ └── utf8-invalid-encoding.wast │ │ └── threads/ │ │ ├── address.wast │ │ ├── align.wast │ │ ├── atomic.wast │ │ ├── binary-leb128.wast │ │ ├── binary.wast │ │ ├── block.wast │ │ ├── br.wast │ │ ├── br_if.wast │ │ ├── br_table.wast │ │ ├── call.wast │ │ ├── call_indirect.wast │ │ ├── comments.wast │ │ ├── const.wast │ │ ├── conversions.wast │ │ ├── custom.wast │ │ ├── data.wast │ │ ├── elem.wast │ │ ├── endianness.wast │ │ ├── exports.wast │ │ ├── f32.wast │ │ ├── f32_bitwise.wast │ │ ├── f32_cmp.wast │ │ ├── f64.wast │ │ ├── f64_bitwise.wast │ │ ├── f64_cmp.wast │ │ ├── fac.wast │ │ ├── float_exprs.wast │ │ ├── float_literals.wast │ │ ├── float_memory.wast │ │ ├── float_misc.wast │ │ ├── forward.wast │ │ ├── func.wast │ │ ├── func_ptrs.wast │ │ ├── global.wast │ │ ├── i32.wast │ │ ├── i64.wast │ │ ├── if.wast │ │ ├── imports.wast │ │ ├── inline-module.wast │ │ ├── int_exprs.wast │ │ ├── int_literals.wast │ │ ├── labels.wast │ │ ├── left-to-right.wast │ │ ├── linking.wast │ │ ├── load.wast │ │ ├── local_get.wast │ │ ├── local_set.wast │ │ ├── local_tee.wast │ │ ├── loop.wast │ │ ├── memory.wast │ │ ├── memory_grow.wast │ │ ├── memory_redundancy.wast │ │ ├── memory_size.wast │ │ ├── memory_trap.wast │ │ ├── names.wast │ │ ├── nop.wast │ │ ├── return.wast │ │ ├── select.wast │ │ ├── skip-stack-guard-page.wast │ │ ├── stack.wast │ │ ├── start.wast │ │ ├── store.wast │ │ ├── switch.wast │ │ ├── table.wast │ │ ├── thread.wast │ │ ├── token.wast │ │ ├── traps.wast │ │ ├── type.wast │ │ ├── unreachable.wast │ │ ├── unreached-invalid.wast │ │ ├── unwind.wast │ │ ├── utf8-custom-section-id.wast │ │ ├── utf8-import-field.wast │ │ ├── utf8-import-module.wast │ │ └── utf8-invalid-encoding.wast │ ├── fuzz/ │ │ ├── CMakeLists.txt │ │ ├── FuzzTargetCommonMain.h │ │ ├── ModuleMatcher.h │ │ ├── fuzz-assemble.cpp │ │ ├── fuzz-compile-model.cpp │ │ ├── fuzz-disassemble.cpp │ │ ├── fuzz-instantiate.cpp │ │ ├── translate-compile-model-corpus.cpp │ │ └── wastFuzzDictionary.txt │ ├── object-cache/ │ │ ├── module_a.wast │ │ └── module_b.wast │ ├── wasi/ │ │ ├── cpp/ │ │ │ ├── append.cpp │ │ │ ├── args.cpp │ │ │ ├── cat.cpp │ │ │ ├── clock.cpp │ │ │ ├── clock_res.cpp │ │ │ ├── environ.cpp │ │ │ ├── exit.cpp │ │ │ ├── fd_fdstat.cpp │ │ │ ├── fd_filestat_set_size.cpp │ │ │ ├── fd_filestat_set_times.cpp │ │ │ ├── fd_renumber.cpp │ │ │ ├── fd_seek_tell.cpp │ │ │ ├── fd_sync.cpp │ │ │ ├── largefile.cpp │ │ │ ├── ls.cpp │ │ │ ├── mkdir.cpp │ │ │ ├── mmap.cpp │ │ │ ├── mv.cpp │ │ │ ├── path_filestat_set_times.cpp │ │ │ ├── preadwrite.cpp │ │ │ ├── random.cpp │ │ │ ├── rm.cpp │ │ │ ├── rmdir.cpp │ │ │ ├── stat.cpp │ │ │ ├── stdout.cpp │ │ │ └── write.cpp │ │ └── wast/ │ │ ├── fd_read_oob.wast │ │ ├── fd_write_oob.wast │ │ └── random_get_oob.wast │ └── wavm/ │ ├── bulk_memory_ops.wast │ ├── divide_by_zero_in_try.wast │ ├── exceptions.wast │ ├── infinite-recursion.wast │ ├── issues/ │ │ ├── issue-345.wast │ │ ├── issue-346.wast │ │ ├── issue-347.wast │ │ ├── issue-354.wast │ │ ├── issue-355.wast │ │ ├── issue-356.wast │ │ ├── issue-357.wast │ │ ├── issue-360.wast │ │ ├── issue-378.wast │ │ ├── issue-383.wast │ │ └── issue-384.wast │ ├── many_functions.wast │ ├── misc.wast │ ├── multi_memory.wast │ ├── reference_types.wast │ ├── simd.wast │ ├── simd_const_simple.wast │ ├── skip-stack-guard-page.wast │ ├── syntax_recursion.wast │ ├── threads.wast │ ├── trunc_sat.wast │ ├── wat_custom_section.wast │ └── wavm_atomic.wast ├── ThirdParty/ │ ├── BLAKE2/ │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── COPYING │ │ ├── README.md │ │ ├── include/ │ │ │ └── blake2.h │ │ ├── neon/ │ │ │ ├── blake2-impl.h │ │ │ ├── blake2b-load-neon.h │ │ │ ├── blake2b-neon.c │ │ │ ├── blake2b-round.h │ │ │ ├── blake2b.c │ │ │ ├── blake2bp.c │ │ │ ├── blake2s-load-neon.h │ │ │ ├── blake2s-neon.c │ │ │ ├── blake2s-round.h │ │ │ ├── blake2s.c │ │ │ ├── blake2sp.c │ │ │ ├── blake2xb.c │ │ │ └── blake2xs.c │ │ ├── ref/ │ │ │ ├── blake2-impl.h │ │ │ ├── blake2b-ref.c │ │ │ ├── blake2bp-ref.c │ │ │ ├── blake2s-ref.c │ │ │ ├── blake2sp-ref.c │ │ │ ├── blake2xb-ref.c │ │ │ └── blake2xs-ref.c │ │ └── sse/ │ │ ├── blake2-config.h │ │ ├── blake2-impl.h │ │ ├── blake2b-load-sse2.h │ │ ├── blake2b-load-sse41.h │ │ ├── blake2b-round.h │ │ ├── blake2b.c │ │ ├── blake2bp.c │ │ ├── blake2s-load-sse2.h │ │ ├── blake2s-load-sse41.h │ │ ├── blake2s-load-xop.h │ │ ├── blake2s-round.h │ │ ├── blake2s.c │ │ ├── blake2sp.c │ │ ├── blake2xb.c │ │ └── blake2xs.c │ ├── Benchmarks/ │ │ ├── ComputerLanguageBenchmarksGame/ │ │ │ ├── LICENSE │ │ │ ├── binary-trees/ │ │ │ │ └── binary-trees.c │ │ │ ├── fannkuch-redux/ │ │ │ │ └── fannkuch-redux.c │ │ │ ├── fasta/ │ │ │ │ └── fasta.c │ │ │ ├── mandelbrot/ │ │ │ │ └── mandelbrot.c │ │ │ ├── nbody/ │ │ │ │ └── nbody.c │ │ │ └── spectral-norm/ │ │ │ └── spectral-norm.c │ │ └── coremark/ │ │ ├── .github/ │ │ │ └── workflows/ │ │ │ └── c-cpp.yml │ │ ├── LICENSE.md │ │ ├── Makefile │ │ ├── README.md │ │ ├── barebones/ │ │ │ ├── core_portme.c │ │ │ ├── core_portme.h │ │ │ ├── core_portme.mak │ │ │ ├── cvt.c │ │ │ └── ee_printf.c │ │ ├── barebones_porting.md │ │ ├── core_list_join.c │ │ ├── core_main.c │ │ ├── core_matrix.c │ │ ├── core_state.c │ │ ├── core_util.c │ │ ├── coremark.h │ │ ├── coremark.md5 │ │ ├── cygwin/ │ │ │ └── core_portme.mak │ │ ├── docs/ │ │ │ ├── READM.md │ │ │ └── html/ │ │ │ ├── files/ │ │ │ │ ├── PIC32/ │ │ │ │ │ └── core_portme-mak.html │ │ │ │ ├── core_list_join-c.html │ │ │ │ ├── core_main-c.html │ │ │ │ ├── core_matrix-c.html │ │ │ │ ├── core_state-c.html │ │ │ │ ├── core_util-c.html │ │ │ │ ├── coremark-h.html │ │ │ │ ├── linux/ │ │ │ │ │ ├── core_portme-c.html │ │ │ │ │ ├── core_portme-h.html │ │ │ │ │ └── core_portme-mak.html │ │ │ │ ├── readme-txt.html │ │ │ │ └── release_notes-txt.html │ │ │ ├── index/ │ │ │ │ ├── BuildTargets.html │ │ │ │ ├── Configuration.html │ │ │ │ ├── Configurations.html │ │ │ │ ├── Files.html │ │ │ │ ├── Functions.html │ │ │ │ ├── General.html │ │ │ │ ├── General2.html │ │ │ │ ├── Types.html │ │ │ │ └── Variables.html │ │ │ ├── index.html │ │ │ ├── javascript/ │ │ │ │ ├── main.js │ │ │ │ └── searchdata.js │ │ │ ├── search/ │ │ │ │ ├── BuildTargetsP.html │ │ │ │ ├── ConfigurationC.html │ │ │ │ ├── ConfigurationH.html │ │ │ │ ├── ConfigurationM.html │ │ │ │ ├── ConfigurationS.html │ │ │ │ ├── ConfigurationT.html │ │ │ │ ├── ConfigurationU.html │ │ │ │ ├── ConfigurationsH.html │ │ │ │ ├── ConfigurationsM.html │ │ │ │ ├── ConfigurationsS.html │ │ │ │ ├── ConfigurationsT.html │ │ │ │ ├── FilesC.html │ │ │ │ ├── FilesR.html │ │ │ │ ├── FunctionsC.html │ │ │ │ ├── FunctionsG.html │ │ │ │ ├── FunctionsI.html │ │ │ │ ├── FunctionsM.html │ │ │ │ ├── FunctionsP.html │ │ │ │ ├── FunctionsS.html │ │ │ │ ├── FunctionsT.html │ │ │ │ ├── GeneralB.html │ │ │ │ ├── GeneralC.html │ │ │ │ ├── GeneralD.html │ │ │ │ ├── GeneralF.html │ │ │ │ ├── GeneralG.html │ │ │ │ ├── GeneralH.html │ │ │ │ ├── GeneralI.html │ │ │ │ ├── GeneralL.html │ │ │ │ ├── GeneralM.html │ │ │ │ ├── GeneralO.html │ │ │ │ ├── GeneralP.html │ │ │ │ ├── GeneralR.html │ │ │ │ ├── GeneralS.html │ │ │ │ ├── GeneralT.html │ │ │ │ ├── GeneralU.html │ │ │ │ ├── GeneralV.html │ │ │ │ ├── GeneralW.html │ │ │ │ ├── NoResults.html │ │ │ │ ├── TypesS.html │ │ │ │ ├── VariablesC.html │ │ │ │ ├── VariablesD.html │ │ │ │ ├── VariablesL.html │ │ │ │ ├── VariablesO.html │ │ │ │ ├── VariablesP.html │ │ │ │ ├── VariablesR.html │ │ │ │ └── VariablesS.html │ │ │ └── styles/ │ │ │ ├── 1.css │ │ │ ├── 2.css │ │ │ └── main.css │ │ ├── freebsd/ │ │ │ └── core_portme.mak │ │ ├── linux/ │ │ │ └── core_portme.mak │ │ ├── macos/ │ │ │ └── core_portme.mak │ │ ├── posix/ │ │ │ ├── core_portme.c │ │ │ ├── core_portme.h │ │ │ ├── core_portme.mak │ │ │ └── core_portme_posix_overrides.h │ │ ├── rtems/ │ │ │ ├── core_portme.mak │ │ │ └── init.c │ │ ├── simple/ │ │ │ ├── core_portme.c │ │ │ ├── core_portme.h │ │ │ └── core_portme.mak │ │ └── zephyr/ │ │ └── module.yml │ ├── liblmdb/ │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── COPYRIGHT │ │ ├── Doxyfile │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── intro.doc │ │ ├── lmdb.h │ │ ├── mdb.c │ │ ├── mdb_copy.1 │ │ ├── mdb_copy.c │ │ ├── mdb_drop.1 │ │ ├── mdb_drop.c │ │ ├── mdb_dump.1 │ │ ├── mdb_dump.c │ │ ├── mdb_load.1 │ │ ├── mdb_load.c │ │ ├── mdb_stat.1 │ │ ├── mdb_stat.c │ │ ├── midl.c │ │ ├── midl.h │ │ ├── mtest.c │ │ ├── mtest2.c │ │ ├── mtest3.c │ │ ├── mtest4.c │ │ ├── mtest5.c │ │ ├── mtest6.c │ │ ├── sample-bdb.txt │ │ ├── sample-mdb.txt │ │ └── tooltag │ └── libunwind/ │ ├── .arcconfig │ ├── .clang-format │ ├── CMakeLists.txt │ ├── LICENSE.TXT │ ├── PROVENANCE.txt │ ├── cmake/ │ │ ├── Modules/ │ │ │ └── HandleLibunwindFlags.cmake │ │ └── config-ix.cmake │ ├── docs/ │ │ ├── BuildingLibunwind.rst │ │ ├── CMakeLists.txt │ │ ├── README.txt │ │ ├── conf.py │ │ └── index.rst │ ├── include/ │ │ ├── CMakeLists.txt │ │ ├── __libunwind_config.h │ │ ├── libunwind.h │ │ ├── libunwind.modulemap │ │ ├── mach-o/ │ │ │ └── compact_unwind_encoding.h │ │ ├── unwind.h │ │ ├── unwind_arm_ehabi.h │ │ └── unwind_itanium.h │ ├── src/ │ │ ├── AddressSpace.hpp │ │ ├── CMakeLists.txt │ │ ├── CompactUnwinder.hpp │ │ ├── DwarfInstructions.hpp │ │ ├── DwarfParser.hpp │ │ ├── EHHeaderParser.hpp │ │ ├── FrameHeaderCache.hpp │ │ ├── RWMutex.hpp │ │ ├── Registers.hpp │ │ ├── Unwind-EHABI.cpp │ │ ├── Unwind-EHABI.h │ │ ├── Unwind-seh.cpp │ │ ├── Unwind-sjlj.c │ │ ├── Unwind-wasm.c │ │ ├── UnwindCursor.hpp │ │ ├── UnwindLevel1-gcc-ext.c │ │ ├── UnwindLevel1.c │ │ ├── UnwindRegistersRestore.S │ │ ├── UnwindRegistersSave.S │ │ ├── Unwind_AIXExtras.cpp │ │ ├── assembly.h │ │ ├── config.h │ │ ├── dwarf2.h │ │ ├── libunwind.cpp │ │ ├── libunwind_ext.h │ │ └── shadow_stack_unwind.h │ └── test/ │ ├── CMakeLists.txt │ ├── aix_runtime_link.pass.cpp │ ├── aix_signal_unwind.pass.sh.S │ ├── alignment.compile.pass.cpp │ ├── bad_unwind_info.pass.cpp │ ├── configs/ │ │ ├── apple-libunwind-system.cfg.in │ │ ├── armv7m-picolibc-libunwind.cfg.in │ │ ├── cmake-bridge.cfg.in │ │ ├── ibm-libunwind-shared.cfg.in │ │ ├── llvm-libunwind-merged.cfg.in │ │ ├── llvm-libunwind-shared-mingw.cfg.in │ │ ├── llvm-libunwind-shared.cfg.in │ │ ├── llvm-libunwind-static-mingw.cfg.in │ │ └── llvm-libunwind-static.cfg.in │ ├── floatregister.pass.cpp │ ├── forceunwind.pass.cpp │ ├── frameheadercache_test.pass.cpp │ ├── libunwind_01.pass.cpp │ ├── libunwind_02.pass.cpp │ ├── lit.cfg.py │ ├── remember_state_leak.pass.sh.s │ ├── signal_frame.pass.cpp │ ├── signal_unwind.pass.cpp │ ├── unw_getcontext.pass.cpp │ ├── unw_resume.pass.cpp │ ├── unwind_leaffunction.pass.cpp │ └── unwind_scalable_vectors.pass.cpp ├── VERSION ├── WebAssembly.tmLanguage ├── cmake/ │ ├── DetectSyncPrimitiveSizes.cmake │ └── DetectUnwindStateSizes.cmake └── vs-chromium-project.txt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .clang-format ================================================ --- Language: Cpp AccessModifierOffset: -4 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlinesLeft: false AlignOperands: true AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: true AllowShortCaseLabelsOnASingleLine: true AllowShortFunctionsOnASingleLine: All AllowShortIfStatementsOnASingleLine: true AllowShortLoopsOnASingleLine: true AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: true BreakStringLiterals: false AlwaysBreakTemplateDeclarations: false BinPackArguments: false BinPackParameters: false BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterControlStatement: true AfterEnum: true AfterFunction: true AfterNamespace: false AfterObjCDeclaration: true AfterStruct: true AfterUnion: true BeforeCatch: true BeforeElse: true IndentBraces: false BreakBeforeBinaryOperators: All BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: true ColumnLimit: 100 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: true ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 0 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] IncludeCategories: - Regex: '^<.*\.h>' Priority: 1 - Regex: '^<.*' Priority: 2 - Regex: '.*' Priority: 3 IndentCaseLabels: false IndentWidth: 4 IndentWrappedFunctionNames: false KeepEmptyLinesAtTheStartOfBlocks: false MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: All FixNamespaceComments: false ObjCBlockIndentWidth: 4 ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: false PenaltyBreakBeforeFirstCallParameter: 1 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 200 PointerAlignment: Left SortIncludes: true SortUsingDeclarations: true SpaceAfterCStyleCast: false SpaceBeforeAssignmentOperators: true SpaceBeforeParens: Never SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Cpp11 TabWidth: 4 UseTab: ForContinuationAndIndentation ReflowComments: true # Doesn't work in older clang-format? SpaceAfterTemplateKeyword: false #IndentPPDirectives: AfterHash ... ================================================ FILE: .clang-tidy ================================================ Checks: > -*, misc-include-cleaner CheckOptions: - key: misc-include-cleaner.IgnoreHeaders value: "_.*;sys/_.*;.*pthread.*;bits/.*;asm/.*;asm-generic/.*" ================================================ FILE: .editorconfig ================================================ root = true [*.{c,cpp,h,S,asm}] indent_style = tab indent_size = 4 ================================================ FILE: .gitattributes ================================================ *.wast linguist-vendored=true ================================================ FILE: .github/workflows/build.yml ================================================ name: Build on: push: branches: [master] tags: ['v*'] pull_request: branches: [master] schedule: - cron: '0 6 * * *' # Nightly at 6 AM UTC workflow_dispatch: # WAVM_BUILD_TOOL_WORK_DIR and PACKAGE_DIR are set by a "Set build paths" step # in each job rather than as workflow-level env vars. In container jobs, # ${{ github.workspace }} resolves to the host path in run steps but the # container mount path in uses steps, so paths built from it are inconsistent # between run and upload/download-artifact steps. Using $GITHUB_WORKSPACE (the # shell variable) in a run step and writing to $GITHUB_ENV produces a path that # is correct for the current execution context and visible to all later steps. jobs: # Config detection must run on each platform (different compilers available) get-linux-x64-configs: runs-on: ubuntu-latest container: ghcr.io/wavm/builder-linux-x64:latest outputs: configs: ${{ steps.get.outputs.configs }} steps: - uses: actions/checkout@v5 - id: get run: echo "configs=$(python3 Build/dev.py list-configs | jq -R -s -c 'split("\n") | map(select(. != ""))')" >> $GITHUB_OUTPUT get-linux-aarch64-configs: runs-on: ubuntu-24.04-arm container: ghcr.io/wavm/builder-linux-aarch64:latest outputs: configs: ${{ steps.get.outputs.configs }} steps: - uses: actions/checkout@v5 - id: get run: echo "configs=$(python3 Build/dev.py list-configs | jq -R -s -c 'split("\n") | map(select(. != ""))')" >> $GITHUB_OUTPUT get-windows-x64-configs: runs-on: windows-latest outputs: configs: ${{ steps.get.outputs.configs }} steps: - uses: actions/checkout@v5 - id: get shell: bash run: echo "configs=$(python3 Build/dev.py list-configs | jq -R -s -c 'split("\n") | map(select(. != ""))')" >> $GITHUB_OUTPUT get-windows-arm64-configs: runs-on: windows-11-arm outputs: configs: ${{ steps.get.outputs.configs }} steps: - uses: actions/checkout@v5 - id: get shell: bash run: echo "configs=$(python3 Build/dev.py list-configs | jq -R -s -c 'split("\n") | map(select(. != ""))')" >> $GITHUB_OUTPUT get-macos-arm64-configs: runs-on: macos-latest outputs: configs: ${{ steps.get.outputs.configs }} steps: - uses: actions/checkout@v5 - id: get run: echo "configs=$(python3 Build/dev.py list-configs | jq -R -s -c 'split("\n") | map(select(. != ""))')" >> $GITHUB_OUTPUT get-macos-x64-configs: runs-on: macos-latest outputs: configs: ${{ steps.get.outputs.configs }} steps: - uses: actions/checkout@v5 - id: get run: echo "configs=$(python3 Build/dev.py --target-arch x64 list-configs | jq -R -s -c 'split("\n") | map(select(. != ""))')" >> $GITHUB_OUTPUT # Check if nightly release is needed (schedule only) check-nightly: if: github.event_name == 'schedule' runs-on: ubuntu-latest outputs: has-changes: ${{ steps.check.outputs.has-changes }} steps: - uses: actions/checkout@v5 with: fetch-depth: 0 - id: check env: GH_TOKEN: ${{ github.token }} run: | latest_tag=$(gh release list --limit 1 --json tagName -q '.[0].tagName' 2>/dev/null || echo "") if [ -z "$latest_tag" ]; then echo "No existing releases found; will publish nightly." echo "has-changes=true" >> $GITHUB_OUTPUT else latest_sha=$(git rev-list -n 1 "$latest_tag" 2>/dev/null || echo "") head_sha=$(git rev-parse HEAD) if [ "$head_sha" != "$latest_sha" ]; then echo "HEAD ($head_sha) differs from latest release $latest_tag ($latest_sha); will publish nightly." echo "has-changes=true" >> $GITHUB_OUTPUT else echo "HEAD ($head_sha) matches latest release $latest_tag; skipping nightly." echo "has-changes=false" >> $GITHUB_OUTPUT fi fi lint: runs-on: ubuntu-latest container: ghcr.io/wavm/builder-linux-x64:latest steps: - uses: actions/checkout@v5 - run: python3 Build/dev.py format - run: python3 Build/dev.py lint - run: python3 Build/dev.py tidy # Linux x64: build, test, and package all configs linux-x64-build-test-package: needs: get-linux-x64-configs runs-on: ubuntu-latest container: ghcr.io/wavm/builder-linux-x64:latest strategy: fail-fast: false matrix: config: ${{ fromJson(needs.get-linux-x64-configs.outputs.configs) }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Build and test run: python3 Build/dev.py test --no-lint --config ${{ matrix.config }} - name: Package run: python3 Build/dev.py package --config ${{ matrix.config }} ${{ env.PACKAGE_DIR }} - uses: actions/upload-artifact@v7 with: name: linux-x64-${{ matrix.config }}-packages path: ${{ env.PACKAGE_DIR }}/* retention-days: 1 - uses: actions/upload-artifact@v7 if: matrix.config == 'Checked' with: name: Linux-x64-coverage path: ${{ env.WAVM_BUILD_TOOL_WORK_DIR }}/coverage.lcov retention-days: 7 continue-on-error: true # Linux AArch64: build, test, and package all configs linux-aarch64-build-test-package: needs: get-linux-aarch64-configs runs-on: ubuntu-24.04-arm container: ghcr.io/wavm/builder-linux-aarch64:latest strategy: fail-fast: false matrix: config: ${{ fromJson(needs.get-linux-aarch64-configs.outputs.configs) }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Build and test run: python3 Build/dev.py test --no-lint --config ${{ matrix.config }} - name: Package run: python3 Build/dev.py package --config ${{ matrix.config }} ${{ env.PACKAGE_DIR }} - uses: actions/upload-artifact@v7 with: name: linux-aarch64-${{ matrix.config }}-packages path: ${{ env.PACKAGE_DIR }}/* retention-days: 1 - uses: actions/upload-artifact@v7 if: matrix.config == 'Checked' with: name: Linux-aarch64-coverage path: ${{ env.WAVM_BUILD_TOOL_WORK_DIR }}/coverage.lcov retention-days: 7 continue-on-error: true # Linux x64 distro testing: test LTO packages on various distros linux-x64-test-distros: needs: linux-x64-build-test-package runs-on: ubuntu-latest container: ghcr.io/wavm/tester:${{ matrix.distro }} strategy: fail-fast: false matrix: distro: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, debian-11, debian-12, fedora-40, fedora-41, almalinux-8, almalinux-9, opensuse-15.6, arch] steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: linux-x64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Extract tarball run: | mkdir -p /wavm-install tar -xzf ${{ env.PACKAGE_DIR }}/*.tar.gz -C /wavm-install - name: Test install run: python3 Build/dev.py test-install --config LTO /wavm-install # Linux x64 package format testing linux-x64-test-deb: needs: linux-x64-build-test-package runs-on: ubuntu-latest strategy: fail-fast: false matrix: distro: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, debian-11, debian-12] container: ghcr.io/wavm/tester:${{ matrix.distro }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: linux-x64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Install deb package run: | apt-get update apt-get install -y ${{ env.PACKAGE_DIR }}/*.deb - name: Test install run: python3 Build/dev.py test-install --config LTO /usr linux-x64-test-rpm: needs: linux-x64-build-test-package runs-on: ubuntu-latest strategy: fail-fast: false matrix: distro: [fedora-40, fedora-41, almalinux-8, almalinux-9, opensuse-15.6] container: ghcr.io/wavm/tester:${{ matrix.distro }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: linux-x64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Install rpm package run: rpm -i --nodeps ${{ env.PACKAGE_DIR }}/*.rpm - name: Test install run: python3 Build/dev.py test-install --config LTO /usr # Linux AArch64 distro testing: test LTO packages on various distros linux-aarch64-test-distros: needs: linux-aarch64-build-test-package runs-on: ubuntu-24.04-arm container: ghcr.io/wavm/tester:aarch64-${{ matrix.distro }} strategy: fail-fast: false matrix: distro: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, debian-11, debian-12, fedora-40, fedora-41, almalinux-8, almalinux-9, opensuse-15.6] steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: linux-aarch64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Extract tarball run: | mkdir -p /wavm-install tar -xzf ${{ env.PACKAGE_DIR }}/*.tar.gz -C /wavm-install - name: Test install run: python3 Build/dev.py test-install --config LTO /wavm-install # Linux AArch64 package format testing linux-aarch64-test-deb: needs: linux-aarch64-build-test-package runs-on: ubuntu-24.04-arm strategy: fail-fast: false matrix: distro: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, debian-11, debian-12] container: ghcr.io/wavm/tester:aarch64-${{ matrix.distro }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: linux-aarch64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Install deb package run: | apt-get update apt-get install -y ${{ env.PACKAGE_DIR }}/*.deb - name: Test install run: python3 Build/dev.py test-install --config LTO /usr linux-aarch64-test-rpm: needs: linux-aarch64-build-test-package runs-on: ubuntu-24.04-arm strategy: fail-fast: false matrix: distro: [fedora-40, fedora-41, almalinux-8, almalinux-9, opensuse-15.6] container: ghcr.io/wavm/tester:aarch64-${{ matrix.distro }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: linux-aarch64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Install rpm package run: rpm -i --nodeps ${{ env.PACKAGE_DIR }}/*.rpm - name: Test install run: python3 Build/dev.py test-install --config LTO /usr # Windows x64: build, test, and package all configs windows-x64-build-test-package: needs: get-windows-x64-configs runs-on: windows-latest strategy: fail-fast: false matrix: config: ${{ fromJson(needs.get-windows-x64-configs.outputs.configs) }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Install NSIS and apply string-length patch run: | choco install nsis -y --no-progress echo "C:\Program Files (x86)\NSIS" >> $env:GITHUB_PATH Expand-Archive -Path Build/nsis-3.04-strlen_8192.zip -DestinationPath "$env:TEMP/nsis-patch" robocopy "$env:TEMP/nsis-patch" "C:/Program Files (x86)/NSIS" /E /IS /IT if ($LASTEXITCODE -le 7) { $LASTEXITCODE = 0 } - name: Build and test run: python3 Build/dev.py test --no-lint --config ${{ matrix.config }} - name: Package run: python3 Build/dev.py package --config ${{ matrix.config }} ${{ env.PACKAGE_DIR }} - uses: actions/upload-artifact@v7 with: name: windows-x64-${{ matrix.config }}-packages path: ${{ env.PACKAGE_DIR }}/* retention-days: 1 - uses: actions/upload-artifact@v7 if: matrix.config == 'Checked' with: name: Windows-x64-coverage path: ${{ env.WAVM_BUILD_TOOL_WORK_DIR }}/coverage.lcov retention-days: 7 continue-on-error: true # Windows ARM64: build, test, and package all configs windows-arm64-build-test-package: needs: get-windows-arm64-configs runs-on: windows-11-arm strategy: fail-fast: false matrix: config: ${{ fromJson(needs.get-windows-arm64-configs.outputs.configs) }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Build and test run: python3 Build/dev.py test --no-lint --config ${{ matrix.config }} - name: Package run: python3 Build/dev.py package --config ${{ matrix.config }} ${{ env.PACKAGE_DIR }} - uses: actions/upload-artifact@v7 with: name: windows-arm64-${{ matrix.config }}-packages path: ${{ env.PACKAGE_DIR }}/* retention-days: 1 - uses: actions/upload-artifact@v7 if: matrix.config == 'Checked' with: name: Windows-arm64-coverage path: ${{ env.WAVM_BUILD_TOOL_WORK_DIR }}/coverage.lcov retention-days: 7 continue-on-error: true # Windows x64 package testing windows-x64-test-exe: needs: windows-x64-build-test-package runs-on: windows-latest steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: windows-x64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Install exe package shell: pwsh run: | $installer = Get-ChildItem "${{ env.PACKAGE_DIR }}/*.exe" | Select-Object -First 1 Start-Process -FilePath $installer.FullName -ArgumentList "/S", "/D=C:\wavm-install" -Wait - name: Test install run: python3 Build/dev.py test-install --config LTO C:\wavm-install windows-x64-test-zip: needs: windows-x64-build-test-package runs-on: windows-latest steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: windows-x64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Extract zip package shell: pwsh run: | $zip = Get-ChildItem "${{ env.PACKAGE_DIR }}/*.zip" | Select-Object -First 1 Expand-Archive -Path $zip.FullName -DestinationPath C:\wavm-install - name: Test install run: python3 Build/dev.py test-install --config LTO C:\wavm-install windows-arm64-test-zip: needs: windows-arm64-build-test-package runs-on: windows-11-arm steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: windows-arm64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Extract zip package shell: pwsh run: | $zip = Get-ChildItem "${{ env.PACKAGE_DIR }}/*.zip" | Select-Object -First 1 Expand-Archive -Path $zip.FullName -DestinationPath C:\wavm-install - name: Test install run: python3 Build/dev.py test-install --config LTO C:\wavm-install # macOS ARM64: build, test, and package all configs macos-arm64-build-test-package: needs: get-macos-arm64-configs runs-on: macos-latest strategy: fail-fast: false matrix: config: ${{ fromJson(needs.get-macos-arm64-configs.outputs.configs) }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Build and test run: python3 Build/dev.py test --no-lint --config ${{ matrix.config }} - name: Package run: python3 Build/dev.py package --config ${{ matrix.config }} ${{ env.PACKAGE_DIR }} - uses: actions/upload-artifact@v7 with: name: macos-arm64-${{ matrix.config }}-packages path: ${{ env.PACKAGE_DIR }}/* retention-days: 1 - uses: actions/upload-artifact@v7 if: matrix.config == 'Checked' with: name: macOS-arm64-coverage path: ${{ env.WAVM_BUILD_TOOL_WORK_DIR }}/coverage.lcov retention-days: 7 continue-on-error: true # macOS x64: cross-compile on ARM64 runner, test via Rosetta macos-x64-build-test-package: needs: get-macos-x64-configs runs-on: macos-latest strategy: fail-fast: false matrix: config: ${{ fromJson(needs.get-macos-x64-configs.outputs.configs) }} steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Build and test run: python3 Build/dev.py --target-arch x64 test --config ${{ matrix.config }} - name: Package run: python3 Build/dev.py --target-arch x64 package --config ${{ matrix.config }} ${{ env.PACKAGE_DIR }} - uses: actions/upload-artifact@v7 with: name: macos-x64-${{ matrix.config }}-packages path: ${{ env.PACKAGE_DIR }}/* retention-days: 1 - uses: actions/upload-artifact@v7 if: matrix.config == 'Checked' with: name: macOS-x64-coverage path: ${{ env.WAVM_BUILD_TOOL_WORK_DIR }}/coverage.lcov retention-days: 7 continue-on-error: true # macOS ARM64 package testing macos-arm64-test-tgz: needs: macos-arm64-build-test-package runs-on: macos-latest steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: macos-arm64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Extract tarball run: | mkdir -p ~/wavm-install tar -xzf ${{ env.PACKAGE_DIR }}/*.tar.gz -C ~/wavm-install - name: Test install run: python3 Build/dev.py test-install --config LTO ~/wavm-install # macOS x64 package testing (runs via Rosetta) macos-x64-test-tgz: needs: macos-x64-build-test-package runs-on: macos-latest steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - uses: actions/download-artifact@v8 with: name: macos-x64-LTO-packages path: ${{ env.PACKAGE_DIR }} - name: Extract tarball run: | mkdir -p ~/wavm-install tar -xzf ${{ env.PACKAGE_DIR }}/*.tar.gz -C ~/wavm-install - name: Test install run: python3 Build/dev.py --target-arch x64 test-install --config LTO ~/wavm-install # Merge coverage from all platforms coverage-merge: if: always() needs: - linux-x64-build-test-package - linux-aarch64-build-test-package - windows-x64-build-test-package - windows-arm64-build-test-package - macos-arm64-build-test-package - macos-x64-build-test-package runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Set build paths shell: bash run: | echo "WAVM_BUILD_TOOL_WORK_DIR=$GITHUB_WORKSPACE/_working" >> "$GITHUB_ENV" echo "PACKAGE_DIR=$GITHUB_WORKSPACE/_packages" >> "$GITHUB_ENV" - name: Install lcov run: sudo apt-get update && sudo apt-get install -y lcov - uses: actions/download-artifact@v8 with: pattern: '*-coverage' path: ${{ runner.temp }}/coverage-artifacts continue-on-error: true - name: Merge coverage run: | shopt -s nullglob globstar lcov_files=(${{ runner.temp }}/coverage-artifacts/**/*.lcov) if [ ${#lcov_files[@]} -gt 0 ]; then python3 Build/dev.py merge-coverage --output-dir ${{ runner.temp }}/combined-coverage "${lcov_files[@]}" else echo "No coverage files found, skipping merge" fi - uses: actions/upload-artifact@v7 if: success() with: name: combined-coverage-report path: ${{ runner.temp }}/combined-coverage/ if-no-files-found: ignore retention-days: 7 continue-on-error: true # Publish release (version tags or nightly) publish: if: >- startsWith(github.ref, 'refs/tags/') || (github.event_name == 'schedule' && needs.check-nightly.outputs.has-changes == 'true') needs: - check-nightly - linux-x64-test-distros - linux-x64-test-deb - linux-x64-test-rpm - linux-aarch64-test-distros - linux-aarch64-test-deb - linux-aarch64-test-rpm - windows-x64-test-exe - windows-x64-test-zip - windows-arm64-test-zip - macos-arm64-test-tgz - macos-x64-test-tgz runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v5 with: sparse-checkout: VERSION sparse-checkout-cone-mode: false - name: Determine release info id: release-info run: | if [[ "$GITHUB_REF" == refs/tags/* ]]; then tag="${GITHUB_REF#refs/tags/}" echo "tag=$tag" >> $GITHUB_OUTPUT echo "version=$tag" >> $GITHUB_OUTPUT expected="${tag#v}" actual="$(cat VERSION)" if [ "$expected" != "$actual" ]; then echo "::error::VERSION file ($actual) does not match tag ($tag)" exit 1 fi else date_str="$(date -u +%Y-%m-%d)" echo "tag=nightly/${date_str}" >> $GITHUB_OUTPUT echo "version=nightly-${date_str}" >> $GITHUB_OUTPUT fi - uses: actions/download-artifact@v8 with: pattern: '*-LTO-*-packages' path: artifacts - name: Rename packages with platform and version run: | version="${{ steps.release-info.outputs.version }}" for dir in artifacts/*/; do dirname="$(basename "$dir")" platform_arch="${dirname%-LTO-*-packages}" for f in "$dir"wavm-package.*; do [ -e "$f" ] || continue ext="${f#*wavm-package}" mv "$f" "artifacts/wavm-${version}-${platform_arch}${ext}" done done find artifacts -mindepth 1 -type d -empty -delete ls -la artifacts/ - uses: softprops/action-gh-release@v2 with: tag_name: ${{ steps.release-info.outputs.tag }} target_commitish: ${{ github.sha }} files: artifacts/* prerelease: ${{ !startsWith(github.ref, 'refs/tags/') }} generate_release_notes: true ================================================ FILE: .gitignore ================================================ .claude CLAUDE.md **/__pycache__ # dev.py default working directory .working ================================================ FILE: Benchmarks/blake2b-memory64.wast ================================================ ;; Blake2b hash function (module (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") i64 4096 4096) (global $numIterations i32 (i32.const 3)) ;; IV array (global $ivAddress i64 (i64.const 0)) ;; 64 byte IV array (data (i64.const 0) "\08\c9\bc\f3\67\e6\09\6a" "\3b\a7\ca\84\85\ae\67\bb" "\2b\f8\94\fe\72\f3\6e\3c" "\f1\36\1d\5f\3a\f5\4f\a5" "\d1\82\e6\ad\7f\52\0e\51" "\1f\6c\3e\2b\8c\68\05\9b" "\6b\bd\41\fb\ab\d9\83\1f" "\79\21\7e\13\19\cd\e0\5b" ) (global $pAddress i64 (i64.const 64)) ;; 64 byte Param struct (data (i64.const 64) "\40" ;; digest_length "\00" ;; key_length "\01" ;; fanout "\01" ;; depth "\00\00\00\00" ;; leaf_length "\00\00\00\00" ;; node_offset "\00\00\00\00" ;; xof_length "\00" ;; node_depth "\00" ;; inner_length "\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; reserved "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; salt "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; personal ) ;; lookup table for converting a nibble to a hexit (global $hexitTable i64 (i64.const 128)) (data (i64.const 128) "0123456789abcdef") (global $dataAddressAddress i64 (i64.const 144)) ;; 8 bytes (global $dataNumBytes i64 (i64.const 134217728)) (global $outputStringAddress i64 (i64.const 152)) ;; 129 bytes (global $outputIOVecAddress i64 (i64.const 284)) ;; 8 bytes (data (i64.const 284) "\98\00\00\00" ;; buf = 152 "\81\00\00\00" ;; buf_len = 129 ) (global $dynamicTopAddressAddress i64 (i64.const 292)) ;; 8 bytes (data (i64.const 292) "\00\08\00\00") ;; 2048 (global $stateAddress i64 (i64.const 1024)) ;; 128 bytes (global $stateNumBytes i64 (i64.const 128)) (func $sbrk (param $numBytes i64) (result i64) (local $resultAddress i64) (local.set $resultAddress (i64.load (global.get $dynamicTopAddressAddress))) (i64.store (global.get $dynamicTopAddressAddress) (i64.add (local.get $resultAddress) (local.get $numBytes)) ) (local.get $resultAddress) ) (func $compress (param $blockAddress i64) (local $row1l v128) (local $row1h v128) (local $row2l v128) (local $row2h v128) (local $row3l v128) (local $row3h v128) (local $row4l v128) (local $row4h v128) (local $b0 v128) (local $b1 v128) (local $t0 v128) (local $t1 v128) ;; Initialize the state (local.set $row1l (v128.load offset=0 (global.get $stateAddress))) (local.set $row1h (v128.load offset=16 (global.get $stateAddress))) (local.set $row2l (v128.load offset=32 (global.get $stateAddress))) (local.set $row2h (v128.load offset=48 (global.get $stateAddress))) (local.set $row3l (v128.load offset=0 (global.get $ivAddress))) (local.set $row3h (v128.load offset=16 (global.get $ivAddress))) (local.set $row4l (v128.xor (v128.load offset=32 (global.get $ivAddress)) (v128.load offset=64 (global.get $stateAddress)))) (local.set $row4h (v128.xor (v128.load offset=48 (global.get $ivAddress)) (v128.load offset=80 (global.get $stateAddress)))) ;; Round 0 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 1 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 (v128.load offset=0 (local.get $blockAddress)) (v128.const i64x2 0 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 2 (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 3 (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.bitselect (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 4 (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (v128.bitselect (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.bitselect (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.bitselect (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 5 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 6 (local.set $b0 (v128.bitselect (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 (v128.load offset=64 (local.get $blockAddress)) (v128.const i64x2 0 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 7 (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 8 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.load offset=96 (local.get $blockAddress))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.load offset=32 (local.get $blockAddress))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 9 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 10 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 11 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 (v128.load offset=0 (local.get $blockAddress)) (v128.const i64x2 0 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Update the hash (local.set $row1l (v128.xor (local.get $row3l) (local.get $row1l))) (local.set $row1h (v128.xor (local.get $row3h) (local.get $row1h))) (v128.store offset=0 (global.get $stateAddress) (v128.xor (v128.load offset=0 (global.get $stateAddress)) (local.get $row1l))) (v128.store offset=16 (global.get $stateAddress) (v128.xor (v128.load offset=16 (global.get $stateAddress)) (local.get $row1h))) (local.set $row2l (v128.xor (local.get $row4l) (local.get $row2l))) (local.set $row2h (v128.xor (local.get $row4h) (local.get $row2h))) (v128.store offset=32 (global.get $stateAddress) (v128.xor (v128.load offset=32 (global.get $stateAddress)) (local.get $row2l))) (v128.store offset=48 (global.get $stateAddress) (v128.xor (v128.load offset=48 (global.get $stateAddress)) (local.get $row2h))) ) (func $memsetAligned (param $address i64) (param $value i32) (param $numBytes i64) (local $value128 v128) (local $endAddress i64) (local $endAddress128 i64) (local.set $value128 (i8x16.splat (local.get $value))) (local.set $endAddress (i64.add (local.get $address) (local.get $numBytes))) (local.set $endAddress128 (i64.sub (local.get $endAddress) (i64.const 16))) block $loop128End loop $loop128 (br_if $loop128End (i64.gt_u (local.get $address) (local.get $endAddress128))) (v128.store align=16 (local.get $address) (local.get $value128)) (local.set $address (i64.add (local.get $address) (i64.const 16))) br $loop128 end end block $loopEnd loop $loop (br_if $loopEnd (i64.ge_u (local.get $address) (local.get $endAddress))) (i32.store8 (local.get $address) (local.get $value)) (local.set $address (i64.add (local.get $address) (i64.const 1))) br $loop end end ) (func $blake2b (param $inputAddress i64) (param $numBytes i64) (local $stateAddress i64) (local $temp i64) ;; zero the state (call $memsetAligned (global.get $stateAddress) (i32.const 0) (global.get $stateNumBytes)) ;; initialize the hash to the first 64 bytes of the param struct XORed with the contents of IV (v128.store offset=0 (global.get $stateAddress) (v128.xor (v128.load offset=0 (global.get $pAddress)) (v128.load offset=0 (global.get $ivAddress)))) (v128.store offset=16 (global.get $stateAddress) (v128.xor (v128.load offset=16 (global.get $pAddress)) (v128.load offset=16 (global.get $ivAddress)))) (v128.store offset=32 (global.get $stateAddress) (v128.xor (v128.load offset=32 (global.get $pAddress)) (v128.load offset=32 (global.get $ivAddress)))) (v128.store offset=48 (global.get $stateAddress) (v128.xor (v128.load offset=48 (global.get $pAddress)) (v128.load offset=48 (global.get $ivAddress)))) block $loopEnd loop $loop (br_if $loopEnd (i64.lt_u (local.get $numBytes) (i64.const 128))) (local.set $temp (i64.add (i64.load offset=64 (global.get $stateAddress)) (i64.const 128))) (i64.store offset=64 (global.get $stateAddress) (local.get $temp)) (i64.store offset=72 (global.get $stateAddress) (i64.add (i64.load offset=72 (global.get $stateAddress)) (i64.extend_i32_u (i64.lt_u (local.get $temp) (i64.const 128))))) (if (i64.eq (local.get $numBytes) (i64.const 128)) (i64.store offset=80 (global.get $stateAddress) (i64.const 0xffffffffffffffff))) (call $compress (global.get $stateAddress) (local.get $inputAddress)) (local.set $inputAddress (i64.add (local.get $inputAddress) (i64.const 128))) (local.set $numBytes (i64.sub (local.get $numBytes) (i64.const 128))) br $loop end end ) (func $main (export "_start") (local $i i32) (local $byte i32) ;; Initialize the test data. (i64.store (global.get $dataAddressAddress) (call $sbrk (global.get $dataNumBytes))) (local.set $i (i32.const 0)) loop $initDataLoop (i32.store (i64.add (i64.load (global.get $dataAddressAddress)) (i64.extend_i32_u (local.get $i))) (local.get $i)) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $initDataLoop (i64.lt_u (i64.extend_i32_u (local.get $i)) (global.get $dataNumBytes))) end ;; Hash the test data enough times to dilute all the non-hash components of the timing. (local.set $i (i32.const 0)) loop $iterLoop (call $blake2b (i64.load (global.get $dataAddressAddress)) (global.get $dataNumBytes)) (local.set $i (i32.add (local.get $i) (i32.const 1))) (br_if $iterLoop (i32.lt_u (local.get $i) (global.get $numIterations))) end ;; Create a hexadecimal string from the hash. (local.set $i (i32.const 0)) loop $loop (local.set $byte (i32.load8_u (i64.add (global.get $stateAddress) (i64.extend_i32_u (local.get $i))))) (i32.store8 offset=0 (i64.add (global.get $outputStringAddress) (i64.shl (i64.extend_i32_u (local.get $i)) (i64.const 1))) (i32.load8_u (i64.add (global.get $hexitTable) (i64.and (i64.extend_i32_u (local.get $byte)) (i64.const 0x0f))))) (i32.store8 offset=1 (i64.add (global.get $outputStringAddress) (i64.shl (i64.extend_i32_u (local.get $i)) (i64.const 1))) (i32.load8_u (i64.add (global.get $hexitTable) (i64.shr_u (i64.extend_i32_u (local.get $byte)) (i64.const 4))))) (local.set $i (i32.add (local.get $i) (i32.const 1))) (br_if $loop (i32.lt_u (local.get $i) (i32.const 64))) end (i32.store8 offset=128 (global.get $outputStringAddress) (i32.const 10)) ;; Print the string to the output. (call $wasi_fd_write (i32.const 1) ;; fd 1 (i32.wrap_i64 (global.get $outputIOVecAddress)) ;; iovec address (i32.const 1) ;; 1 iovec (i32.wrap_i64 (i64.add (global.get $outputIOVecAddress) (i64.const 4))) ;; write the number of written bytes back to the iovec buf_len. ) ;; Pass the result of wasi_fd_write to wasi_proc_exit call $wasi_proc_exit ) (func (export "establishStackSpace") (param i32 i32) (nop)) ) ================================================ FILE: Benchmarks/blake2b.wast ================================================ ;; Blake2b hash function (module (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 4096) (global $numIterations i32 (i32.const 3)) ;; IV array (global $ivAddress i32 (i32.const 0)) ;; 64 byte IV array (data (i32.const 0) "\08\c9\bc\f3\67\e6\09\6a" "\3b\a7\ca\84\85\ae\67\bb" "\2b\f8\94\fe\72\f3\6e\3c" "\f1\36\1d\5f\3a\f5\4f\a5" "\d1\82\e6\ad\7f\52\0e\51" "\1f\6c\3e\2b\8c\68\05\9b" "\6b\bd\41\fb\ab\d9\83\1f" "\79\21\7e\13\19\cd\e0\5b" ) (global $pAddress i32 (i32.const 64)) ;; 64 byte Param struct (data (i32.const 64) "\40" ;; digest_length "\00" ;; key_length "\01" ;; fanout "\01" ;; depth "\00\00\00\00" ;; leaf_length "\00\00\00\00" ;; node_offset "\00\00\00\00" ;; xof_length "\00" ;; node_depth "\00" ;; inner_length "\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; reserved "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; salt "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; personal ) ;; lookup table for converting a nibble to a hexit (global $hexitTable i32 (i32.const 128)) (data (i32.const 128) "0123456789abcdef") (global $dataAddressAddress i32 (i32.const 144)) ;; 4 bytes (global $dataNumBytes i32 (i32.const 134217728)) (global $outputStringAddress i32 (i32.const 148)) ;; 129 bytes (global $outputIOVecAddress i32 (i32.const 280)) ;; 8 bytes (data (i32.const 280) "\94\00\00\00" ;; buf = 148 "\81\00\00\00" ;; buf_len = 129 ) (global $dynamicTopAddressAddress i32 (i32.const 288)) ;; 4 bytes (data (i32.const 288) "\00\08\00\00") ;; 2048 (global $stateAddress i32 (i32.const 1024)) ;; 128 bytes (global $stateNumBytes i32 (i32.const 128)) (func $sbrk (param $numBytes i32) (result i32) (local $resultAddress i32) (local.set $resultAddress (i32.load (global.get $dynamicTopAddressAddress))) (i32.store (global.get $dynamicTopAddressAddress) (i32.add (local.get $resultAddress) (local.get $numBytes)) ) (local.get $resultAddress) ) (func $compress (param $blockAddress i32) (local $row1l v128) (local $row1h v128) (local $row2l v128) (local $row2h v128) (local $row3l v128) (local $row3h v128) (local $row4l v128) (local $row4h v128) (local $b0 v128) (local $b1 v128) (local $t0 v128) (local $t1 v128) ;; Initialize the state (local.set $row1l (v128.load offset=0 (global.get $stateAddress))) (local.set $row1h (v128.load offset=16 (global.get $stateAddress))) (local.set $row2l (v128.load offset=32 (global.get $stateAddress))) (local.set $row2h (v128.load offset=48 (global.get $stateAddress))) (local.set $row3l (v128.load offset=0 (global.get $ivAddress))) (local.set $row3h (v128.load offset=16 (global.get $ivAddress))) (local.set $row4l (v128.xor (v128.load offset=32 (global.get $ivAddress)) (v128.load offset=64 (global.get $stateAddress)))) (local.set $row4h (v128.xor (v128.load offset=48 (global.get $ivAddress)) (v128.load offset=80 (global.get $stateAddress)))) ;; Round 0 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 1 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 (v128.load offset=0 (local.get $blockAddress)) (v128.const i64x2 0 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 2 (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 3 (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.bitselect (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 4 (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (v128.bitselect (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.bitselect (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.bitselect (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 5 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.bitselect (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 6 (local.set $b0 (v128.bitselect (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 (v128.load offset=64 (local.get $blockAddress)) (v128.const i64x2 0 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 7 (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 8 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (v128.load offset=96 (local.get $blockAddress))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (v128.bitselect (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $b1 (v128.load offset=32 (local.get $blockAddress))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 9 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (v128.bitselect (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)) (v128.const i64x2 0xffffffffffffffff 0))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=16 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=0 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 10 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=0 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=32 (local.get $blockAddress)) (v128.load offset=48 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=80 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Round 11 (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=112 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=64 (local.get $blockAddress)) (v128.load offset=96 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=64 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=112 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) (local.set $b0 (i8x16.shuffle 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 (v128.load offset=0 (local.get $blockAddress)) (v128.const i64x2 0 0))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=80 (local.get $blockAddress)) (v128.load offset=32 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2l) (v128.const i64x2 0 0))) (local.set $row2h (i8x16.shuffle 3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10 (local.get $row2h) (v128.const i64x2 0 0))) (local.set $b0 (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 (v128.load offset=96 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $b1 (i8x16.shuffle 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 (v128.load offset=48 (local.get $blockAddress)) (v128.load offset=16 (local.get $blockAddress)))) (local.set $row1l (i64x2.add (i64x2.add (local.get $row1l) (local.get $b0)) (local.get $row2l))) (local.set $row1h (i64x2.add (i64x2.add (local.get $row1h) (local.get $b1)) (local.get $row2h))) (local.set $row4l (v128.xor (local.get $row4l) (local.get $row1l))) (local.set $row4h (v128.xor (local.get $row4h) (local.get $row1h))) (local.set $row4l (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4l) (v128.const i64x2 0 0))) (local.set $row4h (i8x16.shuffle 2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9 (local.get $row4h) (v128.const i64x2 0 0))) (local.set $row3l (i64x2.add (local.get $row3l) (local.get $row4l))) (local.set $row3h (i64x2.add (local.get $row3h) (local.get $row4h))) (local.set $row2l (v128.xor (local.get $row2l) (local.get $row3l))) (local.set $row2h (v128.xor (local.get $row2h) (local.get $row3h))) (local.set $row2l (v128.xor (i64x2.shr_u (local.get $row2l) (i32.const 63)) (i64x2.add (local.get $row2l) (local.get $row2l)))) (local.set $row2h (v128.xor (i64x2.shr_u (local.get $row2h) (i32.const 63)) (i64x2.add (local.get $row2h) (local.get $row2h)))) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2l) (local.get $row2h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row2h) (local.get $row2l))) (local.set $row2l (local.get $t0)) (local.set $row2h (local.get $t1)) (local.set $t0 (local.get $row3l)) (local.set $row3l (local.get $row3h)) (local.set $row3h (local.get $t0)) (local.set $t0 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4l) (local.get $row4h))) (local.set $t1 (i8x16.shuffle 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 (local.get $row4h) (local.get $row4l))) (local.set $row4l (local.get $t1)) (local.set $row4h (local.get $t0)) ;; Update the hash (local.set $row1l (v128.xor (local.get $row3l) (local.get $row1l))) (local.set $row1h (v128.xor (local.get $row3h) (local.get $row1h))) (v128.store offset=0 (global.get $stateAddress) (v128.xor (v128.load offset=0 (global.get $stateAddress)) (local.get $row1l))) (v128.store offset=16 (global.get $stateAddress) (v128.xor (v128.load offset=16 (global.get $stateAddress)) (local.get $row1h))) (local.set $row2l (v128.xor (local.get $row4l) (local.get $row2l))) (local.set $row2h (v128.xor (local.get $row4h) (local.get $row2h))) (v128.store offset=32 (global.get $stateAddress) (v128.xor (v128.load offset=32 (global.get $stateAddress)) (local.get $row2l))) (v128.store offset=48 (global.get $stateAddress) (v128.xor (v128.load offset=48 (global.get $stateAddress)) (local.get $row2h))) ) (func $memsetAligned (param $address i32) (param $value i32) (param $numBytes i32) (local $value128 v128) (local $endAddress i32) (local $endAddress128 i32) (local.set $value128 (i8x16.splat (local.get $value))) (local.set $endAddress (i32.add (local.get $address) (local.get $numBytes))) (local.set $endAddress128 (i32.sub (local.get $endAddress) (i32.const 16))) block $loop128End loop $loop128 (br_if $loop128End (i32.gt_u (local.get $address) (local.get $endAddress128))) (v128.store align=16 (local.get $address) (local.get $value128)) (local.set $address (i32.add (local.get $address) (i32.const 16))) br $loop128 end end block $loopEnd loop $loop (br_if $loopEnd (i32.ge_u (local.get $address) (local.get $endAddress))) (i32.store8 (local.get $address) (local.get $value)) (local.set $address (i32.add (local.get $address) (i32.const 1))) br $loop end end ) (func $blake2b (param $inputAddress i32) (param $numBytes i32) (local $stateAddress i32) (local $temp i64) ;; zero the state (call $memsetAligned (global.get $stateAddress) (i32.const 0) (global.get $stateNumBytes)) ;; initialize the hash to the first 64 bytes of the param struct XORed with the contents of IV (v128.store offset=0 (global.get $stateAddress) (v128.xor (v128.load offset=0 (global.get $pAddress)) (v128.load offset=0 (global.get $ivAddress)))) (v128.store offset=16 (global.get $stateAddress) (v128.xor (v128.load offset=16 (global.get $pAddress)) (v128.load offset=16 (global.get $ivAddress)))) (v128.store offset=32 (global.get $stateAddress) (v128.xor (v128.load offset=32 (global.get $pAddress)) (v128.load offset=32 (global.get $ivAddress)))) (v128.store offset=48 (global.get $stateAddress) (v128.xor (v128.load offset=48 (global.get $pAddress)) (v128.load offset=48 (global.get $ivAddress)))) block $loopEnd loop $loop (br_if $loopEnd (i32.lt_u (local.get $numBytes) (i32.const 128))) (local.set $temp (i64.add (i64.load offset=64 (global.get $stateAddress)) (i64.const 128))) (i64.store offset=64 (global.get $stateAddress) (local.get $temp)) (i64.store offset=72 (global.get $stateAddress) (i64.add (i64.load offset=72 (global.get $stateAddress)) (i64.extend_i32_u (i64.lt_u (local.get $temp) (i64.const 128))))) (if (i32.eq (local.get $numBytes) (i32.const 128)) (i64.store offset=80 (global.get $stateAddress) (i64.const 0xffffffffffffffff))) (call $compress (global.get $stateAddress) (local.get $inputAddress)) (local.set $inputAddress (i32.add (local.get $inputAddress) (i32.const 128))) (local.set $numBytes (i32.sub (local.get $numBytes) (i32.const 128))) br $loop end end ) (func $main (export "_start") (local $i i32) (local $byte i32) ;; Initialize the test data. (i32.store (global.get $dataAddressAddress) (call $sbrk (global.get $dataNumBytes))) (local.set $i (i32.const 0)) loop $initDataLoop (i32.store (i32.add (i32.load (global.get $dataAddressAddress)) (local.get $i)) (local.get $i)) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $initDataLoop (i32.lt_u (local.get $i) (global.get $dataNumBytes))) end ;; Hash the test data enough times to dilute all the non-hash components of the timing. (local.set $i (i32.const 0)) loop $iterLoop (call $blake2b (i32.load (global.get $dataAddressAddress)) (global.get $dataNumBytes)) (local.set $i (i32.add (local.get $i) (i32.const 1))) (br_if $iterLoop (i32.lt_u (local.get $i) (global.get $numIterations))) end ;; Create a hexadecimal string from the hash. (local.set $i (i32.const 0)) loop $loop (local.set $byte (i32.load8_u (i32.add (global.get $stateAddress) (local.get $i)))) (i32.store8 offset=0 (i32.add (global.get $outputStringAddress) (i32.shl (local.get $i) (i32.const 1))) (i32.load8_u (i32.add (global.get $hexitTable) (i32.and (local.get $byte) (i32.const 0x0f))))) (i32.store8 offset=1 (i32.add (global.get $outputStringAddress) (i32.shl (local.get $i) (i32.const 1))) (i32.load8_u (i32.add (global.get $hexitTable) (i32.shr_u (local.get $byte) (i32.const 4))))) (local.set $i (i32.add (local.get $i) (i32.const 1))) (br_if $loop (i32.lt_u (local.get $i) (i32.const 64))) end (i32.store8 offset=128 (global.get $outputStringAddress) (i32.const 10)) ;; Print the string to the output. (call $wasi_fd_write (i32.const 1) ;; fd 1 (global.get $outputIOVecAddress) ;; iovec address (i32.const 1) ;; 1 iovec (i32.add (global.get $outputIOVecAddress) (i32.const 4)) ;; write the number of written bytes back to the iovec buf_len. ) ;; Pass the result of wasi_fd_write to wasi_proc_exit call $wasi_proc_exit ) (func (export "establishStackSpace") (param i32 i32) (nop)) ) ================================================ FILE: Build/dev.py ================================================ #!/usr/bin/env python3 """Build, test, and maintain WAVM across multiple configurations.""" import argparse import os import sys from pathlib import Path from lib.output import output from lib.context import CommandContext import lib.platform as platform from lib.benchmark import register_benchmark_commands from lib.build import register_list_configs, register_package from lib.format import register_format from lib.lint import register_lint from lib.coverage import register_merge_coverage from lib.fuzz import register_fuzz_commands from lib.run import register_run from lib.test import register_test, register_test_install from lib.tidy import register_tidy from lib.workspace import register_setup_workspace WAVM_SOURCE_DIR = Path(__file__).resolve().parent.parent def get_default_work_dir() -> Path: env_dir = os.environ.get("WAVM_BUILD_TOOL_WORK_DIR") if env_dir: return Path(env_dir) return WAVM_SOURCE_DIR / ".working" def init_work_dir(work_dir: Path) -> Path: """Resolve and create the working directory.""" work_dir = work_dir.resolve() work_dir.mkdir(parents=True, exist_ok=True) return work_dir def main() -> int: # Don't let the host's object cache leak into test runs. os.environ.pop("WAVM_OBJECT_CACHE_DIR", None) os.environ.pop("WAVM_OBJECT_CACHE_MAX_MB", None) # Create main parser parser = argparse.ArgumentParser( description="Build and test WAVM", formatter_class=argparse.RawDescriptionHelpFormatter, ) # Global arguments parser.add_argument( "--work-dir", default=get_default_work_dir(), help="Working directory for downloads and builds (default: $WAVM_BUILD_TOOL_WORK_DIR or .working/)", ) parser.add_argument( "--verbose", "-v", action="store_true", help="Print verbose output", ) parser.add_argument( "--llvm-source", action="store_true", help="Build LLVM from source instead of downloading pre-built binaries", ) parser.add_argument( "--offline", action="store_true", help="Skip all network operations; use previously downloaded/cloned data", ) parser.add_argument( "--target-arch", metavar="ARCH", choices=["x64", "arm64"], help="Target architecture (x64 or arm64). Defaults to host architecture. " "Used for cross-compilation on macOS (builds x86-64 on ARM64 via Rosetta).", ) # Each register_* function lives next to its command handler. subparsers = parser.add_subparsers(dest="command", required=True) register_test(subparsers) register_test_install(subparsers) register_format(subparsers) register_lint(subparsers) register_tidy(subparsers) register_package(subparsers) register_merge_coverage(subparsers) register_setup_workspace(subparsers) register_list_configs(subparsers) register_fuzz_commands(subparsers) register_benchmark_commands(subparsers) register_run(subparsers) args = parser.parse_args() # Set output options output.verbose_enabled = args.verbose # Set target architecture if specified (must be before init_env) if args.target_arch: platform.set_target_arch(args.target_arch) # Initialize the environment (merges MSVC vars on Windows). platform.init_env() # Resolve working directory once for all commands. work_dir = init_work_dir(Path(args.work_dir)) ctx = CommandContext(work_dir=work_dir, source_dir=WAVM_SOURCE_DIR) try: return args.func(args, ctx) except RuntimeError as e: output.error(f"Fatal error: {e}") return 1 if __name__ == "__main__": sys.exit(main()) ================================================ FILE: Build/lib/__init__.py ================================================ # Build library modules ================================================ FILE: Build/lib/benchmark.py ================================================ """Benchmark execution, result collection, and comparison.""" import argparse import json import math import platform import time from dataclasses import dataclass, field from datetime import datetime, timezone from pathlib import Path from typing import Optional from .build import build_single_config from .context import CommandContext from .output import output from .platform import EXE_EXT, get_host_arch, get_wavm_bin_path, run_command from .task_graph import Task, TaskResult, execute from .test_def import TestDef, TestStep from .wasi import DownloadWasiSdkTask # ============================================================================= # Benchmark Program Definitions # ============================================================================= @dataclass class BenchmarkProgram: """Definition of a benchmark program.""" name: str path: str # Relative to WAVM source dir args: list[str] = field(default_factory=list) # Arguments passed to the WASI program wavm_run_args: list[str] = field(default_factory=list) # Extra args for `wavm run` expected_output: Optional[str] = None # Regex matched against test output (re.search) expected_binary_output_sha256: Optional[str] = None # SHA-256 hex digest of expected stdout bytes _CLBG = "ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame" _BLAKE2B_HASH = ( "be4b115872d4373ef8c1b2f40f53680b33aa6c553dc9e0737c4ce3c3cbe0e34b" "0df31acb59a4d6492981c6a6c6a6f49f595bce7b7edf45bd4a08410b847f34ab" ) BENCHMARK_PROGRAMS: list[BenchmarkProgram] = [ BenchmarkProgram(name="blake2b", path="Benchmarks/blake2b.wast", wavm_run_args=["--abi=wasi"], expected_output=_BLAKE2B_HASH), BenchmarkProgram(name="blake2b-memory64", path="Benchmarks/blake2b-memory64.wast", wavm_run_args=["--abi=wasi", "--enable", "memory64"], expected_output=_BLAKE2B_HASH), BenchmarkProgram(name="zlib", path="Benchmarks/zlib.wasm", expected_output=r"sizes: 100000,25906\nok\."), BenchmarkProgram(name="coremark", path="Benchmarks/coremark.wasm", args=["0", "0", "0x66", "20000"], expected_output=r"seedcrc\s+: 0xe9f5"), BenchmarkProgram(name="fannkuch-redux", path="Benchmarks/fannkuch-redux.wasm", args=["10"], expected_output=r"Pfannkuchen\(10\) = 38"), BenchmarkProgram(name="nbody", path="Benchmarks/nbody.wasm", args=["5000000"], expected_output=r"-0\.169075164\n-0\.169083134"), BenchmarkProgram(name="spectral-norm", path="Benchmarks/spectral-norm.wasm", args=["2000"], expected_output=r"1\.274224152"), BenchmarkProgram(name="mandelbrot", path="Benchmarks/mandelbrot.wasm", args=["4000"], expected_binary_output_sha256="d7c903ec07c9bbbb7747b58cd1f174d7ba88b61ad172fb306288bd0fe9140a07"), BenchmarkProgram(name="fasta", path="Benchmarks/fasta.wasm", args=["2500000"], expected_output=r">ONE Homo sapiens alu"), BenchmarkProgram(name="binary-trees", path="Benchmarks/binary-trees.wasm", args=["17"], expected_output=r"long lived tree of depth 17\s+check: 262143"), ] def get_benchmark_test_defs() -> list[TestDef]: """Generate TestDefs for running benchmark programs as smoke tests.""" defs = [] for p in BENCHMARK_PROGRAMS: command = ["{wavm_bin}", "run", *p.wavm_run_args, "{source_dir}/" + p.path, *p.args] safe_name = p.name.replace("-", "_") if p.expected_binary_output_sha256: step = TestStep(command=command, expected_binary_output_sha256=p.expected_binary_output_sha256) elif p.expected_output: step = TestStep(command=command, expected_output=p.expected_output) else: step = TestStep(command=command) defs.append( TestDef( name=f"Benchmarks_{safe_name}", steps=[step], ) ) return defs # ============================================================================= # Benchmark Source Compilation # ============================================================================= @dataclass class BenchmarkSource: """A compilable benchmark, potentially with multiple source files.""" name: str src_paths: list[str] # Relative to workspace root wasm_path: str # Relative to WAVM source dir include_dirs: list[str] = field(default_factory=list) # Relative to workspace root extra_flags: list[str] = field(default_factory=list) def _clbg_source(name: str, extra_flags: Optional[list[str]] = None) -> BenchmarkSource: """Helper for single-file Computer Language Benchmarks Game sources.""" return BenchmarkSource( name=name, src_paths=[f"{_CLBG}/{name}/{name}.c"], wasm_path=f"Benchmarks/{name}.wasm", extra_flags=extra_flags or [], ) BENCHMARK_SOURCES: list[BenchmarkSource] = [ BenchmarkSource( name="coremark", src_paths=[ "ThirdParty/Benchmarks/coremark/core_main.c", "ThirdParty/Benchmarks/coremark/core_list_join.c", "ThirdParty/Benchmarks/coremark/core_matrix.c", "ThirdParty/Benchmarks/coremark/core_state.c", "ThirdParty/Benchmarks/coremark/core_util.c", "ThirdParty/Benchmarks/coremark/simple/core_portme.c", ], wasm_path="Benchmarks/coremark.wasm", include_dirs=[ "ThirdParty/Benchmarks/coremark", "ThirdParty/Benchmarks/coremark/simple", ], extra_flags=[ "-DPERFORMANCE_RUN=1", "-DSEED_METHOD=SEED_ARG", "-DITERATIONS=0", '-DFLAGS_STR="wasi-sdk -O2"', "-D_WASI_EMULATED_PROCESS_CLOCKS", "-lwasi-emulated-process-clocks", ], ), _clbg_source("fannkuch-redux"), _clbg_source("nbody", extra_flags=["-lm"]), _clbg_source("spectral-norm", extra_flags=["-lm"]), _clbg_source("mandelbrot"), _clbg_source("fasta"), _clbg_source("binary-trees", extra_flags=["-lm"]), ] class CompileBenchmarkTask(Task): """Compile a benchmark to WASI .wasm (may have multiple source files).""" def __init__( self, bench_src: BenchmarkSource, source_dir: Path, wasi_sdk_task: DownloadWasiSdkTask, ): super().__init__( name=f"compile_benchmark_{bench_src.name}", description=f"Compile benchmark: {bench_src.name}", dependencies=[wasi_sdk_task], ) self.bench_src = bench_src self.source_dir = source_dir self.wasi_sdk_task = wasi_sdk_task def run(self) -> TaskResult: wasm_file = self.source_dir / self.bench_src.wasm_path wasm_file.parent.mkdir(parents=True, exist_ok=True) # Resolve source files relative to source_dir src_files: list[Path] = [] for src_rel in self.bench_src.src_paths: src_file = self.source_dir / src_rel if not src_file.exists(): return TaskResult(False, f"Source file not found: {src_file}") src_files.append(src_file) assert self.wasi_sdk_task.wasi_sdk_dir is not None wasi_sdk_dir = self.wasi_sdk_task.wasi_sdk_dir clang = wasi_sdk_dir / "bin" / f"clang{EXE_EXT}" sysroot = wasi_sdk_dir / "share" / "wasi-sysroot" cmd = [ str(clang), "--target=wasm32-wasi", f"--sysroot={sysroot}", "-O2", "-o", str(wasm_file), ] for inc_dir in self.bench_src.include_dirs: cmd.append(f"-I{self.source_dir / inc_dir}") cmd.extend(str(f) for f in src_files) cmd.extend(self.bench_src.extra_flags) result = run_command(cmd) if result.returncode != 0: return TaskResult( False, result.format_failure(f"Failed to compile {self.bench_src.name}"), ) return TaskResult(True) def setup_benchmark_compile_tasks( source_dir: Path, work_dir: Path, offline: bool = False, ) -> list[Task]: """Set up tasks to compile benchmark C sources to .wasm. Returns the list of compile tasks. """ wasi_sdk_task = DownloadWasiSdkTask(working_dir=work_dir, offline=offline) tasks: list[Task] = [] for bench_src in BENCHMARK_SOURCES: task = CompileBenchmarkTask( bench_src=bench_src, source_dir=source_dir, wasi_sdk_task=wasi_sdk_task, ) tasks.append(task) return tasks # ============================================================================= # Statistics # ============================================================================= def _mean(values: list[float]) -> float: if not values: return 0.0 return sum(values) / len(values) def _stddev(values: list[float]) -> float: if len(values) < 2: return 0.0 m = _mean(values) variance = sum((x - m) ** 2 for x in values) / (len(values) - 1) return math.sqrt(variance) # ============================================================================= # Running Benchmarks # ============================================================================= def _run_file_benchmark_once( wavm_bin: Path, source_dir: Path, program: BenchmarkProgram ) -> Optional[dict]: """Run a single file benchmark invocation and return parsed results.""" file_path = source_dir / program.path if not file_path.exists(): output.error(f"Benchmark file not found: {file_path}") return None cmd = [ str(wavm_bin), "test", "benchmark", "--json", "--enable", "all", str(file_path), *program.args, ] start = time.perf_counter() result = run_command(cmd, timeout=600) wall_clock_ms = (time.perf_counter() - start) * 1000.0 if result.timed_out: output.error(f"Benchmark timed out: {program.name}") return None if result.returncode != 0: output.error(f"Benchmark failed: {program.name}") if result.stderr.strip(): output.error(result.stderr.strip()) return None # The WASI program may output binary data (e.g. mandelbrot PBM) before # the JSON result. Decode only the tail of stdout to find the JSON. tail = result.stdout_bytes[-4096:].decode("utf-8", errors="replace") json_text = _extract_json_from_output(tail) if json_text is None: output.error(f"No JSON found in output from {program.name}") return None try: data = json.loads(json_text) except json.JSONDecodeError: output.error(f"Failed to parse JSON output from {program.name}") return None phases = data.get("phases", {}) return { "load_ms": phases.get("load_ms", 0.0), "compile_ms": phases.get("compile_ms", 0.0), "instantiate_ms": phases.get("instantiate_ms", 0.0), "execute_ms": phases.get("execute_ms", 0.0), "wall_clock_ms": wall_clock_ms, "peak_memory_bytes": data.get("peak_memory_bytes", 0), } def _extract_json_from_output(text: str) -> Optional[str]: """Extract the last JSON object from stdout. The benchmark program's own stdout (e.g. from WASI programs) may precede the JSON result. Find the last '{' ... '}' block. """ # Find the last closing brace end = text.rfind("}") if end < 0: return None # Find the matching opening brace depth = 0 for i in range(end, -1, -1): if text[i] == "}": depth += 1 elif text[i] == "{": depth -= 1 if depth == 0: return text[i : end + 1] return None NUM_RUNS = 10 # ============================================================================= # Result I/O # ============================================================================= def _get_results_dir(work_dir: Path) -> Path: return work_dir / "benchmark_results" def save_results(work_dir: Path, name: str, results: dict) -> Path: """Save benchmark results to a JSON file.""" results_dir = _get_results_dir(work_dir) results_dir.mkdir(parents=True, exist_ok=True) path = results_dir / f"{name}.json" path.write_text(json.dumps(results, indent=2)) output.print(f"Results saved to {path}") return path def load_results(work_dir: Path, name: str) -> Optional[dict]: """Load benchmark results from a JSON file.""" path = _get_results_dir(work_dir) / f"{name}.json" if not path.exists(): output.error(f"Baseline not found: {path}") return None try: return json.loads(path.read_text()) except (json.JSONDecodeError, IOError) as e: output.error(f"Failed to load baseline: {e}") return None def list_saved_results(work_dir: Path) -> list[str]: """List saved benchmark result names.""" results_dir = _get_results_dir(work_dir) if not results_dir.exists(): return [] return sorted(p.stem for p in results_dir.glob("*.json")) # ============================================================================= # Display and Comparison # ============================================================================= def _format_val(mean: float, std: float, unit: str) -> str: if mean >= 100: return f"{mean:.1f} +/- {std:.1f}{unit}" elif mean >= 1: return f"{mean:.2f} +/- {std:.2f}{unit}" else: return f"{mean:.3f} +/- {std:.3f}{unit}" def _format_delta(delta: float, pct: float, unit: str) -> str: sign = "+" if delta >= 0 else "" return f"{sign}{delta:.1f}{unit} {sign}{pct:.1f}%" def _is_regression(pct: float) -> bool: return pct > 2.0 def _is_improvement(pct: float) -> bool: return pct < -2.0 def _ansi_red(s: str) -> str: return f"\033[31m{s}\033[0m" def _ansi_green(s: str) -> str: return f"\033[32m{s}\033[0m" def _colorize_delta(delta_str: str, pct: float, interactive: bool) -> str: if not interactive: return delta_str if _is_regression(pct): return _ansi_red(delta_str) elif _is_improvement(pct): return _ansi_green(delta_str) return delta_str METRICS = [ ("load_ms", "Load (ms)", "ms", 1.0), ("compile_ms", "Compile (ms)", "ms", 1.0), ("instantiate_ms", "Instantiate (ms)", "ms", 1.0), ("execute_ms", "Execute (ms)", "ms", 1.0), ("peak_memory_bytes", "Peak RSS (MiB)", "MiB", 1.0 / (1024.0 * 1024.0)), ] def _geometric_mean(values: list[float]) -> float: """Geometric mean, appropriate for aggregating times across different scales.""" if not values or any(v <= 0 for v in values): return 0.0 log_sum = sum(math.log(v) for v in values) return math.exp(log_sum / len(values)) def _per_run_geometric_means( benchmarks: dict, phase_key: str, bench_names: list[str] ) -> list[float]: """Compute the geometric mean across benchmarks for each run index.""" num_runs = min( len(benchmarks[name].get("iterations", [])) for name in bench_names if name in benchmarks ) geo_means: list[float] = [] for run_idx in range(num_runs): values: list[float] = [] for name in bench_names: iters = benchmarks[name].get("iterations", []) if run_idx < len(iters) and phase_key in iters[run_idx]: v = iters[run_idx][phase_key] if v > 0: values.append(v) if len(values) == len(bench_names): geo_means.append(_geometric_mean(values)) return geo_means def print_results(results: dict) -> None: """Print results as one table per metric, with per-run geometric mean aggregate.""" benchmarks = results.get("benchmarks", {}) if not benchmarks: output.print("No benchmark results.") return bench_names = sorted(benchmarks.keys()) for metric_key, metric_label, unit, scale in METRICS: rows: list[tuple[str, float, float]] = [] for name in bench_names: iterations = benchmarks[name].get("iterations", []) values = [it[metric_key] * scale for it in iterations if metric_key in it] if values: rows.append((name, _mean(values), _stddev(values))) if not rows: continue output.print(f"\n{metric_label}") output.print(f" {'Benchmark':<25} {'Mean +/- StdDev':<30}") output.print(f" {'-' * 55}") for name, m, s in rows: output.print(f" {name:<25} {_format_val(m, s, unit)}") geo_means = _per_run_geometric_means(benchmarks, metric_key, bench_names) if geo_means: scaled = [v * scale for v in geo_means] gm = _mean(scaled) gs = _stddev(scaled) output.print(f" {'(geometric mean)':<25} {_format_val(gm, gs, unit)}") output.print("") def print_comparison(current: dict, baseline: dict) -> None: """Print a comparison table between current and baseline results, one table per metric.""" interactive = output.interactive cur_benchmarks = current.get("benchmarks", {}) base_benchmarks = baseline.get("benchmarks", {}) all_names = sorted(set(cur_benchmarks.keys()) | set(base_benchmarks.keys())) if not all_names: output.print("No benchmarks to compare.") return for metric_key, metric_label, unit, scale in METRICS: rows: list[tuple[str, list[float], list[float]]] = [] for name in all_names: cur_iters = cur_benchmarks.get(name, {}).get("iterations", []) base_iters = base_benchmarks.get(name, {}).get("iterations", []) cur_values = [it[metric_key] * scale for it in cur_iters if metric_key in it] base_values = [it[metric_key] * scale for it in base_iters if metric_key in it] if cur_values and base_values: rows.append((name, cur_values, base_values)) if not rows: continue output.print(f"\n{metric_label}") output.print( f" {'Benchmark':<20} {'Current (mean +/- std)':<28} " f"{'Baseline (mean +/- std)':<28} {'Delta':<20}" ) output.print(f" {'-' * 96}") for name, cur_values, base_values in rows: _print_comparison_row(name, cur_values, base_values, unit, interactive) common_names = [name for name, _, _ in rows] cur_geos = _per_run_geometric_means(cur_benchmarks, metric_key, common_names) base_geos = _per_run_geometric_means(base_benchmarks, metric_key, common_names) if cur_geos and base_geos: _print_comparison_row( "(geometric mean)", [v * scale for v in cur_geos], [v * scale for v in base_geos], unit, interactive, ) output.print("") def _print_comparison_row( bench_name: str, cur_values: list[float], base_values: list[float], unit: str, interactive: bool, ) -> None: cur_mean = _mean(cur_values) cur_std = _stddev(cur_values) base_mean = _mean(base_values) base_std = _stddev(base_values) delta = cur_mean - base_mean pct = (delta / base_mean * 100.0) if base_mean != 0 else 0.0 cur_str = _format_val(cur_mean, cur_std, unit) base_str = _format_val(base_mean, base_std, unit) delta_str = _format_delta(delta, pct, unit) delta_str = _colorize_delta(delta_str, pct, interactive) output.print(f" {bench_name:<20} {cur_str:<28} {base_str:<28} {delta_str}") # ============================================================================= # Running All Benchmarks # ============================================================================= def _get_wavm_version(source_dir: Path) -> str: version_file = source_dir / "VERSION" if version_file.exists(): return version_file.read_text().strip() return "unknown" def run_benchmarks( build_dir: Path, source_dir: Path, config_name: str, benchmark_names: Optional[list[str]] = None, ) -> dict: """Run all benchmarks serially, with the same number of runs for each. Each "run" executes every benchmark once, serially, to avoid CPU contention. This ensures per-run geometric means are computed from the same set of benchmarks measured under the same conditions. """ wavm_bin = get_wavm_bin_path(build_dir) if not wavm_bin.exists(): raise RuntimeError(f"wavm binary not found: {wavm_bin}") programs = list(BENCHMARK_PROGRAMS) if benchmark_names: name_set = set(benchmark_names) programs = [p for p in programs if p.name in name_set] if not programs: available = [p.name for p in BENCHMARK_PROGRAMS] raise RuntimeError( f"No matching benchmarks for: {benchmark_names}. " f"Available: {available}" ) # Filter out programs whose files don't exist valid_programs: list[BenchmarkProgram] = [] for program in programs: file_path = source_dir / program.path if not file_path.exists(): output.error(f"Skipping {program.name}: file not found ({file_path})") else: valid_programs.append(program) if not valid_programs: raise RuntimeError("No benchmark files found") # Run all benchmarks NUM_RUNS times in lockstep all_iterations: dict[str, list[dict]] = {p.name: [] for p in valid_programs} for run_index in range(NUM_RUNS): for program in valid_programs: output.status(f"Run {run_index + 1}/{NUM_RUNS}: {program.name}") result = _run_file_benchmark_once(wavm_bin, source_dir, program) if result is None: output.error(f" {program.name}: FAILED") all_iterations[program.name].append({}) else: all_iterations[program.name].append(result) output.clear_status() results: dict = { "version": 1, "num_runs": NUM_RUNS, "timestamp": datetime.now(timezone.utc).isoformat(), "host": { "os": platform.system().lower(), "arch": get_host_arch(), }, "wavm": { "version": _get_wavm_version(source_dir), "config": config_name, }, "benchmarks": {}, } for program in valid_programs: iterations = [it for it in all_iterations[program.name] if it] if iterations: results["benchmarks"][program.name] = {"iterations": iterations} return results # ============================================================================= # Command Handlers # ============================================================================= def cmd_benchmark(args: argparse.Namespace, ctx: CommandContext) -> int: """Run benchmarks, save results, and compare against baselines.""" # List mode: show available benchmarks and saved baselines if args.list: output.print("Available benchmarks:") for p in BENCHMARK_PROGRAMS: output.print(f" {p.name:<20} {p.path}") saved = list_saved_results(ctx.work_dir) if saved: output.print("\nSaved baselines:") for name in saved: output.print(f" {name}") return 0 config_name = args.config # Build WAVM build_dir, err = build_single_config( ctx.work_dir, ctx.source_dir, config_name, llvm_source=args.llvm_source, offline=args.offline, suppress_summary=True, ) if err is not None: return err assert build_dir is not None # Run benchmarks serially benchmark_names = args.benchmark if args.benchmark else None results = run_benchmarks( build_dir=build_dir, source_dir=ctx.source_dir, config_name=config_name, benchmark_names=benchmark_names, ) print_results(results) # Save if requested if args.save: save_results(ctx.work_dir, args.save, results) # Compare if requested if args.compare: baseline = load_results(ctx.work_dir, args.compare) if baseline: print_comparison(results, baseline) else: return 1 return 0 def cmd_benchmark_compile(args: argparse.Namespace, ctx: CommandContext) -> int: """Compile benchmark C sources to .wasm using WASI SDK.""" tasks = setup_benchmark_compile_tasks( source_dir=ctx.source_dir, work_dir=ctx.work_dir, offline=args.offline, ) if not execute(tasks): return 1 output.print("Benchmark .wasm files compiled successfully.") for src in BENCHMARK_SOURCES: wasm_path = ctx.source_dir / src.wasm_path output.print(f" {wasm_path}") return 0 # ============================================================================= # Argparse Registration # ============================================================================= def register_benchmark_commands(subparsers: argparse._SubParsersAction) -> None: """Register benchmark and benchmark-compile subcommands.""" benchmark_parser = subparsers.add_parser("benchmark", help="Run performance benchmarks") benchmark_parser.add_argument( "--config", default="LTO", help="Configuration to build and benchmark (default: LTO)", ) benchmark_parser.add_argument( "--save", metavar="NAME", help="Save results with the given name", ) benchmark_parser.add_argument( "--compare", metavar="NAME", help="Compare results against a saved baseline", ) benchmark_parser.add_argument( "--list", action="store_true", help="List available benchmarks and saved baselines", ) benchmark_parser.add_argument( "--benchmark", action="append", metavar="NAME", help="Run only the named benchmark(s) (can be repeated; default: all)", ) benchmark_parser.set_defaults(func=cmd_benchmark) subparsers.add_parser( "benchmark-compile", help="Compile benchmark C sources to .wasm using WASI SDK", ).set_defaults(func=cmd_benchmark_compile) ================================================ FILE: Build/lib/build.py ================================================ """Build configuration classes and CMake utilities.""" import argparse import hashlib import json import shutil from dataclasses import dataclass, field from pathlib import Path from typing import Optional, Union from .context import CommandContext from .output import output from .platform import ( MACOS, WINDOWS, CPACK_CONFIG, get_build_dir, get_cross_compile_cmake_args, run_command, ) from .toolchain import ( Toolchain, ToolchainScope, CMakeVarArg, build_cmake_cmd, detect_toolchains, get_primary_toolchain, ) from .task_graph import Task, TaskResult, execute from .llvm import get_llvm_task # ============================================================================= # WAVM Configuration # ============================================================================= @dataclass class WAVMConfigTemplate: """Template for WAVM build configuration (before compiler is determined).""" name: str build_type: str # CMAKE_BUILD_TYPE llvm_config: Optional[str] # Which LLVM config to use (None if LLVM not needed) cmake_args: list[str] = field(default_factory=list) # Platform/compiler restrictions exclude_gcc: bool = False exclude_windows: bool = False exclude_macos: bool = False # Whether to test fuzz corpora on this config test_fuzz_corpora: bool = False # Whether to expand this config across secondary toolchains (e.g. non-preferred linkers) expand_secondary_toolchains: bool = False # Whether to adjust LTO args based on compiler (MSVC doesn't support ThinLTO) use_lto: bool = False # Whether to enable code coverage on clang builds of this config enable_coverage_on_clang: bool = False @dataclass class WAVMConfig: """WAVM build configuration with toolchain specified.""" name: str # Full name including toolchain suffix (e.g., "Release-clang") base_name: str # Base config name (e.g., "Release") toolchain: Toolchain # Compiler-linker pair to use build_type: str # CMAKE_BUILD_TYPE llvm_config: Optional[str] # Which LLVM config to use (None if LLVM not needed) cmake_args: list[str] = field(default_factory=list) uses_asan: bool = False # Whether this config uses AddressSanitizer uses_tsan: bool = False # Whether this config uses ThreadSanitizer test_fuzz_corpora: bool = False # Whether to test fuzz corpora on this config enable_coverage: bool = False # Whether code coverage instrumentation is enabled # WAVM configuration templates WAVM_CONFIG_TEMPLATES = [ WAVMConfigTemplate( name="RelWithDebInfo", build_type="RelWithDebInfo", llvm_config="RelWithDebInfo", cmake_args=[], expand_secondary_toolchains=True, ), WAVMConfigTemplate( name="Debug", build_type="Debug", llvm_config="Debug", cmake_args=[], ), WAVMConfigTemplate( name="Checked", build_type="RelWithDebInfo", llvm_config="Checked", cmake_args=["-DWAVM_ENABLE_RELEASE_ASSERTS=ON", "-DWAVM_ENABLE_FUZZ_TARGETS=ON"], test_fuzz_corpora=True, enable_coverage_on_clang=True, ), WAVMConfigTemplate( name="Static", build_type="Release", llvm_config="RelWithDebInfo", cmake_args=["-DWAVM_ENABLE_STATIC_LINKING=ON"], ), WAVMConfigTemplate( name="LTO", build_type="Release", llvm_config="LTO", cmake_args=["-DWAVM_ENABLE_FUZZ_TARGETS=ON"], test_fuzz_corpora=True, use_lto=True, ), WAVMConfigTemplate( name="StaticLTO", build_type="Release", llvm_config="LTO", cmake_args=[ "-DWAVM_ENABLE_STATIC_LINKING=ON", "-DWAVM_ENABLE_FUZZ_TARGETS=OFF", ], exclude_windows=True, use_lto=True, ), WAVMConfigTemplate( name="UBASAN", build_type="RelWithDebInfo", llvm_config="Sanitized", cmake_args=[ "-DWAVM_ENABLE_STATIC_LINKING=ON", "-DWAVM_ENABLE_ASAN=ON", "-DWAVM_ENABLE_UBSAN=ON", ], exclude_macos=True, exclude_windows=True, ), WAVMConfigTemplate( name="TSAN", build_type="Release", llvm_config="RelWithDebInfo", cmake_args=["-DWAVM_ENABLE_TSAN=ON"], exclude_gcc=True, exclude_windows=True, ), WAVMConfigTemplate( name="NoRuntime", build_type="RelWithDebInfo", llvm_config=None, cmake_args=["-DWAVM_ENABLE_RUNTIME=NO"], ), ] # ============================================================================= # Build Stamp Utilities # ============================================================================= def get_build_stamp(config_hash: str, llvm_commit: str) -> str: """Create a build stamp for incremental builds.""" return f"{config_hash}:{llvm_commit}" def read_build_stamp(build_dir: Path) -> Optional[str]: """Read the build stamp from a previous build.""" stamp_file = build_dir / ".build_stamp" if stamp_file.exists(): return stamp_file.read_text().strip() return None def write_build_stamp(build_dir: Path, stamp: str) -> None: """Write the build stamp for a completed build.""" stamp_file = build_dir / ".build_stamp" stamp_file.write_text(stamp) def hash_config(cmake_args: list[str]) -> str: """Create a hash of the configuration for incremental builds.""" config_str = json.dumps(sorted(cmake_args)) return hashlib.sha256(config_str.encode()).hexdigest()[:12] def get_config_string(cmake_args: list[str]) -> str: """Create a string representation of cmake args for comparison.""" return "\n".join(cmake_args) def needs_cmake_configure(build_dir: Path, cmake_args: list[str]) -> bool: """Check if cmake configuration needs to run. Returns True if cmake needs to run, False if config is unchanged and can be skipped. """ config_str = get_config_string(cmake_args) args_file = build_dir / ".cmake_config_args" cache_file = build_dir / "CMakeCache.txt" if args_file.exists() and cache_file.exists(): stored_config = args_file.read_text() if stored_config == config_str: output.verbose("Config unchanged, skipping cmake") return False # Config unchanged, skip cmake output.verbose("Config changed, running cmake --fresh") output.verbose(f" Stored:\n {stored_config.replace(chr(10), chr(10) + ' ')}") output.verbose(f" Current:\n {config_str.replace(chr(10), chr(10) + ' ')}") else: if not cache_file.exists(): output.verbose("No CMakeCache.txt, running cmake --fresh") else: output.verbose("No config args file, running cmake --fresh") return True # Need to run cmake def write_cmake_config_args(build_dir: Path, cmake_args: list[str]) -> None: """Write the cmake config args after successful configuration.""" config_str = get_config_string(cmake_args) args_file = build_dir / ".cmake_config_args" build_dir.mkdir(parents=True, exist_ok=True) args_file.write_text(config_str) # ============================================================================= # Configuration Generators # ============================================================================= def get_applicable_wavm_configs() -> list[WAVMConfig]: """Get WAVM configs for all detected toolchains and the current platform. The default WAVM-LLVM toolchain produces bare template names (e.g. "Debug"). Other toolchains append an identity suffix (e.g. "Debug-msvc", "Debug-gcc"). Templates with expand_secondary_toolchains are expanded across all toolchains. Other templates use only PRIMARY toolchains. """ toolchains = detect_toolchains() configs = [] for toolchain in toolchains: seen_base_names: set[str] = set() for template in WAVM_CONFIG_TEMPLATES: # Skip secondary toolchains unless the template expands them if ( toolchain.scope == ToolchainScope.SECONDARY and not template.expand_secondary_toolchains ): continue # Check platform restrictions if template.exclude_windows and WINDOWS: continue if template.exclude_macos and MACOS: continue # Check compiler restrictions if template.exclude_gcc and toolchain.compiler == "gcc": continue # Avoid duplicates (e.g., LTO has separate Windows/POSIX versions) if template.name in seen_base_names: continue seen_base_names.add(template.name) identity = toolchain.identity full_name = f"{template.name}-{identity}" if identity else template.name # Check if this config uses ASAN or TSAN uses_asan = "-DWAVM_ENABLE_ASAN=ON" in template.cmake_args uses_tsan = "-DWAVM_ENABLE_TSAN=ON" in template.cmake_args # Check if coverage should be enabled for this toolchain enable_coverage = template.enable_coverage_on_clang and toolchain.supports_coverage # Handle LTO toolchain-specific args cmake_args = list(template.cmake_args) llvm_config = template.llvm_config if template.use_lto: cmake_args.append(f"-DWAVM_ENABLE_LTO={toolchain.lto_mode}") if toolchain.lto_mode == "ON": # For toolchains that support non-thin LTO, don't link against the ThinLTO-compiled LLVM libraries. llvm_config = "RelWithDebInfo" if enable_coverage: cmake_args.append("-DWAVM_ENABLE_COVERAGE=ON") configs.append( WAVMConfig( name=full_name, base_name=template.name, toolchain=toolchain, build_type=template.build_type, llvm_config=llvm_config, cmake_args=cmake_args, uses_asan=uses_asan, uses_tsan=uses_tsan, test_fuzz_corpora=template.test_fuzz_corpora, enable_coverage=enable_coverage, ) ) return configs def find_wavm_config(config_name: str) -> tuple[Optional[WAVMConfig], list[WAVMConfig]]: """Find a WAVM config by exact name. Returns (config, all_configs) where config may be None if not found. """ all_configs = get_applicable_wavm_configs() config = next((c for c in all_configs if c.name == config_name), None) return config, all_configs def get_lint_config() -> WAVMConfig: """Get the Lint config for clangd/clang-tidy. This config is only configured (not built or tested). It always uses clang with the Debug LLVM config. """ return WAVMConfig( name="Lint", base_name="Lint", toolchain=get_primary_toolchain("clang"), build_type="Debug", llvm_config="Debug", cmake_args=["-DWAVM_COMPILE_HEADERS=ON"], ) def needs_aslr_workaround(config: WAVMConfig) -> bool: """Check if we need to disable ASLR for sanitizer tests. Older versions of clang (< 18) don't handle high-entropy ASLR well, causing ASAN/TSAN to fail with DEADLYSIGNAL or unexpected memory mapping errors. """ if not config.toolchain.needs_aslr_workaround: return False has_sanitizer = ( "-DWAVM_ENABLE_ASAN=ON" in config.cmake_args or "-DWAVM_ENABLE_TSAN=ON" in config.cmake_args ) return has_sanitizer # ============================================================================= # WAVM Build Tasks # ============================================================================= class ConfigureWAVMTask(Task): """Configure WAVM with CMake.""" def __init__( self, config: WAVMConfig, build_dir: Path, install_dir: Path, source_dir: Path, llvm_task: Optional[Task], toolchain_prerequisite_tasks: list[Task], ): dependencies: list[Task] = [] if llvm_task: dependencies.append(llvm_task) for task in toolchain_prerequisite_tasks: if task not in dependencies: dependencies.append(task) super().__init__( name=f"wavm_configure_{config.name}", description=f"{config.name}: configure", dependencies=dependencies, ) self.config = config self.build_dir = build_dir self.install_dir = install_dir self.source_dir = source_dir self.llvm_task = llvm_task def run(self) -> TaskResult: # Get LLVM directory if this config uses LLVM llvm_cmake_dir: Optional[Path] = None if self.llvm_task: assert self.llvm_task.result is not None llvm_install_dir: Path = self.llvm_task.result.artifacts["llvm_install_dir"] llvm_cmake_dir = llvm_install_dir / "lib" / "cmake" / "llvm" self.build_dir.mkdir(parents=True, exist_ok=True) cmake_args: list[Union[str, Path, CMakeVarArg]] = [ "cmake", "--fresh", self.source_dir, "-G", "Ninja", CMakeVarArg("CMAKE_BUILD_TYPE", self.config.build_type), CMakeVarArg("CMAKE_INSTALL_PREFIX", self.install_dir), CMakeVarArg("CMAKE_EXPORT_COMPILE_COMMANDS", "ON"), ] if llvm_cmake_dir: cmake_args.append(CMakeVarArg("LLVM_DIR", llvm_cmake_dir)) cmake_args.extend(self.config.toolchain.get_cmake_args()) cmake_args.extend(self.config.cmake_args) cmake_args.extend(get_cross_compile_cmake_args()) # Set CPack generators based on platform cpack_generators = ";".join(CPACK_CONFIG.keys()) cmake_args.append(CMakeVarArg("CPACK_GENERATOR", cpack_generators)) # Convert CMakeVarArg objects to strings cmake_cmd = build_cmake_cmd(cmake_args) if needs_cmake_configure(self.build_dir, cmake_cmd): # Args changed or first configure: run cmake --fresh result = run_command(cmake_cmd, cwd=self.build_dir) if result.returncode != 0: return TaskResult(False, result.format_failure()) write_cmake_config_args(self.build_dir, cmake_cmd) return TaskResult(True, warning_message=result.stderr) # Args unchanged: use ninja's mtime checking to reconfigure only if # CMakeLists.txt or other cmake inputs changed. result = run_command(["ninja", "rebuild_cache"], cwd=self.build_dir) if result.returncode != 0: return TaskResult(False, result.format_failure()) return TaskResult(True, warning_message=result.stderr) class BuildWAVMTask(Task): """Build WAVM.""" def __init__( self, config: WAVMConfig, build_dir: Path, install_dir: Path, configure_task: "ConfigureWAVMTask", ninja_targets: Optional[list[str]] = None, ): super().__init__( name=f"wavm_build_{config.name}", description=f"{config.name}: build", dependencies=[configure_task], ) self.config = config self.build_dir = build_dir self.install_dir = install_dir self.configure_task = configure_task self.ninja_targets = ninja_targets def run(self) -> TaskResult: cmd = ["ninja", "--quiet"] + (self.ninja_targets or []) result = run_command(cmd, cwd=self.build_dir) if result.returncode != 0: return TaskResult(False, result.format_failure()) return TaskResult(True, warning_message=result.stderr) def create_wavm_configure_task( wavm_config: WAVMConfig, work_dir: Path, source_dir: Path, build_llvm_from_source: bool, install_dir: Optional[Path] = None, offline: bool = False, ) -> ConfigureWAVMTask: """Create a configure-only task for a WAVM configuration.""" llvm_task = ( get_llvm_task( work_dir, build_llvm_from_source, wavm_config.llvm_config, offline=offline ) if wavm_config.llvm_config else None ) toolchain_prerequisite_tasks = wavm_config.toolchain.get_or_create_prerequisite_tasks( work_dir, build_llvm_from_source, offline=offline ) build_dir = get_build_dir(work_dir, "build", wavm_config.name) if install_dir is None: install_dir = get_build_dir(work_dir, "install", wavm_config.name) configure_task = ConfigureWAVMTask( config=wavm_config, build_dir=build_dir, install_dir=install_dir, source_dir=source_dir, llvm_task=llvm_task, toolchain_prerequisite_tasks=toolchain_prerequisite_tasks, ) return configure_task def create_wavm_build_tasks( wavm_config: WAVMConfig, work_dir: Path, source_dir: Path, build_llvm_from_source: bool, install_dir: Optional[Path] = None, ninja_targets: Optional[list[str]] = None, offline: bool = False, ) -> BuildWAVMTask: """Create configure and build tasks for a WAVM configuration.""" configure_task = create_wavm_configure_task( wavm_config, work_dir, source_dir, build_llvm_from_source, install_dir, offline=offline, ) build_task = BuildWAVMTask( config=wavm_config, build_dir=configure_task.build_dir, install_dir=configure_task.install_dir, configure_task=configure_task, ninja_targets=ninja_targets, ) return build_task def build_single_config( work_dir: Path, source_dir: Path, config_name: str, llvm_source: bool = False, offline: bool = False, ninja_targets: Optional[list[str]] = None, suppress_summary: bool = False, ) -> tuple[Optional[Path], Optional[int]]: """Build a single WAVM configuration. Returns (build_dir, None) on success, or (None, exit_code) on error. """ # Look up configs wavm_config, all_configs = find_wavm_config(config_name) if not wavm_config: if not all_configs: output.error("Error: No compilers found") else: output.error(f"Error: Config '{config_name}' not found") output.error(f"Available: {[c.name for c in all_configs]}") return None, 1 install_dir = get_build_dir(work_dir, "install", config_name) build_task = create_wavm_build_tasks( wavm_config, work_dir, source_dir, build_llvm_from_source=llvm_source, install_dir=install_dir, ninja_targets=ninja_targets, offline=offline, ) if not execute([build_task], suppress_summary=suppress_summary): return None, 1 return build_task.build_dir, None # ============================================================================= # Command Handlers # ============================================================================= def cmd_list_configs(args: argparse.Namespace, ctx: CommandContext) -> int: """List available configurations for this platform.""" wavm_configs = get_applicable_wavm_configs() for config in wavm_configs: print(config.name) return 0 def register_list_configs(subparsers: argparse._SubParsersAction) -> None: subparsers.add_parser( "list-configs", help="List available configurations" ).set_defaults(func=cmd_list_configs) def cmd_package(args: argparse.Namespace, ctx: CommandContext) -> int: """Build and package a WAVM configuration.""" build_dir, err = build_single_config( ctx.work_dir, ctx.source_dir, args.config, llvm_source=args.llvm_source, offline=args.offline, ninja_targets=["package"], ) if err is not None: return err assert build_dir is not None output_dir = Path(args.output_dir).resolve() output_dir.mkdir(parents=True, exist_ok=True) # Copy generated packages to output directory output.status("Copying packages to output directory...") packages_found = [] for ext in CPACK_CONFIG.values(): filename = f"wavm-package{ext}" package_path = build_dir / filename if package_path.exists(): dest_path = output_dir / filename shutil.copy2(package_path, dest_path) packages_found.append(filename) output.print(f" {filename}") if not packages_found: output.error("No packages were generated") return 1 output.clear_status() output.print(f"Packages created in {output_dir}") return 0 def register_package(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser("package", help="Build and package a WAVM configuration") p.add_argument( "--config", required=True, help="Config to build and package (required)", ) p.add_argument( "output_dir", help="Directory to copy packages to", ) p.set_defaults(func=cmd_package) ================================================ FILE: Build/lib/context.py ================================================ """Shared command context passed to all subcommand handlers.""" from dataclasses import dataclass from pathlib import Path @dataclass class CommandContext: work_dir: Path source_dir: Path ================================================ FILE: Build/lib/coverage.py ================================================ """Code coverage report generation and LCOV merging utilities.""" import argparse import shutil from collections import defaultdict from pathlib import Path from typing import Optional, Union from .context import CommandContext from .output import output from .platform import EXE_EXT, WINDOWS, MACOS, run_command from .task_graph import Task, TaskResult def find_coverage_tool(tool_name: str, llvm_toolchain_task: Optional[Task]) -> Optional[Path]: """Find a coverage tool (llvm-profdata or llvm-cov). Checks the LLVM toolchain first, then falls back to the system PATH. """ if llvm_toolchain_task and llvm_toolchain_task.result: llvm_install_dir = llvm_toolchain_task.result.artifacts.get("llvm_install_dir") if llvm_install_dir: tool_path = Path(llvm_install_dir) / "bin" / f"{tool_name}{EXE_EXT}" if tool_path.exists(): return tool_path # Fall back to system PATH system_tool = shutil.which(f"{tool_name}{EXE_EXT}") if system_tool: return Path(system_tool) return None def find_instrumented_binaries(build_dir: Path) -> list[Path]: """Find instrumented binaries for coverage reporting. Returns the wavm binary and (if present) the shared WAVM library. In a CMake build directory, shared libraries are in the build root (e.g. build_dir/libWAVM.so), except on Windows where DLLs go to bin/ via CMAKE_RUNTIME_OUTPUT_DIRECTORY. """ binaries = [] wavm_bin = build_dir / "bin" / f"wavm{EXE_EXT}" if wavm_bin.exists(): binaries.append(wavm_bin) # Check for shared library in the build directory. # CMake may create versioned names (libWAVM.so.0.0.0) with symlinks. if WINDOWS: candidates = [build_dir / "bin" / "libWAVM.dll"] elif MACOS: candidates = [build_dir / "libWAVM.dylib"] else: candidates = [build_dir / "libWAVM.so"] for lib_path in candidates: if lib_path.exists(): binaries.append(lib_path) return binaries class CoverageReportTask(Task): """Generate a coverage report from profraw files produced by tests.""" def __init__( self, config_name: str, build_dir: Path, coverage_dir: Path, test_names: list[str], llvm_toolchain_task: Optional[Task], work_dir: Path, source_dir: Path, test_tasks: list[Task], ): super().__init__( name=f"coverage_report_{config_name}", description=f"{config_name}: coverage report", dependencies=test_tasks, ) self.config_name = config_name self.build_dir = build_dir self.coverage_dir = coverage_dir self.test_names = test_names self.llvm_toolchain_task = llvm_toolchain_task self.work_dir = work_dir self.source_dir = source_dir def run(self) -> TaskResult: # Collect all profraw files profraw_files = sorted(self.coverage_dir.glob("*.profraw")) if not profraw_files: return TaskResult(False, "No .profraw files found") # Find tools profdata_tool = find_coverage_tool("llvm-profdata", self.llvm_toolchain_task) if not profdata_tool: return TaskResult(False, "llvm-profdata not found") cov_tool = find_coverage_tool("llvm-cov", self.llvm_toolchain_task) if not cov_tool: return TaskResult(False, "llvm-cov not found") # Find instrumented binaries binaries = find_instrumented_binaries(self.build_dir) if not binaries: return TaskResult(False, "No instrumented binaries found") # Merge profraw files using a response file to avoid command-line # length limits on Windows. merged_profdata = self.coverage_dir / "merged.profdata" response_file = self.coverage_dir / "profraw_files.txt" response_file.write_text("\n".join(str(f) for f in profraw_files) + "\n") merge_cmd: list[Union[str, Path]] = [ profdata_tool, "merge", "-sparse", f"@{response_file}", "-o", merged_profdata, ] result = run_command(merge_cmd) if result.returncode != 0: return TaskResult(False, result.format_failure("llvm-profdata merge failed")) # Build binary args for llvm-cov (first binary is main, rest are -object args) binary_args: list[Union[str, Path]] = [binaries[0]] for extra_binary in binaries[1:]: binary_args.extend(["-object", extra_binary]) source_dir_str = str(self.source_dir).replace("\\", "/") # Common args for llvm-cov: -compilation-dir resolves relative paths # (produced by -ffile-prefix-map at compile time) back to absolute paths # for source file lookup. compilation_dir_arg = f"-compilation-dir={source_dir_str}" # Clean old report directories before generating new ones report_dir = self.work_dir / "coverage-report" text_report_dir = self.work_dir / "coverage-text" for d in [report_dir, text_report_dir]: if d.exists(): shutil.rmtree(d) # Generate HTML report show_cmd: list[Union[str, Path]] = [ cov_tool, "show", *binary_args, f"-instr-profile={merged_profdata}", compilation_dir_arg, "-format=html", f"-output-dir={report_dir}", "-show-line-counts-or-regions", self.source_dir, ] result = run_command(show_cmd, timeout=300) if result.returncode != 0: return TaskResult(False, result.format_failure("llvm-cov show failed")) # Generate LCOV file lcov_path = self.work_dir / "coverage.lcov" export_cmd: list[Union[str, Path]] = [ cov_tool, "export", *binary_args, f"-instr-profile={merged_profdata}", compilation_dir_arg, "-format=lcov", self.source_dir, ] result = run_command(export_cmd, timeout=300) if result.returncode != 0: return TaskResult(False, result.format_failure("llvm-cov export failed")) # Strip the source-dir prefix from SF lines so that LCOV files are # portable across platforms. The -ffile-prefix-map flag produces relative # paths in debug info; -compilation-dir resolves them back to absolute. # Reverting to relative here lets the cross-platform merge step (which # runs genhtml on a Linux runner) find files in its own checkout. source_prefix = source_dir_str.rstrip("/") + "/" lcov_lines = [] for line in result.stdout.splitlines(): if line.startswith("SF:"): path = line[3:].replace("\\", "/") if path.startswith(source_prefix): path = path[len(source_prefix):] line = f"SF:{path}" lcov_lines.append(line) lcov_path.write_text("\n".join(lcov_lines) + "\n") # Generate text report (annotated source with per-line hit counts) text_cmd: list[Union[str, Path]] = [ cov_tool, "show", *binary_args, f"-instr-profile={merged_profdata}", compilation_dir_arg, "-format=text", f"-output-dir={text_report_dir}", "-show-line-counts-or-regions", self.source_dir, ] result = run_command(text_cmd, timeout=300) if result.returncode != 0: return TaskResult(False, result.format_failure("llvm-cov show (text) failed")) output.print(f"Coverage HTML report: {report_dir}") output.print(f"Coverage text report: {text_report_dir}") output.print(f"Coverage LCOV file: {lcov_path}") return TaskResult(True, artifacts={ "report_dir": report_dir, "text_report_dir": text_report_dir, "lcov_path": lcov_path, }) def merge_lcov_files(lcov_paths: list[Path], output_path: Path) -> None: """Merge multiple LCOV files into one, summing hit counts for shared lines. LCOV format: SF: DA:, end_of_record """ # file_path -> {line_number -> total_hit_count} file_data: dict[str, dict[int, int]] = defaultdict(lambda: defaultdict(int)) for lcov_path in lcov_paths: current_file: Optional[str] = None for line in lcov_path.read_text().splitlines(): if line.startswith("SF:"): current_file = line[3:] elif line.startswith("DA:") and current_file is not None: parts = line[3:].split(",", 1) if len(parts) == 2: try: line_num = int(parts[0]) hit_count = int(parts[1]) file_data[current_file][line_num] += hit_count except ValueError: pass elif line == "end_of_record": current_file = None # Write merged output lines = [] for source_file in sorted(file_data.keys()): lines.append(f"SF:{source_file}") for line_num in sorted(file_data[source_file].keys()): lines.append(f"DA:{line_num},{file_data[source_file][line_num]}") lines.append("end_of_record") output_path.parent.mkdir(parents=True, exist_ok=True) output_path.write_text("\n".join(lines) + "\n") # ============================================================================= # Command Handler # ============================================================================= def cmd_merge_coverage(args: argparse.Namespace, ctx: CommandContext) -> int: """Merge multiple LCOV coverage files into one.""" lcov_paths = [Path(p).resolve() for p in args.lcov_files] output_dir = Path(args.output_dir).resolve() output_dir.mkdir(parents=True, exist_ok=True) # Validate inputs for p in lcov_paths: if not p.exists(): output.error(f"Error: LCOV file not found: {p}") return 1 combined_lcov = output_dir / "combined-coverage.lcov" merge_lcov_files(lcov_paths, combined_lcov) output.print(f"Merged LCOV: {combined_lcov}") # Generate HTML report if genhtml is available if shutil.which("genhtml"): report_dir = output_dir / "combined-coverage-report" result = run_command( ["genhtml", str(combined_lcov), "--output-directory", str(report_dir), "--ignore-errors", "source", "--synthesize-missing"], timeout=300, ) if result.returncode == 0: output.print(f"Combined HTML report: {report_dir}") else: output.error(f"genhtml failed: {result.stderr}") else: output.print("genhtml not found, skipping HTML report generation") return 0 def register_merge_coverage(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser("merge-coverage", help="Merge multiple LCOV coverage files") p.add_argument( "--output-dir", required=True, help="Directory for merged output", ) p.add_argument( "lcov_files", nargs="+", help="LCOV files to merge", ) p.set_defaults(func=cmd_merge_coverage) ================================================ FILE: Build/lib/cpp_files.py ================================================ """Discover C/C++ source files in the WAVM tree.""" import os from pathlib import Path def discover_cpp_files(source_dir: Path) -> list[Path]: """Discover C/C++ files to check, excluding ThirdParty and other non-project dirs.""" files: list[Path] = [] extensions = {".h", ".cpp", ".c"} for dirpath, dirnames, filenames in os.walk(source_dir): rel_dir = Path(dirpath).relative_to(source_dir) if rel_dir == Path("."): for excluded in [".git", ".working", "ThirdParty"]: if excluded in dirnames: dirnames.remove(excluded) elif rel_dir == Path("Include") / "WAVM" / "Inline": if "xxhash" in dirnames: dirnames.remove("xxhash") for filename in filenames: if Path(filename).suffix.lower() in extensions: files.append(Path(dirpath) / filename) return files ================================================ FILE: Build/lib/format.py ================================================ """C/C++ formatting tasks using clang-format.""" import argparse import difflib from pathlib import Path from typing import Optional from .context import CommandContext from .cpp_files import discover_cpp_files from .llvm import get_llvm_toolchain_task from .platform import EXE_EXT, run_command from .task_graph import Task, TaskResult, execute class ClangFormatTask(Task): """Check or fix formatting of a single file.""" def __init__( self, file_path: Path, source_dir: Path, fix: bool, tools_task: Task, # BuildLLVMTask or DownloadLLVMTask extra_dependencies: Optional[list[Task]] = None, ): action = "fix" if fix else "check" rel_path = file_path.relative_to(source_dir) super().__init__( name=f"format_{action}_{rel_path}", description=f"Format {action}: {rel_path}", dependencies=[tools_task] + (extra_dependencies or []), ) self.file_path = file_path self.source_dir = source_dir self.fix = fix self.tools_task = tools_task def run(self) -> TaskResult: assert self.tools_task.result is not None llvm_install_dir: Path = self.tools_task.result.artifacts["llvm_install_dir"] clang_format = llvm_install_dir / "bin" / f"clang-format{EXE_EXT}" rel_path = self.file_path.relative_to(self.source_dir) if self.fix: result = run_command([clang_format, "-i", str(self.file_path)]) if result.returncode != 0: return TaskResult(False, result.format_failure(f"Failed to format: {rel_path}")) return TaskResult(True) # Check mode: get formatted output and compare result = run_command([clang_format, str(self.file_path)]) if result.returncode != 0: return TaskResult(False, result.format_failure(f"clang-format failed on {rel_path}")) # Compare raw bytes to avoid encoding/line-ending mismatches original_bytes = self.file_path.read_bytes() if result.stdout_bytes == original_bytes: return TaskResult(True) # Generate colorized diff from decoded text original = original_bytes.decode("utf-8", errors="replace") formatted = result.stdout_bytes.decode("utf-8", errors="replace") original_lines = original.splitlines(keepends=True) formatted_lines = formatted.splitlines(keepends=True) diff = difflib.unified_diff( original_lines, formatted_lines, fromfile=str(rel_path), tofile=str(rel_path) + " (formatted)", ) RED = "\033[91m" GREEN = "\033[92m" CYAN = "\033[96m" RESET = "\033[0m" colored_lines = [] for line in diff: if line.startswith("---") or line.startswith("+++"): colored_lines.append(f"{CYAN}{line}{RESET}") elif line.startswith("@@"): colored_lines.append(f"{CYAN}{line}{RESET}") elif line.startswith("-"): colored_lines.append(f"{RED}{line}{RESET}") elif line.startswith("+"): colored_lines.append(f"{GREEN}{line}{RESET}") else: colored_lines.append(line) diff_output = "".join(colored_lines) return TaskResult( False, f"File needs formatting: {rel_path}\n" f"{diff_output}\n" f"To fix all: python3 Build/dev.py format --fix", ) class DiscoverFormatFilesTask(Task): """Discover files to format and create individual format tasks.""" def __init__( self, source_dir: Path, fix: bool, tools_task: Task, complete_task: Task, ): super().__init__( name="discover_format_files", description="Discover format files", ) self.source_dir = source_dir self.fix = fix self.tools_task = tools_task self.complete_task = complete_task def run(self) -> TaskResult: files_to_check = discover_cpp_files(self.source_dir) new_tasks: list[Task] = [] for file_path in files_to_check: format_task = ClangFormatTask( file_path=file_path, source_dir=self.source_dir, fix=self.fix, tools_task=self.tools_task, ) new_tasks.append(format_task) self.complete_task.dependencies.extend(new_tasks) return TaskResult( True, artifacts={"file_count": len(files_to_check)}, ) def create_format_tasks( tools_task: Task, source_dir: Path, fix: bool, ) -> Task: """Create clang-format tasks. Returns the completion task.""" format_complete_task = Task("format_complete", "Completion of all format tasks") discover_task = DiscoverFormatFilesTask( source_dir=source_dir, fix=fix, tools_task=tools_task, complete_task=format_complete_task, ) format_complete_task.dependencies.append(discover_task) return format_complete_task # ============================================================================= # Command Handler # ============================================================================= def cmd_format(args: argparse.Namespace, ctx: CommandContext) -> int: """Check or fix C/C++ source code formatting.""" toolchain_task = get_llvm_toolchain_task( ctx.work_dir, args.llvm_source, offline=args.offline ) format_task = create_format_tasks(toolchain_task, ctx.source_dir, args.fix) return 0 if execute([format_task]) else 1 def register_format(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser( "format", help="Check or fix C/C++ source formatting (clang-format)" ) p.add_argument( "--fix", action="store_true", help="Fix formatting issues instead of just checking", ) p.set_defaults(func=cmd_format) ================================================ FILE: Build/lib/fuzz.py ================================================ """LibFuzzer fuzzing campaign management.""" import argparse import os import shutil import subprocess import time from dataclasses import dataclass, field from pathlib import Path from typing import Optional from .context import CommandContext from .output import output from .platform import EXE_EXT, run_command from .build import WAVMConfig, create_wavm_build_tasks from .toolchain import get_primary_toolchain from .task_graph import execute # ============================================================================= # Fuzzer Configuration # ============================================================================= @dataclass class FuzzerConfig: """Per-fuzzer libFuzzer configuration.""" name: str max_total_time: int # seconds max_len: int # max input size in bytes seed_dirs: list[str] = field(default_factory=list) # relative to fuzz_dir dict_file: Optional[str] = None # relative to WAVM/Test/fuzz/ rss_limit_mb: Optional[int] = None reduce_inputs: Optional[int] = None FUZZER_CONFIGS: dict[str, FuzzerConfig] = { "assemble": FuzzerConfig( name="assemble", max_total_time=600, max_len=50000, seed_dirs=["seed-corpus/wast", "translated/wast"], dict_file="wastFuzzDictionary.txt", rss_limit_mb=2750, ), "disassemble": FuzzerConfig( name="disassemble", max_total_time=600, max_len=5000, seed_dirs=["seed-corpus/wasm", "translated/wasm"], ), "compile-model": FuzzerConfig( name="compile-model", max_total_time=600, max_len=20, reduce_inputs=0, ), "instantiate": FuzzerConfig( name="instantiate", max_total_time=600, max_len=5000, seed_dirs=["seed-corpus/wasm", "translated/wasm"], ), } DEFAULT_TARGET_ORDER = ["assemble", "disassemble", "compile-model", "instantiate"] # ============================================================================= # Build # ============================================================================= def get_libfuzzer_config() -> WAVMConfig: """Construct the WAVMConfig for a libFuzzer-instrumented build.""" return WAVMConfig( name="Fuzz", base_name="Fuzz", toolchain=get_primary_toolchain("clang"), build_type="RelWithDebInfo", llvm_config="Sanitized", cmake_args=[ "-DWAVM_ENABLE_LIBFUZZER=ON", "-DWAVM_ENABLE_ASAN=ON", "-DWAVM_ENABLE_UBSAN=ON", "-DWAVM_ENABLE_STATIC_LINKING=ON", "-DWAVM_ENABLE_RELEASE_ASSERTS=ON", "-DWAVM_ENABLE_FUZZ_TARGETS=ON", ], uses_asan=True, ) def build_libfuzzer( work_dir: Path, source_dir: Path, llvm_source: bool, offline: bool, ) -> Path: """Build WAVM with libFuzzer instrumentation. Returns the build directory.""" config = get_libfuzzer_config() try: build_task = create_wavm_build_tasks( config, work_dir, source_dir, build_llvm_from_source=llvm_source, offline=offline, ) except ValueError as e: raise RuntimeError(str(e)) from e if not execute([build_task], suppress_summary=True): raise RuntimeError("Fuzz build failed") return build_task.build_dir # ============================================================================= # Seed Corpus Generation # ============================================================================= def generate_seed_corpus( build_dir: Path, source_dir: Path, fuzz_dir: Path, ) -> None: """Generate seed corpora from WAVM test files. Replaces generate-seed-corpus.sh. """ output.status("Generating seed corpus...") wavm_bin = build_dir / "bin" / f"wavm{EXE_EXT}" wast_seed_dir = fuzz_dir / "seed-corpus" / "wast" wasm_seed_dir = fuzz_dir / "seed-corpus" / "wasm" # Clean and recreate seed directories for seed_dir in (wast_seed_dir, wasm_seed_dir): if seed_dir.exists(): shutil.rmtree(seed_dir) seed_dir.mkdir(parents=True) # Find all .wast test files, excluding problematic ones test_dir = source_dir / "Test" excluded = {"skip-stack-guard-page.wast", "br_table.wast"} wast_files = sorted( f for f in test_dir.rglob("*.wast") if f.name not in excluded ) for wast_file in wast_files: for fmt, out_dir in [("--wast", wast_seed_dir), ("--wasm", wasm_seed_dir)]: result = run_command( [wavm_bin, "test", "dumpmodules", fmt, "--output-dir", out_dir, wast_file] ) if result.returncode != 0: output.verbose(f"dumpmodules {fmt} failed for {wast_file.name}: {result.stderr}") output.clear_status() output.print(f"Seed corpus generated in {fuzz_dir / 'seed-corpus'}") # ============================================================================= # Fuzzer Execution # ============================================================================= def _count_files(dir_path: Path) -> int: """Count files in a directory (non-recursive).""" if not dir_path.exists(): return 0 return sum(1 for f in dir_path.iterdir() if f.is_file()) def run_fuzzer( fc: FuzzerConfig, build_dir: Path, fuzz_dir: Path, source_dir: Path, jobs: int, workers: int, max_total_time_override: Optional[int] = None, use_fork: bool = False, ) -> None: """Run a single fuzzer. Replaces run-fuzzer.sh + run-fuzz-*.sh.""" corpus_dir = fuzz_dir / "corpora" / fc.name artifact_dir = fuzz_dir / "artifacts" / fc.name logs_dir = fuzz_dir / "logs" / fc.name corpus_dir.mkdir(parents=True, exist_ok=True) artifact_dir.mkdir(parents=True, exist_ok=True) logs_dir.mkdir(parents=True, exist_ok=True) fuzzer_bin = build_dir / "bin" / f"fuzz-{fc.name}{EXE_EXT}" cmd: list[str] = [str(fuzzer_bin), str(corpus_dir)] # Add seed directories (read-only corpus dirs for libFuzzer) for seed_rel in fc.seed_dirs: seed_path = fuzz_dir / seed_rel if seed_path.exists(): cmd.append(str(seed_path)) # Common libFuzzer flags cmd.extend([ f"-artifact_prefix={artifact_dir}/", "-use_value_profile=1", "-reduce_depth=1", "-shrink=1", ]) # Time and size limits max_time = max_total_time_override if max_total_time_override is not None else fc.max_total_time cmd.append(f"-max_total_time={max_time}") cmd.append(f"-max_len={fc.max_len}") # Per-fuzzer overrides if fc.dict_file: dict_path = source_dir / "Test" / "fuzz" / fc.dict_file cmd.append(f"-dict={dict_path}") if fc.rss_limit_mb is not None: cmd.append(f"-rss_limit_mb={fc.rss_limit_mb}") if fc.reduce_inputs is not None: cmd.append(f"-reduce_inputs={fc.reduce_inputs}") # Parallelism mode if use_fork: cmd.extend([ f"-fork={jobs}", "-ignore_crashes=1", "-ignore_timeouts=1", "-ignore_ooms=1", ]) else: cmd.extend([ f"-jobs={jobs}", f"-workers={workers}", ]) # Run with output suppressed; use cwd=logs_dir so -jobs log files don't pollute CWD. proc = subprocess.Popen( cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, cwd=logs_dir, ) start = time.monotonic() try: while proc.poll() is None: elapsed = int(time.monotonic() - start) minutes, seconds = divmod(elapsed, 60) corpus_count = _count_files(corpus_dir) artifact_count = _count_files(artifact_dir) output.status( f"fuzz {fc.name}: {minutes}:{seconds:02d}," f" {corpus_count} corpus, {artifact_count} artifacts" ) # Sleep in small increments so we notice process exit promptly for _ in range(50): if proc.poll() is not None: break time.sleep(0.1) except KeyboardInterrupt: proc.terminate() proc.wait() raise finally: output.clear_status() def translate_compile_model_corpus(build_dir: Path, fuzz_dir: Path) -> None: """Translate compile-model corpus to WASM/WAST files. Replaces the translation step from run-all-fuzzers.sh. """ corpus_dir = fuzz_dir / "corpora" / "compile-model" wasm_dir = fuzz_dir / "translated" / "wasm" wast_dir = fuzz_dir / "translated" / "wast" corpus_dir.mkdir(parents=True, exist_ok=True) for d in (wasm_dir, wast_dir): if d.exists(): shutil.rmtree(d) d.mkdir(parents=True) output.status("Translating compile-model corpus...") translate_bin = build_dir / "bin" / f"translate-compile-model-corpus{EXE_EXT}" result = run_command([ translate_bin, corpus_dir, wasm_dir, wast_dir, ]) output.clear_status() if result.returncode != 0: output.error(f"translate-compile-model-corpus failed (exit code {result.returncode})") # ============================================================================= # Corpus Reduction # ============================================================================= def reduce_corpus(fc: FuzzerConfig, build_dir: Path, fuzz_dir: Path) -> None: """Reduce a fuzzer corpus via merge. Replaces reduce-corpus.sh.""" corpus_dir = fuzz_dir / "corpora" / fc.name reduced_dir = fuzz_dir / "corpora" / f"{fc.name}-reduced" artifact_dir = fuzz_dir / "artifacts" / fc.name if not corpus_dir.exists(): return # Clean and create reduced directory if reduced_dir.exists(): shutil.rmtree(reduced_dir) reduced_dir.mkdir(parents=True) artifact_dir.mkdir(parents=True, exist_ok=True) fuzzer_bin = build_dir / "bin" / f"fuzz-{fc.name}{EXE_EXT}" cmd = [ str(fuzzer_bin), str(reduced_dir), str(corpus_dir), f"-artifact_prefix={artifact_dir}/", "-use_value_profile=1", "-merge=1", ] output.status(f"Reducing corpus: {fc.name}") run_command(cmd) output.clear_status() # Replace original corpus with reduced version shutil.rmtree(corpus_dir) reduced_dir.rename(corpus_dir) # ============================================================================= # Helpers # ============================================================================= def _needs_seed_corpus(fuzz_dir: Path) -> bool: """Check whether the seed corpus directories are missing.""" wast_dir = fuzz_dir / "seed-corpus" / "wast" wasm_dir = fuzz_dir / "seed-corpus" / "wasm" return not wast_dir.exists() or not wasm_dir.exists() def _resolve_targets(target_list: Optional[list[str]]) -> list[str]: """Resolve --target arguments to a list of fuzzer names in execution order.""" if not target_list: return list(DEFAULT_TARGET_ORDER) for t in target_list: if t not in FUZZER_CONFIGS: raise RuntimeError( f"Unknown fuzz target: {t}. " f"Available: {list(FUZZER_CONFIGS.keys())}" ) # Preserve the canonical order for targets that were requested return [t for t in DEFAULT_TARGET_ORDER if t in target_list] def _snapshot_corpus_counts(fuzz_dir: Path, targets: list[str]) -> dict[str, int]: """Snapshot the current corpus file counts for the given targets.""" return { name: _count_files(fuzz_dir / "corpora" / name) for name in targets } def _print_final_report( fuzz_dir: Path, targets: list[str], corpus_before: dict[str, int], ) -> None: """Print corpus changes and artifact files for the given targets.""" corpus_after = _snapshot_corpus_counts(fuzz_dir, targets) output.print("Corpus:") for name in targets: before = corpus_before.get(name, 0) after = corpus_after.get(name, 0) delta = after - before sign = "+" if delta > 0 else "" output.print(f" {name}: {before} -> {after} ({sign}{delta})") output.print("Artifacts:") any_found = False for name in targets: artifact_dir = fuzz_dir / "artifacts" / name if not artifact_dir.exists(): continue for artifact in sorted(artifact_dir.iterdir()): if artifact.is_file(): output.print(f" {artifact}") any_found = True if not any_found: output.print(" (none)") # ============================================================================= # Command Handler # ============================================================================= def cmd_fuzz(args: argparse.Namespace, ctx: CommandContext) -> int: """Dispatch fuzz sub-actions (run, seed, reduce).""" work_dir = ctx.work_dir source_dir = ctx.source_dir fuzz_dir = work_dir / "fuzz" fuzz_command = args.fuzz_command if fuzz_command == "seed": build_dir = build_libfuzzer(work_dir, source_dir, args.llvm_source, args.offline) generate_seed_corpus(build_dir, source_dir, fuzz_dir) return 0 if fuzz_command == "reduce": targets = _resolve_targets(args.target) build_dir = build_libfuzzer(work_dir, source_dir, args.llvm_source, args.offline) for name in targets: reduce_corpus(FUZZER_CONFIGS[name], build_dir, fuzz_dir) return 0 if fuzz_command == "run": if args.pull and not args.continuous: output.error("--pull requires --continuous") return 1 targets = _resolve_targets(args.target) jobs = args.jobs or os.cpu_count() or 1 workers = args.workers or jobs continuous = args.continuous # Fork mode by default in continuous; jobs mode by default otherwise use_fork = continuous and not args.no_fork corpus_before = _snapshot_corpus_counts(fuzz_dir, targets) try: iteration = 0 while True: iteration += 1 if continuous: output.print(f"\n{'=' * 60}") output.print(f"Fuzzing iteration {iteration}") output.print(f"{'=' * 60}") if args.pull: output.status("Pulling latest source...") subprocess.run(["git", "pull"], cwd=source_dir, check=True) output.clear_status() build_dir = build_libfuzzer(work_dir, source_dir, args.llvm_source, args.offline) if not args.skip_seed and _needs_seed_corpus(fuzz_dir): generate_seed_corpus(build_dir, source_dir, fuzz_dir) for name in targets: fc = FUZZER_CONFIGS[name] run_fuzzer( fc, build_dir, fuzz_dir, source_dir, jobs, workers, max_total_time_override=args.max_total_time, use_fork=use_fork, ) if continuous: reduce_corpus(fc, build_dir, fuzz_dir) # Translate compile-model corpus before running instantiate if name == "compile-model" and "instantiate" in targets: translate_compile_model_corpus(build_dir, fuzz_dir) if not continuous: break except KeyboardInterrupt: output.clear_status() output.print("\nInterrupted") _print_final_report(fuzz_dir, targets, corpus_before) return 0 output.error(f"Unknown fuzz command: {fuzz_command}") return 1 # ============================================================================= # Argparse Registration # ============================================================================= def register_fuzz_commands(subparsers: argparse._SubParsersAction) -> None: """Register the fuzz subcommand and its sub-subparsers.""" fuzz_parser = subparsers.add_parser("fuzz", help="Run libFuzzer fuzzing campaigns") fuzz_subparsers = fuzz_parser.add_subparsers(dest="fuzz_command", required=True) fuzz_run_parser = fuzz_subparsers.add_parser("run", help="Build and run fuzzers") fuzz_run_parser.add_argument( "--target", action="append", help="Fuzz target (assemble, disassemble, compile-model, instantiate). Repeatable. Default: all.", ) fuzz_run_parser.add_argument( "--max-total-time", type=int, help="Override max_total_time for all fuzzers (seconds)", ) fuzz_run_parser.add_argument( "--jobs", type=int, help="Number of parallel fuzzer jobs (default: CPU count)", ) fuzz_run_parser.add_argument( "--workers", type=int, help="Number of fuzzer workers (default: CPU count)", ) fuzz_run_parser.add_argument( "--skip-seed", action="store_true", help="Skip seed corpus generation", ) fuzz_run_parser.add_argument( "--continuous", action="store_true", help="Loop indefinitely: rebuild, fuzz, reduce corpus, repeat", ) fuzz_run_parser.add_argument( "--pull", action="store_true", help="Git pull WAVM source between iterations (only with --continuous)", ) fuzz_run_parser.add_argument( "--no-fork", action="store_true", help="Use -jobs/-workers instead of -fork mode (fork is default in --continuous)", ) fuzz_subparsers.add_parser("seed", help="Generate seed corpus from test files") fuzz_reduce_parser = fuzz_subparsers.add_parser("reduce", help="Reduce fuzzer corpus via merge") fuzz_reduce_parser.add_argument( "--target", action="append", help="Fuzz target to reduce. Repeatable. Default: all.", ) fuzz_parser.set_defaults(func=cmd_fuzz) ================================================ FILE: Build/lib/lint.py ================================================ """Python linting tasks using ruff and ty.""" import argparse from pathlib import Path from .context import CommandContext from .output import output from .platform import run_command from .toolchain import is_command_available from .task_graph import Task, TaskResult, execute class PythonLintTask(Task): """Run a Python linter via uvx on the Build directory.""" def __init__(self, source_dir: Path, tool: str, args: list[str]): super().__init__( name=f"python_lint_{tool}", description=f"Python lint: {tool}", ) self.source_dir = source_dir self.tool = tool self.args = args def run(self) -> TaskResult: cmd = ["uvx", self.tool, *self.args] result = run_command(cmd, cwd=self.source_dir / "Build") if result.returncode != 0: return TaskResult(False, result.format_failure(f"{self.tool} failed:")) return TaskResult(True) def create_lint_tasks( source_dir: Path, fix: bool = False, ) -> Task: """Create Python lint tasks (ruff + ty). Returns the completion task.""" lint_complete_task = Task("lint_complete", "Completion of all lint tasks") if is_command_available("uvx"): ty_task = PythonLintTask(source_dir, "ty", ["check"]) lint_complete_task.dependencies.append(ty_task) ruff_args = ["check", "--fix"] if fix else ["check"] ruff_task = PythonLintTask(source_dir, "ruff", ruff_args) lint_complete_task.dependencies.append(ruff_task) else: output.error( "Warning: uvx not found, skipping Python linting (ty, ruff)." ) return lint_complete_task # ============================================================================= # Command Handler # ============================================================================= def cmd_lint(args: argparse.Namespace, ctx: CommandContext) -> int: """Run Python linters (ruff + ty).""" lint_task = create_lint_tasks(ctx.source_dir, fix=args.fix) return 0 if execute([lint_task]) else 1 def register_lint(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser( "lint", help="Run Python linters (ruff + ty)" ) p.add_argument( "--fix", action="store_true", help="Auto-fix ruff issues (ty does not support auto-fix)", ) p.set_defaults(func=cmd_lint) ================================================ FILE: Build/lib/llvm.py ================================================ """LLVM download, build, and version management.""" import functools import shutil import sys from dataclasses import dataclass from pathlib import Path from typing import Optional, Union from .platform import LINUX, MACOS, WINDOWS, get_target_arch, run_command, download_and_extract from .task_graph import Task, TaskResult # ============================================================================= # LLVM Configuration # ============================================================================= @dataclass class LLVMConfig: """LLVM build configuration. CMake arguments are handled by WAVM-LLVM's build-llvm.py and cmake cache files. This class only tracks config names and platform restrictions. """ name: str # Platform restrictions posix_only: bool = False windows_only: bool = False # LLVM configurations (matching WAVM-LLVM repo) # CMake args are defined in WAVM-LLVM/Build/cmake/*.cmake LLVM_CONFIGS = [ LLVMConfig(name="LTO"), LLVMConfig(name="RelWithDebInfo"), LLVMConfig(name="Debug"), LLVMConfig(name="Checked"), LLVMConfig(name="Sanitized", posix_only=True), # Sanitizers work best on POSIX ] def get_applicable_llvm_configs() -> list[LLVMConfig]: """Get LLVM configs applicable for the current platform.""" return [ c for c in LLVM_CONFIGS if not (c.posix_only and WINDOWS) and not (c.windows_only and not WINDOWS) ] # ============================================================================= # LLVM Constants # ============================================================================= LLVM_VERSION = "21" # WAVM-LLVM repository for patches and pre-built binaries WAVM_LLVM_GIT_URL = "https://github.com/WAVM/WAVM-LLVM.git" WAVM_LLVM_RELEASES_URL = "https://github.com/WAVM/WAVM-LLVM/releases" LLVM_PROJECT_GIT_URL = "https://github.com/llvm/llvm-project.git" # ============================================================================= # LLVM Utilities # ============================================================================= def get_platform_name() -> str: """Get the platform name for LLVM release downloads (e.g. "macos-arm64").""" if LINUX: system_name = "linux" elif MACOS: system_name = "macos" elif WINDOWS: system_name = "windows" else: raise RuntimeError(f"Unsupported system: {sys.platform}") arch_name = {"x86_64": "x64", "aarch64": "arm64"}[get_target_arch()] return f"{system_name}-{arch_name}" def _get_release_tag_for_commit(commit_hash: str) -> str: """Construct the expected release tag for a WAVM-LLVM commit.""" return f"{LLVM_VERSION}.x-{commit_hash}" def get_llvm_download_url(release_tag: str, config_name: str) -> str: """Get the download URL for a pre-built LLVM configuration.""" platform_name = get_platform_name() ext = "zip" if platform_name.startswith("windows") else "tar.xz" filename = f"llvm-{LLVM_VERSION}-{platform_name}-{config_name}.{ext}" return f"{WAVM_LLVM_RELEASES_URL}/download/{release_tag}/{filename}" # ============================================================================= # LLVM Tasks # ============================================================================= class CloneWAVMLLVMTask(Task): """Clone or update the WAVM-LLVM repository. This task only clones/updates WAVM-LLVM which contains: - build-llvm.py script for building LLVM - patches/ directory with WAVM-specific patches - LLVM_COMMIT file with pinned commit hash - Build/cmake/ directory with cmake cache files """ def __init__(self, scratch_dir: Path, offline: bool = False): super().__init__( name="clone_wavm_llvm", description="WAVM-LLVM: clone", ) self.scratch_dir = scratch_dir self.offline = offline def run(self) -> TaskResult: wavm_llvm_dir = self.scratch_dir / "WAVM-LLVM" if self.offline: if not wavm_llvm_dir.exists(): return TaskResult( False, f"WAVM-LLVM not found at {wavm_llvm_dir} (--offline requires a prior clone)", ) elif wavm_llvm_dir.exists(): run_command(["git", "fetch", "origin"], cwd=wavm_llvm_dir) run_command(["git", "checkout", f"release/{LLVM_VERSION}.x"], cwd=wavm_llvm_dir) result = run_command(["git", "pull", "--ff-only"], cwd=wavm_llvm_dir) if result.returncode != 0: # Pull failed, try reset run_command( ["git", "reset", "--hard", f"origin/release/{LLVM_VERSION}.x"], cwd=wavm_llvm_dir, ) else: result = run_command( [ "git", "clone", "--depth", "1", "--branch", f"release/{LLVM_VERSION}.x", WAVM_LLVM_GIT_URL, wavm_llvm_dir, ] ) if result.returncode != 0: return TaskResult(False, result.format_failure("Failed to clone WAVM-LLVM")) # Verify build-llvm.py exists build_script = wavm_llvm_dir / "build-llvm.py" if not build_script.exists(): return TaskResult(False, "build-llvm.py not found in WAVM-LLVM repo") # Get the short commit hash for release tag lookup result = run_command( ["git", "rev-parse", "--short=7", "HEAD"], cwd=wavm_llvm_dir ) if result.returncode != 0: return TaskResult(False, result.format_failure("Failed to get WAVM-LLVM commit hash")) commit_hash = result.stdout.strip() return TaskResult( True, artifacts={ "wavm_llvm_dir": wavm_llvm_dir, "commit_hash": commit_hash, }, ) class DownloadLLVMTask(Task): """Download pre-built LLVM from WAVM-LLVM GitHub releases. Uses the cloned WAVM-LLVM commit hash to find the matching release. Falls back to the latest release if no matching release exists yet. """ def __init__( self, config: LLVMConfig, clone_task: CloneWAVMLLVMTask, scratch_dir: Path, ): platform_name = get_platform_name() super().__init__( name=f"llvm_download_{platform_name}_{config.name}", description=f"LLVM {config.name} ({platform_name}): download", dependencies=[clone_task], ) self.config = config self.clone_task = clone_task self.scratch_dir = scratch_dir def run(self) -> TaskResult: assert self.clone_task.result is not None commit_hash: str = self.clone_task.result.artifacts["commit_hash"] install_dir = self.scratch_dir / "llvm-install" / f"{get_platform_name()}-{self.config.name}" release_tag = _get_release_tag_for_commit(commit_hash) stamp_file = install_dir / ".download_stamp" if stamp_file.exists(): if stamp_file.read_text().strip() == release_tag: cmake_dir = install_dir / "lib" / "cmake" / "llvm" if cmake_dir.exists(): return TaskResult(True, artifacts={"llvm_install_dir": install_dir}) # Clean and download if install_dir.exists(): shutil.rmtree(install_dir) try: url = get_llvm_download_url(release_tag, self.config.name) download_and_extract(url, install_dir) except Exception as e: return TaskResult(False, f"Failed to download LLVM {self.config.name}: {e}") # Write stamp file stamp_file.write_text(release_tag) cmake_dir = install_dir / "lib" / "cmake" / "llvm" if not cmake_dir.exists(): return TaskResult(False, f"Downloaded LLVM missing cmake config: {cmake_dir}") return TaskResult(True, artifacts={"llvm_install_dir": install_dir}) class UseLocalLLVMTask(Task): """Use a previously downloaded LLVM installation (offline mode).""" def __init__(self, config: LLVMConfig, scratch_dir: Path): platform_name = get_platform_name() super().__init__( name=f"llvm_local_{platform_name}_{config.name}", description=f"LLVM {config.name} ({platform_name}): use local", ) self.config = config self.scratch_dir = scratch_dir def run(self) -> TaskResult: install_dir = self.scratch_dir / "llvm-install" / f"{get_platform_name()}-{self.config.name}" cmake_dir = install_dir / "lib" / "cmake" / "llvm" if not cmake_dir.exists(): return TaskResult( False, f"LLVM {self.config.name} not found at {install_dir}" " (--offline requires a prior download or build)", ) return TaskResult(True, artifacts={"llvm_install_dir": install_dir}) class BuildLLVMTask(Task): """Build an LLVM configuration from source using build-llvm.py. Delegates to WAVM-LLVM's build-llvm.py script which handles: - Cloning llvm-project at the pinned commit - Applying patches - Incremental build detection - Configuring and building with cmake cache files """ def __init__( self, config: LLVMConfig, clone_task: "CloneWAVMLLVMTask", scratch_dir: Path, force_rebuild: bool, prev_build_task: Optional[Task] = None, ): # Chain builds to serialize access to shared llvm-project directory deps: list[Task] = [clone_task] if prev_build_task: deps.append(prev_build_task) platform_name = get_platform_name() super().__init__( name=f"llvm_build_{platform_name}_{config.name}", description=f"LLVM {config.name} ({platform_name}): build", dependencies=deps, ) self.config = config self.clone_task = clone_task self.scratch_dir = scratch_dir self.force_rebuild = force_rebuild def run(self) -> TaskResult: assert self.clone_task.result is not None wavm_llvm_dir: Path = self.clone_task.result.artifacts["wavm_llvm_dir"] build_script = wavm_llvm_dir / "build-llvm.py" # Use llvm-install/{platform}-{config} to match DownloadLLVMTask's directory structure install_dir = self.scratch_dir / "llvm-install" / f"{get_platform_name()}-{self.config.name}" # Build command cmd: list[Union[str, Path]] = [ sys.executable, build_script, "--config", self.config.name, "--work-dir", self.scratch_dir, "--install-dir", install_dir, ] if self.force_rebuild: cmd.append("--clean") result = run_command(cmd) if result.returncode != 0: return TaskResult(False, result.format_failure("build-llvm.py failed")) # Verify install directory exists cmake_dir = install_dir / "lib" / "cmake" / "llvm" if not cmake_dir.exists(): return TaskResult( False, f"LLVM build completed but cmake config not found: {cmake_dir}" ) return TaskResult(True, artifacts={"llvm_install_dir": install_dir}) @dataclass class _LLVMState: """Mutable state for the LLVM task factory, created once per (work_dir, build_from_source, offline).""" llvm_work_dir: Path clone_task: Optional[CloneWAVMLLVMTask] = None prev_build_task: Optional[Task] = None @functools.cache def _init_llvm( work_dir: Path, build_from_source: bool, offline: bool ) -> _LLVMState: """One-time LLVM infrastructure setup. Cached per (work_dir, build_from_source, offline).""" llvm_work_dir = work_dir / "llvm" state = _LLVMState(llvm_work_dir=llvm_work_dir) # Clone WAVM-LLVM for both source builds and downloads (to get the commit hash # for release tag lookup). Only skip for offline downloads (UseLocalLLVMTask). if not (offline and not build_from_source): state.clone_task = CloneWAVMLLVMTask(llvm_work_dir, offline=offline) return state @functools.cache def get_llvm_task( work_dir: Path, build_from_source: bool, config_name: str, offline: bool = False, ) -> Task: """Get or create an LLVM task by config name. Cached per unique argument set.""" state = _init_llvm(work_dir, build_from_source, offline) llvm_config = next( (c for c in get_applicable_llvm_configs() if c.name == config_name), None ) if llvm_config is None: raise ValueError(f"Unknown LLVM config: {config_name!r}") if build_from_source: assert state.clone_task is not None task: Task = BuildLLVMTask( config=llvm_config, clone_task=state.clone_task, scratch_dir=state.llvm_work_dir, force_rebuild=False, prev_build_task=state.prev_build_task, ) state.prev_build_task = task elif offline: task = UseLocalLLVMTask( config=llvm_config, scratch_dir=state.llvm_work_dir, ) else: assert state.clone_task is not None task = DownloadLLVMTask( config=llvm_config, clone_task=state.clone_task, scratch_dir=state.llvm_work_dir, ) return task # The LLVM toolchain config provides clang, clang-format, clang-tidy, lld, etc. LLVM_TOOLCHAIN_CONFIG = "LTO" def get_llvm_toolchain_task( work_dir: Path, build_from_source: bool, offline: bool = False, ) -> Task: """Get the LLVM toolchain task (provides clang, lld, clang-format, etc.).""" return get_llvm_task(work_dir, build_from_source, LLVM_TOOLCHAIN_CONFIG, offline=offline) ================================================ FILE: Build/lib/output.py ================================================ """Console output management with support for status lines and verbosity levels.""" import io import os import sys class Output: """Manages console output with support for status lines and verbosity levels.""" def __init__(self) -> None: self.verbose_enabled: bool = False assert isinstance(sys.stdout, io.TextIOWrapper) assert isinstance(sys.stderr, io.TextIOWrapper) self.stdout: io.TextIOWrapper = sys.stdout self.stderr: io.TextIOWrapper = sys.stderr self.interactive: bool = self.stdout.isatty() self._status_lines: list[str] = [] def _get_terminal_width(self) -> int: try: return os.get_terminal_size(self.stdout.fileno()).columns except OSError: return 80 def _write_atomic(self, data: str, file: io.TextIOWrapper) -> None: """Write to a stream and flush, bypassing line buffering for atomicity.""" # Write to the underlying binary buffer to avoid line-buffered flushes # on each newline. This ensures the terminal only sees the final # state, not intermediate frames. file.flush() file.buffer.write(data.encode(file.encoding or "utf-8", errors="replace")) file.buffer.flush() def _build_clear(self) -> str: """Build escape sequence to erase the current status region.""" n = len(self._status_lines) if n == 0: return "" return f"\033[{n}A\033[J" def _build_status(self, lines: list[str]) -> str: """Build the string for rendering status lines.""" if not lines: return "" width = self._get_terminal_width() parts: list[str] = [] for line in lines: if len(line) > width - 1: line = line[: width - 4] + "..." parts.append(line + "\n") return "".join(parts) def status(self, *lines: str) -> None: """Print one or more status lines. In interactive mode: overwrites the previous status region atomically. In non-interactive mode: prints nothing. """ if not self.interactive: return line_list = list(lines) buf = self._build_clear() + self._build_status(line_list) self._status_lines = line_list self._write_atomic(buf, self.stdout) def clear_status(self) -> None: """Clear the status region.""" if not self.interactive or not self._status_lines: return buf = self._build_clear() self._status_lines = [] self._write_atomic(buf, self.stdout) def print(self, msg: str) -> None: """Print a permanent message, then reprint the status lines below it.""" if self.interactive: saved = list(self._status_lines) buf = self._build_clear() + msg + "\n" + self._build_status(saved) self._status_lines = saved self._write_atomic(buf, self.stdout) else: self._write_atomic(msg + "\n", self.stdout) def error(self, msg: str) -> None: """Print a permanent error message.""" if self.interactive and self._status_lines: self.clear_status() self._write_atomic(msg + "\n", self.stderr) def verbose(self, msg: str) -> None: """Print a message only in verbose mode, with status line handling.""" if self.verbose_enabled: self.print(msg) # Global singleton instance output = Output() ================================================ FILE: Build/lib/platform.py ================================================ """Platform detection, command execution, and compiler/linker utilities.""" import functools import os import platform as platform_mod import re import shlex import shutil import subprocess import sys import tarfile import time import urllib.error import urllib.request import zipfile from pathlib import Path from typing import Literal, Optional, Sequence, Union from .output import output # ============================================================================= # Platform Detection # ============================================================================= # Platform detection (evaluated once at module load) WINDOWS = sys.platform == "win32" MACOS = sys.platform == "darwin" LINUX = sys.platform.startswith("linux") # Executable extension EXE_EXT = ".exe" if WINDOWS else "" # Platform-specific configuration if WINDOWS: LIB_PATH_VAR = None CPACK_CONFIG = {"ZIP": ".zip"} if shutil.which("makensis"): CPACK_CONFIG["NSIS"] = ".exe" elif MACOS: LIB_PATH_VAR = "DYLD_LIBRARY_PATH" CPACK_CONFIG = {"TGZ": ".tar.gz"} elif LINUX: LIB_PATH_VAR = "LD_LIBRARY_PATH" CPACK_CONFIG = {"TGZ": ".tar.gz", "DEB": ".deb"} if shutil.which("rpmbuild"): CPACK_CONFIG["RPM"] = ".rpm" else: raise RuntimeError(f"Unsupported platform: {sys.platform}") def get_wavm_bin_path(build_dir: Union[str, Path]) -> Path: """Get path to wavm binary given a build or install directory.""" return Path(build_dir) / "bin" / f"wavm{EXE_EXT}" # ============================================================================= # Windows MSVC Environment # ============================================================================= def find_vcvarsall() -> Optional[Path]: """Find vcvarsall.bat from Visual Studio installation.""" if not WINDOWS: return None vswhere = Path(r"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe") if not vswhere.exists(): return None try: result = subprocess.run( [vswhere, "-latest", "-property", "installationPath"], capture_output=True, text=True, ) if result.returncode == 0: vs_path = Path(result.stdout.strip()) vcvarsall = vs_path / "VC" / "Auxiliary" / "Build" / "vcvarsall.bat" if vcvarsall.exists(): return vcvarsall except Exception: pass return None @functools.cache def get_host_arch() -> str: """Get the true host CPU architecture, normalized to a canonical name. Returns "x86_64" or "aarch64". On ARM64 Windows running emulated x64 Python, platform.machine() incorrectly reports 'AMD64'. This function uses IsWow64Process2 to detect the true native architecture on Windows. """ if WINDOWS: import ctypes import ctypes.wintypes kernel32 = ctypes.windll.kernel32 kernel32.GetCurrentProcess.restype = ctypes.wintypes.HANDLE kernel32.IsWow64Process2.restype = ctypes.wintypes.BOOL kernel32.IsWow64Process2.argtypes = [ ctypes.wintypes.HANDLE, ctypes.POINTER(ctypes.c_ushort), ctypes.POINTER(ctypes.c_ushort), ] IMAGE_FILE_MACHINE_ARM64 = 0xAA64 process_machine = ctypes.c_ushort() native_machine = ctypes.c_ushort() if not kernel32.IsWow64Process2( kernel32.GetCurrentProcess(), ctypes.byref(process_machine), ctypes.byref(native_machine), ): raise RuntimeError("IsWow64Process2 failed") arch = "aarch64" if native_machine.value == IMAGE_FILE_MACHINE_ARM64 else "x86_64" output.verbose(f"Host architecture: {arch} (native_machine=0x{native_machine.value:04X})") return arch machine = platform_mod.machine() if machine in ("x86_64", "AMD64"): return "x86_64" elif machine in ("arm64", "aarch64"): return "aarch64" else: raise RuntimeError(f"Unsupported host architecture: {machine}") _target_arch: Optional[str] = None def set_target_arch(arch: str) -> None: """Set the target architecture for cross-compilation.""" global _target_arch if arch not in ("x86_64", "aarch64", "x64", "arm64"): raise ValueError(f"Unsupported target architecture: {arch}") _target_arch = {"x64": "x86_64", "arm64": "aarch64"}.get(arch, arch) def get_target_arch() -> str: """Get the target architecture (defaults to host architecture).""" return _target_arch or get_host_arch() def is_cross_compiling() -> bool: """Return True if the target architecture differs from the host.""" return _target_arch is not None and _target_arch != get_host_arch() def is_rosetta() -> bool: """Return True if targeting x86-64 on a macOS ARM64 host (Rosetta 2 emulation).""" return MACOS and get_host_arch() == "aarch64" and get_target_arch() == "x86_64" def get_cross_compile_cmake_args() -> list[str]: """Extra CMake arguments needed when cross-compiling on macOS.""" if MACOS and is_cross_compiling(): osx_arch = {"x86_64": "x86_64", "aarch64": "arm64"}[get_target_arch()] return [f"-DCMAKE_OSX_ARCHITECTURES={osx_arch}"] return [] def get_build_dir(work_dir: Path, subdir: str, config_name: str) -> Path: """Construct a build/install directory path. When cross-compiling, inserts the target arch as a subdirectory so that native and cross-compiled builds don't clobber each other. """ base = work_dir / subdir if is_cross_compiling(): base = base / get_target_arch() return base / config_name _vcvarsall_cmd: Optional[str] = None def init_env() -> None: """On Windows, run vcvarsall.bat and merge MSVC environment into os.environ.""" global _vcvarsall_cmd if not WINDOWS: return vcvarsall = find_vcvarsall() if not vcvarsall: return # Use the host architecture for vcvarsall.bat so we get native tools arch = {"x86_64": "amd64", "aarch64": "arm64"}[get_host_arch()] # Run vcvarsall.bat and capture the resulting environment vcvarsall_cmd = f'"{vcvarsall}" {arch}' _vcvarsall_cmd = vcvarsall_cmd cmd = f"{vcvarsall_cmd} && set" output.verbose(f"Running vcvarsall: {vcvarsall_cmd}") result = subprocess.run( cmd, shell=True, capture_output=True, text=True, ) vcvarsall_stderr = result.stderr.strip() if result.returncode != 0: raise RuntimeError( f"vcvarsall.bat failed for architecture '{arch}'.\n" f"{vcvarsall_stderr}\n" f"You may need to install the MSVC '{arch}' build tools" f" in the Visual Studio Installer." ) # Merge overrides into os.environ. for line in result.stdout.splitlines(): if "=" in line: key, _, value = line.partition("=") if os.environ.get(key) != value: os.environ[key] = value output.verbose(f"Extracted environment variable from vcvarsall.bat: {key}={value}") # Verify the LIB paths actually contain the target architecture. # vcvarsall may report success but silently configure the wrong architecture # (e.g. x64 instead of arm64). MSVC library paths contain the architecture # as a directory component: ...\lib\x64\, ...\lib\arm64\, etc. lib_env = os.environ.get("LIB", "") if lib_env: lib_paths_lower = lib_env.lower() # Map vcvarsall arch names to the directory names used in MSVC lib paths arch_dir = {"amd64": "x64", "arm64": "arm64", "x86": "x86"}.get(arch, arch) has_target = f"\\{arch_dir}\\" in lib_paths_lower or lib_paths_lower.endswith( f"\\{arch_dir}" ) if not has_target: msg = ( f"MSVC library paths do not contain '{arch_dir}' directories.\n" f"vcvarsall.bat was called with '{arch}' but LIB contains:\n" f" {lib_env}\n" ) if vcvarsall_stderr: msg += f"vcvarsall.bat stderr:\n {vcvarsall_stderr}\n" msg += ( f"You may need to install the MSVC '{arch}' build tools" f" in the Visual Studio Installer." ) raise RuntimeError(msg) # ============================================================================= # Command Execution # ============================================================================= def _decode_text(data: bytes) -> str: """Decode subprocess output bytes to str, normalizing line endings.""" return data.decode("utf-8", errors="replace").replace("\r\n", "\n") class CommandResult: """Result of a command execution, with helpers for formatting output.""" def __init__( self, cmd: Sequence[Union[str, Path]], returncode: int, stdout: str, stderr: str, stdout_bytes: bytes, stderr_bytes: bytes, cwd: Optional[Union[str, Path]] = None, env: Optional[dict[str,str]] = None, timed_out: bool = False, ): self.cmd = cmd self.cwd = cwd self.env = env self.returncode = returncode self.stdout = stdout self.stderr = stderr self.stdout_bytes = stdout_bytes self.stderr_bytes = stderr_bytes self.timed_out = timed_out @staticmethod def from_completed( cmd: Sequence[Union[str, Path]], result: subprocess.CompletedProcess, cwd: Optional[Union[str, Path]], env: Optional[dict[str,str]], ) -> "CommandResult": stdout_bytes: bytes = result.stdout stderr_bytes: bytes = result.stderr return CommandResult( cmd, result.returncode, _decode_text(stdout_bytes), _decode_text(stderr_bytes), stdout_bytes, stderr_bytes, cwd=cwd, env=env, ) @staticmethod def from_timeout( cmd: Sequence[Union[str, Path]], exc: subprocess.TimeoutExpired, cwd: Optional[Union[str, Path]], env: Optional[dict[str,str]], ) -> "CommandResult": def to_bytes(data: object) -> bytes: if data is None: return b"" if isinstance(data, bytes): return data if isinstance(data, str): return data.encode("utf-8") return str(data).encode("utf-8") stdout_bytes = to_bytes(exc.stdout) stderr_bytes = to_bytes(exc.stderr) return CommandResult( cmd, -1, _decode_text(stdout_bytes), _decode_text(stderr_bytes), stdout_bytes, stderr_bytes, cwd=cwd, env=env, timed_out=True, ) @property def output(self) -> str: """Combine stdout and stderr, including both when both are non-empty.""" parts = [] if self.stderr: parts.append(self.stderr) if self.stdout: parts.append(self.stdout) return "\n".join(parts) if parts else "(no output)" def format_failure( self, context: str = "", hint: Optional[str] = None, expected_returncode: Optional[int] = None, ) -> str: """Format a failure message including output, exit code, and command. The "Command:" line is a single copy-pasteable shell command that reproduces the failure, including cwd changes and extra environment variables. """ parts = [] if context: parts.append(context) parts.append(self.output) if self.timed_out: parts.append("TIMEOUT") elif expected_returncode is not None: parts.append( f"Exit code: {self.returncode} (expected {expected_returncode})" ) else: parts.append(f"Exit code: {self.returncode}") parts.append(f"Command: {self._format_reproducible_command()}") if hint is not None: parts.append(hint) parts.append("-" * 80) return "\n".join(parts) def _format_reproducible_command(self) -> str: """Format a single copy-pasteable shell command to reproduce this invocation.""" if WINDOWS: return self._format_windows_command() else: return self._format_posix_command() def _format_posix_command(self) -> str: """Format a POSIX shell command: (cd /path && VAR=val command 'args')""" needs_cwd = self.cwd is not None and Path(self.cwd).resolve() != Path.cwd() env_vars = self._get_extra_env_vars() cmd_str = " ".join(shlex.quote(str(arg)) for arg in self.cmd) # Build inline env prefix if env_vars: env_prefix = " ".join( f"{key}={shlex.quote(value)}" for key, value in env_vars ) cmd_str = f"{env_prefix} {cmd_str}" if needs_cwd: return f"(cd {shlex.quote(str(self.cwd))} && {cmd_str})" return cmd_str def _format_windows_command(self) -> str: """Format a Windows cmd.exe command with setlocal/endlocal scoping.""" needs_cwd = self.cwd is not None and Path(self.cwd).resolve() != Path.cwd() env_vars = self._get_extra_env_vars() needs_scope = bool(_vcvarsall_cmd) or bool(env_vars) or needs_cwd cmd_str = subprocess.list2cmdline(str(arg) for arg in self.cmd) fragments: list[str] = [] if needs_scope: fragments.append("setlocal") if _vcvarsall_cmd: fragments.append(_vcvarsall_cmd) if needs_cwd: fragments.append(f'cd /d "{self.cwd}"') for key, value in env_vars: fragments.append(f'set "{key}={value}"') fragments.append(cmd_str) if needs_scope: # Use single & so endlocal runs regardless of exit code return " && ".join(fragments) + " & endlocal" return cmd_str def _get_extra_env_vars(self) -> list[tuple[str, str]]: """Return sorted list of (key, value) pairs for env vars that differ from os.environ.""" if not self.env: return [] return sorted( (key, value) for key, value in self.env.items() if os.environ.get(key) != value ) def run_command( cmd: Sequence[Union[str, Path]], cwd: Optional[Union[str, Path]] = None, env: Optional[dict[str,str]] = None, timeout: Optional[float] = None, ) -> CommandResult: """Run a command and return the result. Both cmd arguments and cwd can be Path objects - subprocess.run handles them automatically. env, if provided, contains extra environment variables merged on top of os.environ. Timeouts are caught and returned as a CommandResult with timed_out=True. """ merged_env = dict(os.environ) | (env or {}) try: result = subprocess.run( cmd, cwd=cwd, env=merged_env, capture_output=True, timeout=timeout, ) return CommandResult.from_completed(cmd, result, cwd, env) except subprocess.TimeoutExpired as exc: return CommandResult.from_timeout(cmd, exc, cwd, env) # ============================================================================= # Download Utilities # ============================================================================= _DOWNLOAD_MAX_RETRIES = 5 _DOWNLOAD_INITIAL_DELAY = 5 # seconds; doubled after each retry def _download_with_retry(url: str, dest: Path) -> None: """Download a URL to a local file, retrying on transient errors.""" delay = _DOWNLOAD_INITIAL_DELAY for attempt in range(_DOWNLOAD_MAX_RETRIES): try: urllib.request.urlretrieve(url, dest) return except (urllib.error.URLError, ConnectionError, OSError) as e: if attempt + 1 < _DOWNLOAD_MAX_RETRIES: output.print(f"download: {e} (retrying in {delay}s)") time.sleep(delay) delay *= 2 else: raise def download_and_extract(url: str, dest_dir: Path) -> None: """Download and extract an archive to the destination directory.""" # Determine archive type from URL if url.endswith(".tar.xz"): archive_ext = ".tar.xz" tar_mode: Optional[Literal["r:xz", "r:gz"]] = "r:xz" elif url.endswith(".tar.gz"): archive_ext = ".tar.gz" tar_mode = "r:gz" elif url.endswith(".zip"): archive_ext = ".zip" tar_mode = None else: raise RuntimeError(f"Unknown archive type: {url}") # Download to temporary file temp_file = dest_dir / f"download{archive_ext}" dest_dir.mkdir(parents=True, exist_ok=True) try: _download_with_retry(url, temp_file) # Extract if tar_mode is not None: with tarfile.open(str(temp_file), tar_mode) as tar: # Use filter='data' on Python 3.12+ to avoid deprecation warning if sys.version_info >= (3, 12): tar.extractall(dest_dir, filter="data") else: tar.extractall(dest_dir) else: with zipfile.ZipFile(temp_file, "r") as zip_ref: zip_ref.extractall(dest_dir) finally: # Clean up temp file if temp_file.exists(): temp_file.unlink() # ============================================================================= # Compiler/Linker Detection # ============================================================================= def get_compiler_major_version( command: list[str], version_pattern: str ) -> Optional[int]: """Run a compiler command and extract its major version. Returns the first capture group of version_pattern as an int, or None if the compiler is not found or the pattern doesn't match. """ try: result = run_command(command) match = re.search(version_pattern, result.stdout + result.stderr) if match: return int(match.group(1)) except FileNotFoundError: pass return None def get_gcc_clang_major_version(compiler: str) -> Optional[int]: """Get the major version of a gcc/clang-compatible compiler.""" return get_compiler_major_version([compiler, "--version"], r"(\d+)\.\d+") def get_msvc_major_version() -> Optional[int]: """Get the major version of MSVC (cl.exe).""" return get_compiler_major_version(["cl"], r"Version (\d+)\.") ================================================ FILE: Build/lib/run.py ================================================ """Build-and-run subcommand.""" import argparse import subprocess from .build import build_single_config from .context import CommandContext from .output import output from .platform import EXE_EXT def cmd_run(args: argparse.Namespace, ctx: CommandContext) -> int: """Build and run a program from the build output.""" program_args = args.program_args # Strip leading '--' if present if program_args and program_args[0] == "--": program_args = program_args[1:] if not program_args: output.error("Error: No program specified. Usage: dev.py run [--config CONFIG] -- PROGRAM [ARGS...]") return 1 program_name = program_args[0] build_dir, err = build_single_config( ctx.work_dir, ctx.source_dir, args.config, llvm_source=args.llvm_source, offline=args.offline, ninja_targets=[program_name], suppress_summary=True, ) if err is not None: return err assert build_dir is not None binary = build_dir / "bin" / (program_name + EXE_EXT) if not binary.exists(): output.error(f"Error: Binary not found at {binary}") return 1 result = subprocess.run([str(binary)] + program_args[1:]) return result.returncode def register_run(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser("run", help="Build and run a program from the build output") p.add_argument( "--config", default="LTO", help="Configuration to build (default: LTO)", ) p.add_argument( "program_args", nargs=argparse.REMAINDER, help="Program and arguments (after --)", ) p.set_defaults(func=cmd_run) ================================================ FILE: Build/lib/task_graph.py ================================================ """Task scheduling framework with parallel execution support.""" import os import threading import time from concurrent.futures import ThreadPoolExecutor, Future, wait, FIRST_COMPLETED from dataclasses import dataclass, field from datetime import timedelta from enum import Enum from typing import Any, Optional from .output import output class TaskState(Enum): """Task execution state.""" PENDING = "pending" # Waiting for dependencies READY = "ready" # Dependencies met, can be scheduled QUEUED = "queued" # Submitted to executor, waiting for worker RUNNING = "running" # Currently executing COMPLETED = "completed" # Finished successfully FAILED = "failed" # Finished with error SKIPPED = "skipped" # Skipped due to dependency failure @dataclass class TaskResult: """Result of a task execution.""" success: bool error_message: str = "" warning_message: str = "" # Named artifacts that dependent tasks can access artifacts: dict[str, Any] = field(default_factory=dict) class Task: """A unit of work in the task graph.""" def __init__( self, name: str, description: str, dependencies: Optional[list["Task"]] = None, priority: tuple[int, float] = (1, 0.0), # (level, -duration); lower = higher priority ): self.name = name self.description = description self.dependencies = dependencies or [] self.priority = priority self.state = TaskState.PENDING self.result: Optional[TaskResult] = None self.started_at: Optional[float] = None def run(self) -> TaskResult: # By default, do nothing and succeed. return TaskResult(True) # ============================================================================= # Module-level helpers # ============================================================================= def _format_duration(seconds: float) -> str: """Format a duration as a compact string.""" return str(timedelta(seconds=round(seconds))) def _update_states(tasks: list[Task]) -> None: """Update PENDING tasks to READY or SKIPPED based on dependencies. Loops until a fixed point so transitive skips propagate fully regardless of task ordering in the list. """ changed = True while changed: changed = False for task in tasks: if task.state != TaskState.PENDING: continue deps_met = True deps_failed = False for dep in task.dependencies: if dep.state in (TaskState.FAILED, TaskState.SKIPPED): deps_failed = True break if dep.state != TaskState.COMPLETED: deps_met = False if deps_failed: task.state = TaskState.SKIPPED changed = True elif deps_met: task.state = TaskState.READY changed = True def _get_ready_tasks(tasks: list[Task]) -> list[Task]: """Get tasks that are ready to run, sorted by priority (lowest first).""" ready = [t for t in tasks if t.state == TaskState.READY] ready.sort(key=lambda t: t.priority) return ready def _update_status(tasks: list[Task], start_time: float) -> None: """Update the status display with progress and running task info.""" now = time.monotonic() elapsed = now - start_time total = len(tasks) completed = sum( 1 for t in tasks if t.state in (TaskState.COMPLETED, TaskState.FAILED, TaskState.SKIPPED) ) running = [t for t in tasks if t.state == TaskState.RUNNING] if completed == total and not running: return running_count = len(running) ready_count = sum( 1 for t in tasks if t.state in (TaskState.QUEUED, TaskState.READY) ) pending_count = sum(1 for t in tasks if t.state == TaskState.PENDING) counts = f"{completed}/{total}" count_parts = [] if running_count: count_parts.append(f"{running_count} running") if ready_count: count_parts.append(f"{ready_count} ready") if pending_count: count_parts.append(f"{pending_count} pending") if count_parts: counts += f" ({', '.join(count_parts)})" lines = [f"[{_format_duration(elapsed)}] {counts}"] if running: # Longest running task longest = max(running, key=lambda t: now - (t.started_at or now)) longest_dur = now - (longest.started_at or now) lines.append(f" longest: {longest.description} ({_format_duration(longest_dur)})") # Most recently started task latest = max(running, key=lambda t: t.started_at or 0.0) if latest is not longest: lines.append(f" latest: {latest.description}") output.status(*lines) # ============================================================================= # DAG-driven executor # ============================================================================= def execute(demanded_tasks: list[Task], suppress_summary: bool = False) -> bool: """Execute tasks by walking the dependency DAG from demanded roots. Discovers all transitive dependencies, then runs tasks in parallel using a ThreadPoolExecutor. Tasks can dynamically add dependencies to other tasks during execution; the executor discovers newly added deps each iteration. Returns True if all tasks succeeded, False otherwise. If suppress_summary is True, suppresses the summary message on success. """ start_time = time.monotonic() # Discovery state tasks: list[Task] = [] task_names: set[str] = set() visited: set[int] = set() known_dep_counts: dict[int, int] = {} def discover(task: Task) -> None: if id(task) in visited: return visited.add(id(task)) assert task.name not in task_names, ( f"Duplicate task name: {task.name}" ) task_names.add(task.name) tasks.append(task) known_dep_counts[id(task)] = len(task.dependencies) for dep in task.dependencies: discover(dep) for task in demanded_tasks: discover(task) lock = threading.Lock() max_workers = os.cpu_count() or 4 with ThreadPoolExecutor(max_workers=max_workers) as executor: futures: dict[Future, Task] = {} while True: with lock: # Scan for dynamically added dependencies for task in list(tasks): current_count = len(task.dependencies) known_count = known_dep_counts[id(task)] if current_count > known_count: new_deps = task.dependencies[known_count:] known_dep_counts[id(task)] = current_count for dep in new_deps: if dep.state == TaskState.COMPLETED: raise RuntimeError( f"New dependency {dep.name} added to {task.name}" " but dependency already completed" ) discover(dep) _update_states(tasks) ready = _get_ready_tasks(tasks) # Don't resubmit tasks already in flight in_flight = {id(futures[f]) for f in futures} ready = [t for t in ready if id(t) not in in_flight] def run_task(task: Task) -> TaskResult: task.state = TaskState.RUNNING task.started_at = time.monotonic() output.verbose(f"Started: {task.description}") return task.run() def submit_task(task: Task) -> None: task.state = TaskState.QUEUED future = executor.submit(run_task, task) futures[future] = task # Submit highest priority tasks up to available slots available_slots = max_workers - len(futures) for task in ready[:available_slots]: submit_task(task) _update_status(tasks, start_time) if not futures: # No tasks running; check if there are pending tasks pending = [t for t in tasks if t.state == TaskState.PENDING] if not pending: break # Pending tasks but no futures means a deadlock break # Wait for at least one task to complete, with timeout for status updates done, _ = wait(futures.keys(), return_when=FIRST_COMPLETED, timeout=1.0) # If timeout expired with no completed tasks, just update status and continue if not done: with lock: _update_status(tasks, start_time) continue with lock: for future in done: task = futures.pop(future) try: result = future.result() task.result = result if result.success: task.state = TaskState.COMPLETED if result.warning_message: output.print(f"{task.description}: {result.warning_message}") output.verbose(f"Completed: {task.description}") else: task.state = TaskState.FAILED output.error(f"{task.description}: {result.error_message}") except Exception as e: task.state = TaskState.FAILED error_msg = f"{type(e).__name__}: {e}" task.result = TaskResult(False, error_msg) output.error(f"{task.description} raised {error_msg}") # Verify all tasks reached a terminal state terminal_states = {TaskState.COMPLETED, TaskState.FAILED, TaskState.SKIPPED} stuck_tasks = [t for t in tasks if t.state not in terminal_states] if stuck_tasks: output.clear_status() for task in stuck_tasks: dep_states = ", ".join( f"{d.name}={d.state.value}" for d in task.dependencies ) output.error( f"Task stuck in {task.state.value}: {task.description}" + (f" (deps: {dep_states})" if dep_states else "") ) assert False, ( f"{len(stuck_tasks)} task(s) never reached a terminal state" ) # Summary elapsed = time.monotonic() - start_time failed = [t for t in tasks if t.state == TaskState.FAILED] skipped = [t for t in tasks if t.state == TaskState.SKIPPED] completed = [t for t in tasks if t.state == TaskState.COMPLETED] elapsed_str = _format_duration(elapsed) assert len(failed) + len(skipped) + len(completed) == len(tasks) output.clear_status() warned = [ t for t in tasks if t.state == TaskState.COMPLETED and t.result and t.result.warning_message ] if failed or not suppress_summary: if failed: parts = [f"Failed: {len(failed)} task(s)"] if completed: parts.append(f"{len(completed)} completed") else: parts = [f"Completed {len(completed)} task(s)"] if warned: parts.append(f"with {len(warned)} warning(s)") if skipped: parts.append(f"{len(skipped)} skipped") output.print(f"{', '.join(parts)} in {elapsed_str}\n") return len(failed) == 0 ================================================ FILE: Build/lib/test.py ================================================ """Test execution, task management, and test history.""" import argparse import functools import os import re import signal import json import shutil import tempfile import threading import time from dataclasses import dataclass, field, replace from pathlib import Path from collections.abc import Sequence from typing import Optional, TYPE_CHECKING from .build import ( needs_aslr_workaround, get_applicable_wavm_configs, find_wavm_config, get_lint_config, create_wavm_configure_task, create_wavm_build_tasks, ) from .format import create_format_tasks from .lint import create_lint_tasks from .context import CommandContext from .coverage import CoverageReportTask from .llvm import get_llvm_toolchain_task from .output import output from .platform import ( LINUX, MACOS, WINDOWS, get_cross_compile_cmake_args, get_target_arch, get_wavm_bin_path, is_rosetta, run_command, ) from .tidy import create_tidy_tasks from .benchmark import get_benchmark_test_defs from .toolchain import is_command_available from .task_graph import Task, TaskResult, execute from .test_def import TestContext, TestDef, TestResult, TestStep from .wasi import ( WASI_TESTS, DownloadWasiSdkTask, CompileWasiTestTask, ) if TYPE_CHECKING: from .build import WAVMConfig # ============================================================================= # Test Definition Constants # ============================================================================= def _wavm_version_expected_output() -> str: """Build the expected output regex for the 'wavm version' test.""" wavm_version = (Path(__file__).parent.parent.parent / "VERSION").read_text().strip() arch = get_target_arch() os_name = "macos" if MACOS else "linux" if LINUX else "windows" return ( rf"(?s)WAVM version {re.escape(wavm_version)}.*" rf"LLVM version:\s+\d+\.\d+\.\d+.*" rf"Host target:\s+arch={arch} os={os_name}" ) _fuzz_max_threads = str(max(1, (os.cpu_count() or 1) // 2)) @functools.cache def get_tests() -> list[TestDef]: """Static tests (non-WAST, non-fuzz). Deferred to a function so that get_target_arch() and get_cross_compile_cmake_args() see the target arch set by command-line arguments.""" return [ # Built-in tests (wavm test ) TestDef( "HashMap", steps=[TestStep(command=["{wavm_bin}", "test", "hashmap"])], requires_runtime=False, ), TestDef( "HashSet", steps=[TestStep(command=["{wavm_bin}", "test", "hashset"])], requires_runtime=False, ), TestDef( "I128", steps=[TestStep(command=["{wavm_bin}", "test", "i128"])], requires_runtime=False ), TestDef( "LEB128", steps=[TestStep(command=["{wavm_bin}", "test", "leb128"])], requires_runtime=False, ), TestDef("ObjectLinker", steps=[TestStep(command=["{wavm_bin}", "test", "objectlinker"])]), TestDef("DWARF", steps=[TestStep(command=["{wavm_bin}", "test", "dwarf"])]), TestDef("C-API", steps=[TestStep(command=["{wavm_bin}", "test", "c-api"])]), TestDef("API", steps=[TestStep(command=["{wavm_bin}", "test", "api"])]), TestDef( "version", steps=[TestStep( command=["{wavm_bin}", "version"], expected_output=_wavm_version_expected_output(), )], ), # Run tests (wavm run ) *get_benchmark_test_defs(), TestDef( "examples_trap", steps=[ TestStep( command=["{wavm_bin}", "run", "--abi=wasi", "{source_dir}/Examples/trap.wast"], expected_returncode=1 if WINDOWS else -signal.SIGABRT, expected_output=r"(?s)Runtime exception: wavm\.outOfBoundsMemoryAccess\(\+65536\).*?Call stack:.*?wasm!.*?trap\.wast!store\+2.*?wasm!.*?trap\.wast!main\+1", ) ], ), *WASI_TESTS, # Embedder example tests - build and run examples that link against libWAVM TestDef( name="embedder-c", requires_shared_build=True, requires_unsanitized_build=True, requires_cmake_and_ninja=True, create_temp_dir=True, steps=[ TestStep( name="configure", collects_coverage=False, command=[ "cmake", "-S", "{source_dir}/Examples/embedder/c", "-B", "{temp_dir}", "-G", "Ninja", "-DCMAKE_BUILD_TYPE={build_type}", "-DCMAKE_PREFIX_PATH={build_dir}", *get_cross_compile_cmake_args(), ], ), TestStep(name="build", collects_coverage=False, command=["ninja", "-C", "{temp_dir}"]), TestStep( name="run", command=["{temp_dir}/embedder-example{exe_ext}"], expected_output=r"Hello, embedder-example\.c user!\nWASM call returned: 23", env={}, ), ], ), TestDef( name="embedder-cpp", requires_shared_build=True, requires_unsanitized_build=True, requires_cmake_and_ninja=True, create_temp_dir=True, steps=[ TestStep( name="configure", collects_coverage=False, command=[ "cmake", "-S", "{source_dir}/Examples/embedder/cpp", "-B", "{temp_dir}", "-G", "Ninja", "-DCMAKE_BUILD_TYPE={build_type}", "-DCMAKE_PREFIX_PATH={build_dir}", *get_cross_compile_cmake_args(), ], ), TestStep(name="build", collects_coverage=False, command=["ninja", "-C", "{temp_dir}"]), TestStep( name="run", command=["{temp_dir}/embedder-example{exe_ext}"], expected_output=r"Hello, embedder-example\.cpp user!\nWASM call returned: 25", env={}, ), ], ), TestDef( name="embedder-cpp-wasi", requires_shared_build=True, requires_unsanitized_build=True, requires_cmake_and_ninja=True, test_wasi_cpp_sources=["stdout"], create_temp_dir=True, steps=[ TestStep( name="configure", collects_coverage=False, command=[ "cmake", "-S", "{source_dir}/Examples/embedder/cpp-wasi", "-B", "{temp_dir}", "-G", "Ninja", "-DCMAKE_BUILD_TYPE={build_type}", "-DCMAKE_PREFIX_PATH={build_dir}", *get_cross_compile_cmake_args(), ], ), TestStep(name="build", collects_coverage=False, command=["ninja", "-C", "{temp_dir}"]), TestStep( name="run", command=["{temp_dir}/embedder-example{exe_ext}", "{wasi_wasm_dir}/stdout.wasm"], expected_output=r"Hello world!", env={}, ), ], ), # Compile and run precompiled module TestDef( name="compile_and_run_precompiled", create_temp_dir=True, steps=[ TestStep( name="compile", command=[ "{wavm_bin}", "compile", "{source_dir}/Examples/helloworld.wast", "{temp_dir}/helloworld.wasm", ], ), TestStep( name="run", command=["{wavm_bin}", "run", "--precompiled", "{temp_dir}/helloworld.wasm"], expected_output=r"Hello World!", ), ], ), # Object cache hit/miss verification TestDef( name="object_cache", create_temp_dir=True, steps=[ TestStep( name="cold_run", command=["{wavm_bin}", "run", "{source_dir}/Test/object-cache/module_a.wast"], expected_output=r"Object cache miss: fe1a07d742ee311117fd8aa867b099bd", unexpected_output=r"Object cache hit", env={"WAVM_OUTPUT": "trace-object-cache", "WAVM_OBJECT_CACHE_DIR": "{temp_dir}"}, ), TestStep( name="warm_run", command=["{wavm_bin}", "run", "{source_dir}/Test/object-cache/module_a.wast"], expected_output=r"Object cache hit: fe1a07d742ee311117fd8aa867b099bd", unexpected_output=r"Object cache miss", env={"WAVM_OUTPUT": "trace-object-cache", "WAVM_OBJECT_CACHE_DIR": "{temp_dir}"}, ), TestStep( name="invalidated_run", command=["{wavm_bin}", "run", "{source_dir}/Test/object-cache/module_b.wast"], expected_output=r"Object cache miss: 73a1a9dced2e363da054326fef90bd86", env={"WAVM_OUTPUT": "trace-object-cache", "WAVM_OBJECT_CACHE_DIR": "{temp_dir}"}, ), ], ), # Fuzz corpus tests - run fuzz targets on the corpora from the Git repo TestDef( "fuzz-assemble", steps=[ TestStep( command=[ "{build_dir}/bin/fuzz-assemble{exe_ext}", "--max-threads=" + _fuzz_max_threads, "{corpora_dir}/assemble", ] ) ], requires_fuzz_corpora_and_fuzz_targets=True, requires_runtime=False, ), TestDef( "fuzz-disassemble", steps=[ TestStep( command=[ "{build_dir}/bin/fuzz-disassemble{exe_ext}", "--max-threads=" + _fuzz_max_threads, "{corpora_dir}/disassemble", ] ) ], requires_fuzz_corpora_and_fuzz_targets=True, requires_runtime=False, ), TestDef( "fuzz-compile-model", steps=[ TestStep( command=[ "{build_dir}/bin/fuzz-compile-model{exe_ext}", "--max-threads=" + _fuzz_max_threads, "{corpora_dir}/compile-model", ] ) ], requires_fuzz_corpora_and_fuzz_targets=True, ), TestDef( "fuzz-instantiate", steps=[ TestStep( command=[ "{build_dir}/bin/fuzz-instantiate{exe_ext}", "--max-threads=" + _fuzz_max_threads, "{corpora_dir}/instantiate", ], timeout=1200, ) ], requires_fuzz_corpora_and_fuzz_targets=True, ), ] # GDB backtrace test - verifies GDB can see JIT-compiled function names (Linux only) GDB_BACKTRACE_TEST = TestDef( name="gdb_backtrace", steps=[ TestStep( command=[ "gdb", "-batch", "-ex", "run", "-ex", "bt", "--args", "{wavm_bin}", "run", "{source_dir}/Examples/trap.wast", ], expected_output=r"(?i)functiondef", timeout=120, ) ], ) # Fuzz corpora repository FUZZ_CORPORA_URL = "https://github.com/WAVM/wavm-fuzz-corpora.git" @dataclass class WASTTestDir: """A directory of WAST script tests with shared arguments and per-test overrides.""" directory: str name_prefix: str extra_args: list[str] asan_env_overrides: dict[str, dict[str, str]] = field(default_factory=dict) tsan_env_overrides: dict[str, dict[str, str]] = field(default_factory=dict) env_overrides: dict[str, dict[str, str]] = field(default_factory=dict) WAST_TEST_DIRS = [ WASTTestDir( "Test/wavm", "wavm/", [ "--test-cloning", "--strict-assert-invalid", "--strict-assert-malformed", "--enable", "all", ], asan_env_overrides={"wavm/exceptions.wast": {"ASAN_OPTIONS": "detect_leaks=0"}}, tsan_env_overrides={}, env_overrides={ "wavm/exceptions.wast": {"WAVM_OUTPUT": "trace-unwind"}, "wavm/infinite-recursion.wast": {"WAVM_OUTPUT": "trace-unwind"}, }, ), WASTTestDir( "Test/wavm/issues", "wavm/issues/", [ "--strict-assert-invalid", "--strict-assert-malformed", ], ), WASTTestDir( "Test/WebAssembly/spec", "WebAssembly/spec/", ["--test-cloning"], ), WASTTestDir( "Test/WebAssembly/spec/simd", "", ["--test-cloning", "--strict-assert-invalid", "--strict-assert-malformed"], ), WASTTestDir( "Test/WebAssembly/memory64", "WebAssembly/memory64/", ["--test-cloning", "--enable", "memory64", "--disable", "ref-types"], ), WASTTestDir( "Test/WebAssembly/threads", "WebAssembly/threads/", ["--test-cloning", "--enable", "atomics", "--disable", "ref-types"], ), WASTTestDir( "Test/WebAssembly/multi-memory", "WebAssembly/multi-memory/", ["--test-cloning", "--enable", "multi-memory"], ), ] # ============================================================================= # Test History System # ============================================================================= @dataclass class TestHistoryEntry: """History entry for a single test.""" passed: bool duration_seconds: float # Test priority levels (lower = higher priority, sorted ascending) PRIORITY_FAILED = 0 # Previously failed tests run first PRIORITY_DEFAULT = 1 # Default priority for tasks without history PRIORITY_PASSED = 2 # Previously passed tests run last # Test history loaded from disk (used for prioritization) _test_history: dict[str, TestHistoryEntry] = {} # Test results from this run (will be saved on exit) _test_results: dict[str, TestHistoryEntry] = {} _test_history_path: Optional[Path] = None _test_history_lock = threading.Lock() def load_test_history(scratch_dir: Path) -> None: """Load test history from disk.""" global _test_history, _test_results, _test_history_path _test_history_path = scratch_dir / "test_history.json" _test_history = {} _test_results = {} if _test_history_path.exists(): try: data = json.loads(_test_history_path.read_text()) for name, entry in data.items(): _test_history[name] = TestHistoryEntry( passed=entry["passed"], duration_seconds=entry["duration_seconds"], ) except (json.JSONDecodeError, KeyError, IOError): _test_history = {} def save_test_history() -> None: """Save test results from this run to disk.""" if _test_history_path is None: return with _test_history_lock: data = { name: {"passed": entry.passed, "duration_seconds": entry.duration_seconds} for name, entry in _test_results.items() } try: _test_history_path.write_text(json.dumps(data, indent=2)) except IOError: pass def update_test_history( config_name: str, test_name: str, passed: bool, duration_seconds: float ) -> None: """Record a test result from this run.""" key = f"{config_name}:{test_name}" with _test_history_lock: _test_results[key] = TestHistoryEntry(passed=passed, duration_seconds=duration_seconds) def get_test_priority(config_name: str, test_name: str) -> tuple[int, float]: """Get sort key for a test: (priority, -duration). PRIORITY_FAILED = previously failed (run first) PRIORITY_DEFAULT = no history PRIORITY_PASSED = previously passed Within same priority, sort by duration descending (slowest first). """ key = f"{config_name}:{test_name}" entry = _test_history.get(key) if entry is None: return (PRIORITY_DEFAULT, 0.0) elif not entry.passed: return (PRIORITY_FAILED, -entry.duration_seconds) else: return (PRIORITY_PASSED, -entry.duration_seconds) # ============================================================================= # Test Tasks # ============================================================================= @functools.cache def is_gdb_available() -> bool: """Check if GDB is installed and available (cached).""" return is_command_available("gdb") class RunTestTask(Task): """Run a single test.""" def __init__( self, test: TestDef, context: TestContext, parent_task: Task, extra_dependencies: Optional[list[Task]] = None, coverage_profraw_prefix: Optional[str] = None, ): dependencies = [parent_task] if extra_dependencies: dependencies.extend(extra_dependencies) super().__init__( name=f"test_{context.config.name}_{test.name}", description=f"{context.config.name}: {test.name}", dependencies=dependencies, priority=get_test_priority(context.config.name, test.name), ) self.test = test self.context = context # Precompute per-step profraw paths self.step_profraw_paths: list[Optional[str]] = [] for step_index, step in enumerate(test.steps): if coverage_profraw_prefix and step.collects_coverage: path = f"{coverage_profraw_prefix}-{step_index}.profraw" self.step_profraw_paths.append(path.replace("\\", "/")) else: self.step_profraw_paths.append(None) def run(self) -> TaskResult: start_time = time.monotonic() context = self.context test = self.test if test.create_temp_dir: temp_dir = Path(tempfile.mkdtemp(prefix=f"{test.name}_")) try: context = replace(context, temp_dir=temp_dir) test_result = self._run_steps(context) finally: shutil.rmtree(temp_dir, ignore_errors=True) else: test_result = self._run_steps(context) duration = time.monotonic() - start_time update_test_history(context.config.name, test.name, test_result.success, duration) return TaskResult(test_result.success, test_result.message) def _run_steps(self, context: TestContext) -> TestResult: for step, profraw_path in zip(self.test.steps, self.step_profraw_paths): step_label = step.name or self.test.name result = step.run(context, step_label, coverage_profraw_path=profraw_path) if not result.success: prefix = f"[{step.name}] " if step.name else "" return TestResult(False, f"{prefix}{result.message}") return TestResult(True) class DiscoverWASTTestsTask(Task): """Discover WAST script test files (shared across all configs).""" def __init__(self, source_dir: Path, trace_tests: bool = False): super().__init__( name="discover_wast_tests", description="Discover WAST test files", dependencies=[], ) self.source_dir = source_dir self.trace_tests = trace_tests self.wast_tests: list[TestDef] = [] # Tests that trigger synchronous exceptions (stack overflow via guard page SIGSEGV) in # JIT code. Rosetta 2 can't deliver these signals, causing an "EmulateForward" crash. # See: https://github.com/JuliaLang/julia/issues/42398 ROSETTA_SKIP_TESTS = { "wavm/infinite-recursion.wast", "WebAssembly/spec/fac.wast", "WebAssembly/memory64/fac.wast", "WebAssembly/threads/fac.wast", "WebAssembly/multi-memory/fac.wast", } def run(self) -> TaskResult: self.wast_tests = [] skip_tests = self.ROSETTA_SKIP_TESTS if is_rosetta() else set() for wast_dir in WAST_TEST_DIRS: dir_path = self.source_dir / wast_dir.directory if not dir_path.exists(): continue for wast_file in sorted(dir_path.glob("*.wast")): rel_path = wast_file.relative_to(self.source_dir) test_name = f"{wast_dir.name_prefix}{wast_file.name}" if test_name in skip_tests: continue # Get test-specific environment overrides test_env = wast_dir.env_overrides.get(test_name, {}) test_asan_env = wast_dir.asan_env_overrides.get(test_name, {}) test_tsan_env = wast_dir.tsan_env_overrides.get(test_name, {}) # Build command with placeholders and optional --trace-tests command = ["{wavm_bin}", "test", "script", "{source_dir}/" + str(rel_path)] if self.trace_tests: command.append("--trace-tests") command.extend(wast_dir.extra_args) self.wast_tests.append( TestDef( name=test_name, steps=[ TestStep( command=command, env=test_env, asan_env=test_asan_env, tsan_env=test_tsan_env, ) ], ) ) return TaskResult(True, artifacts={"test_count": len(self.wast_tests)}) class CloneFuzzCorporaTask(Task): """Clone the fuzz corpora repository (shared across all configs).""" def __init__(self, working_dir: Path, offline: bool = False): super().__init__( name="clone_fuzz_corpora", description="Clone fuzz corpora", dependencies=[], ) self.working_dir = working_dir self.corpora_dir = self.working_dir / "wavm-fuzz-corpora" self.offline = offline def run(self) -> TaskResult: if self.offline: if not self.corpora_dir.exists(): return TaskResult( False, f"Fuzz corpora not found at {self.corpora_dir}" " (--offline requires a prior clone)", ) return TaskResult(True, artifacts={"corpora_dir": self.corpora_dir}) if self.corpora_dir.exists(): # Already cloned, do a pull to update result = run_command(["git", "-C", self.corpora_dir, "pull", "--ff-only"]) if result.returncode != 0: # Pull failed, try a fresh clone try: shutil.rmtree(self.corpora_dir) except OSError as e: return TaskResult(False, f"Failed to remove stale fuzz corpora directory: {e}") if not self.corpora_dir.exists(): result = run_command(["git", "clone", "--depth=1", FUZZ_CORPORA_URL, self.corpora_dir]) if result.returncode != 0: return TaskResult(False, result.format_failure("Failed to clone fuzz corpora")) return TaskResult(True, artifacts={"corpora_dir": self.corpora_dir}) class CreateTestTasksTask(Task): """Create test tasks for a specific config.""" def __init__( self, config: "WAVMConfig", build_dir: Path, discover_task: DiscoverWASTTestsTask, source_dir: Path, wasi_wasm_dir: Path, wasi_compile_tasks: dict[str, CompileWasiTestTask], complete_task: Task, build_wavm_task: Optional[Task] = None, fuzz_corpora_task: Optional[CloneFuzzCorporaTask] = None, work_dir: Optional[Path] = None, llvm_toolchain_task: Optional[Task] = None, ): dependencies: list[Task] = [discover_task] super().__init__( name=f"wavm_create_tests_{config.name}", description=f"{config.name}: create tests", dependencies=dependencies, priority=(0, 0.0) # prioritize creating all the tasks before anything else. ) self.config = config self.build_dir = build_dir self.build_wavm_task = build_wavm_task self.discover_task = discover_task self.source_dir = source_dir self.wasi_wasm_dir = wasi_wasm_dir self.wasi_compile_tasks = wasi_compile_tasks self.complete_task = complete_task self.fuzz_corpora_task = fuzz_corpora_task self.work_dir = work_dir self.llvm_toolchain_task = llvm_toolchain_task def run(self) -> TaskResult: corpora_dir = self.fuzz_corpora_task.corpora_dir if self.fuzz_corpora_task else None has_runtime = "-DWAVM_ENABLE_RUNTIME=NO" not in self.config.cmake_args is_static = "-DWAVM_ENABLE_STATIC_LINKING=ON" in self.config.cmake_args has_sanitizers = any( arg in self.config.cmake_args for arg in ["-DWAVM_ENABLE_ASAN=ON", "-DWAVM_ENABLE_UBSAN=ON", "-DWAVM_ENABLE_TSAN=ON"] ) has_gdb = LINUX and is_gdb_available() has_cmake_and_ninja = shutil.which("cmake") is not None and shutil.which("ninja") is not None use_setarch = needs_aslr_workaround(self.config) test_fuzz_corpora = self.config.test_fuzz_corpora and corpora_dir def should_include_test(t: TestDef) -> bool: if not has_runtime and t.requires_runtime: return False if is_static and t.requires_shared_build: return False if has_sanitizers and t.requires_unsanitized_build: return False if not test_fuzz_corpora and t.requires_fuzz_corpora_and_fuzz_targets: return False if not has_cmake_and_ninja and t.requires_cmake_and_ninja: return False return True # Collect all tests: static tests + discovered WAST tests + conditional tests all_tests: list[TestDef] = [] all_tests.extend(t for t in get_tests() if should_include_test(t)) all_tests.extend(t for t in self.discover_task.wast_tests if should_include_test(t)) if has_gdb and has_runtime: all_tests.append(GDB_BACKTRACE_TEST) if not all_tests: return TaskResult(True, artifacts={"test_count": 0}) # Set up coverage directory if coverage is enabled coverage_dir: Optional[Path] = None if self.config.enable_coverage and self.work_dir: coverage_dir = self.work_dir / "coverage" / self.config.name if coverage_dir.exists(): shutil.rmtree(coverage_dir) coverage_dir.mkdir(parents=True) # Create shared context for all tests in this config context = TestContext( config=self.config, source_dir=self.source_dir, build_dir=self.build_dir, corpora_dir=corpora_dir, use_setarch=use_setarch, wasi_wasm_dir=self.wasi_wasm_dir, ) test_tasks: list[Task] = [] for test in all_tests: safe_name = test.name.replace("/", "_").replace("\\", "_") profraw_prefix = str(coverage_dir / safe_name) if coverage_dir else None extra_deps: list[Task] = [] if self.build_wavm_task: extra_deps += [self.build_wavm_task] elif test.requires_fuzz_corpora_and_fuzz_targets: assert self.fuzz_corpora_task extra_deps += [self.fuzz_corpora_task] for stem in test.test_wasi_cpp_sources: extra_deps += [self.wasi_compile_tasks[stem]] test_tasks.append( RunTestTask( test=test, context=context, parent_task=self, extra_dependencies=extra_deps, coverage_profraw_prefix=profraw_prefix, ) ) # Add test tasks (and optional coverage report) as deps of the completion task self.complete_task.dependencies.extend(test_tasks) if coverage_dir and self.work_dir: report_task = CoverageReportTask( config_name=self.config.name, build_dir=self.build_dir, coverage_dir=coverage_dir, test_names=[t.name for t in all_tests], llvm_toolchain_task=self.llvm_toolchain_task, work_dir=self.work_dir, source_dir=self.source_dir, test_tasks=test_tasks, ) self.complete_task.dependencies.append(report_task) return TaskResult(True, artifacts={"test_count": len(test_tasks)}) # ============================================================================= # Test Pipeline Setup # ============================================================================= def setup_test_tasks( configs: Sequence[tuple["WAVMConfig", Path, Optional[Task]]], source_dir: Path, work_dir: Path, llvm_toolchain_task: Optional[Task] = None, offline: bool = False, test_fuzz_corpora: bool = True, ) -> list[Task]: """Create shared test infrastructure and per-config test creation tasks. Returns a list of tasks to demand (completion tasks plus shared infra tasks that should start immediately for parallelism). If test_fuzz_corpora is False, fuzz corpora regression tests are skipped (e.g. when testing an installed build that doesn't include fuzz binaries). """ if not configs: return [] demanded: list[Task] = [] # Shared: WAST discovery discover_task = DiscoverWASTTestsTask(source_dir=source_dir) # Shared: WASI SDK download and compile tasks wasi_wasm_dir = work_dir / "wasi-wasm" wasi_sdk_task = DownloadWasiSdkTask(working_dir=work_dir, offline=offline) demanded.append(wasi_sdk_task) wasi_cpp_dir = source_dir / "Test" / "wasi" / "cpp" wasi_compile_tasks: dict[str, CompileWasiTestTask] = {} all_test_defs = list(get_tests()) if LINUX and is_gdb_available(): all_test_defs.append(GDB_BACKTRACE_TEST) for test_def in all_test_defs: for stem in test_def.test_wasi_cpp_sources: if stem not in wasi_compile_tasks: task = CompileWasiTestTask( cpp_file=wasi_cpp_dir / f"{stem}.cpp", output_dir=wasi_wasm_dir, wasi_sdk_task=wasi_sdk_task, ) wasi_compile_tasks[stem] = task demanded.append(task) # Shared: fuzz corpora (if any config needs it and not excluded) fuzz_corpora_task: Optional[CloneFuzzCorporaTask] = None if test_fuzz_corpora and any(config.test_fuzz_corpora for config, _, _ in configs): fuzz_corpora_task = CloneFuzzCorporaTask(working_dir=work_dir, offline=offline) demanded.append(fuzz_corpora_task) # Per-config: completion task + test creation task for config, build_dir, build_task in configs: complete_task = Task( f"test_complete_{config.name}", f"{config.name}: test completion", ) create_tests_task = CreateTestTasksTask( config=config, build_dir=build_dir, discover_task=discover_task, source_dir=source_dir, wasi_wasm_dir=wasi_wasm_dir, wasi_compile_tasks=wasi_compile_tasks, complete_task=complete_task, build_wavm_task=build_task, fuzz_corpora_task=fuzz_corpora_task, work_dir=work_dir, llvm_toolchain_task=llvm_toolchain_task, ) complete_task.dependencies.append(create_tests_task) demanded.append(complete_task) return demanded # ============================================================================= # Command Handlers # ============================================================================= def cmd_test(args: argparse.Namespace, ctx: CommandContext) -> int: """Build and test WAVM configurations.""" all_wavm_configs = get_applicable_wavm_configs() if not all_wavm_configs: output.error("Error: No compilers found") return 1 # Filter configs if specified if args.config: config_names = set(args.config) wavm_configs = [c for c in all_wavm_configs if c.name in config_names] if not wavm_configs: output.error(f"Error: No matching WAVM configs found for: {args.config}") output.error(f"Available: {[c.name for c in all_wavm_configs]}") return 1 else: wavm_configs = all_wavm_configs # Set up test history load_test_history(ctx.work_dir) lint_config = get_lint_config() # Create build tasks for each config test_configs = [] for wavm_config in wavm_configs: build_task = create_wavm_build_tasks( wavm_config, ctx.work_dir, ctx.source_dir, build_llvm_from_source=args.llvm_source, offline=args.offline, ) test_configs.append((wavm_config, build_task.build_dir, build_task)) # Configure the lint config (configure only, not built) lint_configure_task = create_wavm_configure_task( lint_config, ctx.work_dir, ctx.source_dir, build_llvm_from_source=args.llvm_source, offline=args.offline, ) # Create check and tidy tasks toolchain_task = get_llvm_toolchain_task( ctx.work_dir, args.llvm_source, offline=args.offline ) demanded: list[Task] = [ create_format_tasks(toolchain_task, ctx.source_dir, False), *([create_lint_tasks(ctx.source_dir)] if not args.no_lint else []), create_tidy_tasks( toolchain_task, ctx.source_dir, False, configure_task=lint_configure_task, ), *setup_test_tasks( test_configs, ctx.source_dir, ctx.work_dir, toolchain_task, offline=args.offline ), ] success = execute(demanded) save_test_history() return 0 if success else 1 def register_test(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser("test", help="Build and test WAVM configurations") p.add_argument( "--config", action="append", help="Config to build/test (can be repeated; default: all)", ) p.add_argument( "--no-lint", action="store_true", help="Skip Python linting (ty, ruff) even if uvx is available", ) p.set_defaults(func=cmd_test) def cmd_test_install(args: argparse.Namespace, ctx: CommandContext) -> int: """Test a pre-built WAVM installation.""" install_dir = Path(args.install_dir).resolve() # Validate the config name wavm_config, all_configs = find_wavm_config(args.config) if not wavm_config: output.error(f"Error: Config '{args.config}' not found") if all_configs: output.error(f"Available: {[c.name for c in all_configs]}") return 1 # Validate install directory wavm_bin = get_wavm_bin_path(install_dir) if not wavm_bin.exists(): output.error(f"Error: wavm binary not found at {wavm_bin}") return 1 demanded = setup_test_tasks( [(wavm_config, install_dir, None)], ctx.source_dir, ctx.work_dir, offline=args.offline, test_fuzz_corpora=False, ) success = execute(demanded) return 0 if success else 1 def register_test_install(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser("test-install", help="Test a pre-built WAVM installation") p.add_argument( "--config", required=True, help="Config to test (required)", ) p.add_argument( "install_dir", help="Directory containing the WAVM installation to test", ) p.set_defaults(func=cmd_test_install) ================================================ FILE: Build/lib/test_def.py ================================================ """Test definition types: TestContext, TestResult, TestStep, TestDef.""" import hashlib import re from dataclasses import dataclass, field from pathlib import Path from typing import Optional, TYPE_CHECKING from .platform import EXE_EXT, get_wavm_bin_path, run_command if TYPE_CHECKING: from .build import WAVMConfig @dataclass class TestContext: """Context passed to test run methods.""" config: "WAVMConfig" source_dir: Path build_dir: Path # Build or install directory root corpora_dir: Optional[Path] use_setarch: bool wasi_wasm_dir: Optional[Path] = None temp_dir: Optional[Path] = None @dataclass class TestResult: """Result of running a test.""" success: bool message: str = "" @dataclass class TestStep: """A single command to run as part of a test.""" command: list[str] = field(default_factory=list) expected_output: Optional[str] = None # Regex that MUST match (via re.search) unexpected_output: Optional[str] = None # Regex that must NOT match expected_returncode: int = 0 # Expected process exit code env: dict[str, str] = field(default_factory=dict) # Extra env vars (values support placeholders) asan_env: dict[str, str] = field(default_factory=dict) # Extra env vars for ASAN builds only tsan_env: dict[str, str] = field(default_factory=dict) # Extra env vars for TSAN builds only timeout: int = 600 name: Optional[str] = None # Optional label for multi-step error messages collects_coverage: bool = True # Whether to set LLVM_PROFILE_FILE for coverage expected_binary_output_sha256: Optional[str] = None # SHA-256 hex digest of expected stdout bytes def run( self, context: TestContext, label: str, coverage_profraw_path: Optional[str] = None, ) -> TestResult: placeholders: dict[str, object] = { "wavm_bin": get_wavm_bin_path(context.build_dir), "source_dir": context.source_dir, "build_dir": context.build_dir, "build_type": context.config.build_type, "corpora_dir": context.corpora_dir, "exe_ext": EXE_EXT, } if context.wasi_wasm_dir is not None: placeholders["wasi_wasm_dir"] = context.wasi_wasm_dir if context.temp_dir is not None: placeholders["temp_dir"] = context.temp_dir # Substitute placeholders in command and env values command = [arg.format(**placeholders) for arg in self.command] resolved_env = {k: v.format(**placeholders) for k, v in self.env.items()} # Prepend setarch if needed if context.use_setarch: command = ["setarch", "x86_64", "-R"] + command # Build test environment: config env + test env + ASAN env (if config uses ASAN) test_env = resolved_env if context.config.uses_asan: test_env.update(self.asan_env) if context.config.uses_tsan: test_env.update(self.tsan_env) # Inject coverage profraw path if provided if coverage_profraw_path: test_env["LLVM_PROFILE_FILE"] = coverage_profraw_path result = run_command( command, cwd=context.source_dir, env=test_env, timeout=self.timeout ) if result.timed_out or result.returncode != self.expected_returncode: return TestResult( False, result.format_failure(expected_returncode=self.expected_returncode), ) # Check expected binary output hash if specified if self.expected_binary_output_sha256: actual = hashlib.sha256(result.stdout_bytes).hexdigest() if actual != self.expected_binary_output_sha256: return TestResult( False, result.format_failure( f"SHA-256 mismatch: expected {self.expected_binary_output_sha256}, got {actual}" ), ) combined_output = result.stdout + result.stderr # Check expected output pattern if specified if self.expected_output: if not re.search(self.expected_output, combined_output): return TestResult( False, result.format_failure( f"Output did not match pattern: {self.expected_output}" ), ) # Check unexpected output pattern if specified if self.unexpected_output: if re.search(self.unexpected_output, combined_output): return TestResult( False, result.format_failure( f"Output matched unexpected pattern: {self.unexpected_output}" ), ) return TestResult(True) @dataclass class TestDef: """A test consisting of one or more steps.""" name: str steps: list[TestStep] = field(default_factory=list) requires_runtime: bool = True # Whether this test requires the runtime requires_shared_build: bool = False # Whether this test requires a shared (non-static) build requires_unsanitized_build: bool = False # Whether this test cannot run with sanitizers create_temp_dir: bool = False # Whether to create a temporary directory for this test test_wasi_cpp_sources: list[str] = field(default_factory=list) # .cpp stem names to compile with WASI SDK requires_fuzz_corpora_and_fuzz_targets: bool = False # Whether this test needs the fuzz corpora as an input requires_cmake_and_ninja: bool = False # Whether this test needs cmake and ninja to build ================================================ FILE: Build/lib/tidy.py ================================================ """Clang-tidy tasks.""" import argparse import json from pathlib import Path from typing import Union from .build import ConfigureWAVMTask, get_lint_config, create_wavm_configure_task from .context import CommandContext from .llvm import get_llvm_toolchain_task from .platform import EXE_EXT, run_command from .cpp_files import discover_cpp_files from .task_graph import Task, TaskResult, execute class ClangTidyTask(Task): """Run clang-tidy on a single source file.""" def __init__( self, file_path: Path, source_dir: Path, fix: bool, tools_task: Task, configure_task: ConfigureWAVMTask, ): action = " fix" if fix else "" rel_path = file_path.relative_to(source_dir) super().__init__( name=f"tidy_{action}_{rel_path}", description=f"Tidy{action}: {rel_path}", dependencies=[tools_task, configure_task], ) self.file_path = file_path self.source_dir = source_dir self.fix = fix self.tools_task = tools_task self.configure_task = configure_task def run(self) -> TaskResult: assert self.tools_task.result is not None llvm_install_dir: Path = self.tools_task.result.artifacts["llvm_install_dir"] clang_tidy = llvm_install_dir / "bin" / f"clang-tidy{EXE_EXT}" build_dir = self.configure_task.build_dir rel_path = self.file_path.relative_to(self.source_dir) cmd: list[Union[str, Path]] = [ clang_tidy, "-p", build_dir, ] if not self.fix: cmd.append("--warnings-as-errors=*") if self.fix: cmd.append("--fix") cmd.append(self.file_path) result = run_command(cmd) if result.returncode != 0: hint = None if self.fix else "To fix all: python3 Build/dev.py tidy --fix" return TaskResult( False, result.format_failure(f"clang-tidy failed: {rel_path}", hint=hint), ) return TaskResult(True) class DiscoverTidyFilesTask(Task): """Discover files to tidy and create individual clang-tidy tasks.""" def __init__( self, source_dir: Path, fix: bool, tools_task: Task, complete_task: Task, configure_task: ConfigureWAVMTask, ): super().__init__( name="discover_tidy_files", description="Discover tidy files", dependencies=[configure_task], ) self.source_dir = source_dir self.fix = fix self.tools_task = tools_task self.complete_task = complete_task self.configure_task = configure_task def run(self) -> TaskResult: files_to_check = discover_cpp_files(self.source_dir) # Build set of files in the compilation database for clang-tidy. # This naturally excludes wrong-platform files (e.g. Windows sources on # macOS) that would fail to compile under clang-tidy. build_dir = self.configure_task.build_dir compdb_path = build_dir / "compile_commands.json" compdb_files: set[Path] = set() if compdb_path.exists(): with open(compdb_path) as f: for entry in json.load(f): compdb_files.add(Path(entry["file"]).resolve()) new_tasks: list[Task] = [] for file_path in files_to_check: if file_path.resolve() in compdb_files: tidy_task = ClangTidyTask( file_path=file_path, source_dir=self.source_dir, fix=self.fix, tools_task=self.tools_task, configure_task=self.configure_task, ) new_tasks.append(tidy_task) self.complete_task.dependencies.extend(new_tasks) return TaskResult( True, artifacts={"file_count": len(new_tasks)}, ) def create_tidy_tasks( tools_task: Task, source_dir: Path, fix: bool, configure_task: ConfigureWAVMTask, ) -> Task: """Create clang-tidy tasks. Returns the completion task.""" tidy_complete_task = Task("tidy_complete", "Completion of all tidy tasks") discover_task = DiscoverTidyFilesTask( source_dir=source_dir, fix=fix, tools_task=tools_task, complete_task=tidy_complete_task, configure_task=configure_task, ) tidy_complete_task.dependencies.append(discover_task) return tidy_complete_task # ============================================================================= # Command Handler # ============================================================================= def cmd_tidy(args: argparse.Namespace, ctx: CommandContext) -> int: """Run clang-tidy.""" lint_config = get_lint_config() configure_task = create_wavm_configure_task( lint_config, ctx.work_dir, ctx.source_dir, build_llvm_from_source=args.llvm_source, offline=args.offline, ) toolchain_task = get_llvm_toolchain_task( ctx.work_dir, args.llvm_source, offline=args.offline ) tidy_task = create_tidy_tasks( toolchain_task, ctx.source_dir, args.fix, configure_task=configure_task, ) return 0 if execute([tidy_task]) else 1 def register_tidy(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser("tidy", help="Run clang-tidy") p.add_argument( "--fix", action="store_true", help="Fix clang-tidy issues instead of just checking", ) p.set_defaults(func=cmd_tidy) ================================================ FILE: Build/lib/toolchain.py ================================================ """Toolchain detection, configuration, and CMake argument generation.""" import functools import shutil import sys from collections.abc import Callable from dataclasses import dataclass from enum import Enum from pathlib import Path from typing import Optional, Union from .llvm import get_llvm_toolchain_task from .platform import ( WINDOWS, MACOS, LINUX, EXE_EXT, get_host_arch, get_gcc_clang_major_version, get_msvc_major_version, ) from .task_graph import Task # ============================================================================= # Platform-specific compiler/linker names # ============================================================================= if WINDOWS: LLD_EXECUTABLE = "lld-link.exe" CLANG_C_COMPILER = "clang-cl.exe" CLANG_CXX_COMPILER = "clang-cl.exe" elif MACOS: LLD_EXECUTABLE = "ld64.lld" CLANG_C_COMPILER = "clang" CLANG_CXX_COMPILER = "clang++" elif LINUX: LLD_EXECUTABLE = "ld.lld" CLANG_C_COMPILER = "clang" CLANG_CXX_COMPILER = "clang++" else: raise RuntimeError(f"Unsupported platform: {sys.platform}") # Short identity for PRIMARY toolchains (clang is the unnamed default) COMPILER_IDENTITY: dict[str, str] = { "clang": "", "msvc": "msvc", "appleclang": "AppleClang", "gcc": "gcc", } # Display name for the "default" system linker on each platform if WINDOWS: DEFAULT_LINKER_DISPLAY = "link" elif MACOS: DEFAULT_LINKER_DISPLAY = "ld64" elif LINUX: DEFAULT_LINKER_DISPLAY = "ld" # ============================================================================= # CMake Utilities # ============================================================================= @dataclass class CMakeVarArg: """A CMake -D variable argument with automatic path conversion for values.""" name: str value: Union[str, Path] def to_arg(self) -> str: # Convert to string and replace backslashes with forward slashes for CMake safe_value = str(self.value).replace("\\", "/") return f"-D{self.name}={safe_value}" def build_cmake_cmd(args: list[Union[str, Path, CMakeVarArg]]) -> list[str]: """Build a CMake command, converting CMakeVarArg and Path instances to strings. CMakeVarArg values have backslashes converted to forward slashes to avoid CMake interpreting them as escape sequences. """ result = [] for arg in args: if isinstance(arg, CMakeVarArg): result.append(arg.to_arg()) elif isinstance(arg, Path): result.append(str(arg)) else: result.append(arg) return result # ============================================================================= # Toolchain Detection and Configuration # ============================================================================= def is_command_available(command: str) -> bool: """Check if a command is available on PATH.""" return shutil.which(command) is not None class ToolchainScope(Enum): """Whether a toolchain is used with all config templates or only those that expand toolchains.""" PRIMARY = "primary" # Used with all config templates (the preferred linker for each compiler) SECONDARY = "secondary" # Only used with templates that have expand_secondary_toolchains=True def _get_wavm_llvm_compiler_cmake_args(llvm_dir: Path) -> list[CMakeVarArg]: """Compiler + archiver cmake args from a WAVM-LLVM install.""" args: list[CMakeVarArg] = [ CMakeVarArg("CMAKE_C_COMPILER", llvm_dir / "bin" / CLANG_C_COMPILER), CMakeVarArg("CMAKE_CXX_COMPILER", llvm_dir / "bin" / CLANG_CXX_COMPILER), ] # On Windows, use llvm-lib (understands MSVC-style flags). # On other platforms, use llvm-ar/llvm-ranlib (the system # ar/ranlib may not understand LLVM bitcode format). if WINDOWS: llvm_lib_path = llvm_dir / "bin" / f"llvm-lib{EXE_EXT}" if llvm_lib_path.exists(): args.append(CMakeVarArg("CMAKE_AR", llvm_lib_path)) else: llvm_ar_path = llvm_dir / "bin" / f"llvm-ar{EXE_EXT}" llvm_ranlib_path = llvm_dir / "bin" / f"llvm-ranlib{EXE_EXT}" if llvm_ar_path.exists(): args.append(CMakeVarArg("CMAKE_AR", llvm_ar_path)) if llvm_ranlib_path.exists(): args.append(CMakeVarArg("CMAKE_RANLIB", llvm_ranlib_path)) return args def _get_wavm_llvm_linker_cmake_args(llvm_dir: Path) -> list[CMakeVarArg]: """Linker cmake args from a WAVM-LLVM install.""" lld_path = llvm_dir / "bin" / LLD_EXECUTABLE if lld_path.exists(): return [CMakeVarArg("WAVM_USE_LINKER", lld_path)] return [] def _get_wavm_llvm_all_cmake_args(llvm_dir: Path) -> list[CMakeVarArg]: """Full toolchain cmake args (compiler + linker + archiver) from a WAVM-LLVM install.""" return _get_wavm_llvm_compiler_cmake_args(llvm_dir) + _get_wavm_llvm_linker_cmake_args(llvm_dir) class Toolchain: """A compiler-linker pair detected on the system. cmake_args are composed of static args (known at construction) plus optional dynamic args resolved from a WAVM-LLVM install directory. If resolve_llvm_cmake_args is set, prerequisite tasks must complete before get_cmake_args() can be called. """ def __init__( self, compiler: str, linker_identity: Optional[str], cmake_args: tuple[CMakeVarArg, ...], scope: ToolchainScope, needs_aslr_workaround: bool, resolve_llvm_cmake_args: Optional[Callable[[Path], list[CMakeVarArg]]] = None, ): self.compiler = compiler self.linker_identity = linker_identity self._cmake_args = cmake_args self.scope = scope self.needs_aslr_workaround = needs_aslr_workaround self._resolve_llvm_cmake_args = resolve_llvm_cmake_args self._prerequisite_tasks: Optional[list[Task]] = None @property def identity(self) -> str: """Config name suffix. Empty string for the default WAVM-LLVM toolchain.""" compiler_id = COMPILER_IDENTITY.get(self.compiler, self.compiler) if self.linker_identity is None: return compiler_id compiler_display = compiler_id or self.compiler return f"{compiler_display}-{self.linker_identity}" @property def lto_mode(self) -> str: """The LTO mode to use for this toolchain. Returns "Thin" for the pure WAVM-LLVM toolchain (whose lld can link ThinLTO-compiled LLVM libraries), "ON" for all others (which need non-ThinLTO LLVM libraries). """ if self.compiler == "clang" and self.linker_identity is None: return "Thin" return "ON" @property def supports_coverage(self) -> bool: return self.compiler == "clang" def get_or_create_prerequisite_tasks( self, work_dir: Path, build_from_source: bool, offline: bool = False ) -> list[Task]: """Get prerequisite tasks for this toolchain, creating them on first call. Toolchains that use WAVM-LLVM components create the LLVM toolchain build/download task. Pure system toolchains return an empty list. """ if self._prerequisite_tasks is None: if self._resolve_llvm_cmake_args is not None: task = get_llvm_toolchain_task( work_dir, build_from_source, offline=offline ) self._prerequisite_tasks = [task] else: self._prerequisite_tasks = [] return self._prerequisite_tasks def get_cmake_args(self) -> list[CMakeVarArg]: """Get all compiler/linker/archiver CMake args. If this toolchain uses WAVM-LLVM components, prerequisite tasks must have been created and completed before calling this. """ result = list(self._cmake_args) if self._resolve_llvm_cmake_args is not None: assert self._prerequisite_tasks is not None and len(self._prerequisite_tasks) > 0, \ "get_or_create_prerequisite_tasks must be called before get_cmake_args" task = self._prerequisite_tasks[0] assert task.result is not None, \ "prerequisite tasks must complete before get_cmake_args" llvm_dir: Path = task.result.artifacts["llvm_install_dir"] result.extend(self._resolve_llvm_cmake_args(llvm_dir)) return result @functools.cache def detect_toolchains() -> list[Toolchain]: """Detect all available compiler-linker toolchains on this system. Each compiler gets a PRIMARY toolchain (its preferred/default linker) and optionally SECONDARY toolchains for alternative linkers (e.g. clang with the system default linker, AppleClang with WAVM-LLVM lld, gcc with gold). Results are cached since detection runs subprocesses. """ # Precompute ASLR workaround flag: Linux + clang + version < 18 clang_version = get_gcc_clang_major_version("clang") if LINUX else None clang_needs_aslr_workaround = clang_version is not None and clang_version < 18 toolchains: list[Toolchain] = [] # MSVC (Windows only) cl_version = get_msvc_major_version() if WINDOWS and cl_version is not None and cl_version >= 19: msvc_args = ( CMakeVarArg("CMAKE_C_COMPILER", "cl"), CMakeVarArg("CMAKE_CXX_COMPILER", "cl"), CMakeVarArg("CMAKE_ASM_COMPILER", "cl"), ) # MSVC + link.exe — PRIMARY toolchains.append(Toolchain( compiler="msvc", linker_identity=None, cmake_args=msvc_args, scope=ToolchainScope.PRIMARY, needs_aslr_workaround=False, )) # MSVC + WAVM-LLVM lld-link — SECONDARY toolchains.append(Toolchain( compiler="msvc", linker_identity="lld", cmake_args=msvc_args, scope=ToolchainScope.SECONDARY, needs_aslr_workaround=False, resolve_llvm_cmake_args=_get_wavm_llvm_linker_cmake_args, )) # Clang (WAVM-LLVM compiler + lld) — PRIMARY toolchains.append(Toolchain( compiler="clang", linker_identity=None, cmake_args=(), scope=ToolchainScope.PRIMARY, needs_aslr_workaround=LINUX and clang_needs_aslr_workaround, resolve_llvm_cmake_args=_get_wavm_llvm_all_cmake_args, )) # Clang (WAVM-LLVM compiler + system default linker) — SECONDARY toolchains.append(Toolchain( compiler="clang", linker_identity=DEFAULT_LINKER_DISPLAY, cmake_args=(), scope=ToolchainScope.SECONDARY, needs_aslr_workaround=LINUX and clang_needs_aslr_workaround, resolve_llvm_cmake_args=_get_wavm_llvm_compiler_cmake_args, )) # AppleClang (macOS only, system clang) if MACOS and is_command_available("clang"): apple_clang_args = ( CMakeVarArg("CMAKE_C_COMPILER", "clang"), CMakeVarArg("CMAKE_CXX_COMPILER", "clang++"), ) # AppleClang + system default linker — PRIMARY toolchains.append(Toolchain( compiler="appleclang", linker_identity=None, cmake_args=apple_clang_args, scope=ToolchainScope.PRIMARY, needs_aslr_workaround=False, )) # AppleClang + WAVM-LLVM lld — SECONDARY toolchains.append(Toolchain( compiler="appleclang", linker_identity="lld", cmake_args=apple_clang_args, scope=ToolchainScope.SECONDARY, needs_aslr_workaround=False, resolve_llvm_cmake_args=_get_wavm_llvm_linker_cmake_args, )) # GCC (Linux only, with linker variants) # GCC on AArch64 is excluded due to GCC 14 being unable to pass the test # suite with several different functions miscompiled in optimized builds. gcc_version = get_gcc_clang_major_version("gcc") if LINUX and get_host_arch() != "aarch64" and gcc_version is not None and gcc_version >= 8: gcc_base_args = ( CMakeVarArg("CMAKE_C_COMPILER", "gcc"), CMakeVarArg("CMAKE_CXX_COMPILER", "g++"), ) # Detect available system linkers system_lld_available = LINUX and is_command_available("ld.lld") # (linker_identity, extra_cmake_args) linker_options: list[tuple[str, tuple[CMakeVarArg, ...]]] = [ (DEFAULT_LINKER_DISPLAY, ()), ] if system_lld_available: linker_options.append(("lld", (CMakeVarArg("WAVM_USE_LINKER", "lld"),))) # Default linker is PRIMARY for GCC (lld doesn't support GCC's GIMPLE LTO) primary_identity = DEFAULT_LINKER_DISPLAY for linker_identity, extra_args in linker_options: is_primary = linker_identity == primary_identity toolchains.append(Toolchain( compiler="gcc", linker_identity=None if is_primary else linker_identity, cmake_args=gcc_base_args + extra_args, scope=ToolchainScope.PRIMARY if is_primary else ToolchainScope.SECONDARY, needs_aslr_workaround=False, )) return toolchains def get_primary_toolchain(compiler: str) -> Toolchain: """Get the PRIMARY toolchain for a compiler.""" for tc in detect_toolchains(): if tc.compiler == compiler and tc.scope == ToolchainScope.PRIMARY: return tc raise ValueError(f"No PRIMARY toolchain found for compiler {compiler!r}") ================================================ FILE: Build/lib/wasi.py ================================================ """WASI SDK download, compilation tasks, and WASI test definitions.""" import platform as platform_mod import shutil from pathlib import Path from typing import Optional from .platform import LINUX, MACOS, WINDOWS, EXE_EXT, download_and_extract, run_command from .task_graph import Task, TaskResult from .test_def import TestDef, TestStep # ============================================================================= # WASI SDK # ============================================================================= WASI_SDK_VERSION = "29" def get_wasi_sdk_platform() -> str: """Get the platform suffix for WASI SDK downloads.""" machine = platform_mod.machine().lower() if machine in ("x86_64", "amd64"): arch = "x86_64" elif machine in ("aarch64", "arm64"): arch = "arm64" else: raise RuntimeError(f"Unsupported architecture for WASI SDK: {machine}") if LINUX: return f"{arch}-linux" elif MACOS: return f"{arch}-macos" elif WINDOWS: return f"{arch}-windows" else: raise RuntimeError("Unsupported platform for WASI SDK") class DownloadWasiSdkTask(Task): """Download the WASI SDK.""" def __init__(self, working_dir: Path, offline: bool = False): super().__init__( name="download_wasi_sdk", description="WASI SDK: download", ) self.working_dir = working_dir self.wasi_sdk_dir: Optional[Path] = None self.offline = offline def run(self) -> TaskResult: platform_name = get_wasi_sdk_platform() dir_name = f"wasi-sdk-{WASI_SDK_VERSION}" self.wasi_sdk_dir = self.working_dir / dir_name # Check stamp file to skip re-downloading stamp_file = self.wasi_sdk_dir / ".download_stamp" if stamp_file.exists() and stamp_file.read_text().strip() == WASI_SDK_VERSION: clang = self.wasi_sdk_dir / "bin" / f"clang{EXE_EXT}" if clang.exists(): return TaskResult(True, artifacts={"wasi_sdk_dir": self.wasi_sdk_dir}) if self.offline: return TaskResult( False, f"WASI SDK not found at {self.wasi_sdk_dir}" " (--offline requires a prior download)", ) # Clean and download if self.wasi_sdk_dir.exists(): shutil.rmtree(self.wasi_sdk_dir) url = ( f"https://github.com/WebAssembly/wasi-sdk/releases/download/" f"wasi-sdk-{WASI_SDK_VERSION}/{dir_name}.0-{platform_name}.tar.gz" ) try: download_and_extract(url, self.wasi_sdk_dir) except Exception as e: return TaskResult(False, f"Failed to download WASI SDK from {url}: {e}") # The tarball extracts with a nested directory; move contents up if needed nested = self.wasi_sdk_dir / f"{dir_name}.0-{platform_name}" if nested.exists() and nested.is_dir(): for item in list(nested.iterdir()): shutil.move(str(item), str(self.wasi_sdk_dir / item.name)) nested.rmdir() stamp_file.write_text(WASI_SDK_VERSION) return TaskResult(True, artifacts={"wasi_sdk_dir": self.wasi_sdk_dir}) class CompileWasiTestTask(Task): """Compile a single WASI test .cpp file to .wasm using WASI SDK.""" def __init__(self, cpp_file: Path, output_dir: Path, wasi_sdk_task: DownloadWasiSdkTask): self.cpp_file = cpp_file self.wasm_file = output_dir / f"{cpp_file.stem}.wasm" super().__init__( name=f"compile_wasi_{cpp_file.stem}", description=f"WASI: compile {cpp_file.name}", dependencies=[wasi_sdk_task], ) self.wasi_sdk_task = wasi_sdk_task def run(self) -> TaskResult: # Skip if .wasm is up-to-date if self.wasm_file.exists(): if self.wasm_file.stat().st_mtime >= self.cpp_file.stat().st_mtime: return TaskResult(True) self.wasm_file.parent.mkdir(parents=True, exist_ok=True) assert self.wasi_sdk_task.wasi_sdk_dir is not None wasi_sdk_dir = self.wasi_sdk_task.wasi_sdk_dir clang = wasi_sdk_dir / "bin" / f"clang{EXE_EXT}" sysroot = wasi_sdk_dir / "share" / "wasi-sysroot" cmd = [ str(clang), "-D_WASI_EMULATED_MMAN", "-lwasi-emulated-mman", "-O3", "-g3", f"--sysroot={sysroot}", "-o", str(self.wasm_file), str(self.cpp_file), ] result = run_command(cmd) if result.returncode != 0: return TaskResult(False, result.format_failure(f"Failed to compile {self.cpp_file.name}")) return TaskResult(True) # ============================================================================= # WASI Test Definitions # ============================================================================= # Common command prefix for running WASI test modules WASI_RUN = ["{wavm_bin}", "run", "--abi=wasi", "--enable", "extended-name-section"] WASI_RUN_MOUNTED = [*WASI_RUN, "--mount-root", "{temp_dir}"] WASI_TESTS: list[TestDef] = [ TestDef( "wasi_args", test_wasi_cpp_sources=["args"], steps=[ TestStep( command=[*WASI_RUN, "{wasi_wasm_dir}/args.wasm", "arg1", "arg2"], expected_output=r"argc=3\nargv\[0\]: .+\nargv\[1\]: arg1\nargv\[2\]: arg2", ) ], ), TestDef( "wasi_clock", test_wasi_cpp_sources=["clock"], steps=[TestStep(command=[*WASI_RUN, "{wasi_wasm_dir}/clock.wasm"])], ), TestDef( "wasi_exit", test_wasi_cpp_sources=["exit"], steps=[TestStep( command=[*WASI_RUN, "{wasi_wasm_dir}/exit.wasm"], # WASI exit relies on being able to unwind an exception through the WASM code. # Enable debug+trace-unwind log channels to get test coverage of the code that # only runs when those log channels are enabled. env={"WAVM_OUTPUT": "debug,trace-unwind"} )], ), TestDef( "wasi_random", test_wasi_cpp_sources=["random"], steps=[TestStep(command=[*WASI_RUN, "{wasi_wasm_dir}/random.wasm"])], ), TestDef( "wasi_stdout", test_wasi_cpp_sources=["stdout"], steps=[ TestStep( command=[*WASI_RUN, "{wasi_wasm_dir}/stdout.wasm"], expected_output=r"Hello world!", ) ], ), TestDef( "wasi_stdout_detected_abi", test_wasi_cpp_sources=["stdout"], steps=[ TestStep( command=[ "{wavm_bin}", "run", "--enable", "extended-name-section", "{wasi_wasm_dir}/stdout.wasm", ], expected_output=r"Hello world!", ) ], ), # WASI filesystem tests TestDef( "wasi_write_cat", create_temp_dir=True, test_wasi_cpp_sources=["write", "cat"], steps=[ TestStep( name="write", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "file.txt", "write_cat_test", ], ), TestStep( name="cat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/cat.wasm", "file.txt"], expected_output=r"write_cat_test", ), ], ), TestDef( "wasi_append", create_temp_dir=True, test_wasi_cpp_sources=["append", "cat"], steps=[ TestStep( name="append1", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/append.wasm", "file.txt", "first line", ], ), TestStep( name="append2", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/append.wasm", "file.txt", "second line", ], ), TestStep( name="cat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/cat.wasm", "file.txt"], expected_output=r"first line\nsecond line", ), ], ), TestDef( "wasi_mmap", create_temp_dir=True, test_wasi_cpp_sources=["write", "mmap"], steps=[ TestStep( name="write", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "file.txt", "mmap_test"], ), TestStep( name="mmap", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/mmap.wasm", "file.txt"], expected_output=r"mmap_test", ), ], ), TestDef( "wasi_mkdir_ls_rmdir", create_temp_dir=True, test_wasi_cpp_sources=["mkdir", "ls", "rmdir"], steps=[ TestStep( name="mkdir", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/mkdir.wasm", "subdir"] ), TestStep( name="ls", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/ls.wasm", "."], expected_output=r"subdir", ), TestStep( name="rmdir", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/rmdir.wasm", "subdir"] ), ], ), TestDef( "wasi_mv", create_temp_dir=True, test_wasi_cpp_sources=["write", "ls", "mv", "cat"], steps=[ TestStep( name="write", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "src.txt", "mv_test"], ), TestStep( name="ls_before", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/ls.wasm", "."], expected_output=r"src\.txt", ), TestStep( name="mv", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/mv.wasm", "src.txt", "dst.txt"], ), TestStep( name="ls_after", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/ls.wasm", "."], expected_output=r"dst\.txt", unexpected_output=r"src\.txt", ), TestStep( name="cat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/cat.wasm", "dst.txt"], expected_output=r"mv_test", ), ], ), TestDef( "wasi_rm", create_temp_dir=True, test_wasi_cpp_sources=["write", "ls", "rm"], steps=[ TestStep( name="write", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "file.txt", "rm_test"], ), TestStep( name="ls_before", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/ls.wasm", "."], expected_output=r"file\.txt", ), TestStep(name="rm", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/rm.wasm", "file.txt"]), TestStep( name="ls_after", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/ls.wasm", "."], unexpected_output=r"file\.txt", ), ], ), TestDef( "wasi_stat", create_temp_dir=True, test_wasi_cpp_sources=["write", "stat"], steps=[ TestStep( name="write", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "file.txt", "stat_test"], ), TestStep( name="stat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/stat.wasm", "file.txt"], expected_output=r"st_size: 10", ), ], ), TestDef( "wasi_preadwrite", create_temp_dir=True, test_wasi_cpp_sources=["preadwrite"], steps=[ TestStep( name="preadwrite", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/preadwrite.wasm", "file.txt", ], expected_output=r"pread\(5000\): Hello 5000!\npread\(500\): Hello 500!", ), ], ), TestDef( "wasi_fd_filestat_set_size", create_temp_dir=True, test_wasi_cpp_sources=["fd_filestat_set_size", "stat"], steps=[ TestStep( name="truncate", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/fd_filestat_set_size.wasm", "file.txt", ], ), TestStep( name="stat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/stat.wasm", "file.txt"], expected_output=r"st_size: 4201", ), ], ), TestDef( "wasi_fd_renumber", create_temp_dir=True, test_wasi_cpp_sources=["fd_renumber", "cat"], steps=[ TestStep( name="renumber", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/fd_renumber.wasm", "output.txt"], ), TestStep( name="cat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/cat.wasm", "output.txt"], expected_output=r"Hello stdout!", ), ], ), TestDef( "wasi_fd_filestat_set_times", create_temp_dir=True, test_wasi_cpp_sources=["write", "fd_filestat_set_times", "stat"], steps=[ TestStep( name="write", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "file.txt", "times_test"], ), TestStep( name="set_times", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/fd_filestat_set_times.wasm", "file.txt", "946684800000000000", "946684800000000000", ], ), TestStep( name="stat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/stat.wasm", "file.txt"], expected_output=r"st_atim: 2000/1/1 0:0:0 UTC", ), ], ), TestDef( "wasi_path_filestat_set_times", create_temp_dir=True, test_wasi_cpp_sources=["write", "path_filestat_set_times", "stat"], steps=[ TestStep( name="write", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/write.wasm", "file.txt", "times_test"], ), TestStep( name="set_times", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/path_filestat_set_times.wasm", "file.txt", "946684800000000000", "946684800000000000", ], ), TestStep( name="stat", command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/stat.wasm", "file.txt"], expected_output=r"st_atim: 2000/1/1 0:0:0 UTC", ), ], ), TestDef( "wasi_largefile", create_temp_dir=True, test_wasi_cpp_sources=["largefile"], steps=[ TestStep( name="largefile", command=[ *WASI_RUN_MOUNTED, "{wasi_wasm_dir}/largefile.wasm", "file.txt", ], expected_output=r"pread\(3GB\): Hello 3GB!\npread\(6GB\): Hello 6GB!\npread\(9GB\): Hello 9GB!", ), ], ), # WASI API tests TestDef( "wasi_fd_seek_tell", create_temp_dir=True, test_wasi_cpp_sources=["fd_seek_tell"], steps=[ TestStep( command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/fd_seek_tell.wasm"], ) ], ), TestDef( "wasi_fd_sync", create_temp_dir=True, test_wasi_cpp_sources=["fd_sync"], steps=[ TestStep( command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/fd_sync.wasm"], ) ], ), TestDef( "wasi_fd_fdstat", create_temp_dir=True, test_wasi_cpp_sources=["fd_fdstat"], steps=[ TestStep( command=[*WASI_RUN_MOUNTED, "{wasi_wasm_dir}/fd_fdstat.wasm"], ) ], ), TestDef( "wasi_clock_res", test_wasi_cpp_sources=["clock_res"], steps=[ TestStep(command=[*WASI_RUN, "{wasi_wasm_dir}/clock_res.wasm"]), ], ), TestDef( "wasi_clock_res_detected_abi", test_wasi_cpp_sources=["clock_res"], steps=[ TestStep( command=[ "{wavm_bin}", "run", "{wasi_wasm_dir}/clock_res.wasm", ], ), ], ), TestDef( "wasi_environ", test_wasi_cpp_sources=["environ"], steps=[ TestStep( command=[*WASI_RUN, "{wasi_wasm_dir}/environ.wasm"], expected_output=r"environ_count: \d+", ) ], ), # WASI OOB pointer tests (raw .wast, no compilation needed) TestDef( "wasi_random_get_oob", steps=[ TestStep( command=[*WASI_RUN, "{source_dir}/Test/wasi/wast/random_get_oob.wast"], ) ], ), TestDef( "wasi_fd_write_oob", steps=[ TestStep( command=[*WASI_RUN, "{source_dir}/Test/wasi/wast/fd_write_oob.wast"], ) ], ), TestDef( "wasi_fd_read_oob", steps=[ TestStep( command=[*WASI_RUN, "{source_dir}/Test/wasi/wast/fd_read_oob.wast"], ) ], ), ] ================================================ FILE: Build/lib/workspace.py ================================================ """VS Code workspace file generation for clangd integration.""" import argparse import json from pathlib import Path from typing import Any, Optional from .build import get_lint_config, create_wavm_configure_task from .context import CommandContext from .llvm import get_llvm_toolchain_task from .output import output from .platform import EXE_EXT from .task_graph import execute def _add_unique(items: list[str], value: str) -> None: """Add a value to a list if it's not already present.""" if value not in items: items.append(value) def generate_workspace_file( workspace_path: Path, source_dir: Path, build_dir: Path, llvm_install_dir: Optional[Path] = None, ) -> None: """Generate or update a VS Code .code-workspace file configured for clangd. If the file already exists, merges clangd settings into it. Otherwise creates a new workspace file pointing at the WAVM source tree. """ if workspace_path.exists(): workspace: dict[str, Any] = json.loads(workspace_path.read_text()) else: workspace = {} # Ensure folders list exists; add WAVM source folder if not already present folders: list[dict[str, str]] = workspace.setdefault("folders", []) source_str = str(source_dir) if not any(f.get("path") == source_str for f in folders): folders.append({"path": source_str, "name": "WAVM"}) # Set clangd settings settings: dict[str, Any] = workspace.setdefault("settings", {}) settings["clangd.arguments"] = [ f"--compile-commands-dir={build_dir}", "--background-index", ] if llvm_install_dir: settings["clangd.path"] = str(llvm_install_dir / "bin" / f"clangd{EXE_EXT}") settings["C_Cpp.intelliSenseEngine"] = "disabled" settings["[cpp]"] = {"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"} settings["[c]"] = {"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"} # Set extension recommendations extensions: dict[str, list[str]] = workspace.setdefault("extensions", {}) recommendations: list[str] = extensions.setdefault("recommendations", []) _add_unique(recommendations, "llvm-vs-code-extensions.vscode-clangd") unwanted: list[str] = extensions.setdefault("unwantedRecommendations", []) _add_unique(unwanted, "ms-vscode.cpptools") workspace_path.parent.mkdir(parents=True, exist_ok=True) workspace_path.write_text(json.dumps(workspace, indent=4) + "\n") # ============================================================================= # Command Handler # ============================================================================= def cmd_setup_workspace(args: argparse.Namespace, ctx: CommandContext) -> int: """Generate a VS Code workspace file with clangd configuration.""" wavm_config = get_lint_config() configure_task = create_wavm_configure_task( wavm_config, ctx.work_dir, ctx.source_dir, build_llvm_from_source=args.llvm_source, offline=args.offline, ) if not execute([configure_task]): return 1 # Extract LLVM install dir for clangd path toolchain_task = get_llvm_toolchain_task( ctx.work_dir, args.llvm_source, offline=args.offline ) llvm_install_dir: Optional[Path] = None if toolchain_task.result: llvm_install_dir = toolchain_task.result.artifacts.get("llvm_install_dir") # Generate or update workspace file workspace_path = Path(args.workspace_file).resolve() generate_workspace_file( workspace_path, ctx.source_dir, configure_task.build_dir, llvm_install_dir ) output.print(f"Workspace file: {workspace_path}") return 0 def register_setup_workspace(subparsers: argparse._SubParsersAction) -> None: p = subparsers.add_parser( "setup-workspace", help="Generate or update a VS Code workspace file with clangd configuration", ) p.add_argument( "workspace_file", help="Path to the .code-workspace file to create or update", ) p.set_defaults(func=cmd_setup_workspace) ================================================ FILE: Build/ruff.toml ================================================ line-length = 100 ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.16) # Parse the VERSION file. set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS VERSION) file(READ "VERSION" VERSION_FILE_CONTENTS) string(REGEX MATCH "([0-9]+)\.([0-9]+)\.([0-9]+)(-[a-zA-Z0-9]+)?" WAVM_VERSION_STRING ${VERSION_FILE_CONTENTS}) if(NOT WAVM_VERSION_STRING) message(FATAL_ERROR "Could not parse 'VERSION' file") endif() set(WAVM_VERSION_MAJOR ${CMAKE_MATCH_1}) set(WAVM_VERSION_MINOR ${CMAKE_MATCH_2}) set(WAVM_VERSION_PATCH ${CMAKE_MATCH_3}) set(WAVM_VERSION_SUFFIX ${CMAKE_MATCH_4}) # Declare the CMake project project( WAVM VERSION "${WAVM_VERSION_MAJOR}.${WAVM_VERSION_MINOR}.${WAVM_VERSION_PATCH}" LANGUAGES C CXX ASM ) # Force CMake to always emit -std=gnu++17 even when the compiler defaults to C++17. # Without this, compile_commands.json omits the flag, which breaks clangd when it uses # a different compiler (e.g. Apple clang, which defaults to C++14). # Individual targets still use target_compile_features(PUBLIC cxx_std_17) to propagate # the C++17 requirement to consumer projects. set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(MSVC) enable_language(ASM_MASM) # Remove the default /W3 flag that CMake adds for MSVC, since we use /W4. # This avoids the D9025 warning about overriding warning levels. string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REGEX REPLACE "/W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") endif() # Include some modules we use. GNUInstallDirs must be included after the project is declared, since it # uses configuration variables initialized when the project is declared (CMAKE_SIZEOF_VOID_P). include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) # Use "lib" unconditionally so packages have a consistent layout across distros. GNUInstallDirs would # otherwise pick "lib64" on 64-bit Fedora/SUSE or "lib/" on Debian, causing CMake config # files to land in paths that find_package won't search when packaged and installed on other distros. if(NOT DEFINED CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") endif() include(GNUInstallDirs) # Set install RPATH so installed binaries can find libWAVM relative to themselves if(UNIX AND NOT APPLE) file(RELATIVE_PATH _rpath_reldir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}" "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") set(CMAKE_INSTALL_RPATH "$ORIGIN/${_rpath_reldir}") elseif(APPLE) file(RELATIVE_PATH _rpath_reldir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}" "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") set(CMAKE_INSTALL_RPATH "@executable_path/${_rpath_reldir}") endif() # Configure CPack set(CPACK_PACKAGE_NAME "WAVM") set(CPACK_PACKAGE_VENDOR "Andrew Scheidecker") set(CPACK_PACKAGE_CONTACT "andrew@scheidecker.net") set(CPACK_PACKAGE_VERSION_MAJOR ${WAVM_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${WAVM_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${WAVM_VERSION_PATCH}) set(CPACK_PACKAGE_VERSION ${WAVM_VERSION_STRING}) set(CPACK_PACKAGE_DESCRIPTION "WebAssembly virtual machine") set(CPACK_PACKAGE_HOMEPAGE_URL "https://wavm.github.io") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt") set(CPACK_PACKAGE_INSTALL_DIRECTORY "WAVM") set(CPACK_PACKAGE_FILE_NAME "wavm-package") set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF) set(CPACK_COMPONENT_RUNTIME_DISPLAY_NAME "WAVM Runtime") set(CPACK_COMPONENT_RUNTIME_DESCRIPTION "The WebAssembly Virtual Machine runtime") set(CPACK_COMPONENT_RUNTIME_REQUIRED YES) set(CPACK_COMPONENT_DEVEL_DISPLAY_NAME "WAVM Libraries and C/C++ Headers") set(CPACK_COMPONENT_DEVEL_DESCRIPTION "The libraries and C/C++ headers needed to use the WAVM runtime in your application") # Configure NSIS set(CPACK_NSIS_MODIFY_PATH ON) # Configure Debian package if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") endif() set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.15), libstdc++6 (>= 5.1)") set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://wavm.github.io") # Configure RPM package: without this, CPack claims ownership of /usr/lib/cmake # in the RPM %files section, which makes RPM auto-depend on cmake-filesystem. # Excluding these directories from the file list removes that dependency while # keeping the CMake config files in the package. set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/cmake" "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/cmake/WAVM") include(CPack) # WAVM configuration options option(WAVM_ENABLE_STATIC_LINKING "use static linking instead of dynamic for the WAVM libraries" OFF) option(WAVM_ENABLE_RELEASE_ASSERTS "enable assertions in release builds" 0) set(WAVM_ENABLE_LTO "OFF" CACHE STRING "enable link-time optimization (off, on, or thin)") option(WAVM_ENABLE_FUZZ_TARGETS "build the fuzz targets" ON) option(WAVM_COMPILE_HEADERS "compile headers as C++ to enable clang-tidy analysis" OFF) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # The sanitizers are only available when compiling with Clang and GCC. option(WAVM_ENABLE_ASAN "enable ASAN" OFF) option(WAVM_ENABLE_UBSAN "enable UBSAN" OFF) option(WAVM_ENABLE_TSAN "enable TSAN" OFF) else() set(WAVM_ENABLE_ASAN OFF) set(WAVM_ENABLE_UBSAN OFF) set(WAVM_ENABLE_TSAN OFF) endif() # ASAN requires static linking so that __asan_default_options (which configures ASAN to not # intercept signals used for WebAssembly traps) is available when ASAN initializes. if(WAVM_ENABLE_ASAN AND NOT WAVM_ENABLE_STATIC_LINKING) message(FATAL_ERROR "WAVM_ENABLE_ASAN requires WAVM_ENABLE_STATIC_LINKING=ON") endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # libfuzzer is only available when compiling with Clang. option(WAVM_ENABLE_LIBFUZZER "compile WAVM for use by clang/LLVM's libfuzzer" OFF) # Source-based code coverage is only available when compiling with Clang. option(WAVM_ENABLE_COVERAGE "enable source-based code coverage instrumentation" OFF) else() set(WAVM_ENABLE_LIBFUZZER OFF) set(WAVM_ENABLE_COVERAGE OFF) endif() if(CMAKE_SIZEOF_VOID_P EQUAL 4) # Disable the runtime on 32-bit platforms. set(WAVM_ENABLE_RUNTIME OFF) else() # Allow disabling the runtime on 64-bit platforms. option(WAVM_ENABLE_RUNTIME "enables the runtime components of WAVM" ON) endif() # On GCC/Clang, provide an option to compile the static libraries as PIC: Position-Independent Code. # With this option disabled, the static libraries may not be linked into shared libraries. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(WAVM_ENABLE_STATIC_LINKING) option(WAVM_ENABLE_STATIC_LIBRARY_PIC "create position-independent static libraries" ON) endif() endif() # Detect synchronization primitive sizes for the platform-independent headers include(${CMAKE_CURRENT_LIST_DIR}/cmake/DetectSyncPrimitiveSizes.cmake) # On non-Apple POSIX platforms, build WAVMUnwind for libunwind functionality. # This is needed for the platform unwind API regardless of the runtime. if(NOT APPLE AND NOT MSVC) set(WAVM_BUILD_WAVMUNWIND ON) endif() # Detect UnwindState size and alignment for the platform-independent unwind API. # This is always needed since the unwind API is not gated on the runtime. include(${WAVM_SOURCE_DIR}/cmake/DetectUnwindStateSizes.cmake) if(WAVM_ENABLE_RUNTIME) # Find LLVM here so its imported targets are visible when linking libWAVM. # LLVM-specific configuration (definitions, etc.) is in Lib/LLVMJIT/CMakeLists.txt. find_package(LLVM REQUIRED CONFIG) if(LLVM_VERSION_MAJOR LESS 20) message(FATAL_ERROR "WAVM requires LLVM version 20.0 or newer") endif() endif() # Tell MASM to create SAFESEH-compatible object files on Win32. if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 4) set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /safeseh") endif() # Bind some variables to useful paths. set(WAVM_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) set(WAVM_INCLUDE_DIR ${WAVM_SOURCE_DIR}/Include/WAVM) # If no build type is specified, default to RelWithDebInfo if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The type of build (Debug, Release, RelWithDebInfo, or MinSizeRel" FORCE) endif() # Enable MACOSX_RPATH by default cmake_policy(SET CMP0042 NEW) # Enable folders when generating Visual Studio solutions set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Put executables/DLLs in the /bin directory. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) # Disable MSVC incremental linking: it conflicts with LTO, and seems to have problems on AArch64. if(MSVC) string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO " CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}) string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO " CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}) string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO " CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}) string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO " CMAKE_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG}) endif() # Install Include/WAVM to /include/WAVM install(DIRECTORY ${WAVM_SOURCE_DIR}/Include/WAVM COMPONENT devel DESTINATION include PATTERN *.txt EXCLUDE PATTERN *.h.in EXCLUDE) # Generate Inline/Config.h in the build+install directories from Inline/Config.h.in in the source configure_file(${WAVM_SOURCE_DIR}/Include/WAVM/Inline/Config.h.in ${PROJECT_BINARY_DIR}/Include/WAVM/Inline/Config.h) install(FILES ${PROJECT_BINARY_DIR}/Include/WAVM/Inline/Config.h COMPONENT devel DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/WAVM/Inline) # Generate Inline/Version.h in the build+install directories from Inline/Version.h.in in the source configure_file(${WAVM_SOURCE_DIR}/Include/WAVM/Inline/Version.h.in ${PROJECT_BINARY_DIR}/Include/WAVM/Inline/Version.h) install(FILES ${PROJECT_BINARY_DIR}/Include/WAVM/Inline/Version.h COMPONENT devel DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/WAVM/Inline) # Install LICENSE to on Windows and /share/wavm on other systems. install(FILES ${WAVM_SOURCE_DIR}/LICENSE.txt COMPONENT runtime DESTINATION $,.,${CMAKE_INSTALL_DATAROOTDIR}/wavm>) # Install the Examples directory to /examples on Windows, and /share/wavm/examples on other systems. install(DIRECTORY ${WAVM_SOURCE_DIR}/Examples/ DESTINATION $,examples,${CMAKE_INSTALL_DATAROOTDIR}/wavm/examples> COMPONENT runtime PATTERN *.txt EXCLUDE) set(WAVM_C_CXX_FLAGS) set(WAVM_CXX_FLAGS) set(WAVM_LTO_C_CXX_FLAGS) set(WAVM_LINKER_FLAGS) set(WAVM_STATIC_LIBRARY_FLAGS) function(wavm_get_config_var_name_for_flag FLAG VAR_NAME) string(SUBSTRING ${FLAG} 1 -1 FLAG_NAME) string(MAKE_C_IDENTIFIER ${FLAG_NAME} FLAG_NAME) string(TOUPPER ${FLAG_NAME} FLAG_NAME) set(${VAR_NAME} ${FLAG_NAME} PARENT_SCOPE) endfunction() function(wavm_check_cxx_compiler_flag FLAG VARIABLE_NAME) set(WAVM_ALL_CXX_FLAGS ${WAVM_C_CXX_FLAGS} ${WAVM_CXX_FLAGS} ${WAVM_LTO_C_CXX_FLAGS}) list(JOIN WAVM_ALL_CXX_FLAGS " " WAVM_CXX_FLAGS_SPACE_SEPARATED) check_cxx_compiler_flag("${WAVM_CXX_FLAGS_SPACE_SEPARATED} ${FLAG}" ${VARIABLE_NAME}) endfunction() function(wavm_add_cxx_flag_if_supported OPTIONAL_FLAG) wavm_get_config_var_name_for_flag(${OPTIONAL_FLAG} FLAG_VAR) wavm_check_cxx_compiler_flag("${OPTIONAL_FLAG}" "CXX_HAS_${FLAG_VAR}") if(CXX_HAS_${FLAG_VAR}) list(APPEND WAVM_CXX_FLAGS ${OPTIONAL_FLAG}) set(WAVM_CXX_FLAGS ${WAVM_CXX_FLAGS} PARENT_SCOPE) endif() endfunction() function(wavm_add_c_cxx_flag_if_supported OPTIONAL_FLAG) wavm_get_config_var_name_for_flag(${OPTIONAL_FLAG} FLAG_VAR) wavm_check_cxx_compiler_flag("${OPTIONAL_FLAG}" "CXX_HAS_${FLAG_VAR}") if(CXX_HAS_${FLAG_VAR}) list(APPEND WAVM_C_CXX_FLAGS ${OPTIONAL_FLAG}) set(WAVM_C_CXX_FLAGS ${WAVM_C_CXX_FLAGS} PARENT_SCOPE) endif() endfunction() function(wavm_check_linker_flag FLAG VARIABLE_NAME) list(JOIN WAVM_LINKER_FLAGS " " WAVM_LINKER_FLAGS_SPACE_SEPARATED) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${WAVM_LINKER_FLAGS_SPACE_SEPARATED} ${FLAG}") wavm_check_cxx_compiler_flag("" ${VARIABLE_NAME}) endfunction() function(wavm_add_linker_flag_if_supported OPTIONAL_FLAG) wavm_get_config_var_name_for_flag(${OPTIONAL_FLAG} FLAG_VAR) wavm_check_linker_flag(${OPTIONAL_FLAG} "LINKER_HAS_${FLAG_VAR}") if(LINKER_HAS_${FLAG_VAR}) list(APPEND WAVM_LINKER_FLAGS ${OPTIONAL_FLAG}) set(WAVM_LINKER_FLAGS ${WAVM_LINKER_FLAGS} PARENT_SCOPE) endif() endfunction() # By default, CMake uses different optimization settings for Release vs RelWithDebInfo builds. # For GCC, it uses -O3 in Release and -O2 in RelWithDebInfo. # For MSVC, it uses /Ob2 in Release and /Ob1 in RelWithDebInfo (amount of inlining). # In order to reduce problems that only occur in Release builds without debug symbols, override the # default optimization settings so RelWithDebInfo uses the same optimization settings as Release. set(CMAKE_C_FLAGS_RELWITHDEBINFO_LOCAL ${CMAKE_C_FLAGS_RELWITHDEBINFO}) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_LOCAL ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) string(REPLACE "-O2" "-O3" CMAKE_C_FLAGS_RELWITHDEBINFO_LOCAL ${CMAKE_C_FLAGS_RELWITHDEBINFO_LOCAL}) string(REPLACE "-O2" "-O3" CMAKE_CXX_FLAGS_RELWITHDEBINFO_LOCAL ${CMAKE_CXX_FLAGS_RELWITHDEBINFO_LOCAL}) string(REPLACE "/Ob1" "/Ob2" CMAKE_C_FLAGS_RELWITHDEBINFO_LOCAL ${CMAKE_C_FLAGS_RELWITHDEBINFO_LOCAL}) string(REPLACE "/Ob1" "/Ob2" CMAKE_CXX_FLAGS_RELWITHDEBINFO_LOCAL ${CMAKE_CXX_FLAGS_RELWITHDEBINFO_LOCAL}) set(CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO_LOCAL} CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO_LOCAL} CACHE STRING "" FORCE) # Override the default linker via WAVM_USE_LINKER. # On Windows (MSVC or clang-cl), this sets CMAKE_LINKER directly. # On POSIX (clang/gcc), this adds -fuse-ld= to compiler flags. set(WAVM_USE_LINKER "" CACHE STRING "If set, overrides the default linker") if(WAVM_USE_LINKER) if(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") set(CMAKE_LINKER "${WAVM_USE_LINKER}" CACHE FILEPATH "" FORCE) else() list(APPEND WAVM_LINKER_FLAGS "-fuse-ld=${WAVM_USE_LINKER}") endif() endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Warn if a switch doesn't handle an enum case even if it has a default label. wavm_add_c_cxx_flag_if_supported("-Wswitch-enum") wavm_add_c_cxx_flag_if_supported("-Wswitch-default") wavm_add_c_cxx_flag_if_supported("-Wnull-dereference") wavm_add_c_cxx_flag_if_supported("-Wduplicated-cond") wavm_add_c_cxx_flag_if_supported("-Wduplicated-branches") wavm_add_c_cxx_flag_if_supported("-Wlogical-op") wavm_add_cxx_flag_if_supported("-Wnon-virtual-dtor") wavm_add_c_cxx_flag_if_supported("-Wrestrict") wavm_add_c_cxx_flag_if_supported("-Wdouble-promotion") # Exclude some warnings included in Wextra that we don't care about. wavm_add_c_cxx_flag_if_supported("-Wno-missing-field-initializers") wavm_add_c_cxx_flag_if_supported("-Wno-unused-parameter") endif() # Use -fvisibility=hidden if available to reduce exported symbols. wavm_add_c_cxx_flag_if_supported("-fvisibility=hidden") string(TOUPPER "${WAVM_ENABLE_LTO}" UPPERCASE_WAVM_ENABLE_LTO) if(UPPERCASE_WAVM_ENABLE_LTO STREQUAL "THIN") list(APPEND WAVM_LTO_C_CXX_FLAGS "-flto=thin") if(NOT MSVC) list(APPEND WAVM_LINKER_FLAGS "-flto=thin") endif() # Detect which command line options the linker supports to configure the ThinLTO cache. wavm_check_linker_flag("-Wl,--thinlto-cache-dir=${CMAKE_BINARY_DIR}/.thinltocache" LINKER_HAS_ELF_LLD_THINLTO_CMD_SYNTAX) wavm_check_linker_flag("-Wl,-plugin-opt,cache-dir=${CMAKE_BINARY_DIR}/.thinltocache" LINKER_HAS_GOLD_THINLTO_CMD_SYNTAX) wavm_check_linker_flag("-Wl,-cache_path_lto,${CMAKE_BINARY_DIR}/.thinltocache" LINKER_HAS_LD64_THINLTO_CMD_SYNTAX) wavm_check_linker_flag("/lldltocache:${CMAKE_BINARY_DIR}/.thinltocache" LINKER_HAS_COFF_LLD_THINLTO_CMD_SYNTAX) if(LINKER_HAS_COFF_LLD_THINLTO_CMD_SYNTAX) # COFF LLD ThinLTO cache options # Favor this path as hack, because lld-link.exe will accept and ignore the other syntaxes # with a warning, but LLD, gold, and LD64 will reject this syntax as an error. list(APPEND WAVM_LINKER_FLAGS "/lldltocache:${CMAKE_BINARY_DIR}/.thinltocache") list(APPEND WAVM_LINKER_FLAGS "/lldltocachepolicy:cache_size_bytes=1g") elseif(LINKER_HAS_ELF_LLD_THINLTO_CMD_SYNTAX) # LLD ThinLTO cache options list(APPEND WAVM_LINKER_FLAGS "-Wl,--thinlto-cache-dir=${CMAKE_BINARY_DIR}/.thinltocache") list(APPEND WAVM_LINKER_FLAGS "-Wl,--thinlto-cache-policy,cache_size_bytes=1g") elseif(LINKER_HAS_GOLD_THINLTO_CMD_SYNTAX) # Gold ThinLTO cache options list(APPEND WAVM_LINKER_FLAGS "-Wl,-plugin-opt,cache-dir=${CMAKE_BINARY_DIR}/.thinltocache") list(APPEND WAVM_LINKER_FLAGS "-Wl,-plugin-opt,cache-policy=cache_size_bytes=1g") elseif(LINKER_HAS_LD64_THINLTO_CMD_SYNTAX) # ld64 ThinLTO cache options list(APPEND WAVM_LINKER_FLAGS "-Wl,-cache_path_lto,${CMAKE_BINARY_DIR}/.thinltocache") endif() elseif(UPPERCASE_WAVM_ENABLE_LTO STREQUAL "ON") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") list(APPEND WAVM_LTO_C_CXX_FLAGS "-flto") if(NOT MSVC) list(APPEND WAVM_LINKER_FLAGS "-flto") endif() elseif(MSVC) list(APPEND WAVM_LTO_C_CXX_FLAGS "/GL") list(APPEND WAVM_LINKER_FLAGS "/LTCG") list(APPEND WAVM_STATIC_LIBRARY_FLAGS "/LTCG") else() message(FATAL_ERROR "Your compiler does not seem to support LTO via either '-flto' or '/GL'.") endif() elseif(NOT UPPERCASE_WAVM_ENABLE_LTO STREQUAL "OFF") message(FATAL_ERROR "WAVM_ENABLE_LTO must be 'OFF', 'ON', or 'THIN'") endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # When -flto and -gsplit-dwarf are passed to GCC, it produces a non-error note: # ‘-gsplit-dwarf’ is not supported with LTO, disabling # To avoid the nuisance, don't bother with -gsplit-dwarf if any form LTO is enabled on GCC. if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR UPPERCASE_WAVM_ENABLE_LTO STREQUAL "OFF") # If the compiler supports it, use -gsplit-dwarf for the configurations that build debug info. wavm_check_cxx_compiler_flag("-gsplit-dwarf" CXX_HAS_GSPLIT_DWARF) if(CXX_HAS_GSPLIT_DWARF) set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -gsplit-dwarf") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -gsplit-dwarf") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -gsplit-dwarf") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gsplit-dwarf") # If the linker supports it, use --gdb-index to add an index of external debug data to the # binaries. gold and lld support this, ld does not. wavm_add_linker_flag_if_supported("-Wl,--gdb-index") endif() endif() endif() function(WAVM_SET_TARGET_LINKER_OPTIONS TARGET_NAME) target_compile_options(${TARGET_NAME} PRIVATE ${WAVM_LTO_C_CXX_FLAGS}) if(MSVC) if(WAVM_LINKER_FLAGS) list(JOIN WAVM_LINKER_FLAGS " " WAVM_LINKER_FLAGS_SPACE_SEPARATED) set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "${WAVM_LINKER_FLAGS_SPACE_SEPARATED}") endif() if(WAVM_STATIC_LIBRARY_FLAGS) list(JOIN WAVM_STATIC_LIBRARY_FLAGS " " WAVM_STATIC_LIBRARY_FLAGS_SPACE_SEPARATED) set_target_properties(${TARGET_NAME} PROPERTIES STATIC_LIBRARY_FLAGS "${WAVM_STATIC_LIBRARY_FLAGS_SPACE_SEPARATED}") endif() else() target_link_libraries(${TARGET_NAME} PRIVATE ${WAVM_LINKER_FLAGS}) endif() if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") get_target_property(TARGET_TYPE ${TARGET_NAME} TYPE) if(TARGET_TYPE STREQUAL "STATIC_LIBRARY" AND WAVM_ENABLE_STATIC_LIBRARY_PIC) # Ensure that even static libraries are relocatable so they can be linked into a .so target_compile_options(${TARGET_NAME} PRIVATE "-fPIC") endif() endif() endfunction() # A function that sets sanitizer options on a target. function(WAVM_SET_TARGET_SANITIZER_OPTIONS TARGET_NAME) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(WAVM_ENABLE_ASAN) target_compile_options(${TARGET_NAME} PRIVATE "-fsanitize=address") target_link_libraries(${TARGET_NAME} PUBLIC "-fsanitize=address") endif() # Optionally enable the undefined-behavior sanitizer. if(WAVM_ENABLE_UBSAN) target_compile_options(${TARGET_NAME} PRIVATE "-fsanitize=undefined") target_link_libraries(${TARGET_NAME} PUBLIC -fsanitize=undefined) target_compile_options(${TARGET_NAME} PRIVATE "-fno-sanitize-recover=undefined") endif() # Optionally enable the thread sanitizer. if(WAVM_ENABLE_TSAN) target_compile_options(${TARGET_NAME} PRIVATE "-fsanitize=thread") target_link_libraries(${TARGET_NAME} PUBLIC -fsanitize=thread) endif() # Optionally enable Clang's libfuzzer. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND WAVM_ENABLE_LIBFUZZER) target_compile_options(${TARGET_NAME} PRIVATE "-fsanitize=fuzzer") target_compile_options(${TARGET_NAME} PRIVATE "-fsanitize-coverage=trace-cmp,trace-div,trace-gep") endif() # Optionally enable source-based code coverage instrumentation. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND WAVM_ENABLE_COVERAGE) target_compile_options(${TARGET_NAME} PRIVATE "-fprofile-instr-generate" "-fcoverage-mapping") target_link_libraries(${TARGET_NAME} PRIVATE "-fprofile-instr-generate") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Link with the static sanitizer runtimes instead of the shared sanitizer runtimes on GCC. # This matches the default behavior for Clang. if(WAVM_ENABLE_ASAN) target_link_libraries(${TARGET_NAME} PUBLIC "-static-libasan") endif() if(WAVM_ENABLE_UBSAN) target_link_libraries(${TARGET_NAME} PUBLIC "-static-libubsan") endif() if(WAVM_ENABLE_TSAN) target_link_libraries(${TARGET_NAME} PUBLIC "-static-libtsan") endif() endif() endif() endfunction() # A function that sets compile options that are common to all WAVM targets. function(WAVM_SET_TARGET_COMPILE_OPTIONS TARGET_NAME) # Add the WAVM public include directory. target_include_directories( ${TARGET_NAME} PUBLIC $ $ $ ) # Target C++17. target_compile_features(${TARGET_NAME} PUBLIC cxx_std_17) # Set sanitizer options. WAVM_SET_TARGET_SANITIZER_OPTIONS(${TARGET_NAME}) if(MSVC) if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") # Compile files in parallel (MSVC-specific, not supported by clang-cl). target_compile_options(${TARGET_NAME} PRIVATE "/MP") endif() # Compile with all warnings, and fatal warnings. target_compile_options(${TARGET_NAME} PRIVATE "/W4") target_compile_options(${TARGET_NAME} PRIVATE "/WX") # Disable warnings target_compile_options(${TARGET_NAME} PRIVATE "/wd4127") # conditional expression is constant target_compile_options(${TARGET_NAME} PRIVATE "/wd4100") # unreferenced formal parameter target_compile_options(${TARGET_NAME} PRIVATE "/wd4512") # assignment operator could not be generated target_compile_options(${TARGET_NAME} PRIVATE "/wd4141") # 'inline': used more than once target_compile_options(${TARGET_NAME} PRIVATE "/wd4310") # cast truncates constant value target_compile_options(${TARGET_NAME} PRIVATE "/wd4324") # structure was padded due to alignment specifier target_compile_options(${TARGET_NAME} PRIVATE "/wd4146") # unary minus operator applied to unsigned type, result still unsigned target_compile_options(${TARGET_NAME} PRIVATE "/wd4204") # nonstandard extension used : non-constant aggregate initializer target_compile_options(${TARGET_NAME} PRIVATE "/wd4251") # struct '' needs to have dll-interface to be used by clients of struct '' target_link_libraries(${TARGET_NAME} PRIVATE "-ignore:4199") # /DELAYLOAD:... ignored; no imports found from ... if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_compile_options(${TARGET_NAME} PRIVATE "-Wno-deprecated-declarations") endif() # error C2338: You've instantiated std::aligned_storage with an extended alignment # (in other words, Align > alignof(max_align_t)). Before VS 2017 15.8, the member "type" would # non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to # handle this correctly, but the fix inherently changes layout and breaks binary compatibility # (*only* for uses of aligned_storage with extended alignments). Please define either # (1) _ENABLE_EXTENDED_ALIGNED_STORAGE to acknowledge that you understand this message and # that you actually want a type with an extended alignment, or # (2) _DISABLE_EXTENDED_ALIGNED_STORAGE to silence this message and get the old non-conformant # behavior. target_compile_definitions(${TARGET_NAME} PRIVATE "_ENABLE_EXTENDED_ALIGNED_STORAGE") elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Compile with all+extra warnings and fatal warnings target_compile_options(${TARGET_NAME} PRIVATE "-Wall") target_compile_options(${TARGET_NAME} PRIVATE "-Wextra") target_compile_options(${TARGET_NAME} PRIVATE "-Werror") # Disable RTTI to allow linking against a build of LLVM that was compiled without it. target_compile_options(${TARGET_NAME} PRIVATE $<$:-fno-rtti>) # Don't eliminate frame pointers: this makes thread forking work robustly if one of the # sanitizers requires a frame pointer, and makes ASAN's stack trace on malloc much better # without using the slow libunwind path. target_compile_options(${TARGET_NAME} PRIVATE "-fno-omit-frame-pointer") # Remap source file paths to be relative to the source directory. This makes debug info, # coverage mapping, __FILE__, etc. use reproducible relative paths. target_compile_options(${TARGET_NAME} PRIVATE "-ffile-prefix-map=${CMAKE_SOURCE_DIR}/=") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") # Compile with -pthread on Linux. target_compile_options(${TARGET_NAME} PRIVATE "-pthread") target_link_libraries(${TARGET_NAME} PRIVATE "-pthread") endif() # Add the optional flags that the compiler was detected to support. # This needs to happen *AFTER* the above -Wall -Wextra to ensure that those flags don't # re-enable warnings that are being disabled by these flags. target_compile_options(${TARGET_NAME} PRIVATE ${WAVM_C_CXX_FLAGS}) target_compile_options(${TARGET_NAME} PRIVATE $<$:${WAVM_CXX_FLAGS}>) # Add the linker flags. WAVM_SET_TARGET_LINKER_OPTIONS(${TARGET_NAME}) endfunction() function(WAVM_INSTALL_TARGET TARGET_NAME) install(TARGETS ${TARGET_NAME} EXPORT WAVMInstallTargets COMPONENT devel LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime) # Install PDB files to the same directory as the binaries. # Exclude static libraries as TARGET_PDB_FILE only works for linked targets. get_target_property(TARGET_TYPE ${TARGET_NAME} TYPE) if(MSVC AND NOT ${TARGET_TYPE} STREQUAL "STATIC_LIBRARY") install(FILES $ COMPONENT devel DESTINATION bin OPTIONAL) endif() endfunction() # Older versions of CMake can't handle target_link_libraries on the monolithic WAVM library # when invoked from a source directory other than the root directory where the WAVM target is # defined. To get around this, accumulate the libraries this component needs to link with in an # internal config variable, which seems to be the closest thing CMake has to a global variable. # After processing all library components, this root directory CMakeLists.txt invokes # target_link_libraries with the accumulated libraries. set(WAVM_MONOLIB_PRIVATE_LIBS "" CACHE INTERNAL "" FORCE) set(WAVM_MONOLIB_PUBLIC_LIBS "" CACHE INTERNAL "" FORCE) # CMake also scopes the effect of set_source_files_properties to targets created by the same list # file, so to set the header-only flag on source files in the WAVM monolib, it's necessary to # accumulate the set of header-only files in a global variable while processing subdirectory list # files, and then set the source file properties at the end of this list file. set(WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES "" CACHE INTERNAL "" FORCE) set(WAVM_MONOLIB_HEADER_SOURCE_FILES "" CACHE INTERNAL "" FORCE) function(WAVM_ADD_LIB_COMPONENT COMPONENT_NAME) cmake_parse_arguments(COMPONENT "" "" "SOURCES;HEADERS;NONCOMPILED_SOURCES;PRIVATE_LIBS;PUBLIC_LIBS;PRIVATE_INCLUDE_DIRECTORIES;PRIVATE_SYSTEM_INCLUDE_DIRECTORIES;PUBLIC_SYSTEM_INCLUDE_DIRECTORIES;PRIVATE_DEFINITIONS;PUBLIC_DEFINITIONS" ${ARGN}) # Translate the relative source and header file paths to absolute paths. # Older versions of CMake will use the source directory where a target is defined as the root # for relative paths in the target's sources, which breaks when adding the source files to The # monolithic WAVM library defined in the root directory. foreach(COMPONENT_SOURCE ${COMPONENT_SOURCES}) get_filename_component(COMPONENT_SOURCE_ABSOLUTE ${COMPONENT_SOURCE} ABSOLUTE) list(APPEND COMPONENT_SOURCES_ABSOLUTE ${COMPONENT_SOURCE_ABSOLUTE}) endforeach() foreach(COMPONENT_HEADER ${COMPONENT_HEADERS}) get_filename_component(COMPONENT_HEADER_ABSOLUTE ${COMPONENT_HEADER} ABSOLUTE) list(APPEND COMPONENT_HEADERS_ABSOLUTE ${COMPONENT_HEADER_ABSOLUTE}) endforeach() foreach(COMPONENT_NONCOMPILED_SOURCE ${COMPONENT_NONCOMPILED_SOURCES}) get_filename_component(COMPONENT_NONCOMPILED_SOURCE_ABSOLUTE ${COMPONENT_NONCOMPILED_SOURCE} ABSOLUTE) list(APPEND COMPONENT_NONCOMPILED_SOURCES_ABSOLUTE ${COMPONENT_NONCOMPILED_SOURCE_ABSOLUTE}) endforeach() # Directly add the component's source files to the monolithic WAVM library. target_sources(libWAVM PRIVATE ${COMPONENT_SOURCES_ABSOLUTE} ${COMPONENT_HEADERS_ABSOLUTE} ${CMAKE_CURRENT_LIST_FILE}) # Headers are compiled as C++ when WAVM_COMPILE_HEADERS is ON, otherwise not compiled. if(WAVM_COMPILE_HEADERS) list(APPEND WAVM_MONOLIB_HEADER_SOURCE_FILES ${COMPONENT_HEADERS_ABSOLUTE}) set(WAVM_MONOLIB_HEADER_SOURCE_FILES ${WAVM_MONOLIB_HEADER_SOURCE_FILES} CACHE INTERNAL "" FORCE) else() list(APPEND WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES ${COMPONENT_HEADERS_ABSOLUTE}) endif() # Add the non-compiled source files to a global list that will be flagged as "header-only". list(APPEND WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES ${COMPONENT_NONCOMPILED_SOURCES_ABSOLUTE}) set(WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES ${WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES} CACHE INTERNAL "" FORCE) # Add the libraries this component depends on to the global list of libraries to link the # monolithic WAVM library with. list(APPEND WAVM_MONOLIB_PRIVATE_LIBS ${COMPONENT_PRIVATE_LIBS}) list(APPEND WAVM_MONOLIB_PUBLIC_LIBS ${COMPONENT_PUBLIC_LIBS}) set(WAVM_MONOLIB_PRIVATE_LIBS ${WAVM_MONOLIB_PRIVATE_LIBS} CACHE INTERNAL "" FORCE) set(WAVM_MONOLIB_PUBLIC_LIBS ${WAVM_MONOLIB_PUBLIC_LIBS} CACHE INTERNAL "" FORCE) # Add the component's include directories and definitions. target_include_directories(libWAVM PRIVATE ${COMPONENT_PRIVATE_INCLUDE_DIRECTORIES}) target_include_directories(libWAVM SYSTEM PRIVATE ${COMPONENT_PRIVATE_SYSTEM_INCLUDE_DIRECTORIES}) target_include_directories(libWAVM SYSTEM PUBLIC ${COMPONENT_PUBLIC_SYSTEM_INCLUDE_DIRECTORIES}) target_compile_definitions(libWAVM PRIVATE ${COMPONENT_PRIVATE_DEFINITIONS}) target_compile_definitions(libWAVM PUBLIC ${COMPONENT_PUBLIC_DEFINITIONS}) endfunction() function(WAVM_ADD_EXECUTABLE EXE_NAME) cmake_parse_arguments(EXE "" "FOLDER" "SOURCES;NONCOMPILED_SOURCES;PRIVATE_LIBS;PUBLIC_LIBS" ${ARGN}) add_executable(${EXE_NAME} ${EXE_SOURCES} ${EXE_NONCOMPILED_SOURCES}) WAVM_SET_TARGET_COMPILE_OPTIONS(${EXE_NAME}) # Mark the non-compiled sources as header-only, which includes the files in IDE projects, but # doesn't compile them. set_source_files_properties(${EXE_NONCOMPILED_SOURCES} PROPERTIES HEADER_FILE_ONLY TRUE) # Add the executable's link libraries. target_link_libraries(${EXE_NAME} PRIVATE ${EXE_PRIVATE_LIBS}) target_link_libraries(${EXE_NAME} PUBLIC ${EXE_PUBLIC_LIBS}) target_link_libraries(${EXE_NAME} PRIVATE libWAVM) if(EXE_FOLDER) set_target_properties(${EXE_NAME} PROPERTIES FOLDER ${EXE_FOLDER}) endif() endfunction() function(WAVM_ADD_THIRD_PARTY_LIBRARY LIB_NAME) cmake_parse_arguments(LIB "" "" "SOURCES;NONCOMPILED_SOURCES;PRIVATE_DEFINITIONS;PUBLIC_DEFINITIONS;PRIVATE_INCLUDE_DIRECTORIES;PUBLIC_INCLUDE_DIRECTORIES;PRIVATE_COMPILE_OPTIONS" ${ARGN}) # Create a static library. add_library(${LIB_NAME} STATIC ${LIB_SOURCES} ${LIB_NONCOMPILED_SOURCES}) # Target C++11. target_compile_features(${LIB_NAME} PRIVATE cxx_std_11) # Set the configured sanitizer and linker options. if(NOT ${LIB_NAME} STREQUAL "WAVMUnwind") # TODO: figure out why enabling the sanitizers on libunwind causes ASAN failures. WAVM_SET_TARGET_SANITIZER_OPTIONS(${LIB_NAME}) endif() WAVM_SET_TARGET_LINKER_OPTIONS(${LIB_NAME}) # Mark the non-compiled sources as header-only, which includes the files in IDE projects, but # doesn't compile them. set_source_files_properties(${LIB_NONCOMPILED_SOURCES} PROPERTIES HEADER_FILE_ONLY TRUE) # Add the library's definitions, include directories, and compile options. target_compile_definitions(${LIB_NAME} PRIVATE ${LIB_PRIVATE_DEFINITIONS}) target_compile_definitions(${LIB_NAME} PUBLIC ${LIB_PUBLIC_DEFINITIONS}) target_include_directories(${LIB_NAME} PRIVATE ${LIB_PRIVATE_INCLUDE_DIRECTORIES}) target_include_directories(${LIB_NAME} PUBLIC ${LIB_PUBLIC_INCLUDE_DIRECTORIES}) target_compile_options(${LIB_NAME} PRIVATE ${LIB_PRIVATE_COMPILE_OPTIONS}) # Suppress warnings in third-party code. if(MSVC) target_compile_options(${LIB_NAME} PRIVATE "/W0") elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(${LIB_NAME} PRIVATE "-w") endif() if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) if(NOT WAVM_ENABLE_STATIC_LINKING OR WAVM_ENABLE_STATIC_LIBRARY_PIC) # Ensure that even static libraries are relocatable so they can be linked into a .so target_compile_options(${LIB_NAME} PRIVATE "-fPIC") endif() endif() # When using static linking, third-party libraries need to be installed separately. # Otherwise, they are linked into the WAVM shared library. if(WAVM_ENABLE_STATIC_LINKING) WAVM_INSTALL_TARGET(${LIB_NAME}) endif() set_target_properties(${LIB_NAME} PROPERTIES FOLDER "Third party") endfunction() # Create a WAVM library that will include all WAVM library components. if(WAVM_ENABLE_STATIC_LINKING) add_library(libWAVM STATIC) else() add_library(libWAVM SHARED) endif() WAVM_SET_TARGET_COMPILE_OPTIONS(libWAVM) WAVM_INSTALL_TARGET(libWAVM) set_target_properties(libWAVM PROPERTIES FOLDER Libraries INSTALL_RPATH_USE_LINK_PATH TRUE SOVERSION ${WAVM_VERSION_MAJOR} VERSION ${WAVM_VERSION} PREFIX "" ) # Set up the WAVM_API definitions. if(NOT WAVM_ENABLE_STATIC_LINKING AND MSVC) target_compile_definitions(libWAVM PRIVATE "WAVM_API=__declspec\(dllexport\)") target_compile_definitions(libWAVM INTERFACE "WAVM_API=__declspec\(dllimport\)") elseif(CXX_HAS_FVISIBILITY_HIDDEN) # Use visibility("default") for WAVM_API symbols when -fvisibility=hidden is set. # This is needed for both shared libraries (to export symbols) and static libraries # with LTO (to prevent LTO from discarding symbols it considers internal). target_compile_definitions(libWAVM PUBLIC "WAVM_API=__attribute__((visibility(\"default\")))") else() target_compile_definitions(libWAVM PUBLIC "WAVM_API=") endif() # Set up platform definitions for conditional compilation of platform-specific source files. if(MSVC OR CMAKE_SYSTEM_NAME STREQUAL "Windows") target_compile_definitions(libWAVM PUBLIC WAVM_PLATFORM_WINDOWS=1 WAVM_PLATFORM_POSIX=0) else() target_compile_definitions(libWAVM PUBLIC WAVM_PLATFORM_WINDOWS=0 WAVM_PLATFORM_POSIX=1) endif() # Process the CMake scripts in subdirectories. add_subdirectory(Examples) add_subdirectory(Include/WAVM/Inline) add_subdirectory(Lib/IR) add_subdirectory(Lib/Logging) add_subdirectory(Lib/NFA) add_subdirectory(Lib/Platform) add_subdirectory(Lib/RegExp) add_subdirectory(Lib/VFS) add_subdirectory(Lib/WASM) add_subdirectory(Lib/WASTParse) add_subdirectory(Lib/WASTPrint) add_subdirectory(Programs/wavm) add_subdirectory(Test) add_subdirectory(ThirdParty/BLAKE2) add_subdirectory(ThirdParty/liblmdb) if(WAVM_ENABLE_RUNTIME) add_subdirectory(Include/WAVM/RuntimeABI) add_subdirectory(Lib/ObjectLinker) add_subdirectory(Lib/DWARF) add_subdirectory(Lib/ObjectCache) add_subdirectory(Lib/LLVMJIT) add_subdirectory(Lib/Runtime) add_subdirectory(Lib/ThreadTest) add_subdirectory(Lib/WASI) add_subdirectory(Lib/wavm-c) endif() if(WAVM_BUILD_WAVMUNWIND) add_subdirectory(ThirdParty/libunwind) endif() # Add the library dependencies accumulated from the various library components as link dependencies # of the monolithic WAVM library. # # WAVMUnwind (the bundled libunwind) must be linked with --whole-archive so that ALL _Unwind_* # symbols are included, not just the ones directly referenced by WAVM code. Without this, linkers # like GNU ld only pull in referenced symbols, leaving some _Unwind_* functions to be resolved from # libgcc_s instead. Mixing two unwinder implementations causes C++ exception handling to break. if(WAVM_BUILD_WAVMUNWIND) list(REMOVE_ITEM WAVM_MONOLIB_PRIVATE_LIBS WAVMUnwind) target_link_libraries(libWAVM PRIVATE -Wl,--whole-archive WAVMUnwind -Wl,--no-whole-archive) endif() target_link_libraries(libWAVM PRIVATE ${WAVM_MONOLIB_PRIVATE_LIBS}) target_link_libraries(libWAVM PUBLIC ${WAVM_MONOLIB_PUBLIC_LIBS}) # Set the non-compiled source files accumulated from the various library components as header-only, # which includes the files in IDE projects, but doesn't compile them. target_sources(libWAVM PRIVATE ${WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES}) set_source_files_properties(${WAVM_MONOLIB_NONCOMPILED_SOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) # When WAVM_COMPILE_HEADERS is enabled, mark header files to be compiled as C++. if(WAVM_COMPILE_HEADERS) set_source_files_properties(${WAVM_MONOLIB_HEADER_SOURCE_FILES} PROPERTIES LANGUAGE CXX) # LANGUAGE CXX (above) already handles MSVC (/TP). For non-MSVC clang, # -x c++ is needed because clang++ otherwise treats .h files as C headers. if(NOT MSVC) set(WAVM_HEADER_COMPILE_OPTIONS "-x;c++") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # Suppress warning about #pragma once in files compiled as main TUs. list(APPEND WAVM_HEADER_COMPILE_OPTIONS -Wno-pragma-once-outside-header) endif() set_source_files_properties(${WAVM_MONOLIB_HEADER_SOURCE_FILES} PROPERTIES COMPILE_OPTIONS "${WAVM_HEADER_COMPILE_OPTIONS}") endif() # Create a CMake package in /lib/cmake/WAVM containing the WAVM library targets. export( EXPORT WAVMInstallTargets FILE ${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/WAVM/WAVMConfig.cmake NAMESPACE WAVM::) # Create a CMake package in /lib/cmake/WAVM containing the WAVM library targets. install( EXPORT WAVMInstallTargets COMPONENT devel FILE WAVMConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/WAVM NAMESPACE WAVM::) # Create a dummy target to hold various files in the project root add_custom_target(RootFiles SOURCES .clang-format LICENSE.txt README.md VERSION vs-chromium-project.txt WebAssembly.tmLanguage) ================================================ FILE: Doc/BuildSystem.md ================================================ # Build System & CI WAVM uses `Build/dev.py` to manage multi-configuration builds, testing, formatting, packaging, and coverage. The same script drives both local development and GitHub Actions CI. ## Quick Reference ```bash # Build and test all configurations python3 Build/dev.py test [--work-dir DIR] # Build and test a single configuration python3 Build/dev.py test --config Debug # List available configurations for your platform python3 Build/dev.py list-configs # Check C/C++ source formatting (clang-format) python3 Build/dev.py format # Auto-fix C/C++ source formatting python3 Build/dev.py format --fix # Run Python linters (ruff + ty) python3 Build/dev.py lint # Run clang-tidy python3 Build/dev.py tidy # Auto-fix clang-tidy issues python3 Build/dev.py tidy --fix # Build packages for a configuration python3 Build/dev.py package --config LTO output_dir # Test a pre-built installation python3 Build/dev.py test-install --config LTO install_dir # Build and run a program (default config: LTO) python3 Build/dev.py run [--config Debug] -- wavm test script Test/wavm/simd.wast # Generate/update VS Code workspace with clangd config python3 Build/dev.py setup-workspace path/to/wavm.code-workspace # Merge coverage files from multiple runs python3 Build/dev.py merge-coverage --output-dir DIR file1.lcov file2.lcov ... ``` ### Global Options | Option | Description | |--------|-------------| | `--work-dir DIR` | Working directory for builds, LLVM, etc. Default: `$WAVM_BUILD_TOOL_WORK_DIR` or `.working/` | | `--verbose` / `-v` | Print task start/completion details | | `--llvm-source` | Build LLVM from source instead of downloading pre-built binaries | | `--offline` | Skip all network operations; use previously downloaded/cloned data | ## Configurations Each configuration is named `{template}[-{compiler}[-{linker}]]` (e.g., `Debug`, `RelWithDebInfo-clang-link`). ### Configuration Templates | Template | Build Type | Description | Restrictions | |----------|-----------|-------------|--------------| | **RelWithDebInfo** | RelWithDebInfo | Release with debug info | Expanded across all available linkers | | **Debug** | Debug | Full debug build | | | **Checked** | RelWithDebInfo | Release with asserts, fuzz targets, coverage (clang) | | | **Static** | Release | Statically linked | | | **LTO** | Release | Thin LTO (clang) or full LTO (MSVC) | Clang or MSVC only | | **StaticLTO** | Release | Static + Thin LTO | Clang, POSIX only | | **UBASAN** | RelWithDebInfo | Address + undefined behavior sanitizers | Clang, Linux only | | **TSAN** | Release | Thread sanitizer | Clang, POSIX only | | **NoRuntime** | RelWithDebInfo | Parse/validate only, no LLVM needed | | ### Detected Compilers and Linkers Compilers and linkers are auto-detected: - **Compilers:** `clang` (always), `gcc` (Linux), `msvc` (Windows) - **Linkers:** `default` (always), `lld` (if available), `gold` (Linux, if available) RelWithDebInfo is expanded across all compiler+linker combinations to test linker compatibility. Other configurations use the preferred linker (lld if available, otherwise default). ## Working Directory Structure ``` work-dir/ ├── build/ │ ├── Debug/ # Build directory per configuration │ │ ├── bin/wavm # Built binaries │ │ ├── .cmake_config_args # Cached CMake args (for incremental builds) │ │ └── .build_stamp # Config hash + LLVM commit │ ├── Checked/ │ └── ... ├── wavm-install/ │ ├── Debug/ # Install directory per configuration │ └── ... ├── llvm/ │ └── llvm-install/ # Downloaded or built LLVM installations │ ├── {platform}-LTO/ │ ├── {platform}-Debug/ │ └── ... ├── wavm-fuzz-corpora/ # Cloned fuzz corpora (if fuzz tests run) ├── wasi-sdk-29/ # Downloaded WASI SDK ├── wasi-wasm/ # Compiled WASI test modules ├── coverage/ # Coverage profraw files ├── coverage-report/ # HTML coverage report ├── coverage.lcov # LCOV format coverage └── test_history.json # Test result history for prioritization ``` ### Incremental Builds The build system detects when CMake reconfiguration is needed by comparing the current CMake arguments and LLVM commit hash against stored values in `.cmake_config_args` and `.build_stamp`. If nothing has changed and `CMakeCache.txt` exists, the `cmake --fresh` step is skipped. After the initial `dev.py` run, you can rebuild a single configuration directly: ```bash ninja -C ~/.working/wavm/build/Debug ``` ## LLVM WAVM requires LLVM 21 (from the [WAVM-LLVM](https://github.com/WAVM/WAVM-LLVM) fork with WAVM-specific patches). By default, `dev.py` downloads pre-built LLVM binaries from WAVM-LLVM GitHub releases. Use `--llvm-source` to build LLVM from source instead. Each WAVM configuration uses a specific LLVM configuration: | WAVM Config | LLVM Config | |-------------|-------------| | Debug | Debug | | RelWithDebInfo, Static, TSAN | RelWithDebInfo | | LTO, StaticLTO | LTO | | Checked | Checked | | UBASAN | Sanitized | | NoRuntime | (none) | ## Testing ### Test Suites Tests are automatically filtered based on configuration capabilities (runtime enabled, static/shared linking, sanitizer status). **Unit tests:** HashMap, HashSet, I128, LEB128, C-API, API, version output validation **WAST script tests:** Discovered from `Test/wavm/`, `Test/WebAssembly/spec/`, `Test/WebAssembly/memory64/`, `Test/WebAssembly/threads/`, `Test/WebAssembly/multi-memory/` **Run tests:** Example programs (blake2b, trap, zlib) **Embedder tests:** C and C++ embedding examples (requires shared build, non-sanitized) **WASI tests:** 45+ tests covering file I/O, filesystem operations, POSIX interfaces, and out-of-bounds pointer handling. Compiled from C++ source using WASI SDK 29. **Fuzz tests:** Corpus-based fuzzing for assemble, disassemble, compile-model, and instantiate (requires Checked or LTO config) **GDB tests:** Verifies GDB can read JIT-compiled function names (Linux only) ### Test Prioritization Test history is stored in `test_history.json`. Tests are prioritized: 1. Previously failed tests run first 2. Tests with no history run second 3. Previously passed tests run last Within the same priority level, slower tests run first to maximize parallelism. ### Parallel Execution Tests run in parallel using a thread pool with `cpu_count()` workers. Build tasks (`BUILD` type) are serialized; test tasks (`GENERAL` type) run concurrently. ## Formatting Format checking uses `clang-format` from the LLVM LTO toolchain. It discovers all `.h`, `.cpp`, and `.c` files, excluding `.git/`, `.working/`, `ThirdParty/`, and `Include/WAVM/Inline/xxhash/`. In check mode, differences are shown as colorized unified diffs. In fix mode (`--fix`), files are modified in-place. ## Coverage Coverage is collected on the Checked configuration using Clang's source-based code coverage (`-DWAVM_ENABLE_COVERAGE=ON`). During test execution, `LLVM_PROFILE_FILE` is set per test step to generate `.profraw` files. After testing: 1. `llvm-profdata merge` combines profraw files 2. `llvm-cov show` generates HTML and annotated-source reports 3. `llvm-cov export` generates an LCOV file The `merge-coverage` command can combine LCOV files from multiple platforms, summing hit counts for shared lines. ## Packaging `dev.py package` uses CMake/CPack to create platform-specific packages: | Platform | Formats | |----------|---------| | Linux | .tar.gz, .deb, .rpm | | Windows | .zip, .exe (NSIS installer) | | macOS | .tar.gz | Release packages use the LTO configuration for optimized binary size and performance. ## GitHub Actions CI The CI workflow (`.github/workflows/build.yml`) is triggered by pushes to `master`, pull requests against `master`, version tags (`v*`), nightly schedule (6 AM UTC), and manual dispatch. ### Job Phases ``` Phase 1: Detect configurations (parallel, per platform) get-linux-configs, get-windows-configs, get-macos-configs → Runs: dev.py list-configs Phase 2: Format + Lint + Tidy (parallel with Phase 1) lint → Runs: dev.py format → Runs: dev.py lint → Runs: dev.py tidy Phase 3: Build, test, and package (parallel, per config) linux-build-test-package, windows-build-test-package, macos-build-test-package → Runs: dev.py test --config → Runs: dev.py package --config (for packageable configs) Phase 4: Package testing (parallel, per package format) linux-test-distros (11 distributions), linux-test-deb, linux-test-rpm, windows-test-exe, windows-test-zip, macos-test-tgz → Runs: dev.py test-install --config Phase 5: Coverage merge (runs even on failure) → Runs: dev.py merge-coverage Phase 6: Release publishing (version tags only) → Renames packages with version, uploads to GitHub release ``` ### Containers | Container | Used By | Purpose | |-----------|---------|---------| | `ghcr.io/wavm/builder-linux-x64:latest` | Linux config detection, format check, Linux builds | Build toolchain | | `ghcr.io/wavm/tester:` | Distro testing, deb/rpm testing | Clean OS environment | ### Linux Distribution Testing LTO packages are tested on 11 distributions to verify portability: - **Debian-based:** Ubuntu 20.04, 22.04, 24.04; Debian 11, 12 - **RPM-based:** Fedora 40, 41; AlmaLinux 8, 9; openSUSE Leap 15.6 - **Other:** Arch Tarballs are tested on all 11. `.deb` packages are tested on the 5 Debian-based distros. `.rpm` packages are tested on the 5 RPM-based distros. ### Artifact Retention - Build artifacts and packages: 1 day (deleted after package testing completes) - Coverage data: 7 days ## Build System Source The build system is implemented in Python in `Build/`: | File | Purpose | |------|---------| | `dev.py` | Entry point, argument parsing, command dispatch | | `lib/build.py` | Configuration templates, CMake invocation, compiler/linker detection | | `lib/test.py` | Test definitions, test step execution, result tracking | | `lib/check.py` | Source file discovery, clang-format, Python linting | | `lib/tidy.py` | Clang-tidy | | `lib/coverage.py` | Coverage merging and report generation | | `lib/llvm.py` | LLVM download/build management | | `lib/wasi.py` | WASI SDK download, test module compilation | | `lib/task_graph.py` | Parallel task execution with dependency tracking | | `lib/platform.py` | Platform detection, CPack configuration | | `lib/output.py` | Console output formatting and status display | | `lib/toolchain.py` | Toolchain detection, configuration, and CMake argument generation | | `lib/test_def.py` | Test definition types (TestContext, TestResult, TestStep, TestDef) | | `lib/workspace.py` | VS Code workspace file generation for clangd integration | ================================================ FILE: Doc/Building.md ================================================ # Building WAVM from source ## Quick Start (Recommended) The easiest way to build and test WAVM is using the `dev.py` script, which automatically downloads a compatible LLVM toolchain and builds WAVM: ```bash # List available configurations for your platform python3 Build/dev.py list-configs # Build and test a specific configuration python3 Build/dev.py test --config RelWithDebInfo-clang # Build and test all configurations (takes a long time) python3 Build/dev.py test # Build and create packages (.tar.gz, .deb, .rpm on Linux) python3 Build/dev.py package --config LTO-clang /path/to/output ``` The script stores downloaded LLVM toolchains and build artifacts in `.working/` by default. You can override this with `--work-dir` or the `WAVM_BUILD_TOOL_WORK_DIR` environment variable. ### Other commands ```bash # Check C/C++ source formatting (clang-format) python3 Build/dev.py format # Auto-fix C/C++ formatting python3 Build/dev.py format --fix # Run Python linters (ruff + ty) python3 Build/dev.py lint # Run clang-tidy python3 Build/dev.py tidy # Auto-fix clang-tidy issues python3 Build/dev.py tidy --fix ``` ## Manual Build If you prefer to configure the build manually, you'll need CMake and LLVM. ### Prerequisites * **CMake 3.16 or higher** - On Linux, it is probably available via your package manager. For example, you can install it on Ubuntu with `sudo apt install cmake`. Otherwise, you can download it from the [CMake website](https://cmake.org/download/). * **Ninja** (recommended) - Available via package managers or from the [Ninja website](https://ninja-build.org/). * **LLVM 20.0+** - LLVM 20 is the minimum supported version, but we recommend using [WAVM-LLVM](https://github.com/WAVM/WAVM-LLVM) (LLVM 21.x with WAVM-specific patches). This is especially important on macOS, where upstream LLVM builds may have compatibility issues. * **Recommended**: Download pre-built WAVM-LLVM from the [WAVM-LLVM releases](https://github.com/WAVM/WAVM-LLVM/releases). * On Ubuntu/Debian, upstream LLVM builds are available from the LLVM [apt repo](https://apt.llvm.org/). * On other systems, you can download upstream LLVM from the [LLVM download page](https://llvm.org/releases/download.html). * To build LLVM from source, see [Getting Started with the LLVM System](http://llvm.org/docs/GettingStarted.html) and [Building LLVM with CMake](http://llvm.org/docs/CMake.html). #### Windows You can use Visual Studio 2022+ to compile WAVM. If you don't have Visual Studio, you can use the freely available Visual Studio C++ Build Tools or Visual Studio Community, both available from the Visual Studio [download page](https://visualstudio.microsoft.com/downloads/). Visual Studio 2019 may also work, but has not been recently tested. #### Linux You'll need a C/C++ compiler. `gcc` and `clang` are known to compile WAVM correctly. #### macOS You'll need to install Xcode from the App Store. ### Configure and build ```bash # Create a build directory mkdir build && cd build # Configure with CMake (using Ninja) cmake -G Ninja -DLLVM_DIR=/lib/cmake/llvm # Build ninja # Run tests ./bin/wavm test script ../Test/wavm/simd.wast ``` If CMake can't find your LLVM directory, set the `LLVM_DIR` CMake variable to point to your LLVM installation's `lib/cmake/llvm` directory. ### CMake options | Option | Description | |--------|-------------| | `-DWAVM_ENABLE_STATIC_LINKING=ON` | Static linking | | `-DWAVM_ENABLE_LTO=ON` or `THIN` | Link-time optimization | | `-DWAVM_ENABLE_RELEASE_ASSERTS=ON` | Assertions in release builds | | `-DWAVM_ENABLE_RUNTIME=OFF` | Disable runtime (parse/validate only) | ## Continue to: [Exploring the WAVM source](CodeOrganization.md) ================================================ FILE: Doc/CodeOrganization.md ================================================ # Exploring the WAVM source ## Directory Structure - **Lib/** - Core library implementations (compiled into libWAVM) - **Include/WAVM/** - Public header files organized by component - **Programs/wavm/** - Implementation of the wavm program - **Test/** - Test suites and benchmarks - **Examples/** - Example WebAssembly modules and embedder code - **Build/** - Build system and scripts - **Doc/** - Documentation - **ThirdParty/** - External dependencies ## Core Library Components (Lib/) Each component has a corresponding header directory in `Include/WAVM/`. | Component | Purpose | |-----------|---------| | **IR** | WebAssembly module structure, type system, and validation | | **LLVMJIT** | Compiles WebAssembly IR to native machine code using LLVM | | **Runtime** | Execution engine, memory management, module instantiation | | **WASM** | Binary WebAssembly format (.wasm) parsing and serialization | | **WASTParse** | Text format (.wast/.wat) parsing | | **WASTPrint** | IR to text format conversion (disassembly) | | **Platform** | OS-specific implementations (POSIX/, Windows/) | | **WASI** | WebAssembly System Interface implementation | | **VFS** | Virtual filesystem abstraction for WASI | | **ObjectCache** | JIT code caching using LMDB | | **Logging** | Logging infrastructure | | **NFA/RegExp** | Lexer support for WASTParse | | **wavm-c** | Standard WebAssembly C API bindings | ## "Inline" Header-Only Library Component (Include/WAVM/Inline/) Header-only library component including hash containers (`HashMap.h`, `HashSet.h`), assertions, error handling, serialization, and 128-bit integer support. ## Test Organization (Test/) | Directory | Contents | |-----------|----------| | **wavm/** | WAVM-specific feature tests | | **WebAssembly/spec/** | Official spec compliance tests | | **WebAssembly/memory64/** | Memory64 proposal tests | | **WebAssembly/threads/** | Threading/atomics tests | | **WebAssembly/multi-memory/** | Multi-memory proposal tests | | **wasi/** | WASI interface tests | | **fuzz/** | Fuzzing targets | | **benchmark/** | Performance benchmarks | ## Key API References - **Runtime API:** `Include/WAVM/Runtime/Runtime.h` - **IR Module:** `Include/WAVM/IR/Module.h` - **IR Types:** `Include/WAVM/IR/Types.h` - **IR Operators:** `Include/WAVM/IR/Operators.h` - **WASI:** `Include/WAVM/WASI/WASI.h` - **C API:** `Include/WAVM/wavm-c/wavm-c.h` ## Key Implementation References - **Translation to LLVM IR:** `Lib/LLVMJIT/Emit*.cpp` - **Module instantiation:** `Lib/Runtime/Instance.cpp` - **WASM parsing:** `Lib/WASM/WASMSerialization.cpp` - **WAST parsing:** `Lib/WASTParse/Parse*.cpp` - **IR validation:** `Lib/IR/Validate.cpp` - **WASI implementation:** `Lib/WASI/WASI*.cpp` ================================================ FILE: Doc/GettingStarted.md ================================================ # Getting Started ## Install a binary build Binary builds of WAVM are available on [GitHub releases](https://github.com/WAVM/WAVM/releases) for Windows, Linux, and macOS. ### Windows Download `wavm-windows-x64.zip` and extract it anywhere in your filesystem. Add the `bin` directory to your `PATH` environment variable to use `wavm` from any directory. ### Linux Linux builds are available as `.deb` packages, `.rpm` packages, or `.tar.gz` archives. **Debian/Ubuntu (deb):** ```bash sudo apt install ./wavm-{version}-linux.deb # To remove: sudo apt remove wavm ``` **Fedora/RHEL/AlmaLinux (rpm):** ```bash sudo dnf install ./wavm-{version}-linux.rpm # To remove: sudo dnf remove wavm ``` **Other distributions (tar.gz):** ```bash mkdir wavm && tar -xzf wavm-{version}-linux.tar.gz -C wavm ``` The Linux binaries are built on a manylinux_2_28 (AlmaLinux 8) base and should work on most modern glibc-based Linux distributions, including: * Ubuntu 20.04+ * Debian 11+ * Fedora 40+ * AlmaLinux/Rocky Linux 8+ * openSUSE Leap 15.6+ ### macOS Download `wavm-macos-arm64.tar.gz` and extract it: ```bash mkdir wavm && tar -xzf wavm-macos-arm64.tar.gz -C wavm ``` Note: macOS builds are currently ARM64 (Apple Silicon) only. ## Build from source Alternatively, you can build WAVM from source. See [Building WAVM from source](Building.md) for instructions. ## WAVM on the command line The `wavm` executable provides command-line access to WAVM. It has several sub-commands: * `wavm help` displays the available sub-commands, or detailed information about a specific sub-command. * `wavm run` loads a WebAssembly file (text or binary) and calls `main` (or a specified function). * `wavm assemble` loads a WebAssembly text file (WAST/WAT), and saves it as a WebAssembly binary file (WASM). * `wavm disassemble` loads a WebAssembly binary file, translates it to the WebAssembly text format, and either prints that text to the console or saves it to a file. * `wavm compile` loads a WebAssembly file, and compiles it to one of several formats: unoptimized or optimized LLVM IR, a native object file, or a WebAssembly file with object code embedded in a a custom section (`wavm.precompiled_object`). ### Run some example programs WAVM builds include some simple WebAssembly programs to try. In Windows builds, they will be in `examples`. In Linux and macOS builds, they will be in `share/wavm/examples`. Try running these example programs: ```bash wavm run examples/helloworld.wast wavm run examples/zlib.wasm wavm run examples/trap.wast wavm run examples/echo.wast "Hello, world!" wavm run examples/helloworld.wast | wavm run examples/tee.wast wavm run examples/blake2b.wast ``` ## Disassemble a WebAssembly module ```bash wavm disassemble examples/zlib.wasm zlib.wast ``` ## Set up an object cache WAVM supports caching compiled object code for WebAssembly modules. The cache is configured by setting a `WAVM_OBJECT_CACHE_DIR` environment variable to point to a directory to store the cache in. ```bash export WAVM_OBJECT_CACHE_DIR=/path/to/existing/directory wavm run huge.wasm # Slow wavm run huge.wasm # Fast ``` The first time `wavm` loads `huge.wasm`, it must spend some time to compile it to object code. The second time `wavm` loads `huge.wasm`, it just needs to load its object code from the cache. For small modules, that may not save much time, but for large WebAssembly modules, that can be much faster than compiling the module from scratch. ## Continue to: [Building WAVM from source](Building.md) ================================================ FILE: Doc/PortabilityMatrix.md ================================================ # Portability Matrix | Key | | |-------------|---------------------------------------------------| |:100: |Supported, tested in CI | |:+1: |Supported, manually tested | |:question: |Possibly works, but not tested | | |Windows |Linux |MacOS | |---------|----------------|----------------|----------| | x86-64 |:100: |:100: |:100: | | AArch64 |:100: |:100: |:100: | ================================================ FILE: Doc/SignalsAndExceptions.md ================================================ # Hardware trap handling WAVM uses hardware trap handling to implement WebAssembly's semantics efficiently. The primary use is for bounds checking of the address operands of WebAssembly's memory instructions. WAVM reserves enough virtual address space that any virtual address accessed by a WebAssembly memory instruction will be within the reserved address space. This allows the WebAssembly memory instructions to be translated directly to hardware memory accesses without explicitly checking that the effective address is within the bounds of the WebAssembly memory. Because WebAssembly's effective addresses are generated from a 32-bit address and a 32-bit offset, this means WAVM must reserve a little more than 8GB of virtual address space for each WebAssembly linear memory object. The portion of that reserved address space that corresponds to effective addresses outside the bounds of the WebAssembly memory will be mapped as protected, so any access to it will trigger a hardware trap. WAVM also uses hardware trap handling to handle stack overflow, as well as some boundary conditions for floating-point conversion operations. # Portability WAVM supports POSIX-compliant systems and Windows as host OSes, which provide different mechanisms for how a user-mode program may handle hardware traps. ## POSIX On POSIX-compliant systems, a process may register a function as a handler for various signals, some of which correspond to different kinds of hardware traps. When a hardware trap occurs, the kernel mode interrupt handler executes. It sets up a signal handler frame on top of the user-mode stack: this includes the program execution state at the point where it was interrupted. It also pushes a phony return address that points to the "signal trampoline" function, and resumes the user mode process at the start of the signal handler function. When the signal handler function returns, it returns to the signal trampoline function. The signal handler function reads the registers and other state saved before calling the signal handler from the signal frame, and restores it, returning to the code that was executing before the signal handler was called. ## Windows Windows uses Structured Exception Handling (SEH) to handle a hardware trap. SEH is similar in concept to C++ exception handling, but provides lower-level functionality that can be used to implement both C++ exception handling and hardware trap handling. SEH is supported through some C++ extensions: `__try` and `__except` equivalents to the C++ `try` and `catch`. However, unlike the C++ `catch`, which declares an C++ exception type to catch, the SEH `__except` lets you write "filter" code to determine whether to execute the handler: ``` LONG filter(EXCEPTION_POINTERS*); __try { } __except(filter(GetExceptionInformation())) { // This handler will execute if filter(GetExceptionInformation()) returns 1. } ``` You can simply write a boolean expression in place of calling a filter function, but the SEH filter function is a useful idiom for clarity and debugging. Windows SEH also provides a `__finally` clause that can be used to declare a handler that unconditionally executes when unwinding the stack. When a trap occurs, Windows dispatches it to a function that is called on top of the user-mode stack, similar how a POSIX system would call a signal handler. That function walks the stack from top to bottom, and for each function that has a SEH `__except`, it evaluates the corresponding filter code. The filter code looks at the properties of the exception, and returns a code that indicates whether to continue searching for a handler, to execute the handler corresponding to this filter function, or to continue executing the code that caused the exception. If it returns the code that indicates to execute the handler, then the dispatcher will unwind the stack to the function containing the handler, and "return" to the handler. To unwind the stack, it executes all the `__finally` handlers that occur above the target handler on the stack, as well as destructors for C++ locals (which the compiler turns into a different kind of SEH handler). ## Stack overflow Another difference between Windows SEH and POSIX signals is relevant to WAVM: how stack overflow is handled. Both signals and SEH require space on the user-mode stack, so some special support for handling stack overflow is necessary. On Windows, WAVM uses a function called `SetThreadStackGuarantee` to reserve some extra space on top of the stack for dispatching SEH. The function simply protects some space at the top of the stack, allowing a stack overflow exception to be triggered before the stack is completely exhaused. If such a "soft" stack overflow occurs, the protected space is made unprotected, and the exception is dispatched using the newly expanded stack space. After handling the stack overflow exception, `_resetstkoflw` is called to reprotect that space. On POSIX, a function called `sigaltstack` is used to designate an alternative stack to use when executing a signal handler. Signal handlers that are registered with the `SA_ONSTACK` flag will be called on this alternative stack, so when the main stack overflows, the handler will still work. When the handler returns, the signal trampoline switches back to the main stack before resuming execution of the code that was interrupted by the signal handler. ## C++ exceptions Unlike POSIX signals and Windows SEH, C++ exceptions are completely portable, but provide different functionality. They can only be thrown by explicit `throw` statements, and there isn't an opportunity to handle the exception without unwinding the stack, as there is with signal handlers and SEH filters. They cannot be used to handle hardware traps without a Windows-specific C++ extension, but it is useful to understand how they interact with destructors and SEH/signals. Linux and MacOS use a two-phase dispatch to implement C++ exceptions that is similar to SEH unwinding: a "personality function" is called for each function on the stack, from top to bottom, until the personality function returns a value that indicates the function handles the exception. This first phase is similar to the phase where SEH evaluates filters to find a handler. In the second phase, the personality functions are then called again for each function on the stack, from the top down to the function that will handle the exception, but with different parameters that indicate the personality function should unwind the function's stack frame (i.e. call destructors for local variables). On Windows, C++ exceptions are dispatched as a specific kind of SEH exception. `catch` statements translate to a handler with a filter that rejects any non-C++ SEH exceptions, and any C++ SEH exceptions that have a different C++ type from the exception type declared by the `catch`. C++ exception handling has an effect on the generated code for functions even when they don't seem to `throw` or `catch` an exception. Since C++ classes may have destructors, a local variable that has a destructor will implicitly require a limited form of exception handling to call the variable's destructor if any function that may throw an exception is called while the variable is alive. On Windows, local destructors are called when unwinding C++ exceptions, but not other kinds of SEH exceptions. ## SEH vs signals vs C++ exceptions SEH lets you write code to act on an exception in two phases: the filter function, before the stack has been unwound, and the handler, after the stack has been unwound. Raising a non-C++ SEH exception doesn't call C++ destructors for local variables between the top of the stack and the handler function. C++ exceptions let you write code to act on an exception in the equivalent of the SEH second phase, after the stack above the handler has been unwound. And because signal handling does not include any stack unwinding functionality, it only allows you to write code that executes on the top of the stack, equivalent to the first phase of SEH. # Runtime exceptions WebAssembly is specified to trap in various scenarios: e.g. accessing memory with an out-of-bounds address, or performing an invalid numeric conversion. Trapping is [specified](https://webassembly.github.io/spec/core/exec/runtime.html#syntax-trap) to abort execution of the WebAssembly program, with the details of how it may be handled left up to the WebAssembly embedder. WAVM exposes these WebAssembly-specified traps as C++ exceptions of the `Runtime::Exception` type. If you call `Runtime::invokeFunction`, and a trap occurs in the invoked function, it will throw a `Runtime::Exception` that you can catch. # Accessing WebAssembly memory from C/C++ code Accessing WebAssembly memory from C/C++ code is nearly as simple as any other memory access, but with some caveats for out-of-bounds accesses. It isn't practical to do explicit bounds checking of those accesses, since the memory size or page protections may be changed by another thread in between the bounds check and the memory access. To avoid a race condition, you should only check that the address is within the reserved virtual address space for the WebAssembly memory, and let the access trap to detect when the address was out-of-bounds. ================================================ FILE: Doc/WAVMObjectReachability.dot ================================================ digraph { rankdir=LR; labelloc="t"; label="Reachability Graph Schema"; fontsize=30; subgraph clusterLegend { label=""; style=solid; PerCompartmentObject [shape=record, label="Per-compartment object"]; CrossCompartmentObject [shape=record, style=filled, label="Cross-compartment object"]; PerCompartmentObject->CrossCompartmentObject [style=invisible, dir=none]; anyrefSinkLegend [shape=record, style="rounded, dashed", label=<anyref>]; ReferenceableObject [shape=record, style=rounded, label="Any referenceable object"]; anyrefSinkLegend:e -> ReferenceableObject:w [color="black:invis:black", dir=none]; } anyrefSink1 [shape=record, style="rounded, dashed", label=<anyref>]; anyrefSink2 [shape=record, style="rounded, dashed", label=<anyref>]; anyrefSink3 [shape=record, style="rounded, dashed", label=<anyref>]; anyrefSink4 [shape=record, style="rounded, dashed", label=<anyref>]; anyrefSink5 [shape=record, style="rounded, dashed", label=<anyref>]; anyrefSink6 [shape=record, style="rounded, dashed", label=<anyref>]; Exception [shape=record, style=rounded, label="{Runtime::Exception}|arguments|type"]; Compartment [shape=record, style=rounded, label="{Runtime::Compartment}| idToModuleInstanceMap|mutableGlobalInitialValues}"]; ModuleInstance [shape=record, style=rounded, label="{Runtime::ModuleInstance}|...| jitModule"]; Context [shape=record, style=rounded, label="{Runtime::Context}| compartment| mutableGlobalValues| stack"]; Memory [shape=record, style=rounded, label="{Runtime::Memory}"]; Global [shape=record, style=rounded, label="{Runtime::Global}| immutableValue"]; Table [shape=record, style=rounded, label="{Runtime::Table}| elements"]; ExceptionType [shape=record, style=rounded, label="{Runtime::ExceptionType}"]; Function [shape=record, style="filled, rounded", label="{Runtime::Function}| mutableData| moduleInstanceId|code"]; moduleInstanceIdSink [shape=plaintext, label=<moduleInstanceId>]; moduleInstanceIdSource [shape=plaintext, label=<moduleInstanceId>]; LLVMJITModule [shape=record, style=filled, label="{LLVMJIT::Module}|functions"]; FunctionMutableData [shape=record, style=filled, label="{Runtime::FunctionMutableData}"]; Context:compartment:e -> Compartment:ref:w; Context:mutableGlobalValues:e -> anyrefSink1:w; Context:stack:e -> Function:code:w; Context:stack:e -> anyrefSink5:w; Compartment:mutableGlobalInitialValues:e -> anyrefSink6:w ModuleInstance:environment:e -> Function:ref:w; ModuleInstance:environment:e -> Global:ref:w; ModuleInstance:environment:e -> Memory:ref:w; ModuleInstance:environment:e -> Table:ref:w; ModuleInstance:environment:e -> ExceptionType:ref:w; ModuleInstance:jitModule:e -> LLVMJITModule:ref:w; Global:immutableValue:e -> anyrefSink2:w; Table:elements:e -> anyrefSink3:w; Function:moduleInstanceId:e -> moduleInstanceIdSink:w; moduleInstanceIdSource:e:e -> Compartment:idToModuleInstanceMap:w; Compartment:idToModuleInstanceMap:e -> ModuleInstance:ref:w; LLVMJITModule:functions:e -> Function:ref:w; Function:mutableData:e -> FunctionMutableData:ref:w; Exception:type:e -> ExceptionType:ref:w; Exception:arguments:e -> anyrefSink4:w; } ================================================ FILE: Dockerfile ================================================ FROM ubuntu:18.04 RUN apt-get update RUN apt-get install -y software-properties-common # System deps RUN apt-get update RUN apt-get install -y \ autoconf \ automake \ build-essential \ cmake \ libtool \ llvm-6.0 \ make \ ninja-build \ sudo \ unzip \ zlib1g-dev RUN apt-get clean autoclean RUN apt-get autoremove -y # Copy this code into place COPY . /code # Create a build directory WORKDIR /build RUN cmake -G Ninja /code -DCMAKE_BUILD_TYPE=RelWithDebInfo RUN ninja CMD /bin/bash ================================================ FILE: Examples/CMakeLists.txt ================================================ set(Sources echo.wast helloworld.wast tee.wast trap.wast) add_custom_target(Examples SOURCES ${Sources}) set_target_properties(Examples PROPERTIES FOLDER Examples) ================================================ FILE: Examples/echo.wast ================================================ ;; Classic Unix echo program in WebAssembly WASM AST (module (import "wasi_unstable" "args_get" (func $wasi_args_get (param i32 i32) (result i32))) (import "wasi_unstable" "args_sizes_get" (func $wasi_args_sizes_get (param i32 i32) (result i32))) (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 1) (global $spaceAddress i32 (i32.const 0)) (data (i32.const 0) " ") (global $newlineAddress i32 (i32.const 1)) (data (i32.const 1) "\n") (global $argcAddress i32 (i32.const 4)) (global $argBufferNumBytesAddress i32 (i32.const 8)) (global $numBytesWrittenAddress i32 (i32.const 12)) (global $dynamicTopAddress (mut i32) (i32.const 128)) (func $sbrk (param $numBytes i32) (result i32) (local $resultAddress i32) (local.set $numBytes (i32.and (i32.add (local.get $numBytes) (i32.const 15)) (i32.const -16))) (local.set $resultAddress (global.get $dynamicTopAddress)) (global.set $dynamicTopAddress (i32.add (local.get $resultAddress) (local.get $numBytes))) (local.get $resultAddress) ) (func $strlen (param $s i32) (result i32) (local $head i32) (local.set $head (local.get $s)) (loop $loop (block $done (br_if $done (i32.eq (i32.const 0) (i32.load8_u offset=0 (local.get $head)))) (local.set $head (i32.add (local.get $head) (i32.const 1))) (br $loop) ) ) (return (i32.sub (local.get $head) (local.get $s))) ) (func $main (export "_start") (local $result i32) (local $argc i32) (local $argBufferNumBytes i32) (local $argvAddress i32) (local $argBufferAddress i32) (local $iovAddress i32) (local $numIOVs i32) (local $argIndex i32) (local $iobufAddress i32) (local $argAddress i32) (local $argNumBytes i32) (block $exit ;; Query the number of arguments, and the total number of characters needed to store the arg strings. (local.set $result (call $wasi_args_sizes_get (global.get $argcAddress) (global.get $argBufferNumBytesAddress))) (br_if $exit (i32.ne (local.get $result) (i32.const 0))) (local.set $argc (i32.load (global.get $argcAddress))) (local.set $argBufferNumBytes (i32.load (global.get $argBufferNumBytesAddress))) ;; Allocate buffers for argv and the arg strings. (local.set $argvAddress (call $sbrk (i32.mul (local.get $argc) (i32.const 4)))) (local.set $argBufferAddress (call $sbrk (local.get $argBufferNumBytes))) ;; Read the arguments into the buffers. (local.set $result (call $wasi_args_get (local.get $argvAddress) (local.get $argBufferAddress))) (br_if $exit (i32.ne (local.get $result) (i32.const 0))) ;; Allocate an iovec with 2*(argc-1) buffers. (local.set $numIOVs (i32.mul (i32.sub (local.get $argc) (i32.const 1)) (i32.const 2))) (local.set $iovAddress (call $sbrk (i32.mul (local.get $numIOVs) (i32.const 8)))) (local.set $iobufAddress (local.get $iovAddress)) (local.set $argIndex (i32.const 1)) (block $done (loop $loop (br_if $done (i32.eq (local.get $argIndex) (local.get $argc))) ;; Read the argument string address from argv, and calculate its length. (local.set $argAddress (i32.load (i32.add (local.get $argvAddress) (i32.mul (local.get $argIndex) (i32.const 4))))) (local.set $argNumBytes (call $strlen (local.get $argAddress))) ;; Add two buffers to the iovec: one that points to the argument string, and one that ;; points to either space or newline (after the last argument). (i32.store offset=0 (local.get $iobufAddress) (local.get $argAddress)) (i32.store offset=4 (local.get $iobufAddress) (local.get $argNumBytes)) (i32.store offset=8 (local.get $iobufAddress) (select (global.get $newlineAddress) (global.get $spaceAddress) (i32.eq (local.get $argc) (i32.add (local.get $argIndex) (i32.const 1))) )) (i32.store offset=12 (local.get $iobufAddress) (i32.const 1)) ;; Advance to the next argument. (local.set $argIndex (i32.add (local.get $argIndex) (i32.const 1))) (local.set $iobufAddress (i32.add (local.get $iobufAddress) (i32.const 16))) ;; 2 iobufs/arg (br $loop) ) ) ;; Pass the iovec containing all the arguments to fd_write. (local.set $result (call $wasi_fd_write (i32.const 1) (local.get $iovAddress) (local.get $numIOVs) (global.get $numBytesWrittenAddress))) ) (call $wasi_proc_exit (local.get $result)) ) ) ================================================ FILE: Examples/embedder/c/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.8.0) project(embedder-test LANGUAGES C CXX) add_executable(embedder-example embedder-example.c) option(INCLUDE_WAVM_PROJECT false) if(INCLUDE_WAVM_PROJECT) add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/../../.. ${CMAKE_CURRENT_BINARY_DIR}/WAVM) target_link_libraries(embedder-example libWAVM) set(WAVM_LIB_TARGET libWAVM) else() find_package(WAVM REQUIRED CONFIG) target_link_libraries(embedder-example WAVM::libWAVM) set(WAVM_LIB_TARGET WAVM::libWAVM) endif() # On Windows, copy the WAVM DLL next to the executable. # On Unix, set RPATH to the WAVM library directory so the binary can find libWAVM at runtime. if(WIN32) add_custom_command(TARGET embedder-example POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $) else() target_link_options(embedder-example PRIVATE "-Wl,-rpath,$") endif() ================================================ FILE: Examples/embedder/c/embedder-example.c ================================================ #include #include #include #include #include #include "WAVM/wavm-c/wavm-c.h" #define own wasm_compartment_t* compartment = NULL; wasm_memory_t* memory = NULL; static void handle_trap(wasm_trap_t* trap) { char* message_buffer = malloc(1024); size_t num_message_bytes = 1024; if(!wasm_trap_message(trap, message_buffer, &num_message_bytes)) { message_buffer = malloc(num_message_bytes); assert(wasm_trap_message(trap, message_buffer, &num_message_bytes)); } fprintf(stderr, "Runtime error: %.*s\n", (int)num_message_bytes, message_buffer); wasm_trap_delete(trap); free(message_buffer); } // A function to be called from Wasm code. static own wasm_trap_t* hello_callback(const wasm_val_t args[], wasm_val_t results[]) { // Make a copy of the string passed as an argument, and ensure that it is null terminated. const uint32_t address = (uint32_t)args[0].i32; const uint32_t num_chars = (uint32_t)args[1].i32; char buffer[1025]; if(num_chars > 1024) { fprintf(stderr, "Callback called with too many characters: num_chars=%u.\n", num_chars); exit(1); } const size_t num_memory_bytes = wasm_memory_data_size(memory); if(((uint64_t)address + (uint64_t)num_chars) > num_memory_bytes) { fprintf(stderr, "Callback called with out-of-bounds string address:\n" " address=%u\n" " num_chars=%u\n" " wasm_memory_data_size(memory)=%zu\n", address, num_chars, wasm_memory_data_size(memory)); exit(1); } memcpy(buffer, wasm_memory_data(memory) + address, num_chars); buffer[num_chars] = 0; printf("Hello, %s!\n", buffer); results[0].i32 = num_chars; return NULL; } int main(int argc, char** argv) { // Initialize. wasm_engine_t* engine = wasm_engine_new(); compartment = wasm_compartment_new(engine, "compartment"); wasm_store_t* store = wasm_store_new(compartment, "store"); char hello_wast[] = "(module\n" " (import \"\" \"hello\" (func $1 (param i32 i32) (result i32)))\n" " (memory (export \"memory\") 1)\n" " (global $nextFreeMemoryAddress (mut i32) (i32.const 0))\n" " (func (export \"malloc\") (param $numBytes i32) (result i32)\n" " (local $address i32)\n" " (local.set $address (global.get $nextFreeMemoryAddress))\n" " (global.set $nextFreeMemoryAddress\n" " (i32.add (local.get $address) (local.get $numBytes)))\n" " (local.get $address)\n" " )\n" " (func (export \"run\") (param $address i32) (param $num_chars i32) (result i32)\n" " (call $1 (local.get $address) (local.get $num_chars))\n" " )\n" ")"; // Compile. own wasm_module_t* module = wasm_module_new_text(engine, hello_wast, sizeof(hello_wast)); if(!module) { fprintf(stderr, "Failed to compile module.\n"); return 1; } // Create external print functions. own wasm_functype_t* hello_type = wasm_functype_new_2_1( wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()); own wasm_func_t* hello_func = wasm_func_new(compartment, hello_type, hello_callback, "hello"); wasm_functype_delete(hello_type); // Instantiate. const wasm_extern_t* imports[1]; imports[0] = wasm_func_as_extern(hello_func); wasm_trap_t* trap = NULL; own wasm_instance_t* instance = wasm_instance_new(store, module, imports, &trap, "instance"); if(!instance) { handle_trap(trap); return 1; } wasm_func_delete(hello_func); // Extract exports. wasm_extern_t* memory_extern = wasm_instance_export(instance, 0); assert(memory_extern); memory = wasm_extern_as_memory(memory_extern); assert(memory); wasm_extern_t* malloc_extern = wasm_instance_export(instance, 1); assert(malloc_extern); const wasm_func_t* malloc_func = wasm_extern_as_func(malloc_extern); assert(malloc_func); wasm_extern_t* run_extern = wasm_instance_export(instance, 2); assert(run_extern); const wasm_func_t* run_func = wasm_extern_as_func(run_extern); assert(run_func); wasm_module_delete(module); wasm_instance_delete(instance); // Allocate a buffer in WebAssembly memory to hold our input string. const char* input_string = "embedder-example.c user"; const size_t num_string_chars = strlen(input_string); wasm_val_t malloc_args[1]; wasm_val_t malloc_results[1]; malloc_args[0].i32 = (int32_t)num_string_chars; trap = wasm_func_call(store, malloc_func, malloc_args, malloc_results); if(trap) { handle_trap(trap); return 1; } // Check that the returned address is within the bounds of the WebAssembly memory. const uint32_t string_address = (uint32_t)malloc_results[0].i32; if(string_address + num_string_chars > wasm_memory_data_size(memory)) { fprintf(stderr, "malloc returned out-of-bounds buffer:\n" " string_address=%u\n" " num_string_chars=%zu\n" " wasm_memory_data_size(memory)=%zu\n", string_address, num_string_chars, wasm_memory_data_size(memory)); return 1; } // Copy the input string into the WebAssembly memory. memcpy(wasm_memory_data(memory) + string_address, input_string, num_string_chars); // Pass the WebAssembly memory copy of the input string to the run function. wasm_val_t run_args[2]; wasm_val_t run_results[1]; run_args[0].i32 = string_address; run_args[1].i32 = (int32_t)num_string_chars; trap = wasm_func_call(store, run_func, run_args, run_results); if(trap) { handle_trap(trap); return 1; } printf("WASM call returned: %i\n", run_results[0].i32); // Shut down. wasm_store_delete(store); wasm_compartment_delete(compartment); wasm_engine_delete(engine); return 0; } ================================================ FILE: Examples/embedder/cpp/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.8.0) project(embedder-test LANGUAGES C CXX) add_executable(embedder-example embedder-example.cpp) option(INCLUDE_WAVM_PROJECT false) if(INCLUDE_WAVM_PROJECT) add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/../../.. ${CMAKE_CURRENT_BINARY_DIR}/WAVM) target_link_libraries(embedder-example libWAVM) set(WAVM_LIB_TARGET libWAVM) else() find_package(WAVM REQUIRED CONFIG) target_link_libraries(embedder-example WAVM::libWAVM) set(WAVM_LIB_TARGET WAVM::libWAVM) endif() # On Windows, copy the WAVM DLL next to the executable. # On Unix, set RPATH to the WAVM library directory so the binary can find libWAVM at runtime. if(WIN32) add_custom_command(TARGET embedder-example POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $) else() target_link_options(embedder-example PRIVATE "-Wl,-rpath,$") endif() ================================================ FILE: Examples/embedder/cpp/build.sh ================================================ #!/bin/sh WAVM_INSTALL_DIR=/usr # Compile embedder-example.cpp to embedder-example.o c++ \ -DWASM_C_API="" \ -DWAVM_API="" \ -g \ -o embedder-example.cpp.o \ -lWAVM \ embedder-example.cpp # Link embedder-example.o with libWAVM.so c++ \ -g \ -o embedder-example \ -Wl,-rpath,$WAVM_BUILD_DIR \ embedder-example.cpp.o \ $WAVM_INSTALL_DIR/lib/libWAVM.so.0 ================================================ FILE: Examples/embedder/cpp/embedder-example.cpp ================================================ #include #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASTParse/WASTParse.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; Memory* memory = nullptr; WAVM_DEFINE_INTRINSIC_MODULE(embedder) WAVM_DEFINE_INTRINSIC_FUNCTION(embedder, "hello", U32, hello, U32 address, U32 numChars) { // Make a copy of the string passed as an argument, and ensure that it is null terminated. char buffer[1025]; if(numChars > 1024) { throwException(ExceptionTypes::invalidArgument); } memcpy(buffer, memoryArrayPtr(memory, address, numChars), numChars); buffer[numChars] = 0; printf("Hello, %s!\n", buffer); return numChars; } int main(int argc, char** argv) { // Compile a WASM module from text. char helloWAST[] = "(module\n" " (import \"\" \"hello\" (func $1 (param i32 i32) (result i32)))\n" " (memory (export \"memory\") 1)\n" " (global $nextFreeMemoryAddress (mut i32) (i32.const 0))\n" " (func (export \"malloc\") (param $numBytes i32) (result i32)\n" " (local $address i32)\n" " (local.set $address (global.get $nextFreeMemoryAddress))\n" " (global.set $nextFreeMemoryAddress\n" " (i32.add (local.get $address) (local.get $numBytes)))\n" " (local.get $address)\n" " )\n" " (func (export \"run\") (param $address i32) (param $num_chars i32) (result i32)\n" " (call $1 (local.get $address) (local.get $num_chars))\n" " )\n" ")"; IR::Module irModule; std::vector wastErrors; if(!WAST::parseModule(helloWAST, sizeof(helloWAST), irModule, wastErrors)) { return EXIT_FAILURE; } ModuleRef module = compileModule(irModule); // Create a WAVM compartment and context. GCPointer compartment = createCompartment(); GCPointer context = createContext(compartment); // Create an instance that encapsulates the intrinsic function in a way that allows it to be // imported by WASM instances. Instance* intrinsicsInstance = WAVM::Intrinsics::instantiateModule( compartment, {WAVM_INTRINSIC_MODULE_REF(embedder)}, "embedder"); const FunctionType i32_i32_to_i32({ValueType::i32}, {ValueType::i32, ValueType::i32}); Function* intrinsicFunction = getTypedInstanceExport(intrinsicsInstance, "hello", i32_i32_to_i32); catchRuntimeExceptions( [&]() { // Instantiate the WASM module using the intrinsic function as its import. GCPointer instance = instantiateModule(compartment, module, {asObject(intrinsicFunction)}, "hello"); // Extract exports. const FunctionType i32_to_i32({ValueType::i32}, {ValueType::i32}); Function* mallocFunction = getTypedInstanceExport(instance, "malloc", i32_to_i32); Function* runFunction = getTypedInstanceExport(instance, "run", i32_i32_to_i32); memory = getTypedInstanceExport( instance, "memory", MemoryType(false, IndexType::i32, SizeConstraints{1, UINT64_MAX})); WAVM_ASSERT(mallocFunction); WAVM_ASSERT(runFunction); WAVM_ASSERT(memory); // Allocate a buffer in WebAssembly memory to hold our input string. const char* inputString = "embedder-example.cpp user"; const size_t numStringChars = strlen(inputString); UntaggedValue mallocArgs[1]{U32(numStringChars)}; UntaggedValue mallocResults[1]; invokeFunction(context, mallocFunction, i32_to_i32, mallocArgs, mallocResults); // Copy the input string into the WebAssembly memory. const uint32_t stringAddress = mallocResults[0].u32; memcpy(memoryArrayPtr(memory, stringAddress, numStringChars), inputString, numStringChars); // Pass the WebAssembly memory copy of the input string to the run function. UntaggedValue runArgs[2]{stringAddress, U32(numStringChars)}; UntaggedValue runResults[1]; invokeFunction(context, runFunction, i32_i32_to_i32, runArgs, runResults); printf("WASM call returned: %u\n", runResults[0].u32); }, [&](Exception* exception) { // Treat any unhandled exception as a fatal error. Errors::fatalf("Runtime exception: %s", describeException(exception).c_str()); destroyException(exception); }); // Clean up the WAVM runtime objects. context = nullptr; WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartment))); return 0; } ================================================ FILE: Examples/embedder/cpp-wasi/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.8.0) project(embedder-test LANGUAGES C CXX) add_executable(embedder-example embedder-example.cpp) option(INCLUDE_WAVM_PROJECT false) if(INCLUDE_WAVM_PROJECT) add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/../../.. ${CMAKE_CURRENT_BINARY_DIR}/WAVM) target_link_libraries(embedder-example libWAVM) set(WAVM_LIB_TARGET libWAVM) else() find_package(WAVM REQUIRED CONFIG) target_link_libraries(embedder-example WAVM::libWAVM) set(WAVM_LIB_TARGET WAVM::libWAVM) endif() # On Windows, copy the WAVM DLL next to the executable. # On Unix, set RPATH to the WAVM library directory so the binary can find libWAVM at runtime. if(WIN32) add_custom_command(TARGET embedder-example POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $) else() target_link_options(embedder-example PRIVATE "-Wl,-rpath,$") endif() ================================================ FILE: Examples/embedder/cpp-wasi/embedder-example.cpp ================================================ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include #include #include #include #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Platform/File.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/VFS/SandboxFS.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASM/WASM.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; using namespace WAVM::WASI; static bool readFile(const char* path, std::vector& outBytes) { FILE* file = fopen(path, "rb"); if(!file) { fprintf(stderr, "Failed to open '%s' for reading: %s\n", path, strerror(errno)); return false; } if(fseek(file, 0, SEEK_END)) { fprintf(stderr, "Failed to seek to end of '%s': %s\n", path, strerror(errno)); return false; } const long numBytes = ftell(file); if(numBytes < 0) { fprintf(stderr, "Failed to query position in '%s': %s\n", path, strerror(errno)); return false; } const unsigned long numBytesUnsigned = (unsigned long)numBytes; if(fseek(file, 0, SEEK_SET)) { fprintf(stderr, "Failed to seek to beginning of '%s': %s\n", path, strerror(errno)); return false; } outBytes.resize(numBytesUnsigned); size_t numBytesRead = fread(outBytes.data(), 1, numBytesUnsigned, file); if(numBytesRead != numBytesUnsigned) { fprintf(stderr, "Failed to read %lu bytes from '%s': %s\n", numBytesUnsigned, path, strerror(errno)); return false; } if(fclose(file)) { fprintf(stderr, "Failed to close '%s': %s\n", path, strerror(errno)); return false; } return true; } int main(int argc, char** argv) { if(argc < 2) { fprintf(stderr, "Usage: %s [WASI arguments]\n", argv[0]); return EXIT_FAILURE; } // Load the WASM file. std::vector wasmBytes; if(!readFile(argv[1], wasmBytes)) { return EXIT_FAILURE; } WASM::LoadError loadError; ModuleRef module; if(!loadBinaryModule( wasmBytes.data(), wasmBytes.size(), module, FeatureLevel::mature, &loadError)) { fprintf(stderr, "Couldn't load '%s': %s\n", argv[1], loadError.message.c_str()); return EXIT_FAILURE; } // Create a WAVM compartment and context. GCPointer compartment = createCompartment(); GCPointer context = createContext(compartment); // Create the WASI process. std::vector wasiArgs; for(int argIndex = 1; argIndex < argc; ++argIndex) { wasiArgs.push_back(argv[argIndex]); } std::shared_ptr sandboxFS = VFS::makeSandboxFS(&Platform::getHostFS(), Platform::getCurrentWorkingDirectory()); std::shared_ptr process = createProcess(compartment, std::move(wasiArgs), {}, sandboxFS.get(), Platform::getStdFD(Platform::StdDevice::in), Platform::getStdFD(Platform::StdDevice::out), Platform::getStdFD(Platform::StdDevice::err)); // Link the WASM module with the WASI exports. LinkResult linkResult = linkModule(getModuleIR(module), getProcessResolver(*process)); if(!linkResult.success) { fprintf(stderr, "Failed to link '%s':\n", argv[1]); for(const auto& missingImport : linkResult.missingImports) { fprintf(stderr, "Failed to resolve import: type=%s module=%s export=%s\n", asString(missingImport.type).c_str(), missingImport.moduleName.c_str(), missingImport.exportName.c_str()); } return EXIT_FAILURE; } // Instantiate the linked module. GCPointer instance = instantiateModule( compartment, module, std::move(linkResult.resolvedImports), std::string(argv[1])); // Link WASI with the memory exported by the WASM module. if(Memory* memory = asMemoryNullable(getInstanceExport(instance, "memory"))) { setProcessMemory(*process, memory); } else { fprintf(stderr, "Failed to find memory export in '%s'.\n", argv[1]); return EXIT_FAILURE; } // Call the WASM module's "_start" function, using WASI::catchExit to handle non-local returns // via the WASI exit API. Function* startFunction = getTypedInstanceExport(instance, "_start", FunctionType()); const I32 exitCode = WASI::catchExit([&]() -> I32 { invokeFunction(context, startFunction, FunctionType()); return 0; }); // Clean up the WAVM runtime objects. process.reset(); instance = nullptr; context = nullptr; WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartment))); return exitCode; } ================================================ FILE: Examples/helloworld.wast ================================================ ;; WebAssembly WASM AST Hello World! program (module (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 1) ;; The iovec that is passed to fd_write. (data (i32.const 8) "\10\00\00\00" ;; buf = 16 "\0d\00\00\00" ;; buf_len = 13 ) ;; The string that the iovec points to. (data (i32.const 16) "Hello World!\n") (func $main (export "_start") ;; Print "Hello World!\n" to stdout. (call $wasi_fd_write (i32.const 1) ;; fd 1 (stdout) (i32.const 8) ;; (iovec*)8 (i32.const 1) ;; 1 iovec (i32.const 12)) ;; write the number of written bytes back to iovec.buf_len ;; Pass the result of wasi_fd_write to wasi_proc_exit (call $wasi_proc_exit) ) ) ================================================ FILE: Examples/tee.wast ================================================ ;; poor man's tee ;; Outputs to stderr and stdout whatever comes in stdin (module (import "wasi_unstable" "fd_read" (func $wasi_fd_read (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 1) (global $ioVecAddress i32 (i32.const 0)) (global $ioBufferAddress i32 (i32.const 8)) (global $ioBufferNumBytes i32 (i32.const 1024)) (func $main (export "_start") (local $result i32) (loop $loop (block $done (i32.store offset=0 (global.get $ioVecAddress) (global.get $ioBufferAddress)) (i32.store offset=4 (global.get $ioVecAddress) (global.get $ioBufferNumBytes)) ;; Read up to $ioBufferNumBytes from stdin. (local.set $result (call $wasi_fd_read (i32.const 0) ;; fd = stdin (global.get $ioVecAddress) ;; iovec = $ioVecAddress (i32.const 1) ;; 1 iovec (i32.add (global.get $ioVecAddress) (i32.const 4)) ;; store the number of bytes read back to iovec.buf_len )) ;; Break out of the loop if fd_read returned an error, or 0 bytes were read. (br_if $done (i32.or (i32.ne (i32.const 0) (local.get $result)) (i32.eq (i32.const 0) (i32.load offset=4 (global.get $ioVecAddress))) )) ;; Write the bytes read from stdin to stdout. (local.set $result (call $wasi_fd_write (i32.const 1) ;; fd = stdout (global.get $ioVecAddress) ;; iovec = $ioVecAddress (i32.const 1) ;; 1 iovec (i32.add (global.get $ioVecAddress) (i32.const 4)) ;; store the number of bytes written back to iovec.buf_len )) (br_if $done (i32.ne (i32.const 0) (local.get $result))) ;; Write the bytes read from stdin to stderr. (local.set $result (call $wasi_fd_write (i32.const 1) ;; fd = stdout (global.get $ioVecAddress) ;; iovec = $ioVecAddress (i32.const 1) ;; 1 iovec (i32.add (global.get $ioVecAddress) (i32.const 4)) ;; store the number of bytes written back to iovec.buf_len )) (br_if $done (i32.ne (i32.const 0) (local.get $result))) (br $loop) ) ) (call $wasi_proc_exit (local.get $result)) ) ) ================================================ FILE: Examples/trap.wast ================================================ (module (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 1) (func $store (param $value i32) i32.const 65536 ;; func+0 local.get $value ;; func+1 i32.store ;; func+2 ) (func $main (export "_start") i32.const 0 ;; main+0 call $store ;; main+1 i32.const 0 ;; main+2 call $wasi_proc_exit ;; main+3 ) ) ================================================ FILE: Include/WAVM/DWARF/Constants.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace DWARF { // DWARF tag constants. inline constexpr U16 DW_TAG_compile_unit = 0x11; inline constexpr U16 DW_TAG_subprogram = 0x2E; inline constexpr U16 DW_TAG_lexical_block = 0x0B; inline constexpr U16 DW_TAG_inlined_subroutine = 0x1D; // DWARF attribute constants. inline constexpr U16 DW_AT_name = 0x03; inline constexpr U16 DW_AT_stmt_list = 0x10; inline constexpr U16 DW_AT_low_pc = 0x11; inline constexpr U16 DW_AT_high_pc = 0x12; inline constexpr U16 DW_AT_abstract_origin = 0x31; inline constexpr U16 DW_AT_decl_line = 0x3B; inline constexpr U16 DW_AT_call_line = 0x59; inline constexpr U16 DW_AT_linkage_name = 0x6E; inline constexpr U16 DW_AT_str_offsets_base = 0x72; inline constexpr U16 DW_AT_addr_base = 0x73; // DWARF form constants. inline constexpr U8 DW_FORM_addr = 0x01; inline constexpr U8 DW_FORM_block2 = 0x03; inline constexpr U8 DW_FORM_block4 = 0x04; inline constexpr U8 DW_FORM_data2 = 0x05; inline constexpr U8 DW_FORM_data4 = 0x06; inline constexpr U8 DW_FORM_data8 = 0x07; inline constexpr U8 DW_FORM_string = 0x08; inline constexpr U8 DW_FORM_block = 0x09; inline constexpr U8 DW_FORM_block1 = 0x0A; inline constexpr U8 DW_FORM_data1 = 0x0B; inline constexpr U8 DW_FORM_flag = 0x0C; inline constexpr U8 DW_FORM_sdata = 0x0D; inline constexpr U8 DW_FORM_strp = 0x0E; inline constexpr U8 DW_FORM_udata = 0x0F; inline constexpr U8 DW_FORM_ref_addr = 0x10; inline constexpr U8 DW_FORM_ref1 = 0x11; inline constexpr U8 DW_FORM_ref2 = 0x12; inline constexpr U8 DW_FORM_ref4 = 0x13; inline constexpr U8 DW_FORM_ref8 = 0x14; inline constexpr U8 DW_FORM_ref_udata = 0x15; inline constexpr U8 DW_FORM_indirect = 0x16; inline constexpr U8 DW_FORM_sec_offset = 0x17; inline constexpr U8 DW_FORM_exprloc = 0x18; inline constexpr U8 DW_FORM_flag_present = 0x19; inline constexpr U8 DW_FORM_strx = 0x1A; inline constexpr U8 DW_FORM_addrx = 0x1B; inline constexpr U8 DW_FORM_data16 = 0x1E; inline constexpr U8 DW_FORM_line_strp = 0x1F; inline constexpr U8 DW_FORM_ref_sig8 = 0x20; inline constexpr U8 DW_FORM_implicit_const = 0x21; inline constexpr U8 DW_FORM_loclistx = 0x22; inline constexpr U8 DW_FORM_rnglistx = 0x23; inline constexpr U8 DW_FORM_strx1 = 0x25; inline constexpr U8 DW_FORM_strx2 = 0x26; inline constexpr U8 DW_FORM_strx4 = 0x28; inline constexpr U8 DW_FORM_addrx1 = 0x29; inline constexpr U8 DW_FORM_addrx2 = 0x2A; inline constexpr U8 DW_FORM_addrx4 = 0x2C; // DWARF unit type constants. inline constexpr U8 DW_UT_compile = 0x01; // DWARF line number standard opcode constants. inline constexpr U8 DW_LNS_copy = 1; inline constexpr U8 DW_LNS_advance_pc = 2; inline constexpr U8 DW_LNS_advance_line = 3; inline constexpr U8 DW_LNS_const_add_pc = 8; inline constexpr U8 DW_LNS_fixed_advance_pc = 9; // DWARF line number extended opcode constants. inline constexpr U8 DW_LNE_end_sequence = 1; inline constexpr U8 DW_LNE_set_address = 2; // Exception handling pointer encoding constants (used in .eh_frame CIE/FDE). inline constexpr U8 DW_EH_PE_absptr = 0x00; inline constexpr U8 DW_EH_PE_uleb128 = 0x01; inline constexpr U8 DW_EH_PE_udata2 = 0x02; inline constexpr U8 DW_EH_PE_udata4 = 0x03; inline constexpr U8 DW_EH_PE_udata8 = 0x04; inline constexpr U8 DW_EH_PE_signed = 0x08; inline constexpr U8 DW_EH_PE_sleb128 = 0x09; inline constexpr U8 DW_EH_PE_sdata2 = 0x0A; inline constexpr U8 DW_EH_PE_sdata4 = 0x0B; inline constexpr U8 DW_EH_PE_sdata8 = 0x0C; inline constexpr U8 DW_EH_PE_pcrel = 0x10; inline constexpr U8 DW_EH_PE_indirect = 0x80; inline constexpr U8 DW_EH_PE_omit = 0xFF; // Get the byte size of a DW_EH_PE pointer encoding (0 for variable-length encodings). inline Uptr getEncodedPointerSize(U8 encoding) { switch(encoding & 0x0F) { case DW_EH_PE_absptr: return sizeof(void*); case DW_EH_PE_uleb128: case DW_EH_PE_sleb128: return 0; case DW_EH_PE_udata2: case DW_EH_PE_sdata2: return 2; case DW_EH_PE_udata4: case DW_EH_PE_sdata4: return 4; case DW_EH_PE_signed: return sizeof(void*); case DW_EH_PE_udata8: case DW_EH_PE_sdata8: return 8; default: return 0; } } }} ================================================ FILE: Include/WAVM/DWARF/DWARF.h ================================================ #pragma once #include "WAVM/DWARF/Sections.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace DWARF { // A source location at a given address, one frame in an inline chain. struct SourceLocation { const char* linkageName; // into .debug_str, or nullptr const char* name; // into .debug_str, or nullptr Uptr line; }; // Map an instruction address to source locations (inline chain). // Signal-safe: parses DWARF v4 on-the-fly, stack allocation only. // Returns number of locations (innermost first), 0 if not found. WAVM_API Uptr getSourceLocations(const Sections& sections, Uptr address, SourceLocation* outLocations, Uptr maxLocations); }} ================================================ FILE: Include/WAVM/DWARF/Sections.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace DWARF { struct Sections { const U8* debugInfo = nullptr; Uptr debugInfoSize = 0; const U8* debugAbbrev = nullptr; Uptr debugAbbrevSize = 0; const U8* debugStr = nullptr; Uptr debugStrSize = 0; const U8* debugLine = nullptr; Uptr debugLineSize = 0; const U8* debugAddr = nullptr; Uptr debugAddrSize = 0; const U8* debugStrOffsets = nullptr; Uptr debugStrOffsetsSize = 0; }; }} ================================================ FILE: Include/WAVM/IR/FeatureSpec.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" // Features that have been standardized by the W3C WebAssembly Working Group. #define WAVM_ENUM_STANDARD_FEATURES(V) \ V(mvp, "mvp", "WebAssembly MVP") \ V(importExportMutableGlobals, \ "import-export-mutable-globals", \ "Allows importing and exporting mutable globals") \ V(nonTrappingFloatToInt, "non-trapping-float-to-int", "Non-trapping float-to-int conversion") \ V(signExtension, "sign-extension", "Sign-extension") \ V(multipleResultsAndBlockParams, "multivalue", "Multiple results and block parameters") \ V(bulkMemoryOperations, "bulk-memory", "Bulk memory") \ V(referenceTypes, "ref-types", "Reference types") \ V(simd, "simd", "128-bit SIMD") // Extensions that are expected to be standardized without breaking backward compatibility. These // are enabled by default. #define WAVM_ENUM_MATURE_FEATURES(V) // Proposed standard extensions. These are disabled by default, but may be enabled on the // command-line. #define WAVM_ENUM_PROPOSED_FEATURES(V) \ V(atomics, "atomics", "Shared memories and atomic instructions") \ V(exceptionHandling, "exception-handling", "Exception handling") \ V(extendedNameSection, "extended-name-section", "Extended name section") \ V(multipleMemories, "multi-memory", "Multiple memories") \ V(memory64, "memory64", "Memories with 64-bit addresses") // Non-standard extensions. These are disabled by default, but may be enabled on the command-line. #define WAVM_ENUM_NONSTANDARD_FEATURES(V) \ V(sharedTables, "shared-tables", "Shared tables") \ V(allowLegacyInstructionNames, "legacy-instr-names", "Legacy instruction names") \ V(allowAnyExternKindElemSegments, \ "any-extern-kind-elems", \ "Elem segments containing non-func externs") \ V(quotedNamesInTextFormat, "quoted-names", "Quoted names in text format") \ V(customSectionsInTextFormat, "wat-custom-sections", "Custom sections in text format") \ V(interleavedLoadStore, "interleaved-load-store", "Interleaved SIMD load&store instructions") \ V(table64, "table64", "Tables with 64-bit indices") // WAVM extensions meant for internal use only (not exposed to users). #define WAVM_ENUM_INTERNAL_FEATURES(V) \ V(nonWASMFunctionTypes, "non-wasm-func-types", "Non-WebAssembly function calling conventions") #define WAVM_ENUM_FEATURES(V) \ WAVM_ENUM_STANDARD_FEATURES(V) \ WAVM_ENUM_MATURE_FEATURES(V) \ WAVM_ENUM_PROPOSED_FEATURES(V) \ WAVM_ENUM_NONSTANDARD_FEATURES(V) \ WAVM_ENUM_INTERNAL_FEATURES(V) namespace WAVM { namespace IR { #define VISIT_FEATURE(name, ...) name, enum class Feature { WAVM_ENUM_FEATURES(VISIT_FEATURE) }; #undef VISIT_FEATURE // A feature level hierarchy where each feature level is a superset of the previous. enum class FeatureLevel { mvp, // Only the WebAssembly MVP. standard, // The above + standard extensions. mature, // The above + mature proposed standard extensions. proposed, // The above + all proposed standard extensions. wavm, // The above + non-standard WAVM extensions. }; struct FeatureSpec { // Declare a bool member for each feature. #define VISIT_FEATURE_DEFAULT_ON(name, ...) bool name; #define VISIT_FEATURE_DEFAULT_OFF(name, ...) bool name; WAVM_ENUM_STANDARD_FEATURES(VISIT_FEATURE_DEFAULT_ON) WAVM_ENUM_MATURE_FEATURES(VISIT_FEATURE_DEFAULT_ON) WAVM_ENUM_PROPOSED_FEATURES(VISIT_FEATURE_DEFAULT_OFF) WAVM_ENUM_NONSTANDARD_FEATURES(VISIT_FEATURE_DEFAULT_OFF) WAVM_ENUM_INTERNAL_FEATURES(VISIT_FEATURE_DEFAULT_OFF) #undef VISIT_FEATURE_DEFAULT_ON #undef VISIT_FEATURE_DEFAULT_OFF Uptr maxLocals = 65536; Uptr maxLabelsPerFunction = UINTPTR_MAX; Uptr maxDataSegments = UINTPTR_MAX; Uptr maxSyntaxRecursion = 500; FeatureSpec(FeatureLevel featureLevel = FeatureLevel::mature) { setFeatureLevel(featureLevel); } WAVM_API void setFeatureLevel(FeatureLevel featureLevel); }; WAVM_API Feature getFeatureByName(const char* name); WAVM_API const char* getFeatureName(Feature feature); }} ================================================ FILE: Include/WAVM/IR/IR.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" #include namespace WAVM { namespace IR { inline constexpr U64 maxMemory32Pages = 65536; // 2^16 pages -> 2^32 bytes inline constexpr U64 maxMemory64Pages = 281474976710656; // 2^48 pages -> 2^64 bytes inline constexpr U64 maxTable32Elems = UINT32_MAX; inline constexpr U64 maxTable64Elems = UINT64_MAX; inline constexpr Uptr numBytesPerPage = 65536; inline constexpr Uptr numBytesPerPageLog2 = 16; inline constexpr Uptr maxReturnValues = 16; }} ================================================ FILE: Include/WAVM/IR/Module.h ================================================ #pragma once #include #include #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace IR { enum class Opcode : U16; // An initializer expression: serialized like any other code, but only supports a few specific // instructions. template struct InitializerExpressionBase { enum class Type : U16 { i32_const = 0x0041, i64_const = 0x0042, f32_const = 0x0043, f64_const = 0x0044, v128_const = 0xfd0c, global_get = 0x0023, ref_null = 0x00d0, ref_func = 0x00d2, invalid = 0xffff }; union { Type type; Opcode typeOpcode; }; union { I32 i32; I64 i64; F32 f32; F64 f64; V128 v128; Ref ref; ReferenceType nullReferenceType; }; InitializerExpressionBase() : type(Type::invalid) {} InitializerExpressionBase(I32 inI32) : type(Type::i32_const), i32(inI32) {} InitializerExpressionBase(I64 inI64) : type(Type::i64_const), i64(inI64) {} InitializerExpressionBase(F32 inF32) : type(Type::f32_const), f32(inF32) {} InitializerExpressionBase(F64 inF64) : type(Type::f64_const), f64(inF64) {} InitializerExpressionBase(V128 inV128) : type(Type::v128_const), v128(inV128) {} InitializerExpressionBase(Type inType, Ref inRef) : type(inType), ref(inRef) { WAVM_ASSERT(type == Type::global_get || type == Type::ref_func); } InitializerExpressionBase(ReferenceType inNullReferenceType) : type(Type::ref_null), nullReferenceType(inNullReferenceType) { } friend bool operator==(const InitializerExpressionBase& a, const InitializerExpressionBase& b) { if(a.type != b.type) { return false; } switch(a.type) { case Type::i32_const: return a.i32 == b.i32; case Type::i64_const: return a.i64 == b.i64; // For FP constants, use integer comparison to test for bitwise equality. Using FP // comparison can't distinguish when NaNs are identical. case Type::f32_const: return a.i32 == b.i32; case Type::f64_const: return a.i64 == b.i64; case Type::v128_const: return a.v128.u64x2[0] == b.v128.u64x2[0] && a.v128.u64x2[1] == b.v128.u64x2[1]; case Type::global_get: return a.ref == b.ref; case Type::ref_null: return true; case Type::ref_func: return a.ref == b.ref; case Type::invalid: return true; default: WAVM_UNREACHABLE(); }; } friend bool operator!=(const InitializerExpressionBase& a, const InitializerExpressionBase& b) { return !(a == b); } }; typedef InitializerExpressionBase InitializerExpression; // A function definition struct FunctionDef { IndexedFunctionType type; std::vector nonParameterLocalTypes; std::vector code; std::vector> branchTables; }; // A table definition struct TableDef { TableType type; }; // A memory definition struct MemoryDef { MemoryType type; }; // A global definition struct GlobalDef { GlobalType type; InitializerExpression initializer; }; // A tagged tuple type definition struct ExceptionTypeDef { ExceptionType type; }; // Describes an object imported into a module or a specific type template struct Import { Type type; std::string moduleName; std::string exportName; }; typedef Import FunctionImport; typedef Import TableImport; typedef Import MemoryImport; typedef Import GlobalImport; typedef Import ExceptionTypeImport; // Describes an export from a module. struct Export { std::string name; ExternKind kind; // An index into the module's kind-specific IndexSpace. Uptr index; }; // Identifies an element of a kind-specific IndexSpace in a module. struct KindAndIndex { ExternKind kind; Uptr index; friend bool operator==(const KindAndIndex& left, const KindAndIndex& right) { return left.kind == right.kind && left.index == right.index; } }; // A data segment: a literal sequence of bytes that is copied into a Runtime::Memory when // instantiating a module struct DataSegment { bool isActive; Uptr memoryIndex; InitializerExpression baseOffset; std::shared_ptr> data; }; // An element expression: a literal reference used to initialize a table element. struct ElemExpr { enum class Type { invalid = 0, // These must match the corresponding Opcode members. ref_null = 0xd0, ref_func = 0xd2 }; union { Type type; Opcode typeOpcode; }; union { Uptr index; ReferenceType nullReferenceType; }; ElemExpr() : type(Type::invalid) {} ElemExpr(ReferenceType inNullReferenceType) : type(Type::ref_null), nullReferenceType(inNullReferenceType) { } ElemExpr(Type inType, Uptr inIndex = UINTPTR_MAX) : type(inType), index(inIndex) {} friend bool operator==(const ElemExpr& a, const ElemExpr& b) { if(a.type != b.type) { return false; } switch(a.type) { case ElemExpr::Type::ref_func: return a.index == b.index; case ElemExpr::Type::ref_null: return true; case ElemExpr::Type::invalid: default: WAVM_UNREACHABLE(); } } friend bool operator!=(const ElemExpr& a, const ElemExpr& b) { if(a.type != b.type) { return true; } switch(a.type) { case ElemExpr::Type::ref_func: return a.index != b.index; case ElemExpr::Type::ref_null: return false; case ElemExpr::Type::invalid: default: WAVM_UNREACHABLE(); } } }; // An elem segment: a literal sequence of table elements. struct ElemSegment { enum class Encoding { index, expr, }; enum class Type { active, passive, declared }; Type type; // Only valid if type == active. Uptr tableIndex; InitializerExpression baseOffset; struct Contents { Encoding encoding; // Only valid if encoding == expr. ReferenceType elemType; std::vector elemExprs; // Only valid if encoding == index. ExternKind externKind; std::vector elemIndices; }; std::shared_ptr contents; }; // Identifies sections in the binary format of a module in the order they are required to occur. enum class OrderedSectionID : U8 { moduleBeginning, type, import, function, table, memory, global, exceptionType, export_, start, elem, dataCount, code, data, }; WAVM_API const char* asString(OrderedSectionID id); // A custom module section as an array of bytes struct CustomSection { OrderedSectionID afterSection{OrderedSectionID::moduleBeginning}; std::string name; std::vector data; CustomSection() = default; CustomSection(OrderedSectionID inAfterSection, std::string&& inName, std::vector&& inData) : afterSection(inAfterSection), name(std::move(inName)), data(std::move(inData)) { } }; // An index-space for imports and definitions of a specific kind. template struct IndexSpace { std::vector> imports; std::vector defs; Uptr size() const { return imports.size() + defs.size(); } const Type& getType(Uptr index) const { if(index < imports.size()) { return imports[index].type; } else { return defs[index - imports.size()].type; } } bool isImport(Uptr index) const { WAVM_ASSERT(index < size()); return index < imports.size(); } bool isDef(Uptr index) const { WAVM_ASSERT(index < size()); return index >= imports.size(); } const Definition& getDef(Uptr index) const { WAVM_ASSERT(isDef(index)); return defs[index - imports.size()]; } }; // A WebAssembly module definition struct Module { FeatureSpec featureSpec; std::vector types; IndexSpace functions; IndexSpace tables; IndexSpace memories; IndexSpace globals; IndexSpace exceptionTypes; std::vector imports; std::vector exports; std::vector dataSegments; std::vector elemSegments; std::vector customSections; Uptr startFunctionIndex; Module(const FeatureSpec& inFeatureSpec = FeatureSpec()) : featureSpec(inFeatureSpec), startFunctionIndex(UINTPTR_MAX) { } }; // Finds a named custom section in a module. WAVM_API bool findCustomSection(const Module& module, const char* customSectionName, Uptr& outCustomSectionIndex); // Inserts a named custom section in a module, before any custom sections that come after later // known sections, but after all custom sections that come after the same known section. WAVM_API void insertCustomSection(Module& module, CustomSection&& customSection); // Functions that determine whether the binary form of a module will have specific sections. inline bool hasTypeSection(const Module& module) { return module.types.size() > 0; } inline bool hasImportSection(const Module& module) { WAVM_ASSERT((module.imports.size() > 0) == (module.functions.imports.size() > 0 || module.tables.imports.size() > 0 || module.memories.imports.size() > 0 || module.globals.imports.size() > 0 || module.exceptionTypes.imports.size() > 0)); return module.imports.size() > 0; } inline bool hasFunctionSection(const Module& module) { return module.functions.defs.size() > 0; } inline bool hasTableSection(const Module& module) { return module.tables.defs.size() > 0; } inline bool hasMemorySection(const Module& module) { return module.memories.defs.size() > 0; } inline bool hasGlobalSection(const Module& module) { return module.globals.defs.size() > 0; } inline bool hasExceptionTypeSection(const Module& module) { return module.exceptionTypes.defs.size() > 0; } inline bool hasExportSection(const Module& module) { return module.exports.size() > 0; } inline bool hasStartSection(const Module& module) { return module.startFunctionIndex != UINTPTR_MAX; } inline bool hasElemSection(const Module& module) { return module.elemSegments.size() > 0; } inline bool hasDataCountSection(const Module& module) { return module.dataSegments.size() > 0 && module.featureSpec.bulkMemoryOperations; } inline bool hasCodeSection(const Module& module) { return module.functions.defs.size() > 0; } inline bool hasDataSection(const Module& module) { return module.dataSegments.size() > 0; } WAVM_API OrderedSectionID getMaxPresentSection(const Module& module, OrderedSectionID maxSection); // Resolve an indexed block type to a FunctionType. inline FunctionType resolveBlockType(const Module& module, const IndexedBlockType& indexedType) { switch(indexedType.format) { case IndexedBlockType::noParametersOrResult: return FunctionType(); case IndexedBlockType::oneResult: return FunctionType(TypeTuple(indexedType.resultType)); case IndexedBlockType::functionType: return module.types[indexedType.index]; default: WAVM_UNREACHABLE(); }; } // Maps declarations in a module to names to use in disassembly. struct DisassemblyNames { struct Function { std::string name; std::vector locals; std::vector labels; Function(std::string&& inName = std::string(), std::initializer_list&& inLocals = {}, std::initializer_list&& inLabels = {}) : name(std::move(inName)), locals(inLocals), labels(inLabels) { } }; std::string moduleName; std::vector types; std::vector functions; std::vector tables; std::vector memories; std::vector globals; std::vector elemSegments; std::vector dataSegments; std::vector exceptionTypes; }; // Looks for a name section in a module. If it exists, deserialize it into outNames. // If it doesn't exist, fill outNames with sensible defaults. WAVM_API void getDisassemblyNames(const Module& module, DisassemblyNames& outNames); // Serializes a DisassemblyNames structure and adds it to the module as a name section. WAVM_API void setDisassemblyNames(Module& module, const DisassemblyNames& names); }} ================================================ FILE: Include/WAVM/IR/OperatorPrinter.h ================================================ #pragma once #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace IR { struct OperatorPrinter { typedef std::string Result; OperatorPrinter(const Module& inModule, const FunctionDef& inFunctionDef) : module(inModule), functionDef(inFunctionDef) { } #define VISIT_OPCODE(encoding, name, nameString, Imm, ...) \ std::string name(Imm imm = {}) { return std::string(nameString) + describeImm(imm); } WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE private: const Module& module; const FunctionDef& functionDef; std::string describeImm(NoImm) { return ""; } std::string describeImm(ControlStructureImm imm) { const FunctionType type = resolveBlockType(module, imm.type); return std::string(" : ") + asString(type.params()) + " -> " + asString(type.results()); } std::string describeImm(SelectImm imm) { return std::string(" ") + asString(imm.type); } std::string describeImm(BranchImm imm) { return " " + std::to_string(imm.targetDepth); } std::string describeImm(BranchTableImm imm) { std::string result = " " + std::to_string(imm.defaultTargetDepth); const char* prefix = " ["; WAVM_ASSERT(imm.branchTableIndex < functionDef.branchTables.size()); for(auto depth : functionDef.branchTables[imm.branchTableIndex]) { result += prefix + std::to_string(depth); prefix = ","; } result += "]"; return result; } template std::string describeImm(LiteralImm imm) { return " " + asString(imm.value); } template std::string describeImm(GetOrSetVariableImm imm) { return " " + std::to_string(imm.variableIndex); } std::string describeImm(FunctionImm imm) { const std::string typeString = imm.functionIndex >= module.functions.size() ? "" : asString(module.types[module.functions.getType(imm.functionIndex).index]); return " " + std::to_string(imm.functionIndex) + " " + typeString; } std::string describeImm(FunctionRefImm imm) { return describeImm(FunctionImm{imm.functionIndex}); } std::string describeImm(CallIndirectImm imm) { const std::string typeString = imm.type.index >= module.types.size() ? "" : asString(module.types[imm.type.index]); return " " + typeString; } std::string describeImm(BaseLoadOrStoreImm imm) { return " " + std::to_string(imm.memoryIndex) + " offset=" + std::to_string(imm.offset) + " align=" + std::to_string(1 << imm.alignmentLog2); } std::string describeImm(MemoryImm imm) { return " " + std::to_string(imm.memoryIndex); } std::string describeImm(MemoryCopyImm imm) { return " " + std::to_string(imm.sourceMemoryIndex) + " " + std::to_string(imm.destMemoryIndex); } std::string describeImm(TableImm imm) { return " " + std::to_string(imm.tableIndex); } std::string describeImm(TableCopyImm imm) { return " " + std::to_string(imm.sourceTableIndex) + " " + std::to_string(imm.destTableIndex); } template std::string describeImm(LaneIndexImm imm) { return " " + std::to_string(imm.laneIndex); } template std::string describeImm(ShuffleImm imm) { std::string result = " "; char prefix = '['; for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { result += prefix; result += imm.laneIndices[laneIndex] < numLanes ? 'a' : 'b'; result += imm.laneIndices[laneIndex] < numLanes ? std::to_string(imm.laneIndices[laneIndex]) : std::to_string(imm.laneIndices[laneIndex] - numLanes); prefix = ','; } result += ']'; return result; } std::string describeImm(AtomicFenceImm imm) { switch(imm.order) { case MemoryOrder::sequentiallyConsistent: return " seqcst"; default: WAVM_UNREACHABLE(); }; } std::string describeImm(ExceptionTypeImm) { return ""; } std::string describeImm(RethrowImm) { return ""; } std::string describeImm(DataSegmentAndMemImm imm) { return std::to_string(imm.dataSegmentIndex) + " " + std::to_string(imm.memoryIndex); } std::string describeImm(DataSegmentImm imm) { return " " + std::to_string(imm.dataSegmentIndex); } std::string describeImm(ElemSegmentAndTableImm imm) { return " " + std::to_string(imm.elemSegmentIndex) + " " + std::to_string(imm.tableIndex); } std::string describeImm(ElemSegmentImm imm) { return " " + std::to_string(imm.elemSegmentIndex); } std::string describeImm(ReferenceTypeImm imm) { return std::string(" ") + asString(imm.referenceType); } }; }} ================================================ FILE: Include/WAVM/IR/OperatorSignatures.h ================================================ #pragma once #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace IR { struct OpTypeTuple { static constexpr U8 maxTypes = 5; constexpr OpTypeTuple(std::initializer_list inTypes) : types{inTypes.size() > 0 ? inTypes.begin()[0] : ValueType::none, inTypes.size() > 1 ? inTypes.begin()[1] : ValueType::none, inTypes.size() > 2 ? inTypes.begin()[2] : ValueType::none, inTypes.size() > 3 ? inTypes.begin()[3] : ValueType::none, inTypes.size() > 4 ? inTypes.begin()[4] : ValueType::none} , numTypes(U8(inTypes.size())) { } ValueType operator[](Uptr index) const { WAVM_ASSERT(index < numTypes); return types[index]; } U8 size() const { return numTypes; } const ValueType* data() const { return types; } const ValueType* begin() const { return &types[0]; } const ValueType* end() const { return &types[numTypes]; } private: ValueType types[maxTypes]; U8 numTypes; }; struct OpSignature { OpTypeTuple params; OpTypeTuple results; constexpr OpSignature(std::initializer_list inResults, std::initializer_list inParams) : params(inParams), results(inResults) { } }; namespace OpSignatures { // Monomorphic signatures. inline constexpr OpSignature none_to_none{{}, {}}; inline constexpr OpSignature none_to_i32{{ValueType::i32}, {}}; inline constexpr OpSignature none_to_i64{{ValueType::i64}, {}}; inline constexpr OpSignature none_to_f32{{ValueType::f32}, {}}; inline constexpr OpSignature none_to_f64{{ValueType::f64}, {}}; inline constexpr OpSignature none_to_v128{{ValueType::v128}, {}}; inline constexpr OpSignature none_to_funcref{{ValueType::funcref}, {}}; inline constexpr OpSignature i32_to_i32{{ValueType::i32}, {ValueType::i32}}; inline constexpr OpSignature i64_to_i64{{ValueType::i64}, {ValueType::i64}}; inline constexpr OpSignature f32_to_f32{{ValueType::f32}, {ValueType::f32}}; inline constexpr OpSignature f64_to_f64{{ValueType::f64}, {ValueType::f64}}; inline constexpr OpSignature v128_to_v128{{ValueType::v128}, {ValueType::v128}}; inline constexpr OpSignature i32_to_i64{{ValueType::i64}, {ValueType::i32}}; inline constexpr OpSignature i32_to_f32{{ValueType::f32}, {ValueType::i32}}; inline constexpr OpSignature i32_to_f64{{ValueType::f64}, {ValueType::i32}}; inline constexpr OpSignature i32_to_v128{{ValueType::v128}, {ValueType::i32}}; inline constexpr OpSignature i64_to_i32{{ValueType::i32}, {ValueType::i64}}; inline constexpr OpSignature i64_to_f32{{ValueType::f32}, {ValueType::i64}}; inline constexpr OpSignature i64_to_f64{{ValueType::f64}, {ValueType::i64}}; inline constexpr OpSignature i64_to_v128{{ValueType::v128}, {ValueType::i64}}; inline constexpr OpSignature f32_to_f64{{ValueType::f64}, {ValueType::f32}}; inline constexpr OpSignature f32_to_i32{{ValueType::i32}, {ValueType::f32}}; inline constexpr OpSignature f32_to_i64{{ValueType::i64}, {ValueType::f32}}; inline constexpr OpSignature f32_to_v128{{ValueType::v128}, {ValueType::f32}}; inline constexpr OpSignature f64_to_f32{{ValueType::f32}, {ValueType::f64}}; inline constexpr OpSignature f64_to_i32{{ValueType::i32}, {ValueType::f64}}; inline constexpr OpSignature f64_to_i64{{ValueType::i64}, {ValueType::f64}}; inline constexpr OpSignature f64_to_v128{{ValueType::v128}, {ValueType::f64}}; inline constexpr OpSignature v128_to_i32{{ValueType::i32}, {ValueType::v128}}; inline constexpr OpSignature v128_to_i64{{ValueType::i64}, {ValueType::v128}}; inline constexpr OpSignature v128_to_f32{{ValueType::f32}, {ValueType::v128}}; inline constexpr OpSignature v128_to_f64{{ValueType::f64}, {ValueType::v128}}; inline constexpr OpSignature i32_i32_to_i32{{ValueType::i32}, {ValueType::i32, ValueType::i32}}; inline constexpr OpSignature i64_i64_to_i64{{ValueType::i64}, {ValueType::i64, ValueType::i64}}; inline constexpr OpSignature f32_f32_to_f32{{ValueType::f32}, {ValueType::f32, ValueType::f32}}; inline constexpr OpSignature f64_f64_to_f64{{ValueType::f64}, {ValueType::f64, ValueType::f64}}; inline constexpr OpSignature v128_v128_to_v128{{ValueType::v128}, {ValueType::v128, ValueType::v128}}; inline constexpr OpSignature i64_i64_to_i32{{ValueType::i32}, {ValueType::i64, ValueType::i64}}; inline constexpr OpSignature f32_f32_to_i32{{ValueType::i32}, {ValueType::f32, ValueType::f32}}; inline constexpr OpSignature f64_f64_to_i32{{ValueType::i32}, {ValueType::f64, ValueType::f64}}; inline constexpr OpSignature v128_v128_v128_to_v128{ {ValueType::v128}, {ValueType::v128, ValueType::v128, ValueType::v128}}; inline constexpr OpSignature v128_i32_to_v128{{ValueType::v128}, {ValueType::v128, ValueType::i32}}; inline constexpr OpSignature v128_i64_to_v128{{ValueType::v128}, {ValueType::v128, ValueType::i64}}; inline constexpr OpSignature v128_f32_to_v128{{ValueType::v128}, {ValueType::v128, ValueType::f32}}; inline constexpr OpSignature v128_f64_to_v128{{ValueType::v128}, {ValueType::v128, ValueType::f64}}; // Memory/table index polymorphic signatures. inline OpSignature load(const Module& module, const BaseLoadOrStoreImm& imm, ValueType resultType) { return OpSignature({resultType}, {asValueType(module.memories.getType(imm.memoryIndex).indexType)}); } inline OpSignature load_i32(const Module& module, const BaseLoadOrStoreImm& imm) { return load(module, imm, ValueType::i32); } inline OpSignature load_i64(const Module& module, const BaseLoadOrStoreImm& imm) { return load(module, imm, ValueType::i64); } inline OpSignature load_f32(const Module& module, const BaseLoadOrStoreImm& imm) { return load(module, imm, ValueType::f32); } inline OpSignature load_f64(const Module& module, const BaseLoadOrStoreImm& imm) { return load(module, imm, ValueType::f64); } inline OpSignature load_v128(const Module& module, const BaseLoadOrStoreImm& imm) { return load(module, imm, ValueType::v128); } template inline OpSignature load_v128_lane( const Module& module, const LoadOrStoreLaneImm& imm) { return OpSignature( {ValueType::v128}, {asValueType(module.memories.getType(imm.memoryIndex).indexType), ValueType::v128}); } inline OpSignature store(const Module& module, const BaseLoadOrStoreImm& imm, ValueType valueType) { return OpSignature( {}, {asValueType(module.memories.getType(imm.memoryIndex).indexType), valueType}); } inline OpSignature store_i32(const Module& module, const BaseLoadOrStoreImm& imm) { return store(module, imm, ValueType::i32); } inline OpSignature store_i64(const Module& module, const BaseLoadOrStoreImm& imm) { return store(module, imm, ValueType::i64); } inline OpSignature store_f32(const Module& module, const BaseLoadOrStoreImm& imm) { return store(module, imm, ValueType::f32); } inline OpSignature store_f64(const Module& module, const BaseLoadOrStoreImm& imm) { return store(module, imm, ValueType::f64); } inline OpSignature store_v128(const Module& module, const BaseLoadOrStoreImm& imm) { return store(module, imm, ValueType::v128); } template inline OpSignature store_v128_lane( const Module& module, const LoadOrStoreLaneImm& imm) { return store(module, imm, ValueType::v128); } template inline OpSignature load_v128xN(const Module& module, const BaseLoadOrStoreImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); switch(numVectors) { case 2: return OpSignature({ValueType::v128, ValueType::v128}, {indexType}); case 3: return OpSignature({ValueType::v128, ValueType::v128, ValueType::v128}, {indexType}); case 4: return OpSignature( {ValueType::v128, ValueType::v128, ValueType::v128, ValueType::v128}, {indexType}); default: WAVM_UNREACHABLE(); }; } template inline OpSignature store_v128xN(const Module& module, const BaseLoadOrStoreImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); switch(numVectors) { case 2: return OpSignature({}, {indexType, ValueType::v128, ValueType::v128}); case 3: return OpSignature({}, {indexType, ValueType::v128, ValueType::v128, ValueType::v128}); case 4: return OpSignature({}, {indexType, ValueType::v128, ValueType::v128, ValueType::v128, ValueType::v128}); default: WAVM_UNREACHABLE(); }; } inline OpSignature size(const Module& module, const MemoryImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({indexType}, {}); } inline OpSignature size(const Module& module, const TableImm& imm) { const ValueType indexType = asValueType(module.tables.getType(imm.tableIndex).indexType); return OpSignature({indexType}, {}); } inline OpSignature grow(const Module& module, const MemoryImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({indexType}, {indexType}); } inline OpSignature init(const Module& module, const DataSegmentAndMemImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({}, {indexType, indexType, indexType}); } inline OpSignature init(const Module& module, const ElemSegmentAndTableImm& imm) { const ValueType indexType = asValueType(module.tables.getType(imm.tableIndex).indexType); return OpSignature({}, {indexType, indexType, indexType}); } inline OpSignature copy(const Module& module, const MemoryCopyImm& imm) { const ValueType destIndexType = asValueType(module.memories.getType(imm.destMemoryIndex).indexType); const ValueType sourceIndexType = asValueType(module.memories.getType(imm.sourceMemoryIndex).indexType); const ValueType numBytesType = destIndexType == ValueType::i64 && sourceIndexType == ValueType::i64 ? ValueType::i64 : ValueType::i32; return OpSignature({}, {destIndexType, sourceIndexType, numBytesType}); } inline OpSignature copy(const Module& module, const TableCopyImm& imm) { const ValueType destIndexType = asValueType(module.tables.getType(imm.destTableIndex).indexType); const ValueType sourceIndexType = asValueType(module.tables.getType(imm.sourceTableIndex).indexType); const ValueType numBytesType = destIndexType == ValueType::i64 && sourceIndexType == ValueType::i64 ? ValueType::i64 : ValueType::i32; return OpSignature({}, {destIndexType, sourceIndexType, numBytesType}); } inline OpSignature fill(const Module& module, const MemoryImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({}, {indexType, ValueType::i32, indexType}); } inline OpSignature fill(const Module& module, const TableImm& imm) { const TableType& tableType = module.tables.getType(imm.tableIndex); const ValueType indexType = asValueType(tableType.indexType); const ValueType elementType = asValueType(tableType.elementType); return OpSignature({}, {indexType, elementType, indexType}); } inline OpSignature notify(const Module& module, const BaseLoadOrStoreImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({ValueType::i32}, {indexType, ValueType::i32}); } inline OpSignature wait32(const Module& module, const BaseLoadOrStoreImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({ValueType::i32}, {indexType, ValueType::i32, ValueType::i64}); } inline OpSignature wait64(const Module& module, const BaseLoadOrStoreImm& imm) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({ValueType::i32}, {indexType, ValueType::i64, ValueType::i64}); } inline OpSignature atomicrmw(const Module& module, const BaseLoadOrStoreImm& imm, ValueType valueType) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({valueType}, {indexType, valueType}); } inline OpSignature atomicrmw_i32(const Module& module, const BaseLoadOrStoreImm& imm) { return atomicrmw(module, imm, ValueType::i32); } inline OpSignature atomicrmw_i64(const Module& module, const BaseLoadOrStoreImm& imm) { return atomicrmw(module, imm, ValueType::i64); } inline OpSignature atomiccmpxchg(const Module& module, const BaseLoadOrStoreImm& imm, ValueType valueType) { const ValueType indexType = asValueType(module.memories.getType(imm.memoryIndex).indexType); return OpSignature({valueType}, {indexType, valueType, valueType}); } inline OpSignature atomiccmpxchg_i32(const Module& module, const BaseLoadOrStoreImm& imm) { return atomiccmpxchg(module, imm, ValueType::i32); } inline OpSignature atomiccmpxchg_i64(const Module& module, const BaseLoadOrStoreImm& imm) { return atomiccmpxchg(module, imm, ValueType::i64); } }; }}; ================================================ FILE: Include/WAVM/IR/OperatorTable.h ================================================ // IWYU pragma: private, include "WAVM/IR/Operators.h" // Don't include this file directly; include Operators.h instead // clang-format off // Enumerate the WebAssembly operators #define WAVM_ENUM_CONTROL_OPERATORS(visitOp) \ visitOp(0x0002, block , "block" , ControlStructureImm , POLYMORPHIC , mvp ) \ visitOp(0x0003, loop , "loop" , ControlStructureImm , POLYMORPHIC , mvp ) \ visitOp(0x0004, if_ , "if" , ControlStructureImm , POLYMORPHIC , mvp ) \ visitOp(0x0005, else_ , "else" , NoImm , POLYMORPHIC , mvp ) \ visitOp(0x000b, end , "end" , NoImm , POLYMORPHIC , mvp ) \ visitOp(0xfb02, try_ , "try" , ControlStructureImm , POLYMORPHIC , exceptionHandling ) \ visitOp(0xfb03, catch_ , "catch" , ExceptionTypeImm , POLYMORPHIC , exceptionHandling ) \ visitOp(0xfb04, catch_all , "catch_all" , NoImm , POLYMORPHIC , exceptionHandling ) #define WAVM_ENUM_PARAMETRIC_OPERATORS(visitOp) \ /* Control flow */ \ visitOp(0x0000, unreachable , "unreachable" , NoImm , POLYMORPHIC , mvp ) \ visitOp(0x000c, br , "br" , BranchImm , POLYMORPHIC , mvp ) \ visitOp(0x000d, br_if , "br_if" , BranchImm , POLYMORPHIC , mvp ) \ visitOp(0x000e, br_table , "br_table" , BranchTableImm , POLYMORPHIC , mvp ) \ visitOp(0x000f, return_ , "return" , NoImm , POLYMORPHIC , mvp ) \ visitOp(0x0010, call , "call" , FunctionImm , POLYMORPHIC , mvp ) \ visitOp(0x0011, call_indirect , "call_indirect" , CallIndirectImm , POLYMORPHIC , mvp ) \ /* Stack manipulation */ \ visitOp(0x001a, drop , "drop" , NoImm , POLYMORPHIC , mvp ) \ /* Variables */ \ visitOp(0x0020, local_get , "local.get" , GetOrSetVariableImm, POLYMORPHIC , mvp ) \ visitOp(0x0021, local_set , "local.set" , GetOrSetVariableImm, POLYMORPHIC , mvp ) \ visitOp(0x0022, local_tee , "local.tee" , GetOrSetVariableImm, POLYMORPHIC , mvp ) \ visitOp(0x0023, global_get , "global.get" , GetOrSetVariableImm , POLYMORPHIC , mvp ) \ visitOp(0x0024, global_set , "global.set" , GetOrSetVariableImm , POLYMORPHIC , mvp ) \ /* Table access */ \ visitOp(0x0025, table_get , "table.get" , TableImm , POLYMORPHIC , referenceTypes ) \ visitOp(0x0026, table_set , "table.set" , TableImm , POLYMORPHIC , referenceTypes ) \ visitOp(0xfc0f, table_grow , "table.grow" , TableImm , POLYMORPHIC , referenceTypes ) \ visitOp(0xfc11, table_fill , "table.fill" , TableImm , POLYMORPHIC , referenceTypes ) \ /* Exceptions */ \ visitOp(0xfb00, throw_ , "throw" , ExceptionTypeImm , POLYMORPHIC , exceptionHandling ) \ visitOp(0xfb01, rethrow , "rethrow" , RethrowImm , POLYMORPHIC , exceptionHandling ) \ /* References */ \ visitOp(0x00d0, ref_null , "ref.null" , ReferenceTypeImm , POLYMORPHIC , referenceTypes ) \ visitOp(0x00d1, ref_is_null , "ref.is_null" , NoImm , POLYMORPHIC , referenceTypes ) #define WAVM_ENUM_OVERLOADED_OPERATORS(visitOp) \ /* visitOp(0x001b, select , "select" , NoImm , POLYMORPHIC , mvp )*/ \ visitOp(0x001c, select , "select" , SelectImm , POLYMORPHIC , mvp ) #define WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(visitOp) \ /* Scalar load/store instructions */ \ visitOp(0x0028, i32_load , "i32.load" , LoadOrStoreImm<2> , load_i32 , mvp ) \ visitOp(0x0029, i64_load , "i64.load" , LoadOrStoreImm<3> , load_i64 , mvp ) \ visitOp(0x002a, f32_load , "f32.load" , LoadOrStoreImm<2> , load_f32 , mvp ) \ visitOp(0x002b, f64_load , "f64.load" , LoadOrStoreImm<3> , load_f64 , mvp ) \ visitOp(0x002c, i32_load8_s , "i32.load8_s" , LoadOrStoreImm<0> , load_i32 , mvp ) \ visitOp(0x002d, i32_load8_u , "i32.load8_u" , LoadOrStoreImm<0> , load_i32 , mvp ) \ visitOp(0x002e, i32_load16_s , "i32.load16_s" , LoadOrStoreImm<1> , load_i32 , mvp ) \ visitOp(0x002f, i32_load16_u , "i32.load16_u" , LoadOrStoreImm<1> , load_i32 , mvp ) \ visitOp(0x0030, i64_load8_s , "i64.load8_s" , LoadOrStoreImm<0> , load_i64 , mvp ) \ visitOp(0x0031, i64_load8_u , "i64.load8_u" , LoadOrStoreImm<0> , load_i64 , mvp ) \ visitOp(0x0032, i64_load16_s , "i64.load16_s" , LoadOrStoreImm<1> , load_i64 , mvp ) \ visitOp(0x0033, i64_load16_u , "i64.load16_u" , LoadOrStoreImm<1> , load_i64 , mvp ) \ visitOp(0x0034, i64_load32_s , "i64.load32_s" , LoadOrStoreImm<2> , load_i64 , mvp ) \ visitOp(0x0035, i64_load32_u , "i64.load32_u" , LoadOrStoreImm<2> , load_i64 , mvp ) \ visitOp(0x0036, i32_store , "i32.store" , LoadOrStoreImm<2> , store_i32 , mvp ) \ visitOp(0x0037, i64_store , "i64.store" , LoadOrStoreImm<3> , store_i64 , mvp ) \ visitOp(0x0038, f32_store , "f32.store" , LoadOrStoreImm<2> , store_f32 , mvp ) \ visitOp(0x0039, f64_store , "f64.store" , LoadOrStoreImm<3> , store_f64 , mvp ) \ visitOp(0x003a, i32_store8 , "i32.store8" , LoadOrStoreImm<0> , store_i32 , mvp ) \ visitOp(0x003b, i32_store16 , "i32.store16" , LoadOrStoreImm<1> , store_i32 , mvp ) \ visitOp(0x003c, i64_store8 , "i64.store8" , LoadOrStoreImm<0> , store_i64 , mvp ) \ visitOp(0x003d, i64_store16 , "i64.store16" , LoadOrStoreImm<1> , store_i64 , mvp ) \ visitOp(0x003e, i64_store32 , "i64.store32" , LoadOrStoreImm<2> , store_i64 , mvp ) \ /* Memory size */ \ visitOp(0x003f, memory_size , "memory.size" , MemoryImm , size , mvp ) \ visitOp(0x0040, memory_grow , "memory.grow" , MemoryImm , grow , mvp ) \ /* Bulk memory/table operators */ \ visitOp(0xfc08, memory_init , "memory.init" , DataSegmentAndMemImm , init , bulkMemoryOperations ) \ visitOp(0xfc0a, memory_copy , "memory.copy" , MemoryCopyImm , copy , bulkMemoryOperations ) \ visitOp(0xfc0b, memory_fill , "memory.fill" , MemoryImm , fill , bulkMemoryOperations ) \ visitOp(0xfc0c, table_init , "table.init" , ElemSegmentAndTableImm , init , bulkMemoryOperations ) \ visitOp(0xfc0e, table_copy , "table.copy" , TableCopyImm , copy , bulkMemoryOperations ) \ visitOp(0xfc10, table_size , "table.size" , TableImm , size , referenceTypes ) \ /* v128 load/store */ \ visitOp(0xfd00, v128_load , "v128.load" , LoadOrStoreImm<4> , load_v128 , simd ) \ visitOp(0xfd01, v128_load8x8_s , "v128.load8x8_s" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd02, v128_load8x8_u , "v128.load8x8_u" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd03, v128_load16x4_s , "v128.load16x4_s" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd04, v128_load16x4_u , "v128.load16x4_u" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd05, v128_load32x2_s , "v128.load32x2_s" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd06, v128_load32x2_u , "v128.load32x2_u" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd07, v128_load8_splat , "v128.load8_splat" , LoadOrStoreImm<0> , load_v128 , simd ) \ visitOp(0xfd08, v128_load16_splat , "v128.load16_splat" , LoadOrStoreImm<1> , load_v128 , simd ) \ visitOp(0xfd09, v128_load32_splat , "v128.load32_splat" , LoadOrStoreImm<2> , load_v128 , simd ) \ visitOp(0xfd0a, v128_load64_splat , "v128.load64_splat" , LoadOrStoreImm<3> , load_v128 , simd ) \ visitOp(0xfd0b, v128_store , "v128.store" , LoadOrStoreImm<4> , store_v128 , simd ) \ visitOp(0xfd54, v128_load8_lane , "v128.load8_lane" , LoadOrStoreI8x16LaneImm , load_v128_lane , simd ) \ visitOp(0xfd55, v128_load16_lane , "v128.load16_lane" , LoadOrStoreI16x8LaneImm , load_v128_lane , simd ) \ visitOp(0xfd56, v128_load32_lane , "v128.load32_lane" , LoadOrStoreI32x4LaneImm , load_v128_lane , simd ) \ visitOp(0xfd57, v128_load64_lane , "v128.load64_lane" , LoadOrStoreI64x2LaneImm , load_v128_lane , simd ) \ visitOp(0xfd58, v128_store8_lane , "v128.store8_lane" , LoadOrStoreI8x16LaneImm , store_v128_lane , simd ) \ visitOp(0xfd59, v128_store16_lane , "v128.store16_lane" , LoadOrStoreI16x8LaneImm , store_v128_lane , simd ) \ visitOp(0xfd5a, v128_store32_lane , "v128.store32_lane" , LoadOrStoreI32x4LaneImm , store_v128_lane , simd ) \ visitOp(0xfd5b, v128_store64_lane , "v128.store64_lane" , LoadOrStoreI64x2LaneImm , store_v128_lane , simd ) \ visitOp(0xfd5c, v128_load32_zero , "v128.load32_zero" , LoadOrStoreImm<2> , load_v128 , simd ) \ visitOp(0xfd5d, v128_load64_zero , "v128.load64_zero" , LoadOrStoreImm<3> , load_v128 , simd ) \ /* v128 interleaved load/store instructions */ \ visitOp(0xff00, v8x16_load_interleaved_2 , "v8x16.load_interleaved_2" , LoadOrStoreImm<4> , load_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff01, v8x16_load_interleaved_3 , "v8x16.load_interleaved_3" , LoadOrStoreImm<4> , load_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff02, v8x16_load_interleaved_4 , "v8x16.load_interleaved_4" , LoadOrStoreImm<4> , load_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff03, v16x8_load_interleaved_2 , "v16x8.load_interleaved_2" , LoadOrStoreImm<4> , load_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff04, v16x8_load_interleaved_3 , "v16x8.load_interleaved_3" , LoadOrStoreImm<4> , load_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff05, v16x8_load_interleaved_4 , "v16x8.load_interleaved_4" , LoadOrStoreImm<4> , load_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff06, v32x4_load_interleaved_2 , "v32x4.load_interleaved_2" , LoadOrStoreImm<4> , load_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff07, v32x4_load_interleaved_3 , "v32x4.load_interleaved_3" , LoadOrStoreImm<4> , load_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff08, v32x4_load_interleaved_4 , "v32x4.load_interleaved_4" , LoadOrStoreImm<4> , load_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff09, v64x2_load_interleaved_2 , "v64x2.load_interleaved_2" , LoadOrStoreImm<4> , load_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff0a, v64x2_load_interleaved_3 , "v64x2.load_interleaved_3" , LoadOrStoreImm<4> , load_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff0b, v64x2_load_interleaved_4 , "v64x2.load_interleaved_4" , LoadOrStoreImm<4> , load_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff0c, v8x16_store_interleaved_2 , "v8x16.store_interleaved_2" , LoadOrStoreImm<4> , store_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff0d, v8x16_store_interleaved_3 , "v8x16.store_interleaved_3" , LoadOrStoreImm<4> , store_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff0e, v8x16_store_interleaved_4 , "v8x16.store_interleaved_4" , LoadOrStoreImm<4> , store_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff0f, v16x8_store_interleaved_2 , "v16x8.store_interleaved_2" , LoadOrStoreImm<4> , store_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff10, v16x8_store_interleaved_3 , "v16x8.store_interleaved_3" , LoadOrStoreImm<4> , store_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff11, v16x8_store_interleaved_4 , "v16x8.store_interleaved_4" , LoadOrStoreImm<4> , store_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff12, v32x4_store_interleaved_2 , "v32x4.store_interleaved_2" , LoadOrStoreImm<4> , store_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff13, v32x4_store_interleaved_3 , "v32x4.store_interleaved_3" , LoadOrStoreImm<4> , store_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff14, v32x4_store_interleaved_4 , "v32x4.store_interleaved_4" , LoadOrStoreImm<4> , store_v128xN<4> , interleavedLoadStore ) \ visitOp(0xff15, v64x2_store_interleaved_2 , "v64x2.store_interleaved_2" , LoadOrStoreImm<4> , store_v128xN<2> , interleavedLoadStore ) \ visitOp(0xff16, v64x2_store_interleaved_3 , "v64x2.store_interleaved_3" , LoadOrStoreImm<4> , store_v128xN<3> , interleavedLoadStore ) \ visitOp(0xff17, v64x2_store_interleaved_4 , "v64x2.store_interleaved_4" , LoadOrStoreImm<4> , store_v128xN<4> , interleavedLoadStore ) \ /* Atomic wait/wake */ \ visitOp(0xfe00, memory_atomic_notify , "memory.atomic.notify" , AtomicLoadOrStoreImm<2> , notify , atomics ) \ visitOp(0xfe01, memory_atomic_wait32 , "memory.atomic.wait32" , AtomicLoadOrStoreImm<2> , wait32 , atomics ) \ visitOp(0xfe02, memory_atomic_wait64 , "memory.atomic.wait64" , AtomicLoadOrStoreImm<3> , wait64 , atomics ) \ /* Atomic load/store */ \ visitOp(0xfe10, i32_atomic_load , "i32.atomic.load" , AtomicLoadOrStoreImm<2> , load_i32 , atomics ) \ visitOp(0xfe11, i64_atomic_load , "i64.atomic.load" , AtomicLoadOrStoreImm<3> , load_i64 , atomics ) \ visitOp(0xfe12, i32_atomic_load8_u , "i32.atomic.load8_u" , AtomicLoadOrStoreImm<0> , load_i32 , atomics ) \ visitOp(0xfe13, i32_atomic_load16_u , "i32.atomic.load16_u" , AtomicLoadOrStoreImm<1> , load_i32 , atomics ) \ visitOp(0xfe14, i64_atomic_load8_u , "i64.atomic.load8_u" , AtomicLoadOrStoreImm<0> , load_i64 , atomics ) \ visitOp(0xfe15, i64_atomic_load16_u , "i64.atomic.load16_u" , AtomicLoadOrStoreImm<1> , load_i64 , atomics ) \ visitOp(0xfe16, i64_atomic_load32_u , "i64.atomic.load32_u" , AtomicLoadOrStoreImm<2> , load_i64 , atomics ) \ visitOp(0xfe17, i32_atomic_store , "i32.atomic.store" , AtomicLoadOrStoreImm<2> , store_i32 , atomics ) \ visitOp(0xfe18, i64_atomic_store , "i64.atomic.store" , AtomicLoadOrStoreImm<3> , store_i64 , atomics ) \ visitOp(0xfe19, i32_atomic_store8 , "i32.atomic.store8" , AtomicLoadOrStoreImm<0> , store_i32 , atomics ) \ visitOp(0xfe1a, i32_atomic_store16 , "i32.atomic.store16" , AtomicLoadOrStoreImm<1> , store_i32 , atomics ) \ visitOp(0xfe1b, i64_atomic_store8 , "i64.atomic.store8" , AtomicLoadOrStoreImm<0> , store_i64 , atomics ) \ visitOp(0xfe1c, i64_atomic_store16 , "i64.atomic.store16" , AtomicLoadOrStoreImm<1> , store_i64 , atomics ) \ visitOp(0xfe1d, i64_atomic_store32 , "i64.atomic.store32" , AtomicLoadOrStoreImm<2> , store_i64 , atomics ) \ /* Atomic read-modify-write */ \ visitOp(0xfe1e, i32_atomic_rmw_add , "i32.atomic.rmw.add" , AtomicLoadOrStoreImm<2> , atomicrmw_i32 , atomics ) \ visitOp(0xfe1f, i64_atomic_rmw_add , "i64.atomic.rmw.add" , AtomicLoadOrStoreImm<3> , atomicrmw_i64 , atomics ) \ visitOp(0xfe20, i32_atomic_rmw8_add_u , "i32.atomic.rmw8.add_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i32 , atomics ) \ visitOp(0xfe21, i32_atomic_rmw16_add_u , "i32.atomic.rmw16.add_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i32 , atomics ) \ visitOp(0xfe22, i64_atomic_rmw8_add_u , "i64.atomic.rmw8.add_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i64 , atomics ) \ visitOp(0xfe23, i64_atomic_rmw16_add_u , "i64.atomic.rmw16.add_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i64 , atomics ) \ visitOp(0xfe24, i64_atomic_rmw32_add_u , "i64.atomic.rmw32.add_u" , AtomicLoadOrStoreImm<2> , atomicrmw_i64 , atomics ) \ visitOp(0xfe25, i32_atomic_rmw_sub , "i32.atomic.rmw.sub" , AtomicLoadOrStoreImm<2> , atomicrmw_i32 , atomics ) \ visitOp(0xfe26, i64_atomic_rmw_sub , "i64.atomic.rmw.sub" , AtomicLoadOrStoreImm<3> , atomicrmw_i64 , atomics ) \ visitOp(0xfe27, i32_atomic_rmw8_sub_u , "i32.atomic.rmw8.sub_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i32 , atomics ) \ visitOp(0xfe28, i32_atomic_rmw16_sub_u , "i32.atomic.rmw16.sub_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i32 , atomics ) \ visitOp(0xfe29, i64_atomic_rmw8_sub_u , "i64.atomic.rmw8.sub_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i64 , atomics ) \ visitOp(0xfe2a, i64_atomic_rmw16_sub_u , "i64.atomic.rmw16.sub_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i64 , atomics ) \ visitOp(0xfe2b, i64_atomic_rmw32_sub_u , "i64.atomic.rmw32.sub_u" , AtomicLoadOrStoreImm<2> , atomicrmw_i64 , atomics ) \ visitOp(0xfe2c, i32_atomic_rmw_and , "i32.atomic.rmw.and" , AtomicLoadOrStoreImm<2> , atomicrmw_i32 , atomics ) \ visitOp(0xfe2d, i64_atomic_rmw_and , "i64.atomic.rmw.and" , AtomicLoadOrStoreImm<3> , atomicrmw_i64 , atomics ) \ visitOp(0xfe2e, i32_atomic_rmw8_and_u , "i32.atomic.rmw8.and_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i32 , atomics ) \ visitOp(0xfe2f, i32_atomic_rmw16_and_u , "i32.atomic.rmw16.and_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i32 , atomics ) \ visitOp(0xfe30, i64_atomic_rmw8_and_u , "i64.atomic.rmw8.and_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i64 , atomics ) \ visitOp(0xfe31, i64_atomic_rmw16_and_u , "i64.atomic.rmw16.and_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i64 , atomics ) \ visitOp(0xfe32, i64_atomic_rmw32_and_u , "i64.atomic.rmw32.and_u" , AtomicLoadOrStoreImm<2> , atomicrmw_i64 , atomics ) \ visitOp(0xfe33, i32_atomic_rmw_or , "i32.atomic.rmw.or" , AtomicLoadOrStoreImm<2> , atomicrmw_i32 , atomics ) \ visitOp(0xfe34, i64_atomic_rmw_or , "i64.atomic.rmw.or" , AtomicLoadOrStoreImm<3> , atomicrmw_i64 , atomics ) \ visitOp(0xfe35, i32_atomic_rmw8_or_u , "i32.atomic.rmw8.or_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i32 , atomics ) \ visitOp(0xfe36, i32_atomic_rmw16_or_u , "i32.atomic.rmw16.or_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i32 , atomics ) \ visitOp(0xfe37, i64_atomic_rmw8_or_u , "i64.atomic.rmw8.or_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i64 , atomics ) \ visitOp(0xfe38, i64_atomic_rmw16_or_u , "i64.atomic.rmw16.or_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i64 , atomics ) \ visitOp(0xfe39, i64_atomic_rmw32_or_u , "i64.atomic.rmw32.or_u" , AtomicLoadOrStoreImm<2> , atomicrmw_i64 , atomics ) \ visitOp(0xfe3a, i32_atomic_rmw_xor , "i32.atomic.rmw.xor" , AtomicLoadOrStoreImm<2> , atomicrmw_i32 , atomics ) \ visitOp(0xfe3b, i64_atomic_rmw_xor , "i64.atomic.rmw.xor" , AtomicLoadOrStoreImm<3> , atomicrmw_i64 , atomics ) \ visitOp(0xfe3c, i32_atomic_rmw8_xor_u , "i32.atomic.rmw8.xor_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i32 , atomics ) \ visitOp(0xfe3d, i32_atomic_rmw16_xor_u , "i32.atomic.rmw16.xor_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i32 , atomics ) \ visitOp(0xfe3e, i64_atomic_rmw8_xor_u , "i64.atomic.rmw8.xor_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i64 , atomics ) \ visitOp(0xfe3f, i64_atomic_rmw16_xor_u , "i64.atomic.rmw16.xor_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i64 , atomics ) \ visitOp(0xfe40, i64_atomic_rmw32_xor_u , "i64.atomic.rmw32.xor_u" , AtomicLoadOrStoreImm<2> , atomicrmw_i64 , atomics ) \ visitOp(0xfe41, i32_atomic_rmw_xchg , "i32.atomic.rmw.xchg" , AtomicLoadOrStoreImm<2> , atomicrmw_i32 , atomics ) \ visitOp(0xfe42, i64_atomic_rmw_xchg , "i64.atomic.rmw.xchg" , AtomicLoadOrStoreImm<3> , atomicrmw_i64 , atomics ) \ visitOp(0xfe43, i32_atomic_rmw8_xchg_u , "i32.atomic.rmw8.xchg_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i32 , atomics ) \ visitOp(0xfe44, i32_atomic_rmw16_xchg_u , "i32.atomic.rmw16.xchg_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i32 , atomics ) \ visitOp(0xfe45, i64_atomic_rmw8_xchg_u , "i64.atomic.rmw8.xchg_u" , AtomicLoadOrStoreImm<0> , atomicrmw_i64 , atomics ) \ visitOp(0xfe46, i64_atomic_rmw16_xchg_u , "i64.atomic.rmw16.xchg_u" , AtomicLoadOrStoreImm<1> , atomicrmw_i64 , atomics ) \ visitOp(0xfe47, i64_atomic_rmw32_xchg_u , "i64.atomic.rmw32.xchg_u" , AtomicLoadOrStoreImm<2> , atomicrmw_i64 , atomics ) \ visitOp(0xfe48, i32_atomic_rmw_cmpxchg , "i32.atomic.rmw.cmpxchg" , AtomicLoadOrStoreImm<2> , atomiccmpxchg_i32 , atomics ) \ visitOp(0xfe49, i64_atomic_rmw_cmpxchg , "i64.atomic.rmw.cmpxchg" , AtomicLoadOrStoreImm<3> , atomiccmpxchg_i64 , atomics ) \ visitOp(0xfe4a, i32_atomic_rmw8_cmpxchg_u , "i32.atomic.rmw8.cmpxchg_u" , AtomicLoadOrStoreImm<0> , atomiccmpxchg_i32 , atomics ) \ visitOp(0xfe4b, i32_atomic_rmw16_cmpxchg_u, "i32.atomic.rmw16.cmpxchg_u", AtomicLoadOrStoreImm<1> , atomiccmpxchg_i32 , atomics ) \ visitOp(0xfe4c, i64_atomic_rmw8_cmpxchg_u , "i64.atomic.rmw8.cmpxchg_u" , AtomicLoadOrStoreImm<0> , atomiccmpxchg_i64 , atomics ) \ visitOp(0xfe4d, i64_atomic_rmw16_cmpxchg_u, "i64.atomic.rmw16.cmpxchg_u", AtomicLoadOrStoreImm<1> , atomiccmpxchg_i64 , atomics ) \ visitOp(0xfe4e, i64_atomic_rmw32_cmpxchg_u, "i64.atomic.rmw32.cmpxchg_u", AtomicLoadOrStoreImm<2> , atomiccmpxchg_i64 , atomics ) #define WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(visitOp) \ visitOp(0x0001, nop , "nop" , NoImm , none_to_none , mvp ) \ /* Literals */ \ visitOp(0x0041, i32_const , "i32.const" , LiteralImm , none_to_i32 , mvp ) \ visitOp(0x0042, i64_const , "i64.const" , LiteralImm , none_to_i64 , mvp ) \ visitOp(0x0043, f32_const , "f32.const" , LiteralImm , none_to_f32 , mvp ) \ visitOp(0x0044, f64_const , "f64.const" , LiteralImm , none_to_f64 , mvp ) \ /* Comparisons */ \ visitOp(0x0045, i32_eqz , "i32.eqz" , NoImm , i32_to_i32 , mvp ) \ visitOp(0x0046, i32_eq , "i32.eq" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0047, i32_ne , "i32.ne" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0048, i32_lt_s , "i32.lt_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0049, i32_lt_u , "i32.lt_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x004a, i32_gt_s , "i32.gt_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x004b, i32_gt_u , "i32.gt_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x004c, i32_le_s , "i32.le_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x004d, i32_le_u , "i32.le_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x004e, i32_ge_s , "i32.ge_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x004f, i32_ge_u , "i32.ge_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0050, i64_eqz , "i64.eqz" , NoImm , i64_to_i32 , mvp ) \ visitOp(0x0051, i64_eq , "i64.eq" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0052, i64_ne , "i64.ne" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0053, i64_lt_s , "i64.lt_s" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0054, i64_lt_u , "i64.lt_u" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0055, i64_gt_s , "i64.gt_s" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0056, i64_gt_u , "i64.gt_u" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0057, i64_le_s , "i64.le_s" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0058, i64_le_u , "i64.le_u" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x0059, i64_ge_s , "i64.ge_s" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x005a, i64_ge_u , "i64.ge_u" , NoImm , i64_i64_to_i32 , mvp ) \ visitOp(0x005b, f32_eq , "f32.eq" , NoImm , f32_f32_to_i32 , mvp ) \ visitOp(0x005c, f32_ne , "f32.ne" , NoImm , f32_f32_to_i32 , mvp ) \ visitOp(0x005d, f32_lt , "f32.lt" , NoImm , f32_f32_to_i32 , mvp ) \ visitOp(0x005e, f32_gt , "f32.gt" , NoImm , f32_f32_to_i32 , mvp ) \ visitOp(0x005f, f32_le , "f32.le" , NoImm , f32_f32_to_i32 , mvp ) \ visitOp(0x0060, f32_ge , "f32.ge" , NoImm , f32_f32_to_i32 , mvp ) \ visitOp(0x0061, f64_eq , "f64.eq" , NoImm , f64_f64_to_i32 , mvp ) \ visitOp(0x0062, f64_ne , "f64.ne" , NoImm , f64_f64_to_i32 , mvp ) \ visitOp(0x0063, f64_lt , "f64.lt" , NoImm , f64_f64_to_i32 , mvp ) \ visitOp(0x0064, f64_gt , "f64.gt" , NoImm , f64_f64_to_i32 , mvp ) \ visitOp(0x0065, f64_le , "f64.le" , NoImm , f64_f64_to_i32 , mvp ) \ visitOp(0x0066, f64_ge , "f64.ge" , NoImm , f64_f64_to_i32 , mvp ) \ /* i32 arithmetic */ \ visitOp(0x0067, i32_clz , "i32.clz" , NoImm , i32_to_i32 , mvp ) \ visitOp(0x0068, i32_ctz , "i32.ctz" , NoImm , i32_to_i32 , mvp ) \ visitOp(0x0069, i32_popcnt , "i32.popcnt" , NoImm , i32_to_i32 , mvp ) \ visitOp(0x006a, i32_add , "i32.add" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x006b, i32_sub , "i32.sub" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x006c, i32_mul , "i32.mul" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x006d, i32_div_s , "i32.div_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x006e, i32_div_u , "i32.div_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x006f, i32_rem_s , "i32.rem_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0070, i32_rem_u , "i32.rem_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0071, i32_and_ , "i32.and" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0072, i32_or_ , "i32.or" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0073, i32_xor_ , "i32.xor" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0074, i32_shl , "i32.shl" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0075, i32_shr_s , "i32.shr_s" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0076, i32_shr_u , "i32.shr_u" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0077, i32_rotl , "i32.rotl" , NoImm , i32_i32_to_i32 , mvp ) \ visitOp(0x0078, i32_rotr , "i32.rotr" , NoImm , i32_i32_to_i32 , mvp ) \ /* i64 arithmetic */ \ visitOp(0x0079, i64_clz , "i64.clz" , NoImm , i64_to_i64 , mvp ) \ visitOp(0x007a, i64_ctz , "i64.ctz" , NoImm , i64_to_i64 , mvp ) \ visitOp(0x007b, i64_popcnt , "i64.popcnt" , NoImm , i64_to_i64 , mvp ) \ visitOp(0x007c, i64_add , "i64.add" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x007d, i64_sub , "i64.sub" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x007e, i64_mul , "i64.mul" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x007f, i64_div_s , "i64.div_s" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0080, i64_div_u , "i64.div_u" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0081, i64_rem_s , "i64.rem_s" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0082, i64_rem_u , "i64.rem_u" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0083, i64_and_ , "i64.and" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0084, i64_or_ , "i64.or" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0085, i64_xor_ , "i64.xor" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0086, i64_shl , "i64.shl" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0087, i64_shr_s , "i64.shr_s" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0088, i64_shr_u , "i64.shr_u" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x0089, i64_rotl , "i64.rotl" , NoImm , i64_i64_to_i64 , mvp ) \ visitOp(0x008a, i64_rotr , "i64.rotr" , NoImm , i64_i64_to_i64 , mvp ) \ /* f32 arithmetic */ \ visitOp(0x008b, f32_abs , "f32.abs" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x008c, f32_neg , "f32.neg" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x008d, f32_ceil , "f32.ceil" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x008e, f32_floor , "f32.floor" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x008f, f32_trunc , "f32.trunc" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x0090, f32_nearest , "f32.nearest" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x0091, f32_sqrt , "f32.sqrt" , NoImm , f32_to_f32 , mvp ) \ visitOp(0x0092, f32_add , "f32.add" , NoImm , f32_f32_to_f32 , mvp ) \ visitOp(0x0093, f32_sub , "f32.sub" , NoImm , f32_f32_to_f32 , mvp ) \ visitOp(0x0094, f32_mul , "f32.mul" , NoImm , f32_f32_to_f32 , mvp ) \ visitOp(0x0095, f32_div , "f32.div" , NoImm , f32_f32_to_f32 , mvp ) \ visitOp(0x0096, f32_min , "f32.min" , NoImm , f32_f32_to_f32 , mvp ) \ visitOp(0x0097, f32_max , "f32.max" , NoImm , f32_f32_to_f32 , mvp ) \ visitOp(0x0098, f32_copysign , "f32.copysign" , NoImm , f32_f32_to_f32 , mvp ) \ /* f64 arithmetic */ \ visitOp(0x0099, f64_abs , "f64.abs" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x009a, f64_neg , "f64.neg" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x009b, f64_ceil , "f64.ceil" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x009c, f64_floor , "f64.floor" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x009d, f64_trunc , "f64.trunc" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x009e, f64_nearest , "f64.nearest" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x009f, f64_sqrt , "f64.sqrt" , NoImm , f64_to_f64 , mvp ) \ visitOp(0x00a0, f64_add , "f64.add" , NoImm , f64_f64_to_f64 , mvp ) \ visitOp(0x00a1, f64_sub , "f64.sub" , NoImm , f64_f64_to_f64 , mvp ) \ visitOp(0x00a2, f64_mul , "f64.mul" , NoImm , f64_f64_to_f64 , mvp ) \ visitOp(0x00a3, f64_div , "f64.div" , NoImm , f64_f64_to_f64 , mvp ) \ visitOp(0x00a4, f64_min , "f64.min" , NoImm , f64_f64_to_f64 , mvp ) \ visitOp(0x00a5, f64_max , "f64.max" , NoImm , f64_f64_to_f64 , mvp ) \ visitOp(0x00a6, f64_copysign , "f64.copysign" , NoImm , f64_f64_to_f64 , mvp ) \ /* Conversions */ \ visitOp(0x00a7, i32_wrap_i64 , "i32.wrap_i64" , NoImm , i64_to_i32 , mvp ) \ visitOp(0x00a8, i32_trunc_f32_s , "i32.trunc_f32_s" , NoImm , f32_to_i32 , mvp ) \ visitOp(0x00a9, i32_trunc_f32_u , "i32.trunc_f32_u" , NoImm , f32_to_i32 , mvp ) \ visitOp(0x00aa, i32_trunc_f64_s , "i32.trunc_f64_s" , NoImm , f64_to_i32 , mvp ) \ visitOp(0x00ab, i32_trunc_f64_u , "i32.trunc_f64_u" , NoImm , f64_to_i32 , mvp ) \ visitOp(0x00ac, i64_extend_i32_s , "i64.extend_i32_s" , NoImm , i32_to_i64 , mvp ) \ visitOp(0x00ad, i64_extend_i32_u , "i64.extend_i32_u" , NoImm , i32_to_i64 , mvp ) \ visitOp(0x00ae, i64_trunc_f32_s , "i64.trunc_f32_s" , NoImm , f32_to_i64 , mvp ) \ visitOp(0x00af, i64_trunc_f32_u , "i64.trunc_f32_u" , NoImm , f32_to_i64 , mvp ) \ visitOp(0x00b0, i64_trunc_f64_s , "i64.trunc_f64_s" , NoImm , f64_to_i64 , mvp ) \ visitOp(0x00b1, i64_trunc_f64_u , "i64.trunc_f64_u" , NoImm , f64_to_i64 , mvp ) \ visitOp(0x00b2, f32_convert_i32_s , "f32.convert_i32_s" , NoImm , i32_to_f32 , mvp ) \ visitOp(0x00b3, f32_convert_i32_u , "f32.convert_i32_u" , NoImm , i32_to_f32 , mvp ) \ visitOp(0x00b4, f32_convert_i64_s , "f32.convert_i64_s" , NoImm , i64_to_f32 , mvp ) \ visitOp(0x00b5, f32_convert_i64_u , "f32.convert_i64_u" , NoImm , i64_to_f32 , mvp ) \ visitOp(0x00b6, f32_demote_f64 , "f32.demote_f64" , NoImm , f64_to_f32 , mvp ) \ visitOp(0x00b7, f64_convert_i32_s , "f64.convert_i32_s" , NoImm , i32_to_f64 , mvp ) \ visitOp(0x00b8, f64_convert_i32_u , "f64.convert_i32_u" , NoImm , i32_to_f64 , mvp ) \ visitOp(0x00b9, f64_convert_i64_s , "f64.convert_i64_s" , NoImm , i64_to_f64 , mvp ) \ visitOp(0x00ba, f64_convert_i64_u , "f64.convert_i64_u" , NoImm , i64_to_f64 , mvp ) \ visitOp(0x00bb, f64_promote_f32 , "f64.promote_f32" , NoImm , f32_to_f64 , mvp ) \ visitOp(0x00bc, i32_reinterpret_f32 , "i32.reinterpret_f32" , NoImm , f32_to_i32 , mvp ) \ visitOp(0x00bd, i64_reinterpret_f64 , "i64.reinterpret_f64" , NoImm , f64_to_i64 , mvp ) \ visitOp(0x00be, f32_reinterpret_i32 , "f32.reinterpret_i32" , NoImm , i32_to_f32 , mvp ) \ visitOp(0x00bf, f64_reinterpret_i64 , "f64.reinterpret_i64" , NoImm , i64_to_f64 , mvp ) \ /* 8- and 16-bit sign extension operators */ \ visitOp(0x00c0, i32_extend8_s , "i32.extend8_s" , NoImm , i32_to_i32 , signExtension ) \ visitOp(0x00c1, i32_extend16_s , "i32.extend16_s" , NoImm , i32_to_i32 , signExtension ) \ visitOp(0x00c2, i64_extend8_s , "i64.extend8_s" , NoImm , i64_to_i64 , signExtension ) \ visitOp(0x00c3, i64_extend16_s , "i64.extend16_s" , NoImm , i64_to_i64 , signExtension ) \ visitOp(0x00c4, i64_extend32_s , "i64.extend32_s" , NoImm , i64_to_i64 , signExtension ) \ /* Reference type operators */ \ visitOp(0x00d2, ref_func , "ref.func" , FunctionRefImm , none_to_funcref , referenceTypes ) \ /* Saturating float->int truncation operators */ \ visitOp(0xfc00, i32_trunc_sat_f32_s , "i32.trunc_sat_f32_s" , NoImm , f32_to_i32 , nonTrappingFloatToInt ) \ visitOp(0xfc01, i32_trunc_sat_f32_u , "i32.trunc_sat_f32_u" , NoImm , f32_to_i32 , nonTrappingFloatToInt ) \ visitOp(0xfc02, i32_trunc_sat_f64_s , "i32.trunc_sat_f64_s" , NoImm , f64_to_i32 , nonTrappingFloatToInt ) \ visitOp(0xfc03, i32_trunc_sat_f64_u , "i32.trunc_sat_f64_u" , NoImm , f64_to_i32 , nonTrappingFloatToInt ) \ visitOp(0xfc04, i64_trunc_sat_f32_s , "i64.trunc_sat_f32_s" , NoImm , f32_to_i64 , nonTrappingFloatToInt ) \ visitOp(0xfc05, i64_trunc_sat_f32_u , "i64.trunc_sat_f32_u" , NoImm , f32_to_i64 , nonTrappingFloatToInt ) \ visitOp(0xfc06, i64_trunc_sat_f64_s , "i64.trunc_sat_f64_s" , NoImm , f64_to_i64 , nonTrappingFloatToInt ) \ visitOp(0xfc07, i64_trunc_sat_f64_u , "i64.trunc_sat_f64_u" , NoImm , f64_to_i64 , nonTrappingFloatToInt ) \ /* Bulk memory/table operators */ \ visitOp(0xfc09, data_drop , "data.drop" , DataSegmentImm , none_to_none , bulkMemoryOperations ) \ visitOp(0xfc0d, elem_drop , "elem.drop" , ElemSegmentImm , none_to_none , bulkMemoryOperations ) \ /* v128 constant */ \ visitOp(0xfd0c, v128_const , "v128.const" , LiteralImm , none_to_v128 , simd ) \ /* v128 lane manipulation */ \ visitOp(0xfd0d, i8x16_shuffle , "i8x16.shuffle" , ShuffleImm<16> , v128_v128_to_v128 , simd ) \ visitOp(0xfd0e, i8x16_swizzle , "i8x16.swizzle" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd0f, i8x16_splat , "i8x16.splat" , NoImm , i32_to_v128 , simd ) \ visitOp(0xfd10, i16x8_splat , "i16x8.splat" , NoImm , i32_to_v128 , simd ) \ visitOp(0xfd11, i32x4_splat , "i32x4.splat" , NoImm , i32_to_v128 , simd ) \ visitOp(0xfd12, i64x2_splat , "i64x2.splat" , NoImm , i64_to_v128 , simd ) \ visitOp(0xfd13, f32x4_splat , "f32x4.splat" , NoImm , f32_to_v128 , simd ) \ visitOp(0xfd14, f64x2_splat , "f64x2.splat" , NoImm , f64_to_v128 , simd ) \ visitOp(0xfd15, i8x16_extract_lane_s , "i8x16.extract_lane_s" , LaneIndexImm<16> , v128_to_i32 , simd ) \ visitOp(0xfd16, i8x16_extract_lane_u , "i8x16.extract_lane_u" , LaneIndexImm<16> , v128_to_i32 , simd ) \ visitOp(0xfd17, i8x16_replace_lane , "i8x16.replace_lane" , LaneIndexImm<16> , v128_i32_to_v128 , simd ) \ visitOp(0xfd18, i16x8_extract_lane_s , "i16x8.extract_lane_s" , LaneIndexImm<8> , v128_to_i32 , simd ) \ visitOp(0xfd19, i16x8_extract_lane_u , "i16x8.extract_lane_u" , LaneIndexImm<8> , v128_to_i32 , simd ) \ visitOp(0xfd1a, i16x8_replace_lane , "i16x8.replace_lane" , LaneIndexImm<8> , v128_i32_to_v128 , simd ) \ visitOp(0xfd1b, i32x4_extract_lane , "i32x4.extract_lane" , LaneIndexImm<4> , v128_to_i32 , simd ) \ visitOp(0xfd1c, i32x4_replace_lane , "i32x4.replace_lane" , LaneIndexImm<4> , v128_i32_to_v128 , simd ) \ visitOp(0xfd1d, i64x2_extract_lane , "i64x2.extract_lane" , LaneIndexImm<2> , v128_to_i64 , simd ) \ visitOp(0xfd1e, i64x2_replace_lane , "i64x2.replace_lane" , LaneIndexImm<2> , v128_i64_to_v128 , simd ) \ visitOp(0xfd1f, f32x4_extract_lane , "f32x4.extract_lane" , LaneIndexImm<4> , v128_to_f32 , simd ) \ visitOp(0xfd20, f32x4_replace_lane , "f32x4.replace_lane" , LaneIndexImm<4> , v128_f32_to_v128 , simd ) \ visitOp(0xfd21, f64x2_extract_lane , "f64x2.extract_lane" , LaneIndexImm<2> , v128_to_f64 , simd ) \ visitOp(0xfd22, f64x2_replace_lane , "f64x2.replace_lane" , LaneIndexImm<2> , v128_f64_to_v128 , simd ) \ /* v128 comparisons */ \ visitOp(0xfd23, i8x16_eq , "i8x16.eq" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd24, i8x16_ne , "i8x16.ne" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd25, i8x16_lt_s , "i8x16.lt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd26, i8x16_lt_u , "i8x16.lt_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd27, i8x16_gt_s , "i8x16.gt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd28, i8x16_gt_u , "i8x16.gt_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd29, i8x16_le_s , "i8x16.le_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd2a, i8x16_le_u , "i8x16.le_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd2b, i8x16_ge_s , "i8x16.ge_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd2c, i8x16_ge_u , "i8x16.ge_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd2d, i16x8_eq , "i16x8.eq" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd2e, i16x8_ne , "i16x8.ne" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd2f, i16x8_lt_s , "i16x8.lt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd30, i16x8_lt_u , "i16x8.lt_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd31, i16x8_gt_s , "i16x8.gt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd32, i16x8_gt_u , "i16x8.gt_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd33, i16x8_le_s , "i16x8.le_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd34, i16x8_le_u , "i16x8.le_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd35, i16x8_ge_s , "i16x8.ge_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd36, i16x8_ge_u , "i16x8.ge_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd37, i32x4_eq , "i32x4.eq" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd38, i32x4_ne , "i32x4.ne" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd39, i32x4_lt_s , "i32x4.lt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd3a, i32x4_lt_u , "i32x4.lt_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd3b, i32x4_gt_s , "i32x4.gt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd3c, i32x4_gt_u , "i32x4.gt_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd3d, i32x4_le_s , "i32x4.le_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd3e, i32x4_le_u , "i32x4.le_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd3f, i32x4_ge_s , "i32x4.ge_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd40, i32x4_ge_u , "i32x4.ge_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd41, f32x4_eq , "f32x4.eq" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd42, f32x4_ne , "f32x4.ne" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd43, f32x4_lt , "f32x4.lt" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd44, f32x4_gt , "f32x4.gt" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd45, f32x4_le , "f32x4.le" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd46, f32x4_ge , "f32x4.ge" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd47, f64x2_eq , "f64x2.eq" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd48, f64x2_ne , "f64x2.ne" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd49, f64x2_lt , "f64x2.lt" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd4a, f64x2_gt , "f64x2.gt" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd4b, f64x2_le , "f64x2.le" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd4c, f64x2_ge , "f64x2.ge" , NoImm , v128_v128_to_v128 , simd ) \ /* v128 bitwise */ \ visitOp(0xfd4d, v128_not , "v128.not" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd4e, v128_and , "v128.and" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd4f, v128_andnot , "v128.andnot" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd50, v128_or , "v128.or" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd51, v128_xor , "v128.xor" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd52, v128_bitselect , "v128.bitselect" , NoImm , v128_v128_v128_to_v128 , simd ) \ visitOp(0xfd53, v128_any_true , "v128.any_true" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfd5e, f32x4_demote_f64x2_zero , "f32x4.demote_f64x2_zero" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd5f, f64x2_promote_low_f32x4 , "f64x2.promote_low_f32x4" , NoImm , v128_to_v128 , simd ) \ /* v128 integer arithmetic */ \ visitOp(0xfd60, i8x16_abs , "i8x16.abs" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd61, i8x16_neg , "i8x16.neg" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd62, i8x16_popcnt , "i8x16.popcnt" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd63, i8x16_all_true , "i8x16.all_true" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfd64, i8x16_bitmask , "i8x16.bitmask" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfd65, i8x16_narrow_i16x8_s , "i8x16.narrow_i16x8_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd66, i8x16_narrow_i16x8_u , "i8x16.narrow_i16x8_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd67, f32x4_ceil , "f32x4.ceil" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd68, f32x4_floor , "f32x4.floor" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd69, f32x4_trunc , "f32x4.trunc" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd6a, f32x4_nearest , "f32x4.nearest" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd6b, i8x16_shl , "i8x16.shl" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfd6c, i8x16_shr_s , "i8x16.shr_s" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfd6d, i8x16_shr_u , "i8x16.shr_u" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfd6e, i8x16_add , "i8x16.add" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd6f, i8x16_add_sat_s , "i8x16.add_sat_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd70, i8x16_add_sat_u , "i8x16.add_sat_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd71, i8x16_sub , "i8x16.sub" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd72, i8x16_sub_sat_s , "i8x16.sub_sat_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd73, i8x16_sub_sat_u , "i8x16.sub_sat_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd74, f64x2_ceil , "f64x2.ceil" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd75, f64x2_floor , "f64x2.floor" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd76, i8x16_min_s , "i8x16.min_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd77, i8x16_min_u , "i8x16.min_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd78, i8x16_max_s , "i8x16.max_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd79, i8x16_max_u , "i8x16.max_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd7a, f64x2_trunc , "f64x2.trunc" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd7b, i8x16_avgr_u , "i8x16.avgr_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd7c, i16x8_extadd_pairwise_i8x16_s , "i16x8.extadd_pairwise_i8x16_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd7d, i16x8_extadd_pairwise_i8x16_u , "i16x8.extadd_pairwise_i8x16_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd7e, i32x4_extadd_pairwise_i16x8_s , "i32x4.extadd_pairwise_i16x8_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd7f, i32x4_extadd_pairwise_i16x8_u , "i32x4.extadd_pairwise_i16x8_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd80, i16x8_abs , "i16x8.abs" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd81, i16x8_neg , "i16x8.neg" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd82, i16x8_q15mulr_sat_s , "i16x8.q15mulr_sat_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd83, i16x8_all_true , "i16x8.all_true" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfd84, i16x8_bitmask , "i16x8.bitmask" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfd85, i16x8_narrow_i32x4_s , "i16x8.narrow_i32x4_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd86, i16x8_narrow_i32x4_u , "i16x8.narrow_i32x4_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd87, i16x8_extend_low_i8x16_s , "i16x8.extend_low_i8x16_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd88, i16x8_extend_high_i8x16_s , "i16x8.extend_high_i8x16_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd89, i16x8_extend_low_i8x16_u , "i16x8.extend_low_i8x16_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd8a, i16x8_extend_high_i8x16_u , "i16x8.extend_high_i8x16_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd8b, i16x8_shl , "i16x8.shl" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfd8c, i16x8_shr_s , "i16x8.shr_s" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfd8d, i16x8_shr_u , "i16x8.shr_u" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfd8e, i16x8_add , "i16x8.add" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd8f, i16x8_add_sat_s , "i16x8.add_sat_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd90, i16x8_add_sat_u , "i16x8.add_sat_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd91, i16x8_sub , "i16x8.sub" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd92, i16x8_sub_sat_s , "i16x8.sub_sat_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd93, i16x8_sub_sat_u , "i16x8.sub_sat_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd94, f64x2_nearest , "f64x2.nearest" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfd95, i16x8_mul , "i16x8.mul" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd96, i16x8_min_s , "i16x8.min_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd97, i16x8_min_u , "i16x8.min_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd98, i16x8_max_s , "i16x8.max_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd99, i16x8_max_u , "i16x8.max_u" , NoImm , v128_v128_to_v128 , simd ) \ /* visitOp(0xfd9a, i16x8_avgr_s , "i16x8.avgr_s" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfd9b, i16x8_avgr_u , "i16x8.avgr_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd9c, i16x8_extmul_low_i8x16_s , "i16x8.extmul_low_i8x16_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd9d, i16x8_extmul_high_i8x16_s , "i16x8.extmul_high_i8x16_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd9e, i16x8_extmul_low_i8x16_u , "i16x8.extmul_low_i8x16_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfd9f, i16x8_extmul_high_i8x16_u , "i16x8.extmul_high_i8x16_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfda0, i32x4_abs , "i32x4.abs" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfda1, i32x4_neg , "i32x4.neg" , NoImm , v128_to_v128 , simd ) \ /* visitOp(0xfda2, ... , ... , ... , ... , ... )*/ \ visitOp(0xfda3, i32x4_all_true , "i32x4.all_true" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfda4, i32x4_bitmask , "i32x4.bitmask" , NoImm , v128_to_i32 , simd ) \ /* visitOp(0xfda5, i32x4_narrow_i64x2_s , "i32x4.narrow_i64x2_s" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfda6, i32x4_narrow_i64x2_u , "i32x4.narrow_i64x2_u" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfda7, i32x4_extend_low_i16x8_s , "i32x4.extend_low_i16x8_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfda8, i32x4_extend_high_i16x8_s , "i32x4.extend_high_i16x8_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfda9, i32x4_extend_low_i16x8_u , "i32x4.extend_low_i16x8_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdaa, i32x4_extend_high_i16x8_u , "i32x4.extend_high_i16x8_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdab, i32x4_shl , "i32x4.shl" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfdac, i32x4_shr_s , "i32x4.shr_s" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfdad, i32x4_shr_u , "i32x4.shr_u" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfdae, i32x4_add , "i32x4.add" , NoImm , v128_v128_to_v128 , simd ) \ /* visitOp(0xfdaf, i32x4_add_sat_s , "i32x4.add_sat_s" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfdb0, i32x4_add_sat_u , "i32x4.add_sat_u" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfdb1, i32x4_sub , "i32x4.sub" , NoImm , v128_v128_to_v128 , simd ) \ /* visitOp(0xfdb2, i32x4_sub_sat_s , "i32x4.sub_sat_s" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfdb3, i32x4_sub_sat_u , "i32x4.sub_sat_u" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfdb4, i32x4_dot_i16x8_s , "i32x4.dot_i16x8_s" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfdb5, i32x4_mul , "i32x4.mul" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdb6, i32x4_min_s , "i32x4.min_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdb7, i32x4_min_u , "i32x4.min_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdb8, i32x4_max_s , "i32x4.max_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdb9, i32x4_max_u , "i32x4.max_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdba, i32x4_dot_i16x8_s , "i32x4.dot_i16x8_s" , NoImm , v128_v128_to_v128 , simd ) \ /* visitOp(0xfdbb, ... , ... , ... , ... , ... )*/ \ visitOp(0xfdbc, i32x4_extmul_low_i16x8_s , "i32x4.extmul_low_i16x8_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdbd, i32x4_extmul_high_i16x8_s , "i32x4.extmul_high_i16x8_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdbe, i32x4_extmul_low_i16x8_u , "i32x4.extmul_low_i16x8_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdbf, i32x4_extmul_high_i16x8_u , "i32x4.extmul_high_i16x8_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdc0, i64x2_abs , "i64x2.abs" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdc1, i64x2_neg , "i64x2.neg" , NoImm , v128_to_v128 , simd ) \ /* visitOp(0xfdc2, ... , ... , ... , ... , ... )*/ \ visitOp(0xfdc3, i64x2_all_true , "i64x2.all_true" , NoImm , v128_to_i32 , simd ) \ visitOp(0xfdc4, i64x2_bitmask , "i64x2.bitmask" , NoImm , v128_to_i32 , simd ) \ /* visitOp(0xfdc5, i64x2_narrow_i128x1_s , "i32x4.narrow_i128x1_s" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfdc6, i64x2_narrow_i128x1_u , "i32x4.narrow_i128x1_u" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfdc7, i64x2_extend_low_i32x4_s , "i64x2.extend_low_i32x4_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdc8, i64x2_extend_high_i32x4_s , "i64x2.extend_high_i32x4_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdc9, i64x2_extend_low_i32x4_u , "i64x2.extend_low_i32x4_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdca, i64x2_extend_high_i32x4_u , "i64x2.extend_high_i32x4_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdcb, i64x2_shl , "i64x2.shl" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfdcc, i64x2_shr_s , "i64x2.shr_s" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfdcd, i64x2_shr_u , "i64x2.shr_u" , NoImm , v128_i32_to_v128 , simd ) \ visitOp(0xfdce, i64x2_add , "i64x2.add" , NoImm , v128_v128_to_v128 , simd ) \ /* visitOp(0xfdcf, i64x2_add_sat_s , "i64x2.add_sat_s" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfdd0, i64x2_add_sat_u , "i64x2.add_sat_u" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfdd1, i64x2_sub , "i64x2.sub" , NoImm , v128_v128_to_v128 , simd ) \ /* visitOp(0xfdd2, i64x2_sub_sat_s , "i64x2.sub_sat_s" , NoImm , v128_v128_to_v128 , simd )*/ \ /* visitOp(0xfdd3, i64x2_sub_sat_u , "i64x2.sub_sat_u" , NoImm , v128_v128_to_v128 , simd )*/ \ visitOp(0xfdd5, i64x2_mul , "i64x2.mul" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdd6, i64x2_eq , "i64x2.eq" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdd7, i64x2_ne , "i64x2.ne" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdd8, i64x2_lt_s , "i64x2.lt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdd9, i64x2_gt_s , "i64x2.gt_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdda, i64x2_le_s , "i64x2.le_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfddb, i64x2_ge_s , "i64x2.ge_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfddc, i64x2_extmul_low_i32x4_s , "i64x2.extmul_low_i32x4_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfddd, i64x2_extmul_high_i32x4_s , "i64x2.extmul_high_i32x4_s" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdde, i64x2_extmul_low_i32x4_u , "i64x2.extmul_low_i32x4_u" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfddf, i64x2_extmul_high_i32x4_u , "i64x2.extmul_high_i32x4_u" , NoImm , v128_v128_to_v128 , simd ) \ /* v128 floating-point arithmetic */ \ visitOp(0xfde0, f32x4_abs , "f32x4.abs" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfde1, f32x4_neg , "f32x4.neg" , NoImm , v128_to_v128 , simd ) \ /* visitOp(0xfde2, f32x4_round , "f32x4.round" , NoImm , v128_to_v128 , simd )*/ \ visitOp(0xfde3, f32x4_sqrt , "f32x4.sqrt" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfde4, f32x4_add , "f32x4.add" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfde5, f32x4_sub , "f32x4.sub" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfde6, f32x4_mul , "f32x4.mul" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfde7, f32x4_div , "f32x4.div" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfde8, f32x4_min , "f32x4.min" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfde9, f32x4_max , "f32x4.max" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdea, f32x4_pmin , "f32x4.pmin" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdeb, f32x4_pmax , "f32x4.pmax" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdec, f64x2_abs , "f64x2.abs" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfded, f64x2_neg , "f64x2.neg" , NoImm , v128_to_v128 , simd ) \ /* visitOp(0xfdee, f64x2_round , "f64x2.round" , NoImm , v128_to_v128 , simd )*/ \ visitOp(0xfdef, f64x2_sqrt , "f64x2.sqrt" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdf0, f64x2_add , "f64x2.add" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf1, f64x2_sub , "f64x2.sub" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf2, f64x2_mul , "f64x2.mul" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf3, f64x2_div , "f64x2.div" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf4, f64x2_min , "f64x2.min" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf5, f64x2_max , "f64x2.max" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf6, f64x2_pmin , "f64x2.pmin" , NoImm , v128_v128_to_v128 , simd ) \ visitOp(0xfdf7, f64x2_pmax , "f64x2.pmax" , NoImm , v128_v128_to_v128 , simd ) \ /* v128 conversions */ \ visitOp(0xfdf8, i32x4_trunc_sat_f32x4_s , "i32x4.trunc_sat_f32x4_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdf9, i32x4_trunc_sat_f32x4_u , "i32x4.trunc_sat_f32x4_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdfa, f32x4_convert_i32x4_s , "f32x4.convert_i32x4_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdfb, f32x4_convert_i32x4_u , "f32x4.convert_i32x4_u" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdfc, i32x4_trunc_sat_f64x2_s_zero , "i32x4.trunc_sat_f64x2_s_zero" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdfd, i32x4_trunc_sat_f64x2_u_zero , "i32x4.trunc_sat_f64x2_u_zero" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdfe, f64x2_convert_low_i32x4_s , "f64x2.convert_low_i32x4_s" , NoImm , v128_to_v128 , simd ) \ visitOp(0xfdff, f64x2_convert_low_i32x4_u , "f64x2.convert_low_i32x4_u" , NoImm , v128_to_v128 , simd ) \ /* Atomic fence */ \ visitOp(0xfe03, atomic_fence , "atomic.fence" , AtomicFenceImm , none_to_none , atomics ) // clang-format on #define WAVM_ENUM_NONCONTROL_OPERATORS(visitOp) \ WAVM_ENUM_PARAMETRIC_OPERATORS(visitOp) \ WAVM_ENUM_OVERLOADED_OPERATORS(visitOp) \ WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(visitOp) \ WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(visitOp) #define WAVM_ENUM_NONOVERLOADED_OPERATORS(visitOp) \ WAVM_ENUM_PARAMETRIC_OPERATORS(visitOp) \ WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(visitOp) \ WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(visitOp) \ WAVM_ENUM_CONTROL_OPERATORS(visitOp) #define WAVM_ENUM_OPERATORS(visitOp) \ WAVM_ENUM_PARAMETRIC_OPERATORS(visitOp) \ WAVM_ENUM_OVERLOADED_OPERATORS(visitOp) \ WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(visitOp) \ WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(visitOp) \ WAVM_ENUM_CONTROL_OPERATORS(visitOp) ================================================ FILE: Include/WAVM/IR/Operators.h ================================================ #pragma once #include #include #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Serialization.h" #include "OperatorTable.h" namespace WAVM { namespace IR { // Forward declarations. struct Module; // Structures for operator immediates struct NoImm { }; struct MemoryImm { Uptr memoryIndex; }; struct MemoryCopyImm { Uptr destMemoryIndex; Uptr sourceMemoryIndex; }; struct TableImm { Uptr tableIndex; }; struct TableCopyImm { Uptr destTableIndex; Uptr sourceTableIndex; }; struct ControlStructureImm { IndexedBlockType type; }; struct SelectImm { // ValueType::any represents a legacy select with the type inferred from the first operand // following the condition. ValueType type; }; struct BranchImm { Uptr targetDepth; }; struct BranchTableImm { Uptr defaultTargetDepth; // An index into the FunctionDef's branchTables array. Uptr branchTableIndex; }; template struct LiteralImm { Value value; }; template struct GetOrSetVariableImm { Uptr variableIndex; }; struct FunctionImm { Uptr functionIndex; }; struct FunctionRefImm { Uptr functionIndex; }; struct CallIndirectImm { IndexedFunctionType type; Uptr tableIndex; }; struct BaseLoadOrStoreImm { U8 alignmentLog2; U64 offset; Uptr memoryIndex; }; template struct LoadOrStoreImm : BaseLoadOrStoreImm { }; template struct LoadOrStoreLaneImm : LoadOrStoreImm { U8 laneIndex; }; using LoadOrStoreI8x16LaneImm = LoadOrStoreLaneImm<0, 16>; using LoadOrStoreI16x8LaneImm = LoadOrStoreLaneImm<1, 8>; using LoadOrStoreI32x4LaneImm = LoadOrStoreLaneImm<2, 4>; using LoadOrStoreI64x2LaneImm = LoadOrStoreLaneImm<3, 2>; template struct LaneIndexImm { U8 laneIndex; }; template struct ShuffleImm { U8 laneIndices[numLanes]; }; template struct AtomicLoadOrStoreImm : BaseLoadOrStoreImm { }; enum class MemoryOrder { sequentiallyConsistent = 0 }; struct AtomicFenceImm { MemoryOrder order; }; struct ExceptionTypeImm { Uptr exceptionTypeIndex; }; struct RethrowImm { Uptr catchDepth; }; struct DataSegmentAndMemImm { Uptr dataSegmentIndex; Uptr memoryIndex; }; struct DataSegmentImm { Uptr dataSegmentIndex; }; struct ElemSegmentAndTableImm { Uptr elemSegmentIndex; Uptr tableIndex; }; struct ElemSegmentImm { Uptr elemSegmentIndex; }; struct ReferenceTypeImm { ReferenceType referenceType; }; enum class Opcode : U16 { #define VISIT_OPCODE(opcode, name, ...) name = opcode, WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE }; inline constexpr U64 maxSingleByteOpcode = 0xdf; template struct OpcodeAndImm { Opcode opcode; Imm imm; }; // Specialize for the empty immediate struct so they don't take an extra byte of space. template<> struct OpcodeAndImm { union { Opcode opcode; NoImm imm; }; }; // Decodes an operator from an input stream and dispatches by opcode. struct OperatorDecoderStream { OperatorDecoderStream(const std::vector& codeBytes) : nextByte(codeBytes.data()), end(codeBytes.data() + codeBytes.size()) { } operator bool() const { return nextByte < end; } template typename Visitor::Result decodeOp(Visitor& visitor) { WAVM_ASSERT(nextByte + sizeof(Opcode) <= end); Opcode opcode; memcpy(&opcode, nextByte, sizeof(Opcode)); switch(opcode) { #define VISIT_OPCODE(opcode, name, nameString, Imm, ...) \ case Opcode::name: { \ WAVM_ASSERT(nextByte + sizeof(OpcodeAndImm) <= end); \ OpcodeAndImm encodedOperator; \ memcpy(&encodedOperator, nextByte, sizeof(OpcodeAndImm)); \ nextByte += sizeof(OpcodeAndImm); \ return visitor.name(encodedOperator.imm); \ } WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE default: WAVM_UNREACHABLE(); } } template typename Visitor::Result decodeOpWithoutConsume(Visitor& visitor) { const U8* savedNextByte = nextByte; typename Visitor::Result result = decodeOp(visitor); nextByte = savedNextByte; return result; } private: const U8* nextByte; const U8* end; }; // Encodes an operator to an output stream. struct OperatorEncoderStream { OperatorEncoderStream(Serialization::OutputStream& inByteStream) : byteStream(inByteStream) { } #define VISIT_OPCODE(_, name, nameString, Imm, ...) \ void name(Imm imm = {}) \ { \ OpcodeAndImm encodedOperator; \ encodedOperator.opcode = Opcode::name; \ encodedOperator.imm = imm; \ memcpy(byteStream.advance(sizeof(OpcodeAndImm)), \ &encodedOperator, \ sizeof(OpcodeAndImm)); \ } WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE private: Serialization::OutputStream& byteStream; }; WAVM_API const char* getOpcodeName(Opcode opcode); }} ================================================ FILE: Include/WAVM/IR/RandomModule.h ================================================ #pragma once namespace WAVM { struct RandomStream; } namespace WAVM { namespace IR { struct Module; WAVM_API void generateValidModule(IR::Module& module, RandomStream& randomStream); }} ================================================ FILE: Include/WAVM/IR/Types.h ================================================ #pragma once #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/StringBuilder.h" namespace WAVM { namespace Runtime { struct Object; struct Function; }} namespace WAVM { namespace IR { // The type of a WebAssembly operand enum class ValueType : U8 { none, any, i32, i64, f32, f64, v128, externref, funcref }; inline constexpr U8 numValueTypes = U8(ValueType::funcref) + 1; // The reference types subset of ValueType. enum class ReferenceType : U8 { none = U8(ValueType::none), externref = U8(ValueType::externref), funcref = U8(ValueType::funcref) }; inline ValueType asValueType(ReferenceType type) { return ValueType(type); } inline bool isNumericType(ValueType type) { return type == ValueType::i32 || type == ValueType::i64 || type == ValueType::f32 || type == ValueType::f64 || type == ValueType::v128; } inline bool isReferenceType(ValueType type) { return type == ValueType::externref || type == ValueType::funcref; } inline bool isSubtype(ValueType subtype, ValueType supertype) { return subtype == supertype || subtype == ValueType::none || supertype == ValueType::any; } inline bool isSubtype(ReferenceType subtype, ReferenceType supertype) { return isSubtype(asValueType(subtype), asValueType(supertype)); } inline std::string asString(I32 value) { return std::to_string(value); } inline std::string asString(I64 value) { return std::to_string(value); } WAVM_API std::string asString(F32 value); WAVM_API std::string asString(F64 value); inline std::string asString(const V128& v128) { // 50 characters: i32x4 0xHHHHHHHH 0xHHHHHHHH 0xHHHHHHHH 0xHHHHHHHH\0 FixedStringBuilder<50> sb; sb.appendf("i32x4 0x%.8x 0x%.8x 0x%.8x 0x%.8x", v128.u32x4[0], v128.u32x4[1], v128.u32x4[2], v128.u32x4[3]); return sb.toString(); } inline U8 getTypeByteWidth(ValueType type) { switch(type) { case ValueType::i32: return 4; case ValueType::i64: return 8; case ValueType::f32: return 4; case ValueType::f64: return 8; case ValueType::v128: return 16; case ValueType::externref: case ValueType::funcref: return sizeof(void*); case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); }; } inline U8 getTypeBitWidth(ValueType type) { return getTypeByteWidth(type) * 8; } inline const char* asString(ValueType type) { switch(type) { case ValueType::none: return "none"; case ValueType::any: return "any"; case ValueType::i32: return "i32"; case ValueType::i64: return "i64"; case ValueType::f32: return "f32"; case ValueType::f64: return "f64"; case ValueType::v128: return "v128"; case ValueType::externref: return "externref"; case ValueType::funcref: return "funcref"; default: WAVM_UNREACHABLE(); }; } inline const char* asString(ReferenceType type) { switch(type) { case ReferenceType::none: return "none"; case ReferenceType::externref: return "externref"; case ReferenceType::funcref: return "funcref"; default: WAVM_UNREACHABLE(); }; } // The tuple of value types. struct TypeTuple { TypeTuple() : impl(getUniqueImpl(0, nullptr)) {} WAVM_API TypeTuple(ValueType inElem); WAVM_API TypeTuple(const std::initializer_list& inElems); WAVM_API TypeTuple(const std::vector& inElems); WAVM_API TypeTuple(const ValueType* inElems, Uptr numElems); const ValueType* begin() const { return impl->elems; } const ValueType* end() const { return impl->elems + impl->numElems; } const ValueType* data() const { return impl->elems; } ValueType operator[](Uptr index) const { WAVM_ASSERT(index < impl->numElems); return impl->elems[index]; } Uptr getHash() const { return impl->hash; } Uptr size() const { return impl->numElems; } friend bool operator==(const TypeTuple& left, const TypeTuple& right) { return left.impl == right.impl; } friend bool operator!=(const TypeTuple& left, const TypeTuple& right) { return left.impl != right.impl; } private: struct Impl { Uptr hash; Uptr numElems; ValueType elems[1]; Impl(Uptr inNumElems, const ValueType* inElems); Impl(const Impl& inCopy); static Uptr calcNumBytes(Uptr numElems) { return offsetof(Impl, elems) + numElems * sizeof(ValueType); } }; const Impl* impl; TypeTuple(const Impl* inImpl) : impl(inImpl) {} WAVM_API static const Impl* getUniqueImpl(Uptr numElems, const ValueType* inElems); }; inline std::string asString(TypeTuple typeTuple) { if(typeTuple.size() == 1) { return asString(typeTuple[0]); } else { std::string result = "("; for(Uptr elementIndex = 0; elementIndex < typeTuple.size(); ++elementIndex) { if(elementIndex != 0) { result += ", "; } result += asString(typeTuple[elementIndex]); } result += ")"; return result; } } inline bool isSubtype(TypeTuple subtype, TypeTuple supertype) { if(subtype == supertype) { return true; } else if(subtype.size() != supertype.size()) { return false; } else { for(Uptr elementIndex = 0; elementIndex < subtype.size(); ++elementIndex) { if(!isSubtype(subtype[elementIndex], supertype[elementIndex])) { return false; } } return true; } } // Infer value and result types from a C type. template constexpr ValueType inferValueType(); template<> constexpr ValueType inferValueType() { return ValueType::i32; } template<> constexpr ValueType inferValueType() { return ValueType::i32; } template<> constexpr ValueType inferValueType() { return ValueType::i32; } template<> constexpr ValueType inferValueType() { return ValueType::i32; } template<> constexpr ValueType inferValueType() { return ValueType::i32; } template<> constexpr ValueType inferValueType() { return ValueType::i32; } template<> constexpr ValueType inferValueType() { return ValueType::i64; } template<> constexpr ValueType inferValueType() { return ValueType::i64; } template<> constexpr ValueType inferValueType() { return ValueType::f32; } template<> constexpr ValueType inferValueType() { return ValueType::f64; } template<> constexpr ValueType inferValueType() { return ValueType::externref; } template<> constexpr ValueType inferValueType() { return ValueType::funcref; } template<> constexpr ValueType inferValueType() { return ValueType::externref; } template<> constexpr ValueType inferValueType() { return ValueType::funcref; } template inline TypeTuple inferResultType() { return TypeTuple(inferValueType()); } template<> inline TypeTuple inferResultType() { return TypeTuple(); } // Don't allow quietly promoting I8/I16 return types to an I32 WebAssembly type: the C function // may not zero the extra bits in the I32 register before returning, and the WebAssembly // function will see that junk in the returned I32. template<> inline TypeTuple inferResultType(); template<> inline TypeTuple inferResultType(); template<> inline TypeTuple inferResultType(); template<> inline TypeTuple inferResultType(); // The calling convention for a function. enum class CallingConvention { wasm, intrinsic, intrinsicWithContextSwitch, c, cAPICallback, }; inline std::string asString(CallingConvention callingConvention) { switch(callingConvention) { case CallingConvention::wasm: return "wasm"; case CallingConvention::intrinsic: return "intrinsic"; case CallingConvention::intrinsicWithContextSwitch: return "intrinsic_with_context_switch"; case CallingConvention::c: return "c"; case CallingConvention::cAPICallback: return "c_api_callback"; default: WAVM_UNREACHABLE(); }; } // The type of a WebAssembly function struct FunctionType { // Used to represent a function type as an abstract pointer-sized value in the runtime. struct Encoding { Uptr impl; }; FunctionType(TypeTuple inResults = TypeTuple(), TypeTuple inParams = TypeTuple(), CallingConvention inCallingConvention = CallingConvention::wasm) : impl(getUniqueImpl(inResults, inParams, inCallingConvention)) { } FunctionType(Encoding encoding) : impl(reinterpret_cast(encoding.impl)) {} TypeTuple results() const { return impl->results; } TypeTuple params() const { return impl->params; } CallingConvention callingConvention() const { return impl->callingConvention; } Uptr getHash() const { return impl->hash; } Encoding getEncoding() const { return Encoding{reinterpret_cast(impl)}; } friend bool operator==(const FunctionType& left, const FunctionType& right) { return left.impl == right.impl; } friend bool operator!=(const FunctionType& left, const FunctionType& right) { return left.impl != right.impl; } private: struct Impl { Uptr hash; TypeTuple results; TypeTuple params; CallingConvention callingConvention; Impl(TypeTuple inResults, TypeTuple inParams, CallingConvention inCallingConvention); }; const Impl* impl; FunctionType(const Impl* inImpl) : impl(inImpl) {} WAVM_API static const Impl* getUniqueImpl(TypeTuple results, TypeTuple params, CallingConvention callingConvention); }; struct IndexedFunctionType { Uptr index; }; struct IndexedBlockType { enum Format { noParametersOrResult, oneResult, functionType }; Format format; union { ValueType resultType; Uptr index; }; }; inline std::string asString(const FunctionType& functionType) { std::string result = asString(functionType.params()) + "->" + asString(functionType.results()); if(functionType.callingConvention() != CallingConvention::wasm) { result += "(calling_conv " + asString(functionType.callingConvention()) + ')'; } return result; } inline bool isSubtype(FunctionType subtype, FunctionType supertype) { if(subtype == supertype) { return true; } else { return isSubtype(supertype.params(), subtype.params()) && isSubtype(subtype.results(), supertype.results()) && supertype.callingConvention() == subtype.callingConvention(); } } // The index type for a memory or table. enum class IndexType : U8 { i32 = U8(ValueType::i32), i64 = U8(ValueType::i64), }; inline ValueType asValueType(IndexType indexType) { switch(indexType) { case IndexType::i32: return ValueType::i32; case IndexType::i64: return ValueType::i64; default: WAVM_UNREACHABLE(); }; } // A size constraint: a range of expected sizes for some size-constrained type. // If max==UINT64_MAX, the maximum size is unbounded. struct SizeConstraints { U64 min; U64 max; friend bool operator==(const SizeConstraints& left, const SizeConstraints& right) { return left.min == right.min && left.max == right.max; } friend bool operator!=(const SizeConstraints& left, const SizeConstraints& right) { return left.min != right.min || left.max != right.max; } friend bool isSubset(const SizeConstraints& sub, const SizeConstraints& super) { return sub.min >= super.min && sub.max <= super.max; } }; inline std::string asString(const SizeConstraints& sizeConstraints) { return std::to_string(sizeConstraints.min) + (sizeConstraints.max == UINT64_MAX ? ".." : ".." + std::to_string(sizeConstraints.max)); } // The type of a table struct TableType { ReferenceType elementType; bool isShared; IndexType indexType; SizeConstraints size; TableType() : elementType(ReferenceType::none), isShared(false), indexType(IndexType::i32), size() { } TableType(ReferenceType inElementType, bool inIsShared, IndexType inIndexType, SizeConstraints inSize) : elementType(inElementType), isShared(inIsShared), indexType(inIndexType), size(inSize) { } friend bool operator==(const TableType& left, const TableType& right) { return left.elementType == right.elementType && left.isShared == right.isShared && left.indexType == right.indexType && left.size == right.size; } friend bool operator!=(const TableType& left, const TableType& right) { return left.elementType != right.elementType || left.isShared != right.isShared || left.indexType != right.indexType || left.size != right.size; } friend bool isSubtype(const TableType& sub, const TableType& super) { return super.elementType == sub.elementType && super.isShared == sub.isShared && super.indexType == sub.indexType && isSubset(sub.size, super.size); } }; inline std::string asString(const TableType& tableType) { const char* indexString; switch(tableType.indexType) { case IndexType::i32: indexString = ""; break; case IndexType::i64: indexString = "i64 "; break; default: WAVM_UNREACHABLE(); }; return std::string(indexString) + asString(tableType.size) + (tableType.isShared ? " shared funcref" : " funcref"); } // The type of a memory struct MemoryType { bool isShared; IndexType indexType; SizeConstraints size; MemoryType() : isShared(false), indexType(IndexType::i32), size({0, UINT64_MAX}) {} MemoryType(bool inIsShared, IndexType inIndexType, const SizeConstraints& inSize) : isShared(inIsShared), indexType(inIndexType), size(inSize) { } friend bool operator==(const MemoryType& left, const MemoryType& right) { return left.isShared == right.isShared && left.indexType == right.indexType && left.size == right.size; } friend bool operator!=(const MemoryType& left, const MemoryType& right) { return left.isShared != right.isShared || left.indexType != right.indexType || left.size != right.size; } friend bool isSubtype(const MemoryType& sub, const MemoryType& super) { return super.isShared == sub.isShared && super.indexType == sub.indexType && isSubset(sub.size, super.size); } }; inline std::string asString(const MemoryType& memoryType) { const char* indexString; switch(memoryType.indexType) { case IndexType::i32: indexString = ""; break; case IndexType::i64: indexString = "i64 "; break; default: WAVM_UNREACHABLE(); }; return std::string(indexString) + asString(memoryType.size) + (memoryType.isShared ? " shared" : ""); } // The type of a global struct GlobalType { ValueType valueType; bool isMutable; GlobalType() : valueType(ValueType::any), isMutable(false) {} GlobalType(ValueType inValueType, bool inIsMutable) : valueType(inValueType), isMutable(inIsMutable) { } friend bool operator==(const GlobalType& left, const GlobalType& right) { return left.valueType == right.valueType && left.isMutable == right.isMutable; } friend bool operator!=(const GlobalType& left, const GlobalType& right) { return left.valueType != right.valueType || left.isMutable != right.isMutable; } friend bool isSubtype(const GlobalType& sub, const GlobalType& super) { if(super.isMutable != sub.isMutable) { return false; } else if(super.isMutable) { return super.valueType == sub.valueType; } else { return isSubtype(sub.valueType, super.valueType); } } }; inline std::string asString(const GlobalType& globalType) { if(globalType.isMutable) { return std::string("global ") + asString(globalType.valueType); } else { return std::string("immutable ") + asString(globalType.valueType); } } struct ExceptionType { TypeTuple params; friend bool operator==(const ExceptionType& left, const ExceptionType& right) { return left.params == right.params; } friend bool operator!=(const ExceptionType& left, const ExceptionType& right) { return left.params != right.params; } }; inline std::string asString(const ExceptionType& exceptionType) { return asString(exceptionType.params); } // The type of an external object: something that can be imported or exported from a module. enum class ExternKind : U8 { invalid, // Standard object kinds that may be imported/exported from WebAssembly modules. function, table, memory, global, exceptionType, }; struct ExternType { const ExternKind kind; ExternType() : kind(ExternKind::invalid) {} ExternType(FunctionType inFunction) : kind(ExternKind::function), function(inFunction) {} ExternType(TableType inTable) : kind(ExternKind::table), table(inTable) {} ExternType(MemoryType inMemory) : kind(ExternKind::memory), memory(inMemory) {} ExternType(GlobalType inGlobal) : kind(ExternKind::global), global(inGlobal) {} ExternType(ExceptionType inExceptionType) : kind(ExternKind::exceptionType), exceptionType(inExceptionType) { } ExternType(ExternKind inKind) : kind(inKind) {} friend FunctionType asFunctionType(const ExternType& objectType) { WAVM_ASSERT(objectType.kind == ExternKind::function); return objectType.function; } friend TableType asTableType(const ExternType& objectType) { WAVM_ASSERT(objectType.kind == ExternKind::table); return objectType.table; } friend MemoryType asMemoryType(const ExternType& objectType) { WAVM_ASSERT(objectType.kind == ExternKind::memory); return objectType.memory; } friend GlobalType asGlobalType(const ExternType& objectType) { WAVM_ASSERT(objectType.kind == ExternKind::global); return objectType.global; } friend ExceptionType asExceptionType(const ExternType& objectType) { WAVM_ASSERT(objectType.kind == ExternKind::exceptionType); return objectType.exceptionType; } private: union { FunctionType function; TableType table; MemoryType memory; GlobalType global; ExceptionType exceptionType; }; }; inline std::string asString(const ExternType& objectType) { switch(objectType.kind) { case ExternKind::function: return "func " + asString(asFunctionType(objectType)); case ExternKind::table: return "table " + asString(asTableType(objectType)); case ExternKind::memory: return "memory " + asString(asMemoryType(objectType)); case ExternKind::global: return asString(asGlobalType(objectType)); case ExternKind::exceptionType: return "exception_type " + asString(asExceptionType(objectType)); case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } inline ReferenceType asReferenceType(const ExternKind kind) { switch(kind) { case ExternKind::function: return ReferenceType::funcref; case ExternKind::table: case ExternKind::memory: case ExternKind::global: case ExternKind::exceptionType: case ExternKind::invalid: default: return ReferenceType::externref; } } inline ReferenceType asReferenceType(const ExternType& type) { return asReferenceType(type.kind); } }} // These specializations need to be declared within a WAVM namespace scope to work around a GCC bug. // It should be ok to write "template<> struct WAVM::Hash...", but old versions of GCC will // erroneously reject that. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480 namespace WAVM { template<> struct Hash { Uptr operator()(IR::TypeTuple typeTuple, Uptr seed = 0) const { return Hash()(typeTuple.getHash(), seed); } }; template<> struct Hash { Uptr operator()(IR::FunctionType functionType, Uptr seed = 0) const { return Hash()(functionType.getHash(), seed); } }; } ================================================ FILE: Include/WAVM/IR/Types.natvis ================================================ {impl->numElems} types impl->numElems impl->elems {impl->params} -> {impl->results} impl->params impl->results ================================================ FILE: Include/WAVM/IR/Validate.h ================================================ #pragma once #include #include #include "WAVM/IR/Operators.h" namespace WAVM { namespace IR { struct FunctionDef; struct Module; struct ValidationException { std::string message; ValidationException(std::string&& inMessage) : message(inMessage) {} }; struct ModuleValidationState; struct CodeValidationStreamImpl; struct CodeValidationStream { typedef void Result; WAVM_API CodeValidationStream(ModuleValidationState& moduleValidationState, const FunctionDef& function); WAVM_API ~CodeValidationStream(); WAVM_API void finish(); #define VISIT_OPCODE(_, name, nameString, Imm, ...) WAVM_API void name(Imm imm = {}); WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE private: CodeValidationStreamImpl* impl; }; template struct CodeValidationProxyStream { CodeValidationProxyStream(ModuleValidationState& moduleValidationState, const FunctionDef& function, InnerStream& inInnerStream) : codeValidationStream(moduleValidationState, function), innerStream(inInnerStream) { } void finishValidation() { codeValidationStream.finish(); } #define VISIT_OPCODE(_, name, nameString, Imm, ...) \ void name(Imm imm = {}) \ { \ codeValidationStream.name(imm); \ innerStream.name(imm); \ } WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE private: CodeValidationStream codeValidationStream; InnerStream& innerStream; }; WAVM_API std::shared_ptr createModuleValidationState( const Module& module); WAVM_API void validateTypes(ModuleValidationState& state); WAVM_API void validateImports(ModuleValidationState& state); WAVM_API void validateFunctionDeclarations(ModuleValidationState& state); WAVM_API void validateTableDefs(ModuleValidationState& state); WAVM_API void validateMemoryDefs(ModuleValidationState& state); WAVM_API void validateGlobalDefs(ModuleValidationState& state); WAVM_API void validateExceptionTypeDefs(ModuleValidationState& state); WAVM_API void validateExports(ModuleValidationState& state); WAVM_API void validateStartFunction(ModuleValidationState& state); WAVM_API void validateElemSegments(ModuleValidationState& state); WAVM_API void validateDataSegments(ModuleValidationState& state); inline void validatePreCodeSections(ModuleValidationState& state) { validateTypes(state); validateImports(state); validateFunctionDeclarations(state); validateTableDefs(state); validateMemoryDefs(state); validateGlobalDefs(state); validateExceptionTypeDefs(state); validateExports(state); validateStartFunction(state); validateElemSegments(state); } WAVM_API void validateCodeSection(ModuleValidationState& state); inline void validatePostCodeSections(ModuleValidationState& state) { validateDataSegments(state); } }} ================================================ FILE: Include/WAVM/IR/Value.h ================================================ #pragma once #include #include #include #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/StringBuilder.h" namespace WAVM { namespace Runtime { struct Object; struct Function; }} namespace WAVM { namespace IR { // A runtime value of any type. struct UntaggedValue { union { I32 i32; U32 u32; I64 i64; U64 u64; F32 f32; F64 f64; V128 v128; U8 bytes[16]; Runtime::Object* object; Runtime::Function* function; }; UntaggedValue(I32 inI32) { i32 = inI32; } UntaggedValue(I64 inI64) { i64 = inI64; } UntaggedValue(U32 inU32) { u32 = inU32; } UntaggedValue(U64 inU64) { u64 = inU64; } UntaggedValue(F32 inF32) { f32 = inF32; } UntaggedValue(F64 inF64) { f64 = inF64; } UntaggedValue(V128 inV128) { v128 = inV128; } UntaggedValue(Runtime::Object* inObject) { object = inObject; } UntaggedValue(Runtime::Function* inFunction) { function = inFunction; } UntaggedValue() { memset(bytes, 0, sizeof(bytes)); } }; // A boxed value: may hold any value that can be passed to a function invoked through the // runtime. struct Value : UntaggedValue { ValueType type; Value(I32 inI32) : UntaggedValue(inI32), type(ValueType::i32) {} Value(I64 inI64) : UntaggedValue(inI64), type(ValueType::i64) {} Value(U32 inU32) : UntaggedValue(inU32), type(ValueType::i32) {} Value(U64 inU64) : UntaggedValue(inU64), type(ValueType::i64) {} Value(F32 inF32) : UntaggedValue(inF32), type(ValueType::f32) {} Value(F64 inF64) : UntaggedValue(inF64), type(ValueType::f64) {} Value(const V128& inV128) : UntaggedValue(inV128), type(ValueType::v128) {} Value(Runtime::Object* inObject) : UntaggedValue(inObject), type(ValueType::externref) {} Value(Runtime::Function* inFunction) : UntaggedValue(inFunction), type(ValueType::funcref) { } Value(ValueType inType, UntaggedValue inValue) : UntaggedValue(inValue), type(inType) {} Value() : type(ValueType::none) {} friend std::string asString(const Value& value) { switch(value.type) { case ValueType::i32: return "i32.const " + asString(value.i32); case ValueType::i64: return "i64.const " + asString(value.i64); case ValueType::f32: return "f32.const " + asString(value.f32); case ValueType::f64: return "f64.const " + asString(value.f64); case ValueType::v128: return "v128.const " + asString(value.v128); case ValueType::externref: case ValueType::funcref: { // 29 characters: (externref|funcref) 0xHHHHHHHHHHHHHHHH\0 FixedStringBuilder<29> sb; sb.appendf("%s 0x%.16" WAVM_PRIxPTR, value.type == ValueType::externref ? "externref" : "funcref", reinterpret_cast(value.object)); return sb.toString(); } case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); } } friend bool operator==(const Value& left, const Value& right) { if(left.type != right.type) { return isReferenceType(left.type) && isReferenceType(right.type) && left.object == right.object; } switch(left.type) { case ValueType::none: return true; case ValueType::i32: case ValueType::f32: return left.i32 == right.i32; case ValueType::i64: case ValueType::f64: return left.i64 == right.i64; case ValueType::v128: return left.v128.u64x2[0] == right.v128.u64x2[0] && left.v128.u64x2[1] == right.v128.u64x2[1]; case ValueType::externref: case ValueType::funcref: return left.object == right.object; case ValueType::any: default: WAVM_UNREACHABLE(); }; } friend bool operator!=(const Value& left, const Value& right) { return !(left == right); } }; inline std::string asString(const std::vector& values) { std::string result = "("; for(Uptr elementIndex = 0; elementIndex < values.size(); ++elementIndex) { if(elementIndex != 0) { result += ", "; } result += asString(values[elementIndex]); } result += ")"; return result; } }} ================================================ FILE: Include/WAVM/Inline/Assert.h ================================================ #pragma once #include "WAVM/Inline/Config.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Error.h" // IWYU pragma: keep #define WAVM_ENABLE_ASSERTS (WAVM_DEBUG || WAVM_ENABLE_RELEASE_ASSERTS) #if WAVM_ENABLE_ASSERTS #define WAVM_ASSERT(condition) \ if(!(condition)) \ { \ for(static const WAVM::Platform::AssertMetadata wavmAssertMetadata{ \ #condition, __FILE__, __LINE__}; \ ;) \ { \ WAVM::Platform::handleAssertionFailure(wavmAssertMetadata); \ WAVM_DEBUG_TRAP(); \ break; \ } \ } #else #define WAVM_ASSERT(condition) \ if(false && !(condition)) {} #endif #define WAVM_ERROR_UNLESS(condition) \ if(!(condition)) \ { \ for(static const WAVM::Platform::AssertMetadata wavmAssertMetadata{ \ #condition, __FILE__, __LINE__}; \ ;) \ { \ WAVM::Platform::handleAssertionFailure(wavmAssertMetadata); \ WAVM_UNREACHABLE(); \ break; \ } \ } #define WAVM_UNREACHABLE() \ while(true) { WAVM_DEBUG_TRAP(); }; ================================================ FILE: Include/WAVM/Inline/BasicTypes.h ================================================ #pragma once #include #include #include #include "WAVM/Platform/Defines.h" namespace WAVM { typedef uint8_t U8; typedef int8_t I8; typedef uint16_t U16; typedef int16_t I16; typedef uint32_t U32; typedef int32_t I32; typedef uint64_t U64; typedef int64_t I64; typedef float F32; typedef double F64; // The OSX libc defines uintptr_t to be a long where U32/U64 are int. This causes // uintptr_t/uint64 to be treated as distinct types for e.g. overloading. Work around it by // defining our own Uptr/Iptr that are always int type. #if defined(__APPLE__) || defined(__WAVIX__) #if __SIZEOF_POINTER__ == 8 #define WAVM_PRIuPTR PRIu64 #define WAVM_PRIxPTR PRIx64 typedef U64 Uptr; typedef I64 Iptr; #elif __SIZEOF_POINTER__ == 4 #define WAVM_PRIuPTR PRIu32 #define WAVM_PRIxPTR PRIx32 typedef U32 Uptr; typedef I32 Iptr; #endif #else #define WAVM_PRIuPTR PRIuPTR #define WAVM_PRIxPTR PRIxPTR typedef uintptr_t Uptr; typedef intptr_t Iptr; #endif WAVM_ALIGNED_STRUCT( 16, union V128 { U8 u8x16[16]; I8 i8x16[16]; U16 u16x8[8]; I16 i16x8[8]; U32 u32x4[4]; I32 i32x4[4]; F32 f32x4[4]; U64 u64x2[2]; I64 i64x2[2]; F64 f64x2[2]; }); } ================================================ FILE: Include/WAVM/Inline/CLI.h ================================================ #pragma once #include #include #include // IWYU pragma: keep #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/File.h" #include "WAVM/VFS/VFS.h" namespace WAVM { inline bool loadFile(const char* filename, std::vector& outFileContents) { VFS::Result result; VFS::VFD* vfd = nullptr; { result = Platform::getHostFS().open( filename, VFS::FileAccessMode::readOnly, VFS::FileCreateMode::openExisting, vfd); if(result != VFS::Result::success) { goto printAndReturnError; } // Ensure that we didn't open a directory. VFS::FileInfo fileInfo; result = vfd->getFileInfo(fileInfo); if(result != VFS::Result::success) { goto printAndReturnError; } else if(fileInfo.type == VFS::FileType::directory) { result = VFS::Result::isDirectory; goto printAndReturnError; } U64 numFileBytes64 = 0; result = vfd->seek(0, VFS::SeekOrigin::end, &numFileBytes64); if(result != VFS::Result::success) { goto printAndReturnError; } else if(numFileBytes64 > UINTPTR_MAX) { result = VFS::Result::outOfMemory; goto printAndReturnError; } const Uptr numFileBytes = Uptr(numFileBytes64); outFileContents.resize(numFileBytes); result = vfd->seek(0, VFS::SeekOrigin::begin); if(result != VFS::Result::success) { goto printAndReturnError; } result = vfd->read(const_cast(outFileContents.data()), numFileBytes); if(result != VFS::Result::success) { goto printAndReturnError; } result = vfd->close(); vfd = nullptr; if(result != VFS::Result::success) { goto printAndReturnError; } return true; } printAndReturnError: Log::printf(Log::error, "Error loading '%s': %s\n", filename, VFS::describeResult(result)); if(vfd) { WAVM_ERROR_UNLESS(vfd->close() == VFS::Result::success); } return false; } inline bool saveFile(const char* filename, const void* fileBytes, Uptr numFileBytes) { VFS::Result result; VFS::VFD* vfd = nullptr; { result = Platform::getHostFS().open( filename, VFS::FileAccessMode::writeOnly, VFS::FileCreateMode::createAlways, vfd); if(result != VFS::Result::success) { goto printAndReturnError; } result = vfd->write(fileBytes, numFileBytes); if(result != VFS::Result::success) { goto printAndReturnError; } result = vfd->close(); if(result != VFS::Result::success) { vfd = nullptr; goto printAndReturnError; } return true; } printAndReturnError: Log::printf(Log::error, "Error saving '%s': %s\n", filename, VFS::describeResult(result)); if(vfd) { WAVM_ERROR_UNLESS(vfd->close() == VFS::Result::success); } return false; } inline const char* getEnvironmentVariableHelpText() { return "Environment variables:\n" " WAVM_OUTPUT=(,)*\n" " Enables printing of different categories of information to stdout.\n" " Categories:\n" " metrics Performance and memory use metrics\n" " debug Debug information\n" " trace-validation Trace instructions as they are validated\n" " trace-compilation Trace instructions as they are compiled\n" " trace-unwind Trace stack unwinding before exceptions\n" " trace-object-cache Trace object cache lookups\n" " trace-linking Trace object linking relocations\n" "\n" " WAVM_OBJECT_CACHE_DIR=\n" " Specifies a directory that WAVM will use to cache compiled object\n" " code for WebAssembly modules.\n" "\n" " WAVM_OBJECT_CACHE_MAX_MB=\n" " Specifies the maximum amount of disk space that WAVM will use to\n" " cache compiled object code.\n"; } inline bool initLogFromEnvironment() { const char* wavmOutputEnv = WAVM_SCOPED_DISABLE_SECURE_CRT_WARNINGS(getenv("WAVM_OUTPUT")); if(wavmOutputEnv && *wavmOutputEnv) { std::string category; for(Uptr charIndex = 0;; ++charIndex) { const char c = wavmOutputEnv[charIndex]; if(c && c != ',') { category += c; } else { if(category == "metrics") { Log::setCategoryEnabled(Log::metrics, true); } else if(category == "debug") { Log::setCategoryEnabled(Log::debug, true); } else if(category == "trace-validation") { Log::setCategoryEnabled(Log::traceValidation, true); } else if(category == "trace-compilation") { Log::setCategoryEnabled(Log::traceCompilation, true); } else if(category == "trace-unwind") { Log::setCategoryEnabled(Log::traceUnwind, true); } else if(category == "trace-object-cache") { Log::setCategoryEnabled(Log::traceObjectCache, true); } else if(category == "trace-linking") { Log::setCategoryEnabled(Log::traceLinking, true); } else if(category == "trace-dwarf") { Log::setCategoryEnabled(Log::traceDwarf, true); } else { Log::printf(Log::error, "Invalid category in WAVM_OUTPUT environment: %s\n", category.c_str()); return false; } if(!c) { break; } else { category.clear(); } } } } return true; } template bool stringStartsWith(const char* string, const char (&prefix)[numPrefixChars], const char*& outSuffixStart) { if(!strncmp(string, prefix, numPrefixChars - 1)) { outSuffixStart = string + numPrefixChars - 1; return true; } else { outSuffixStart = nullptr; return false; } } // Parses a comma-separated feature spec like "+sse4.1,+avx,-avx512f". // Each item must have a '+' or '-' prefix. The setFeature lambda is called // with (name, enable) for each parsed feature and must return true if the // feature name was recognized. template bool parseFeatureSpec(const char* featureStr, F&& setFeature) { const char* ptr = featureStr; while(*ptr) { if(*ptr == ',') { ++ptr; continue; } bool enable; if(*ptr == '+') { enable = true; ++ptr; } else if(*ptr == '-') { enable = false; ++ptr; } else { Log::printf(Log::error, "Expected '+' or '-' prefix in feature spec: %s\n", ptr); return false; } const char* nameStart = ptr; while(*ptr && *ptr != ',') { ++ptr; } std::string name(nameStart, ptr); if(!setFeature(name, enable)) { Log::printf(Log::error, "Unknown feature '%s'.\n", name.c_str()); return false; } } return true; } } ================================================ FILE: Include/WAVM/Inline/CMakeLists.txt ================================================ set(Headers Assert.h BasicTypes.h CLI.h DenseStaticIntSet.h Errors.h FloatComponents.h Hash.h HashMap.h HashSet.h HashTable.h I128.h IndexMap.h InlineArray.h IntrusiveSharedPtr.h IsNameChar.h Impl/HashMapImpl.h Impl/HashSetImpl.h Impl/HashTableImpl.h Impl/I128Impl.h Impl/OptionalStorage.h RandomStream.h Serialization.h Time.h Timing.h Unicode.h LEB128.h) set(NonCompiledSources Config.h.in Impl/HashMap.natvis Impl/HashSet.natvis Impl/HashTable.natvis Impl/I128Impl.LICENSE Impl/OptionalStorage.natvis) WAVM_ADD_LIB_COMPONENT(Inline HEADERS ${Headers} NONCOMPILED_SOURCES ${NonCompiledSources} PUBLIC_SYSTEM_INCLUDE_DIRECTORIES $ $) add_subdirectory(xxhash) ================================================ FILE: Include/WAVM/Inline/Config.h.in ================================================ #cmakedefine01 WAVM_ENABLE_RUNTIME #cmakedefine01 WAVM_ENABLE_STATIC_LINKING #cmakedefine01 WAVM_ENABLE_ASAN #cmakedefine01 WAVM_ENABLE_UBSAN #cmakedefine01 WAVM_ENABLE_TSAN #cmakedefine01 WAVM_ENABLE_LIBFUZZER #cmakedefine01 WAVM_ENABLE_RELEASE_ASSERTS // UnwindState storage size and alignment (detected at configure time) #define WAVM_PLATFORM_UNWIND_STATE_SIZE @WAVM_PLATFORM_UNWIND_STATE_SIZE@ #define WAVM_PLATFORM_UNWIND_STATE_ALIGN @WAVM_PLATFORM_UNWIND_STATE_ALIGN@ // Synchronization primitive sizes and alignments (detected at configure time) #define WAVM_PLATFORM_MUTEX_SIZE @WAVM_PLATFORM_MUTEX_SIZE@ #define WAVM_PLATFORM_MUTEX_ALIGN @WAVM_PLATFORM_MUTEX_ALIGN@ #define WAVM_PLATFORM_COND_SIZE @WAVM_PLATFORM_COND_SIZE@ #define WAVM_PLATFORM_COND_ALIGN @WAVM_PLATFORM_COND_ALIGN@ #define WAVM_PLATFORM_RWMUTEX_SIZE @WAVM_PLATFORM_RWMUTEX_SIZE@ #define WAVM_PLATFORM_RWMUTEX_ALIGN @WAVM_PLATFORM_RWMUTEX_ALIGN@ ================================================ FILE: Include/WAVM/Inline/DenseStaticIntSet.h ================================================ #pragma once #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Platform/Intrinsic.h" // IWYU pragma: keep namespace WAVM { // Encapsulates a set of integers that are in the range 0 to maxIndexPlusOne (excluding // maxIndexPlusOne). It uses 1 bit of storage for each integer in the range, and many operations // look at all bits, so it's best suited to small ranges. However, this avoids heap allocations, // and so is pretty fast for sets of small integers (e.g. U8). template struct DenseStaticIntSet { DenseStaticIntSet() { memset(elements, 0, sizeof(elements)); } DenseStaticIntSet(Index index) { memset(elements, 0, sizeof(elements)); add(index); } // Queries inline bool contains(Index index) const { WAVM_ASSERT((Uptr)index < maxIndexPlusOne); return (elements[index / indicesPerElement] & (Element(1) << (index % indicesPerElement))) != 0; } bool isEmpty() const { Element combinedElements = 0; for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { combinedElements |= elements[elementIndex]; } return combinedElements == 0; } inline Index getSmallestMember() const { // Find the first element that has any bits set. for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { if(elements[elementIndex]) { // Find the index of the lowest set bit in the element using // countTrailingZeroes. const Index result = (Index)(elementIndex * indicesPerElement + countTrailingZeroes(elements[elementIndex])); WAVM_ASSERT(contains(result)); return result; } } return maxIndexPlusOne; } inline Index getSmallestNonMember() const { // Find the first element that doesn't have all bits set. for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { if(~elements[elementIndex] != 0) { // Find the index of the lowest set bit in the element using // countTrailingZeroes. const Index result = (Index)(elementIndex * indicesPerElement + countTrailingZeroes(~elements[elementIndex])); if(result >= maxIndexPlusOne) { break; } else { WAVM_ASSERT(!contains(result)); return result; } } } return maxIndexPlusOne; } // Adding/removing indices inline void add(Index index) { WAVM_ASSERT((Uptr)index < maxIndexPlusOne); elements[index / indicesPerElement] |= Element(1) << (index % indicesPerElement); } inline void addRange(Index rangeMin, Index rangeMax) { WAVM_ASSERT(rangeMin <= rangeMax); WAVM_ASSERT((Uptr)rangeMax < maxIndexPlusOne); for(Index index = rangeMin; index <= rangeMax; ++index) { add(index); } } inline bool remove(Index index) { const Element elementMask = Element(1) << (index % indicesPerElement); const bool hadIndex = (elements[index / indicesPerElement] & elementMask) != 0; elements[index / indicesPerElement] &= ~elementMask; return hadIndex; } // Logical operators friend DenseStaticIntSet operator~(const DenseStaticIntSet& set) { DenseStaticIntSet result; for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { result.elements[elementIndex] = ~set.elements[elementIndex]; } return result; } friend DenseStaticIntSet operator|(const DenseStaticIntSet& left, const DenseStaticIntSet& right) { DenseStaticIntSet result; for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { result.elements[elementIndex] = left.elements[elementIndex] | right.elements[elementIndex]; } return result; } friend DenseStaticIntSet operator&(const DenseStaticIntSet& left, const DenseStaticIntSet& right) { DenseStaticIntSet result; for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { result.elements[elementIndex] = left.elements[elementIndex] & right.elements[elementIndex]; } return result; } friend DenseStaticIntSet operator^(const DenseStaticIntSet& left, const DenseStaticIntSet& right) { DenseStaticIntSet result; for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { result.elements[elementIndex] = left.elements[elementIndex] ^ right.elements[elementIndex]; } return result; } // Comparisons friend bool operator==(const DenseStaticIntSet& left, const DenseStaticIntSet& right) { return memcmp(left.elements, right.elements, sizeof(DenseStaticIntSet::elements)) == 0; } friend bool operator!=(const DenseStaticIntSet& left, const DenseStaticIntSet& right) { return memcmp(left.elements, right.elements, sizeof(DenseStaticIntSet::elements)) != 0; } friend bool operator<(const DenseStaticIntSet& left, const DenseStaticIntSet& right) { return memcmp(left.elements, right.elements, sizeof(DenseStaticIntSet::elements)) < 0; } Uptr getHash(Uptr seed = 0) const { return XXH(elements, sizeof(elements), seed); } private: typedef Uptr Element; static constexpr Uptr indicesPerElement = sizeof(Element) * 8; static constexpr Uptr numElements = (maxIndexPlusOne + indicesPerElement - 1) / indicesPerElement; Element elements[numElements]; }; template struct Hash> { Uptr operator()(const DenseStaticIntSet& set, Uptr seed = 0) const { return set.getHash(seed); } }; } ================================================ FILE: Include/WAVM/Inline/Errors.h ================================================ #pragma once #include #include "WAVM/Platform/Error.h" namespace WAVM { namespace Errors { // Fatal error handling. [[noreturn]] inline void fatalfWithCallStack(const char* messageFormat, ...) { va_list varArgs; va_start(varArgs, messageFormat); Platform::handleFatalError(messageFormat, true, varArgs); } [[noreturn]] inline void fatalf(const char* messageFormat, ...) { va_list varArgs; va_start(varArgs, messageFormat); Platform::handleFatalError(messageFormat, false, varArgs); } [[noreturn]] inline void fatal(const char* message) { fatalf("%s", message); } [[noreturn]] inline void unimplemented(const char* context) { fatalf("%s is unimplemented", context); } }} ================================================ FILE: Include/WAVM/Inline/FixedString.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" namespace WAVM { // A fixed-capacity, null-terminated string that lives entirely in inline storage. // Signal-safe: no heap allocation. Truncates silently on overflow. template struct FixedString { static_assert(N > 0, "FixedString capacity must be at least 1"); char data[N]; FixedString() { data[0] = '\0'; } // Assign from a null-terminated C string. Handles null pointers (becomes empty). FixedString& operator=(const char* str) { if(str) { Uptr len = strlen(str); if(len > N - 1) { len = N - 1; } memcpy(data, str, len); data[len] = '\0'; } else { data[0] = '\0'; } return *this; } // Assign from a pointer and known length. Truncates if len > N-1. void assign(const char* str, Uptr len) { if(len > N - 1) { len = N - 1; } memcpy(data, str, len); data[len] = '\0'; } const char* c_str() const { return data; } operator const char*() const { return data; } Uptr size() const { return strlen(data); } bool empty() const { return data[0] == '\0'; } // Mutable access for OS APIs that write directly into the buffer // (e.g. GetModuleFileNameA). Caller is responsible for null-termination. char* mutableData() { return data; } static constexpr Uptr capacity() { return N; } }; } ================================================ FILE: Include/WAVM/Inline/FloatComponents.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" namespace WAVM { template struct FloatComponents; // The components of a 64-bit float template<> struct FloatComponents { typedef U64 Bits; typedef F64 Float; static constexpr I64 maxSignificand = 0xfffffffffffff; static constexpr Uptr numSignificandBits = 52; static constexpr Uptr numSignificandHexits = 13; static constexpr I64 canonicalSignificand = 0x8000000000000ull; static constexpr I64 denormalExponent = -1023; static constexpr I64 minNormalExponent = -1022; static constexpr I64 maxNormalExponent = 1023; static constexpr I64 exponentBias = 1023; static constexpr I64 maxExponentBits = 0x7ff; union { struct { U64 significand : 52; U64 exponent : 11; U64 sign : 1; } bits; Float value; Bits bitcastInt; }; }; // The components of a 32-bit float. template<> struct FloatComponents { typedef U32 Bits; typedef F32 Float; static constexpr I32 maxSignificand = 0x7fffff; static constexpr Uptr numSignificandBits = 23; static constexpr Uptr numSignificandHexits = 6; static constexpr I32 canonicalSignificand = 0x400000; static constexpr I32 denormalExponent = -127; static constexpr I32 minNormalExponent = -126; static constexpr I32 maxNormalExponent = 127; static constexpr I32 exponentBias = 127; static constexpr I32 maxExponentBits = 0xff; union { struct { U32 significand : 23; U32 exponent : 8; U32 sign : 1; } bits; Float value; Bits bitcastInt; }; }; } ================================================ FILE: Include/WAVM/Inline/Hash.h ================================================ #pragma once #include #include #include #include #include "BasicTypes.h" #define XXH_FORCE_NATIVE_FORMAT 1 #define XXH_INLINE_ALL #include #if defined(__GNUC__) || defined(__clang__) #undef Long #endif namespace WAVM { template struct Hash : std::hash { }; inline U32 XXH32_fixed(U32 data, U32 seed) { const U32 a = data * I32(0x3D4D51C3); const U32 b = seed + 0x165667B5 - a; const U32 c = (b << 17) | (b >> 15); const U32 d = c * I32(0x27D4EB2F); const U32 e = d >> 15; const U32 f = d ^ e; const U32 g = f * I32(0x85EBCA77); const U32 h = g >> 13; const U32 i = g ^ h; const U32 j = i * I32(0xC2B2AE3D); const U32 k = j << 16; const U32 l = j ^ k; return l; } inline U64 XXH64_fixed(U64 data, U64 seed) { const U64 a = data * I64(0xC2B2AE3D27D4EB4F); const U64 b = (a << 31) | (a >> 33); const U64 c = b * I64(0x9E3779B185EBCA87); const U64 d = c ^ (seed + 0x27D4EB2F165667CD); const U64 e = (d << 27) | (d >> 37); const U64 f = e * I64(0x9E3779B185EBCA87); const U64 g = f - 0x7A1435883D4D519D; const U64 h = g >> 33; const U64 i = g ^ h; const U64 j = i * I64(0xC2B2AE3D27D4EB4F); const U64 k = j >> 29; const U64 l = j ^ k; const U64 m = l * I64(0x165667B19E3779F9); const U64 n = m >> 32; const U64 o = m ^ n; return o; } template inline Hash XXH(const void* data, Uptr numBytes, Hash seed); template<> inline U32 XXH(const void* data, Uptr numBytes, U32 seed) { return ((U32)XXH3_64bits(data, numBytes)) ^ seed; } template<> inline U64 XXH(const void* data, Uptr numBytes, U64 seed) { return XXH3_64bits(data, numBytes) ^ seed; } template<> struct Hash { Uptr operator()(U8 i, Uptr seed = 0) const { return Uptr(XXH32_fixed(U32(i), U32(seed))); } }; template<> struct Hash { Uptr operator()(I8 i, Uptr seed = 0) const { return Uptr(XXH32_fixed(I32(i), U32(seed))); } }; template<> struct Hash { Uptr operator()(U16 i, Uptr seed = 0) const { return Uptr(XXH32_fixed(U32(i), U32(seed))); } }; template<> struct Hash { Uptr operator()(I16 i, Uptr seed = 0) const { return Uptr(XXH32_fixed(I32(i), U32(seed))); } }; template<> struct Hash { Uptr operator()(U32 i, Uptr seed = 0) const { return Uptr(XXH32_fixed(U32(i), U32(seed))); } }; template<> struct Hash { Uptr operator()(I32 i, Uptr seed = 0) const { return Uptr(XXH32_fixed(I32(i), U32(seed))); } }; template<> struct Hash { Uptr operator()(U64 i, Uptr seed = 0) const { return Uptr(XXH64_fixed(U64(i), U64(seed))); } }; template<> struct Hash { Uptr operator()(I64 i, Uptr seed = 0) const { return Uptr(XXH64_fixed(I64(i), U64(seed))); } }; template<> struct Hash { Uptr operator()(const std::string& string, Uptr seed = 0) const { return Uptr(XXH64(string.data(), string.size(), seed)); } }; template<> struct Hash { Uptr operator()(std::string_view string, Uptr seed = 0) const { return Uptr(XXH64(string.data(), string.size(), seed)); } }; template struct Hash> { Uptr operator()(const std::vector& vector, Uptr seed = 0) const { Uptr hash = seed; for(const Element& element : vector) { hash = Hash()(element, hash); } return hash; } }; template struct DefaultHashPolicy { static bool areKeysEqual(const Key& left, const Key& right) { return left == right; } static Uptr getKeyHash(const Key& key) { return Hash()(key); } }; template<> struct DefaultHashPolicy { static bool areKeysEqual(const std::string& left, const std::string& right) { return left == right; } static bool areKeysEqual(const std::string& left, std::string_view right) { return left == right; } static Uptr getKeyHash(const std::string& key) { return Uptr(XXH64(key.data(), key.size(), 0)); } static Uptr getKeyHash(std::string_view key) { return Uptr(XXH64(key.data(), key.size(), 0)); } }; } ================================================ FILE: Include/WAVM/Inline/HashMap.h ================================================ // Use both #pragma once and include guards: we test that headers compile as standalone translation // units, and the circular include with the Impl header means #pragma once alone doesn't work. #pragma once #ifndef WAVM_INLINE_HASHMAP_H #define WAVM_INLINE_HASHMAP_H #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/HashTable.h" #include "WAVM/Platform/Defines.h" namespace WAVM { template struct HashMapPair { Key key; Value value; template HashMapPair(const Key& inKey, ValueArgs&&... valueArgs); template HashMapPair(Key&& inKey, ValueArgs&&... valueArgs); }; template struct HashMapIterator { template friend struct HashMap; typedef HashMapPair Pair; bool operator!=(const HashMapIterator& other) const; bool operator==(const HashMapIterator& other) const; operator bool() const; void operator++(); const Pair& operator*() const; const Pair* operator->() const; private: const HashTableBucket* bucket; const HashTableBucket* endBucket; HashMapIterator(const HashTableBucket* inBucket, const HashTableBucket* inEndBucket); }; template> struct HashMap { typedef HashMapPair Pair; typedef HashMapIterator Iterator; HashMap(Uptr reserveNumPairs = 0); HashMap(const std::initializer_list& initializerList); // If the map contains the key already, returns the value bound to that key. // If the map doesn't contain the key, adds it to the map bound to a value constructed from // the provided arguments. template Value& getOrAdd(const Key& key, ValueArgs&&... valueArgs); // If the map contains the key already, returns false. // If the map doesn't contain the key, adds it to the map bound to a value constructed from // the provided arguments, and returns true. template bool add(const Key& key, ValueArgs&&... valueArgs); // Assuming the map doesn't contain the key, add it. Asserts if the map contained the key, // or silently does nothing if assertions are disabled. template void addOrFail(const Key& key, ValueArgs&&... valueArgs); // If the map contains the key already, replaces the value bound to it with a value // constructed from the provided arguments. If the map doesn't contain the key, adds it to // the map bound to a value constructed from the provided arguments. In both cases, a // reference to the value bound to the key is returned. template Value& set(const Key& key, ValueArgs&&... valueArgs); // If the map contains the key, removes it and returns true. // If the map doesn't contain the key, returns false. bool remove(const Key& key); // Assuming the map contains the key, remove it. Asserts if the map didn't contain the key, // or silently does nothing if assertions are disabled. void removeOrFail(const Key& key); // Returns true if the map contains the key. bool contains(const Key& key) const; // Returns a reference to the value bound to the key. Assumes that the map contains the key. const Value& operator[](const Key& key) const; Value& operator[](const Key& key); // Returns a pointer to the value bound to the key, or null if the map doesn't contain the // key. template const Value* get(const LookupKey& key) const; template Value* get(const LookupKey& key); // Returns a pointer to the key-value pair for a key, or null if the map doesn't contain the // key. const Pair* getPair(const Key& key) const; // Removes all pairs from the map. void clear(); Iterator begin() const; Iterator end() const; Uptr size() const; // Compute some statistics about the space usage of this map. void analyzeSpaceUsage(Uptr& outTotalMemoryBytes, Uptr& outMaxProbeCount, F32& outOccupancy, F32& outAverageProbeCount) const; private: struct HashTablePolicy { WAVM_FORCEINLINE static const Key& getKey(const Pair& pair) { return pair.key; } template WAVM_FORCEINLINE static bool areKeysEqual(const Key& left, const LookupKey& right) { return KeyHashPolicy::areKeysEqual(left, right); } }; HashTable table; }; } #include "Impl/HashMapImpl.h" // IWYU pragma: export #endif // WAVM_INLINE_HASHMAP_H ================================================ FILE: Include/WAVM/Inline/HashSet.h ================================================ // Use both #pragma once and include guards: we test that headers compile as standalone translation // units, and the circular include with the Impl header means #pragma once alone doesn't work. #pragma once #ifndef WAVM_INLINE_HASHSET_H #define WAVM_INLINE_HASHSET_H #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/HashTable.h" #include "WAVM/Platform/Defines.h" namespace WAVM { template struct HashSetIterator { template friend struct HashSet; bool operator!=(const HashSetIterator& other) const; bool operator==(const HashSetIterator& other) const; operator bool() const; void operator++(); const Element& operator*() const; const Element* operator->() const; private: const HashTableBucket* bucket; const HashTableBucket* endBucket; HashSetIterator(const HashTableBucket* inBucket, const HashTableBucket* inEndBucket); }; template> struct HashSet { HashSet(Uptr reserveNumElements = 0); HashSet(const std::initializer_list& initializerList); // If the set contains the element already, returns false. // If the set didn't contain the element, adds it and returns true. bool add(const Element& element); // Assuming the set doesn't contain the element, add it. Asserts if the set contained the // element, or silently does nothing if assertions are disabled. void addOrFail(const Element& element); // If the set contains the element, removes it and returns true. // If the set doesn't contain the element, returns false. bool remove(const Element& element); // Assuming the set contains the element, remove it. Asserts if the set didn't contain the // element, or silently does nothing if assertions are disabled. void removeOrFail(const Element& element); // Returns a reference to the element in the set matching the given element. Assumes that // the map contains the key. This is useful if the hash policy allows distinct elements to // compare as equal; e.g. for deduplicating equivalent values. const Element& operator[](const Element& element) const; // Returns true if the set contains the element. bool contains(const Element& element) const; // If the set contains the element, returns a pointer to it. This is useful if the hash // policy allows distinct elements to compare as equal; e.g. for deduplicating equivalent // values. const Element* get(const Element& element) const; // Removes all elements from the set. void clear(); HashSetIterator begin() const; HashSetIterator end() const; Uptr size() const; // Compute some statistics about the space usage of this set. void analyzeSpaceUsage(Uptr& outTotalMemoryBytes, Uptr& outMaxProbeCount, F32& outOccupancy, F32& outAverageProbeCount) const; private: struct HashTablePolicy { WAVM_FORCEINLINE static const Element& getKey(const Element& element) { return element; } WAVM_FORCEINLINE static bool areKeysEqual(const Element& left, const Element& right) { return ElementHashPolicy::areKeysEqual(left, right); } }; HashTable table; }; } #include "Impl/HashSetImpl.h" // IWYU pragma: export #endif // WAVM_INLINE_HASHSET_H ================================================ FILE: Include/WAVM/Inline/HashTable.h ================================================ // Use both #pragma once and include guards: we test that headers compile as standalone translation // units, and the circular include with the Impl header means #pragma once alone doesn't work. #pragma once #ifndef WAVM_INLINE_HASHTABLE_H #define WAVM_INLINE_HASHTABLE_H #include "BasicTypes.h" #include "Impl/OptionalStorage.h" #include "WAVM/Platform/Intrinsic.h" namespace WAVM { struct DefaultHashTableAllocPolicy { static constexpr Uptr minBuckets = 8; static Uptr divideAndRoundUp(Uptr numerator, Uptr denominator) { return (numerator + denominator - 1) / denominator; } static Uptr getMaxDesiredBuckets(Uptr numDesiredElements) { const Uptr maxDesiredBuckets = Uptr(1) << ceilLogTwo(divideAndRoundUp(numDesiredElements * 20, 7)); return maxDesiredBuckets < minBuckets ? minBuckets : maxDesiredBuckets; } static Uptr getMinDesiredBuckets(Uptr numDesiredElements) { if(numDesiredElements == 0) { return 0; } else { const Uptr minDesiredBuckets = Uptr(1) << ceilLogTwo(divideAndRoundUp(numDesiredElements * 20, 16)); return minDesiredBuckets < minBuckets ? minBuckets : minDesiredBuckets; } } }; /* struct HashTablePolicy { static const Key& getKey(const Element&); static bool areKeysEqual(const Key&, const Key&); }; */ template struct HashTableBucket { OptionalStorage storage; Uptr hashAndOccupancy; static constexpr Uptr isOccupiedMask = Uptr(1) << (sizeof(Uptr) * 8 - 1); static constexpr Uptr hashMask = ~isOccupiedMask; }; // A lightly encapsulated hash table, used internally by HashMap and HashSet. // // It has a concept of both elements and keys: the key is something derivable from an element // that is used to find an element in the table. For a set, Key=Element, but for a map, // Key!=Element, and HashTablePolicy::getKey(Element) is used to derive the key of an element in // the hash table. // // The implementation is a Robin Hood hash table. // // The buckets are a linear array of elements paired with pointer-sized metadata that uses 1 // bit to indicate whether the bucket is occupied, and the rest of the bits to store the hash of // the occupying element. The array is indexed by a hash of the element's key, modulo the number // of buckets, which is always a power of two. // // Storing the hash and occupancy of a bucket imposes some overhead on the simplest cases // where the key is small/easy to hash and has a null value, but avoids pathological performance // in the general case. It also makes it easier to write good debugger visualizers for the hash // tables. // // If more than one element hashes to the same bucket, the extra elements will be stored in // the buckets following the "ideal bucket" in the table. There is an abstract concept of how // "rich" an element is by how close it is stored to its ideal bucket. // When inserting new elements, they are stored in the leftmost bucket, starting from their // ideal bucket, that is empty or holds an element that hashes to a higher bucket than their // ideal bucket. If the bucket contains an element, that element, and the elements from any // subsequent consecutively occupied buckets are moved one bucket right to make space for it. // When removing an element, the chain of elements in following buckets are shifted left into // the hole until an empty bucket is found, or an element that is in its ideal bucket. // This insert/remove strategy maintains the invariant that all elements that hash to the same // ideal bucket are stored in consecutive buckets at or following the ideal bucket, and elements // that hash to different buckets are sorted w.r.t. their ideal bucket. This invariant allows // searches to stop once they reach an element whose ideal bucket is to the right of the search // key's ideal bucket, limiting the worst case search time. // // This is more complex than an externally chained hash table, which stored a list of elements // in each hash bucket, but has far better cache coherency as searching for a key is a linear // walk through memory, and less allocator overhead as the entire table uses a single // allocation. // // For the table to function correctly, it must contain at least one empty bucket. As the // table approaches 100% occupancy, the collision rate increases, and the worst case search time // increases quickly. // The table is dynamically resized as dictated by the AllocPolicy. The default // policy keeps the table between 35% and 80% occupied. This gives an average occupancy of 65%, // or about 2x space usage compared to just storing an array of the elements. template struct HashTable { typedef HashTableBucket Bucket; HashTable(Uptr estimatedNumElements = 0); HashTable(const HashTable& copy); HashTable(HashTable&& movee) noexcept; ~HashTable(); HashTable& operator=(const HashTable& copyee); HashTable& operator=(HashTable&& movee) noexcept; void clear(); void resize(Uptr newNumBuckets); bool remove(Uptr hash, const Key& key); template const Bucket* getBucketForRead(Uptr hash, const LookupKey& key) const; template Bucket* getBucketForModify(Uptr hash, const LookupKey& key); Bucket& getBucketForAdd(Uptr hash, const Key& key); Uptr size() const { return numElements; } Uptr numBuckets() const { return hashToBucketIndexMask + 1; } Bucket* getBuckets() const { return buckets; } // Compute some statistics about the space usage of this hash table. void analyzeSpaceUsage(Uptr& outTotalMemoryBytes, Uptr& outMaxProbeCount, F32& outOccupancy, F32& outAverageProbeCount) const; private: Bucket* buckets; Uptr numElements; Uptr hashToBucketIndexMask; // Calculates the distance of the element in the bucket from its ideal bucket. Uptr calcProbeCount(Uptr bucketIndex) const; Bucket& getBucketForWrite(Uptr hash, const Key& key); void evictHashBucket(Uptr bucketIndex); void eraseHashBucket(Uptr eraseBucketIndex); void destruct(); void copyFrom(const HashTable& copy); void moveFrom(HashTable&& movee) noexcept; }; } #include "Impl/HashTableImpl.h" // IWYU pragma: export #endif // WAVM_INLINE_HASHTABLE_H ================================================ FILE: Include/WAVM/Inline/I128.h ================================================ // Use both #pragma once and include guards: we test that headers compile as standalone translation // units, and the circular include with the Impl header means #pragma once alone doesn't work. #pragma once #ifndef WAVM_INLINE_I128_H #define WAVM_INLINE_I128_H #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { // The result for WAVM::toChars(bufferBegin, bufferEnd, ...) struct ToCharsResult { // points to the character after the last character written to the buffer. char* writeEnd; // true if the toChars call wanted to write more characters than the buffer could hold. bool overflow; }; // An emulated 128-bit integer type // They have the range (-2^127..+2^127), with a single NaN value. // In general, NaN is propagated though operations: op(x, NaN) = NaN. // Unlike the arithmetic operators on C's built in integer types, the I128 operators detect // overflow and turn it into NaN values. There's a non-exhaustive set of alternative functions // that can be used to do arithmetic modulo 2^127: e.g. mulmod127 and mulAndCheckForOverflow. struct alignas(16) I128 { constexpr I128() : lowU64(0), highU64(0) {} constexpr I128(I32 value) : lowI64(value), highI64(value >= 0 ? 0 : -1) {} constexpr I128(U32 value) : lowU64(value), highU64(0) {} constexpr I128(I64 value) : lowI64(value), highI64(value >= 0 ? 0 : -1) {} constexpr I128(U64 value) : lowU64(value), highU64(0) {} constexpr I128(const I128& copyee) : lowU64(copyee.lowU64), highU64(copyee.highU64) {} static constexpr I128 nan() { return I128(U64(0), INT64_MIN); } static constexpr I128 min() { return I128(U64(1), INT64_MIN); } static constexpr I128 max() { return I128(UINT64_MAX, INT64_MAX); } // Conversion to smaller integer types. explicit operator U8() const; explicit operator I8() const; explicit operator U16() const; explicit operator I16() const; explicit operator U32() const; explicit operator I32() const; explicit operator U64() const; explicit operator I64() const; // Conversion to FP types. explicit operator F32() const; explicit operator F64() const; // Overflow handling friend bool isNaN(I128 i) { return i.highI64 == INT64_MIN && i.lowU64 == 0; } friend I128 assertOnNaN(I128 i) { WAVM_ASSERT(!isNaN(i)); return i; } friend I128 flushNaNToMax(I128 i) { return isNaN(i) ? max() : i; } friend I128 flushNaNToMin(I128 i) { return isNaN(i) ? min() : i; } friend I128 flushNaNToZero(I128 i) { return isNaN(i) ? I128() : i; } // Unary operators friend I128 operator+(I128 a); friend I128 operator-(I128 a); friend I128 operator~(I128 a); friend I128 abs(I128 a); // Binary operators that will return nan on overflow. friend I128 operator+(I128 a, I128 b); friend I128 operator-(I128 a, I128 b); friend I128 operator*(I128 a, I128 b); friend I128 operator/(I128 a, I128 b); friend I128 operator%(I128 a, I128 b); friend I128 operator>>(I128 a, I128 b); friend I128 operator<<(I128 a, I128 b); friend I128 operator^(I128 a, I128 b); friend I128 operator&(I128 a, I128 b); friend I128 operator|(I128 a, I128 b); // Addition and multiplication that return a value modulo 2^127 instead of overflowing. friend I128 mulmod127(I128 a, I128 b); friend I128 addmod127(I128 a, I128 b); // Addition and multiplication that will write a result modulo 2^127 to out and return // whether it overflowed. friend bool addAndCheckOverflow(I128 a, I128 b, I128* out); friend bool mulAndCheckOverflow(I128 a, I128 b, I128* out); // Comparison operators friend bool operator>(I128 a, I128 b); friend bool operator>=(I128 a, I128 b); friend bool operator<(I128 a, I128 b); friend bool operator<=(I128 a, I128 b); friend bool operator==(I128 a, I128 b); friend bool operator!=(I128 a, I128 b); // Assignment operators I128& operator=(const I128& copyee) { lowU64 = copyee.lowU64; highU64 = copyee.highU64; return *this; } I128& operator+=(I128 b) { return *this = *this + b; } I128& operator-=(I128 b) { return *this = *this - b; } I128& operator*=(I128 b) { return *this = *this * b; } I128& operator>>=(I128 b) { return *this = *this >> b; } I128& operator<<=(I128 b) { return *this = *this << b; } I128& operator^=(I128 b) { return *this = *this ^ b; } I128& operator&=(I128 b) { return *this = *this & b; } I128& operator|=(I128 b) { return *this = *this | b; } I128& operator/=(I128 b) { return *this = *this / b; } I128& operator%=(I128 b) { return *this = *this % b; } friend ToCharsResult toChars(char* outBegin, char* outEnd, I128 value); private: union { U64 lowU64; I64 lowI64; }; union { U64 highU64; I64 highI64; }; static I128 udivmod(I128 a, I128 b, I128& outRemainder); template Float asFloat() const; constexpr I128(I64 inLow, I64 inHigh) : lowI64(inLow), highI64(inHigh) {} constexpr I128(U64 inLow, I64 inHigh) : lowU64(inLow), highI64(inHigh) {} constexpr I128(U64 inLow, U64 inHigh) : lowU64(inLow), highU64(inHigh) {} }; template>> Int clampedCast(I128 value); } #include "Impl/I128Impl.h" // IWYU pragma: export #endif // WAVM_INLINE_I128_H ================================================ FILE: Include/WAVM/Inline/Impl/HashMap.natvis ================================================ {key} => {value} key value {table.numElements} pairs ((WAVM::HashMapPair<$T1,$T2>*)&table.buckets[bucketIndex].storage.contents)->value ++bucketIndex ================================================ FILE: Include/WAVM/Inline/Impl/HashMapImpl.h ================================================ // IWYU pragma: private, include "WAVM/Inline/HashMap.h" #pragma once #ifndef WAVM_INLINE_IMPL_HASHMAPIMPL_H #define WAVM_INLINE_IMPL_HASHMAPIMPL_H #include "WAVM/Inline/HashMap.h" #include #include // IWYU pragma: keep #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashTable.h" namespace WAVM { // Use these macros to compress the boilerplate template declarations in a non-inline member // function definition for HashMap. #define HASHMAP_PARAMETERS typename Key, typename Value, typename KeyHashPolicy #define HASHMAP_ARGUMENTS Key, Value, KeyHashPolicy template HashMap::HashMap(Uptr reserveNumPairs) : table(reserveNumPairs) { } template HashMap::HashMap(const std::initializer_list& initializerList) : table(initializerList.size()) { for(const Pair& pair : initializerList) { const bool result = add(pair.key, pair.value); WAVM_ASSERT(result); } } template template Value& HashMap::getOrAdd(const Key& key, ValueArgs&&... valueArgs) { const Uptr hashAndOccupancy = KeyHashPolicy::getKeyHash(key) | HashTableBucket::isOccupiedMask; HashTableBucket& bucket = table.getBucketForAdd(hashAndOccupancy, key); if(!bucket.hashAndOccupancy) { bucket.hashAndOccupancy = hashAndOccupancy; bucket.storage.construct(key, std::forward(valueArgs)...); } return bucket.storage.get().value; } template template bool HashMap::add(const Key& key, ValueArgs&&... valueArgs) { const Uptr hashAndOccupancy = KeyHashPolicy::getKeyHash(key) | HashTableBucket::isOccupiedMask; HashTableBucket& bucket = table.getBucketForAdd(hashAndOccupancy, key); if(!bucket.hashAndOccupancy) { bucket.hashAndOccupancy = hashAndOccupancy; bucket.storage.construct(key, std::forward(valueArgs)...); return true; } else { return false; } } template template void HashMap::addOrFail(const Key& key, ValueArgs&&... valueArgs) { const Uptr hashAndOccupancy = KeyHashPolicy::getKeyHash(key) | HashTableBucket::isOccupiedMask; HashTableBucket& bucket = table.getBucketForAdd(hashAndOccupancy, key); WAVM_ASSERT(!bucket.hashAndOccupancy); bucket.hashAndOccupancy = hashAndOccupancy; bucket.storage.construct(key, std::forward(valueArgs)...); } template template Value& HashMap::set(const Key& key, ValueArgs&&... valueArgs) { const Uptr hashAndOccupancy = KeyHashPolicy::getKeyHash(key) | HashTableBucket::isOccupiedMask; HashTableBucket& bucket = table.getBucketForAdd(hashAndOccupancy, key); if(!bucket.hashAndOccupancy) { bucket.hashAndOccupancy = hashAndOccupancy; bucket.storage.construct(key, std::forward(valueArgs)...); } else { bucket.storage.get().value = Value(std::forward(valueArgs)...); } return bucket.storage.get().value; } template bool HashMap::remove(const Key& key) { return table.remove(KeyHashPolicy::getKeyHash(key), key); } template void HashMap::removeOrFail(const Key& key) { const bool removed = table.remove(KeyHashPolicy::getKeyHash(key), key); WAVM_ASSERT(removed); } template bool HashMap::contains(const Key& key) const { const Uptr hash = KeyHashPolicy::getKeyHash(key); const HashTableBucket* bucket = table.getBucketForRead(hash, key); WAVM_ASSERT(!bucket || bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return bucket != nullptr; } template const Value& HashMap::operator[](const Key& key) const { const Uptr hash = KeyHashPolicy::getKeyHash(key); const HashTableBucket* bucket = table.getBucketForRead(hash, key); WAVM_ASSERT(bucket); if(!bucket) { // In addition to the assert, use WAVM_UNREACHABLE to ensure that GCC's // -Wnull-dereference warning isn't triggered because it thinks this function might // return nullptr. WAVM_UNREACHABLE(); } WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return bucket->storage.get().value; } template Value& HashMap::operator[](const Key& key) { const Uptr hash = KeyHashPolicy::getKeyHash(key); HashTableBucket* bucket = table.getBucketForModify(hash, key); WAVM_ASSERT(bucket); if(!bucket) { // In addition to the assert, use WAVM_UNREACHABLE to ensure that GCC's // -Wnull-dereference warning isn't triggered because it thinks this function might // return nullptr. WAVM_UNREACHABLE(); } WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return bucket->storage.get().value; } template template const Value* HashMap::get(const LookupKey& key) const { const Uptr hash = KeyHashPolicy::getKeyHash(key); const HashTableBucket* bucket = table.getBucketForRead(hash, key); if(!bucket) { return nullptr; } else { WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return &bucket->storage.get().value; } } template template Value* HashMap::get(const LookupKey& key) { const Uptr hash = KeyHashPolicy::getKeyHash(key); HashTableBucket* bucket = table.getBucketForModify(hash, key); if(!bucket) { return nullptr; } else { WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return &bucket->storage.get().value; } } template const HashMapPair* HashMap::getPair(const Key& key) const { const Uptr hash = KeyHashPolicy::getKeyHash(key); const HashTableBucket* bucket = table.getBucketForRead(hash, key); if(!bucket) { return nullptr; } else { WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return &bucket->storage.get(); } } template void HashMap::clear() { table.clear(); } template HashMapIterator HashMap::begin() const { // Find the first occupied bucket. HashTableBucket* beginBucket = table.getBuckets(); if(!beginBucket) { return HashMapIterator(nullptr, nullptr); } HashTableBucket* endBucket = table.getBuckets() + table.numBuckets(); while(beginBucket < endBucket && !beginBucket->hashAndOccupancy) { ++beginBucket; }; return HashMapIterator(beginBucket, endBucket); } template HashMapIterator HashMap::end() const { return HashMapIterator(table.getBuckets() + table.numBuckets(), table.getBuckets() + table.numBuckets()); } template Uptr HashMap::size() const { return table.size(); } template void HashMap::analyzeSpaceUsage(Uptr& outTotalMemoryBytes, Uptr& outMaxProbeCount, F32& outOccupancy, F32& outAverageProbeCount) const { return table.analyzeSpaceUsage( outTotalMemoryBytes, outMaxProbeCount, outOccupancy, outAverageProbeCount); } template template HashMapPair::HashMapPair(const Key& inKey, ValueArgs&&... valueArgs) : key(inKey), value(std::forward(valueArgs)...) { } template template HashMapPair::HashMapPair(Key&& inKey, ValueArgs&&... valueArgs) : key(std::move(inKey)), value(std::forward(valueArgs)...) { } template bool HashMapIterator::operator!=(const HashMapIterator& other) const { return bucket != other.bucket; } template bool HashMapIterator::operator==(const HashMapIterator& other) const { return bucket == other.bucket; } template HashMapIterator::operator bool() const { return bucket < endBucket && bucket->hashAndOccupancy; } template void HashMapIterator::operator++() { do { ++bucket; } while(bucket < endBucket && !bucket->hashAndOccupancy); } template const HashMapPair& HashMapIterator::operator*() const { WAVM_ASSERT(bucket && bucket->hashAndOccupancy); return bucket->storage.get(); } template const HashMapPair* HashMapIterator::operator->() const { WAVM_ASSERT(bucket && bucket->hashAndOccupancy); return &bucket->storage.get(); } template HashMapIterator::HashMapIterator( const HashTableBucket>* inBucket, const HashTableBucket>* inEndBucket) : bucket(inBucket), endBucket(inEndBucket) { } } // namespace WAVM #undef HASHMAP_PARAMETERS #undef HASHMAP_ARGUMENTS #endif // WAVM_INLINE_IMPL_HASHMAPIMPL_H ================================================ FILE: Include/WAVM/Inline/Impl/HashSet.natvis ================================================ {table.numElements} elements table.buckets[bucketIndex].storage ++bucketIndex ================================================ FILE: Include/WAVM/Inline/Impl/HashSetImpl.h ================================================ // IWYU pragma: private, include "WAVM/Inline/HashSet.h" #pragma once #ifndef WAVM_INLINE_IMPL_HASHSETIMPL_H #define WAVM_INLINE_IMPL_HASHSETIMPL_H #include "WAVM/Inline/HashSet.h" #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashTable.h" namespace WAVM { template bool HashSetIterator::operator!=(const HashSetIterator& other) const { return bucket != other.bucket; } template bool HashSetIterator::operator==(const HashSetIterator& other) const { return bucket == other.bucket; } template HashSetIterator::operator bool() const { return bucket < endBucket && bucket->hashAndOccupancy; } template void HashSetIterator::operator++() { do { ++bucket; } while(bucket < endBucket && !bucket->hashAndOccupancy); } template const Element& HashSetIterator::operator*() const { WAVM_ASSERT(bucket && bucket->hashAndOccupancy); return bucket->storage.get(); } template const Element* HashSetIterator::operator->() const { WAVM_ASSERT(bucket && bucket->hashAndOccupancy); return &bucket->storage.get(); } template HashSetIterator::HashSetIterator(const HashTableBucket* inBucket, const HashTableBucket* inEndBucket) : bucket(inBucket), endBucket(inEndBucket) { } template HashSet::HashSet(Uptr reserveNumElements) : table(reserveNumElements) { } template HashSet::HashSet( const std::initializer_list& initializerList) : table(initializerList.size()) { for(const Element& element : initializerList) { const bool result = add(element); WAVM_ASSERT(result); } } template bool HashSet::add(const Element& element) { const Uptr hash = ElementHashPolicy::getKeyHash(element); HashTableBucket& bucket = table.getBucketForAdd(hash, element); if(bucket.hashAndOccupancy != 0) { return false; } else { bucket.hashAndOccupancy = hash | HashTableBucket::isOccupiedMask; bucket.storage.construct(element); return true; } } template void HashSet::addOrFail(const Element& element) { const Uptr hash = ElementHashPolicy::getKeyHash(element); HashTableBucket& bucket = table.getBucketForAdd(hash, element); WAVM_ASSERT(!bucket.hashAndOccupancy); bucket.hashAndOccupancy = hash | HashTableBucket::isOccupiedMask; bucket.storage.construct(element); } template bool HashSet::remove(const Element& element) { return table.remove(ElementHashPolicy::getKeyHash(element), element); } template void HashSet::removeOrFail(const Element& element) { const bool removed = table.remove(ElementHashPolicy::getKeyHash(element), element); WAVM_ASSERT(removed); } template const Element& HashSet::operator[](const Element& element) const { const Uptr hash = ElementHashPolicy::getKeyHash(element); const HashTableBucket* bucket = table.getBucketForRead(hash, element); WAVM_ASSERT(bucket); if(!bucket) { // In addition to the assert, use WAVM_UNREACHABLE to ensure that GCC's // -Wnull-dereference warning isn't triggered because it thinks this function might // return nullptr. WAVM_UNREACHABLE(); } WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return bucket->storage.get(); } template bool HashSet::contains(const Element& element) const { const Uptr hash = ElementHashPolicy::getKeyHash(element); const HashTableBucket* bucket = table.getBucketForRead(hash, element); WAVM_ASSERT(!bucket || bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return bucket != nullptr; } template const Element* HashSet::get(const Element& element) const { const Uptr hash = ElementHashPolicy::getKeyHash(element); const HashTableBucket* bucket = table.getBucketForRead(hash, element); if(!bucket) { return nullptr; } else { WAVM_ASSERT(bucket->hashAndOccupancy == (hash | HashTableBucket::isOccupiedMask)); return &bucket->storage.get(); } } template void HashSet::clear() { table.clear(); } template HashSetIterator HashSet::begin() const { // Find the first occupied bucket. HashTableBucket* beginBucket = table.getBuckets(); if(!beginBucket) { return HashSetIterator(nullptr, nullptr); } HashTableBucket* endBucket = table.getBuckets() + table.numBuckets(); while(beginBucket < endBucket && !beginBucket->hashAndOccupancy) { ++beginBucket; }; return HashSetIterator(beginBucket, endBucket); } template HashSetIterator HashSet::end() const { return HashSetIterator(table.getBuckets() + table.numBuckets(), table.getBuckets() + table.numBuckets()); } template Uptr HashSet::size() const { return table.size(); } template void HashSet::analyzeSpaceUsage(Uptr& outTotalMemoryBytes, Uptr& outMaxProbeCount, F32& outOccupancy, F32& outAverageProbeCount) const { return table.analyzeSpaceUsage( outTotalMemoryBytes, outMaxProbeCount, outOccupancy, outAverageProbeCount); } } // namespace WAVM #endif // WAVM_INLINE_IMPL_HASHSETIMPL_H ================================================ FILE: Include/WAVM/Inline/Impl/HashTable.natvis ================================================ {numElements} elements in {hashToBucketIndexMask+1} buckets hashToBucketIndexMask+1 buckets ================================================ FILE: Include/WAVM/Inline/Impl/HashTableImpl.h ================================================ // IWYU pragma: private, include "WAVM/Inline/HashTable.h" #pragma once #ifndef WAVM_INLINE_IMPL_HASHTABLEIMPL_H #define WAVM_INLINE_IMPL_HASHTABLEIMPL_H #include "WAVM/Inline/HashTable.h" #include #include // IWYU pragma: keep #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { // Use these macros to compress the boilerplate template declarations in a non-inline member // function definition for HashTable. #define HASHTABLE_PARAMETERS \ typename Key, typename Element, typename HashTablePolicy, typename AllocPolicy #define HASHTABLE_ARGUMENTS Key, Element, HashTablePolicy, AllocPolicy template Uptr HashTable::calcProbeCount(Uptr bucketIndex) const { WAVM_ASSERT(buckets[bucketIndex].hashAndOccupancy); WAVM_ASSERT(!(hashToBucketIndexMask & Bucket::isOccupiedMask)); const Uptr idealBucketIndex = buckets[bucketIndex].hashAndOccupancy & hashToBucketIndexMask; if(idealBucketIndex <= bucketIndex) { return bucketIndex - idealBucketIndex; } else { return numBuckets() - idealBucketIndex + bucketIndex; } } template void HashTable::clear() { destruct(); buckets = nullptr; numElements = 0; hashToBucketIndexMask = UINTPTR_MAX; } template void HashTable::resize(Uptr newNumBuckets) { WAVM_ASSERT(!(newNumBuckets & (newNumBuckets - 1))); const Uptr oldNumBuckets = numBuckets(); Bucket* oldBuckets = buckets; if(!newNumBuckets) { WAVM_ASSERT(!numElements); buckets = nullptr; } else { // Allocate the new buckets. buckets = new Bucket[newNumBuckets](); } hashToBucketIndexMask = newNumBuckets - 1; if(numElements) { WAVM_ASSERT(oldBuckets); WAVM_ASSERT(buckets); // Iterate over the old buckets, and reinsert their contents in the new buckets. for(Uptr bucketIndex = 0; bucketIndex < oldNumBuckets; ++bucketIndex) { if(oldBuckets[bucketIndex].hashAndOccupancy) { Bucket& oldBucket = oldBuckets[bucketIndex]; const Key& oldKey = HashTablePolicy::getKey(oldBucket.storage.get()); // Find the new bucket to write the element to. Bucket& newBucket = getBucketForWrite(oldBucket.hashAndOccupancy, oldKey); // Move the element from the old bucket to the new. newBucket.storage.construct(std::move(oldBucket.storage.get())); newBucket.hashAndOccupancy = oldBucket.hashAndOccupancy; oldBucket.storage.destruct(); oldBucket.hashAndOccupancy = 0; } } // Free the old buckets. delete[] oldBuckets; } } template bool HashTable::remove(Uptr hash, const Key& key) { // Find the bucket (if any) holding the key. const Uptr hashAndOccupancy = hash | Bucket::isOccupiedMask; const HashTableBucket* bucket = getBucketForRead(hashAndOccupancy, key); if(!bucket) { return false; } else { // Remove the element in the bucket. eraseHashBucket(bucket - getBuckets()); // Decrease the number of elements and resize the table if the occupancy is too low. --numElements; const Uptr maxDesiredBuckets = AllocPolicy::getMaxDesiredBuckets(numElements); if(numBuckets() > maxDesiredBuckets) { resize(maxDesiredBuckets); } return true; } } template template const HashTableBucket* HashTable::getBucketForRead( Uptr hash, const LookupKey& key) const { if(!buckets) { return nullptr; } // Start at the bucket indexed by the lower bits of the hash. const Uptr hashAndOccupancy = hash | Bucket::isOccupiedMask; Uptr probeCount = 0; while(true) { const Uptr bucketIndex = (hashAndOccupancy + probeCount) & hashToBucketIndexMask; const Bucket& bucket = buckets[bucketIndex]; if(!bucket.hashAndOccupancy) { // If the bucket is empty, return null. return nullptr; } else if(bucket.hashAndOccupancy == hashAndOccupancy && HashTablePolicy::areKeysEqual( HashTablePolicy::getKey(buckets[bucketIndex].storage.get()), key)) { // If the bucket holds the specified key, return null. return &bucket; } else { const Uptr bucketProbeCount = calcProbeCount(bucketIndex); if(probeCount > bucketProbeCount) { // If the bucket holds a key whose ideal bucket follows the specified key's // ideal bucket, then the following buckets cannot hold the key, so return null. return nullptr; } else { // Otherwise, continue to the next bucket. ++probeCount; WAVM_ASSERT(probeCount < numBuckets()); } } }; } template template HashTableBucket* HashTable::getBucketForModify( Uptr hash, const LookupKey& key) { return const_cast(getBucketForRead(hash, key)); } template HashTableBucket& HashTable::getBucketForAdd(Uptr hash, const Key& key) { // Make sure there's enough space to add a new key to the table. const Uptr minDesiredBuckets = AllocPolicy::getMinDesiredBuckets(numElements + 1); if(numBuckets() < minDesiredBuckets) { resize(minDesiredBuckets); } // Find the bucket to write the new key to. Bucket& bucket = getBucketForWrite(hash, key); // If the bucket is empty, increment the number of elements in the table. // The caller is expected to fill the bucket once this function returns. if(!bucket.hashAndOccupancy) { ++numElements; } else { WAVM_ASSERT(bucket.hashAndOccupancy == (hash | Bucket::isOccupiedMask)); } return bucket; } template HashTableBucket& HashTable::getBucketForWrite(Uptr hash, const Key& key) { WAVM_ASSERT(buckets); // Start at the bucket indexed by the lower bits of the hash. const Uptr hashAndOccupancy = hash | Bucket::isOccupiedMask; Uptr probeCount = 0; while(true) { const Uptr bucketIndex = (hashAndOccupancy + probeCount) & hashToBucketIndexMask; Bucket& bucket = buckets[bucketIndex]; if(!bucket.hashAndOccupancy) { // If the bucket is empty, return it. return bucket; } else if(bucket.hashAndOccupancy == hashAndOccupancy && HashTablePolicy::areKeysEqual(HashTablePolicy::getKey(bucket.storage.get()), key)) { // If the bucket already holds the specified key, return it. return bucket; } else { const Uptr bucketProbeCount = calcProbeCount(bucketIndex); if(probeCount > bucketProbeCount) { // If the bucket holds an element with a lower probe count (i.e. its ideal // bucket is after this key's ideal bucket), then evict the element and return // this bucket. evictHashBucket(bucketIndex); return bucket; } else { // Otherwise, continue to the next bucket. ++probeCount; WAVM_ASSERT(probeCount < numBuckets()); } } }; } template void HashTable::evictHashBucket(Uptr bucketIndex) { WAVM_ASSERT(buckets); // Move the bucket's element into a local variable and empty the bucket. Bucket& evictedBucket = buckets[bucketIndex]; WAVM_ASSERT(evictedBucket.hashAndOccupancy); Element evictedElement{std::move(evictedBucket.storage.get())}; Uptr evictedHashAndOccupancy = evictedBucket.hashAndOccupancy; evictedBucket.hashAndOccupancy = 0; evictedBucket.storage.destruct(); while(true) { // Consider the next bucket bucketIndex = (bucketIndex + 1) & hashToBucketIndexMask; Bucket& bucket = buckets[bucketIndex]; if(!bucket.hashAndOccupancy) { // If the bucket is empty, then fill it with the evicted element and return. bucket.storage.construct(std::move(evictedElement)); bucket.hashAndOccupancy = evictedHashAndOccupancy; return; } else { // Otherwise, swap the evicted element with the bucket's element and continue // searching for an empty bucket. std::swap(evictedElement, bucket.storage.get()); std::swap(evictedHashAndOccupancy, bucket.hashAndOccupancy); } }; } template void HashTable::eraseHashBucket(Uptr eraseBucketIndex) { WAVM_ASSERT(buckets); while(true) { // Consider the bucket following the erase bucket Bucket& bucketToErase = buckets[eraseBucketIndex]; const Uptr bucketIndex = (eraseBucketIndex + 1) & hashToBucketIndexMask; Bucket& bucket = buckets[bucketIndex]; if(!bucket.hashAndOccupancy) { // If the following bucket is empty, empty the erase bucket and return. WAVM_ASSERT(bucketToErase.hashAndOccupancy); bucketToErase.hashAndOccupancy = 0; bucketToErase.storage.destruct(); return; } else { const Uptr bucketProbeCount = calcProbeCount(bucketIndex); if(bucketProbeCount == 0) { // If the bucket contains an element in its ideal bucket, it and its successors // don't need to be shifted into the erase bucket, so just empty the erase // bucket and return. WAVM_ASSERT(bucketToErase.hashAndOccupancy); bucketToErase.hashAndOccupancy = 0; bucketToErase.storage.destruct(); return; } else { // Otherwise, shift the contents of the following bucket into the erase bucket // and continue with the following bucket as the new erase bucket. bucketToErase.storage.get() = std::move(bucket.storage.get()); bucketToErase.hashAndOccupancy = bucket.hashAndOccupancy; eraseBucketIndex = bucketIndex; } } }; } template void HashTable::analyzeSpaceUsage(Uptr& outTotalMemoryBytes, Uptr& outMaxProbeCount, F32& outOccupancy, F32& outAverageProbeCount) const { outTotalMemoryBytes = sizeof(Bucket) * numBuckets() + sizeof(*this); outOccupancy = size() / F32(numBuckets()); outMaxProbeCount = 0; outAverageProbeCount = 0.0f; for(Uptr idealBucketIndex = 0; idealBucketIndex < numBuckets(); ++idealBucketIndex) { Uptr probeCount = 0; while(true) { const Uptr bucketIndex = (idealBucketIndex + probeCount) & hashToBucketIndexMask; if(!buckets[bucketIndex].hashAndOccupancy || probeCount > calcProbeCount(bucketIndex)) { break; } ++probeCount; }; outMaxProbeCount = probeCount > outMaxProbeCount ? probeCount : outMaxProbeCount; outAverageProbeCount += probeCount / F32(numBuckets()); } } template HashTable::HashTable(Uptr estimatedNumElements) : buckets(nullptr), numElements(0), hashToBucketIndexMask(UINTPTR_MAX) { const Uptr numBuckets = AllocPolicy::getMinDesiredBuckets(estimatedNumElements); if(numBuckets) { // Allocate the initial buckets. hashToBucketIndexMask = numBuckets - 1; WAVM_ASSERT((numBuckets & hashToBucketIndexMask) == 0); buckets = new Bucket[numBuckets](); } } template HashTable::HashTable(const HashTable& copy) { copyFrom(copy); } template HashTable::HashTable(HashTable&& movee) noexcept { moveFrom(std::move(movee)); } template HashTable::~HashTable() { destruct(); } template HashTable& HashTable::operator=( const HashTable& copyee) { // Do nothing if copying from this. if(this != ©ee) { destruct(); copyFrom(copyee); } return *this; } template HashTable& HashTable::operator=( HashTable&& movee) noexcept { // Do nothing if moving from this. if(this != &movee) { destruct(); moveFrom(std::move(movee)); } return *this; } template void HashTable::destruct() { if(buckets) { for(Uptr bucketIndex = 0; bucketIndex < numBuckets(); ++bucketIndex) { if(buckets[bucketIndex].hashAndOccupancy) { buckets[bucketIndex].storage.destruct(); } } delete[] buckets; buckets = nullptr; } } template void HashTable::copyFrom(const HashTable& copy) { numElements = copy.numElements; hashToBucketIndexMask = copy.hashToBucketIndexMask; if(!copy.buckets) { buckets = nullptr; } else { buckets = new Bucket[copy.numBuckets()]; for(Uptr bucketIndex = 0; bucketIndex < numBuckets(); ++bucketIndex) { buckets[bucketIndex].hashAndOccupancy = copy.buckets[bucketIndex].hashAndOccupancy; if(buckets[bucketIndex].hashAndOccupancy) { buckets[bucketIndex].storage.construct(copy.buckets[bucketIndex].storage.get()); } } } } template void HashTable::moveFrom(HashTable&& movee) noexcept { numElements = movee.numElements; hashToBucketIndexMask = movee.hashToBucketIndexMask; if(!movee.buckets) { buckets = nullptr; } else { buckets = movee.buckets; movee.numElements = 0; movee.hashToBucketIndexMask = UINTPTR_MAX; movee.buckets = nullptr; } } } // namespace WAVM #undef HASHTABLE_PARAMETERS #undef HASHTABLE_ARGUMENTS #endif // WAVM_INLINE_IMPL_HASHTABLEIMPL_H ================================================ FILE: Include/WAVM/Inline/Impl/I128Impl.LICENSE ================================================ ============================================================================== The LLVM Project is under the Apache License v2.0 with LLVM Exceptions: ============================================================================== Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ---- LLVM Exceptions to the Apache 2.0 License ---- As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into an Object form of such source code, you may redistribute such embedded portions in such Object form without complying with the conditions of Sections 4(a), 4(b) and 4(d) of the License. In addition, if you combine or link compiled forms of this Software with software that is licensed under the GPLv2 ("Combined Software") and if a court of competent jurisdiction determines that the patent provision (Section 3), the indemnity provision (Section 9) or other Section of the License conflicts with the conditions of the GPLv2, you may retroactively and prospectively choose to deem waived or otherwise exclude such Section(s) of the License, but only in their entirety and only with respect to the Combined Software. ============================================================================== Software from third parties included in the LLVM Project: ============================================================================== The LLVM Project contains third party software which is under different license terms. All such code will be identified clearly using at least one of two mechanisms: 1) It will be in a separate directory tree with its own `LICENSE.txt` or `LICENSE` file at the top containing the specific license and restrictions which apply to that software, or 2) It will contain specific license and restriction terms at the top of every file. ============================================================================== Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy): ============================================================================== The compiler_rt library is dual licensed under both the University of Illinois "BSD-Like" license and the MIT license. As a user of this code you may choose to use it under either license. As a contributor, you agree to allow your code to be used under both. Full text of the relevant licenses is included below. ============================================================================== University of Illinois/NCSA Open Source License Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT All rights reserved. Developed by: LLVM Team University of Illinois at Urbana-Champaign http://llvm.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal with the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimers in the documentation and/or other materials provided with the distribution. * Neither the names of the LLVM Team, University of Illinois at Urbana-Champaign, nor the names of its contributors may be used to endorse or promote products derived from this Software without specific prior written permission. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. ============================================================================== Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Include/WAVM/Inline/Impl/I128Impl.h ================================================ // IWYU pragma: private, include "WAVM/Inline/I128.h" // You should only include this file indirectly by including I128.h. #pragma once #ifndef WAVM_INLINE_IMPL_I128IMPL_H #define WAVM_INLINE_IMPL_I128IMPL_H // I128 Encoding Scheme // ==================== // // Storage: // Two 64-bit words accessed via unions: lowU64/lowI64 and highU64/highI64. // // Value interpretation: // The encoding is two's complement over 128 bits, with the mathematical value: // value = (highI64 * 2^64) + lowU64 // // The sign is determined by bit 127 (the MSB of highI64). When highI64 < 0, the // number is negative. // // Range: // Standard 128-bit two's complement would have range [-2^127, 2^127 - 1], but this // implementation reserves the most negative bit pattern as NaN, giving a symmetric // range: [-(2^127 - 1), +(2^127 - 1)]. // // Special values: // NaN: high = 0x8000000000000000, low = 0x0000000000000000 (bit pattern for -2^127) // min: high = 0x8000000000000000, low = 0x0000000000000001 (value: -(2^127 - 1)) // max: high = 0x7FFFFFFFFFFFFFFF, low = 0xFFFFFFFFFFFFFFFF (value: +(2^127 - 1)) // // Negation preserves NaN: // -NaN = ~(0x8000000000000000:0) + 1 = (0x7FFFFFFFFFFFFFFF:0xFFFFFFFFFFFFFFFF) + 1 // = (0x8000000000000000:0) = NaN // // Comparison ordering: // The high words are compared as signed (highI64) to correctly order positive vs // negative numbers. When high words are equal, the low words must be compared as // unsigned (lowU64) because they represent an unsigned offset within a "quadrant" // of the number space. For example: // - I128(U64_MAX) = (high=0, low=0xFFFFFFFFFFFFFFFF) should be > I128(0) // - Signed low comparison would incorrectly give: -1 > 0 = false // - Unsigned low comparison correctly gives: 0xFFFFFFFFFFFFFFFF > 0 = true #include "WAVM/Inline/I128.h" #include #include // IWYU pragma: keep #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/FloatComponents.h" #include "WAVM/Platform/Intrinsic.h" namespace WAVM { inline I128::operator U8() const { WAVM_ASSERT(!isNaN(*this) && !highI64 && lowU64 <= UINT8_MAX); return U8(lowU64); } inline I128::operator I8() const { WAVM_ASSERT(!isNaN(*this) && highI64 <= 0 && highI64 >= -1 && !(highI64 == -1 && lowI64 < INT8_MIN) && !(highI64 == 0 && lowI64 > INT8_MAX)); return I8(lowI64); } inline I128::operator U16() const { WAVM_ASSERT(!isNaN(*this) && !highI64 && lowU64 <= UINT16_MAX); return U16(lowU64); } inline I128::operator I16() const { WAVM_ASSERT(!isNaN(*this) && highI64 <= 0 && highI64 >= -1 && !(highI64 == -1 && lowI64 < INT16_MIN) && !(highI64 == 0 && lowI64 > INT16_MAX)); return I16(lowI64); } inline I128::operator U32() const { WAVM_ASSERT(!isNaN(*this) && !highI64 && lowU64 <= UINT32_MAX); return U32(lowU64); } inline I128::operator I32() const { WAVM_ASSERT(!isNaN(*this) && highI64 <= 0 && highI64 >= -1 && !(highI64 == -1 && lowI64 < INT32_MIN) && !(highI64 == 0 && lowI64 > INT32_MAX)); return I32(lowI64); } inline I128::operator U64() const { WAVM_ASSERT(!isNaN(*this) && !highI64); return lowU64; } inline I128::operator I64() const { WAVM_ASSERT(!isNaN(*this) && highI64 <= 0 && highI64 >= -1 && !(highI64 == -1 && lowI64 >= 0) && !(highI64 == 0 && lowI64 < 0)); return lowI64; } inline I128::operator F32() const { return asFloat(); } inline I128::operator F64() const { return asFloat(); } template Float I128::asFloat() const { using Components = FloatComponents; using Bits = typename Components::Bits; Components components; if(isNaN(*this)) { components.bits.sign = 0; components.bits.exponent = Components::maxExponentBits; components.bits.significand = Components::canonicalSignificand; return components.value; } // Determine the sign, and compute the absolute value of the I128. components.bits.sign = *this < 0 ? 1 : 0; I128 absoluteI128 = components.bits.sign ? -*this : *this; // Count the number of leading zeroes in the absolute I128. U64 leadingZeroes = countLeadingZeroes(absoluteI128.highU64); if(leadingZeroes == 64) { leadingZeroes += countLeadingZeroes(absoluteI128.lowU64); if(leadingZeroes == 128) { components.bits.exponent = 0; components.bits.significand = 0; return components.value; } } // leadingZeroes is in the range 0<=leadingZeroes<128. // Calculate the float exponent from the number of leading zeroes. const U64 exponent = 127 - leadingZeroes; components.bits.exponent = Bits(exponent + Components::exponentBias); // Shift the most-significant set bit to be the MSB in a U64. // This is normalization, not arithmetic, so we shift inline without overflow checking. U64 significand64; if(leadingZeroes == 0) { significand64 = absoluteI128.highU64; } else if(leadingZeroes < 64) { significand64 = (absoluteI128.highU64 << leadingZeroes) | (absoluteI128.lowU64 >> (64 - leadingZeroes)); } else if(leadingZeroes == 64) { significand64 = absoluteI128.lowU64; } else { significand64 = absoluteI128.lowU64 << (leadingZeroes - 64); } // Shift the most-significant set bit down and take the significand bits below it. // The shift amount is 64 - (numSignificandBits + 1) to account for the hidden bit. constexpr Uptr shift = 63 - Components::numSignificandBits; Bits significand = Bits(significand64 >> shift); // Round-to-nearest-even: examine the truncated bits U64 truncatedBits = significand64 & ((U64(1) << shift) - 1); U64 halfPoint = U64(1) << (shift - 1); bool roundUp = truncatedBits > halfPoint; if(truncatedBits == halfPoint) { // Tie: round to even (round up if LSB of significand is 1) roundUp = (significand & 1) != 0; } if(roundUp) { significand++; // Check for overflow: significand has (numSignificandBits + 1) bits including hidden // bit. If it overflows to (1 << (numSignificandBits + 1)), that's 2.0 * 2^exp = 1.0 * // 2^(exp+1). if(significand == (Bits(1) << (Components::numSignificandBits + 1))) { significand = 0; components.bits.exponent++; } } components.bits.significand = significand; return components.value; } inline I128 operator+(I128 a) { return a; } inline I128 operator-(I128 a) { // This doesn't need to explicitly check for NaN, because negation preserves NaN. I128 result; result.highU64 = ~a.highU64; result.lowU64 = ~a.lowU64; result.highU64 += addAndCheckOverflow(result.lowU64, 1, &result.lowU64) ? 1 : 0; return result; } inline I128 abs(I128 a) { // This doesn't need to explicitly check for NaN, because negation preserves NaN. I128 result; I64 sign = a.highI64 >> 63; result.lowU64 = a.lowU64 ^ sign; result.highU64 = (a.highU64 ^ sign) + ((result.lowU64 - U64(sign) < result.lowU64) ? 1 : 0); result.lowU64 -= U64(sign); return result; } inline I128 operator~(I128 a) { return isNaN(a) ? a : I128(~a.lowU64, ~a.highI64); } inline bool addAndCheckOverflow(I128 a, I128 b, I128* out) { if(isNaN(a) || isNaN(b)) { *out = I128::nan(); return false; } bool overflowed = false; if(addAndCheckOverflow(a.highI64, b.highI64, &out->highI64)) { overflowed = true; } if(addAndCheckOverflow(a.lowU64, b.lowU64, &out->lowU64)) { if(addAndCheckOverflow(out->highI64, 1, &out->highI64)) { overflowed = true; } } return overflowed; } inline I128 addmod127(I128 a, I128 b) { I128 result; if(addAndCheckOverflow(a, b, &result)) { result = -result; } return result; } inline I128 operator+(I128 a, I128 b) { I128 result; if(addAndCheckOverflow(a, b, &result)) { result = I128::nan(); } return result; } inline I128 operator-(I128 a, I128 b) { return a + -b; } inline bool mulAndCheckOverflow(I128 a, I128 b, I128* out) { if(isNaN(a) || isNaN(b)) { *out = I128::nan(); return false; } // Remove the sign from the operands. const I64 sign = (a.highI64 >> 63) ^ (b.highI64 >> 63); a = abs(a); b = abs(b); // Calculate a matrix of 64-bit products of all the 32-bit components of the operands. const U64 a0 = a.lowU64 & 0xffffffff; const U64 a1 = a.lowU64 >> 32; const U64 a2 = a.highU64 & 0xffffffff; const U64 a3 = a.highU64 >> 32; const U64 b0 = b.lowU64 & 0xffffffff; const U64 b1 = b.lowU64 >> 32; const U64 b2 = b.highU64 & 0xffffffff; const U64 b3 = b.highU64 >> 32; const U64 m00 = a0 * b0; const U64 m01 = a0 * b1; const U64 m02 = a0 * b2; const U64 m03 = a0 * b3; const U64 m10 = a1 * b0; const U64 m11 = a1 * b1; const U64 m12 = a1 * b2; const U64 m13 = a1 * b3; const U64 m20 = a2 * b0; const U64 m21 = a2 * b1; const U64 m22 = a2 * b2; const U64 m23 = a2 * b3; const U64 m30 = a3 * b0; const U64 m31 = a3 * b1; const U64 m32 = a3 * b2; const U64 m33 = a3 * b3; // Add all the 64-bit products together, checking for overflow. bool overflowed = false; out->lowU64 = m00; out->highU64 = U64(addAndCheckOverflow(out->lowU64, m01 << 32, &out->lowU64)); out->highU64 += U64(addAndCheckOverflow(out->lowU64, m10 << 32, &out->lowU64)); out->highU64 += (m01 >> 32) + (m10 >> 32); overflowed = addAndCheckOverflow(out->highU64, m02, &out->highU64) || overflowed; overflowed = addAndCheckOverflow(out->highU64, m11, &out->highU64) || overflowed; overflowed = addAndCheckOverflow(out->highU64, m20, &out->highU64) || overflowed; overflowed = addAndCheckOverflow(out->highU64, m03 << 32, &out->highU64) || overflowed; overflowed = addAndCheckOverflow(out->highU64, m12 << 32, &out->highU64) || overflowed; overflowed = addAndCheckOverflow(out->highU64, m21 << 32, &out->highU64) || overflowed; overflowed = addAndCheckOverflow(out->highU64, m30 << 32, &out->highU64) || overflowed; // Check if the product overflowed the 63 non-sign bits in highU64. overflowed = out->highI64 < 0 || overflowed; out->highU64 &= ~(U64(1) << 63); // Check if the product overflowed the I128 completely. overflowed = m13 || m22 || m31 || m23 || m32 || m33 || overflowed; // Restore the correct sign for the product. if(sign) { *out = -*out; } return overflowed; } inline I128 mulmod127(I128 a, I128 b) { I128 result; mulAndCheckOverflow(a, b, &result); return result; } inline I128 operator*(I128 a, I128 b) { I128 result; return mulAndCheckOverflow(a, b, &result) ? I128::nan() : result; } inline I128 operator/(I128 a, I128 b) { if(isNaN(a) || isNaN(b) || b == 0) { return I128::nan(); } I128 remainder; bool negative = (a.highI64 < 0) != (b.highI64 < 0); a = abs(a); b = abs(b); I128 quotient = I128::udivmod(a, b, remainder); return negative ? -quotient : quotient; } inline I128 operator%(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return I128::nan(); } if(b == 0) { return I128::nan(); } I128 s = b.highI64 >> 63; // s = b < 0 ? -1 : 0 b = (b ^ s) - s; // negate if s == -1 s = a.highI64 >> 63; // s = a < 0 ? -1 : 0 a = (a ^ s) - s; // negate if s == -1 I128 remainder; I128::udivmod(a, b, remainder); return (remainder ^ s) - s; // negate if s == -1 } inline I128 operator>>(I128 a, I128 b) { if(b == 0) { return a; } if(isNaN(a) || isNaN(b)) { return I128::nan(); } I128 result; U64 b64 = b.lowU64; b64 &= 127; if(b64 == 0) { result = a; } else if(b64 & 64) { // 64 <= b < 128 result.highI64 = a.highI64 >> 63; result.lowI64 = a.highI64 >> (b64 - 64); } else { // 0 <= |b| < 64 result.highI64 = a.highI64 >> b64; result.lowU64 = (U64(a.highI64) << (64 - b64)) | (a.lowU64 >> b64); } return result; } inline I128 operator<<(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return I128::nan(); } // Shifts by negative amounts or amounts >= 127 overflow (except shifting 0) if(b.highI64 != 0 || b.lowU64 >= 127) { return (a == 0) ? a : I128::nan(); } U64 b64 = b.lowU64; if(b64 == 0) { return a; } I128 result; if(b64 & 64) { // 64 <= b < 127 result.lowU64 = 0; result.highI64 = a.lowU64 << (b64 - 64); } else { // 0 < b < 64 result.lowU64 = a.lowU64 << b64; result.highU64 = (a.highU64 << b64) | (a.lowU64 >> (64 - b64)); } // Overflow if information was lost: shifting back should give original value if((result >> b) != a) { return I128::nan(); } return result; } inline I128 operator^(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return I128::nan(); } return I128(a.lowU64 ^ b.lowU64, a.highI64 ^ b.highI64); } inline I128 operator&(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return I128::nan(); } return I128(a.lowU64 & b.lowU64, a.highI64 & b.highI64); } inline I128 operator|(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return I128::nan(); } return I128(a.lowU64 | b.lowU64, a.highI64 | b.highI64); } inline bool operator>(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return false; } return a.highI64 > b.highI64 || (a.highI64 == b.highI64 && a.lowU64 > b.lowU64); } inline bool operator>=(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return isNaN(a) && isNaN(b); } return a.highI64 > b.highI64 || (a.highI64 == b.highI64 && a.lowU64 >= b.lowU64); } inline bool operator<(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return false; } return a.highI64 < b.highI64 || (a.highI64 == b.highI64 && a.lowU64 < b.lowU64); } inline bool operator<=(I128 a, I128 b) { if(isNaN(a) || isNaN(b)) { return isNaN(a) && isNaN(b); } return a.highI64 < b.highI64 || (a.highI64 == b.highI64 && a.lowU64 <= b.lowU64); } inline bool operator==(I128 a, I128 b) { // NaN == NaN is true (unlike IEEE floats) return a.highI64 == b.highI64 && a.lowU64 == b.lowU64; } inline bool operator!=(I128 a, I128 b) { return a.highI64 != b.highI64 || a.lowU64 != b.lowU64; } inline I128 I128::udivmod(I128 n, I128 d, I128& outRemainder) { if(isNaN(n) || isNaN(d)) { return I128::nan(); } I128 q; I128 r; U64 sr; // special cases, X is unknown, K != 0 if(n.highU64 == 0) { if(d.highU64 == 0) { // 0 X // --- // 0 X outRemainder = n.lowU64 % d.lowU64; return n.lowU64 / d.lowU64; } // 0 X // --- // K X return {0, n.lowU64}; } // n.highU64 != 0 if(d.lowU64 == 0) { // Error if the divisor is zero. WAVM_ERROR_UNLESS(d.highU64 != 0); // d.highU64 != 0 if(n.lowU64 == 0) { // K 0 // --- // K 0 r.highU64 = n.highU64 % d.highU64; r.lowU64 = 0; outRemainder = r; return n.highU64 / d.highU64; } // K K // --- // K 0 if((d.highU64 & (d.highU64 - 1)) == 0) /* if d is a power of 2 */ { r.lowU64 = n.lowU64; r.highU64 = n.highU64 & (d.highU64 - 1); outRemainder = r; return n.highU64 >> countTrailingZeroes(d.highU64); } // K K // --- // K 0 sr = countLeadingZeroes(d.highU64) - countLeadingZeroes(n.highU64); // 0 <= sr <= 64 - 2 or sr large if(sr > 64 - 2) { outRemainder = n; return 0; } ++sr; // 1 <= sr <= 64 - 1 // q = n << (128 - sr); q.lowU64 = 0; q.highU64 = n.lowU64 << (64 - sr); // r = n >> sr; r.highU64 = n.highU64 >> sr; r.lowU64 = (n.highU64 << (64 - sr)) | (n.lowU64 >> sr); } else /* d.lowU64 != 0 */ { if(d.highU64 == 0) { // K X // --- // 0 K if((d.lowU64 & (d.lowU64 - 1)) == 0) /* if d is a power of 2 */ { r = n.lowU64 & (d.lowU64 - 1); if(d.lowU64 == 1) { outRemainder = r; return n; } sr = countTrailingZeroes(d.lowU64); q.highU64 = n.highU64 >> sr; q.lowU64 = (n.highU64 << (64 - sr)) | (n.lowU64 >> sr); outRemainder = r; return q; } // K X // --- // 0 K sr = 1 + 64 + countLeadingZeroes(d.lowU64) - countLeadingZeroes(n.highU64); // 2 <= sr <= 128 - 1 // q = n << (128 - sr); // r = n >> sr; if(sr == 64) { q.lowU64 = 0; q.highU64 = n.lowU64; r.highU64 = 0; r.lowU64 = n.highU64; } else if(sr < 64) /* 2 <= sr <= 64 - 1 */ { q.lowU64 = 0; q.highU64 = n.lowU64 << (64 - sr); r.highU64 = n.highU64 >> sr; r.lowU64 = (n.highU64 << (64 - sr)) | (n.lowU64 >> sr); } else /* 64 + 1 <= sr <= 128 - 1 */ { q.lowU64 = n.lowU64 << (128 - sr); q.highU64 = (n.highU64 << (128 - sr)) | (n.lowU64 >> (sr - 64)); r.highU64 = 0; r.lowU64 = n.highU64 >> (sr - 64); } } else { // K X // --- // K K sr = countLeadingZeroes(d.highU64) - countLeadingZeroes(n.highU64); // 0 <= sr <= 64 - 1 or sr large if(sr > 64 - 1) { outRemainder = n; return 0; } ++sr; // 1 <= sr <= 64 // q = n << (128 - sr); // r = n >> sr; q.lowU64 = 0; if(sr == 64) { q.highU64 = n.lowU64; r.highU64 = 0; r.lowU64 = n.highU64; } else { r.highU64 = n.highU64 >> sr; r.lowU64 = (n.highU64 << (64 - sr)) | (n.lowU64 >> sr); q.highU64 = n.lowU64 << (64 - sr); } } } // Not a special case // q and r are initialized with: // q = n << (128 - sr); // r = n >> sr; // 1 <= sr <= 128 - 1 U64 carry = 0; for(; sr > 0; --sr) { // r:q = ((r:q) << 1) | carry r.highU64 = (r.highU64 << 1) | (r.lowU64 >> (64 - 1)); r.lowU64 = (r.lowU64 << 1) | (q.highU64 >> (64 - 1)); q.highU64 = (q.highU64 << 1) | (q.lowU64 >> (64 - 1)); q.lowU64 = (q.lowU64 << 1) | carry; // carry = 0; // if (r >= d) // { // r -= d; // carry = 1; // } const I128 s = (d - r - 1).highI64 >> 63; carry = s.lowU64 & 1; r -= d & s; } q = (q << 1) | carry; outRemainder = r; return q; } inline ToCharsResult toChars(char* outBegin, char* outEnd, I128 value) { if(outBegin >= outEnd) { return {outEnd, true}; } char* ptr = outBegin; if(isNaN(value)) { if(outEnd - ptr < 1) { return {ptr, true}; } *ptr++ = 'N'; if(outEnd - ptr < 1) { return {ptr, true}; } *ptr++ = 'a'; if(outEnd - ptr < 1) { return {ptr, true}; } *ptr++ = 'N'; return {ptr, false}; } const bool negative = value < 0; if(negative) { if(ptr >= outEnd) { return {outEnd, true}; } *ptr++ = '-'; value = -value; } I128 zero(0); if(value == zero) { if(ptr >= outEnd) { return {outEnd, true}; } *ptr++ = '0'; return {ptr, false}; } // Collect digits in reverse order char* digitStart = ptr; while(value != zero) { if(ptr >= outEnd) { return {outEnd, true}; } I128 digit = value % I128(10); *ptr++ = '0' + char(U64(digit)); value = value / I128(10); } // Reverse the digits char* digitEnd = ptr - 1; while(digitStart < digitEnd) { char tmp = *digitStart; *digitStart = *digitEnd; *digitEnd = tmp; ++digitStart; --digitEnd; } return {ptr, false}; } template Int clampedCast(I128 value) { WAVM_ASSERT(!isNaN(value)); if(value < std::numeric_limits::min()) { return std::numeric_limits::min(); } if(value > std::numeric_limits::max()) { return std::numeric_limits::max(); } return Int(value); } } #endif // WAVM_INLINE_IMPL_I128IMPL_H ================================================ FILE: Include/WAVM/Inline/Impl/OptionalStorage.h ================================================ #pragma once #include // IWYU pragma: keep #include #include // IWYU pragma: keep namespace WAVM { // A type that holds an optional instance of another type. The lifetime of the contained // instance is defined by the user of this type, and the user is responsible for calling // construct and destruct. template::value> struct OptionalStorage { template void construct(Args&&... args) { new(&contents) Contents(std::forward(args)...); } void destruct() { get().~Contents(); } #if __cplusplus >= 201703L Contents& get() { return *std::launder(reinterpret_cast(&contents)); } const Contents& get() const { return *std::launder(reinterpret_cast(&contents)); } #else Contents& get() { return *reinterpret_cast(&contents); } const Contents& get() const { return *reinterpret_cast(&contents); } #endif private: typename std::aligned_storage::type contents; }; // Partial specialization for types with trivial destructors. template struct OptionalStorage { template void construct(Args&&... args) { new(&contents) Contents(std::forward(args)...); } void destruct() {} #if __cplusplus >= 201703L Contents& get() { return *std::launder(reinterpret_cast(&contents)); } const Contents& get() const { return *std::launder(reinterpret_cast(&contents)); } #else Contents& get() { return *reinterpret_cast(&contents); } const Contents& get() const { return *reinterpret_cast(&contents); } #endif private: typename std::aligned_storage::type contents; }; namespace OptionalStorageAssertions { struct NonTrivialType { NonTrivialType(); }; static_assert(std::is_trivial>::value, "OptionalStorage is non-trivial"); }; } ================================================ FILE: Include/WAVM/Inline/Impl/OptionalStorage.natvis ================================================ {*($T1*)contents} *($T1*)contents ================================================ FILE: Include/WAVM/Inline/IndexMap.h ================================================ #pragma once #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" namespace WAVM { // A map that's somewhere between an array and a HashMap. // It's keyed by a range of integers, but sparsely maps those integers to elements. template struct IndexMap { IndexMap(Index inMinIndex, Index inMaxIndex) : lastIndex(inMinIndex - 1), minIndex(inMinIndex), maxIndex(inMaxIndex) { WAVM_ASSERT(maxIndex >= minIndex); } // Allocates an index, and adds the element to the map. Indices are allocated sequentially, // starting at minIndex, and wrapping back to minIndex after maxIndex. After the allocator // has wrapped back to previously allocated indices, indices are probed sequentially until // an unallocated one is found. Because of this, it takes O(N) time to add an element. If an // index couldn't be allocated, returns false. Otherwise, returns true and the index the // element was allocated at is written to the outIndex argument. template Index add(Index failIndex, Args&&... args) { // If all possible indices are allocated, return failure. if(map.size() >= Uptr(maxIndex - minIndex + 1)) { return failIndex; } // Starting from the index after the last index to be allocated, check indices // sequentially until one is found that isn't allocated. do { ++lastIndex; if(lastIndex > maxIndex) { lastIndex = minIndex; } } while(map.contains(lastIndex)); // Add the element to the map with the given index. WAVM_ASSERT(lastIndex >= minIndex); WAVM_ASSERT(lastIndex <= maxIndex); map.addOrFail(lastIndex, std::forward(args)...); return lastIndex; } // Inserts an element at a specific index. If the index is already allocated, asserts. template void insertOrFail(Index index, Args&&... args) { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); map.addOrFail(index, std::forward(args)...); } // Removes an element by index. If there wasn't an allocated at the specified index, // asserts. void removeOrFail(Index index) { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); map.removeOrFail(index); } // Returns whether the specified index is allocated. bool contains(Index index) const { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); return map.contains(index); } // Returns the element bound to the specified index. Behavior is undefined if the index // isn't allocated. const Element& operator[](Index index) const { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); return map[index]; } Element& operator[](Index index) { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); WAVM_ASSERT(map.contains(index)); return map.getOrAdd(index); } // Returns a pointer to the element bound to the specified index, or null if the index isn't // allocated. const Element* get(Index index) const { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); return map.get(index); } Element* get(Index index) { WAVM_ASSERT(index >= minIndex); WAVM_ASSERT(index <= maxIndex); return map.get(index); } // Returns the number of allocated index/element pairs. Uptr size() const { return map.size(); } Index getMinIndex() const { return minIndex; } Index getMaxIndex() const { return maxIndex; } struct Iterator { template friend struct IndexMap; bool operator!=(const Iterator& other) const { return mapIt != other.mapIt; } bool operator==(const Iterator& other) const { return mapIt == other.mapIt; } operator bool() const { return bool(mapIt); } void operator++() { ++mapIt; } Index getIndex() const { return mapIt->key; } const Element& operator*() const { return mapIt->value; } const Element* operator->() const { return &mapIt->value; } private: HashMapIterator mapIt; Iterator(HashMapIterator&& inMapIt) : mapIt(inMapIt) {} }; Iterator begin() const { return Iterator(map.begin()); } Iterator end() const { return Iterator(map.end()); } private: Index lastIndex; Index minIndex; Index maxIndex; HashMap map; }; } ================================================ FILE: Include/WAVM/Inline/InlineArray.h ================================================ #pragma once #include #include "Impl/OptionalStorage.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { template struct InlineArray { InlineArray() : numElements(0) {} ~InlineArray() { if(!std::is_trivially_destructible::value) { for(Uptr index = 0; index < numElements; ++index) { elements[index].destruct(); } } } template void push_back(ElementArgs&&... elementArgs) { WAVM_ERROR_UNLESS(numElements < maxElements); elements[numElements++].construct(std::forward(elementArgs)...); } template void resize(Uptr newNumElements, ElementArgs&&... elementArgs) { WAVM_ERROR_UNLESS(newNumElements < maxElements); if(newNumElements < numElements) { for(Uptr index = newNumElements; index < numElements; ++index) { elements[index].destruct(); } } else if(newNumElements > numElements) { for(Uptr index = numElements; index < newNumElements; ++index) { elements[index].construct(std::forward(elementArgs)...); } } numElements = newNumElements; } Uptr size() const { return numElements; } Uptr maxSize() const { return maxElements; } bool isFull() const { return numElements == maxElements; } const Element& operator[](Uptr index) const { WAVM_ASSERT(index < numElements); return elements[index].get(); } Element& operator[](Uptr index) { WAVM_ASSERT(index < numElements); return elements[index].get(); } // Iterator that unwraps OptionalStorage elements. template struct IteratorBase { StoragePtr storage; Elem& operator*() const { return storage->get(); } Elem* operator->() const { return &storage->get(); } IteratorBase& operator++() { ++storage; return *this; } bool operator!=(const IteratorBase& other) const { return storage != other.storage; } bool operator==(const IteratorBase& other) const { return storage == other.storage; } }; using Iterator = IteratorBase*, Element>; using ConstIterator = IteratorBase*, const Element>; Iterator begin() { return Iterator{elements}; } Iterator end() { return Iterator{elements + numElements}; } ConstIterator begin() const { return ConstIterator{elements}; } ConstIterator end() const { return ConstIterator{elements + numElements}; } private: Uptr numElements; WAVM::OptionalStorage elements[maxElements]; }; } ================================================ FILE: Include/WAVM/Inline/IntCasts.h ================================================ #pragma once #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" namespace WAVM { // narrow: runtime-checked lossless integer conversion. // The integer value must be representable in the target type. // Compile-time rejects conversions that are statically guaranteed lossless (use implicit // conversion for those). template To narrow(const char* context, From value) { static_assert(std::is_integral_v && std::is_integral_v); static_assert( !((std::is_signed_v == std::is_signed_v && sizeof(To) >= sizeof(From)) || (std::is_unsigned_v && std::is_signed_v && sizeof(To) > sizeof(From))), "narrow is for conversions that are not statically guaranteed lossless; " "this conversion is always lossless and doesn't need an explicit cast"); To result = To(value); if(From(result) != value) { if constexpr(std::is_signed_v) { Errors::fatalfWithCallStack("narrow failed (%s): %" PRId64 " does not fit in %s%zu", context, I64(value), std::is_signed_v ? "I" : "U", sizeof(To) * 8); } else { Errors::fatalfWithCallStack("narrow failed (%s): %" PRIu64 " does not fit in %s%zu", context, U64(value), std::is_signed_v ? "I" : "U", sizeof(To) * 8); } } return result; } // wrap: modular integer conversion. // The integer value is mapped to the target type's range via modular arithmetic. template constexpr To wrap(From value) { static_assert(std::is_integral_v && std::is_integral_v); return To(value); } } ================================================ FILE: Include/WAVM/Inline/IntrusiveSharedPtr.h ================================================ #pragma once namespace WAVM { // A smart pointer that uses an intrusive reference counter. // Needs Pointee to define memory functions to manipulate the reference count: // void addRef(); // void removeRef(); template struct IntrusiveSharedPtr { // Constructors/destructor constexpr IntrusiveSharedPtr() : value(nullptr) {} IntrusiveSharedPtr(Pointee* inValue) { value = inValue; if(value) { value->addRef(); } } IntrusiveSharedPtr(const IntrusiveSharedPtr& inCopy) { value = inCopy.value; if(value) { value->addRef(); } } IntrusiveSharedPtr(IntrusiveSharedPtr&& inMove) noexcept { value = inMove.value; inMove.value = nullptr; } ~IntrusiveSharedPtr() { if(value) { value->removeRef(); } } // Adopt a raw pointer: coerces the pointer to an IntrusiveSharedPtr without calling addRef // or removeRef. static IntrusiveSharedPtr adopt(Pointee*&& inValue) { IntrusiveSharedPtr result(adoptConstructorSelector, inValue); inValue = nullptr; return result; } // Assignment operators void operator=(Pointee* inValue) { auto oldValue = value; value = inValue; if(value) { value->addRef(); } if(oldValue) { oldValue->removeRef(); } } void operator=(const IntrusiveSharedPtr& inCopy) { auto oldValue = value; value = inCopy.value; if(value) { value->addRef(); } if(oldValue) { oldValue->removeRef(); } } void operator=(IntrusiveSharedPtr&& inMove) noexcept { auto oldValue = value; value = inMove.value; inMove.value = nullptr; if(oldValue) { oldValue->removeRef(); } } // Accessors constexpr operator Pointee*() const { return value; } constexpr Pointee& operator*() const { return *value; } constexpr Pointee* operator->() const { return value; } private: Pointee* value; enum AdoptConstructorSelector { adoptConstructorSelector }; constexpr IntrusiveSharedPtr(AdoptConstructorSelector, Pointee* inValue) : value(inValue) {} }; } ================================================ FILE: Include/WAVM/Inline/IsNameChar.h ================================================ #pragma once namespace WAVM { inline bool isNameChar(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_' || c == '\'' || c == '+' || c == '-' || c == '*' || c == '/' || c == '\\' || c == '^' || c == '~' || c == '=' || c == '<' || c == '>' || c == '!' || c == '?' || c == '@' || c == '#' || c == '$' || c == '%' || c == '&' || c == '|' || c == ':' || c == '`' || c == '.'; } } ================================================ FILE: Include/WAVM/Inline/LEB128.h ================================================ #pragma once #include #include // IWYU pragma: keep #include // IWYU pragma: keep #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Platform/Defines.h" namespace WAVM { namespace Serialization { // Result enum for non-throwing LEB128 read. enum class LEB128Result { Success, Truncated, // stream exhausted mid-encoding Overlong, // continuation bit set on the maxBytes-th byte InvalidUnusedBits // unused bits in last byte don't match expected pattern }; // Core non-throwing LEB128 read. Returns LEB128Result. template WAVM_FORCEINLINE LEB128Result trySerializeVarInt(InputStream& stream, Value& outValue) { static constexpr Uptr maxBytes = (maxBits + 6) / 7; U8 bytes[maxBytes] = {0}; Uptr numBytes = 0; I8 signExtendShift = (I8)sizeof(Value) * 8; while(numBytes < maxBytes) { const U8* bytePtr = stream.tryAdvance(1); if(!bytePtr) { return LEB128Result::Truncated; } U8 byte = *bytePtr; bytes[numBytes] = byte; ++numBytes; signExtendShift -= 7; if(!(byte & 0x80)) { break; } } // If we consumed all maxBytes and the last one still has the continuation bit, // the encoding is overlong. if(numBytes == maxBytes && (bytes[maxBytes - 1] & 0x80)) { return LEB128Result::Overlong; } // Validate unused bits in the last byte when all maxBytes were consumed. if(numBytes == maxBytes) { static constexpr Uptr numUsedBitsInLastByte = maxBits - (maxBytes - 1) * 7; static constexpr Uptr numUnusedBitsInLast = 8 - numUsedBitsInLastByte; static constexpr U8 lastBitUsedMask = U8(1 << (numUsedBitsInLastByte - 1)); static constexpr U8 lastByteUsedMask = U8(1 << numUsedBitsInLastByte) - U8(1); static constexpr U8 lastByteSignedMask = U8(~U8(lastByteUsedMask) & ~U8(0x80)); const U8 lastByte = bytes[maxBytes - 1]; if(!std::is_signed::value) { if((lastByte & ~lastByteUsedMask) != 0) { return LEB128Result::InvalidUnusedBits; } } else { const I8 signBit = I8((lastByte & lastBitUsedMask) << numUnusedBitsInLast); const I8 signExtendedLastBit = signBit >> numUnusedBitsInLast; if((lastByte & ~lastByteUsedMask) != (signExtendedLastBit & lastByteSignedMask)) { return LEB128Result::InvalidUnusedBits; } } } // Decode the buffer's bytes into the output integer. outValue = 0; for(Uptr byteIndex = 0; byteIndex < maxBytes; ++byteIndex) { outValue |= Value(U64(bytes[byteIndex] & ~0x80) << U64(byteIndex * 7)); } // Sign extend the output integer to the full size of Value. if(std::is_signed::value && signExtendShift > 0) { outValue = Value(outValue << signExtendShift) >> signExtendShift; } return LEB128Result::Success; } // LEB128 variable-length integer serialization. template WAVM_FORCEINLINE void serializeVarInt(OutputStream& stream, Value& inValue, Value minValue, Value maxValue) { Value value = inValue; if(value < minValue || value > maxValue) { throw FatalSerializationException( std::string("out-of-range value: ") + std::to_string(minValue) + "<=" + std::to_string(value) + "<=" + std::to_string(maxValue)); } bool more = true; while(more) { U8 outputByte = (U8)(value & 127); value >>= 7; more = std::is_signed::value ? (value != 0 && value != Value(-1)) || (value >= 0 && (outputByte & 0x40)) || (value < 0 && !(outputByte & 0x40)) : (value != 0); if(more) { outputByte |= 0x80; } *stream.advance(1) = outputByte; }; } template WAVM_FORCEINLINE void serializeVarInt(InputStream& stream, Value& value, Value minValue, Value maxValue) { LEB128Result result = trySerializeVarInt(stream, value); switch(result) { case LEB128Result::Success: break; case LEB128Result::Truncated: throw FatalSerializationException("expected data but found end of stream"); case LEB128Result::Overlong: throw FatalSerializationException("overlong LEB128 encoding"); case LEB128Result::InvalidUnusedBits: throw FatalSerializationException( std::is_signed::value ? "Invalid signed LEB encoding: unused bits in final byte must match the " "most-significant used bit" : "Invalid unsigned LEB encoding: unused bits in final byte must be 0"); default: WAVM_UNREACHABLE(); } if(value < minValue || value > maxValue) { throw FatalSerializationException( std::string("out-of-range value: ") + std::to_string(minValue) + "<=" + std::to_string(value) + "<=" + std::to_string(maxValue)); } } // Non-throwing ULEB128 read. WAVM_FORCEINLINE bool trySerializeVarUInt64(InputStream& stream, U64& outValue) { return trySerializeVarInt(stream, outValue) == LEB128Result::Success; } // Non-throwing SLEB128 read. WAVM_FORCEINLINE bool trySerializeVarSInt64(InputStream& stream, I64& outValue) { return trySerializeVarInt(stream, outValue) == LEB128Result::Success; } // Typed non-throwing ULEB128 read with overflow checking. template WAVM_FORCEINLINE bool trySerializeVarUInt(InputStream& stream, T& outValue) { static_assert(std::is_integral::value && !std::is_signed::value, "trySerializeVarUInt requires unsigned integral type"); U64 raw; if(!trySerializeVarUInt64(stream, raw)) { return false; } if(raw > U64(std::numeric_limits::max())) { return false; } outValue = T(raw); return true; } // Typed non-throwing SLEB128 read with range checking. template WAVM_FORCEINLINE bool trySerializeVarSInt(InputStream& stream, T& outValue) { static_assert(std::is_integral::value && std::is_signed::value, "trySerializeVarSInt requires signed integral type"); I64 raw; if(!trySerializeVarSInt64(stream, raw)) { return false; } if(raw < I64(std::numeric_limits::min()) || raw > I64(std::numeric_limits::max())) { return false; } outValue = T(raw); return true; } // Helpers for various common LEB128 parameters. template void serializeVarUInt1(Stream& stream, Value& value) { serializeVarInt(stream, value, 0, 1); } template void serializeVarUInt7(Stream& stream, Value& value) { serializeVarInt(stream, value, 0, 127); } template void serializeVarUInt8(Stream& stream, Value& value) { serializeVarInt(stream, value, 0, 255); } template void serializeVarUInt32(Stream& stream, Value& value) { serializeVarInt(stream, value, 0, UINT32_MAX); } template void serializeVarUInt64(Stream& stream, Value& value) { serializeVarInt(stream, value, 0, UINT64_MAX); } template void serializeVarInt7(Stream& stream, Value& value) { serializeVarInt(stream, value, -64, 63); } template void serializeVarInt32(Stream& stream, Value& value) { serializeVarInt(stream, value, INT32_MIN, INT32_MAX); } template void serializeVarInt64(Stream& stream, Value& value) { serializeVarInt(stream, value, INT64_MIN, INT64_MAX); } }} ================================================ FILE: Include/WAVM/Inline/RandomStream.h ================================================ #pragma once #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { // A stream that uses a combination of a PRNG and input data to produce pseudo-random values. struct RandomStream { RandomStream(const U8* inData, Uptr numBytes) : next(inData), end(inData + numBytes), denominator(0), numerator(0), seed(0) { refill(); } // Returns a pseudo-random value between 0 and maxResult, inclusive. template Result get(Result maxResult) { Result result = Result(get64(maxResult)); WAVM_ASSERT(result <= maxResult); return result; } private: const U8* next; const U8* end; U64 denominator; U64 numerator; U64 seed; void refill() { while(denominator <= UINT32_MAX) { if(next < end) { numerator += (denominator + 1) * *next++; } denominator += 255 * (denominator + 1); }; } U32 get32(U32 maxResult) { if(maxResult == 0) { return 0; } WAVM_ASSERT(denominator >= maxResult); seed ^= numerator; const U32 result = U32(seed % (U64(maxResult) + 1)); seed /= (U64(maxResult) + 1); numerator /= (U64(maxResult) + 1); denominator /= (U64(maxResult) + 1); seed = 6364136223846793005 * seed + 1442695040888963407; refill(); return result; } U64 get64(U64 maxResult) { U64 result = get32(U32(maxResult)); result += U64(get32(U32(maxResult >> 32))) << 32; WAVM_ASSERT(result <= maxResult); return result; } }; } ================================================ FILE: Include/WAVM/Inline/Serialization.h ================================================ #pragma once #include #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Defines.h" namespace WAVM { namespace Serialization { // An exception that is thrown for various errors during serialization. // Any code using serialization should handle it! struct FatalSerializationException { std::string message; FatalSerializationException(std::string&& inMessage) : message(std::move(inMessage)) {} }; // An abstract output stream. struct OutputStream { static constexpr bool isInput = false; OutputStream() : next(nullptr), end(nullptr) {} virtual ~OutputStream() {} // Advances the stream cursor by numBytes, and returns a pointer to the previous stream // cursor. inline U8* advance(Uptr numBytes) { if(WAVM_UNLIKELY(Uptr(end - next) < numBytes)) { extendBuffer(numBytes); } WAVM_ASSERT(next + numBytes <= end); U8* data = next; next += numBytes; return data; } protected: U8* next; U8* end; // Called when there isn't enough space in the buffer to hold a write to the stream. // Should update next and end to point to a new buffer, and ensure that the new // buffer has at least numBytes. May throw FatalSerializationException. virtual void extendBuffer(Uptr numBytes) = 0; }; // An output stream that writes to an array of bytes. struct ArrayOutputStream : public OutputStream { // Returns the number of bytes written so far. Uptr position() const { return next ? Uptr(next - bytes.data()) : 0; } // Moves the output array from the stream to the caller. std::vector&& getBytes() { bytes.resize(next - bytes.data()); next = nullptr; end = nullptr; return std::move(bytes); } private: std::vector bytes; virtual void extendBuffer(Uptr numBytes) { const Uptr nextIndex = next - bytes.data(); // Grow the array by larger and larger increments, so the time spent growing // the buffer is O(1). bytes.resize(std::max((Uptr)nextIndex + numBytes, (Uptr)bytes.size() * 7 / 5 + 32)); next = bytes.data() + nextIndex; end = bytes.data() + bytes.size(); } }; // An abstract input stream. struct InputStream { static constexpr bool isInput = true; InputStream(const U8* inNext, const U8* inEnd) : next(inNext), end(inEnd) {} virtual ~InputStream() {} virtual Uptr capacity() const = 0; // Advances the stream cursor by numBytes, and returns a pointer to the previous stream // cursor. Throws FatalSerializationException if insufficient data is available. inline const U8* advance(Uptr numBytes) { if(WAVM_UNLIKELY(!next || next + numBytes > end)) { getMoreData(numBytes); } const U8* data = next; next += numBytes; return data; } // Returns a pointer to the current stream cursor, ensuring that there are at least numBytes // following it. Throws FatalSerializationException if insufficient data is available. inline const U8* peek(Uptr numBytes) { if(WAVM_UNLIKELY(next + numBytes > end)) { getMoreData(numBytes); } return next; } // Non-throwing advance: returns pointer to numBytes of data at current position and // advances, or returns nullptr if insufficient data is available. inline const U8* tryAdvance(Uptr numBytes) { if(WAVM_UNLIKELY(!next || next + numBytes > end)) { if(!tryGetMoreData(numBytes)) { return nullptr; } } const U8* data = next; next += numBytes; return data; } protected: const U8* next; const U8* end; // Implemented by subclasses to provide more data when the buffer is exhausted. // Should update next and end to point to a new buffer with at least numBytes available. // Returns true on success, false if no more data is available. virtual bool tryGetMoreData(Uptr numBytes) = 0; private: // Non-virtual, non-inlined throwing path for advance/peek. WAVM_FORCENOINLINE void getMoreData(Uptr numBytes) { if(WAVM_UNLIKELY(!tryGetMoreData(numBytes))) { throw FatalSerializationException("expected data but found end of stream"); } } }; // An input stream that reads from a contiguous range of memory. struct MemoryInputStream : InputStream { MemoryInputStream(const void* inData, Uptr numBytes) : InputStream((const U8*)inData, (const U8*)inData + numBytes), data((const U8*)inData) { } // Creates a stream that extends to the end of the address space, for reading // trusted mapped memory where the total size is not known upfront (e.g. LSDA tables). explicit MemoryInputStream(const void* inData) : InputStream((const U8*)inData, (const U8*)UINTPTR_MAX), data((const U8*)inData) { } virtual Uptr capacity() const { return end - next; } // Returns the current byte position relative to the start of the memory region. Uptr position() const { return Uptr(next - data); } // Seeks to an absolute byte position. Returns false if out of range. bool seek(Uptr pos) { if(pos > Uptr(end - data)) { return false; } next = data + pos; return true; } private: const U8* data; virtual bool tryGetMoreData(Uptr numBytes) { return false; } }; // Serialize raw byte sequences. WAVM_FORCEINLINE void serializeBytes(OutputStream& stream, const U8* bytes, Uptr numBytes) { if(numBytes) { memcpy(stream.advance(numBytes), bytes, numBytes); } } WAVM_FORCEINLINE void serializeBytes(InputStream& stream, U8* bytes, Uptr numBytes) { if(numBytes) { memcpy(bytes, stream.advance(numBytes), numBytes); } } // Write zero bytes until the stream reaches the given offset. inline void serializeZerosUntilOffset(ArrayOutputStream& stream, Uptr targetOffset) { Uptr pos = stream.position(); WAVM_ASSERT(targetOffset >= pos); if(Uptr pad = targetOffset - pos) { memset(stream.advance(pad), 0, pad); } } // Serialize basic C++ types. template WAVM_FORCEINLINE void serializeNativeValue(Stream& stream, Value& value) { serializeBytes(stream, (U8*)&value, sizeof(Value)); } // Non-throwing read of a fixed-size value from an input stream. template WAVM_FORCEINLINE bool tryRead(InputStream& stream, T& outValue) { const U8* data = stream.tryAdvance(sizeof(T)); if(!data) { return false; } memcpy(&outValue, data, sizeof(T)); return true; } template void serialize(Stream& stream, U8& i) { serializeNativeValue(stream, i); } template void serialize(Stream& stream, U32& i) { serializeNativeValue(stream, i); } template void serialize(Stream& stream, U64& i) { serializeNativeValue(stream, i); } template void serialize(Stream& stream, I8& i) { serializeNativeValue(stream, i); } template void serialize(Stream& stream, I32& i) { serializeNativeValue(stream, i); } template void serialize(Stream& stream, I64& i) { serializeNativeValue(stream, i); } template void serialize(Stream& stream, F32& f) { serializeNativeValue(stream, f); } template void serialize(Stream& stream, F64& f) { serializeNativeValue(stream, f); } // Serializes a constant. If deserializing, throws a FatalSerializationException if the // deserialized value doesn't match the constant. template void serializeConstant(InputStream& stream, const char* constantMismatchMessage, Constant constant) { Constant savedConstant; serialize(stream, savedConstant); if(savedConstant != constant) { throw FatalSerializationException(std::string(constantMismatchMessage) + ": loaded " + std::to_string(savedConstant) + " but was expecting " + std::to_string(constant)); } } template void serializeConstant(OutputStream& stream, const char* constantMismatchMessage, Constant constant) { serialize(stream, constant); } // Serialize containers. template void serialize(Stream& stream, std::string& string) { Uptr size = string.size(); serializeVarUInt32(stream, size); if(Stream::isInput) { // Advance the stream before resizing the string: // try to get a serialization exception before making a huge allocation for malformed // input. const U8* inputBytes = stream.advance(size); string.resize(size); memcpy(const_cast(string.data()), inputBytes, size); string.shrink_to_fit(); } else { serializeBytes(stream, (U8*)string.c_str(), size); } } template void serializeArray(Stream& stream, std::vector& vector, SerializeElement serializeElement) { Uptr size = vector.size(); serializeVarUInt32(stream, size); if(Stream::isInput) { // Grow the vector one element at a time: // try to get a serialization exception before making a huge allocation for malformed // input. vector.clear(); for(Uptr index = 0; index < size; ++index) { vector.push_back(Element()); serializeElement(stream, vector.back()); } vector.shrink_to_fit(); } else { for(Uptr index = 0; index < vector.size(); ++index) { serializeElement(stream, vector[index]); } } } template void serialize(Stream& stream, std::vector& vector) { serializeArray( stream, vector, [](Stream& stream, Element& element) { serialize(stream, element); }); } }} ================================================ FILE: Include/WAVM/Inline/StringBuilder.h ================================================ #pragma once #include #include #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Defines.h" namespace WAVM { // Abstract base for incrementally building null-terminated strings. // Modeled after Serialization::OutputStream: subclasses implement extendBuffer() // to control what happens when the buffer is full. // // Signal-safe when used with FixedStringBuilder (no heap allocation). struct StringBuilderBase { virtual ~StringBuilderBase() {} StringBuilderBase& vappendf(const char* fmt, va_list args) { va_list argsCopy; va_copy(argsCopy, args); Uptr remaining = Uptr(end - next); int n = std::vsnprintf(next, remaining + 1, fmt, argsCopy); va_end(argsCopy); if(n >= 0 && Uptr(n) <= remaining) { next += n; } else if(n >= 0) { // Output was truncated. Try to extend the buffer. extendBuffer(Uptr(n) - remaining); remaining = Uptr(end - next); if(Uptr(n) <= remaining) { // Buffer grew enough; retry. va_copy(argsCopy, args); n = std::vsnprintf(next, remaining + 1, fmt, argsCopy); va_end(argsCopy); if(n > 0 && Uptr(n) <= remaining) { next += n; } } else { // Truncation accepted (e.g. fixed buffer in truncate mode). next = end; } } return *this; } WAVM_VALIDATE_AS_PRINTF(2, 3) StringBuilderBase& appendf(const char* fmt, ...) { va_list args; va_start(args, fmt); vappendf(fmt, args); va_end(args); return *this; } StringBuilderBase& append(const char* str, Uptr len) { Uptr remaining = Uptr(end - next); if(remaining < len) { extendBuffer(len - remaining); remaining = Uptr(end - next); } Uptr copyLen = len < remaining ? len : remaining; memcpy(next, str, copyLen); next += copyLen; *next = '\0'; return *this; } StringBuilderBase& append(const char* str) { return append(str, strlen(str)); } StringBuilderBase& append(std::string_view sv) { return append(sv.data(), sv.size()); } StringBuilderBase& append(const std::string& s) { return append(s.data(), s.size()); } const char* c_str() const { return start ? start : ""; } Uptr size() const { return Uptr(next - start); } std::string_view view() const { return std::string_view(start, size()); } std::string toString() const { return std::string(start, size()); } operator std::string_view() const { return view(); } protected: char* start; char* next; char* end; // One past the last usable char position. Null terminator goes at *next. StringBuilderBase() : start(nullptr), next(nullptr), end(nullptr) {} StringBuilderBase(char* buf, Uptr capacity) : start(buf), next(buf), end(buf + capacity - 1) { if(capacity > 0) { buf[0] = '\0'; } } // Called when the buffer is full. Implementations may: // - Grow the buffer (updating start/next/end) // - Do nothing (output will be silently truncated) // - Abort with a fatal error virtual bool extendBuffer(Uptr numChars) = 0; }; // Fixed-size string builder with inline storage. Aborts on overflow. // Use when the buffer size is calculated to be exactly large enough. // No heap allocation; signal-safe. template struct FixedStringBuilder : StringBuilderBase { char storage[N]; FixedStringBuilder() : StringBuilderBase(storage, N) {} FixedStringBuilder(const FixedStringBuilder&) = delete; FixedStringBuilder& operator=(const FixedStringBuilder&) = delete; protected: virtual bool extendBuffer(Uptr numChars) override { Errors::fatal("FixedStringBuilder buffer overflow"); } }; // Fixed-size string builder with inline storage. Truncates when it's full. // No heap allocation; signal-safe. template struct TruncatingFixedStringBuilder : StringBuilderBase { char storage[N]; TruncatingFixedStringBuilder() : StringBuilderBase(storage, N) {} TruncatingFixedStringBuilder(const TruncatingFixedStringBuilder&) = delete; TruncatingFixedStringBuilder& operator=(const TruncatingFixedStringBuilder&) = delete; protected: virtual bool extendBuffer(Uptr numChars) override { return false; } }; // Growable string builder backed by heap allocation. // Not signal-safe. Use when output size is unpredictable. struct StringBuilder : StringBuilderBase { StringBuilder(Uptr initialCapacity = 64) : heapBuffer(nullptr) { heapBuffer = static_cast(malloc(initialCapacity)); if(heapBuffer) { start = heapBuffer; next = heapBuffer; end = heapBuffer + initialCapacity - 1; heapBuffer[0] = '\0'; } } ~StringBuilder() { free(heapBuffer); } StringBuilder(StringBuilder&& other) noexcept : StringBuilderBase(), heapBuffer(nullptr) { start = other.start; next = other.next; end = other.end; heapBuffer = other.heapBuffer; other.start = nullptr; other.next = nullptr; other.end = nullptr; other.heapBuffer = nullptr; } StringBuilder& operator=(StringBuilder&& other) noexcept { if(this != &other) { free(heapBuffer); start = other.start; next = other.next; end = other.end; heapBuffer = other.heapBuffer; other.start = nullptr; other.next = nullptr; other.end = nullptr; other.heapBuffer = nullptr; } return *this; } StringBuilder(const StringBuilder&) = delete; StringBuilder& operator=(const StringBuilder&) = delete; // Move the contents to a std::string and reset the builder. std::string moveToString() { std::string result(start, size()); next = start; if(start) { *start = '\0'; } return result; } protected: char* heapBuffer; virtual bool extendBuffer(Uptr numChars) override { Uptr currentSize = Uptr(next - start); Uptr currentCapacity = Uptr(end - start) + 1; Uptr needed = currentSize + numChars + 1; // +1 for null terminator // Grow by at least 7/5 (same growth factor as ArrayOutputStream). Uptr newCapacity = std::max(needed, currentCapacity * 7 / 5 + 32); char* newBuffer = static_cast(realloc(heapBuffer, newCapacity)); WAVM_ERROR_UNLESS(newBuffer); heapBuffer = newBuffer; start = newBuffer; next = newBuffer + currentSize; end = newBuffer + newCapacity - 1; return true; } }; } // namespace WAVM ================================================ FILE: Include/WAVM/Inline/Time.h ================================================ #pragma once #include "WAVM/Inline/I128.h" namespace WAVM { struct Time { I128 ns; static constexpr Time infinity() { return Time{I128::nan()}; } friend bool isInfinity(Time time) { return isNaN(time.ns); } }; } ================================================ FILE: Include/WAVM/Inline/Timing.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Clock.h" namespace WAVM { namespace Timing { // Encapsulates a timer that starts when constructed and stops when read. struct Timer { Timer() : startTime(Platform::getClockTime(Platform::Clock::monotonic)), isStopped(false) {} void stop() { endTime = Platform::getClockTime(Platform::Clock::monotonic); isStopped = true; } F64 getNanoseconds() { if(!isStopped) { stop(); } return F64(flushNaNToZero(endTime.ns - startTime.ns)); } F64 getMicroseconds() { return getNanoseconds() / 1000.0; } F64 getMilliseconds() { return getNanoseconds() / 1000000.0; } F64 getSeconds() { return getNanoseconds() / 1000000000.0; } private: Time startTime; Time endTime; bool isStopped; }; // Helpers for printing timers. inline void logTimer(const char* context, Timer& timer) { Log::printf(Log::metrics, "%s in %.2fms\n", context, timer.getMilliseconds()); } inline void logRatePerSecond(const char* context, Timer& timer, F64 numerator, const char* numeratorUnit) { Log::printf(Log::metrics, "%s in %.2fms (%f %s%s)\n", context, timer.getMilliseconds(), timer.getSeconds() == 0.0 ? numerator : numerator / timer.getSeconds(), numeratorUnit, timer.getSeconds() == 0.0 ? "" : "/s"); } }} ================================================ FILE: Include/WAVM/Inline/UnalignedArrayView.h ================================================ #pragma once #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { // View over a potentially misaligned array of trivially-copyable elements. // Uses memcpy to read elements, avoiding undefined behavior from misaligned access. template struct UnalignedArrayView { static_assert(std::is_trivially_copyable::value, "UnalignedArrayView requires a trivially copyable type"); const U8* base; Uptr count; T operator[](Uptr index) const { WAVM_ASSERT(index < count); T value; memcpy(&value, base + index * sizeof(T), sizeof(T)); return value; } }; } ================================================ FILE: Include/WAVM/Inline/Unicode.h ================================================ #pragma once #include "BasicTypes.h" #include "WAVM/Inline/Assert.h" namespace WAVM { namespace Unicode { template void encodeUTF8CodePoint(U32 codePoint, String& outString) { if(codePoint < 0x80) { outString += char(codePoint); } else if(codePoint < 0x800) { outString += char((codePoint >> 6) & 0x1F) | 0xC0; outString += char((codePoint) & 0x3F) | 0x80; } else if(codePoint < 0x10000) { outString += char((codePoint >> 12) & 0x0F) | 0xE0; outString += char((codePoint >> 6) & 0x3F) | 0x80; outString += char((codePoint) & 0x3F) | 0x80; } else { WAVM_ASSERT(codePoint < 0x200000); outString += char((codePoint >> 18) & 0x07) | 0xF0; outString += char((codePoint >> 12) & 0x3F) | 0x80; outString += char((codePoint >> 6) & 0x3F) | 0x80; outString += char((codePoint) & 0x3F) | 0x80; } } inline bool decodeUTF8CodePoint(const U8*& nextChar, const U8* endChar, U32& outCodePoint) { // Decode a UTF-8 byte sequence to a Unicode codepoint. // The valid ranges are taken from table 3-7 in the Unicode Standard 9.0: // "Well-Formed UTF-8 Byte Sequences" if(*nextChar < 0x80) { outCodePoint = *nextChar; ++nextChar; return true; } else if(*nextChar >= 0xc2 && *nextChar <= 0xdf) { if(nextChar + 1 >= endChar || nextChar[1] < 0x80 || nextChar[1] > 0xbf) { return false; } outCodePoint = (U32(nextChar[0] & 0x1F) << 6) | U32(nextChar[1] & 0x3F); nextChar += 2; return true; } else if(*nextChar >= 0xe0 && *nextChar <= 0xef) { if(*nextChar == 0xe0) { if(nextChar + 2 >= endChar || nextChar[1] < 0xa0 || nextChar[1] > 0xbf || nextChar[2] < 0x80 || nextChar[2] > 0xbf) { return false; } } else if(*nextChar == 0xed) { if(nextChar + 2 >= endChar || nextChar[1] < 0x80 || nextChar[1] > 0x9f || nextChar[2] < 0x80 || nextChar[2] > 0xbf) { return false; } } else if(*nextChar >= 0xe1 && *nextChar <= 0xef) { if(nextChar + 2 >= endChar || nextChar[1] < 0x80 || nextChar[1] > 0xbf || nextChar[2] < 0x80 || nextChar[2] > 0xbf) { return false; } } outCodePoint = (U32(nextChar[0] & 0x0F) << 12) | (U32(nextChar[1] & 0x3F) << 6) | U32(nextChar[2] & 0x3F); nextChar += 3; return true; } else if(*nextChar >= 0xf0 && *nextChar <= 0xf4) { if(*nextChar == 0xf0) { if(nextChar + 3 >= endChar || nextChar[1] < 0x90 || nextChar[1] > 0xbf || nextChar[2] < 0x80 || nextChar[2] > 0xbf || nextChar[3] < 0x80 || nextChar[3] > 0xbf) { return false; } } else if(*nextChar >= 0xf1 && *nextChar <= 0xf3) { if(nextChar + 3 >= endChar || nextChar[1] < 0x80 || nextChar[1] > 0xbf || nextChar[2] < 0x80 || nextChar[2] > 0xbf || nextChar[3] < 0x80 || nextChar[3] > 0xbf) { return false; } } else if(*nextChar == 0xf4) { if(nextChar + 3 >= endChar || nextChar[1] < 0x80 || nextChar[1] > 0x8f || nextChar[2] < 0x80 || nextChar[2] > 0xbf || nextChar[3] < 0x80 || nextChar[3] > 0xbf) { return false; } } outCodePoint = (U32(nextChar[0] & 0x07) << 18) | (U32(nextChar[1] & 0x3F) << 12) | (U32(nextChar[2] & 0x3F) << 6) | U32(nextChar[3] & 0x3F); nextChar += 4; return true; } else { return false; } } inline bool decodeUTF16CodePoint(const U16*& nextChar16, const U16* endChar16, U32& outCodePoint) { // Decode a UTF-16 byte sequence to a Unicode codepoint. if(nextChar16[0] < 0xd800 || nextChar16[0] >= 0xe000) { outCodePoint = nextChar16[0]; ++nextChar16; return true; } else if(nextChar16[0] <= 0xdbff) { if(nextChar16[1] >= 0xdc00 && nextChar16[1] <= 0xdfff) { outCodePoint = ((nextChar16[0] - 0xd800) << 10) + (nextChar16[1] - 0xdc00) + 0x10000; nextChar16 += 2; return true; } else { return false; } } else { return false; } } inline const U8* validateUTF8String(const U8* nextChar, const U8* endChar) { U32 codePoint; while(nextChar != endChar && decodeUTF8CodePoint(nextChar, endChar, codePoint)) {}; return nextChar; } template void encodeUTF16CodePoint(U32 codePoint, String& outString) { if(codePoint < 0x10000) { outString += U16(codePoint); } else { WAVM_ASSERT(codePoint < 0x110000); outString += U16(((codePoint - 0x10000) >> 10) & 0x3ff) | 0xd800; outString += U16((codePoint - 0x10000) & 0x3ff) | 0xdc00; } } template const U8* transcodeUTF8ToUTF16(const U8* nextChar, const U8* endChar, String& outString) { U32 codePoint; while(nextChar != endChar && decodeUTF8CodePoint(nextChar, endChar, codePoint)) { encodeUTF16CodePoint(codePoint, outString); }; return nextChar; } template const U16* transcodeUTF16ToUTF8(const U16* nextChar, const U16* endChar, String& outString) { U32 codePoint; while(nextChar != endChar && decodeUTF16CodePoint(nextChar, endChar, codePoint)) { encodeUTF8CodePoint(codePoint, outString); }; return nextChar; } }} ================================================ FILE: Include/WAVM/Inline/Version.h.in ================================================ #define WAVM_VERSION_MAJOR @WAVM_VERSION_MAJOR@ #define WAVM_VERSION_MINOR @WAVM_VERSION_MINOR@ #define WAVM_VERSION_PATCH @WAVM_VERSION_PATCH@ #define WAVM_VERSION_SUFFIX "@WAVM_VERSION_SUFFIX@" #define WAVM_VERSION_STRING "@WAVM_VERSION_STRING@" ================================================ FILE: Include/WAVM/Inline/xxhash/CMakeLists.txt ================================================ add_custom_target(xxhash SOURCES LICENSE xxhash.c xxh3.h xxhash.h) set_target_properties(xxhash PROPERTIES FOLDER "Third party") ================================================ FILE: Include/WAVM/Inline/xxhash/LICENSE ================================================ xxHash Library Copyright (c) 2012-2020 Yann Collet All rights reserved. BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------- xxhsum command line interface Copyright (c) 2013-2020 Yann Collet All rights reserved. GPL v2 License This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ================================================ FILE: Include/WAVM/Inline/xxhash/xxh3.h ================================================ /* * xxHash - Extremely Fast Hash algorithm * Development source file for `xxh3` * Copyright (C) 2019-2020 Yann Collet * * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * You can contact the author at: * - xxHash homepage: https://www.xxhash.com * - xxHash source repository: https://github.com/Cyan4973/xxHash */ /* * Note: This file is separated for development purposes. * It will be integrated into `xxhash.h` when development stage is completed. * * Credit: most of the work on vectorial and asm variants comes from @easyaspi314 */ #ifndef XXH3_H_1397135465 #define XXH3_H_1397135465 /* === Dependencies === */ #ifndef XXHASH_H_5627135585666179 /* special: when including `xxh3.h` directly, turn on XXH_INLINE_ALL */ # undef XXH_INLINE_ALL /* avoid redefinition */ # define XXH_INLINE_ALL #endif #include "xxhash.h" /* === Compiler specifics === */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */ # define XXH_RESTRICT restrict #else /* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */ # define XXH_RESTRICT /* disable */ #endif #if (defined(__GNUC__) && (__GNUC__ >= 3)) \ || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \ || defined(__clang__) # define XXH_likely(x) __builtin_expect(x, 1) # define XXH_unlikely(x) __builtin_expect(x, 0) #else # define XXH_likely(x) (x) # define XXH_unlikely(x) (x) #endif #if defined(__GNUC__) # if defined(__AVX2__) # include # elif defined(__SSE2__) # include # elif defined(__ARM_NEON__) || defined(__ARM_NEON) # define inline __inline__ /* clang bug */ # include # undef inline # endif #elif defined(_MSC_VER) # include #endif /* * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while * remaining a true 64-bit/128-bit hash function. * * This is done by prioritizing a subset of 64-bit operations that can be * emulated without too many steps on the average 32-bit machine. * * For example, these two lines seem similar, and run equally fast on 64-bit: * * xxh_u64 x; * x ^= (x >> 47); // good * x ^= (x >> 13); // bad * * However, to a 32-bit machine, there is a major difference. * * x ^= (x >> 47) looks like this: * * x.lo ^= (x.hi >> (47 - 32)); * * while x ^= (x >> 13) looks like this: * * // note: funnel shifts are not usually cheap. * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13)); * x.hi ^= (x.hi >> 13); * * The first one is significantly faster than the second, simply because the * shift is larger than 32. This means: * - All the bits we need are in the upper 32 bits, so we can ignore the lower * 32 bits in the shift. * - The shift result will always fit in the lower 32 bits, and therefore, * we can ignore the upper 32 bits in the xor. * * Thanks to this optimization, XXH3 only requires these features to be efficient: * * - Usable unaligned access * - A 32-bit or 64-bit ALU * - If 32-bit, a decent ADC instruction * - A 32 or 64-bit multiply with a 64-bit result * - For the 128-bit variant, a decent byteswap helps short inputs. * * The first two are already required by XXH32, and almost all 32-bit and 64-bit * platforms which can run XXH32 can run XXH3 efficiently. * * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one * notable exception. * * First of all, Thumb-1 lacks support for the UMULL instruction which * performs the important long multiply. This means numerous __aeabi_lmul * calls. * * Second of all, the 8 functional registers are just not enough. * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need * Lo registers, and this shuffling results in thousands more MOVs than A32. * * A32 and T32 don't have this limitation. They can access all 14 registers, * do a 32->64 multiply with UMULL, and the flexible operand allowing free * shifts is helpful, too. * * Therefore, we do a quick sanity check. * * If compiling Thumb-1 for a target which supports ARM instructions, we will * emit a warning, as it is not a "sane" platform to compile for. * * Usually, if this happens, it is because of an accident and you probably need * to specify -march, as you likely meant to compile for a newer architecture. */ #if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM) # warning "XXH3 is highly inefficient without ARM or Thumb-2." #endif /* ========================================== * Vectorization detection * ========================================== */ #define XXH_SCALAR 0 /* Portable scalar version */ #define XXH_SSE2 1 /* SSE2 for Pentium 4 and all x86_64 */ #define XXH_AVX2 2 /* AVX2 for Haswell and Bulldozer */ #define XXH_AVX512 3 /* AVX512 for Skylake and Icelake */ #define XXH_NEON 4 /* NEON for most ARMv7-A and all AArch64 */ #define XXH_VSX 5 /* VSX and ZVector for POWER8/z13 */ #ifndef XXH_VECTOR /* can be defined on command line */ # if defined(__AVX512F__) # define XXH_VECTOR XXH_AVX512 # elif defined(__AVX2__) # define XXH_VECTOR XXH_AVX2 # elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2)) # define XXH_VECTOR XXH_SSE2 # elif defined(__GNUC__) /* msvc support maybe later */ \ && (defined(__ARM_NEON__) || defined(__ARM_NEON)) \ && (defined(__LITTLE_ENDIAN__) /* We only support little endian NEON */ \ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) # define XXH_VECTOR XXH_NEON # elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \ || (defined(__s390x__) && defined(__VEC__)) \ && defined(__GNUC__) /* TODO: IBM XL */ # define XXH_VECTOR XXH_VSX # else # define XXH_VECTOR XXH_SCALAR # endif #endif /* * Controls the alignment of the accumulator, * for compatibility with aligned vector loads, which are usually faster. */ #ifndef XXH_ACC_ALIGN # if defined(XXH_X86DISPATCH) # define XXH_ACC_ALIGN 64 /* for compatibility with avx512 */ # elif XXH_VECTOR == XXH_SCALAR /* scalar */ # define XXH_ACC_ALIGN 8 # elif XXH_VECTOR == XXH_SSE2 /* sse2 */ # define XXH_ACC_ALIGN 16 # elif XXH_VECTOR == XXH_AVX2 /* avx2 */ # define XXH_ACC_ALIGN 32 # elif XXH_VECTOR == XXH_NEON /* neon */ # define XXH_ACC_ALIGN 16 # elif XXH_VECTOR == XXH_VSX /* vsx */ # define XXH_ACC_ALIGN 16 # elif XXH_VECTOR == XXH_AVX512 /* avx512 */ # define XXH_ACC_ALIGN 64 # endif #endif #if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \ || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512 # define XXH_SEC_ALIGN XXH_ACC_ALIGN #else # define XXH_SEC_ALIGN 8 #endif /* * UGLY HACK: * GCC usually generates the best code with -O3 for xxHash. * * However, when targeting AVX2, it is overzealous in its unrolling resulting * in code roughly 3/4 the speed of Clang. * * There are other issues, such as GCC splitting _mm256_loadu_si256 into * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which * only applies to Sandy and Ivy Bridge... which don't even support AVX2. * * That is why when compiling the AVX2 version, it is recommended to use either * -O2 -mavx2 -march=haswell * or * -O2 -mavx2 -mno-avx256-split-unaligned-load * for decent performance, or to use Clang instead. * * Fortunately, we can control the first one with a pragma that forces GCC into * -O2, but the other one we can't control without "failed to inline always * inline function due to target mismatch" warnings. */ #if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \ && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */ # pragma GCC push_options # pragma GCC optimize("-O2") #endif #if XXH_VECTOR == XXH_NEON /* * NEON's setup for vmlal_u32 is a little more complicated than it is on * SSE2, AVX2, and VSX. * * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast. * * To do the same operation, the 128-bit 'Q' register needs to be split into * two 64-bit 'D' registers, performing this operation:: * * [ a | b ] * | '---------. .--------' | * | x | * | .---------' '--------. | * [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[ a >> 32 | b >> 32 ] * * Due to significant changes in aarch64, the fastest method for aarch64 is * completely different than the fastest method for ARMv7-A. * * ARMv7-A treats D registers as unions overlaying Q registers, so modifying * D11 will modify the high half of Q5. This is similar to how modifying AH * will only affect bits 8-15 of AX on x86. * * VZIP takes two registers, and puts even lanes in one register and odd lanes * in the other. * * On ARMv7-A, this strangely modifies both parameters in place instead of * taking the usual 3-operand form. * * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the * lower and upper halves of the Q register to end up with the high and low * halves where we want - all in one instruction. * * vzip.32 d10, d11 @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] } * * Unfortunately we need inline assembly for this: Instructions modifying two * registers at once is not possible in GCC or Clang's IR, and they have to * create a copy. * * aarch64 requires a different approach. * * In order to make it easier to write a decent compiler for aarch64, many * quirks were removed, such as conditional execution. * * NEON was also affected by this. * * aarch64 cannot access the high bits of a Q-form register, and writes to a * D-form register zero the high bits, similar to how writes to W-form scalar * registers (or DWORD registers on x86_64) work. * * The formerly free vget_high intrinsics now require a vext (with a few * exceptions) * * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one * operand. * * The equivalent of the VZIP.32 on the lower and upper halves would be this * mess: * * ext v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] } * zip1 v1.2s, v0.2s, v2.2s // v1 = { v0[0], v2[0] } * zip2 v0.2s, v0.2s, v1.2s // v0 = { v0[1], v2[1] } * * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN): * * shrn v1.2s, v0.2d, #32 // v1 = (uint32x2_t)(v0 >> 32); * xtn v0.2s, v0.2d // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF); * * This is available on ARMv7-A, but is less efficient than a single VZIP.32. */ /* * Function-like macro: * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi) * { * outLo = (uint32x2_t)(in & 0xFFFFFFFF); * outHi = (uint32x2_t)(in >> 32); * in = UNDEFINED; * } */ # if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \ && defined(__GNUC__) \ && !defined(__aarch64__) && !defined(__arm64__) # define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \ do { \ /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \ /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */ \ /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \ __asm__("vzip.32 %e0, %f0" : "+w" (in)); \ (outLo) = vget_low_u32 (vreinterpretq_u32_u64(in)); \ (outHi) = vget_high_u32(vreinterpretq_u32_u64(in)); \ } while (0) # else # define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \ do { \ (outLo) = vmovn_u64 (in); \ (outHi) = vshrn_n_u64 ((in), 32); \ } while (0) # endif #endif /* XXH_VECTOR == XXH_NEON */ /* * VSX and Z Vector helpers. * * This is very messy, and any pull requests to clean this up are welcome. * * There are a lot of problems with supporting VSX and s390x, due to * inconsistent intrinsics, spotty coverage, and multiple endiannesses. */ #if XXH_VECTOR == XXH_VSX # if defined(__s390x__) # include # else # include # endif # undef vector /* Undo the pollution */ typedef __vector unsigned long long xxh_u64x2; typedef __vector unsigned char xxh_u8x16; typedef __vector unsigned xxh_u32x4; # ifndef XXH_VSX_BE # if defined(__BIG_ENDIAN__) \ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) # define XXH_VSX_BE 1 # elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__ # warning "-maltivec=be is not recommended. Please use native endianness." # define XXH_VSX_BE 1 # else # define XXH_VSX_BE 0 # endif # endif /* !defined(XXH_VSX_BE) */ # if XXH_VSX_BE /* A wrapper for POWER9's vec_revb. */ # if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__)) # define XXH_vec_revb vec_revb # else XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val) { xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 }; return vec_perm(val, val, vByteSwap); } # endif # endif /* XXH_VSX_BE */ /* * Performs an unaligned load and byte swaps it on big endian. */ XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr) { xxh_u64x2 ret; memcpy(&ret, ptr, sizeof(xxh_u64x2)); # if XXH_VSX_BE ret = XXH_vec_revb(ret); # endif return ret; } /* * vec_mulo and vec_mule are very problematic intrinsics on PowerPC * * These intrinsics weren't added until GCC 8, despite existing for a while, * and they are endian dependent. Also, their meaning swap depending on version. * */ # if defined(__s390x__) /* s390x is always big endian, no issue on this platform */ # define XXH_vec_mulo vec_mulo # define XXH_vec_mule vec_mule # elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw) /* Clang has a better way to control this, we can just use the builtin which doesn't swap. */ # define XXH_vec_mulo __builtin_altivec_vmulouw # define XXH_vec_mule __builtin_altivec_vmuleuw # else /* gcc needs inline assembly */ /* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */ XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b) { xxh_u64x2 result; __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); return result; } XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b) { xxh_u64x2 result; __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); return result; } # endif /* XXH_vec_mulo, XXH_vec_mule */ #endif /* XXH_VECTOR == XXH_VSX */ /* prefetch * can be disabled, by declaring XXH_NO_PREFETCH build macro */ #if defined(XXH_NO_PREFETCH) # define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ #else # if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */ # include /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */ # define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0) # elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) ) # define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */) # else # define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ # endif #endif /* XXH_NO_PREFETCH */ /* ========================================== * XXH3 default settings * ========================================== */ #define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */ #if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN) # error "default keyset is not large enough" #endif /* Pseudorandom secret taken directly from FARSH */ XXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = { 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c, 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, 0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c, 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d, 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e, 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, 0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e, }; #ifdef XXH_OLD_NAMES # define kSecret XXH3_kSecret #endif /* * Calculates a 32-bit to 64-bit long multiply. * * Wraps __emulu on MSVC x86 because it tends to call __allmul when it doesn't * need to (but it shouldn't need to anyways, it is about 7 instructions to do * a 64x64 multiply...). Since we know that this will _always_ emit MULL, we * use that instead of the normal method. * * If you are compiling for platforms like Thumb-1 and don't have a better option, * you may also want to write your own long multiply routine here. * * XXH_FORCE_INLINE xxh_u64 XXH_mult32to64(xxh_u64 x, xxh_u64 y) * { * return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF); * } */ #if defined(_MSC_VER) && defined(_M_IX86) # include # define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y)) #else /* * Downcast + upcast is usually better than masking on older compilers like * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers. * * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands * and perform a full 64x64 multiply -- entirely redundant on 32-bit. */ # define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y)) #endif /* * Calculates a 64->128-bit long multiply. * * Uses __uint128_t and _umul128 if available, otherwise uses a scalar version. */ static XXH128_hash_t XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs) { /* * GCC/Clang __uint128_t method. * * On most 64-bit targets, GCC and Clang define a __uint128_t type. * This is usually the best way as it usually uses a native long 64-bit * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64. * * Usually. * * Despite being a 32-bit platform, Clang (and emscripten) define this type * despite not having the arithmetic for it. This results in a laggy * compiler builtin call which calculates a full 128-bit multiply. * In that case it is best to use the portable one. * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677 */ #if defined(__GNUC__) && !defined(__wasm__) \ && defined(__SIZEOF_INT128__) \ || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128) __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs; XXH128_hash_t r128; r128.low64 = (xxh_u64)(product); r128.high64 = (xxh_u64)(product >> 64); return r128; /* * MSVC for x64's _umul128 method. * * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct); * * This compiles to single operand MUL on x64. */ #elif defined(_M_X64) || defined(_M_IA64) #ifndef _MSC_VER # pragma intrinsic(_umul128) #endif xxh_u64 product_high; xxh_u64 const product_low = _umul128(lhs, rhs, &product_high); XXH128_hash_t r128; r128.low64 = product_low; r128.high64 = product_high; return r128; #else /* * Portable scalar method. Optimized for 32-bit and 64-bit ALUs. * * This is a fast and simple grade school multiply, which is shown below * with base 10 arithmetic instead of base 0x100000000. * * 9 3 // D2 lhs = 93 * x 7 5 // D2 rhs = 75 * ---------- * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15 * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45 * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21 * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63 * --------- * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27 * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67 * --------- * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975 * * The reasons for adding the products like this are: * 1. It avoids manual carry tracking. Just like how * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX. * This avoids a lot of complexity. * * 2. It hints for, and on Clang, compiles to, the powerful UMAAL * instruction available in ARM's Digital Signal Processing extension * in 32-bit ARMv6 and later, which is shown below: * * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm) * { * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm; * *RdLo = (xxh_u32)(product & 0xFFFFFFFF); * *RdHi = (xxh_u32)(product >> 32); * } * * This instruction was designed for efficient long multiplication, and * allows this to be calculated in only 4 instructions at speeds * comparable to some 64-bit ALUs. * * 3. It isn't terrible on other platforms. Usually this will be a couple * of 32-bit ADD/ADCs. */ /* First calculate all of the cross products. */ xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF); xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF); xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32); xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32); /* Now add the products together. These will never overflow. */ xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi; xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi; xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF); XXH128_hash_t r128; r128.low64 = lower; r128.high64 = upper; return r128; #endif } /* * Does a 64-bit to 128-bit multiply, then XOR folds it. * * The reason for the separate function is to prevent passing too many structs * around by value. This will hopefully inline the multiply, but we don't force it. */ static xxh_u64 XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs) { XXH128_hash_t product = XXH_mult64to128(lhs, rhs); return product.low64 ^ product.high64; } /* Seems to produce slightly better code on GCC for some reason. */ XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift) { XXH_ASSERT(0 <= shift && shift < 64); return v64 ^ (v64 >> shift); } /* * This is a fast avalanche stage, * suitable when input bits are already partially mixed */ static XXH64_hash_t XXH3_avalanche(xxh_u64 h64) { h64 = XXH_xorshift64(h64, 37); h64 *= 0x165667919E3779F9ULL; h64 = XXH_xorshift64(h64, 32); return h64; } /* * This is a stronger avalanche, * inspired by Pelle Evensen's rrmxmx * preferable when input has not been previously mixed */ static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len) { /* this mix is inspired by Pelle Evensen's rrmxmx */ h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24); h64 *= 0x9FB21C651E98DF25ULL; h64 ^= (h64 >> 35) + len ; h64 *= 0x9FB21C651E98DF25ULL; return XXH_xorshift64(h64, 28); } /* ========================================== * Short keys * ========================================== * One of the shortcomings of XXH32 and XXH64 was that their performance was * sub-optimal on short lengths. It used an iterative algorithm which strongly * favored lengths that were a multiple of 4 or 8. * * Instead of iterating over individual inputs, we use a set of single shot * functions which piece together a range of lengths and operate in constant time. * * Additionally, the number of multiplies has been significantly reduced. This * reduces latency, especially when emulating 64-bit multiplies on 32-bit. * * Depending on the platform, this may or may not be faster than XXH32, but it * is almost guaranteed to be faster than XXH64. */ /* * At very short lengths, there isn't enough input to fully hide secrets, or use * the entire secret. * * There is also only a limited amount of mixing we can do before significantly * impacting performance. * * Therefore, we use different sections of the secret and always mix two secret * samples with an XOR. This should have no effect on performance on the * seedless or withSeed variants because everything _should_ be constant folded * by modern compilers. * * The XOR mixing hides individual parts of the secret and increases entropy. * * This adds an extra layer of strength for custom secrets. */ XXH_FORCE_INLINE XXH64_hash_t XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(input != NULL); XXH_ASSERT(1 <= len && len <= 3); XXH_ASSERT(secret != NULL); /* * len = 1: combined = { input[0], 0x01, input[0], input[0] } * len = 2: combined = { input[1], 0x02, input[0], input[1] } * len = 3: combined = { input[2], 0x03, input[0], input[1] } */ { xxh_u8 const c1 = input[0]; xxh_u8 const c2 = input[len >> 1]; xxh_u8 const c3 = input[len - 1]; xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed; xxh_u64 const keyed = (xxh_u64)combined ^ bitflip; return XXH64_avalanche(keyed); } } XXH_FORCE_INLINE XXH64_hash_t XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(input != NULL); XXH_ASSERT(secret != NULL); XXH_ASSERT(4 <= len && len < 8); seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; { xxh_u32 const input1 = XXH_readLE32(input); xxh_u32 const input2 = XXH_readLE32(input + len - 4); xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed; xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32); xxh_u64 const keyed = input64 ^ bitflip; return XXH3_rrmxmx(keyed, len); } } XXH_FORCE_INLINE XXH64_hash_t XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(input != NULL); XXH_ASSERT(secret != NULL); XXH_ASSERT(8 <= len && len <= 16); { xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed; xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed; xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1; xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2; xxh_u64 const acc = len + XXH_swap64(input_lo) + input_hi + XXH3_mul128_fold64(input_lo, input_hi); return XXH3_avalanche(acc); } } XXH_FORCE_INLINE XXH64_hash_t XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(len <= 16); { if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed); if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed); if (len) return XXH3_len_1to3_64b(input, len, secret, seed); return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64))); } } /* * DISCLAIMER: There are known *seed-dependent* multicollisions here due to * multiplication by zero, affecting hashes of lengths 17 to 240. * * However, they are very unlikely. * * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all * unseeded non-cryptographic hashes, it does not attempt to defend itself * against specially crafted inputs, only random inputs. * * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes * cancelling out the secret is taken an arbitrary number of times (addressed * in XXH3_accumulate_512), this collision is very unlikely with random inputs * and/or proper seeding: * * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a * function that is only called up to 16 times per hash with up to 240 bytes of * input. * * This is not too bad for a non-cryptographic hash function, especially with * only 64 bit outputs. * * The 128-bit variant (which trades some speed for strength) is NOT affected * by this, although it is always a good idea to use a proper seed if you care * about strength. */ XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input, const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64) { #if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */ /* * UGLY HACK: * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in * slower code. * * By forcing seed64 into a register, we disrupt the cost model and * cause it to scalarize. See `XXH32_round()` * * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600, * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on * GCC 9.2, despite both emitting scalar code. * * GCC generates much better scalar code than Clang for the rest of XXH3, * which is why finding a more optimal codepath is an interest. */ __asm__ ("" : "+r" (seed64)); #endif { xxh_u64 const input_lo = XXH_readLE64(input); xxh_u64 const input_hi = XXH_readLE64(input+8); return XXH3_mul128_fold64( input_lo ^ (XXH_readLE64(secret) + seed64), input_hi ^ (XXH_readLE64(secret+8) - seed64) ); } } /* For mid range keys, XXH3 uses a Mum-hash variant. */ XXH_FORCE_INLINE XXH64_hash_t XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH64_hash_t seed) { XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; XXH_ASSERT(16 < len && len <= 128); { xxh_u64 acc = len * XXH_PRIME64_1; if (len > 32) { if (len > 64) { if (len > 96) { acc += XXH3_mix16B(input+48, secret+96, seed); acc += XXH3_mix16B(input+len-64, secret+112, seed); } acc += XXH3_mix16B(input+32, secret+64, seed); acc += XXH3_mix16B(input+len-48, secret+80, seed); } acc += XXH3_mix16B(input+16, secret+32, seed); acc += XXH3_mix16B(input+len-32, secret+48, seed); } acc += XXH3_mix16B(input+0, secret+0, seed); acc += XXH3_mix16B(input+len-16, secret+16, seed); return XXH3_avalanche(acc); } } #define XXH3_MIDSIZE_MAX 240 XXH_NO_INLINE XXH64_hash_t XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH64_hash_t seed) { XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); #define XXH3_MIDSIZE_STARTOFFSET 3 #define XXH3_MIDSIZE_LASTOFFSET 17 { xxh_u64 acc = len * XXH_PRIME64_1; int const nbRounds = (int)len / 16; int i; for (i=0; i<8; i++) { acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed); } acc = XXH3_avalanche(acc); XXH_ASSERT(nbRounds >= 8); #if defined(__clang__) /* Clang */ \ && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ /* * UGLY HACK: * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86. * In everywhere else, it uses scalar code. * * For 64->128-bit multiplies, even if the NEON was 100% optimal, it * would still be slower than UMAAL (see XXH_mult64to128). * * Unfortunately, Clang doesn't handle the long multiplies properly and * converts them to the nonexistent "vmulq_u64" intrinsic, which is then * scalarized into an ugly mess of VMOV.32 instructions. * * This mess is difficult to avoid without turning autovectorization * off completely, but they are usually relatively minor and/or not * worth it to fix. * * This loop is the easiest to fix, as unlike XXH32, this pragma * _actually works_ because it is a loop vectorization instead of an * SLP vectorization. */ #pragma clang loop vectorize(disable) #endif for (i=8 ; i < nbRounds; i++) { acc += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed); } /* last bytes */ acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed); return XXH3_avalanche(acc); } } /* ======= Long Keys ======= */ #define XXH_STRIPE_LEN 64 #define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */ #define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64)) #ifdef XXH_OLD_NAMES # define STRIPE_LEN XXH_STRIPE_LEN # define ACC_NB XXH_ACC_NB #endif XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64) { if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64); memcpy(dst, &v64, sizeof(v64)); } /* Several intrinsic functions below are supposed to accept __int64 as argument, * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ . * However, several environments do not define __int64 type, * requiring a workaround. */ #if !defined (__VMS) \ && (defined (__cplusplus) \ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) typedef int64_t xxh_i64; #else /* the following type must have a width of 64-bit */ typedef long long xxh_i64; #endif /* * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized. * * It is a hardened version of UMAC, based off of FARSH's implementation. * * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD * implementations, and it is ridiculously fast. * * We harden it by mixing the original input to the accumulators as well as the product. * * This means that in the (relatively likely) case of a multiply by zero, the * original input is preserved. * * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve * cross-pollination, as otherwise the upper and lower halves would be * essentially independent. * * This doesn't matter on 64-bit hashes since they all get merged together in * the end, so we skip the extra step. * * Both XXH3_64bits and XXH3_128bits use this subroutine. */ #if (XXH_VECTOR == XXH_AVX512) || defined(XXH_X86DISPATCH) #ifndef XXH_TARGET_AVX512 # define XXH_TARGET_AVX512 /* disable attribute target */ #endif XXH_FORCE_INLINE XXH_TARGET_AVX512 void XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret) { XXH_ALIGN(64) __m512i* const xacc = (__m512i *) acc; XXH_ASSERT((((size_t)acc) & 63) == 0); XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); { /* data_vec = input[0]; */ __m512i const data_vec = _mm512_loadu_si512 (input); /* key_vec = secret[0]; */ __m512i const key_vec = _mm512_loadu_si512 (secret); /* data_key = data_vec ^ key_vec; */ __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec); /* data_key_lo = data_key >> 32; */ __m512i const data_key_lo = _mm512_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ __m512i const product = _mm512_mul_epu32 (data_key, data_key_lo); /* xacc[0] += swap(data_vec); */ __m512i const data_swap = _mm512_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2)); __m512i const sum = _mm512_add_epi64(*xacc, data_swap); /* xacc[0] += product; */ *xacc = _mm512_add_epi64(product, sum); } } /* * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing. * * Multiplication isn't perfect, as explained by Google in HighwayHash: * * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to * // varying degrees. In descending order of goodness, bytes * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32. * // As expected, the upper and lower bytes are much worse. * * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291 * * Since our algorithm uses a pseudorandom secret to add some variance into the * mix, we don't need to (or want to) mix as often or as much as HighwayHash does. * * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid * extraction. * * Both XXH3_64bits and XXH3_128bits use this subroutine. */ XXH_FORCE_INLINE XXH_TARGET_AVX512 void XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 63) == 0); XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); { XXH_ALIGN(64) __m512i* const xacc = (__m512i*) acc; const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1); /* xacc[0] ^= (xacc[0] >> 47) */ __m512i const acc_vec = *xacc; __m512i const shifted = _mm512_srli_epi64 (acc_vec, 47); __m512i const data_vec = _mm512_xor_si512 (acc_vec, shifted); /* xacc[0] ^= secret; */ __m512i const key_vec = _mm512_loadu_si512 (secret); __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec); /* xacc[0] *= XXH_PRIME32_1; */ __m512i const data_key_hi = _mm512_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); __m512i const prod_lo = _mm512_mul_epu32 (data_key, prime32); __m512i const prod_hi = _mm512_mul_epu32 (data_key_hi, prime32); *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32)); } } XXH_FORCE_INLINE XXH_TARGET_AVX512 void XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0); XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64); XXH_ASSERT(((size_t)customSecret & 63) == 0); (void)(&XXH_writeLE64); { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i); __m512i const seed = _mm512_mask_set1_epi64(_mm512_set1_epi64((xxh_i64)seed64), 0xAA, -(xxh_i64)seed64); XXH_ALIGN(64) const __m512i* const src = (const __m512i*) XXH3_kSecret; XXH_ALIGN(64) __m512i* const dest = ( __m512i*) customSecret; int i; for (i=0; i < nbRounds; ++i) { // GCC has a bug, _mm512_stream_load_si512 accepts 'void*', not 'void const*', // this will warn "discards ‘const’ qualifier". union { XXH_ALIGN(64) const __m512i* const cp; XXH_ALIGN(64) void* const p; } const remote_const_void = { .cp = src + i }; dest[i] = _mm512_add_epi64(_mm512_stream_load_si512(remote_const_void.p), seed); } } } #endif #if (XXH_VECTOR == XXH_AVX2) || defined(XXH_X86DISPATCH) #ifndef XXH_TARGET_AVX2 # define XXH_TARGET_AVX2 /* disable attribute target */ #endif XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_accumulate_512_avx2( void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 31) == 0); { XXH_ALIGN(32) __m256i* const xacc = (__m256i *) acc; /* Unaligned. This is mainly for pointer arithmetic, and because * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ const __m256i* const xinput = (const __m256i *) input; /* Unaligned. This is mainly for pointer arithmetic, and because * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ const __m256i* const xsecret = (const __m256i *) secret; size_t i; for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) { /* data_vec = xinput[i]; */ __m256i const data_vec = _mm256_loadu_si256 (xinput+i); /* key_vec = xsecret[i]; */ __m256i const key_vec = _mm256_loadu_si256 (xsecret+i); /* data_key = data_vec ^ key_vec; */ __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec); /* data_key_lo = data_key >> 32; */ __m256i const data_key_lo = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ __m256i const product = _mm256_mul_epu32 (data_key, data_key_lo); /* xacc[i] += swap(data_vec); */ __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2)); __m256i const sum = _mm256_add_epi64(xacc[i], data_swap); /* xacc[i] += product; */ xacc[i] = _mm256_add_epi64(product, sum); } } } XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 31) == 0); { XXH_ALIGN(32) __m256i* const xacc = (__m256i*) acc; /* Unaligned. This is mainly for pointer arithmetic, and because * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ const __m256i* const xsecret = (const __m256i *) secret; const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1); size_t i; for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) { /* xacc[i] ^= (xacc[i] >> 47) */ __m256i const acc_vec = xacc[i]; __m256i const shifted = _mm256_srli_epi64 (acc_vec, 47); __m256i const data_vec = _mm256_xor_si256 (acc_vec, shifted); /* xacc[i] ^= xsecret; */ __m256i const key_vec = _mm256_loadu_si256 (xsecret+i); __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec); /* xacc[i] *= XXH_PRIME32_1; */ __m256i const data_key_hi = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); __m256i const prod_lo = _mm256_mul_epu32 (data_key, prime32); __m256i const prod_hi = _mm256_mul_epu32 (data_key_hi, prime32); xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32)); } } } XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0); XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6); XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64); (void)(&XXH_writeLE64); XXH_PREFETCH(customSecret); { __m256i const seed = _mm256_set_epi64x(-(xxh_i64)seed64, (xxh_i64)seed64, -(xxh_i64)seed64, (xxh_i64)seed64); XXH_ALIGN(64) const __m256i* const src = (const __m256i*) XXH3_kSecret; XXH_ALIGN(64) __m256i* dest = ( __m256i*) customSecret; # if defined(__GNUC__) || defined(__clang__) /* * On GCC & Clang, marking 'dest' as modified will cause the compiler: * - do not extract the secret from sse registers in the internal loop * - use less common registers, and avoid pushing these reg into stack * The asm hack causes Clang to assume that XXH3_kSecretPtr aliases with * customSecret, and on aarch64, this prevented LDP from merging two * loads together for free. Putting the loads together before the stores * properly generates LDP. */ __asm__("" : "+r" (dest)); # endif /* GCC -O2 need unroll loop manually */ dest[0] = _mm256_add_epi64(_mm256_stream_load_si256(src+0), seed); dest[1] = _mm256_add_epi64(_mm256_stream_load_si256(src+1), seed); dest[2] = _mm256_add_epi64(_mm256_stream_load_si256(src+2), seed); dest[3] = _mm256_add_epi64(_mm256_stream_load_si256(src+3), seed); dest[4] = _mm256_add_epi64(_mm256_stream_load_si256(src+4), seed); dest[5] = _mm256_add_epi64(_mm256_stream_load_si256(src+5), seed); } } #endif #if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH) #ifndef XXH_TARGET_SSE2 # define XXH_TARGET_SSE2 /* disable attribute target */ #endif XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret) { /* SSE2 is just a half-scale version of the AVX2 version. */ XXH_ASSERT((((size_t)acc) & 15) == 0); { XXH_ALIGN(16) __m128i* const xacc = (__m128i *) acc; /* Unaligned. This is mainly for pointer arithmetic, and because * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ const __m128i* const xinput = (const __m128i *) input; /* Unaligned. This is mainly for pointer arithmetic, and because * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ const __m128i* const xsecret = (const __m128i *) secret; size_t i; for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) { /* data_vec = xinput[i]; */ __m128i const data_vec = _mm_loadu_si128 (xinput+i); /* key_vec = xsecret[i]; */ __m128i const key_vec = _mm_loadu_si128 (xsecret+i); /* data_key = data_vec ^ key_vec; */ __m128i const data_key = _mm_xor_si128 (data_vec, key_vec); /* data_key_lo = data_key >> 32; */ __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ __m128i const product = _mm_mul_epu32 (data_key, data_key_lo); /* xacc[i] += swap(data_vec); */ __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2)); __m128i const sum = _mm_add_epi64(xacc[i], data_swap); /* xacc[i] += product; */ xacc[i] = _mm_add_epi64(product, sum); } } } XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 15) == 0); { XXH_ALIGN(16) __m128i* const xacc = (__m128i*) acc; /* Unaligned. This is mainly for pointer arithmetic, and because * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ const __m128i* const xsecret = (const __m128i *) secret; const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1); size_t i; for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) { /* xacc[i] ^= (xacc[i] >> 47) */ __m128i const acc_vec = xacc[i]; __m128i const shifted = _mm_srli_epi64 (acc_vec, 47); __m128i const data_vec = _mm_xor_si128 (acc_vec, shifted); /* xacc[i] ^= xsecret[i]; */ __m128i const key_vec = _mm_loadu_si128 (xsecret+i); __m128i const data_key = _mm_xor_si128 (data_vec, key_vec); /* xacc[i] *= XXH_PRIME32_1; */ __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); __m128i const prod_lo = _mm_mul_epu32 (data_key, prime32); __m128i const prod_hi = _mm_mul_epu32 (data_key_hi, prime32); xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32)); } } } XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); (void)(&XXH_writeLE64); { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i); # if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900 // MSVC 32bit mode does not support _mm_set_epi64x before 2015 XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, -(xxh_i64)seed64 }; __m128i const seed = _mm_load_si128((__m128i const*)seed64x2); # else __m128i const seed = _mm_set_epi64x(-(xxh_i64)seed64, (xxh_i64)seed64); # endif int i; XXH_ALIGN(64) const float* const src = (float const*) XXH3_kSecret; XXH_ALIGN(XXH_SEC_ALIGN) __m128i* dest = (__m128i*) customSecret; # if defined(__GNUC__) || defined(__clang__) /* * On GCC & Clang, marking 'dest' as modified will cause the compiler: * - do not extract the secret from sse registers in the internal loop * - use less common registers, and avoid pushing these reg into stack */ __asm__("" : "+r" (dest)); # endif for (i=0; i < nbRounds; ++i) { dest[i] = _mm_add_epi64(_mm_castps_si128(_mm_load_ps(src+i*4)), seed); } } } #endif #if (XXH_VECTOR == XXH_NEON) XXH_FORCE_INLINE void XXH3_accumulate_512_neon( void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 15) == 0); { XXH_ALIGN(16) uint64x2_t* const xacc = (uint64x2_t *) acc; /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */ uint8_t const* const xinput = (const uint8_t *) input; uint8_t const* const xsecret = (const uint8_t *) secret; size_t i; for (i=0; i < XXH_STRIPE_LEN / sizeof(uint64x2_t); i++) { /* data_vec = xinput[i]; */ uint8x16_t data_vec = vld1q_u8(xinput + (i * 16)); /* key_vec = xsecret[i]; */ uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16)); uint64x2_t data_key; uint32x2_t data_key_lo, data_key_hi; /* xacc[i] += swap(data_vec); */ uint64x2_t const data64 = vreinterpretq_u64_u8(data_vec); uint64x2_t const swapped = vextq_u64(data64, data64, 1); xacc[i] = vaddq_u64 (xacc[i], swapped); /* data_key = data_vec ^ key_vec; */ data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec)); /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF); * data_key_hi = (uint32x2_t) (data_key >> 32); * data_key = UNDEFINED; */ XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi); /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */ xacc[i] = vmlal_u32 (xacc[i], data_key_lo, data_key_hi); } } } XXH_FORCE_INLINE void XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 15) == 0); { uint64x2_t* xacc = (uint64x2_t*) acc; uint8_t const* xsecret = (uint8_t const*) secret; uint32x2_t prime = vdup_n_u32 (XXH_PRIME32_1); size_t i; for (i=0; i < XXH_STRIPE_LEN/sizeof(uint64x2_t); i++) { /* xacc[i] ^= (xacc[i] >> 47); */ uint64x2_t acc_vec = xacc[i]; uint64x2_t shifted = vshrq_n_u64 (acc_vec, 47); uint64x2_t data_vec = veorq_u64 (acc_vec, shifted); /* xacc[i] ^= xsecret[i]; */ uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16)); uint64x2_t data_key = veorq_u64(data_vec, vreinterpretq_u64_u8(key_vec)); /* xacc[i] *= XXH_PRIME32_1 */ uint32x2_t data_key_lo, data_key_hi; /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF); * data_key_hi = (uint32x2_t) (xacc[i] >> 32); * xacc[i] = UNDEFINED; */ XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi); { /* * prod_hi = (data_key >> 32) * XXH_PRIME32_1; * * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will * incorrectly "optimize" this: * tmp = vmul_u32(vmovn_u64(a), vmovn_u64(b)); * shifted = vshll_n_u32(tmp, 32); * to this: * tmp = "vmulq_u64"(a, b); // no such thing! * shifted = vshlq_n_u64(tmp, 32); * * However, unlike SSE, Clang lacks a 64-bit multiply routine * for NEON, and it scalarizes two 64-bit multiplies instead. * * vmull_u32 has the same timing as vmul_u32, and it avoids * this bug completely. * See https://bugs.llvm.org/show_bug.cgi?id=39967 */ uint64x2_t prod_hi = vmull_u32 (data_key_hi, prime); /* xacc[i] = prod_hi << 32; */ xacc[i] = vshlq_n_u64(prod_hi, 32); /* xacc[i] += (prod_hi & 0xFFFFFFFF) * XXH_PRIME32_1; */ xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime); } } } } #endif #if (XXH_VECTOR == XXH_VSX) XXH_FORCE_INLINE void XXH3_accumulate_512_vsx( void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret) { xxh_u64x2* const xacc = (xxh_u64x2*) acc; /* presumed aligned */ xxh_u64x2 const* const xinput = (xxh_u64x2 const*) input; /* no alignment restriction */ xxh_u64x2 const* const xsecret = (xxh_u64x2 const*) secret; /* no alignment restriction */ xxh_u64x2 const v32 = { 32, 32 }; size_t i; for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { /* data_vec = xinput[i]; */ xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i); /* key_vec = xsecret[i]; */ xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i); xxh_u64x2 const data_key = data_vec ^ key_vec; /* shuffled = (data_key << 32) | (data_key >> 32); */ xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32); /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */ xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled); xacc[i] += product; /* swap high and low halves */ #ifdef __s390x__ xxh_u64x2 const data_swapped = vec_permi(data_vec, data_vec, 2); #else xxh_u64x2 const data_swapped = vec_xxpermdi(data_vec, data_vec, 2); #endif xacc[i] += data_swapped; } } XXH_FORCE_INLINE void XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { XXH_ASSERT((((size_t)acc) & 15) == 0); { xxh_u64x2* const xacc = (xxh_u64x2*) acc; const xxh_u64x2* const xsecret = (const xxh_u64x2*) secret; /* constants */ xxh_u64x2 const v32 = { 32, 32 }; xxh_u64x2 const v47 = { 47, 47 }; xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 }; size_t i; for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { /* xacc[i] ^= (xacc[i] >> 47); */ xxh_u64x2 const acc_vec = xacc[i]; xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47); /* xacc[i] ^= xsecret[i]; */ xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i); xxh_u64x2 const data_key = data_vec ^ key_vec; /* xacc[i] *= XXH_PRIME32_1 */ /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */ xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime); /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */ xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime); xacc[i] = prod_odd + (prod_even << v32); } } } #endif /* scalar variants - universal */ XXH_FORCE_INLINE void XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret) { XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */ const xxh_u8* const xinput = (const xxh_u8*) input; /* no alignment restriction */ const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */ size_t i; XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0); for (i=0; i < XXH_ACC_NB; i++) { xxh_u64 const data_val = XXH_readLE64(xinput + 8*i); xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i*8); xacc[i ^ 1] += data_val; /* swap adjacent lanes */ xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32); } } XXH_FORCE_INLINE void XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */ const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */ size_t i; XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0); for (i=0; i < XXH_ACC_NB; i++) { xxh_u64 const key64 = XXH_readLE64(xsecret + 8*i); xxh_u64 acc64 = xacc[i]; acc64 = XXH_xorshift64(acc64, 47); acc64 ^= key64; acc64 *= XXH_PRIME32_1; xacc[i] = acc64; } } XXH_FORCE_INLINE void XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { /* * We need a separate pointer for the hack below, * which requires a non-const pointer. * Any decent compiler will optimize this out otherwise. */ const xxh_u8* kSecretPtr = XXH3_kSecret; XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); #if defined(__clang__) && defined(__aarch64__) /* * UGLY HACK: * Clang generates a bunch of MOV/MOVK pairs for aarch64, and they are * placed sequentially, in order, at the top of the unrolled loop. * * While MOVK is great for generating constants (2 cycles for a 64-bit * constant compared to 4 cycles for LDR), long MOVK chains stall the * integer pipelines: * I L S * MOVK * MOVK * MOVK * MOVK * ADD * SUB STR * STR * By forcing loads from memory (as the asm line causes Clang to assume * that XXH3_kSecretPtr has been changed), the pipelines are used more * efficiently: * I L S * LDR * ADD LDR * SUB STR * STR * XXH3_64bits_withSeed, len == 256, Snapdragon 835 * without hack: 2654.4 MB/s * with hack: 3202.9 MB/s */ __asm__("" : "+r" (kSecretPtr)); #endif /* * Note: in debug mode, this overrides the asm optimization * and Clang will emit MOVK chains again. */ XXH_ASSERT(kSecretPtr == XXH3_kSecret); { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16; int i; for (i=0; i < nbRounds; i++) { /* * The asm hack causes Clang to assume that kSecretPtr aliases with * customSecret, and on aarch64, this prevented LDP from merging two * loads together for free. Putting the loads together before the stores * properly generates LDP. */ xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i) + seed64; xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64; XXH_writeLE64((xxh_u8*)customSecret + 16*i, lo); XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi); } } } typedef void (*XXH3_f_accumulate_512)(void* XXH_RESTRICT, const void*, const void*); typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*); typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64); #if (XXH_VECTOR == XXH_AVX512) #define XXH3_accumulate_512 XXH3_accumulate_512_avx512 #define XXH3_scrambleAcc XXH3_scrambleAcc_avx512 #define XXH3_initCustomSecret XXH3_initCustomSecret_avx512 #elif (XXH_VECTOR == XXH_AVX2) #define XXH3_accumulate_512 XXH3_accumulate_512_avx2 #define XXH3_scrambleAcc XXH3_scrambleAcc_avx2 #define XXH3_initCustomSecret XXH3_initCustomSecret_avx2 #elif (XXH_VECTOR == XXH_SSE2) #define XXH3_accumulate_512 XXH3_accumulate_512_sse2 #define XXH3_scrambleAcc XXH3_scrambleAcc_sse2 #define XXH3_initCustomSecret XXH3_initCustomSecret_sse2 #elif (XXH_VECTOR == XXH_NEON) #define XXH3_accumulate_512 XXH3_accumulate_512_neon #define XXH3_scrambleAcc XXH3_scrambleAcc_neon #define XXH3_initCustomSecret XXH3_initCustomSecret_scalar #elif (XXH_VECTOR == XXH_VSX) #define XXH3_accumulate_512 XXH3_accumulate_512_vsx #define XXH3_scrambleAcc XXH3_scrambleAcc_vsx #define XXH3_initCustomSecret XXH3_initCustomSecret_scalar #else /* scalar */ #define XXH3_accumulate_512 XXH3_accumulate_512_scalar #define XXH3_scrambleAcc XXH3_scrambleAcc_scalar #define XXH3_initCustomSecret XXH3_initCustomSecret_scalar #endif #ifndef XXH_PREFETCH_DIST # ifdef __clang__ # define XXH_PREFETCH_DIST 320 # else # if (XXH_VECTOR == XXH_AVX512) # define XXH_PREFETCH_DIST 512 # else # define XXH_PREFETCH_DIST 384 # endif # endif /* __clang__ */ #endif /* XXH_PREFETCH_DIST */ /* * XXH3_accumulate() * Loops over XXH3_accumulate_512(). * Assumption: nbStripes will not overflow the secret size */ XXH_FORCE_INLINE void XXH3_accumulate( xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT input, const xxh_u8* XXH_RESTRICT secret, size_t nbStripes, XXH3_f_accumulate_512 f_acc512) { size_t n; for (n = 0; n < nbStripes; n++ ) { const xxh_u8* const in = input + n*XXH_STRIPE_LEN; XXH_PREFETCH(in + XXH_PREFETCH_DIST); f_acc512(acc, in, secret + n*XXH_SECRET_CONSUME_RATE); } } XXH_FORCE_INLINE void XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE; size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock; size_t const nb_blocks = (len - 1) / block_len; size_t n; XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); for (n = 0; n < nb_blocks; n++) { XXH3_accumulate(acc, input + n*block_len, secret, nbStripesPerBlock, f_acc512); f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN); } /* last partial block */ XXH_ASSERT(len > XXH_STRIPE_LEN); { size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN; XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE)); XXH3_accumulate(acc, input + nb_blocks*block_len, secret, nbStripes, f_acc512); /* last stripe */ { const xxh_u8* const p = input + len - XXH_STRIPE_LEN; #define XXH_SECRET_LASTACC_START 7 /* not aligned on 8, last secret is different from acc & scrambler */ f_acc512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START); } } } XXH_FORCE_INLINE xxh_u64 XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret) { return XXH3_mul128_fold64( acc[0] ^ XXH_readLE64(secret), acc[1] ^ XXH_readLE64(secret+8) ); } static XXH64_hash_t XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start) { xxh_u64 result64 = start; size_t i = 0; for (i = 0; i < 4; i++) { result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i); #if defined(__clang__) /* Clang */ \ && (defined(__arm__) || defined(__thumb__)) /* ARMv7 */ \ && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ /* * UGLY HACK: * Prevent autovectorization on Clang ARMv7-a. Exact same problem as * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b. * XXH3_64bits, len == 256, Snapdragon 835: * without hack: 2063.7 MB/s * with hack: 2560.7 MB/s */ __asm__("" : "+r" (result64)); #endif } return XXH3_avalanche(result64); } #define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \ XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 } XXH_FORCE_INLINE XXH64_hash_t XXH3_hashLong_64b_internal(const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; XXH3_hashLong_internal_loop(acc, input, len, secret, secretSize, f_acc512, f_scramble); /* converge into final hash */ XXH_STATIC_ASSERT(sizeof(acc) == 64); /* do not align on 8, so that the secret is different from the accumulator */ #define XXH_SECRET_MERGEACCS_START 11 XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1); } /* * It's important for performance that XXH3_hashLong is not inlined. */ XXH_NO_INLINE XXH64_hash_t XXH3_hashLong_64b_withSecret(const xxh_u8* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { (void)seed64; return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc); } /* * It's important for performance that XXH3_hashLong is not inlined. * Since the function is not inlined, the compiler may not be able to understand that, * in some scenarios, its `secret` argument is actually a compile time constant. * This variant enforces that the compiler can detect that, * and uses this opportunity to streamline the generated code for better performance. */ XXH_NO_INLINE XXH64_hash_t XXH3_hashLong_64b_default(const xxh_u8* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { (void)seed64; (void)secret; (void)secretLen; return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc); } /* * XXH3_hashLong_64b_withSeed(): * Generate a custom key based on alteration of default XXH3_kSecret with the seed, * and then use this key for long mode hashing. * * This operation is decently fast but nonetheless costs a little bit of time. * Try to avoid it whenever possible (typically when seed==0). * * It's important for performance that XXH3_hashLong is not inlined. Not sure * why (uop cache maybe?), but the difference is large and easily measurable. */ XXH_FORCE_INLINE XXH64_hash_t XXH3_hashLong_64b_withSeed_internal(const xxh_u8* input, size_t len, XXH64_hash_t seed, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble, XXH3_f_initCustomSecret f_initSec) { if (seed == 0) return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), f_acc512, f_scramble); { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; f_initSec(secret, seed); return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret), f_acc512, f_scramble); } } /* * It's important for performance that XXH3_hashLong is not inlined. */ XXH_NO_INLINE XXH64_hash_t XXH3_hashLong_64b_withSeed(const xxh_u8* input, size_t len, XXH64_hash_t seed, const xxh_u8* secret, size_t secretLen) { (void)secret; (void)secretLen; return XXH3_hashLong_64b_withSeed_internal(input, len, seed, XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret); } typedef XXH64_hash_t (*XXH3_hashLong64_f)(const xxh_u8* XXH_RESTRICT, size_t, XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t); XXH_FORCE_INLINE XXH64_hash_t XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen, XXH3_hashLong64_f f_hashLong) { XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); /* * If an action is to be taken if `secretLen` condition is not respected, * it should be done here. * For now, it's a contract pre-condition. * Adding a check and a branch here would cost performance at every hash. * Also, note that function signature doesn't offer room to return an error. */ if (len <= 16) return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); if (len <= 128) return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); return f_hashLong((const xxh_u8*)input, len, seed64, (const xxh_u8*)secret, secretLen); } /* === Public entry point === */ XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len) { return XXH3_64bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default); } XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize) { return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret); } XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed) { return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed); } /* === XXH3 streaming === */ /* * Malloc's a pointer that is always aligned to align. * * This must be freed with `XXH_alignedFree()`. * * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2 * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON. * * This underalignment previously caused a rather obvious crash which went * completely unnoticed due to XXH3_createState() not actually being tested. * Credit to RedSpah for noticing this bug. * * The alignment is done manually: Functions like posix_memalign or _mm_malloc * are avoided: To maintain portability, we would have to write a fallback * like this anyways, and besides, testing for the existence of library * functions without relying on external build tools is impossible. * * The method is simple: Overallocate, manually align, and store the offset * to the original behind the returned pointer. * * Align must be a power of 2 and 8 <= align <= 128. */ static void* XXH_alignedMalloc(size_t s, size_t align) { XXH_ASSERT(align <= 128 && align >= 8); /* range check */ XXH_ASSERT((align & (align-1)) == 0); /* power of 2 */ XXH_ASSERT(s != 0 && s < (s + align)); /* empty/overflow */ { /* Overallocate to make room for manual realignment and an offset byte */ xxh_u8* base = (xxh_u8*)XXH_malloc(s + align); if (base != NULL) { /* * Get the offset needed to align this pointer. * * Even if the returned pointer is aligned, there will always be * at least one byte to store the offset to the original pointer. */ size_t offset = align - ((size_t)base & (align - 1)); /* base % align */ /* Add the offset for the now-aligned pointer */ xxh_u8* ptr = base + offset; XXH_ASSERT((size_t)ptr % align == 0); /* Store the offset immediately before the returned pointer. */ ptr[-1] = (xxh_u8)offset; return ptr; } return NULL; } } /* * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout. */ static void XXH_alignedFree(void* p) { if (p != NULL) { xxh_u8* ptr = (xxh_u8*)p; /* Get the offset byte we added in XXH_malloc. */ xxh_u8 offset = ptr[-1]; /* Free the original malloc'd pointer */ xxh_u8* base = ptr - offset; XXH_free(base); } } XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void) { return (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64); } XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr) { XXH_alignedFree(statePtr); return XXH_OK; } XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state) { memcpy(dst_state, src_state, sizeof(*dst_state)); } static void XXH3_64bits_reset_internal(XXH3_state_t* statePtr, XXH64_hash_t seed, const xxh_u8* secret, size_t secretSize) { XXH_ASSERT(statePtr != NULL); memset(statePtr, 0, sizeof(*statePtr)); statePtr->acc[0] = XXH_PRIME32_3; statePtr->acc[1] = XXH_PRIME64_1; statePtr->acc[2] = XXH_PRIME64_2; statePtr->acc[3] = XXH_PRIME64_3; statePtr->acc[4] = XXH_PRIME64_4; statePtr->acc[5] = XXH_PRIME32_2; statePtr->acc[6] = XXH_PRIME64_5; statePtr->acc[7] = XXH_PRIME32_1; statePtr->seed = seed; XXH_ASSERT(secret != NULL); statePtr->extSecret = secret; XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); statePtr->secretLimit = secretSize - XXH_STRIPE_LEN; statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE; } XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr) { if (statePtr == NULL) return XXH_ERROR; XXH3_64bits_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize) { if (statePtr == NULL) return XXH_ERROR; XXH3_64bits_reset_internal(statePtr, 0, (const xxh_u8*)secret, secretSize); if (secret == NULL) return XXH_ERROR; if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed) { if (statePtr == NULL) return XXH_ERROR; XXH3_64bits_reset_internal(statePtr, seed, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); XXH3_initCustomSecret(statePtr->customSecret, seed); statePtr->extSecret = NULL; return XXH_OK; } /* Note : when XXH3_consumeStripes() is invoked, * there must be a guarantee that at least one more byte must be consumed from input * so that the function can blindly consume all stripes using the "normal" secret segment */ XXH_FORCE_INLINE void XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc, size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock, const xxh_u8* XXH_RESTRICT input, size_t nbStripes, const xxh_u8* XXH_RESTRICT secret, size_t secretLimit, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { XXH_ASSERT(nbStripes <= nbStripesPerBlock); /* can handle max 1 scramble per invocation */ XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock); if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) { /* need a scrambling operation */ size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr; size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock; XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripesToEndofBlock, f_acc512); f_scramble(acc, secret + secretLimit); XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, nbStripesAfterBlock, f_acc512); *nbStripesSoFarPtr = nbStripesAfterBlock; } else { XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, f_acc512); *nbStripesSoFarPtr += nbStripes; } } /* * Both XXH3_64bits_update and XXH3_128bits_update use this routine. */ XXH_FORCE_INLINE XXH_errorcode XXH3_update(XXH3_state_t* state, const xxh_u8* input, size_t len, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { if (input==NULL) #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) return XXH_OK; #else return XXH_ERROR; #endif { const xxh_u8* const bEnd = input + len; const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; state->totalLen += len; if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { /* fill in tmp buffer */ XXH_memcpy(state->buffer + state->bufferedSize, input, len); state->bufferedSize += (XXH32_hash_t)len; return XXH_OK; } /* total input is now > XXH3_INTERNALBUFFER_SIZE */ #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN) XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0); /* clean multiple */ /* * Internal buffer is partially filled (always, except at beginning) * Complete it, then consume it. */ if (state->bufferedSize) { size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize; XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize); input += loadSize; XXH3_consumeStripes(state->acc, &state->nbStripesSoFar, state->nbStripesPerBlock, state->buffer, XXH3_INTERNALBUFFER_STRIPES, secret, state->secretLimit, f_acc512, f_scramble); state->bufferedSize = 0; } XXH_ASSERT(input < bEnd); /* Consume input by a multiple of internal buffer size */ if (input+XXH3_INTERNALBUFFER_SIZE < bEnd) { const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE; do { XXH3_consumeStripes(state->acc, &state->nbStripesSoFar, state->nbStripesPerBlock, input, XXH3_INTERNALBUFFER_STRIPES, secret, state->secretLimit, f_acc512, f_scramble); input += XXH3_INTERNALBUFFER_SIZE; } while (inputbuffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN); } XXH_ASSERT(input < bEnd); /* Some remaining input (always) : buffer it */ XXH_memcpy(state->buffer, input, (size_t)(bEnd-input)); state->bufferedSize = (XXH32_hash_t)(bEnd-input); } return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len) { return XXH3_update(state, (const xxh_u8*)input, len, XXH3_accumulate_512, XXH3_scrambleAcc); } XXH_FORCE_INLINE void XXH3_digest_long (XXH64_hash_t* acc, const XXH3_state_t* state, const unsigned char* secret) { /* * Digest on a local copy. This way, the state remains unaltered, and it can * continue ingesting more input afterwards. */ memcpy(acc, state->acc, sizeof(state->acc)); if (state->bufferedSize >= XXH_STRIPE_LEN) { size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN; size_t nbStripesSoFar = state->nbStripesSoFar; XXH3_consumeStripes(acc, &nbStripesSoFar, state->nbStripesPerBlock, state->buffer, nbStripes, secret, state->secretLimit, XXH3_accumulate_512, XXH3_scrambleAcc); /* last stripe */ XXH3_accumulate_512(acc, state->buffer + state->bufferedSize - XXH_STRIPE_LEN, secret + state->secretLimit - XXH_SECRET_LASTACC_START); } else { /* bufferedSize < XXH_STRIPE_LEN */ xxh_u8 lastStripe[XXH_STRIPE_LEN]; size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize; XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */ memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize); memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize); XXH3_accumulate_512(acc, lastStripe, secret + state->secretLimit - XXH_SECRET_LASTACC_START); } } XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state) { const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; if (state->totalLen > XXH3_MIDSIZE_MAX) { XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; XXH3_digest_long(acc, state, secret); return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * XXH_PRIME64_1); } /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */ if (state->seed) return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen), secret, state->secretLimit + XXH_STRIPE_LEN); } #define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x)) XXH_PUBLIC_API void XXH3_generateSecret(void* secretBuffer, const void* customSeed, size_t customSeedSize) { XXH_ASSERT(secretBuffer != NULL); if (customSeedSize == 0) { memcpy(secretBuffer, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); return; } XXH_ASSERT(customSeed != NULL); { size_t const segmentSize = sizeof(XXH128_hash_t); size_t const nbSegments = XXH_SECRET_DEFAULT_SIZE / segmentSize; XXH128_canonical_t scrambler; XXH64_hash_t seeds[12]; size_t segnb; XXH_ASSERT(nbSegments == 12); XXH_ASSERT(segmentSize * nbSegments == XXH_SECRET_DEFAULT_SIZE); /* exact multiple */ XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0)); /* * Copy customSeed to seeds[], truncating or repeating as necessary. */ { size_t toFill = XXH_MIN(customSeedSize, sizeof(seeds)); size_t filled = toFill; memcpy(seeds, customSeed, toFill); while (filled < sizeof(seeds)) { toFill = XXH_MIN(filled, sizeof(seeds) - filled); memcpy((char*)seeds + filled, seeds, toFill); filled += toFill; } } /* generate secret */ memcpy(secretBuffer, &scrambler, sizeof(scrambler)); for (segnb=1; segnb < nbSegments; segnb++) { size_t const segmentStart = segnb * segmentSize; XXH128_canonical_t segment; XXH128_canonicalFromHash(&segment, XXH128(&scrambler, sizeof(scrambler), XXH_readLE64(seeds + segnb) + segnb) ); memcpy((char*)secretBuffer + segmentStart, &segment, sizeof(segment)); } } } /* ========================================== * XXH3 128 bits (a.k.a XXH128) * ========================================== * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant, * even without counting the significantly larger output size. * * For example, extra steps are taken to avoid the seed-dependent collisions * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B). * * This strength naturally comes at the cost of some speed, especially on short * lengths. Note that longer hashes are about as fast as the 64-bit version * due to it using only a slight modification of the 64-bit loop. * * XXH128 is also more oriented towards 64-bit machines. It is still extremely * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64). */ XXH_FORCE_INLINE XXH128_hash_t XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { /* A doubled version of 1to3_64b with different constants. */ XXH_ASSERT(input != NULL); XXH_ASSERT(1 <= len && len <= 3); XXH_ASSERT(secret != NULL); /* * len = 1: combinedl = { input[0], 0x01, input[0], input[0] } * len = 2: combinedl = { input[1], 0x02, input[0], input[1] } * len = 3: combinedl = { input[2], 0x03, input[0], input[1] } */ { xxh_u8 const c1 = input[0]; xxh_u8 const c2 = input[len >> 1]; xxh_u8 const c3 = input[len - 1]; xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24) | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13); xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed; xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed; xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl; xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph; XXH128_hash_t h128; h128.low64 = XXH64_avalanche(keyed_lo); h128.high64 = XXH64_avalanche(keyed_hi); return h128; } } XXH_FORCE_INLINE XXH128_hash_t XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(input != NULL); XXH_ASSERT(secret != NULL); XXH_ASSERT(4 <= len && len <= 8); seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; { xxh_u32 const input_lo = XXH_readLE32(input); xxh_u32 const input_hi = XXH_readLE32(input + len - 4); xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32); xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed; xxh_u64 const keyed = input_64 ^ bitflip; /* Shift len to the left to ensure it is even, this avoids even multiplies. */ XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2)); m128.high64 += (m128.low64 << 1); m128.low64 ^= (m128.high64 >> 3); m128.low64 = XXH_xorshift64(m128.low64, 35); m128.low64 *= 0x9FB21C651E98DF25ULL; m128.low64 = XXH_xorshift64(m128.low64, 28); m128.high64 = XXH3_avalanche(m128.high64); return m128; } } XXH_FORCE_INLINE XXH128_hash_t XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(input != NULL); XXH_ASSERT(secret != NULL); XXH_ASSERT(9 <= len && len <= 16); { xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed; xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed; xxh_u64 const input_lo = XXH_readLE64(input); xxh_u64 input_hi = XXH_readLE64(input + len - 8); XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1); /* * Put len in the middle of m128 to ensure that the length gets mixed to * both the low and high bits in the 128x64 multiply below. */ m128.low64 += (xxh_u64)(len - 1) << 54; input_hi ^= bitfliph; /* * Add the high 32 bits of input_hi to the high 32 bits of m128, then * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to * the high 64 bits of m128. * * The best approach to this operation is different on 32-bit and 64-bit. */ if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */ /* * 32-bit optimized version, which is more readable. * * On 32-bit, it removes an ADC and delays a dependency between the two * halves of m128.high64, but it generates an extra mask on 64-bit. */ m128.high64 += (input_hi & 0xFFFFFFFF00000000) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2); } else { /* * 64-bit optimized (albeit more confusing) version. * * Uses some properties of addition and multiplication to remove the mask: * * Let: * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF) * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000) * c = XXH_PRIME32_2 * * a + (b * c) * Inverse Property: x + y - x == y * a + (b * (1 + c - 1)) * Distributive Property: x * (y + z) == (x * y) + (x * z) * a + (b * 1) + (b * (c - 1)) * Identity Property: x * 1 == x * a + b + (b * (c - 1)) * * Substitute a, b, and c: * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) * * Since input_hi.hi + input_hi.lo == input_hi, we get this: * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) */ m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1); } /* m128 ^= XXH_swap64(m128 >> 64); */ m128.low64 ^= XXH_swap64(m128.high64); { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */ XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2); h128.high64 += m128.high64 * XXH_PRIME64_2; h128.low64 = XXH3_avalanche(h128.low64); h128.high64 = XXH3_avalanche(h128.high64); return h128; } } } /* * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN */ XXH_FORCE_INLINE XXH128_hash_t XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) { XXH_ASSERT(len <= 16); { if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed); if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed); if (len) return XXH3_len_1to3_128b(input, len, secret, seed); { XXH128_hash_t h128; xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72); xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88); h128.low64 = XXH64_avalanche(seed ^ bitflipl); h128.high64 = XXH64_avalanche( seed ^ bitfliph); return h128; } } } /* * A bit slower than XXH3_mix16B, but handles multiply by zero better. */ XXH_FORCE_INLINE XXH128_hash_t XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2, const xxh_u8* secret, XXH64_hash_t seed) { acc.low64 += XXH3_mix16B (input_1, secret+0, seed); acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8); acc.high64 += XXH3_mix16B (input_2, secret+16, seed); acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8); return acc; } XXH_FORCE_INLINE XXH128_hash_t XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH64_hash_t seed) { XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; XXH_ASSERT(16 < len && len <= 128); { XXH128_hash_t acc; acc.low64 = len * XXH_PRIME64_1; acc.high64 = 0; if (len > 32) { if (len > 64) { if (len > 96) { acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed); } acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed); } acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed); } acc = XXH128_mix32B(acc, input, input+len-16, secret, seed); { XXH128_hash_t h128; h128.low64 = acc.low64 + acc.high64; h128.high64 = (acc.low64 * XXH_PRIME64_1) + (acc.high64 * XXH_PRIME64_4) + ((len - seed) * XXH_PRIME64_2); h128.low64 = XXH3_avalanche(h128.low64); h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); return h128; } } } XXH_NO_INLINE XXH128_hash_t XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH64_hash_t seed) { XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); { XXH128_hash_t acc; int const nbRounds = (int)len / 32; int i; acc.low64 = len * XXH_PRIME64_1; acc.high64 = 0; for (i=0; i<4; i++) { acc = XXH128_mix32B(acc, input + (32 * i), input + (32 * i) + 16, secret + (32 * i), seed); } acc.low64 = XXH3_avalanche(acc.low64); acc.high64 = XXH3_avalanche(acc.high64); XXH_ASSERT(nbRounds >= 4); for (i=4 ; i < nbRounds; i++) { acc = XXH128_mix32B(acc, input + (32 * i), input + (32 * i) + 16, secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)), seed); } /* last bytes */ acc = XXH128_mix32B(acc, input + len - 16, input + len - 32, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16, 0ULL - seed); { XXH128_hash_t h128; h128.low64 = acc.low64 + acc.high64; h128.high64 = (acc.low64 * XXH_PRIME64_1) + (acc.high64 * XXH_PRIME64_4) + ((len - seed) * XXH_PRIME64_2); h128.low64 = XXH3_avalanche(h128.low64); h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); return h128; } } } XXH_FORCE_INLINE XXH128_hash_t XXH3_hashLong_128b_internal(const xxh_u8* XXH_RESTRICT input, size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; XXH3_hashLong_internal_loop(acc, input, len, secret, secretSize, f_acc512, f_scramble); /* converge into final hash */ XXH_STATIC_ASSERT(sizeof(acc) == 64); XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); { XXH128_hash_t h128; h128.low64 = XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1); h128.high64 = XXH3_mergeAccs(acc, secret + secretSize - sizeof(acc) - XXH_SECRET_MERGEACCS_START, ~((xxh_u64)len * XXH_PRIME64_2)); return h128; } } /* * It's important for performance that XXH3_hashLong is not inlined. */ XXH_NO_INLINE XXH128_hash_t XXH3_hashLong_128b_default(const xxh_u8* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { (void)seed64; (void)secret; (void)secretLen; return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc); } /* * It's important for performance that XXH3_hashLong is not inlined. */ XXH_NO_INLINE XXH128_hash_t XXH3_hashLong_128b_withSecret(const xxh_u8* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { (void)seed64; return XXH3_hashLong_128b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc); } XXH_FORCE_INLINE XXH128_hash_t XXH3_hashLong_128b_withSeed_internal(const xxh_u8* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble, XXH3_f_initCustomSecret f_initSec) { if (seed64 == 0) return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), f_acc512, f_scramble); { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; f_initSec(secret, seed64); return XXH3_hashLong_128b_internal(input, len, secret, sizeof(secret), f_acc512, f_scramble); } } /* * It's important for performance that XXH3_hashLong is not inlined. */ XXH_NO_INLINE XXH128_hash_t XXH3_hashLong_128b_withSeed(const xxh_u8* input, size_t len, XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { (void)secret; (void)secretLen; return XXH3_hashLong_128b_withSeed_internal(input, len, seed64, XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret); } typedef XXH128_hash_t (*XXH3_hashLong128_f)(const xxh_u8* XXH_RESTRICT, size_t, XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t); XXH_FORCE_INLINE XXH128_hash_t XXH3_128bits_internal(const void* input, size_t len, XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen, XXH3_hashLong128_f f_hl128) { XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); /* * If an action is to be taken if `secret` conditions are not respected, * it should be done here. * For now, it's a contract pre-condition. * Adding a check and a branch here would cost performance at every hash. */ if (len <= 16) return XXH3_len_0to16_128b((const xxh_u8*)input, len, secret, seed64); if (len <= 128) return XXH3_len_17to128_128b((const xxh_u8*)input, len, secret, secretLen, seed64); if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_128b((const xxh_u8*)input, len, secret, secretLen, seed64); return f_hl128((const xxh_u8*)input, len, seed64, secret, secretLen); } /* === Public XXH128 API === */ XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len) { return XXH3_128bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_128b_default); } XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize) { return XXH3_128bits_internal(input, len, 0, (const xxh_u8*)secret, secretSize, XXH3_hashLong_128b_withSecret); } XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed) { return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_128b_withSeed); } XXH_PUBLIC_API XXH128_hash_t XXH128(const void* input, size_t len, XXH64_hash_t seed) { return XXH3_128bits_withSeed(input, len, seed); } /* === XXH3 128-bit streaming === */ /* * All the functions are actually the same as for 64-bit streaming variant. * The only difference is the finalizatiom routine. */ static void XXH3_128bits_reset_internal(XXH3_state_t* statePtr, XXH64_hash_t seed, const xxh_u8* secret, size_t secretSize) { XXH3_64bits_reset_internal(statePtr, seed, secret, secretSize); } XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr) { if (statePtr == NULL) return XXH_ERROR; XXH3_128bits_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize) { if (statePtr == NULL) return XXH_ERROR; XXH3_128bits_reset_internal(statePtr, 0, (const xxh_u8*)secret, secretSize); if (secret == NULL) return XXH_ERROR; if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed) { if (statePtr == NULL) return XXH_ERROR; XXH3_128bits_reset_internal(statePtr, seed, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); XXH3_initCustomSecret(statePtr->customSecret, seed); statePtr->extSecret = NULL; return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len) { return XXH3_update(state, (const xxh_u8*)input, len, XXH3_accumulate_512, XXH3_scrambleAcc); } XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state) { const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; if (state->totalLen > XXH3_MIDSIZE_MAX) { XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; XXH3_digest_long(acc, state, secret); XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); { XXH128_hash_t h128; h128.low64 = XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * XXH_PRIME64_1); h128.high64 = XXH3_mergeAccs(acc, secret + state->secretLimit + XXH_STRIPE_LEN - sizeof(acc) - XXH_SECRET_MERGEACCS_START, ~((xxh_u64)state->totalLen * XXH_PRIME64_2)); return h128; } } /* len <= XXH3_MIDSIZE_MAX : short code */ if (state->seed) return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen), secret, state->secretLimit + XXH_STRIPE_LEN); } /* 128-bit utility functions */ #include /* memcmp, memcpy */ /* return : 1 is equal, 0 if different */ XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2) { /* note : XXH128_hash_t is compact, it has no padding byte */ return !(memcmp(&h1, &h2, sizeof(h1))); } /* This prototype is compatible with stdlib's qsort(). * return : >0 if *h128_1 > *h128_2 * <0 if *h128_1 < *h128_2 * =0 if *h128_1 == *h128_2 */ XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2) { XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1; XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2; int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64); /* note : bets that, in most cases, hash values are different */ if (hcmp) return hcmp; return (h1.low64 > h2.low64) - (h2.low64 > h1.low64); } /*====== Canonical representation ======*/ XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash) { XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t)); if (XXH_CPU_LITTLE_ENDIAN) { hash.high64 = XXH_swap64(hash.high64); hash.low64 = XXH_swap64(hash.low64); } memcpy(dst, &hash.high64, sizeof(hash.high64)); memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64)); } XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src) { XXH128_hash_t h; h.high64 = XXH_readBE64(src); h.low64 = XXH_readBE64(src->digest + 8); return h; } /* Pop our optimization override from above */ #if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \ && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */ # pragma GCC pop_options #endif #endif /* XXH3_H_1397135465 */ ================================================ FILE: Include/WAVM/Inline/xxhash/xxhash.c ================================================ /* * xxHash - Extremely Fast Hash algorithm * Copyright (C) 2012-2020 Yann Collet * * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * You can contact the author at: * - xxHash homepage: https://www.xxhash.com * - xxHash source repository: https://github.com/Cyan4973/xxHash */ /* * xxhash.c instantiates functions defined in xxhash.h */ #define XXH_STATIC_LINKING_ONLY /* access advanced declarations */ #define XXH_IMPLEMENTATION /* access definitions */ #include "xxhash.h" ================================================ FILE: Include/WAVM/Inline/xxhash/xxhash.h ================================================ /* * xxHash - Extremely Fast Hash algorithm * Header File * Copyright (C) 2012-2020 Yann Collet * * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * You can contact the author at: * - xxHash homepage: https://www.xxhash.com * - xxHash source repository: https://github.com/Cyan4973/xxHash */ /* TODO: update */ /* Notice extracted from xxHash homepage: xxHash is an extremely fast hash algorithm, running at RAM speed limits. It also successfully passes all tests from the SMHasher suite. Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz) Name Speed Q.Score Author xxHash 5.4 GB/s 10 CrapWow 3.2 GB/s 2 Andrew MumurHash 3a 2.7 GB/s 10 Austin Appleby SpookyHash 2.0 GB/s 10 Bob Jenkins SBox 1.4 GB/s 9 Bret Mulvey Lookup3 1.2 GB/s 9 Bob Jenkins SuperFastHash 1.2 GB/s 1 Paul Hsieh CityHash64 1.05 GB/s 10 Pike & Alakuijala FNV 0.55 GB/s 5 Fowler, Noll, Vo CRC32 0.43 GB/s 9 MD5-32 0.33 GB/s 10 Ronald L. Rivest SHA1-32 0.28 GB/s 10 Q.Score is a measure of quality of the hash function. It depends on successfully passing SMHasher test set. 10 is a perfect score. Note: SMHasher's CRC32 implementation is not the fastest one. Other speed-oriented implementations can be faster, especially in combination with PCLMUL instruction: https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html?showComment=1552696407071#c3490092340461170735 A 64-bit version, named XXH64, is available since r35. It offers much better speed, but for 64-bit applications only. Name Speed on 64 bits Speed on 32 bits XXH64 13.8 GB/s 1.9 GB/s XXH32 6.8 GB/s 6.0 GB/s */ #if defined (__cplusplus) extern "C" { #endif /* **************************** * INLINE mode ******************************/ /*! * XXH_INLINE_ALL (and XXH_PRIVATE_API) * Use these build macros to inline xxhash into the target unit. * Inlining improves performance on small inputs, especially when the length is * expressed as a compile-time constant: * * https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html * * It also keeps xxHash symbols private to the unit, so they are not exported. * * Usage: * #define XXH_INLINE_ALL * #include "xxhash.h" * * Do not compile and link xxhash.o as a separate object, as it is not useful. */ #if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \ && !defined(XXH_INLINE_ALL_31684351384) /* this section should be traversed only once */ # define XXH_INLINE_ALL_31684351384 /* give access to the advanced API, required to compile implementations */ # undef XXH_STATIC_LINKING_ONLY /* avoid macro redef */ # define XXH_STATIC_LINKING_ONLY /* make all functions private */ # undef XXH_PUBLIC_API # if defined(__GNUC__) # define XXH_PUBLIC_API static __inline __attribute__((unused)) # elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) # define XXH_PUBLIC_API static inline # elif defined(_MSC_VER) # define XXH_PUBLIC_API static __inline # else /* note: this version may generate warnings for unused static functions */ # define XXH_PUBLIC_API static # endif /* * This part deals with the special case where a unit wants to inline xxHash, * but "xxhash.h" has previously been included without XXH_INLINE_ALL, such * as part of some previously included *.h header file. * Without further action, the new include would just be ignored, * and functions would effectively _not_ be inlined (silent failure). * The following macros solve this situation by prefixing all inlined names, * avoiding naming collision with previous inclusions. */ # ifdef XXH_NAMESPACE # error "XXH_INLINE_ALL with XXH_NAMESPACE is not supported" /* * Note: Alternative: #undef all symbols (it's a pretty large list). * Without #error: it compiles, but functions are actually not inlined. */ # endif # define XXH_NAMESPACE XXH_INLINE_ /* * Some identifiers (enums, type names) are not symbols, but they must * still be renamed to avoid redeclaration. * Alternative solution: do not redeclare them. * However, this requires some #ifdefs, and is a more dispersed action. * Meanwhile, renaming can be achieved in a single block */ # define XXH_IPREF(Id) XXH_INLINE_ ## Id # define XXH_OK XXH_IPREF(XXH_OK) # define XXH_ERROR XXH_IPREF(XXH_ERROR) # define XXH_errorcode XXH_IPREF(XXH_errorcode) # define XXH32_canonical_t XXH_IPREF(XXH32_canonical_t) # define XXH64_canonical_t XXH_IPREF(XXH64_canonical_t) # define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t) # define XXH32_state_s XXH_IPREF(XXH32_state_s) # define XXH32_state_t XXH_IPREF(XXH32_state_t) # define XXH64_state_s XXH_IPREF(XXH64_state_s) # define XXH64_state_t XXH_IPREF(XXH64_state_t) # define XXH3_state_s XXH_IPREF(XXH3_state_s) # define XXH3_state_t XXH_IPREF(XXH3_state_t) # define XXH128_hash_t XXH_IPREF(XXH128_hash_t) /* Ensure the header is parsed again, even if it was previously included */ # undef XXHASH_H_5627135585666179 # undef XXHASH_H_STATIC_13879238742 #endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */ /* **************************************************************** * Stable API *****************************************************************/ #ifndef XXHASH_H_5627135585666179 #define XXHASH_H_5627135585666179 1 /* specific declaration modes for Windows */ #if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API) # if defined(WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT)) # ifdef XXH_EXPORT # define XXH_PUBLIC_API __declspec(dllexport) # elif XXH_IMPORT # define XXH_PUBLIC_API __declspec(dllimport) # endif # else # define XXH_PUBLIC_API /* do nothing */ # endif #endif /*! * XXH_NAMESPACE, aka Namespace Emulation: * * If you want to include _and expose_ xxHash functions from within your own * library, but also want to avoid symbol collisions with other libraries which * may also include xxHash, you can use XXH_NAMESPACE to automatically prefix * any public symbol from xxhash library with the value of XXH_NAMESPACE * (therefore, avoid empty or numeric values). * * Note that no change is required within the calling program as long as it * includes `xxhash.h`: Regular symbol names will be automatically translated * by this header. */ #ifdef XXH_NAMESPACE # define XXH_CAT(A,B) A##B # define XXH_NAME2(A,B) XXH_CAT(A,B) # define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) # define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) # define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) # define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) # define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) # define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) # define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) # define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) # define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) # define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) # define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) # define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) # define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) # define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) # define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) # define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) # define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) # define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) # define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) #endif /* ************************************* * Version ***************************************/ #define XXH_VERSION_MAJOR 0 #define XXH_VERSION_MINOR 7 #define XXH_VERSION_RELEASE 4 #define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) XXH_PUBLIC_API unsigned XXH_versionNumber (void); /* **************************** * Definitions ******************************/ #include /* size_t */ typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; /*-********************************************************************** * 32-bit hash ************************************************************************/ #if !defined (__VMS) \ && (defined (__cplusplus) \ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) # include typedef uint32_t XXH32_hash_t; #else # include # if UINT_MAX == 0xFFFFFFFFUL typedef unsigned int XXH32_hash_t; # else # if ULONG_MAX == 0xFFFFFFFFUL typedef unsigned long XXH32_hash_t; # else # error "unsupported platform: need a 32-bit type" # endif # endif #endif /*! * XXH32(): * Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input". * The memory between input & input+length must be valid (allocated and read-accessible). * "seed" can be used to alter the result predictably. * Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s * * Note: XXH3 provides competitive speed for both 32-bit and 64-bit systems, * and offers true 64/128 bit hash results. It provides a superior level of * dispersion, and greatly reduces the risks of collisions. */ XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed); /******* Streaming *******/ /* * Streaming functions generate the xxHash value from an incrememtal input. * This method is slower than single-call functions, due to state management. * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized. * * An XXH state must first be allocated using `XXH*_createState()`. * * Start a new hash by initializing the state with a seed using `XXH*_reset()`. * * Then, feed the hash state by calling `XXH*_update()` as many times as necessary. * * The function returns an error code, with 0 meaning OK, and any other value * meaning there is an error. * * Finally, a hash value can be produced anytime, by using `XXH*_digest()`. * This function returns the nn-bits hash as an int or long long. * * It's still possible to continue inserting input into the hash state after a * digest, and generate new hash values later on by invoking `XXH*_digest()`. * * When done, release the state using `XXH*_freeState()`. */ typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */ XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void); XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, XXH32_hash_t seed); XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length); XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr); /******* Canonical representation *******/ /* * The default return values from XXH functions are unsigned 32 and 64 bit * integers. * This the simplest and fastest format for further post-processing. * * However, this leaves open the question of what is the order on the byte level, * since little and big endian conventions will store the same number differently. * * The canonical representation settles this issue by mandating big-endian * convention, the same convention as human-readable numbers (large digits first). * * When writing hash values to storage, sending them over a network, or printing * them, it's highly recommended to use the canonical representation to ensure * portability across a wider range of systems, present and future. * * The following functions allow transformation of hash values to and from * canonical format. */ typedef struct { unsigned char digest[4]; } XXH32_canonical_t; XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); #ifndef XXH_NO_LONG_LONG /*-********************************************************************** * 64-bit hash ************************************************************************/ #if !defined (__VMS) \ && (defined (__cplusplus) \ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) # include typedef uint64_t XXH64_hash_t; #else /* the following type must have a width of 64-bit */ typedef unsigned long long XXH64_hash_t; #endif /*! * XXH64(): * Returns the 64-bit hash of sequence of length @length stored at memory * address @input. * @seed can be used to alter the result predictably. * * This function usually runs faster on 64-bit systems, but slower on 32-bit * systems (see benchmark). * * Note: XXH3 provides competitive speed for both 32-bit and 64-bit systems, * and offers true 64/128 bit hash results. It provides a superior level of * dispersion, and greatly reduces the risks of collisions. */ XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, XXH64_hash_t seed); /******* Streaming *******/ typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void); XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state); XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, XXH64_hash_t seed); XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length); XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr); /******* Canonical representation *******/ typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t; XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash); XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src); #endif /* XXH_NO_LONG_LONG */ #endif /* XXHASH_H_5627135585666179 */ #if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) #define XXHASH_H_STATIC_13879238742 /* **************************************************************************** * This section contains declarations which are not guaranteed to remain stable. * They may change in future versions, becoming incompatible with a different * version of the library. * These declarations should only be used with static linking. * Never use them in association with dynamic linking! ***************************************************************************** */ /* * These definitions are only present to allow static allocation of an XXH * state, for example, on the stack or in a struct. * Never **ever** access members directly. */ struct XXH32_state_s { XXH32_hash_t total_len_32; XXH32_hash_t large_len; XXH32_hash_t v1; XXH32_hash_t v2; XXH32_hash_t v3; XXH32_hash_t v4; XXH32_hash_t mem32[4]; XXH32_hash_t memsize; XXH32_hash_t reserved; /* never read nor write, might be removed in a future version */ }; /* typedef'd to XXH32_state_t */ #ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */ struct XXH64_state_s { XXH64_hash_t total_len; XXH64_hash_t v1; XXH64_hash_t v2; XXH64_hash_t v3; XXH64_hash_t v4; XXH64_hash_t mem64[4]; XXH32_hash_t memsize; XXH32_hash_t reserved32; /* required for padding anyway */ XXH64_hash_t reserved64; /* never read nor write, might be removed in a future version */ }; /* typedef'd to XXH64_state_t */ /*-********************************************************************** * XXH3 * New experimental hash ************************************************************************/ /* ************************************************************************ * XXH3 is a new hash algorithm featuring: * - Improved speed for both small and large inputs * - True 64-bit and 128-bit outputs * - SIMD acceleration * - Improved 32-bit viability * * Speed analysis methodology is explained here: * * https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html * * In general, expect XXH3 to run about ~2x faster on large inputs and >3x * faster on small ones compared to XXH64, though exact differences depend on * the platform. * * The algorithm is portable: Like XXH32 and XXH64, it generates the same hash * on all platforms. * * It benefits greatly from SIMD and 64-bit arithmetic, but does not require it. * * Almost all 32-bit and 64-bit targets that can run XXH32 smoothly can run * XXH3 at competitive speeds, even if XXH64 runs slowly. Further details are * explained in the implementation. * * Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8, * ZVector and scalar targets. This can be controlled with the XXH_VECTOR macro. * * XXH3 offers 2 variants, _64bits and _128bits. * When only 64 bits are needed, prefer calling the _64bits variant, as it * reduces the amount of mixing, resulting in faster speed on small inputs. * * It's also generally simpler to manipulate a scalar return type than a struct. * * The 128-bit version adds additional strength, but it is slightly slower. * * The XXH3 algorithm is still in development. * The results it produces may still change in future versions. * * Results produced by v0.7.x are not comparable with results from v0.7.y. * However, the API is completely stable, and it can safely be used for * ephemeral data (local sessions). * * Avoid storing values in long-term storage until the algorithm is finalized. * XXH3's return values will be officially finalized upon reaching v0.8.0. * * After which, return values of XXH3 and XXH128 will no longer change in * future versions. * * The API supports one-shot hashing, streaming mode, and custom secrets. */ #ifdef XXH_NAMESPACE # define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits) # define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret) # define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed) # define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState) # define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState) # define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState) # define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset) # define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed) # define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret) # define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update) # define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest) # define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret) #endif /* XXH3_64bits(): * default 64-bit variant, using default secret and default seed of 0. * It's the fastest variant. */ XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len); /* * XXH3_64bits_withSeed(): * This variant generates a custom secret on the fly based on the default * secret, altered using the `seed` value. * While this operation is decently fast, note that it's not completely free. * Note: seed==0 produces the same results as XXH3_64bits(). */ XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); /* * XXH3_64bits_withSecret(): * It's possible to provide any blob of bytes as a "secret" to generate the hash. * This makes it more difficult for an external actor to prepare an intentional collision. * The main condition is that secretSize *must* be large enough (>= XXH3_SECRET_SIZE_MIN). * However, the quality of the hash highly depends on the secret's entropy. * Technically, the secret must look like a bunch of random bytes. * Avoid "trivial" or structured data such as repeated sequences or a text document. * Whenever unsure about the "randonmess" of the blob of bytes, * consider relabelling it as a "custom seed" instead, * and employ "XXH3_generateSecret()" (see below) * to generate a high quality secret derived from this custom seed. */ #define XXH3_SECRET_SIZE_MIN 136 XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize); /* streaming 64-bit */ #if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11+ */ # include # define XXH_ALIGN(n) alignas(n) #elif defined(__GNUC__) # define XXH_ALIGN(n) __attribute__ ((aligned(n))) #elif defined(_MSC_VER) # define XXH_ALIGN(n) __declspec(align(n)) #else # define XXH_ALIGN(n) /* disabled */ #endif /* Old GCC versions only accept the attribute after the type in structures. */ #if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \ && defined(__GNUC__) # define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align) #else # define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type #endif typedef struct XXH3_state_s XXH3_state_t; #define XXH3_INTERNALBUFFER_SIZE 256 #define XXH3_SECRET_DEFAULT_SIZE 192 struct XXH3_state_s { XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]); /* used to store a custom secret generated from a seed */ XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]); XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]); XXH32_hash_t bufferedSize; XXH32_hash_t reserved32; size_t nbStripesPerBlock; size_t nbStripesSoFar; size_t secretLimit; XXH64_hash_t totalLen; XXH64_hash_t seed; XXH64_hash_t reserved64; const unsigned char* extSecret; /* reference to external secret; * if == NULL, use .customSecret instead */ /* note: there may be some padding at the end due to alignment on 64 bytes */ }; /* typedef'd to XXH3_state_t */ #undef XXH_ALIGN_MEMBER /* * Streaming requires state maintenance. * This operation costs memory and CPU. * As a consequence, streaming is slower than one-shot hashing. * For better performance, prefer one-shot functions whenever possible. */ XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void); XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr); XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state); /* * XXH3_64bits_reset(): * Initialize with the default parameters. * The result will be equivalent to `XXH3_64bits()`. */ XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr); /* * XXH3_64bits_reset_withSeed(): * Generate a custom secret from `seed`, and store it into `statePtr`. * digest will be equivalent to `XXH3_64bits_withSeed()`. */ XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed); /* * XXH3_64bits_reset_withSecret(): * `secret` is referenced, it _must outlive_ the hash streaming session. * Similar to one-shot API, `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`, * and the quality of the hash depends on secret's entropy, * meaning that the secret should look like a bunch of random bytes. * When in doubt about the randomness of a candidate `secret`, * consider employing `XXH3_generateSecret()` instead (see below). */ XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize); XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH3_state_t* statePtr, const void* input, size_t length); XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* statePtr); /* 128-bit */ #ifdef XXH_NAMESPACE # define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128) # define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits) # define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed) # define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret) # define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset) # define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed) # define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret) # define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update) # define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest) # define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual) # define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp) # define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash) # define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical) #endif typedef struct { XXH64_hash_t low64; XXH64_hash_t high64; } XXH128_hash_t; XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed); XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len); XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); /* == XXH128() */ XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize); XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr); XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed); XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize); XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH3_state_t* statePtr, const void* input, size_t length); XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* statePtr); /* Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */ /*! * XXH128_isEqual(): * Return: 1 if `h1` and `h2` are equal, 0 if they are not. */ XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2); /*! * XXH128_cmp(): * * This comparator is compatible with stdlib's `qsort()`/`bsearch()`. * * return: >0 if *h128_1 > *h128_2 * =0 if *h128_1 == *h128_2 * <0 if *h128_1 < *h128_2 */ XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2); /******* Canonical representation *******/ typedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t; XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash); XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src); /* === Experimental API === */ /* Symbols defined below must be considered tied to a specific library version. */ /* * XXH3_generateSecret(): * * Derive a high-entropy secret from any user-defined content, named customSeed. * The generated secret can be used in combination with `*_withSecret()` functions. * The `_withSecret()` variants are useful to provide a higher level of protection than 64-bit seed, * as it becomes much more difficult for an external actor to guess how to impact the calculation logic. * * The function accepts as input a custom seed of any length and any content, * and derives from it a high-entropy secret of length XXH3_SECRET_DEFAULT_SIZE * into an already allocated buffer secretBuffer. * The generated secret is _always_ XXH_SECRET_DEFAULT_SIZE bytes long. * * The generated secret can then be used with any `*_withSecret()` variant. * Functions `XXH3_128bits_withSecret()`, `XXH3_64bits_withSecret()`, * `XXH3_128bits_reset_withSecret()` and `XXH3_64bits_reset_withSecret()` * are part of this list. They all accept a `secret` parameter * which must be very long for implementation reasons (>= XXH3_SECRET_SIZE_MIN) * _and_ feature very high entropy (consist of random-looking bytes). * These conditions can be a high bar to meet, so * this function can be used to generate a secret of proper quality. * * customSeed can be anything. It can have any size, even small ones, * and its content can be anything, even stupidly "low entropy" source such as a bunch of zeroes. * The resulting `secret` will nonetheless provide all expected qualities. * * Supplying NULL as the customSeed copies the default secret into `secretBuffer`. * When customSeedSize > 0, supplying NULL as customSeed is undefined behavior. */ XXH_PUBLIC_API void XXH3_generateSecret(void* secretBuffer, const void* customSeed, size_t customSeedSize); #endif /* XXH_NO_LONG_LONG */ #if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) # define XXH_IMPLEMENTATION #endif #endif /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */ /* ======================================================================== */ /* ======================================================================== */ /* ======================================================================== */ /*-********************************************************************** * xxHash implementation *-********************************************************************** * xxHash's implementation used to be found in xxhash.c. * * However, code inlining requires the implementation to be visible to the * compiler, usually within the header. * * As a workaround, xxhash.c used to be included within xxhash.h. This caused * some issues with some build systems, especially ones which treat .c files * as source files. * * Therefore, the implementation is now directly integrated within xxhash.h. * Another small advantage is that xxhash.c is no longer needed in /include. ************************************************************************/ #if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \ || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387) # define XXH_IMPLEM_13a8737387 /* ************************************* * Tuning parameters ***************************************/ /*! * XXH_FORCE_MEMORY_ACCESS: * By default, access to unaligned memory is controlled by `memcpy()`, which is * safe and portable. * * Unfortunately, on some target/compiler combinations, the generated assembly * is sub-optimal. * * The below switch allow to select a different access method for improved * performance. * Method 0 (default): * Use `memcpy()`. Safe and portable. * Method 1: * `__attribute__((packed))` statement. It depends on compiler extensions * and is therefore not portable. * This method is safe if your compiler supports it, and *generally* as * fast or faster than `memcpy`. * Method 2: * Direct access via cast. This method doesn't depend on the compiler but * violates the C standard. * It can generate buggy code on targets which do not support unaligned * memory accesses. * But in some circumstances, it's the only known way to get the most * performance (ie GCC + ARMv6) * Method 3: * Byteshift. This can generate the best code on old compilers which don't * inline small `memcpy()` calls, and it might also be faster on big-endian * systems which lack a native byteswap instruction. * See https://stackoverflow.com/a/32095106/646947 for details. * Prefer these methods in priority order (0 > 1 > 2 > 3) */ #ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ # if !defined(__clang__) && defined(__GNUC__) && defined(__ARM_FEATURE_UNALIGNED) && defined(__ARM_ARCH) && (__ARM_ARCH == 6) # define XXH_FORCE_MEMORY_ACCESS 2 # elif !defined(__clang__) && ((defined(__INTEL_COMPILER) && !defined(_WIN32)) || \ (defined(__GNUC__) && (defined(__ARM_ARCH) && __ARM_ARCH >= 7))) # define XXH_FORCE_MEMORY_ACCESS 1 # endif #endif /*! * XXH_ACCEPT_NULL_INPUT_POINTER: * If the input pointer is NULL, xxHash's default behavior is to dereference it, * triggering a segfault. * When this macro is enabled, xxHash actively checks the input for a null pointer. * If it is, the result for null input pointers is the same as a zero-length input. */ #ifndef XXH_ACCEPT_NULL_INPUT_POINTER /* can be defined externally */ # define XXH_ACCEPT_NULL_INPUT_POINTER 0 #endif /*! * XXH_FORCE_ALIGN_CHECK: * This is an important performance trick * for architectures without decent unaligned memory access performance. * It checks for input alignment, and when conditions are met, * uses a "fast path" employing direct 32-bit/64-bit read, * resulting in _dramatically faster_ read speed. * * The check costs one initial branch per hash, which is generally negligible, but not zero. * Moreover, it's not useful to generate binary for an additional code path * if memory access uses same instruction for both aligned and unaligned adresses. * * In these cases, the alignment check can be removed by setting this macro to 0. * Then the code will always use unaligned memory access. * Align check is automatically disabled on x86, x64 & arm64, * which are platforms known to offer good unaligned memory accesses performance. * * This option does not affect XXH3 (only XXH32 and XXH64). */ #ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ # if defined(__i386) || defined(__x86_64__) || defined(__aarch64__) \ || defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) /* visual */ # define XXH_FORCE_ALIGN_CHECK 0 # else # define XXH_FORCE_ALIGN_CHECK 1 # endif #endif /*! * XXH_NO_INLINE_HINTS: * * By default, xxHash tries to force the compiler to inline almost all internal * functions. * * This can usually improve performance due to reduced jumping and improved * constant folding, but significantly increases the size of the binary which * might not be favorable. * * Additionally, sometimes the forced inlining can be detrimental to performance, * depending on the architecture. * * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the * compiler full control on whether to inline or not. * * When not optimizing (-O0), optimizing for size (-Os, -Oz), or using * -fno-inline with GCC or Clang, this will automatically be defined. */ #ifndef XXH_NO_INLINE_HINTS # if defined(__OPTIMIZE_SIZE__) /* -Os, -Oz */ \ || defined(__NO_INLINE__) /* -O0, -fno-inline */ # define XXH_NO_INLINE_HINTS 1 # else # define XXH_NO_INLINE_HINTS 0 # endif #endif /*! * XXH_REROLL: * Whether to reroll XXH32_finalize, and XXH64_finalize, * instead of using an unrolled jump table/if statement loop. * * This is automatically defined on -Os/-Oz on GCC and Clang. */ #ifndef XXH_REROLL # if defined(__OPTIMIZE_SIZE__) # define XXH_REROLL 1 # else # define XXH_REROLL 0 # endif #endif /* ************************************* * Includes & Memory related functions ***************************************/ /*! * Modify the local functions below should you wish to use some other memory * routines for malloc() and free() */ #include static void* XXH_malloc(size_t s) { return malloc(s); } static void XXH_free(void* p) { free(p); } /*! and for memcpy() */ #include static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); } #include /* ULLONG_MAX */ /* ************************************* * Compiler Specific Options ***************************************/ #ifdef _MSC_VER /* Visual Studio warning fix */ # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ #endif #if XXH_NO_INLINE_HINTS /* disable inlining hints */ # if defined(__GNUC__) # define XXH_FORCE_INLINE static __attribute__((unused)) # else # define XXH_FORCE_INLINE static # endif # define XXH_NO_INLINE static /* enable inlining hints */ #elif defined(_MSC_VER) /* Visual Studio */ # define XXH_FORCE_INLINE static __forceinline # define XXH_NO_INLINE static __declspec(noinline) #elif defined(__GNUC__) # define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused)) # define XXH_NO_INLINE static __attribute__((noinline)) #elif defined (__cplusplus) \ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99 */ # define XXH_FORCE_INLINE static inline # define XXH_NO_INLINE static #else # define XXH_FORCE_INLINE static # define XXH_NO_INLINE static #endif /* ************************************* * Debug ***************************************/ /* * XXH_DEBUGLEVEL is expected to be defined externally, typically via the * compiler's command line options. The value must be a number. */ #ifndef XXH_DEBUGLEVEL # ifdef DEBUGLEVEL /* backwards compat */ # define XXH_DEBUGLEVEL DEBUGLEVEL # else # define XXH_DEBUGLEVEL 0 # endif #endif #if (XXH_DEBUGLEVEL>=1) # include /* note: can still be disabled with NDEBUG */ # define XXH_ASSERT(c) assert(c) #else # define XXH_ASSERT(c) ((void)0) #endif /* note: use after variable declarations */ #define XXH_STATIC_ASSERT(c) do { enum { XXH_sa = 1/(int)(!!(c)) }; } while (0) /* ************************************* * Basic Types ***************************************/ #if !defined (__VMS) \ && (defined (__cplusplus) \ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) # include typedef uint8_t xxh_u8; #else typedef unsigned char xxh_u8; #endif typedef XXH32_hash_t xxh_u32; #ifdef XXH_OLD_NAMES # define BYTE xxh_u8 # define U8 xxh_u8 # define U32 xxh_u32 #endif /* *** Memory access *** */ #if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) /* * Manual byteshift. Best for old compilers which don't inline memcpy. * We actually directly use XXH_readLE32 and XXH_readBE32. */ #elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) /* * Force direct memory access. Only works on CPU which support unaligned memory * access in hardware. */ static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; } #elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) /* * __pack instructions are safer but compiler specific, hence potentially * problematic for some compilers. * * Currently only defined for GCC and ICC. */ #ifdef XXH_OLD_NAMES typedef union { xxh_u32 u32; } __attribute__((packed)) unalign; #endif static xxh_u32 XXH_read32(const void* ptr) { typedef union { xxh_u32 u32; } __attribute__((packed)) xxh_unalign; return ((const xxh_unalign*)ptr)->u32; } #else /* * Portable and safe solution. Generally efficient. * see: https://stackoverflow.com/a/32095106/646947 */ static xxh_u32 XXH_read32(const void* memPtr) { xxh_u32 val; memcpy(&val, memPtr, sizeof(val)); return val; } #endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ /* *** Endianess *** */ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess; /*! * XXH_CPU_LITTLE_ENDIAN: * Defined to 1 if the target is little endian, or 0 if it is big endian. * It can be defined externally, for example on the compiler command line. * * If it is not defined, a runtime check (which is usually constant folded) * is used instead. */ #ifndef XXH_CPU_LITTLE_ENDIAN /* * Try to detect endianness automatically, to avoid the nonstandard behavior * in `XXH_isLittleEndian()` */ # if defined(_WIN32) /* Windows is always little endian */ \ || defined(__LITTLE_ENDIAN__) \ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) # define XXH_CPU_LITTLE_ENDIAN 1 # elif defined(__BIG_ENDIAN__) \ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) # define XXH_CPU_LITTLE_ENDIAN 0 # else /* * runtime test, presumed to simplify to a constant by compiler */ static int XXH_isLittleEndian(void) { /* * Portable and well-defined behavior. * Don't use static: it is detrimental to performance. */ const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 }; return one.c[0]; } # define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() # endif #endif /* **************************************** * Compiler-specific Functions and Macros ******************************************/ #define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) #ifdef __has_builtin # define XXH_HAS_BUILTIN(x) __has_builtin(x) #else # define XXH_HAS_BUILTIN(x) 0 #endif #if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \ && XXH_HAS_BUILTIN(__builtin_rotateleft64) # define XXH_rotl32 __builtin_rotateleft32 # define XXH_rotl64 __builtin_rotateleft64 /* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */ #elif defined(_MSC_VER) # define XXH_rotl32(x,r) _rotl(x,r) # define XXH_rotl64(x,r) _rotl64(x,r) #else # define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) # define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r)))) #endif #if defined(_MSC_VER) /* Visual Studio */ # define XXH_swap32 _byteswap_ulong #elif XXH_GCC_VERSION >= 403 # define XXH_swap32 __builtin_bswap32 #else static xxh_u32 XXH_swap32 (xxh_u32 x) { return ((x << 24) & 0xff000000 ) | ((x << 8) & 0x00ff0000 ) | ((x >> 8) & 0x0000ff00 ) | ((x >> 24) & 0x000000ff ); } #endif /* *************************** * Memory reads *****************************/ typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment; /* * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. * * This is ideal for older compilers which don't inline memcpy. */ #if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr) { const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; return bytePtr[0] | ((xxh_u32)bytePtr[1] << 8) | ((xxh_u32)bytePtr[2] << 16) | ((xxh_u32)bytePtr[3] << 24); } XXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr) { const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; return bytePtr[3] | ((xxh_u32)bytePtr[2] << 8) | ((xxh_u32)bytePtr[1] << 16) | ((xxh_u32)bytePtr[0] << 24); } #else XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) { return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr)); } static xxh_u32 XXH_readBE32(const void* ptr) { return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr); } #endif XXH_FORCE_INLINE xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align) { if (align==XXH_unaligned) { return XXH_readLE32(ptr); } else { return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr); } } /* ************************************* * Misc ***************************************/ XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; } /* ******************************************************************* * 32-bit hash functions *********************************************************************/ static const xxh_u32 XXH_PRIME32_1 = 0x9E3779B1U; /* 0b10011110001101110111100110110001 */ static const xxh_u32 XXH_PRIME32_2 = 0x85EBCA77U; /* 0b10000101111010111100101001110111 */ static const xxh_u32 XXH_PRIME32_3 = 0xC2B2AE3DU; /* 0b11000010101100101010111000111101 */ static const xxh_u32 XXH_PRIME32_4 = 0x27D4EB2FU; /* 0b00100111110101001110101100101111 */ static const xxh_u32 XXH_PRIME32_5 = 0x165667B1U; /* 0b00010110010101100110011110110001 */ #ifdef XXH_OLD_NAMES # define PRIME32_1 XXH_PRIME32_1 # define PRIME32_2 XXH_PRIME32_2 # define PRIME32_3 XXH_PRIME32_3 # define PRIME32_4 XXH_PRIME32_4 # define PRIME32_5 XXH_PRIME32_5 #endif static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input) { acc += input * XXH_PRIME32_2; acc = XXH_rotl32(acc, 13); acc *= XXH_PRIME32_1; #if defined(__GNUC__) && defined(__SSE4_1__) && !defined(XXH_ENABLE_AUTOVECTORIZE) /* * UGLY HACK: * This inline assembly hack forces acc into a normal register. This is the * only thing that prevents GCC and Clang from autovectorizing the XXH32 * loop (pragmas and attributes don't work for some resason) without globally * disabling SSE4.1. * * The reason we want to avoid vectorization is because despite working on * 4 integers at a time, there are multiple factors slowing XXH32 down on * SSE4: * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on * newer chips!) making it slightly slower to multiply four integers at * once compared to four integers independently. Even when pmulld was * fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE * just to multiply unless doing a long operation. * * - Four instructions are required to rotate, * movqda tmp, v // not required with VEX encoding * pslld tmp, 13 // tmp <<= 13 * psrld v, 19 // x >>= 19 * por v, tmp // x |= tmp * compared to one for scalar: * roll v, 13 // reliably fast across the board * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason * * - Instruction level parallelism is actually more beneficial here because * the SIMD actually serializes this operation: While v1 is rotating, v2 * can load data, while v3 can multiply. SSE forces them to operate * together. * * How this hack works: * __asm__("" // Declare an assembly block but don't declare any instructions * : // However, as an Input/Output Operand, * "+r" // constrain a read/write operand (+) as a general purpose register (r). * (acc) // and set acc as the operand * ); * * Because of the 'r', the compiler has promised that seed will be in a * general purpose register and the '+' says that it will be 'read/write', * so it has to assume it has changed. It is like volatile without all the * loads and stores. * * Since the argument has to be in a normal register (not an SSE register), * each time XXH32_round is called, it is impossible to vectorize. */ __asm__("" : "+r" (acc)); #endif return acc; } /* mix all bits */ static xxh_u32 XXH32_avalanche(xxh_u32 h32) { h32 ^= h32 >> 15; h32 *= XXH_PRIME32_2; h32 ^= h32 >> 13; h32 *= XXH_PRIME32_3; h32 ^= h32 >> 16; return(h32); } #define XXH_get32bits(p) XXH_readLE32_align(p, align) static xxh_u32 XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align) { #define XXH_PROCESS1 do { \ h32 += (*ptr++) * XXH_PRIME32_5; \ h32 = XXH_rotl32(h32, 11) * XXH_PRIME32_1; \ } while (0) #define XXH_PROCESS4 do { \ h32 += XXH_get32bits(ptr) * XXH_PRIME32_3; \ ptr += 4; \ h32 = XXH_rotl32(h32, 17) * XXH_PRIME32_4; \ } while (0) /* Compact rerolled version */ if (XXH_REROLL) { len &= 15; while (len >= 4) { XXH_PROCESS4; len -= 4; } while (len > 0) { XXH_PROCESS1; --len; } return XXH32_avalanche(h32); } else { switch(len&15) /* or switch(bEnd - p) */ { case 12: XXH_PROCESS4; /* fallthrough */ case 8: XXH_PROCESS4; /* fallthrough */ case 4: XXH_PROCESS4; return XXH32_avalanche(h32); case 13: XXH_PROCESS4; /* fallthrough */ case 9: XXH_PROCESS4; /* fallthrough */ case 5: XXH_PROCESS4; XXH_PROCESS1; return XXH32_avalanche(h32); case 14: XXH_PROCESS4; /* fallthrough */ case 10: XXH_PROCESS4; /* fallthrough */ case 6: XXH_PROCESS4; XXH_PROCESS1; XXH_PROCESS1; return XXH32_avalanche(h32); case 15: XXH_PROCESS4; /* fallthrough */ case 11: XXH_PROCESS4; /* fallthrough */ case 7: XXH_PROCESS4; /* fallthrough */ case 3: XXH_PROCESS1; /* fallthrough */ case 2: XXH_PROCESS1; /* fallthrough */ case 1: XXH_PROCESS1; /* fallthrough */ case 0: return XXH32_avalanche(h32); } XXH_ASSERT(0); return h32; /* reaching this point is deemed impossible */ } } #ifdef XXH_OLD_NAMES # define PROCESS1 XXH_PROCESS1 # define PROCESS4 XXH_PROCESS4 #else # undef XXH_PROCESS1 # undef XXH_PROCESS4 #endif XXH_FORCE_INLINE xxh_u32 XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align) { const xxh_u8* bEnd = input + len; xxh_u32 h32; #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) if (input==NULL) { len=0; bEnd=input=(const xxh_u8*)(size_t)16; } #endif if (len>=16) { const xxh_u8* const limit = bEnd - 15; xxh_u32 v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2; xxh_u32 v2 = seed + XXH_PRIME32_2; xxh_u32 v3 = seed + 0; xxh_u32 v4 = seed - XXH_PRIME32_1; do { v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4; v2 = XXH32_round(v2, XXH_get32bits(input)); input += 4; v3 = XXH32_round(v3, XXH_get32bits(input)); input += 4; v4 = XXH32_round(v4, XXH_get32bits(input)); input += 4; } while (input < limit); h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18); } else { h32 = seed + XXH_PRIME32_5; } h32 += (xxh_u32)len; return XXH32_finalize(h32, input, len&15, align); } XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed) { #if 0 /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ XXH32_state_t state; XXH32_reset(&state, seed); XXH32_update(&state, (const xxh_u8*)input, len); return XXH32_digest(&state); #else if (XXH_FORCE_ALIGN_CHECK) { if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */ return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); } } return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); #endif } /******* Hash streaming *******/ XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) { return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); } XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) { XXH_free(statePtr); return XXH_OK; } XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState) { memcpy(dstState, srcState, sizeof(*dstState)); } XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed) { XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ memset(&state, 0, sizeof(state)); state.v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2; state.v2 = seed + XXH_PRIME32_2; state.v3 = seed + 0; state.v4 = seed - XXH_PRIME32_1; /* do not write into reserved, planned to be removed in a future version */ memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved)); return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH32_update(XXH32_state_t* state, const void* input, size_t len) { if (input==NULL) #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) return XXH_OK; #else return XXH_ERROR; #endif { const xxh_u8* p = (const xxh_u8*)input; const xxh_u8* const bEnd = p + len; state->total_len_32 += (XXH32_hash_t)len; state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16)); if (state->memsize + len < 16) { /* fill in tmp buffer */ XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len); state->memsize += (XXH32_hash_t)len; return XXH_OK; } if (state->memsize) { /* some data left from previous update */ XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16-state->memsize); { const xxh_u32* p32 = state->mem32; state->v1 = XXH32_round(state->v1, XXH_readLE32(p32)); p32++; state->v2 = XXH32_round(state->v2, XXH_readLE32(p32)); p32++; state->v3 = XXH32_round(state->v3, XXH_readLE32(p32)); p32++; state->v4 = XXH32_round(state->v4, XXH_readLE32(p32)); } p += 16-state->memsize; state->memsize = 0; } if (p <= bEnd-16) { const xxh_u8* const limit = bEnd - 16; xxh_u32 v1 = state->v1; xxh_u32 v2 = state->v2; xxh_u32 v3 = state->v3; xxh_u32 v4 = state->v4; do { v1 = XXH32_round(v1, XXH_readLE32(p)); p+=4; v2 = XXH32_round(v2, XXH_readLE32(p)); p+=4; v3 = XXH32_round(v3, XXH_readLE32(p)); p+=4; v4 = XXH32_round(v4, XXH_readLE32(p)); p+=4; } while (p<=limit); state->v1 = v1; state->v2 = v2; state->v3 = v3; state->v4 = v4; } if (p < bEnd) { XXH_memcpy(state->mem32, p, (size_t)(bEnd-p)); state->memsize = (unsigned)(bEnd-p); } } return XXH_OK; } XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* state) { xxh_u32 h32; if (state->large_len) { h32 = XXH_rotl32(state->v1, 1) + XXH_rotl32(state->v2, 7) + XXH_rotl32(state->v3, 12) + XXH_rotl32(state->v4, 18); } else { h32 = state->v3 /* == seed */ + XXH_PRIME32_5; } h32 += state->total_len_32; return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned); } /******* Canonical representation *******/ /* * The default return values from XXH functions are unsigned 32 and 64 bit * integers. * * The canonical representation uses big endian convention, the same convention * as human-readable numbers (large digits first). * * This way, hash values can be written into a file or buffer, remaining * comparable across different systems. * * The following functions allow transformation of hash values to and from their * canonical format. */ XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) { XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash); memcpy(dst, &hash, sizeof(*dst)); } XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src) { return XXH_readBE32(src); } #ifndef XXH_NO_LONG_LONG /* ******************************************************************* * 64-bit hash functions *********************************************************************/ /******* Memory access *******/ typedef XXH64_hash_t xxh_u64; #ifdef XXH_OLD_NAMES # define U64 xxh_u64 #endif /*! * XXH_REROLL_XXH64: * Whether to reroll the XXH64_finalize() loop. * * Just like XXH32, we can unroll the XXH64_finalize() loop. This can be a * performance gain on 64-bit hosts, as only one jump is required. * * However, on 32-bit hosts, because arithmetic needs to be done with two 32-bit * registers, and 64-bit arithmetic needs to be simulated, it isn't beneficial * to unroll. The code becomes ridiculously large (the largest function in the * binary on i386!), and rerolling it saves anywhere from 3kB to 20kB. It is * also slightly faster because it fits into cache better and is more likely * to be inlined by the compiler. * * If XXH_REROLL is defined, this is ignored and the loop is always rerolled. */ #ifndef XXH_REROLL_XXH64 # if (defined(__ILP32__) || defined(_ILP32)) /* ILP32 is often defined on 32-bit GCC family */ \ || !(defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) /* x86-64 */ \ || defined(_M_ARM64) || defined(__aarch64__) || defined(__arm64__) /* aarch64 */ \ || defined(__PPC64__) || defined(__PPC64LE__) || defined(__ppc64__) || defined(__powerpc64__) /* ppc64 */ \ || defined(__mips64__) || defined(__mips64)) /* mips64 */ \ || (!defined(SIZE_MAX) || SIZE_MAX < ULLONG_MAX) /* check limits */ # define XXH_REROLL_XXH64 1 # else # define XXH_REROLL_XXH64 0 # endif #endif /* !defined(XXH_REROLL_XXH64) */ #if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) /* * Manual byteshift. Best for old compilers which don't inline memcpy. * We actually directly use XXH_readLE64 and XXH_readBE64. */ #elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) /* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ static xxh_u64 XXH_read64(const void* memPtr) { return *(const xxh_u64*) memPtr; } #elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) /* * __pack instructions are safer, but compiler specific, hence potentially * problematic for some compilers. * * Currently only defined for GCC and ICC. */ #ifdef XXH_OLD_NAMES typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64; #endif static xxh_u64 XXH_read64(const void* ptr) { typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) xxh_unalign64; return ((const xxh_unalign64*)ptr)->u64; } #else /* * Portable and safe solution. Generally efficient. * see: https://stackoverflow.com/a/32095106/646947 */ static xxh_u64 XXH_read64(const void* memPtr) { xxh_u64 val; memcpy(&val, memPtr, sizeof(val)); return val; } #endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ #if defined(_MSC_VER) /* Visual Studio */ # define XXH_swap64 _byteswap_uint64 #elif XXH_GCC_VERSION >= 403 # define XXH_swap64 __builtin_bswap64 #else static xxh_u64 XXH_swap64 (xxh_u64 x) { return ((x << 56) & 0xff00000000000000ULL) | ((x << 40) & 0x00ff000000000000ULL) | ((x << 24) & 0x0000ff0000000000ULL) | ((x << 8) & 0x000000ff00000000ULL) | ((x >> 8) & 0x00000000ff000000ULL) | ((x >> 24) & 0x0000000000ff0000ULL) | ((x >> 40) & 0x000000000000ff00ULL) | ((x >> 56) & 0x00000000000000ffULL); } #endif /* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */ #if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr) { const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; return bytePtr[0] | ((xxh_u64)bytePtr[1] << 8) | ((xxh_u64)bytePtr[2] << 16) | ((xxh_u64)bytePtr[3] << 24) | ((xxh_u64)bytePtr[4] << 32) | ((xxh_u64)bytePtr[5] << 40) | ((xxh_u64)bytePtr[6] << 48) | ((xxh_u64)bytePtr[7] << 56); } XXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr) { const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; return bytePtr[7] | ((xxh_u64)bytePtr[6] << 8) | ((xxh_u64)bytePtr[5] << 16) | ((xxh_u64)bytePtr[4] << 24) | ((xxh_u64)bytePtr[3] << 32) | ((xxh_u64)bytePtr[2] << 40) | ((xxh_u64)bytePtr[1] << 48) | ((xxh_u64)bytePtr[0] << 56); } #else XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) { return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr)); } static xxh_u64 XXH_readBE64(const void* ptr) { return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr); } #endif XXH_FORCE_INLINE xxh_u64 XXH_readLE64_align(const void* ptr, XXH_alignment align) { if (align==XXH_unaligned) return XXH_readLE64(ptr); else return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr); } /******* xxh64 *******/ static const xxh_u64 XXH_PRIME64_1 = 0x9E3779B185EBCA87ULL; /* 0b1001111000110111011110011011000110000101111010111100101010000111 */ static const xxh_u64 XXH_PRIME64_2 = 0xC2B2AE3D27D4EB4FULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */ static const xxh_u64 XXH_PRIME64_3 = 0x165667B19E3779F9ULL; /* 0b0001011001010110011001111011000110011110001101110111100111111001 */ static const xxh_u64 XXH_PRIME64_4 = 0x85EBCA77C2B2AE63ULL; /* 0b1000010111101011110010100111011111000010101100101010111001100011 */ static const xxh_u64 XXH_PRIME64_5 = 0x27D4EB2F165667C5ULL; /* 0b0010011111010100111010110010111100010110010101100110011111000101 */ #ifdef XXH_OLD_NAMES # define PRIME64_1 XXH_PRIME64_1 # define PRIME64_2 XXH_PRIME64_2 # define PRIME64_3 XXH_PRIME64_3 # define PRIME64_4 XXH_PRIME64_4 # define PRIME64_5 XXH_PRIME64_5 #endif static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input) { acc += input * XXH_PRIME64_2; acc = XXH_rotl64(acc, 31); acc *= XXH_PRIME64_1; return acc; } static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val) { val = XXH64_round(0, val); acc ^= val; acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4; return acc; } static xxh_u64 XXH64_avalanche(xxh_u64 h64) { h64 ^= h64 >> 33; h64 *= XXH_PRIME64_2; h64 ^= h64 >> 29; h64 *= XXH_PRIME64_3; h64 ^= h64 >> 32; return h64; } #define XXH_get64bits(p) XXH_readLE64_align(p, align) static xxh_u64 XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align) { #define XXH_PROCESS1_64 do { \ h64 ^= (*ptr++) * XXH_PRIME64_5; \ h64 = XXH_rotl64(h64, 11) * XXH_PRIME64_1; \ } while (0) #define XXH_PROCESS4_64 do { \ h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1; \ ptr += 4; \ h64 = XXH_rotl64(h64, 23) * XXH_PRIME64_2 + XXH_PRIME64_3; \ } while (0) #define XXH_PROCESS8_64 do { \ xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); \ ptr += 8; \ h64 ^= k1; \ h64 = XXH_rotl64(h64,27) * XXH_PRIME64_1 + XXH_PRIME64_4; \ } while (0) /* Rerolled version for 32-bit targets is faster and much smaller. */ if (XXH_REROLL || XXH_REROLL_XXH64) { len &= 31; while (len >= 8) { XXH_PROCESS8_64; len -= 8; } if (len >= 4) { XXH_PROCESS4_64; len -= 4; } while (len > 0) { XXH_PROCESS1_64; --len; } return XXH64_avalanche(h64); } else { switch(len & 31) { case 24: XXH_PROCESS8_64; /* fallthrough */ case 16: XXH_PROCESS8_64; /* fallthrough */ case 8: XXH_PROCESS8_64; return XXH64_avalanche(h64); case 28: XXH_PROCESS8_64; /* fallthrough */ case 20: XXH_PROCESS8_64; /* fallthrough */ case 12: XXH_PROCESS8_64; /* fallthrough */ case 4: XXH_PROCESS4_64; return XXH64_avalanche(h64); case 25: XXH_PROCESS8_64; /* fallthrough */ case 17: XXH_PROCESS8_64; /* fallthrough */ case 9: XXH_PROCESS8_64; XXH_PROCESS1_64; return XXH64_avalanche(h64); case 29: XXH_PROCESS8_64; /* fallthrough */ case 21: XXH_PROCESS8_64; /* fallthrough */ case 13: XXH_PROCESS8_64; /* fallthrough */ case 5: XXH_PROCESS4_64; XXH_PROCESS1_64; return XXH64_avalanche(h64); case 26: XXH_PROCESS8_64; /* fallthrough */ case 18: XXH_PROCESS8_64; /* fallthrough */ case 10: XXH_PROCESS8_64; XXH_PROCESS1_64; XXH_PROCESS1_64; return XXH64_avalanche(h64); case 30: XXH_PROCESS8_64; /* fallthrough */ case 22: XXH_PROCESS8_64; /* fallthrough */ case 14: XXH_PROCESS8_64; /* fallthrough */ case 6: XXH_PROCESS4_64; XXH_PROCESS1_64; XXH_PROCESS1_64; return XXH64_avalanche(h64); case 27: XXH_PROCESS8_64; /* fallthrough */ case 19: XXH_PROCESS8_64; /* fallthrough */ case 11: XXH_PROCESS8_64; XXH_PROCESS1_64; XXH_PROCESS1_64; XXH_PROCESS1_64; return XXH64_avalanche(h64); case 31: XXH_PROCESS8_64; /* fallthrough */ case 23: XXH_PROCESS8_64; /* fallthrough */ case 15: XXH_PROCESS8_64; /* fallthrough */ case 7: XXH_PROCESS4_64; /* fallthrough */ case 3: XXH_PROCESS1_64; /* fallthrough */ case 2: XXH_PROCESS1_64; /* fallthrough */ case 1: XXH_PROCESS1_64; /* fallthrough */ case 0: return XXH64_avalanche(h64); } } /* impossible to reach */ XXH_ASSERT(0); return 0; /* unreachable, but some compilers complain without it */ } #ifdef XXH_OLD_NAMES # define PROCESS1_64 XXH_PROCESS1_64 # define PROCESS4_64 XXH_PROCESS4_64 # define PROCESS8_64 XXH_PROCESS8_64 #else # undef XXH_PROCESS1_64 # undef XXH_PROCESS4_64 # undef XXH_PROCESS8_64 #endif XXH_FORCE_INLINE xxh_u64 XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align) { const xxh_u8* bEnd = input + len; xxh_u64 h64; #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) if (input==NULL) { len=0; bEnd=input=(const xxh_u8*)(size_t)32; } #endif if (len>=32) { const xxh_u8* const limit = bEnd - 32; xxh_u64 v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2; xxh_u64 v2 = seed + XXH_PRIME64_2; xxh_u64 v3 = seed + 0; xxh_u64 v4 = seed - XXH_PRIME64_1; do { v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8; v2 = XXH64_round(v2, XXH_get64bits(input)); input+=8; v3 = XXH64_round(v3, XXH_get64bits(input)); input+=8; v4 = XXH64_round(v4, XXH_get64bits(input)); input+=8; } while (input<=limit); h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); h64 = XXH64_mergeRound(h64, v1); h64 = XXH64_mergeRound(h64, v2); h64 = XXH64_mergeRound(h64, v3); h64 = XXH64_mergeRound(h64, v4); } else { h64 = seed + XXH_PRIME64_5; } h64 += (xxh_u64) len; return XXH64_finalize(h64, input, len, align); } XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t len, XXH64_hash_t seed) { #if 0 /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ XXH64_state_t state; XXH64_reset(&state, seed); XXH64_update(&state, (const xxh_u8*)input, len); return XXH64_digest(&state); #else if (XXH_FORCE_ALIGN_CHECK) { if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */ return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); } } return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); #endif } /******* Hash Streaming *******/ XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void) { return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t)); } XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) { XXH_free(statePtr); return XXH_OK; } XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState) { memcpy(dstState, srcState, sizeof(*dstState)); } XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t seed) { XXH64_state_t state; /* use a local state to memcpy() in order to avoid strict-aliasing warnings */ memset(&state, 0, sizeof(state)); state.v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2; state.v2 = seed + XXH_PRIME64_2; state.v3 = seed + 0; state.v4 = seed - XXH_PRIME64_1; /* do not write into reserved64, might be removed in a future version */ memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved64)); return XXH_OK; } XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* state, const void* input, size_t len) { if (input==NULL) #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) return XXH_OK; #else return XXH_ERROR; #endif { const xxh_u8* p = (const xxh_u8*)input; const xxh_u8* const bEnd = p + len; state->total_len += len; if (state->memsize + len < 32) { /* fill in tmp buffer */ XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len); state->memsize += (xxh_u32)len; return XXH_OK; } if (state->memsize) { /* tmp buffer is full */ XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32-state->memsize); state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64+0)); state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64+1)); state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64+2)); state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64+3)); p += 32-state->memsize; state->memsize = 0; } if (p+32 <= bEnd) { const xxh_u8* const limit = bEnd - 32; xxh_u64 v1 = state->v1; xxh_u64 v2 = state->v2; xxh_u64 v3 = state->v3; xxh_u64 v4 = state->v4; do { v1 = XXH64_round(v1, XXH_readLE64(p)); p+=8; v2 = XXH64_round(v2, XXH_readLE64(p)); p+=8; v3 = XXH64_round(v3, XXH_readLE64(p)); p+=8; v4 = XXH64_round(v4, XXH_readLE64(p)); p+=8; } while (p<=limit); state->v1 = v1; state->v2 = v2; state->v3 = v3; state->v4 = v4; } if (p < bEnd) { XXH_memcpy(state->mem64, p, (size_t)(bEnd-p)); state->memsize = (unsigned)(bEnd-p); } } return XXH_OK; } XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* state) { xxh_u64 h64; if (state->total_len >= 32) { xxh_u64 const v1 = state->v1; xxh_u64 const v2 = state->v2; xxh_u64 const v3 = state->v3; xxh_u64 const v4 = state->v4; h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); h64 = XXH64_mergeRound(h64, v1); h64 = XXH64_mergeRound(h64, v2); h64 = XXH64_mergeRound(h64, v3); h64 = XXH64_mergeRound(h64, v4); } else { h64 = state->v3 /*seed*/ + XXH_PRIME64_5; } h64 += (xxh_u64) state->total_len; return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned); } /******* Canonical representation *******/ XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash) { XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash); memcpy(dst, &hash, sizeof(*dst)); } XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src) { return XXH_readBE64(src); } /* ********************************************************************* * XXH3 * New generation hash designed for speed on small keys and vectorization ************************************************************************ */ #include "xxh3.h" #endif /* XXH_NO_LONG_LONG */ #endif /* XXH_IMPLEMENTATION */ #if defined (__cplusplus) } #endif ================================================ FILE: Include/WAVM/LLVMJIT/LLVMJIT.h ================================================ #pragma once #include #include #include #include #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Platform/CPU.h" #include "WAVM/RuntimeABI/RuntimeABI.h" // Forward declarations namespace WAVM { namespace IR { struct Module; struct UntaggedValue; struct FeatureSpec; enum class CallingConvention; }} namespace WAVM { namespace Runtime { struct ContextRuntimeData; struct ExceptionType; struct Function; struct Instance; }} namespace WAVM { namespace LLVMJIT { enum class TargetArch { x86_64, aarch64 }; enum class TargetOS { // "linux_" avoids conflict with the "linux" preprocessor macro. linux_, macos, windows }; struct TargetSpec { TargetArch arch; TargetOS os; std::string cpu; union { Platform::X86CPUFeatures> x86FeatureOverrides; Platform::AArch64CPUFeatures> aarch64FeatureOverrides; }; TargetSpec() : arch(TargetArch::x86_64), os(TargetOS::windows), x86FeatureOverrides{} {} }; WAVM_API std::string asString(const TargetSpec& targetSpec); enum class TargetValidationResult { valid, invalidTargetSpec, unsupportedArchitecture, x86CPUDoesNotSupportSSE41, wavmDoesNotSupportSIMDOnArch, memory64Requires64bitTarget, table64Requires64bitTarget }; WAVM_API TargetSpec getHostTargetSpec(); WAVM_API TargetValidationResult validateTarget(const TargetSpec& targetSpec, const IR::FeatureSpec& featureSpec); struct Version { Uptr llvmMajor; Uptr llvmMinor; Uptr llvmPatch; Uptr llvmjitVersion; }; WAVM_API Version getVersion(); // Compile a module to object code with the host target spec. // Cannot fail if validateTarget(targetSpec, irModule.featureSpec) == valid. WAVM_API std::vector compileModule(const IR::Module& irModule, const TargetSpec& targetSpec); WAVM_API std::string emitLLVMIR(const IR::Module& irModule, const TargetSpec& targetSpec, bool optimize); WAVM_API std::string disassembleObject(const TargetSpec& targetSpec, const std::vector& objectBytes); // Result of disassembling a single instruction. struct DisassembledInstruction { Uptr numBytes; // Number of bytes consumed (0 if disassembly failed) char mnemonic[256]; // Human-readable instruction text }; // Opaque disassembler object. Pre-create one to avoid per-call setup costs. struct Disassembler; // Create a disassembler for the given target. Thread-safe to call concurrently. WAVM_API std::shared_ptr createDisassembler(const TargetSpec& targetSpec); // Disassemble a single instruction. If the disassembler mutex can't be acquired // (e.g. called from a signal handler while another thread holds it), returns // a result with numBytes == 0. WAVM_API DisassembledInstruction disassembleInstruction(const std::shared_ptr& disasm, const U8* bytes, Uptr numBytes); // Convenience overload that creates a temporary disassembler. WAVM_API DisassembledInstruction disassembleInstruction(const TargetSpec& targetSpec, const U8* bytes, Uptr numBytes); // Find the first instruction boundary at or after targetOffset within a code region. // Handles architecture differences: on fixed-width ISAs (AArch64), aligns directly; // on variable-width ISAs (x86-64), disassembles from the start. // Returns the offset of the instruction boundary. WAVM_API Uptr findInstructionBoundary(const std::shared_ptr& disasm, const U8* code, Uptr codeSize, Uptr targetOffset); // An opaque type that can be used to reference a loaded JIT module. struct Module; // // Structs that are passed to loadModule to bind undefined symbols in object code to values. // struct InstanceBinding { Uptr id; }; struct FunctionBinding { const void* code; }; struct TableBinding { Uptr id; }; struct MemoryBinding { Uptr id; }; struct GlobalBinding { IR::GlobalType type; union { const IR::UntaggedValue* immutableValuePointer; Uptr mutableGlobalIndex; }; }; struct ExceptionTypeBinding { Uptr id; }; // Loads a module from object code, and binds its undefined symbols to the provided bindings. WAVM_API std::shared_ptr loadModule( const std::vector& objectFileBytes, HashMap&& wavmIntrinsicsExportMap, std::vector&& types, std::vector&& functionImports, std::vector&& tables, std::vector&& memories, std::vector&& globals, std::vector&& exceptionTypes, InstanceBinding instance, Uptr tableReferenceBias, const std::vector& functionDefMutableDatas, std::string&& debugName); struct InstructionSource { Runtime::Function* function; Uptr instructionIndex; }; // Finds the JIT function(s) and instruction index at the given address. // Writes to a fixed-size array, returns number of entries (innermost first). // Signal-safe: no heap allocations. WAVM_API Uptr getInstructionSourceByAddress(Uptr address, InstructionSource* outSources, Uptr maxSources); // Generates an invoke thunk for a specific function type. WAVM_API Runtime::InvokeThunkPointer getInvokeThunk(IR::FunctionType functionType); }} ================================================ FILE: Include/WAVM/Logging/Logging.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Defines.h" // Debug logging. namespace WAVM { namespace Log { // Allow filtering the logging by category. enum Category { error, debug, metrics, output, traceValidation, traceCompilation, traceUnwind, traceObjectCache, traceLinking, traceDwarf, num }; WAVM_API void setCategoryEnabled(Category category, bool enable); WAVM_API bool isCategoryEnabled(Category category); // Print some categorized, formatted string, and flush the output. Newline is not included. WAVM_API void printf(Category category, const char* format, ...) WAVM_VALIDATE_AS_PRINTF(2, 3); WAVM_API void vprintf(Category category, const char* format, va_list argList); // Set a function that is called whenever something is logged, instead of writing it to // stdout/stderr. setOutputFunction(nullptr) will reset the output function to the initial // state, and redirect log messages to stdout/stderr again. // outputFunction may be called from any thread without any locking, so it must be thread-safe. typedef void OutputFunction(Category category, const char* message, Uptr numChars); WAVM_API void setOutputFunction(OutputFunction* outputFunction); }} ================================================ FILE: Include/WAVM/NFA/NFA.h ================================================ #pragma once #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/DenseStaticIntSet.h" namespace WAVM { namespace NFA { // A set of characters. typedef DenseStaticIntSet CharSet; // An index of a DFA state. A negative index indicates an "accepting" or terminal state. typedef I16 StateIndex; // A flag that's set on terminal DFA state transitions that don't consume any input inline constexpr StateIndex edgeDoesntConsumeInputFlag = 0x4000; // An implicit terminal state that indicates the DFA didn't recognize the input inline constexpr StateIndex unmatchedCharacterTerminal = StateIndex(0x8000); // Should be the largest negative number that doesn't have edgeDoesntConsumeInputFlag set. inline constexpr StateIndex maximumTerminalStateIndex = StateIndex(0xbfff); // Creates an abstract object that holds the state of an under-construction BFA. struct Builder; WAVM_API Builder* createBuilder(); // Functions to add states and edges to the under-construction DFA. WAVM_API StateIndex addState(Builder* builder); WAVM_API void addEdge(Builder* builder, StateIndex initialState, const CharSet& predicate, StateIndex nextState); WAVM_API void addEpsilonEdge(Builder* builder, StateIndex initialState, StateIndex nextState); WAVM_API StateIndex getNonTerminalEdge(Builder* builder, StateIndex initialState, char c); // Dumps the NFA's states and edges to the GraphViz .dot format. WAVM_API std::string dumpNFAGraphViz(const Builder* builder); // Encapsulates a NFA that has been translated into a DFA that can be efficiently executed. struct WAVM_API Machine { Machine() : stateAndOffsetToNextStateMap(nullptr), numClasses(0), numStates(0) {} ~Machine(); Machine(Machine&& inMachine) noexcept { moveFrom(std::move(inMachine)); } void operator=(Machine&& inMachine) noexcept { moveFrom(std::move(inMachine)); } // Constructs a DFA from the abstract builder object (which is destroyed). Machine(Builder* inBuilder); // Feeds characters into the DFA until it reaches a terminal state. // Upon reaching a terminal state, the state is returned, and the nextChar pointer // is updated to point to the first character not consumed by the DFA. inline StateIndex feed(const char*& nextChar) const { Iptr state = 0; do { state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[0]]]; if(state < 0) { nextChar += 1; break; } state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[1]]]; if(state < 0) { nextChar += 2; break; } state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[2]]]; if(state < 0) { nextChar += 3; break; } state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[3]]]; nextChar += 4; } while(state >= 0); if(state & edgeDoesntConsumeInputFlag) { --nextChar; state &= ~edgeDoesntConsumeInputFlag; } return (StateIndex)state; } // Dumps the DFA's states and edges to the GraphViz .dot format. std::string dumpDFAGraphViz() const; private: typedef I16 InternalStateIndex; static constexpr InternalStateIndex internalMaxStates = INT16_MAX; U32 charToOffsetMap[256]; InternalStateIndex* stateAndOffsetToNextStateMap; Uptr numClasses; Uptr numStates; void moveFrom(Machine&& inMachine) noexcept; }; }} ================================================ FILE: Include/WAVM/ObjectCache/ObjectCache.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace Runtime { struct ObjectCacheInterface; }} namespace WAVM { namespace ObjectCache { enum class OpenResult { success, doesNotExist, notDirectory, notAccessible, invalidDatabase, tooManyReaders, }; WAVM_API OpenResult open(const char* path, Uptr maxBytes, U64 codeKey, std::shared_ptr& outObjectCache); }} ================================================ FILE: Include/WAVM/ObjectLinker/ObjectLinker.h ================================================ #pragma once #include #include #include #include "WAVM/DWARF/Sections.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Platform/Unwind.h" namespace WAVM { namespace ObjectLinker { struct LinkResult { U8* imageBase = nullptr; Uptr numImagePages = 0; Uptr numCodeBytes = 0; Uptr numReadOnlyBytes = 0; Uptr numReadWriteBytes = 0; Platform::UnwindInfo unwindInfo; struct Symbol { std::string name; Uptr address; Uptr size; }; std::vector definedSymbols; DWARF::Sections dwarf; }; // Callback to allocate and commit virtual pages for the linked image. // If null, linkObject uses the default Platform::allocateVirtualPages path. using PageAllocator = std::function; // Links a single object file. All external symbols must be provided in // importedSymbolMap (caller merges runtime symbols + module imports). // Fatal error on unresolved symbols or unsupported relocations. WAVM_API void linkObject(U8* objectBytes, Uptr objectNumBytes, const HashMap& importedSymbolMap, LinkResult& outResult, PageAllocator allocatePages = nullptr); }} ================================================ FILE: Include/WAVM/Platform/Alloca.h ================================================ #pragma once #ifdef _MSC_VER #include // IWYU pragma: export #else #include // IWYU pragma: export #endif ================================================ FILE: Include/WAVM/Platform/CPU.h ================================================ #pragma once #include #include #include #if defined(_M_X64) || defined(__x86_64__) #define WAVM_CPU_ARCH_X86 1 #define WAVM_CPU_ARCH_ARM 0 #elif defined(_M_IX86) || defined(__i386__) #define WAVM_CPU_ARCH_X86 1 #define WAVM_CPU_ARCH_ARM 0 #elif defined(_M_ARM64) || defined(__aarch64__) #define WAVM_CPU_ARCH_X86 0 #define WAVM_CPU_ARCH_ARM 1 #endif // X86 CPU feature list. V(fieldName, cliName) // cliName is used for CLI parsing and LLVM target attribute names. #define WAVM_ENUM_X86_CPU_FEATURES(V) \ V(sse, "sse") \ V(sse2, "sse2") \ V(sse3, "sse3") \ V(ssse3, "ssse3") \ V(sse4_1, "sse4.1") \ V(sse4_2, "sse4.2") \ V(avx, "avx") \ V(avx2, "avx2") \ V(popcnt, "popcnt") \ V(lzcnt, "lzcnt") \ V(bmi1, "bmi") \ V(bmi2, "bmi2") \ V(fma, "fma") \ V(avx512f, "avx512f") \ V(avx512bw, "avx512bw") \ V(avx512dq, "avx512dq") \ V(avx512vl, "avx512vl") // AArch64 CPU feature list. V(fieldName, cliName) // NEON is baseline on AArch64, so not included. #define WAVM_ENUM_AARCH64_CPU_FEATURES(V) V(lse, "lse") #define WAVM_CPU_FEATURE_FIELD_(fieldName, cliName) T fieldName; #define WAVM_CPU_FEATURE_MAP_(fieldName, cliName) result.fieldName = f(fieldName); #define WAVM_CPU_FEATURE_FOREACH_(fieldName, cliName) f(cliName, fieldName); #define WAVM_DECLARE_CPU_FEATURES(Name, FEATURES) \ template struct Name \ { \ FEATURES(WAVM_CPU_FEATURE_FIELD_) \ \ template auto mapFeatures(F&& f) const \ { \ using U = decltype(f(std::declval())); \ Name result; \ FEATURES(WAVM_CPU_FEATURE_MAP_) \ return result; \ } \ \ template void forEachFeature(F&& f) { FEATURES(WAVM_CPU_FEATURE_FOREACH_) } \ \ template void forEachFeature(F&& f) const \ { \ FEATURES(WAVM_CPU_FEATURE_FOREACH_) \ } \ \ friend std::string asString(const Name& features) \ { \ std::string result; \ const char* sep = ""; \ features.forEachFeature([&](const char* name, const T& value) { \ if constexpr(std::is_same_v) \ { \ result += sep; \ result += (value ? '+' : '-'); \ result += name; \ sep = " "; \ } \ else \ { \ if(value.has_value()) \ { \ result += sep; \ result += (*value ? '+' : '-'); \ result += name; \ sep = " "; \ } \ } \ }); \ return result; \ } \ }; #define WAVM_CPU_REGISTER_ENUM_(enumName, displayName) enumName, // clang-format off // X86 CPU register list. V(enumName, displayName) #define WAVM_ENUM_X86_CPU_REGISTERS(V) \ V(RAX, "RAX") V(RBX, "RBX") V(RCX, "RCX") V(RDX, "RDX") \ V(RSI, "RSI") V(RDI, "RDI") V(RBP, "RBP") V(RSP, "RSP") \ V(R8, "R8") V(R9, "R9") V(R10, "R10") V(R11, "R11") \ V(R12, "R12") V(R13, "R13") V(R14, "R14") V(R15, "R15") \ V(RIP, "RIP") // AArch64 CPU register list. V(enumName, displayName) #define WAVM_ENUM_AARCH64_CPU_REGISTERS(V) \ V(X0, "X0") V(X1, "X1") V(X2, "X2") V(X3, "X3") \ V(X4, "X4") V(X5, "X5") V(X6, "X6") V(X7, "X7") \ V(X8, "X8") V(X9, "X9") V(X10, "X10") V(X11, "X11") \ V(X12, "X12") V(X13, "X13") V(X14, "X14") V(X15, "X15") \ V(X16, "X16") V(X17, "X17") V(X18, "X18") V(X19, "X19") \ V(X20, "X20") V(X21, "X21") V(X22, "X22") V(X23, "X23") \ V(X24, "X24") V(X25, "X25") V(X26, "X26") V(X27, "X27") \ V(X28, "X28") V(FP, "FP") V(LR, "LR") V(SP, "SP") V(PC, "PC") // clang-format on #if WAVM_CPU_ARCH_X86 #define WAVM_ENUM_HOST_CPU_REGISTERS WAVM_ENUM_X86_CPU_REGISTERS #elif WAVM_CPU_ARCH_ARM #define WAVM_ENUM_HOST_CPU_REGISTERS WAVM_ENUM_AARCH64_CPU_REGISTERS #endif namespace WAVM { namespace Platform { WAVM_DECLARE_CPU_FEATURES(X86CPUFeatures, WAVM_ENUM_X86_CPU_FEATURES) WAVM_DECLARE_CPU_FEATURES(AArch64CPUFeatures, WAVM_ENUM_AARCH64_CPU_FEATURES) // clang-format off enum class X86CPURegister { WAVM_ENUM_X86_CPU_REGISTERS(WAVM_CPU_REGISTER_ENUM_) IP = RIP, // Portable alias SP = RSP, // Portable alias }; enum class AArch64CPURegister { WAVM_ENUM_AARCH64_CPU_REGISTERS(WAVM_CPU_REGISTER_ENUM_) IP = PC, // Portable alias }; // clang-format on #if WAVM_CPU_ARCH_X86 using HostCPURegister = X86CPURegister; using HostCPUFeatures = X86CPUFeatures; #elif WAVM_CPU_ARCH_ARM using HostCPURegister = AArch64CPURegister; using HostCPUFeatures = AArch64CPUFeatures; #endif WAVM_API HostCPUFeatures getHostCPUFeatures(); }} #undef WAVM_DECLARE_CPU_FEATURES #undef WAVM_CPU_FEATURE_FIELD_ #undef WAVM_CPU_FEATURE_MAP_ #undef WAVM_CPU_FEATURE_FOREACH_ #undef WAVM_CPU_REGISTER_ENUM_ ================================================ FILE: Include/WAVM/Platform/Clock.h ================================================ #pragma once #include "WAVM/Inline/Time.h" namespace WAVM { namespace Platform { enum class Clock { // The real-time since 1970/1/1 00:00:00 UTC. realtime, // A clock with an arbitrary origin that monotonically increases, and so may be used as an // absolute time for wait timeouts. monotonic, // The amount of CPU time used by this process. processCPUTime }; WAVM_API Time getClockTime(Clock clock); WAVM_API Time getClockResolution(Clock clock); }} ================================================ FILE: Include/WAVM/Platform/ConditionVariable.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Time.h" namespace WAVM { namespace Platform { struct Mutex; // Platform-independent condition variables. struct ConditionVariable { WAVM_API ConditionVariable(); WAVM_API ~ConditionVariable(); // Don't allow copying or moving a ConditionVariable. ConditionVariable(const ConditionVariable&) = delete; ConditionVariable(ConditionVariable&&) = delete; void operator=(const ConditionVariable&) = delete; void operator=(ConditionVariable&&) = delete; // Atomically unlocks the mutex and waits for the condition variable to be signaled. // Returns true if the condition variable was signaled, false if the wait timed out. WAVM_API bool wait(Mutex& mutex, Time waitDuration); // Wakes one thread waiting on the condition variable. WAVM_API void signal(); // Wakes all threads waiting on the condition variable. WAVM_API void broadcast(); private: struct alignas(WAVM_PLATFORM_COND_ALIGN) CondData { U8 data[WAVM_PLATFORM_COND_SIZE]; } condData; }; }} ================================================ FILE: Include/WAVM/Platform/Defines.h ================================================ #pragma once #include "WAVM/Inline/Config.h" #define WAVM_SUPPRESS_UNUSED(variable) (void)(variable); // Compiler-specific attributes that both GCC and MSVC implement. #ifdef _MSC_VER #define WAVM_FORCEINLINE __forceinline #define WAVM_FORCENOINLINE __declspec(noinline) #define WAVM_PACKED_STRUCT(definition) \ __pragma(pack(push, 1)) definition; \ __pragma(pack(pop)) #elif defined(__GNUC__) #define WAVM_FORCEINLINE inline __attribute__((always_inline)) #define WAVM_FORCENOINLINE __attribute__((noinline)) #define WAVM_PACKED_STRUCT(definition) definition __attribute__((packed)); #else #define WAVM_FORCEINLINE #define WAVM_FORCENOINLINE #define WAVM_PACKED_STRUCT(definition) definition #endif // GCC/Clang-only attributes. #if defined(__GNUC__) || defined(__clang__) #define WAVM_NO_ASAN __attribute__((no_sanitize_address)) #define WAVM_RETURNS_TWICE __attribute__((returns_twice)) #define WAVM_VALIDATE_AS_PRINTF(formatStringIndex, firstFormatArgIndex) \ __attribute__((format(printf, formatStringIndex, firstFormatArgIndex))) #define WAVM_UNLIKELY(condition) __builtin_expect(condition, 0) #else #define WAVM_NO_ASAN #define WAVM_RETURNS_TWICE #define WAVM_VALIDATE_AS_PRINTF(formatStringIndex, firstFormatArgIndex) #define WAVM_UNLIKELY(condition) (condition) #endif // The attribute to disable UBSAN on a function is different between GCC and Clang. #if defined(__clang__) && WAVM_ENABLE_UBSAN #define WAVM_NO_UBSAN __attribute__((no_sanitize("undefined"))) #elif defined(__GNUC__) && WAVM_ENABLE_UBSAN #define WAVM_NO_UBSAN __attribute__((no_sanitize_undefined)) #else #define WAVM_NO_UBSAN #endif // WAVM_DEBUG_TRAP macro: breaks a debugger if one is attached, or aborts the program if not. #ifdef _MSC_VER #define WAVM_DEBUG_TRAP() __debugbreak() #elif defined(__GNUC__) && !WAVM_ENABLE_LIBFUZZER && (defined(__i386__) || defined(__x86_64__)) #define WAVM_DEBUG_TRAP() __asm__ __volatile__("int3") #elif defined(__GNUC__) && !WAVM_ENABLE_LIBFUZZER && defined(__aarch64__) // See https://github.com/scottt/debugbreak/blob/master/debugbreak.h#L101 #define WAVM_DEBUG_TRAP() __asm__ __volatile__(".inst 0xe7f001f0") #else // Use abort() instead of trap instructions when fuzzing, since // libfuzzer doesn't handle the breakpoint trap. #include #define WAVM_DEBUG_TRAP() abort() #endif // Define WAVM_DEBUG to 0 or 1 depending on whether it's a debug build. #if defined(NDEBUG) #define WAVM_DEBUG 0 #else #define WAVM_DEBUG 1 #endif // Define a macro to align a struct that is valid in C99: don't use C++ alignas or C11 _Alignas. #if defined(__GNUC__) #define WAVM_ALIGNED_STRUCT(alignment, def) def __attribute__((aligned(alignment))); #elif defined(_MSC_VER) #define WAVM_ALIGNED_STRUCT(alignment, def) __declspec(align(alignment)) def; #else #error Please add a definition of WAVM_ALIGNED_STRUCT for your toolchain. #endif // Provide a macro to wrap calls to the C standard library functions that disables the MSVC error // that they should be replaced by the safer but unportable MSVC secure CRT functions. #ifdef _MSC_VER #define WAVM_SCOPED_DISABLE_SECURE_CRT_WARNINGS(code) \ __pragma(warning(push)) __pragma(warning(disable : 4996)) code __pragma(warning(pop)) #else #define WAVM_SCOPED_DISABLE_SECURE_CRT_WARNINGS(code) code #endif // Macro to suppress warnings about self-assignment and self-move (for testing those operations). // -Wself-assign and -Wself-move are Clang-only warnings. #if defined(__clang__) #define WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(code) \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wself-assign\"") \ _Pragma("GCC diagnostic ignored \"-Wself-move\"") code _Pragma("GCC diagnostic pop") #elif defined(__GNUC__) && __GNUC__ >= 13 #define WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(code) \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wself-move\"") \ code _Pragma("GCC diagnostic pop") #else #define WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(code) code #endif // Suppress GCC's -Wdangling-reference false positives on functions that return a reference that // does not alias any temporary argument. The warning was added in GCC 13; the [[gnu::no_dangling]] // attribute was added in GCC 14, but per the C++ standard GCC 13 should silently ignore unknown // [[vendor::attr]] attributes. #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 13 #define WAVM_NO_DANGLING [[gnu::no_dangling]] #else #define WAVM_NO_DANGLING #endif // Suppress warnings when falling through to another case level in a switch statement. #if defined(__has_cpp_attribute) && __has_cpp_attribute(fallthrough) #define WAVM_FALLTHROUGH [[fallthrough]] #elif defined(__has_attribute) #if __has_attribute(__fallthrough__) #define WAVM_FALLTHROUGH __attribute__((fallthrough)) #endif #endif #ifndef WAVM_FALLTHROUGH #define WAVM_FALLTHROUGH \ do \ { \ } while(0) /* fallthrough */ #endif ================================================ FILE: Include/WAVM/Platform/Diagnostics.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/FixedString.h" #include "WAVM/Inline/StringBuilder.h" namespace WAVM { namespace Platform { // Describes the source of an instruction in a native module. // Uses fixed-capacity strings for signal safety (no heap allocation). struct InstructionSource { FixedString<256> module; FixedString<256> function; Uptr instructionOffset; InstructionSource() : instructionOffset(0) {} friend std::string asString(const InstructionSource& source) { std::string result = source.module.c_str(); if(!source.function.empty()) { result += '!'; result += source.function.c_str(); } result += '+'; result += std::to_string(source.instructionOffset); return result; } // Signal-safe formatting into a StringBuilderBase. friend void appendToString(StringBuilderBase& stringBuilder, const InstructionSource& source) { if(!source.function.empty()) { stringBuilder.appendf("%s!%s+%" WAVM_PRIuPTR, source.module.c_str(), source.function.c_str(), source.instructionOffset); } else { stringBuilder.appendf( "%s+%" WAVM_PRIuPTR, source.module.c_str(), source.instructionOffset); } } }; // Looks up the source of an instruction from a native module. WAVM_API bool getInstructionSourceByAddress(Uptr ip, InstructionSource& outSource); // Prints a profile of heap and virtual memory allocations. WAVM_API void printMemoryProfile(); WAVM_API void registerVirtualAllocation(Uptr numBytes); WAVM_API void deregisterVirtualAllocation(Uptr numBytes); }} ================================================ FILE: Include/WAVM/Platform/Error.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" namespace WAVM { namespace Platform { struct AssertMetadata { const char* condition; const char* file; U32 line; }; WAVM_API void handleAssertionFailure(const AssertMetadata& metadata); [[noreturn]] WAVM_API void handleFatalError(const char* messageFormat, bool printCallStack, va_list varArgs); // Reports an error with a call stack dump to stderr. Non-fatal: returns to caller. WAVM_API void reportErrorWithCallStack(Uptr numOmittedFramesFromTop, const char* messageFormat, ...); struct UnwindState; // Forward declaration; defined in Unwind.h. // Callback for error reporting. Receives the pre-formatted message, whether to print // a call stack, and an UnwindState positioned past internal error-handling frames. // The handler is responsible for all output (message and call stack). typedef void (*ErrorHandler)(const char* message, bool printCallStack, UnwindState&& state); // Sets a process-wide error handler used by handleFatalError, handleAssertionFailure, and // reportErrorWithCallStack. If no handler is set, errors are printed to stderr. WAVM_API void setErrorHandler(ErrorHandler handler); }} ================================================ FILE: Include/WAVM/Platform/File.h ================================================ #pragma once #include #include "WAVM/VFS/VFS.h" namespace WAVM { namespace Platform { enum class StdDevice { in, out, err, }; WAVM_API VFS::VFD* getStdFD(StdDevice device); WAVM_API std::string getCurrentWorkingDirectory(); struct HostFS : VFS::FileSystem { // HostFS is intended to be a singleton, so prevent users from deleting it. protected: virtual ~HostFS() override {} }; WAVM_API HostFS& getHostFS(); }} ================================================ FILE: Include/WAVM/Platform/Intrinsic.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" #ifdef _WIN32 #include #endif // __has_builtin is a Clang-specific way to test whether a builtin is supported #ifndef __has_builtin #define __has_builtin(x) 0 #endif namespace WAVM { // The number of bytes in a cache line: assume 64 for now. inline constexpr Uptr numCacheLineBytes = 64; // countLeadingZeroes returns the number of leading zeroes, or the bit width of the input if no // bits are set. inline U32 countLeadingZeroes(U32 value) { #ifdef _WIN32 // BitScanReverse returns 0 if the input is 0. unsigned long result; return _BitScanReverse(&result, value) ? (31 - result) : 32; #elif defined(__GNUC__) return value == 0 ? 32 : __builtin_clz(value); #else #error Unsupported compiler #endif } inline U64 countLeadingZeroes(U64 value) { #ifdef _WIN64 unsigned long result; return _BitScanReverse64(&result, value) ? (63 - result) : 64; #elif defined(__GNUC__) return value == 0 ? 64 : __builtin_clzll(value); #else U64 result = countLeadingZeroes(U32(value >> 32)); if(result == 32) { result += countLeadingZeroes(U32(value)); } return result; #endif } // countTrailingZeroes returns the number of trailing zeroes, or the bit width of the input if // no bits are set. inline U32 countTrailingZeroes(U32 value) { #ifdef _WIN32 // BitScanForward returns 0 if the input is 0. unsigned long result; return _BitScanForward(&result, value) ? result : 32; #elif defined(__GNUC__) return value == 0 ? 32 : __builtin_ctz(value); #else #error Unsupported compiler #endif } inline U64 countTrailingZeroes(U64 value) { #ifdef _WIN64 unsigned long result; return _BitScanForward64(&result, value) ? result : 64; #elif defined(__GNUC__) return value == 0 ? 64 : __builtin_ctzll(value); #else U64 result = countTrailingZeroes(U32(value)); if(result == 32) { result += countTrailingZeroes(U32(value >> 32)); } return result; #endif } inline U64 floorLogTwo(U64 value) { return value <= 1 ? 0 : 63 - countLeadingZeroes(value); } inline U32 floorLogTwo(U32 value) { return value <= 1 ? 0 : 31 - countLeadingZeroes(value); } inline U64 ceilLogTwo(U64 value) { return value <= 1 ? 0 : 63 - countLeadingZeroes(value * 2 - 1); } inline U32 ceilLogTwo(U32 value) { return value <= 1 ? 0 : 31 - countLeadingZeroes(value * 2 - 1); } constexpr inline U64 branchlessMin(U64 value, U64 maxValue) { return value < maxValue ? value : maxValue; } constexpr inline U32 branchlessMin(U32 value, U32 maxValue) { return value < maxValue ? value : maxValue; } #if __GNUC__ >= 5 || __has_builtin(__builtin_add_overflow) inline bool addAndCheckOverflow(U64 a, U64 b, U64* out) { return __builtin_add_overflow(a, b, out); } inline bool addAndCheckOverflow(I64 a, I64 b, I64* out) { return __builtin_add_overflow(a, b, out); } #else inline bool addAndCheckOverflow(U64 a, U64 b, U64* out) { *out = a + b; return *out < a; } inline bool addAndCheckOverflow(I64 a, I64 b, I64* out) { // Do the add with U64 because signed overflow is UB. *out = I64(U64(a) + U64(b)); return (a < 0 && b < 0 && *out > 0) || (a > 0 && b > 0 && *out < 0); } #endif // Byte-wise memcpy and memset: these are different from the C library versions because in the // event of a trap while reading/writing memory, they guarantee that every byte preceding the // byte that trapped will have been written. // On X86 they use "rep movsb" (for copy) and "rep stosb" (for set) which are microcoded on // Intel Ivy Bridge and later processors, and supposedly competitive with the C library // functions. On other architectures, it will fall back to a C loop, which is not likely to be // competitive with the C library function. inline void bytewiseMemCopy(volatile U8* dest, const U8* source, Uptr numBytes) { #if defined(_WIN32) && (defined(_M_X64) || defined(_M_IX86)) __movsb((U8*)dest, source, numBytes); #elif defined(__i386__) || defined(__x86_64__) asm volatile("rep movsb" : "=D"(dest), "=S"(source), "=c"(numBytes) : "0"(dest), "1"(source), "2"(numBytes) : "memory"); #else for(Uptr index = 0; index < numBytes; ++index) { dest[index] = source[index]; } #endif } inline void bytewiseMemCopyReverse(volatile U8* dest, const U8* source, Uptr numBytes) { for(Uptr index = 0; index < numBytes; ++index) { dest[numBytes - index - 1] = source[numBytes - index - 1]; } } inline void bytewiseMemSet(volatile U8* dest, U8 value, Uptr numBytes) { #if defined(_WIN32) && (defined(_M_X64) || defined(_M_IX86)) __stosb((U8*)dest, value, numBytes); #elif defined(__i386__) || defined(__x86_64__) asm volatile("rep stosb" : "=D"(dest), "=a"(value), "=c"(numBytes) : "0"(dest), "1"(value), "2"(numBytes) : "memory"); #else for(Uptr index = 0; index < numBytes; ++index) { dest[index] = value; } #endif } } ================================================ FILE: Include/WAVM/Platform/Memory.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace Platform { // Describes allowed memory accesses. enum class MemoryAccess { none, readOnly, readWrite, readExecute, readWriteExecute }; // Returns the base 2 logarithm of the number of bytes in the smallest virtual page. WAVM_API Uptr getBytesPerPageLog2(); // Returns the number of bytes in the smallest virtual page. inline Uptr getBytesPerPage() { return Uptr(1) << getBytesPerPageLog2(); } // Allocates virtual addresses without commiting physical pages to them. // Returns the base virtual address of the allocated addresses, or nullptr if the virtual // address space has been exhausted. WAVM_API U8* allocateVirtualPages(Uptr numPages); // Allocates virtual addresses without commiting physical pages to them. // Returns the base virtual address of the allocated addresses, or nullptr if the virtual // address space has been exhausted. WAVM_API U8* allocateAlignedVirtualPages(Uptr numPages, Uptr alignmentLog2, U8*& outUnalignedBaseAddress); // Commits physical memory to the specified virtual pages. // baseVirtualAddress must be a multiple of the preferred page size. // Return true if successful, or false if physical memory has been exhausted. WAVM_API bool commitVirtualPages(U8* baseVirtualAddress, Uptr numPages, MemoryAccess access = MemoryAccess::readWrite); // Changes the allowed access to the specified virtual pages. // baseVirtualAddress must be a multiple of the preferred page size. // Return true if successful, or false if the access-level could not be set. WAVM_API bool setVirtualPageAccess(U8* baseVirtualAddress, Uptr numPages, MemoryAccess access); // Decommits the physical memory that was committed to the specified virtual pages. // baseVirtualAddress must be a multiple of the preferred page size. WAVM_API void decommitVirtualPages(U8* baseVirtualAddress, Uptr numPages); // Frees virtual addresses. baseVirtualAddress must also be the address returned by // allocateVirtualPages. WAVM_API void freeVirtualPages(U8* baseVirtualAddress, Uptr numPages); // Frees an aligned virtual address block. unalignedBaseAddress must be the unaligned base // address returned in the outUnalignedBaseAddress parameter of a call to // allocateAlignedVirtualPages. WAVM_API void freeAlignedVirtualPages(U8* unalignedBaseAddress, Uptr numPages, Uptr alignmentLog2); // Flushes the CPU instruction cache for the given address range. // Must be called after writing code to executable memory (required on ARM, no-op on x86). WAVM_API void flushInstructionCache(U8* baseAddress, Uptr numBytes); // Gets memory usage information for this process. WAVM_API Uptr getPeakMemoryUsageBytes(); }} ================================================ FILE: Include/WAVM/Platform/Mutex.h ================================================ #pragma once #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #ifdef _WIN32 #include #endif namespace WAVM { namespace Platform { // Platform-independent mutexes. struct Mutex { WAVM_API Mutex(); WAVM_API ~Mutex(); // Don't allow copying or moving a Mutex. Mutex(const Mutex&) = delete; Mutex(Mutex&&) = delete; void operator=(const Mutex&) = delete; void operator=(Mutex&&) = delete; WAVM_API void lock(); WAVM_API void unlock(); #if WAVM_ENABLE_ASSERTS WAVM_API bool isLockedByCurrentThread(); #endif // Scoped lock: automatically unlocks when destructed. struct Lock { Lock() : mutex(nullptr) {} Lock(Mutex& inMutex) : mutex(&inMutex) { mutex->lock(); } ~Lock() { unlock(); } void unlock() { if(mutex) { mutex->unlock(); mutex = nullptr; } } private: Mutex* mutex; }; friend struct ConditionVariable; private: struct alignas(WAVM_PLATFORM_MUTEX_ALIGN) LockData { U8 data[WAVM_PLATFORM_MUTEX_SIZE]; } lockData; #if WAVM_ENABLE_ASSERTS #if defined(_WIN32) std::atomic lockingThreadId{0}; #else bool isLocked; #endif #endif }; }} #if WAVM_ENABLE_ASSERTS #define WAVM_ASSERT_MUTEX_IS_LOCKED_BY_CURRENT_THREAD(mutex) \ WAVM_ASSERT((mutex).isLockedByCurrentThread()) #else #define WAVM_ASSERT_MUTEX_IS_LOCKED_BY_CURRENT_THREAD(mutex) WAVM_ASSERT(&(mutex) == &(mutex)) #endif ================================================ FILE: Include/WAVM/Platform/RWMutex.h ================================================ #pragma once #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" namespace WAVM { namespace Platform { // Platform-independent reader-writer mutexes. // Allows more than 1 shared lock at a time, as long as there are no exclusive locks. struct RWMutex { enum LockShareability { exclusive = 0, shareable = 1, }; WAVM_API RWMutex(); WAVM_API ~RWMutex(); // Don't allow copying or moving a RWMutex. RWMutex(const RWMutex&) = delete; RWMutex(RWMutex&&) = delete; void operator=(const RWMutex&) = delete; void operator=(RWMutex&&) = delete; WAVM_API void lock(LockShareability shareability); WAVM_API void unlock(LockShareability shareability); #if WAVM_ENABLE_ASSERTS WAVM_API bool isExclusivelyLockedByCurrentThread(); #endif // Scoped lock: automatically unlocks when destructed. struct Lock { Lock() : mutex(nullptr) {} Lock(RWMutex& inMutex, LockShareability inShareability) : mutex(&inMutex), shareability(inShareability) { mutex->lock(shareability); } ~Lock() { unlock(); } void unlock() { if(mutex) { mutex->unlock(shareability); mutex = nullptr; } } private: RWMutex* mutex; LockShareability shareability; }; struct ExclusiveLock : Lock { ExclusiveLock() = default; ExclusiveLock(RWMutex& inMutex) : Lock(inMutex, exclusive) {} }; struct ShareableLock : Lock { ShareableLock() = default; ShareableLock(RWMutex& inMutex) : Lock(inMutex, shareable) {} }; private: struct alignas(WAVM_PLATFORM_RWMUTEX_ALIGN) LockData { U8 data[WAVM_PLATFORM_RWMUTEX_SIZE]; } lockData; #if WAVM_ENABLE_ASSERTS #if defined(_WIN32) std::atomic exclusiveLockingThreadId{0}; #else std::atomic exclusiveLockingThreadId{0}; #endif #endif }; }} #if WAVM_ENABLE_ASSERTS #define WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(mutex) \ WAVM_ASSERT((mutex).isExclusivelyLockedByCurrentThread()) #else #define WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(mutex) \ WAVM_ASSERT(&(mutex) == &(mutex)) #endif ================================================ FILE: Include/WAVM/Platform/Random.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace Platform { WAVM_API void getCryptographicRNG(U8* outRandomBytes, Uptr numBytes); }} ================================================ FILE: Include/WAVM/Platform/Signal.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Platform/Unwind.h" namespace WAVM { namespace Platform { struct Signal { enum class Type { invalid = 0, accessViolation, stackOverflow, intDivideByZeroOrOverflow }; Type type = Type::invalid; union { struct { Uptr address; } accessViolation; }; }; WAVM_API bool catchSignals(void (*thunk)(void*), bool (*filter)(void*, Signal, UnwindState&&), void* argument); }} ================================================ FILE: Include/WAVM/Platform/Thread.h ================================================ #pragma once #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace Platform { struct Thread; WAVM_API Thread* createThread(Uptr numStackBytes, I64 (*threadEntry)(void*), void* argument); WAVM_API void detachThread(Thread* thread); WAVM_API I64 joinThread(Thread* thread); WAVM_API Uptr getNumberOfHardwareThreads(); WAVM_API void yieldToAnotherThread(); }} ================================================ FILE: Include/WAVM/Platform/Unwind.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Platform/CPU.h" namespace WAVM { struct StringBuilderBase; } namespace WAVM { namespace Platform { // Unwind info for registering JIT code with the system unwinder. // On Windows, `data` points to the RUNTIME_FUNCTION table (.pdata). // On POSIX, `data` points to the DWARF .eh_frame section. // On macOS, `compactUnwind` additionally points to synthesized __unwind_info. struct UnwindInfo { const U8* data = nullptr; Uptr dataNumBytes = 0; const U8* compactUnwind = nullptr; Uptr compactUnwindNumBytes = 0; }; // Opaque handle returned by registerUnwindData, defined in platform implementations. struct UnwindRegistration; WAVM_API UnwindRegistration* registerUnwindData(const U8* imageBase, Uptr imageNumPages, const UnwindInfo& unwindInfo); WAVM_API void deregisterUnwindData(UnwindRegistration* registration); // // Platform-independent unwind API // // Result of stepping the unwind cursor enum class UnwindStepResult { success, // Successfully stepped to next frame end, // Reached end of stack (no more frames) error // Error during unwinding }; struct UnwindOp; // Procedure/function info from unwind data struct UnwindProcInfo { Uptr startIP = 0; Uptr endIP = 0; Uptr lsda = 0; Uptr handler = 0; // Decode unwind ops from this procedure's unwind data. WAVM_API Uptr decodeUnwindOps(UnwindOp* outOps, Uptr maxOps) const; private: friend struct UnwindState; const U8* unwindData = nullptr; Uptr unwindDataSize = 0; #ifdef __APPLE__ U32 compactEncoding = 0; #endif }; // UnwindState holds platform-specific unwind context and cursor. // The storage is sized at configure time to fit the platform's structures. // Copy/move operations are implemented in platform-specific code. struct UnwindState { WAVM_API UnwindState(const UnwindState& other); WAVM_API UnwindState(UnwindState&& other) noexcept; WAVM_API UnwindState& operator=(const UnwindState& other); WAVM_API UnwindState& operator=(UnwindState&& other) noexcept; // Capture unwind state from current execution context. // The returned state starts at the caller of capture() (capture itself is skipped). // numFramesToSkip additional frames are skipped beyond the caller. // Returns an invalid state on failure (e.g. on platforms where unwinding is unsupported). WAVM_API static UnwindState capture(Uptr numFramesToSkip = 0); // Step to the next frame. WAVM_API UnwindStepResult step(); // Get procedure info for current unwind position. WAVM_API bool getProcInfo(UnwindProcInfo& outInfo) const; // Get a CPU register value at the current unwind position. WAVM_API std::optional getRegister(HostCPURegister reg) const; private: friend UnwindState makeUnwindStateFromSignalContext(void*); UnwindState() = default; alignas(WAVM_PLATFORM_UNWIND_STATE_ALIGN) U8 storage[WAVM_PLATFORM_UNWIND_STATE_SIZE]; }; // // Unwind op iteration (for CFI/unwind code disassembly) // struct UnwindOp { Uptr codeOffset = 0; // Format as human-readable string into the given string builder. WAVM_API void format(StringBuilderBase& sb) const; private: friend struct UnwindProcInfo; U8 opcode = 0; U32 reg = 0; I64 operand = 0; #ifdef __APPLE__ U32 compactEncoding = 0; #endif }; }} #ifndef _WIN32 // Forward declarations for Itanium C++ ABI unwind types. struct _Unwind_Exception; struct _Unwind_Context; namespace WAVM { namespace Platform { // C++ personality function that logs unwind activity when the traceUnwind // log category is enabled, otherwise delegates to __gxx_personality_v0. WAVM_API int DebugPersonalityFunction(int version, int actions, U64 exceptionClass, _Unwind_Exception* unwind_exception, _Unwind_Context* context); }} #endif ================================================ FILE: Include/WAVM/RegExp/RegExp.h ================================================ #pragma once #include "WAVM/NFA/NFA.h" namespace WAVM { namespace RegExp { // Parses a regular expression from a string, and adds a recognizer for it to the given NFA // The recognizer will start from initialState, and end in finalState when the regular // expression has been completely matched. WAVM_API void addToNFA(const char* regexpString, NFA::Builder* nfaBuilder, NFA::StateIndex initialState, NFA::StateIndex finalState); }} ================================================ FILE: Include/WAVM/Runtime/Intrinsics.h ================================================ #pragma once #include #include #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Runtime/Runtime.h" namespace WAVM { namespace Runtime { struct ContextRuntimeData; }} namespace WAVM { namespace Intrinsics { struct ModuleImpl; struct Function; struct Module { ModuleImpl* impl = nullptr; WAVM_API ~Module(); }; WAVM_API Runtime::Instance* instantiateModule( Runtime::Compartment* compartment, const std::initializer_list& moduleRefs, std::string&& debugName); // An intrinsic function. struct Function { WAVM_API Function(Intrinsics::Module* moduleRef, const char* inName, void* inNativeFunction, IR::FunctionType type); const char* getName() const { return name; } IR::FunctionType getType() const { return type; } void* getNativeFunction() const { return nativeFunction; } private: const char* name; IR::FunctionType type; void* nativeFunction; }; // The base class of Intrinsic globals. struct Global { WAVM_API Global(Intrinsics::Module* moduleRef, const char* inName, IR::ValueType inType, IR::Value inValue); const char* getName() const { return name; } IR::ValueType getType() const { return type; } IR::Value getValue() const { return value; } private: const char* name; IR::ValueType type; IR::Value value; }; // An immutable global that provides typed initialization and reading of the global's value. template struct GenericGlobal : Global { GenericGlobal(Intrinsics::Module* moduleRef, const char* inName, Value inValue) : Global(moduleRef, inName, IR::inferValueType(), IR::Value(IR::inferValueType(), inValue)) { } }; // Intrinsic memories and tables struct Memory { WAVM_API Memory(Intrinsics::Module* moduleRef, const char* inName, const IR::MemoryType& inType); const char* getName() const { return name; } IR::MemoryType getType() const { return type; } private: const char* name; const IR::MemoryType type; }; struct Table { WAVM_API Table(Intrinsics::Module* moduleRef, const char* inName, const IR::TableType& inType); const char* getName() const { return name; } IR::TableType getType() const { return type; } private: const char* name; const IR::TableType type; }; // Create a new return type for intrinsic functions that return their result in the // ContextRuntimeData buffer. template struct ResultInContextRuntimeData; template ResultInContextRuntimeData* resultInContextRuntimeData( Runtime::ContextRuntimeData* contextRuntimeData, Result result) { *reinterpret_cast(contextRuntimeData) = result; return reinterpret_cast*>(contextRuntimeData); } template IR::FunctionType inferIntrinsicFunctionType(R (*)(Runtime::ContextRuntimeData*, Args...)) { return IR::FunctionType(IR::inferResultType(), IR::TypeTuple({IR::inferValueType()...}), WAVM::IR::CallingConvention::intrinsic); } template IR::FunctionType inferIntrinsicWithContextSwitchFunctionType( ResultInContextRuntimeData* (*)(Runtime::ContextRuntimeData*, Args...)) { return IR::FunctionType(IR::inferResultType(), IR::TypeTuple({IR::inferValueType()...}), WAVM::IR::CallingConvention::intrinsicWithContextSwitch); } }} #define WAVM_DEFINE_INTRINSIC_MODULE(name) \ WAVM::Intrinsics::Module* getIntrinsicModule_##name() \ { \ static WAVM::Intrinsics::Module module; \ return &module; \ } #define WAVM_DECLARE_INTRINSIC_MODULE(name) \ extern WAVM::Intrinsics::Module* getIntrinsicModule_##name(); #define WAVM_INTRINSIC_MODULE_REF(name) getIntrinsicModule_##name() #define WAVM_DEFINE_INTRINSIC_FUNCTION(module, nameString, Result, cName, ...) \ static Result cName(WAVM::Runtime::ContextRuntimeData* contextRuntimeData, ##__VA_ARGS__); \ static WAVM::Intrinsics::Function cName##Intrinsic( \ getIntrinsicModule_##module(), \ nameString, \ (void*)&cName, \ WAVM::Intrinsics::inferIntrinsicFunctionType(&cName)); \ static Result cName(WAVM::Runtime::ContextRuntimeData* contextRuntimeData, ##__VA_ARGS__) #define WAVM_DEFINE_INTRINSIC_FUNCTION_WITH_CONTEXT_SWITCH(module, nameString, Result, cName, ...) \ static WAVM::Intrinsics::ResultInContextRuntimeData* cName( \ WAVM::Runtime::ContextRuntimeData* contextRuntimeData, ##__VA_ARGS__); \ static WAVM::Intrinsics::Function cName##Intrinsic( \ getIntrinsicModule_##module(), \ nameString, \ (void*)&cName, \ WAVM::Intrinsics::inferIntrinsicWithContextSwitchFunctionType(&cName)); \ static WAVM::Intrinsics::ResultInContextRuntimeData* cName( \ WAVM::Runtime::ContextRuntimeData* contextRuntimeData, ##__VA_ARGS__) #define WAVM_DEFINE_UNIMPLEMENTED_INTRINSIC_FUNCTION(module, nameString, Result, cName, ...) \ WAVM_DEFINE_INTRINSIC_FUNCTION(module, nameString, Result, cName, __VA_ARGS__) \ { \ WAVM::Runtime::throwException( \ WAVM::Runtime::ExceptionTypes::calledUnimplementedIntrinsic); \ } // Macros for defining intrinsic globals, memories, and tables. #define WAVM_DEFINE_INTRINSIC_GLOBAL(module, name, Value, cName, initializer) \ static WAVM::Intrinsics::GenericGlobal cName( \ getIntrinsicModule_##module(), name, initializer); #define WAVM_DEFINE_INTRINSIC_MEMORY(module, cName, name, type) \ static WAVM::Intrinsics::Memory cName(getIntrinsicModule_##module(), #name, type); #define WAVM_DEFINE_INTRINSIC_TABLE(module, cName, name, type) \ static WAVM::Intrinsics::Table cName(getIntrinsicModule_##module(), #name, type); ================================================ FILE: Include/WAVM/Runtime/Linker.h ================================================ #pragma once #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Runtime/Runtime.h" namespace WAVM { namespace Runtime { // An abstract resolver: maps module+export name pairs to a Runtime::Object. struct WAVM_API Resolver { virtual ~Resolver() {} virtual bool resolve(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Object*& outObject) = 0; }; // A resolver that always returns failure. struct NullResolver : Resolver { bool resolve(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Runtime::Object*& outObject) override { return false; } }; // Generates stub objects that conform to the given ExternType. // Returns true if successful, false if stub creation failed due to resource exhaustion. // Upon successful return, outObject will contain a pointer to the stub object. enum class StubFunctionBehavior { zero, trap, }; WAVM_API bool generateStub(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Runtime::Object*& outObject, Compartment* compartment, StubFunctionBehavior functionBehavior = StubFunctionBehavior::trap, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); // A resolver that generates stubs for objects that the inner resolver can't find. struct WAVM_API StubResolver : Resolver { StubResolver(Compartment* inCompartment, StubFunctionBehavior inFunctionBehavior = StubFunctionBehavior::trap, bool inLogErrorOnStubGeneration = true, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); virtual bool resolve(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Runtime::Object*& outObject) override; private: GCPointer compartment; ResourceQuotaRef resourceQuota; StubFunctionBehavior functionBehavior; bool logErrorOnStubGeneration; }; // Links a module using the given resolver, returning an array mapping import indices to // objects. If the resolver fails to resolve any imports, throws a LinkException. struct LinkResult { struct MissingImport { std::string moduleName; std::string exportName; IR::ExternType type; }; std::vector missingImports; ImportBindings resolvedImports; bool success{false}; }; WAVM_API LinkResult linkModule(const IR::Module& module, Resolver& resolver); }} ================================================ FILE: Include/WAVM/Runtime/Runtime.h ================================================ #pragma once #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Error.h" #include "WAVM/Platform/Unwind.h" // Declare some types to avoid including the full definition. namespace WAVM { namespace IR { struct Module; } namespace WASM { struct LoadError; } }; // Declare the different kinds of objects. They are only declared as incomplete struct types here, // and Runtime clients will only handle opaque pointers to them. #define WAVM_DECLARE_OBJECT_TYPE(kindId, kindName, Type) \ struct Type; \ \ WAVM_API void addGCRoot(const Type* type); \ WAVM_API void removeGCRoot(const Type* type) noexcept; \ \ WAVM_API Runtime::Type* as##kindName(Object* object); \ WAVM_API Runtime::Type* as##kindName##Nullable(Object* object); \ WAVM_API const Runtime::Type* as##kindName(const Object* object); \ WAVM_API const Runtime::Type* as##kindName##Nullable(const Object* object); \ WAVM_API Object* asObject(Type* object); \ WAVM_API const Object* asObject(const Runtime::Type* object); \ \ WAVM_API void setUserData( \ Runtime::Type* object, void* userData, void (*finalizer)(void*) = nullptr); \ WAVM_API void* getUserData(const Runtime::Type* object); \ \ template<> inline Runtime::Type* as(Object * object) { return as##kindName(object); } \ template<> inline const Runtime::Type* as(const Object* object) \ { \ return as##kindName(object); \ } \ \ WAVM_API const std::string& getDebugName(const Type*); namespace WAVM { namespace Runtime { struct Object; // Tests whether an object is of the given type. WAVM_API bool isA(const Object* object, const IR::ExternType& type); WAVM_API IR::ExternType getExternType(const Object* object); WAVM_API void setUserData(Object* object, void* userData, void (*finalizer)(void*) = nullptr); WAVM_API void* getUserData(const Object* object); WAVM_API const std::string& getDebugName(const Object*); inline Object* asObject(Object* object) { return object; } inline const Object* asObject(const Object* object) { return object; } template Type* as(Object* object); template const Type* as(const Object* object); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::function, Function, Function); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::table, Table, Table); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::memory, Memory, Memory); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::global, Global, Global); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::exceptionType, ExceptionType, ExceptionType); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::instance, Instance, Instance); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::context, Context, Context); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::compartment, Compartment, Compartment); WAVM_DECLARE_OBJECT_TYPE(ObjectKind::foreign, Foreign, Foreign); // The result of growing a table or memory. enum class GrowResult { success, outOfMemory, outOfQuota, outOfMaxSize }; // // Garbage collection // // A GC root pointer. template struct GCPointer { GCPointer() : value(nullptr) {} GCPointer(ObjectType* inValue) { value = inValue; if(value) { addGCRoot(value); } } GCPointer(const GCPointer& inCopy) { value = inCopy.value; if(value) { addGCRoot(value); } } GCPointer(GCPointer&& inMove) noexcept { value = inMove.value; inMove.value = nullptr; } ~GCPointer() { if(value) { removeGCRoot(value); } } void operator=(ObjectType* inValue) { if(value) { removeGCRoot(value); } value = inValue; if(value) { addGCRoot(value); } } void operator=(const GCPointer& inCopy) { if(value) { removeGCRoot(value); } value = inCopy.value; if(value) { addGCRoot(value); } } void operator=(GCPointer&& inMove) noexcept { if(value) { removeGCRoot(value); } value = inMove.value; inMove.value = nullptr; } operator ObjectType*() const { return value; } ObjectType& operator*() const { return *value; } ObjectType* operator->() const { return value; } private: ObjectType* value; }; // Increments the object's counter of root references. WAVM_API void addGCRoot(const Object* object); // Decrements the object's counter of root referencers. WAVM_API void removeGCRoot(const Object* object) noexcept; // Frees any unreferenced objects owned by a compartment. WAVM_API void collectCompartmentGarbage(Compartment* compartment); // Clears the given GC root reference to a compartment, and collects garbage for it. Returns // true if the entire compartment was freed by the operation, or false if there are remaining // root references that can reach it. WAVM_API bool tryCollectCompartment(GCPointer&& compartment); // // Exception types // #define WAVM_ENUM_INTRINSIC_EXCEPTION_TYPES(visit) \ visit(outOfBoundsMemoryAccess, WAVM::IR::ValueType::externref, WAVM::IR::ValueType::i64); \ visit(outOfBoundsTableAccess, WAVM::IR::ValueType::externref, WAVM::IR::ValueType::i64); \ visit(outOfBoundsDataSegmentAccess, \ WAVM::IR::ValueType::externref, \ WAVM::IR::ValueType::i64, \ WAVM::IR::ValueType::i64); \ visit(outOfBoundsElemSegmentAccess, \ WAVM::IR::ValueType::externref, \ WAVM::IR::ValueType::i64, \ WAVM::IR::ValueType::i64); \ visit(stackOverflow); \ visit(integerDivideByZeroOrOverflow); \ visit(invalidFloatOperation); \ visit(invokeSignatureMismatch); \ visit(reachedUnreachable); \ visit(indirectCallSignatureMismatch, WAVM::IR::ValueType::funcref, WAVM::IR::ValueType::i64); \ visit(uninitializedTableElement, WAVM::IR::ValueType::externref, WAVM::IR::ValueType::i64); \ visit(calledAbort); \ visit(calledUnimplementedIntrinsic); \ visit(outOfMemory); \ visit(misalignedAtomicMemoryAccess, WAVM::IR::ValueType::i64); \ visit(waitOnUnsharedMemory, WAVM::IR::ValueType::externref); \ visit(invalidArgument); // Information about a runtime exception. namespace ExceptionTypes { #define DECLARE_INTRINSIC_EXCEPTION_TYPE(name, ...) WAVM_API extern ExceptionType* name; WAVM_ENUM_INTRINSIC_EXCEPTION_TYPES(DECLARE_INTRINSIC_EXCEPTION_TYPE) #undef DECLARE_INTRINSIC_EXCEPTION_TYPE }; // Creates an exception type instance. WAVM_API ExceptionType* createExceptionType(Compartment* compartment, IR::ExceptionType sig, std::string&& debugName); // Returns a string that describes the given exception type. WAVM_API std::string describeExceptionType(const ExceptionType* type); // Returns the parameter types for an exception type instance. WAVM_API IR::TypeTuple getExceptionTypeParameters(const ExceptionType* type); // // Resource quotas // struct ResourceQuota; typedef std::shared_ptr ResourceQuotaRef; typedef std::shared_ptr ResourceQuotaConstRef; typedef const std::shared_ptr& ResourceQuotaRefParam; typedef const std::shared_ptr& ResourceQuotaConstRefParam; WAVM_API ResourceQuotaRef createResourceQuota(); WAVM_API Uptr getResourceQuotaMaxTableElems(ResourceQuotaConstRefParam); WAVM_API Uptr getResourceQuotaCurrentTableElems(ResourceQuotaConstRefParam); WAVM_API void setResourceQuotaMaxTableElems(ResourceQuotaRefParam, Uptr maxTableElems); WAVM_API Uptr getResourceQuotaMaxMemoryPages(ResourceQuotaConstRefParam); WAVM_API Uptr getResourceQuotaCurrentMemoryPages(ResourceQuotaConstRefParam); WAVM_API void setResourceQuotaMaxMemoryPages(ResourceQuotaRefParam, Uptr maxMemoryPages); // // Exceptions // struct CallStack; struct Exception; // Exception UserData WAVM_API void setUserData(Exception* exception, void* userData, void (*finalizer)(void*)); WAVM_API void* getUserData(const Exception* exception); // Creates a runtime exception. WAVM_API Exception* createException(ExceptionType* type, const IR::UntaggedValue* arguments, Uptr numArguments, CallStack&& callStack); // Destroys a runtime exception. WAVM_API void destroyException(Exception* exception); // Returns the type of an exception. WAVM_API ExceptionType* getExceptionType(const Exception* exception); // Returns a specific argument of an exception. WAVM_API IR::UntaggedValue getExceptionArgument(const Exception* exception, Uptr argIndex); // Returns the call stack at the origin of an exception. WAVM_API const CallStack& getExceptionCallStack(const Exception* exception); // Returns a string that describes the given exception cause. WAVM_API std::string describeException(const Exception* exception); // Throws a runtime exception. [[noreturn]] WAVM_API void throwException(Exception* exception); // Creates and throws a runtime exception. // numOmittedFramesFromCaller is the number of additional frames to omit beyond throwException // itself. Pass 0 (default) to have the call stack start at the caller of throwException. // Intrinsic functions should pass 1 to also skip themselves. [[noreturn]] WAVM_API void throwException(ExceptionType* type, const std::vector& arguments = {}, Uptr numOmittedFramesFromCaller = 0); // Calls a thunk and catches any runtime exceptions that occur within it. Note that the // catchThunk takes ownership of the exception, and is responsible for calling destroyException. WAVM_API void catchRuntimeExceptions(const std::function& thunk, const std::function& catchThunk); // Calls a thunk and ensures that any signals that occur within the thunk will be thrown as // runtime exceptions. WAVM_API void unwindSignalsAsExceptions(const std::function& thunk); // Error handler that produces symbolicated call stacks including JIT'd WASM frames. // Pass to Platform::setErrorHandler to enable rich error output. WAVM_API void handleError(const char* message, bool printCallStack, Platform::UnwindState&& state); // Maximum number of inline source frames to resolve for a single address. inline constexpr Uptr maxInlineSourceFrames = 16; // Describes the source of an instruction; may be either WASM or native code. struct InstructionSource { enum class Type { unknown, native, wasm, }; Type type; // Only one of native or wasm will be initialized based on type. // This could be stored in a union, but Platform::InstructionSource's default constructor // and destructor are non-trivial, and so would require manual construction/destruction when // InstructionSource::type changes. Platform::InstructionSource native; struct { Runtime::Function* function; Uptr instructionIndex; } wasm; InstructionSource() : type(Type::unknown) {} }; // Signal-safe: formats an InstructionSource into a caller-provided buffer. // Returns the number of characters written (not counting null terminator). WAVM_API void appendToString(StringBuilderBase& stringBuilder, const InstructionSource& source); // Looks up the source of an instruction from either a native or WASM module. // For WASM code, returns a stack of InstructionSource entries from innermost to outermost // (accounting for inlined functions). For native code, returns a single entry. // Signal-safe: no heap allocations. WAVM_API Uptr getInstructionSourceByAddress(Uptr ip, InstructionSource* outSources, Uptr maxSources); // Resolves all frames in a call stack into a flat list of InstructionSources, expanding inline // frames. Each physical frame may produce multiple InstructionSource entries. WAVM_API std::vector resolveCallStackFrames(const CallStack& callStack); // Describes a call stack. WAVM_API std::vector describeCallStack(const CallStack& callStack); // Walks an UnwindState and collects frame IPs into a CallStack. // Also traces each frame when the trace-unwind log category is enabled // (with instruction source, procedure info, disassembly, and register state). WAVM_API CallStack unwindCallStack(Platform::UnwindState& state); // Pre-create resources needed for trace-unwind diagnostics (e.g., the host disassembler). // Must be called before entering signal handler paths (e.g., from unwindSignalsAsExceptions). WAVM_API void initTraceUnwindState(); // // Functions // // Invokes a Function with the given array of arguments, and writes the results to the given // results array. The sizes of the arguments and results arrays must match the number of // arguments/results of the provided function type. If the provided function type does not match // the actual type of the function, then an invokeSignatureMismatch exception is thrown. WAVM_API void invokeFunction(Context* context, const Function* function, IR::FunctionType invokeSig = IR::FunctionType(), const IR::UntaggedValue arguments[] = nullptr, IR::UntaggedValue results[] = nullptr); // Returns the type of a Function. WAVM_API IR::FunctionType getFunctionType(const Function* function); // // Tables // // Creates a Table. May return null if the memory allocation fails. WAVM_API Table* createTable(Compartment* compartment, IR::TableType type, Object* element, std::string&& debugName, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); // Reads an element from the table. Throws an outOfBoundsTableAccess exception if index is // out-of-bounds. WAVM_API Object* getTableElement(const Table* table, Uptr index); // Writes an element to the table, a returns the previous value of the element. // Throws an outOfBoundsTableAccess exception if index is out-of-bounds. WAVM_API Object* setTableElement(Table* table, Uptr index, Object* newValue); // Gets the current size of the table. WAVM_API Uptr getTableNumElements(const Table* table); // Returns the type of a table. WAVM_API IR::TableType getTableType(const Table* table); // Grows or shrinks the size of a table by numElements. Returns the previous size of the table. WAVM_API GrowResult growTable(Table* table, Uptr numElements, Uptr* outOldNumElems = nullptr, Object* initialElement = nullptr); // // Memories // // Creates a Memory. May return null if the memory allocation fails. WAVM_API Memory* createMemory(Compartment* compartment, IR::MemoryType type, std::string&& debugName, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); // Gets the base address of the memory's data. WAVM_API U8* getMemoryBaseAddress(Memory* memory); // Gets the current size of the memory in pages. WAVM_API Uptr getMemoryNumPages(const Memory* memory); // Returns the type of a memory. WAVM_API IR::MemoryType getMemoryType(const Memory* memory); // Grows or shrinks the size of a memory by numPages. Returns the previous size of the memory. WAVM_API GrowResult growMemory(Memory* memory, Uptr numPages, Uptr* outOldNumPages = nullptr); // Unmaps a range of memory pages within the memory's address-space. WAVM_API void unmapMemoryPages(Memory* memory, Uptr pageIndex, Uptr numPages); // Validates that an offset range is wholly inside a Memory's virtual address range. // Note that this returns an address range that may fault on access, though it's guaranteed not // to be mapped by anything other than the given Memory. WAVM_API U8* getReservedMemoryOffsetRange(Memory* memory, Uptr offset, Uptr numBytes); // Validates that an offset range is wholly inside a Memory's committed pages. WAVM_API U8* getValidatedMemoryOffsetRange(Memory* memory, Uptr offset, Uptr numBytes); // Validates an access to a single element of memory at the given offset, and returns a // reference to it. template Value& memoryRef(Memory* memory, Uptr offset) { return *(Value*)getValidatedMemoryOffsetRange(memory, offset, sizeof(Value)); } // Validates an access to multiple elements of memory at the given offset, and returns a pointer // to it. template Value* memoryArrayPtr(Memory* memory, Uptr offset, Uptr numElements) { return (Value*)getValidatedMemoryOffsetRange(memory, offset, numElements * sizeof(Value)); } // // Globals // // Creates a Global with the specified type. The initial value is set to the appropriate zero. WAVM_API Global* createGlobal(Compartment* compartment, IR::GlobalType type, std::string&& debugName, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); // Initializes a Global with the specified value. May not be called more than once/Global. WAVM_API void initializeGlobal(Global* global, IR::Value value); // Reads the current value of a global. WAVM_API IR::Value getGlobalValue(const Context* context, const Global* global); // Writes a new value to a global, and returns the previous value. WAVM_API IR::Value setGlobalValue(Context* context, const Global* global, IR::Value newValue); // Returns the type of a global. WAVM_API IR::GlobalType getGlobalType(const Global* global); // // Modules // struct Module; typedef std::shared_ptr ModuleRef; typedef std::shared_ptr ModuleConstRef; typedef const std::shared_ptr& ModuleRefParam; typedef const std::shared_ptr& ModuleConstRefParam; // Compiles an IR module to object code. WAVM_API ModuleRef compileModule(const IR::Module& irModule); // Load and compiles a binary module, returning either an error or a module. // If true is returned, the load succeeded, and outModule contains the loaded module. // If false is returned, the load failed. If outError != nullptr, *outError will contain the // error that caused the load to fail. WAVM_API bool loadBinaryModule(const U8* wasmBytes, Uptr numWASMBytes, ModuleRef& outModule, const IR::FeatureSpec& featureSpec = IR::FeatureSpec(), WASM::LoadError* outError = nullptr); // Loads a previously compiled module from a combination of an IR module and the object code // returned by getObjectCode for the previously compiled module. WAVM_API ModuleRef loadPrecompiledModule(const IR::Module& irModule, const std::vector& objectCode); // Accesses the IR for a compiled module. WAVM_NO_DANGLING WAVM_API const IR::Module& getModuleIR(ModuleConstRefParam module); // Extracts the compiled object code for a module. This may be used as an input to // loadPrecompiledModule to bypass redundant compilations of the module. WAVM_API std::vector getObjectCode(ModuleConstRefParam module); // // Instances // typedef std::vector ImportBindings; // Instantiates a module, bindings its imports to the specified objects. May throw a runtime // exception for bad segment offsets. WAVM_API Instance* instantiateModule(Compartment* compartment, ModuleConstRefParam module, ImportBindings&& imports, std::string&& debugName, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); // Gets the start function of a Instance. WAVM_API Function* getStartFunction(const Instance* instance); // Gets the default table/memory for a Instance. WAVM_API Memory* getDefaultMemory(const Instance* instance); WAVM_API Table* getDefaultTable(const Instance* instance); // Gets an object exported by a Instance by name. WAVM_API Object* getInstanceExport(const Instance* instance, const std::string& name); // Gets an object exported by a Instance by name and type. If the module exports an object // with the given name, but the type doesn't match, returns nullptr. WAVM_API Object* getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::ExternType& type); WAVM_API Function* getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::FunctionType& type); WAVM_API Table* getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::TableType& type); WAVM_API Memory* getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::MemoryType& type); WAVM_API Global* getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::GlobalType& type); WAVM_API ExceptionType* getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::ExceptionType& type); // Gets an array of the objects exported by an instance. The array indices correspond to the // IR::Module::exports array. WAVM_API const std::vector& getInstanceExports(const Instance* instance); // // Compartments // WAVM_API Compartment* createCompartment(std::string&& debugName = ""); WAVM_API Compartment* cloneCompartment(const Compartment* compartment, std::string&& debugName = ""); WAVM_API Object* remapToClonedCompartment(const Object* object, const Compartment* newCompartment); WAVM_API Function* remapToClonedCompartment(const Function* function, const Compartment* newCompartment); WAVM_API Table* remapToClonedCompartment(const Table* table, const Compartment* newCompartment); WAVM_API Memory* remapToClonedCompartment(const Memory* memory, const Compartment* newCompartment); WAVM_API Global* remapToClonedCompartment(const Global* global, const Compartment* newCompartment); WAVM_API ExceptionType* remapToClonedCompartment(const ExceptionType* exceptionType, const Compartment* newCompartment); WAVM_API Instance* remapToClonedCompartment(const Instance* instance, const Compartment* newCompartment); WAVM_API Foreign* remapToClonedCompartment(const Foreign* foreign, const Compartment* newCompartment); WAVM_API bool isInCompartment(const Object* object, const Compartment* compartment); // // Contexts // WAVM_API Context* createContext(Compartment* compartment, std::string&& debugName = ""); WAVM_API struct ContextRuntimeData* getContextRuntimeData(const Context* context); WAVM_API Context* getContextFromRuntimeData(struct ContextRuntimeData* contextRuntimeData); WAVM_API Compartment* getCompartmentFromContextRuntimeData( struct ContextRuntimeData* contextRuntimeData); WAVM_API Compartment* getCompartment(const Context* context); // Creates a new context, initializing its mutable global state from the given context. WAVM_API Context* cloneContext(const Context* context, Compartment* newCompartment); // // Foreign objects // WAVM_API Foreign* createForeign(Compartment* compartment, void* userData, void (*finalizer)(void*), std::string&& debugName = ""); // // Object caching // struct ObjectCacheInterface { virtual ~ObjectCacheInterface() {} virtual std::vector getCachedObject(const U8* wasmBytes, Uptr numWASMBytes, std::function()>&& compileThunk) = 0; }; WAVM_API void setGlobalObjectCache(std::shared_ptr&& objectCache); }} ================================================ FILE: Include/WAVM/RuntimeABI/CMakeLists.txt ================================================ set(PublicHeaders RuntimeABI.h) WAVM_ADD_LIB_COMPONENT(RuntimeABI HEADERS ${PublicHeaders}) ================================================ FILE: Include/WAVM/RuntimeABI/RuntimeABI.h ================================================ #pragma once // // Data structures that are used to share data between WAVM C++ code and the compiled WASM code. // #include #include #include #include #include "WAVM/IR/IR.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/InlineArray.h" namespace WAVM { namespace LLVMJIT { struct Module; }} namespace WAVM { namespace Runtime { // Forward declarations struct Compartment; struct Context; struct ExceptionType; struct Object; struct Table; struct Memory; // Runtime object types. This must be a superset of IR::ExternKind, with IR::ExternKind // values having the same representation in Runtime::ObjectKind. enum class ObjectKind : U8 { invalid = (U8)IR::ExternKind::invalid, // Standard object kinds that may be imported/exported from WebAssembly modules. function = (U8)IR::ExternKind::function, table = (U8)IR::ExternKind::table, memory = (U8)IR::ExternKind::memory, global = (U8)IR::ExternKind::global, exceptionType = (U8)IR::ExternKind::exceptionType, // Runtime-specific object kinds that are only used by transient runtime objects. instance, context, compartment, foreign, }; static_assert(Uptr(IR::ExternKind::function) == Uptr(ObjectKind::function), "IR::ExternKind::function != ObjectKind::function"); static_assert(Uptr(IR::ExternKind::table) == Uptr(ObjectKind::table), "IR::ExternKind::table != ObjectKind::table"); static_assert(Uptr(IR::ExternKind::memory) == Uptr(ObjectKind::memory), "IR::ExternKind::memory != ObjectKind::memory"); static_assert(Uptr(IR::ExternKind::global) == Uptr(ObjectKind::global), "IR::ExternKind::global != ObjectKind::global"); static_assert(Uptr(IR::ExternKind::exceptionType) == Uptr(ObjectKind::exceptionType), "IR::ExternKind::exceptionType != ObjectKind::exceptionType"); inline constexpr Uptr contextNumBytes = 16384; inline constexpr Uptr maxThunkArgAndReturnBytes = 256; inline constexpr Uptr maxMutableGlobals = (contextNumBytes - maxThunkArgAndReturnBytes - sizeof(Context*)) / sizeof(IR::UntaggedValue); inline constexpr Uptr contextRuntimeDataAlignment = 16384; static_assert(sizeof(IR::UntaggedValue) * IR::maxReturnValues <= maxThunkArgAndReturnBytes, "maxThunkArgAndReturnBytes must be large enough to hold IR::maxReturnValues * " "sizeof(UntaggedValue)"); struct ContextRuntimeData { U8 thunkArgAndReturnData[maxThunkArgAndReturnBytes]; Context* context; IR::UntaggedValue mutableGlobals[maxMutableGlobals]; }; static_assert(sizeof(ContextRuntimeData) == contextNumBytes, "ContextRuntimeData isn't the expected size"); struct MemoryRuntimeData { void* base; std::atomic numPages; Uptr endAddress; }; inline constexpr Uptr memoryNumGuardBytes = 65536; static_assert(sizeof(MemoryRuntimeData) == sizeof(Uptr) * 3, "MemoryRuntimeData isn't the expected size"); struct TableRuntimeData { void* base; Uptr endIndex; }; static_assert(sizeof(TableRuntimeData) == sizeof(Uptr) * 2, "TableRuntimeData isn't the expected size"); inline constexpr Uptr maxMemories = 255; inline constexpr Uptr compartmentReservedBytes = Uptr(2) * 1024 * 1024 * 1024; inline constexpr Uptr compartmentNonContextBytes = Uptr(2) * 1024 * 1024; inline constexpr Uptr maxTables = (compartmentNonContextBytes - sizeof(Compartment*) - maxMemories * sizeof(MemoryRuntimeData)) / sizeof(TableRuntimeData); inline constexpr Uptr compartmentRuntimeDataAlignmentLog2 = 31; struct CompartmentRuntimeData { Compartment* compartment; MemoryRuntimeData memories[maxMemories]; TableRuntimeData tables[maxTables]; ContextRuntimeData contexts[1]; // Actually [maxContexts], but at least MSVC doesn't allow // declaring arrays that large. }; inline constexpr Uptr maxContexts = (compartmentReservedBytes - offsetof(CompartmentRuntimeData, contexts)) / sizeof(ContextRuntimeData); static_assert(offsetof(CompartmentRuntimeData, contexts) % 4096 == 0, "CompartmentRuntimeData::contexts isn't page-aligned"); static_assert(U64(offsetof(CompartmentRuntimeData, contexts)) + U64(maxContexts) * sizeof(ContextRuntimeData) == compartmentReservedBytes, "CompartmentRuntimeData isn't the expected size"); struct CallStack { static constexpr Uptr maxFrames = 32; struct Frame { Uptr ip; }; InlineArray frames; ~CallStack() = default; }; struct WAVM_API Exception { Uptr typeId; ExceptionType* type; U8 isUserException; CallStack callStack; void* userData; void (*finalizeUserData)(void*); IR::UntaggedValue arguments[1]; Exception(Uptr inTypeId, ExceptionType* inType, bool inIsUserException, CallStack&& inCallStack) : typeId(inTypeId) , type(inType) , isUserException(inIsUserException ? 1 : 0) , callStack(std::move(inCallStack)) , userData(nullptr) , finalizeUserData(nullptr) { } ~Exception(); static Uptr calcNumBytes(Uptr numArguments) { if(numArguments == 0) { numArguments = 1; } return offsetof(Exception, arguments) + numArguments * sizeof(IR::UntaggedValue); } }; struct Object { const ObjectKind kind; }; typedef Runtime::ContextRuntimeData* (*InvokeThunkPointer)(const Runtime::Function*, Runtime::ContextRuntimeData*, const IR::UntaggedValue* arguments, IR::UntaggedValue* results); // Metadata about a function, used to hold data that can't be emitted directly in an object // file, or must be mutable. struct FunctionMutableData { LLVMJIT::Module* jitModule = nullptr; Runtime::Function* function = nullptr; Uptr numCodeBytes = 0; std::atomic numRootReferences{0}; std::string debugName; std::atomic invokeThunk{nullptr}; void* userData{nullptr}; void (*finalizeUserData)(void*); FunctionMutableData(std::string&& inDebugName) : debugName(inDebugName), userData(nullptr), finalizeUserData(nullptr) { } ~FunctionMutableData() { WAVM_ASSERT(numRootReferences.load(std::memory_order_acquire) == 0); if(finalizeUserData) { (*finalizeUserData)(userData); } } }; struct Function { Object object; FunctionMutableData* mutableData; const Uptr instanceId; const IR::FunctionType::Encoding encodedType; const U8 code[1]; Function(FunctionMutableData* inMutableData, Uptr inInstanceId, IR::FunctionType::Encoding inEncodedType) : object{ObjectKind::function} , mutableData(inMutableData) , instanceId(inInstanceId) , encodedType(inEncodedType) , code{0xcc} // int3 { } }; static_assert(offsetof(Runtime::Function, object) == sizeof(Uptr) * 0, "Function prefix must match Runtime::Function layout"); static_assert(offsetof(Runtime::Function, mutableData) == sizeof(Uptr) * 1, "Function prefix must match Runtime::Function layout"); static_assert(offsetof(Runtime::Function, instanceId) == sizeof(Uptr) * 2, "Function prefix must match Runtime::Function layout"); static_assert(offsetof(Runtime::Function, encodedType) == sizeof(Uptr) * 3, "Function prefix must match Runtime::Function layout"); static_assert(offsetof(Runtime::Function, code) == sizeof(Uptr) * 4, "Function prefix must match Runtime::Function layout"); inline CompartmentRuntimeData* getCompartmentRuntimeData(ContextRuntimeData* contextRuntimeData) { return reinterpret_cast( reinterpret_cast(contextRuntimeData) & -(Iptr(1) << compartmentRuntimeDataAlignmentLog2)); } }} ================================================ FILE: Include/WAVM/ThreadTest/ThreadTest.h ================================================ #pragma once namespace WAVM { namespace Runtime { struct Compartment; struct Instance; }} namespace WAVM { namespace ThreadTest { WAVM_API Runtime::Instance* instantiate(Runtime::Compartment* compartment); }} ================================================ FILE: Include/WAVM/VFS/SandboxFS.h ================================================ #pragma once #include #include namespace WAVM { namespace VFS { struct FileSystem; WAVM_API std::shared_ptr makeSandboxFS(FileSystem* innerFS, const std::string& innerRootPath); }} ================================================ FILE: Include/WAVM/VFS/VFS.h ================================================ #pragma once #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Time.h" namespace WAVM { namespace VFS { enum class FileAccessMode { none, readOnly, writeOnly, readWrite, }; enum class FileCreateMode { createAlways, createNew, openAlways, openExisting, truncateExisting, }; enum class SeekOrigin { begin, cur, end }; enum class SyncType { contents, contentsAndMetadata }; enum class FileType { unknown, blockDevice, characterDevice, directory, file, datagramSocket, streamSocket, symbolicLink, pipe }; enum class VFDSync { none, contentsAfterWrite, contentsAndMetadataAfterWrite, contentsAfterWriteAndBeforeRead, contentsAndMetadataAfterWriteAndBeforeRead }; struct VFDFlags { // If true, writes will always occur at the end of the file. bool append{false}; // If true, reads and writes will fail if they can't immediately complete. bool nonBlocking{false}; // The amount of synchronization implied for reads and writes. VFDSync syncLevel{VFDSync::none}; }; struct VFDInfo { FileType type; VFDFlags flags; }; struct FileInfo { U64 deviceNumber; U64 fileNumber; FileType type; U32 numLinks; U64 numBytes; // Time values correspond to the "real-time" clock defined by Platform::Clock::realtime. Time lastAccessTime; Time lastWriteTime; Time creationTime; }; struct DirEnt { U64 fileNumber; std::string name; FileType type; }; struct IOReadBuffer { void* data; Uptr numBytes; }; struct IOWriteBuffer { const void* data; Uptr numBytes; }; // Error codes // clang-format off #define WAVM_ENUM_VFS_RESULTS(v) \ v(success, "Success") \ /* Asynchronous I/O statuses */ \ v(ioPending, "IO pending") \ /* Hardware errors */ \ v(ioDeviceError, "IO device error") \ /* Transient errors */ \ v(interruptedBySignal, "Interrupted by signal") \ v(interruptedByCancellation, "Interrupted by cancellation") \ v(wouldBlock, "Operation on non-blocking file descriptor would block") \ /* Invalid argument errors */ \ v(inaccessibleBuffer, "A provided buffer is in memory that is not accessible") \ v(invalidOffset, "Invalid offset") \ /* Capability errors */ \ v(notSeekable, "File descriptor is not seekable") \ v(notPermitted, "Not permitted") \ v(notAccessible, "Not accessible") \ v(notSynchronizable,"File descriptor is not synchronizable") \ /* Argument constraints */ \ v(tooManyBufferBytes, "Too many bytes") \ v(notEnoughBufferBytes, "Not enough bytes") \ v(tooManyBuffers, "Too many buffers") \ v(notEnoughBits, "Not enough bits") \ v(exceededFileSizeLimit, "File is too large") \ /* Resource exhaustion errors */ \ v(outOfSystemFDs, "Out of system file descriptors") \ v(outOfProcessFDs, "Out of process file descriptors") \ v(outOfMemory, "Out of memory") \ v(outOfQuota, "Out of quota") \ v(outOfFreeSpace, "Out of free space") \ v(outOfLinksToParentDir, "Out of links to parent directory") \ /* Path errors */ \ v(invalidNameCharacter, "Invalid filename character") \ v(nameTooLong, "Filename is too long") \ v(tooManyLinksInPath, "Path follows too many links") \ /* File state errors */ \ v(alreadyExists, "Already exists") \ v(doesNotExist, "Doesn't exist") \ v(isDirectory, "Is a directory") \ v(isNotDirectory, "Isn't a directory") \ v(isNotEmpty, "Directory isn't empty") \ v(brokenPipe, "Pipe is broken") \ v(missingDevice, "Device is missing") \ v(busy, "Device or resource busy") \ v(notSupported, "Operation not supported") enum class Result : I32 { #define V(name, description) name, WAVM_ENUM_VFS_RESULTS(V) #undef V }; // clang-format on struct DirEntStream { virtual ~DirEntStream() {} virtual void close() = 0; virtual bool getNext(DirEnt& outEntry) = 0; virtual void restart() = 0; virtual U64 tell() = 0; virtual bool seek(U64 offset) = 0; }; struct VFD { // Closes the FD. Deletes the VFD regardless of whether an error code is returned. virtual Result close() = 0; virtual Result seek(I64 offset, SeekOrigin origin, U64* outAbsoluteOffset = nullptr) = 0; virtual Result readv(const IOReadBuffer* buffers, Uptr numBuffers, Uptr* outNumBytesRead = nullptr, const U64* offset = nullptr) = 0; virtual Result writev(const IOWriteBuffer* buffers, Uptr numBuffers, Uptr* outNumBytesWritten = nullptr, const U64* offset = nullptr) = 0; virtual Result sync(SyncType type) = 0; virtual Result getVFDInfo(VFDInfo& outInfo) = 0; virtual Result getFileInfo(FileInfo& outInfo) = 0; virtual Result setVFDFlags(const VFDFlags& flags) = 0; virtual Result setFileSize(U64 numBytes) = 0; virtual Result setFileTimes(bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) = 0; virtual Result openDir(DirEntStream*& outStream) = 0; Result read(void* outData, Uptr numBytes, Uptr* outNumBytesRead = nullptr, U64* offset = nullptr) { IOReadBuffer buffer{outData, numBytes}; return readv(&buffer, 1, outNumBytesRead, offset); } Result write(const void* data, Uptr numBytes, Uptr* outNumBytesWritten = nullptr, U64* offset = nullptr) { IOWriteBuffer buffer{data, numBytes}; return writev(&buffer, 1, outNumBytesWritten, offset); } protected: virtual ~VFD() {} }; struct FileSystem { virtual ~FileSystem() {} virtual Result open(const std::string& path, FileAccessMode accessMode, FileCreateMode createMode, VFD*& outFD, const VFDFlags& flags = VFDFlags{}) = 0; virtual Result getFileInfo(const std::string& path, FileInfo& outInfo) = 0; virtual Result setFileTimes(const std::string& path, bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) = 0; virtual Result openDir(const std::string& path, DirEntStream*& outStream) = 0; virtual Result renameFile(const std::string& oldPath, const std::string& newPath) = 0; virtual Result unlinkFile(const std::string& path) = 0; virtual Result removeDir(const std::string& path) = 0; virtual Result createDir(const std::string& path) = 0; }; WAVM_API const char* describeResult(Result result); }} ================================================ FILE: Include/WAVM/WASI/WASI.h ================================================ #pragma once #include #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Runtime/Runtime.h" namespace WAVM { namespace VFS { struct FileSystem; struct VFD; }} namespace WAVM { namespace Runtime { struct Resolver; }} namespace WAVM { namespace WASI { struct Process; WAVM_API std::shared_ptr createProcess(Runtime::Compartment* compartment, std::vector&& inArgs, std::vector&& inEnvs, VFS::FileSystem* fileSystem, VFS::VFD* stdIn, VFS::VFD* stdOut, VFS::VFD* stdErr); WAVM_API Runtime::Resolver& getProcessResolver(Process& process); WAVM_API Process* getProcessFromContextRuntimeData(Runtime::ContextRuntimeData*); WAVM_API Runtime::Memory* getProcessMemory(const Process& process); WAVM_API void setProcessMemory(Process& process, Runtime::Memory* memory); enum class SyscallTraceLevel { none, syscalls, syscallsWithCallstacks }; WAVM_API void setSyscallTraceLevel(SyscallTraceLevel newLevel); WAVM_API I32 catchExit(std::function&& thunk); }} ================================================ FILE: Include/WAVM/WASI/WASIABI.LICENSE ================================================ Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. ================================================ FILE: Include/WAVM/WASI/WASIABI.h ================================================ // WASI syscall API definitions // Derived from wasi-sysroot: // https://github.com/CraneStation/wasi-sysroot/blob/320054e84f8f2440def3b1c8700cedb8fd697bf8/libc-bottom-half/headers/public/wasi/core.h // The wasi-sysroot code is licensed under the terms of the CC0 1.0 Universal license: // https://github.com/CraneStation/wasi-sysroot/blob/320054e84f8f2440def3b1c8700cedb8fd697bf8/libc-bottom-half/headers/LICENSE // That license has been mirrored in WASITypes.LICENSE for posterity. // Thank you to the wasi-sysroot developers for their contributions to the public domain. #pragma once #include #include typedef int32_t __wasi_intptr_t; typedef uint32_t __wasi_uintptr_t; typedef uint32_t __wasi_size_t; typedef uint32_t __wasi_void_ptr_t; static_assert(alignof(int8_t) == 1, "non-wasi data layout"); static_assert(alignof(uint8_t) == 1, "non-wasi data layout"); static_assert(alignof(int16_t) == 2, "non-wasi data layout"); static_assert(alignof(uint16_t) == 2, "non-wasi data layout"); static_assert(alignof(int32_t) == 4, "non-wasi data layout"); static_assert(alignof(uint32_t) == 4, "non-wasi data layout"); static_assert(alignof(int64_t) == 8, "non-wasi data layout"); static_assert(alignof(uint64_t) == 8, "non-wasi data layout"); typedef uint8_t __wasi_advice_t; #define __WASI_ADVICE_NORMAL (UINT8_C(0)) #define __WASI_ADVICE_SEQUENTIAL (UINT8_C(1)) #define __WASI_ADVICE_RANDOM (UINT8_C(2)) #define __WASI_ADVICE_WILLNEED (UINT8_C(3)) #define __WASI_ADVICE_DONTNEED (UINT8_C(4)) #define __WASI_ADVICE_NOREUSE (UINT8_C(5)) typedef uint32_t __wasi_clockid_t; #define __WASI_CLOCK_REALTIME (UINT32_C(0)) #define __WASI_CLOCK_MONOTONIC (UINT32_C(1)) #define __WASI_CLOCK_PROCESS_CPUTIME_ID (UINT32_C(2)) #define __WASI_CLOCK_THREAD_CPUTIME_ID (UINT32_C(3)) typedef uint64_t __wasi_device_t; typedef uint64_t __wasi_dircookie_t; #define __WASI_DIRCOOKIE_START (UINT64_C(0)) typedef uint32_t __wasi_dirnamlen_t; typedef uint16_t __wasi_errno_t; #define __WASI_ESUCCESS (UINT16_C(0)) #define __WASI_E2BIG (UINT16_C(1)) #define __WASI_EACCES (UINT16_C(2)) #define __WASI_EADDRINUSE (UINT16_C(3)) #define __WASI_EADDRNOTAVAIL (UINT16_C(4)) #define __WASI_EAFNOSUPPORT (UINT16_C(5)) #define __WASI_EAGAIN (UINT16_C(6)) #define __WASI_EALREADY (UINT16_C(7)) #define __WASI_EBADF (UINT16_C(8)) #define __WASI_EBADMSG (UINT16_C(9)) #define __WASI_EBUSY (UINT16_C(10)) #define __WASI_ECANCELED (UINT16_C(11)) #define __WASI_ECHILD (UINT16_C(12)) #define __WASI_ECONNABORTED (UINT16_C(13)) #define __WASI_ECONNREFUSED (UINT16_C(14)) #define __WASI_ECONNRESET (UINT16_C(15)) #define __WASI_EDEADLK (UINT16_C(16)) #define __WASI_EDESTADDRREQ (UINT16_C(17)) #define __WASI_EDOM (UINT16_C(18)) #define __WASI_EDQUOT (UINT16_C(19)) #define __WASI_EEXIST (UINT16_C(20)) #define __WASI_EFAULT (UINT16_C(21)) #define __WASI_EFBIG (UINT16_C(22)) #define __WASI_EHOSTUNREACH (UINT16_C(23)) #define __WASI_EIDRM (UINT16_C(24)) #define __WASI_EILSEQ (UINT16_C(25)) #define __WASI_EINPROGRESS (UINT16_C(26)) #define __WASI_EINTR (UINT16_C(27)) #define __WASI_EINVAL (UINT16_C(28)) #define __WASI_EIO (UINT16_C(29)) #define __WASI_EISCONN (UINT16_C(30)) #define __WASI_EISDIR (UINT16_C(31)) #define __WASI_ELOOP (UINT16_C(32)) #define __WASI_EMFILE (UINT16_C(33)) #define __WASI_EMLINK (UINT16_C(34)) #define __WASI_EMSGSIZE (UINT16_C(35)) #define __WASI_EMULTIHOP (UINT16_C(36)) #define __WASI_ENAMETOOLONG (UINT16_C(37)) #define __WASI_ENETDOWN (UINT16_C(38)) #define __WASI_ENETRESET (UINT16_C(39)) #define __WASI_ENETUNREACH (UINT16_C(40)) #define __WASI_ENFILE (UINT16_C(41)) #define __WASI_ENOBUFS (UINT16_C(42)) #define __WASI_ENODEV (UINT16_C(43)) #define __WASI_ENOENT (UINT16_C(44)) #define __WASI_ENOEXEC (UINT16_C(45)) #define __WASI_ENOLCK (UINT16_C(46)) #define __WASI_ENOLINK (UINT16_C(47)) #define __WASI_ENOMEM (UINT16_C(48)) #define __WASI_ENOMSG (UINT16_C(49)) #define __WASI_ENOPROTOOPT (UINT16_C(50)) #define __WASI_ENOSPC (UINT16_C(51)) #define __WASI_ENOSYS (UINT16_C(52)) #define __WASI_ENOTCONN (UINT16_C(53)) #define __WASI_ENOTDIR (UINT16_C(54)) #define __WASI_ENOTEMPTY (UINT16_C(55)) #define __WASI_ENOTRECOVERABLE (UINT16_C(56)) #define __WASI_ENOTSOCK (UINT16_C(57)) #define __WASI_ENOTSUP (UINT16_C(58)) #define __WASI_ENOTTY (UINT16_C(59)) #define __WASI_ENXIO (UINT16_C(60)) #define __WASI_EOVERFLOW (UINT16_C(61)) #define __WASI_EOWNERDEAD (UINT16_C(62)) #define __WASI_EPERM (UINT16_C(63)) #define __WASI_EPIPE (UINT16_C(64)) #define __WASI_EPROTO (UINT16_C(65)) #define __WASI_EPROTONOSUPPORT (UINT16_C(66)) #define __WASI_EPROTOTYPE (UINT16_C(67)) #define __WASI_ERANGE (UINT16_C(68)) #define __WASI_EROFS (UINT16_C(69)) #define __WASI_ESPIPE (UINT16_C(70)) #define __WASI_ESRCH (UINT16_C(71)) #define __WASI_ESTALE (UINT16_C(72)) #define __WASI_ETIMEDOUT (UINT16_C(73)) #define __WASI_ETXTBSY (UINT16_C(74)) #define __WASI_EXDEV (UINT16_C(75)) #define __WASI_ENOTCAPABLE (UINT16_C(76)) typedef uint16_t __wasi_eventrwflags_t; #define __WASI_EVENT_FD_READWRITE_HANGUP (UINT16_C(0x0001)) typedef uint8_t __wasi_eventtype_t; #define __WASI_EVENTTYPE_CLOCK (UINT8_C(0)) #define __WASI_EVENTTYPE_FD_READ (UINT8_C(1)) #define __WASI_EVENTTYPE_FD_WRITE (UINT8_C(2)) typedef uint32_t __wasi_exitcode_t; typedef uint32_t __wasi_fd_t; typedef uint16_t __wasi_fdflags_t; #define __WASI_FDFLAG_APPEND (UINT16_C(0x0001)) #define __WASI_FDFLAG_DSYNC (UINT16_C(0x0002)) #define __WASI_FDFLAG_NONBLOCK (UINT16_C(0x0004)) #define __WASI_FDFLAG_RSYNC (UINT16_C(0x0008)) #define __WASI_FDFLAG_SYNC (UINT16_C(0x0010)) typedef int64_t __wasi_filedelta_t; typedef uint64_t __wasi_filesize_t; typedef uint8_t __wasi_filetype_t; #define __WASI_FILETYPE_UNKNOWN (UINT8_C(0)) #define __WASI_FILETYPE_BLOCK_DEVICE (UINT8_C(1)) #define __WASI_FILETYPE_CHARACTER_DEVICE (UINT8_C(2)) #define __WASI_FILETYPE_DIRECTORY (UINT8_C(3)) #define __WASI_FILETYPE_REGULAR_FILE (UINT8_C(4)) #define __WASI_FILETYPE_SOCKET_DGRAM (UINT8_C(5)) #define __WASI_FILETYPE_SOCKET_STREAM (UINT8_C(6)) #define __WASI_FILETYPE_SYMBOLIC_LINK (UINT8_C(7)) typedef uint16_t __wasi_fstflags_t; #define __WASI_FILESTAT_SET_ATIM (UINT16_C(0x0001)) #define __WASI_FILESTAT_SET_ATIM_NOW (UINT16_C(0x0002)) #define __WASI_FILESTAT_SET_MTIM (UINT16_C(0x0004)) #define __WASI_FILESTAT_SET_MTIM_NOW (UINT16_C(0x0008)) typedef uint64_t __wasi_inode_t; typedef uint64_t __wasi_linkcount_t; typedef uint32_t __wasi_lookupflags_t; #define __WASI_LOOKUP_SYMLINK_FOLLOW (UINT32_C(0x00000001)) typedef uint16_t __wasi_oflags_t; #define __WASI_O_CREAT (UINT16_C(0x0001)) #define __WASI_O_DIRECTORY (UINT16_C(0x0002)) #define __WASI_O_EXCL (UINT16_C(0x0004)) #define __WASI_O_TRUNC (UINT16_C(0x0008)) typedef uint16_t __wasi_riflags_t; #define __WASI_SOCK_RECV_PEEK (UINT16_C(0x0001)) #define __WASI_SOCK_RECV_WAITALL (UINT16_C(0x0002)) typedef uint64_t __wasi_rights_t; #define __WASI_RIGHT_FD_DATASYNC (UINT64_C(0x0000000000000001)) #define __WASI_RIGHT_FD_READ (UINT64_C(0x0000000000000002)) #define __WASI_RIGHT_FD_SEEK (UINT64_C(0x0000000000000004)) #define __WASI_RIGHT_FD_FDSTAT_SET_FLAGS (UINT64_C(0x0000000000000008)) #define __WASI_RIGHT_FD_SYNC (UINT64_C(0x0000000000000010)) #define __WASI_RIGHT_FD_TELL (UINT64_C(0x0000000000000020)) #define __WASI_RIGHT_FD_WRITE (UINT64_C(0x0000000000000040)) #define __WASI_RIGHT_FD_ADVISE (UINT64_C(0x0000000000000080)) #define __WASI_RIGHT_FD_ALLOCATE (UINT64_C(0x0000000000000100)) #define __WASI_RIGHT_PATH_CREATE_DIRECTORY (UINT64_C(0x0000000000000200)) #define __WASI_RIGHT_PATH_CREATE_FILE (UINT64_C(0x0000000000000400)) #define __WASI_RIGHT_PATH_LINK_SOURCE (UINT64_C(0x0000000000000800)) #define __WASI_RIGHT_PATH_LINK_TARGET (UINT64_C(0x0000000000001000)) #define __WASI_RIGHT_PATH_OPEN (UINT64_C(0x0000000000002000)) #define __WASI_RIGHT_FD_READDIR (UINT64_C(0x0000000000004000)) #define __WASI_RIGHT_PATH_READLINK (UINT64_C(0x0000000000008000)) #define __WASI_RIGHT_PATH_RENAME_SOURCE (UINT64_C(0x0000000000010000)) #define __WASI_RIGHT_PATH_RENAME_TARGET (UINT64_C(0x0000000000020000)) #define __WASI_RIGHT_PATH_FILESTAT_GET (UINT64_C(0x0000000000040000)) #define __WASI_RIGHT_PATH_FILESTAT_SET_SIZE (UINT64_C(0x0000000000080000)) #define __WASI_RIGHT_PATH_FILESTAT_SET_TIMES (UINT64_C(0x0000000000100000)) #define __WASI_RIGHT_FD_FILESTAT_GET (UINT64_C(0x0000000000200000)) #define __WASI_RIGHT_FD_FILESTAT_SET_SIZE (UINT64_C(0x0000000000400000)) #define __WASI_RIGHT_FD_FILESTAT_SET_TIMES (UINT64_C(0x0000000000800000)) #define __WASI_RIGHT_PATH_SYMLINK (UINT64_C(0x0000000001000000)) #define __WASI_RIGHT_PATH_REMOVE_DIRECTORY (UINT64_C(0x0000000002000000)) #define __WASI_RIGHT_PATH_UNLINK_FILE (UINT64_C(0x0000000004000000)) #define __WASI_RIGHT_POLL_FD_READWRITE (UINT64_C(0x0000000008000000)) #define __WASI_RIGHT_SOCK_SHUTDOWN (UINT64_C(0x0000000010000000)) typedef uint16_t __wasi_roflags_t; #define __WASI_SOCK_RECV_DATA_TRUNCATED (UINT16_C(0x0001)) typedef uint8_t __wasi_sdflags_t; #define __WASI_SHUT_RD (UINT8_C(0x01)) #define __WASI_SHUT_WR (UINT8_C(0x02)) typedef uint16_t __wasi_siflags_t; typedef uint8_t __wasi_signal_t; /* UINT8_C(0) is reserved; POSIX has special semantics for kill(pid, 0). */ #define __WASI_SIGHUP (UINT8_C(1)) #define __WASI_SIGINT (UINT8_C(2)) #define __WASI_SIGQUIT (UINT8_C(3)) #define __WASI_SIGILL (UINT8_C(4)) #define __WASI_SIGTRAP (UINT8_C(5)) #define __WASI_SIGABRT (UINT8_C(6)) #define __WASI_SIGBUS (UINT8_C(7)) #define __WASI_SIGFPE (UINT8_C(8)) #define __WASI_SIGKILL (UINT8_C(9)) #define __WASI_SIGUSR1 (UINT8_C(10)) #define __WASI_SIGSEGV (UINT8_C(11)) #define __WASI_SIGUSR2 (UINT8_C(12)) #define __WASI_SIGPIPE (UINT8_C(13)) #define __WASI_SIGALRM (UINT8_C(14)) #define __WASI_SIGTERM (UINT8_C(15)) #define __WASI_SIGCHLD (UINT8_C(16)) #define __WASI_SIGCONT (UINT8_C(17)) #define __WASI_SIGSTOP (UINT8_C(18)) #define __WASI_SIGTSTP (UINT8_C(19)) #define __WASI_SIGTTIN (UINT8_C(20)) #define __WASI_SIGTTOU (UINT8_C(21)) #define __WASI_SIGURG (UINT8_C(22)) #define __WASI_SIGXCPU (UINT8_C(23)) #define __WASI_SIGXFSZ (UINT8_C(24)) #define __WASI_SIGVTALRM (UINT8_C(25)) #define __WASI_SIGPROF (UINT8_C(26)) #define __WASI_SIGWINCH (UINT8_C(27)) #define __WASI_SIGPOLL (UINT8_C(28)) #define __WASI_SIGPWR (UINT8_C(29)) #define __WASI_SIGSYS (UINT8_C(30)) typedef uint16_t __wasi_subclockflags_t; #define __WASI_SUBSCRIPTION_CLOCK_ABSTIME (UINT16_C(0x0001)) typedef uint64_t __wasi_timestamp_t; typedef uint64_t __wasi_userdata_t; typedef uint8_t __wasi_whence_t; #define __WASI_WHENCE_SET (UINT8_C(0)) #define __WASI_WHENCE_CUR (UINT8_C(1)) #define __WASI_WHENCE_END (UINT8_C(2)) typedef uint8_t __wasi_preopentype_t; #define __WASI_PREOPENTYPE_DIR (UINT8_C(0)) typedef struct __wasi_dirent_t { __wasi_dircookie_t d_next; __wasi_inode_t d_ino; __wasi_dirnamlen_t d_namlen; __wasi_filetype_t d_type; } __wasi_dirent_t; static_assert(offsetof(__wasi_dirent_t, d_next) == 0, "non-wasi data layout"); static_assert(offsetof(__wasi_dirent_t, d_ino) == 8, "non-wasi data layout"); static_assert(offsetof(__wasi_dirent_t, d_namlen) == 16, "non-wasi data layout"); static_assert(offsetof(__wasi_dirent_t, d_type) == 20, "non-wasi data layout"); static_assert(sizeof(__wasi_dirent_t) == 24, "non-wasi data layout"); static_assert(alignof(__wasi_dirent_t) == 8, "non-wasi data layout"); typedef struct __wasi_event_t { __wasi_userdata_t userdata; __wasi_errno_t error; __wasi_eventtype_t type; union __wasi_event_u { struct __wasi_event_u_fd_readwrite_t { __wasi_filesize_t nbytes; __wasi_eventrwflags_t flags; } fd_readwrite; } u; } __wasi_event_t; static_assert(offsetof(__wasi_event_t, userdata) == 0, "non-wasi data layout"); static_assert(offsetof(__wasi_event_t, error) == 8, "non-wasi data layout"); static_assert(offsetof(__wasi_event_t, type) == 10, "non-wasi data layout"); static_assert(offsetof(__wasi_event_t, u.fd_readwrite.nbytes) == 16, "non-wasi data layout"); static_assert(offsetof(__wasi_event_t, u.fd_readwrite.flags) == 24, "non-wasi data layout"); static_assert(sizeof(__wasi_event_t) == 32, "non-wasi data layout"); static_assert(alignof(__wasi_event_t) == 8, "non-wasi data layout"); typedef struct __wasi_prestat_t { __wasi_preopentype_t pr_type; union __wasi_prestat_u { struct __wasi_prestat_u_dir_t { __wasi_size_t pr_name_len; } dir; } u; } __wasi_prestat_t; static_assert(offsetof(__wasi_prestat_t, pr_type) == 0, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || offsetof(__wasi_prestat_t, u.dir.pr_name_len) == 4, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || offsetof(__wasi_prestat_t, u.dir.pr_name_len) == 8, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || sizeof(__wasi_prestat_t) == 8, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || sizeof(__wasi_prestat_t) == 16, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || alignof(__wasi_prestat_t) == 4, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || alignof(__wasi_prestat_t) == 8, "non-wasi data layout"); typedef struct __wasi_fdstat_t { __wasi_filetype_t fs_filetype; __wasi_fdflags_t fs_flags; __wasi_rights_t fs_rights_base; __wasi_rights_t fs_rights_inheriting; } __wasi_fdstat_t; static_assert(offsetof(__wasi_fdstat_t, fs_filetype) == 0, "non-wasi data layout"); static_assert(offsetof(__wasi_fdstat_t, fs_flags) == 2, "non-wasi data layout"); static_assert(offsetof(__wasi_fdstat_t, fs_rights_base) == 8, "non-wasi data layout"); static_assert(offsetof(__wasi_fdstat_t, fs_rights_inheriting) == 16, "non-wasi data layout"); static_assert(sizeof(__wasi_fdstat_t) == 24, "non-wasi data layout"); static_assert(alignof(__wasi_fdstat_t) == 8, "non-wasi data layout"); typedef struct __wasi_filestat_t { __wasi_device_t st_dev; __wasi_inode_t st_ino; __wasi_filetype_t st_filetype; __wasi_linkcount_t st_nlink; __wasi_filesize_t st_size; __wasi_timestamp_t st_atim; __wasi_timestamp_t st_mtim; __wasi_timestamp_t st_ctim; } __wasi_filestat_t; static_assert(offsetof(__wasi_filestat_t, st_dev) == 0, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_ino) == 8, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_filetype) == 16, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_nlink) == 24, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_size) == 32, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_atim) == 40, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_mtim) == 48, "non-wasi data layout"); static_assert(offsetof(__wasi_filestat_t, st_ctim) == 56, "non-wasi data layout"); static_assert(sizeof(__wasi_filestat_t) == 64, "non-wasi data layout"); static_assert(alignof(__wasi_filestat_t) == 8, "non-wasi data layout"); typedef struct __wasi_ciovec_t { __wasi_void_ptr_t buf; __wasi_size_t buf_len; } __wasi_ciovec_t; static_assert(offsetof(__wasi_ciovec_t, buf) == 0, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || offsetof(__wasi_ciovec_t, buf_len) == 4, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || offsetof(__wasi_ciovec_t, buf_len) == 8, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || sizeof(__wasi_ciovec_t) == 8, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || sizeof(__wasi_ciovec_t) == 16, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || alignof(__wasi_ciovec_t) == 4, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || alignof(__wasi_ciovec_t) == 8, "non-wasi data layout"); typedef struct __wasi_iovec_t { __wasi_void_ptr_t buf; __wasi_size_t buf_len; } __wasi_iovec_t; static_assert(offsetof(__wasi_iovec_t, buf) == 0, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || offsetof(__wasi_iovec_t, buf_len) == 4, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || offsetof(__wasi_iovec_t, buf_len) == 8, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || sizeof(__wasi_iovec_t) == 8, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || sizeof(__wasi_iovec_t) == 16, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 4 || alignof(__wasi_iovec_t) == 4, "non-wasi data layout"); static_assert(sizeof(__wasi_void_ptr_t) != 8 || alignof(__wasi_iovec_t) == 8, "non-wasi data layout"); typedef struct __wasi_subscription_t { __wasi_userdata_t userdata; __wasi_eventtype_t type; union __wasi_subscription_u { struct __wasi_subscription_u_clock_t { __wasi_clockid_t clock_id; __wasi_timestamp_t timeout; __wasi_timestamp_t precision; __wasi_subclockflags_t flags; } clock; struct __wasi_subscription_u_fd_readwrite_t { __wasi_fd_t fd; } fd_readwrite; } u; } __wasi_subscription_t; static_assert(offsetof(__wasi_subscription_t, userdata) == 0, "non-wasi data layout"); static_assert(offsetof(__wasi_subscription_t, type) == 8, "non-wasi data layout"); static_assert(offsetof(__wasi_subscription_t, u.clock.clock_id) == 16, "non-wasi data layout"); static_assert(offsetof(__wasi_subscription_t, u.clock.timeout) == 24, "non-wasi data layout"); static_assert(offsetof(__wasi_subscription_t, u.clock.precision) == 32, "non-wasi data layout"); static_assert(offsetof(__wasi_subscription_t, u.clock.flags) == 40, "non-wasi data layout"); static_assert(offsetof(__wasi_subscription_t, u.fd_readwrite.fd) == 16, "non-wasi data layout"); static_assert(sizeof(__wasi_subscription_t) == 48, "non-wasi data layout"); static_assert(alignof(__wasi_subscription_t) == 8, "non-wasi data layout"); #define __WASI_IOV_MAX 1024 ================================================ FILE: Include/WAVM/WASM/WASM.h ================================================ #pragma once #include #include #include "WAVM/IR/Validate.h" #include "WAVM/Inline/BasicTypes.h" namespace WAVM { namespace IR { struct Module; }} namespace WAVM { namespace WASM { // The magic number that is at the beginning of every WASM binary module. inline constexpr U8 magicNumber[4] = {0x00, 0x61, 0x73, 0x6d}; // Saves a binary module. WAVM_API std::vector saveBinaryModule(const IR::Module& module); // Loads a binary module, returning either an error or a module. // If true is returned, the load succeeded, and outModule contains the loaded module. // If false is returned, the load failed. If outError != nullptr, *outError will contain the // error that caused the load to fail. struct LoadError { enum class Type { malformed, invalid }; Type type; std::string message; }; WAVM_API bool loadBinaryModule(const U8* wasmBytes, Uptr numWASMBytes, IR::Module& outModule, LoadError* outError = nullptr); }} ================================================ FILE: Include/WAVM/WASTParse/TestScript.h ================================================ #pragma once #include #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/WASTParse/WASTParse.h" namespace WAVM { namespace WAST { struct Command { enum Type { _register, action, assert_return, assert_return_arithmetic_nan, assert_return_canonical_nan, assert_return_arithmetic_nan_f32x4, assert_return_canonical_nan_f32x4, assert_return_arithmetic_nan_f64x2, assert_return_canonical_nan_f64x2, assert_return_func, assert_trap, assert_throws, assert_invalid, assert_malformed, assert_unlinkable, thread, wait, }; const Type type; const TextFileLocus locus; Command(Type inType, TextFileLocus&& inLocus) : type(inType), locus(inLocus) {} virtual ~Command() {} }; // Parse a test script from a string. Returns true if it succeeds, and writes the test commands // to outTestCommands. WAVM_API void parseTestCommands(const char* string, Uptr stringLength, const IR::FeatureSpec& featureSpec, std::vector>& outTestCommands, std::vector& outErrors); // Actions enum class ActionType { _module, invoke, get, }; enum class ExpectedTrapType { outOfBounds, outOfBoundsMemoryAccess, outOfBoundsTableAccess, outOfBoundsDataSegmentAccess, outOfBoundsElemSegmentAccess, stackOverflow, integerDivideByZeroOrIntegerOverflow, invalidFloatOperation, invokeSignatureMismatch, reachedUnreachable, indirectCallSignatureMismatch, uninitializedTableElement, outOfMemory, misalignedAtomicMemoryAccess, waitOnUnsharedMemory, invalidArgument }; struct Action { const ActionType type; const TextFileLocus locus; Action(ActionType inType, TextFileLocus&& inLocus) : type(inType), locus(inLocus) {} virtual ~Action() {} }; struct ModuleAction : Action { std::string internalModuleName; std::unique_ptr module; ModuleAction(TextFileLocus&& inLocus, std::string&& inInternalModuleName, std::unique_ptr&& inModule) : Action(ActionType::_module, std::move(inLocus)) , internalModuleName(inInternalModuleName) , module(std::move(inModule)) { } }; struct InvokeAction : Action { std::string internalModuleName; std::string exportName; std::vector arguments; InvokeAction(TextFileLocus&& inLocus, std::string&& inInternalModuleName, std::string&& inExportName, std::vector&& inArguments) : Action(ActionType::invoke, std::move(inLocus)) , internalModuleName(inInternalModuleName) , exportName(inExportName) , arguments(inArguments) { } }; struct GetAction : Action { std::string internalModuleName; std::string exportName; GetAction(TextFileLocus&& inLocus, std::string&& inInternalModuleName, std::string&& inExportName) : Action(ActionType::get, std::move(inLocus)) , internalModuleName(inInternalModuleName) , exportName(inExportName) { } }; // Commands struct RegisterCommand : Command { std::string moduleName; std::string internalModuleName; RegisterCommand(TextFileLocus&& inLocus, std::string&& inModuleName, std::string&& inInternalModuleName) : Command(Command::_register, std::move(inLocus)) , moduleName(inModuleName) , internalModuleName(inInternalModuleName) { } }; struct ActionCommand : Command { std::unique_ptr action; ActionCommand(TextFileLocus&& inLocus, std::unique_ptr&& inAction) : Command(Command::action, std::move(inLocus)), action(std::move(inAction)) { } }; template struct FloatResultSet { enum class Type { literal, canonicalNaN, arithmeticNaN, }; Type type; Float literal; }; struct ResultSet { enum class Type { i32_const, i64_const, i8x16_const, i16x8_const, i32x4_const, i64x2_const, f32_const, f64_const, f32x4_const, f64x2_const, ref_extern, ref_func, ref_null, either, }; Type type; union { I32 i32; I64 i64; I8 i8x16[16]; I16 i16x8[8]; I32 i32x4[4]; I64 i64x2[2]; FloatResultSet f32; FloatResultSet f64; FloatResultSet f32x4[4]; FloatResultSet f64x2[2]; Runtime::Object* object; IR::ReferenceType nullReferenceType; std::vector> alternatives; }; ResultSet() : type(Type::i32_const), i32(0) {} ResultSet(const ResultSet& copyee) { copyFrom(copyee); } ResultSet(ResultSet&& movee) { moveFrom(std::move(movee)); } ResultSet& operator=(const ResultSet& copyee) { this->~ResultSet(); copyFrom(copyee); return *this; } ResultSet& operator=(ResultSet&& movee) { this->~ResultSet(); moveFrom(std::move(movee)); return *this; } ~ResultSet() { if(type == Type::either) { alternatives.~vector>(); } } private: void copyFrom(const ResultSet& copyee) { type = copyee.type; switch(type) { case Type::i32_const: i32 = copyee.i32; break; case Type::i64_const: i64 = copyee.i64; break; case Type::i8x16_const: memcpy(i8x16, copyee.i8x16, sizeof(i8x16)); break; case Type::i16x8_const: memcpy(i16x8, copyee.i16x8, sizeof(i16x8)); break; case Type::i32x4_const: memcpy(i32x4, copyee.i32x4, sizeof(i32x4)); break; case Type::i64x2_const: memcpy(i64x2, copyee.i64x2, sizeof(i64x2)); break; case Type::f32_const: f32 = copyee.f32; break; case Type::f64_const: f64 = copyee.f64; break; case Type::f32x4_const: memcpy(f32x4, copyee.f32x4, sizeof(f32x4)); break; case Type::f64x2_const: memcpy(f64x2, copyee.f64x2, sizeof(f64x2)); break; case Type::ref_extern: object = copyee.object; break; case Type::ref_func: break; case Type::ref_null: nullReferenceType = copyee.nullReferenceType; break; case Type::either: new(&alternatives) std::vector>(copyee.alternatives); break; default: WAVM_UNREACHABLE(); }; } void moveFrom(ResultSet&& movee) { type = movee.type; switch(type) { case Type::i32_const: i32 = movee.i32; break; case Type::i64_const: i64 = movee.i64; break; case Type::i8x16_const: memcpy(i8x16, movee.i8x16, sizeof(i8x16)); break; case Type::i16x8_const: memcpy(i16x8, movee.i16x8, sizeof(i16x8)); break; case Type::i32x4_const: memcpy(i32x4, movee.i32x4, sizeof(i32x4)); break; case Type::i64x2_const: memcpy(i64x2, movee.i64x2, sizeof(i64x2)); break; case Type::f32_const: f32 = movee.f32; break; case Type::f64_const: f64 = movee.f64; break; case Type::f32x4_const: memcpy(f32x4, movee.f32x4, sizeof(f32x4)); break; case Type::f64x2_const: memcpy(f64x2, movee.f64x2, sizeof(f64x2)); break; case Type::ref_extern: object = movee.object; break; case Type::ref_func: break; case Type::ref_null: nullReferenceType = movee.nullReferenceType; break; case Type::either: new(&alternatives) std::vector>(std::move(movee.alternatives)); break; default: WAVM_UNREACHABLE(); }; } }; struct AssertReturnCommand : Command { std::unique_ptr action; std::vector expectedResultSets; AssertReturnCommand(TextFileLocus&& inLocus, std::unique_ptr&& inAction, std::vector&& inExpectedResultSets) : Command(Command::assert_return, std::move(inLocus)) , action(std::move(inAction)) , expectedResultSets(inExpectedResultSets) { } }; struct AssertReturnNaNCommand : Command { std::unique_ptr action; AssertReturnNaNCommand(Command::Type inType, TextFileLocus&& inLocus, std::unique_ptr&& inAction) : Command(inType, std::move(inLocus)), action(std::move(inAction)) { } }; struct AssertReturnFuncCommand : Command { std::unique_ptr action; AssertReturnFuncCommand(TextFileLocus&& inLocus, std::unique_ptr&& inAction) : Command(Command::assert_return_func, std::move(inLocus)), action(std::move(inAction)) { } }; struct AssertTrapCommand : Command { std::unique_ptr action; ExpectedTrapType expectedType; AssertTrapCommand(TextFileLocus&& inLocus, std::unique_ptr&& inAction, ExpectedTrapType inExpectedType) : Command(Command::assert_trap, std::move(inLocus)) , action(std::move(inAction)) , expectedType(inExpectedType) { } }; struct AssertThrowsCommand : Command { std::unique_ptr action; std::string exceptionTypeInternalModuleName; std::string exceptionTypeExportName; std::vector expectedArguments; AssertThrowsCommand(TextFileLocus&& inLocus, std::unique_ptr&& inAction, std::string&& inExceptionTypeInternalModuleName, std::string&& inExceptionTypeExportName, std::vector&& inExpectedArguments) : Command(Command::assert_throws, std::move(inLocus)) , action(std::move(inAction)) , exceptionTypeInternalModuleName(inExceptionTypeInternalModuleName) , exceptionTypeExportName(inExceptionTypeExportName) , expectedArguments(inExpectedArguments) { } }; enum class QuotedModuleType { none, text, binary }; enum class InvalidOrMalformed { wellFormedAndValid, invalid, malformed }; struct AssertInvalidOrMalformedCommand : Command { InvalidOrMalformed wasInvalidOrMalformed; QuotedModuleType quotedModuleType; std::string quotedModuleString; AssertInvalidOrMalformedCommand(Command::Type inType, TextFileLocus&& inLocus, InvalidOrMalformed inWasInvalidOrMalformed, QuotedModuleType inQuotedModuleType, std::string&& inQuotedModuleString) : Command(inType, std::move(inLocus)) , wasInvalidOrMalformed(inWasInvalidOrMalformed) , quotedModuleType(inQuotedModuleType) , quotedModuleString(inQuotedModuleString) { } }; struct AssertUnlinkableCommand : Command { std::unique_ptr moduleAction; AssertUnlinkableCommand(TextFileLocus&& inLocus, std::unique_ptr inModuleAction) : Command(Command::assert_unlinkable, std::move(inLocus)) , moduleAction(std::move(inModuleAction)) { } }; struct ThreadCommand : Command { std::string threadName; std::vector sharedModuleInternalNames; std::vector> commands; ThreadCommand(TextFileLocus&& inLocus, std::string&& inThreadName, std::vector inSharedModuleInternalNames, std::vector>&& inCommands) : Command(Command::thread, std::move(inLocus)) , threadName(inThreadName) , sharedModuleInternalNames(inSharedModuleInternalNames) , commands(std::move(inCommands)) { } }; struct WaitCommand : Command { std::string threadName; WaitCommand(TextFileLocus&& inLocus, std::string&& inThreadName) : Command(Command::wait, std::move(inLocus)), threadName(inThreadName) { } }; }} ================================================ FILE: Include/WAVM/WASTParse/WASTParse.h ================================================ #pragma once #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Logging/Logging.h" namespace WAVM { namespace IR { struct Module; }} namespace WAVM { namespace WAST { // A location in a text file. struct TextFileLocus { Uptr lineStartOffset; Uptr lineEndOffset; U32 newlines; U32 tabs; U32 characters; TextFileLocus() : newlines(0), tabs(0), characters(0) {} U32 lineNumber() const { return newlines + 1; } U32 column(U32 spacesPerTab = 4) const { return tabs * spacesPerTab + characters + 1; } std::string describe(U32 spacesPerTab = 4) const { return std::to_string(lineNumber()) + ":" + std::to_string(column(spacesPerTab)); } friend bool operator==(const TextFileLocus& a, const TextFileLocus& b) { return a.lineStartOffset == b.lineStartOffset && a.lineEndOffset == b.lineEndOffset && a.newlines == b.newlines && a.tabs == b.tabs && a.characters == b.characters; } friend bool operator!=(const TextFileLocus& a, const TextFileLocus& b) { return !(a == b); } }; // A WAST parse error. struct Error { TextFileLocus locus; std::string message; friend bool operator==(const Error& a, const Error& b) { return a.locus == b.locus && a.message == b.message; } friend bool operator!=(const Error& a, const Error& b) { return !(a == b); } }; // Parse a module from a string. Returns true if it succeeds, and writes the module to // outModule. If it fails, returns false and appends a list of errors to outErrors. WAVM_API bool parseModule(const char* string, Uptr stringLength, IR::Module& outModule, std::vector& outErrors); WAVM_API void reportParseErrors(const char* filename, const char* source, const std::vector& parseErrors, Log::Category outputCategory = Log::Category::error); }} ================================================ FILE: Include/WAVM/WASTPrint/WASTPrint.h ================================================ #pragma once #include namespace WAVM { namespace IR { struct Module; }} namespace WAVM { namespace WAST { // Prints a module in WAST format. WAVM_API std::string print(const IR::Module& module); }} ================================================ FILE: Include/WAVM/wavm-c/wasm-c-api.LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Include/WAVM/wavm-c/wavm-c.h ================================================ // WebAssembly C API #ifndef __WASM_H #define __WASM_H #include #include // IWYU pragma: keep #include #include #ifndef WASM_C_API #ifdef _WIN32 #define WASM_C_API __declspec(dllimport) #else #define WASM_C_API #endif #endif #ifdef __has_attribute #define WASM_IGNORE_UNUSED __attribute__((unused)) #else #define WASM_IGNORE_UNUSED #endif // Opaque types #ifndef WASM_OPAQUE_TYPES_DEFINED typedef struct wasm_config_t wasm_config_t; typedef struct wasm_engine_t wasm_engine_t; typedef struct wasm_compartment_t wasm_compartment_t; typedef struct wasm_store_t wasm_store_t; typedef struct wasm_valtype_t wasm_valtype_t; typedef struct wasm_functype_t wasm_functype_t; typedef struct wasm_tabletype_t wasm_tabletype_t; typedef struct wasm_memorytype_t wasm_memorytype_t; typedef struct wasm_globaltype_t wasm_globaltype_t; typedef struct wasm_externtype_t wasm_externtype_t; typedef struct wasm_ref_t wasm_ref_t; typedef struct wasm_trap_t wasm_trap_t; typedef struct wasm_foreign_t wasm_foreign_t; typedef struct wasm_module_t wasm_module_t; typedef struct wasm_func_t wasm_func_t; typedef struct wasm_table_t wasm_table_t; typedef struct wasm_memory_t wasm_memory_t; typedef struct wasm_global_t wasm_global_t; typedef struct wasm_extern_t wasm_extern_t; typedef struct wasm_instance_t wasm_instance_t; typedef struct wasm_shared_module_t wasm_shared_module_t; typedef struct wasm_shared_func_t wasm_shared_func_t; typedef struct wasm_shared_table_t wasm_shared_table_t; typedef struct wasm_shared_memory_t wasm_shared_memory_t; typedef struct wasm_shared_foreign_t wasm_shared_foreign_t; #endif #ifdef __cplusplus extern "C" { #endif /////////////////////////////////////////////////////////////////////////////// // Auxiliaries typedef float wasm_float32_t; typedef double wasm_float64_t; // Ownership #define own // The qualifier `own` is used to indicate ownership of data in this API. // It is intended to be interpreted similar to a `const` qualifier: // // - `own wasm_xxx_t*` owns the pointed-to data // - `own wasm_xxx_t` distributes to all fields of a struct or union `xxx` // - `own wasm_xxx_vec_t` owns the vector as well as its elements(!) // - an `own` function parameter passes ownership from caller to callee // - an `own` function result passes ownership from callee to caller // - an exception are `own` pointer parameters named `out`, which are copy-back // output parameters passing back ownership from callee to caller // // Own data is created by `wasm_xxx_new` functions and some others. // It must be released with the corresponding `wasm_xxx_delete` function. // // Deleting a reference does not necessarily delete the underlying object, // it merely indicates that this owner no longer uses it. // // For vectors, `const wasm_xxx_vec_t` is used informally to indicate that // neither the vector nor its elements should be modified. // TODO: introduce proper `wasm_xxx_const_vec_t`? #define WASM_DECLARE_OWN(name) WASM_C_API void wasm_##name##_delete(own wasm_##name##_t*); /////////////////////////////////////////////////////////////////////////////// // Runtime Environment // Configuration WASM_DECLARE_OWN(config) WASM_C_API own wasm_config_t* wasm_config_new(); #define WASM_DECLARE_FEATURE(feature) \ WASM_C_API void wasm_config_feature_set_##feature(wasm_config_t* config, bool enable); // Standardized, or mature proposed standard extensions that are expected to be standardized without // breaking backward compatibility: enabled by default. WASM_DECLARE_FEATURE(import_export_mutable_globals) WASM_DECLARE_FEATURE(nontrapping_float_to_int) WASM_DECLARE_FEATURE(sign_extension) WASM_DECLARE_FEATURE(bulk_memory_ops) // Proposed standard extensions: disabled by default. WASM_DECLARE_FEATURE(simd) WASM_DECLARE_FEATURE(atomics) WASM_DECLARE_FEATURE(exception_handling) WASM_DECLARE_FEATURE(multivalue) WASM_DECLARE_FEATURE(reference_types) WASM_DECLARE_FEATURE(extended_name_section) WASM_DECLARE_FEATURE(multimemory) // Non-standard extensions. WASM_DECLARE_FEATURE(shared_tables) WASM_DECLARE_FEATURE(allow_legacy_inst_names) WASM_DECLARE_FEATURE(any_extern_kind_elems) WASM_DECLARE_FEATURE(wat_quoted_names) WASM_DECLARE_FEATURE(wat_custom_sections) #undef WASM_DECLARE_FEATURE // Engine WASM_DECLARE_OWN(engine) WASM_C_API own wasm_engine_t* wasm_engine_new(); WASM_C_API own wasm_engine_t* wasm_engine_new_with_config(own wasm_config_t*); // Compartment WASM_DECLARE_OWN(compartment) WASM_C_API own wasm_compartment_t* wasm_compartment_new(wasm_engine_t* engine, const char* debug_name); WASM_C_API own wasm_compartment_t* wasm_compartment_clone(const wasm_compartment_t*); WASM_C_API bool wasm_compartment_contains(const wasm_compartment_t*, const wasm_ref_t*); // Store WASM_DECLARE_OWN(store) WASM_C_API own wasm_store_t* wasm_store_new(wasm_compartment_t*, const char* debug_name); /////////////////////////////////////////////////////////////////////////////// // Type Representations // Type attributes typedef uint8_t wasm_mutability_t; enum wasm_mutability_enum { WASM_CONST, WASM_VAR, }; typedef uint8_t wasm_shared_t; enum wasm_shared_enum { WASM_NOTSHARED, WASM_SHARED, }; typedef uint8_t wasm_index_t; enum wasm_index_enum { WASM_INDEX_I32, WASM_INDEX_I64, }; typedef struct wasm_limits_t { uint32_t min; uint32_t max; } wasm_limits_t; WASM_IGNORE_UNUSED static const uint32_t wasm_limits_max_default = 0xffffffff; // Generic #define WASM_DECLARE_TYPE(name) \ WASM_DECLARE_OWN(name) \ \ WASM_C_API own wasm_##name##_t* wasm_##name##_copy(wasm_##name##_t*); // Value Types WASM_DECLARE_TYPE(valtype) typedef uint8_t wasm_valkind_t; enum wasm_valkind_enum { WASM_I32, WASM_I64, WASM_F32, WASM_F64, WASM_V128, WASM_ANYREF = 128, WASM_FUNCREF, }; WASM_C_API own wasm_valtype_t* wasm_valtype_new(wasm_valkind_t); WASM_C_API wasm_valkind_t wasm_valtype_kind(const wasm_valtype_t*); WASM_IGNORE_UNUSED static inline bool wasm_valkind_is_num(wasm_valkind_t k) { return k < WASM_ANYREF; } WASM_IGNORE_UNUSED static inline bool wasm_valkind_is_ref(wasm_valkind_t k) { return k >= WASM_ANYREF; } WASM_IGNORE_UNUSED static inline bool wasm_valtype_is_num(const wasm_valtype_t* t) { return wasm_valkind_is_num(wasm_valtype_kind(t)); } WASM_IGNORE_UNUSED static inline bool wasm_valtype_is_ref(const wasm_valtype_t* t) { return wasm_valkind_is_ref(wasm_valtype_kind(t)); } // Function Types WASM_DECLARE_TYPE(functype) WASM_C_API own wasm_functype_t* wasm_functype_new(own wasm_valtype_t** params, size_t num_params, own wasm_valtype_t** results, size_t num_results); WASM_C_API size_t wasm_functype_num_params(const wasm_functype_t* type); WASM_C_API wasm_valtype_t* wasm_functype_param(const wasm_functype_t* type, size_t index); WASM_C_API size_t wasm_functype_num_results(const wasm_functype_t* type); WASM_C_API wasm_valtype_t* wasm_functype_result(const wasm_functype_t* type, size_t index); // Global Types WASM_DECLARE_TYPE(globaltype) WASM_C_API own wasm_globaltype_t* wasm_globaltype_new(own wasm_valtype_t*, wasm_mutability_t); WASM_C_API const wasm_valtype_t* wasm_globaltype_content(const wasm_globaltype_t*); WASM_C_API wasm_mutability_t wasm_globaltype_mutability(const wasm_globaltype_t*); // Table Types WASM_DECLARE_TYPE(tabletype) WASM_C_API own wasm_tabletype_t* wasm_tabletype_new(own wasm_valtype_t*, const wasm_limits_t*, wasm_shared_t, wasm_index_t); WASM_C_API const wasm_valtype_t* wasm_tabletype_element(const wasm_tabletype_t*); WASM_C_API const wasm_limits_t* wasm_tabletype_limits(const wasm_tabletype_t*); WASM_C_API wasm_shared_t wasm_tabletype_shared(const wasm_tabletype_t*); WASM_C_API wasm_index_t wasm_tabletype_index(const wasm_tabletype_t*); // Memory Types WASM_DECLARE_TYPE(memorytype) WASM_C_API own wasm_memorytype_t* wasm_memorytype_new(const wasm_limits_t*, wasm_shared_t, wasm_index_t); WASM_C_API const wasm_limits_t* wasm_memorytype_limits(const wasm_memorytype_t*); WASM_C_API wasm_shared_t wasm_memorytype_shared(const wasm_memorytype_t*); WASM_C_API wasm_index_t wasm_memorytype_index(const wasm_memorytype_t*); // Extern Types WASM_DECLARE_TYPE(externtype) typedef uint8_t wasm_externkind_t; enum wasm_externkind_enum { WASM_EXTERN_FUNC, WASM_EXTERN_GLOBAL, WASM_EXTERN_TABLE, WASM_EXTERN_MEMORY, }; WASM_C_API wasm_externkind_t wasm_externtype_kind(const wasm_externtype_t*); WASM_C_API wasm_externtype_t* wasm_functype_as_externtype(wasm_functype_t*); WASM_C_API wasm_externtype_t* wasm_globaltype_as_externtype(wasm_globaltype_t*); WASM_C_API wasm_externtype_t* wasm_tabletype_as_externtype(wasm_tabletype_t*); WASM_C_API wasm_externtype_t* wasm_memorytype_as_externtype(wasm_memorytype_t*); WASM_C_API wasm_functype_t* wasm_externtype_as_functype(wasm_externtype_t*); WASM_C_API wasm_globaltype_t* wasm_externtype_as_globaltype(wasm_externtype_t*); WASM_C_API wasm_tabletype_t* wasm_externtype_as_tabletype(wasm_externtype_t*); WASM_C_API wasm_memorytype_t* wasm_externtype_as_memorytype(wasm_externtype_t*); WASM_C_API const wasm_externtype_t* wasm_functype_as_externtype_const(const wasm_functype_t*); WASM_C_API const wasm_externtype_t* wasm_globaltype_as_externtype_const(const wasm_globaltype_t*); WASM_C_API const wasm_externtype_t* wasm_tabletype_as_externtype_const(const wasm_tabletype_t*); WASM_C_API const wasm_externtype_t* wasm_memorytype_as_externtype_const(const wasm_memorytype_t*); WASM_C_API const wasm_functype_t* wasm_externtype_as_functype_const(const wasm_externtype_t*); WASM_C_API const wasm_globaltype_t* wasm_externtype_as_globaltype_const(const wasm_externtype_t*); WASM_C_API const wasm_tabletype_t* wasm_externtype_as_tabletype_const(const wasm_externtype_t*); WASM_C_API const wasm_memorytype_t* wasm_externtype_as_memorytype_const(const wasm_externtype_t*); // Imports typedef struct wasm_import_t { const char* module; size_t num_module_bytes; const char* name; size_t num_name_bytes; wasm_externtype_t* type; } wasm_import_t; // Exports typedef struct wasm_export_t { const char* name; size_t num_name_bytes; wasm_externtype_t* type; } wasm_export_t; /////////////////////////////////////////////////////////////////////////////// // Runtime Objects // Values // NOTE: not 128-bit aligned typedef struct wasm_v128_t { uint64_t u64x2[2]; } wasm_v128_t; typedef union wasm_val_t { int32_t i32; int64_t i64; wasm_float32_t f32; wasm_float64_t f64; wasm_v128_t v128; wasm_ref_t* ref; } wasm_val_t; WASM_C_API void wasm_val_delete(wasm_valkind_t kind, own wasm_val_t* v); WASM_C_API void wasm_val_copy(wasm_valkind_t kind, own wasm_val_t* out, const wasm_val_t*); // References #define WASM_DECLARE_REF_BASE(name) \ WASM_DECLARE_OWN(name) \ \ WASM_C_API own wasm_##name##_t* wasm_##name##_copy(const wasm_##name##_t*); \ WASM_C_API bool wasm_##name##_same(const wasm_##name##_t*, const wasm_##name##_t*); \ \ WASM_C_API void* wasm_##name##_get_host_info(const wasm_##name##_t*); \ WASM_C_API void wasm_##name##_set_host_info(wasm_##name##_t*, void*); \ WASM_C_API void wasm_##name##_set_host_info_with_finalizer( \ wasm_##name##_t*, void*, void (*)(void*)); \ \ WASM_C_API own wasm_##name##_t* wasm_##name##_remap_to_cloned_compartment( \ const wasm_##name##_t*, const wasm_compartment_t*); \ \ WASM_C_API const char* wasm_##name##_name(const wasm_##name##_t*); #define WASM_DECLARE_REF(name) \ WASM_DECLARE_REF_BASE(name) \ \ WASM_C_API wasm_ref_t* wasm_##name##_as_ref(wasm_##name##_t*); \ WASM_C_API wasm_##name##_t* wasm_ref_as_##name(wasm_ref_t*); \ WASM_C_API const wasm_ref_t* wasm_##name##_as_ref_const(const wasm_##name##_t*); \ WASM_C_API const wasm_##name##_t* wasm_ref_as_##name##_const(const wasm_ref_t*); #define WASM_DECLARE_SHAREABLE_REF(name) \ WASM_DECLARE_REF(name) \ WASM_DECLARE_OWN(shared_##name) \ \ WASM_C_API own wasm_shared_##name##_t* wasm_##name##_share(const wasm_##name##_t*); \ WASM_C_API own wasm_##name##_t* wasm_##name##_obtain(wasm_store_t*, \ const wasm_shared_##name##_t*); WASM_DECLARE_REF_BASE(ref) // Frames typedef struct wasm_frame_t { wasm_func_t* function; size_t instr_index; } wasm_frame_t; // Traps WASM_DECLARE_REF(trap) WASM_C_API own wasm_trap_t* wasm_trap_new(wasm_compartment_t*, const char* message, size_t num_message_bytes); WASM_C_API bool wasm_trap_message(const wasm_trap_t*, char* out_message, size_t* inout_num_message_bytes); WASM_C_API size_t wasm_trap_stack_num_frames(const wasm_trap_t*); WASM_C_API void wasm_trap_stack_frame(const wasm_trap_t*, size_t index, own wasm_frame_t* out_frame); // Foreign Objects WASM_DECLARE_SHAREABLE_REF(foreign) WASM_C_API own wasm_foreign_t* wasm_foreign_new(wasm_compartment_t*, const char* debug_name); // Modules WASM_DECLARE_TYPE(module) WASM_C_API own wasm_module_t* wasm_module_new(wasm_engine_t*, const char* binary, size_t num_binary_bytes); WASM_C_API own wasm_module_t* wasm_module_new_text(wasm_engine_t*, const char* text, size_t num_text_chars); WASM_C_API own char* wasm_module_print(const wasm_module_t* module, size_t* out_num_chars); WASM_C_API bool wasm_module_validate(const char* binary, size_t num_binary_bytes); WASM_C_API size_t wasm_module_num_imports(const wasm_module_t* module); WASM_C_API void wasm_module_import(const wasm_module_t* module, size_t index, own wasm_import_t* out_import); WASM_C_API size_t wasm_module_num_exports(const wasm_module_t* module); WASM_C_API void wasm_module_export(const wasm_module_t* module, size_t index, own wasm_export_t* out_export); // Function Instances WASM_DECLARE_SHAREABLE_REF(func) typedef own wasm_trap_t* (*wasm_func_callback_t)(const wasm_val_t args[], wasm_val_t results[]); typedef own wasm_trap_t* (*wasm_func_callback_with_env_t)(void* env, const wasm_val_t args[], wasm_val_t results[]); WASM_C_API own wasm_func_t* wasm_func_new(wasm_compartment_t*, const wasm_functype_t*, wasm_func_callback_t, const char* debug_name); WASM_C_API own wasm_func_t* wasm_func_new_with_env(wasm_compartment_t*, const wasm_functype_t* type, wasm_func_callback_with_env_t, void* env, void (*finalizer)(void*), const char* debug_name); WASM_C_API own wasm_functype_t* wasm_func_type(const wasm_func_t*); WASM_C_API size_t wasm_func_param_arity(const wasm_func_t*); WASM_C_API size_t wasm_func_result_arity(const wasm_func_t*); WASM_C_API own wasm_trap_t* wasm_func_call(wasm_store_t*, const wasm_func_t*, const wasm_val_t args[], wasm_val_t results[]); // Global Instances WASM_DECLARE_REF(global) WASM_C_API own wasm_global_t* wasm_global_new(wasm_compartment_t*, const wasm_globaltype_t*, const wasm_val_t*, const char* debug_name); WASM_C_API own wasm_globaltype_t* wasm_global_type(const wasm_global_t*); WASM_C_API void wasm_global_get(wasm_store_t*, const wasm_global_t*, own wasm_val_t* out); WASM_C_API void wasm_global_set(wasm_store_t*, wasm_global_t*, const wasm_val_t*); // Table Instances WASM_DECLARE_SHAREABLE_REF(table) typedef uint32_t wasm_table_size_t; WASM_IGNORE_UNUSED static const wasm_table_size_t WASM_TABLE_SIZE_MAX = UINT32_MAX; WASM_C_API own wasm_table_t* wasm_table_new(wasm_compartment_t*, const wasm_tabletype_t*, wasm_ref_t* init, const char* debug_name); WASM_C_API own wasm_tabletype_t* wasm_table_type(const wasm_table_t*); WASM_C_API own wasm_ref_t* wasm_table_get(const wasm_table_t* table, wasm_table_size_t index); WASM_C_API bool wasm_table_set(wasm_table_t* table, wasm_table_size_t index, wasm_ref_t* value); WASM_C_API wasm_table_size_t wasm_table_size(const wasm_table_t* table); WASM_C_API bool wasm_table_grow(wasm_table_t* table, wasm_table_size_t delta, wasm_ref_t* init, wasm_table_size_t* out_previous_size); // Memory Instances WASM_DECLARE_SHAREABLE_REF(memory) typedef uint32_t wasm_memory_pages_t; WASM_IGNORE_UNUSED static const wasm_memory_pages_t WASM_MEMORY_PAGES_MAX = UINT32_MAX; WASM_IGNORE_UNUSED static const size_t MEMORY_PAGE_SIZE = 0x10000; WASM_C_API own wasm_memory_t* wasm_memory_new(wasm_compartment_t*, const wasm_memorytype_t*, const char* debug_name); WASM_C_API own wasm_memorytype_t* wasm_memory_type(const wasm_memory_t*); WASM_C_API char* wasm_memory_data(wasm_memory_t*); WASM_C_API size_t wasm_memory_data_size(const wasm_memory_t*); WASM_C_API wasm_memory_pages_t wasm_memory_size(const wasm_memory_t*); WASM_C_API bool wasm_memory_grow(wasm_memory_t*, wasm_memory_pages_t delta, wasm_memory_pages_t* out_previous_size); // Externals WASM_DECLARE_REF(extern) WASM_C_API wasm_externkind_t wasm_extern_kind(const wasm_extern_t*); WASM_C_API own wasm_externtype_t* wasm_extern_type(const wasm_extern_t*); WASM_C_API wasm_extern_t* wasm_func_as_extern(wasm_func_t*); WASM_C_API wasm_extern_t* wasm_global_as_extern(wasm_global_t*); WASM_C_API wasm_extern_t* wasm_table_as_extern(wasm_table_t*); WASM_C_API wasm_extern_t* wasm_memory_as_extern(wasm_memory_t*); WASM_C_API wasm_func_t* wasm_extern_as_func(wasm_extern_t*); WASM_C_API wasm_global_t* wasm_extern_as_global(wasm_extern_t*); WASM_C_API wasm_table_t* wasm_extern_as_table(wasm_extern_t*); WASM_C_API wasm_memory_t* wasm_extern_as_memory(wasm_extern_t*); WASM_C_API const wasm_extern_t* wasm_func_as_extern_const(const wasm_func_t*); WASM_C_API const wasm_extern_t* wasm_global_as_extern_const(const wasm_global_t*); WASM_C_API const wasm_extern_t* wasm_table_as_extern_const(const wasm_table_t*); WASM_C_API const wasm_extern_t* wasm_memory_as_extern_const(const wasm_memory_t*); WASM_C_API const wasm_func_t* wasm_extern_as_func_const(const wasm_extern_t*); WASM_C_API const wasm_global_t* wasm_extern_as_global_const(const wasm_extern_t*); WASM_C_API const wasm_table_t* wasm_extern_as_table_const(const wasm_extern_t*); WASM_C_API const wasm_memory_t* wasm_extern_as_memory_const(const wasm_extern_t*); // Module Instances WASM_DECLARE_REF(instance) WASM_C_API own wasm_instance_t* wasm_instance_new(wasm_store_t*, const wasm_module_t*, const wasm_extern_t* const imports[], own wasm_trap_t**, const char* debug_name); WASM_C_API size_t wasm_instance_num_exports(const wasm_instance_t*); WASM_C_API wasm_extern_t* wasm_instance_export(const wasm_instance_t*, size_t index); /////////////////////////////////////////////////////////////////////////////// // Convenience // Value Type construction short-hands WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_i32() { return wasm_valtype_new(WASM_I32); } WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_i64() { return wasm_valtype_new(WASM_I64); } WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_f32() { return wasm_valtype_new(WASM_F32); } WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_f64() { return wasm_valtype_new(WASM_F64); } WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_v128() { return wasm_valtype_new(WASM_V128); } WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_externref() { return wasm_valtype_new(WASM_ANYREF); } WASM_IGNORE_UNUSED static inline own wasm_valtype_t* wasm_valtype_new_funcref() { return wasm_valtype_new(WASM_FUNCREF); } // Function Types construction short-hands WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_0_0() { return wasm_functype_new((wasm_valtype_t**)0, 0, (wasm_valtype_t**)0, 0); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_1_0(own wasm_valtype_t* p) { wasm_valtype_t* ps[1] = {p}; return wasm_functype_new(ps, 1, (wasm_valtype_t**)0, 0); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_2_0(own wasm_valtype_t* p1, own wasm_valtype_t* p2) { wasm_valtype_t* ps[2] = {p1, p2}; return wasm_functype_new(ps, 2, (wasm_valtype_t**)0, 0); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_3_0(own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* p3) { wasm_valtype_t* ps[3] = {p1, p2, p3}; return wasm_functype_new(ps, 3, (wasm_valtype_t**)0, 0); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_0_1(own wasm_valtype_t* r) { wasm_valtype_t* rs[1] = {r}; return wasm_functype_new((wasm_valtype_t**)0, 0, rs, 1); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_1_1(own wasm_valtype_t* p, own wasm_valtype_t* r) { wasm_valtype_t* ps[1] = {p}; wasm_valtype_t* rs[1] = {r}; return wasm_functype_new(ps, 1, rs, 1); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_2_1(own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* r) { wasm_valtype_t* ps[2] = {p1, p2}; wasm_valtype_t* rs[1] = {r}; return wasm_functype_new(ps, 2, rs, 1); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_3_1(own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* p3, own wasm_valtype_t* r) { wasm_valtype_t* ps[3] = {p1, p2, p3}; wasm_valtype_t* rs[1] = {r}; return wasm_functype_new(ps, 3, rs, 1); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_0_2(own wasm_valtype_t* r1, own wasm_valtype_t* r2) { wasm_valtype_t* rs[2] = {r1, r2}; return wasm_functype_new((wasm_valtype_t**)0, 0, rs, 2); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_1_2(own wasm_valtype_t* p, own wasm_valtype_t* r1, own wasm_valtype_t* r2) { wasm_valtype_t* ps[1] = {p}; wasm_valtype_t* rs[2] = {r1, r2}; return wasm_functype_new(ps, 1, rs, 2); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_2_2(own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* r1, own wasm_valtype_t* r2) { wasm_valtype_t* ps[2] = {p1, p2}; wasm_valtype_t* rs[2] = {r1, r2}; return wasm_functype_new(ps, 2, rs, 2); } WASM_IGNORE_UNUSED static inline own wasm_functype_t* wasm_functype_new_3_2(own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* p3, own wasm_valtype_t* r1, own wasm_valtype_t* r2) { wasm_valtype_t* ps[3] = {p1, p2, p3}; wasm_valtype_t* rs[2] = {r1, r2}; return wasm_functype_new(ps, 3, rs, 2); } /////////////////////////////////////////////////////////////////////////////// #undef own #ifdef __cplusplus } // extern "C" #endif #endif // #ifdef __WASM_H ================================================ FILE: LICENSE.txt ================================================ Copyright (c) 2026, Andrew Scheidecker All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of WAVM nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: Lib/DWARF/CMakeLists.txt ================================================ set(Sources DWARF.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/DWARF/DWARF.h) WAVM_ADD_LIB_COMPONENT(DWARF SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/DWARF/DWARF.cpp ================================================ // Signal-safe, zero-allocation DWARF v4/v5 parser for source location lookup. // Parses .debug_info, .debug_abbrev, and .debug_str on-the-fly to resolve // an instruction address to a chain of source locations (for inline functions). #include "WAVM/DWARF/DWARF.h" #include #include #include "WAVM/DWARF/Constants.h" #include "WAVM/DWARF/Sections.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Logging/Logging.h" using namespace WAVM; using namespace WAVM::DWARF; using namespace WAVM::Serialization; static const char* getFormName(U8 form) { switch(form) { case DW_FORM_addr: return "addr"; case DW_FORM_block2: return "block2"; case DW_FORM_block4: return "block4"; case DW_FORM_data2: return "data2"; case DW_FORM_data4: return "data4"; case DW_FORM_data8: return "data8"; case DW_FORM_string: return "string"; case DW_FORM_block: return "block"; case DW_FORM_block1: return "block1"; case DW_FORM_data1: return "data1"; case DW_FORM_flag: return "flag"; case DW_FORM_sdata: return "sdata"; case DW_FORM_strp: return "strp"; case DW_FORM_udata: return "udata"; case DW_FORM_ref_addr: return "ref_addr"; case DW_FORM_ref1: return "ref1"; case DW_FORM_ref2: return "ref2"; case DW_FORM_ref4: return "ref4"; case DW_FORM_ref8: return "ref8"; case DW_FORM_ref_udata: return "ref_udata"; case DW_FORM_indirect: return "indirect"; case DW_FORM_sec_offset: return "sec_offset"; case DW_FORM_exprloc: return "exprloc"; case DW_FORM_flag_present: return "flag_present"; case DW_FORM_ref_sig8: return "ref_sig8"; case DW_FORM_strx: return "strx"; case DW_FORM_addrx: return "addrx"; case DW_FORM_line_strp: return "line_strp"; case DW_FORM_implicit_const: return "implicit_const"; case DW_FORM_strx1: return "strx1"; case DW_FORM_strx2: return "strx2"; case DW_FORM_strx4: return "strx4"; case DW_FORM_addrx1: return "addrx1"; case DW_FORM_addrx2: return "addrx2"; case DW_FORM_addrx4: return "addrx4"; case DW_FORM_data16: return "data16"; case DW_FORM_rnglistx: return "rnglistx"; case DW_FORM_loclistx: return "loclistx"; default: return "?"; } } static const char* getTagName(U16 tag) { switch(tag) { case DW_TAG_compile_unit: return "compile_unit"; case DW_TAG_subprogram: return "subprogram"; case DW_TAG_inlined_subroutine: return "inlined_subroutine"; default: return "?"; } } static const char* getAttrName(U16 attr) { switch(attr) { case DW_AT_name: return "name"; case DW_AT_low_pc: return "low_pc"; case DW_AT_high_pc: return "high_pc"; case DW_AT_stmt_list: return "stmt_list"; case DW_AT_call_line: return "call_line"; case DW_AT_linkage_name: return "linkage_name"; case DW_AT_abstract_origin: return "abstract_origin"; case DW_AT_decl_line: return "decl_line"; case DW_AT_str_offsets_base: return "str_offsets_base"; case DW_AT_addr_base: return "addr_base"; default: return "?"; } } // Skip a DIE attribute value of the given form. // Returns false if the form is unknown. static bool skipForm(U8 form, InputStream& stream, U8 addrSize, U8 dwarfFormat, // 4 or 8 (DWARF32 vs DWARF64) I64 implicitConst) { U64 tmp; I64 stmp; (void)implicitConst; switch(form) { case DW_FORM_addr: if(!stream.tryAdvance(addrSize)) { return false; } break; case DW_FORM_data1: case DW_FORM_ref1: case DW_FORM_flag: case DW_FORM_strx1: case DW_FORM_addrx1: if(!stream.tryAdvance(1)) { return false; } break; case DW_FORM_data2: case DW_FORM_ref2: case DW_FORM_strx2: case DW_FORM_addrx2: if(!stream.tryAdvance(2)) { return false; } break; case DW_FORM_data4: case DW_FORM_ref4: case DW_FORM_strx4: case DW_FORM_addrx4: if(!stream.tryAdvance(4)) { return false; } break; case DW_FORM_data8: case DW_FORM_ref8: case DW_FORM_ref_sig8: if(!stream.tryAdvance(8)) { return false; } break; case DW_FORM_data16: if(!stream.tryAdvance(16)) { return false; } break; case DW_FORM_sdata: return trySerializeVarSInt64(stream, stmp); case DW_FORM_udata: case DW_FORM_ref_udata: case DW_FORM_strx: case DW_FORM_addrx: case DW_FORM_rnglistx: case DW_FORM_loclistx: return trySerializeVarUInt64(stream, tmp); case DW_FORM_string: { // Scan for null terminator. const U8* bytePtr; do { bytePtr = stream.tryAdvance(1); if(!bytePtr) { return false; } } while(*bytePtr != 0); break; } case DW_FORM_strp: case DW_FORM_sec_offset: case DW_FORM_line_strp: case DW_FORM_ref_addr: if(!stream.tryAdvance(dwarfFormat == 8 ? 8 : 4)) { return false; } break; case DW_FORM_block1: { U8 len; if(!tryRead(stream, len)) { return false; } if(!stream.tryAdvance(len)) { return false; } break; } case DW_FORM_block2: { U16 len; if(!tryRead(stream, len)) { return false; } if(!stream.tryAdvance(len)) { return false; } break; } case DW_FORM_block4: { U32 len; if(!tryRead(stream, len)) { return false; } if(!stream.tryAdvance(len)) { return false; } break; } case DW_FORM_block: case DW_FORM_exprloc: { U64 len; if(!trySerializeVarUInt64(stream, len)) { return false; } if(!stream.tryAdvance(Uptr(len))) { return false; } break; } case DW_FORM_flag_present: break; // zero size case DW_FORM_implicit_const: break; // value is in the abbreviation, not in .debug_info case DW_FORM_indirect: { U64 actualForm; if(!trySerializeVarUInt64(stream, actualForm)) { return false; } return skipForm(U8(actualForm), stream, addrSize, dwarfFormat, 0); } default: return false; } return true; } // Look up an address by index in .debug_addr. // addrBase points past the section header to the first entry. static Uptr lookupAddrx(Uptr index, U8 addrSize, const U8* debugAddr, Uptr debugAddrSize, Uptr addrBase) { if(!debugAddr) { return 0; } Uptr offset = addrBase + index * addrSize; if(offset + addrSize > debugAddrSize) { return 0; } if(addrSize == 8) { U64 v; memcpy(&v, debugAddr + offset, 8); return Uptr(v); } else if(addrSize == 4) { U32 v; memcpy(&v, debugAddr + offset, 4); return Uptr(v); } return 0; } // Read an attribute value as a Uptr, for forms that represent addresses or references. static Uptr readAddrFormValue(U8 form, InputStream& stream, U8 addrSize, U8 dwarfFormat, const U8* debugAddr, Uptr debugAddrSize, Uptr addrBase) { switch(form) { case DW_FORM_addr: { if(addrSize == 8) { U64 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } else if(addrSize == 4) { U32 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } return 0; } case DW_FORM_addrx: { U64 index; if(!trySerializeVarUInt64(stream, index)) { return 0; } return lookupAddrx(Uptr(index), addrSize, debugAddr, debugAddrSize, addrBase); } case DW_FORM_addrx1: { U8 index; if(!tryRead(stream, index)) { return 0; } return lookupAddrx(Uptr(index), addrSize, debugAddr, debugAddrSize, addrBase); } case DW_FORM_addrx2: { U16 index; if(!tryRead(stream, index)) { return 0; } return lookupAddrx(Uptr(index), addrSize, debugAddr, debugAddrSize, addrBase); } case DW_FORM_addrx4: { U32 index; if(!tryRead(stream, index)) { return 0; } return lookupAddrx(Uptr(index), addrSize, debugAddr, debugAddrSize, addrBase); } case DW_FORM_data1: { U8 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_data2: { U16 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_data4: { U32 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_data8: { U64 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_udata: { U64 v; if(!trySerializeVarUInt64(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_sdata: { I64 v; if(!trySerializeVarSInt64(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_sec_offset: { if(dwarfFormat == 8) { U64 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } else { U32 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } } default: // Not an address form; skip it. skipForm(form, stream, addrSize, dwarfFormat, 0); return 0; } } // Look up a string by index in .debug_str_offsets, then .debug_str. // strOffsetsBase points past the section header to the first offset entry. static const char* lookupStrx(Uptr index, U8 dwarfFormat, const U8* debugStrOffsets, Uptr debugStrOffsetsSize, Uptr strOffsetsBase, const U8* debugStr, Uptr debugStrSize) { if(!debugStrOffsets || !debugStr) { return nullptr; } U8 offsetSize = (dwarfFormat == 8) ? 8 : 4; Uptr entryOffset = strOffsetsBase + index * offsetSize; if(entryOffset + offsetSize > debugStrOffsetsSize) { return nullptr; } Uptr strOffset; if(offsetSize == 8) { U64 v; memcpy(&v, debugStrOffsets + entryOffset, 8); strOffset = Uptr(v); } else { U32 v; memcpy(&v, debugStrOffsets + entryOffset, 4); strOffset = Uptr(v); } if(strOffset < debugStrSize) { return reinterpret_cast(debugStr + strOffset); } return nullptr; } // Read a string attribute value (DW_FORM_strp, DW_FORM_string, DW_FORM_strx*). static const char* readStrpValue(U8 form, InputStream& stream, U8 dwarfFormat, const U8* debugStr, Uptr debugStrSize, const U8* debugStrOffsets, Uptr debugStrOffsetsSize, Uptr strOffsetsBase) { if(form == DW_FORM_strp) { Uptr offset; if(dwarfFormat == 8) { U64 v; if(!tryRead(stream, v)) { return nullptr; } offset = Uptr(v); } else { U32 v; if(!tryRead(stream, v)) { return nullptr; } offset = Uptr(v); } if(debugStr && offset < debugStrSize) { return reinterpret_cast(debugStr + offset); } return nullptr; } else if(form == DW_FORM_string) { // Read the first byte to get a pointer into the underlying buffer. const U8* bytePtr = stream.tryAdvance(1); if(!bytePtr) { return nullptr; } const char* str = reinterpret_cast(bytePtr); // Scan past remaining bytes until null terminator. while(*bytePtr != 0) { bytePtr = stream.tryAdvance(1); if(!bytePtr) { return str; } } return str; } else if(form == DW_FORM_strx) { U64 index; if(!trySerializeVarUInt64(stream, index)) { return nullptr; } return lookupStrx(Uptr(index), dwarfFormat, debugStrOffsets, debugStrOffsetsSize, strOffsetsBase, debugStr, debugStrSize); } else if(form == DW_FORM_strx1) { U8 index; if(!tryRead(stream, index)) { return nullptr; } return lookupStrx(Uptr(index), dwarfFormat, debugStrOffsets, debugStrOffsetsSize, strOffsetsBase, debugStr, debugStrSize); } else if(form == DW_FORM_strx2) { U16 index; if(!tryRead(stream, index)) { return nullptr; } return lookupStrx(Uptr(index), dwarfFormat, debugStrOffsets, debugStrOffsetsSize, strOffsetsBase, debugStr, debugStrSize); } else if(form == DW_FORM_strx4) { U32 index; if(!tryRead(stream, index)) { return nullptr; } return lookupStrx(Uptr(index), dwarfFormat, debugStrOffsets, debugStrOffsetsSize, strOffsetsBase, debugStr, debugStrSize); } skipForm(form, stream, 8, dwarfFormat, 0); return nullptr; } // Read a reference (offset within the CU) from a DW_FORM_ref* attribute. static Uptr readRefValue(U8 form, InputStream& stream, U8 dwarfFormat) { switch(form) { case DW_FORM_ref1: { U8 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_ref2: { U16 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_ref4: { U32 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_ref8: { U64 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_ref_udata: { U64 v; if(!trySerializeVarUInt64(stream, v)) { return 0; } return Uptr(v); } case DW_FORM_sec_offset: case DW_FORM_ref_addr: { if(dwarfFormat == 8) { U64 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } else { U32 v; if(!tryRead(stream, v)) { return 0; } return Uptr(v); } } default: skipForm(form, stream, 8, dwarfFormat, 0); return 0; } } static constexpr Uptr maxAttrsPerAbbrev = 32; struct AbbrevAttr { U16 name; U8 form; I64 implicitConst; }; struct AbbrevEntry { U64 code; U16 tag; bool hasChildren; AbbrevAttr attrs[maxAttrsPerAbbrev]; Uptr numAttrs; }; // Find an abbreviation entry by code directly in .debug_abbrev, decoding only the matching entry. // Returns true if found, filling outEntry. static bool findAbbrev(const U8* debugAbbrev, Uptr debugAbbrevSize, Uptr abbrevOffset, U64 targetCode, AbbrevEntry& outEntry) { if(!debugAbbrev || abbrevOffset >= debugAbbrevSize) { return false; } MemoryInputStream stream(debugAbbrev + abbrevOffset, debugAbbrevSize - abbrevOffset); while(stream.capacity()) { U64 code; if(!trySerializeVarUInt64(stream, code)) { break; } if(code == 0) { break; } U64 tagVal; if(!trySerializeVarUInt64(stream, tagVal)) { break; } U16 tag = U16(tagVal); U8 childrenByte; if(!tryRead(stream, childrenByte)) { break; } bool hasChildren = (childrenByte != 0); if(code == targetCode) { outEntry.code = code; outEntry.tag = tag; outEntry.hasChildren = hasChildren; outEntry.numAttrs = 0; while(stream.capacity()) { U64 attrName, attrForm; if(!trySerializeVarUInt64(stream, attrName)) { break; } if(!trySerializeVarUInt64(stream, attrForm)) { break; } if(attrName == 0 && attrForm == 0) { break; } I64 implicitConst = 0; if(attrForm == DW_FORM_implicit_const) { trySerializeVarSInt64(stream, implicitConst); } if(outEntry.numAttrs < maxAttrsPerAbbrev) { outEntry.attrs[outEntry.numAttrs].name = U16(attrName); outEntry.attrs[outEntry.numAttrs].form = U8(attrForm); outEntry.attrs[outEntry.numAttrs].implicitConst = implicitConst; ++outEntry.numAttrs; } } return true; } // Skip this entry's attributes. while(stream.capacity()) { U64 attrName, attrForm; if(!trySerializeVarUInt64(stream, attrName)) { break; } if(!trySerializeVarUInt64(stream, attrForm)) { break; } if(attrName == 0 && attrForm == 0) { break; } if(attrForm == DW_FORM_implicit_const) { I64 tmp; trySerializeVarSInt64(stream, tmp); } } } return false; } // Read name/linkage_name from a DIE at the given offset within .debug_info. static void readDIENames(const U8* debugInfo, Uptr debugInfoSize, Uptr dieOffset, const U8* debugAbbrev, Uptr debugAbbrevSize, Uptr abbrevTableOffset, U8 addrSize, U8 dwarfFormat, const U8* debugStr, Uptr debugStrSize, const U8* debugStrOffsets, Uptr debugStrOffsetsSize, Uptr strOffsetsBase, const char*& outName, const char*& outLinkageName) { if(dieOffset >= debugInfoSize) { return; } MemoryInputStream stream(debugInfo + dieOffset, debugInfoSize - dieOffset); U64 abbrevCode; if(!trySerializeVarUInt64(stream, abbrevCode)) { return; } if(abbrevCode == 0) { return; } AbbrevEntry abbrevBuf; if(!findAbbrev(debugAbbrev, debugAbbrevSize, abbrevTableOffset, abbrevCode, abbrevBuf)) { return; } const AbbrevEntry* abbrev = &abbrevBuf; for(Uptr i = 0; i < abbrev->numAttrs && stream.capacity(); ++i) { U16 attrName = abbrev->attrs[i].name; U8 attrForm = abbrev->attrs[i].form; if(attrName == DW_AT_name || attrName == DW_AT_linkage_name) { const char* str = readStrpValue(attrForm, stream, dwarfFormat, debugStr, debugStrSize, debugStrOffsets, debugStrOffsetsSize, strOffsetsBase); if(str) { if(attrName == DW_AT_name) { outName = str; } else { outLinkageName = str; } } } else { skipForm(attrForm, stream, addrSize, dwarfFormat, abbrev->attrs[i].implicitConst); } } } // Look up the line number at a given address in the DWARF line number program. // Returns the line number, or 0 if not found. // Signal-safe: no allocations. static Uptr lookupLineAtAddress(const U8* debugLine, Uptr debugLineSize, Uptr stmtListOffset, Uptr targetAddress, U8 addrSize) { if(!debugLine || stmtListOffset >= debugLineSize) { return 0; } MemoryInputStream lineStream(debugLine + stmtListOffset, debugLineSize - stmtListOffset); // Read unit_length. U32 initialLength; if(!tryRead(lineStream, initialLength)) { return 0; } U8 fmt; Uptr unitLength; if(initialLength == 0xFFFFFFFF) { U64 len64; if(!tryRead(lineStream, len64)) { return 0; } fmt = 8; unitLength = Uptr(len64); } else { fmt = 4; unitLength = Uptr(initialLength); } // Create a sub-stream for this unit's data. if(unitLength > lineStream.capacity()) { return 0; } MemoryInputStream stream(lineStream.tryAdvance(unitLength), unitLength); // Version. U16 version; if(!tryRead(stream, version)) { return 0; } Log::printf(Log::traceDwarf, " Line table: version=%u fmt=%u unitLength=%" WAVM_PRIuPTR "\n", version, fmt, unitLength); // DWARF v5 has address_size and segment_selector_size before header_length. if(version >= 5) { if(!stream.tryAdvance(2)) { return 0; } // skip address_size and segment_selector_size } // header_length. Uptr headerLength; if(fmt == 8) { U64 hl; if(!tryRead(stream, hl)) { return 0; } headerLength = Uptr(hl); } else { U32 hl; if(!tryRead(stream, hl)) { return 0; } headerLength = Uptr(hl); } Uptr programStartPos = stream.position() + headerLength; if(programStartPos > unitLength) { return 0; } // Read header fields. U8 minInstructionLength; if(!tryRead(stream, minInstructionLength)) { return 0; } if(version >= 4) { if(!stream.tryAdvance(1)) { return 0; } // skip max_operations_per_instruction } if(!stream.tryAdvance(1)) { return 0; } // skip default_is_stmt U8 lineBaseU8; if(!tryRead(stream, lineBaseU8)) { return 0; } I8 lineBase = I8(lineBaseU8); U8 lineRange; if(!tryRead(stream, lineRange)) { return 0; } U8 opcodeBase; if(!tryRead(stream, opcodeBase)) { return 0; } Log::printf(Log::traceDwarf, " Line header: minInsnLen=%u lineBase=%d lineRange=%u opcodeBase=%u\n", minInstructionLength, (int)lineBase, lineRange, opcodeBase); // Record standard opcode lengths (pointer into the underlying buffer). if(opcodeBase < 1) { return 0; } const U8* stdOpLengths = stream.tryAdvance(opcodeBase - 1); if(!stdOpLengths) { return 0; } // Jump to program start. stream.seek(programStartPos); // State machine. Uptr smAddress = 0; I64 smLine = 1; Uptr bestLine = 0; bool found = false; while(stream.capacity()) { U8 opcode; if(!tryRead(stream, opcode)) { break; } if(opcode == 0) { // Extended opcode. U64 extLen; if(!trySerializeVarUInt64(stream, extLen)) { break; } if(extLen > stream.capacity()) { break; } Uptr extEndPos = stream.position() + Uptr(extLen); if(extLen == 0) { stream.seek(extEndPos); continue; } U8 extOp; if(!tryRead(stream, extOp)) { break; } switch(extOp) { case DW_LNE_end_sequence: Log::printf(Log::traceDwarf, " Line: end_sequence addr=0x%" WAVM_PRIxPTR " line=%" PRId64 " found=%d bestLine=%" WAVM_PRIuPTR "\n", smAddress, smLine, (int)found, bestLine); if(found && targetAddress < smAddress) { return bestLine; } // Reset. smAddress = 0; smLine = 1; found = false; bestLine = 0; break; case DW_LNE_set_address: { if(addrSize == 8) { U64 addr; if(tryRead(stream, addr)) { smAddress = Uptr(addr); } } else if(addrSize == 4) { U32 addr; if(tryRead(stream, addr)) { smAddress = Uptr(addr); } } Log::printf( Log::traceDwarf, " Line: set_address 0x%" WAVM_PRIxPTR "\n", smAddress); break; } default: break; } stream.seek(extEndPos); } else if(opcode < opcodeBase) { // Standard opcode. switch(opcode) { case DW_LNS_copy: Log::printf(Log::traceDwarf, " Line: copy addr=0x%" WAVM_PRIxPTR " line=%" PRId64 "\n", smAddress, smLine); if(smAddress <= targetAddress) { bestLine = Uptr(smLine); found = true; } else if(found) { return bestLine; } break; case DW_LNS_advance_pc: { U64 adv; if(!trySerializeVarUInt64(stream, adv)) { break; } smAddress += Uptr(adv) * minInstructionLength; break; } case DW_LNS_advance_line: { I64 adv; if(!trySerializeVarSInt64(stream, adv)) { break; } smLine += adv; break; } case DW_LNS_const_add_pc: { smAddress += Uptr((255 - opcodeBase) / lineRange) * minInstructionLength; break; } case DW_LNS_fixed_advance_pc: { U16 delta; if(tryRead(stream, delta)) { smAddress += delta; } break; } default: { // Skip operands using standard opcode lengths. U8 numOps = (opcode > 0 && opcode <= opcodeBase - 1) ? stdOpLengths[opcode - 1] : 0; for(U8 j = 0; j < numOps; j++) { U64 tmp; trySerializeVarUInt64(stream, tmp); } break; } } } else { // Special opcode: advance address and line, emit row. U8 adjusted = opcode - opcodeBase; Uptr addrAdv = Uptr(adjusted / lineRange) * minInstructionLength; I64 lineAdv = lineBase + (adjusted % lineRange); smAddress += addrAdv; smLine += lineAdv; Log::printf(Log::traceDwarf, " Line: special addr=0x%" WAVM_PRIxPTR " line=%" PRId64 "\n", smAddress, smLine); // Emit row. if(smAddress <= targetAddress) { bestLine = Uptr(smLine); found = true; } else if(found) { return bestLine; } } } Log::printf(Log::traceDwarf, " Line lookup result: found=%d bestLine=%" WAVM_PRIuPTR "\n", (int)found, bestLine); return found ? bestLine : 0; } Uptr DWARF::getSourceLocations(const Sections& sections, Uptr address, SourceLocation* outLocations, Uptr maxLocations) { if(!sections.debugInfo || !sections.debugAbbrev || maxLocations == 0) { return 0; } Log::printf(Log::traceDwarf, "getSourceLocations: address=0x%" WAVM_PRIxPTR " debugInfo=%p(%" WAVM_PRIuPTR ") debugAbbrev=%p(%" WAVM_PRIuPTR ") debugStr=%p(%" WAVM_PRIuPTR ") debugLine=%p(%" WAVM_PRIuPTR ")\n", address, (const void*)sections.debugInfo, sections.debugInfoSize, (const void*)sections.debugAbbrev, sections.debugAbbrevSize, (const void*)sections.debugStr, sections.debugStrSize, (const void*)sections.debugLine, sections.debugLineSize); MemoryInputStream infoStream(sections.debugInfo, sections.debugInfoSize); // Scan CU headers to find the CU containing the address. while(infoStream.capacity()) { Uptr cuStartPos = infoStream.position(); // Parse CU header: initial length. U32 initialLength; if(!tryRead(infoStream, initialLength)) { break; } U8 dwarfFormat = 4; // DWARF32 U64 cuLength; if(initialLength == 0xFFFFFFFF) { // DWARF64 U64 len64; if(!tryRead(infoStream, len64)) { break; } dwarfFormat = 8; cuLength = len64; } else { cuLength = initialLength; } // Create a sub-stream for this CU's data (after the length field). Uptr clampedLength = Uptr(cuLength); if(clampedLength > infoStream.capacity()) { clampedLength = infoStream.capacity(); } MemoryInputStream cuStream(infoStream.tryAdvance(clampedLength), clampedLength); U16 version; if(!tryRead(cuStream, version)) { continue; } Log::printf(Log::traceDwarf, " CU at offset %" WAVM_PRIuPTR ": version=%u dwarfFormat=%u length=%" PRIu64 "\n", cuStartPos, version, dwarfFormat, cuLength); U8 addrSize; Uptr abbrevOffset; if(version >= 5) { // DWARF v5: version, unit_type, address_size, debug_abbrev_offset U8 unitType; if(!tryRead(cuStream, unitType)) { continue; } if(!tryRead(cuStream, addrSize)) { continue; } if(dwarfFormat == 8) { U64 v; if(!tryRead(cuStream, v)) { continue; } abbrevOffset = Uptr(v); } else { U32 v; if(!tryRead(cuStream, v)) { continue; } abbrevOffset = Uptr(v); } Log::printf(Log::traceDwarf, " v5 header: unitType=0x%02x addrSize=%u abbrevOffset=%" WAVM_PRIuPTR "\n", unitType, addrSize, abbrevOffset); } else { // DWARF v4 and earlier: version, debug_abbrev_offset, address_size if(dwarfFormat == 8) { U64 v; if(!tryRead(cuStream, v)) { continue; } abbrevOffset = Uptr(v); } else { U32 v; if(!tryRead(cuStream, v)) { continue; } abbrevOffset = Uptr(v); } if(!tryRead(cuStream, addrSize)) { continue; } Log::printf(Log::traceDwarf, " v4 header: addrSize=%u abbrevOffset=%" WAVM_PRIuPTR "\n", addrSize, abbrevOffset); } // Read the CU DIE to get the address range. U64 cuAbbrevCode; if(!trySerializeVarUInt64(cuStream, cuAbbrevCode)) { continue; } if(cuAbbrevCode == 0) { continue; } AbbrevEntry cuAbbrevBuf; if(!findAbbrev(sections.debugAbbrev, sections.debugAbbrevSize, abbrevOffset, cuAbbrevCode, cuAbbrevBuf) || cuAbbrevBuf.tag != DW_TAG_compile_unit) { Log::printf(Log::traceDwarf, " CU DIE: abbrevCode=%" PRIu64 ", not compile_unit, skipping\n", cuAbbrevCode); continue; } Log::printf(Log::traceDwarf, " CU DIE: abbrevCode=%" PRIu64 " tag=compile_unit numAttrs=%" WAVM_PRIuPTR "\n", cuAbbrevCode, cuAbbrevBuf.numAttrs); // Log all CU DIE attributes for debugging. for(Uptr i = 0; i < cuAbbrevBuf.numAttrs; ++i) { Log::printf(Log::traceDwarf, " attr[%" WAVM_PRIuPTR "]: %s(0x%04x) form=%s(0x%02x)\n", i, getAttrName(cuAbbrevBuf.attrs[i].name), cuAbbrevBuf.attrs[i].name, getFormName(cuAbbrevBuf.attrs[i].form), cuAbbrevBuf.attrs[i].form); } // Pass 1: scan the CU DIE to find DW_AT_addr_base and DW_AT_str_offsets_base. // These must be resolved before reading addrx/strx forms in pass 2. Uptr cuDieAttrsPos = cuStream.position(); Uptr addrBase = 0; Uptr strOffsetsBase = 0; for(Uptr i = 0; i < cuAbbrevBuf.numAttrs && cuStream.capacity(); ++i) { U16 attrName = cuAbbrevBuf.attrs[i].name; U8 attrForm = cuAbbrevBuf.attrs[i].form; if(attrName == DW_AT_addr_base) { addrBase = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, nullptr, 0, 0); Log::printf(Log::traceDwarf, " addr_base = %" WAVM_PRIuPTR "\n", addrBase); } else if(attrName == DW_AT_str_offsets_base) { strOffsetsBase = readRefValue(attrForm, cuStream, dwarfFormat); Log::printf( Log::traceDwarf, " str_offsets_base = %" WAVM_PRIuPTR "\n", strOffsetsBase); } else { skipForm( attrForm, cuStream, addrSize, dwarfFormat, cuAbbrevBuf.attrs[i].implicitConst); } } cuStream.seek(cuDieAttrsPos); // Pass 2: read CU attributes to find low_pc/high_pc and stmt_list. Uptr cuLowPC = 0; Uptr cuHighPC = 0; bool highPCIsOffset = false; Uptr stmtListOffset = Uptr(-1); for(Uptr i = 0; i < cuAbbrevBuf.numAttrs && cuStream.capacity(); ++i) { U16 attrName = cuAbbrevBuf.attrs[i].name; U8 attrForm = cuAbbrevBuf.attrs[i].form; Uptr attrStartPos = cuStream.position(); if(attrName == DW_AT_low_pc) { cuLowPC = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, sections.debugAddr, sections.debugAddrSize, addrBase); Log::printf(Log::traceDwarf, " low_pc = 0x%" WAVM_PRIxPTR " (form=%s)\n", cuLowPC, getFormName(attrForm)); } else if(attrName == DW_AT_high_pc) { // high_pc can be an address or a constant (offset from low_pc). cuHighPC = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, sections.debugAddr, sections.debugAddrSize, addrBase); if(attrForm != DW_FORM_addr) { highPCIsOffset = true; } Log::printf(Log::traceDwarf, " high_pc = 0x%" WAVM_PRIxPTR " (form=%s, isOffset=%d)\n", cuHighPC, getFormName(attrForm), (int)highPCIsOffset); } else if(attrName == DW_AT_stmt_list) { stmtListOffset = readRefValue(attrForm, cuStream, dwarfFormat); Log::printf(Log::traceDwarf, " stmt_list = %" WAVM_PRIuPTR " (form=%s)\n", stmtListOffset, getFormName(attrForm)); } else { skipForm( attrForm, cuStream, addrSize, dwarfFormat, cuAbbrevBuf.attrs[i].implicitConst); } // Safety: if stream didn't advance and the form isn't zero-length, we're stuck. if(cuStream.position() == attrStartPos && attrForm != DW_FORM_flag_present && attrForm != DW_FORM_implicit_const) { break; } } if(highPCIsOffset) { cuHighPC = cuLowPC + cuHighPC; } Log::printf(Log::traceDwarf, " CU range: [0x%" WAVM_PRIxPTR ", 0x%" WAVM_PRIxPTR ") target=0x%" WAVM_PRIxPTR "\n", cuLowPC, cuHighPC, address); // Check if address is in this CU's range. if(cuLowPC == 0 && cuHighPC == 0) { // No range info; skip to next CU. (DW_AT_ranges not supported yet.) Log::printf(Log::traceDwarf, " CU has no range info, skipping\n"); continue; } if(address < cuLowPC || address >= cuHighPC) { Log::printf(Log::traceDwarf, " Address not in CU range, skipping\n"); continue; } Log::printf(Log::traceDwarf, " Address is in CU range, walking DIEs\n"); // Walk DIEs within this CU looking for subprogram/inlined_subroutine containing address. Uptr numLocations = 0; // Stack of function scopes for tracking inline nesting. struct ScopeEntry { const char* linkageName; const char* name; Uptr callLine; Uptr abstractOrigin; }; static constexpr Uptr maxScopeDepth = 16; ScopeEntry scopeStack[maxScopeDepth]; Uptr scopeDepth = 0; // Depth tracking for skipping children of non-matching DIEs. Uptr skipDepth = 0; bool skipping = false; // Walk-depth stack tracks what type of nesting we entered at each level // (scope vs transparent container), so the null DIE handler can correctly // determine whether to break (scope end) or just continue (transparent end). enum class WalkNestType : U8 { scope, transparent }; static constexpr Uptr maxWalkDepth = 32; WalkNestType walkStack[maxWalkDepth]; Uptr walkDepth = 0; // cuStream position is now after the CU DIE attributes, at the first child DIE. while(cuStream.capacity()) { U64 abbrevCode; if(!trySerializeVarUInt64(cuStream, abbrevCode)) { break; } if(abbrevCode == 0) { // Null DIE: end of children list. if(skipping) { if(skipDepth > 0) { --skipDepth; } else { skipping = false; } } else if(walkDepth > 0) { WalkNestType type = walkStack[--walkDepth]; if(type == WalkNestType::scope) { // Exhausted children of a containing scope without finding // a deeper match. The scope itself is the result. Stop walking. break; } // Transparent container end; just continue walking siblings. } continue; } AbbrevEntry abbrevBuf; if(!findAbbrev(sections.debugAbbrev, sections.debugAbbrevSize, abbrevOffset, abbrevCode, abbrevBuf)) { // Unknown abbreviation; can't continue. Log::printf(Log::traceDwarf, " Unknown abbrev code %" PRIu64 ", stopping DIE walk\n", abbrevCode); break; } if(skipping) { // Skip all attributes. for(Uptr i = 0; i < abbrevBuf.numAttrs && cuStream.capacity(); ++i) { skipForm(abbrevBuf.attrs[i].form, cuStream, addrSize, dwarfFormat, abbrevBuf.attrs[i].implicitConst); } if(abbrevBuf.hasChildren) { ++skipDepth; } continue; } bool isSubprogram = (abbrevBuf.tag == DW_TAG_subprogram); bool isInlinedSubroutine = (abbrevBuf.tag == DW_TAG_inlined_subroutine); bool isInteresting = isSubprogram || isInlinedSubroutine; if(!isInteresting) { // Skip attributes. for(Uptr i = 0; i < abbrevBuf.numAttrs && cuStream.capacity(); ++i) { skipForm(abbrevBuf.attrs[i].form, cuStream, addrSize, dwarfFormat, abbrevBuf.attrs[i].implicitConst); } if(abbrevBuf.tag == DW_TAG_lexical_block && abbrevBuf.hasChildren) { // Transparent container: recurse into children to find // inlined subroutines nested under lexical blocks. if(walkDepth < maxWalkDepth) { walkStack[walkDepth++] = WalkNestType::transparent; } } else if(abbrevBuf.hasChildren) { skipping = true; skipDepth = 0; } continue; } // Parse interesting DIE attributes. Uptr lowPC = 0; Uptr highPC = 0; bool hpIsOffset = false; const char* dieName = nullptr; const char* dieLinkageName = nullptr; Uptr callLine = 0; Uptr abstractOrigin = 0; for(Uptr i = 0; i < abbrevBuf.numAttrs && cuStream.capacity(); ++i) { U16 attrName = abbrevBuf.attrs[i].name; U8 attrForm = abbrevBuf.attrs[i].form; if(attrName == DW_AT_low_pc) { lowPC = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, sections.debugAddr, sections.debugAddrSize, addrBase); } else if(attrName == DW_AT_high_pc) { highPC = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, sections.debugAddr, sections.debugAddrSize, addrBase); if(attrForm != DW_FORM_addr) { hpIsOffset = true; } } else if(attrName == DW_AT_name) { dieName = readStrpValue(attrForm, cuStream, dwarfFormat, sections.debugStr, sections.debugStrSize, sections.debugStrOffsets, sections.debugStrOffsetsSize, strOffsetsBase); } else if(attrName == DW_AT_linkage_name) { dieLinkageName = readStrpValue(attrForm, cuStream, dwarfFormat, sections.debugStr, sections.debugStrSize, sections.debugStrOffsets, sections.debugStrOffsetsSize, strOffsetsBase); } else if(attrName == DW_AT_call_line) { callLine = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, sections.debugAddr, sections.debugAddrSize, addrBase); } else if(attrName == DW_AT_abstract_origin) { abstractOrigin = readRefValue(attrForm, cuStream, dwarfFormat); } else if(attrName == DW_AT_decl_line && isSubprogram && callLine == 0) { callLine = readAddrFormValue(attrForm, cuStream, addrSize, dwarfFormat, sections.debugAddr, sections.debugAddrSize, addrBase); } else { skipForm(attrForm, cuStream, addrSize, dwarfFormat, abbrevBuf.attrs[i].implicitConst); } } if(hpIsOffset) { highPC = lowPC + highPC; } Log::printf(Log::traceDwarf, " DIE %s: lowPC=0x%" WAVM_PRIxPTR " highPC=0x%" WAVM_PRIxPTR " name=%s linkageName=%s callLine=%" WAVM_PRIuPTR " abstractOrigin=%" WAVM_PRIuPTR " hasChildren=%d\n", getTagName(abbrevBuf.tag), lowPC, highPC, dieName ? dieName : "(null)", dieLinkageName ? dieLinkageName : "(null)", callLine, abstractOrigin, (int)abbrevBuf.hasChildren); // Check if this DIE's address range contains our target address. bool contains = (lowPC != 0 && address >= lowPC && address < highPC); if(!contains) { Log::printf(Log::traceDwarf, " -> does not contain target, skipping\n"); // Skip children. if(abbrevBuf.hasChildren) { skipping = true; skipDepth = 0; } continue; } Log::printf(Log::traceDwarf, " -> contains target, pushing scope\n"); // This DIE contains the address. Push it onto the scope stack. if(scopeDepth < maxScopeDepth) { ScopeEntry& scope = scopeStack[scopeDepth++]; scope.linkageName = dieLinkageName; scope.name = dieName; scope.callLine = callLine; scope.abstractOrigin = abstractOrigin; } // If this DIE has no children, it's a leaf, so we're done walking. if(!abbrevBuf.hasChildren) { break; } // Track this scope in the walk stack so the null DIE handler // knows to stop walking when this scope's children are exhausted. if(walkDepth < maxWalkDepth) { walkStack[walkDepth++] = WalkNestType::scope; } } Log::printf(Log::traceDwarf, " DIE walk done: scopeDepth=%" WAVM_PRIuPTR "\n", scopeDepth); // Look up the line at the target address from the line table. // This gives the instruction index for the innermost frame. Uptr lineAtAddress = 0; if(stmtListOffset != Uptr(-1) && sections.debugLine) { Log::printf(Log::traceDwarf, " Looking up line at address 0x%" WAVM_PRIxPTR " in line table at offset %" WAVM_PRIuPTR "\n", address, stmtListOffset); lineAtAddress = lookupLineAtAddress( sections.debugLine, sections.debugLineSize, stmtListOffset, address, addrSize); Log::printf(Log::traceDwarf, " lineAtAddress = %" WAVM_PRIuPTR "\n", lineAtAddress); } // Build the output source location chain from the scope stack. // Innermost function first. for(Uptr i = scopeDepth; i > 0 && numLocations < maxLocations; --i) { ScopeEntry& scope = scopeStack[i - 1]; // If names aren't set directly, follow abstract_origin. if(!scope.linkageName && !scope.name && scope.abstractOrigin != 0) { // abstract_origin is a CU-relative offset for ref1/2/4/8. Uptr absOffset = cuStartPos + scope.abstractOrigin; // For ref_addr, it's already an absolute offset, but we handled that above. Log::printf(Log::traceDwarf, " Following abstract_origin at offset %" WAVM_PRIuPTR "\n", absOffset); if(absOffset < sections.debugInfoSize) { readDIENames(sections.debugInfo, sections.debugInfoSize, absOffset, sections.debugAbbrev, sections.debugAbbrevSize, abbrevOffset, addrSize, dwarfFormat, sections.debugStr, sections.debugStrSize, sections.debugStrOffsets, sections.debugStrOffsetsSize, strOffsetsBase, scope.name, scope.linkageName); } } outLocations[numLocations].linkageName = scope.linkageName; outLocations[numLocations].name = scope.name; // For the innermost frame, use the line table. // For outer frames, use DW_AT_call_line from the next inner scope // (which tells where the inner function was called from in this frame). if(i == scopeDepth) { outLocations[numLocations].line = lineAtAddress; } else { outLocations[numLocations].line = scopeStack[i].callLine; } Log::printf( Log::traceDwarf, " Result[%" WAVM_PRIuPTR "]: linkageName=%s name=%s line=%" WAVM_PRIuPTR "\n", numLocations, outLocations[numLocations].linkageName ? outLocations[numLocations].linkageName : "(null)", outLocations[numLocations].name ? outLocations[numLocations].name : "(null)", outLocations[numLocations].line); ++numLocations; } Log::printf(Log::traceDwarf, " Returning %" WAVM_PRIuPTR " locations\n", numLocations); return numLocations; } Log::printf(Log::traceDwarf, " No matching CU found\n"); return 0; } ================================================ FILE: Lib/IR/CMakeLists.txt ================================================ set(Sources DisassemblyNames.cpp FeatureSpec.cpp FloatPrinting.cpp Operators.cpp Module.cpp RandomModule.cpp Types.cpp Validate.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/IR/FeatureSpec.h ${WAVM_INCLUDE_DIR}/IR/IR.h ${WAVM_INCLUDE_DIR}/IR/Module.h ${WAVM_INCLUDE_DIR}/IR/OperatorPrinter.h ${WAVM_INCLUDE_DIR}/IR/OperatorSignatures.h ${WAVM_INCLUDE_DIR}/IR/Operators.h ${WAVM_INCLUDE_DIR}/IR/OperatorTable.h ${WAVM_INCLUDE_DIR}/IR/Value.h ${WAVM_INCLUDE_DIR}/IR/RandomModule.h ${WAVM_INCLUDE_DIR}/IR/Types.h ${WAVM_INCLUDE_DIR}/IR/Validate.h) WAVM_ADD_LIB_COMPONENT(IR SOURCES ${Sources} HEADERS ${PublicHeaders} NONCOMPILED_SOURCES ${WAVM_INCLUDE_DIR}/IR/Types.natvis) ================================================ FILE: Lib/IR/DisassemblyNames.cpp ================================================ #include #include #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Logging/Logging.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Serialization; enum class NameSubsectionType : U8 { module = 0, function = 1, local = 2, label = 3, type = 4, table = 5, memory = 6, global = 7, elemSegment = 8, dataSegment = 9, exceptionTypes = 10, invalid = 0xff }; static void deserializeNameMap(InputStream& stream, std::vector& outNames, Uptr maxNames) { Uptr numNames = 0; serializeVarUInt32(stream, numNames); for(Uptr serializedNameIndex = 0; serializedNameIndex < numNames; ++serializedNameIndex) { Uptr nameIndex = 0; serializeVarUInt32(stream, nameIndex); std::string nameString; serialize(stream, nameString); if(nameIndex >= maxNames) { throw FatalSerializationException("out-of-bounds name index"); } if(nameIndex >= outNames.size()) { outNames.resize(nameIndex + 1); } outNames[nameIndex] = std::move(nameString); } } static void serializeNameMap(OutputStream& stream, const std::vector& outNames) { Uptr numNames = 0; for(Uptr nameIndex = 0; nameIndex < outNames.size(); ++nameIndex) { if(outNames[nameIndex].size()) { ++numNames; } } serializeVarUInt32(stream, numNames); for(Uptr nameIndex = 0; nameIndex < outNames.size(); ++nameIndex) { if(outNames[nameIndex].size()) { serializeVarUInt32(stream, nameIndex); std::string nameString = outNames[nameIndex]; serialize(stream, nameString); } } } static void deserializeNameSubsection(const Module& module, DisassemblyNames& outNames, InputStream& stream) { U8 subsectionType = (U8)NameSubsectionType::invalid; serializeVarUInt7(stream, subsectionType); U32 numSubsectionBytes = 0; serializeVarUInt32(stream, numSubsectionBytes); MemoryInputStream substream(stream.advance(numSubsectionBytes), numSubsectionBytes); switch((NameSubsectionType)subsectionType) { case NameSubsectionType::module: { serialize(substream, outNames.moduleName); break; } case NameSubsectionType::function: { U32 numFunctionNames = 0; serializeVarUInt32(substream, numFunctionNames); for(Uptr functionNameIndex = 0; functionNameIndex < numFunctionNames; ++functionNameIndex) { U32 functionIndex = 0; serializeVarUInt32(substream, functionIndex); std::string functionName; serialize(substream, functionName); if(functionIndex < outNames.functions.size()) { outNames.functions[functionIndex].name = std::move(functionName); } } break; } case NameSubsectionType::local: { U32 numFunctionLocalNameMaps = 0; serializeVarUInt32(substream, numFunctionLocalNameMaps); for(Uptr functionNameIndex = 0; functionNameIndex < numFunctionLocalNameMaps; ++functionNameIndex) { U32 functionIndex = 0; serializeVarUInt32(substream, functionIndex); if(functionIndex < outNames.functions.size()) { deserializeNameMap(substream, outNames.functions[functionIndex].locals, outNames.functions[functionIndex].locals.size()); } else { Log::printf( Log::debug, "Invalid WASM binary local name section function index: %u >= %" WAVM_PRIuPTR "\n", functionIndex, Uptr(outNames.functions.size())); break; } } break; } case NameSubsectionType::label: { if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "label name subsection requires extendedNameSection feature"); } U32 numFunctionLabelNameMaps = 0; serializeVarUInt32(substream, numFunctionLabelNameMaps); for(Uptr functionNameIndex = 0; functionNameIndex < numFunctionLabelNameMaps; ++functionNameIndex) { U32 functionIndex = 0; serializeVarUInt32(substream, functionIndex); if(functionIndex < outNames.functions.size()) { deserializeNameMap(substream, outNames.functions[functionIndex].labels, module.featureSpec.maxLabelsPerFunction); } else { Log::printf( Log::debug, "Invalid WASM binary label name section function index: %u >= %" WAVM_PRIuPTR "\n", functionIndex, Uptr(outNames.functions.size())); break; } } break; } case NameSubsectionType::type: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "type name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.types, outNames.types.size()); break; case NameSubsectionType::table: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "table name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.tables, outNames.tables.size()); break; case NameSubsectionType::memory: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "memory name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.memories, outNames.memories.size()); break; case NameSubsectionType::global: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "global name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.globals, outNames.globals.size()); break; case NameSubsectionType::elemSegment: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "elem segment name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.elemSegments, outNames.elemSegments.size()); break; case NameSubsectionType::dataSegment: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "data segment name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.dataSegments, outNames.dataSegments.size()); break; case NameSubsectionType::exceptionTypes: if(!module.featureSpec.extendedNameSection) { throw FatalSerializationException( "exception type name subsection requires extendedNameSection feature"); } deserializeNameMap(substream, outNames.exceptionTypes, outNames.exceptionTypes.size()); break; case NameSubsectionType::invalid: default: Log::printf(Log::debug, "Unknown WASM binary name subsection type: %u\n", subsectionType); break; }; } void IR::getDisassemblyNames(const Module& module, DisassemblyNames& outNames) { // Fill in the output with the correct number of blank names. for(const auto& functionImport : module.functions.imports) { DisassemblyNames::Function functionNames; functionNames.locals.resize(module.types[functionImport.type.index].params().size()); outNames.functions.push_back(std::move(functionNames)); } for(Uptr functionDefIndex = 0; functionDefIndex < module.functions.defs.size(); ++functionDefIndex) { const FunctionDef& functionDef = module.functions.defs[functionDefIndex]; DisassemblyNames::Function functionNames; functionNames.locals.insert(functionNames.locals.begin(), module.types[functionDef.type.index].params().size() + functionDef.nonParameterLocalTypes.size(), ""); outNames.functions.push_back(std::move(functionNames)); } outNames.types.insert(outNames.types.end(), module.types.size(), ""); outNames.tables.insert(outNames.tables.end(), module.tables.size(), ""); outNames.memories.insert(outNames.memories.end(), module.memories.size(), ""); outNames.globals.insert(outNames.globals.end(), module.globals.size(), ""); outNames.elemSegments.insert(outNames.elemSegments.end(), module.elemSegments.size(), ""); outNames.dataSegments.insert(outNames.dataSegments.end(), module.dataSegments.size(), ""); outNames.exceptionTypes.insert(outNames.exceptionTypes.end(), module.exceptionTypes.size(), ""); // Deserialize the name section, if it is present. Uptr customSectionIndex = 0; if(findCustomSection(module, "name", customSectionIndex)) { try { const CustomSection& nameSection = module.customSections[customSectionIndex]; MemoryInputStream stream(nameSection.data.data(), nameSection.data.size()); while(stream.capacity()) { deserializeNameSubsection(module, outNames, stream); }; } catch(FatalSerializationException const& exception) { Log::printf( Log::debug, "FatalSerializationException while deserializing WASM user name section: %s\n", exception.message.c_str()); } catch(std::bad_alloc const&) { Log::printf( Log::debug, "Memory allocation failed while deserializing WASM user name section. Input is " "likely malformed."); } } } template void serializeNameSubsection(OutputStream& stream, NameSubsectionType type, SerializeBody serializeBody) { ArrayOutputStream subsectionStream; serializeBody(subsectionStream); serialize(stream, *(U8*)&type); std::vector bytes = subsectionStream.getBytes(); serialize(stream, bytes); } void IR::setDisassemblyNames(Module& module, const DisassemblyNames& names) { // Remove any existing name sections. for(auto customSection = module.customSections.begin(); customSection != module.customSections.end();) { if(customSection->name == "name") { customSection = module.customSections.erase(customSection); } else { ++customSection; } } ArrayOutputStream stream; // Module name serializeNameSubsection( stream, NameSubsectionType::module, [&names](OutputStream& subsectionStream) { std::string moduleName = names.moduleName; serialize(subsectionStream, moduleName); }); // Function names serializeNameSubsection( stream, NameSubsectionType::function, [&names](OutputStream& subsectionStream) { Uptr numFunctionNames = names.functions.size(); serializeVarUInt32(subsectionStream, numFunctionNames); for(Uptr functionIndex = 0; functionIndex < names.functions.size(); ++functionIndex) { serializeVarUInt32(subsectionStream, functionIndex); std::string functionName = names.functions[functionIndex].name; serialize(subsectionStream, functionName); } }); // Local names. serializeNameSubsection( stream, NameSubsectionType::local, [&names](OutputStream& subsectionStream) { Uptr numFunctionNames = names.functions.size(); serializeVarUInt32(subsectionStream, numFunctionNames); for(Uptr functionIndex = 0; functionIndex < names.functions.size(); ++functionIndex) { serializeVarUInt32(subsectionStream, functionIndex); serializeNameMap(subsectionStream, names.functions[functionIndex].locals); } }); if(module.featureSpec.extendedNameSection) { // Label names. serializeNameSubsection( stream, NameSubsectionType::label, [&names](OutputStream& subsectionStream) { Uptr numFunctionNames = names.functions.size(); serializeVarUInt32(subsectionStream, numFunctionNames); for(Uptr functionIndex = 0; functionIndex < names.functions.size(); ++functionIndex) { serializeVarUInt32(subsectionStream, functionIndex); serializeNameMap(subsectionStream, names.functions[functionIndex].labels); } }); // Type names serializeNameSubsection( stream, NameSubsectionType::type, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.types); }); // Table names serializeNameSubsection( stream, NameSubsectionType::table, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.tables); }); // Memory names serializeNameSubsection( stream, NameSubsectionType::memory, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.memories); }); // Global names serializeNameSubsection( stream, NameSubsectionType::global, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.globals); }); // Elem segments serializeNameSubsection( stream, NameSubsectionType::elemSegment, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.elemSegments); }); // Data segments serializeNameSubsection( stream, NameSubsectionType::dataSegment, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.dataSegments); }); // Exception types serializeNameSubsection( stream, NameSubsectionType::exceptionTypes, [&names](OutputStream& subsectionStream) { serializeNameMap(subsectionStream, names.exceptionTypes); }); } CustomSection customSection; customSection.afterSection = getMaxPresentSection(module, OrderedSectionID::data); customSection.name = "name"; customSection.data = stream.getBytes(); insertCustomSection(module, std::move(customSection)); } ================================================ FILE: Lib/IR/FeatureSpec.cpp ================================================ #include "WAVM/IR/FeatureSpec.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Defines.h" using namespace WAVM; using namespace WAVM::IR; void FeatureSpec::setFeatureLevel(FeatureLevel featureLevel) { #define SET_FEATURE(name, ...) name = true; #define UNSET_FEATURE(name, ...) name = false; WAVM_ENUM_FEATURES(UNSET_FEATURE); switch(featureLevel) { case FeatureLevel::wavm: WAVM_ENUM_NONSTANDARD_FEATURES(SET_FEATURE); WAVM_FALLTHROUGH; case FeatureLevel::proposed: WAVM_ENUM_PROPOSED_FEATURES(SET_FEATURE); WAVM_FALLTHROUGH; case FeatureLevel::mature: WAVM_ENUM_MATURE_FEATURES(SET_FEATURE); WAVM_FALLTHROUGH; case FeatureLevel::standard: WAVM_ENUM_STANDARD_FEATURES(SET_FEATURE); WAVM_FALLTHROUGH; case FeatureLevel::mvp: mvp = true; break; default: WAVM_UNREACHABLE(); } #undef SET_FEATURE #undef UNSET_FEATURE } const char* IR::getFeatureName(Feature feature) { static constexpr const char* featureNames[] = { #define VISIT_FEATURE(_, name, ...) name, WAVM_ENUM_FEATURES(VISIT_FEATURE) #undef VISIT_FEATURE }; static constexpr Uptr numFeatures = sizeof(featureNames) / sizeof(featureNames[0]); WAVM_ASSERT(Uptr(feature) < numFeatures); return featureNames[Uptr(feature)]; } ================================================ FILE: Lib/IR/FloatPrinting.cpp ================================================ #include #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/FloatComponents.h" using namespace WAVM; // Prints a floating point value to a string, using the WebAssembly syntax for text floats. template static std::string floatAsString(Float f) { static constexpr Uptr numSignificandHexits = FloatComponents::numSignificandHexits; FloatComponents components; components.value = f; if(components.bits.exponent == FloatComponents::maxExponentBits && components.bits.significand == 0) { // Handle infinity. return components.bits.sign ? "-inf" : "+inf"; } else { // Needs at least numSignificandHexits + 12 chars. // -nan:0x // -0x1.p+1023\0 char buffer[FloatComponents::numSignificandHexits + 12]; char* nextChar = buffer; if(components.bits.exponent == FloatComponents::maxExponentBits) { // Handle NaN. *nextChar++ = components.bits.sign ? '-' : '+'; *nextChar++ = 'n'; *nextChar++ = 'a'; *nextChar++ = 'n'; *nextChar++ = ':'; *nextChar++ = '0'; *nextChar++ = 'x'; // Print the significand hexits. for(Uptr hexitIndex = 0; hexitIndex < numSignificandHexits; ++hexitIndex) { const U8 hexitValue = (components.bits.significand >> ((numSignificandHexits - hexitIndex - 1) * 4)) & 0xf; *nextChar++ = hexitValue >= 10 ? ('a' + hexitValue - 10) : ('0' + hexitValue); } } else { // Handle non-special floats. if(components.bits.sign) { *nextChar++ = '-'; } *nextChar++ = '0'; *nextChar++ = 'x'; // If the exponent bits are non-zero, then it's a normal float with an implicit // leading 1 bit. U64 significand64 = U64(components.bits.significand) << (64 - FloatComponents::numSignificandBits); if(components.bits.exponent != 0) { *nextChar++ = '1'; } else { // If the exponent bits are zero, then it's a denormal float without an implicit // leading 1 bit. The significand is effectively shifted left 1 bit to replace // that implicit bit. *nextChar++ = '0' + (significand64 >> 63) % 2; significand64 <<= 1; } *nextChar++ = '.'; // Print the significand hexits. for(Uptr hexitIndex = 0; hexitIndex < numSignificandHexits; ++hexitIndex) { const U8 hexitValue = U8(significand64 >> (64 - hexitIndex * 4 - 4)) & 0xf; *nextChar++ = hexitValue >= 10 ? ('a' + hexitValue - 10) : ('0' + hexitValue); } // For non-special floats, print the exponent. *nextChar++ = 'p'; // Print the exponent sign. Iptr exponent = Uptr(components.bits.exponent) - FloatComponents::exponentBias; if(exponent > 0) { *nextChar++ = '+'; } else { *nextChar++ = '-'; exponent = -exponent; } // Print the exponent digits. WAVM_ASSERT(exponent < 10000); const Uptr numDigits = exponent >= 1000 ? 4 : exponent >= 100 ? 3 : exponent >= 10 ? 2 : 1; for(Uptr digitIndex = 0; digitIndex < numDigits; ++digitIndex) { nextChar[numDigits - digitIndex - 1] = '0' + exponent % 10; exponent /= 10; } nextChar += numDigits; } WAVM_ASSERT(nextChar < buffer + sizeof(buffer)); *nextChar = 0; return buffer; } } std::string WAVM::IR::asString(F32 f32) { return floatAsString(f32); } std::string WAVM::IR::asString(F64 f64) { return floatAsString(f64); } ================================================ FILE: Lib/IR/Module.cpp ================================================ #include "WAVM/IR/Module.h" #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" using namespace WAVM; using namespace WAVM::IR; const char* IR::asString(OrderedSectionID id) { switch(id) { case OrderedSectionID::moduleBeginning: return "module beginning"; case OrderedSectionID::type: return "type"; case OrderedSectionID::import: return "import"; case OrderedSectionID::function: return "func"; case OrderedSectionID::table: return "table"; case OrderedSectionID::memory: return "memory"; case OrderedSectionID::global: return "global"; case OrderedSectionID::exceptionType: return "exception_type"; case OrderedSectionID::export_: return "export"; case OrderedSectionID::start: return "start"; case OrderedSectionID::elem: return "elem"; case OrderedSectionID::dataCount: return "data_count"; case OrderedSectionID::code: return "code"; case OrderedSectionID::data: return "data"; default: WAVM_UNREACHABLE(); }; } bool IR::findCustomSection(const Module& module, const char* customSectionName, Uptr& outCustomSectionIndex) { for(Uptr sectionIndex = 0; sectionIndex < module.customSections.size(); ++sectionIndex) { if(module.customSections[sectionIndex].name == customSectionName) { outCustomSectionIndex = sectionIndex; return true; } } return false; } void IR::insertCustomSection(Module& module, CustomSection&& customSection) { auto it = module.customSections.begin(); for(; it != module.customSections.end(); ++it) { if(it->afterSection > customSection.afterSection) { break; } } module.customSections.insert(it, std::move(customSection)); } OrderedSectionID IR::getMaxPresentSection(const Module& module, OrderedSectionID maxSection) { switch(maxSection) { case OrderedSectionID::data: if(hasDataSection(module)) { return OrderedSectionID::data; } // fall through case OrderedSectionID::code: if(hasCodeSection(module)) { return OrderedSectionID::code; } // fall through case OrderedSectionID::dataCount: if(hasDataCountSection(module)) { return OrderedSectionID::dataCount; } // fall through case OrderedSectionID::elem: if(hasElemSection(module)) { return OrderedSectionID::elem; } // fall through case OrderedSectionID::start: if(hasStartSection(module)) { return OrderedSectionID::start; } // fall through case OrderedSectionID::export_: if(hasExportSection(module)) { return OrderedSectionID::export_; } // fall through case OrderedSectionID::exceptionType: if(hasExceptionTypeSection(module)) { return OrderedSectionID::exceptionType; } // fall through case OrderedSectionID::global: if(hasGlobalSection(module)) { return OrderedSectionID::global; } // fall through case OrderedSectionID::memory: if(hasMemorySection(module)) { return OrderedSectionID::memory; } // fall through case OrderedSectionID::table: if(hasTableSection(module)) { return OrderedSectionID::table; } // fall through case OrderedSectionID::function: if(hasFunctionSection(module)) { return OrderedSectionID::function; } // fall through case OrderedSectionID::import: if(hasImportSection(module)) { return OrderedSectionID::import; } // fall through case OrderedSectionID::type: if(hasTypeSection(module)) { return OrderedSectionID::type; } // fall through case OrderedSectionID::moduleBeginning: return OrderedSectionID::moduleBeginning; default: WAVM_UNREACHABLE(); }; } ================================================ FILE: Lib/IR/Operators.cpp ================================================ #include "WAVM/IR/Operators.h" using namespace WAVM; using namespace WAVM::IR; const char* IR::getOpcodeName(Opcode opcode) { switch(opcode) { #define VISIT_OPCODE(encoding, name, nameString, Imm, ...) \ case Opcode::name: return nameString; WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE default: return "unknown"; }; } ================================================ FILE: Lib/IR/RandomModule.cpp ================================================ #include "WAVM/IR/RandomModule.h" #include #include #include #include #include #include #include #include "WAVM/IR/IR.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/OperatorSignatures.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/RandomStream.h" #include "WAVM/Inline/Serialization.h" using namespace WAVM; using namespace WAVM::IR; constexpr Uptr softMaxStackDepthInControlContext = 6; constexpr Uptr softMaxInstructionsInFunction = 15; struct ModuleState { Module& module; std::vector declaredFunctionIndices; std::vector validElemSegmentAndTableImms; HashMap functionTypeMap; RandomStream& random; ModuleState(Module& inModule, RandomStream& inRandom) : module(inModule), random(inRandom) {} }; using CodeStream = CodeValidationProxyStream; struct FunctionState { struct ControlContext { enum class Type : U8 { function, block, ifThen, ifElse, loop, try_, catch_ }; Type type; Uptr outerStackSize; TypeTuple params; TypeTuple results; TypeTuple elseParams; }; ModuleState& moduleState; ModuleValidationState& moduleValidationState; const Module& module; const FunctionType functionType; FunctionDef& functionDef; const Uptr numLocals; Uptr numInstructions = 0; bool allowStackGrowth = false; std::vector controlStack; std::vector stack; Serialization::ArrayOutputStream codeByteStream; OperatorEncoderStream opEncoder; CodeStream codeStream; FunctionState(ModuleState& inModuleState, ModuleValidationState& inModuleValidationState, FunctionDef& inFunctionDef) : moduleState(inModuleState) , moduleValidationState(inModuleValidationState) , module(inModuleState.module) , functionType(inModuleState.module.types[inFunctionDef.type.index]) , functionDef(inFunctionDef) , numLocals(functionType.params().size() + functionDef.nonParameterLocalTypes.size()) , opEncoder(codeByteStream) , codeStream(inModuleValidationState, inFunctionDef, opEncoder) { } template bool doesStackMatchParams(const TypeTupleOrOpTypeTuple& params, Uptr offsetFromTopOfStack = 0) const { // Ensure the stack has enough values for the operator's parameters. if(params.size() + offsetFromTopOfStack > stack.size() - controlStack.back().outerStackSize) { return false; } // Check that the types of values on top of the stack are the right type for the // operator's parameters. for(Uptr paramIndex = 0; paramIndex < params.size(); ++paramIndex) { if(!isSubtype(stack[stack.size() - offsetFromTopOfStack - params.size() + paramIndex], params[paramIndex])) { return false; } } return true; }; bool isOpSignatureAllowed(const OpSignature& sig) const { // If the random stream has run out of entropy, only consider operators that result // in fewer operands on the stack. if(!allowStackGrowth && sig.results.size() >= sig.params.size()) { return false; } return doesStackMatchParams(sig.params); } void applyOpSignature(const OpSignature& sig) { // Remove the operator's parameters from the top of the stack. stack.resize(stack.size() - sig.params.size()); // Push the operator's results onto the stack. for(ValueType result : sig.results) { stack.push_back(result); } } void emitControlEnd() { ControlContext& controlContext = controlStack.back(); if(controlContext.type == ControlContext::Type::ifThen) { // Emit the else operator. codeStream.else_(); stack.resize(controlContext.outerStackSize); for(ValueType elseParam : controlContext.elseParams) { stack.push_back(elseParam); } // Change the current control context type to an else clause. controlContext.type = ControlContext::Type::ifElse; } else { if(controlContext.type == ControlContext::Type::try_ || controlContext.type == ControlContext::Type::catch_) { // TODO: catch WAVM_UNREACHABLE(); } codeStream.end(); stack.resize(controlContext.outerStackSize); for(ValueType result : controlContext.results) { stack.push_back(result); } controlStack.pop_back(); } } void generateFunction(RandomStream& random); }; template struct ImmTypeAsValue { }; using OperatorEmitFunc = std::function; template bool isImmValid(const FunctionState&, ImmTypeAsValue) { return true; } static void generateImm(const FunctionState& state, RandomStream& random, NoImm& outImm) {} static bool isImmValid(const FunctionState& state, ImmTypeAsValue) { return state.moduleState.declaredFunctionIndices.size(); } static void generateImm(const FunctionState& state, RandomStream& random, FunctionRefImm& outImm) { outImm.functionIndex = state.moduleState.declaredFunctionIndices[random.get( state.moduleState.declaredFunctionIndices.size() - 1)]; } static void generateImm(const FunctionState& state, RandomStream& random, LiteralImm& outImm) { outImm.value = I32(random.get(UINT32_MAX)); } static void generateImm(const FunctionState& state, RandomStream& random, LiteralImm& outImm) { outImm.value = I64(random.get(UINT64_MAX)); } static void generateImm(const FunctionState& state, RandomStream& random, LiteralImm& outImm) { const U32 u32 = random.get(UINT32_MAX); memcpy(&outImm.value, &u32, sizeof(U32)); } static void generateImm(const FunctionState& state, RandomStream& random, LiteralImm& outImm) { const U64 u64 = random.get(UINT64_MAX); memcpy(&outImm.value, &u64, sizeof(U64)); } static void generateImm(const FunctionState& state, RandomStream& random, LiteralImm& outImm) { outImm.value.u64x2[0] = random.get(UINT64_MAX); outImm.value.u64x2[1] = random.get(UINT64_MAX); } static void generateImm(const FunctionState& state, RandomStream& random, AtomicFenceImm& outImm) { outImm.order = MemoryOrder::sequentiallyConsistent; } template static void generateImm(const FunctionState& state, RandomStream& random, LaneIndexImm& outImm) { outImm.laneIndex = random.get(numLanes - 1); } template static void generateImm(const FunctionState& state, RandomStream& random, ShuffleImm& outImm) { for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { outImm.laneIndices[laneIndex] = random.get(numLanes * 2 - 1); } } static bool isImmValid(const FunctionState& state, ImmTypeAsValue) { return state.module.dataSegments.size(); } static void generateImm(const FunctionState& state, RandomStream& random, DataSegmentImm& outImm) { WAVM_ASSERT(state.module.dataSegments.size()); outImm.dataSegmentIndex = random.get(state.module.dataSegments.size() - 1); } static bool isImmValid(const FunctionState& state, ImmTypeAsValue) { return state.module.elemSegments.size(); } static void generateImm(const FunctionState& state, RandomStream& random, ElemSegmentImm& outImm) { WAVM_ASSERT(state.module.elemSegments.size()); outImm.elemSegmentIndex = random.get(state.module.elemSegments.size() - 1); } template void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(Imm), const OpSignature& sig) { if(isImmValid(state, ImmTypeAsValue()) && state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, &sig](RandomStream& random) { Imm imm; generateImm(state, random, imm); (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(MemoryImm), OpSignature (*sigFromImm)(const Module&, const MemoryImm&)) { for(Uptr memoryIndex = 0; memoryIndex < state.module.memories.size(); ++memoryIndex) { MemoryImm imm; imm.memoryIndex = memoryIndex; const OpSignature sig = (*sigFromImm)(state.module, imm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, imm](RandomStream& random) { (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(MemoryCopyImm), OpSignature (*sigFromImm)(const Module&, const MemoryCopyImm&)) { for(Uptr destMemoryIndex = 0; destMemoryIndex < state.module.memories.size(); ++destMemoryIndex) { for(Uptr sourceMemoryIndex = 0; sourceMemoryIndex < state.module.memories.size(); ++sourceMemoryIndex) { MemoryCopyImm imm; imm.destMemoryIndex = destMemoryIndex; imm.sourceMemoryIndex = sourceMemoryIndex; const OpSignature sig = (*sigFromImm)(state.module, imm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, imm](RandomStream& random) { (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } } void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(TableImm), OpSignature (*sigFromImm)(const Module&, const TableImm&)) { for(Uptr tableIndex = 0; tableIndex < state.module.tables.size(); ++tableIndex) { TableImm imm; imm.tableIndex = tableIndex; const OpSignature sig = (*sigFromImm)(state.module, imm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, imm](RandomStream& random) { (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(TableCopyImm), OpSignature (*sigFromImm)(const Module&, const TableCopyImm&)) { for(Uptr destTableIndex = 0; destTableIndex < state.module.tables.size(); ++destTableIndex) { for(Uptr sourceTableIndex = 0; sourceTableIndex < state.module.tables.size(); ++sourceTableIndex) { const TableType& destTableType = state.module.tables.getType(destTableIndex); const TableType& sourceTableType = state.module.tables.getType(sourceTableIndex); if(isSubtype(sourceTableType.elementType, destTableType.elementType)) { TableCopyImm imm; imm.destTableIndex = destTableIndex; imm.sourceTableIndex = sourceTableIndex; const OpSignature sig = (*sigFromImm)(state.module, imm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, imm](RandomStream& random) { (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } } } template void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(LoadOrStoreImm), OpSignature (*sigFromImm)(const Module&, const BaseLoadOrStoreImm&)) { for(Uptr memoryIndex = 0; memoryIndex < state.module.memories.size(); ++memoryIndex) { LoadOrStoreImm sigImm; sigImm.memoryIndex = memoryIndex; sigImm.alignmentLog2 = 0; sigImm.offset = 0; const OpSignature sig = (*sigFromImm)(state.module, sigImm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, memoryIndex](RandomStream& random) { LoadOrStoreImm imm; imm.memoryIndex = memoryIndex; imm.alignmentLog2 = random.get(naturalAlignmentLog2); imm.offset = random.get(state.module.memories.getType(imm.memoryIndex).indexType == IndexType::i32 ? UINT32_MAX : UINT64_MAX); (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } template void getValidEmitters( FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(LoadOrStoreLaneImm), OpSignature (*sigFromImm)(const Module&, const LoadOrStoreLaneImm&)) { for(Uptr memoryIndex = 0; memoryIndex < state.module.memories.size(); ++memoryIndex) { LoadOrStoreLaneImm sigImm; sigImm.memoryIndex = memoryIndex; sigImm.alignmentLog2 = 0; sigImm.offset = 0; sigImm.laneIndex = 0; const OpSignature sig = (*sigFromImm)(state.module, sigImm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, memoryIndex](RandomStream& random) { LoadOrStoreLaneImm imm; imm.memoryIndex = memoryIndex; imm.alignmentLog2 = random.get(naturalAlignmentLog2); imm.offset = random.get(state.module.memories.getType(imm.memoryIndex).indexType == IndexType::i32 ? UINT32_MAX : UINT64_MAX); imm.laneIndex = random.get(numLanes - 1); (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } template void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(AtomicLoadOrStoreImm), OpSignature (*sigFromImm)(const Module&, const BaseLoadOrStoreImm&)) { for(Uptr memoryIndex = 0; memoryIndex < state.module.memories.size(); ++memoryIndex) { AtomicLoadOrStoreImm sigImm; sigImm.memoryIndex = memoryIndex; sigImm.alignmentLog2 = 0; sigImm.offset = 0; const OpSignature sig = (*sigFromImm)(state.module, sigImm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, memoryIndex](RandomStream& random) { AtomicLoadOrStoreImm imm; imm.memoryIndex = memoryIndex; imm.alignmentLog2 = naturalAlignmentLog2; imm.offset = random.get(state.module.memories.getType(imm.memoryIndex).indexType == IndexType::i32 ? UINT32_MAX : UINT64_MAX); (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(DataSegmentAndMemImm), OpSignature (*sigFromImm)(const Module&, const DataSegmentAndMemImm&)) { for(Uptr segmentIndex = 0; segmentIndex < state.module.dataSegments.size(); ++segmentIndex) { for(Uptr memoryIndex = 0; memoryIndex < state.module.memories.size(); ++memoryIndex) { DataSegmentAndMemImm imm; imm.dataSegmentIndex = segmentIndex; imm.memoryIndex = memoryIndex; const OpSignature sig = (*sigFromImm)(state.module, imm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, imm](RandomStream& random) { (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } } void getValidEmitters(FunctionState& state, std::vector& outValidOpEmitters, void (CodeStream::*emitOp)(ElemSegmentAndTableImm), OpSignature (*sigFromImm)(const Module&, const ElemSegmentAndTableImm&)) { for(const ElemSegmentAndTableImm& imm : state.moduleState.validElemSegmentAndTableImms) { const OpSignature sig = (*sigFromImm)(state.module, imm); if(state.isOpSignatureAllowed(sig)) { outValidOpEmitters.push_back([&state, emitOp, sig, imm](RandomStream& random) { (state.codeStream.*emitOp)(imm); state.applyOpSignature(sig); }); } } } // Build a table with information about non-parametric operators. struct OperatorInfo { const char* name; void (*getValidEmitters)(FunctionState& state, std::vector& outValidOpEmitters); }; static const OperatorInfo operatorInfos[]{ #define VISIT_OP(encoding, name, nameString, Imm, Signature, ...) \ {nameString, [](FunctionState& state, std::vector& outValidOpEmitters) { \ getValidEmitters(state, outValidOpEmitters, &CodeStream::name, OpSignatures::Signature); \ }}, WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(VISIT_OP) WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(VISIT_OP) #undef VISIT_OP }; static constexpr Uptr numNonParametricOps = sizeof(operatorInfos) / sizeof(OperatorInfo); static ValueType generateValueType(RandomStream& random) { switch(random.get(6)) { case 0: return ValueType::i32; case 1: return ValueType::i64; case 2: return ValueType::f32; case 3: return ValueType::f64; case 4: return ValueType::v128; case 5: return ValueType::externref; case 6: return ValueType::funcref; default: WAVM_UNREACHABLE(); } } static FunctionType generateFunctionType(RandomStream& random) { std::vector functionParams; const Uptr numParams = random.get(4); for(Uptr paramIndex = 0; paramIndex < numParams; ++paramIndex) { functionParams.push_back(generateValueType(random)); }; std::vector functionResults; const Uptr numResults = random.get(2); for(Uptr resultIndex = 0; resultIndex < numResults; ++resultIndex) { functionResults.push_back(generateValueType(random)); } return FunctionType({functionResults}, {functionParams}); } static IndexType generateIndexType(RandomStream& random) { switch(random.get(1)) { case 0: return IndexType::i32; case 1: return IndexType::i64; default: WAVM_UNREACHABLE(); }; } static ReferenceType generateRefType(RandomStream& random) { switch(random.get(1)) { case 0: return ReferenceType::externref; case 1: return ReferenceType::funcref; default: WAVM_UNREACHABLE(); }; } static ExternKind generateExternKind(RandomStream& random) { switch(random.get(4)) { case 0: return ExternKind::function; case 1: return ExternKind::table; case 2: return ExternKind::memory; case 3: return ExternKind::global; case 4: return ExternKind::exceptionType; default: WAVM_UNREACHABLE(); }; } FunctionType generateBlockSig(RandomStream& random, TypeTuple params) { const Uptr maxResults = 4; ValueType results[maxResults]; const Uptr numResults = random.get(4); for(Uptr resultIndex = 0; resultIndex < numResults; ++resultIndex) { results[resultIndex] = generateValueType(random); } return FunctionType(TypeTuple(results, numResults), params); } IndexedBlockType getIndexedBlockType(ModuleState& moduleState, const FunctionType sig) { if(sig.params().size() || sig.results().size() > 1) { IndexedBlockType result; result.format = IndexedBlockType::functionType; result.index = moduleState.functionTypeMap.getOrAdd(sig, moduleState.module.types.size()); if(result.index == moduleState.module.types.size()) { moduleState.module.types.push_back(sig); } return result; } else { return sig.results().size() == 1 ? IndexedBlockType{IndexedBlockType::Format::oneResult, {sig.results()[0]}} : IndexedBlockType{IndexedBlockType::Format::noParametersOrResult, {}}; } } void FunctionState::generateFunction(RandomStream& random) { controlStack.push_back({ControlContext::Type::function, 0, functionType.results(), functionType.results(), TypeTuple()}); std::vector validOpEmitters; while(controlStack.size()) { const ControlContext& controlContext = controlStack.back(); allowStackGrowth = stack.size() - controlContext.outerStackSize <= softMaxStackDepthInControlContext && numInstructions < softMaxInstructionsInFunction; validOpEmitters.clear(); if(stack.size() < controlContext.outerStackSize + controlContext.results.size()) { // If there aren't enough params on the stack to end the current control context, allow // instructions that grow the stack even if we've exceeded the allowStackGrowth = true; } else if(stack.size() == controlContext.outerStackSize + controlContext.results.size()) { // Check whether the current state has valid results to end the current control context. if(doesStackMatchParams(controlContext.results)) { if(controlContext.type == ControlContext::Type::ifThen) { // Enter an if-else clause. validOpEmitters.push_back([this](RandomStream& random) { // Emit the else operator. codeStream.else_(); stack.resize(controlStack.back().outerStackSize); for(ValueType elseParam : controlStack.back().elseParams) { stack.push_back(elseParam); } // Change the current control context type to an else clause. controlStack.back().type = ControlContext::Type::ifElse; }); } if(controlContext.type != ControlContext::Type::try_ && (controlContext.type != ControlContext::Type::ifThen || controlContext.elseParams == controlContext.results)) { // End the current control structure. validOpEmitters.push_back([this](RandomStream& random) { // Emit the end operator. codeStream.end(); // Push the control context's results on the stack. stack.resize(controlStack.back().outerStackSize); const TypeTuple& results = controlStack.back().results; stack.insert(stack.end(), results.begin(), results.end()); // Pop the control stack. controlStack.pop_back(); }); } } } // Build a list of the non-parametric operators that are valid given the module and the // current state of the stack. for(Uptr opIndex = 0; opIndex < numNonParametricOps; ++opIndex) { const OperatorInfo& opInfo = operatorInfos[opIndex]; opInfo.getValidEmitters(*this, validOpEmitters); } // Build a list of the parametric operators that are valid given the current state of // the stack. for(Uptr localIndex = 0; localIndex < numLocals; ++localIndex) { const ValueType localType = localIndex < functionType.params().size() ? functionType.params()[localIndex] : functionDef .nonParameterLocalTypes[localIndex - functionType.params().size()]; if(stack.size() > controlContext.outerStackSize && isSubtype(stack.back(), localType)) { // local.set validOpEmitters.push_back([this, localIndex](RandomStream& random) { codeStream.local_set({localIndex}); stack.pop_back(); }); // local.tee if(allowStackGrowth) { validOpEmitters.push_back([this, localIndex](RandomStream& random) { codeStream.local_tee({localIndex}); }); } } // local.get if(allowStackGrowth) { validOpEmitters.push_back([this, localIndex, localType](RandomStream& random) { codeStream.local_get({localIndex}); stack.push_back(localType); }); } } for(Uptr globalIndex = 0; globalIndex < module.globals.size(); ++globalIndex) { const GlobalType globalType = module.globals.getType(globalIndex); if(stack.size() > controlStack.back().outerStackSize && isSubtype(stack.back(), globalType.valueType) && globalType.isMutable) { // global.set validOpEmitters.push_back([this, globalIndex](RandomStream& random) { codeStream.global_set({globalIndex}); stack.pop_back(); }); } if(allowStackGrowth) { // global.get validOpEmitters.push_back([this, globalIndex, globalType](RandomStream& random) { codeStream.global_get({globalIndex}); stack.push_back(globalType.valueType); }); } } for(Uptr tableIndex = 0; tableIndex < module.tables.size(); ++tableIndex) { const TableType& tableType = module.tables.getType(tableIndex); // TODO: table.grow and table.fill if(stack.size() - controlStack.back().outerStackSize >= 2 && stack[stack.size() - 2] == asValueType(tableType.indexType) && isSubtype(stack.back(), asValueType(tableType.elementType))) { // table.set validOpEmitters.push_back([this, tableIndex](RandomStream& random) { codeStream.table_set({tableIndex}); stack.resize(stack.size() - 2); }); } if(stack.size() > controlStack.back().outerStackSize && stack.back() == asValueType(tableType.indexType)) { // table.get validOpEmitters.push_back([this, tableIndex, tableType](RandomStream& random) { codeStream.table_get({tableIndex}); stack.pop_back(); stack.push_back(asValueType(tableType.elementType)); }); if(tableType.elementType == ReferenceType::funcref) { // call_indirect for(Uptr typeIndex = 0; typeIndex < module.types.size(); ++typeIndex) { const FunctionType calleeType = module.types[typeIndex]; const TypeTuple params = calleeType.params(); const TypeTuple results = calleeType.results(); // If the random stream has run out of entropy, only consider operators // that result in fewer operands on the stack. if(!allowStackGrowth && results.size() >= params.size() + 1) { continue; } // Ensure the stack has enough values for the operator's parameters. if(params.size() + 1 > stack.size() - controlStack.back().outerStackSize) { continue; } // Check whether the top of the stack is compatible with function's // parameters. if(doesStackMatchParams(params, /*offsetFromTopOfStack*/ 1)) { validOpEmitters.push_back( [this, calleeType, typeIndex, tableIndex](RandomStream& random) { codeStream.call_indirect({{typeIndex}, tableIndex}); // Remove the function's parameters and the table index from // the top of the stack. stack.resize(stack.size() - calleeType.params().size() - 1); // Push the function's results onto the stack. for(ValueType result : calleeType.results()) { stack.push_back(result); } }); } } } } } if(allowStackGrowth) { const Uptr maxArity = stack.size() - controlStack.back().outerStackSize; for(Uptr arity = 0; arity < maxArity; ++arity) { // Enter a block control structure. validOpEmitters.push_back([this, arity](RandomStream& random) { const FunctionType blockSig = generateBlockSig( random, TypeTuple(stack.data() + stack.size() - arity, arity)); stack.resize(stack.size() - arity); stack.insert(stack.end(), blockSig.params().begin(), blockSig.params().end()); codeStream.block({getIndexedBlockType(moduleState, blockSig)}); controlStack.push_back({ControlContext::Type::block, stack.size() - arity, blockSig.results(), blockSig.results(), TypeTuple()}); }); // Enter a loop control structure. validOpEmitters.push_back([this, arity](RandomStream& random) { const FunctionType loopSig = generateBlockSig( random, TypeTuple(stack.data() + stack.size() - arity, arity)); stack.resize(stack.size() - arity); stack.insert(stack.end(), loopSig.params().begin(), loopSig.params().end()); codeStream.loop({getIndexedBlockType(moduleState, loopSig)}); controlStack.push_back({ControlContext::Type::loop, stack.size() - arity, loopSig.params(), loopSig.results(), TypeTuple()}); }); } } // Enter an if control structure. if(allowStackGrowth && stack.size() > controlStack.back().outerStackSize && stack.back() == ValueType::i32) { const Uptr maxArity = stack.size() - controlStack.back().outerStackSize - 1; for(Uptr arity = 0; arity < maxArity; ++arity) { validOpEmitters.push_back([this, arity](RandomStream& random) { const FunctionType ifSig = generateBlockSig( random, TypeTuple(stack.data() + stack.size() - arity - 1, arity)); stack.resize(stack.size() - arity - 1); stack.insert(stack.end(), ifSig.params().begin(), ifSig.params().end()); codeStream.if_({getIndexedBlockType(moduleState, ifSig)}); controlStack.push_back({ControlContext::Type::ifThen, stack.size() - arity, ifSig.results(), ifSig.results(), ifSig.params()}); }); } } // TODO: try/catch/catch_all/throw/rethrow for(Uptr branchTargetDepth = 0; branchTargetDepth < controlStack.size(); ++branchTargetDepth) { const ControlContext& targetContext = controlStack[controlStack.size() - branchTargetDepth - 1]; const TypeTuple params = targetContext.params; if(params.size() > stack.size() - controlStack.back().outerStackSize) { continue; } // Check whether the top of the stack is compatible with branch target's parameters. if(doesStackMatchParams(params)) { // br validOpEmitters.push_back([this, branchTargetDepth](RandomStream& random) { codeStream.br({U32(branchTargetDepth)}); emitControlEnd(); }); if(branchTargetDepth == controlStack.size() - 1) { // return validOpEmitters.push_back([this](RandomStream& random) { codeStream.return_(); emitControlEnd(); }); } } } // br_if if(stack.size() > controlStack.back().outerStackSize && stack.back() == ValueType::i32) { for(Uptr branchTargetDepth = 0; branchTargetDepth < controlStack.size(); ++branchTargetDepth) { const ControlContext& targetContext = controlStack[controlStack.size() - branchTargetDepth - 1]; const TypeTuple params = targetContext.params; if(params.size() + 1 > stack.size() - controlStack.back().outerStackSize) { continue; } // Check whether the top of the stack is compatible with branch target's parameters. if(doesStackMatchParams(params, /*offsetFromTopOfStack*/ 1)) { validOpEmitters.push_back([this, branchTargetDepth](RandomStream& random) { stack.pop_back(); codeStream.br_if({U32(branchTargetDepth)}); }); } } } // unreachable validOpEmitters.push_back([this](RandomStream& random) { codeStream.unreachable(); emitControlEnd(); }); // TODO: br_table if(stack.size() - controlStack.back().outerStackSize >= 3 && stack.back() == ValueType::i32) { const ValueType trueValueType = stack[stack.size() - 3]; const ValueType falseValueType = stack[stack.size() - 2]; if(trueValueType == falseValueType) { const ValueType joinType = trueValueType; if(isReferenceType(joinType)) { validOpEmitters.push_back([this, joinType](RandomStream& random) { stack.resize(stack.size() - 3); stack.push_back(joinType); codeStream.select({joinType}); }); } else { // Non-typed select validOpEmitters.push_back([this, joinType](RandomStream& random) { stack.resize(stack.size() - 3); stack.push_back(joinType); codeStream.select({ValueType::any}); }); } } } if(stack.size() > controlStack.back().outerStackSize) { // drop validOpEmitters.push_back([this](RandomStream& random) { codeStream.drop(); stack.pop_back(); }); } // call for(Uptr functionIndex = 0; functionIndex < module.functions.size(); ++functionIndex) { const FunctionType calleeType = module.types[module.functions.getType(functionIndex).index]; const TypeTuple params = calleeType.params(); const TypeTuple results = calleeType.results(); // If the random stream has run out of entropy, only consider operators that result // in fewer operands on the stack. if(!allowStackGrowth && results.size() >= params.size()) { continue; } // Ensure the stack has enough values for the operator's parameters. if(params.size() > stack.size() - controlStack.back().outerStackSize) { continue; } // Check whether the top of the stack is compatible with function's parameters. if(doesStackMatchParams(params)) { validOpEmitters.push_back([this, functionIndex](RandomStream& random) { const FunctionType calleeType = moduleState.module .types[moduleState.module.functions.getType(functionIndex).index]; codeStream.call({functionIndex}); // Remove the function's parameters from the top of the stack. stack.resize(stack.size() - calleeType.params().size()); // Push the function's results onto the stack. for(ValueType result : calleeType.results()) { stack.push_back(result); } }); } } // ref.null validOpEmitters.push_back([this](RandomStream& random) { const ReferenceType nullReferenceType = generateRefType(random); codeStream.ref_null({nullReferenceType}); stack.push_back(asValueType(nullReferenceType)); }); // ref.is_null if(stack.size() > controlStack.back().outerStackSize && isReferenceType(stack.back())) { validOpEmitters.push_back([this](RandomStream& random) { codeStream.ref_is_null(); stack.back() = ValueType::i32; }); } // Emit a random operator. WAVM_ASSERT(validOpEmitters.size()); const Uptr randomOpIndex = random.get(validOpEmitters.size() - 1); validOpEmitters[randomOpIndex](random); ++numInstructions; }; codeStream.finishValidation(); functionDef.code = codeByteStream.getBytes(); }; static InitializerExpression generateInitializerExpression(Module& module, RandomStream& random, ValueType type) { switch(type) { case ValueType::i32: return InitializerExpression(I32(random.get(UINT32_MAX))); case ValueType::i64: return InitializerExpression(I64(random.get(UINT64_MAX))); case ValueType::f32: return InitializerExpression(F32(random.get(UINT32_MAX))); case ValueType::f64: return InitializerExpression(F64(random.get(UINT64_MAX))); case ValueType::v128: { V128 v128; v128.u64x2[0] = random.get(UINT64_MAX); v128.u64x2[1] = random.get(UINT64_MAX); return InitializerExpression(v128); } case ValueType::externref: { return InitializerExpression(ReferenceType::externref); } case ValueType::funcref: { const Uptr functionIndex = random.get(module.functions.size()); return functionIndex == module.functions.size() ? InitializerExpression(ReferenceType::funcref) : InitializerExpression(InitializerExpression::Type::ref_func, functionIndex); } case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); } } void IR::generateValidModule(Module& module, RandomStream& random) { ModuleState moduleState(module, random); WAVM_ASSERT(module.featureSpec.simd); WAVM_ASSERT(module.featureSpec.atomics); WAVM_ASSERT(module.featureSpec.exceptionHandling); WAVM_ASSERT(module.featureSpec.multipleResultsAndBlockParams); WAVM_ASSERT(module.featureSpec.bulkMemoryOperations); WAVM_ASSERT(module.featureSpec.referenceTypes); WAVM_ASSERT(module.featureSpec.sharedTables); // Generate some memories. const Uptr numMemories = random.get(3); for(Uptr memoryIndex = 0; memoryIndex < numMemories; ++memoryIndex) { MemoryType type; type.isShared = !!random.get(1); type.indexType = generateIndexType(random); type.size.min = random.get(100); type.size.max = type.size.min + random.get(IR::maxMemory32Pages - type.size.min); if(random.get(1)) { module.memories.defs.push_back({type}); } else { module.imports.push_back({ExternKind::memory, module.memories.imports.size()}); module.memories.imports.push_back({type, "env", "memory"}); } } // Generate some tables. const Uptr numTables = random.get(3); for(Uptr tableIndex = 0; tableIndex < numTables; ++tableIndex) { TableType type; type.elementType = generateRefType(random); type.isShared = !!random.get(1); type.indexType = generateIndexType(random); type.size.min = random.get(100); type.size.max = IR::maxTable32Elems; if(random.get(1)) { module.tables.defs.push_back({type}); } else { module.imports.push_back({ExternKind::table, module.tables.imports.size()}); module.tables.imports.push_back({type, "env", "table"}); } } // Generate some globals. const Uptr numGlobals = random.get(10); for(Uptr globalIndex = 0; globalIndex < numGlobals; ++globalIndex) { const ValueType globalValueType = generateValueType(random); const bool isMutable = random.get(1); const GlobalType globalType{globalValueType, isMutable}; if(random.get(1)) { module.imports.push_back({ExternKind::global, module.globals.imports.size()}); module.globals.imports.push_back( {globalType, "env", "global" + std::to_string(globalIndex)}); } else { InitializerExpression initializer = generateInitializerExpression(module, random, globalValueType); module.globals.defs.push_back({globalType, initializer}); } }; // Generate some data segments. Uptr numDataSegments = random.get(2); for(Uptr segmentIndex = 0; segmentIndex < numDataSegments; ++segmentIndex) { const Uptr numSegmentBytes = random.get(100); std::vector bytes; for(Uptr byteIndex = 0; byteIndex < numSegmentBytes; ++byteIndex) { bytes.push_back(random.get(255)); } if(!module.memories.size() || random.get(1)) { module.dataSegments.push_back( {false, UINTPTR_MAX, {}, std::make_shared>(std::move(bytes))}); } else { const Uptr memoryIndex = random.get(module.memories.size() - 1); const MemoryType& memoryType = module.memories.getType(memoryIndex); module.dataSegments.push_back( {true, memoryIndex, generateInitializerExpression(module, random, asValueType(memoryType.indexType)), std::make_shared>(std::move(bytes))}); } }; // Create some function imports/defs const Uptr numFunctions = 1 + random.get(4); while(module.functions.size() < numFunctions) { // Generate a signature. FunctionType functionType = generateFunctionType(random); const Uptr functionTypeIndex = moduleState.functionTypeMap.getOrAdd(functionType, module.types.size()); if(functionTypeIndex == module.types.size()) { module.types.push_back(functionType); } if(random.get(1)) { // Generate a function import. module.imports.push_back({ExternKind::function, module.functions.imports.size()}); module.functions.imports.push_back( {{functionTypeIndex}, "env", "func" + std::to_string(module.functions.imports.size())}); } else { // Generate a FunctionDef, but don't generate its code until we have generated // all declarations. FunctionDef functionDef; functionDef.type.index = functionTypeIndex; // Generate locals. const Uptr numNonParameterLocals = random.get(4); for(Uptr localIndex = 0; localIndex < numNonParameterLocals; ++localIndex) { functionDef.nonParameterLocalTypes.push_back(generateValueType(random)); } module.functions.defs.push_back(std::move(functionDef)); } }; // Generate some elem segments. HashSet declaredFunctionIndexSet; Uptr numElemSegments = random.get(2); for(Uptr segmentIndex = 0; segmentIndex < numElemSegments; ++segmentIndex) { auto contents = std::make_shared(); contents->encoding = random.get(1) ? ElemSegment::Encoding::expr : ElemSegment::Encoding::index; ReferenceType segmentElemType; const Uptr numSegmentElements = random.get(100); switch(contents->encoding) { case ElemSegment::Encoding::expr: { segmentElemType = contents->elemType = generateRefType(random); for(Uptr index = 0; index < numSegmentElements; ++index) { switch(contents->elemType) { case ReferenceType::externref: { contents->elemExprs.push_back(ElemExpr(ReferenceType::externref)); break; } case ReferenceType::funcref: { const Uptr functionIndex = random.get(module.functions.size()); if(functionIndex == module.functions.size()) { contents->elemExprs.push_back(ElemExpr(ReferenceType::funcref)); } else { contents->elemExprs.push_back( ElemExpr(ElemExpr::Type::ref_func, functionIndex)); if(declaredFunctionIndexSet.add(functionIndex)) { moduleState.declaredFunctionIndices.push_back(functionIndex); } } break; } case ReferenceType::none: default: WAVM_UNREACHABLE(); }; } break; } case ElemSegment::Encoding::index: { contents->externKind = generateExternKind(random); segmentElemType = asReferenceType(contents->externKind); for(Uptr index = 0; index < numSegmentElements; ++index) { switch(contents->externKind) { case ExternKind::function: if(module.functions.size()) { const Uptr functionIndex = random.get(module.functions.size() - 1); contents->elemIndices.push_back(functionIndex); if(declaredFunctionIndexSet.add(functionIndex)) { moduleState.declaredFunctionIndices.push_back(functionIndex); } } break; case ExternKind::table: if(module.tables.size()) { contents->elemIndices.push_back(random.get(module.tables.size() - 1)); } break; case ExternKind::memory: if(module.memories.size()) { contents->elemIndices.push_back(random.get(module.memories.size() - 1)); } break; case ExternKind::global: if(module.globals.size()) { contents->elemIndices.push_back(random.get(module.globals.size() - 1)); } break; case ExternKind::exceptionType: if(module.exceptionTypes.size()) { contents->elemIndices.push_back( random.get(module.exceptionTypes.size() - 1)); } break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } break; } default: WAVM_UNREACHABLE(); }; std::vector validTableIndices; for(Uptr tableIndex = 0; tableIndex < module.tables.size(); ++tableIndex) { const ReferenceType tableElemType = module.tables.getType(tableIndex).elementType; if(isSubtype(segmentElemType, tableElemType)) { validTableIndices.push_back(tableIndex); } } ElemSegment::Type elemSegmentType = ElemSegment::Type::passive; if(!validTableIndices.size()) { elemSegmentType = random.get(1) ? ElemSegment::Type::passive : ElemSegment::Type::declared; } else { switch(random.get(2)) { case 0: elemSegmentType = ElemSegment::Type::passive; break; case 1: elemSegmentType = ElemSegment::Type::active; break; case 2: elemSegmentType = ElemSegment::Type::declared; break; default: WAVM_UNREACHABLE(); }; } switch(elemSegmentType) { case ElemSegment::Type::passive: { module.elemSegments.push_back({ElemSegment::Type::passive, UINTPTR_MAX, InitializerExpression(), std::move(contents)}); break; } case ElemSegment::Type::active: { const Uptr validTableIndex = random.get(validTableIndices.size() - 1); const TableType& tableType = module.tables.getType(validTableIndices[validTableIndex]); module.elemSegments.push_back( {ElemSegment::Type::active, validTableIndices[validTableIndex], generateInitializerExpression(module, random, asValueType(tableType.indexType)), std::move(contents)}); break; } case ElemSegment::Type::declared: { module.elemSegments.push_back({ElemSegment::Type::declared, UINTPTR_MAX, InitializerExpression(), std::move(contents)}); break; } default: WAVM_UNREACHABLE(); }; // Precalculate a list of element-table pairs that are valid for a table.init for(Uptr tableIndex = 0; tableIndex < module.tables.size(); ++tableIndex) { if(isSubtype(segmentElemType, module.tables.getType(tableIndex).elementType)) { moduleState.validElemSegmentAndTableImms.push_back( ElemSegmentAndTableImm{segmentIndex, tableIndex}); } } }; std::shared_ptr moduleValidationState = createModuleValidationState(module); validatePreCodeSections(*moduleValidationState); // Generate a few functions. for(FunctionDef& functionDef : module.functions.defs) { FunctionState functionState(moduleState, *moduleValidationState, functionDef); functionState.generateFunction(random); } // Generating functions might have added some block types, so revalidate the type section. validateTypes(*moduleValidationState); validatePostCodeSections(*moduleValidationState); } ================================================ FILE: Lib/IR/Types.cpp ================================================ #include "WAVM/IR/Types.h" #include #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Mutex.h" using namespace WAVM; using namespace WAVM::IR; struct TypeTupleHashPolicy { static bool areKeysEqual(TypeTuple left, TypeTuple right) { if(left.size() != right.size()) { return false; } for(Uptr elemIndex = 0; elemIndex < left.size(); ++elemIndex) { if(left[elemIndex] != right[elemIndex]) { return false; } } return true; } static Uptr getKeyHash(TypeTuple typeTuple) { return typeTuple.getHash(); } }; struct FunctionTypeHashPolicy { static bool areKeysEqual(FunctionType left, FunctionType right) { return left.params() == right.params() && left.results() == right.results(); } static Uptr getKeyHash(FunctionType functionType) { return functionType.getHash(); } }; IR::TypeTuple::Impl::Impl(Uptr inNumElems, const ValueType* inElems) : numElems(inNumElems) { if(numElems) { memcpy(elems, inElems, sizeof(ValueType) * numElems); } hash = XXH(elems, numElems * sizeof(ValueType), 0); } IR::TypeTuple::Impl::Impl(const Impl& inCopy) : hash(inCopy.hash), numElems(inCopy.numElems) { if(numElems) { memcpy(elems, inCopy.elems, numElems * sizeof(ValueType)); } } IR::TypeTuple::TypeTuple(ValueType inElem) { impl = getUniqueImpl(1, &inElem); } IR::TypeTuple::TypeTuple(const std::initializer_list& inElems) { impl = getUniqueImpl(inElems.size(), inElems.begin()); } IR::TypeTuple::TypeTuple(const std::vector& inElems) { impl = getUniqueImpl(inElems.size(), inElems.data()); } IR::TypeTuple::TypeTuple(const ValueType* inElems, Uptr numElems) { impl = getUniqueImpl(numElems, inElems); } struct GlobalUniqueTypeTuples { Platform::Mutex mutex; HashSet set; std::vector impls; ~GlobalUniqueTypeTuples() { Platform::Mutex::Lock lock(mutex); for(void* impl : impls) { free(impl); } } static GlobalUniqueTypeTuples& get() { static GlobalUniqueTypeTuples singleton; return singleton; } private: GlobalUniqueTypeTuples() = default; }; const TypeTuple::Impl* IR::TypeTuple::getUniqueImpl(Uptr numElems, const ValueType* inElems) { if(numElems == 0) { static Impl emptyImpl(0, nullptr); return &emptyImpl; } else { const Uptr numImplBytes = Impl::calcNumBytes(numElems); Impl* localImpl = new(alloca(numImplBytes)) Impl(numElems, inElems); GlobalUniqueTypeTuples& globalUniqueTypeTuples = GlobalUniqueTypeTuples::get(); Platform::Mutex::Lock lock(globalUniqueTypeTuples.mutex); const TypeTuple* typeTuple = globalUniqueTypeTuples.set.get(TypeTuple(localImpl)); if(typeTuple) { return typeTuple->impl; } else { Impl* globalImpl = new(malloc(numImplBytes)) Impl(*localImpl); globalUniqueTypeTuples.set.addOrFail(TypeTuple(globalImpl)); globalUniqueTypeTuples.impls.push_back(globalImpl); return globalImpl; } } } struct GlobalUniqueFunctionTypes { Platform::Mutex mutex; HashSet set; std::vector impls; ~GlobalUniqueFunctionTypes() { Platform::Mutex::Lock lock(mutex); for(void* impl : impls) { free(impl); } } static GlobalUniqueFunctionTypes& get() { static GlobalUniqueFunctionTypes singleton; return singleton; } private: GlobalUniqueFunctionTypes() = default; }; IR::FunctionType::Impl::Impl(TypeTuple inResults, TypeTuple inParams, CallingConvention inCallingConvention) : results(inResults), params(inParams), callingConvention(inCallingConvention) { hash = Hash()(results.getHash(), params.getHash()); hash = Hash()(hash, Uptr(callingConvention)); } const FunctionType::Impl* IR::FunctionType::getUniqueImpl(TypeTuple results, TypeTuple params, CallingConvention callingConvention) { if(results.size() == 0 && params.size() == 0 && callingConvention == CallingConvention::wasm) { static Impl emptyImpl{TypeTuple(), TypeTuple(), CallingConvention::wasm}; return &emptyImpl; } else if(results.size() == 0 && params.size() == 0 && callingConvention == CallingConvention::intrinsic) { static Impl emptyImpl{TypeTuple(), TypeTuple(), CallingConvention::intrinsic}; return &emptyImpl; } else { Impl localImpl(results, params, callingConvention); GlobalUniqueFunctionTypes& globalUniqueFunctionTypes = GlobalUniqueFunctionTypes::get(); Platform::Mutex::Lock lock(globalUniqueFunctionTypes.mutex); const FunctionType* functionType = globalUniqueFunctionTypes.set.get(FunctionType(&localImpl)); if(functionType) { return functionType->impl; } else { Impl* globalImpl = new(malloc(sizeof(Impl))) Impl(localImpl); globalUniqueFunctionTypes.set.addOrFail(FunctionType(globalImpl)); globalUniqueFunctionTypes.impls.push_back(globalImpl); return globalImpl; } } } ================================================ FILE: Lib/IR/Validate.cpp ================================================ #include "WAVM/IR/Validate.h" #include #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/IR.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/OperatorPrinter.h" #include "WAVM/IR/OperatorSignatures.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Defines.h" using namespace WAVM; using namespace WAVM::IR; #define VALIDATE_UNLESS(reason, comparison) \ if(comparison) { throw ValidationException(reason #comparison); } #define VALIDATE_INDEX(index, arraySize) \ if(index >= arraySize) \ { \ throw ValidationException( \ std::string("invalid index: " #index " must be less than " #arraySize " (" #index "=") \ + std::to_string(index) + (", " #arraySize "=") + std::to_string(arraySize) + ')'); \ } #define VALIDATE_FEATURE(context, feature) \ if(!module.featureSpec.feature) \ { \ throw ValidationException(std::string(context) + " requires " \ + getFeatureName(Feature::feature) + " feature"); \ } namespace WAVM { template<> struct Hash { Uptr operator()(const KindAndIndex& kindAndIndex, Uptr seed = 0) const { Uptr hash = seed; hash = Hash()(Uptr(kindAndIndex.kind), hash); hash = Hash()(kindAndIndex.index, hash); return hash; } }; } namespace WAVM { namespace IR { struct ModuleValidationState { const IR::Module& module; HashSet declaredExternRefs; ModuleValidationState(const IR::Module& inModule) : module(inModule) {} }; }} std::shared_ptr IR::createModuleValidationState(const IR::Module& module) { return std::make_shared(module); } static void validate(const IR::Module& module, IR::ValueType valueType) { switch(valueType) { case ValueType::i32: case ValueType::i64: case ValueType::f32: case ValueType::f64: WAVM_ASSERT(module.featureSpec.mvp); break; case ValueType::v128: VALIDATE_FEATURE("v128 value type", simd) break; case ValueType::externref: case ValueType::funcref: VALIDATE_FEATURE(asString(valueType), referenceTypes) break; case ValueType::none: case ValueType::any: default: throw ValidationException("invalid value type (" + std::to_string((Uptr)valueType) + ")"); }; } static void validate(SizeConstraints size, U64 maxMax) { U64 max = size.max == UINT64_MAX ? maxMax : size.max; VALIDATE_UNLESS("disjoint size bounds: ", size.min > max); VALIDATE_UNLESS("maximum size exceeds limit: ", max > maxMax); } static void validate(const IR::Module& module, ReferenceType type) { switch(type) { case ReferenceType::funcref: break; case ReferenceType::externref: VALIDATE_FEATURE(asString(type), referenceTypes); break; case ReferenceType::none: default: throw ValidationException("invalid reference type (" + std::to_string((Uptr)type) + ")"); } } static void validate(const Module& module, TableType type) { validate(module, type.elementType); validate(type.size, type.indexType == IndexType::i32 ? IR::maxTable32Elems : IR::maxTable64Elems); if(type.isShared) { VALIDATE_FEATURE("shared table", sharedTables); VALIDATE_UNLESS("shared tables must have a maximum size: ", type.size.max == UINT64_MAX); } if(type.indexType != IndexType::i32) { VALIDATE_FEATURE("64-bit table indices", table64); } } static void validate(const Module& module, MemoryType type) { validate(type.size, type.indexType == IndexType::i32 ? IR::maxMemory32Pages : IR::maxMemory64Pages); if(type.isShared) { VALIDATE_FEATURE("shared memory", atomics); VALIDATE_UNLESS("shared memories must have a maximum size: ", type.size.max == UINT64_MAX); } if(type.indexType != IndexType::i32) { VALIDATE_FEATURE("64-bit memory addresses", memory64); } } static void validate(const Module& module, GlobalType type) { validate(module, type.valueType); } static void validate(const Module& module, TypeTuple typeTuple) { for(ValueType valueType : typeTuple) { validate(module, valueType); } } template void validateType(Type expectedType, Type actualType, const char* context) { if(!isSubtype(actualType, expectedType)) { throw ValidationException(std::string("type mismatch: expected ") + asString(expectedType) + " but got " + asString(actualType) + " in " + context); } } static void validateExternKind(const Module& module, ExternKind externKind) { switch(externKind) { case ExternKind::function: case ExternKind::table: case ExternKind::memory: case ExternKind::global: break; case ExternKind::exceptionType: VALIDATE_FEATURE("exception type extern", exceptionHandling); break; case ExternKind::invalid: default: throw ValidationException("invalid extern kind (" + std::to_string(Uptr(externKind)) + ")"); }; } static ValueType validateGlobalIndex(const Module& module, Uptr globalIndex, bool mustBeMutable, bool mustBeImmutable, bool mustBeImport, const char* context) { VALIDATE_INDEX(globalIndex, module.globals.size()); const GlobalType& globalType = module.globals.getType(globalIndex); if(mustBeMutable && !globalType.isMutable) { throw ValidationException("attempting to mutate immutable global"); } else if(mustBeImport && globalIndex >= module.globals.imports.size()) { throw ValidationException( "global variable initializer expression may only access imported globals"); } else if(mustBeImmutable && globalType.isMutable) { throw ValidationException( "global variable initializer expression may only access immutable globals"); } return globalType.valueType; } static FunctionType validateFunctionIndex(const Module& module, Uptr functionIndex) { VALIDATE_INDEX(functionIndex, module.functions.size()); return module.types[module.functions.getType(functionIndex).index]; } static void validateFunctionRef(const ModuleValidationState& state, Uptr functionIndex) { validateFunctionIndex(state.module, functionIndex); } static void validateFunctionRefIsDeclared(const ModuleValidationState& state, Uptr functionIndex) { if(!state.declaredExternRefs.contains(KindAndIndex{ExternKind::function, functionIndex})) { throw ValidationException( "function " + std::to_string(functionIndex) + " must be an import, exported, or present in an elem segment or global initializer" + " to be used as the operand to ref.func"); } } static FunctionType validateBlockType(const Module& module, const IndexedBlockType& type) { switch(type.format) { case IndexedBlockType::noParametersOrResult: return FunctionType(); case IndexedBlockType::oneResult: validate(module, type.resultType); return FunctionType(TypeTuple(type.resultType)); case IndexedBlockType::functionType: { VALIDATE_INDEX(type.index, module.types.size()); FunctionType functionType = module.types[type.index]; if(functionType.params().size() > 0) { VALIDATE_FEATURE("block with params", multipleResultsAndBlockParams); } else if(functionType.results().size() > 1) { VALIDATE_FEATURE("block with multiple results", multipleResultsAndBlockParams); } else if(functionType.callingConvention() != CallingConvention::wasm) { throw ValidationException("invalid calling convention for block"); } return functionType; } default: WAVM_UNREACHABLE(); } } static FunctionType validateFunctionType(const Module& module, const IndexedFunctionType& type) { VALIDATE_INDEX(type.index, module.types.size()); const FunctionType functionType = module.types[type.index]; if(functionType.results().size() > IR::maxReturnValues) { throw ValidationException("function has more return values than WAVM can support"); } return functionType; } static void validateInitializer(const ModuleValidationState& state, const InitializerExpression& expression, ValueType expectedType, const char* context) { const Module& module = state.module; switch(expression.type) { case InitializerExpression::Type::i32_const: validateType(expectedType, ValueType::i32, context); break; case InitializerExpression::Type::i64_const: validateType(expectedType, ValueType::i64, context); break; case InitializerExpression::Type::f32_const: validateType(expectedType, ValueType::f32, context); break; case InitializerExpression::Type::f64_const: validateType(expectedType, ValueType::f64, context); break; case InitializerExpression::Type::v128_const: validateType(expectedType, ValueType::v128, context); break; case InitializerExpression::Type::global_get: { const ValueType globalValueType = validateGlobalIndex( module, expression.ref, false, true, true, "initializer expression global index"); validateType(expectedType, globalValueType, context); break; } case InitializerExpression::Type::ref_null: validateType(expectedType, asValueType(expression.nullReferenceType), context); break; case InitializerExpression::Type::ref_func: { validateFunctionRef(state, expression.ref); validateType(expectedType, ValueType::funcref, context); break; } case InitializerExpression::Type::invalid: default: throw ValidationException("invalid initializer expression"); }; } struct FunctionValidationContext { const bool enableTracing{Log::isCategoryEnabled(Log::traceValidation)}; FunctionValidationContext(ModuleValidationState& inModuleValidationState, const FunctionDef& inFunctionDef) : module(inModuleValidationState.module) , functionDef(inFunctionDef) , functionType(inModuleValidationState.module.types[inFunctionDef.type.index]) , moduleValidationState(inModuleValidationState) { // Validate the function's local types. for(auto localType : functionDef.nonParameterLocalTypes) { validate(module, localType); } // Initialize the local types. locals.reserve(functionType.params().size() + functionDef.nonParameterLocalTypes.size()); locals.insert(locals.end(), functionType.params().begin(), functionType.params().end()); locals.insert(locals.end(), functionDef.nonParameterLocalTypes.begin(), functionDef.nonParameterLocalTypes.end()); // Log the start of the function and its signature+locals. if(enableTracing) { traceOperator("func"); for(auto param : functionType.params()) { traceOperator(std::string("param ") + asString(param)); } for(auto result : functionType.results()) { traceOperator(std::string("result ") + asString(result)); } for(auto local : functionDef.nonParameterLocalTypes) { traceOperator(std::string("local ") + asString(local)); } } // Push the function context onto the control stack. pushControlStack( ControlContext::Type::function, functionType.results(), functionType.results()); } Uptr getControlStackSize() { return controlStack.size(); } void validateNonEmptyControlStack(const char* context) { if(controlStack.size() == 0) { throw ValidationException(std::string("Expected non-empty control stack in ") + context); } } void traceOperator(const std::string& operatorDescription) { std::string controlStackString; for(Uptr stackIndex = 0; stackIndex < controlStack.size(); ++stackIndex) { if(!controlStack[stackIndex].isReachable) { controlStackString += "("; } switch(controlStack[stackIndex].type) { case ControlContext::Type::function: controlStackString += "F"; break; case ControlContext::Type::block: controlStackString += "B"; break; case ControlContext::Type::ifThen: controlStackString += "T"; break; case ControlContext::Type::ifElse: controlStackString += "E"; break; case ControlContext::Type::loop: controlStackString += "L"; break; case ControlContext::Type::try_: controlStackString += "R"; break; case ControlContext::Type::catch_: controlStackString += "C"; break; default: WAVM_UNREACHABLE(); }; if(!controlStack[stackIndex].isReachable) { controlStackString += ")"; } } std::string stackString; const Uptr stackBase = controlStack.size() == 0 ? 0 : controlStack.back().outerStackSize; for(Uptr stackIndex = 0; stackIndex < stack.size(); ++stackIndex) { if(stackIndex == stackBase) { stackString += "| "; } stackString += asString(stack[stackIndex]); stackString += " "; } if(stack.size() == stackBase) { stackString += "|"; } Log::printf(Log::traceValidation, "%-50s %-50s %-50s\n", controlStackString.c_str(), operatorDescription.c_str(), stackString.c_str()); } // Operation dispatch methods. void block(ControlStructureImm imm) { const FunctionType type = validateBlockType(module, imm.type); popAndValidateTypeTuple("block arguments", type.params()); pushControlStack(ControlContext::Type::block, type.results(), type.results()); pushOperandTuple(type.params()); } void loop(ControlStructureImm imm) { const FunctionType type = validateBlockType(module, imm.type); popAndValidateTypeTuple("loop arguments", type.params()); pushControlStack(ControlContext::Type::loop, type.params(), type.results()); pushOperandTuple(type.params()); } void if_(ControlStructureImm imm) { const FunctionType type = validateBlockType(module, imm.type); popAndValidateOperand("if condition", ValueType::i32); popAndValidateTypeTuple("if arguments", type.params()); pushControlStack( ControlContext::Type::ifThen, type.results(), type.results(), type.params()); pushOperandTuple(type.params()); } void else_(NoImm imm) { WAVM_ASSERT(controlStack.size()); if(controlStack.back().type != ControlContext::Type::ifThen) { throw ValidationException("else only allowed in if context"); } popAndValidateTypeTuple("if result", controlStack.back().results); validateStackEmptyAtEndOfControlStructure(); controlStack.back().type = ControlContext::Type::ifElse; controlStack.back().isReachable = true; pushOperandTuple(controlStack.back().elseParams); } void end(NoImm) { WAVM_ASSERT(controlStack.size()); if(controlStack.back().type == ControlContext::Type::try_) { throw ValidationException("end may not occur in try context"); } TypeTuple results = controlStack.back().results; if(controlStack.back().type == ControlContext::Type::ifThen && results != controlStack.back().elseParams) { throw ValidationException("else-less if must have identity signature"); } popAndValidateTypeTuple("end result", controlStack.back().results); validateStackEmptyAtEndOfControlStructure(); controlStack.pop_back(); if(controlStack.size()) { pushOperandTuple(results); } } void try_(ControlStructureImm imm) { const FunctionType type = validateBlockType(module, imm.type); VALIDATE_FEATURE("try", exceptionHandling); popAndValidateTypeTuple("try arguments", type.params()); pushControlStack(ControlContext::Type::try_, type.results(), type.results()); pushOperandTuple(type.params()); } void validateCatch() { WAVM_ASSERT(controlStack.size()); popAndValidateTypeTuple("try result", controlStack.back().results); validateStackEmptyAtEndOfControlStructure(); if(controlStack.back().type == ControlContext::Type::try_ || controlStack.back().type == ControlContext::Type::catch_) { controlStack.back().type = ControlContext::Type::catch_; controlStack.back().isReachable = true; } else { throw ValidationException("catch only allowed in try/catch context"); } } void catch_(ExceptionTypeImm imm) { VALIDATE_FEATURE("catch", exceptionHandling); VALIDATE_INDEX(imm.exceptionTypeIndex, module.exceptionTypes.size()); const ExceptionType& type = module.exceptionTypes.getType(imm.exceptionTypeIndex); validateCatch(); for(auto param : type.params) { pushOperand(param); } } void catch_all(NoImm) { VALIDATE_FEATURE("catch_all", exceptionHandling); validateCatch(); } void return_(NoImm) { popAndValidateTypeTuple("ret", functionType.results()); enterUnreachable(); } void br(BranchImm imm) { popAndValidateTypeTuple("br argument", getBranchTargetByDepth(imm.targetDepth).params); enterUnreachable(); } void br_table(BranchTableImm imm) { popAndValidateOperand("br_table index", ValueType::i32); const TypeTuple defaultTargetParams = getBranchTargetByDepth(imm.defaultTargetDepth).params; // Validate that each target has the same number of parameters as the default target, and // that the parameters for each target match the arguments provided. WAVM_ASSERT(imm.branchTableIndex < functionDef.branchTables.size()); const std::vector& targetDepths = functionDef.branchTables[imm.branchTableIndex]; for(Uptr targetIndex = 0; targetIndex < targetDepths.size(); ++targetIndex) { const ControlContext& branchTarget = getBranchTargetByDepth(targetDepths[targetIndex]); const TypeTuple targetParams = branchTarget.params; if(targetParams.size() != defaultTargetParams.size()) { throw ValidationException( "br_table targets must all take the same number of parameters"); } else { peekAndValidateTypeTuple("br_table case argument", targetParams); } } popAndValidateTypeTuple("br_table argument", defaultTargetParams); enterUnreachable(); } void br_if(BranchImm imm) { const TypeTuple targetParams = getBranchTargetByDepth(imm.targetDepth).params; popAndValidateOperand("br_if condition", ValueType::i32); popAndValidateTypeTuple("br_if argument", targetParams); pushOperandTuple(targetParams); } void unreachable(NoImm) { enterUnreachable(); } void drop(NoImm) { popAndValidateOperand("drop", ValueType::any); } void select(SelectImm imm) { popAndValidateOperand("select condition", ValueType::i32); if(imm.type == ValueType::any) { const ValueType falseType = popAndValidateOperand("select false value", ValueType::any); const ValueType trueType = popAndValidateOperand("select true value", ValueType::any); VALIDATE_UNLESS("non-typed select operands must be numeric types: ", (falseType != ValueType::none && !isNumericType(falseType)) || (trueType != ValueType::none && !isNumericType(trueType))) if(falseType == ValueType::none) { pushOperand(trueType); } else if(trueType == ValueType::none) { pushOperand(falseType); } else { VALIDATE_UNLESS("non-typed select operands must have the same numeric type: ", falseType != trueType); pushOperand(falseType); } } else { VALIDATE_FEATURE("typed select instruction (0x1c)", referenceTypes); validate(module, imm.type); popAndValidateOperand("select false value", imm.type); popAndValidateOperand("select true value", imm.type); pushOperand(imm.type); } } void local_get(GetOrSetVariableImm imm) { pushOperand(validateLocalIndex(imm.variableIndex)); } void local_set(GetOrSetVariableImm imm) { popAndValidateOperand("local.set", validateLocalIndex(imm.variableIndex)); } void local_tee(GetOrSetVariableImm imm) { const ValueType localType = validateLocalIndex(imm.variableIndex); popAndValidateOperand("local.tee", localType); pushOperand(localType); } void global_get(GetOrSetVariableImm imm) { pushOperand( validateGlobalIndex(module, imm.variableIndex, false, false, false, "global.get")); } void global_set(GetOrSetVariableImm imm) { popAndValidateOperand( "global.set", validateGlobalIndex(module, imm.variableIndex, true, false, false, "global.set")); } void table_get(TableImm imm) { VALIDATE_INDEX(imm.tableIndex, module.tables.size()); const TableType& tableType = module.tables.getType(imm.tableIndex); popAndValidateOperand("table.get", asValueType(tableType.indexType)); pushOperand(asValueType(tableType.elementType)); } void table_set(TableImm imm) { VALIDATE_INDEX(imm.tableIndex, module.tables.size()); const TableType& tableType = module.tables.getType(imm.tableIndex); popAndValidateOperands( "table.get", asValueType(tableType.indexType), asValueType(tableType.elementType)); } void table_grow(TableImm imm) { VALIDATE_INDEX(imm.tableIndex, module.tables.size()); const TableType& tableType = module.tables.getType(imm.tableIndex); popAndValidateOperands( "table.grow", asValueType(tableType.elementType), asValueType(tableType.indexType)); pushOperand(ValueType::i32); } void table_fill(TableImm imm) { VALIDATE_INDEX(imm.tableIndex, module.tables.size()); const TableType& tableType = module.tables.getType(imm.tableIndex); popAndValidateOperands("table.fill", ValueType::i32, asValueType(tableType.elementType), asValueType(tableType.indexType)); } void throw_(ExceptionTypeImm imm) { VALIDATE_FEATURE("throw", exceptionHandling); VALIDATE_INDEX(imm.exceptionTypeIndex, module.exceptionTypes.size()); const ExceptionType& exceptionType = module.exceptionTypes.getType(imm.exceptionTypeIndex); popAndValidateTypeTuple("exception arguments", exceptionType.params); enterUnreachable(); } void rethrow(RethrowImm imm) { VALIDATE_FEATURE("rethrow", exceptionHandling); VALIDATE_UNLESS( "rethrow must target a catch: ", getBranchTargetByDepth(imm.catchDepth).type != ControlContext::Type::catch_); enterUnreachable(); } void ref_null(ReferenceTypeImm imm) { validate(module, imm.referenceType); pushOperand(asValueType(imm.referenceType)); } void ref_is_null(NoImm) { const ValueType operandType = popAndValidateOperand("ref.is_null operand", ValueType::any); if(!isReferenceType(operandType) && operandType != ValueType::none) { throw ValidationException(std::string("expected reference type but got") + asString(operandType) + " in ref.is_null operand"); } pushOperand(ValueType::i32); } void call(FunctionImm imm) { FunctionType calleeType = validateFunctionIndex(module, imm.functionIndex); popAndValidateTypeTuple("call arguments", calleeType.params()); pushOperandTuple(calleeType.results()); } void call_indirect(CallIndirectImm imm) { VALIDATE_INDEX(imm.tableIndex, module.tables.size()); const TableType& tableType = module.tables.getType(imm.tableIndex); VALIDATE_UNLESS("call_indirect requires a table element type of funcref: ", tableType.elementType != ReferenceType::funcref); FunctionType calleeType = validateFunctionType(module, imm.type); popAndValidateOperand("call_indirect function index", asValueType(tableType.indexType)); popAndValidateTypeTuple("call_indirect arguments", calleeType.params()); pushOperandTuple(calleeType.results()); } void validateImm(NoImm) {} template void validateImm(LiteralImm imm) {} template void validateImm(LoadOrStoreImm imm) { VALIDATE_UNLESS("load or store alignment greater than natural alignment: ", imm.alignmentLog2 > naturalAlignmentLog2); VALIDATE_INDEX(imm.memoryIndex, module.memories.size()); const MemoryType& memoryType = module.memories.getType(imm.memoryIndex); switch(memoryType.indexType) { case IndexType::i32: VALIDATE_UNLESS("load or store offset too large for i32 address", imm.offset > UINT32_MAX); break; case IndexType::i64: VALIDATE_UNLESS("load or store offset too large for i64 address", imm.offset > UINT64_MAX); break; default: WAVM_UNREACHABLE(); }; } template void validateImm(LoadOrStoreLaneImm imm) { validateImm(static_cast&>(imm)); VALIDATE_UNLESS("invalid lane index: ", imm.laneIndex >= numLanes); } void validateImm(MemoryImm imm) { VALIDATE_INDEX(imm.memoryIndex, module.memories.size()); } void validateImm(MemoryCopyImm imm) { VALIDATE_INDEX(imm.sourceMemoryIndex, module.memories.size()); VALIDATE_INDEX(imm.destMemoryIndex, module.memories.size()); } void validateImm(TableImm imm) { VALIDATE_INDEX(imm.tableIndex, module.tables.size()); } void validateImm(TableCopyImm imm) { VALIDATE_INDEX(imm.sourceTableIndex, module.tables.size()); VALIDATE_INDEX(imm.destTableIndex, module.tables.size()); VALIDATE_UNLESS( "source table element type must be a subtype of the destination table element type", !isSubtype(asValueType(module.tables.getType(imm.sourceTableIndex).elementType), asValueType(module.tables.getType(imm.destTableIndex).elementType))); } void validateImm(FunctionRefImm imm) { validateFunctionRef(moduleValidationState, imm.functionIndex); validateFunctionRefIsDeclared(moduleValidationState, imm.functionIndex); } template void validateImm(LaneIndexImm imm) { VALIDATE_UNLESS("invalid lane index: ", imm.laneIndex >= numLanes); } template void validateImm(ShuffleImm imm) { for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { VALIDATE_UNLESS("shuffle invalid lane index: ", imm.laneIndices[laneIndex] >= numLanes * 2); } } template void validateImm(AtomicLoadOrStoreImm imm) { VALIDATE_UNLESS("atomic memory operators must have natural alignment: ", imm.alignmentLog2 != naturalAlignmentLog2); VALIDATE_INDEX(imm.memoryIndex, module.memories.size()); } void validateImm(AtomicFenceImm imm) { WAVM_ASSERT(imm.order == MemoryOrder::sequentiallyConsistent); } void validateImm(DataSegmentAndMemImm imm) { VALIDATE_INDEX(imm.memoryIndex, module.memories.size()); VALIDATE_INDEX(imm.dataSegmentIndex, module.dataSegments.size()); } void validateImm(DataSegmentImm imm) { VALIDATE_INDEX(imm.dataSegmentIndex, module.dataSegments.size()); } void validateImm(ElemSegmentAndTableImm imm) { VALIDATE_INDEX(imm.elemSegmentIndex, module.elemSegments.size()); VALIDATE_INDEX(imm.tableIndex, module.tables.size()); // Validate that the elem type contained by the segment is compatible with the target table. const TableType tableType = module.tables.getType(imm.tableIndex); ElemSegment::Contents* contents = module.elemSegments[imm.elemSegmentIndex].contents.get(); switch(contents->encoding) { case IR::ElemSegment::Encoding::expr: VALIDATE_UNLESS("table.init elem segment type is not a subtype of table element type", !isSubtype(contents->elemType, tableType.elementType)); break; case IR::ElemSegment::Encoding::index: VALIDATE_UNLESS( "table.init elem segment type is not a subtype of table element type", !isSubtype(asReferenceType(contents->externKind), tableType.elementType)); break; default: WAVM_UNREACHABLE(); }; } void validateImm(ElemSegmentImm imm) { VALIDATE_INDEX(imm.elemSegmentIndex, module.elemSegments.size()); } #define VALIDATE_OP(_1, name, nameString, Imm, Signature, requiredFeature) \ void name(Imm imm) \ { \ VALIDATE_FEATURE(nameString, requiredFeature); \ const char* operatorName = nameString; \ WAVM_SUPPRESS_UNUSED(operatorName); \ validateImm(imm); \ const OpSignature& signature = IR::OpSignatures::Signature; \ popAndValidateOpParams(nameString, signature.params); \ pushOpResults(signature.results); \ } WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(VALIDATE_OP) #undef VALIDATE_OP #define VALIDATE_POLYMORPHIC_OP(_1, name, nameString, Imm, Signature, requiredFeature) \ void name(Imm imm) \ { \ VALIDATE_FEATURE(nameString, requiredFeature); \ const char* operatorName = nameString; \ WAVM_SUPPRESS_UNUSED(operatorName); \ validateImm(imm); \ const OpSignature& signature = IR::OpSignatures::Signature(module, imm); \ popAndValidateOpParams(nameString, signature.params); \ pushOpResults(signature.results); \ } WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(VALIDATE_POLYMORPHIC_OP) #undef DUMMY_VALIDATE_OP private: struct ControlContext { enum class Type : U8 { function, block, ifThen, ifElse, loop, try_, catch_ }; Type type; Uptr outerStackSize; TypeTuple params; TypeTuple results; bool isReachable; TypeTuple elseParams; }; const Module& module; const FunctionDef& functionDef; FunctionType functionType; ModuleValidationState& moduleValidationState; std::vector locals; std::vector controlStack; std::vector stack; void pushControlStack(ControlContext::Type type, TypeTuple params, TypeTuple results, TypeTuple elseParams = TypeTuple()) { controlStack.push_back({type, stack.size(), params, results, true, elseParams}); } void validateStackEmptyAtEndOfControlStructure() { WAVM_ASSERT(controlStack.size()); if(stack.size() != controlStack.back().outerStackSize) { std::string message = "stack was not empty at end of control structure: "; for(Uptr stackIndex = controlStack.back().outerStackSize; stackIndex < stack.size(); ++stackIndex) { if(stackIndex != controlStack.back().outerStackSize) { message += ", "; } message += asString(stack[stackIndex]); } throw ValidationException(std::move(message)); } } void enterUnreachable() { WAVM_ASSERT(controlStack.size()); stack.resize(controlStack.back().outerStackSize); controlStack.back().isReachable = false; } void validateBranchDepth(Uptr depth) const { VALIDATE_INDEX(depth, controlStack.size()); if(depth >= controlStack.size()) { throw ValidationException("invalid branch depth"); } } const ControlContext& getBranchTargetByDepth(Uptr depth) const { validateBranchDepth(depth); return controlStack[controlStack.size() - depth - 1]; } ValueType validateLocalIndex(Uptr localIndex) { VALIDATE_INDEX(localIndex, locals.size()); return locals[localIndex]; } ValueType peekAndValidateOperand(const char* context, Uptr operandDepth, const ValueType expectedType) { WAVM_ASSERT(controlStack.size()); ValueType actualType; if(stack.size() > controlStack.back().outerStackSize + operandDepth) { actualType = stack[stack.size() - operandDepth - 1]; } else if(!controlStack.back().isReachable) { // If the current instruction is unreachable, then pop a bottom type that is a subtype // of all other types. actualType = ValueType::none; } else { // If the current instruction is reachable, but the operand stack is empty, then throw a // validation exception. throw ValidationException(std::string("type mismatch: expected ") + asString(expectedType) + " but stack was empty" + " in " + context + " operand"); } if(!isSubtype(actualType, expectedType)) { throw ValidationException(std::string("type mismatch: expected ") + asString(expectedType) + " but got " + asString(actualType) + " in " + context + " operand"); } return actualType; } void popAndValidateOperandArray(const char* context, const ValueType* expectedTypes, Uptr num) { for(Uptr operandIndexFromEnd = 0; operandIndexFromEnd < num; ++operandIndexFromEnd) { const Uptr operandIndex = num - operandIndexFromEnd - 1; popAndValidateOperand(context, expectedTypes[operandIndex]); } } template void popAndValidateOperandArray(const char* context, const ValueType (&expectedTypes)[num]) { popAndValidateOperandArray(context, expectedTypes, num); } template void popAndValidateOperands(const char* context, OperandTypes... operands) { ValueType operandTypes[] = {operands...}; popAndValidateOperandArray(context, operandTypes); } ValueType popAndValidateOperand(const char* context, const ValueType expectedType) { ValueType actualType = peekAndValidateOperand(context, 0, expectedType); WAVM_ASSERT(controlStack.size()); if(stack.size() > controlStack.back().outerStackSize) { stack.pop_back(); } return actualType; } void popAndValidateTypeTuple(const char* context, TypeTuple expectedTypes) { popAndValidateOperandArray(context, expectedTypes.data(), expectedTypes.size()); } void popAndValidateOpParams(const char* context, OpTypeTuple expectedTypes) { popAndValidateOperandArray(context, expectedTypes.data(), expectedTypes.size()); } void peekAndValidateTypeTuple(const char* context, TypeTuple expectedTypes) { for(Uptr operandIndex = 0; operandIndex < expectedTypes.size(); ++operandIndex) { peekAndValidateOperand( context, expectedTypes.size() - operandIndex - 1, expectedTypes[operandIndex]); } } void pushOperand(ValueType type) { stack.push_back(type); } void pushOperandTuple(TypeTuple typeTuple) { for(ValueType type : typeTuple) { pushOperand(type); } } void pushOpResults(OpTypeTuple results) { for(ValueType type : results) { pushOperand(type); } } }; void IR::validateTypes(ModuleValidationState& state) { const Module& module = state.module; for(Uptr typeIndex = 0; typeIndex < module.types.size(); ++typeIndex) { FunctionType functionType = module.types[typeIndex]; // Validate the function type parameters and results here, but don't check the limit on // number of return values here, since they don't apply to block types that are also stored // here. Instead, uses of a function type from the types array must call // validateFunctionType to validate its use as a function type. validate(module, functionType.params()); validate(module, functionType.results()); if(functionType.results().size() > 1) { VALIDATE_FEATURE("function type with multiple results", multipleResultsAndBlockParams); } if(functionType.callingConvention() != CallingConvention::wasm) { VALIDATE_FEATURE("non-WASM function type", nonWASMFunctionTypes); } } } void IR::validateImports(ModuleValidationState& state) { const Module& module = state.module; WAVM_ASSERT(module.imports.size() == module.functions.imports.size() + module.tables.imports.size() + module.memories.imports.size() + module.globals.imports.size() + module.exceptionTypes.imports.size()); for(Uptr functionIndex = 0; functionIndex < module.functions.imports.size(); ++functionIndex) { const Import& functionImport = module.functions.imports[functionIndex]; validateFunctionType(module, functionImport.type); state.declaredExternRefs.add(KindAndIndex{ExternKind::function, functionIndex}); } for(auto& tableImport : module.tables.imports) { validate(module, tableImport.type); } for(auto& memoryImport : module.memories.imports) { validate(module, memoryImport.type); } for(auto& globalImport : module.globals.imports) { validate(module, globalImport.type); if(globalImport.type.isMutable) { VALIDATE_FEATURE("mutable imported global", importExportMutableGlobals); } } for(auto& exceptionTypeImport : module.exceptionTypes.imports) { validate(module, exceptionTypeImport.type.params); } if(module.tables.size() > 1) { VALIDATE_FEATURE("multiple tables", referenceTypes); } if(module.memories.size() > 1) { VALIDATE_FEATURE("multiple memories", multipleMemories); } } void IR::validateFunctionDeclarations(ModuleValidationState& state) { const Module& module = state.module; for(Uptr functionDefIndex = 0; functionDefIndex < module.functions.defs.size(); ++functionDefIndex) { const FunctionDef& functionDef = module.functions.defs[functionDefIndex]; const FunctionType functionType = validateFunctionType(module, functionDef.type); if(functionType.callingConvention() != CallingConvention::wasm) { throw ValidationException("Function definitions must have WASM calling convention"); } } } void IR::validateGlobalDefs(ModuleValidationState& state) { const Module& module = state.module; for(auto& globalDef : module.globals.defs) { validate(module, globalDef.type); validateInitializer(state, globalDef.initializer, globalDef.type.valueType, "global initializer expression"); if(globalDef.initializer.type == InitializerExpression::Type::ref_func) { state.declaredExternRefs.add( KindAndIndex{ExternKind::function, globalDef.initializer.ref}); } } } void IR::validateExceptionTypeDefs(ModuleValidationState& state) { const Module& module = state.module; for(auto& exceptionTypeDef : module.exceptionTypes.defs) { validate(module, exceptionTypeDef.type.params); } } void IR::validateTableDefs(ModuleValidationState& state) { const Module& module = state.module; for(auto& tableDef : module.tables.defs) { validate(module, tableDef.type); } if(module.tables.size() > 1) { VALIDATE_FEATURE("multiple tables", referenceTypes); } } void IR::validateMemoryDefs(ModuleValidationState& state) { const Module& module = state.module; for(auto& memoryDef : module.memories.defs) { validate(module, memoryDef.type); } if(module.memories.size() > 1) { VALIDATE_FEATURE("multiple memories", multipleMemories); } } void IR::validateExports(ModuleValidationState& state) { const Module& module = state.module; HashSet exportNameSet; for(auto& exportIt : module.exports) { validateExternKind(module, exportIt.kind); switch(exportIt.kind) { case ExternKind::function: VALIDATE_INDEX(exportIt.index, module.functions.size()); state.declaredExternRefs.add(KindAndIndex{ExternKind::function, exportIt.index}); break; case ExternKind::table: VALIDATE_INDEX(exportIt.index, module.tables.size()); break; case ExternKind::memory: VALIDATE_INDEX(exportIt.index, module.memories.size()); break; case ExternKind::global: validateGlobalIndex(module, exportIt.index, false, !module.featureSpec.importExportMutableGlobals, false, "exported global index"); break; case ExternKind::exceptionType: VALIDATE_INDEX(exportIt.index, module.exceptionTypes.size()); break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; VALIDATE_UNLESS("duplicate export: ", exportNameSet.contains(exportIt.name)); exportNameSet.addOrFail(exportIt.name); } } void IR::validateStartFunction(ModuleValidationState& state) { const Module& module = state.module; if(module.startFunctionIndex != UINTPTR_MAX) { VALIDATE_INDEX(module.startFunctionIndex, module.functions.size()); FunctionType startFunctionType = module.types[module.functions.getType(module.startFunctionIndex).index]; VALIDATE_UNLESS("start function must not have any parameters or results: ", startFunctionType != FunctionType()); } } void IR::validateElemSegments(ModuleValidationState& state) { const Module& module = state.module; for(auto& elemSegment : module.elemSegments) { if(elemSegment.contents->encoding == ElemSegment::Encoding::index) { validateExternKind(module, elemSegment.contents->externKind); if(elemSegment.contents->externKind != ExternKind::function) { VALIDATE_FEATURE("elem segment reference non-function externs", allowAnyExternKindElemSegments); } } switch(elemSegment.type) { case ElemSegment::Type::active: { VALIDATE_INDEX(elemSegment.tableIndex, module.tables.size()); const TableType& tableType = module.tables.getType(elemSegment.tableIndex); ReferenceType segmentElemType; switch(elemSegment.contents->encoding) { case ElemSegment::Encoding::expr: segmentElemType = elemSegment.contents->elemType; break; case ElemSegment::Encoding::index: segmentElemType = elemSegment.contents->externKind == ExternKind::function ? ReferenceType::funcref : ReferenceType::externref; break; default: WAVM_UNREACHABLE(); }; const ReferenceType tableElemType = tableType.elementType; if(!isSubtype(segmentElemType, tableType.elementType)) { throw ValidationException(std::string("segment elem type (") + asString(segmentElemType) + ") is not a subtype of the table's elem type (" + asString(tableElemType) + ")"); } validateInitializer(state, elemSegment.baseOffset, asValueType(tableType.indexType), "elem segment base initializer"); break; } case ElemSegment::Type::passive: break; case ElemSegment::Type::declared: break; default: WAVM_UNREACHABLE(); }; switch(elemSegment.contents->encoding) { case ElemSegment::Encoding::expr: for(const ElemExpr& elem : elemSegment.contents->elemExprs) { ReferenceType exprType = ReferenceType::none; switch(elem.type) { case ElemExpr::Type::ref_null: exprType = elem.nullReferenceType; break; case ElemExpr::Type::ref_func: exprType = ReferenceType::funcref; VALIDATE_INDEX(elem.index, module.functions.size()); state.declaredExternRefs.add(KindAndIndex{ExternKind::function, elem.index}); break; case ElemExpr::Type::invalid: default: WAVM_UNREACHABLE(); }; if(!isSubtype(exprType, elemSegment.contents->elemType)) { throw ValidationException(std::string("elem expression type (") + asString(exprType) + ") is not a subtype of the segment's elem type (" + asString(elemSegment.contents->elemType) + ")"); } } break; case ElemSegment::Encoding::index: for(Uptr externIndex : elemSegment.contents->elemIndices) { switch(elemSegment.contents->externKind) { case ExternKind::function: VALIDATE_INDEX(externIndex, module.functions.size()); break; case ExternKind::table: VALIDATE_INDEX(externIndex, module.tables.size()); break; case ExternKind::memory: VALIDATE_INDEX(externIndex, module.memories.size()); break; case ExternKind::global: VALIDATE_INDEX(externIndex, module.globals.size()); break; case ExternKind::exceptionType: VALIDATE_INDEX(externIndex, module.exceptionTypes.size()); break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; state.declaredExternRefs.add( KindAndIndex{elemSegment.contents->externKind, externIndex}); } break; default: WAVM_UNREACHABLE(); }; } } void IR::validateDataSegments(ModuleValidationState& state) { const Module& module = state.module; for(auto& dataSegment : module.dataSegments) { if(dataSegment.isActive) { VALIDATE_INDEX(dataSegment.memoryIndex, module.memories.size()); const MemoryType& memoryType = module.memories.getType(dataSegment.memoryIndex); validateInitializer(state, dataSegment.baseOffset, asValueType(memoryType.indexType), "data segment base initializer"); } } } void IR::validateCodeSection(ModuleValidationState& state) { const Module& module = state.module; for(const auto& functionDef : module.functions.defs) { CodeValidationStream validationStream(state, functionDef); OperatorDecoderStream operatorDecoderStream(functionDef.code); while(operatorDecoderStream) { operatorDecoderStream.decodeOp(validationStream); } } } namespace WAVM { namespace IR { struct CodeValidationStreamImpl { FunctionValidationContext functionContext; OperatorPrinter operatorPrinter; CodeValidationStreamImpl(ModuleValidationState& moduleValidationState, const FunctionDef& functionDef) : functionContext(moduleValidationState, functionDef) , operatorPrinter(moduleValidationState.module, functionDef) { } }; }} IR::CodeValidationStream::CodeValidationStream(ModuleValidationState& moduleValidationState, const FunctionDef& functionDef) { impl = new CodeValidationStreamImpl(moduleValidationState, functionDef); } IR::CodeValidationStream::~CodeValidationStream() { delete impl; impl = nullptr; } void IR::CodeValidationStream::finish() { if(impl->functionContext.getControlStackSize()) { throw ValidationException("end of code reached before end of function"); } } #define VISIT_OPCODE(_, name, nameString, Imm, ...) \ void IR::CodeValidationStream::name(Imm imm) \ { \ if(impl->functionContext.enableTracing) \ { \ impl->functionContext.traceOperator(impl->operatorPrinter.name(imm)); \ } \ impl->functionContext.validateNonEmptyControlStack(nameString); \ impl->functionContext.name(imm); \ } WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE ================================================ FILE: Lib/LLVMJIT/CMakeLists.txt ================================================ # Convert LLVM_DEFINITIONS from a string of space-separated elements to a CMake list. # (find_package(LLVM) is called in the root CMakeLists.txt so its targets are globally visible) separate_arguments(LLVM_DEFINITIONS) # LLVM on Windows includes definitions to disable secure CRT warnings. Remove them since # they're not necessary just to include LLVM and suppress useful warnings in WAVM code. list(REMOVE_ITEM LLVM_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") list(REMOVE_ITEM LLVM_DEFINITIONS "-D_CRT_SECURE_NO_DEPRECATE") list(REMOVE_ITEM LLVM_DEFINITIONS "-D_CRT_NONSTDC_NO_DEPRECATE") list(REMOVE_ITEM LLVM_DEFINITIONS "-D_CRT_NONSTDC_NO_WARNINGS") list(REMOVE_ITEM LLVM_DEFINITIONS "-D_SCL_SECURE_NO_DEPRECATE") list(REMOVE_ITEM LLVM_DEFINITIONS "-D_SCL_SECURE_NO_WARNINGS") # Find the LLVM libraries to link with. llvm_map_components_to_libnames(LLVM_LIBS support core passes orcjit DebugInfoDWARF AllTargetsAsmParsers ${LLVM_TARGETS_TO_BUILD}) set(Sources Disassembler.cpp EmitConvert.cpp EmitCore.cpp EmitExceptions.cpp EmitFunction.cpp EmitMem.cpp EmitModule.cpp EmitNumeric.cpp EmitTable.cpp EmitVar.cpp GDBRegistration.cpp LLVMCompile.cpp LLVMJIT.cpp LLVMModule.cpp Thunk.cpp) set(PrivateHeaders EmitContext.h EmitFunctionContext.h EmitModuleContext.h LLVMJITPrivate.h) set(PublicHeaders ${WAVM_INCLUDE_DIR}/LLVMJIT/LLVMJIT.h) # Create the LLVMJIT component. WAVM_ADD_LIB_COMPONENT(LLVMJIT SOURCES ${Sources} HEADERS ${PublicHeaders} ${PrivateHeaders} PRIVATE_LIBS ${LLVM_LIBS} PRIVATE_SYSTEM_INCLUDE_DIRECTORIES ${LLVM_INCLUDE_DIRS} PRIVATE_DEFINITIONS ${LLVM_DEFINITIONS}) ================================================ FILE: Lib/LLVMJIT/Disassembler.cpp ================================================ #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/Mutex.h" #include "LLVMJITPrivate.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM; using namespace WAVM::LLVMJIT; struct LLVMJIT::Disassembler { LLVMDisasmContextRef context; TargetArch arch; Platform::Mutex mutex; Disassembler(LLVMDisasmContextRef inContext, TargetArch inArch) : context(inContext), arch(inArch) { } ~Disassembler() { if(context) { LLVMDisasmDispose(context); } } Disassembler(const Disassembler&) = delete; Disassembler& operator=(const Disassembler&) = delete; }; std::shared_ptr LLVMJIT::createDisassembler(const TargetSpec& targetSpec) { initLLVM(); std::string tripleStr = getTriple(targetSpec); LLVMDisasmContextRef context = LLVMCreateDisasm(tripleStr.c_str(), nullptr, 0, nullptr, nullptr); if(!context) { return nullptr; } return std::make_shared(context, targetSpec.arch); } LLVMJIT::DisassembledInstruction LLVMJIT::disassembleInstruction( const std::shared_ptr& disasm, const U8* bytes, Uptr numBytes) { DisassembledInstruction result; result.numBytes = 0; result.mnemonic[0] = '\0'; if(!disasm) { return result; } Platform::Mutex::Lock lock(disasm->mutex); result.numBytes = LLVMDisasmInstruction(disasm->context, const_cast(bytes), numBytes, reinterpret_cast(bytes), result.mnemonic, sizeof(result.mnemonic)); return result; } Uptr LLVMJIT::findInstructionBoundary(const std::shared_ptr& disasm, const U8* code, Uptr codeSize, Uptr targetOffset) { if(!disasm || targetOffset >= codeSize) { return targetOffset; } if(disasm->arch == TargetArch::aarch64) { // AArch64: fixed 4-byte instructions, just align. return targetOffset & ~Uptr(3); } // Variable-length ISA (x86-64): disassemble from the start to find boundaries. Uptr offset = 0; while(offset < targetOffset) { DisassembledInstruction instr = disassembleInstruction(disasm, code + offset, codeSize - offset); offset += instr.numBytes ? instr.numBytes : 1; } return offset; } LLVMJIT::DisassembledInstruction LLVMJIT::disassembleInstruction(const TargetSpec& targetSpec, const U8* bytes, Uptr numBytes) { auto disasm = createDisassembler(targetSpec); return disassembleInstruction(disasm, bytes, numBytes); } std::string LLVMJIT::disassembleObject(const TargetSpec& targetSpec, const std::vector& objectBytes) { std::string result; std::string tripleStr = getTriple(targetSpec); LLVMDisasmContextRef disasmRef = LLVMCreateDisasm(tripleStr.c_str(), nullptr, 0, nullptr, nullptr); // Disabled because it triggers an "unsupported variant scheduling class" assertion in LLVM's // scheduling model on both x86 and AArch64. constexpr bool printLatency = false; if(printLatency) { WAVM_ERROR_UNLESS(LLVMSetDisasmOptions(disasmRef, LLVMDisassembler_Option_PrintLatency)); } std::unique_ptr object = cantFail(llvm::object::ObjectFile::createObjectFile(llvm::MemoryBufferRef( llvm::StringRef((const char*)objectBytes.data(), objectBytes.size()), "memory"))); // Iterate over the functions in the loaded object. for(std::pair symbolSizePair : llvm::object::computeSymbolSizes(*object)) { llvm::object::SymbolRef symbol = symbolSizePair.first; // Only process global symbols, which excludes SEH funclets. auto maybeFlags = symbol.getFlags(); if(!(maybeFlags && *maybeFlags & llvm::object::SymbolRef::SF_Global)) { continue; } // Get the type, name, and address of the symbol. Need to be careful not to get the // Expected for each value unless it will be checked for success before continuing. llvm::Expected type = symbol.getType(); if(!type || *type != llvm::object::SymbolRef::ST_Function) { continue; } llvm::Expected name = symbol.getName(); if(!name) { continue; } llvm::Expected addressInSection = symbol.getAddress(); if(!addressInSection) { continue; } // Compute the address the function was loaded at. llvm::StringRef sectionContents((const char*)objectBytes.data(), objectBytes.size()); if(llvm::Expected symbolSection = symbol.getSection()) { if(llvm::Expected maybeSectionContents = (*symbolSection)->getContents()) { sectionContents = maybeSectionContents.get(); } } WAVM_ERROR_UNLESS(addressInSection.get() + symbolSizePair.second >= addressInSection.get() && addressInSection.get() + symbolSizePair.second <= sectionContents.size()); result += name.get().str(); result += ": # "; result += std::to_string(addressInSection.get()); result += '-'; result += std::to_string(addressInSection.get() + symbolSizePair.second); result += '\n'; const U8* nextByte = (const U8*)sectionContents.data() + addressInSection.get(); Uptr numBytesRemaining = Uptr(symbolSizePair.second); while(numBytesRemaining) { char instructionBuffer[256]; Uptr numInstructionBytes = LLVMDisasmInstruction(disasmRef, const_cast(nextByte), numBytesRemaining, reinterpret_cast(nextByte), instructionBuffer, sizeof(instructionBuffer)); if(numInstructionBytes == 0) { numInstructionBytes = 1; result += "\t# skipped "; result += std::to_string(numInstructionBytes); result += " bytes.\n"; } WAVM_ASSERT(numInstructionBytes <= numBytesRemaining); numBytesRemaining -= numInstructionBytes; nextByte += numInstructionBytes; result += instructionBuffer; result += '\n'; }; } LLVMDisasmDispose(disasmRef); return result; } ================================================ FILE: Lib/LLVMJIT/EmitContext.h ================================================ #pragma once #include #include #include #include "LLVMJITPrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/RuntimeABI/RuntimeABI.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS #define LLVM_ALIGNMENT(alignment) llvm::Align(alignment) #define LLVM_ELEMENT_COUNT(numElements) llvm::ElementCount::getFixed(numElements) #define LLVM_LANE_INDEX_TYPE int #define LLVM_INTRINSIC_VECTOR_REDUCE_ADD llvm::Intrinsic::vector_reduce_add namespace WAVM { namespace LLVMJIT { // Code and state that is used for generating IR for both thunks and WASM functions. struct EmitContext { LLVMContext& llvmContext; llvm::IRBuilder<> irBuilder; llvm::Value* contextPointerVariable; struct MemoryInfo { llvm::Value* basePointerVariable; llvm::Value* endAddressVariable; }; std::vector memoryInfos; struct TryContext { llvm::BasicBlock* unwindToBlock; }; std::vector tryStack; EmitContext(LLVMContext& inLLVMContext, const std::vector& inMemoryOffsets) : llvmContext(inLLVMContext) , irBuilder(inLLVMContext) , contextPointerVariable(nullptr) , memoryOffsets(inMemoryOffsets) { irBuilder.setIsFPConstrained(true); irBuilder.setDefaultConstrainedExcept(llvm::fp::ExceptionBehavior::ebStrict); irBuilder.setDefaultConstrainedRounding(llvm::RoundingMode::NearestTiesToEven); } llvm::LoadInst* loadFromUntypedPointer(llvm::Value* pointer, llvm::Type* valueType, U32 alignment = 1) { auto load = irBuilder.CreateLoad(valueType, pointer); load->setAlignment(LLVM_ALIGNMENT(alignment)); return load; } void storeToUntypedPointer(llvm::Value* value, llvm::Value* pointer, U32 alignment = 1) { auto store = irBuilder.CreateStore(value, pointer); store->setAlignment(LLVM_ALIGNMENT(alignment)); } llvm::Value* getCompartmentAddress() { // Derive the compartment runtime data from the context address by masking off the lower // 31 bits. return irBuilder.CreateIntToPtr( irBuilder.CreateAnd( irBuilder.CreatePtrToInt( irBuilder.CreateLoad(llvmContext.ptrType, contextPointerVariable), llvmContext.i64Type), emitLiteral(llvmContext, ~((U64(1) << 31) - 1))), llvmContext.ptrType); } void reloadMemoryBases() { llvm::Value* compartmentAddress = getCompartmentAddress(); // Reload the memory base pointer and num reserved bytes values from the // CompartmentRuntimeData. for(Uptr memoryIndex = 0; memoryIndex < memoryOffsets.size(); ++memoryIndex) { MemoryInfo& memoryInfo = memoryInfos[memoryIndex]; llvm::Constant* memoryOffset = memoryOffsets[memoryIndex]; irBuilder.CreateStore( loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, compartmentAddress, {memoryOffset}), llvmContext.ptrType, sizeof(U8*)), memoryInfo.basePointerVariable); llvm::Value* memoryNumReservedBytesOffset = llvm::ConstantExpr::getAdd( memoryOffset, emitLiteralIptr(offsetof(Runtime::MemoryRuntimeData, endAddress), memoryOffset->getType())); irBuilder.CreateStore( loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, compartmentAddress, {memoryNumReservedBytesOffset}), memoryOffset->getType()), memoryInfo.endAddressVariable); } } void initContextVariables(llvm::Value* initialContextPointer, llvm::Type* iptrType) { memoryInfos.resize(memoryOffsets.size()); for(Uptr memoryIndex = 0; memoryIndex < memoryOffsets.size(); ++memoryIndex) { MemoryInfo& memoryInfo = memoryInfos[memoryIndex]; memoryInfo.basePointerVariable = irBuilder.CreateAlloca( llvmContext.ptrType, nullptr, "memoryBase" + llvm::Twine(memoryIndex)); memoryInfo.endAddressVariable = irBuilder.CreateAlloca( iptrType, nullptr, "memoryNumReservedBytesMinusGuardBytes" + llvm::Twine(memoryIndex)); } contextPointerVariable = irBuilder.CreateAlloca(llvmContext.ptrType, nullptr, "context"); irBuilder.CreateStore(initialContextPointer, contextPointerVariable); reloadMemoryBases(); } // Emits a call to a WAVM intrinsic function. ValueVector emitRuntimeIntrinsic(const char* intrinsicName, IR::FunctionType intrinsicType, const std::initializer_list& args) { WAVM_ASSERT(intrinsicType.callingConvention() == IR::CallingConvention::intrinsic); llvm::Module* llvmModule = irBuilder.GetInsertBlock()->getParent()->getParent(); llvm::Function* intrinsicFunction = llvmModule->getFunction(intrinsicName); if(!intrinsicFunction) { intrinsicFunction = llvm::Function::Create(asLLVMType(llvmContext, intrinsicType), llvm::Function::ExternalLinkage, intrinsicName, llvmModule); intrinsicFunction->setCallingConv( asLLVMCallingConv(intrinsicType.callingConvention())); } return emitCallOrInvoke( intrinsicFunction, args, intrinsicType, getInnermostUnwindToBlock()); } // Creates either a call or an invoke if the call occurs inside a try. ValueVector emitCallOrInvoke(llvm::Value* callee, llvm::ArrayRef args, IR::FunctionType calleeType, llvm::BasicBlock* unwindToBlock = nullptr) { const IR::CallingConvention callingConvention = calleeType.callingConvention(); llvm::ArrayRef callArgs = args; llvm::Value* resultsArray = nullptr; if(callingConvention == IR::CallingConvention::cAPICallback) { // Pass in pointers to argument and result arrays. auto argsArray = irBuilder.CreateAlloca( llvmContext.i8Type, emitLiteral(llvmContext, Uptr(args.size() * sizeof(IR::UntaggedValue)))); for(Uptr argIndex = 0; argIndex < args.size(); ++argIndex) { storeToUntypedPointer( args[argIndex], irBuilder.CreateInBoundsGEP( llvmContext.i8Type, argsArray, {emitLiteral(llvmContext, Uptr(argIndex * sizeof(IR::UntaggedValue)))})); } resultsArray = irBuilder.CreateAlloca( llvmContext.i8Type, emitLiteral(llvmContext, Uptr(calleeType.results().size() * sizeof(IR::UntaggedValue)))); auto callArgsAlloca = (llvm::Value**)alloca(sizeof(llvm::Value*) * 2); callArgs = llvm::ArrayRef(callArgsAlloca, 2); callArgsAlloca[0] = argsArray; callArgsAlloca[1] = resultsArray; } else if(callingConvention != IR::CallingConvention::c) { // Augment the argument list with the context pointer. auto callArgsAlloca = (llvm::Value**)alloca(sizeof(llvm::Value*) * (args.size() + 1)); callArgs = llvm::ArrayRef(callArgsAlloca, args.size() + 1); callArgsAlloca[0] = irBuilder.CreateLoad(llvmContext.ptrType, contextPointerVariable); for(Uptr argIndex = 0; argIndex < args.size(); ++argIndex) { callArgsAlloca[1 + argIndex] = args[argIndex]; } } // Call or invoke the callee. llvm::Value* returnValue; llvm::FunctionType* llvmCalleeType = asLLVMType(llvmContext, calleeType); if(!unwindToBlock) { auto call = irBuilder.CreateCall(llvmCalleeType, callee, callArgs); call->setCallingConv(asLLVMCallingConv(callingConvention)); // Mark as notail to prevent tail call optimization, ensuring stack overflow // is detected for infinite recursion instead of being converted to an infinite // loop. call->setTailCallKind(llvm::CallInst::TCK_NoTail); returnValue = call; } else { auto returnBlock = llvm::BasicBlock::Create( llvmContext, "invokeReturn", irBuilder.GetInsertBlock()->getParent()); auto invoke = irBuilder.CreateInvoke( llvmCalleeType, callee, returnBlock, unwindToBlock, callArgs); invoke->setCallingConv(asLLVMCallingConv(callingConvention)); irBuilder.SetInsertPoint(returnBlock); returnValue = invoke; } ValueVector results; switch(callingConvention) { case IR::CallingConvention::wasm: { // Update the context variable. auto newContextPointer = irBuilder.CreateExtractValue(returnValue, {0}); irBuilder.CreateStore(newContextPointer, contextPointerVariable); // Reload the memory/table base pointers. reloadMemoryBases(); if(areResultsReturnedDirectly(calleeType.results())) { // If the results are returned directly, extract them from the returned struct. for(Uptr resultIndex = 0; resultIndex < calleeType.results().size(); ++resultIndex) { results.push_back( irBuilder.CreateExtractValue(returnValue, {U32(1), U32(resultIndex)})); } } else { // Otherwise, load them from the context. Uptr resultOffset = 0; for(IR::ValueType resultType : calleeType.results()) { const U8 resultNumBytes = getTypeByteWidth(resultType); resultOffset = (resultOffset + resultNumBytes - 1) & -I8(resultNumBytes); WAVM_ASSERT(resultOffset < Runtime::maxThunkArgAndReturnBytes); results.push_back(loadFromUntypedPointer( irBuilder.CreateInBoundsGEP(llvmContext.i8Type, newContextPointer, {emitLiteral(llvmContext, resultOffset)}), asLLVMType(llvmContext, resultType), resultNumBytes)); resultOffset += resultNumBytes; } } break; } case IR::CallingConvention::intrinsicWithContextSwitch: { auto newContextPointer = returnValue; // Update the context variable. irBuilder.CreateStore(newContextPointer, contextPointerVariable); // Reload the memory/table base pointers. reloadMemoryBases(); // Load the call result from the returned context. WAVM_ASSERT(calleeType.results().size() <= 1); if(calleeType.results().size() == 1) { llvm::Type* llvmResultType = asLLVMType(llvmContext, calleeType.results()[0]); results.push_back( loadFromUntypedPointer(newContextPointer, llvmResultType, IR::getTypeByteWidth(calleeType.results()[0]))); } break; } case IR::CallingConvention::cAPICallback: { // Check whether the call returned an Exception. auto exception = returnValue; auto function = irBuilder.GetInsertBlock()->getParent(); auto trapBlock = llvm::BasicBlock::Create(llvmContext, "intrinsicTrap", function); auto returnBlock = llvm::BasicBlock::Create(llvmContext, "intrinsicReturn", function); irBuilder.CreateCondBr( irBuilder.CreateICmpEQ(exception, llvm::Constant::getNullValue(llvmContext.ptrType)), returnBlock, trapBlock); // If the call returned and Exception, throw it. irBuilder.SetInsertPoint(trapBlock); llvm::Module* llvmModule = irBuilder.GetInsertBlock()->getParent()->getParent(); llvm::Type* iptrType = llvmModule->getDataLayout().getIntPtrType(exception->getType()); IR::ValueType iptrValueType = iptrType->getIntegerBitWidth() == 32 ? IR::ValueType::i32 : IR::ValueType::i64; emitRuntimeIntrinsic("throwException", IR::FunctionType(IR::TypeTuple{}, IR::TypeTuple{iptrValueType}, IR::CallingConvention::intrinsic), {irBuilder.CreatePtrToInt(exception, iptrType)}); irBuilder.CreateUnreachable(); // Load the results from the results array. irBuilder.SetInsertPoint(returnBlock); for(Uptr resultIndex = 0; resultIndex < calleeType.results().size(); ++resultIndex) { results.push_back(loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, resultsArray, {emitLiteral(llvmContext, resultIndex * sizeof(IR::UntaggedValue))}), asLLVMType(llvmContext, calleeType.results()[resultIndex]))); } break; } case IR::CallingConvention::intrinsic: case IR::CallingConvention::c: { WAVM_ASSERT(calleeType.results().size() <= 1); if(calleeType.results().size() == 1) { results.push_back(returnValue); } break; } default: WAVM_UNREACHABLE(); }; return results; } void emitReturn(IR::TypeTuple resultTypes, const llvm::ArrayRef& results) { llvm::Value* returnStruct = getZeroedLLVMReturnStruct(llvmContext, resultTypes); returnStruct = irBuilder.CreateInsertValue( returnStruct, irBuilder.CreateLoad(llvmContext.ptrType, contextPointerVariable), {U32(0)}); WAVM_ASSERT(resultTypes.size() == results.size()); if(areResultsReturnedDirectly(resultTypes)) { // If the results are returned directly, insert them into the return struct. for(Uptr resultIndex = 0; resultIndex < results.size(); ++resultIndex) { llvm::Value* result = results[resultIndex]; returnStruct = irBuilder.CreateInsertValue( returnStruct, result, {U32(1), U32(resultIndex)}); } } else { // Otherwise, store them in the context. Uptr resultOffset = 0; for(Uptr resultIndex = 0; resultIndex < results.size(); ++resultIndex) { const IR::ValueType resultType = resultTypes[resultIndex]; const U8 resultNumBytes = IR::getTypeByteWidth(resultType); resultOffset = (resultOffset + resultNumBytes - 1) & -I8(resultNumBytes); WAVM_ASSERT(resultOffset < Runtime::maxThunkArgAndReturnBytes); irBuilder.CreateStore( results[resultIndex], irBuilder.CreateInBoundsGEP( llvmContext.i8Type, irBuilder.CreateLoad(llvmContext.ptrType, contextPointerVariable), {emitLiteral(llvmContext, resultOffset)})); resultOffset += resultNumBytes; } } irBuilder.CreateRet(returnStruct); } llvm::BasicBlock* getInnermostUnwindToBlock(); private: std::vector memoryOffsets; }; }} ================================================ FILE: Lib/LLVMJIT/EmitConvert.cpp ================================================ #include #include "EmitContext.h" #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace llvm { class Type; class Value; } using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; static llvm::Type* getWithNewIntBitWidth(llvm::Type* type, U32 newBitWidth) { return type->getWithNewBitWidth(newBitWidth); } llvm::Value* EmitFunctionContext::extendHalfOfIntVector( llvm::Value* vector, Uptr baseSourceElementIndex, llvm::Value* (EmitFunctionContext::*extend)(llvm::Value*, llvm::Type*)) { FixedVectorType* vectorType = static_cast(vector->getType()); FixedVectorType* halfVectorType = FixedVectorType::getHalfElementsVectorType(vectorType); llvm::Value* halfVector = llvm::UndefValue::get(halfVectorType); for(U64 index = 0; index < halfVectorType->getNumElements(); ++index) { halfVector = irBuilder.CreateInsertElement( halfVector, irBuilder.CreateExtractElement(vector, baseSourceElementIndex + index), index); } llvm::Type* halfExtendedVectorType = getWithNewIntBitWidth(halfVectorType, halfVectorType->getScalarSizeInBits() * 2); return (this->*extend)(halfVector, halfExtendedVectorType); } llvm::Value* EmitFunctionContext::insertIntoHalfZeroVector(llvm::Value* halfVector) { FixedVectorType* halfVectorType = static_cast(halfVector->getType()); llvm::Type* fullVectorType = FixedVectorType::get(halfVectorType->getScalarType(), U32(halfVectorType->getNumElements() * 2)); llvm::Value* result = llvm::Constant::getNullValue(fullVectorType); for(U32 elementIndex = 0; elementIndex < halfVectorType->getNumElements(); ++elementIndex) { result = irBuilder.CreateInsertElement( result, irBuilder.CreateExtractElement(halfVector, elementIndex), elementIndex); } return result; } #define EMIT_UNARY_OP(name, emitCode) \ void EmitFunctionContext::name(NoImm) \ { \ auto operand = pop(); \ push(emitCode); \ } EMIT_UNARY_OP(i32_wrap_i64, trunc(operand, llvmContext.i32Type)) EMIT_UNARY_OP(i64_extend_i32_s, sext(operand, llvmContext.i64Type)) EMIT_UNARY_OP(i64_extend_i32_u, zext(operand, llvmContext.i64Type)) EMIT_UNARY_OP(f32_convert_i32_s, irBuilder.CreateSIToFP(operand, llvmContext.f32Type)) EMIT_UNARY_OP(f64_convert_i32_s, irBuilder.CreateSIToFP(operand, llvmContext.f64Type)) EMIT_UNARY_OP(f32_convert_i64_s, irBuilder.CreateSIToFP(operand, llvmContext.f32Type)) EMIT_UNARY_OP(f64_convert_i64_s, irBuilder.CreateSIToFP(operand, llvmContext.f64Type)) EMIT_UNARY_OP(f32_convert_i32_u, irBuilder.CreateUIToFP(operand, llvmContext.f32Type)) EMIT_UNARY_OP(f64_convert_i32_u, irBuilder.CreateUIToFP(operand, llvmContext.f64Type)) EMIT_UNARY_OP(f32_convert_i64_u, irBuilder.CreateUIToFP(operand, llvmContext.f32Type)) EMIT_UNARY_OP(f64_convert_i64_u, irBuilder.CreateUIToFP(operand, llvmContext.f64Type)) EMIT_UNARY_OP(f32x4_convert_i32x4_s, irBuilder.CreateSIToFP(irBuilder.CreateBitCast(operand, llvmContext.i32x4Type), llvmContext.f32x4Type)); EMIT_UNARY_OP(f32x4_convert_i32x4_u, irBuilder.CreateUIToFP(irBuilder.CreateBitCast(operand, llvmContext.i32x4Type), llvmContext.f32x4Type)); #define EMIT_F64x2_CONVERT_LOW_I32x4(_su, ConvertFunction) \ void EmitFunctionContext::f64x2_convert_low_i32x4##_su(IR::NoImm) \ { \ llvm::Value* vector = pop(); \ vector = irBuilder.CreateBitCast(vector, llvmContext.i32x4Type); \ llvm::Value* halfVector = llvm::UndefValue::get(llvmContext.i32x2Type); \ for(U64 laneIndex = 0; laneIndex < 2; ++laneIndex) \ { \ halfVector = irBuilder.CreateInsertElement( \ halfVector, irBuilder.CreateExtractElement(vector, laneIndex), laneIndex); \ } \ llvm::Value* result = irBuilder.ConvertFunction(halfVector, llvmContext.f64x2Type); \ push(result); \ } EMIT_F64x2_CONVERT_LOW_I32x4(_s, CreateSIToFP) EMIT_F64x2_CONVERT_LOW_I32x4(_u, CreateUIToFP) EMIT_UNARY_OP(f32_demote_f64, irBuilder.CreateFPTrunc(operand, llvmContext.f32Type)) EMIT_UNARY_OP(f64_promote_f32, emitF64Promote(operand, llvmContext.f64Type)) void EmitFunctionContext::f32x4_demote_f64x2_zero(IR::NoImm) { llvm::Value* vector = pop(); vector = irBuilder.CreateBitCast(vector, llvmContext.f64x2Type); llvm::Value* halfResult = irBuilder.CreateFPTrunc(vector, llvmContext.f32x2Type); llvm::Value* result = insertIntoHalfZeroVector(halfResult); push(result); } void EmitFunctionContext::f64x2_promote_low_f32x4(IR::NoImm) { llvm::Value* vector = pop(); vector = irBuilder.CreateBitCast(vector, llvmContext.f32x4Type); llvm::Value* halfVector = irBuilder.CreateShuffleVector(vector, llvm::UndefValue::get(vector->getType()), llvm::ArrayRef{0, 1}); llvm::Value* result = emitF64Promote(halfVector, llvmContext.f64x2Type); push(result); } EMIT_UNARY_OP(f32_reinterpret_i32, irBuilder.CreateBitCast(operand, llvmContext.f32Type)) EMIT_UNARY_OP(f64_reinterpret_i64, irBuilder.CreateBitCast(operand, llvmContext.f64Type)) EMIT_UNARY_OP(i32_reinterpret_f32, irBuilder.CreateBitCast(operand, llvmContext.i32Type)) EMIT_UNARY_OP(i64_reinterpret_f64, irBuilder.CreateBitCast(operand, llvmContext.i64Type)) llvm::Value* EmitFunctionContext::emitF64Promote(llvm::Value* operand, llvm::Type* destType) { return irBuilder.CreateFPExt(operand, destType); } template llvm::Value* EmitFunctionContext::emitTruncFloatToInt(ValueType destType, bool isSigned, Float minBounds, Float maxBounds, llvm::Value* operand) { auto nanBlock = llvm::BasicBlock::Create(llvmContext, "FPToInt_nan", function); auto notNaNBlock = llvm::BasicBlock::Create(llvmContext, "FPToInt_notNaN", function); auto overflowBlock = llvm::BasicBlock::Create(llvmContext, "FPToInt_overflow", function); auto noOverflowBlock = llvm::BasicBlock::Create(llvmContext, "FPToInt_noOverflow", function); auto isNaN = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, operand, operand); irBuilder.CreateCondBr(isNaN, nanBlock, notNaNBlock, moduleContext.likelyFalseBranchWeights); irBuilder.SetInsertPoint(nanBlock); emitRuntimeIntrinsic( "invalidFloatOperationTrap", FunctionType({}, {}, IR::CallingConvention::intrinsic), {}); irBuilder.CreateUnreachable(); irBuilder.SetInsertPoint(notNaNBlock); auto isOverflow = irBuilder.CreateOr(irBuilder.CreateFCmpOGE(operand, emitLiteral(llvmContext, maxBounds)), irBuilder.CreateFCmpOLE(operand, emitLiteral(llvmContext, minBounds))); irBuilder.CreateCondBr( isOverflow, overflowBlock, noOverflowBlock, moduleContext.likelyFalseBranchWeights); irBuilder.SetInsertPoint(overflowBlock); emitRuntimeIntrinsic("divideByZeroOrIntegerOverflowTrap", FunctionType({}, {}, IR::CallingConvention::intrinsic), {}); irBuilder.CreateUnreachable(); irBuilder.SetInsertPoint(noOverflowBlock); return isSigned ? irBuilder.CreateFPToSI(operand, asLLVMType(llvmContext, destType)) : irBuilder.CreateFPToUI(operand, asLLVMType(llvmContext, destType)); } // We want the widest floating point bounds that can't be truncated to an integer. // This isn't simply the min/max integer values converted to float, but the next greater(or lesser) // float that would be truncated to an integer out of range of the target type. EMIT_UNARY_OP( i32_trunc_f32_s, emitTruncFloatToInt(ValueType::i32, true, -2147483904.0f, 2147483648.0f, operand)) EMIT_UNARY_OP(i32_trunc_f64_s, emitTruncFloatToInt(ValueType::i32, true, -2147483649.0, 2147483648.0, operand)) EMIT_UNARY_OP(i32_trunc_f32_u, emitTruncFloatToInt(ValueType::i32, false, -1.0f, 4294967296.0f, operand)) EMIT_UNARY_OP(i32_trunc_f64_u, emitTruncFloatToInt(ValueType::i32, false, -1.0, 4294967296.0, operand)) EMIT_UNARY_OP(i64_trunc_f32_s, emitTruncFloatToInt(ValueType::i64, true, -9223373136366403584.0f, 9223372036854775808.0f, operand)) EMIT_UNARY_OP(i64_trunc_f64_s, emitTruncFloatToInt(ValueType::i64, true, -9223372036854777856.0, 9223372036854775808.0, operand)) EMIT_UNARY_OP( i64_trunc_f32_u, emitTruncFloatToInt(ValueType::i64, false, -1.0f, 18446744073709551616.0f, operand)) EMIT_UNARY_OP( i64_trunc_f64_u, emitTruncFloatToInt(ValueType::i64, false, -1.0, 18446744073709551616.0, operand)) template llvm::Value* EmitFunctionContext::emitTruncFloatToIntSat(llvm::Type* destType, bool isSigned, Float minFloatBounds, Float maxFloatBounds, Int minIntBounds, Int maxIntBounds, llvm::Value* operand) { llvm::Value* result = isSigned ? irBuilder.CreateFPToSI(operand, destType) : irBuilder.CreateFPToUI(operand, destType); result = irBuilder.CreateSelect( irBuilder.CreateFCmpOGE(operand, emitLiteral(llvmContext, maxFloatBounds)), emitLiteral(llvmContext, maxIntBounds), result); result = irBuilder.CreateSelect( irBuilder.CreateFCmpOLE(operand, emitLiteral(llvmContext, minFloatBounds)), emitLiteral(llvmContext, minIntBounds), result); result = irBuilder.CreateSelect(irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, operand, operand), emitLiteral(llvmContext, Int(0)), result); return result; } EMIT_UNARY_OP(i32_trunc_sat_f32_s, emitTruncFloatToIntSat(llvmContext.i32Type, true, F32(INT32_MIN), F32(INT32_MAX), INT32_MIN, INT32_MAX, operand)) EMIT_UNARY_OP(i32_trunc_sat_f64_s, emitTruncFloatToIntSat(llvmContext.i32Type, true, F64(INT32_MIN), F64(INT32_MAX), INT32_MIN, INT32_MAX, operand)) EMIT_UNARY_OP(i32_trunc_sat_f32_u, emitTruncFloatToIntSat(llvmContext.i32Type, false, 0.0f, F32(UINT32_MAX), U32(0), UINT32_MAX, operand)) EMIT_UNARY_OP(i32_trunc_sat_f64_u, emitTruncFloatToIntSat(llvmContext.i32Type, false, 0.0, F64(UINT32_MAX), U32(0), UINT32_MAX, operand)) EMIT_UNARY_OP(i64_trunc_sat_f32_s, emitTruncFloatToIntSat(llvmContext.i64Type, true, F32(INT64_MIN), F32(INT64_MAX), INT64_MIN, INT64_MAX, operand)) EMIT_UNARY_OP(i64_trunc_sat_f64_s, emitTruncFloatToIntSat(llvmContext.i64Type, true, F64(INT64_MIN), F64(INT64_MAX), INT64_MIN, INT64_MAX, operand)) EMIT_UNARY_OP(i64_trunc_sat_f32_u, emitTruncFloatToIntSat(llvmContext.i64Type, false, 0.0f, F32(UINT64_MAX), U64(0), UINT64_MAX, operand)) EMIT_UNARY_OP(i64_trunc_sat_f64_u, emitTruncFloatToIntSat(llvmContext.i64Type, false, 0.0, F64(UINT64_MAX), U64(0), UINT64_MAX, operand)) template llvm::Value* EmitFunctionContext::emitTruncVectorFloatToIntSat(llvm::Type* destType, bool isSigned, Float minFloatBounds, Float maxFloatBounds, Int minIntBounds, Int maxIntBounds, Int nanResult, llvm::Value* operand) { auto result = isSigned ? irBuilder.CreateFPToSI(operand, destType) : irBuilder.CreateFPToUI(operand, destType); auto minFloatBoundsVec = irBuilder.CreateVectorSplat(numElements, emitLiteral(llvmContext, minFloatBounds)); auto maxFloatBoundsVec = irBuilder.CreateVectorSplat(numElements, emitLiteral(llvmContext, maxFloatBounds)); result = emitVectorSelect( irBuilder.CreateFCmpOGE(operand, maxFloatBoundsVec), irBuilder.CreateVectorSplat(numElements, emitLiteral(llvmContext, maxIntBounds)), result); result = emitVectorSelect( irBuilder.CreateFCmpOLE(operand, minFloatBoundsVec), irBuilder.CreateVectorSplat(numElements, emitLiteral(llvmContext, minIntBounds)), result); result = emitVectorSelect( irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, operand, operand), irBuilder.CreateVectorSplat(numElements, emitLiteral(llvmContext, nanResult)), result); return result; } EMIT_UNARY_OP( i32x4_trunc_sat_f32x4_s, (emitTruncVectorFloatToIntSat)(llvmContext.i32x4Type, true, F32(INT32_MIN), F32(INT32_MAX), INT32_MIN, INT32_MAX, I32(0), irBuilder.CreateBitCast(operand, llvmContext.f32x4Type))) EMIT_UNARY_OP( i32x4_trunc_sat_f32x4_u, (emitTruncVectorFloatToIntSat)(llvmContext.i32x4Type, false, 0.0f, F32(UINT32_MAX), U32(0), UINT32_MAX, U32(0), irBuilder.CreateBitCast(operand, llvmContext.f32x4Type))) EMIT_UNARY_OP(i32x4_trunc_sat_f64x2_s_zero, insertIntoHalfZeroVector(emitTruncVectorFloatToIntSat( llvmContext.i32x2Type, true, F64(INT32_MIN), F64(INT32_MAX), INT32_MIN, INT32_MAX, I32(0), irBuilder.CreateBitCast(operand, llvmContext.f64x2Type)))) EMIT_UNARY_OP(i32x4_trunc_sat_f64x2_u_zero, insertIntoHalfZeroVector(emitTruncVectorFloatToIntSat( llvmContext.i32x2Type, false, F64(0), F64(UINT32_MAX), 0, UINT32_MAX, I32(0), irBuilder.CreateBitCast(operand, llvmContext.f64x2Type)))) EMIT_UNARY_OP(i32_extend8_s, sext(trunc(operand, llvmContext.i8Type), llvmContext.i32Type)) EMIT_UNARY_OP(i32_extend16_s, sext(trunc(operand, llvmContext.i16Type), llvmContext.i32Type)) EMIT_UNARY_OP(i64_extend8_s, sext(trunc(operand, llvmContext.i8Type), llvmContext.i64Type)) EMIT_UNARY_OP(i64_extend16_s, sext(trunc(operand, llvmContext.i16Type), llvmContext.i64Type)) EMIT_UNARY_OP(i64_extend32_s, sext(trunc(operand, llvmContext.i32Type), llvmContext.i64Type)) #define EMIT_SIMD_SPLAT(vectorType, coerceScalar, numLanes) \ void EmitFunctionContext::vectorType##_splat(IR::NoImm) \ { \ auto scalar = pop(); \ push(irBuilder.CreateVectorSplat(numLanes, coerceScalar)); \ } EMIT_SIMD_SPLAT(i8x16, trunc(scalar, llvmContext.i8Type), 16) EMIT_SIMD_SPLAT(i16x8, trunc(scalar, llvmContext.i16Type), 8) EMIT_SIMD_SPLAT(i32x4, scalar, 4) EMIT_SIMD_SPLAT(i64x2, scalar, 2) EMIT_SIMD_SPLAT(f32x4, scalar, 4) EMIT_SIMD_SPLAT(f64x2, scalar, 2) #define EMIT_SIMD_NARROW(name, sourceType, halfDestType, x86IntrinsicId, aarch64IntrinsicId) \ void EmitFunctionContext::name(IR::NoImm) \ { \ auto right = irBuilder.CreateBitCast(pop(), sourceType); \ auto left = irBuilder.CreateBitCast(pop(), sourceType); \ const llvm::Triple::ArchType targetArch \ = moduleContext.targetMachine->getTargetTriple().getArch(); \ if(targetArch == llvm::Triple::x86_64 || targetArch == llvm::Triple::x86) \ { \ push(callLLVMIntrinsic({}, x86IntrinsicId, {left, right})); \ } \ else if(targetArch == llvm::Triple::aarch64) \ { \ llvm::Value* halfInput[2]{left, right}; \ llvm::Value* result = llvm::UndefValue::get(llvmContext.i64x2Type); \ for(U64 halfIndex = 0; halfIndex < 2; ++halfIndex) \ { \ result = irBuilder.CreateInsertElement( \ result, \ irBuilder.CreateExtractElement( \ irBuilder.CreateBitCast( \ callLLVMIntrinsic( \ {halfDestType}, aarch64IntrinsicId, {halfInput[halfIndex]}), \ llvmContext.i64x1Type), \ U64(0)), \ halfIndex); \ } \ push(result); \ } \ } EMIT_SIMD_NARROW(i8x16_narrow_i16x8_s, llvmContext.i16x8Type, llvmContext.i8x8Type, llvm::Intrinsic::x86_sse2_packsswb_128, llvm::Intrinsic::aarch64_neon_sqxtn) EMIT_SIMD_NARROW(i8x16_narrow_i16x8_u, llvmContext.i16x8Type, llvmContext.i8x8Type, llvm::Intrinsic::x86_sse2_packuswb_128, llvm::Intrinsic::aarch64_neon_sqxtun) EMIT_SIMD_NARROW(i16x8_narrow_i32x4_s, llvmContext.i32x4Type, llvmContext.i16x4Type, llvm::Intrinsic::x86_sse2_packssdw_128, llvm::Intrinsic::aarch64_neon_sqxtn) EMIT_SIMD_NARROW(i16x8_narrow_i32x4_u, llvmContext.i32x4Type, llvmContext.i16x4Type, llvm::Intrinsic::x86_sse41_packusdw, llvm::Intrinsic::aarch64_neon_sqxtun) #define EMIT_SIMD_EXTEND(name, sourceType, baseSourceElementIndex, extend) \ void EmitFunctionContext::name(IR::NoImm) \ { \ auto operand = irBuilder.CreateBitCast(pop(), sourceType); \ llvm::Value* result = extendHalfOfIntVector( \ operand, baseSourceElementIndex, &EmitFunctionContext::extend); \ push(result); \ } EMIT_SIMD_EXTEND(i16x8_extend_low_i8x16_s, llvmContext.i8x16Type, 0, sext) EMIT_SIMD_EXTEND(i16x8_extend_high_i8x16_s, llvmContext.i8x16Type, 8, sext) EMIT_SIMD_EXTEND(i16x8_extend_low_i8x16_u, llvmContext.i8x16Type, 0, zext) EMIT_SIMD_EXTEND(i16x8_extend_high_i8x16_u, llvmContext.i8x16Type, 8, zext) EMIT_SIMD_EXTEND(i32x4_extend_low_i16x8_s, llvmContext.i16x8Type, 0, sext) EMIT_SIMD_EXTEND(i32x4_extend_high_i16x8_s, llvmContext.i16x8Type, 4, sext) EMIT_SIMD_EXTEND(i32x4_extend_low_i16x8_u, llvmContext.i16x8Type, 0, zext) EMIT_SIMD_EXTEND(i32x4_extend_high_i16x8_u, llvmContext.i16x8Type, 4, zext) EMIT_SIMD_EXTEND(i64x2_extend_low_i32x4_s, llvmContext.i32x4Type, 0, sext) EMIT_SIMD_EXTEND(i64x2_extend_high_i32x4_s, llvmContext.i32x4Type, 2, sext) EMIT_SIMD_EXTEND(i64x2_extend_low_i32x4_u, llvmContext.i32x4Type, 0, zext) EMIT_SIMD_EXTEND(i64x2_extend_high_i32x4_u, llvmContext.i32x4Type, 2, zext) void EmitFunctionContext::i8x16_bitmask(NoImm) { auto i8x16Operand = irBuilder.CreateBitCast(pop(), llvmContext.i8x16Type); auto i1x16Mask = irBuilder.CreateICmpSLT( i8x16Operand, llvm::ConstantVector::getNullValue(llvmContext.i8x16Type)); if(moduleContext.targetArch == llvm::Triple::x86_64 || moduleContext.targetArch == llvm::Triple::x86) { push(irBuilder.CreateZExt(irBuilder.CreateBitCast(i1x16Mask, llvmContext.i16Type), llvmContext.i32Type)); } else { auto i8x16Mask = irBuilder.CreateSExt(i1x16Mask, llvmContext.i8x16Type); auto constant1 = llvm::ConstantInt::get(llvmContext.i8Type, 1); auto constant2 = llvm::ConstantInt::get(llvmContext.i8Type, 2); auto constant4 = llvm::ConstantInt::get(llvmContext.i8Type, 4); auto constant8 = llvm::ConstantInt::get(llvmContext.i8Type, 8); auto constant16 = llvm::ConstantInt::get(llvmContext.i8Type, 16); auto constant32 = llvm::ConstantInt::get(llvmContext.i8Type, 32); auto constant64 = llvm::ConstantInt::get(llvmContext.i8Type, 64); auto constant128 = llvm::ConstantInt::get(llvmContext.i8Type, 128); auto i8x16OrthogonalBitMask = irBuilder.CreateAnd(i8x16Mask, llvm::ConstantVector::get({constant1, constant2, constant4, constant8, constant16, constant32, constant64, constant128, constant1, constant2, constant4, constant8, constant16, constant32, constant64, constant128})); auto i8x8OriginalBitMaskA = irBuilder.CreateShuffleVector( i8x16OrthogonalBitMask, llvm::UndefValue::get(llvmContext.i8x16Type), llvm::ArrayRef{0, 1, 2, 3, 4, 5, 6, 7}); auto i8x8OriginalBitMaskB = irBuilder.CreateShuffleVector( i8x16OrthogonalBitMask, llvm::UndefValue::get(llvmContext.i8x16Type), llvm::ArrayRef{8, 9, 10, 11, 12, 13, 14, 15}); auto i8CombinedBitMaskA = callLLVMIntrinsic( {llvmContext.i8x8Type}, LLVM_INTRINSIC_VECTOR_REDUCE_ADD, {i8x8OriginalBitMaskA}); auto i8CombinedBitMaskB = callLLVMIntrinsic( {llvmContext.i8x8Type}, LLVM_INTRINSIC_VECTOR_REDUCE_ADD, {i8x8OriginalBitMaskB}); auto i32CombinedBitMask = irBuilder.CreateOr( irBuilder.CreateZExt(i8CombinedBitMaskA, llvmContext.i32Type), irBuilder.CreateShl(irBuilder.CreateZExt(i8CombinedBitMaskB, llvmContext.i32Type), emitLiteral(llvmContext, U32(8)))); push(i32CombinedBitMask); } } void EmitFunctionContext::i16x8_bitmask(NoImm) { auto i8x16Operand = irBuilder.CreateBitCast(pop(), llvmContext.i16x8Type); auto i1x8Mask = irBuilder.CreateICmpSLT( i8x16Operand, llvm::ConstantVector::getNullValue(llvmContext.i16x8Type)); if(moduleContext.targetArch == llvm::Triple::x86_64 || moduleContext.targetArch == llvm::Triple::x86) { push(irBuilder.CreateZExt(irBuilder.CreateBitCast(i1x8Mask, llvmContext.i8Type), llvmContext.i32Type)); } else { auto i16x8Mask = irBuilder.CreateSExt(i1x8Mask, llvmContext.i16x8Type); auto constant1 = llvm::ConstantInt::get(llvmContext.i16Type, 1); auto constant2 = llvm::ConstantInt::get(llvmContext.i16Type, 2); auto constant4 = llvm::ConstantInt::get(llvmContext.i16Type, 4); auto constant8 = llvm::ConstantInt::get(llvmContext.i16Type, 8); auto constant16 = llvm::ConstantInt::get(llvmContext.i16Type, 16); auto constant32 = llvm::ConstantInt::get(llvmContext.i16Type, 32); auto constant64 = llvm::ConstantInt::get(llvmContext.i16Type, 64); auto constant128 = llvm::ConstantInt::get(llvmContext.i16Type, 128); auto i16x8OrthogonalBitMask = irBuilder.CreateAnd(i16x8Mask, llvm::ConstantVector::get({constant1, constant2, constant4, constant8, constant16, constant32, constant64, constant128})); auto i16CombinedBitMask = callLLVMIntrinsic( {llvmContext.i16x8Type}, LLVM_INTRINSIC_VECTOR_REDUCE_ADD, {i16x8OrthogonalBitMask}); push(irBuilder.CreateZExt(i16CombinedBitMask, llvmContext.i32Type)); } } void EmitFunctionContext::i32x4_bitmask(NoImm) { auto i32x4Operand = irBuilder.CreateBitCast(pop(), llvmContext.i32x4Type); auto i1x4Mask = irBuilder.CreateICmpSLT( i32x4Operand, llvm::ConstantVector::getNullValue(llvmContext.i32x4Type)); if(moduleContext.targetArch == llvm::Triple::x86_64 || moduleContext.targetArch == llvm::Triple::x86) { push(irBuilder.CreateZExt( irBuilder.CreateBitCast(i1x4Mask, llvm::IntegerType::get(llvmContext, 4)), llvmContext.i32Type)); } else { auto i32x4Mask = irBuilder.CreateSExt(i1x4Mask, llvmContext.i32x4Type); auto constant1 = llvm::ConstantInt::get(llvmContext.i32Type, 1); auto constant2 = llvm::ConstantInt::get(llvmContext.i32Type, 2); auto constant4 = llvm::ConstantInt::get(llvmContext.i32Type, 4); auto constant8 = llvm::ConstantInt::get(llvmContext.i32Type, 8); auto i32x4OrthogonalBitMask = irBuilder.CreateAnd(i32x4Mask, llvm::ConstantVector::get({ constant1, constant2, constant4, constant8, })); auto i32CombinedBitMask = callLLVMIntrinsic( {llvmContext.i32x4Type}, LLVM_INTRINSIC_VECTOR_REDUCE_ADD, {i32x4OrthogonalBitMask}); push(i32CombinedBitMask); } } void EmitFunctionContext::i64x2_bitmask(NoImm) { auto i64x2Operand = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto i1x2Mask = irBuilder.CreateICmpSLT( i64x2Operand, llvm::ConstantVector::getNullValue(llvmContext.i64x2Type)); if(moduleContext.targetArch == llvm::Triple::x86_64 || moduleContext.targetArch == llvm::Triple::x86) { push(irBuilder.CreateZExt( irBuilder.CreateBitCast(i1x2Mask, llvm::IntegerType::get(llvmContext, 2)), llvmContext.i32Type)); } else { auto i64x2Mask = irBuilder.CreateSExt(i1x2Mask, llvmContext.i64x2Type); auto constant1 = llvm::ConstantInt::get(llvmContext.i64Type, 1); auto constant2 = llvm::ConstantInt::get(llvmContext.i64Type, 2); auto i64x2OrthogonalBitMask = irBuilder.CreateAnd(i64x2Mask, llvm::ConstantVector::get({ constant1, constant2, })); auto i64CombinedBitMask = callLLVMIntrinsic( {llvmContext.i64x2Type}, LLVM_INTRINSIC_VECTOR_REDUCE_ADD, {i64x2OrthogonalBitMask}); push(irBuilder.CreateTrunc(i64CombinedBitMask, llvmContext.i32Type)); } } #define EMIT_SIMD_FP_ROUNDING(type) \ EMIT_UNARY_OP(type##_ceil, \ callLLVMIntrinsic({llvmContext.type##Type}, \ llvm::Intrinsic::ceil, \ {irBuilder.CreateBitCast(operand, llvmContext.type##Type)})) \ EMIT_UNARY_OP(type##_floor, \ callLLVMIntrinsic({llvmContext.type##Type}, \ llvm::Intrinsic::floor, \ {irBuilder.CreateBitCast(operand, llvmContext.type##Type)})) \ EMIT_UNARY_OP(type##_trunc, \ callLLVMIntrinsic({llvmContext.type##Type}, \ llvm::Intrinsic::trunc, \ {irBuilder.CreateBitCast(operand, llvmContext.type##Type)})) \ EMIT_UNARY_OP(type##_nearest, \ callLLVMIntrinsic({llvmContext.type##Type}, \ llvm::Intrinsic::nearbyint, \ {irBuilder.CreateBitCast(operand, llvmContext.type##Type)})) EMIT_SIMD_FP_ROUNDING(f32x4) EMIT_SIMD_FP_ROUNDING(f64x2) ================================================ FILE: Lib/LLVMJIT/EmitCore.cpp ================================================ #include #include #include #include "EmitContext.h" #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/RuntimeABI/RuntimeABI.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace llvm { class Value; } using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; using namespace WAVM::Runtime; void EmitFunctionContext::block(ControlStructureImm imm) { FunctionType blockType = resolveBlockType(irModule, imm.type); // Create an end block+phi for the block result. auto endBlock = llvm::BasicBlock::Create(llvmContext, "blockEnd", function); auto endPHIs = createPHIs(endBlock, blockType.results()); // Pop the block arguments. llvm::Value** blockArgs = (llvm::Value**)alloca(sizeof(llvm::Value*) * blockType.params().size()); popMultiple(blockArgs, blockType.params().size()); // Push a control context that ends at the end block/phi. pushControlStack(ControlContext::Type::block, blockType.results(), endBlock, endPHIs); // Push a branch target for the end block/phi. pushBranchTarget(blockType.results(), endBlock, endPHIs); // Repush the block arguments. pushMultiple(blockArgs, blockType.params().size()); } void EmitFunctionContext::loop(ControlStructureImm imm) { FunctionType blockType = resolveBlockType(irModule, imm.type); llvm::BasicBlock* loopEntryBlock = irBuilder.GetInsertBlock(); // Create a loop block, and an end block for the loop result. auto loopBodyBlock = llvm::BasicBlock::Create(llvmContext, "loopBody", function); auto endBlock = llvm::BasicBlock::Create(llvmContext, "loopEnd", function); // Create PHIs for the loop's parameters, and PHIs for the loop result. auto parameterPHIs = createPHIs(loopBodyBlock, blockType.params()); auto endPHIs = createPHIs(endBlock, blockType.results()); // Pop the initial values of the loop's parameters from the stack. for(Iptr elementIndex = Iptr(blockType.params().size()) - 1; elementIndex >= 0; --elementIndex) { parameterPHIs[elementIndex]->addIncoming(coerceToCanonicalType(pop()), loopEntryBlock); } // Branch to the loop body and switch the IR builder to emit there. irBuilder.CreateBr(loopBodyBlock); irBuilder.SetInsertPoint(loopBodyBlock); // Push a control context that ends at the end block/phi. pushControlStack(ControlContext::Type::loop, blockType.results(), endBlock, endPHIs); // Push a branch target for the loop body start. pushBranchTarget(blockType.params(), loopBodyBlock, parameterPHIs); // Push the loop argument PHIs on the stack. pushMultiple((llvm::Value**)parameterPHIs.data(), parameterPHIs.size()); } void EmitFunctionContext::if_(ControlStructureImm imm) { FunctionType blockType = resolveBlockType(irModule, imm.type); // Create a then block and else block for the if, and an end block+phi for the if result. auto thenBlock = llvm::BasicBlock::Create(llvmContext, "ifThen", function); auto elseBlock = llvm::BasicBlock::Create(llvmContext, "ifElse", function); auto endBlock = llvm::BasicBlock::Create(llvmContext, "ifElseEnd", function); auto endPHIs = createPHIs(endBlock, blockType.results()); // Pop the if condition from the operand stack. auto condition = pop(); irBuilder.CreateCondBr(coerceI32ToBool(condition), thenBlock, elseBlock); // Pop the arguments from the operand stack. ValueVector args; WAVM_ASSERT(stack.size() >= blockType.params().size()); args.resize(blockType.params().size()); popMultiple(args.data(), args.size()); // Switch the IR builder to emit the then block. irBuilder.SetInsertPoint(thenBlock); // Push an ifThen control context that ultimately ends at the end block/phi, but may be // terminated by an else operator that changes the control context to the else block. pushControlStack( ControlContext::Type::ifThen, blockType.results(), endBlock, endPHIs, elseBlock, args); // Push a branch target for the if end. pushBranchTarget(blockType.results(), endBlock, endPHIs); // Repush the if arguments on the stack. pushMultiple(args.data(), args.size()); } void EmitFunctionContext::else_(NoImm imm) { WAVM_ASSERT(controlStack.size()); ControlContext& currentContext = controlStack.back(); branchToEndOfControlContext(); // Switch the IR emitter to the else block. WAVM_ASSERT(currentContext.elseBlock); WAVM_ASSERT(currentContext.type == ControlContext::Type::ifThen); currentContext.elseBlock->moveAfter(irBuilder.GetInsertBlock()); irBuilder.SetInsertPoint(currentContext.elseBlock); // Push the if arguments back on the operand stack. for(llvm::Value* argument : currentContext.elseArgs) { push(argument); } // Change the top of the control stack to an else clause. currentContext.type = ControlContext::Type::ifElse; currentContext.isReachable = true; currentContext.elseBlock = nullptr; } void EmitFunctionContext::end(NoImm) { WAVM_ASSERT(controlStack.size()); ControlContext& currentContext = controlStack.back(); if(currentContext.type == ControlContext::Type::try_) { endTryWithoutCatch(); } else if(currentContext.type == ControlContext::Type::catch_) { endTryCatch(); } branchToEndOfControlContext(); // If this is the end of an if without an else clause, create a dummy else clause. if(currentContext.elseBlock) { currentContext.elseBlock->moveAfter(irBuilder.GetInsertBlock()); irBuilder.SetInsertPoint(currentContext.elseBlock); // Add the if arguments to the end PHIs as if they just passed through the absent else // block. WAVM_ASSERT(currentContext.elseArgs.size() == currentContext.endPHIs.size()); for(Uptr argIndex = 0; argIndex < currentContext.elseArgs.size(); ++argIndex) { currentContext.endPHIs[argIndex]->addIncoming( coerceToCanonicalType(currentContext.elseArgs[argIndex]), currentContext.elseBlock); } irBuilder.CreateBr(currentContext.endBlock); } // Switch the IR emitter to the end block. currentContext.endBlock->moveAfter(irBuilder.GetInsertBlock()); irBuilder.SetInsertPoint(currentContext.endBlock); if(currentContext.endPHIs.size()) { // If the control context yields results, take the PHIs that merges all the control flow to // the end and push their values onto the operand stack. WAVM_ASSERT(currentContext.endPHIs.size() == currentContext.resultTypes.size()); for(Uptr elementIndex = 0; elementIndex < currentContext.endPHIs.size(); ++elementIndex) { if(currentContext.endPHIs[elementIndex]->getNumIncomingValues()) { push(currentContext.endPHIs[elementIndex]); } else { // If there weren't any incoming values for the end PHI, remove it and push // a dummy value. currentContext.endPHIs[elementIndex]->eraseFromParent(); push( llvmContext.typedZeroConstants[(Uptr)currentContext.resultTypes[elementIndex]]); } } } // Pop and branch targets introduced by this control context. WAVM_ASSERT(currentContext.outerBranchTargetStackSize <= branchTargetStack.size()); branchTargetStack.resize(currentContext.outerBranchTargetStackSize); // Pop this control context. controlStack.pop_back(); } void EmitFunctionContext::br_if(BranchImm imm) { // Pop the condition from operand stack. auto condition = pop(); BranchTarget& target = getBranchTargetByDepth(imm.targetDepth); WAVM_ASSERT(target.params.size() == target.phis.size()); for(Uptr argIndex = 0; argIndex < target.params.size(); ++argIndex) { // Take the branch target operands from the stack (without popping them) and add them to the // target's incoming value PHIs. llvm::Value* argument = getValueFromTop(target.params.size() - argIndex - 1); target.phis[argIndex]->addIncoming(coerceToCanonicalType(argument), irBuilder.GetInsertBlock()); } // Create a new basic block for the case where the branch is not taken. auto falseBlock = llvm::BasicBlock::Create(llvmContext, "br_ifElse", function); // Emit a conditional branch to either the falseBlock or the target block. irBuilder.CreateCondBr(coerceI32ToBool(condition), target.block, falseBlock); // Resume emitting instructions in the falseBlock. irBuilder.SetInsertPoint(falseBlock); } void EmitFunctionContext::br(BranchImm imm) { BranchTarget& target = getBranchTargetByDepth(imm.targetDepth); WAVM_ASSERT(target.params.size() == target.phis.size()); // Pop the branch target operands from the stack and add them to the target's incoming value // PHIs. for(Iptr argIndex = Iptr(target.params.size()) - 1; argIndex >= 0; --argIndex) { llvm::Value* argument = pop(); target.phis[argIndex]->addIncoming(coerceToCanonicalType(argument), irBuilder.GetInsertBlock()); } // Branch to the target block. irBuilder.CreateBr(target.block); enterUnreachable(); } void EmitFunctionContext::br_table(BranchTableImm imm) { // Pop the table index from the operand stack. auto index = pop(); // Look up the default branch target, and assume its argument type applies to all targets. (this // is guaranteed by the validator) BranchTarget& defaultTarget = getBranchTargetByDepth(imm.defaultTargetDepth); // Pop the branch arguments from the stack. const Uptr numArgs = defaultTarget.params.size(); llvm::Value** args = (llvm::Value**)alloca(sizeof(llvm::Value*) * numArgs); popMultiple(args, numArgs); // Add the branch arguments to the default target's parameter PHI nodes. for(Uptr argIndex = 0; argIndex < numArgs; ++argIndex) { defaultTarget.phis[argIndex]->addIncoming(coerceToCanonicalType(args[argIndex]), irBuilder.GetInsertBlock()); } // Create a LLVM switch instruction. WAVM_ASSERT(imm.branchTableIndex < functionDef.branchTables.size()); const std::vector& targetDepths = functionDef.branchTables[imm.branchTableIndex]; auto llvmSwitch = irBuilder.CreateSwitch(index, defaultTarget.block, (unsigned int)targetDepths.size()); for(Uptr targetIndex = 0; targetIndex < targetDepths.size(); ++targetIndex) { BranchTarget& target = getBranchTargetByDepth(targetDepths[targetIndex]); // Add this target to the switch instruction. WAVM_ERROR_UNLESS(targetIndex < UINT32_MAX); llvmSwitch->addCase(emitLiteral(llvmContext, (U32)targetIndex), target.block); // Add the branch arguments to the PHI nodes for the branch target's parameters. WAVM_ASSERT(target.phis.size() == numArgs); for(Uptr argIndex = 0; argIndex < numArgs; ++argIndex) { target.phis[argIndex]->addIncoming(coerceToCanonicalType(args[argIndex]), irBuilder.GetInsertBlock()); } } enterUnreachable(); } void EmitFunctionContext::return_(NoImm) { // Pop the branch target operands from the stack and add them to the target's incoming value // PHIs. for(Iptr argIndex = functionType.results().size() - 1; argIndex >= 0; --argIndex) { llvm::Value* argument = pop(); controlStack[0].endPHIs[argIndex]->addIncoming(coerceToCanonicalType(argument), irBuilder.GetInsertBlock()); } // Branch to the return block. irBuilder.CreateBr(controlStack[0].endBlock); enterUnreachable(); } void EmitFunctionContext::unreachable(NoImm) { // Call an intrinsic that causes a trap, and insert the LLVM unreachable terminator. emitRuntimeIntrinsic( "unreachableTrap", FunctionType({}, {}, IR::CallingConvention::intrinsic), {}); irBuilder.CreateUnreachable(); enterUnreachable(); } // // Call operators // void EmitFunctionContext::call(FunctionImm imm) { WAVM_ASSERT(imm.functionIndex < moduleContext.functions.size()); WAVM_ASSERT(imm.functionIndex < irModule.functions.size()); llvm::Value* callee = moduleContext.functions[imm.functionIndex]; FunctionType calleeType = irModule.types[irModule.functions.getType(imm.functionIndex).index]; // Pop the call arguments from the operand stack. const Uptr numArguments = calleeType.params().size(); auto llvmArgs = (llvm::Value**)alloca(sizeof(llvm::Value*) * numArguments); popMultiple(llvmArgs, numArguments); // Coerce the arguments to their canonical type. for(Uptr argIndex = 0; argIndex < numArguments; ++argIndex) { llvmArgs[argIndex] = coerceToCanonicalType(llvmArgs[argIndex]); } // Call the function. ValueVector results = emitCallOrInvoke(callee, llvm::ArrayRef(llvmArgs, numArguments), calleeType, getInnermostUnwindToBlock()); // Push the results on the operand stack. for(llvm::Value* result : results) { push(result); } } void EmitFunctionContext::call_indirect(CallIndirectImm imm) { WAVM_ASSERT(imm.type.index < irModule.types.size()); const FunctionType calleeType = irModule.types[imm.type.index]; // Compile the function index. auto elementIndex = pop(); // Pop the call arguments from the operand stack. const Uptr numArguments = calleeType.params().size(); auto llvmArgs = (llvm::Value**)alloca(sizeof(llvm::Value*) * numArguments); popMultiple(llvmArgs, numArguments); // Coerce the arguments to their canonical type. for(Uptr argIndex = 0; argIndex < numArguments; ++argIndex) { llvmArgs[argIndex] = coerceToCanonicalType(llvmArgs[argIndex]); } // Zero extend the function index to the pointer size. elementIndex = zext(elementIndex, moduleContext.iptrType); // Load base and endIndex from the TableRuntimeData in CompartmentRuntimeData::tables // corresponding to imm.tableIndex. auto tableRuntimeDataPointer = irBuilder.CreateInBoundsGEP( llvmContext.i8Type, getCompartmentAddress(), {moduleContext.tableOffsets[imm.tableIndex]}); auto tableBasePointer = loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, tableRuntimeDataPointer, {emitLiteralIptr(offsetof(TableRuntimeData, base), moduleContext.iptrType)}), llvmContext.ptrType, moduleContext.iptrAlignment); auto tableMaxIndex = loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, tableRuntimeDataPointer, {emitLiteralIptr(offsetof(TableRuntimeData, endIndex), moduleContext.iptrType)}), moduleContext.iptrType, moduleContext.iptrAlignment); // Clamp the function index against the value stored in TableRuntimeData::endIndex, which // will map out of bounds indices to the guard page at the end of the table. auto clampedElementIndex = irBuilder.CreateSelect( irBuilder.CreateICmpULT(elementIndex, tableMaxIndex), elementIndex, tableMaxIndex); // Load the funcref referenced by the table. auto elementPointer = irBuilder.CreateInBoundsGEP( moduleContext.iptrType, tableBasePointer, {clampedElementIndex}); llvm::LoadInst* biasedValueLoad = irBuilder.CreateLoad(moduleContext.iptrType, elementPointer); biasedValueLoad->setAtomic(llvm::AtomicOrdering::Acquire); biasedValueLoad->setAlignment(LLVM_ALIGNMENT(sizeof(Uptr))); auto runtimeFunction = irBuilder.CreateIntToPtr( irBuilder.CreateAdd(biasedValueLoad, moduleContext.tableReferenceBias), llvmContext.ptrType); auto elementTypeId = loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, runtimeFunction, emitLiteralIptr(offsetof(Runtime::Function, encodedType), moduleContext.iptrType)), moduleContext.iptrType, moduleContext.iptrAlignment); auto calleeTypeId = moduleContext.typeIds[imm.type.index]; // If the function type doesn't match, trap. emitConditionalTrapIntrinsic( irBuilder.CreateICmpNE(calleeTypeId, elementTypeId), "callIndirectFail", FunctionType(TypeTuple(), TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType, ValueType::funcref, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {elementIndex, moduleContext.tableIds[imm.tableIndex], irBuilder.CreatePointerCast(runtimeFunction, llvmContext.externrefType), calleeTypeId}); // Call the function loaded from the table. auto functionPointer = irBuilder.CreatePointerCast( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, runtimeFunction, emitLiteralIptr(offsetof(Runtime::Function, code), moduleContext.iptrType)), llvmContext.funcptrType); ValueVector results = emitCallOrInvoke(functionPointer, llvm::ArrayRef(llvmArgs, numArguments), calleeType, getInnermostUnwindToBlock()); // Push the results on the operand stack. for(llvm::Value* result : results) { push(result); } } void EmitFunctionContext::nop(IR::NoImm) {} void EmitFunctionContext::drop(IR::NoImm) { stack.pop_back(); } void EmitFunctionContext::select(IR::SelectImm) { auto condition = pop(); auto falseValue = coerceToCanonicalType(pop()); auto trueValue = coerceToCanonicalType(pop()); push(irBuilder.CreateSelect(coerceI32ToBool(condition), trueValue, falseValue)); } ================================================ FILE: Lib/LLVMJIT/EmitExceptions.cpp ================================================ #include #include #include "EmitContext.h" #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/RuntimeABI/RuntimeABI.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; using namespace WAVM::Runtime; static llvm::Function* getCXABeginCatchFunction(EmitModuleContext& moduleContext) { if(!moduleContext.cxaBeginCatchFunction) { LLVMContext& llvmContext = moduleContext.llvmContext; moduleContext.cxaBeginCatchFunction = llvm::Function::Create( llvm::FunctionType::get(llvmContext.ptrType, {llvmContext.ptrType}, false), llvm::GlobalValue::LinkageTypes::ExternalLinkage, "__cxa_begin_catch", moduleContext.llvmModule); } return moduleContext.cxaBeginCatchFunction; } static llvm::Function* getCXAEndCatchFunction(EmitModuleContext& moduleContext) { if(!moduleContext.cxaEndCatchFunction) { LLVMContext& llvmContext = moduleContext.llvmContext; moduleContext.cxaEndCatchFunction = llvm::Function::Create( llvm::FunctionType::get(llvm::Type::getVoidTy(llvmContext), false), llvm::GlobalValue::LinkageTypes::ExternalLinkage, "__cxa_end_catch", moduleContext.llvmModule); } return moduleContext.cxaEndCatchFunction; } void EmitFunctionContext::endTryWithoutCatch() { WAVM_ASSERT(tryStack.size()); tryStack.pop_back(); endTryCatch(); } void EmitFunctionContext::endTryCatch() { WAVM_ASSERT(catchStack.size()); CatchContext& catchContext = catchStack.back(); exitCatch(); // If an end instruction terminates a sequence of catch clauses, terminate the chain of // handler type ID tests by rethrowing the exception if its type ID didn't match any of the // handlers. llvm::BasicBlock* savedInsertionPoint = irBuilder.GetInsertBlock(); irBuilder.SetInsertPoint(catchContext.nextHandlerBlock); emitRuntimeIntrinsic( "throwException", FunctionType( TypeTuple{}, TypeTuple{moduleContext.iptrValueType}, CallingConvention::intrinsic), {irBuilder.CreatePtrToInt(catchContext.exceptionPointer, moduleContext.iptrType)}); irBuilder.CreateUnreachable(); irBuilder.SetInsertPoint(savedInsertionPoint); catchStack.pop_back(); } void EmitFunctionContext::exitCatch() { ControlContext& currentContext = controlStack.back(); WAVM_ASSERT(currentContext.type == ControlContext::Type::catch_); WAVM_ASSERT(catchStack.size()); CatchContext& catchContext = catchStack.back(); if(currentContext.isReachable) { // Destroy the exception caught by the previous catch clause. emitRuntimeIntrinsic( "destroyException", FunctionType( TypeTuple{}, TypeTuple{moduleContext.iptrValueType}, CallingConvention::intrinsic), {irBuilder.CreatePtrToInt(catchContext.exceptionPointer, moduleContext.iptrType)}); } } llvm::BasicBlock* EmitContext::getInnermostUnwindToBlock() { if(tryStack.size()) { return tryStack.back().unwindToBlock; } else { return nullptr; } } void EmitFunctionContext::try_(ControlStructureImm imm) { auto originalInsertBlock = irBuilder.GetInsertBlock(); if(moduleContext.useWindowsSEH) { // Insert an alloca for the exception pointer at the beginning of the function. irBuilder.SetInsertPoint(&function->getEntryBlock(), function->getEntryBlock().getFirstInsertionPt()); llvm::Value* exceptionPointerAlloca = irBuilder.CreateAlloca(llvmContext.ptrType, nullptr, "exceptionPointer"); // Create a BasicBlock with a CatchSwitch instruction to use as the unwind target. auto catchSwitchBlock = llvm::BasicBlock::Create(llvmContext, "catchSwitch", function); irBuilder.SetInsertPoint(catchSwitchBlock); auto catchSwitchInst = irBuilder.CreateCatchSwitch(llvm::ConstantTokenNone::get(llvmContext), nullptr, 1); // Create a block+catchpad that the catchswitch will transfer control if the exception type // info matches a WAVM runtime exception. auto catchPadBlock = llvm::BasicBlock::Create(llvmContext, "catchPad", function); catchSwitchInst->addHandler(catchPadBlock); irBuilder.SetInsertPoint(catchPadBlock); auto catchPadInst = irBuilder.CreateCatchPad(catchSwitchInst, {moduleContext.runtimeExceptionTypeInfo, emitLiteral(llvmContext, I32(0)), exceptionPointerAlloca}); // Create a catchret that immediately returns from the catch "funclet" to a new non-funclet // basic block. auto catchBlock = llvm::BasicBlock::Create(llvmContext, "catch", function); irBuilder.CreateCatchRet(catchPadInst, catchBlock); irBuilder.SetInsertPoint(catchBlock); // Load the exception pointer from the alloca that the catchpad wrote it to. auto exceptionPointer = loadFromUntypedPointer(exceptionPointerAlloca, llvmContext.ptrType); // Load the exception type ID. auto exceptionTypeId = loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, exceptionPointer, {emitLiteralIptr(offsetof(Exception, typeId), moduleContext.iptrType)}), moduleContext.iptrType); tryStack.push_back(TryContext{catchSwitchBlock}); catchStack.push_back( CatchContext{catchSwitchInst, nullptr, exceptionPointer, catchBlock, exceptionTypeId}); } else { // Create a BasicBlock with a LandingPad instruction to use as the unwind target. auto landingPadBlock = llvm::BasicBlock::Create(llvmContext, "landingPad", function); irBuilder.SetInsertPoint(landingPadBlock); auto landingPadInst = irBuilder.CreateLandingPad( llvm::StructType::get(llvmContext, {llvmContext.ptrType, llvmContext.i32Type}), 1); landingPadInst->addClause(moduleContext.runtimeExceptionTypeInfo); // Call __cxa_begin_catch to get the exception pointer. auto exceptionPointer = irBuilder.CreateCall(getCXABeginCatchFunction(moduleContext), {irBuilder.CreateExtractValue(landingPadInst, {0})}); // Call __cxa_end_catch immediately to free memory used to throw the exception. irBuilder.CreateCall(getCXAEndCatchFunction(moduleContext)); // Load the exception type ID. auto exceptionTypeId = loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, exceptionPointer, {emitLiteralIptr(offsetof(Exception, typeId), moduleContext.iptrType)}), moduleContext.iptrType); tryStack.push_back(TryContext{landingPadBlock}); catchStack.push_back(CatchContext{ nullptr, landingPadInst, exceptionPointer, landingPadBlock, exceptionTypeId}); } irBuilder.SetInsertPoint(originalInsertBlock); // Create an end try+phi for the try result. FunctionType blockType = resolveBlockType(irModule, imm.type); auto endBlock = llvm::BasicBlock::Create(llvmContext, "tryEnd", function); auto endPHIs = createPHIs(endBlock, blockType.results()); // Pop the try arguments. llvm::Value** tryArgs = (llvm::Value**)alloca(sizeof(llvm::Value*) * blockType.params().size()); popMultiple(tryArgs, blockType.params().size()); // Push a control context that ends at the end block/phi. pushControlStack(ControlContext::Type::try_, blockType.results(), endBlock, endPHIs); // Push a branch target for the end block/phi. pushBranchTarget(blockType.results(), endBlock, endPHIs); // Repush the try arguments. pushMultiple(tryArgs, blockType.params().size()); } void EmitFunctionContext::catch_(ExceptionTypeImm imm) { WAVM_ASSERT(controlStack.size()); WAVM_ASSERT(catchStack.size()); ControlContext& controlContext = controlStack.back(); CatchContext& catchContext = catchStack.back(); WAVM_ASSERT(controlContext.type == ControlContext::Type::try_ || controlContext.type == ControlContext::Type::catch_); if(controlContext.type == ControlContext::Type::try_) { WAVM_ASSERT(tryStack.size()); tryStack.pop_back(); } else { exitCatch(); } branchToEndOfControlContext(); // Look up the exception type instance to be caught WAVM_ASSERT(imm.exceptionTypeIndex < moduleContext.exceptionTypeIds.size()); const IR::ExceptionType catchType = irModule.exceptionTypes.getType(imm.exceptionTypeIndex); llvm::Constant* catchTypeId = moduleContext.exceptionTypeIds[imm.exceptionTypeIndex]; irBuilder.SetInsertPoint(catchContext.nextHandlerBlock); auto isExceptionType = irBuilder.CreateICmpEQ(catchContext.exceptionTypeId, catchTypeId); auto catchBlock = llvm::BasicBlock::Create(llvmContext, "catch", function); auto unhandledBlock = llvm::BasicBlock::Create(llvmContext, "unhandled", function); irBuilder.CreateCondBr(isExceptionType, catchBlock, unhandledBlock); catchContext.nextHandlerBlock = unhandledBlock; irBuilder.SetInsertPoint(catchBlock); // Push the exception arguments on the stack. for(Uptr argumentIndex = 0; argumentIndex < catchType.params.size(); ++argumentIndex) { const ValueType parameters = catchType.params[argumentIndex]; const Uptr argOffset = offsetof(Exception, arguments) + (catchType.params.size() - argumentIndex - 1) * sizeof(Exception::arguments[0]); auto argument = loadFromUntypedPointer( irBuilder.CreateInBoundsGEP(llvmContext.i8Type, catchContext.exceptionPointer, {emitLiteral(llvmContext, argOffset)}), asLLVMType(llvmContext, parameters), sizeof(Exception::arguments[0])); push(argument); } // Change the top of the control stack to a catch clause. controlContext.type = ControlContext::Type::catch_; controlContext.isReachable = true; } void EmitFunctionContext::catch_all(NoImm) { WAVM_ASSERT(controlStack.size()); WAVM_ASSERT(catchStack.size()); ControlContext& controlContext = controlStack.back(); CatchContext& catchContext = catchStack.back(); WAVM_ASSERT(controlContext.type == ControlContext::Type::try_ || controlContext.type == ControlContext::Type::catch_); if(controlContext.type == ControlContext::Type::try_) { WAVM_ASSERT(tryStack.size()); tryStack.pop_back(); } else { exitCatch(); } branchToEndOfControlContext(); irBuilder.SetInsertPoint(catchContext.nextHandlerBlock); auto isUserExceptionType = irBuilder.CreateICmpNE( loadFromUntypedPointer( irBuilder.CreateInBoundsGEP( llvmContext.i8Type, catchContext.exceptionPointer, {emitLiteralIptr(offsetof(Exception, isUserException), moduleContext.iptrType)}), llvmContext.i8Type), llvm::ConstantInt::get(llvmContext.i8Type, llvm::APInt(8, 0, false))); auto catchBlock = llvm::BasicBlock::Create(llvmContext, "catch", function); auto unhandledBlock = llvm::BasicBlock::Create(llvmContext, "unhandled", function); irBuilder.CreateCondBr(isUserExceptionType, catchBlock, unhandledBlock); catchContext.nextHandlerBlock = unhandledBlock; irBuilder.SetInsertPoint(catchBlock); // Change the top of the control stack to a catch clause. controlContext.type = ControlContext::Type::catch_; controlContext.isReachable = true; } void EmitFunctionContext::throw_(ExceptionTypeImm imm) { const IR::ExceptionType& exceptionType = irModule.exceptionTypes.getType(imm.exceptionTypeIndex); const Uptr numArgs = exceptionType.params.size(); const Uptr numArgBytes = numArgs * sizeof(UntaggedValue); auto argBaseAddress = irBuilder.CreateAlloca(llvmContext.i8Type, emitLiteral(llvmContext, numArgBytes)); argBaseAddress->setAlignment(LLVM_ALIGNMENT(sizeof(UntaggedValue))); for(Uptr argIndex = 0; argIndex < exceptionType.params.size(); ++argIndex) { auto elementValue = pop(); storeToUntypedPointer( elementValue, irBuilder.CreateInBoundsGEP( llvmContext.i8Type, argBaseAddress, {emitLiteral(llvmContext, (numArgs - argIndex - 1) * sizeof(UntaggedValue))}), sizeof(UntaggedValue)); } llvm::Value* exceptionTypeId = moduleContext.exceptionTypeIds[imm.exceptionTypeIndex]; llvm::Value* argsPointerAsInt = irBuilder.CreatePtrToInt(argBaseAddress, moduleContext.iptrType); llvm::Value* exceptionPointer = emitRuntimeIntrinsic( "createException", FunctionType( TypeTuple{moduleContext.iptrValueType}, TypeTuple{moduleContext.iptrValueType, moduleContext.iptrValueType, ValueType::i32}, IR::CallingConvention::intrinsic), {exceptionTypeId, argsPointerAsInt, emitLiteral(llvmContext, I32(1))})[0]; emitRuntimeIntrinsic( "throwException", FunctionType( TypeTuple{}, TypeTuple{moduleContext.iptrValueType}, IR::CallingConvention::intrinsic), {irBuilder.CreatePtrToInt(exceptionPointer, moduleContext.iptrType)}); irBuilder.CreateUnreachable(); enterUnreachable(); } void EmitFunctionContext::rethrow(RethrowImm imm) { WAVM_ASSERT(imm.catchDepth < catchStack.size()); CatchContext& catchContext = catchStack[catchStack.size() - imm.catchDepth - 1]; emitRuntimeIntrinsic( "throwException", FunctionType( TypeTuple{}, TypeTuple{moduleContext.iptrValueType}, IR::CallingConvention::intrinsic), {irBuilder.CreatePtrToInt(catchContext.exceptionPointer, moduleContext.iptrType)}); irBuilder.CreateUnreachable(); enterUnreachable(); } ================================================ FILE: Lib/LLVMJIT/EmitFunction.cpp ================================================ #include #include #include #include #include #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/OperatorPrinter.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Logging/Logging.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace llvm { class Metadata; } #define EMIT_ENTER_EXIT_HOOKS 0 using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; using namespace WAVM::Runtime; // Creates a PHI node for the argument of branches to a basic block. PHIVector EmitFunctionContext::createPHIs(llvm::BasicBlock* basicBlock, IR::TypeTuple type) { auto originalBlock = irBuilder.GetInsertBlock(); irBuilder.SetInsertPoint(basicBlock); PHIVector result; for(Uptr elementIndex = 0; elementIndex < type.size(); ++elementIndex) { result.push_back(irBuilder.CreatePHI(asLLVMType(llvmContext, type[elementIndex]), 2)); } if(originalBlock) { irBuilder.SetInsertPoint(originalBlock); } return result; } // Bitcasts a LLVM value to a canonical type for the corresponding WebAssembly type. This is // currently just used to map all the various vector types to a canonical type for the vector width. llvm::Value* EmitFunctionContext::coerceToCanonicalType(llvm::Value* value) { if(value->getType()->isVectorTy()) { switch(value->getType()->getScalarSizeInBits() * static_cast(value->getType())->getNumElements()) { case 128: return irBuilder.CreateBitCast(value, llvmContext.i64x2Type); default: WAVM_UNREACHABLE(); }; } else { return value; } } // Debug logging. void EmitFunctionContext::traceOperator(const std::string& operatorDescription) { std::string controlStackString; for(Uptr stackIndex = 0; stackIndex < controlStack.size(); ++stackIndex) { if(!controlStack[stackIndex].isReachable) { controlStackString += "("; } switch(controlStack[stackIndex].type) { case ControlContext::Type::function: controlStackString += "F"; break; case ControlContext::Type::block: controlStackString += "B"; break; case ControlContext::Type::ifThen: controlStackString += "I"; break; case ControlContext::Type::ifElse: controlStackString += "E"; break; case ControlContext::Type::loop: controlStackString += "L"; break; case ControlContext::Type::try_: controlStackString += "T"; break; case ControlContext::Type::catch_: controlStackString += "C"; break; default: WAVM_UNREACHABLE(); }; if(!controlStack[stackIndex].isReachable) { controlStackString += ")"; } } std::string stackString; const Uptr stackBase = controlStack.size() == 0 ? 0 : controlStack.back().outerStackSize; for(Uptr stackIndex = 0; stackIndex < stack.size(); ++stackIndex) { if(stackIndex == stackBase) { stackString += "| "; } { llvm::raw_string_ostream stackTypeStream(stackString); stack[stackIndex]->getType()->print(stackTypeStream, true); } stackString += " "; } if(stack.size() == stackBase) { stackString += "|"; } Log::printf(Log::traceCompilation, "%-50s %-50s %-50s\n", controlStackString.c_str(), operatorDescription.c_str(), stackString.c_str()); } // Traps a divide-by-zero void EmitFunctionContext::trapDivideByZero(llvm::Value* divisor) { emitConditionalTrapIntrinsic( irBuilder.CreateICmpEQ(divisor, llvm::Constant::getNullValue(divisor->getType())), "divideByZeroOrIntegerOverflowTrap", FunctionType({}, {}, IR::CallingConvention::intrinsic), {}); } // Traps on (x / 0) or (INT_MIN / -1). void EmitFunctionContext::trapDivideByZeroOrIntegerOverflow(ValueType type, llvm::Value* left, llvm::Value* right) { emitConditionalTrapIntrinsic( irBuilder.CreateOr( irBuilder.CreateAnd( irBuilder.CreateICmpEQ(left, type == ValueType::i32 ? emitLiteral(llvmContext, (I32)INT32_MIN) : emitLiteral(llvmContext, (I64)INT64_MIN)), irBuilder.CreateICmpEQ(right, type == ValueType::i32 ? emitLiteral(llvmContext, (I32)-1) : emitLiteral(llvmContext, (I64)-1))), irBuilder.CreateICmpEQ(right, llvmContext.typedZeroConstants[(Uptr)type])), "divideByZeroOrIntegerOverflowTrap", FunctionType({}, {}, IR::CallingConvention::intrinsic), {}); } // A helper function to emit a conditional call to a non-returning intrinsic function. void EmitFunctionContext::emitConditionalTrapIntrinsic( llvm::Value* booleanCondition, const char* intrinsicName, FunctionType intrinsicType, const std::initializer_list& args) { auto trueBlock = llvm::BasicBlock::Create(llvmContext, llvm::Twine(intrinsicName) + "Trap", function); auto endBlock = llvm::BasicBlock::Create(llvmContext, llvm::Twine(intrinsicName) + "Skip", function); irBuilder.CreateCondBr( booleanCondition, trueBlock, endBlock, moduleContext.likelyFalseBranchWeights); irBuilder.SetInsertPoint(trueBlock); emitRuntimeIntrinsic(intrinsicName, intrinsicType, args); irBuilder.CreateUnreachable(); irBuilder.SetInsertPoint(endBlock); } // // Control structure operators // void EmitFunctionContext::pushControlStack(ControlContext::Type type, TypeTuple resultTypes, llvm::BasicBlock* endBlock, const PHIVector& endPHIs, llvm::BasicBlock* elseBlock, const ValueVector& elseArgs) { // The unreachable operator filtering should filter out any opcodes that call pushControlStack. if(controlStack.size()) { WAVM_ERROR_UNLESS(controlStack.back().isReachable); } controlStack.push_back({type, endBlock, endPHIs, elseBlock, elseArgs, resultTypes, stack.size(), branchTargetStack.size(), true}); } void EmitFunctionContext::pushBranchTarget(TypeTuple branchArgumentType, llvm::BasicBlock* branchTargetBlock, const PHIVector& branchTargetPHIs) { branchTargetStack.push_back({branchArgumentType, branchTargetBlock, branchTargetPHIs}); } void EmitFunctionContext::branchToEndOfControlContext() { ControlContext& currentContext = controlStack.back(); if(currentContext.isReachable) { // If the control context expects a result, take it from the operand stack and add it to the // control context's end PHI. for(Iptr resultIndex = Iptr(currentContext.resultTypes.size()) - 1; resultIndex >= 0; --resultIndex) { llvm::Value* result = pop(); currentContext.endPHIs[resultIndex]->addIncoming(coerceToCanonicalType(result), irBuilder.GetInsertBlock()); } // Branch to the control context's end. irBuilder.CreateBr(currentContext.endBlock); } WAVM_ASSERT(stack.size() == currentContext.outerStackSize); } void EmitFunctionContext::enterUnreachable() { // Unwind the operand stack to the outer control context. WAVM_ASSERT(controlStack.back().outerStackSize <= stack.size()); stack.resize(controlStack.back().outerStackSize); // Mark the current control context as unreachable: this will cause the outer loop to stop // dispatching operators to us until an else/end for the current control context is reached. controlStack.back().isReachable = false; } // A do-nothing visitor used to decode past unreachable operators (but supporting logging, and // passing the end operator through). struct UnreachableOpVisitor { typedef void Result; UnreachableOpVisitor(EmitFunctionContext& inContext) : context(inContext), unreachableControlDepth(0) { } #define VISIT_OP(opcode, name, nameString, Imm, ...) \ void name(Imm imm) {} WAVM_ENUM_NONCONTROL_OPERATORS(VISIT_OP) VISIT_OP(_, unknown, "unknown", Opcode) #undef VISIT_OP // Keep track of control structure nesting level in unreachable code, so we know when we reach // the end of the unreachable code. void block(ControlStructureImm) { ++unreachableControlDepth; } void loop(ControlStructureImm) { ++unreachableControlDepth; } void if_(ControlStructureImm) { ++unreachableControlDepth; } // If an else or end opcode would signal an end to the unreachable code, then pass it through to // the IR emitter. void else_(NoImm imm) { if(!unreachableControlDepth) { context.else_(imm); } } void end(NoImm imm) { if(!unreachableControlDepth) { context.end(imm); } else { --unreachableControlDepth; } } void try_(ControlStructureImm imm) { ++unreachableControlDepth; } void catch_(ExceptionTypeImm imm) { if(!unreachableControlDepth) { context.catch_(imm); } } void catch_all(NoImm imm) { if(!unreachableControlDepth) { context.catch_all(imm); } } private: EmitFunctionContext& context; Uptr unreachableControlDepth; }; void EmitFunctionContext::emit() { WAVM_ASSERT(functionType.callingConvention() == CallingConvention::wasm); // Create debug info for the function. llvm::SmallVector diFunctionParameterTypes; for(auto parameterType : functionType.params()) { diFunctionParameterTypes.push_back(moduleContext.diValueTypes[(Uptr)parameterType]); } auto diParamArray = moduleContext.diBuilder.getOrCreateTypeArray(diFunctionParameterTypes); auto diFunctionType = moduleContext.diBuilder.createSubroutineType(diParamArray); diFunction = moduleContext.diBuilder.createFunction( moduleContext.diModuleScope, function->getName(), function->getName(), moduleContext.diModuleScope, 0, diFunctionType, 0, llvm::DINode::FlagZero, llvm::DISubprogram::SPFlagDefinition | llvm::DISubprogram::SPFlagOptimized); function->setSubprogram(diFunction); // Create an initial basic block for the function. auto entryBasicBlock = llvm::BasicBlock::Create(llvmContext, "entry", function); // Create the return basic block, and push the root control context for the function. auto returnBlock = llvm::BasicBlock::Create(llvmContext, "return", function); auto returnPHIs = createPHIs(returnBlock, functionType.results()); irBuilder.SetInsertPoint(entryBasicBlock); pushControlStack( ControlContext::Type::function, functionType.results(), returnBlock, returnPHIs); pushBranchTarget(functionType.results(), returnBlock, returnPHIs); // Create and initialize allocas for the memory and table base parameters. auto llvmArgIt = function->arg_begin(); initContextVariables(&*llvmArgIt++, moduleContext.iptrType); // Create and initialize allocas for all the locals and parameters. for(Uptr localIndex = 0; localIndex < functionType.params().size() + functionDef.nonParameterLocalTypes.size(); ++localIndex) { ValueType localType = localIndex < functionType.params().size() ? functionType.params()[localIndex] : functionDef.nonParameterLocalTypes[localIndex - functionType.params().size()]; llvm::Type* llvmLocalType = asLLVMType(llvmContext, localType); llvm::Value* localPointer = irBuilder.CreateAlloca(llvmLocalType, nullptr, ""); locals.push_back(Local{llvmLocalType, localPointer}); if(localIndex < functionType.params().size()) { // Copy the parameter value into the local that stores it. irBuilder.CreateStore(&*llvmArgIt, localPointer); ++llvmArgIt; } else { // Initialize non-parameter locals to zero. irBuilder.CreateStore(llvmContext.typedZeroConstants[(Uptr)localType], localPointer); } } if(EMIT_ENTER_EXIT_HOOKS) { emitRuntimeIntrinsic( "debugEnterFunction", FunctionType({}, {ValueType::funcref}, IR::CallingConvention::intrinsic), {llvm::ConstantExpr::getSub( llvm::ConstantExpr::getPtrToInt(function, moduleContext.iptrType), emitLiteralIptr(offsetof(Runtime::Function, code), moduleContext.iptrType))}); } // Decode the WebAssembly opcodes and emit LLVM IR for them. OperatorDecoderStream decoder(functionDef.code); UnreachableOpVisitor unreachableOpVisitor(*this); OperatorPrinter operatorPrinter(irModule, functionDef); Uptr opIndex = 0; const bool enableTracing = Log::isCategoryEnabled(Log::traceCompilation); while(decoder && controlStack.size()) { if(enableTracing) { traceOperator(decoder.decodeOpWithoutConsume(operatorPrinter)); } irBuilder.SetCurrentDebugLocation( llvm::DILocation::get(llvmContext, (unsigned int)opIndex++, 0, diFunction)); if(controlStack.back().isReachable) { decoder.decodeOp(*this); } else { decoder.decodeOp(unreachableOpVisitor); } }; WAVM_ASSERT(irBuilder.GetInsertBlock() == returnBlock); if(EMIT_ENTER_EXIT_HOOKS) { emitRuntimeIntrinsic( "debugExitFunction", FunctionType({}, {ValueType::funcref}, IR::CallingConvention::intrinsic), {llvm::ConstantExpr::getSub( llvm::ConstantExpr::getPtrToInt(function, moduleContext.iptrType), emitLiteralIptr(offsetof(Runtime::Function, code), moduleContext.iptrType))}); } // Emit the function return. emitReturn(functionType.results(), stack); } ================================================ FILE: Lib/LLVMJIT/EmitFunctionContext.h ================================================ #pragma once #include #include #include #include #include "EmitContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace WAVM { namespace LLVMJIT { struct EmitFunctionContext : EmitContext { typedef void Result; struct EmitModuleContext& moduleContext; const IR::Module& irModule; const IR::FunctionDef& functionDef; IR::FunctionType functionType; llvm::Function* function; struct Local { llvm::Type* type; llvm::Value* pointer; }; std::vector locals; llvm::DISubprogram* diFunction; // Information about an in-scope control structure. struct ControlContext { enum class Type : U8 { function, block, ifThen, ifElse, loop, try_, catch_ }; Type type; llvm::BasicBlock* endBlock; PHIVector endPHIs; llvm::BasicBlock* elseBlock; ValueVector elseArgs; IR::TypeTuple resultTypes; Uptr outerStackSize; Uptr outerBranchTargetStackSize; bool isReachable; }; struct BranchTarget { IR::TypeTuple params; llvm::BasicBlock* block; PHIVector phis; }; std::vector controlStack; std::vector branchTargetStack; std::vector stack; EmitFunctionContext(LLVMContext& inLLVMContext, EmitModuleContext& inModuleContext, const IR::Module& inIRModule, const IR::FunctionDef& inFunctionDef, llvm::Function* inLLVMFunction) : EmitContext(inLLVMContext, inModuleContext.memoryOffsets) , moduleContext(inModuleContext) , irModule(inIRModule) , functionDef(inFunctionDef) , functionType(inIRModule.types[inFunctionDef.type.index]) , function(inLLVMFunction) { } void emit(); // Operand stack manipulation llvm::Value* pop() { WAVM_ASSERT( stack.size() - (controlStack.size() ? controlStack.back().outerStackSize : 0) >= 1); llvm::Value* result = stack.back(); stack.pop_back(); return result; } void popMultiple(llvm::Value** outValues, Uptr num) { WAVM_ASSERT(stack.size() - (controlStack.size() ? controlStack.back().outerStackSize : 0) >= num); std::copy(stack.end() - num, stack.end(), outValues); stack.resize(stack.size() - num); } llvm::Value* getValueFromTop(Uptr offset = 0) const { return stack[stack.size() - offset - 1]; } void push(llvm::Value* value) { stack.push_back(value); } void pushMultiple(llvm::Value** values, Uptr numValues) { for(Uptr valueIndex = 0; valueIndex < numValues; ++valueIndex) { push(values[valueIndex]); } } // Creates a PHI node for the argument of branches to a basic block. PHIVector createPHIs(llvm::BasicBlock* basicBlock, IR::TypeTuple type); // Bitcasts a LLVM value to a canonical type for the corresponding WebAssembly type. // This is currently just used to map all the various vector types to a canonical type for // the vector width. llvm::Value* coerceToCanonicalType(llvm::Value* value); // Debug logging. void traceOperator(const std::string& operatorDescription); // Coerces an I32 value to an I1, and vice-versa. llvm::Value* coerceI32ToBool(llvm::Value* i32Value) { return irBuilder.CreateICmpNE(i32Value, llvmContext.typedZeroConstants[(Uptr)IR::ValueType::i32]); } llvm::Value* coerceBoolToI32(llvm::Value* boolValue) { return zext(boolValue, llvmContext.i32Type); } // Converts a bounded memory address to a LLVM pointer. llvm::Value* coerceAddressToPointer(llvm::Value* boundedAddress, Uptr memoryIndex); // Traps a divide-by-zero void trapDivideByZero(llvm::Value* divisor); // Traps on (x / 0) or (INT_MIN / -1). void trapDivideByZeroOrIntegerOverflow(IR::ValueType type, llvm::Value* left, llvm::Value* right); llvm::Value* callLLVMIntrinsic(const std::initializer_list& typeArguments, llvm::Intrinsic::ID id, llvm::ArrayRef arguments) { return irBuilder.CreateCall(moduleContext.getLLVMIntrinsic(typeArguments, id), arguments); } // A helper function to emit a conditional call to a non-returning intrinsic function. void emitConditionalTrapIntrinsic(llvm::Value* booleanCondition, const char* intrinsicName, IR::FunctionType intrinsicType, const std::initializer_list& args); void pushControlStack(ControlContext::Type type, IR::TypeTuple resultTypes, llvm::BasicBlock* endBlock, const PHIVector& endPHIs, llvm::BasicBlock* elseBlock = nullptr, const ValueVector& elseArgs = {}); void pushBranchTarget(IR::TypeTuple branchArgumentType, llvm::BasicBlock* branchTargetBlock, const PHIVector& branchTargetPHIs); void branchToEndOfControlContext(); BranchTarget& getBranchTargetByDepth(Uptr depth) { WAVM_ASSERT(depth < branchTargetStack.size()); return branchTargetStack[branchTargetStack.size() - depth - 1]; } // This is called after unconditional control flow to indicate that operators following it // are unreachable until the control stack is popped. void enterUnreachable(); llvm::Value* identity(llvm::Value* value, llvm::Type* type) { return value; } llvm::Value* sext(llvm::Value* value, llvm::Type* type) { return irBuilder.CreateSExt(value, type); } llvm::Value* zext(llvm::Value* value, llvm::Type* type) { return irBuilder.CreateZExt(value, type); } llvm::Value* trunc(llvm::Value* value, llvm::Type* type) { return irBuilder.CreateTrunc(value, type); } llvm::Value* coerceIptrToIndex(IR::IndexType indexType, llvm::Value* iptrValue) { switch(indexType) { case IR::IndexType::i32: return irBuilder.CreateTrunc(iptrValue, llvmContext.i32Type); case IR::IndexType::i64: return zext(iptrValue, moduleContext.iptrType); default: WAVM_UNREACHABLE(); }; } template llvm::Value* splat(llvm::Value* scalar, llvm::Type*) { return irBuilder.CreateVectorSplat(numElements, scalar); } template llvm::Value* insertInZeroedVector(llvm::Value* scalar, llvm::VectorType* destType) { llvm::Constant* zeroVector = llvm::Constant::getNullValue(destType); return irBuilder.CreateInsertElement(zeroVector, scalar, U64(0)); } llvm::Value* extendHalfOfIntVector( llvm::Value* vector, Uptr baseSourceElementIndex, llvm::Value* (EmitFunctionContext::*extend)(llvm::Value*, llvm::Type*)); llvm::Value* insertIntoHalfZeroVector(llvm::Value* halfVector); llvm::Value* emitSRem(IR::ValueType type, llvm::Value* left, llvm::Value* right); llvm::Value* emitF64Promote(llvm::Value* operand, llvm::Type* destType); template llvm::Value* emitTruncFloatToInt(IR::ValueType destType, bool isSigned, Float minBounds, Float maxBounds, llvm::Value* operand); template llvm::Value* emitTruncFloatToIntSat(llvm::Type* destType, bool isSigned, Float minFloatBounds, Float maxFloatBounds, Int minIntBounds, Int maxIntBounds, llvm::Value* operand); template llvm::Value* emitTruncVectorFloatToIntSat(llvm::Type* destType, bool isSigned, Float minFloatBounds, Float maxFloatBounds, Int minIntBounds, Int maxIntBounds, Int nanResult, llvm::Value* operand); llvm::Value* emitBitSelect(llvm::Value* mask, llvm::Value* trueValue, llvm::Value* falseValue); llvm::Value* emitVectorSelect(llvm::Value* condition, llvm::Value* trueValue, llvm::Value* falseValue); void trapIfMisalignedAtomic(llvm::Value* address, U32 naturalAlignmentLog2); struct CatchContext { // Only used for Windows SEH. llvm::CatchSwitchInst* catchSwitchInst; // Only used for non-Windows exceptions. llvm::LandingPadInst* landingPadInst; // Used for all platforms. llvm::Value* exceptionPointer; llvm::BasicBlock* nextHandlerBlock; llvm::Value* exceptionTypeId; }; std::vector catchStack; void endTryWithoutCatch(); void endTryCatch(); void exitCatch(); #define VISIT_OPCODE(encoding, name, nameString, Imm, ...) void name(IR::Imm imm); WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE }; }} ================================================ FILE: Lib/LLVMJIT/EmitMem.cpp ================================================ #include #include "EmitContext.h" #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/IR.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/RuntimeABI/RuntimeABI.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include // IWYU pragma: keep #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; enum class BoundsCheckOp { clampToGuardRegion, trapOnOutOfBounds }; static llvm::Value* getMemoryNumPages(EmitFunctionContext& functionContext, Uptr memoryIndex) { llvm::Constant* memoryOffset = functionContext.moduleContext.memoryOffsets[memoryIndex]; // Load the number of memory pages from the compartment runtime data. llvm::LoadInst* memoryNumPagesLoad = functionContext.loadFromUntypedPointer( functionContext.irBuilder.CreateInBoundsGEP( functionContext.llvmContext.i8Type, functionContext.getCompartmentAddress(), {llvm::ConstantExpr::getAdd( memoryOffset, emitLiteralIptr(offsetof(Runtime::MemoryRuntimeData, numPages), functionContext.moduleContext.iptrType))}), functionContext.moduleContext.iptrType, functionContext.moduleContext.iptrAlignment); memoryNumPagesLoad->setAtomic(llvm::AtomicOrdering::Acquire); return memoryNumPagesLoad; } static llvm::Value* getMemoryNumBytes(EmitFunctionContext& functionContext, Uptr memoryIndex) { return functionContext.irBuilder.CreateMul( getMemoryNumPages(functionContext, memoryIndex), emitLiteralIptr(IR::numBytesPerPage, functionContext.moduleContext.iptrType)); } // Bounds checks a sandboxed memory address + offset, and returns an offset relative to the memory // base address that is guaranteed to be within the virtual address space allocated for the linear // memory object. static llvm::Value* getOffsetAndBoundedAddress(EmitFunctionContext& functionContext, Uptr memoryIndex, llvm::Value* address, llvm::Value* numBytes, U64 offset, BoundsCheckOp boundsCheckOp) { const MemoryType& memoryType = functionContext.moduleContext.irModule.memories.getType(memoryIndex); const bool is32bitMemoryOn64bitHost = memoryType.indexType == IndexType::i32 && functionContext.moduleContext.iptrValueType == ValueType::i64; llvm::IRBuilder<>& irBuilder = functionContext.irBuilder; numBytes = irBuilder.CreateZExt(numBytes, address->getType()); WAVM_ASSERT(numBytes->getType() == address->getType()); if(memoryType.indexType == IndexType::i32) { // zext a 32-bit address and number of bytes to the target machine pointer width. // This is crucial for security, as LLVM will otherwise implicitly sign extend it to the // target machine pointer width in the GEP below, interpreting it as a signed offset and // allowing access to memory outside the sandboxed memory range. address = irBuilder.CreateZExt(address, functionContext.moduleContext.iptrType); numBytes = irBuilder.CreateZExt(numBytes, functionContext.moduleContext.iptrType); } // If the offset is greater than the size of the guard region, add it before bounds checking, // and check for overflow. if(offset && offset >= Runtime::memoryNumGuardBytes) { llvm::Constant* offsetConstant = emitLiteralIptr(offset, functionContext.moduleContext.iptrType); if(is32bitMemoryOn64bitHost) { // This is a 64-bit add of two numbers zero-extended from 32-bit, so it can't overflow. address = irBuilder.CreateAdd(address, offsetConstant); } else { llvm::Value* addressPlusOffsetAndOverflow = functionContext.callLLVMIntrinsic({functionContext.moduleContext.iptrType}, llvm::Intrinsic::uadd_with_overflow, {address, offsetConstant}); llvm::Value* addressPlusOffset = irBuilder.CreateExtractValue(addressPlusOffsetAndOverflow, {0}); llvm::Value* addressPlusOffsetOverflowed = irBuilder.CreateExtractValue(addressPlusOffsetAndOverflow, {1}); address = irBuilder.CreateOr(addressPlusOffset, irBuilder.CreateSExt(addressPlusOffsetOverflowed, functionContext.moduleContext.iptrType)); } } if(boundsCheckOp == BoundsCheckOp::trapOnOutOfBounds) { // If the caller requires a trap, test whether the addressed bytes are within the bounds of // the memory, and if not call a trap intrinsic. llvm::Value* memoryNumBytes = getMemoryNumBytes(functionContext, memoryIndex); llvm::Value* memoryNumBytesMinusNumBytes = irBuilder.CreateSub(memoryNumBytes, numBytes); llvm::Value* numBytesWasGreaterThanMemoryNumBytes = irBuilder.CreateICmpUGT(memoryNumBytesMinusNumBytes, memoryNumBytes); functionContext.emitConditionalTrapIntrinsic( irBuilder.CreateOr(numBytesWasGreaterThanMemoryNumBytes, irBuilder.CreateICmpUGT(address, memoryNumBytesMinusNumBytes)), "memoryOutOfBoundsTrap", FunctionType(TypeTuple{}, TypeTuple{functionContext.moduleContext.iptrValueType, functionContext.moduleContext.iptrValueType, functionContext.moduleContext.iptrValueType, functionContext.moduleContext.iptrValueType}, IR::CallingConvention::intrinsic), {address, numBytes, memoryNumBytes, emitLiteralIptr(memoryIndex, functionContext.moduleContext.iptrType)}); } else if(is32bitMemoryOn64bitHost) { // For 32-bit addresses on 64-bit targets, the runtime will reserve the full range of // addresses that can be generated by this function, so accessing those addresses has // well-defined behavior. } else { // For all other cases (e.g. 64-bit addresses on 64-bit targets), it's not possible for the // runtime to reserve the full range of addresses, so this function must clamp addresses to // the guard region. llvm::Value* endAddress = irBuilder.CreateLoad(functionContext.moduleContext.iptrType, functionContext.memoryInfos[memoryIndex].endAddressVariable); address = irBuilder.CreateSelect( irBuilder.CreateICmpULT(address, endAddress), address, endAddress); } // If the offset is less than the size of the guard region, then add it after bounds checking. // This avoids the need to check the addition for overflow, and allows it to be used as the // displacement in x86 addresses. Additionally, it allows the LLVM optimizer to reuse the bounds // checking code for consecutive loads/stores to the same address. if(offset && offset < Runtime::memoryNumGuardBytes) { llvm::Constant* offsetConstant = emitLiteralIptr(offset, functionContext.moduleContext.iptrType); address = irBuilder.CreateAdd(address, offsetConstant); } return address; } llvm::Value* EmitFunctionContext::coerceAddressToPointer(llvm::Value* boundedAddress, Uptr memoryIndex) { llvm::Value* memoryBasePointer = irBuilder.CreateLoad(llvmContext.ptrType, memoryInfos[memoryIndex].basePointerVariable); llvm::Value* bytePointer = irBuilder.CreateInBoundsGEP(llvmContext.i8Type, memoryBasePointer, boundedAddress); return bytePointer; } // // Memory size operators // These just call out to wavmIntrinsics.growMemory/currentMemory, passing a pointer to the default // memory for the module. // void EmitFunctionContext::memory_grow(MemoryImm imm) { llvm::Value* deltaNumPages = pop(); ValueVector resultTuple = emitRuntimeIntrinsic( "memory.grow", FunctionType(TypeTuple(moduleContext.iptrValueType), TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(deltaNumPages, moduleContext.iptrType), moduleContext.memoryIds[imm.memoryIndex]}); WAVM_ASSERT(resultTuple.size() == 1); const MemoryType& memoryType = moduleContext.irModule.memories.getType(imm.memoryIndex); push(coerceIptrToIndex(memoryType.indexType, resultTuple[0])); } void EmitFunctionContext::memory_size(MemoryImm imm) { const MemoryType& memoryType = moduleContext.irModule.memories.getType(imm.memoryIndex); push(coerceIptrToIndex(memoryType.indexType, getMemoryNumPages(*this, imm.memoryIndex))); } // // Memory bulk operators. // void EmitFunctionContext::memory_init(DataSegmentAndMemImm imm) { auto numBytes = pop(); auto sourceOffset = pop(); auto destAddress = pop(); emitRuntimeIntrinsic("memory.init", FunctionType({}, TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(destAddress, moduleContext.iptrType), zext(sourceOffset, moduleContext.iptrType), zext(numBytes, moduleContext.iptrType), moduleContext.instanceId, moduleContext.memoryIds[imm.memoryIndex], emitLiteral(llvmContext, imm.dataSegmentIndex)}); } void EmitFunctionContext::data_drop(DataSegmentImm imm) { emitRuntimeIntrinsic( "data.drop", FunctionType({}, TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {moduleContext.instanceId, emitLiteralIptr(imm.dataSegmentIndex, moduleContext.iptrType)}); } void EmitFunctionContext::memory_copy(MemoryCopyImm imm) { llvm::Value* numBytes = pop(); llvm::Value* sourceAddress = pop(); llvm::Value* destAddress = pop(); llvm::Value* sourceBoundedAddress = getOffsetAndBoundedAddress( *this, imm.sourceMemoryIndex, sourceAddress, numBytes, 0, BoundsCheckOp::trapOnOutOfBounds); llvm::Value* destBoundedAddress = getOffsetAndBoundedAddress( *this, imm.destMemoryIndex, destAddress, numBytes, 0, BoundsCheckOp::trapOnOutOfBounds); llvm::Value* sourcePointer = coerceAddressToPointer(sourceBoundedAddress, imm.sourceMemoryIndex); llvm::Value* destPointer = coerceAddressToPointer(destBoundedAddress, imm.destMemoryIndex); llvm::Value* numBytesUptr = irBuilder.CreateZExt(numBytes, moduleContext.iptrType); // Use the LLVM memmove instruction to do the copy. irBuilder.CreateMemMove( destPointer, LLVM_ALIGNMENT(1), sourcePointer, LLVM_ALIGNMENT(1), numBytesUptr, true); } void EmitFunctionContext::memory_fill(MemoryImm imm) { llvm::Value* numBytes = pop(); llvm::Value* value = pop(); llvm::Value* destAddress = pop(); llvm::Value* destBoundedAddress = getOffsetAndBoundedAddress( *this, imm.memoryIndex, destAddress, numBytes, 0, BoundsCheckOp::trapOnOutOfBounds); llvm::Value* destPointer = coerceAddressToPointer(destBoundedAddress, imm.memoryIndex); llvm::Value* numBytesUptr = irBuilder.CreateZExt(numBytes, moduleContext.iptrType); // Use the LLVM memset instruction to do the fill. irBuilder.CreateMemSet(destPointer, irBuilder.CreateTrunc(value, llvmContext.i8Type), numBytesUptr, LLVM_ALIGNMENT(1), true); } // // Load/store operators // #define EMIT_LOAD_OP(destType, name, llvmMemoryType, numBytesLog2, conversionOp) \ void EmitFunctionContext::name(LoadOrStoreImm imm) \ { \ auto address = pop(); \ auto boundedAddress = getOffsetAndBoundedAddress( \ *this, \ imm.memoryIndex, \ address, \ llvm::ConstantInt::get(address->getType(), U64(1 << numBytesLog2)), \ imm.offset, \ BoundsCheckOp::clampToGuardRegion); \ auto pointer = coerceAddressToPointer(boundedAddress, imm.memoryIndex); \ auto load = irBuilder.CreateLoad(llvmMemoryType, pointer); \ /* Don't trust the alignment hint provided by the WebAssembly code, since the load can't \ * trap if it's wrong. */ \ load->setAlignment(LLVM_ALIGNMENT(1)); \ load->setVolatile(true); \ push(conversionOp(load, destType)); \ } #define EMIT_STORE_OP(name, llvmMemoryType, numBytesLog2, conversionOp) \ void EmitFunctionContext::name(LoadOrStoreImm imm) \ { \ auto value = pop(); \ auto address = pop(); \ auto boundedAddress = getOffsetAndBoundedAddress( \ *this, \ imm.memoryIndex, \ address, \ llvm::ConstantInt::get(address->getType(), U64(1 << numBytesLog2)), \ imm.offset, \ BoundsCheckOp::clampToGuardRegion); \ auto pointer = coerceAddressToPointer(boundedAddress, imm.memoryIndex); \ auto memoryValue = conversionOp(value, llvmMemoryType); \ auto store = irBuilder.CreateStore(memoryValue, pointer); \ store->setVolatile(true); \ /* Don't trust the alignment hint provided by the WebAssembly code, since the store can't \ * trap if it's wrong. */ \ store->setAlignment(LLVM_ALIGNMENT(1)); \ } EMIT_LOAD_OP(llvmContext.i32Type, i32_load8_s, llvmContext.i8Type, 0, sext) EMIT_LOAD_OP(llvmContext.i32Type, i32_load8_u, llvmContext.i8Type, 0, zext) EMIT_LOAD_OP(llvmContext.i32Type, i32_load16_s, llvmContext.i16Type, 1, sext) EMIT_LOAD_OP(llvmContext.i32Type, i32_load16_u, llvmContext.i16Type, 1, zext) EMIT_LOAD_OP(llvmContext.i64Type, i64_load8_s, llvmContext.i8Type, 0, sext) EMIT_LOAD_OP(llvmContext.i64Type, i64_load8_u, llvmContext.i8Type, 0, zext) EMIT_LOAD_OP(llvmContext.i64Type, i64_load16_s, llvmContext.i16Type, 1, sext) EMIT_LOAD_OP(llvmContext.i64Type, i64_load16_u, llvmContext.i16Type, 1, zext) EMIT_LOAD_OP(llvmContext.i64Type, i64_load32_s, llvmContext.i32Type, 2, sext) EMIT_LOAD_OP(llvmContext.i64Type, i64_load32_u, llvmContext.i32Type, 2, zext) EMIT_LOAD_OP(llvmContext.i32Type, i32_load, llvmContext.i32Type, 2, identity) EMIT_LOAD_OP(llvmContext.i64Type, i64_load, llvmContext.i64Type, 3, identity) EMIT_LOAD_OP(llvmContext.f32Type, f32_load, llvmContext.f32Type, 2, identity) EMIT_LOAD_OP(llvmContext.f64Type, f64_load, llvmContext.f64Type, 3, identity) EMIT_STORE_OP(i32_store8, llvmContext.i8Type, 0, trunc) EMIT_STORE_OP(i64_store8, llvmContext.i8Type, 0, trunc) EMIT_STORE_OP(i32_store16, llvmContext.i16Type, 1, trunc) EMIT_STORE_OP(i64_store16, llvmContext.i16Type, 1, trunc) EMIT_STORE_OP(i32_store, llvmContext.i32Type, 2, trunc) EMIT_STORE_OP(i64_store32, llvmContext.i32Type, 2, trunc) EMIT_STORE_OP(i64_store, llvmContext.i64Type, 3, identity) EMIT_STORE_OP(f32_store, llvmContext.f32Type, 2, identity) EMIT_STORE_OP(f64_store, llvmContext.f64Type, 3, identity) EMIT_STORE_OP(v128_store, value->getType(), 4, identity) EMIT_LOAD_OP(llvmContext.i64x2Type, v128_load, llvmContext.i64x2Type, 4, identity) EMIT_LOAD_OP(llvmContext.i8x16Type, v128_load8_splat, llvmContext.i8Type, 0, splat<16>) EMIT_LOAD_OP(llvmContext.i16x8Type, v128_load16_splat, llvmContext.i16Type, 1, splat<8>) EMIT_LOAD_OP(llvmContext.i32x4Type, v128_load32_splat, llvmContext.i32Type, 2, splat<4>) EMIT_LOAD_OP(llvmContext.i64x2Type, v128_load64_splat, llvmContext.i64Type, 3, splat<2>) EMIT_LOAD_OP(llvmContext.i16x8Type, v128_load8x8_s, llvmContext.i8x8Type, 3, sext) EMIT_LOAD_OP(llvmContext.i16x8Type, v128_load8x8_u, llvmContext.i8x8Type, 3, zext) EMIT_LOAD_OP(llvmContext.i32x4Type, v128_load16x4_s, llvmContext.i16x4Type, 3, sext) EMIT_LOAD_OP(llvmContext.i32x4Type, v128_load16x4_u, llvmContext.i16x4Type, 3, zext) EMIT_LOAD_OP(llvmContext.i64x2Type, v128_load32x2_s, llvmContext.i32x2Type, 3, sext) EMIT_LOAD_OP(llvmContext.i64x2Type, v128_load32x2_u, llvmContext.i32x2Type, 3, zext) EMIT_LOAD_OP(llvmContext.i32x4Type, v128_load32_zero, llvmContext.i32Type, 2, insertInZeroedVector<4>) EMIT_LOAD_OP(llvmContext.i64x2Type, v128_load64_zero, llvmContext.i64Type, 3, insertInZeroedVector<2>) static void emitLoadLane(EmitFunctionContext& functionContext, llvm::Type* llvmVectorType, const BaseLoadOrStoreImm& loadOrStoreImm, Uptr laneIndex, Uptr numBytesLog2) { llvm::Value* vector = functionContext.pop(); vector = functionContext.irBuilder.CreateBitCast(vector, llvmVectorType); llvm::Value* address = functionContext.pop(); llvm::Value* boundedAddress = getOffsetAndBoundedAddress( functionContext, loadOrStoreImm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), U64(1) << numBytesLog2), loadOrStoreImm.offset, BoundsCheckOp::clampToGuardRegion); llvm::Type* llvmScalarType = llvmVectorType->getScalarType(); llvm::Value* pointer = functionContext.coerceAddressToPointer(boundedAddress, loadOrStoreImm.memoryIndex); llvm::LoadInst* load = functionContext.irBuilder.CreateLoad(llvmScalarType, pointer); // Don't trust the alignment hint provided by the WebAssembly code, since the load can't trap if // it's wrong. load->setAlignment(LLVM_ALIGNMENT(1)); load->setVolatile(true); vector = functionContext.irBuilder.CreateInsertElement(vector, load, laneIndex); functionContext.push(vector); } static void emitStoreLane(EmitFunctionContext& functionContext, llvm::Type* llvmVectorType, const BaseLoadOrStoreImm& loadOrStoreImm, Uptr laneIndex, Uptr numBytesLog2) { llvm::Value* vector = functionContext.pop(); vector = functionContext.irBuilder.CreateBitCast(vector, llvmVectorType); auto lane = functionContext.irBuilder.CreateExtractElement(vector, laneIndex); llvm::Value* address = functionContext.pop(); llvm::Value* boundedAddress = getOffsetAndBoundedAddress( functionContext, loadOrStoreImm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), U64(1) << numBytesLog2), loadOrStoreImm.offset, BoundsCheckOp::clampToGuardRegion); llvm::Value* pointer = functionContext.coerceAddressToPointer(boundedAddress, loadOrStoreImm.memoryIndex); llvm::StoreInst* store = functionContext.irBuilder.CreateStore(lane, pointer); // Don't trust the alignment hint provided by the WebAssembly code, since the load can't trap if // it's wrong. store->setAlignment(LLVM_ALIGNMENT(1)); store->setVolatile(true); } #define EMIT_LOAD_LANE_OP(name, llvmVectorType, naturalAlignmentLog2, numLanes) \ void EmitFunctionContext::name(LoadOrStoreLaneImm imm) \ { \ emitLoadLane(*this, llvmVectorType, imm, imm.laneIndex, U64(1) << naturalAlignmentLog2); \ } #define EMIT_STORE_LANE_OP(name, llvmVectorType, naturalAlignmentLog2, numLanes) \ void EmitFunctionContext::name(LoadOrStoreLaneImm imm) \ { \ emitStoreLane(*this, llvmVectorType, imm, imm.laneIndex, U64(1) << naturalAlignmentLog2); \ } EMIT_LOAD_LANE_OP(v128_load8_lane, llvmContext.i8x16Type, 0, 16) EMIT_LOAD_LANE_OP(v128_load16_lane, llvmContext.i16x8Type, 1, 8) EMIT_LOAD_LANE_OP(v128_load32_lane, llvmContext.i32x4Type, 2, 4) EMIT_LOAD_LANE_OP(v128_load64_lane, llvmContext.i64x2Type, 3, 2) EMIT_STORE_LANE_OP(v128_store8_lane, llvmContext.i8x16Type, 0, 16) EMIT_STORE_LANE_OP(v128_store16_lane, llvmContext.i16x8Type, 1, 8) EMIT_STORE_LANE_OP(v128_store32_lane, llvmContext.i32x4Type, 2, 4) EMIT_STORE_LANE_OP(v128_store64_lane, llvmContext.i64x2Type, 3, 2) static void emitLoadInterleaved(EmitFunctionContext& functionContext, llvm::Type* llvmValueType, llvm::Intrinsic::ID aarch64IntrinsicID, const BaseLoadOrStoreImm& imm, U32 numVectors, U32 numLanes, U64 numBytes) { static constexpr U32 maxVectors = 4; static constexpr U32 maxLanes = 16; WAVM_ASSERT(numVectors <= maxVectors); WAVM_ASSERT(numLanes <= maxLanes); auto address = functionContext.pop(); auto boundedAddress = getOffsetAndBoundedAddress(functionContext, imm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), numBytes), imm.offset, BoundsCheckOp::clampToGuardRegion); auto pointer = functionContext.coerceAddressToPointer(boundedAddress, imm.memoryIndex); if(functionContext.moduleContext.targetArch == llvm::Triple::aarch64) { auto results = functionContext.callLLVMIntrinsic( {llvmValueType, functionContext.llvmContext.ptrType}, aarch64IntrinsicID, {pointer}); for(U32 vectorIndex = 0; vectorIndex < numVectors; ++vectorIndex) { functionContext.push( functionContext.irBuilder.CreateExtractValue(results, vectorIndex)); } } else { llvm::Value* loads[maxVectors]; for(U32 vectorIndex = 0; vectorIndex < numVectors; ++vectorIndex) { auto load = functionContext.irBuilder.CreateLoad( llvmValueType, functionContext.irBuilder.CreateInBoundsGEP( llvmValueType, pointer, {emitLiteral(functionContext.llvmContext, U32(vectorIndex))})); /* Don't trust the alignment hint provided by the WebAssembly code, since the load * can't trap if it's wrong. */ load->setAlignment(LLVM_ALIGNMENT(1)); load->setVolatile(true); loads[vectorIndex] = load; } for(U32 vectorIndex = 0; vectorIndex < numVectors; ++vectorIndex) { llvm::Value* deinterleavedVector = llvm::UndefValue::get(llvmValueType); for(U32 laneIndex = 0; laneIndex < numLanes; ++laneIndex) { const Uptr interleavedElementIndex = laneIndex * numVectors + vectorIndex; deinterleavedVector = functionContext.irBuilder.CreateInsertElement( deinterleavedVector, functionContext.irBuilder.CreateExtractElement( loads[interleavedElementIndex / numLanes], interleavedElementIndex % numLanes), laneIndex); } functionContext.push(deinterleavedVector); } } } static void emitStoreInterleaved(EmitFunctionContext& functionContext, llvm::Type* llvmValueType, llvm::Intrinsic::ID aarch64IntrinsicID, const IR::BaseLoadOrStoreImm& imm, U32 numVectors, U32 numLanes, U64 numBytes) { static constexpr U32 maxVectors = 4; WAVM_ASSERT(numVectors <= 4); llvm::Value* values[maxVectors]; for(U32 vectorIndex = 0; vectorIndex < numVectors; ++vectorIndex) { values[numVectors - vectorIndex - 1] = functionContext.irBuilder.CreateBitCast(functionContext.pop(), llvmValueType); } auto address = functionContext.pop(); auto boundedAddress = getOffsetAndBoundedAddress(functionContext, imm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), numBytes), imm.offset, BoundsCheckOp::clampToGuardRegion); auto pointer = functionContext.coerceAddressToPointer(boundedAddress, imm.memoryIndex); if(functionContext.moduleContext.targetArch == llvm::Triple::aarch64) { llvm::Value* args[maxVectors + 1]; for(U32 vectorIndex = 0; vectorIndex < numVectors; ++vectorIndex) { args[vectorIndex] = values[vectorIndex]; args[numVectors] = pointer; } functionContext.callLLVMIntrinsic({llvmValueType, functionContext.llvmContext.ptrType}, aarch64IntrinsicID, llvm::ArrayRef(args, numVectors + 1)); } else { for(U32 vectorIndex = 0; vectorIndex < numVectors; ++vectorIndex) { llvm::Value* interleavedVector = llvm::UndefValue::get(llvmValueType); for(U32 laneIndex = 0; laneIndex < numLanes; ++laneIndex) { const Uptr interleavedElementIndex = vectorIndex * numLanes + laneIndex; const Uptr deinterleavedVectorIndex = interleavedElementIndex % numVectors; const Uptr deinterleavedLaneIndex = interleavedElementIndex / numVectors; interleavedVector = functionContext.irBuilder.CreateInsertElement( interleavedVector, functionContext.irBuilder.CreateExtractElement(values[deinterleavedVectorIndex], deinterleavedLaneIndex), laneIndex); } auto store = functionContext.irBuilder.CreateStore( interleavedVector, functionContext.irBuilder.CreateInBoundsGEP( llvmValueType, pointer, {emitLiteral(functionContext.llvmContext, U32(vectorIndex))})); store->setVolatile(true); store->setAlignment(LLVM_ALIGNMENT(1)); } } } #define EMIT_LOAD_INTERLEAVED_OP(name, llvmValueType, naturalAlignmentLog2, numVectors, numLanes) \ void EmitFunctionContext::name(LoadOrStoreImm imm) \ { \ emitLoadInterleaved(*this, \ llvmValueType, \ llvm::Intrinsic::aarch64_neon_ld##numVectors, \ imm, \ numVectors, \ numLanes, \ U64(1 << naturalAlignmentLog2) * numVectors); \ } #define EMIT_STORE_INTERLEAVED_OP(name, llvmValueType, naturalAlignmentLog2, numVectors, numLanes) \ void EmitFunctionContext::name(LoadOrStoreImm imm) \ { \ emitStoreInterleaved(*this, \ llvmValueType, \ llvm::Intrinsic::aarch64_neon_st##numVectors, \ imm, \ numVectors, \ numLanes, \ U64(1 << naturalAlignmentLog2) * numVectors); \ } EMIT_LOAD_INTERLEAVED_OP(v8x16_load_interleaved_2, llvmContext.i8x16Type, 4, 2, 16) EMIT_LOAD_INTERLEAVED_OP(v8x16_load_interleaved_3, llvmContext.i8x16Type, 4, 3, 16) EMIT_LOAD_INTERLEAVED_OP(v8x16_load_interleaved_4, llvmContext.i8x16Type, 4, 4, 16) EMIT_LOAD_INTERLEAVED_OP(v16x8_load_interleaved_2, llvmContext.i16x8Type, 4, 2, 8) EMIT_LOAD_INTERLEAVED_OP(v16x8_load_interleaved_3, llvmContext.i16x8Type, 4, 3, 8) EMIT_LOAD_INTERLEAVED_OP(v16x8_load_interleaved_4, llvmContext.i16x8Type, 4, 4, 8) EMIT_LOAD_INTERLEAVED_OP(v32x4_load_interleaved_2, llvmContext.i32x4Type, 4, 2, 4) EMIT_LOAD_INTERLEAVED_OP(v32x4_load_interleaved_3, llvmContext.i32x4Type, 4, 3, 4) EMIT_LOAD_INTERLEAVED_OP(v32x4_load_interleaved_4, llvmContext.i32x4Type, 4, 4, 4) EMIT_LOAD_INTERLEAVED_OP(v64x2_load_interleaved_2, llvmContext.i64x2Type, 4, 2, 2) EMIT_LOAD_INTERLEAVED_OP(v64x2_load_interleaved_3, llvmContext.i64x2Type, 4, 3, 2) EMIT_LOAD_INTERLEAVED_OP(v64x2_load_interleaved_4, llvmContext.i64x2Type, 4, 4, 2) EMIT_STORE_INTERLEAVED_OP(v8x16_store_interleaved_2, llvmContext.i8x16Type, 4, 2, 16) EMIT_STORE_INTERLEAVED_OP(v8x16_store_interleaved_3, llvmContext.i8x16Type, 4, 3, 16) EMIT_STORE_INTERLEAVED_OP(v8x16_store_interleaved_4, llvmContext.i8x16Type, 4, 4, 16) EMIT_STORE_INTERLEAVED_OP(v16x8_store_interleaved_2, llvmContext.i16x8Type, 4, 2, 8) EMIT_STORE_INTERLEAVED_OP(v16x8_store_interleaved_3, llvmContext.i16x8Type, 4, 3, 8) EMIT_STORE_INTERLEAVED_OP(v16x8_store_interleaved_4, llvmContext.i16x8Type, 4, 4, 8) EMIT_STORE_INTERLEAVED_OP(v32x4_store_interleaved_2, llvmContext.i32x4Type, 4, 2, 4) EMIT_STORE_INTERLEAVED_OP(v32x4_store_interleaved_3, llvmContext.i32x4Type, 4, 3, 4) EMIT_STORE_INTERLEAVED_OP(v32x4_store_interleaved_4, llvmContext.i32x4Type, 4, 4, 4) EMIT_STORE_INTERLEAVED_OP(v64x2_store_interleaved_2, llvmContext.i64x2Type, 4, 2, 2) EMIT_STORE_INTERLEAVED_OP(v64x2_store_interleaved_3, llvmContext.i64x2Type, 4, 3, 2) EMIT_STORE_INTERLEAVED_OP(v64x2_store_interleaved_4, llvmContext.i64x2Type, 4, 4, 2) void EmitFunctionContext::trapIfMisalignedAtomic(llvm::Value* address, U32 alignmentLog2) { if(alignmentLog2 > 0) { emitConditionalTrapIntrinsic( irBuilder.CreateICmpNE( llvmContext.typedZeroConstants[(Uptr)ValueType::i64], irBuilder.CreateAnd( address, emitLiteralIptr((U64(1) << alignmentLog2) - 1, address->getType()))), "misalignedAtomicTrap", FunctionType(TypeTuple{}, TypeTuple{ValueType::i64}, IR::CallingConvention::intrinsic), {address}); } } void EmitFunctionContext::memory_atomic_notify(AtomicLoadOrStoreImm<2> imm) { llvm::Value* numWaiters = pop(); llvm::Value* address = pop(); llvm::Value* boundedAddress = getOffsetAndBoundedAddress(*this, imm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), U64(4)), imm.offset, BoundsCheckOp::clampToGuardRegion); trapIfMisalignedAtomic(boundedAddress, imm.alignmentLog2); push(emitRuntimeIntrinsic( "memory.atomic.notify", FunctionType( TypeTuple{ValueType::i32}, TypeTuple{moduleContext.iptrValueType, ValueType::i32, moduleContext.iptrValueType}, IR::CallingConvention::intrinsic), {boundedAddress, numWaiters, moduleContext.memoryIds[imm.memoryIndex]})[0]); } void EmitFunctionContext::memory_atomic_wait32(AtomicLoadOrStoreImm<2> imm) { llvm::Value* timeout = pop(); llvm::Value* expectedValue = pop(); llvm::Value* address = pop(); llvm::Value* boundedAddress = getOffsetAndBoundedAddress(*this, imm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), U64(4)), imm.offset, BoundsCheckOp::clampToGuardRegion); trapIfMisalignedAtomic(boundedAddress, imm.alignmentLog2); push(emitRuntimeIntrinsic( "memory.atomic.wait32", FunctionType(TypeTuple{ValueType::i32}, TypeTuple{moduleContext.iptrValueType, ValueType::i32, ValueType::i64, moduleContext.iptrValueType}, IR::CallingConvention::intrinsic), {boundedAddress, expectedValue, timeout, moduleContext.memoryIds[imm.memoryIndex]})[0]); } void EmitFunctionContext::memory_atomic_wait64(AtomicLoadOrStoreImm<3> imm) { llvm::Value* timeout = pop(); llvm::Value* expectedValue = pop(); llvm::Value* address = pop(); llvm::Value* boundedAddress = getOffsetAndBoundedAddress(*this, imm.memoryIndex, address, llvm::ConstantInt::get(address->getType(), U64(8)), imm.offset, BoundsCheckOp::clampToGuardRegion); trapIfMisalignedAtomic(boundedAddress, imm.alignmentLog2); push(emitRuntimeIntrinsic( "memory.atomic.wait64", FunctionType(TypeTuple{ValueType::i32}, TypeTuple{moduleContext.iptrValueType, ValueType::i64, ValueType::i64, moduleContext.iptrValueType}, IR::CallingConvention::intrinsic), {boundedAddress, expectedValue, timeout, moduleContext.memoryIds[imm.memoryIndex]})[0]); } void EmitFunctionContext::atomic_fence(AtomicFenceImm imm) { switch(imm.order) { case MemoryOrder::sequentiallyConsistent: irBuilder.CreateFence(llvm::AtomicOrdering::SequentiallyConsistent); break; default: WAVM_UNREACHABLE(); }; } #define EMIT_ATOMIC_LOAD_OP(valueTypeId, name, llvmMemoryType, numBytesLog2, memToValue) \ void EmitFunctionContext::valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ { \ auto address = pop(); \ auto boundedAddress = getOffsetAndBoundedAddress( \ *this, \ imm.memoryIndex, \ address, \ llvm::ConstantInt::get(address->getType(), U64(1 << numBytesLog2)), \ imm.offset, \ BoundsCheckOp::clampToGuardRegion); \ trapIfMisalignedAtomic(boundedAddress, numBytesLog2); \ auto pointer = coerceAddressToPointer(boundedAddress, imm.memoryIndex); \ auto load = irBuilder.CreateLoad(llvmMemoryType, pointer); \ load->setAlignment(LLVM_ALIGNMENT(U64(1) << imm.alignmentLog2)); \ load->setVolatile(true); \ load->setAtomic(llvm::AtomicOrdering::SequentiallyConsistent); \ push(memToValue(load, asLLVMType(llvmContext, ValueType::valueTypeId))); \ } #define EMIT_ATOMIC_STORE_OP(valueTypeId, name, llvmMemoryType, numBytesLog2, valueToMem) \ void EmitFunctionContext::valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ { \ auto value = pop(); \ auto address = pop(); \ auto boundedAddress = getOffsetAndBoundedAddress( \ *this, \ imm.memoryIndex, \ address, \ llvm::ConstantInt::get(address->getType(), U64(1 << numBytesLog2)), \ imm.offset, \ BoundsCheckOp::clampToGuardRegion); \ trapIfMisalignedAtomic(boundedAddress, numBytesLog2); \ auto pointer = coerceAddressToPointer(boundedAddress, imm.memoryIndex); \ auto memoryValue = valueToMem(value, llvmMemoryType); \ auto store = irBuilder.CreateStore(memoryValue, pointer); \ store->setVolatile(true); \ store->setAlignment(LLVM_ALIGNMENT(U64(1) << imm.alignmentLog2)); \ store->setAtomic(llvm::AtomicOrdering::SequentiallyConsistent); \ } EMIT_ATOMIC_LOAD_OP(i32, atomic_load, llvmContext.i32Type, 2, identity) EMIT_ATOMIC_LOAD_OP(i64, atomic_load, llvmContext.i64Type, 3, identity) EMIT_ATOMIC_LOAD_OP(i32, atomic_load8_u, llvmContext.i8Type, 0, zext) EMIT_ATOMIC_LOAD_OP(i32, atomic_load16_u, llvmContext.i16Type, 1, zext) EMIT_ATOMIC_LOAD_OP(i64, atomic_load8_u, llvmContext.i8Type, 0, zext) EMIT_ATOMIC_LOAD_OP(i64, atomic_load16_u, llvmContext.i16Type, 1, zext) EMIT_ATOMIC_LOAD_OP(i64, atomic_load32_u, llvmContext.i32Type, 2, zext) EMIT_ATOMIC_STORE_OP(i32, atomic_store, llvmContext.i32Type, 2, identity) EMIT_ATOMIC_STORE_OP(i64, atomic_store, llvmContext.i64Type, 3, identity) EMIT_ATOMIC_STORE_OP(i32, atomic_store8, llvmContext.i8Type, 0, trunc) EMIT_ATOMIC_STORE_OP(i32, atomic_store16, llvmContext.i16Type, 1, trunc) EMIT_ATOMIC_STORE_OP(i64, atomic_store8, llvmContext.i8Type, 0, trunc) EMIT_ATOMIC_STORE_OP(i64, atomic_store16, llvmContext.i16Type, 1, trunc) EMIT_ATOMIC_STORE_OP(i64, atomic_store32, llvmContext.i32Type, 2, trunc) #define EMIT_ATOMIC_CMPXCHG( \ valueTypeId, name, llvmMemoryType, numBytesLog2, memToValue, valueToMem) \ void EmitFunctionContext::valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ { \ auto replacementValue = valueToMem(pop(), llvmMemoryType); \ auto expectedValue = valueToMem(pop(), llvmMemoryType); \ auto address = pop(); \ auto boundedAddress = getOffsetAndBoundedAddress( \ *this, \ imm.memoryIndex, \ address, \ llvm::ConstantInt::get(address->getType(), U64(1 << numBytesLog2)), \ imm.offset, \ BoundsCheckOp::clampToGuardRegion); \ trapIfMisalignedAtomic(boundedAddress, numBytesLog2); \ auto pointer = coerceAddressToPointer(boundedAddress, imm.memoryIndex); \ auto atomicCmpXchg \ = irBuilder.CreateAtomicCmpXchg(pointer, \ expectedValue, \ replacementValue, \ LLVM_ALIGNMENT(1 << numBytesLog2), \ llvm::AtomicOrdering::SequentiallyConsistent, \ llvm::AtomicOrdering::SequentiallyConsistent); \ atomicCmpXchg->setVolatile(true); \ auto previousValue = irBuilder.CreateExtractValue(atomicCmpXchg, {0}); \ push(memToValue(previousValue, asLLVMType(llvmContext, ValueType::valueTypeId))); \ } EMIT_ATOMIC_CMPXCHG(i32, atomic_rmw8_cmpxchg_u, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_CMPXCHG(i32, atomic_rmw16_cmpxchg_u, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_CMPXCHG(i32, atomic_rmw_cmpxchg, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_CMPXCHG(i64, atomic_rmw8_cmpxchg_u, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_CMPXCHG(i64, atomic_rmw16_cmpxchg_u, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_CMPXCHG(i64, atomic_rmw32_cmpxchg_u, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_CMPXCHG(i64, atomic_rmw_cmpxchg, llvmContext.i64Type, 3, identity, identity) #define EMIT_ATOMIC_RMW( \ valueTypeId, name, rmwOpId, llvmMemoryType, numBytesLog2, memToValue, valueToMem) \ void EmitFunctionContext::valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ { \ auto value = valueToMem(pop(), llvmMemoryType); \ auto address = pop(); \ auto boundedAddress = getOffsetAndBoundedAddress( \ *this, \ imm.memoryIndex, \ address, \ llvm::ConstantInt::get(address->getType(), U64(1 << numBytesLog2)), \ imm.offset, \ BoundsCheckOp::clampToGuardRegion); \ trapIfMisalignedAtomic(boundedAddress, numBytesLog2); \ auto pointer = coerceAddressToPointer(boundedAddress, imm.memoryIndex); \ auto atomicRMW = irBuilder.CreateAtomicRMW(llvm::AtomicRMWInst::BinOp::rmwOpId, \ pointer, \ value, \ LLVM_ALIGNMENT(1 << numBytesLog2), \ llvm::AtomicOrdering::SequentiallyConsistent); \ atomicRMW->setVolatile(true); \ push(memToValue(atomicRMW, asLLVMType(llvmContext, ValueType::valueTypeId))); \ } EMIT_ATOMIC_RMW(i32, atomic_rmw8_xchg_u, Xchg, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw16_xchg_u, Xchg, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw_xchg, Xchg, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_RMW(i64, atomic_rmw8_xchg_u, Xchg, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw16_xchg_u, Xchg, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw32_xchg_u, Xchg, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw_xchg, Xchg, llvmContext.i64Type, 3, identity, identity) EMIT_ATOMIC_RMW(i32, atomic_rmw8_add_u, Add, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw16_add_u, Add, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw_add, Add, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_RMW(i64, atomic_rmw8_add_u, Add, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw16_add_u, Add, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw32_add_u, Add, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw_add, Add, llvmContext.i64Type, 3, identity, identity) EMIT_ATOMIC_RMW(i32, atomic_rmw8_sub_u, Sub, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw16_sub_u, Sub, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw_sub, Sub, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_RMW(i64, atomic_rmw8_sub_u, Sub, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw16_sub_u, Sub, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw32_sub_u, Sub, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw_sub, Sub, llvmContext.i64Type, 3, identity, identity) EMIT_ATOMIC_RMW(i32, atomic_rmw8_and_u, And, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw16_and_u, And, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw_and, And, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_RMW(i64, atomic_rmw8_and_u, And, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw16_and_u, And, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw32_and_u, And, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw_and, And, llvmContext.i64Type, 3, identity, identity) EMIT_ATOMIC_RMW(i32, atomic_rmw8_or_u, Or, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw16_or_u, Or, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw_or, Or, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_RMW(i64, atomic_rmw8_or_u, Or, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw16_or_u, Or, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw32_or_u, Or, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw_or, Or, llvmContext.i64Type, 3, identity, identity) EMIT_ATOMIC_RMW(i32, atomic_rmw8_xor_u, Xor, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw16_xor_u, Xor, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i32, atomic_rmw_xor, Xor, llvmContext.i32Type, 2, identity, identity) EMIT_ATOMIC_RMW(i64, atomic_rmw8_xor_u, Xor, llvmContext.i8Type, 0, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw16_xor_u, Xor, llvmContext.i16Type, 1, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw32_xor_u, Xor, llvmContext.i32Type, 2, zext, trunc) EMIT_ATOMIC_RMW(i64, atomic_rmw_xor, Xor, llvmContext.i64Type, 3, identity, identity) ================================================ FILE: Lib/LLVMJIT/EmitModule.cpp ================================================ #include #include #include #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Timing.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace llvm { class Constant; } using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; using namespace WAVM::Runtime; EmitModuleContext::EmitModuleContext(const IR::Module& inIRModule, LLVMContext& inLLVMContext, llvm::Module* inLLVMModule, llvm::TargetMachine* inTargetMachine) : irModule(inIRModule) , llvmContext(inLLVMContext) , llvmModule(inLLVMModule) , targetMachine(inTargetMachine) , defaultTableOffset(nullptr) , diBuilder(*inLLVMModule) { targetArch = targetMachine->getTargetTriple().getArch(); useWindowsSEH = targetMachine->getTargetTriple().getOS() == llvm::Triple::Win32; const U32 numPointerBytes = targetMachine->getProgramPointerSize(); iptrAlignment = numPointerBytes; iptrType = getIptrType(llvmContext, numPointerBytes); switch(iptrAlignment) { case 4: iptrValueType = ValueType::i32; break; case 8: iptrValueType = ValueType::i64; break; default: Errors::fatalf("Unexpected pointer size: %u bytes", numPointerBytes); }; diModuleScope = diBuilder.createFile("unknown", "unknown"); diCompileUnit = diBuilder.createCompileUnit(0xffff, diModuleScope, "WAVM", true, "", 0, llvm::StringRef(), llvm::DICompileUnit::DebugEmissionKind::FullDebug, 0, true, false, llvm::DICompileUnit::DebugNameTableKind::None, false); diValueTypes[(Uptr)ValueType::any] = nullptr; diValueTypes[(Uptr)ValueType::i32] = diBuilder.createBasicType("i32", 32, llvm::dwarf::DW_ATE_signed); diValueTypes[(Uptr)ValueType::i64] = diBuilder.createBasicType("i64", 64, llvm::dwarf::DW_ATE_signed); diValueTypes[(Uptr)ValueType::f32] = diBuilder.createBasicType("f32", 32, llvm::dwarf::DW_ATE_float); diValueTypes[(Uptr)ValueType::f64] = diBuilder.createBasicType("f64", 64, llvm::dwarf::DW_ATE_float); diValueTypes[(Uptr)ValueType::v128] = diBuilder.createBasicType("v128", 128, llvm::dwarf::DW_ATE_signed); diValueTypes[(Uptr)ValueType::externref] = diBuilder.createBasicType("externref", 8, llvm::dwarf::DW_ATE_address); diValueTypes[(Uptr)ValueType::funcref] = diBuilder.createBasicType("funcref", 8, llvm::dwarf::DW_ATE_address); auto zeroAsMetadata = llvm::ConstantAsMetadata::get(emitLiteral(llvmContext, I32(0))); auto i32MaxAsMetadata = llvm::ConstantAsMetadata::get(emitLiteral(llvmContext, I32(INT32_MAX))); likelyFalseBranchWeights = llvm::MDTuple::getDistinct( llvmContext, {llvm::MDString::get(llvmContext, "branch_weights"), zeroAsMetadata, i32MaxAsMetadata}); likelyTrueBranchWeights = llvm::MDTuple::getDistinct( llvmContext, {llvm::MDString::get(llvmContext, "branch_weights"), i32MaxAsMetadata, zeroAsMetadata}); fpRoundingModeMetadata = llvm::MetadataAsValue::get( llvmContext, llvm::MDString::get(llvmContext, "round.tonearest")); fpExceptionMetadata = llvm::MetadataAsValue::get( llvmContext, llvm::MDString::get(llvmContext, "fpexcept.strict")); } static llvm::Constant* createImportedConstant(llvm::Module& llvmModule, llvm::Twine externalName) { return new llvm::GlobalVariable(llvmModule, llvm::Type::getInt8Ty(llvmModule.getContext()), false, llvm::GlobalVariable::ExternalLinkage, nullptr, externalName); } void LLVMJIT::emitModule(const IR::Module& irModule, LLVMContext& llvmContext, llvm::Module& outLLVMModule, llvm::TargetMachine* targetMachine) { Timing::Timer emitTimer; EmitModuleContext moduleContext(irModule, llvmContext, &outLLVMModule, targetMachine); // Set the module data layout for the target machine. outLLVMModule.setDataLayout(targetMachine->createDataLayout()); // Force DWARF debug info emission. On Windows MSVC targets, LLVM defaults to CodeView, // but we need DWARF sections for getInstructionSourceByAddress to resolve instruction // indices and inline frames. outLLVMModule.addModuleFlag(llvm::Module::Warning, "Dwarf Version", 5); outLLVMModule.addModuleFlag(llvm::Module::Warning, "Debug Info Version", 3); // Create an external reference to the appropriate exception personality function. auto personalityFunction = llvm::Function::Create( llvm::FunctionType::get(llvmContext.i32Type, {}, false), llvm::GlobalValue::LinkageTypes::ExternalLinkage, moduleContext.useWindowsSEH ? "__CxxFrameHandler3" : "__gxx_personality_v0", &outLLVMModule); // Create LLVM external globals corresponding to the encoded function types for the module's // indexed function types. for(Uptr typeIndex = 0; typeIndex < irModule.types.size(); ++typeIndex) { moduleContext.typeIds.push_back(llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, getExternalName("typeId", typeIndex)), moduleContext.iptrType)); } // Create LLVM external globals corresponding to offsets to table base pointers in // CompartmentRuntimeData for the module's declared table objects. for(Uptr tableIndex = 0; tableIndex < irModule.tables.size(); ++tableIndex) { moduleContext.tableOffsets.push_back(llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, getExternalName("tableOffset", tableIndex)), moduleContext.iptrType)); } if(moduleContext.tableOffsets.size()) { moduleContext.defaultTableOffset = moduleContext.tableOffsets[0]; } // Create LLVM external globals corresponding to IDs of tables in CompartmentRuntimeData for the // module's declared table objects. for(Uptr tableIndex = 0; tableIndex < irModule.tables.size(); ++tableIndex) { moduleContext.tableIds.push_back(llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, getExternalName("tableId", tableIndex)), moduleContext.iptrType)); } // Create LLVM external globals corresponding to offsets to memory base pointers in // CompartmentRuntimeData for the module's declared memory objects. for(Uptr memoryIndex = 0; memoryIndex < irModule.memories.size(); ++memoryIndex) { moduleContext.memoryOffsets.push_back(llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, getExternalName("memoryOffset", memoryIndex)), moduleContext.iptrType)); } // Create LLVM external globals corresponding to IDs of memories in CompartmentRuntimeData for // the module's declared memory objects. for(Uptr memoryIndex = 0; memoryIndex < irModule.memories.size(); ++memoryIndex) { moduleContext.memoryIds.push_back(llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, getExternalName("memoryId", memoryIndex)), moduleContext.iptrType)); } // Create LLVM external globals for the module's globals. for(Uptr globalIndex = 0; globalIndex < irModule.globals.size(); ++globalIndex) { moduleContext.globals.push_back( createImportedConstant(outLLVMModule, getExternalName("global", globalIndex))); } // Create LLVM external globals corresponding to pointers to ExceptionTypes for the // module's declared exception types. for(Uptr exceptionTypeIndex = 0; exceptionTypeIndex < irModule.exceptionTypes.size(); ++exceptionTypeIndex) { moduleContext.exceptionTypeIds.push_back(llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, getExternalName("exceptionTypeId", exceptionTypeIndex)), moduleContext.iptrType)); } // Create a LLVM external global that will point to the Instance. moduleContext.instanceId = llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, "instanceId"), moduleContext.iptrType); // Create a LLVM external global that will be a bias applied to all references in a table. moduleContext.tableReferenceBias = llvm::ConstantExpr::getPtrToInt( createImportedConstant(outLLVMModule, "tableReferenceBias"), moduleContext.iptrType); // Create a LLVM external global that will point to the std::type_info for Runtime::Exception. if(moduleContext.useWindowsSEH) { // The Windows type_info is referenced by the exception handling tables with a 32-bit // image-relative offset, so we have to create a copy of it in the image. const char* typeMangledName = ".PEAUException@Runtime@WAVM@@"; llvm::Type* typeDescriptorTypeElements[3] = {llvmContext.ptrType, llvmContext.ptrType, llvm::ArrayType::get(llvmContext.i8Type, strlen(typeMangledName) + 1)}; llvm::StructType* typeDescriptorType = llvm::StructType::create(typeDescriptorTypeElements); llvm::Constant* typeDescriptorElements[3] = {llvm::ConstantPointerNull::get(llvmContext.ptrType), llvm::ConstantPointerNull::get(llvmContext.ptrType), llvm::ConstantDataArray::getString(llvmContext, typeMangledName, true)}; llvm::Constant* typeDescriptor = llvm::ConstantStruct::get(typeDescriptorType, typeDescriptorElements); llvm::GlobalVariable* typeDescriptorVariable = new llvm::GlobalVariable(*moduleContext.llvmModule, typeDescriptorType, false, llvm::GlobalVariable::LinkOnceODRLinkage, typeDescriptor, "??_R0PEAUException@Runtime@WAVM@@@8"); typeDescriptorVariable->setComdat( moduleContext.llvmModule->getOrInsertComdat("??_R0PEAUException@Runtime@WAVM@@@8")); moduleContext.runtimeExceptionTypeInfo = typeDescriptorVariable; } else { moduleContext.runtimeExceptionTypeInfo = llvm::ConstantExpr::getPointerCast( createImportedConstant(*moduleContext.llvmModule, "runtimeExceptionTypeInfo"), llvmContext.ptrType); } // Create the LLVM functions. moduleContext.functions.resize(irModule.functions.size()); for(Uptr functionIndex = 0; functionIndex < irModule.functions.size(); ++functionIndex) { FunctionType functionType = irModule.types[irModule.functions.getType(functionIndex).index]; llvm::Function* function = llvm::Function::Create( asLLVMType(llvmContext, functionType), llvm::Function::ExternalLinkage, functionIndex >= irModule.functions.imports.size() ? getExternalName("functionDef", functionIndex - irModule.functions.imports.size()) : getExternalName("functionImport", functionIndex), &outLLVMModule); function->setCallingConv(asLLVMCallingConv(functionType.callingConvention())); moduleContext.functions[functionIndex] = function; } // Compile each function in the module. for(Uptr functionDefIndex = 0; functionDefIndex < irModule.functions.defs.size(); ++functionDefIndex) { const FunctionDef& functionDef = irModule.functions.defs[functionDefIndex]; llvm::Function* function = moduleContext.functions[irModule.functions.imports.size() + functionDefIndex]; function->setPersonalityFn(personalityFunction); llvm::Constant* functionDefMutableData = createImportedConstant( outLLVMModule, getExternalName("functionDefMutableDatas", functionDefIndex)); llvm::Constant* functionDefMutableDataAsIptr = llvm::ConstantExpr::getPtrToInt(functionDefMutableData, moduleContext.iptrType); setRuntimeFunctionPrefix(llvmContext, moduleContext.iptrType, function, functionDefMutableDataAsIptr, moduleContext.instanceId, moduleContext.typeIds[functionDef.type.index]); setFunctionAttributes(targetMachine, function); EmitFunctionContext(llvmContext, moduleContext, irModule, functionDef, function).emit(); } // Finalize the debug info. moduleContext.diBuilder.finalize(); Timing::logRatePerSecond("Emitted LLVM IR", emitTimer, (F64)outLLVMModule.size(), "functions"); } ================================================ FILE: Lib/LLVMJIT/EmitModuleContext.h ================================================ #pragma once #include #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace WAVM { namespace LLVMJIT { struct EmitModuleContext { const IR::Module& irModule; LLVMContext& llvmContext; llvm::Module* llvmModule; llvm::TargetMachine* targetMachine; llvm::Triple::ArchType targetArch; bool useWindowsSEH; llvm::Type* iptrType; IR::ValueType iptrValueType; U32 iptrAlignment; std::vector typeIds; std::vector functions; std::vector tableOffsets; std::vector tableIds; std::vector memoryOffsets; std::vector memoryIds; std::vector globals; std::vector exceptionTypeIds; llvm::Constant* defaultTableOffset; llvm::Constant* instanceId; llvm::Constant* tableReferenceBias; llvm::DIBuilder diBuilder; llvm::DICompileUnit* diCompileUnit; llvm::DIFile* diModuleScope; llvm::DIType* diValueTypes[IR::numValueTypes]; llvm::MDNode* likelyFalseBranchWeights; llvm::MDNode* likelyTrueBranchWeights; llvm::Value* fpRoundingModeMetadata; llvm::Value* fpExceptionMetadata; llvm::Function* cxaBeginCatchFunction = nullptr; llvm::Function* cxaEndCatchFunction = nullptr; llvm::Constant* runtimeExceptionTypeInfo = nullptr; EmitModuleContext(const IR::Module& inModule, LLVMContext& inLLVMContext, llvm::Module* inLLVMModule, llvm::TargetMachine* inTargetMachine); inline llvm::Function* getLLVMIntrinsic(llvm::ArrayRef typeArguments, llvm::Intrinsic::ID id) { return llvm::Intrinsic::getOrInsertDeclaration(llvmModule, id, typeArguments); } }; }} ================================================ FILE: Lib/LLVMJIT/EmitNumeric.cpp ================================================ #include #include "EmitContext.h" #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/FloatComponents.h" #include "WAVM/Platform/Defines.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; // // Constant operators // #define EMIT_CONST(typeId, NativeType) \ void EmitFunctionContext::typeId##_const(LiteralImm imm) \ { \ push(emitLiteral(llvmContext, imm.value)); \ } EMIT_CONST(i32, I32) EMIT_CONST(i64, I64) EMIT_CONST(f32, F32) EMIT_CONST(f64, F64) EMIT_CONST(v128, V128) // // Numeric operator macros // #define EMIT_BINARY_OP(typeId, name, emitCode) \ void EmitFunctionContext::typeId##_##name(NoImm) \ { \ const ValueType type = ValueType::typeId; \ WAVM_SUPPRESS_UNUSED(type); \ auto right = pop(); \ auto left = pop(); \ push(emitCode); \ } #define EMIT_INT_BINARY_OP(name, emitCode) \ EMIT_BINARY_OP(i32, name, emitCode) \ EMIT_BINARY_OP(i64, name, emitCode) #define EMIT_FP_BINARY_OP(name, emitCode) \ EMIT_BINARY_OP(f32, name, emitCode) \ EMIT_BINARY_OP(f64, name, emitCode) #define EMIT_UNARY_OP(typeId, name, emitCode) \ void EmitFunctionContext::typeId##_##name(NoImm) \ { \ const ValueType type = ValueType::typeId; \ WAVM_SUPPRESS_UNUSED(type); \ auto operand = pop(); \ push(emitCode); \ } #define EMIT_INT_UNARY_OP(name, emitCode) \ EMIT_UNARY_OP(i32, name, emitCode) \ EMIT_UNARY_OP(i64, name, emitCode) #define EMIT_FP_UNARY_OP(name, emitCode) \ EMIT_UNARY_OP(f32, name, emitCode) \ EMIT_UNARY_OP(f64, name, emitCode) #define EMIT_SIMD_BINARY_OP(name, llvmType, emitCode) \ void EmitFunctionContext::name(IR::NoImm) \ { \ llvm::Type* vectorType = llvmType; \ WAVM_SUPPRESS_UNUSED(vectorType); \ auto right = irBuilder.CreateBitCast(pop(), llvmType); \ WAVM_SUPPRESS_UNUSED(right); \ auto left = irBuilder.CreateBitCast(pop(), llvmType); \ WAVM_SUPPRESS_UNUSED(left); \ push(emitCode); \ } #define EMIT_SIMD_UNARY_OP(name, llvmType, emitCode) \ void EmitFunctionContext::name(IR::NoImm) \ { \ auto operand = irBuilder.CreateBitCast(pop(), llvmType); \ WAVM_SUPPRESS_UNUSED(operand); \ push(emitCode); \ } #define EMIT_SIMD_INT_BINARY_OP(name, emitCode) \ EMIT_SIMD_BINARY_OP(i8x16##_##name, llvmContext.i8x16Type, emitCode) \ EMIT_SIMD_BINARY_OP(i16x8##_##name, llvmContext.i16x8Type, emitCode) \ EMIT_SIMD_BINARY_OP(i32x4##_##name, llvmContext.i32x4Type, emitCode) \ EMIT_SIMD_BINARY_OP(i64x2##_##name, llvmContext.i64x2Type, emitCode) #define EMIT_SIMD_FP_BINARY_OP(name, emitCode) \ EMIT_SIMD_BINARY_OP(f32x4##_##name, llvmContext.f32x4Type, emitCode) \ EMIT_SIMD_BINARY_OP(f64x2##_##name, llvmContext.f64x2Type, emitCode) #define EMIT_SIMD_INT_UNARY_OP(name, emitCode) \ EMIT_SIMD_UNARY_OP(i8x16##_##name, llvmContext.i8x16Type, emitCode) \ EMIT_SIMD_UNARY_OP(i16x8##_##name, llvmContext.i16x8Type, emitCode) \ EMIT_SIMD_UNARY_OP(i32x4##_##name, llvmContext.i32x4Type, emitCode) \ EMIT_SIMD_UNARY_OP(i64x2##_##name, llvmContext.i64x2Type, emitCode) #define EMIT_SIMD_FP_UNARY_OP(name, emitCode) \ EMIT_SIMD_UNARY_OP(f32x4##_##name, llvmContext.f32x4Type, emitCode) \ EMIT_SIMD_UNARY_OP(f64x2##_##name, llvmContext.f64x2Type, emitCode) // // Int operators // llvm::Value* EmitFunctionContext::emitSRem(ValueType type, llvm::Value* left, llvm::Value* right) { // Trap if the dividend is zero. trapDivideByZero(right); // LLVM's srem has undefined behavior where WebAssembly's rem_s defines that it should not trap // if the corresponding division would overflow a signed integer. To avoid this case, we just // branch around the srem if the INT_MAX%-1 case that overflows is detected. auto preOverflowBlock = irBuilder.GetInsertBlock(); auto noOverflowBlock = llvm::BasicBlock::Create(llvmContext, "sremNoOverflow", function); auto endBlock = llvm::BasicBlock::Create(llvmContext, "sremEnd", function); auto noOverflow = irBuilder.CreateOr( irBuilder.CreateICmpNE(left, type == ValueType::i32 ? emitLiteral(llvmContext, (I32)INT32_MIN) : emitLiteral(llvmContext, (I64)INT64_MIN)), irBuilder.CreateICmpNE(right, type == ValueType::i32 ? emitLiteral(llvmContext, (I32)-1) : emitLiteral(llvmContext, (I64)-1))); irBuilder.CreateCondBr( noOverflow, noOverflowBlock, endBlock, moduleContext.likelyTrueBranchWeights); irBuilder.SetInsertPoint(noOverflowBlock); auto noOverflowValue = irBuilder.CreateSRem(left, right); irBuilder.CreateBr(endBlock); irBuilder.SetInsertPoint(endBlock); auto phi = irBuilder.CreatePHI(asLLVMType(llvmContext, type), 2); phi->addIncoming(llvmContext.typedZeroConstants[(Uptr)type], preOverflowBlock); phi->addIncoming(noOverflowValue, noOverflowBlock); return phi; } static llvm::Value* emitShiftCountMask(EmitContext& emitContext, llvm::Value* shiftCount, Uptr numBits) { // LLVM's shifts have undefined behavior where WebAssembly specifies that the shift count will // wrap numbers greater than the bit count of the operands. This matches x86's native shift // instructions, but explicitly mask the shift count anyway to support other platforms, and // ensure the optimizer doesn't take advantage of the UB. llvm::Value* bitsMinusOne = llvm::ConstantInt::get(shiftCount->getType(), numBits - 1); return emitContext.irBuilder.CreateAnd(shiftCount, bitsMinusOne); } static llvm::Value* emitRotl(EmitContext& emitContext, llvm::Value* left, llvm::Value* right) { llvm::Type* type = left->getType(); llvm::Value* bitWidth = emitLiteral(emitContext.llvmContext, type->getIntegerBitWidth()); llvm::Value* bitWidthMinusRight = emitContext.irBuilder.CreateSub(emitContext.irBuilder.CreateZExt(bitWidth, type), right); return emitContext.irBuilder.CreateOr( emitContext.irBuilder.CreateShl( left, emitShiftCountMask(emitContext, right, type->getIntegerBitWidth())), emitContext.irBuilder.CreateLShr( left, emitShiftCountMask(emitContext, bitWidthMinusRight, type->getIntegerBitWidth()))); } static llvm::Value* emitRotr(EmitContext& emitContext, llvm::Value* left, llvm::Value* right) { llvm::Type* type = left->getType(); llvm::Value* bitWidth = emitLiteral(emitContext.llvmContext, type->getIntegerBitWidth()); llvm::Value* bitWidthMinusRight = emitContext.irBuilder.CreateSub(emitContext.irBuilder.CreateZExt(bitWidth, type), right); return emitContext.irBuilder.CreateOr( emitContext.irBuilder.CreateShl( left, emitShiftCountMask(emitContext, bitWidthMinusRight, type->getIntegerBitWidth())), emitContext.irBuilder.CreateLShr( left, emitShiftCountMask(emitContext, right, type->getIntegerBitWidth()))); } EMIT_INT_BINARY_OP(add, irBuilder.CreateAdd(left, right)) EMIT_INT_BINARY_OP(sub, irBuilder.CreateSub(left, right)) EMIT_INT_BINARY_OP(mul, irBuilder.CreateMul(left, right)) EMIT_INT_BINARY_OP(and_, irBuilder.CreateAnd(left, right)) EMIT_INT_BINARY_OP(or_, irBuilder.CreateOr(left, right)) EMIT_INT_BINARY_OP(xor_, irBuilder.CreateXor(left, right)) EMIT_INT_BINARY_OP(rotr, emitRotr(*this, left, right)) EMIT_INT_BINARY_OP(rotl, emitRotl(*this, left, right)) // Divides use trapDivideByZero to avoid the undefined behavior in LLVM's division instructions. EMIT_INT_BINARY_OP(div_s, (trapDivideByZeroOrIntegerOverflow(type, left, right), irBuilder.CreateSDiv(left, right))) EMIT_INT_BINARY_OP(rem_s, emitSRem(type, left, right)) EMIT_INT_BINARY_OP(div_u, (trapDivideByZero(right), irBuilder.CreateUDiv(left, right))) EMIT_INT_BINARY_OP(rem_u, (trapDivideByZero(right), irBuilder.CreateURem(left, right))) // Explicitly mask the shift amount operand to the word size to avoid LLVM's undefined behavior. EMIT_INT_BINARY_OP(shl, irBuilder.CreateShl(left, emitShiftCountMask(*this, right, getTypeBitWidth(type)))) EMIT_INT_BINARY_OP(shr_s, irBuilder.CreateAShr(left, emitShiftCountMask(*this, right, getTypeBitWidth(type)))) EMIT_INT_BINARY_OP(shr_u, irBuilder.CreateLShr(left, emitShiftCountMask(*this, right, getTypeBitWidth(type)))) EMIT_INT_UNARY_OP(clz, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::ctlz, {operand, emitLiteral(llvmContext, false)})) EMIT_INT_UNARY_OP(ctz, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::cttz, {operand, emitLiteral(llvmContext, false)})) EMIT_INT_UNARY_OP(popcnt, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::ctpop, {operand})) void EmitFunctionContext::i8x16_popcnt(NoImm) { llvm::Value* operand = pop(); operand = irBuilder.CreateBitCast(operand, llvmContext.i8x16Type); llvm::Value* result = callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::ctpop, {operand}); push(result); } EMIT_INT_UNARY_OP( eqz, coerceBoolToI32(irBuilder.CreateICmpEQ(operand, llvmContext.typedZeroConstants[(Uptr)type]))) // // FP operators // EMIT_FP_BINARY_OP(add, callLLVMIntrinsic({left->getType()}, llvm::Intrinsic::experimental_constrained_fadd, {left, right, moduleContext.fpRoundingModeMetadata, moduleContext.fpExceptionMetadata})) EMIT_FP_BINARY_OP(sub, callLLVMIntrinsic({left->getType()}, llvm::Intrinsic::experimental_constrained_fsub, {left, right, moduleContext.fpRoundingModeMetadata, moduleContext.fpExceptionMetadata})) EMIT_FP_BINARY_OP(mul, callLLVMIntrinsic({left->getType()}, llvm::Intrinsic::experimental_constrained_fmul, {left, right, moduleContext.fpRoundingModeMetadata, moduleContext.fpExceptionMetadata})) EMIT_FP_BINARY_OP(div, callLLVMIntrinsic({left->getType()}, llvm::Intrinsic::experimental_constrained_fdiv, {left, right, moduleContext.fpRoundingModeMetadata, moduleContext.fpExceptionMetadata})) EMIT_FP_BINARY_OP(copysign, callLLVMIntrinsic({left->getType()}, llvm::Intrinsic::copysign, {left, right})) EMIT_FP_UNARY_OP(neg, irBuilder.CreateFNeg(operand)) EMIT_FP_UNARY_OP(abs, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::fabs, {operand})) EMIT_FP_UNARY_OP(sqrt, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::experimental_constrained_sqrt, {operand, moduleContext.fpRoundingModeMetadata, moduleContext.fpExceptionMetadata})) #define EMIT_FP_COMPARE_OP(name, pred, zextOrSext, llvmOperandType, llvmResultType) \ void EmitFunctionContext::name(NoImm) \ { \ auto right = irBuilder.CreateBitCast(pop(), llvmOperandType); \ auto left = irBuilder.CreateBitCast(pop(), llvmOperandType); \ push(zextOrSext(irBuilder.CreateFCmp(pred, left, right), llvmResultType)); \ } #define EMIT_FP_COMPARE(name, pred) \ EMIT_FP_COMPARE_OP(f32_##name, pred, zext, llvmContext.f32Type, llvmContext.i32Type) \ EMIT_FP_COMPARE_OP(f64_##name, pred, zext, llvmContext.f64Type, llvmContext.i32Type) \ EMIT_FP_COMPARE_OP(f32x4_##name, pred, sext, llvmContext.f32x4Type, llvmContext.i32x4Type) \ EMIT_FP_COMPARE_OP(f64x2_##name, pred, sext, llvmContext.f64x2Type, llvmContext.i64x2Type) EMIT_FP_COMPARE(eq, llvm::CmpInst::FCMP_OEQ) EMIT_FP_COMPARE(ne, llvm::CmpInst::FCMP_UNE) EMIT_FP_COMPARE(lt, llvm::CmpInst::FCMP_OLT) EMIT_FP_COMPARE(le, llvm::CmpInst::FCMP_OLE) EMIT_FP_COMPARE(gt, llvm::CmpInst::FCMP_OGT) EMIT_FP_COMPARE(ge, llvm::CmpInst::FCMP_OGE) static llvm::Value* quietNaN(EmitFunctionContext& context, llvm::Value* nan, llvm::Value* quietNaNMask) { // Converts a signaling NaN to a quiet NaN by adding zero to it. WAVM_SUPPRESS_UNUSED(quietNaNMask); return context.callLLVMIntrinsic({nan->getType()}, llvm::Intrinsic::experimental_constrained_fadd, {nan, llvm::Constant::getNullValue(nan->getType()), context.moduleContext.fpRoundingModeMetadata, context.moduleContext.fpExceptionMetadata}); } static llvm::Value* emitFloatMin(EmitFunctionContext& context, llvm::Value* left, llvm::Value* right, llvm::Type* intType, llvm::Value* quietNaNMask) { llvm::IRBuilder<>& irBuilder = context.irBuilder; llvm::Type* floatType = left->getType(); llvm::Value* isLeftNaN = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, left, left); llvm::Value* isRightNaN = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, right, right); llvm::Value* isLeftLessThanRight = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OLT, left, right); llvm::Value* isLeftGreaterThanRight = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OGT, left, right); return irBuilder.CreateSelect( isLeftNaN, quietNaN(context, left, quietNaNMask), irBuilder.CreateSelect( isRightNaN, quietNaN(context, right, quietNaNMask), irBuilder.CreateSelect( isLeftLessThanRight, left, irBuilder.CreateSelect( isLeftGreaterThanRight, right, irBuilder.CreateBitCast( // If the numbers compare as equal, they may be zero with different signs. // Do a bitwise or of the pair to ensure that if either is negative, the // result will be negative. irBuilder.CreateOr(irBuilder.CreateBitCast(left, intType), irBuilder.CreateBitCast(right, intType)), floatType))))); } static llvm::Value* emitFloatMax(EmitFunctionContext& context, llvm::Value* left, llvm::Value* right, llvm::Type* intType, llvm::Value* quietNaNMask) { llvm::IRBuilder<>& irBuilder = context.irBuilder; llvm::Type* floatType = left->getType(); llvm::Value* isLeftNaN = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, left, left); llvm::Value* isRightNaN = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_UNO, right, right); llvm::Value* isLeftLessThanRight = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OLT, left, right); llvm::Value* isLeftGreaterThanRight = irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OGT, left, right); return irBuilder.CreateSelect( isLeftNaN, quietNaN(context, left, quietNaNMask), irBuilder.CreateSelect( isRightNaN, quietNaN(context, right, quietNaNMask), irBuilder.CreateSelect( isLeftLessThanRight, right, irBuilder.CreateSelect( isLeftGreaterThanRight, left, irBuilder.CreateBitCast( // If the numbers compare as equal, they may be zero with different signs. // Do a bitwise and of the pair to ensure that if either is positive, the // result will be positive. irBuilder.CreateAnd(irBuilder.CreateBitCast(left, intType), irBuilder.CreateBitCast(right, intType)), floatType))))); } EMIT_FP_BINARY_OP( min, emitFloatMin(*this, left, right, type == ValueType::f32 ? llvmContext.i32Type : llvmContext.i64Type, type == ValueType::f32 ? emitLiteral(llvmContext, FloatComponents::canonicalSignificand) : emitLiteral(llvmContext, FloatComponents::canonicalSignificand))) EMIT_FP_BINARY_OP( max, emitFloatMax(*this, left, right, type == ValueType::f32 ? llvmContext.i32Type : llvmContext.i64Type, type == ValueType::f32 ? emitLiteral(llvmContext, FloatComponents::canonicalSignificand) : emitLiteral(llvmContext, FloatComponents::canonicalSignificand))) EMIT_FP_UNARY_OP(ceil, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::ceil, {operand})) EMIT_FP_UNARY_OP(floor, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::floor, {operand})) EMIT_FP_UNARY_OP(trunc, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::trunc, {operand})) EMIT_FP_UNARY_OP(nearest, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::rint, {operand})) EMIT_SIMD_INT_BINARY_OP(add, irBuilder.CreateAdd(left, right)) EMIT_SIMD_INT_BINARY_OP(sub, irBuilder.CreateSub(left, right)) #define EMIT_SIMD_SHIFT_OP(name, llvmType, createShift) \ void EmitFunctionContext::name(IR::NoImm) \ { \ FixedVectorType* vectorType = llvmType; \ llvm::Type* scalarType = llvmType->getScalarType(); \ WAVM_SUPPRESS_UNUSED(vectorType); \ auto right = irBuilder.CreateVectorSplat( \ (unsigned int)vectorType->getNumElements(), \ irBuilder.CreateZExtOrTrunc( \ emitShiftCountMask(*this, pop(), scalarType->getIntegerBitWidth()), scalarType)); \ WAVM_SUPPRESS_UNUSED(right); \ auto left = irBuilder.CreateBitCast(pop(), llvmType); \ WAVM_SUPPRESS_UNUSED(left); \ auto result = createShift(left, right); \ push(result); \ } #define EMIT_SIMD_SHIFT(name, emitCode) \ EMIT_SIMD_SHIFT_OP(i8x16_##name, llvmContext.i8x16Type, emitCode) \ EMIT_SIMD_SHIFT_OP(i16x8_##name, llvmContext.i16x8Type, emitCode) \ EMIT_SIMD_SHIFT_OP(i32x4_##name, llvmContext.i32x4Type, emitCode) \ EMIT_SIMD_SHIFT_OP(i64x2_##name, llvmContext.i64x2Type, emitCode) EMIT_SIMD_SHIFT(shl, irBuilder.CreateShl) EMIT_SIMD_SHIFT(shr_s, irBuilder.CreateAShr) EMIT_SIMD_SHIFT(shr_u, irBuilder.CreateLShr) EMIT_SIMD_BINARY_OP(i16x8_mul, llvmContext.i16x8Type, irBuilder.CreateMul(left, right)) EMIT_SIMD_BINARY_OP(i32x4_mul, llvmContext.i32x4Type, irBuilder.CreateMul(left, right)) EMIT_SIMD_BINARY_OP(i64x2_mul, llvmContext.i64x2Type, irBuilder.CreateMul(left, right)) #define EMIT_INT_COMPARE_OP(name, llvmOperandType, llvmDestType, pred, zextOrSext) \ void EmitFunctionContext::name(IR::NoImm) \ { \ auto right = irBuilder.CreateBitCast(pop(), llvmOperandType); \ auto left = irBuilder.CreateBitCast(pop(), llvmOperandType); \ push(zextOrSext(irBuilder.CreateICmp(pred, left, right), llvmDestType)); \ } #define EMIT_INT_COMPARE_U(name, pred) \ EMIT_INT_COMPARE_OP(i32_##name, llvmContext.i32Type, llvmContext.i32Type, pred, zext) \ EMIT_INT_COMPARE_OP(i64_##name, llvmContext.i64Type, llvmContext.i32Type, pred, zext) \ EMIT_INT_COMPARE_OP(i8x16_##name, llvmContext.i8x16Type, llvmContext.i8x16Type, pred, sext) \ EMIT_INT_COMPARE_OP(i16x8_##name, llvmContext.i16x8Type, llvmContext.i16x8Type, pred, sext) \ EMIT_INT_COMPARE_OP(i32x4_##name, llvmContext.i32x4Type, llvmContext.i32x4Type, pred, sext) \ /* WebAssembly doesn't define unsigned compare ops for i64x2 */ #define EMIT_INT_COMPARE_S(name, pred) \ EMIT_INT_COMPARE_U(name, pred) \ EMIT_INT_COMPARE_OP(i64x2_##name, llvmContext.i64x2Type, llvmContext.i64x2Type, pred, sext) EMIT_INT_COMPARE_S(eq, llvm::CmpInst::ICMP_EQ) EMIT_INT_COMPARE_S(ne, llvm::CmpInst::ICMP_NE) EMIT_INT_COMPARE_S(lt_s, llvm::CmpInst::ICMP_SLT) EMIT_INT_COMPARE_U(lt_u, llvm::CmpInst::ICMP_ULT) EMIT_INT_COMPARE_S(le_s, llvm::CmpInst::ICMP_SLE) EMIT_INT_COMPARE_U(le_u, llvm::CmpInst::ICMP_ULE) EMIT_INT_COMPARE_S(gt_s, llvm::CmpInst::ICMP_SGT) EMIT_INT_COMPARE_U(gt_u, llvm::CmpInst::ICMP_UGT) EMIT_INT_COMPARE_S(ge_s, llvm::CmpInst::ICMP_SGE) EMIT_INT_COMPARE_U(ge_u, llvm::CmpInst::ICMP_UGE) EMIT_SIMD_INT_UNARY_OP(neg, irBuilder.CreateNeg(operand)) static llvm::Value* emitAddUnsignedSaturated(llvm::IRBuilder<>& irBuilder, llvm::Value* left, llvm::Value* right, llvm::Type* type) { left = irBuilder.CreateBitCast(left, type); right = irBuilder.CreateBitCast(right, type); llvm::Value* add = irBuilder.CreateAdd(left, right); return irBuilder.CreateSelect( irBuilder.CreateICmpUGT(left, add), llvm::Constant::getAllOnesValue(left->getType()), add); } static llvm::Value* emitSubUnsignedSaturated(llvm::IRBuilder<>& irBuilder, llvm::Value* left, llvm::Value* right, llvm::Type* type) { left = irBuilder.CreateBitCast(left, type); right = irBuilder.CreateBitCast(right, type); return irBuilder.CreateSub( irBuilder.CreateSelect( irBuilder.CreateICmp(llvm::CmpInst::ICMP_UGT, left, right), left, right), right); } EMIT_SIMD_BINARY_OP(i8x16_add_sat_u, llvmContext.i8x16Type, emitAddUnsignedSaturated(irBuilder, left, right, llvmContext.i8x16Type)) EMIT_SIMD_BINARY_OP(i8x16_sub_sat_u, llvmContext.i8x16Type, emitSubUnsignedSaturated(irBuilder, left, right, llvmContext.i8x16Type)) EMIT_SIMD_BINARY_OP(i16x8_add_sat_u, llvmContext.i16x8Type, emitAddUnsignedSaturated(irBuilder, left, right, llvmContext.i16x8Type)) EMIT_SIMD_BINARY_OP(i16x8_sub_sat_u, llvmContext.i16x8Type, emitSubUnsignedSaturated(irBuilder, left, right, llvmContext.i16x8Type)) EMIT_SIMD_BINARY_OP(i8x16_add_sat_s, llvmContext.i8x16Type, callLLVMIntrinsic({llvmContext.i8x16Type}, llvm::Intrinsic::sadd_sat, {left, right})) EMIT_SIMD_BINARY_OP(i8x16_sub_sat_s, llvmContext.i8x16Type, callLLVMIntrinsic({llvmContext.i8x16Type}, llvm::Intrinsic::ssub_sat, {left, right})) EMIT_SIMD_BINARY_OP(i16x8_add_sat_s, llvmContext.i16x8Type, callLLVMIntrinsic({llvmContext.i16x8Type}, llvm::Intrinsic::sadd_sat, {left, right})) EMIT_SIMD_BINARY_OP(i16x8_sub_sat_s, llvmContext.i16x8Type, callLLVMIntrinsic({llvmContext.i16x8Type}, llvm::Intrinsic::ssub_sat, {left, right})) #define EMIT_SIMD_INT_BINARY_OP_NO64(name, emitCode) \ EMIT_SIMD_BINARY_OP(i8x16##_##name, llvmContext.i8x16Type, emitCode) \ EMIT_SIMD_BINARY_OP(i16x8##_##name, llvmContext.i16x8Type, emitCode) \ EMIT_SIMD_BINARY_OP(i32x4##_##name, llvmContext.i32x4Type, emitCode) EMIT_SIMD_INT_BINARY_OP_NO64(min_s, irBuilder.CreateSelect(irBuilder.CreateICmpSLT(left, right), left, right)) EMIT_SIMD_INT_BINARY_OP_NO64(min_u, irBuilder.CreateSelect(irBuilder.CreateICmpULT(left, right), left, right)) EMIT_SIMD_INT_BINARY_OP_NO64(max_s, irBuilder.CreateSelect(irBuilder.CreateICmpSLT(left, right), right, left)) EMIT_SIMD_INT_BINARY_OP_NO64(max_u, irBuilder.CreateSelect(irBuilder.CreateICmpULT(left, right), right, left)) llvm::Value* EmitFunctionContext::emitBitSelect(llvm::Value* mask, llvm::Value* trueValue, llvm::Value* falseValue) { return irBuilder.CreateOr(irBuilder.CreateAnd(trueValue, mask), irBuilder.CreateAnd(falseValue, irBuilder.CreateNot(mask))); } llvm::Value* EmitFunctionContext::emitVectorSelect(llvm::Value* condition, llvm::Value* trueValue, llvm::Value* falseValue) { WAVM_ASSERT(condition->getType()->isVectorTy()); llvm::Type* maskScalarType; switch(trueValue->getType()->getScalarSizeInBits()) { case 64: maskScalarType = llvmContext.i64Type; break; case 32: maskScalarType = llvmContext.i32Type; break; case 16: maskScalarType = llvmContext.i16Type; break; case 8: maskScalarType = llvmContext.i8Type; break; default: WAVM_UNREACHABLE(); }; const U32 numElements = U32(static_cast(condition->getType())->getNumElements()); llvm::Type* maskType = FixedVectorType::get(maskScalarType, numElements); llvm::Value* mask = sext(condition, maskType); return irBuilder.CreateBitCast(emitBitSelect(mask, irBuilder.CreateBitCast(trueValue, maskType), irBuilder.CreateBitCast(falseValue, maskType)), trueValue->getType()); } EMIT_SIMD_FP_BINARY_OP(add, irBuilder.CreateFAdd(left, right)) EMIT_SIMD_FP_BINARY_OP(sub, irBuilder.CreateFSub(left, right)) EMIT_SIMD_FP_BINARY_OP(mul, irBuilder.CreateFMul(left, right)) EMIT_SIMD_FP_BINARY_OP(div, irBuilder.CreateFDiv(left, right)) // // SIMD minimum // EMIT_SIMD_BINARY_OP(f32x4_min, llvmContext.f32x4Type, emitFloatMin(*this, left, right, llvmContext.i32x4Type, irBuilder.CreateVectorSplat( 4, emitLiteral(llvmContext, FloatComponents::canonicalSignificand)))) EMIT_SIMD_BINARY_OP(f64x2_min, llvmContext.f64x2Type, emitFloatMin(*this, left, right, llvmContext.i64x2Type, irBuilder.CreateVectorSplat( 2, emitLiteral(llvmContext, FloatComponents::canonicalSignificand)))) // // SIMD maximum // EMIT_SIMD_BINARY_OP(f32x4_max, llvmContext.f32x4Type, emitFloatMax(*this, left, right, llvmContext.i32x4Type, irBuilder.CreateVectorSplat( 4, emitLiteral(llvmContext, FloatComponents::canonicalSignificand)))) EMIT_SIMD_BINARY_OP(f64x2_max, llvmContext.f64x2Type, emitFloatMax(*this, left, right, llvmContext.i64x2Type, irBuilder.CreateVectorSplat( 2, emitLiteral(llvmContext, FloatComponents::canonicalSignificand)))) // // SIMD pseudo-minimum: right < left ? right : left // EMIT_SIMD_BINARY_OP( f32x4_pmin, llvmContext.f32x4Type, irBuilder.CreateSelect(irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OLT, right, left), right, left)) EMIT_SIMD_BINARY_OP( f64x2_pmin, llvmContext.f64x2Type, irBuilder.CreateSelect(irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OLT, right, left), right, left)) // // SIMD pseudo-maximum: left < right ? right : left // EMIT_SIMD_BINARY_OP( f32x4_pmax, llvmContext.f32x4Type, irBuilder.CreateSelect(irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OLT, left, right), right, left)) EMIT_SIMD_BINARY_OP( f64x2_pmax, llvmContext.f64x2Type, irBuilder.CreateSelect(irBuilder.CreateFCmp(llvm::CmpInst::FCMP_OLT, left, right), right, left)) EMIT_SIMD_FP_UNARY_OP(neg, irBuilder.CreateFNeg(operand)) EMIT_SIMD_FP_UNARY_OP(abs, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::fabs, {operand})) EMIT_SIMD_FP_UNARY_OP(sqrt, callLLVMIntrinsic({operand->getType()}, llvm::Intrinsic::sqrt, {operand})) void EmitFunctionContext::v128_any_true(IR::NoImm) { llvm::Value* vector = pop(); vector = irBuilder.CreateBitCast(vector, llvmContext.i64x2Type); llvm::Constant* zero = emitLiteral(llvmContext, U64(0)); llvm::Value* boolResult = irBuilder.CreateOr( irBuilder.CreateICmpNE(irBuilder.CreateExtractElement(vector, U64(0)), zero), irBuilder.CreateICmpNE(irBuilder.CreateExtractElement(vector, U64(1)), zero)); llvm::Value* i32Result = irBuilder.CreateZExt(boolResult, llvm::Type::getInt32Ty(irBuilder.getContext())); push(i32Result); } static llvm::Value* emitAllTrue(llvm::IRBuilder<>& irBuilder, llvm::Value* vector, FixedVectorType* vectorType) { vector = irBuilder.CreateBitCast(vector, vectorType); const U32 numScalarBits = vectorType->getScalarSizeInBits(); const Uptr numLanes = vectorType->getNumElements(); llvm::Constant* zero = llvm::ConstantInt::get(vectorType->getScalarType(), llvm::APInt(numScalarBits, 0)); llvm::Value* result = nullptr; for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { llvm::Value* scalar = irBuilder.CreateExtractElement(vector, laneIndex); llvm::Value* scalarBool = irBuilder.CreateICmpNE(scalar, zero); result = result ? irBuilder.CreateAnd(result, scalarBool) : scalarBool; } return irBuilder.CreateZExt(result, llvm::Type::getInt32Ty(irBuilder.getContext())); } EMIT_SIMD_UNARY_OP(i8x16_all_true, llvmContext.i8x16Type, emitAllTrue(irBuilder, operand, llvmContext.i8x16Type)) EMIT_SIMD_UNARY_OP(i16x8_all_true, llvmContext.i16x8Type, emitAllTrue(irBuilder, operand, llvmContext.i16x8Type)) EMIT_SIMD_UNARY_OP(i32x4_all_true, llvmContext.i32x4Type, emitAllTrue(irBuilder, operand, llvmContext.i32x4Type)) EMIT_SIMD_UNARY_OP(i64x2_all_true, llvmContext.i64x2Type, emitAllTrue(irBuilder, operand, llvmContext.i64x2Type)) void EmitFunctionContext::v128_and(IR::NoImm) { auto right = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto left = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); push(irBuilder.CreateAnd(left, right)); } void EmitFunctionContext::v128_or(IR::NoImm) { auto right = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto left = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); push(irBuilder.CreateOr(left, right)); } void EmitFunctionContext::v128_xor(IR::NoImm) { auto right = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto left = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); push(irBuilder.CreateXor(left, right)); } void EmitFunctionContext::v128_not(IR::NoImm) { auto operand = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); push(irBuilder.CreateNot(operand)); } void EmitFunctionContext::v128_andnot(IR::NoImm) { auto right = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto left = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); push(irBuilder.CreateAnd(left, irBuilder.CreateNot(right))); } // // SIMD extract_lane // #define EMIT_SIMD_EXTRACT_LANE_OP(name, llvmType, numLanes, coerceScalar) \ void EmitFunctionContext::name(IR::LaneIndexImm imm) \ { \ auto operand = irBuilder.CreateBitCast(pop(), llvmType); \ auto scalar = irBuilder.CreateExtractElement(operand, imm.laneIndex); \ push(coerceScalar); \ } EMIT_SIMD_EXTRACT_LANE_OP(i8x16_extract_lane_s, llvmContext.i8x16Type, 16, sext(scalar, llvmContext.i32Type)) EMIT_SIMD_EXTRACT_LANE_OP(i8x16_extract_lane_u, llvmContext.i8x16Type, 16, zext(scalar, llvmContext.i32Type)) EMIT_SIMD_EXTRACT_LANE_OP(i16x8_extract_lane_s, llvmContext.i16x8Type, 8, sext(scalar, llvmContext.i32Type)) EMIT_SIMD_EXTRACT_LANE_OP(i16x8_extract_lane_u, llvmContext.i16x8Type, 8, zext(scalar, llvmContext.i32Type)) EMIT_SIMD_EXTRACT_LANE_OP(i32x4_extract_lane, llvmContext.i32x4Type, 4, scalar) EMIT_SIMD_EXTRACT_LANE_OP(i64x2_extract_lane, llvmContext.i64x2Type, 2, scalar) EMIT_SIMD_EXTRACT_LANE_OP(f32x4_extract_lane, llvmContext.f32x4Type, 4, scalar) EMIT_SIMD_EXTRACT_LANE_OP(f64x2_extract_lane, llvmContext.f64x2Type, 2, scalar) // // SIMD replace_lane // #define EMIT_SIMD_REPLACE_LANE_OP(typePrefix, llvmType, numLanes, coerceScalar) \ void EmitFunctionContext::typePrefix##_replace_lane(IR::LaneIndexImm imm) \ { \ auto scalar = pop(); \ auto vector = irBuilder.CreateBitCast(pop(), llvmType); \ push(irBuilder.CreateInsertElement(vector, coerceScalar, imm.laneIndex)); \ } EMIT_SIMD_REPLACE_LANE_OP(i8x16, llvmContext.i8x16Type, 16, trunc(scalar, llvmContext.i8Type)) EMIT_SIMD_REPLACE_LANE_OP(i16x8, llvmContext.i16x8Type, 8, trunc(scalar, llvmContext.i16Type)) EMIT_SIMD_REPLACE_LANE_OP(i32x4, llvmContext.i32x4Type, 4, scalar) EMIT_SIMD_REPLACE_LANE_OP(i64x2, llvmContext.i64x2Type, 2, scalar) EMIT_SIMD_REPLACE_LANE_OP(f32x4, llvmContext.f32x4Type, 4, scalar) EMIT_SIMD_REPLACE_LANE_OP(f64x2, llvmContext.f64x2Type, 2, scalar) void EmitFunctionContext::i8x16_swizzle(NoImm) { auto indexVector = irBuilder.CreateBitCast(pop(), llvmContext.i8x16Type); auto elementVector = irBuilder.CreateBitCast(pop(), llvmContext.i8x16Type); if(moduleContext.targetArch == llvm::Triple::x86_64 || moduleContext.targetArch == llvm::Triple::x86) { // WASM defines any out-of-range index to write zero to the output vector, but x86 pshufb // just uses the index modulo 16, and only writes zero if the MSB of the index is 1. Do a // saturated add of 112 to set the MSB in any index >= 16 while leaving the index modulo 16 // unchanged. auto constant112 = llvm::ConstantInt::get(llvmContext.i8Type, 112); auto saturatedIndexVector = emitAddUnsignedSaturated( irBuilder, indexVector, llvm::ConstantVector::getSplat(LLVM_ELEMENT_COUNT(16), constant112), llvmContext.i8x16Type); push(callLLVMIntrinsic( {}, llvm::Intrinsic::x86_ssse3_pshuf_b_128, {elementVector, saturatedIndexVector})); } else if(moduleContext.targetArch == llvm::Triple::aarch64) { push(callLLVMIntrinsic({llvmContext.i8x16Type}, llvm::Intrinsic::aarch64_neon_tbl1, {elementVector, indexVector})); } } void EmitFunctionContext::i8x16_shuffle(IR::ShuffleImm<16> imm) { auto right = irBuilder.CreateBitCast(pop(), llvmContext.i8x16Type); auto left = irBuilder.CreateBitCast(pop(), llvmContext.i8x16Type); LLVM_LANE_INDEX_TYPE laneIndices[16]; for(Uptr laneIndex = 0; laneIndex < 16; ++laneIndex) { laneIndices[laneIndex] = LLVM_LANE_INDEX_TYPE(imm.laneIndices[laneIndex]); } push(irBuilder.CreateShuffleVector( left, right, llvm::ArrayRef(laneIndices, 16))); } void EmitFunctionContext::v128_bitselect(IR::NoImm) { auto mask = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto falseValue = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); auto trueValue = irBuilder.CreateBitCast(pop(), llvmContext.i64x2Type); push(emitBitSelect(mask, trueValue, falseValue)); } #define EMIT_SIMD_AVGR_OP(type, doubleWidthType) \ void EmitFunctionContext::type##_avgr_u(IR::NoImm) \ { \ auto right = irBuilder.CreateBitCast(pop(), llvmContext.type##Type); \ auto left = irBuilder.CreateBitCast(pop(), llvmContext.type##Type); \ auto rightZExt = irBuilder.CreateZExt(right, llvmContext.doubleWidthType##Type); \ auto leftZExt = irBuilder.CreateZExt(left, llvmContext.doubleWidthType##Type); \ auto oneZExt = llvm::ConstantVector::getSplat( \ LLVM_ELEMENT_COUNT(llvmContext.type##Type->getNumElements()), \ llvm::ConstantInt::get(llvmContext.doubleWidthType##Type->getElementType(), 1)); \ push(irBuilder.CreateTrunc( \ irBuilder.CreateLShr( \ irBuilder.CreateAdd(irBuilder.CreateAdd(leftZExt, rightZExt), oneZExt), oneZExt), \ llvmContext.type##Type)); \ } EMIT_SIMD_AVGR_OP(i8x16, i16x16) EMIT_SIMD_AVGR_OP(i16x8, i32x8) // SIMD integer absolute #define EMIT_SIMD_INT_ABS_OP(type) \ void EmitFunctionContext::type##_abs(IR::NoImm) \ { \ auto operand = irBuilder.CreateBitCast(pop(), llvmContext.type##Type); \ push(irBuilder.CreateSelect( \ irBuilder.CreateICmpSLT(operand, \ llvm::Constant::getNullValue(llvmContext.type##Type)), \ irBuilder.CreateNeg(operand), \ operand)); \ } EMIT_SIMD_INT_ABS_OP(i8x16) EMIT_SIMD_INT_ABS_OP(i16x8) EMIT_SIMD_INT_ABS_OP(i32x4) EMIT_SIMD_INT_ABS_OP(i64x2) // // SIMD extending integer multiplication // #define EMIT_SIMD_EXTMUL(destType, _highlow_, sourceType, _su, baseSourceElementIndex, extend) \ void EmitFunctionContext::destType##_extmul##_highlow_##sourceType##_su(NoImm) \ { \ llvm::Value* right = pop(); \ llvm::Value* left = pop(); \ left = irBuilder.CreateBitCast(left, llvmContext.sourceType##Type); \ right = irBuilder.CreateBitCast(right, llvmContext.sourceType##Type); \ left = extendHalfOfIntVector(left, baseSourceElementIndex, &EmitFunctionContext::extend); \ right \ = extendHalfOfIntVector(right, baseSourceElementIndex, &EmitFunctionContext::extend); \ llvm::Value* result = irBuilder.CreateMul(left, right); \ push(result); \ } #define EMIT_SIMD_EXTMUL_HIGHLOW_SU(destType, sourceType, numDestElements) \ EMIT_SIMD_EXTMUL(destType, _high_, sourceType, _s, numDestElements, sext) \ EMIT_SIMD_EXTMUL(destType, _high_, sourceType, _u, numDestElements, zext) \ EMIT_SIMD_EXTMUL(destType, _low_, sourceType, _s, 0, sext) \ EMIT_SIMD_EXTMUL(destType, _low_, sourceType, _u, 0, zext) EMIT_SIMD_EXTMUL_HIGHLOW_SU(i16x8, i8x16, 8) EMIT_SIMD_EXTMUL_HIGHLOW_SU(i32x4, i16x8, 4) EMIT_SIMD_EXTMUL_HIGHLOW_SU(i64x2, i32x4, 2) // // SIMD extending integer addition // #define EMIT_SIMD_EXTADD(type, halfType, _su, numOutputElements, extend) \ void EmitFunctionContext::type##_extadd_pairwise_##halfType##_su(NoImm) \ { \ llvm::Value* vector = pop(); \ vector = irBuilder.CreateBitCast(vector, llvmContext.halfType##Type); \ LLVM_LANE_INDEX_TYPE evenMask[numOutputElements]; \ LLVM_LANE_INDEX_TYPE oddMask[numOutputElements]; \ for(int elementIndex = 0; elementIndex < numOutputElements; ++elementIndex) \ { \ evenMask[elementIndex] = elementIndex * 2 + 0; \ oddMask[elementIndex] = elementIndex * 2 + 1; \ } \ llvm::Constant* undefVector = llvm::UndefValue::get(vector->getType()); \ llvm::Value* evenVector = irBuilder.CreateShuffleVector( \ vector, \ undefVector, \ llvm::ArrayRef(evenMask, numOutputElements)); \ llvm::Value* oddVector = irBuilder.CreateShuffleVector( \ vector, \ undefVector, \ llvm::ArrayRef(oddMask, numOutputElements)); \ llvm::Value* result = irBuilder.CreateAdd(extend(evenVector, llvmContext.type##Type), \ extend(oddVector, llvmContext.type##Type)); \ push(result); \ } EMIT_SIMD_EXTADD(i16x8, i8x16, _s, 8, sext) EMIT_SIMD_EXTADD(i16x8, i8x16, _u, 8, zext) EMIT_SIMD_EXTADD(i32x4, i16x8, _s, 4, sext) EMIT_SIMD_EXTADD(i32x4, i16x8, _u, 4, zext) // // SIMD dot product // void EmitFunctionContext::i32x4_dot_i16x8_s(NoImm) { llvm::Value* right = irBuilder.CreateBitCast(pop(), llvmContext.i16x8Type); llvm::Value* left = irBuilder.CreateBitCast(pop(), llvmContext.i16x8Type); left = irBuilder.CreateSExt(left, llvmContext.i32x8Type); right = irBuilder.CreateSExt(right, llvmContext.i32x8Type); llvm::Value* product = irBuilder.CreateMul(left, right); constexpr LLVM_LANE_INDEX_TYPE numOutputElements = 4; LLVM_LANE_INDEX_TYPE evenMask[numOutputElements]; LLVM_LANE_INDEX_TYPE oddMask[numOutputElements]; for(LLVM_LANE_INDEX_TYPE elementIndex = 0; elementIndex < numOutputElements; ++elementIndex) { evenMask[elementIndex] = elementIndex * 2 + 0; oddMask[elementIndex] = elementIndex * 2 + 1; } llvm::Constant* undefVector = llvm::UndefValue::get(llvmContext.i32x8Type); llvm::Value* evenVector = irBuilder.CreateShuffleVector( product, undefVector, llvm::ArrayRef(evenMask, numOutputElements)); llvm::Value* oddVector = irBuilder.CreateShuffleVector( product, undefVector, llvm::ArrayRef(oddMask, numOutputElements)); llvm::Value* result = irBuilder.CreateAdd(evenVector, oddVector); push(result); } // // SIMD saturating integer Q-format rounding multiplication. // void EmitFunctionContext::i16x8_q15mulr_sat_s(NoImm) { llvm::Value* right = pop(); llvm::Value* left = pop(); left = irBuilder.CreateBitCast(left, llvmContext.i16x8Type); right = irBuilder.CreateBitCast(right, llvmContext.i16x8Type); // Extend the inputs to 64-bit to avoid overflow. left = irBuilder.CreateSExt(left, llvmContext.i64x8Type); right = irBuilder.CreateSExt(right, llvmContext.i64x8Type); // result = saturateS16((left * right + 0x4000) >> 15) llvm::Value* product = irBuilder.CreateMul(left, right); llvm::Value* sum = irBuilder.CreateAdd( product, irBuilder.CreateVectorSplat(8, emitLiteral(llvmContext, U64(0x4000)))); llvm::Value* shift = irBuilder.CreateAShr(sum, 15); llvm::Value* minSplat = irBuilder.CreateVectorSplat(8, emitLiteral(llvmContext, I64(INT16_MIN))); llvm::Value* maxSplat = irBuilder.CreateVectorSplat(8, emitLiteral(llvmContext, I64(INT16_MAX))); llvm::Value* saturate = irBuilder.CreateSelect( irBuilder.CreateICmpSGT(shift, maxSplat), maxSplat, irBuilder.CreateSelect(irBuilder.CreateICmpSLT(shift, minSplat), minSplat, shift)); llvm::Value* result = irBuilder.CreateTrunc(saturate, llvmContext.i16x8Type); push(result); } ================================================ FILE: Lib/LLVMJIT/EmitTable.cpp ================================================ #include #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/RuntimeABI/RuntimeABI.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM::IR; using namespace WAVM::LLVMJIT; void EmitFunctionContext::ref_null(ReferenceTypeImm imm) { push(llvm::Constant::getNullValue(llvmContext.externrefType)); } void EmitFunctionContext::ref_is_null(NoImm) { llvm::Value* reference = pop(); llvm::Value* null = llvm::Constant::getNullValue(llvmContext.externrefType); llvm::Value* isNull = irBuilder.CreateICmpEQ(reference, null); push(coerceBoolToI32(isNull)); } void EmitFunctionContext::ref_func(FunctionRefImm imm) { llvm::Value* referencedFunction = moduleContext.functions[imm.functionIndex]; llvm::Value* codeAddress = irBuilder.CreatePtrToInt(referencedFunction, moduleContext.iptrType); llvm::Value* functionAddress = irBuilder.CreateSub( codeAddress, emitLiteralIptr(offsetof(Runtime::Function, code), moduleContext.iptrType)); llvm::Value* externref = irBuilder.CreateIntToPtr(functionAddress, llvmContext.externrefType); push(externref); } void EmitFunctionContext::table_get(TableImm imm) { llvm::Value* index = pop(); llvm::Value* result = emitRuntimeIntrinsic( "table.get", FunctionType({ValueType::externref}, TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(index, moduleContext.iptrType), moduleContext.tableIds[imm.tableIndex]})[0]; push(result); } void EmitFunctionContext::table_set(TableImm imm) { llvm::Value* value = pop(); llvm::Value* index = pop(); emitRuntimeIntrinsic( "table.set", FunctionType( {}, TypeTuple( {moduleContext.iptrValueType, ValueType::externref, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(index, moduleContext.iptrType), value, moduleContext.tableIds[imm.tableIndex]}); } void EmitFunctionContext::table_init(ElemSegmentAndTableImm imm) { auto numElements = pop(); auto sourceOffset = pop(); auto destOffset = pop(); emitRuntimeIntrinsic("table.init", FunctionType({}, TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(destOffset, moduleContext.iptrType), zext(sourceOffset, moduleContext.iptrType), zext(numElements, moduleContext.iptrType), moduleContext.instanceId, moduleContext.tableIds[imm.tableIndex], emitLiteralIptr(imm.elemSegmentIndex, moduleContext.iptrType)}); } void EmitFunctionContext::elem_drop(ElemSegmentImm imm) { emitRuntimeIntrinsic( "elem.drop", FunctionType({}, TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {moduleContext.instanceId, emitLiteral(llvmContext, imm.elemSegmentIndex)}); } void EmitFunctionContext::table_copy(TableCopyImm imm) { auto numElements = pop(); auto sourceOffset = pop(); auto destOffset = pop(); emitRuntimeIntrinsic("table.copy", FunctionType({}, TypeTuple({moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(destOffset, moduleContext.iptrType), zext(sourceOffset, moduleContext.iptrType), zext(numElements, moduleContext.iptrType), moduleContext.tableIds[imm.destTableIndex], moduleContext.tableIds[imm.sourceTableIndex]}); } void EmitFunctionContext::table_fill(TableImm imm) { auto numElements = pop(); auto value = pop(); auto destOffset = pop(); emitRuntimeIntrinsic("table.fill", FunctionType({}, TypeTuple({moduleContext.iptrValueType, ValueType::externref, moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {zext(destOffset, moduleContext.iptrType), value, zext(numElements, moduleContext.iptrType), moduleContext.tableIds[imm.tableIndex]}); } void EmitFunctionContext::table_grow(TableImm imm) { llvm::Value* deltaNumElements = pop(); llvm::Value* value = pop(); ValueVector previousNumElements = emitRuntimeIntrinsic( "table.grow", FunctionType( TypeTuple(moduleContext.iptrValueType), TypeTuple( {ValueType::externref, moduleContext.iptrValueType, moduleContext.iptrValueType}), IR::CallingConvention::intrinsic), {value, zext(deltaNumElements, moduleContext.iptrType), moduleContext.tableIds[imm.tableIndex]}); WAVM_ASSERT(previousNumElements.size() == 1); const TableType& tableType = moduleContext.irModule.tables.getType(imm.tableIndex); push(coerceIptrToIndex(tableType.indexType, previousNumElements[0])); } void EmitFunctionContext::table_size(TableImm imm) { ValueVector currentNumElements = emitRuntimeIntrinsic("table.size", FunctionType(TypeTuple(moduleContext.iptrValueType), TypeTuple(moduleContext.iptrValueType), IR::CallingConvention::intrinsic), {moduleContext.tableIds[imm.tableIndex]}); WAVM_ASSERT(currentNumElements.size() == 1); const TableType& tableType = moduleContext.irModule.tables.getType(imm.tableIndex); push(coerceIptrToIndex(tableType.indexType, currentNumElements[0])); } ================================================ FILE: Lib/LLVMJIT/EmitVar.cpp ================================================ #include #include #include "EmitFunctionContext.h" #include "EmitModuleContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; // // Local variables // void EmitFunctionContext::local_get(GetOrSetVariableImm imm) { WAVM_ASSERT(imm.variableIndex < locals.size()); const Local& local = locals[imm.variableIndex]; push(irBuilder.CreateLoad(local.type, local.pointer)); } void EmitFunctionContext::local_set(GetOrSetVariableImm imm) { WAVM_ASSERT(imm.variableIndex < locals.size()); const Local& local = locals[imm.variableIndex]; auto value = irBuilder.CreateBitCast(pop(), local.type); irBuilder.CreateStore(value, local.pointer); } void EmitFunctionContext::local_tee(GetOrSetVariableImm imm) { WAVM_ASSERT(imm.variableIndex < locals.size()); const Local& local = locals[imm.variableIndex]; auto value = irBuilder.CreateBitCast(getValueFromTop(), local.type); irBuilder.CreateStore(value, local.pointer); } // // Global variables // static llvm::Value* getImportedImmutableGlobalValue(EmitFunctionContext& functionContext, Uptr importedGlobalIndex, ValueType valueType) { // The symbol for an imported global will point to the global's immutable value. return functionContext.loadFromUntypedPointer( functionContext.moduleContext.globals[importedGlobalIndex], asLLVMType(functionContext.llvmContext, valueType), getTypeByteWidth(valueType)); } void EmitFunctionContext::global_get(GetOrSetVariableImm imm) { WAVM_ASSERT(imm.variableIndex < irModule.globals.size()); GlobalType globalType = irModule.globals.getType(imm.variableIndex); llvm::Value* value = nullptr; if(globalType.isMutable) { // If the global is mutable, the symbol will be bound to an offset into the // ContextRuntimeData::globalData that its value is stored at. llvm::Value* globalDataOffset = irBuilder.CreatePtrToInt( moduleContext.globals[imm.variableIndex], moduleContext.iptrType); llvm::Value* globalPointer = irBuilder.CreateInBoundsGEP( llvmContext.i8Type, irBuilder.CreateLoad(llvmContext.ptrType, contextPointerVariable), {globalDataOffset}); value = loadFromUntypedPointer(globalPointer, asLLVMType(llvmContext, globalType.valueType), getTypeByteWidth(globalType.valueType)); } else if(!irModule.globals.isDef(imm.variableIndex)) { value = getImportedImmutableGlobalValue(*this, imm.variableIndex, globalType.valueType); } else { // If the value is an immutable global definition, emit its literal value. const IR::GlobalDef& globalDef = irModule.globals.getDef(imm.variableIndex); switch(globalDef.initializer.type) { case InitializerExpression::Type::i32_const: value = emitLiteral(llvmContext, globalDef.initializer.i32); break; case InitializerExpression::Type::i64_const: value = emitLiteral(llvmContext, globalDef.initializer.i64); break; case InitializerExpression::Type::f32_const: value = emitLiteral(llvmContext, globalDef.initializer.f32); break; case InitializerExpression::Type::f64_const: value = emitLiteral(llvmContext, globalDef.initializer.f64); break; case InitializerExpression::Type::v128_const: value = emitLiteral(llvmContext, globalDef.initializer.v128); break; case InitializerExpression::Type::global_get: { const Uptr importedGlobalIndex = globalDef.initializer.ref; WAVM_ASSERT(!irModule.globals.isDef(importedGlobalIndex)); WAVM_ASSERT(!irModule.globals.getType(importedGlobalIndex).isMutable); value = getImportedImmutableGlobalValue(*this, importedGlobalIndex, globalType.valueType); break; } case InitializerExpression::Type::ref_null: value = llvm::Constant::getNullValue(llvmContext.externrefType); break; case InitializerExpression::Type::ref_func: { llvm::Value* referencedFunction = moduleContext.functions[globalDef.initializer.ref]; llvm::Value* codeAddress = irBuilder.CreatePtrToInt(referencedFunction, moduleContext.iptrType); llvm::Value* functionAddress = irBuilder.CreateSub( codeAddress, emitLiteralIptr(offsetof(Runtime::Function, code), moduleContext.iptrType)); llvm::Value* externref = irBuilder.CreateIntToPtr(functionAddress, llvmContext.externrefType); value = externref; break; } case InitializerExpression::Type::invalid: default: WAVM_UNREACHABLE(); }; } push(value); } void EmitFunctionContext::global_set(GetOrSetVariableImm imm) { WAVM_ASSERT(imm.variableIndex < irModule.globals.size()); GlobalType globalType = irModule.globals.getType(imm.variableIndex); WAVM_ASSERT(globalType.isMutable); llvm::Type* llvmValueType = asLLVMType(llvmContext, globalType.valueType); llvm::Value* value = irBuilder.CreateBitCast(pop(), llvmValueType); // If the global is mutable, the symbol will be bound to an offset into the // ContextRuntimeData::globalData that its value is stored at. llvm::Value* globalDataOffset = irBuilder.CreatePtrToInt( moduleContext.globals[imm.variableIndex], moduleContext.iptrType); llvm::Value* globalPointer = irBuilder.CreateInBoundsGEP( llvmContext.i8Type, irBuilder.CreateLoad(llvmContext.ptrType, contextPointerVariable), {globalDataOffset}); storeToUntypedPointer(value, globalPointer); } ================================================ FILE: Lib/LLVMJIT/GDBRegistration.cpp ================================================ // GDB JIT Interface - allows GDB to see JIT-compiled code. // See: https://sourceware.org/gdb/current/onlinedocs/gdb.html/JIT-Interface.html #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Mutex.h" using namespace WAVM; extern "C" { struct JITCodeEntry { JITCodeEntry* nextEntry; JITCodeEntry* prevEntry; const char* symfileAddr; U64 symfileSize; }; struct JITDescriptor { U32 version; U32 actionFlag; // 0 = no action, 1 = register, 2 = unregister JITCodeEntry* relevantEntry; JITCodeEntry* firstEntry; }; // GDB puts a breakpoint on this function and inspects __jit_debug_descriptor when it's called. // The noinline and the asm prevent calls to this function from being optimized out. // Both symbols must have default visibility so GDB can find them despite -fvisibility=hidden. #if defined(__GNUC__) || defined(__clang__) #define WAVM_GDB_VISIBLE __attribute__((visibility("default"))) #else #define WAVM_GDB_VISIBLE #endif WAVM_GDB_VISIBLE WAVM_FORCENOINLINE void __jit_debug_register_code() { #if !defined(_MSC_VER) asm volatile("" ::: "memory"); #endif } // Must be named exactly __jit_debug_descriptor for GDB to find it. WAVM_GDB_VISIBLE JITDescriptor __jit_debug_descriptor = {1, 0, nullptr, nullptr}; } static Platform::Mutex gdbJITMutex; namespace WAVM { namespace LLVMJIT { void* registerObjectWithGDB(const U8* objectBytes, Uptr objectSize) { Platform::Mutex::Lock lock(gdbJITMutex); JITCodeEntry* entry = new JITCodeEntry; entry->symfileAddr = reinterpret_cast(objectBytes); entry->symfileSize = objectSize; // Insert at head of linked list. entry->prevEntry = nullptr; entry->nextEntry = ::__jit_debug_descriptor.firstEntry; if(entry->nextEntry) { entry->nextEntry->prevEntry = entry; } ::__jit_debug_descriptor.firstEntry = entry; // Notify GDB. ::__jit_debug_descriptor.relevantEntry = entry; ::__jit_debug_descriptor.actionFlag = 1; // JIT_REGISTER_FN ::__jit_debug_register_code(); return entry; } void unregisterObjectWithGDB(void* handle) { if(!handle) { return; } Platform::Mutex::Lock lock(gdbJITMutex); JITCodeEntry* entry = static_cast(handle); // Remove from linked list. if(entry->prevEntry) { entry->prevEntry->nextEntry = entry->nextEntry; } else { ::__jit_debug_descriptor.firstEntry = entry->nextEntry; } if(entry->nextEntry) { entry->nextEntry->prevEntry = entry->prevEntry; } // Notify GDB. ::__jit_debug_descriptor.relevantEntry = entry; ::__jit_debug_descriptor.actionFlag = 2; // JIT_UNREGISTER_FN ::__jit_debug_register_code(); delete entry; } }} ================================================ FILE: Lib/LLVMJIT/LLVMCompile.cpp ================================================ #include #include #include #include #include #include "LLVMJITPrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Timing.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace llvm { class MCContext; } using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; static std::string printModule(const llvm::Module& llvmModule) { std::string result; llvm::raw_string_ostream printStream(result); llvmModule.print(printStream, nullptr); return result; } // Define a LLVM raw output stream that can write directly to a std::vector. struct LLVMArrayOutputStream : llvm::raw_pwrite_stream { LLVMArrayOutputStream() { SetUnbuffered(); } ~LLVMArrayOutputStream() override = default; void flush() = delete; std::vector&& getOutput() { return std::move(output); } protected: virtual void write_impl(const char* data, size_t numBytes) override { const Uptr startOffset = output.size(); output.resize(output.size() + numBytes); memcpy(output.data() + startOffset, data, numBytes); } virtual void pwrite_impl(const char* data, size_t numBytes, U64 offset) override { WAVM_ASSERT(offset + numBytes > offset && offset + numBytes <= U64(output.size())); memcpy(output.data() + offset, data, numBytes); } virtual U64 current_pos() const override { return output.size(); } private: std::vector output; }; static void optimizeLLVMModule(llvm::Module& llvmModule, bool shouldLogMetrics, llvm::TargetMachine* targetMachine) { Timing::Timer optimizationTimer; // Log pre-optimization IR if trace-compilation logging is enabled. if(Log::isCategoryEnabled(Log::traceCompilation)) { Log::printf(Log::traceCompilation, "=== Pre-optimization LLVM IR ===\n%s\n", printModule(llvmModule).c_str()); } // Create the analysis managers. They must be declared in this order due to // inter-analysis-manager references during destruction. llvm::LoopAnalysisManager LAM; llvm::FunctionAnalysisManager FAM; llvm::CGSCCAnalysisManager CGAM; llvm::ModuleAnalysisManager MAM; // Create the PassBuilder with the target machine to enable target-specific optimizations. llvm::PassBuilder PB(targetMachine); // Register all analyses with the managers. PB.registerModuleAnalyses(MAM); PB.registerCGSCCAnalyses(CGAM); PB.registerFunctionAnalyses(FAM); PB.registerLoopAnalyses(LAM); PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); // Build the optimization pipeline using the new pass manager. // Use LLVM's default O2 optimization pipeline. llvm::ModulePassManager MPM = PB.buildPerModuleDefaultPipeline(llvm::OptimizationLevel::O2); MPM.run(llvmModule, MAM); // Log post-optimization IR if trace-compilation logging is enabled. if(Log::isCategoryEnabled(Log::traceCompilation)) { Log::printf(Log::traceCompilation, "=== Post-optimization LLVM IR ===\n%s\n", printModule(llvmModule).c_str()); } if(shouldLogMetrics) { Timing::logRatePerSecond( "Optimized LLVM module", optimizationTimer, (F64)llvmModule.size(), "functions"); } } std::vector LLVMJIT::compileLLVMModule(LLVMContext& llvmContext, llvm::Module&& llvmModule, bool shouldLogMetrics, llvm::TargetMachine* targetMachine) { // Verify the module. if(WAVM_ENABLE_ASSERTS) { std::string verifyOutputString; llvm::raw_string_ostream verifyOutputStream(verifyOutputString); if(llvm::verifyModule(llvmModule, &verifyOutputStream)) { verifyOutputStream.flush(); Errors::fatalf("LLVM verification errors:\n%s", verifyOutputString.c_str()); } } // Optimize the module; optimizeLLVMModule(llvmModule, shouldLogMetrics, targetMachine); // Generate machine code for the module. Timing::Timer machineCodeTimer; std::vector objectBytes; { llvm::legacy::PassManager passManager; llvm::MCContext* mcContext; LLVMArrayOutputStream objectStream; WAVM_ERROR_UNLESS(!targetMachine->addPassesToEmitMC(passManager, mcContext, objectStream)); passManager.run(llvmModule); objectBytes = objectStream.getOutput(); } if(shouldLogMetrics) { Timing::logRatePerSecond( "Generated machine code", machineCodeTimer, (F64)llvmModule.size(), "functions"); } return objectBytes; } static std::unique_ptr getAndValidateTargetMachine( const IR::FeatureSpec& featureSpec, const TargetSpec& targetSpec) { // Get the target machine. std::unique_ptr targetMachine = getTargetMachine(targetSpec); if(!targetMachine) { std::string tripleStr = getTriple(targetSpec); Errors::fatalf( "Invalid target spec (triple=%s, cpu=%s).", tripleStr.c_str(), targetSpec.cpu.c_str()); } // Validate that the target machine supports the module's FeatureSpec. switch(validateTarget(targetSpec, featureSpec)) { case TargetValidationResult::valid: break; case TargetValidationResult::invalidTargetSpec: { std::string tripleStr = getTriple(targetSpec); Errors::fatalf("Invalid target spec (triple=%s, cpu=%s).\n", tripleStr.c_str(), targetSpec.cpu.c_str()); } case TargetValidationResult::unsupportedArchitecture: { std::string tripleStr = getTriple(targetSpec); Errors::fatalf("Unsupported target architecture (triple=%s, cpu=%s)", tripleStr.c_str(), targetSpec.cpu.c_str()); } case TargetValidationResult::x86CPUDoesNotSupportSSE41: Errors::fatalf( "Target X86 CPU (%s) does not support SSE 4.1, which" " WAVM requires for WebAssembly SIMD code.\n", targetSpec.cpu.c_str()); case TargetValidationResult::wavmDoesNotSupportSIMDOnArch: Errors::fatalf("WAVM does not support SIMD on the host CPU architecture.\n"); case TargetValidationResult::memory64Requires64bitTarget: Errors::fatalf("Target CPU (%s) does not support 64-bit memories.\n", targetSpec.cpu.c_str()); case TargetValidationResult::table64Requires64bitTarget: Errors::fatalf("Target CPU (%s) does not support 64-bit tables.\n", targetSpec.cpu.c_str()); default: WAVM_UNREACHABLE(); }; return targetMachine; } std::vector LLVMJIT::compileModule(const IR::Module& irModule, const TargetSpec& targetSpec) { std::unique_ptr targetMachine = getAndValidateTargetMachine(irModule.featureSpec, targetSpec); // Emit LLVM IR for the module. LLVMContext llvmContext; llvm::Module llvmModule("", llvmContext); emitModule(irModule, llvmContext, llvmModule, targetMachine.get()); // Compile the LLVM IR to object code. return compileLLVMModule(llvmContext, std::move(llvmModule), true, targetMachine.get()); } std::string LLVMJIT::emitLLVMIR(const IR::Module& irModule, const TargetSpec& targetSpec, bool optimize) { std::unique_ptr targetMachine = getAndValidateTargetMachine(irModule.featureSpec, targetSpec); // Emit LLVM IR for the module. LLVMContext llvmContext; llvm::Module llvmModule("", llvmContext); emitModule(irModule, llvmContext, llvmModule, targetMachine.get()); // Optimize the LLVM IR. if(optimize) { optimizeLLVMModule(llvmModule, true, targetMachine.get()); } // Print the LLVM IR. return printModule(llvmModule); } ================================================ FILE: Lib/LLVMJIT/LLVMJIT.cpp ================================================ #include "WAVM/LLVMJIT/LLVMJIT.h" #include #include #include #include #include #include "LLVMJITPrivate.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Platform/CPU.h" #ifndef _WIN32 #include "WAVM/Platform/Unwind.h" #endif PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; namespace LLVMRuntimeSymbols { #ifdef _WIN32 // the LLVM X86 code generator calls __chkstk when allocating more than 4KB of stack space extern "C" void __chkstk(); extern "C" void __CxxFrameHandler3(); // the LLVM X86 code generator references _fltused when floating-point code is present extern "C" int _fltused; #else #if defined(__APPLE__) && (defined(__i386__) || defined(__x86_64__)) // LLVM's memset intrinsic lowers to __bzero on x86 Darwin. extern "C" void __bzero(); #endif #if defined(__APPLE__) && defined(__aarch64__) // LLVM's memset intrinsic lowers to bzero on AArch64 Darwin. extern "C" void bzero(void*, size_t); #endif extern "C" void* __cxa_begin_catch(void*) throw(); extern "C" void __cxa_end_catch(); #endif static HashMap map = { {"memcpy", (void*)&memcpy}, {"memmove", (void*)&memmove}, {"memset", (void*)&memset}, #ifdef _WIN32 {"__chkstk", (void*)&__chkstk}, {"__CxxFrameHandler3", (void*)&__CxxFrameHandler3}, {"_fltused", (void*)&_fltused}, #else #if defined(__APPLE__) && (defined(__i386__) || defined(__x86_64__)) {"__bzero", (void*)&__bzero}, #endif #if defined(__APPLE__) && defined(__aarch64__) {"bzero", (void*)&bzero}, #endif {"__gxx_personality_v0", (void*)&Platform::DebugPersonalityFunction}, {"__cxa_begin_catch", (void*)&__cxa_begin_catch}, {"__cxa_end_catch", (void*)&__cxa_end_catch}, #endif }; } void LLVMJIT::addLLVMRuntimeSymbols(HashMap& importedSymbolMap) { for(const auto& pair : LLVMRuntimeSymbols::map) { if(!importedSymbolMap.contains(pair.key)) { importedSymbolMap.add(pair.key, reinterpret_cast(pair.value)); } } } static bool globalInitLLVM() { // Disable shrink-wrapping to work around LLVM CFI generation issues. // When shrink-wrapping moves frame setup to a cold path, the CFI at the return address // after a non-returning call may describe the wrong stack state, causing unwind failures. const char* argv[] = {"wavm", "-enable-shrink-wrap=false"}; llvm::cl::ParseCommandLineOptions(2, argv, "", nullptr, nullptr, false); llvm::InitializeAllTargetInfos(); llvm::InitializeAllTargets(); llvm::InitializeAllTargetMCs(); llvm::InitializeAllAsmPrinters(); llvm::InitializeAllAsmParsers(); llvm::InitializeAllDisassemblers(); llvm::sys::DynamicLibrary::LoadLibraryPermanently(nullptr); return true; } static void globalInitLLVMOnce() { static bool isLLVMInitialized = globalInitLLVM(); WAVM_ASSERT(isLLVMInitialized); } void LLVMJIT::initLLVM() { globalInitLLVMOnce(); } LLVMContext::LLVMContext() { globalInitLLVMOnce(); i8Type = llvm::Type::getInt8Ty(*this); i16Type = llvm::Type::getInt16Ty(*this); i32Type = llvm::Type::getInt32Ty(*this); i64Type = llvm::Type::getInt64Ty(*this); f32Type = llvm::Type::getFloatTy(*this); f64Type = llvm::Type::getDoubleTy(*this); ptrType = llvm::PointerType::get(*this, 0); externrefType = ptrType; funcptrType = ptrType; i8x8Type = FixedVectorType::get(i8Type, 8); i16x4Type = FixedVectorType::get(i16Type, 4); i32x2Type = FixedVectorType::get(i32Type, 2); i64x1Type = FixedVectorType::get(i64Type, 1); f32x2Type = FixedVectorType::get(f32Type, 2); f64x1Type = FixedVectorType::get(f64Type, 1); i8x16Type = FixedVectorType::get(i8Type, 16); i16x8Type = FixedVectorType::get(i16Type, 8); i32x4Type = FixedVectorType::get(i32Type, 4); i64x2Type = FixedVectorType::get(i64Type, 2); f32x4Type = FixedVectorType::get(f32Type, 4); f64x2Type = FixedVectorType::get(f64Type, 2); i8x32Type = FixedVectorType::get(i8Type, 32); i16x16Type = FixedVectorType::get(i16Type, 16); i32x8Type = FixedVectorType::get(i32Type, 8); i64x4Type = FixedVectorType::get(i64Type, 4); i8x48Type = FixedVectorType::get(i8Type, 48); i16x24Type = FixedVectorType::get(i16Type, 24); i32x12Type = FixedVectorType::get(i32Type, 12); i64x6Type = FixedVectorType::get(i64Type, 6); i8x64Type = FixedVectorType::get(i8Type, 64); i16x32Type = FixedVectorType::get(i16Type, 32); i32x16Type = FixedVectorType::get(i32Type, 16); i64x8Type = FixedVectorType::get(i64Type, 8); valueTypes[(Uptr)ValueType::none] = valueTypes[(Uptr)ValueType::any] = nullptr; valueTypes[(Uptr)ValueType::i32] = i32Type; valueTypes[(Uptr)ValueType::i64] = i64Type; valueTypes[(Uptr)ValueType::f32] = f32Type; valueTypes[(Uptr)ValueType::f64] = f64Type; valueTypes[(Uptr)ValueType::v128] = i64x2Type; valueTypes[(Uptr)ValueType::externref] = externrefType; valueTypes[(Uptr)ValueType::funcref] = funcptrType; // Create zero constants of each type. typedZeroConstants[(Uptr)ValueType::none] = nullptr; typedZeroConstants[(Uptr)ValueType::any] = nullptr; typedZeroConstants[(Uptr)ValueType::i32] = emitLiteral(*this, (U32)0); typedZeroConstants[(Uptr)ValueType::i64] = emitLiteral(*this, (U64)0); typedZeroConstants[(Uptr)ValueType::f32] = emitLiteral(*this, (F32)0.0f); typedZeroConstants[(Uptr)ValueType::f64] = emitLiteral(*this, (F64)0.0); typedZeroConstants[(Uptr)ValueType::v128] = emitLiteral(*this, V128()); typedZeroConstants[(Uptr)ValueType::externref] = llvm::Constant::getNullValue(externrefType); typedZeroConstants[(Uptr)ValueType::funcref] = llvm::Constant::getNullValue(funcptrType); } static const char* archToString(TargetArch arch) { switch(arch) { case TargetArch::x86_64: return "x86_64"; case TargetArch::aarch64: return "aarch64"; default: WAVM_UNREACHABLE(); } } static const char* osToString(TargetOS os) { switch(os) { case TargetOS::linux_: return "linux"; case TargetOS::macos: return "macos"; case TargetOS::windows: return "windows"; default: WAVM_UNREACHABLE(); } } std::string LLVMJIT::asString(const TargetSpec& targetSpec) { std::string result = std::string("arch=") + archToString(targetSpec.arch) + " os=" + osToString(targetSpec.os) + " cpu=" + targetSpec.cpu; std::string featuresStr; switch(targetSpec.arch) { case TargetArch::x86_64: featuresStr = asString(targetSpec.x86FeatureOverrides); break; case TargetArch::aarch64: featuresStr = asString(targetSpec.aarch64FeatureOverrides); break; default: WAVM_UNREACHABLE(); } if(!featuresStr.empty()) { result += ' ' + featuresStr; } return result; } std::string LLVMJIT::getTriple(const TargetSpec& targetSpec) { switch(targetSpec.arch) { case TargetArch::x86_64: switch(targetSpec.os) { case TargetOS::linux_: return "x86_64-unknown-linux-gnu"; case TargetOS::macos: return "x86_64-apple-darwin"; case TargetOS::windows: return "x86_64-pc-windows-msvc"; default: WAVM_UNREACHABLE(); } case TargetArch::aarch64: switch(targetSpec.os) { case TargetOS::linux_: return "aarch64-unknown-linux-gnu"; case TargetOS::macos: return "aarch64-apple-darwin"; case TargetOS::windows: return "aarch64-pc-windows-msvc"; default: WAVM_UNREACHABLE(); } default: WAVM_UNREACHABLE(); } } TargetSpec LLVMJIT::getHostTargetSpec() { TargetSpec result; result.cpu = std::string(llvm::sys::getHostCPUName()); auto hostFeatures = Platform::getHostCPUFeatures(); auto toOptional = [](bool b) { return std::make_optional(b); }; #if WAVM_CPU_ARCH_X86 result.arch = TargetArch::x86_64; result.x86FeatureOverrides = hostFeatures.mapFeatures(toOptional); #elif WAVM_CPU_ARCH_ARM result.arch = TargetArch::aarch64; result.aarch64FeatureOverrides = hostFeatures.mapFeatures(toOptional); #endif #if defined(__linux__) result.os = TargetOS::linux_; #elif defined(__APPLE__) result.os = TargetOS::macos; #elif defined(_WIN32) result.os = TargetOS::windows; #endif return result; } std::unique_ptr LLVMJIT::getTargetMachine(const TargetSpec& targetSpec) { globalInitLLVMOnce(); std::string tripleStr = LLVMJIT::getTriple(targetSpec); llvm::Triple triple(tripleStr); llvm::SmallVector targetAttributes; auto addFeatureOverrides = [&](const char* name, const std::optional& value) { if(value.has_value()) { std::string attr = (*value ? "+" : "-"); attr += name; targetAttributes.push_back(std::move(attr)); } }; switch(targetSpec.arch) { case TargetArch::x86_64: targetSpec.x86FeatureOverrides.forEachFeature(addFeatureOverrides); break; case TargetArch::aarch64: targetSpec.aarch64FeatureOverrides.forEachFeature(addFeatureOverrides); break; default: WAVM_UNREACHABLE(); } llvm::TargetOptions targetOptions; // On Darwin/arm64, LLVM defaults to generating compact-unwind instead of DWARF eh_frame. // However, __register_frame only works with DWARF eh_frame, so we need to force LLVM to // always emit DWARF unwind info for JIT code to enable C++ exception unwinding. // See: https://github.com/llvm/llvm-project/issues/52921 if(triple.isOSDarwin() && triple.getArch() == llvm::Triple::aarch64) { targetOptions.MCOptions.EmitDwarfUnwind = llvm::EmitDwarfUnwindType::Always; } return std::unique_ptr( llvm::EngineBuilder() .setTargetOptions(targetOptions) .selectTarget(triple, "", targetSpec.cpu, targetAttributes)); } TargetValidationResult LLVMJIT::validateTargetMachine( const std::unique_ptr& targetMachine, const FeatureSpec& featureSpec) { const llvm::Triple::ArchType targetArch = targetMachine->getTargetTriple().getArch(); if(targetArch == llvm::Triple::x86_64) { // If the SIMD feature is enabled, then require the SSE4.1 CPU feature. if(featureSpec.simd && !targetMachine->getMCSubtargetInfo()->checkFeatures("+sse4.1")) { return TargetValidationResult::x86CPUDoesNotSupportSSE41; } return TargetValidationResult::valid; } else if(targetArch == llvm::Triple::aarch64) { if(featureSpec.simd && !targetMachine->getMCSubtargetInfo()->checkFeatures("+neon")) { return TargetValidationResult::wavmDoesNotSupportSIMDOnArch; } return TargetValidationResult::valid; } else { if(featureSpec.simd) { return TargetValidationResult::wavmDoesNotSupportSIMDOnArch; } if(featureSpec.memory64) { return TargetValidationResult::memory64Requires64bitTarget; } if(featureSpec.table64) { return TargetValidationResult::table64Requires64bitTarget; } return TargetValidationResult::unsupportedArchitecture; } } TargetValidationResult LLVMJIT::validateTarget(const TargetSpec& targetSpec, const IR::FeatureSpec& featureSpec) { std::unique_ptr targetMachine = getTargetMachine(targetSpec); if(!targetMachine) { return TargetValidationResult::invalidTargetSpec; } return validateTargetMachine(targetMachine, featureSpec); } Version LLVMJIT::getVersion() { return Version{LLVM_VERSION_MAJOR, LLVM_VERSION_MINOR, LLVM_VERSION_PATCH, 7}; } ================================================ FILE: Lib/LLVMJIT/LLVMJITPrivate.h ================================================ #pragma once #include #include #include #include #include "WAVM/DWARF/Sections.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Unwind.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #if defined(_MSC_VER) && defined(__clang__) #define PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wswitch-enum\"") #define POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS _Pragma("GCC diagnostic pop") #elif defined(_MSC_VER) // Disable all VC warnings in the LLVM headers #define PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS \ __pragma(warning(push, 0)); \ __pragma(warning(disable : 4702)); \ __pragma(warning(disable : 4244)); #define POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS __pragma(warning(pop)); #else #define PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #define POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS #endif PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS using FixedVectorType = llvm::FixedVectorType; namespace WAVM { namespace LLVMJIT { typedef llvm::SmallVector ValueVector; typedef llvm::SmallVector PHIVector; struct LLVMContext : llvm::LLVMContext { llvm::Type* i8Type; llvm::Type* i16Type; llvm::Type* i32Type; llvm::Type* i64Type; llvm::Type* f32Type; llvm::Type* f64Type; llvm::PointerType* ptrType; llvm::PointerType* funcptrType; FixedVectorType* i8x8Type; FixedVectorType* i16x4Type; FixedVectorType* i32x2Type; FixedVectorType* i64x1Type; FixedVectorType* f32x2Type; FixedVectorType* f64x1Type; FixedVectorType* i8x16Type; FixedVectorType* i16x8Type; FixedVectorType* i32x4Type; FixedVectorType* i64x2Type; FixedVectorType* f32x4Type; FixedVectorType* f64x2Type; FixedVectorType* i8x32Type; FixedVectorType* i16x16Type; FixedVectorType* i32x8Type; FixedVectorType* i64x4Type; FixedVectorType* i8x48Type; FixedVectorType* i16x24Type; FixedVectorType* i32x12Type; FixedVectorType* i64x6Type; FixedVectorType* i8x64Type; FixedVectorType* i16x32Type; FixedVectorType* i32x16Type; FixedVectorType* i64x8Type; llvm::Type* externrefType; // Zero constants of each type. llvm::Constant* typedZeroConstants[IR::numValueTypes]; // Maps a type ID to the corresponding LLVM type. llvm::Type* valueTypes[IR::numValueTypes]; LLVMContext(); }; // Overloaded functions that compile a literal value to a LLVM constant of the right type. inline llvm::ConstantInt* emitLiteral(llvm::LLVMContext& llvmContext, U32 value) { return llvm::ConstantInt::get(llvmContext, llvm::APInt(32, (U64)value, false)); } inline llvm::ConstantInt* emitLiteral(llvm::LLVMContext& llvmContext, I32 value) { return llvm::ConstantInt::get(llvmContext, llvm::APInt(32, (I64)value, true)); } inline llvm::ConstantInt* emitLiteral(llvm::LLVMContext& llvmContext, U64 value) { return llvm::ConstantInt::get(llvmContext, llvm::APInt(64, value, false)); } inline llvm::ConstantInt* emitLiteral(llvm::LLVMContext& llvmContext, I64 value) { return llvm::ConstantInt::get(llvmContext, llvm::APInt(64, value, true)); } inline llvm::Constant* emitLiteral(llvm::LLVMContext& llvmContext, F32 value) { return llvm::ConstantFP::get(llvmContext, llvm::APFloat(value)); } inline llvm::Constant* emitLiteral(llvm::LLVMContext& llvmContext, F64 value) { return llvm::ConstantFP::get(llvmContext, llvm::APFloat(value)); } inline llvm::Constant* emitLiteral(llvm::LLVMContext& llvmContext, bool value) { return llvm::ConstantInt::get(llvmContext, llvm::APInt(1, value ? 1 : 0, false)); } inline llvm::Constant* emitLiteral(llvm::LLVMContext& llvmContext, V128 value) { return llvm::ConstantVector::get( {llvm::ConstantInt::get(llvmContext, llvm::APInt(64, value.u64x2[0], false)), llvm::ConstantInt::get(llvmContext, llvm::APInt(64, value.u64x2[1], false))}); } inline llvm::Constant* emitLiteralIptr(U64 iptrValue, llvm::Type* iptrType) { return llvm::ConstantInt::get(iptrType, iptrValue); } // Converts a WebAssembly type to a LLVM type. inline llvm::Type* asLLVMType(LLVMContext& llvmContext, IR::ValueType type) { WAVM_ERROR_UNLESS(type < (IR::ValueType)IR::numValueTypes); return llvmContext.valueTypes[Uptr(type)]; } inline llvm::Type* asLLVMType(LLVMContext& llvmContext, IR::TypeTuple typeTuple) { llvm::Type** llvmTypes = (llvm::Type**)alloca(sizeof(llvm::Type*) * typeTuple.size()); for(Uptr typeIndex = 0; typeIndex < typeTuple.size(); ++typeIndex) { llvmTypes[typeIndex] = asLLVMType(llvmContext, typeTuple[typeIndex]); } return llvm::StructType::get(llvmContext, llvm::ArrayRef(llvmTypes, typeTuple.size())); } inline bool areResultsReturnedDirectly(IR::TypeTuple results) { // On X64, the calling conventions can return up to 3 i64s and 4 float/vectors. // For simplicity, just allow up to 3 values to be returned, including the implicitly // returned context pointer. static constexpr Uptr maxDirectlyReturnedValues = 3; return results.size() + 1 <= maxDirectlyReturnedValues; } inline llvm::StructType* getLLVMReturnStructType(LLVMContext& llvmContext, IR::TypeTuple results) { if(areResultsReturnedDirectly(results)) { // A limited number of results can be packed into a struct and returned directly. return llvm::StructType::get(llvmContext.ptrType, asLLVMType(llvmContext, results)); } else { // If there are too many results to be returned directly, they will be returned in the // context arg/return memory block. return llvm::StructType::get(llvmContext.ptrType); } } inline llvm::Constant* getZeroedLLVMReturnStruct(LLVMContext& llvmContext, IR::TypeTuple resultType) { return llvm::Constant::getNullValue(getLLVMReturnStructType(llvmContext, resultType)); } // Converts a WebAssembly function type to a LLVM type. inline llvm::FunctionType* asLLVMType(LLVMContext& llvmContext, IR::FunctionType functionType) { const IR::CallingConvention callingConvention = functionType.callingConvention(); Uptr numParameters; llvm::Type** llvmArgTypes; if(callingConvention == IR::CallingConvention::cAPICallback) { numParameters = 2; llvmArgTypes = (llvm::Type**)alloca(sizeof(llvm::Type*) * numParameters); llvmArgTypes[0] = llvmContext.ptrType; llvmArgTypes[1] = llvmContext.ptrType; } else { const Uptr numImplicitParameters = callingConvention == IR::CallingConvention::c ? 0 : 1; numParameters = numImplicitParameters + functionType.params().size(); llvmArgTypes = (llvm::Type**)alloca(sizeof(llvm::Type*) * numParameters); if(callingConvention != IR::CallingConvention::c) { llvmArgTypes[0] = llvmContext.ptrType; } for(Uptr argIndex = 0; argIndex < functionType.params().size(); ++argIndex) { llvmArgTypes[argIndex + numImplicitParameters] = asLLVMType(llvmContext, functionType.params()[argIndex]); } } llvm::Type* llvmReturnType; switch(callingConvention) { case IR::CallingConvention::wasm: llvmReturnType = getLLVMReturnStructType(llvmContext, functionType.results()); break; case IR::CallingConvention::cAPICallback: case IR::CallingConvention::intrinsicWithContextSwitch: llvmReturnType = llvmContext.ptrType; break; case IR::CallingConvention::intrinsic: case IR::CallingConvention::c: switch(functionType.results().size()) { case 0: llvmReturnType = llvm::Type::getVoidTy(llvmContext); break; case 1: llvmReturnType = asLLVMType(llvmContext, functionType.results()[0]); break; default: Errors::fatal("intrinsics/C functions returning >1 result isn't supported"); } break; default: WAVM_UNREACHABLE(); }; return llvm::FunctionType::get( llvmReturnType, llvm::ArrayRef(llvmArgTypes, numParameters), false); } inline llvm::CallingConv::ID asLLVMCallingConv(IR::CallingConvention callingConvention) { switch(callingConvention) { case IR::CallingConvention::wasm: return llvm::CallingConv::Fast; case IR::CallingConvention::intrinsic: case IR::CallingConvention::intrinsicWithContextSwitch: case IR::CallingConvention::cAPICallback: case IR::CallingConvention::c: return llvm::CallingConv::C; default: WAVM_UNREACHABLE(); } } inline llvm::Type* getIptrType(LLVMContext& llvmContext, U32 numPointerBytes) { switch(numPointerBytes) { case 4: return llvmContext.i32Type; case 8: return llvmContext.i64Type; default: Errors::fatalf("Unexpected pointer size: %u bytes", numPointerBytes); }; } inline void setRuntimeFunctionPrefix(LLVMContext& llvmContext, llvm::Type* iptrType, llvm::Function* function, llvm::Constant* mutableData, llvm::Constant* instanceId, llvm::Constant* typeId) { function->setPrefixData( llvm::ConstantArray::get(llvm::ArrayType::get(iptrType, 4), {emitLiteralIptr(U64(Runtime::ObjectKind::function), iptrType), mutableData, instanceId, typeId})); // The prefix contains pointer-sized fields, so the function entry point (and thus the // prefix before it) must be aligned to at least alignof(Uptr). On AArch64, LLVM's // default function alignment is 4, but we need 8 for the prefix pointers. llvm::Align prefixAlign(sizeof(Uptr)); if(function->getAlign().valueOrOne() < prefixAlign) { function->setAlignment(prefixAlign); } } inline void setFunctionAttributes(llvm::TargetMachine* targetMachine, llvm::Function* function) { // For now, no attributes need to be set on Win32. if(targetMachine->getTargetTriple().getOS() != llvm::Triple::Win32) { auto attrs = function->getAttributes(); // Use frame-pointer=all to ensure frame pointers are always generated. // This is needed for reliable stack unwinding during exception handling. attrs = attrs.addAttributeAtIndex( function->getContext(), llvm::AttributeList::FunctionIndex, "frame-pointer", "all"); // Enable asynchronous unwind tables so that CFI is correct at every instruction. // This is required for signal handling (e.g., stack overflow) where a signal can // occur at any instruction, not just at call sites. attrs = attrs.addAttributeAtIndex(function->getContext(), llvm::AttributeList::FunctionIndex, llvm::Attribute::getWithUWTableKind( function->getContext(), llvm::UWTableKind::Async)); // Set the probe-stack attribute to ensure functions that allocate more than a page // of stack space touch each page in order, preventing the stack from skipping over // the guard page. attrs = attrs.addAttributeAtIndex(function->getContext(), llvm::AttributeList::FunctionIndex, "probe-stack", "inline-asm"); function->setAttributes(attrs); } } // Maps a base name and index to an externally visible symbol name. inline std::string getExternalName(const char* baseName, Uptr index) { return std::string(baseName) + std::to_string(index); } // Emits LLVM IR for a module. void emitModule(const IR::Module& irModule, LLVMContext& llvmContext, llvm::Module& outLLVMModule, llvm::TargetMachine* targetMachine); // Adds LLVM runtime symbols (memcpy, personality function, etc.) to an import map. void addLLVMRuntimeSymbols(HashMap& importedSymbolMap); // GDB JIT interface registration (see GDBRegistration.cpp). void* registerObjectWithGDB(const U8* objectBytes, Uptr objectSize); void unregisterObjectWithGDB(void* handle); struct ModuleMemoryManager; struct GlobalModuleState; // Encapsulates a loaded module. struct Module { HashMap nameToFunctionMap; std::map addressToFunctionMap; std::string debugName; // Object bytes (patched with section addresses on ELF), used for GDB. std::vector objectBytes; // DWARF sections (pointers into the loaded image), used for signal-safe source lookup. DWARF::Sections dwarfSections = {}; Module(std::vector inObjectBytes, const HashMap& importedSymbolMap, bool shouldLogMetrics, std::string&& inDebugName); ~Module(); private: ModuleMemoryManager* memoryManager; // Module holds a shared pointer to GlobalModuleState to ensure that on exit it is not // destructed until after all Modules have been destructed. std::shared_ptr globalModuleState; // Opaque handle for deregistering unwind data. Platform::UnwindRegistration* unwindRegistration = nullptr; void* gdbRegistrationHandle = nullptr; }; extern void initLLVM(); extern std::string getTriple(const TargetSpec& targetSpec); extern std::unique_ptr getTargetMachine(const TargetSpec& targetSpec); extern TargetValidationResult validateTargetMachine( const std::unique_ptr& targetMachine, const IR::FeatureSpec& featureSpec); extern std::vector compileLLVMModule(LLVMContext& llvmContext, llvm::Module&& llvmModule, bool shouldLogMetrics, llvm::TargetMachine* targetMachine); }} ================================================ FILE: Lib/LLVMJIT/LLVMModule.cpp ================================================ #include #include #include #include #include #include #include #include #include "LLVMJITPrivate.h" #include "WAVM/DWARF/DWARF.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Timing.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/ObjectLinker/ObjectLinker.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Platform/Unwind.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #ifndef _WIN32 #include #include #define USE_WINDOWS_SEH 0 #else #define USE_WINDOWS_SEH 1 #endif using namespace WAVM; using namespace WAVM::LLVMJIT; namespace WAVM { namespace Runtime { struct ExceptionType; }} struct LLVMJIT::GlobalModuleState { // A map from address to loaded JIT symbols. Platform::RWMutex addressToModuleMapMutex; std::map addressToModuleMap; static const std::shared_ptr& get() { static std::shared_ptr singleton = std::make_shared(); return singleton; } GlobalModuleState() {} ~GlobalModuleState() {} }; // Tracks the linked image memory for cleanup. struct LLVMJIT::ModuleMemoryManager { ModuleMemoryManager() : imageBase(nullptr), numPages(0) {} ~ModuleMemoryManager() { if(imageBase) { Platform::freeVirtualPages(imageBase, numPages); Platform::deregisterVirtualAllocation(numPages << Platform::getBytesPerPageLog2()); } } U8* imageBase; Uptr numPages; }; Module::Module(std::vector objectBytes, const HashMap& importedSymbolMap, bool shouldLogMetrics, std::string&& inDebugName) : debugName(std::move(inDebugName)) , memoryManager(new ModuleMemoryManager()) , globalModuleState(GlobalModuleState::get()) { Timing::Timer loadObjectTimer; // Link the object using the ObjectLinker. ObjectLinker::LinkResult linkResult; ObjectLinker::linkObject(objectBytes.data(), objectBytes.size(), importedSymbolMap, linkResult); // Transfer ownership of the linked image to the memory manager. memoryManager->imageBase = linkResult.imageBase; memoryManager->numPages = linkResult.numImagePages; // Flush the instruction cache for the code segment. if(linkResult.numCodeBytes > 0) { Platform::flushInstructionCache(linkResult.imageBase, linkResult.numCodeBytes); } // Register unwind sections for exception handling. unwindRegistration = Platform::registerUnwindData( linkResult.imageBase, linkResult.numImagePages, linkResult.unwindInfo); // Iterate over the defined symbols from the linker. Uptr imageBase = reinterpret_cast(linkResult.imageBase); Uptr imageEnd = imageBase + (linkResult.numImagePages << Platform::getBytesPerPageLog2()); for(const auto& symbolInfo : linkResult.definedSymbols) { const std::string& name = symbolInfo.name; Uptr loadedAddress = symbolInfo.address; Uptr symbolSize = symbolInfo.size; // Add the function to the module's name and address to function maps. // The symbol name from the linker is already demangled. Runtime::Function* function = (Runtime::Function*)(loadedAddress - offsetof(Runtime::Function, code)); nameToFunctionMap.addOrFail(std::string(name), function); addressToFunctionMap.emplace(loadedAddress + symbolSize, function); // Initialize the function mutable data. WAVM_ASSERT(function->mutableData); function->mutableData->jitModule = this; function->mutableData->function = function; function->mutableData->numCodeBytes = symbolSize; } // Only insert into the address map if we have valid memory allocated. if(linkResult.imageBase) { const Uptr moduleEndAddress = imageEnd; Platform::RWMutex::ExclusiveLock addressToModuleMapLock( globalModuleState->addressToModuleMapMutex); globalModuleState->addressToModuleMap.emplace(moduleEndAddress, this); } // Store DWARF section pointers for signal-safe source location lookup. dwarfSections = linkResult.dwarf; // Keep the object bytes for GDB. On ELF, section addresses are patched in the bytes // so GDB sees runtime addresses directly. this->objectBytes = std::move(objectBytes); // Register the object with GDB for debugging. GDB reads debug info from the object bytes // on demand. The linker has already patched section addresses so GDB can correlate // debug info with the loaded code. // On macOS, skip GDB JIT registration for MachO objects: system libunwind scans objects // registered via __jit_debug_descriptor for DWARF FDEs. MachO objects without __eh_frame // cause libunwind to misinterpret other sections (e.g. __debug_line) as FDE data, leading // to crashes in decodeFDE during stack unwinding. #if !defined(__APPLE__) gdbRegistrationHandle = registerObjectWithGDB(this->objectBytes.data(), this->objectBytes.size()); #endif if(shouldLogMetrics) { Timing::logRatePerSecond((std::string("Loaded ") + debugName).c_str(), loadObjectTimer, (F64)this->objectBytes.size() / 1024.0 / 1024.0, "MiB"); Log::printf(Log::Category::metrics, "Code: %.1f KiB, read-only data: %.1f KiB, read-write data: %.1f KiB\n", linkResult.numCodeBytes / 1024.0, linkResult.numReadOnlyBytes / 1024.0, linkResult.numReadWriteBytes / 1024.0); } } Module::~Module() { // Deregister the unwind data. if(unwindRegistration) { Platform::deregisterUnwindData(unwindRegistration); } // Unregister from GDB. unregisterObjectWithGDB(gdbRegistrationHandle); // Remove the module from the global address to module map (only if we inserted it). if(memoryManager->imageBase) { Platform::RWMutex::ExclusiveLock addressToModuleMapLock( globalModuleState->addressToModuleMapMutex); globalModuleState->addressToModuleMap.erase( globalModuleState->addressToModuleMap.find(reinterpret_cast( memoryManager->imageBase + (memoryManager->numPages << Platform::getBytesPerPageLog2())))); } // Free the FunctionMutableData objects. for(const auto& pair : addressToFunctionMap) { delete pair.second->mutableData; } // Delete the memory manager. delete memoryManager; } std::shared_ptr LLVMJIT::loadModule( const std::vector& objectFileBytes, HashMap&& wavmIntrinsicsExportMap, std::vector&& types, std::vector&& functionImports, std::vector&& tables, std::vector&& memories, std::vector&& globals, std::vector&& exceptionTypes, InstanceBinding instance, Uptr tableReferenceBias, const std::vector& functionDefMutableDatas, std::string&& debugName) { // Bind undefined symbols in the compiled object to values. HashMap importedSymbolMap; // Bind the wavmIntrinsic function symbols; the compiled module assumes they have the intrinsic // calling convention, so no thunking is necessary. for(auto exportMapPair : wavmIntrinsicsExportMap) { importedSymbolMap.addOrFail(exportMapPair.key, reinterpret_cast(exportMapPair.value.code)); } // Bind the type ID symbols. for(Uptr typeIndex = 0; typeIndex < types.size(); ++typeIndex) { importedSymbolMap.addOrFail(getExternalName("typeId", typeIndex), types[typeIndex].getEncoding().impl); } // Bind imported function symbols. for(Uptr importIndex = 0; importIndex < functionImports.size(); ++importIndex) { importedSymbolMap.addOrFail(getExternalName("functionImport", importIndex), reinterpret_cast(functionImports[importIndex].code)); } // Bind the table symbols. for(Uptr tableIndex = 0; tableIndex < tables.size(); ++tableIndex) { const TableBinding& table = tables[tableIndex]; importedSymbolMap.addOrFail(getExternalName("tableOffset", tableIndex), offsetof(Runtime::CompartmentRuntimeData, tables) + sizeof(Runtime::TableRuntimeData) * table.id); importedSymbolMap.addOrFail(getExternalName("tableId", tableIndex), table.id); } // Bind the memory symbols. for(Uptr memoryIndex = 0; memoryIndex < memories.size(); ++memoryIndex) { const MemoryBinding& memory = memories[memoryIndex]; importedSymbolMap.addOrFail(getExternalName("memoryOffset", memoryIndex), offsetof(Runtime::CompartmentRuntimeData, memories) + sizeof(Runtime::MemoryRuntimeData) * memory.id); importedSymbolMap.addOrFail(getExternalName("memoryId", memoryIndex), memory.id); } // Bind the globals symbols. for(Uptr globalIndex = 0; globalIndex < globals.size(); ++globalIndex) { const GlobalBinding& globalSpec = globals[globalIndex]; Uptr value; if(globalSpec.type.isMutable) { value = offsetof(Runtime::ContextRuntimeData, mutableGlobals) + globalSpec.mutableGlobalIndex * sizeof(IR::UntaggedValue); } else { value = reinterpret_cast(globalSpec.immutableValuePointer); } importedSymbolMap.addOrFail(getExternalName("global", globalIndex), value); } // Bind exception type symbols. for(Uptr exceptionTypeIndex = 0; exceptionTypeIndex < exceptionTypes.size(); ++exceptionTypeIndex) { importedSymbolMap.addOrFail(getExternalName("exceptionTypeId", exceptionTypeIndex), exceptionTypes[exceptionTypeIndex].id); } // Bind FunctionMutableData symbols. for(Uptr functionDefIndex = 0; functionDefIndex < functionDefMutableDatas.size(); ++functionDefIndex) { Runtime::FunctionMutableData* functionMutableData = functionDefMutableDatas[functionDefIndex]; importedSymbolMap.addOrFail(getExternalName("functionDefMutableDatas", functionDefIndex), reinterpret_cast(functionMutableData)); } // Bind the instance symbol. WAVM_ASSERT(instance.id != UINTPTR_MAX); importedSymbolMap.addOrFail("instanceId", instance.id); // Bind the tableReferenceBias symbol. importedSymbolMap.addOrFail("tableReferenceBias", tableReferenceBias); #if !USE_WINDOWS_SEH // Get the std::type_info for Runtime::Exception* without enabling RTTI. std::type_info* runtimeExceptionPointerTypeInfo = nullptr; try { throw (Runtime::Exception*)nullptr; } catch(Runtime::Exception*) { runtimeExceptionPointerTypeInfo = __cxxabiv1::__cxa_current_exception_type(); } importedSymbolMap.addOrFail("runtimeExceptionTypeInfo", reinterpret_cast(runtimeExceptionPointerTypeInfo)); #endif // Add LLVM runtime symbols (memcpy, personality function, etc.) // that LLVM-generated code may reference. addLLVMRuntimeSymbols(importedSymbolMap); // Load the module. return std::make_shared(objectFileBytes, importedSymbolMap, true, std::move(debugName)); } Uptr LLVMJIT::getInstructionSourceByAddress(Uptr address, InstructionSource* outSources, Uptr maxSources) { if(maxSources == 0) { return 0; } auto globalModuleState = GlobalModuleState::get(); Module* jitModule; { Platform::RWMutex::ShareableLock addressToModuleMapLock( globalModuleState->addressToModuleMapMutex); auto moduleIt = globalModuleState->addressToModuleMap.upper_bound(address); if(moduleIt == globalModuleState->addressToModuleMap.end()) { return 0; } jitModule = moduleIt->second; } auto functionIt = jitModule->addressToFunctionMap.upper_bound(address); if(functionIt == jitModule->addressToFunctionMap.end()) { return 0; } Runtime::Function* function = functionIt->second; const Uptr codeAddress = reinterpret_cast(function->code); if(address < codeAddress || address >= codeAddress + function->mutableData->numCodeBytes) { return 0; } // Query DWARF info using the signal-safe, zero-allocation DWARF parser. if(jitModule->dwarfSections.debugInfo) { DWARF::SourceLocation locations[16]; Uptr numLocations = DWARF::getSourceLocations(jitModule->dwarfSections, address, locations, 16); Log::printf(Log::traceDwarf, "DWARF lookup: address=0x%" WAVM_PRIxPTR " function=%s numLocations=%" WAVM_PRIuPTR "\n", address, function->mutableData->debugName.c_str(), numLocations); for(Uptr i = 0; i < numLocations; ++i) { Log::printf(Log::traceDwarf, " location[%" WAVM_PRIuPTR "]: linkageName=%s name=%s line=%" WAVM_PRIuPTR "\n", i, locations[i].linkageName ? locations[i].linkageName : "(null)", locations[i].name ? locations[i].name : "(null)", locations[i].line); } if(numLocations > 0) { Uptr numResults = 0; for(Uptr i = 0; i < numLocations && numResults < maxSources; ++i) { Runtime::Function* frameFunction = function; if(numLocations > 1 && locations[i].linkageName) { const char* name = locations[i].linkageName; std::string_view lookupName(name); Log::printf(Log::traceDwarf, " Looking up '%.*s' in nameToFunctionMap\n", (int)lookupName.size(), lookupName.data()); Runtime::Function** resolvedFunction = jitModule->nameToFunctionMap.get(lookupName); if(resolvedFunction) { frameFunction = *resolvedFunction; } else { Log::printf(Log::traceDwarf, " Name lookup FAILED\n"); // Name lookup failed; fall through to fallback. break; } } outSources[numResults++] = {frameFunction, locations[i].line}; } if(numResults > 0) { return numResults; } } } else { Log::printf(Log::traceDwarf, "No DWARF sections for address 0x%" WAVM_PRIxPTR " function=%s\n", address, function->mutableData->debugName.c_str()); } // Fallback: no DWARF frames available. Log::printf(Log::traceDwarf, "Falling back to {function=%s, 0}\n", function->mutableData->debugName.c_str()); outSources[0] = {function, 0}; return 1; } ================================================ FILE: Lib/LLVMJIT/Thunk.cpp ================================================ #include #include #include #include #include #include #include "EmitContext.h" #include "LLVMJITPrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/RuntimeABI/RuntimeABI.h" PUSH_DISABLE_WARNINGS_FOR_LLVM_HEADERS #include #include #include #include #include #include #include #include #include #include #include #include POP_DISABLE_WARNINGS_FOR_LLVM_HEADERS namespace llvm { class Value; } using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::LLVMJIT; using namespace WAVM::Runtime; // A global invoke thunk cache struct InvokeThunkCache { Platform::RWMutex mutex; HashMap typeToFunctionMap; std::vector> modules; static InvokeThunkCache& get() { static InvokeThunkCache singleton; return singleton; } private: InvokeThunkCache() {} }; InvokeThunkPointer LLVMJIT::getInvokeThunk(FunctionType functionType) { InvokeThunkCache& invokeThunkCache = InvokeThunkCache::get(); // First, take a shareable lock on the cache mutex, and check if the thunk is cached. { Platform::RWMutex::ShareableLock shareableLock(invokeThunkCache.mutex); Runtime::Function** invokeThunkFunction = invokeThunkCache.typeToFunctionMap.get(functionType); if(invokeThunkFunction) { return reinterpret_cast( const_cast((*invokeThunkFunction)->code)); } } // If the thunk is not cached, take an exclusive lock on the cache mutex. Platform::RWMutex::ExclusiveLock invokeThunkLock(invokeThunkCache.mutex); // Since the cache is unlocked briefly while switching from the shareable to the exclusive lock, // check again if the thunk is cached. Runtime::Function*& invokeThunkFunction = invokeThunkCache.typeToFunctionMap.getOrAdd(functionType, nullptr); if(invokeThunkFunction) { return reinterpret_cast(const_cast(invokeThunkFunction->code)); } // Create a FunctionMutableData object for the thunk. FunctionMutableData* functionMutableData = new FunctionMutableData("thnk!C to WASM thunk!" + asString(functionType)); // Create a LLVM module and a LLVM function for the thunk. LLVMContext llvmContext; llvm::Module llvmModule("", llvmContext); std::unique_ptr targetMachine = getTargetMachine(getHostTargetSpec()); llvmModule.setDataLayout(targetMachine->createDataLayout()); auto llvmFunctionType = llvm::FunctionType::get( llvmContext.ptrType, {llvmContext.ptrType, llvmContext.ptrType, llvmContext.ptrType, llvmContext.ptrType}, false); llvm::Type* iptrType = getIptrType(llvmContext, targetMachine->getProgramPointerSize()); auto function = llvm::Function::Create( llvmFunctionType, llvm::Function::ExternalLinkage, "thunk", &llvmModule); setRuntimeFunctionPrefix(llvmContext, iptrType, function, emitLiteralIptr(reinterpret_cast(functionMutableData), iptrType), emitLiteralIptr(UINTPTR_MAX, iptrType), emitLiteralIptr(functionType.getEncoding().impl, iptrType)); setFunctionAttributes(targetMachine.get(), function); llvm::Value* calleeFunction = &*(function->args().begin() + 0); llvm::Value* contextPointer = &*(function->args().begin() + 1); llvm::Value* argsArray = &*(function->args().begin() + 2); llvm::Value* resultsArray = &*(function->args().begin() + 3); EmitContext emitContext(llvmContext, {}); emitContext.irBuilder.SetInsertPoint(llvm::BasicBlock::Create(llvmContext, "entry", function)); emitContext.initContextVariables(contextPointer, iptrType); // Load the function's arguments from the argument array. std::vector arguments; for(Uptr argIndex = 0; argIndex < functionType.params().size(); ++argIndex) { const ValueType paramType = functionType.params()[argIndex]; llvm::Value* argOffset = emitLiteral(llvmContext, argIndex * sizeof(UntaggedValue)); llvm::Value* arg = emitContext.loadFromUntypedPointer( emitContext.irBuilder.CreateInBoundsGEP(llvmContext.i8Type, argsArray, {argOffset}), asLLVMType(llvmContext, paramType), alignof(UntaggedValue)); arguments.push_back(arg); } // Call the function. llvm::Value* functionCode = emitContext.irBuilder.CreateInBoundsGEP( llvmContext.i8Type, calleeFunction, {emitLiteralIptr(offsetof(Runtime::Function, code), iptrType)}); ValueVector results = emitContext.emitCallOrInvoke( emitContext.irBuilder.CreatePointerCast(functionCode, llvmContext.funcptrType), arguments, functionType); // Write the function's results to the results array. WAVM_ASSERT(results.size() == functionType.results().size()); for(Uptr resultIndex = 0; resultIndex < results.size(); ++resultIndex) { llvm::Value* resultOffset = emitLiteral(llvmContext, resultIndex * sizeof(UntaggedValue)); llvm::Value* result = results[resultIndex]; emitContext.storeToUntypedPointer(result, emitContext.irBuilder.CreateInBoundsGEP( llvmContext.i8Type, resultsArray, {resultOffset}), alignof(UntaggedValue)); } // Return the new context pointer. emitContext.irBuilder.CreateRet( emitContext.irBuilder.CreateLoad(llvmContext.ptrType, emitContext.contextPointerVariable)); // Compile the LLVM IR to object code. std::vector objectBytes = compileLLVMModule(llvmContext, std::move(llvmModule), false, targetMachine.get()); // Load the object code. HashMap importedSymbolMap; addLLVMRuntimeSymbols(importedSymbolMap); auto jitModule = new LLVMJIT::Module(std::move(objectBytes), importedSymbolMap, false, std::string(functionMutableData->debugName)); invokeThunkCache.modules.push_back(std::unique_ptr(jitModule)); invokeThunkFunction = jitModule->nameToFunctionMap["thunk"]; return reinterpret_cast(const_cast(invokeThunkFunction->code)); } ================================================ FILE: Lib/Logging/CMakeLists.txt ================================================ set(Sources Logging.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/Logging/Logging.h) WAVM_ADD_LIB_COMPONENT(Logging SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/Logging/Logging.cpp ================================================ #include "WAVM/Logging/Logging.h" #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/File.h" #include "WAVM/VFS/VFS.h" using namespace WAVM; using namespace WAVM::Log; static std::atomic categoryEnabled[(Uptr)Category::num] = { {true}, // error {false}, // debug {false}, // metrics {true}, // output {false}, // trace validation {false}, // trace compilation {false}, // trace unwind {false}, // trace object cache {false}, // trace linking {false}, // trace dwarf }; static_assert(sizeof(categoryEnabled) / sizeof(categoryEnabled[0]) == (Uptr)Category::num, "categoryEnabled array size must match Category::num"); static std::atomic atomicOutputFunction{nullptr}; static VFS::VFD* getFileForCategory(Log::Category category) { return category == Log::error ? Platform::getStdFD(Platform::StdDevice::err) : Platform::getStdFD(Platform::StdDevice::out); } void Log::setCategoryEnabled(Category category, bool enable) { WAVM_ASSERT(category < Category::num); categoryEnabled[(Uptr)category].store(enable); } bool Log::isCategoryEnabled(Category category) { WAVM_ASSERT(category < Category::num); return categoryEnabled[(Uptr)category].load(); } void Log::printf(Category category, const char* format, ...) { if(categoryEnabled[(Uptr)category].load()) { va_list argList; va_start(argList, format); vprintf(category, format, argList); va_end(argList); } } void Log::vprintf(Category category, const char* format, va_list argList) { if(categoryEnabled[(Uptr)category].load()) { static constexpr Uptr maxBufferBytes = 4096; char* buffer = (char*)alloca(maxBufferBytes); I32 numChars = vsnprintf(buffer, maxBufferBytes, format, argList); if(numChars < 0) { numChars = 0; } if(Uptr(numChars) >= maxBufferBytes) { numChars = I32(maxBufferBytes - 1); } // If an output function is set, call it with the message. OutputFunction* outputFunction = atomicOutputFunction.load(std::memory_order_acquire); if(outputFunction) { (*outputFunction)(category, buffer, Uptr(numChars)); } else { // Otherwise, write the message to the appropriate stdio device. // Ignore write failures (e.g. broken pipe). VFS::VFD* fd = getFileForCategory(category); Uptr numBytesWritten = 0; fd->write(buffer, numChars, &numBytesWritten); } } } void Log::setOutputFunction(OutputFunction* newOutputFunction) { atomicOutputFunction.store(newOutputFunction, std::memory_order_release); } ================================================ FILE: Lib/NFA/CMakeLists.txt ================================================ set(Sources NFA.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/NFA/NFA.h) WAVM_ADD_LIB_COMPONENT(NFA SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/NFA/NFA.cpp ================================================ #include "WAVM/NFA/NFA.h" #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/DenseStaticIntSet.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Alloca.h" using namespace WAVM; using namespace WAVM::NFA; struct NFAState { HashMap nextStateToPredicateMap; std::vector epsilonNextStates; }; namespace WAVM { namespace NFA { struct Builder { std::vector nfaStates; }; }} typedef std::vector StateSet; template void addUnique(std::vector& vector, const Element& element) { for(const auto& existingElement : vector) { if(existingElement == element) { return; } } vector.push_back(element); } Builder* NFA::createBuilder() { auto builder = new Builder(); addState(builder); return builder; } StateIndex NFA::addState(Builder* builder) { WAVM_ASSERT(builder->nfaStates.size() < INT16_MAX); builder->nfaStates.emplace_back(); return StateIndex(builder->nfaStates.size() - 1); } void NFA::addEdge(Builder* builder, StateIndex initialState, const CharSet& predicate, StateIndex nextState) { CharSet& transitionPredicate = builder->nfaStates[initialState].nextStateToPredicateMap.getOrAdd(nextState, CharSet{}); transitionPredicate = transitionPredicate | predicate; } void NFA::addEpsilonEdge(Builder* builder, StateIndex initialState, StateIndex nextState) { addUnique(builder->nfaStates[initialState].epsilonNextStates, nextState); } StateIndex NFA::getNonTerminalEdge(Builder* builder, StateIndex initialState, char c) { for(const auto& nextStateToPredicatePair : builder->nfaStates[initialState].nextStateToPredicateMap) { if(nextStateToPredicatePair.key >= 0 && nextStateToPredicatePair.value.contains((U8)c)) { return nextStateToPredicatePair.key; } } return unmatchedCharacterTerminal; } struct DFAState { StateIndex nextStateByChar[256]; DFAState() { for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { nextStateByChar[charIndex] = unmatchedCharacterTerminal | edgeDoesntConsumeInputFlag; } } }; static std::vector convertToDFA(Builder* builder) { Timing::Timer timer; std::vector dfaStates; HashMap nfaStateSetToDFAStateMap; std::vector dfaStateToNFAStateSetMap; std::vector pendingDFAStates; nfaStateSetToDFAStateMap.set(StateSet{0}, (StateIndex)0); dfaStateToNFAStateSetMap.emplace_back(StateSet{0}); dfaStates.emplace_back(); pendingDFAStates.push_back((StateIndex)0); Uptr maxLocalStates = 0; Uptr maxDFANextStates = 0; while(pendingDFAStates.size()) { const StateIndex currentDFAStateIndex = pendingDFAStates.back(); pendingDFAStates.pop_back(); const StateSet currentStateSet = dfaStateToNFAStateSetMap[currentDFAStateIndex]; // Expand the set of current states to include all states reachable by epsilon transitions // from the current states. StateSet epsilonClosureCurrentStateSet = currentStateSet; for(Uptr scanIndex = 0; scanIndex < epsilonClosureCurrentStateSet.size(); ++scanIndex) { StateIndex scanState = epsilonClosureCurrentStateSet[scanIndex]; if(scanState >= 0) { for(auto epsilonNextState : builder->nfaStates[scanState].epsilonNextStates) { addUnique(epsilonClosureCurrentStateSet, epsilonNextState); } } } // Find the subset of the non-terminal states in the current set. StateSet nonTerminalCurrentStateSet; StateIndex currentTerminalState = unmatchedCharacterTerminal | edgeDoesntConsumeInputFlag; bool hasCurrentTerminalState = false; for(auto stateIndex : epsilonClosureCurrentStateSet) { if(stateIndex >= 0) { addUnique(nonTerminalCurrentStateSet, stateIndex); } else { if(hasCurrentTerminalState) { Errors::fatalf("NFA has multiple possible terminal states for the same input"); } hasCurrentTerminalState = true; currentTerminalState = stateIndex | edgeDoesntConsumeInputFlag; } } // Build a compact index of the states following all states in the current set. HashMap stateIndexToLocalStateIndexMap; std::vector localStateIndexToStateIndexMap; for(auto stateIndex : nonTerminalCurrentStateSet) { const NFAState& nfaState = builder->nfaStates[stateIndex]; for(auto transition : nfaState.nextStateToPredicateMap) { if(!stateIndexToLocalStateIndexMap.contains(transition.key)) { stateIndexToLocalStateIndexMap.set( transition.key, (StateIndex)localStateIndexToStateIndexMap.size()); localStateIndexToStateIndexMap.emplace_back(transition.key); } } } if(!stateIndexToLocalStateIndexMap.contains(currentTerminalState)) { stateIndexToLocalStateIndexMap.set(currentTerminalState, (StateIndex)localStateIndexToStateIndexMap.size()); localStateIndexToStateIndexMap.emplace_back(currentTerminalState); } static constexpr Uptr numSupportedLocalStates = 64; typedef DenseStaticIntSet LocalStateSet; const Uptr numLocalStates = stateIndexToLocalStateIndexMap.size(); WAVM_ASSERT(numLocalStates <= numSupportedLocalStates); maxLocalStates = std::max(maxLocalStates, numLocalStates); // Combine the [nextState][char] transition maps for current states and transpose to // [char][nextState] After building the compact index of referenced states, the nextState // set can be represented as a 64-bit mask. LocalStateSet charToLocalStateSet[256]; for(auto stateIndex : nonTerminalCurrentStateSet) { const NFAState& nfaState = builder->nfaStates[stateIndex]; for(auto transition : nfaState.nextStateToPredicateMap) { for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { if(transition.value.contains((char)charIndex)) { charToLocalStateSet[charIndex].add( stateIndexToLocalStateIndexMap[transition.key]); } } } } const LocalStateSet currentTerminalStateLocalSet( stateIndexToLocalStateIndexMap[currentTerminalState]); for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { if(charToLocalStateSet[charIndex].isEmpty()) { charToLocalStateSet[charIndex] = currentTerminalStateLocalSet; } } // Find the set of unique local state sets that follow this state set. std::vector uniqueLocalNextStateSets; for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { const LocalStateSet localStateSet = charToLocalStateSet[charIndex]; if(!localStateSet.isEmpty()) { addUnique(uniqueLocalNextStateSets, localStateSet); } } // For each unique local state set that follows this state set, find or create a // corresponding DFA state. HashMap localStateSetToDFAStateIndexMap; for(auto localNextStateSet : uniqueLocalNextStateSets) { // Convert the local state set bit mask to a global NFA state set. StateSet nextStateSet; { LocalStateSet residualLocalStateSet = localNextStateSet; while(true) { const StateIndex localStateIndex = residualLocalStateSet.getSmallestMember(); if(localStateIndex == numSupportedLocalStates) { break; } nextStateSet.push_back(localStateIndexToStateIndexMap.at(localStateIndex)); residualLocalStateSet.remove(localStateIndex); }; } if(nextStateSet.size() == 1 && *nextStateSet.begin() < 0) { localStateSetToDFAStateIndexMap.set(localNextStateSet, *nextStateSet.begin()); } else { // Find an existing DFA state corresponding to this NFA state set. const StateIndex* nextDFAState = nfaStateSetToDFAStateMap.get(nextStateSet); if(nextDFAState) { localStateSetToDFAStateIndexMap.set(localNextStateSet, *nextDFAState); } else { // If no corresponding DFA state existing yet, create a new one and add it to // the queue of pending states to process. const StateIndex nextDFAStateIndex = (StateIndex)dfaStates.size(); localStateSetToDFAStateIndexMap.set(localNextStateSet, nextDFAStateIndex); nfaStateSetToDFAStateMap.set(nextStateSet, nextDFAStateIndex); dfaStateToNFAStateSetMap.emplace_back(nextStateSet); dfaStates.emplace_back(); pendingDFAStates.push_back(nextDFAStateIndex); } } } // Set up the DFA transition map. DFAState& dfaState = dfaStates[nfaStateSetToDFAStateMap[currentStateSet]]; for(auto localStateSetToDFAStateIndex : localStateSetToDFAStateIndexMap) { const LocalStateSet& localStateSet = localStateSetToDFAStateIndex.key; const StateIndex nextDFAStateIndex = localStateSetToDFAStateIndex.value; for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { if(charToLocalStateSet[charIndex] == localStateSet) { dfaState.nextStateByChar[charIndex] = nextDFAStateIndex; } } } maxDFANextStates = std::max(maxDFANextStates, (Uptr)uniqueLocalNextStateSets.size()); }; Timing::logTimer("translated NFA->DFA", timer); Log::printf(Log::metrics, " translated NFA with %" WAVM_PRIuPTR " states to DFA with %" WAVM_PRIuPTR " states\n", Uptr(builder->nfaStates.size()), Uptr(dfaStates.size())); Log::printf(Log::metrics, " maximum number of states following a NFA state set: %" WAVM_PRIuPTR "\n", maxLocalStates); Log::printf(Log::metrics, " maximum number of states following a DFA state: %" WAVM_PRIuPTR "\n", maxDFANextStates); return dfaStates; } struct StateTransitionsByChar { U8 c; StateIndex* nextStateByInitialState; Uptr numStates; StateTransitionsByChar(U8 inC, Uptr inNumStates) : c(inC), nextStateByInitialState(nullptr), numStates(inNumStates) { } StateTransitionsByChar(StateTransitionsByChar&& inMove) noexcept : c(inMove.c) , nextStateByInitialState(inMove.nextStateByInitialState) , numStates(inMove.numStates) { inMove.nextStateByInitialState = nullptr; } ~StateTransitionsByChar() { if(nextStateByInitialState) { delete[] nextStateByInitialState; } } void operator=(StateTransitionsByChar&& inMove) noexcept { c = inMove.c; nextStateByInitialState = inMove.nextStateByInitialState; numStates = inMove.numStates; inMove.nextStateByInitialState = nullptr; } bool operator<(const StateTransitionsByChar& right) const { WAVM_ASSERT(numStates == right.numStates); return memcmp(nextStateByInitialState, right.nextStateByInitialState, sizeof(StateIndex) * numStates) < 0; } bool operator!=(const StateTransitionsByChar& right) const { WAVM_ASSERT(numStates == right.numStates); return memcmp(nextStateByInitialState, right.nextStateByInitialState, sizeof(StateIndex) * numStates) != 0; } }; NFA::Machine::Machine(Builder* builder) { // Convert the NFA constructed by the builder to a DFA. std::vector dfaStates = convertToDFA(builder); WAVM_ASSERT(dfaStates.size() <= internalMaxStates); delete builder; Timing::Timer timer; // Transpose the [state][character] transition map to [character][state]. std::vector stateTransitionsByChar; for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { stateTransitionsByChar.push_back(StateTransitionsByChar((U8)charIndex, dfaStates.size())); stateTransitionsByChar[charIndex].nextStateByInitialState = new StateIndex[dfaStates.size()]; for(Uptr stateIndex = 0; stateIndex < dfaStates.size(); ++stateIndex) { stateTransitionsByChar[charIndex].nextStateByInitialState[stateIndex] = dfaStates[stateIndex].nextStateByChar[charIndex]; } } // Sort the [character][state] transition map by the [state] column. numStates = dfaStates.size(); std::sort(stateTransitionsByChar.begin(), stateTransitionsByChar.end()); // Build a minimal set of character equivalence classes that have the same transition across all // states. U8 characterToClassMap[256]; U8 representativeCharsByClass[256]; numClasses = 1; characterToClassMap[stateTransitionsByChar[0].c] = 0; representativeCharsByClass[0] = stateTransitionsByChar[0].c; for(Uptr charIndex = 1; charIndex < stateTransitionsByChar.size(); ++charIndex) { if(stateTransitionsByChar[charIndex] != stateTransitionsByChar[charIndex - 1]) { representativeCharsByClass[numClasses] = stateTransitionsByChar[charIndex].c; ++numClasses; } characterToClassMap[stateTransitionsByChar[charIndex].c] = U8(numClasses - 1); } // Build a [charClass][state] transition map. stateAndOffsetToNextStateMap = new InternalStateIndex[numClasses * numStates]; for(Uptr classIndex = 0; classIndex < numClasses; ++classIndex) { for(Uptr stateIndex = 0; stateIndex < numStates; ++stateIndex) { stateAndOffsetToNextStateMap[stateIndex + classIndex * numStates] = InternalStateIndex( dfaStates[stateIndex].nextStateByChar[representativeCharsByClass[classIndex]]); } } // Build a map from character index to offset into [charClass][initialState] transition map. WAVM_ASSERT((numClasses - 1) * (numStates - 1) <= UINT32_MAX); for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { charToOffsetMap[charIndex] = U32(numStates * characterToClassMap[charIndex]); } Timing::logTimer("reduced DFA character classes", timer); Log::printf(Log::metrics, " reduced DFA character classes to %" WAVM_PRIuPTR "\n", numClasses); } NFA::Machine::~Machine() { if(stateAndOffsetToNextStateMap) { delete[] stateAndOffsetToNextStateMap; stateAndOffsetToNextStateMap = nullptr; } } void NFA::Machine::moveFrom(Machine&& inMachine) noexcept { memcpy(charToOffsetMap, inMachine.charToOffsetMap, sizeof(charToOffsetMap)); stateAndOffsetToNextStateMap = inMachine.stateAndOffsetToNextStateMap; inMachine.stateAndOffsetToNextStateMap = nullptr; numClasses = inMachine.numClasses; numStates = inMachine.numStates; } static char nibbleToHexChar(U8 value) { return value < 10 ? ('0' + value) : 'a' + value - 10; } static std::string escapeString(const std::string& string) { std::string result; for(Uptr charIndex = 0; charIndex < string.size(); ++charIndex) { auto c = string[charIndex]; if(c == '\\') { result += "\\\\"; } else if(c == '\"') { result += "\\\""; } else if(c == '\n') { result += "\\n"; } else if(c < 0x20 || c > 0x7e) { result += "\\\\"; result += nibbleToHexChar((c & 0xf0) >> 4); result += nibbleToHexChar((c & 0x0f) >> 0); } else { result += c; } } return result; } static std::string getGraphEdgeCharLabel(Uptr charIndex) { switch(charIndex) { case '^': return "\\^"; case '\f': return "\\f"; case '\r': return "\\r"; case '\n': return "\\n"; case '\t': return "\\t"; case '\'': return "\\\'"; case '\"': return "\\\""; case '\\': return "\\\\"; case '-': return "\\-"; default: return std::string(1, (char)charIndex); }; } static std::string getGraphEdgeLabel(const CharSet& charSet) { std::string edgeLabel; U8 numSetChars = 0; for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { if(charSet.contains((char)charIndex)) { ++numSetChars; } } if(numSetChars > 1) { edgeLabel += "["; } const bool isNegative = numSetChars >= 100; if(isNegative) { edgeLabel += "^"; } for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { if(charSet.contains((char)charIndex) != isNegative) { edgeLabel += getGraphEdgeCharLabel(charIndex); if(charIndex + 2 < 256 && charSet.contains((char)charIndex + 1) != isNegative && charSet.contains((char)charIndex + 2) != isNegative) { edgeLabel += "-"; charIndex += 2; while(charIndex + 1 < 256 && charSet.contains((char)charIndex + 1) != isNegative) { ++charIndex; } edgeLabel += getGraphEdgeCharLabel(charIndex); } } } if(numSetChars > 1) { edgeLabel += "]"; } return edgeLabel; } std::string NFA::dumpNFAGraphViz(const Builder* builder) { std::string result; result += "digraph {\n"; HashSet terminalStates; for(Uptr stateIndex = 0; stateIndex < builder->nfaStates.size(); ++stateIndex) { const NFAState& nfaState = builder->nfaStates[stateIndex]; result += "state" + std::to_string(stateIndex) + "[shape=square label=\"" + std::to_string(stateIndex) + "\"];\n"; for(const auto& statePredicatePair : nfaState.nextStateToPredicateMap) { std::string edgeLabel = getGraphEdgeLabel(statePredicatePair.value); std::string nextStateName = statePredicatePair.key < 0 ? "terminal" + std::to_string(-statePredicatePair.key) : "state" + std::to_string(statePredicatePair.key); result += "state" + std::to_string(stateIndex) + " -> " + nextStateName + "[label=\"" + escapeString(edgeLabel) + "\"];\n"; if(statePredicatePair.key < 0) { terminalStates.add(statePredicatePair.key); } } for(auto epsilonNextState : nfaState.epsilonNextStates) { std::string nextStateName = epsilonNextState < 0 ? "terminal" + std::to_string(-epsilonNextState) : "state" + std::to_string(epsilonNextState); result += "state" + std::to_string(stateIndex) + " -> " + nextStateName + "[label=\"ε\"];\n"; } } for(auto terminalState : terminalStates) { result += "terminal" + std::to_string(-terminalState) + "[shape=octagon label=\"" + std::to_string(maximumTerminalStateIndex - terminalState) + "\"];\n"; } result += "}\n"; return result; } std::string NFA::Machine::dumpDFAGraphViz() const { std::string result; result += "digraph {\n"; HashSet terminalStates; CharSet* classCharSets = new(alloca(sizeof(CharSet) * numClasses)) CharSet[numClasses]; for(Uptr charIndex = 0; charIndex < 256; ++charIndex) { const Uptr classIndex = charToOffsetMap[charIndex] / numStates; classCharSets[classIndex].add((U8)charIndex); } { HashMap transitions; for(Uptr classIndex = 0; classIndex < numClasses; ++classIndex) { const InternalStateIndex nextState = stateAndOffsetToNextStateMap[0 + classIndex * numStates]; CharSet& transitionPredicate = transitions.getOrAdd(nextState, CharSet{}); transitionPredicate = classCharSets[classIndex] | transitionPredicate; } Uptr startIndex = 0; for(auto transitionPair : transitions) { if((transitionPair.key & ~edgeDoesntConsumeInputFlag) != unmatchedCharacterTerminal) { result += "start" + std::to_string(startIndex) + "[shape=triangle label=\"\"];\n"; std::string edgeLabel = getGraphEdgeLabel(transitionPair.value); std::string nextStateName = transitionPair.key < 0 ? "terminal" + std::to_string( -(transitionPair.key & ~edgeDoesntConsumeInputFlag)) : "state" + std::to_string(transitionPair.key); result += "start" + std::to_string(startIndex) + " -> " + nextStateName + "[label=\"" + (transitionPair.key < 0 && (transitionPair.key & edgeDoesntConsumeInputFlag) != 0 ? "ε " : "") + escapeString(edgeLabel) + "\"];\n"; if(transitionPair.key < 0) { terminalStates.add( StateIndex(transitionPair.key & ~edgeDoesntConsumeInputFlag)); } ++startIndex; } } } for(Uptr stateIndex = 1; stateIndex < numStates; ++stateIndex) { result += "state" + std::to_string(stateIndex) + "[shape=square label=\"" + std::to_string(stateIndex) + "\"];\n"; HashMap transitions; for(Uptr classIndex = 0; classIndex < numClasses; ++classIndex) { const InternalStateIndex nextState = stateAndOffsetToNextStateMap[stateIndex + classIndex * numStates]; CharSet& transitionPredicate = transitions.getOrAdd(nextState, CharSet{}); transitionPredicate = classCharSets[classIndex] | transitionPredicate; } for(auto transitionPair : transitions) { if((transitionPair.key & ~edgeDoesntConsumeInputFlag) != unmatchedCharacterTerminal) { std::string edgeLabel = getGraphEdgeLabel(transitionPair.value); std::string nextStateName = transitionPair.key < 0 ? "terminal" + std::to_string( -(transitionPair.key & ~edgeDoesntConsumeInputFlag)) : "state" + std::to_string(transitionPair.key); result += "state" + std::to_string(stateIndex) + " -> " + nextStateName + "[label=\"" + (transitionPair.key < 0 && (transitionPair.key & edgeDoesntConsumeInputFlag) != 0 ? "ε " : "") + escapeString(edgeLabel) + "\"];\n"; if(transitionPair.key < 0) { terminalStates.add(transitionPair.key); } } } } for(auto terminalState : terminalStates) { result += "terminal" + std::to_string(-(terminalState & ~edgeDoesntConsumeInputFlag)) + "[shape=octagon label=\"" + std::to_string(maximumTerminalStateIndex - (terminalState & ~edgeDoesntConsumeInputFlag)) + "\"];\n"; } result += "}\n"; return result; } ================================================ FILE: Lib/ObjectCache/CMakeLists.txt ================================================ set(Sources ObjectCache.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/ObjectCache/ObjectCache.h) WAVM_ADD_LIB_COMPONENT(ObjectCache SOURCES ${Sources} HEADERS ${PublicHeaders} PRIVATE_LIBS WAVMlmdb WAVMBLAKE2) ================================================ FILE: Lib/ObjectCache/ObjectCache.cpp ================================================ #include "WAVM/ObjectCache/ObjectCache.h" #include #include #include #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Time.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Clock.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Runtime/Runtime.h" #include "lmdb.h" #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4804) #endif #include "blake2.h" #ifdef _MSC_VER #pragma warning(pop) #endif #define CURRENT_DB_VERSION 1 using namespace WAVM; using namespace WAVM::ObjectCache; #define ERROR_UNLESS_MDB_SUCCESS(expr) \ { \ int error = (expr); \ if(error) { Errors::fatalf("%s failed: %s", #expr, mdb_strerror(error)); } \ } // A database key to identify a cached module by a hash that identifies the code generation version, // and a hash of the module's WASM serialization. WAVM_PACKED_STRUCT(struct ModuleKey { U8 codeKeyBytes[8]; union { U8 moduleHashBytes[16]; U64 moduleHashU64s[2]; }; ModuleKey() = default; ModuleKey(U64 codeKey, U8 inModuleHashBytes[16]) { memcpy(codeKeyBytes, &codeKey, sizeof(codeKeyBytes)); memcpy(moduleHashBytes, inModuleHashBytes, sizeof(moduleHashBytes)); } U64 getCodeKey() const { U64 result = 0; memcpy(&result, codeKeyBytes, sizeof(U64)); return result; } }); // A database key that orders Time values in ascending order. LMDB orders the keys lexically as a // string of bytes, so the Time's I128 needs to be encoded in big-endian order to place the // most-signifigant bits at the beginning of that string. WAVM_PACKED_STRUCT(struct TimeKey { U8 bytes[16]; TimeKey() = default; TimeKey(const Time& time) { WAVM_ASSERT(time.ns >= 0); for(Uptr byteIndex = 0; byteIndex < 16; ++byteIndex) { bytes[15 - byteIndex] = U8((time.ns >> (byteIndex * 8)) & 0xff); } } Time getTime() const { Time result; result.ns = 0; for(Uptr byteIndex = 0; byteIndex < 16; ++byteIndex) { result.ns |= I128(bytes[15 - byteIndex]) << (byteIndex * 8); } return result; } }); WAVM_PACKED_STRUCT(struct Metadata { TimeKey lastAccessTimeKey; }); // // Helper functions to reinterpret C++ types to and from MDB_vals. // template MDB_val asMDBVal(const Value& value) { MDB_val result; result.mv_data = const_cast(&value); result.mv_size = sizeof(Value); return result; } template void fromMDBVal(const MDB_val& mdbVal, Value& outValue) { WAVM_ASSERT(mdbVal.mv_size == sizeof(Value)); memcpy(&outValue, mdbVal.mv_data, sizeof(Value)); } template<> MDB_val asMDBVal>(const std::vector& bytes) { MDB_val result; result.mv_data = const_cast(bytes.data()); result.mv_size = bytes.size(); return result; } template<> void fromMDBVal>(const MDB_val& mdbVal, std::vector& outBytes) { outBytes = std::vector((const U8*)mdbVal.mv_data, (const U8*)mdbVal.mv_data + mdbVal.mv_size); } template<> MDB_val asMDBVal(const MDB_val& val) { return val; } template<> void fromMDBVal(const MDB_val& mdbVal, MDB_val& outMDBVal) { outMDBVal = mdbVal; } // A thin wrapper around a LMDB database that encapsulates error handling and translating // keys/values to MDB_val. struct Database { // An exception that may be thrown by beginTxn, getKeyValue, putKeyValue, and deleteKey. struct Exception { enum class Type { keyNotFound, diskIsFull, mapIsFull, tooManyReaders, }; const Type type; Exception(Type inType) : type(inType) {} static const char* getMessage(Type type) { switch(type) { case Type::keyNotFound: return "key not found"; case Type::diskIsFull: return "disk is full"; case Type::mapIsFull: return "database is full"; case Type::tooManyReaders: return "too many readers"; default: WAVM_UNREACHABLE(); }; } }; Database(MDB_env* inEnv) : env(inEnv) {} ~Database() { mdb_env_close(env); } // Begins a transaction. Throws a Database::Exception if there are too many concurrent readers. // All other errors are fatal. MDB_txn* beginTxn(unsigned int flags = 0, MDB_txn* parentTxn = nullptr) { MDB_txn* txn = nullptr; int beginResult = mdb_txn_begin(env, parentTxn, flags, &txn); if(beginResult == MDB_MAP_RESIZED) { // "If the mapsize is increased by another process, and data has grown beyond the range // of the current mapsize, mdb_txn_begin() will return MDB_MAP_RESIZED. This function // may be called with a size of zero to adopt the new size." ERROR_UNLESS_MDB_SUCCESS(mdb_env_set_mapsize(env, 0)); beginResult = mdb_txn_begin(env, parentTxn, flags, &txn); } if(beginResult == MDB_READERS_FULL) { throw Exception(Exception::Type::tooManyReaders); } ERROR_UNLESS_MDB_SUCCESS(beginResult); return txn; } // Gets a handle for a table. All errors are fatal. MDB_dbi openTable(MDB_txn* txn, const char* name, unsigned int flags) { MDB_dbi dbi{0}; ERROR_UNLESS_MDB_SUCCESS(mdb_dbi_open(txn, name, flags, &dbi)); return dbi; } // Looks up a key in a table. // asMDBVal(const Key&) and fromMDBVal(MDB_val, Value&) must be defined. // If the table contains the key, it writes the to outValue and returns true. // If the table does not contain the key, it returns false. template static bool tryGetKeyValue(MDB_txn* txn, MDB_dbi dbi, const Key& key, Value& outValue) { MDB_val keyVal = asMDBVal(key); MDB_val dataVal; int getResult = mdb_get(txn, dbi, &keyVal, &dataVal); if(getResult == MDB_NOTFOUND) { return false; } if(getResult) { Errors::fatalf("mdb_get failed: %s", mdb_strerror(getResult)); } fromMDBVal(dataVal, outValue); return true; } // Looks up a key in a table. // asMDBVal(const Key&) and fromMDBVal(MDB_val, Value&) must be defined. // If the table contains the key, it writes the to outValue. // If the table does not contain the key, it throws a Database::Exception. template static void getKeyValue(MDB_txn* txn, MDB_dbi dbi, const Key& key, Value& outValue) { if(!tryGetKeyValue(txn, dbi, key, outValue)) { throw Exception(Exception::Type::keyNotFound); } } // Writes a key+value pair to a table. // asMDBVal(const Key&) and asMDBVal(const Value&) must be defined. // If the operation succeeded, it returns true. // If the database is full, it returns false. // All other errors are fatal. template static bool tryPutKeyValue(MDB_txn* txn, MDB_dbi dbi, const Key& key, const Value& value) { MDB_val keyVal = asMDBVal(key); MDB_val dataVal = asMDBVal(value); int putResult = mdb_put(txn, dbi, &keyVal, &dataVal, 0); if(putResult == MDB_MAP_FULL) { return false; } if(putResult) { Errors::fatalf("mdb_put failed: %s", mdb_strerror(putResult)); } return true; } // Writes a key+value pair to a table. // asMDBVal(const Key&) and asMDBVal(const Value&) must be defined. // If the database is full, it throws a Database::Exception. // All other errors are fatal. template static void putKeyValue(MDB_txn* txn, MDB_dbi dbi, const Key& key, const Value& value) { if(!tryPutKeyValue(txn, dbi, key, value)) { throw Exception(Exception::Type::mapIsFull); } } // Deletes a key from a table. // asMDBVal(const Key&) must be defined. // If the table contains the key, it deletes it and returns true. // If the table does not contain the key, it returns false. // All other errors are fatal. template static bool tryDeleteKey(MDB_txn* txn, MDB_dbi dbi, const Key& key) { MDB_val keyVal = asMDBVal(key); MDB_val dataVal; int delResult = mdb_del(txn, dbi, &keyVal, &dataVal); if(delResult == MDB_NOTFOUND) { return false; } if(delResult) { Errors::fatalf("mdb_del failed: %s", mdb_strerror(delResult)); } return true; } // Deletes a key from a table. // asMDBVal(const Key&) must be defined. // If the table contains the key, it deletes it. // If the table does not contain the key, it throws a Database::Exception. // All other errors are fatal. template static void deleteKey(MDB_txn* txn, MDB_dbi dbi, const Key& key) { if(!tryDeleteKey(txn, dbi, key)) { throw Exception(Exception::Type::keyNotFound); } } // Opens a cursor for the given table. All errors are fatal. static MDB_cursor* openCursor(MDB_txn* txn, MDB_dbi dbi) { MDB_cursor* cursor = nullptr; ERROR_UNLESS_MDB_SUCCESS(mdb_cursor_open(txn, dbi, &cursor)); return cursor; } // Reads the key+value pair from the given cursor after executing a cursor operation. // fromMDBVal(MDB_val, Key&) and fromMDBVal(MDB_val, Value&) must be defined. // If the cursor doesn't point to a valid key, returns false. // Otherwise, writes the key to outKey, the value to outValue, and returns true. // All other errors are fatal. template static bool tryGetCursor(MDB_cursor* cursor, Key& outKey, Value& outValue, MDB_cursor_op op) { MDB_val mdbKey; MDB_val mdbValue; int getResult = mdb_cursor_get(cursor, &mdbKey, &mdbValue, op); if(getResult == MDB_NOTFOUND) { return false; } if(getResult) { Errors::fatalf("mdb_get failed: %s", mdb_strerror(getResult)); } fromMDBVal(mdbKey, outKey); fromMDBVal(mdbValue, outValue); return true; } // Closes a cursor. May not fail. static void closeCursor(MDB_cursor* cursor) { mdb_cursor_close(cursor); } // Removes all entries from a table. All errors are fatal. static void dropDB(MDB_txn* txn, MDB_dbi dbi) { ERROR_UNLESS_MDB_SUCCESS(mdb_drop(txn, dbi, 0)); } private: MDB_env* env; }; // Ensures that a lexically scoped transaction is committed or aborted when going out of scope. struct ScopedTxn { ScopedTxn(MDB_txn* inTxn) : txn(inTxn) {} ~ScopedTxn() { if(txn) { abort(); } } operator MDB_txn*() { return txn; } void abort() { WAVM_ASSERT(txn); mdb_txn_abort(txn); txn = nullptr; } void commit() { WAVM_ASSERT(txn); int commitResult = mdb_txn_commit(txn); txn = nullptr; if(commitResult == ENOSPC) { throw Database::Exception(Database::Exception::Type::diskIsFull); } if(commitResult) { Errors::fatalf("mdb_txn_commit failed: %s", mdb_strerror(commitResult)); } } private: MDB_txn* txn; }; static void logModuleHash(const char* prefix, const U8 moduleHashBytes[16]) { Log::printf(Log::traceObjectCache, "%s: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", prefix, moduleHashBytes[0], moduleHashBytes[1], moduleHashBytes[2], moduleHashBytes[3], moduleHashBytes[4], moduleHashBytes[5], moduleHashBytes[6], moduleHashBytes[7], moduleHashBytes[8], moduleHashBytes[9], moduleHashBytes[10], moduleHashBytes[11], moduleHashBytes[12], moduleHashBytes[13], moduleHashBytes[14], moduleHashBytes[15]); } // Encapsulates the global state of the object cache. struct LMDBObjectCache : Runtime::ObjectCacheInterface { OpenResult init(const char* path, Uptr maxBytes, U64 inCodeKey) { codeKey = inCodeKey; // Open the LMDB database, retrying on ENOENT. MDB_env* env = nullptr; int openError = 0; for(Uptr attempt = 0; attempt <= 3; ++attempt) { ERROR_UNLESS_MDB_SUCCESS(mdb_env_create(&env)); ERROR_UNLESS_MDB_SUCCESS(mdb_env_set_mapsize(env, maxBytes)); ERROR_UNLESS_MDB_SUCCESS(mdb_env_set_maxdbs(env, 5)); openError = mdb_env_open(env, path, MDB_NOMETASYNC, 0666); if(!openError) { break; } mdb_env_close(env); env = nullptr; if(openError != ENOENT) { break; } } if(openError) { switch(openError) { case ENOENT: return OpenResult::doesNotExist; case ENOTDIR: return OpenResult::notDirectory; case EACCES: return OpenResult::notAccessible; case MDB_INVALID: return OpenResult::invalidDatabase; default: Errors::fatalf( "mdb_env_open(env, \"%s\", 0, 0666) failed: %s", path, mdb_strerror(openError)); }; } // Create the database wrapper. database.reset(new Database(env)); try { ScopedTxn txn(database->beginTxn()); // Open or create the database tables used by the object cache. objectTable = database->openTable(txn, "objects", MDB_CREATE); metaTable = database->openTable(txn, "meta", MDB_CREATE); lruTable = database->openTable(txn, "lru", MDB_CREATE); versionTable = database->openTable(txn, "version", MDB_CREATE); // Check the object cache version stored in the database. const char versionString[] = "version"; U64 dbVersion = UINT64_MAX; bool writeVersion = false; if(!Database::tryGetKeyValue(txn, versionTable, versionString, dbVersion)) { writeVersion = true; } else if(dbVersion != CURRENT_DB_VERSION) { writeVersion = true; // If the object cache version doesn't match the current version, clear all the // tables. Log::printf(Log::debug, "Clearing contents of outdated object cache database '%s'.\n", path); Database::dropDB(txn, objectTable); Database::dropDB(txn, metaTable); Database::dropDB(txn, lruTable); Database::dropDB(txn, versionTable); } if(writeVersion) { // Write the current object cache version to the database. dbVersion = CURRENT_DB_VERSION; Database::putKeyValue(txn, versionTable, versionString, dbVersion); } // Commit the initialization transaction. txn.commit(); return OpenResult::success; } catch(Database::Exception const& exception) { // If one of the database operations threw an exception, close the database and return // the appropriate error code. database.reset(); switch(exception.type) { case Database::Exception::Type::tooManyReaders: return OpenResult::tooManyReaders; case Database::Exception::Type::keyNotFound: case Database::Exception::Type::diskIsFull: case Database::Exception::Type::mapIsFull: return OpenResult::invalidDatabase; default: WAVM_UNREACHABLE(); }; } } bool tryGetCachedObject(U8 moduleHash[16], const U8* wasmBytes, Uptr numWASMBytes, std::vector& outObjectCode) { Timing::Timer readTimer; ScopedTxn txn(database->beginTxn()); // Check for a cached module with this hash key. bool hadCachedObject = false; ModuleKey moduleKey(codeKey, moduleHash); if(Database::tryGetKeyValue(txn, objectTable, moduleKey, outObjectCode)) { // Update the last-used time for the cached module. Metadata metadata; Database::getKeyValue(txn, metaTable, moduleKey, metadata); Database::deleteKey(txn, lruTable, metadata.lastAccessTimeKey); metadata.lastAccessTimeKey = Platform::getClockTime(Platform::Clock::realtime); Database::putKeyValue(txn, metaTable, moduleKey, metadata); Database::putKeyValue(txn, lruTable, metadata.lastAccessTimeKey, moduleKey); hadCachedObject = true; } // Commit the read transaction. txn.commit(); Timing::logTimer("Probed for cached object", readTimer); return hadCachedObject; } void addCachedObject(U8 moduleHash[16], const U8* wasmBytes, Uptr numWASMBytes, const std::vector& objectBytes) { Timing::Timer writeTimer; Time now = Platform::getClockTime(Platform::Clock::realtime); ModuleKey moduleKey(codeKey, moduleHash); // Try to add the module to the database. bool firstTry = true; while(true) { // If a previous try failed due to the database being full, try to evict the least // recently used cached object. if(!firstTry) { if(!evictLRU()) { // If there are no cached objects to evict, the object must just not fit in the // database. Log a warning and return without adding it to the database. Log::printf(Log::debug, "Failed to add object to cache: too large.\n"); break; } } firstTry = false; ScopedTxn txn(database->beginTxn()); // If there was already a metadata entry for the module, remove its LRU entry to ensure // the LRU table doesn't end up with multiple entries for this module. This keeps the // database consistent if a cached object is being redundantly added for some reason. Metadata metadata; if(Database::tryGetKeyValue(txn, metaTable, moduleKey, metadata)) { Database::deleteKey(txn, lruTable, metadata.lastAccessTimeKey); } metadata.lastAccessTimeKey = now; // Add the module to the object, metadata, and LRU tables. if(Database::tryPutKeyValue(txn, metaTable, moduleKey, metadata) && Database::tryPutKeyValue(txn, lruTable, metadata.lastAccessTimeKey, moduleKey) && Database::tryPutKeyValue(txn, objectTable, moduleKey, objectBytes)) { txn.commit(); break; } }; Timing::logTimer("Add object to cache", writeTimer); } void dump() { const Time now = Platform::getClockTime(Platform::Clock::realtime); ScopedTxn txn(database->beginTxn(MDB_RDONLY)); // Dump the contents of the object table. Log::printf(Log::debug, "Object table:\n"); { MDB_cursor* cursor = Database::openCursor(txn, objectTable); ModuleKey moduleKey; MDB_val objectBytesVal; bool getResult = Database::tryGetCursor(cursor, moduleKey, objectBytesVal, MDB_FIRST); while(getResult) { Log::printf(Log::debug, " %16" PRIx64 "|%16" PRIx64 "%16" PRIx64 " %zu bytes\n", moduleKey.getCodeKey(), moduleKey.moduleHashU64s[0], moduleKey.moduleHashU64s[1], objectBytesVal.mv_size); getResult = Database::tryGetCursor(cursor, moduleKey, objectBytesVal, MDB_NEXT); }; Database::closeCursor(cursor); } // Dump the contents of the metadata table. Log::printf(Log::debug, "Meta table:\n"); { MDB_cursor* cursor = Database::openCursor(txn, metaTable); ModuleKey moduleKey; Metadata metadata; bool getResult = Database::tryGetCursor(cursor, moduleKey, metadata, MDB_FIRST); while(getResult) { const F64 lastAccessTimeAge = F64((now.ns - metadata.lastAccessTimeKey.getTime().ns) / 1000000000); Log::printf(Log::debug, " %16" PRIx64 "|%16" PRIx64 "%16" PRIx64 " last access: %.1f seconds ago\n", moduleKey.getCodeKey(), moduleKey.moduleHashU64s[0], moduleKey.moduleHashU64s[1], lastAccessTimeAge); getResult = Database::tryGetCursor(cursor, moduleKey, metadata, MDB_NEXT); }; Database::closeCursor(cursor); } // Dump the contents of the LRU table. Log::printf(Log::debug, "LRU table:\n"); { MDB_cursor* cursor = Database::openCursor(txn, lruTable); TimeKey lastAccessTimeKey; ModuleKey moduleKey; bool getResult = Database::tryGetCursor(cursor, lastAccessTimeKey, moduleKey, MDB_FIRST); while(getResult) { const F64 ageSeconds = F64((now.ns - lastAccessTimeKey.getTime().ns) / 1000000000); Log::printf(Log::debug, " %16" PRIx64 "|%16" PRIx64 "%16" PRIx64 " %.1f seconds ago\n", moduleKey.getCodeKey(), moduleKey.moduleHashU64s[0], moduleKey.moduleHashU64s[1], ageSeconds); getResult = Database::tryGetCursor(cursor, lastAccessTimeKey, moduleKey, MDB_NEXT); }; Database::closeCursor(cursor); } } virtual std::vector getCachedObject( const U8* wasmBytes, Uptr numWASMBytes, std::function()>&& compileThunk) override { // Compute a hash of the serialized WASM module. Timing::Timer hashTimer; U8 moduleHashBytes[16]; if(blake2b(moduleHashBytes, sizeof(moduleHashBytes), wasmBytes, numWASMBytes, nullptr, 0)) { Errors::fatal("blake2b error"); } Timing::logRatePerSecond( "Hashed module key", hashTimer, numWASMBytes / 1024.0 / 1024.0, "MiB"); // Try to find the module's object code in the cache. std::vector objectCode; try { if(tryGetCachedObject(moduleHashBytes, wasmBytes, numWASMBytes, objectCode)) { logModuleHash("Object cache hit", moduleHashBytes); return objectCode; } } catch(Database::Exception const& exception) { Log::printf(Log::error, "Failed to lookup module in object cache: %s\n", Database::Exception::getMessage(exception.type)); } // If there wasn't a matching cached module+object code, compile the module. logModuleHash("Object cache miss", moduleHashBytes); objectCode = compileThunk(); // Add the cached module+object code to the database. try { addCachedObject(moduleHashBytes, wasmBytes, numWASMBytes, objectCode); } catch(Database::Exception const& exception) { Log::printf(Log::error, "Failed to add module to object cache: %s\n", Database::Exception::getMessage(exception.type)); } return objectCode; } private: std::unique_ptr database; MDB_dbi objectTable; MDB_dbi metaTable; MDB_dbi lruTable; MDB_dbi versionTable; U64 codeKey{0}; bool evictLRU() { ScopedTxn txn(database->beginTxn()); // Try to read the oldest entry in the LRU table. TimeKey lastAccessTimeKey; ModuleKey moduleKey; MDB_cursor* cursor = Database::openCursor(txn, lruTable); if(!Database::tryGetCursor(cursor, lastAccessTimeKey, moduleKey, MDB_FIRST)) { return false; } Database::closeCursor(cursor); // Delete the cached object identified by the oldest entry in the LRU table from all tables. Database::deleteKey(txn, objectTable, moduleKey); Database::deleteKey(txn, metaTable, moduleKey); Database::deleteKey(txn, lruTable, lastAccessTimeKey); // Commit the delete. txn.commit(); Log::printf(Log::debug, "Evicted %16" PRIx64 "%16" PRIx64 " from the object cache.\n", moduleKey.moduleHashU64s[0], moduleKey.moduleHashU64s[1]); return true; } }; OpenResult ObjectCache::open(const char* path, Uptr maxBytes, U64 codeKey, std::shared_ptr& outObjectCache) { LMDBObjectCache lmdbObjectCache; OpenResult result = lmdbObjectCache.init(path, maxBytes, codeKey); if(result == OpenResult::success) { outObjectCache = std::make_shared(std::move(lmdbObjectCache)); } return result; } ================================================ FILE: Lib/ObjectLinker/CMakeLists.txt ================================================ set(Sources ObjectLinker.cpp COFF.cpp ELF.cpp MachO.cpp) set(PrivateHeaders ObjectLinkerPrivate.h) set(PublicHeaders ${WAVM_INCLUDE_DIR}/ObjectLinker/ObjectLinker.h) WAVM_ADD_LIB_COMPONENT(ObjectLinker SOURCES ${Sources} HEADERS ${PublicHeaders} ${PrivateHeaders}) ================================================ FILE: Lib/ObjectLinker/COFF.cpp ================================================ #include #include #include #include #include #include #include "ObjectLinkerPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/IntCasts.h" #include "WAVM/Inline/UnalignedArrayView.h" #include "WAVM/Logging/Logging.h" #include "WAVM/ObjectLinker/ObjectLinker.h" #include "WAVM/Platform/Defines.h" using namespace WAVM; using namespace WAVM::ObjectLinker; // COFF header structures. struct CoffFileHeader { U16 Machine; U16 NumberOfSections; U32 TimeDateStamp; U32 PointerToSymbolTable; U32 NumberOfSymbols; U16 SizeOfOptionalHeader; U16 Characteristics; }; struct CoffSectionHeader { char Name[8]; U32 VirtualSize; U32 VirtualAddress; U32 SizeOfRawData; U32 PointerToRawData; U32 PointerToRelocations; U32 PointerToLinenumbers; U16 NumberOfRelocations; U16 NumberOfLinenumbers; U32 Characteristics; }; // CoffSymbol is 18 bytes on disk; without packing the compiler adds 2 bytes of tail padding. WAVM_PACKED_STRUCT(struct CoffSymbol { union { char ShortName[8]; struct { U32 Zeros; U32 Offset; } LongName; } Name; U32 Value; I16 SectionNumber; U16 Type; U8 StorageClass; U8 NumberOfAuxSymbols; }); // CoffRelocation is 10 bytes on disk; without packing the compiler adds 2 bytes of tail padding. WAVM_PACKED_STRUCT(struct CoffRelocation { U32 VirtualAddress; U32 SymbolTableIndex; U16 Type; }); // COFF constants. static constexpr U16 IMAGE_FILE_MACHINE_AMD64 = 0x8664; static constexpr U16 IMAGE_FILE_MACHINE_ARM64 = 0xAA64; // Section characteristics. static constexpr U32 IMAGE_SCN_MEM_EXECUTE = 0x20000000; static constexpr U32 IMAGE_SCN_MEM_WRITE = 0x80000000; static constexpr U32 IMAGE_SCN_ALIGN_MASK = 0x00F00000; // Symbol storage classes. static constexpr U8 IMAGE_SYM_CLASS_EXTERNAL = 2; // x86-64 COFF relocation types. static constexpr U16 IMAGE_REL_AMD64_ADDR64 = 0x0001; static constexpr U16 IMAGE_REL_AMD64_ADDR32NB = 0x0003; static constexpr U16 IMAGE_REL_AMD64_REL32 = 0x0004; static constexpr U16 IMAGE_REL_AMD64_REL32_1 = 0x0005; static constexpr U16 IMAGE_REL_AMD64_REL32_2 = 0x0006; static constexpr U16 IMAGE_REL_AMD64_REL32_3 = 0x0007; static constexpr U16 IMAGE_REL_AMD64_REL32_4 = 0x0008; static constexpr U16 IMAGE_REL_AMD64_REL32_5 = 0x0009; static constexpr U16 IMAGE_REL_AMD64_SECTION = 0x000A; static constexpr U16 IMAGE_REL_AMD64_SECREL = 0x000B; // AArch64 COFF relocation types. static constexpr U16 IMAGE_REL_ARM64_ADDR64 = 0x000E; static constexpr U16 IMAGE_REL_ARM64_ADDR32NB = 0x0002; static constexpr U16 IMAGE_REL_ARM64_BRANCH26 = 0x0003; static constexpr U16 IMAGE_REL_ARM64_PAGEBASE_REL21 = 0x0004; static constexpr U16 IMAGE_REL_ARM64_PAGEOFFSET_12A = 0x0006; static constexpr U16 IMAGE_REL_ARM64_PAGEOFFSET_12L = 0x0007; static constexpr U16 IMAGE_REL_ARM64_SECREL = 0x0008; static constexpr U16 IMAGE_REL_ARM64_SECTION = 0x000D; static constexpr U16 IMAGE_REL_ARM64_SECREL_LOW12A = 0x0009; static constexpr U16 IMAGE_REL_ARM64_SECREL_HIGH12A = 0x000A; static constexpr U16 IMAGE_REL_ARM64_SECREL_LOW12L = 0x000B; // AArch64 page size and mask for ADRP calculations. static constexpr U32 AARCH64_PAGE_SHIFT = 12; static constexpr U64 AARCH64_PAGE_MASK = (U64(1) << AARCH64_PAGE_SHIFT) - 1; // ADRP range: +/-4GB (21-bit signed page count, each page is 4KB). static constexpr I64 ADRP_MAX_PAGE_COUNT = 0xFFFFF; // +4GB static constexpr I64 ADRP_MIN_PAGE_COUNT = -0x100000; // -4GB // Stub sizes for out-of-range ADRP fixups. // Data-access stub: LDR X16,[PC,#12]; modified LDR/STR; B return; .quad addr static constexpr Uptr ADRP_DATA_STUB_SIZE = 20; // Separated ADRP stub: LDR Xd,[PC,#8]; B return; .quad pageAddr static constexpr Uptr ADRP_PAGE_STUB_SIZE = 16; static const char* getCOFFX64RelocName(U16 type) { switch(type) { case IMAGE_REL_AMD64_ADDR64: return "ADDR64"; case IMAGE_REL_AMD64_ADDR32NB: return "ADDR32NB"; case IMAGE_REL_AMD64_REL32: return "REL32"; case IMAGE_REL_AMD64_REL32_1: return "REL32_1"; case IMAGE_REL_AMD64_REL32_2: return "REL32_2"; case IMAGE_REL_AMD64_REL32_3: return "REL32_3"; case IMAGE_REL_AMD64_REL32_4: return "REL32_4"; case IMAGE_REL_AMD64_REL32_5: return "REL32_5"; case IMAGE_REL_AMD64_SECTION: return "SECTION"; case IMAGE_REL_AMD64_SECREL: return "SECREL"; default: return "?"; } } static const char* getCOFFAArch64RelocName(U16 type) { switch(type) { case IMAGE_REL_ARM64_ADDR64: return "ADDR64"; case IMAGE_REL_ARM64_ADDR32NB: return "ADDR32NB"; case IMAGE_REL_ARM64_BRANCH26: return "BRANCH26"; case IMAGE_REL_ARM64_PAGEBASE_REL21: return "PAGEBASE_REL21"; case IMAGE_REL_ARM64_PAGEOFFSET_12A: return "PAGEOFFSET_12A"; case IMAGE_REL_ARM64_PAGEOFFSET_12L: return "PAGEOFFSET_12L"; case IMAGE_REL_ARM64_SECREL: return "SECREL"; case IMAGE_REL_ARM64_SECTION: return "SECTION"; case IMAGE_REL_ARM64_SECREL_LOW12A: return "SECREL_LOW12A"; case IMAGE_REL_ARM64_SECREL_HIGH12A: return "SECREL_HIGH12A"; case IMAGE_REL_ARM64_SECREL_LOW12L: return "SECREL_LOW12L"; default: return "?"; } } static SectionAccess getCOFFSectionAccess(U32 characteristics) { if(characteristics & IMAGE_SCN_MEM_EXECUTE) { return SectionAccess::readExecute; } if(characteristics & IMAGE_SCN_MEM_WRITE) { return SectionAccess::readWrite; } return SectionAccess::readOnly; } static Uptr getCOFFSectionAlignment(U32 characteristics) { U32 alignBits = (characteristics & IMAGE_SCN_ALIGN_MASK) >> 20; if(alignBits == 0) { return 1; } return Uptr(1) << (alignBits - 1); } static std::string getCOFFSymbolName(const CoffSymbol& sym, const char* stringTable, Uptr stringTableSize) { if(sym.Name.LongName.Zeros == 0) { // Long name: offset into string table. U32 offset = sym.Name.LongName.Offset; if(offset < stringTableSize) { return std::string(stringTable + offset); } return ""; } else { // Short name: up to 8 characters, null-terminated. char name[sizeof(sym.Name.ShortName) + 1] = {0}; memcpy(name, sym.Name.ShortName, sizeof(sym.Name.ShortName)); return std::string(name); } } static void applyCOFFX64Reloc(const CoffRelocation& rel, U8* fixup, Uptr fixupAddr, U64 symbolValue, const CoffSymbol& sym, const std::string& symbolName, ImageLayout& layout) { Log::printf(Log::traceLinking, " reloc @0x%" WAVM_PRIxPTR " type=%s(%u) sym=%u (%s)" " symval=0x%" PRIx64 "\n", fixupAddr, getCOFFX64RelocName(rel.Type), U32(rel.Type), rel.SymbolTableIndex, symbolName.c_str(), symbolValue); switch(rel.Type) { case IMAGE_REL_AMD64_ADDR64: { relocAbs64(fixup, symbolValue, readLE(fixup)); break; } case IMAGE_REL_AMD64_ADDR32NB: { I32 addend = readLE(fixup); relocImageRel32(fixup, symbolValue, addend, Uptr(layout.imageBase)); break; } case IMAGE_REL_AMD64_REL32: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 4, fixupAddr + 4, layout); break; } case IMAGE_REL_AMD64_REL32_1: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 5, fixupAddr + 4, layout); break; } case IMAGE_REL_AMD64_REL32_2: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 6, fixupAddr + 4, layout); break; } case IMAGE_REL_AMD64_REL32_3: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 7, fixupAddr + 4, layout); break; } case IMAGE_REL_AMD64_REL32_4: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 8, fixupAddr + 4, layout); break; } case IMAGE_REL_AMD64_REL32_5: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 9, fixupAddr + 4, layout); break; } case IMAGE_REL_AMD64_SECTION: { // The symbol's section number (1-based). writeLE(fixup, wrap(sym.SectionNumber)); break; } case IMAGE_REL_AMD64_SECREL: { I32 addend = readLE(fixup); // Section-relative offset: symbol value minus the section it's defined in. Uptr symSectionBase = 0; if(sym.SectionNumber > 0) { symSectionBase = layout.sectionLoadAddresses[wrap(sym.SectionNumber - 1)]; } relocSecRel32(fixup, symbolValue, addend, symSectionBase); break; } default: Errors::fatalf("Unsupported COFF x86-64 relocation type: %u", rel.Type); } } // Returns the number of relocations consumed (1, or 2 when an out-of-range ADRP // consumes the paired PAGEOFFSET relocation). static U32 applyCOFFAArch64Reloc(const CoffRelocation& rel, U8* fixup, Uptr fixupAddr, U64 symbolValue, const CoffSymbol& sym, const std::string& symbolName, ImageLayout& layout, const CoffRelocation* nextReloc) { Log::printf(Log::traceLinking, " reloc @0x%" WAVM_PRIxPTR " type=%s(%u) sym=%u (%s)" " symval=0x%" PRIx64 "\n", fixupAddr, getCOFFAArch64RelocName(rel.Type), U32(rel.Type), rel.SymbolTableIndex, symbolName.c_str(), symbolValue); switch(rel.Type) { case IMAGE_REL_ARM64_ADDR64: { relocAbs64(fixup, symbolValue, readLE(fixup)); break; } case IMAGE_REL_ARM64_ADDR32NB: { I32 addend = readLE(fixup); relocImageRel32(fixup, symbolValue, addend, Uptr(layout.imageBase)); break; } case IMAGE_REL_ARM64_BRANCH26: relocBranch26(fixup, symbolValue, 0, fixupAddr, layout); break; case IMAGE_REL_ARM64_PAGEBASE_REL21: { // Check if the ADRP target page is within +/-4GB range. Use unsigned subtraction // for defined overflow, then interpret as signed for the range check. U64 symbolPage = symbolValue & ~AARCH64_PAGE_MASK; U64 fixupPage = fixupAddr & ~Uptr(AARCH64_PAGE_MASK); I64 pageCount = wrap(symbolPage - fixupPage) >> AARCH64_PAGE_SHIFT; if(pageCount > ADRP_MAX_PAGE_COUNT || pageCount < ADRP_MIN_PAGE_COUNT) { // Out of ADRP range. Strategy depends on the paired page-offset relocation. bool nextIsPageOffset = nextReloc && nextReloc->VirtualAddress == rel.VirtualAddress + 4 && (nextReloc->Type == IMAGE_REL_ARM64_PAGEOFFSET_12A || nextReloc->Type == IMAGE_REL_ARM64_PAGEOFFSET_12L); U8* nextFixup = fixup + 4; U32 nextInsn = readLE(nextFixup); if(nextIsPageOffset && nextReloc->Type == IMAGE_REL_ARM64_PAGEOFFSET_12L) { // ADRP + LDR/STR: emit a data-access stub. // The stub loads the full target address from an inline literal // into IP0 (X16), then performs the original LDR/STR with X16 // as the base register, then branches back. // Extract the addend from the LDR/STR's imm12 field. U32 ldstSize = (nextInsn >> 30) & 3; U32 ldstOpc = (nextInsn >> 22) & 3; U32 shift = ldstSize; if(ldstSize == 0 && ldstOpc >= 2) { shift = 4; } // 128-bit U64 addend = U64(((nextInsn >> 10) & U32(AARCH64_PAGE_MASK)) << shift); U64 fullAddr = symbolValue + addend; if(!layout.stubCurrent || layout.stubCurrent + ADRP_DATA_STUB_SIZE > layout.stubEnd) { Errors::fatalf("Ran out of stub space for ADRP+LDR/STR data-access stub"); } U8* stub = layout.stubCurrent; layout.stubCurrent += ADRP_DATA_STUB_SIZE; Uptr stubAddr = reinterpret_cast(stub); // [+0] LDR X16, [PC, #12]: load full address from inline literal writeLE(stub + 0, U32(0x58000070)); // [+4] Modified LDR/STR: Rn = X16, imm12 = 0, rest preserved writeLE(stub + 4, (nextInsn & 0xFFC0001F) | (16 << 5)); // [+8] B (fixupAddr + 8): return to instruction after the pair I64 returnDelta = wrap(fixupAddr + 8) - wrap(stubAddr + 8); writeLE(stub + 8, 0x14000000 | (wrap(returnDelta >> 2) & 0x3FFFFFF)); // [+12] .quad fullAddr: 8-byte inline literal writeLE(stub + 12, fullAddr); // Replace ADRP with B to stub. I64 branchDelta = wrap(stubAddr) - wrap(fixupAddr); writeLE(fixup, 0x14000000 | (wrap(branchDelta >> 2) & 0x3FFFFFF)); // NOP the original LDR/STR (consumed by the stub). writeLE(nextFixup, U32(0xD503201F)); return 2; } // ADRP + ADD: redirect through GOT. // Create a GOT entry holding the target address and transform the // following ADD into a 64-bit LDR from the GOT entry. if((nextInsn & 0x1F000000) == 0x11000000) { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); U32 rd = nextInsn & 0x1F; U32 rn = (nextInsn >> 5) & 0x1F; U32 gotPageOffset = wrap(gotEntry) & U32(AARCH64_PAGE_MASK); U32 ldrImm12 = gotPageOffset >> 3; // 64-bit LDR scales by 8 writeLE(nextFixup, 0xF9400000 | (ldrImm12 << 10) | (rn << 5) | rd); symbolValue = gotEntry; relocAdrp(fixup, symbolValue, 0, fixupAddr); return nextIsPageOffset ? 2 : 1; } // ADRP whose paired PAGEOFFSET is not the immediately next relocation // (the instruction scheduler separated them). Emit a stub that loads // the page address from an inline literal. The PAGEOFFSET relocation // will be processed independently when the iterator reaches it. { U32 adrpInsn = readLE(fixup); U32 rd = adrpInsn & 0x1F; U64 pageAddr = symbolValue & ~AARCH64_PAGE_MASK; if(!layout.stubCurrent || layout.stubCurrent + ADRP_PAGE_STUB_SIZE > layout.stubEnd) { Errors::fatalf("Ran out of stub space for separated ADRP stub"); } U8* stub = layout.stubCurrent; layout.stubCurrent += ADRP_PAGE_STUB_SIZE; Uptr stubAddr = reinterpret_cast(stub); // [+0] LDR Xd, [PC, #8]: load page address from literal writeLE(stub + 0, U32(0x58000040) | rd); // [+4] B (fixupAddr + 4): return to next instruction I64 returnDelta = wrap(fixupAddr + 4) - wrap(stubAddr + 4); writeLE(stub + 4, 0x14000000 | (wrap(returnDelta >> 2) & 0x3FFFFFF)); // [+8] .quad pageAddr writeLE(stub + 8, pageAddr); // Replace ADRP with B to stub. I64 branchDelta = wrap(stubAddr) - wrap(fixupAddr); writeLE(fixup, 0x14000000 | (wrap(branchDelta >> 2) & 0x3FFFFFF)); return 1; } } relocAdrp(fixup, symbolValue, 0, fixupAddr); return 1; } case IMAGE_REL_ARM64_PAGEOFFSET_12A: { // If the ADRP handler already transformed the ADD to an LDR // (for out-of-range targets), the instruction was fully patched. // Detect this by checking the instruction opcode. U32 insn = readLE(fixup); if((insn & 0xFFC00000) == 0xF9400000) { // Already an LDR; the ADRP handler wrote it. break; } // Extract addend from ADD instruction's imm12 field. // COFF ARM64 encodes section-relative offsets in the instruction. I64 addImm12 = (insn >> 10) & 0xFFF; relocAddLo12(fixup, symbolValue, addImm12); break; } case IMAGE_REL_ARM64_PAGEOFFSET_12L: { // Extract addend from LDR/STR instruction's imm12 field. // COFF ARM64 encodes section-relative offsets in the instruction. U32 ldstInsn = readLE(fixup); U32 ldstSize = (ldstInsn >> 30) & 3; U32 ldstOpc = (ldstInsn >> 22) & 3; U32 shift = ldstSize; if(ldstSize == 0 && ldstOpc >= 2) { shift = 4; } // 128-bit I64 ldstAddend = I64(((ldstInsn >> 10) & 0xFFF) << shift); relocLdstLo12(fixup, symbolValue, ldstAddend); break; } case IMAGE_REL_ARM64_SECREL: { Uptr symSectionBase = 0; if(sym.SectionNumber > 0) { symSectionBase = layout.sectionLoadAddresses[wrap(sym.SectionNumber - 1)]; } I32 addend = readLE(fixup); relocSecRel32(fixup, symbolValue, addend, symSectionBase); break; } case IMAGE_REL_ARM64_SECTION: { writeLE(fixup, wrap(sym.SectionNumber)); break; } case IMAGE_REL_ARM64_SECREL_LOW12A: { Uptr symSectionBase = 0; if(sym.SectionNumber > 0) { symSectionBase = layout.sectionLoadAddresses[wrap(sym.SectionNumber - 1)]; } U32 offset = wrap(symbolValue - symSectionBase) & 0xFFF; U32 insn = readLE(fixup); insn = (insn & 0xFFC003FF) | (offset << 10); writeLE(fixup, insn); break; } case IMAGE_REL_ARM64_SECREL_HIGH12A: { Uptr symSectionBase = 0; if(sym.SectionNumber > 0) { symSectionBase = layout.sectionLoadAddresses[wrap(sym.SectionNumber - 1)]; } U32 offset = (wrap(symbolValue - symSectionBase) >> 12) & 0xFFF; U32 insn = readLE(fixup); insn = (insn & 0xFFC003FF) | (offset << 10); writeLE(fixup, insn); break; } case IMAGE_REL_ARM64_SECREL_LOW12L: { Uptr symSectionBase = 0; if(sym.SectionNumber > 0) { symSectionBase = layout.sectionLoadAddresses[wrap(sym.SectionNumber - 1)]; } U32 secrelOffset = wrap(symbolValue - symSectionBase); U32 insn = readLE(fixup); U32 sizeField = (insn >> 30) & 3; U32 imm12 = (secrelOffset & 0xFFF) >> sizeField; insn = (insn & 0xFFC003FF) | (imm12 << 10); writeLE(fixup, insn); break; } default: Errors::fatalf("Unsupported COFF AArch64 relocation type: %u", rel.Type); } return 1; } static U32 applyCOFFReloc(Arch arch, const CoffRelocation& rel, U8* fixup, Uptr fixupAddr, U64 symbolValue, const CoffSymbol& sym, const std::string& symbolName, ImageLayout& layout, const CoffRelocation* nextReloc) { switch(arch) { case Arch::x86_64: applyCOFFX64Reloc(rel, fixup, fixupAddr, symbolValue, sym, symbolName, layout); return 1; case Arch::aarch64: return applyCOFFAArch64Reloc( rel, fixup, fixupAddr, symbolValue, sym, symbolName, layout, nextReloc); default: WAVM_UNREACHABLE(); } } template static void linkCOFFArch(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages) { const CoffFileHeader* header = reinterpret_cast(bytes); const CoffSectionHeader* sections = reinterpret_cast( bytes + sizeof(CoffFileHeader) + header->SizeOfOptionalHeader); // Get symbol and string tables. const CoffSymbol* symbolTable = reinterpret_cast(bytes + header->PointerToSymbolTable); // String table is right after the symbol table. const U8* stringTableBase = bytes + header->PointerToSymbolTable + header->NumberOfSymbols * sizeof(CoffSymbol); U32 stringTableSize = readLE(stringTableBase); const char* stringTable = reinterpret_cast(stringTableBase); // 1. Collect section layout info. std::vector layoutInfos; std::vector sectionNames; for(U16 i = 0; i < header->NumberOfSections; ++i) { const CoffSectionHeader& sect = sections[i]; SectionLayoutInfo info; info.dataSize = sect.SizeOfRawData; info.alignment = getCOFFSectionAlignment(sect.Characteristics); info.access = getCOFFSectionAccess(sect.Characteristics); layoutInfos.push_back(info); // Resolve section name: if Name starts with '/', the remainder is // a decimal string table offset (for names longer than 8 chars). if(sect.Name[0] == '/') { char offsetStr[sizeof(sect.Name)] = {0}; memcpy(offsetStr, sect.Name + 1, sizeof(sect.Name) - 1); U32 offset = U32(strtoul(offsetStr, nullptr, 10)); if(offset < stringTableSize) { sectionNames.emplace_back(stringTable + offset); } else { sectionNames.emplace_back(""); } } else { char name[sizeof(sect.Name) + 1] = {0}; memcpy(name, sect.Name, sizeof(sect.Name)); sectionNames.emplace_back(name); } } // 2. Count external symbols for GOT slots, and scan relocations to count // stub space needed: unique targets of stub-creating reloc types (cached, 16 bytes each) // plus per-site data-access stubs for AArch64 ADRP+LDR/STR pairs (uncached, 20 bytes each). Uptr numExternalSymbols = 0; HashSet stubSymsSeen; for(U32 i = 0; i < header->NumberOfSymbols; i += 1 + symbolTable[i].NumberOfAuxSymbols) { if(symbolTable[i].StorageClass == IMAGE_SYM_CLASS_EXTERNAL && symbolTable[i].SectionNumber == 0) { ++numExternalSymbols; // __CxxFrameHandler3 gets a stub during symbol resolution (not via relocations) // so it must be included in the census. std::string name = getCOFFSymbolName(symbolTable[i], stringTable, stringTableSize); if(name == "__CxxFrameHandler3") { stubSymsSeen.add(i); } } } Uptr numDataStubSites = 0; Uptr numSeparatedAdrpSites = 0; for(U16 si = 0; si < header->NumberOfSections; ++si) { const CoffSectionHeader& sect = sections[si]; if(sect.NumberOfRelocations == 0) { continue; } UnalignedArrayView relocs{bytes + sect.PointerToRelocations, sect.NumberOfRelocations}; for(U32 ri = 0; ri < sect.NumberOfRelocations; ++ri) { CoffRelocation rel = relocs[ri]; if constexpr(arch == Arch::x86_64) { if(rel.Type >= IMAGE_REL_AMD64_REL32 && rel.Type <= IMAGE_REL_AMD64_REL32_5) { stubSymsSeen.add(rel.SymbolTableIndex); } } else { if(rel.Type == IMAGE_REL_ARM64_BRANCH26) { stubSymsSeen.add(rel.SymbolTableIndex); } else if(rel.Type == IMAGE_REL_ARM64_PAGEBASE_REL21) { bool hasAdjacentPageOffset = ri + 1 < sect.NumberOfRelocations && relocs[ri + 1].VirtualAddress == rel.VirtualAddress + 4; if(hasAdjacentPageOffset && relocs[ri + 1].Type == IMAGE_REL_ARM64_PAGEOFFSET_12L) { ++numDataStubSites; } else if(!hasAdjacentPageOffset || (relocs[ri + 1].Type != IMAGE_REL_ARM64_PAGEOFFSET_12A && relocs[ri + 1].Type != IMAGE_REL_ARM64_PAGEOFFSET_12L)) { // ADRP whose paired PAGEOFFSET is not adjacent (scheduler // separated them). May need a 16-byte literal-pool stub. ++numSeparatedAdrpSites; } } } } } // 3. Layout image. On AArch64, GOT slots are needed for symbols whose addresses // are out of ADRP range (+/-4GB). Any external symbol could be out of range, // so allocate slots for all of them as an upper bound. Uptr numStubBytes = stubSymsSeen.size() * stubSlotSize + numDataStubSites * ADRP_DATA_STUB_SIZE + numSeparatedAdrpSites * ADRP_PAGE_STUB_SIZE; Uptr numGotBytes = arch == Arch::aarch64 ? numExternalSymbols * 8 : 0; ImageLayout layout = layoutImage(layoutInfos, numStubBytes, numGotBytes, 0, allocatePages); // 4. Copy section data. for(U16 i = 0; i < header->NumberOfSections; ++i) { const CoffSectionHeader& sect = sections[i]; if(sect.SizeOfRawData > 0 && sect.PointerToRawData > 0) { memcpy(reinterpret_cast(layout.sectionLoadAddresses[i]), bytes + sect.PointerToRawData, sect.SizeOfRawData); } } // 5. Build symbol addresses. std::vector symbolAddresses(header->NumberOfSymbols, 0); // Create a trampoline for __CxxFrameHandler3 if needed. Uptr cxxFrameHandlerStub = 0; for(U32 i = 0; i < header->NumberOfSymbols; i += 1 + symbolTable[i].NumberOfAuxSymbols) { const CoffSymbol& sym = symbolTable[i]; std::string name = getCOFFSymbolName(sym, stringTable, stringTableSize); if(sym.SectionNumber > 0) { // Defined symbol: section number is 1-based. U16 sectIdx = wrap(sym.SectionNumber - 1); if(sectIdx < header->NumberOfSections) { symbolAddresses[i] = layout.sectionLoadAddresses[sectIdx] + sym.Value; } } else if(sym.SectionNumber == 0 && sym.StorageClass == IMAGE_SYM_CLASS_EXTERNAL) { // External (undefined) symbol. if(name == "__ImageBase") { // __ImageBase resolves to the image base address. symbolAddresses[i] = reinterpret_cast(layout.imageBase); } else if(name == "__CxxFrameHandler3") { // Create a trampoline stub within the image for __CxxFrameHandler3. // SEH tables use 32-bit image-relative addresses, so the handler // must be within 32-bit offset of imageBase. const Uptr* addr = imports.get(name); if(!addr) { Errors::fatalf("Unresolved COFF symbol: %s", name.c_str()); } cxxFrameHandlerStub = getOrCreateStub(layout, *addr); symbolAddresses[i] = cxxFrameHandlerStub; } else { const Uptr* addr = imports.get(name); if(!addr) { Errors::fatalf("Unresolved COFF symbol: %s", name.c_str()); } symbolAddresses[i] = *addr; } } else if(sym.SectionNumber == -1) { // Absolute symbol. symbolAddresses[i] = Uptr(sym.Value); } Log::printf(Log::traceLinking, " COFF sym [%u]: '%s' sect=%d value=0x%x type=0x%04x class=%u" " addr=0x%" WAVM_PRIxPTR "\n", i, name.c_str(), I32(sym.SectionNumber), sym.Value, U32(sym.Type), U32(sym.StorageClass), symbolAddresses[i]); } // 6. Apply relocations per section. for(U16 si = 0; si < header->NumberOfSections; ++si) { const CoffSectionHeader& sect = sections[si]; if(sect.NumberOfRelocations == 0) { continue; } Uptr sectionAddr = layout.sectionLoadAddresses[si]; const CoffRelocation* relocs = reinterpret_cast(bytes + sect.PointerToRelocations); for(U32 ri = 0; ri < sect.NumberOfRelocations;) { const CoffRelocation& rel = relocs[ri]; U8* fixup = reinterpret_cast(sectionAddr + rel.VirtualAddress); Uptr fixupAddr = sectionAddr + rel.VirtualAddress; const CoffSymbol& sym = symbolTable[rel.SymbolTableIndex]; std::string symbolName = getCOFFSymbolName(sym, stringTable, stringTableSize); U64 symbolValue = symbolAddresses[rel.SymbolTableIndex]; const CoffRelocation* nextReloc = (ri + 1 < sect.NumberOfRelocations) ? &relocs[ri + 1] : nullptr; ri += applyCOFFReloc( arch, rel, fixup, fixupAddr, symbolValue, sym, symbolName, layout, nextReloc); } } // 7. Protect image, fill result. protectImage(layout); result.imageBase = layout.imageBase; result.numImagePages = layout.numPages; result.numCodeBytes = layout.codeSize; result.numReadOnlyBytes = layout.roSize; result.numReadWriteBytes = layout.rwSize; // Record section addresses and find unwind/DWARF sections. Uptr pdataAddr = 0; Uptr pdataSize = 0; for(U16 i = 0; i < header->NumberOfSections; ++i) { Uptr addr = layout.sectionLoadAddresses[i]; Log::printf(Log::traceLinking, " COFF section [%u]: '%s' addr=0x%" WAVM_PRIxPTR " size=%u\n", U32(i), sectionNames[i].c_str(), addr, sections[i].SizeOfRawData); if(sectionNames[i] == ".pdata") { result.unwindInfo.data = reinterpret_cast(addr); result.unwindInfo.dataNumBytes = sections[i].SizeOfRawData; pdataAddr = addr; pdataSize = sections[i].SizeOfRawData; } else if(sectionNames[i] == ".debug_info" && addr) { result.dwarf.debugInfo = reinterpret_cast(addr); result.dwarf.debugInfoSize = Uptr(sections[i].SizeOfRawData); } else if(sectionNames[i] == ".debug_abbrev" && addr) { result.dwarf.debugAbbrev = reinterpret_cast(addr); result.dwarf.debugAbbrevSize = Uptr(sections[i].SizeOfRawData); } else if(sectionNames[i] == ".debug_str" && addr) { result.dwarf.debugStr = reinterpret_cast(addr); result.dwarf.debugStrSize = Uptr(sections[i].SizeOfRawData); } else if(sectionNames[i] == ".debug_line" && addr) { result.dwarf.debugLine = reinterpret_cast(addr); result.dwarf.debugLineSize = Uptr(sections[i].SizeOfRawData); } else if(sectionNames[i] == ".debug_addr" && addr) { result.dwarf.debugAddr = reinterpret_cast(addr); result.dwarf.debugAddrSize = Uptr(sections[i].SizeOfRawData); } else if(sectionNames[i] == ".debug_str_offsets" && addr) { result.dwarf.debugStrOffsets = reinterpret_cast(addr); result.dwarf.debugStrOffsetsSize = Uptr(sections[i].SizeOfRawData); } } // Collect defined function symbols. for(U32 i = 0; i < header->NumberOfSymbols; i += 1 + symbolTable[i].NumberOfAuxSymbols) { const CoffSymbol& sym = symbolTable[i]; if(sym.SectionNumber <= 0) { continue; } if(sym.StorageClass != IMAGE_SYM_CLASS_EXTERNAL) { continue; } std::string name = getCOFFSymbolName(sym, stringTable, stringTableSize); if(name.empty()) { continue; } // COFF function symbols have type 0x20. if((sym.Type & 0xFF) != 0x20) { continue; } LinkResult::Symbol resultSym; resultSym.name = name; resultSym.address = symbolAddresses[i]; resultSym.size = 0; // COFF doesn't store function sizes. Will compute below. result.definedSymbols.push_back(std::move(resultSym)); } // Compute function sizes from .pdata. if(pdataAddr && pdataSize) { switch(arch) { case Arch::x86_64: { // x86-64: 12-byte entries (BeginAddress, EndAddress, UnwindInfoAddress). Uptr numEntries = pdataSize / 12; for(auto& sym : result.definedSymbols) { for(Uptr e = 0; e < numEntries; ++e) { const U8* entry = reinterpret_cast(pdataAddr + e * 12); U32 beginRVA = readLE(entry); U32 endRVA = readLE(entry + 4); Uptr beginAddr = Uptr(layout.imageBase) + beginRVA; if(sym.address == beginAddr) { sym.size = Uptr(layout.imageBase) + endRVA - beginAddr; } } } break; } case Arch::aarch64: { // ARM64: 8-byte entries (BeginAddress, UnwindData). Uptr numEntries = pdataSize / 8; for(auto& sym : result.definedSymbols) { for(Uptr e = 0; e < numEntries; ++e) { const U8* entry = reinterpret_cast(pdataAddr + e * 8); U32 beginRVA = readLE(entry); U32 unwindData = readLE(entry + 4); Uptr beginAddr = Uptr(layout.imageBase) + beginRVA; if(sym.address != beginAddr) { continue; } U32 flag = unwindData & 3; if(flag != 0) { // Packed unwind data: FunctionLength in bits [12:2], // in 4-byte instruction units. sym.size = Uptr(((unwindData >> 2) & 0x7FF) * 4); } else { // Unpacked: UnwindData is an RVA to .xdata. // .xdata header bits [17:0] = FunctionLength in 4-byte units. const U8* xdata = layout.imageBase + unwindData; U32 xdataHeader = readLE(xdata); sym.size = Uptr((xdataHeader & 0x3FFFF) * 4); } } } break; } default: WAVM_UNREACHABLE(); } } } void ObjectLinker::linkCOFF(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages) { if(size < sizeof(CoffFileHeader)) { Errors::fatalf("COFF file too small"); } const CoffFileHeader* header = reinterpret_cast(bytes); const char* machName = "?"; switch(header->Machine) { case IMAGE_FILE_MACHINE_AMD64: machName = "x86-64"; break; case IMAGE_FILE_MACHINE_ARM64: machName = "AArch64"; break; default: break; } Log::printf(Log::traceLinking, "--- linkCOFF: %" WAVM_PRIuPTR " bytes, machine=%s ---\n", size, machName); switch(header->Machine) { case IMAGE_FILE_MACHINE_AMD64: linkCOFFArch(bytes, size, imports, result, allocatePages); break; case IMAGE_FILE_MACHINE_ARM64: linkCOFFArch(bytes, size, imports, result, allocatePages); break; default: Errors::fatalf("Unsupported COFF machine type: 0x%x", header->Machine); } } ================================================ FILE: Lib/ObjectLinker/ELF.cpp ================================================ #include #include #include #include #include #include "ObjectLinkerPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/IntCasts.h" #include "WAVM/Logging/Logging.h" #include "WAVM/ObjectLinker/ObjectLinker.h" using namespace WAVM; using namespace WAVM::ObjectLinker; // ELF header structures (64-bit). struct Elf64_Ehdr { U8 e_ident[16]; U16 e_type; U16 e_machine; U32 e_version; U64 e_entry; U64 e_phoff; U64 e_shoff; U32 e_flags; U16 e_ehsize; U16 e_phentsize; U16 e_phnum; U16 e_shentsize; U16 e_shnum; U16 e_shstrndx; }; struct Elf64_Shdr { U32 sh_name; U32 sh_type; U64 sh_flags; U64 sh_addr; U64 sh_offset; U64 sh_size; U32 sh_link; U32 sh_info; U64 sh_addralign; U64 sh_entsize; }; struct Elf64_Sym { U32 st_name; U8 st_info; U8 st_other; U16 st_shndx; U64 st_value; U64 st_size; }; struct Elf64_Rela { U64 r_offset; U64 r_info; I64 r_addend; }; struct Elf64_Rel { U64 r_offset; U64 r_info; }; // ELF constants. static constexpr U32 SHT_SYMTAB = 2; static constexpr U32 SHT_STRTAB = 3; static constexpr U32 SHT_RELA = 4; static constexpr U32 SHT_REL = 9; static constexpr U32 SHT_NULL = 0; static constexpr U64 SHF_WRITE = 0x1; static constexpr U64 SHF_ALLOC = 0x2; static constexpr U64 SHF_EXECINSTR = 0x4; static constexpr U16 SHN_UNDEF = 0; static constexpr U16 SHN_ABS = 0xFFF1; static constexpr U16 EM_X86_64 = 62; static constexpr U16 EM_AARCH64 = 183; // ELF symbol binding/type. #define ELF64_ST_BIND(info) ((info) >> 4) #define ELF64_ST_TYPE(info) ((info) & 0xF) static constexpr U8 STB_GLOBAL = 1; static constexpr U8 STT_FUNC = 2; // ELF relocation info. #define ELF64_R_SYM(info) ((info) >> 32) #define ELF64_R_TYPE(info) ((U32)(info)) // x86-64 ELF relocation types. static constexpr U32 R_X86_64_64 = 1; static constexpr U32 R_X86_64_PC32 = 2; static constexpr U32 R_X86_64_PLT32 = 4; static constexpr U32 R_X86_64_32 = 10; static constexpr U32 R_X86_64_32S = 11; static constexpr U32 R_X86_64_GOTPCREL = 9; static constexpr U32 R_X86_64_PC64 = 24; static constexpr U32 R_X86_64_GOTPCRELX = 41; static constexpr U32 R_X86_64_REX_GOTPCRELX = 42; // AArch64 ELF relocation types. static constexpr U32 R_AARCH64_ABS64 = 257; static constexpr U32 R_AARCH64_ABS32 = 258; static constexpr U32 R_AARCH64_PREL64 = 260; static constexpr U32 R_AARCH64_PREL32 = 261; static constexpr U32 R_AARCH64_CALL26 = 283; static constexpr U32 R_AARCH64_JUMP26 = 282; static constexpr U32 R_AARCH64_ADR_PREL_PG_HI21 = 275; static constexpr U32 R_AARCH64_ADD_ABS_LO12_NC = 277; static constexpr U32 R_AARCH64_LDST8_ABS_LO12_NC = 278; static constexpr U32 R_AARCH64_LDST16_ABS_LO12_NC = 284; static constexpr U32 R_AARCH64_LDST32_ABS_LO12_NC = 285; static constexpr U32 R_AARCH64_LDST64_ABS_LO12_NC = 286; static constexpr U32 R_AARCH64_LDST128_ABS_LO12_NC = 299; static constexpr U32 R_AARCH64_MOVW_UABS_G0 = 263; static constexpr U32 R_AARCH64_MOVW_UABS_G0_NC = 264; static constexpr U32 R_AARCH64_MOVW_UABS_G1 = 265; static constexpr U32 R_AARCH64_MOVW_UABS_G1_NC = 266; static constexpr U32 R_AARCH64_MOVW_UABS_G2 = 267; static constexpr U32 R_AARCH64_MOVW_UABS_G2_NC = 268; static constexpr U32 R_AARCH64_MOVW_UABS_G3 = 269; static constexpr U32 R_AARCH64_ADR_GOT_PAGE = 311; static constexpr U32 R_AARCH64_LD64_GOT_LO12_NC = 312; static const char* getELFX64RelocName(U32 type) { switch(type) { case R_X86_64_64: return "R_X86_64_64"; case R_X86_64_PC32: return "R_X86_64_PC32"; case R_X86_64_PLT32: return "R_X86_64_PLT32"; case R_X86_64_32: return "R_X86_64_32"; case R_X86_64_32S: return "R_X86_64_32S"; case R_X86_64_PC64: return "R_X86_64_PC64"; case R_X86_64_GOTPCREL: return "R_X86_64_GOTPCREL"; case R_X86_64_GOTPCRELX: return "R_X86_64_GOTPCRELX"; case R_X86_64_REX_GOTPCRELX: return "R_X86_64_REX_GOTPCRELX"; default: return "?"; } } static const char* getELFAArch64RelocName(U32 type) { switch(type) { case R_AARCH64_ABS64: return "R_AARCH64_ABS64"; case R_AARCH64_ABS32: return "R_AARCH64_ABS32"; case R_AARCH64_PREL64: return "R_AARCH64_PREL64"; case R_AARCH64_PREL32: return "R_AARCH64_PREL32"; case R_AARCH64_CALL26: return "R_AARCH64_CALL26"; case R_AARCH64_JUMP26: return "R_AARCH64_JUMP26"; case R_AARCH64_ADR_PREL_PG_HI21: return "R_AARCH64_ADR_PREL_PG_HI21"; case R_AARCH64_ADD_ABS_LO12_NC: return "R_AARCH64_ADD_ABS_LO12_NC"; case R_AARCH64_LDST8_ABS_LO12_NC: return "R_AARCH64_LDST8_ABS_LO12_NC"; case R_AARCH64_LDST16_ABS_LO12_NC: return "R_AARCH64_LDST16_ABS_LO12_NC"; case R_AARCH64_LDST32_ABS_LO12_NC: return "R_AARCH64_LDST32_ABS_LO12_NC"; case R_AARCH64_LDST64_ABS_LO12_NC: return "R_AARCH64_LDST64_ABS_LO12_NC"; case R_AARCH64_LDST128_ABS_LO12_NC: return "R_AARCH64_LDST128_ABS_LO12_NC"; case R_AARCH64_MOVW_UABS_G0: return "R_AARCH64_MOVW_UABS_G0"; case R_AARCH64_MOVW_UABS_G0_NC: return "R_AARCH64_MOVW_UABS_G0_NC"; case R_AARCH64_MOVW_UABS_G1: return "R_AARCH64_MOVW_UABS_G1"; case R_AARCH64_MOVW_UABS_G1_NC: return "R_AARCH64_MOVW_UABS_G1_NC"; case R_AARCH64_MOVW_UABS_G2: return "R_AARCH64_MOVW_UABS_G2"; case R_AARCH64_MOVW_UABS_G2_NC: return "R_AARCH64_MOVW_UABS_G2_NC"; case R_AARCH64_MOVW_UABS_G3: return "R_AARCH64_MOVW_UABS_G3"; case R_AARCH64_ADR_GOT_PAGE: return "R_AARCH64_ADR_GOT_PAGE"; case R_AARCH64_LD64_GOT_LO12_NC: return "R_AARCH64_LD64_GOT_LO12_NC"; default: return "?"; } } static SectionAccess getELFSectionAccess(U64 flags) { if(flags & SHF_EXECINSTR) { return SectionAccess::readExecute; } if(flags & SHF_WRITE) { return SectionAccess::readWrite; } return SectionAccess::readOnly; } static void applyELFX64Reloc(U32 rtype, U8* fixup, Uptr fixupAddr, U64 symbolValue, I64 addend, Uptr symIdx, ImageLayout& layout) { Log::printf(Log::traceLinking, " reloc @0x%" WAVM_PRIxPTR " type=%s(%u) sym=%" WAVM_PRIuPTR " symval=0x%" PRIx64 " addend=%" PRId64 "\n", fixupAddr, getELFX64RelocName(rtype), rtype, symIdx, symbolValue, addend); switch(rtype) { case R_X86_64_64: relocAbs64(fixup, symbolValue, addend); break; case R_X86_64_32: relocAbs32(fixup, symbolValue, addend); break; case R_X86_64_32S: relocAbs32s(fixup, symbolValue, addend); break; case R_X86_64_PC64: relocRel64(fixup, symbolValue, addend, fixupAddr); break; case R_X86_64_PC32: case R_X86_64_PLT32: relocRel32(fixup, symbolValue, addend, fixupAddr, layout); break; case R_X86_64_GOTPCREL: case R_X86_64_GOTPCRELX: case R_X86_64_REX_GOTPCRELX: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); relocRel32(fixup, gotEntry, addend, fixupAddr, layout); break; } default: Errors::fatalf("Unsupported ELF x86-64 relocation type: %u", rtype); } } static void applyELFAArch64Reloc(U32 rtype, U8* fixup, Uptr fixupAddr, U64 symbolValue, I64 addend, Uptr symIdx, ImageLayout& layout) { Log::printf(Log::traceLinking, " reloc @0x%" WAVM_PRIxPTR " type=%s(%u) sym=%" WAVM_PRIuPTR " symval=0x%" PRIx64 " addend=%" PRId64 "\n", fixupAddr, getELFAArch64RelocName(rtype), rtype, symIdx, symbolValue, addend); switch(rtype) { case R_AARCH64_ABS64: relocAbs64(fixup, symbolValue, addend); break; case R_AARCH64_ABS32: relocAbs32(fixup, symbolValue, addend); break; case R_AARCH64_PREL64: relocRel64(fixup, symbolValue, addend, fixupAddr); break; case R_AARCH64_PREL32: relocPrel32(fixup, symbolValue, addend, fixupAddr); break; case R_AARCH64_CALL26: case R_AARCH64_JUMP26: relocBranch26(fixup, symbolValue, addend, fixupAddr, layout); break; case R_AARCH64_ADR_PREL_PG_HI21: relocAdrp(fixup, symbolValue, addend, fixupAddr); break; case R_AARCH64_ADD_ABS_LO12_NC: relocAddLo12(fixup, symbolValue, addend); break; case R_AARCH64_LDST8_ABS_LO12_NC: case R_AARCH64_LDST16_ABS_LO12_NC: case R_AARCH64_LDST32_ABS_LO12_NC: case R_AARCH64_LDST64_ABS_LO12_NC: case R_AARCH64_LDST128_ABS_LO12_NC: relocLdstLo12(fixup, symbolValue, addend); break; case R_AARCH64_MOVW_UABS_G0: case R_AARCH64_MOVW_UABS_G0_NC: relocMovwUabs(fixup, symbolValue, addend, 0); break; case R_AARCH64_MOVW_UABS_G1: case R_AARCH64_MOVW_UABS_G1_NC: relocMovwUabs(fixup, symbolValue, addend, 16); break; case R_AARCH64_MOVW_UABS_G2: case R_AARCH64_MOVW_UABS_G2_NC: relocMovwUabs(fixup, symbolValue, addend, 32); break; case R_AARCH64_MOVW_UABS_G3: relocMovwUabs(fixup, symbolValue, addend, 48); break; case R_AARCH64_ADR_GOT_PAGE: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); relocAdrp(fixup, gotEntry, 0, fixupAddr); break; } case R_AARCH64_LD64_GOT_LO12_NC: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); relocLdstLo12(fixup, gotEntry, 0); break; } default: Errors::fatalf("Unsupported ELF AArch64 relocation type: %u", rtype); } } static void applyELFReloc(Arch arch, U32 rtype, U8* fixup, Uptr fixupAddr, U64 symbolValue, I64 addend, Uptr symIdx, ImageLayout& layout) { switch(arch) { case Arch::x86_64: applyELFX64Reloc(rtype, fixup, fixupAddr, symbolValue, addend, symIdx, layout); break; case Arch::aarch64: applyELFAArch64Reloc(rtype, fixup, fixupAddr, symbolValue, addend, symIdx, layout); break; default: WAVM_UNREACHABLE(); } } static I64 readELFX64ImplicitAddend(U32 rtype, const U8* fixup) { switch(rtype) { case R_X86_64_64: case R_X86_64_PC64: return readLE(fixup); case R_X86_64_PC32: case R_X86_64_PLT32: case R_X86_64_32: case R_X86_64_32S: return readLE(fixup); default: return 0; } } template static void linkELFArch(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages) { const Elf64_Ehdr* ehdr = reinterpret_cast(bytes); // Find section headers. e_shoff must be 8-byte aligned per the ELF spec. const Elf64_Shdr* shdrs = reinterpret_cast(bytes + ehdr->e_shoff); // Find section name string table. const Elf64_Shdr& shstrtab = shdrs[ehdr->e_shstrndx]; const char* shstrtabData = reinterpret_cast(bytes + shstrtab.sh_offset); // Find symtab and strtab. const Elf64_Shdr* symtabShdr = nullptr; const Elf64_Shdr* strtabShdr = nullptr; for(U16 i = 0; i < ehdr->e_shnum; ++i) { if(shdrs[i].sh_type == SHT_SYMTAB) { symtabShdr = &shdrs[i]; strtabShdr = &shdrs[symtabShdr->sh_link]; break; } } if(!symtabShdr || !strtabShdr) { Errors::fatalf("ELF object has no symbol table"); } const Elf64_Sym* symbols = reinterpret_cast(bytes + symtabShdr->sh_offset); U32 numSymbols = narrow("ELF symbol count", symtabShdr->sh_size / sizeof(Elf64_Sym)); const char* strtab = reinterpret_cast(bytes + strtabShdr->sh_offset); // 1. Collect section layout info (skip null section and non-allocatable sections). struct SectionMapping { U16 elfIndex; }; std::vector sectionMappings; std::vector layoutInfos; // Map from ELF section index to our layout index. -1 means not mapped. std::vector elfToLayoutIndex(ehdr->e_shnum, -1); // Track DWARF debug section indices so we can populate result.dwarf after layout. Iptr debugInfoElfIdx = -1; Iptr debugAbbrevElfIdx = -1; Iptr debugStrElfIdx = -1; Iptr debugLineElfIdx = -1; Iptr debugAddrElfIdx = -1; Iptr debugStrOffsetsElfIdx = -1; for(U16 i = 1; i < ehdr->e_shnum; ++i) { const Elf64_Shdr& shdr = shdrs[i]; // Skip non-content sections. if(shdr.sh_type == SHT_NULL || shdr.sh_type == SHT_SYMTAB || shdr.sh_type == SHT_STRTAB || shdr.sh_type == SHT_RELA || shdr.sh_type == SHT_REL) { continue; } // Load SHF_ALLOC sections as before. Additionally load DWARF debug sections // (.debug_info, .debug_abbrev, .debug_str) as read-only even without SHF_ALLOC. const char* sectionName = shstrtabData + shdr.sh_name; bool isDwarf = (strcmp(sectionName, ".debug_info") == 0 || strcmp(sectionName, ".debug_abbrev") == 0 || strcmp(sectionName, ".debug_str") == 0 || strcmp(sectionName, ".debug_line") == 0 || strcmp(sectionName, ".debug_addr") == 0 || strcmp(sectionName, ".debug_str_offsets") == 0); if(!(shdr.sh_flags & SHF_ALLOC) && !isDwarf) { continue; } // Skip sections with zero size. if(shdr.sh_size == 0) { continue; } SectionLayoutInfo info; info.dataSize = Uptr(shdr.sh_size); info.alignment = shdr.sh_addralign ? Uptr(shdr.sh_addralign) : 1; info.access = isDwarf ? SectionAccess::readOnly : getELFSectionAccess(shdr.sh_flags); // Track DWARF section indices for populating result.dwarf later. if(strcmp(sectionName, ".debug_info") == 0) { debugInfoElfIdx = Iptr(i); } else if(strcmp(sectionName, ".debug_abbrev") == 0) { debugAbbrevElfIdx = Iptr(i); } else if(strcmp(sectionName, ".debug_str") == 0) { debugStrElfIdx = Iptr(i); } else if(strcmp(sectionName, ".debug_line") == 0) { debugLineElfIdx = Iptr(i); } else if(strcmp(sectionName, ".debug_addr") == 0) { debugAddrElfIdx = Iptr(i); } else if(strcmp(sectionName, ".debug_str_offsets") == 0) { debugStrOffsetsElfIdx = Iptr(i); } elfToLayoutIndex[i] = Iptr(sectionMappings.size()); sectionMappings.push_back({i}); layoutInfos.push_back(info); } // 2. Count external symbols for GOT slots, and scan relocations to count // unique stub targets (symbols referenced by stub-creating relocation types). Uptr numExternalSymbols = 0; for(U32 i = 0; i < numSymbols; ++i) { if(symbols[i].st_shndx == SHN_UNDEF && ELF64_ST_BIND(symbols[i].st_info) >= STB_GLOBAL) { ++numExternalSymbols; } } HashSet stubSymsSeen; for(U16 si = 0; si < ehdr->e_shnum; ++si) { const Elf64_Shdr& shdr = shdrs[si]; if(shdr.sh_type == SHT_RELA) { const Elf64_Rela* relas = reinterpret_cast(bytes + shdr.sh_offset); Uptr numRelas = shdr.sh_size / sizeof(Elf64_Rela); for(Uptr ri = 0; ri < numRelas; ++ri) { U32 rtype = ELF64_R_TYPE(relas[ri].r_info); bool needsStub; if constexpr(arch == Arch::x86_64) { needsStub = rtype == R_X86_64_PC32 || rtype == R_X86_64_PLT32; } else { needsStub = rtype == R_AARCH64_CALL26 || rtype == R_AARCH64_JUMP26; } if(needsStub) { stubSymsSeen.add(U32(ELF64_R_SYM(relas[ri].r_info))); } } } else if(shdr.sh_type == SHT_REL) { const Elf64_Rel* rels = reinterpret_cast(bytes + shdr.sh_offset); Uptr numRels = shdr.sh_size / sizeof(Elf64_Rel); for(Uptr ri = 0; ri < numRels; ++ri) { U32 rtype = ELF64_R_TYPE(rels[ri].r_info); bool needsStub; if constexpr(arch == Arch::x86_64) { needsStub = rtype == R_X86_64_PC32 || rtype == R_X86_64_PLT32; } else { needsStub = rtype == R_AARCH64_CALL26 || rtype == R_AARCH64_JUMP26; } if(needsStub) { stubSymsSeen.add(U32(ELF64_R_SYM(rels[ri].r_info))); } } } } // 3. Layout image. ImageLayout layout = layoutImage( layoutInfos, stubSymsSeen.size() * stubSlotSize, numExternalSymbols * 8, 0, allocatePages); // 4. Copy section data. for(Uptr i = 0; i < sectionMappings.size(); ++i) { const Elf64_Shdr& shdr = shdrs[sectionMappings[i].elfIndex]; if(shdr.sh_size > 0 && shdr.sh_offset > 0) { // SHT_NOBITS sections (like .bss) have no file data. if(shdr.sh_type != 8) // SHT_NOBITS = 8 { memcpy(reinterpret_cast(layout.sectionLoadAddresses[i]), bytes + shdr.sh_offset, Uptr(shdr.sh_size)); } } } // 5. Build symbol addresses. std::vector symbolAddresses(numSymbols, 0); for(U32 i = 0; i < numSymbols; ++i) { const Elf64_Sym& sym = symbols[i]; if(sym.st_shndx == SHN_UNDEF) { if(i == 0) { continue; } // Null symbol const char* name = strtab + sym.st_name; const Uptr* addr = imports.get(std::string(name)); if(!addr) { Errors::fatalf("Unresolved ELF symbol: %s", name); } symbolAddresses[i] = *addr; } else if(sym.st_shndx == SHN_ABS) { symbolAddresses[i] = Uptr(sym.st_value); } else if(sym.st_shndx < ehdr->e_shnum) { Iptr layoutIdx = elfToLayoutIndex[sym.st_shndx]; if(layoutIdx >= 0 && (shdrs[sym.st_shndx].sh_flags & SHF_ALLOC)) { symbolAddresses[i] = layout.sectionLoadAddresses[Uptr(layoutIdx)] + Uptr(sym.st_value); } // Non-ALLOC section symbols (debug sections) stay at 0, matching the sh_addr=0 // convention used by static linkers. This ensures 32-bit relocations within // debug sections produce section-relative offsets that fit in U32. } const char* symName = strtab + sym.st_name; Log::printf(Log::traceLinking, " ELF sym [%u]: '%s' shndx=%u value=0x%" PRIx64 " info=0x%02x addr=0x%" WAVM_PRIxPTR "\n", i, symName, U32(sym.st_shndx), sym.st_value, U32(sym.st_info), symbolAddresses[i]); } // 6. Apply relocations. for(U16 si = 0; si < ehdr->e_shnum; ++si) { const Elf64_Shdr& shdr = shdrs[si]; if(shdr.sh_type != SHT_RELA && shdr.sh_type != SHT_REL) { continue; } // sh_info is the section index that relocations apply to. U32 targetSectIdx = shdr.sh_info; Iptr layoutIdx = elfToLayoutIndex[targetSectIdx]; if(layoutIdx < 0) { continue; } // Relocations for sections we didn't load. Uptr sectionAddr = layout.sectionLoadAddresses[Uptr(layoutIdx)]; if(shdr.sh_type == SHT_RELA) { const Elf64_Rela* relas = reinterpret_cast(bytes + shdr.sh_offset); Uptr numRelas = shdr.sh_size / sizeof(Elf64_Rela); for(Uptr ri = 0; ri < numRelas; ++ri) { Uptr symIdx = Uptr(ELF64_R_SYM(relas[ri].r_info)); U32 rtype = ELF64_R_TYPE(relas[ri].r_info); U8* fixup = reinterpret_cast(sectionAddr + Uptr(relas[ri].r_offset)); Uptr fixupAddr = sectionAddr + Uptr(relas[ri].r_offset); applyELFReloc(arch, rtype, fixup, fixupAddr, symbolAddresses[symIdx], relas[ri].r_addend, symIdx, layout); } } else { const Elf64_Rel* rels = reinterpret_cast(bytes + shdr.sh_offset); Uptr numRels = shdr.sh_size / sizeof(Elf64_Rel); for(Uptr ri = 0; ri < numRels; ++ri) { Uptr symIdx = Uptr(ELF64_R_SYM(rels[ri].r_info)); U32 rtype = ELF64_R_TYPE(rels[ri].r_info); U8* fixup = reinterpret_cast(sectionAddr + Uptr(rels[ri].r_offset)); Uptr fixupAddr = sectionAddr + Uptr(rels[ri].r_offset); I64 addend = arch == Arch::x86_64 ? readELFX64ImplicitAddend(rtype, fixup) : 0; applyELFReloc( arch, rtype, fixup, fixupAddr, symbolAddresses[symIdx], addend, symIdx, layout); } } } // 7. Protect image, fill result. protectImage(layout); result.imageBase = layout.imageBase; result.numImagePages = layout.numPages; result.numCodeBytes = layout.codeSize; result.numReadOnlyBytes = layout.roSize; result.numReadWriteBytes = layout.rwSize; // Record section addresses and patch sh_addr in the ELF bytes for GDB and DWARF. for(Uptr i = 0; i < sectionMappings.size(); ++i) { Uptr addr = layout.sectionLoadAddresses[i]; const char* name = shstrtabData + shdrs[sectionMappings[i].elfIndex].sh_name; Log::printf(Log::traceLinking, " ELF section [%" WAVM_PRIuPTR "]: '%s' addr=0x%" WAVM_PRIxPTR " size=%" WAVM_PRIuPTR "\n", i, name, addr, Uptr(shdrs[sectionMappings[i].elfIndex].sh_size)); if(addr) { Elf64_Shdr* shdr = reinterpret_cast( bytes + ehdr->e_shoff + sectionMappings[i].elfIndex * sizeof(Elf64_Shdr)); shdr->sh_addr = U64(addr); } if(strcmp(name, ".eh_frame") == 0) { result.unwindInfo.data = reinterpret_cast(addr); result.unwindInfo.dataNumBytes = Uptr(shdrs[sectionMappings[i].elfIndex].sh_size); } } // Populate DWARF section pointers from loaded section addresses. auto setDwarfSection = [&](Iptr elfIdx, const U8*& outPtr, Uptr& outSize) { if(elfIdx >= 0) { Iptr layoutIdx = elfToLayoutIndex[elfIdx]; if(layoutIdx >= 0) { outPtr = reinterpret_cast(layout.sectionLoadAddresses[Uptr(layoutIdx)]); outSize = Uptr(shdrs[elfIdx].sh_size); } } }; setDwarfSection(debugInfoElfIdx, result.dwarf.debugInfo, result.dwarf.debugInfoSize); setDwarfSection(debugAbbrevElfIdx, result.dwarf.debugAbbrev, result.dwarf.debugAbbrevSize); setDwarfSection(debugStrElfIdx, result.dwarf.debugStr, result.dwarf.debugStrSize); setDwarfSection(debugLineElfIdx, result.dwarf.debugLine, result.dwarf.debugLineSize); setDwarfSection(debugAddrElfIdx, result.dwarf.debugAddr, result.dwarf.debugAddrSize); setDwarfSection( debugStrOffsetsElfIdx, result.dwarf.debugStrOffsets, result.dwarf.debugStrOffsetsSize); // Collect defined function symbols. for(U32 i = 0; i < numSymbols; ++i) { const Elf64_Sym& sym = symbols[i]; if(sym.st_shndx == SHN_UNDEF || sym.st_shndx == SHN_ABS) { continue; } if(ELF64_ST_TYPE(sym.st_info) != STT_FUNC) { continue; } if(ELF64_ST_BIND(sym.st_info) < STB_GLOBAL) { continue; } const char* name = strtab + sym.st_name; if(!name[0]) { continue; } LinkResult::Symbol resultSym; resultSym.name = name; resultSym.address = symbolAddresses[i]; resultSym.size = Uptr(sym.st_size); result.definedSymbols.push_back(std::move(resultSym)); } } void ObjectLinker::linkELF(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages) { if(size < sizeof(Elf64_Ehdr)) { Errors::fatalf("ELF file too small"); } const Elf64_Ehdr* ehdr = reinterpret_cast(bytes); // Verify it's 64-bit ELF. if(ehdr->e_ident[4] != 2) { Errors::fatalf("Not a 64-bit ELF file"); } const char* machName = "?"; switch(ehdr->e_machine) { case EM_X86_64: machName = "x86-64"; break; case EM_AARCH64: machName = "AArch64"; break; default: break; } Log::printf(Log::traceLinking, "--- linkELF: %" WAVM_PRIuPTR " bytes, machine=%s ---\n", size, machName); switch(ehdr->e_machine) { case EM_X86_64: linkELFArch(bytes, size, imports, result, allocatePages); break; case EM_AARCH64: linkELFArch(bytes, size, imports, result, allocatePages); break; default: Errors::fatalf("Unsupported ELF machine type: %u", ehdr->e_machine); } } ================================================ FILE: Lib/ObjectLinker/MachO.cpp ================================================ #include #include #include #include #include #include #include #include "ObjectLinkerPrivate.h" #include "WAVM/DWARF/Constants.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/IntCasts.h" #include "WAVM/Inline/UnalignedArrayView.h" #include "WAVM/Logging/Logging.h" #include "WAVM/ObjectLinker/ObjectLinker.h" using namespace WAVM; using namespace WAVM::DWARF; using namespace WAVM::ObjectLinker; // Mach-O header structures (64-bit only). struct MachHeader64 { U32 magic; U32 cputype; U32 cpusubtype; U32 filetype; U32 ncmds; U32 sizeofcmds; U32 flags; U32 reserved; }; struct LoadCommand { U32 cmd; U32 cmdsize; }; struct SegmentCommand64 { U32 cmd; U32 cmdsize; char segname[16]; U64 vmaddr; U64 vmsize; U64 fileoff; U64 filesize; U32 maxprot; U32 initprot; U32 nsects; U32 flags; }; struct MachOSection64 { char sectname[16]; char segname[16]; U64 addr; U64 size; U32 offset; U32 align; U32 reloff; U32 nreloc; U32 flags; U32 reserved1; U32 reserved2; U32 reserved3; }; struct SymtabCommand { U32 cmd; U32 cmdsize; U32 symoff; U32 nsyms; U32 stroff; U32 strsize; }; struct NList64 { U32 n_strx; U8 n_type; U8 n_sect; U16 n_desc; U64 n_value; }; struct MachORelocationInfo { I32 r_address; U32 r_info; // r_symbolnum:24, r_pcrel:1, r_length:2, r_extern:1, r_type:4 }; // Mach-O constants. static constexpr U32 MH_MAGIC_64 = 0xFEEDFACF; static constexpr U32 MH_CIGAM_64 = 0xCFFAEDFE; static constexpr U32 LC_SEGMENT_64 = 0x19; static constexpr U32 LC_SYMTAB = 0x02; // CPU types. static constexpr U32 CPU_TYPE_X86_64 = 0x01000007; static constexpr U32 CPU_TYPE_ARM64 = 0x0100000C; // Symbol type bits. static constexpr U8 N_EXT = 0x01; static constexpr U8 N_TYPE_MASK = 0x0E; static constexpr U8 N_UNDF = 0x00; static constexpr U8 N_SECT = 0x0E; // Section flags. static constexpr U32 S_ATTR_PURE_INSTRUCTIONS = 0x80000000; static constexpr U32 S_ATTR_SOME_INSTRUCTIONS = 0x00000400; // x86-64 relocation types. static constexpr U32 X86_64_RELOC_UNSIGNED = 0; static constexpr U32 X86_64_RELOC_SIGNED = 1; static constexpr U32 X86_64_RELOC_BRANCH = 2; static constexpr U32 X86_64_RELOC_GOT_LOAD = 3; static constexpr U32 X86_64_RELOC_GOT = 4; static constexpr U32 X86_64_RELOC_SUBTRACTOR = 5; static constexpr U32 X86_64_RELOC_SIGNED_1 = 6; static constexpr U32 X86_64_RELOC_SIGNED_2 = 7; static constexpr U32 X86_64_RELOC_SIGNED_4 = 8; // AArch64 relocation types. static constexpr U32 ARM64_RELOC_UNSIGNED = 0; static constexpr U32 ARM64_RELOC_SUBTRACTOR = 1; static constexpr U32 ARM64_RELOC_BRANCH26 = 2; static constexpr U32 ARM64_RELOC_PAGE21 = 3; static constexpr U32 ARM64_RELOC_PAGEOFF12 = 4; static constexpr U32 ARM64_RELOC_GOT_LOAD_PAGE21 = 5; static constexpr U32 ARM64_RELOC_GOT_LOAD_PAGEOFF12 = 6; static constexpr U32 ARM64_RELOC_POINTER_TO_GOT = 7; static constexpr U32 ARM64_RELOC_ADDEND = 10; // Helper to extract relocation info fields. static U32 relocSymbolNum(const MachORelocationInfo& r) { return r.r_info & 0x00FFFFFF; } static bool relocPcrel(const MachORelocationInfo& r) { return (r.r_info >> 24) & 1; } static U32 relocLength(const MachORelocationInfo& r) { return (r.r_info >> 25) & 3; } static bool relocExtern(const MachORelocationInfo& r) { return (r.r_info >> 27) & 1; } static U32 relocType(const MachORelocationInfo& r) { return (r.r_info >> 28) & 0xF; } static const char* getMachOX64RelocName(U32 type) { switch(type) { case X86_64_RELOC_UNSIGNED: return "UNSIGNED"; case X86_64_RELOC_SIGNED: return "SIGNED"; case X86_64_RELOC_BRANCH: return "BRANCH"; case X86_64_RELOC_GOT_LOAD: return "GOT_LOAD"; case X86_64_RELOC_GOT: return "GOT"; case X86_64_RELOC_SUBTRACTOR: return "SUBTRACTOR"; case X86_64_RELOC_SIGNED_1: return "SIGNED_1"; case X86_64_RELOC_SIGNED_2: return "SIGNED_2"; case X86_64_RELOC_SIGNED_4: return "SIGNED_4"; default: return "?"; } } static const char* getMachOAArch64RelocName(U32 type) { switch(type) { case ARM64_RELOC_UNSIGNED: return "UNSIGNED"; case ARM64_RELOC_SUBTRACTOR: return "SUBTRACTOR"; case ARM64_RELOC_BRANCH26: return "BRANCH26"; case ARM64_RELOC_PAGE21: return "PAGE21"; case ARM64_RELOC_PAGEOFF12: return "PAGEOFF12"; case ARM64_RELOC_GOT_LOAD_PAGE21: return "GOT_LOAD_PAGE21"; case ARM64_RELOC_GOT_LOAD_PAGEOFF12: return "GOT_LOAD_PAGEOFF12"; case ARM64_RELOC_POINTER_TO_GOT: return "POINTER_TO_GOT"; case ARM64_RELOC_ADDEND: return "ADDEND"; default: return "?"; } } static SectionAccess getMachOSectionAccess(const MachOSection64& sect) { if(sect.flags & S_ATTR_PURE_INSTRUCTIONS || sect.flags & S_ATTR_SOME_INSTRUCTIONS) { return SectionAccess::readExecute; } if(memcmp(sect.segname, "__DATA", 6) == 0) { return SectionAccess::readWrite; } return SectionAccess::readOnly; } struct CIEEncodings { U8 fdeEncoding; // 'R' augmentation: how pc_begin/pc_range are encoded in FDEs. U8 lsdaEncoding; // 'L' augmentation: how the LSDA pointer is encoded in FDEs. bool hasAugData; // Whether the CIE has 'z' augmentation (FDEs have augmentation data). }; // Parse a CIE at the given offset within an eh_frame section to extract pointer encodings. static CIEEncodings parseCIEEncodings(const U8* ehFrame, Uptr ehFrameSize, Uptr cieOffset) { CIEEncodings result = {0, 0xFF /* DW_EH_PE_omit */, false}; if(cieOffset + 12 > ehFrameSize) { return result; } U32 cieLength = readLE(ehFrame + cieOffset); if(cieLength == 0 || cieOffset + 4 + cieLength > ehFrameSize) { return result; } // Verify this is a CIE (CIE ID = 0 in .eh_frame format). U32 cieId = readLE(ehFrame + cieOffset + 4); if(cieId != 0) { return result; } Uptr p = cieOffset + 9; // Past length(4), CIE id(4), version(1). Uptr cieEnd = cieOffset + 4 + cieLength; const char* aug = reinterpret_cast(ehFrame + p); while(p < cieEnd && ehFrame[p] != 0) { ++p; } ++p; // Skip null terminator. // Skip code alignment, data alignment, RA register (uleb128 each). for(int i = 0; i < 3; ++i) { while(p < cieEnd && (ehFrame[p] & 0x80)) { ++p; } ++p; } if(aug[0] != 'z' || p >= cieEnd) { return result; } result.hasAugData = true; // Skip augmentation data length (uleb128). while(p < cieEnd && (ehFrame[p] & 0x80)) { ++p; } ++p; for(const char* c = aug + 1; *c && p < cieEnd; ++c) { if(*c == 'R') { result.fdeEncoding = ehFrame[p++]; Log::printf(Log::traceLinking, " parseCIE: aug='%s' R=0x%02x L=0x%02x at p=%" WAVM_PRIuPTR "\n", aug, result.fdeEncoding, result.lsdaEncoding, p); } else if(*c == 'L') { result.lsdaEncoding = ehFrame[p++]; } else if(*c == 'P') { U8 enc = ehFrame[p++]; Uptr sz = getEncodedPointerSize(enc); if(sz > 0) { p += sz; } } else if(*c == 'S' || *c == 'B') {} else { break; } } return result; } // Correct a single 8-byte pcrel field in the eh_frame: resolve the target in the object address // space, find its section, and adjust for the difference between object and load deltas. // Only needed on x86-64 where LLVM resolves these at assembly time without relocations; on // AArch64, explicit SUBTRACTOR+UNSIGNED relocation pairs handle them. static void correctEhFramePcRel64(U8* ehFrame, Uptr pos, U64 ehFrameDelta, const std::vector& sectionHeaders, const ImageLayout& layout) { U64 pcRel = readLE(ehFrame + pos); if(pcRel == 0) { return; } U64 fieldLoadAddr = reinterpret_cast(ehFrame) + pos; U64 fieldObjAddr = fieldLoadAddr - ehFrameDelta; U64 targetObjAddr = fieldObjAddr + pcRel; for(Uptr si = 0; si < sectionHeaders.size(); ++si) { U64 sectObjAddr = sectionHeaders[si]->addr; U64 sectSize = sectionHeaders[si]->size; if(targetObjAddr >= sectObjAddr && targetObjAddr < sectObjAddr + sectSize) { U64 correction = (U64(layout.sectionLoadAddresses[si]) - sectObjAddr) - ehFrameDelta; if(correction != 0) { pcRel += correction; writeLE(ehFrame + pos, pcRel); } return; } } } // Parse FDEs in an eh_frame section, building a function-address-to-FDE-offset map for compact // unwind synthesis. If correctPcRelValues is true (x86-64), also corrects pcrel pc_begin and LSDA // fields that LLVM resolved at assembly time; our layout may have changed relative distances. // On AArch64, LLVM emits explicit relocations for these, so no correction is needed. static void parseAndCorrectEhFrameFDEs(bool correctPcRelValues, U8* ehFrame, Uptr ehFrameSize, U64 ehFrameDelta, const std::vector& sectionHeaders, const ImageLayout& layout, HashMap& funcAddrToFdeOffset) { Uptr pos = 0; while(pos + 8 <= ehFrameSize) { U32 entryLength = readLE(ehFrame + pos); if(entryLength == 0 || entryLength == 0xFFFFFFFF) { break; } Uptr entryStart = pos; Uptr entryEnd = entryStart + 4 + entryLength; pos += 4; // Past length. U32 ciePtr = readLE(ehFrame + pos); pos += 4; // Past CIE pointer. if(ciePtr == 0) { pos = entryEnd; continue; } // CIE; skip. // FDE: resolve the CIE it references. CIE pointer is relative to the field's position. Uptr ciePtrFieldPos = entryStart + 4; Uptr cieOffset = ciePtrFieldPos - ciePtr; CIEEncodings cie = parseCIEEncodings(ehFrame, ehFrameSize, cieOffset); Uptr ptrSize = getEncodedPointerSize(cie.fdeEncoding); if(ptrSize == 0) { ptrSize = sizeof(void*); } bool isPcRel = (cie.fdeEncoding & 0x70) == 0x10; // pc_begin. Uptr pcBeginPos = pos; if(!isPcRel || pos + ptrSize > entryEnd) { pos = entryEnd; continue; } if(correctPcRelValues) { WAVM_ERROR_UNLESS(ptrSize == 8); correctEhFramePcRel64(ehFrame, pos, ehFrameDelta, sectionHeaders, layout); } pos += ptrSize; // pc_range (skip; it's a length, not a relocatable address). pos += ptrSize; // Augmentation data (if CIE has 'z'): length (uleb128) then LSDA pointer. Uptr lsdaPtrSize = getEncodedPointerSize(cie.lsdaEncoding); bool lsdaIsPcRel = (cie.lsdaEncoding & 0x70) == 0x10; if(cie.hasAugData && lsdaIsPcRel && lsdaPtrSize > 0 && pos < entryEnd) { // Skip augmentation data length (uleb128). while(pos < entryEnd && (ehFrame[pos] & 0x80)) { ++pos; } ++pos; // LSDA pointer. if(correctPcRelValues && pos + lsdaPtrSize <= entryEnd) { WAVM_ERROR_UNLESS(lsdaPtrSize == 8); correctEhFramePcRel64(ehFrame, pos, ehFrameDelta, sectionHeaders, layout); } } // Record the (now-corrected) pc_begin for compact unwind synthesis. // Read the pcrel value and add to the field's load address to get the function address. U64 pcBeginFieldAddr = reinterpret_cast(ehFrame) + pcBeginPos; U64 pcRelValue = (ptrSize == 4) ? U64(readLE(ehFrame + pcBeginPos)) : readLE(ehFrame + pcBeginPos); Uptr targetLoadAddr = Uptr(pcBeginFieldAddr + pcRelValue); funcAddrToFdeOffset.set(targetLoadAddr, narrow("FDE offset", entryStart)); pos = entryEnd; } } // Resolve the paired UNSIGNED relocation in a SUBTRACTOR pair. static void applyMachOSubtractor(U8* fixup, U32 rlength, U64 symbolB, const MachORelocationInfo& nextRel, const std::vector& symbolAddresses, const std::vector& sectionHeaders, const ImageLayout& layout) { U64 symbolA; if(relocExtern(nextRel)) { symbolA = symbolAddresses[relocSymbolNum(nextRel)]; } else { U32 nextSectNum = relocSymbolNum(nextRel); symbolA = layout.sectionLoadAddresses[nextSectNum - 1] - sectionHeaders[nextSectNum - 1]->addr; } if(rlength == 3) { I64 addend = readLE(fixup); writeLE(fixup, wrap(wrap(symbolA) - wrap(symbolB) + addend)); } else { I32 addend = readLE(fixup); writeLE(fixup, wrap(wrap(symbolA) - wrap(symbolB) + addend)); } } // Returns the number of relocations consumed (1, or 2 for SUBTRACTOR pairs). static U32 applyMachOX64Reloc(UnalignedArrayView relocs, U32 ri, U32 nreloc, U8* fixup, Uptr fixupAddr, U64 symbolValue, const MachORelocationInfo& rel, const std::vector& symbolAddresses, const std::vector& sectionHeaders, ImageLayout& layout) { U32 rtype = relocType(rel); U32 rlength = relocLength(rel); Log::printf(Log::traceLinking, " reloc @0x%" WAVM_PRIxPTR " type=%s(%u) extern=%u sym=%u" " symval=0x%" PRIx64 " len=%u\n", fixupAddr, getMachOX64RelocName(rtype), rtype, U32(relocExtern(rel)), relocSymbolNum(rel), symbolValue, rlength); switch(rtype) { case X86_64_RELOC_UNSIGNED: { if(rlength == 3) { relocAbs64(fixup, symbolValue, readLE(fixup)); } else if(rlength == 2) { relocAbs32(fixup, symbolValue, readLE(fixup)); } break; } case X86_64_RELOC_SIGNED: case X86_64_RELOC_BRANCH: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 4, fixupAddr + 4, layout); break; } case X86_64_RELOC_SIGNED_1: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 5, fixupAddr + 4, layout); break; } case X86_64_RELOC_SIGNED_2: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 6, fixupAddr + 4, layout); break; } case X86_64_RELOC_SIGNED_4: { I32 addend = readLE(fixup); relocRel32(fixup, symbolValue, I64(addend) + 8, fixupAddr + 4, layout); break; } case X86_64_RELOC_GOT_LOAD: case X86_64_RELOC_GOT: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); I32 addend = readLE(fixup); relocRel32(fixup, gotEntry, I64(addend), fixupAddr + 4, layout); break; } case X86_64_RELOC_SUBTRACTOR: { if(ri + 1 >= nreloc) { Errors::fatalf("X86_64_RELOC_SUBTRACTOR without following relocation"); } MachORelocationInfo nextRel = relocs[ri + 1]; if(relocType(nextRel) != X86_64_RELOC_UNSIGNED) { Errors::fatalf("X86_64_RELOC_SUBTRACTOR not followed by X86_64_RELOC_UNSIGNED"); } applyMachOSubtractor( fixup, rlength, symbolValue, nextRel, symbolAddresses, sectionHeaders, layout); return 2; } default: Errors::fatalf("Unsupported MachO x86-64 relocation type: %u", rtype); } return 1; } // Returns the number of relocations consumed (1, or 2 for SUBTRACTOR pairs). static U32 applyMachOAArch64Reloc(UnalignedArrayView relocs, U32 ri, U32 nreloc, U8* fixup, Uptr fixupAddr, U64 symbolValue, const MachORelocationInfo& rel, I64 extraAddend, const std::vector& symbolAddresses, const std::vector& sectionHeaders, ImageLayout& layout) { U32 rtype = relocType(rel); U32 rlength = relocLength(rel); Log::printf(Log::traceLinking, " reloc @0x%" WAVM_PRIxPTR " type=%s(%u) extern=%u sym=%u" " symval=0x%" PRIx64 " len=%u addend=%" PRId64 "\n", fixupAddr, getMachOAArch64RelocName(rtype), rtype, U32(relocExtern(rel)), relocSymbolNum(rel), symbolValue, rlength, extraAddend); switch(rtype) { case ARM64_RELOC_UNSIGNED: { if(rlength == 3) { relocAbs64(fixup, symbolValue, readLE(fixup)); } else { I32 addend = readLE(fixup); relocPrel32(fixup, symbolValue, addend, fixupAddr); } break; } case ARM64_RELOC_SUBTRACTOR: { if(ri + 1 >= nreloc) { Errors::fatalf("ARM64_RELOC_SUBTRACTOR without following relocation"); } MachORelocationInfo nextRel = relocs[ri + 1]; if(relocType(nextRel) != ARM64_RELOC_UNSIGNED) { Errors::fatalf("ARM64_RELOC_SUBTRACTOR not followed by ARM64_RELOC_UNSIGNED"); } applyMachOSubtractor( fixup, rlength, symbolValue, nextRel, symbolAddresses, sectionHeaders, layout); return 2; } case ARM64_RELOC_BRANCH26: relocBranch26(fixup, symbolValue, extraAddend, fixupAddr, layout); break; case ARM64_RELOC_PAGE21: relocAdrp(fixup, symbolValue, extraAddend, fixupAddr); break; case ARM64_RELOC_PAGEOFF12: { U32 insn = readLE(fixup); if((insn & 0x3B000000) == 0x39000000) { relocLdstLo12(fixup, symbolValue, extraAddend); } else { relocAddLo12(fixup, symbolValue, extraAddend); } break; } case ARM64_RELOC_GOT_LOAD_PAGE21: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); relocAdrp(fixup, gotEntry, 0, fixupAddr); break; } case ARM64_RELOC_GOT_LOAD_PAGEOFF12: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); relocLdstLo12(fixup, gotEntry, 0); break; } case ARM64_RELOC_POINTER_TO_GOT: { Uptr gotEntry = getOrCreateGotEntry(layout, symbolValue); if(relocPcrel(rel)) { I64 delta = wrap(gotEntry) - wrap(fixupAddr); writeLE(fixup, wrap(delta)); } else { writeLE(fixup, wrap(gotEntry)); } break; } default: Errors::fatalf("Unsupported MachO AArch64 relocation type: %u", rtype); } return 1; } // Returns the number of relocations consumed. static U32 applyMachOReloc(Arch arch, UnalignedArrayView relocs, U32 ri, U32 nreloc, U8* fixup, Uptr fixupAddr, U64 symbolValue, const MachORelocationInfo& rel, I64 extraAddend, const std::vector& symbolAddresses, const std::vector& sectionHeaders, ImageLayout& layout) { switch(arch) { case Arch::x86_64: return applyMachOX64Reloc(relocs, ri, nreloc, fixup, fixupAddr, symbolValue, rel, symbolAddresses, sectionHeaders, layout); case Arch::aarch64: return applyMachOAArch64Reloc(relocs, ri, nreloc, fixup, fixupAddr, symbolValue, rel, extraAddend, symbolAddresses, sectionHeaders, layout); default: WAVM_UNREACHABLE(); } } template static void linkMachOArch(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages) { const MachHeader64* header = reinterpret_cast(bytes); // Parse load commands to find segments and symtab. std::vector sectionHeaders; const SymtabCommand* symtab = nullptr; U8* cmdPtr = bytes + sizeof(MachHeader64); for(U32 i = 0; i < header->ncmds; ++i) { const LoadCommand* cmd = reinterpret_cast(cmdPtr); if(cmd->cmd == LC_SEGMENT_64) { const SegmentCommand64* seg = reinterpret_cast(cmdPtr); U8* sectPtr = cmdPtr + sizeof(SegmentCommand64); for(U32 s = 0; s < seg->nsects; ++s) { MachOSection64* sect = reinterpret_cast(sectPtr + s * sizeof(MachOSection64)); sectionHeaders.push_back(sect); } } else if(cmd->cmd == LC_SYMTAB) { symtab = reinterpret_cast(cmdPtr); } cmdPtr += cmd->cmdsize; } // If there's no LC_SYMTAB (e.g. an empty module with no functions), treat as zero symbols. const U32 nsyms = symtab ? symtab->nsyms : 0; UnalignedArrayView symbols = symtab ? UnalignedArrayView{bytes + symtab->symoff, nsyms} : UnalignedArrayView{nullptr, 0}; const char* strtab = symtab ? reinterpret_cast(bytes + symtab->stroff) : ""; // 1. Collect section layout info. std::vector layoutInfos; for(const auto* sect : sectionHeaders) { SectionLayoutInfo info; info.dataSize = sect->size; info.alignment = Uptr(1) << sect->align; info.access = getMachOSectionAccess(*sect); layoutInfos.push_back(info); } // 2. Scan relocations to count GOT slots (unique GOT-type reloc targets) // and stub slots (unique stub-creating reloc targets). Uptr numGotSlots = 0; Uptr numStubSlots = 0; { // Use symbol index for extern relocs, section number offset by nsyms for non-extern. HashSet gotSymsSeen; HashSet stubSymsSeen; for(const auto* sect : sectionHeaders) { if(sect->nreloc == 0) { continue; } UnalignedArrayView relocs{bytes + sect->reloff, sect->nreloc}; for(U32 ri = 0; ri < sect->nreloc; ++ri) { MachORelocationInfo rel = relocs[ri]; U32 rtype = relocType(rel); // Check for stub-creating relocation types. bool needsStub; if constexpr(arch == Arch::x86_64) { needsStub = rtype == X86_64_RELOC_SIGNED || rtype == X86_64_RELOC_BRANCH || rtype == X86_64_RELOC_SIGNED_1 || rtype == X86_64_RELOC_SIGNED_2 || rtype == X86_64_RELOC_SIGNED_4; } else { needsStub = rtype == ARM64_RELOC_BRANCH26; } if(needsStub) { stubSymsSeen.add(relocSymbolNum(rel)); } // Check for GOT-type relocation types. bool isGot; if constexpr(arch == Arch::x86_64) { isGot = rtype == X86_64_RELOC_GOT_LOAD || rtype == X86_64_RELOC_GOT; } else { isGot = rtype == ARM64_RELOC_GOT_LOAD_PAGE21 || rtype == ARM64_RELOC_GOT_LOAD_PAGEOFF12 || rtype == ARM64_RELOC_POINTER_TO_GOT; } if(!isGot) { continue; } U32 key = relocExtern(rel) ? relocSymbolNum(rel) : nsyms + relocSymbolNum(rel); gotSymsSeen.add(key); } } numGotSlots = gotSymsSeen.size(); numStubSlots = stubSymsSeen.size(); } // 2b. Find __LD,__compact_unwind and pre-calculate synthesized __unwind_info size. // The linker must synthesize __unwind_info from __LD,__compact_unwind because LLVM // never generates __TEXT,__unwind_info in object files; that's the linker's job. Uptr compactUnwindSectionIdx = UINTPTR_MAX; Uptr unwindInfoReserveBytes = 0; for(Uptr i = 0; i < sectionHeaders.size(); ++i) { if(strncmp(sectionHeaders[i]->sectname, "__compact_unwind", 16) == 0 && sectionHeaders[i]->size > 0) { compactUnwindSectionIdx = i; Uptr numEntries = Uptr(sectionHeaders[i]->size) / 32; // Upper bound: header(28) + personalities(numEntries*4) + index(24) // + LSDAs(numEntries*8) + page header(8) + entries(numEntries*8) unwindInfoReserveBytes = 60 + numEntries * 20; // Personality pointers also need GOT entries (upper bound: one per entry). numGotSlots += numEntries; break; } } // 3. Layout image. ImageLayout layout = layoutImage(layoutInfos, numStubSlots * stubSlotSize, numGotSlots * 8, unwindInfoReserveBytes, allocatePages); // 4. Copy section data to load addresses. for(Uptr i = 0; i < sectionHeaders.size(); ++i) { if(sectionHeaders[i]->size > 0 && sectionHeaders[i]->offset > 0) { memcpy(reinterpret_cast(layout.sectionLoadAddresses[i]), bytes + sectionHeaders[i]->offset, sectionHeaders[i]->size); } } // 5. Build symbol addresses. std::vector symbolAddresses(nsyms, 0); for(U32 i = 0; i < nsyms; ++i) { const NList64 sym = symbols[i]; U8 type = sym.n_type & N_TYPE_MASK; if(type == N_SECT) { // Defined symbol: section index is 1-based. Uptr sectIdx = Uptr(sym.n_sect) - 1; if(sectIdx >= sectionHeaders.size()) { Errors::fatalf("MachO symbol section index out of range"); } Uptr sectionBase = layout.sectionLoadAddresses[sectIdx]; Uptr sectionFileBase = sectionHeaders[sectIdx]->addr; symbolAddresses[i] = sectionBase + (sym.n_value - sectionFileBase); } else if(type == N_UNDF && (sym.n_type & N_EXT)) { // External symbol. const char* name = strtab + sym.n_strx; // Strip leading underscore on MachO. const char* demangledName = name[0] == '_' ? name + 1 : name; const Uptr* addr = imports.get(std::string(demangledName)); if(!addr) { Errors::fatalf("Unresolved MachO symbol: %s (demangled: %s)", name, demangledName); } symbolAddresses[i] = *addr; } const char* symName = strtab + sym.n_strx; Log::printf(Log::traceLinking, " MachO sym [%u]: '%s' type=0x%02x sect=%u value=0x%" PRIx64 " addr=0x%" WAVM_PRIxPTR "\n", i, symName, U32(sym.n_type), U32(sym.n_sect), sym.n_value, symbolAddresses[i]); } // 6. Apply relocations per section. for(Uptr sectIdx = 0; sectIdx < sectionHeaders.size(); ++sectIdx) { const MachOSection64* sect = sectionHeaders[sectIdx]; if(sect->nreloc == 0) { continue; } Uptr sectionAddr = layout.sectionLoadAddresses[sectIdx]; UnalignedArrayView relocs{bytes + sect->reloff, sect->nreloc}; I64 extraAddend = 0; for(U32 ri = 0; ri < sect->nreloc;) { MachORelocationInfo rel = relocs[ri]; // Handle ARM64_RELOC_ADDEND: consume the addend for the next relocation. if(arch == Arch::aarch64 && relocType(rel) == ARM64_RELOC_ADDEND) { extraAddend = rel.r_info & 0x00FFFFFF; if(extraAddend & 0x800000) { extraAddend |= ~I64(0xFFFFFF); } ++ri; continue; } U8* fixup = reinterpret_cast(sectionAddr + wrap(rel.r_address)); Uptr fixupAddr = sectionAddr + wrap(rel.r_address); // Resolve the symbol value. U64 symbolValue = 0; if(relocExtern(rel)) { U32 symIdx = relocSymbolNum(rel); if(symIdx >= nsyms) { Errors::fatalf("MachO relocation symbol index out of range"); } symbolValue = symbolAddresses[symIdx]; } else { U32 sectNum = relocSymbolNum(rel); if(sectNum == 0 || sectNum > sectionHeaders.size()) { Errors::fatalf("MachO non-extern relocation section number out of range"); } symbolValue = layout.sectionLoadAddresses[sectNum - 1] - sectionHeaders[sectNum - 1]->addr; } ri += applyMachOReloc(arch, relocs, ri, sect->nreloc, fixup, fixupAddr, symbolValue, rel, extraAddend, symbolAddresses, sectionHeaders, layout); extraAddend = 0; } } // 7. Fill result. result.imageBase = layout.imageBase; result.numImagePages = layout.numPages; result.numCodeBytes = layout.codeSize; result.numReadOnlyBytes = layout.roSize; result.numReadWriteBytes = layout.rwSize; // Record section addresses and find unwind sections. for(Uptr i = 0; i < sectionHeaders.size(); ++i) { const MachOSection64* sect = sectionHeaders[i]; Uptr addr = layout.sectionLoadAddresses[i]; char seg[sizeof(sect->segname) + 1] = {0}; char sn[sizeof(sect->sectname) + 1] = {0}; memcpy(seg, sect->segname, sizeof(sect->segname)); memcpy(sn, sect->sectname, sizeof(sect->sectname)); std::string fullName = std::string(seg) + "," + std::string(sn); Log::printf(Log::traceLinking, " MachO section [%" WAVM_PRIuPTR "]: '%s' addr=0x%" WAVM_PRIxPTR " size=%" WAVM_PRIuPTR " nreloc=%u\n", i, fullName.c_str(), addr, Uptr(sect->size), sect->nreloc); if(strncmp(sect->sectname, "__eh_frame", 16) == 0) { result.unwindInfo.data = reinterpret_cast(addr); result.unwindInfo.dataNumBytes = sect->size; } else if(strncmp(sect->sectname, "__unwind_info", 16) == 0) { result.unwindInfo.compactUnwind = reinterpret_cast(addr); result.unwindInfo.compactUnwindNumBytes = sect->size; } else if(strncmp(sect->sectname, "__debug_info", 16) == 0) { result.dwarf.debugInfo = reinterpret_cast(addr); result.dwarf.debugInfoSize = Uptr(sect->size); } else if(strncmp(sect->sectname, "__debug_abbrev", 16) == 0) { result.dwarf.debugAbbrev = reinterpret_cast(addr); result.dwarf.debugAbbrevSize = Uptr(sect->size); } else if(strncmp(sect->sectname, "__debug_str", 16) == 0) { result.dwarf.debugStr = reinterpret_cast(addr); result.dwarf.debugStrSize = Uptr(sect->size); } else if(strncmp(sect->sectname, "__debug_line", 16) == 0) { result.dwarf.debugLine = reinterpret_cast(addr); result.dwarf.debugLineSize = Uptr(sect->size); } else if(strncmp(sect->sectname, "__debug_addr", 16) == 0) { result.dwarf.debugAddr = reinterpret_cast(addr); result.dwarf.debugAddrSize = Uptr(sect->size); } else if(strncmp(sect->sectname, "__debug_str_offs", 16) == 0) { result.dwarf.debugStrOffsets = reinterpret_cast(addr); result.dwarf.debugStrOffsetsSize = Uptr(sect->size); } } // Relocate pcrel FDE pc_begin values in __eh_frame and build a function-address-to-FDE-offset // map (used by compact unwind synthesis below). // // LLVM resolves pcrel references between sections at assembly time based on their positions // in the object file, which interleaves __TEXT and __DWARF sections. Our layout may place // them at different relative distances, so the pcrel values need correction. HashMap funcAddrToFdeOffset; if(result.unwindInfo.data && result.unwindInfo.dataNumBytes) { // Find the eh_frame section index to compute its object-to-load delta. Uptr ehFrameSectIdx = UINTPTR_MAX; for(Uptr si = 0; si < sectionHeaders.size(); ++si) { if(layout.sectionLoadAddresses[si] == reinterpret_cast(result.unwindInfo.data)) { ehFrameSectIdx = si; break; } } if(ehFrameSectIdx != UINTPTR_MAX) { U64 ehFrameDelta = U64(layout.sectionLoadAddresses[ehFrameSectIdx]) - sectionHeaders[ehFrameSectIdx]->addr; parseAndCorrectEhFrameFDEs(arch == Arch::x86_64, const_cast(result.unwindInfo.data), result.unwindInfo.dataNumBytes, ehFrameDelta, sectionHeaders, layout, funcAddrToFdeOffset); } } // Synthesize __unwind_info from __LD,__compact_unwind. // LLVM never generates __TEXT,__unwind_info in object files; that's the linker's job. // The synthesized data is written into reserved space in the image's read-only segment. if(compactUnwindSectionIdx != UINTPTR_MAX && !result.unwindInfo.compactUnwind) { Uptr i = compactUnwindSectionIdx; const MachOSection64* cuSect = sectionHeaders[i]; // Each compact_unwind_entry is 32 bytes: // U64 functionStart, U32 length, U32 encoding, U64 personality, U64 lsda Uptr numEntries = Uptr(cuSect->size) / 32; const U8* cuData = reinterpret_cast(layout.sectionLoadAddresses[i]); Uptr imageBase = Uptr(layout.imageBase); // Collect unique personality pointers and build entry list. struct CUEntry { U32 funcOffset; U32 funcLength; U32 encoding; U64 personality; U64 lsda; }; std::vector entries; std::vector personalities; for(Uptr e = 0; e < numEntries; ++e) { const U8* p = cuData + e * 32; CUEntry entry; U64 funcStart = readLE(p); entry.funcLength = readLE(p + 8); entry.encoding = readLE(p + 12); entry.personality = readLE(p + 16); entry.lsda = readLE(p + 24); // Keep UNWIND_HAS_LSDA (0x40000000) in the encoding; system libunwind // checks this bit to decide whether to search the LSDA index table. entry.funcOffset = narrow("compact_unwind funcOffset", funcStart - imageBase); Log::printf(Log::traceLinking, " compact_unwind[%" WAVM_PRIuPTR "]: funcStart=0x%" PRIx64 " funcOffset=0x%x len=%u" " encoding=0x%08x personality=0x%" PRIx64 " lsda=0x%" PRIx64 "\n", e, funcStart, entry.funcOffset, entry.funcLength, entry.encoding, entry.personality, entry.lsda); // Map personality pointer to 1-based index in the array. if(entry.personality) { U32 persIdx = 0; for(Uptr pi = 0; pi < personalities.size(); ++pi) { if(personalities[pi] == entry.personality) { persIdx = U32(pi + 1); break; } } if(!persIdx) { personalities.push_back(entry.personality); persIdx = U32(personalities.size()); } // Clear old personality bits (29:28) and set new index. entry.encoding = (entry.encoding & 0xCFFFFFFF) | (persIdx << 28); } entries.push_back(entry); } // Sort entries by function offset. std::sort(entries.begin(), entries.end(), [](const CUEntry& a, const CUEntry& b) { return a.funcOffset < b.funcOffset; }); // Count LSDA entries. Uptr numLsda = 0; for(const auto& e : entries) { if(e.lsda) { ++numLsda; } } // For DWARF mode entries, fill in the FDE offset (lower 24 bits of encoding). // System libunwind uses this offset to find the function's FDE in .eh_frame. // LLVM leaves the offset as 0 in __LD,__compact_unwind; the linker must fill it. // This matches JITLink's writeSecondLevelPages which encodes FDE offsets. U32 dwarfMode; switch(arch) { case Arch::aarch64: dwarfMode = 0x03000000; break; case Arch::x86_64: dwarfMode = 0x04000000; break; default: WAVM_UNREACHABLE(); } // Use the funcAddrToFdeOffset map (built by relocateEhFrameFDEs above) to fill in // FDE offsets for DWARF mode entries. { for(auto& entry : entries) { if((entry.encoding & 0x0F000000) == dwarfMode) { Uptr funcAddr = imageBase + entry.funcOffset; const U32* fdeOffset = funcAddrToFdeOffset.get(funcAddr); if(fdeOffset) { entry.encoding |= (*fdeOffset & 0x00FFFFFF); Log::printf(Log::traceLinking, " DWARF entry funcOffset=0x%x: FDE at .eh_frame+0x%x\n", entry.funcOffset, *fdeOffset); } } } } // Build __unwind_info layout. // Regular second-level pages hold at most 511 entries: (4096 - 8) / 8. static constexpr U32 maxEntriesPerPage = 511; U32 numSortedEntries = U32(entries.size()); U32 numPages = numSortedEntries ? (numSortedEntries + maxEntriesPerPage - 1) / maxEntriesPerPage : 1; U32 headerSize = 28; U32 personalityOff = headerSize; U32 personalitySize = narrow("personalitySize", personalities.size() * 4); U32 indexOff = personalityOff + personalitySize; U32 indexCount = numPages + 1; // one entry per page + sentinel U32 indexSize = indexCount * 12; U32 lsdaOff = indexOff + indexSize; U32 lsdaSize = narrow("lsdaSize", numLsda * 8); U32 pagesOff = lsdaOff + lsdaSize; U32 pagesSize = 0; for(U32 p = 0; p < numPages; ++p) { U32 start = p * maxEntriesPerPage; U32 count = std::min(maxEntriesPerPage, numSortedEntries - start); pagesSize += 8 + count * 8; } U32 totalSize = pagesOff + pagesSize; WAVM_ERROR_UNLESS(layout.extraReadOnly); WAVM_ERROR_UNLESS(totalSize <= unwindInfoReserveBytes); U8* out = layout.extraReadOnly; memset(out, 0, totalSize); // Header. writeLE(out + 0, 1); // version writeLE(out + 4, personalityOff); // commonEncodingsArraySectionOffset writeLE(out + 8, 0); // commonEncodingsArrayCount writeLE(out + 12, personalityOff); // personalityArraySectionOffset writeLE( out + 16, narrow("personality count", personalities.size())); // personalityArrayCount writeLE(out + 20, indexOff); // indexSectionOffset writeLE(out + 24, indexCount); // indexCount // Personality array (offsets to GOT entries containing personality addresses). // System libunwind dereferences personality array entries as pointers to read // the actual personality function address from a GOT entry. This matches // JITLink's CompactUnwindManager which uses GOTManager for personalities. for(Uptr pi = 0; pi < personalities.size(); ++pi) { Uptr gotEntry = getOrCreateGotEntry(layout, personalities[pi]); U32 persOffset = narrow("personality GOT offset", gotEntry - imageBase); writeLE(out + personalityOff + U32(pi) * 4, persOffset); Log::printf(Log::traceLinking, " personality[%" WAVM_PRIuPTR "]: addr=0x%" PRIx64 " gotEntry=0x%" WAVM_PRIxPTR " imageRelOffset=0x%x\n", pi, personalities[pi], gotEntry, persOffset); } // LSDA index. U32 lsdaIdx = 0; for(const auto& e : entries) { if(e.lsda) { U32 lsdaImgRel = narrow("LSDA offset", e.lsda - imageBase); writeLE(out + lsdaOff + lsdaIdx * 8, e.funcOffset); writeLE(out + lsdaOff + lsdaIdx * 8 + 4, lsdaImgRel); Log::printf(Log::traceLinking, " lsda[%u]: funcOffset=0x%x lsdaAddr=0x%" PRIx64 " lsdaImageRel=0x%x\n", lsdaIdx, e.funcOffset, e.lsda, lsdaImgRel); ++lsdaIdx; } } // Build LSDA counts per page (for first-level index lsdaIndexArraySectionOffset). // LSDAs are sorted by funcOffset (same order as entries), so we count how many // LSDAs fall within each page's entry range. std::vector lsdaCountBeforePage(numPages + 1, 0); { U32 runningLsda = 0; for(U32 p = 0; p < numPages; ++p) { lsdaCountBeforePage[p] = runningLsda; U32 start = p * maxEntriesPerPage; U32 end = std::min(start + maxEntriesPerPage, numSortedEntries); for(U32 ei = start; ei < end; ++ei) { if(entries[ei].lsda) { ++runningLsda; } } } lsdaCountBeforePage[numPages] = runningLsda; } // First-level index and second-level pages. U32 curPageOff = pagesOff; U32 lastFuncEnd = 0; if(!entries.empty()) { lastFuncEnd = entries.back().funcOffset + entries.back().funcLength; } for(U32 p = 0; p < numPages; ++p) { U32 start = p * maxEntriesPerPage; U32 end = std::min(start + maxEntriesPerPage, numSortedEntries); U32 count = end - start; U32 funcOff = (start < numSortedEntries) ? entries[start].funcOffset : 0; // First-level index entry. writeLE(out + indexOff + p * 12 + 0, funcOff); writeLE(out + indexOff + p * 12 + 4, curPageOff); writeLE(out + indexOff + p * 12 + 8, lsdaOff + lsdaCountBeforePage[p] * 8); // Second-level regular page. writeLE(out + curPageOff + 0, 2); // kind = REGULAR writeLE(out + curPageOff + 4, U16(8)); // entryPageOffset (header is 8 bytes) writeLE(out + curPageOff + 6, U16(count)); // entryCount for(U32 ei = 0; ei < count; ++ei) { U32 off = curPageOff + 8 + ei * 8; writeLE(out + off, entries[start + ei].funcOffset); writeLE(out + off + 4, entries[start + ei].encoding); Log::printf(Log::traceLinking, " page[%u] entry[%u]: funcOffset=0x%x encoding=0x%08x\n", p, ei, entries[start + ei].funcOffset, entries[start + ei].encoding); } curPageOff += 8 + count * 8; } // Sentinel index entry. writeLE(out + indexOff + numPages * 12 + 0, lastFuncEnd); writeLE(out + indexOff + numPages * 12 + 4, 0); writeLE(out + indexOff + numPages * 12 + 8, lsdaOff + lsdaCountBeforePage[numPages] * 8); result.unwindInfo.compactUnwind = out; result.unwindInfo.compactUnwindNumBytes = totalSize; Log::printf(Log::traceLinking, " Synthesized __unwind_info: %u bytes, imageBase=0x%" WAVM_PRIxPTR " data=0x%" WAVM_PRIxPTR "\n", totalSize, imageBase, Uptr(out)); Log::printf(Log::traceLinking, " header: version=1 commonEncOff=%u commonEncCnt=0" " persOff=%u persCnt=%u indexOff=%u indexCnt=%u\n", personalityOff, personalityOff, U32(personalities.size()), indexOff, indexCount); Log::printf(Log::traceLinking, " %u entries, %u pages, %u personalities, %" WAVM_PRIuPTR " LSDAs\n", numSortedEntries, numPages, U32(personalities.size()), numLsda); } // Collect defined function symbols. for(U32 i = 0; i < nsyms; ++i) { const NList64 sym = symbols[i]; if((sym.n_type & N_TYPE_MASK) != N_SECT) { continue; } if(!(sym.n_type & N_EXT)) { continue; } const char* name = strtab + sym.n_strx; // Demangle (strip leading underscore). const char* demangledName = name[0] == '_' ? name + 1 : name; LinkResult::Symbol resultSym; resultSym.name = demangledName; resultSym.address = symbolAddresses[i]; // MachO doesn't store symbol sizes directly; we'll compute them from the next symbol // or section end. For now, set size to 0 and let the caller handle it. resultSym.size = 0; result.definedSymbols.push_back(std::move(resultSym)); } // Compute symbol sizes by sorting symbols within each section and using gaps. struct SymWithIndex { Uptr address; Uptr resultIndex; U8 section; }; std::vector allSyms; for(Uptr i = 0; i < result.definedSymbols.size(); ++i) { for(U32 j = 0; j < nsyms; ++j) { if(symbolAddresses[j] == result.definedSymbols[i].address && (symbols[j].n_type & N_TYPE_MASK) == N_SECT && (symbols[j].n_type & N_EXT)) { allSyms.push_back({result.definedSymbols[i].address, i, symbols[j].n_sect}); break; } } } std::sort(allSyms.begin(), allSyms.end(), [](const SymWithIndex& a, const SymWithIndex& b) { return a.section < b.section || (a.section == b.section && a.address < b.address); }); for(Uptr i = 0; i < allSyms.size(); ++i) { Uptr nextAddr; if(i + 1 < allSyms.size() && allSyms[i + 1].section == allSyms[i].section) { nextAddr = allSyms[i + 1].address; } else { Uptr sectIdx = Uptr(allSyms[i].section) - 1; nextAddr = layout.sectionLoadAddresses[sectIdx] + sectionHeaders[sectIdx]->size; } result.definedSymbols[allSyms[i].resultIndex].size = nextAddr - allSyms[i].address; } // Protect image now that all writes (including synthesized __unwind_info) are done. protectImage(layout); } void ObjectLinker::linkMachO(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages) { if(size < sizeof(MachHeader64)) { Errors::fatalf("MachO file too small"); } const MachHeader64* header = reinterpret_cast(bytes); U32 magic = header->magic; if(magic != MH_MAGIC_64 && magic != MH_CIGAM_64) { Errors::fatalf("Not a 64-bit MachO file"); } const char* cpuName = "?"; switch(header->cputype) { case CPU_TYPE_X86_64: cpuName = "x86-64"; break; case CPU_TYPE_ARM64: cpuName = "AArch64"; break; default: break; } Log::printf( Log::traceLinking, "--- linkMachO: %" WAVM_PRIuPTR " bytes, cpu=%s ---\n", size, cpuName); switch(header->cputype) { case CPU_TYPE_X86_64: linkMachOArch(bytes, size, imports, result, allocatePages); break; case CPU_TYPE_ARM64: linkMachOArch(bytes, size, imports, result, allocatePages); break; default: Errors::fatalf("Unsupported MachO CPU type: 0x%x", header->cputype); } } ================================================ FILE: Lib/ObjectLinker/ObjectLinker.cpp ================================================ // Object linker: layout, memory protection, relocation application, stubs, and GOT. // Format-specific parsers (COFF.cpp, ELF.cpp, MachO.cpp) call into this shared code. #include "WAVM/ObjectLinker/ObjectLinker.h" #include #include #include "ObjectLinkerPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/IntCasts.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Memory.h" using namespace WAVM; using namespace WAVM::ObjectLinker; void ObjectLinker::linkObject(U8* objectBytes, Uptr objectNumBytes, const HashMap& importedSymbolMap, LinkResult& outResult, PageAllocator allocatePages) { if(objectNumBytes < 4) { Errors::fatalf("Object file too small (%zu bytes)", objectNumBytes); } // Detect format from magic bytes. if(objectNumBytes >= 4 && objectBytes[0] == 0x7f && objectBytes[1] == 'E' && objectBytes[2] == 'L' && objectBytes[3] == 'F') { linkELF(objectBytes, objectNumBytes, importedSymbolMap, outResult, allocatePages); } else if(objectNumBytes >= 4 && ((objectBytes[0] == 0xCF && objectBytes[1] == 0xFA && objectBytes[2] == 0xED && objectBytes[3] == 0xFE) || (objectBytes[0] == 0xFE && objectBytes[1] == 0xED && objectBytes[2] == 0xFA && objectBytes[3] == 0xCF))) { linkMachO(objectBytes, objectNumBytes, importedSymbolMap, outResult, allocatePages); } else { // Assume COFF (no single magic for COFF .obj files). linkCOFF(objectBytes, objectNumBytes, importedSymbolMap, outResult, allocatePages); } } ImageLayout ObjectLinker::layoutImage(const std::vector& sections, Uptr numStubBytes, Uptr numGotBytes, Uptr numExtraReadOnlyBytes, PageAllocator allocatePages) { const Uptr pageSize = Platform::getBytesPerPage(); ImageLayout layout; layout.numSections = sections.size(); // Separate sections by access type and track order. std::vector codeSections, roSections, rwSections; for(Uptr i = 0; i < sections.size(); ++i) { switch(sections[i].access) { case SectionAccess::readExecute: codeSections.push_back(i); break; case SectionAccess::readOnly: roSections.push_back(i); break; case SectionAccess::readWrite: rwSections.push_back(i); break; default: Errors::fatalf("Unknown section access type"); break; } } // Calculate sizes per segment with alignment. auto alignUp = [](Uptr value, Uptr alignment) -> Uptr { return alignment ? (value + alignment - 1) & ~(alignment - 1) : value; }; Uptr codeSize = 0; for(Uptr i : codeSections) { codeSize = alignUp(codeSize, sections[i].alignment) + sections[i].dataSize; } // Add stub space to code segment. if(numStubBytes > 0) { codeSize = alignUp(codeSize, 16) + numStubBytes; } Uptr roSize = 0; for(Uptr i : roSections) { roSize = alignUp(roSize, sections[i].alignment) + sections[i].dataSize; } // Add GOT space to read-only segment. if(numGotBytes > 0) { roSize = alignUp(roSize, 8) + numGotBytes; } // Add extra read-only space (e.g. for synthesized __unwind_info). if(numExtraReadOnlyBytes > 0) { roSize = alignUp(roSize, 4) + numExtraReadOnlyBytes; } Uptr rwSize = 0; for(Uptr i : rwSections) { rwSize = alignUp(rwSize, sections[i].alignment) + sections[i].dataSize; } // Page-align each segment. Uptr codePages = (codeSize + pageSize - 1) / pageSize; Uptr roPages = (roSize + pageSize - 1) / pageSize; Uptr rwPages = (rwSize + pageSize - 1) / pageSize; Uptr totalPages = codePages + roPages + rwPages; if(totalPages == 0) { layout.imageBase = nullptr; layout.numPages = 0; layout.codeSize = 0; layout.roSize = 0; layout.rwSize = 0; layout.sectionLoadAddresses.resize(sections.size(), 0); layout.stubBase = layout.stubEnd = layout.stubCurrent = nullptr; layout.gotBase = layout.gotEnd = layout.gotCurrent = nullptr; return layout; } // Allocate and commit pages. if(!allocatePages) { allocatePages = [](Uptr numPages) -> U8* { U8* base = Platform::allocateVirtualPages(numPages); if(!base || !Platform::commitVirtualPages(base, numPages)) { Errors::fatalf("Failed to allocate %" WAVM_PRIuPTR " pages for JIT image", numPages); } Platform::registerVirtualAllocation(numPages << Platform::getBytesPerPageLog2()); return base; }; } U8* imageBase = allocatePages(totalPages); if(!imageBase) { Errors::fatalf("Page allocator returned null for %" WAVM_PRIuPTR " pages", totalPages); } layout.imageBase = imageBase; layout.numPages = totalPages; layout.codeSize = codePages * pageSize; layout.roSize = roPages * pageSize; layout.rwSize = rwPages * pageSize; layout.sectionLoadAddresses.resize(sections.size(), 0); // Assign addresses within each segment. U8* codeBase = imageBase; U8* roBase = imageBase + codePages * pageSize; U8* rwBase = roBase + roPages * pageSize; Uptr codeOffset = 0; for(Uptr i : codeSections) { codeOffset = alignUp(codeOffset, sections[i].alignment); layout.sectionLoadAddresses[i] = reinterpret_cast(codeBase + codeOffset); codeOffset += sections[i].dataSize; } // Place stubs after code sections. if(numStubBytes > 0) { codeOffset = alignUp(codeOffset, 16); layout.stubBase = codeBase + codeOffset; layout.stubEnd = layout.stubBase + numStubBytes; layout.stubCurrent = layout.stubBase; } else { layout.stubBase = layout.stubEnd = layout.stubCurrent = nullptr; } Uptr roOffset = 0; for(Uptr i : roSections) { roOffset = alignUp(roOffset, sections[i].alignment); layout.sectionLoadAddresses[i] = reinterpret_cast(roBase + roOffset); roOffset += sections[i].dataSize; } // Place GOT after read-only sections. if(numGotBytes > 0) { roOffset = alignUp(roOffset, 8); layout.gotBase = roBase + roOffset; layout.gotEnd = layout.gotBase + numGotBytes; layout.gotCurrent = layout.gotBase; roOffset += numGotBytes; } else { layout.gotBase = layout.gotEnd = layout.gotCurrent = nullptr; } // Place extra read-only space after GOT. if(numExtraReadOnlyBytes > 0) { roOffset = alignUp(roOffset, 4); layout.extraReadOnly = roBase + roOffset; } Uptr rwOffset = 0; for(Uptr i : rwSections) { rwOffset = alignUp(rwOffset, sections[i].alignment); layout.sectionLoadAddresses[i] = reinterpret_cast(rwBase + rwOffset); rwOffset += sections[i].dataSize; } return layout; } void ObjectLinker::protectImage(const ImageLayout& layout) { if(!layout.imageBase) { return; } const Uptr pageSize = Platform::getBytesPerPage(); U8* codeBase = layout.imageBase; Uptr codePages = layout.codeSize / pageSize; U8* roBase = codeBase + layout.codeSize; Uptr roPages = layout.roSize / pageSize; U8* rwBase = roBase + layout.roSize; Uptr rwPages = layout.rwSize / pageSize; if(codePages > 0) { if(!Platform::setVirtualPageAccess( codeBase, codePages, Platform::MemoryAccess::readExecute)) { Errors::fatalf("Failed to set code pages to readExecute"); } } if(roPages > 0) { if(!Platform::setVirtualPageAccess(roBase, roPages, Platform::MemoryAccess::readOnly)) { Errors::fatalf("Failed to set read-only pages"); } } if(rwPages > 0) { if(!Platform::setVirtualPageAccess(rwBase, rwPages, Platform::MemoryAccess::readWrite)) { Errors::fatalf("Failed to set read-write pages"); } } } static void writeStub(Arch arch, U8* stub, Uptr targetAddr) { switch(arch) { case Arch::x86_64: // jmp [rip+0]; .quad addr // FF 25 00 00 00 00 <8-byte addr> (14 bytes, padded to 16) stub[0] = 0xFF; stub[1] = 0x25; writeLE(stub + 2, 0); writeLE(stub + 6, wrap(targetAddr)); stub[14] = 0xCC; // INT3 padding stub[15] = 0xCC; break; case Arch::aarch64: // LDR X16, [PC, #8]; BR X16; .quad addr writeLE(stub + 0, 0x58000050); // LDR X16, #8 writeLE(stub + 4, 0xD61F0200); // BR X16 writeLE(stub + 8, wrap(targetAddr)); break; default: WAVM_UNREACHABLE(); } } template Uptr ObjectLinker::getOrCreateStub(ImageLayout& layout, Uptr targetAddr) { Uptr* cached = layout.stubCache.get(targetAddr); if(cached) { return *cached; } if(!layout.stubCurrent || layout.stubCurrent + stubSlotSize > layout.stubEnd) { Errors::fatalf("Ran out of stub space"); } U8* stub = layout.stubCurrent; layout.stubCurrent += stubSlotSize; writeStub(arch, stub, targetAddr); Uptr stubAddr = reinterpret_cast(stub); layout.stubCache.addOrFail(targetAddr, stubAddr); return stubAddr; } template Uptr ObjectLinker::getOrCreateStub(ImageLayout&, Uptr); template Uptr ObjectLinker::getOrCreateStub(ImageLayout&, Uptr); Uptr ObjectLinker::getOrCreateGotEntry(ImageLayout& layout, Uptr symbolAddr) { Uptr* existing = layout.gotCache.get(symbolAddr); if(existing) { return *existing; } if(!layout.gotCurrent) { Errors::fatalf("GOT space not allocated but GOT entry requested"); } if(layout.gotCurrent + 8 > layout.gotEnd) { Errors::fatalf("Ran out of GOT space"); } U8* entry = layout.gotCurrent; layout.gotCurrent += 8; writeLE(entry, wrap(symbolAddr)); Uptr entryAddr = reinterpret_cast(entry); layout.gotCache.addOrFail(symbolAddr, entryAddr); return entryAddr; } ================================================ FILE: Lib/ObjectLinker/ObjectLinkerPrivate.h ================================================ #pragma once // Internal types shared between ObjectLinker.cpp and format-specific files. #include #include #include #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/IntCasts.h" #include "WAVM/ObjectLinker/ObjectLinker.h" namespace WAVM { namespace ObjectLinker { struct LinkResult; enum class Arch { x86_64, aarch64 }; enum class SectionAccess { readExecute, readOnly, readWrite, }; struct SectionLayoutInfo { Uptr dataSize; Uptr alignment; SectionAccess access; }; // Stub size: 16 bytes for both x86-64 (14 + 2 padding) and AArch64 (16 exactly). inline constexpr Uptr stubSlotSize = 16; struct ImageLayout { U8* imageBase = nullptr; Uptr numPages = 0; Uptr numSections = 0; std::vector sectionLoadAddresses; Uptr codeSize = 0; Uptr roSize = 0; Uptr rwSize = 0; U8* stubBase = nullptr; U8* stubEnd = nullptr; U8* stubCurrent = nullptr; U8* gotBase = nullptr; U8* gotEnd = nullptr; U8* gotCurrent = nullptr; U8* extraReadOnly = nullptr; HashMap stubCache; // target address -> stub address HashMap gotCache; // symbol address -> GOT entry address }; ImageLayout layoutImage(const std::vector& sections, Uptr numStubBytes, Uptr numGotBytes, Uptr numExtraReadOnlyBytes = 0, PageAllocator allocatePages = nullptr); void protectImage(const ImageLayout& layout); template Uptr getOrCreateStub(ImageLayout& layout, Uptr targetAddr); Uptr getOrCreateGotEntry(ImageLayout& layout, Uptr symbolAddr); // Little-endian read/write helpers. template inline T readLE(const U8* p) { static_assert(std::is_trivially_copyable_v); T value; memcpy(&value, p, sizeof(T)); return value; } template inline void writeLE(U8* p, T value) { static_assert(std::is_trivially_copyable_v); memcpy(p, &value, sizeof(T)); } // ---- Shared relocation operations (both architectures) ---- inline void relocAbs64(U8* fixup, U64 symbolValue, I64 addend) { writeLE(fixup, symbolValue + wrap(addend)); } inline void relocPrel32(U8* fixup, U64 symbolValue, I64 addend, Uptr relocAddr) { I64 delta = wrap(symbolValue + wrap(addend) - relocAddr); writeLE(fixup, wrap(delta)); } inline void relocImageRel32(U8* fixup, U64 symbolValue, I64 addend, Uptr imageBase) { I64 delta = wrap(symbolValue + wrap(addend) - imageBase); writeLE(fixup, narrow("imagerel32 relocation", delta)); } inline void relocSecRel32(U8* fixup, U64 symbolValue, I64 addend, Uptr sectionBase) { I64 delta = wrap(symbolValue + wrap(addend) - sectionBase); writeLE(fixup, narrow("secrel32 relocation", delta)); } // ---- x86-64-specific relocation operations ---- inline void relocAbs32(U8* fixup, U64 symbolValue, I64 addend) { U64 value = symbolValue + wrap(addend); writeLE(fixup, narrow("abs32 relocation", value)); } inline void relocAbs32s(U8* fixup, U64 symbolValue, I64 addend) { I64 svalue = wrap(symbolValue + wrap(addend)); writeLE(fixup, narrow("abs32s relocation", svalue)); } inline void relocRel32(U8* fixup, U64 symbolValue, I64 addend, Uptr relocAddr, ImageLayout& layout) { U64 value = symbolValue + wrap(addend); I64 delta = wrap(value) - wrap(relocAddr); if(delta > std::numeric_limits::max() || delta < std::numeric_limits::min()) { Uptr stubAddr = getOrCreateStub(layout, value); delta = wrap(stubAddr - relocAddr); } writeLE(fixup, narrow("rel32 relocation", delta)); } inline void relocRel64(U8* fixup, U64 symbolValue, I64 addend, Uptr relocAddr) { I64 delta = wrap(symbolValue + wrap(addend) - relocAddr); writeLE(fixup, delta); } // ---- AArch64-specific relocation operations ---- inline void relocBranch26(U8* fixup, U64 symbolValue, I64 addend, Uptr relocAddr, ImageLayout& layout) { U64 value = symbolValue + wrap(addend); I64 delta = wrap(value) - wrap(relocAddr); if(delta > 0x7FFFFFF || delta < -0x8000000) { Uptr stubAddr = getOrCreateStub(layout, value); delta = wrap(stubAddr) - wrap(relocAddr); if(delta > 0x7FFFFFF || delta < -0x8000000) { Errors::fatalf("branch26 relocation still out of range after stub: delta=%" PRId64, delta); } } U32 insn = readLE(fixup); insn = (insn & 0xFC000000) | (wrap(delta >> 2) & 0x03FFFFFF); writeLE(fixup, insn); } inline void relocAdrp(U8* fixup, U64 symbolValue, I64 addend, Uptr relocAddr) { U64 value = symbolValue + wrap(addend); I64 pageDelta = wrap(value & ~0xFFFULL) - wrap(relocAddr & ~Uptr(0xFFF)); I64 pageCount = pageDelta >> 12; U32 immlo = wrap(pageCount) & 3; U32 immhi = wrap(pageCount >> 2) & 0x7FFFF; U32 insn = readLE(fixup); insn = (insn & 0x9F00001F) | (immlo << 29) | (immhi << 5); writeLE(fixup, insn); } inline void relocAddLo12(U8* fixup, U64 symbolValue, I64 addend) { U32 imm12 = wrap(symbolValue + wrap(addend)) & 0xFFF; U32 insn = readLE(fixup); insn = (insn & 0xFFC003FF) | (imm12 << 10); writeLE(fixup, insn); } inline void relocLdstLo12(U8* fixup, U64 symbolValue, I64 addend) { U32 insn = readLE(fixup); U32 size = (insn >> 30) & 3; U32 opc = (insn >> 22) & 3; U32 shift = size; if(size == 0 && opc >= 2) { shift = 4; } // 128-bit V register load/store U32 imm12 = (wrap(symbolValue + wrap(addend)) & 0xFFF) >> shift; insn = (insn & 0xFFC003FF) | (imm12 << 10); writeLE(fixup, insn); } // Patch a MOVZ/MOVK instruction's 16-bit immediate field (bits [20:5]). // groupShift is 0, 16, 32, or 48 for G0, G1, G2, G3 respectively. inline void relocMovwUabs(U8* fixup, U64 symbolValue, I64 addend, U32 groupShift) { U64 value = symbolValue + wrap(addend); U16 imm16 = U16((value >> groupShift) & 0xFFFF); U32 insn = readLE(fixup); insn = (insn & 0xFFE0001F) | (U32(imm16) << 5); writeLE(fixup, insn); } // Format-specific linkers. void linkMachO(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages); void linkELF(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages); void linkCOFF(U8* bytes, Uptr size, const HashMap& imports, LinkResult& result, PageAllocator allocatePages); }} ================================================ FILE: Lib/Platform/CMakeLists.txt ================================================ include(CheckSymbolExists) set(POSIXCppSources POSIX/ClockPOSIX.cpp POSIX/ConditionVariablePOSIX.cpp POSIX/CPUPOSIX.cpp POSIX/DebugPersonality.cpp POSIX/DiagnosticsPOSIX.cpp POSIX/EHFrameDecode.cpp POSIX/ErrorPOSIX.cpp POSIX/SignalPOSIX.cpp POSIX/UnwindPOSIX.cpp POSIX/FilePOSIX.cpp POSIX/MemoryPOSIX.cpp POSIX/MutexPOSIX.cpp POSIX/RandomPOSIX.cpp POSIX/RWMutexPOSIX.cpp POSIX/ThreadPOSIX.cpp) set(POSIXHeaders POSIX/POSIXPrivate.h) set(WindowsCppSources Windows/ClockWindows.cpp Windows/ConditionVariableWindows.cpp Windows/CPUWindows.cpp Windows/DiagnosticsWindows.cpp Windows/ErrorWindows.cpp Windows/SignalWindows.cpp Windows/UnwindWindows.cpp Windows/FileWindows.cpp Windows/MemoryWindows.cpp Windows/MutexWindows.cpp Windows/RandomWindows.cpp Windows/RWMutexWindows.cpp Windows/ThreadWindows.cpp) set(WindowsHeaders Windows/WindowsPrivate.h) set(PublicHeaders ${WAVM_INCLUDE_DIR}/Platform/Clock.h ${WAVM_INCLUDE_DIR}/Platform/ConditionVariable.h ${WAVM_INCLUDE_DIR}/Platform/CPU.h ${WAVM_INCLUDE_DIR}/Platform/Defines.h ${WAVM_INCLUDE_DIR}/Platform/Diagnostics.h ${WAVM_INCLUDE_DIR}/Platform/Error.h ${WAVM_INCLUDE_DIR}/Platform/Signal.h ${WAVM_INCLUDE_DIR}/Platform/Unwind.h ${WAVM_INCLUDE_DIR}/Platform/File.h ${WAVM_INCLUDE_DIR}/Platform/Intrinsic.h ${WAVM_INCLUDE_DIR}/Platform/Memory.h ${WAVM_INCLUDE_DIR}/Platform/Mutex.h ${WAVM_INCLUDE_DIR}/Platform/Random.h ${WAVM_INCLUDE_DIR}/Platform/RWMutex.h ${WAVM_INCLUDE_DIR}/Platform/Thread.h) # All .cpp files are compiled unconditionally; they use #if guards to compile to # nothing on the wrong platform. Assembly (.S) files remain conditional. set(Sources ${POSIXCppSources} ${WindowsCppSources}) set(Headers ${PublicHeaders} ${POSIXHeaders} ${WindowsHeaders}) if(NOT MSVC) # Prevent check_symbol_exists from using API that is not supported for a given deployment target. check_c_compiler_flag("-Werror=unguarded-availability-new" C_HAS_WERROR_UNGUARDED_AVAILABILITY_NEW) if(C_HAS_WERROR_UNGUARDED_AVAILABILITY_NEW) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=unguarded-availability-new") endif() # futimens/utimensat isn't available on MacOS until 10.13. check_symbol_exists(futimens sys/stat.h HAS_FUTIMENS) if(HAS_FUTIMENS) list(APPEND PLATFORM_PRIVATE_DEFINITIONS "HAS_FUTIMENS") endif() check_symbol_exists(utimensat sys/stat.h HAS_UTIMENSAT) if(HAS_FUTIMENS) list(APPEND PLATFORM_PRIVATE_DEFINITIONS "HAS_UTIMENSAT") endif() if(WAVM_ENABLE_ASAN) # Check whether __sanitizer_print_memory_profile is defined in sanitizer/common_interface_defs.h set(CMAKE_REQUIRED_FLAGS_SAVED ${CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fsanitize=address") check_c_source_compiles( "#include \n\ void main() { __sanitizer_print_memory_profile(100); }" HAS_SANITIZER_PRINT_MEMORY_PROFILE_1) check_c_source_compiles( "#include \n\ void main() { __sanitizer_print_memory_profile(100, 20); }" HAS_SANITIZER_PRINT_MEMORY_PROFILE_2) set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVED}) if(HAS_SANITIZER_PRINT_MEMORY_PROFILE_2) list(APPEND PLATFORM_PRIVATE_DEFINITIONS "HAS_SANITIZER_PRINT_MEMORY_PROFILE_2") elseif(HAS_SANITIZER_PRINT_MEMORY_PROFILE_1) list(APPEND PLATFORM_PRIVATE_DEFINITIONS "HAS_SANITIZER_PRINT_MEMORY_PROFILE_1") endif() endif() endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") list(APPEND PLATFORM_PRIVATE_LIBS rt) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Windows") list(APPEND PLATFORM_PRIVATE_LIBS "Bcrypt.lib") endif() if(NOT MSVC) list(APPEND PLATFORM_PRIVATE_LIBS dl) endif() if(WAVM_BUILD_WAVMUNWIND) list(APPEND PLATFORM_PRIVATE_LIBS WAVMUnwind) # This can't be set in the WAVMUnwind target's public include directories without adding the # libunwind headers to the install, so just set it manually for the Platform component. set(PLATFORM_PRIVATE_INCLUDE_DIRECTORIES ${WAVM_SOURCE_DIR}/ThirdParty/libunwind/include) endif() WAVM_ADD_LIB_COMPONENT(Platform SOURCES ${Sources} HEADERS ${Headers} PRIVATE_LIBS ${PLATFORM_PRIVATE_LIBS} PRIVATE_INCLUDE_DIRECTORIES ${PLATFORM_PRIVATE_INCLUDE_DIRECTORIES} PRIVATE_DEFINITIONS ${PLATFORM_PRIVATE_DEFINITIONS}) ================================================ FILE: Lib/Platform/POSIX/CPUPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include "WAVM/Platform/CPU.h" #if WAVM_CPU_ARCH_ARM #if defined(__APPLE__) #include #include #include "WAVM/Inline/BasicTypes.h" #elif defined(__linux__) #include #include #include #endif #endif WAVM::Platform::HostCPUFeatures WAVM::Platform::getHostCPUFeatures() { WAVM::Platform::HostCPUFeatures result; #if WAVM_CPU_ARCH_X86 __builtin_cpu_init(); result.sse = __builtin_cpu_supports("sse"); result.sse2 = __builtin_cpu_supports("sse2"); result.sse3 = __builtin_cpu_supports("sse3"); result.ssse3 = __builtin_cpu_supports("ssse3"); result.sse4_1 = __builtin_cpu_supports("sse4.1"); result.sse4_2 = __builtin_cpu_supports("sse4.2"); result.avx = __builtin_cpu_supports("avx"); result.avx2 = __builtin_cpu_supports("avx2"); result.popcnt = __builtin_cpu_supports("popcnt"); result.lzcnt = __builtin_cpu_supports("lzcnt"); result.bmi1 = __builtin_cpu_supports("bmi"); result.bmi2 = __builtin_cpu_supports("bmi2"); result.fma = __builtin_cpu_supports("fma"); result.avx512f = __builtin_cpu_supports("avx512f"); result.avx512bw = __builtin_cpu_supports("avx512bw"); result.avx512dq = __builtin_cpu_supports("avx512dq"); result.avx512vl = __builtin_cpu_supports("avx512vl"); #elif WAVM_CPU_ARCH_ARM #if defined(__APPLE__) I32 val = 0; size_t valSize = sizeof(val); result.lse = sysctlbyname("hw.optional.arm.FEAT_LSE", &val, &valSize, nullptr, 0) == 0 && val; #elif defined(__linux__) unsigned long hwcap = getauxval(AT_HWCAP); result.lse = (hwcap & HWCAP_ATOMICS) != 0; #else result.lse = false; #endif #endif return result; } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/ClockPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Clock.h" using namespace WAVM; using namespace WAVM::Platform; static I128 timespecToNS(timespec t) { return I128(U64(t.tv_sec)) * 1000000000 + U64(t.tv_nsec); } #ifndef CLOCK_PROCESS_CPUTIME_ID static I128 timevalToNS(timeval t) { return I128(U64(t.tv_sec)) * 1000000000 + I128(U64(t.tv_usec)) * 1000; } #endif static I128 getClockAsI128(clockid_t clockId) { timespec clockTime; WAVM_ERROR_UNLESS(!clock_gettime(clockId, &clockTime)); return timespecToNS(clockTime); } static I128 getClockResAsI128(clockid_t clockId) { timespec clockResolution; WAVM_ERROR_UNLESS(!clock_getres(clockId, &clockResolution)); return timespecToNS(clockResolution); } #if defined(__APPLE__) #include #include static mach_timebase_info_data_t getTimebaseInfoData() { mach_timebase_info_data_t timebaseInfoData; WAVM_ERROR_UNLESS(mach_timebase_info(&timebaseInfoData) == KERN_SUCCESS); return timebaseInfoData; } static mach_timebase_info_data_t getCachedTimebaseInfoData() { static mach_timebase_info_data_t cachedTimebaseInfoData = getTimebaseInfoData(); return cachedTimebaseInfoData; } static I128 getMachAbsoluteClock() { mach_timebase_info_data_t cachedTimebaseInfoData = getCachedTimebaseInfoData(); const I128 ticks = mach_absolute_time(); const I128 ns = ticks * cachedTimebaseInfoData.numer / cachedTimebaseInfoData.denom; return ns; } static I128 getMachAbsoluteClockResolution() { mach_timebase_info_data_t cachedTimebaseInfoData = getCachedTimebaseInfoData(); I128 ticksPerNanosecond = I128(cachedTimebaseInfoData.numer) / cachedTimebaseInfoData.denom; if(ticksPerNanosecond == 0) { ticksPerNanosecond = 1; } return ticksPerNanosecond; } #endif Time Platform::getClockTime(Clock clock) { switch(clock) { case Clock::realtime: return Time{getClockAsI128(CLOCK_REALTIME)}; case Clock::monotonic: { #if defined(__APPLE__) return Time{getMachAbsoluteClock()}; #elif defined(CLOCK_MONOTONIC) return Time{getClockAsI128(CLOCK_MONOTONIC)}; #else #error CLOCK_MONOTONIC not supported on this platform. #endif } case Clock::processCPUTime: { #ifdef CLOCK_PROCESS_CPUTIME_ID return Time{getClockAsI128(CLOCK_PROCESS_CPUTIME_ID)}; #else struct rusage ru; WAVM_ERROR_UNLESS(!getrusage(RUSAGE_SELF, &ru)); return Time{timevalToNS(ru.ru_stime) + timevalToNS(ru.ru_utime)}; #endif } default: WAVM_UNREACHABLE(); } } Time Platform::getClockResolution(Clock clock) { switch(clock) { case Clock::realtime: return Time{getClockResAsI128(CLOCK_REALTIME)}; case Clock::monotonic: { #if defined(__APPLE__) return Time{getMachAbsoluteClockResolution()}; #elif defined(CLOCK_MONOTONIC) return Time{getClockResAsI128(CLOCK_MONOTONIC)}; #else #error CLOCK_MONOTONIC not supported on this platform. #endif } case Clock::processCPUTime: { #ifdef CLOCK_PROCESS_CPUTIME_ID return Time{getClockResAsI128(CLOCK_PROCESS_CPUTIME_ID)}; #else return Time{1000}; #endif } default: WAVM_UNREACHABLE(); } } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/ConditionVariablePOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/ConditionVariable.h" #include "WAVM/Platform/Mutex.h" #ifndef __APPLE__ #include "WAVM/Platform/Clock.h" #endif using namespace WAVM; using namespace WAVM::Platform; Platform::ConditionVariable::ConditionVariable() { static_assert(sizeof(CondData) >= sizeof(pthread_cond_t), ""); static_assert(alignof(CondData) >= alignof(pthread_cond_t), ""); pthread_condattr_t condAttr; WAVM_ERROR_UNLESS(!pthread_condattr_init(&condAttr)); // Set the condition variable to use the monotonic clock for wait timeouts. #ifndef __APPLE__ WAVM_ERROR_UNLESS(!pthread_condattr_setclock(&condAttr, CLOCK_MONOTONIC)); #endif WAVM_ERROR_UNLESS(!pthread_cond_init((pthread_cond_t*)&condData, &condAttr)); WAVM_ERROR_UNLESS(!pthread_condattr_destroy(&condAttr)); } Platform::ConditionVariable::~ConditionVariable() { pthread_cond_destroy((pthread_cond_t*)&condData); } bool Platform::ConditionVariable::wait(Mutex& mutex, Time waitDuration) { #if WAVM_ENABLE_ASSERTS mutex.isLocked = false; #endif if(isInfinity(waitDuration)) { int result = pthread_cond_wait((pthread_cond_t*)&condData, (pthread_mutex_t*)&mutex.lockData); WAVM_ERROR_UNLESS(!result); #if WAVM_ENABLE_ASSERTS mutex.isLocked = true; #endif return true; } else { #ifdef __APPLE__ // On Apple, pthread_cond_timedwait uses the wall clock rather than the monotonic // clock, so use the relative-time wait instead. timespec remainingSpec; remainingSpec.tv_sec = U64(waitDuration.ns / 1000000000); remainingSpec.tv_nsec = U64(waitDuration.ns % 1000000000); int result = pthread_cond_timedwait_relative_np( (pthread_cond_t*)&condData, (pthread_mutex_t*)&mutex.lockData, &remainingSpec); #else const I128 deadlineNS = getClockTime(Clock::monotonic).ns + waitDuration.ns; timespec deadlineSpec; deadlineSpec.tv_sec = U64(deadlineNS / 1000000000); deadlineSpec.tv_nsec = U64(deadlineNS % 1000000000); int result = pthread_cond_timedwait( (pthread_cond_t*)&condData, (pthread_mutex_t*)&mutex.lockData, &deadlineSpec); #endif if(result == ETIMEDOUT) { #if WAVM_ENABLE_ASSERTS mutex.isLocked = true; #endif return false; } WAVM_ERROR_UNLESS(!result); #if WAVM_ENABLE_ASSERTS mutex.isLocked = true; #endif return true; } } void Platform::ConditionVariable::signal() { WAVM_ERROR_UNLESS(!pthread_cond_signal((pthread_cond_t*)&condData)); } void Platform::ConditionVariable::broadcast() { WAVM_ERROR_UNLESS(!pthread_cond_broadcast((pthread_cond_t*)&condData)); } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/DebugPersonality.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include #include #include #include "WAVM/DWARF/Constants.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Unwind.h" using namespace WAVM; using namespace WAVM::DWARF; using namespace WAVM::Serialization; // The real C++ personality function from libcxxabi. extern "C" _Unwind_Reason_Code __gxx_personality_v0(int version, _Unwind_Action actions, U64 exceptionClass, _Unwind_Exception* unwind_exception, _Unwind_Context* context); // Read a DWARF-encoded pointer from the stream. For PC-relative encodings, // lsdaBase must point to the start of the LSDA so the field address can be recovered. static Uptr readEncodedPointer(MemoryInputStream& stream, const U8* lsdaBase, U8 encoding) { Uptr result = 0; if(encoding == DW_EH_PE_omit) return result; // Remember the address of this field for PC-relative relocation. const U8* fieldAddr = lsdaBase + stream.position(); switch(encoding & 0x0F) { case DW_EH_PE_absptr: { Uptr v = 0; tryRead(stream, v); result = v; break; } case DW_EH_PE_uleb128: { U64 v = 0; trySerializeVarUInt64(stream, v); result = Uptr(v); break; } case DW_EH_PE_sleb128: { I64 v = 0; trySerializeVarSInt64(stream, v); result = static_cast(Iptr(v)); break; } case DW_EH_PE_udata2: { U16 v = 0; tryRead(stream, v); result = v; break; } case DW_EH_PE_udata4: { U32 v = 0; tryRead(stream, v); result = v; break; } case DW_EH_PE_udata8: { U64 v = 0; tryRead(stream, v); result = Uptr(v); break; } case DW_EH_PE_signed: { Iptr v = 0; tryRead(stream, v); result = static_cast(v); break; } case DW_EH_PE_sdata2: { I16 v = 0; tryRead(stream, v); result = static_cast(Iptr(v)); break; } case DW_EH_PE_sdata4: { I32 v = 0; tryRead(stream, v); result = static_cast(Iptr(v)); break; } case DW_EH_PE_sdata8: { I64 v = 0; tryRead(stream, v); result = static_cast(Iptr(v)); break; } default: Log::printf( Log::traceUnwind, " ERROR: Unknown pointer encoding format 0x%x\n", encoding & 0x0F); abort(); } switch(encoding & 0x70) { case DW_EH_PE_absptr: break; case DW_EH_PE_pcrel: if(result) result += reinterpret_cast(fieldAddr); break; default: Log::printf(Log::traceUnwind, " ERROR: Unknown pointer encoding relocation 0x%x\n", encoding & 0x70); abort(); } if(result && (encoding & DW_EH_PE_indirect)) result = *reinterpret_cast(result); return result; } struct scan_results { I64 ttypeIndex; const U8* actionRecord; const U8* languageSpecificData; Uptr landingPad; void* adjustedPtr; _Unwind_Reason_Code reason; }; // Minimal __cxa_exception header structure (layout must match libcxxabi). // We only define the fields we need to set for exception handling to work. // The _Unwind_Exception is at the end of this struct, so we can compute // the header address from the unwind_exception pointer. struct __cxa_exception { #if defined(__LP64__) || defined(_WIN64) void* reserve; size_t referenceCount; #endif std::type_info* exceptionType; void (*exceptionDestructor)(void*); void (*unexpectedHandler)(); std::terminate_handler terminateHandler; __cxa_exception* nextException; int handlerCount; int handlerSwitchValue; const U8* actionRecord; const U8* languageSpecificData; void* catchTemp; void* adjustedPtr; #if !defined(__LP64__) && !defined(_WIN64) void* reserve; size_t referenceCount; #endif _Unwind_Exception unwindHeader; }; // Get the __cxa_exception header from an _Unwind_Exception pointer. // The _Unwind_Exception is the last member of __cxa_exception. static __cxa_exception* getExceptionHeader(_Unwind_Exception* unwind_exception) { return reinterpret_cast<__cxa_exception*>(unwind_exception + 1) - 1; } static void scan_eh_tab(scan_results& results, _Unwind_Action actions, bool native_exception, _Unwind_Exception* unwind_exception, _Unwind_Context* context) { results.ttypeIndex = 0; results.actionRecord = 0; results.languageSpecificData = 0; results.landingPad = 0; results.adjustedPtr = 0; results.reason = _URC_FATAL_PHASE1_ERROR; const U8* lsda = (const U8*)_Unwind_GetLanguageSpecificData(context); if(lsda == 0) { Log::printf(Log::traceUnwind, " scan_eh_tab: No LSDA, continuing unwind\n"); results.reason = _URC_CONTINUE_UNWIND; return; } Log::printf(Log::traceUnwind, " scan_eh_tab: lsda=%p first bytes: %02x %02x %02x %02x\n", (void*)lsda, lsda[0], lsda[1], lsda[2], lsda[3]); results.languageSpecificData = lsda; MemoryInputStream stream = MemoryInputStream(lsda); Uptr ip = _Unwind_GetIP(context) - 1; Uptr funcStart = _Unwind_GetRegionStart(context); Uptr ipOffset = ip - funcStart; Log::printf(Log::traceUnwind, " scan_eh_tab: ip=0x%" WAVM_PRIxPTR " funcStart=0x%" WAVM_PRIxPTR " ipOffset=0x%" WAVM_PRIxPTR "\n", ip, funcStart, ipOffset); // Parse LSDA header U8 lpStartEncoding = 0; tryRead(stream, lpStartEncoding); const U8* lpStart = (lpStartEncoding == DW_EH_PE_omit) ? (const U8*)funcStart : (const U8*)readEncodedPointer(stream, lsda, lpStartEncoding); U8 ttypeEncoding = 0; tryRead(stream, ttypeEncoding); const U8* classInfo = NULL; if(ttypeEncoding != DW_EH_PE_omit) { U64 classInfoOffset = 0; trySerializeVarUInt64(stream, classInfoOffset); classInfo = lsda + stream.position() + Uptr(classInfoOffset); } U8 callSiteEncoding = 0; tryRead(stream, callSiteEncoding); U64 callSiteTableLength = 0; trySerializeVarUInt64(stream, callSiteTableLength); Uptr callSiteTableEndPos = stream.position() + Uptr(callSiteTableLength); Uptr actionTableStartPos = callSiteTableEndPos; Log::printf(Log::traceUnwind, " LSDA: lpStartEnc=0x%x lpStart=%p ttypeEnc=0x%x classInfo=%p callSiteEnc=0x%x\n", lpStartEncoding, (void*)lpStart, ttypeEncoding, (void*)classInfo, callSiteEncoding); while(stream.position() < callSiteTableEndPos) { Uptr start = readEncodedPointer(stream, lsda, callSiteEncoding); Uptr length = readEncodedPointer(stream, lsda, callSiteEncoding); Uptr landingPad = readEncodedPointer(stream, lsda, callSiteEncoding); U64 actionEntry = 0; trySerializeVarUInt64(stream, actionEntry); Log::printf(Log::traceUnwind, " CallSite: start=0x%" WAVM_PRIxPTR " len=0x%" WAVM_PRIxPTR " lp=0x%" WAVM_PRIxPTR " action=%" PRIu64 "\n", start, length, landingPad, actionEntry); if((start <= ipOffset) && (ipOffset < (start + length))) { Log::printf(Log::traceUnwind, " Found matching call site!\n"); if(landingPad == 0) { results.reason = _URC_CONTINUE_UNWIND; return; } landingPad = reinterpret_cast(lpStart) + landingPad; results.landingPad = landingPad; Log::printf( Log::traceUnwind, " Computed landingPad: 0x%" WAVM_PRIxPTR "\n", landingPad); if(actionEntry == 0) { // Cleanup only results.reason = (actions & _UA_SEARCH_PHASE) ? _URC_CONTINUE_UNWIND : _URC_HANDLER_FOUND; return; } // Process action table. Action offsets are relative to the action record // start, so we track position in the LSDA via seek(). Uptr actionPos = actionTableStartPos + Uptr(actionEntry - 1); while(true) { Uptr actionRecordPos = actionPos; stream.seek(actionPos); I64 ttypeIndex = 0; trySerializeVarSInt64(stream, ttypeIndex); Log::printf(Log::traceUnwind, " Action: ttypeIndex=%" PRId64 "\n", ttypeIndex); if(ttypeIndex > 0) { void** thrownObjectPtr = reinterpret_cast(unwind_exception + 1); results.adjustedPtr = *thrownObjectPtr; results.ttypeIndex = ttypeIndex; results.actionRecord = lsda + actionRecordPos; results.reason = _URC_HANDLER_FOUND; Log::printf(Log::traceUnwind, " Handler found! ttypeIndex=%" PRId64 " adjustedPtr=%p\n", ttypeIndex, results.adjustedPtr); return; } else if(ttypeIndex == 0) { // Cleanup if(!(actions & _UA_SEARCH_PHASE)) { results.reason = _URC_HANDLER_FOUND; return; } } I64 actionOffset = 0; trySerializeVarSInt64(stream, actionOffset); if(actionOffset == 0) { results.reason = _URC_CONTINUE_UNWIND; return; } // Offset is relative to the action record start. actionPos = Uptr(Iptr(actionRecordPos) + actionOffset); } } else if(ipOffset < start) { Log::printf(Log::traceUnwind, " ERROR: No call site for IP!\n"); abort(); } } Log::printf(Log::traceUnwind, " ERROR: Fell through call site table!\n"); abort(); } static void set_registers(_Unwind_Exception* unwind_exception, _Unwind_Context* context, const scan_results& results) { Log::printf(Log::traceUnwind, " set_registers: context=%p landingPad=0x%" WAVM_PRIxPTR " ttypeIndex=%" PRId64 "\n", (void*)context, results.landingPad, results.ttypeIndex); // Get current IP and region info before making changes Uptr currentIP = _Unwind_GetIP(context); Uptr regionStart = _Unwind_GetRegionStart(context); Log::printf(Log::traceUnwind, " Current state: IP=0x%" WAVM_PRIxPTR " RegionStart=0x%" WAVM_PRIxPTR "\n", currentIP, regionStart); Log::printf( Log::traceUnwind, " Landing pad to set: 0x%" WAVM_PRIxPTR "\n", results.landingPad); Log::printf(Log::traceUnwind, " Landing pad offset from region start: 0x%" WAVM_PRIxPTR "\n", results.landingPad - regionStart); Log::printf(Log::traceUnwind, " Calling _Unwind_SetGR for exception pointer...\n"); _Unwind_SetGR( context, __builtin_eh_return_data_regno(0), reinterpret_cast(unwind_exception)); Log::printf(Log::traceUnwind, " Calling _Unwind_SetGR for ttypeIndex...\n"); _Unwind_SetGR( context, __builtin_eh_return_data_regno(1), static_cast(results.ttypeIndex)); Log::printf(Log::traceUnwind, " Calling _Unwind_SetIP to 0x%" WAVM_PRIxPTR "...\n", results.landingPad); _Unwind_SetIP(context, results.landingPad); Log::printf(Log::traceUnwind, " set_registers completed successfully\n"); } // Save scan results to the exception header (called during search phase). static void saveResultsToExceptionHeader(_Unwind_Exception* unwind_exception, const scan_results& results) { __cxa_exception* header = getExceptionHeader(unwind_exception); header->handlerSwitchValue = static_cast(results.ttypeIndex); header->actionRecord = results.actionRecord; header->languageSpecificData = results.languageSpecificData; header->catchTemp = reinterpret_cast(results.landingPad); header->adjustedPtr = results.adjustedPtr; Log::printf(Log::traceUnwind, " Saved to exception header: ttypeIndex=%d adjustedPtr=%p landingPad=%p\n", header->handlerSwitchValue, header->adjustedPtr, header->catchTemp); } // Load scan results from the exception header (called during cleanup phase). static void loadResultsFromExceptionHeader(_Unwind_Exception* unwind_exception, scan_results& results) { __cxa_exception* header = getExceptionHeader(unwind_exception); results.ttypeIndex = header->handlerSwitchValue; results.actionRecord = header->actionRecord; results.languageSpecificData = header->languageSpecificData; results.landingPad = reinterpret_cast(header->catchTemp); results.adjustedPtr = header->adjustedPtr; results.reason = _URC_HANDLER_FOUND; Log::printf(Log::traceUnwind, " Loaded from exception header: ttypeIndex=%" PRId64 " adjustedPtr=%p landingPad=0x%" WAVM_PRIxPTR "\n", results.ttypeIndex, results.adjustedPtr, results.landingPad); } int Platform::DebugPersonalityFunction(int version, int actions, U64 exceptionClass, _Unwind_Exception* unwind_exception, _Unwind_Context* context) { // If trace-unwind logging is not enabled, delegate to the real personality function. if(!Log::isCategoryEnabled(Log::traceUnwind)) { return __gxx_personality_v0(version, static_cast<_Unwind_Action>(actions), exceptionClass, unwind_exception, context); } Log::printf(Log::traceUnwind, "=== DebugPersonalityFunction called ===\n"); Log::printf(Log::traceUnwind, " version: %d\n", version); Log::printf(Log::traceUnwind, " actions: 0x%x", actions); if(actions & _UA_SEARCH_PHASE) Log::printf(Log::traceUnwind, " SEARCH_PHASE"); if(actions & _UA_CLEANUP_PHASE) Log::printf(Log::traceUnwind, " CLEANUP_PHASE"); if(actions & _UA_HANDLER_FRAME) Log::printf(Log::traceUnwind, " HANDLER_FRAME"); if(actions & _UA_FORCE_UNWIND) Log::printf(Log::traceUnwind, " FORCE_UNWIND"); Log::printf(Log::traceUnwind, "\n"); Log::printf(Log::traceUnwind, " exceptionClass: 0x%llx\n", (unsigned long long)exceptionClass); Log::printf(Log::traceUnwind, " unwind_exception: %p\n", (void*)unwind_exception); Log::printf(Log::traceUnwind, " context: %p\n", (void*)context); if(version != 1 || unwind_exception == 0 || context == 0) return _URC_FATAL_PHASE1_ERROR; Uptr ip = _Unwind_GetIP(context); Uptr regionStart = _Unwind_GetRegionStart(context); Log::printf(Log::traceUnwind, " IP: 0x%" WAVM_PRIxPTR " RegionStart: 0x%" WAVM_PRIxPTR "\n", ip, regionStart); // Check if this is a native C++ exception (GNU or Clang) static const U64 kGnuExceptionClass = 0x474E5543432B2B00; // "GNUCC++\0" static const U64 kClangExceptionClass = 0x434C4E47432B2B00; // "CLNGC++\0" bool native_exception = (exceptionClass == kGnuExceptionClass || exceptionClass == kClangExceptionClass); Log::printf(Log::traceUnwind, " native_exception: %s\n", native_exception ? "true" : "false"); scan_results results; if(actions == (_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME) && native_exception) { // Phase 2 handler frame for native exception - load cached results from exception // header Log::printf(Log::traceUnwind, " Phase 2 handler frame - loading cached results\n"); loadResultsFromExceptionHeader(unwind_exception, results); set_registers(unwind_exception, context, results); return _URC_INSTALL_CONTEXT; } scan_eh_tab( results, static_cast<_Unwind_Action>(actions), native_exception, unwind_exception, context); Log::printf(Log::traceUnwind, " scan_eh_tab result: reason=%d landingPad=0x%" WAVM_PRIxPTR "\n", (int)results.reason, results.landingPad); if(results.reason == _URC_CONTINUE_UNWIND || results.reason == _URC_FATAL_PHASE1_ERROR) return results.reason; if(actions & _UA_SEARCH_PHASE) { // Search phase found a handler - save results to exception header for phase 2 Log::printf(Log::traceUnwind, " Search phase found handler - saving results\n"); if(native_exception) { saveResultsToExceptionHeader(unwind_exception, results); } return _URC_HANDLER_FOUND; } // Cleanup phase (not handler frame) Log::printf(Log::traceUnwind, " Cleanup phase - installing context\n"); set_registers(unwind_exception, context, results); return _URC_INSTALL_CONTEXT; } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/DiagnosticsPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Platform/Diagnostics.h" #if WAVM_ENABLE_ASAN \ && (defined(HAS_SANITIZER_PRINT_MEMORY_PROFILE_1) \ || defined(HAS_SANITIZER_PRINT_MEMORY_PROFILE_2)) #include #endif using namespace WAVM; using namespace WAVM::Platform; extern "C" const char* __asan_default_options() { return "handle_segv=false" ":handle_sigbus=false" ":handle_sigfpe=false" ":replace_intrin=false"; } extern "C" const char* __tsan_default_options() { // WAVM handles signals itself for WebAssembly traps. // Disable TSAN's signal interception to avoid conflicts with our signal handlers // and stack unwinding through JIT-compiled code. return "handle_segv=0" ":handle_sigbus=0" ":handle_sigfpe=0"; } bool Platform::getInstructionSourceByAddress(Uptr ip, InstructionSource& outSource) { #if defined(__linux__) || defined(__APPLE__) // Look up static symbol information for the address. // dladdr is async-signal-safe on Linux and macOS. Dl_info symbolInfo; if(dladdr((void*)ip, &symbolInfo)) { WAVM_ASSERT(symbolInfo.dli_fname); outSource.module = symbolInfo.dli_fname; if(!symbolInfo.dli_sname) { outSource.instructionOffset = ip - reinterpret_cast(symbolInfo.dli_fbase); } else { // Skip demangling in signal-safe path; use the raw symbol name. outSource.function = symbolInfo.dli_sname; outSource.instructionOffset = ip - reinterpret_cast(symbolInfo.dli_saddr); } return true; } #endif return false; } static std::atomic numCommittedPageBytes{0}; void Platform::printMemoryProfile() { #if WAVM_ENABLE_ASAN #if defined(HAS_SANITIZER_PRINT_MEMORY_PROFILE_1) __sanitizer_print_memory_profile(100); #elif defined(HAS_SANITIZER_PRINT_MEMORY_PROFILE_2) __sanitizer_print_memory_profile(100, 20); #endif #endif printf("Committed virtual pages: %" PRIuPTR " KB\n", uintptr_t(numCommittedPageBytes.load(std::memory_order_seq_cst) / 1024)); fflush(stdout); } void Platform::registerVirtualAllocation(Uptr numBytes) { numCommittedPageBytes += numBytes; } void Platform::deregisterVirtualAllocation(Uptr numBytes) { numCommittedPageBytes -= numBytes; } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/EHFrameDecode.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include "WAVM/DWARF/Constants.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Platform/Unwind.h" using namespace WAVM; using namespace WAVM::DWARF; using namespace WAVM::Platform; using namespace WAVM::Serialization; // Parse FDE and its referenced CIE to extract alignment factors and CFI instructions static bool parseFDE(const U8* fde, Uptr fdeSize, Uptr& outCodeAlignFactor, I64& outDataAlignFactor, const U8*& outInstructions, Uptr& outInstructionsSize) { if(fdeSize < 8) { return false; } // FDE header: length (4 bytes), CIE pointer (4 bytes) U32 fdeLength; memcpy(&fdeLength, fde, 4); if(fdeLength == 0) { return false; } U32 cieOffset; memcpy(&cieOffset, fde + 4, 4); if(cieOffset == 0) { return false; } // This would be a CIE, not an FDE // CIE pointer is relative to its own position (fde + 4) const U8* cie = (fde + 4) - cieOffset; // Sanity check: cie should be before fde if(cie >= fde) { return false; } // Parse CIE U32 cieLength; memcpy(&cieLength, cie, 4); if(cieLength == 0) { return false; } MemoryInputStream cieStream(cie + 4, cieLength); // CIE ID (should be 0 for .eh_frame format) U32 cieId; if(!tryRead(cieStream, cieId)) { return false; } if(cieId != 0) { return false; } // Version if(!cieStream.tryAdvance(1)) { return false; } // Skip version byte // Augmentation string (null-terminated). Get pointer into underlying buffer. const U8* augString = cieStream.tryAdvance(0); Uptr augStringLen = 0; { const U8* bytePtr; do { bytePtr = cieStream.tryAdvance(1); if(!bytePtr) { break; } if(*bytePtr != 0) { ++augStringLen; } } while(*bytePtr != 0); } // Check if augmentation starts with 'z' (indicates FDE has augmentation data length) bool hasZAugmentation = (augStringLen > 0 && augString && augString[0] == 'z'); // Code alignment factor (ULEB128) U64 codeAlignFactor; if(!trySerializeVarUInt64(cieStream, codeAlignFactor)) { return false; } outCodeAlignFactor = Uptr(codeAlignFactor); // Data alignment factor (SLEB128) if(!trySerializeVarSInt64(cieStream, outDataAlignFactor)) { return false; } // Return address register (ULEB128) - skip it U64 tmp; trySerializeVarUInt64(cieStream, tmp); // If 'z' augmentation, parse augmentation data to find pointer encoding Uptr fdePointerSize = sizeof(void*); // Default to pointer size if(hasZAugmentation && cieStream.capacity()) { U64 augDataLen; if(!trySerializeVarUInt64(cieStream, augDataLen)) { return false; } Uptr augDataEndPos = cieStream.position() + Uptr(augDataLen); // Parse augmentation string characters (skip 'z') for(Uptr i = 1; i < augStringLen && cieStream.position() < augDataEndPos; ++i) { char c = static_cast(augString[i]); if(c == 'R') { // FDE pointer encoding U8 encoding; if(!tryRead(cieStream, encoding)) { break; } Uptr ptrSize = getEncodedPointerSize(encoding); if(ptrSize > 0) { fdePointerSize = ptrSize; } } else if(c == 'L') { // LSDA encoding - skip 1 byte cieStream.tryAdvance(1); } else if(c == 'P') { // Personality encoding + pointer - skip encoding byte + pointer U8 encoding; if(!tryRead(cieStream, encoding)) { break; } Uptr ptrSize = getEncodedPointerSize(encoding); if(ptrSize > 0) { cieStream.tryAdvance(ptrSize); } } else if(c == 'S') { // Signal frame - no data } } } // Now parse the FDE body to get CFI instructions. // FDE body starts after the 4-byte CIE pointer field. Uptr fdeBodySize = fdeLength >= 4 ? fdeLength - 4 : 0; MemoryInputStream fdeStream(fde + 8, fdeBodySize); // Skip PC begin (size depends on CIE's FDE pointer encoding) fdeStream.tryAdvance(fdePointerSize); // Skip PC range (size depends on CIE's FDE pointer encoding) fdeStream.tryAdvance(fdePointerSize); // Skip augmentation data length and data (ULEB128 + data) only if CIE has 'z' augmentation if(hasZAugmentation && fdeStream.capacity()) { U64 augLen; if(!trySerializeVarUInt64(fdeStream, augLen)) { return false; } fdeStream.tryAdvance(Uptr(augLen)); } // The remaining bytes in fdeStream are the CFI instructions. // Get a pointer into the underlying buffer for the caller. outInstructionsSize = fdeStream.capacity(); outInstructions = fdeStream.tryAdvance(outInstructionsSize); if(!outInstructions) { outInstructionsSize = 0; } return true; } // DWARF CFI opcode constants enum { DW_CFA_nop = 0x00, DW_CFA_advance_loc1 = 0x02, DW_CFA_advance_loc2 = 0x03, DW_CFA_advance_loc4 = 0x04, DW_CFA_offset_extended = 0x05, DW_CFA_restore_extended = 0x06, DW_CFA_undefined = 0x07, DW_CFA_same_value = 0x08, DW_CFA_register = 0x09, DW_CFA_remember_state = 0x0a, DW_CFA_restore_state = 0x0b, DW_CFA_def_cfa = 0x0c, DW_CFA_def_cfa_register = 0x0d, DW_CFA_def_cfa_offset = 0x0e, DW_CFA_def_cfa_expression = 0x0f, DW_CFA_expression = 0x10, DW_CFA_offset_extended_sf = 0x11, DW_CFA_def_cfa_sf = 0x12, DW_CFA_def_cfa_offset_sf = 0x13, DW_CFA_val_offset = 0x14, DW_CFA_val_offset_sf = 0x15, DW_CFA_val_expression = 0x16, // High 2 bits encoding: // 0x40-0x7f: DW_CFA_advance_loc (delta in low 6 bits) // 0x80-0xbf: DW_CFA_offset (reg in low 6 bits) // 0xc0-0xff: DW_CFA_restore (reg in low 6 bits) }; // Check if an opcode is an advance_loc variant static bool isAdvanceLocOpcode(U8 opcode) { return (opcode >> 6) == 1 || opcode == DW_CFA_advance_loc1 || opcode == DW_CFA_advance_loc2 || opcode == DW_CFA_advance_loc4; } struct DecodedCFIOp { U8 opcode; Uptr codeOffset; U32 reg; I64 operand; }; // Parse a single CFI instruction from the stream, returning the number of bytes consumed. static Uptr parseCFIInstruction(MemoryInputStream& stream, Uptr codeOffset, Uptr codeAlignFactor, I64 dataAlignFactor, DecodedCFIOp& outOp) { outOp.opcode = 0; outOp.codeOffset = codeOffset; outOp.reg = 0; outOp.operand = 0; Uptr startPos = stream.position(); U8 op; if(!tryRead(stream, op)) { return 0; } outOp.opcode = op; U8 high2 = op >> 6; U8 low6 = op & 0x3f; // Helper lambdas to read LEB128 values from the stream. auto readULEB = [&stream](U64& v) { return trySerializeVarUInt64(stream, v); }; auto readSLEB = [&stream](I64& v) { return trySerializeVarSInt64(stream, v); }; if(high2 == 1) { // DW_CFA_advance_loc outOp.operand = low6 * codeAlignFactor; } else if(high2 == 2) { // DW_CFA_offset outOp.reg = low6; U64 v; if(readULEB(v)) { outOp.operand = I64(v) * dataAlignFactor; } } else if(high2 == 3) { // DW_CFA_restore outOp.reg = low6; } else { switch(op) { case DW_CFA_nop: break; case DW_CFA_advance_loc1: { U8 delta; if(tryRead(stream, delta)) { outOp.operand = delta * codeAlignFactor; } break; } case DW_CFA_advance_loc2: { U16 delta; if(tryRead(stream, delta)) { outOp.operand = delta * codeAlignFactor; } break; } case DW_CFA_advance_loc4: { U32 delta; if(tryRead(stream, delta)) { outOp.operand = delta * codeAlignFactor; } break; } case DW_CFA_undefined: case DW_CFA_same_value: { U64 v; if(readULEB(v)) { outOp.reg = U32(v); } break; } case DW_CFA_register: { U64 r, v; if(readULEB(r)) { outOp.reg = U32(r); } if(readULEB(v)) { outOp.operand = I64(v); } break; } case DW_CFA_def_cfa: { U64 r, v; if(readULEB(r)) { outOp.reg = U32(r); } if(readULEB(v)) { outOp.operand = I64(v); } break; } case DW_CFA_def_cfa_register: { U64 v; if(readULEB(v)) { outOp.reg = U32(v); } break; } case DW_CFA_def_cfa_offset: { U64 v; if(readULEB(v)) { outOp.operand = I64(v); } break; } case DW_CFA_def_cfa_expression: case DW_CFA_expression: case DW_CFA_val_expression: { if(op == DW_CFA_expression || op == DW_CFA_val_expression) { U64 v; if(readULEB(v)) { outOp.reg = U32(v); } } // Skip the BLOCK (length-prefixed byte sequence) U64 blockLen; if(readULEB(blockLen)) { stream.tryAdvance(Uptr(blockLen)); } break; } case DW_CFA_offset_extended: { U64 r, v; if(readULEB(r)) { outOp.reg = U32(r); } if(readULEB(v)) { outOp.operand = I64(v) * dataAlignFactor; } break; } case DW_CFA_offset_extended_sf: { U64 r; I64 v; if(readULEB(r)) { outOp.reg = U32(r); } if(readSLEB(v)) { outOp.operand = v * dataAlignFactor; } break; } case DW_CFA_restore_extended: { U64 v; if(readULEB(v)) { outOp.reg = U32(v); } break; } case DW_CFA_remember_state: case DW_CFA_restore_state: break; default: // For unknown opcodes, we can't know how many bytes to skip, // so we just consume the opcode byte and hope for the best break; } } return stream.position() - startPos; } Uptr UnwindProcInfo::decodeUnwindOps(UnwindOp* outOps, Uptr maxOps) const { #ifdef __APPLE__ // Handle compact unwind encoding on macOS if(compactEncoding != 0 && (!unwindData || unwindDataSize == 0)) { if(!outOps) { return 1; } if(maxOps > 0) { outOps[0].codeOffset = 0; outOps[0].opcode = 0; outOps[0].reg = 0; outOps[0].operand = 0; outOps[0].compactEncoding = compactEncoding; } return 1; } #endif // Parse FDE to get CFI instructions if(!unwindData || unwindDataSize == 0) { return 0; } Uptr codeAlignFactor; I64 dataAlignFactor; const U8* cfiInstructions; Uptr cfiSize; if(!parseFDE( unwindData, unwindDataSize, codeAlignFactor, dataAlignFactor, cfiInstructions, cfiSize)) { return 0; } // Parse CFI instructions. Uptr numOps = 0; Uptr codeOffset = 0; MemoryInputStream cfiStream(cfiInstructions, cfiSize); while(cfiStream.capacity()) { DecodedCFIOp decoded; Uptr bytesConsumed = parseCFIInstruction(cfiStream, codeOffset, codeAlignFactor, dataAlignFactor, decoded); if(bytesConsumed == 0) { break; } if(outOps && numOps < maxOps) { outOps[numOps].codeOffset = decoded.codeOffset; outOps[numOps].opcode = decoded.opcode; outOps[numOps].reg = decoded.reg; outOps[numOps].operand = decoded.operand; #ifdef __APPLE__ outOps[numOps].compactEncoding = 0; #endif } ++numOps; if(isAdvanceLocOpcode(decoded.opcode)) { codeOffset += decoded.operand; } } return numOps; } #ifdef __APPLE__ static void formatCompactUnwind(U32 encoding, StringBuilderBase& sb) { sb.appendf("compact_unwind 0x%08x", encoding); #if defined(__aarch64__) U32 mode = encoding & 0x0F000000; switch(mode) { case 0x02000000: { U32 stackSize = (encoding >> 12) & 0xFFF; if(stackSize > 0) { sb.appendf(" (frameless, stack=%u)", stackSize * 16); } else { sb.append(" (frameless)"); } break; } case 0x03000000: sb.append(" (dwarf)"); break; case 0x04000000: { sb.append(" (frame-based"); U32 regs = encoding & 0x1FFF; struct { U32 mask; const char* name; } regPairs[] = {{0x001, ", x19-x20"}, {0x002, ", x21-x22"}, {0x004, ", x23-x24"}, {0x008, ", x25-x26"}, {0x010, ", x27-x28"}, {0x100, ", d8-d9"}, {0x200, ", d10-d11"}, {0x400, ", d12-d13"}, {0x800, ", d14-d15"}}; for(const auto& rp : regPairs) { if(regs & rp.mask) { sb.append(rp.name); } } sb.append(")", 1); break; } default: sb.append(" (unknown mode)"); break; } #elif defined(__x86_64__) U32 mode = encoding & 0x0F000000; const char* modeStr = nullptr; switch(mode) { case 0x01000000: modeStr = " (frameless, imm stack)"; break; case 0x02000000: modeStr = " (frameless, indirect)"; break; case 0x03000000: modeStr = " (dwarf)"; break; case 0x04000000: modeStr = " (frame-based)"; break; default: modeStr = " (unknown mode)"; break; } sb.append(modeStr); #endif } #endif void UnwindOp::format(StringBuilderBase& sb) const { U8 high2 = opcode >> 6; #ifdef __APPLE__ if(compactEncoding != 0) { formatCompactUnwind(compactEncoding, sb); return; } #endif // Handle high-2-bit encoded opcodes if(high2 == 1 || opcode == DW_CFA_advance_loc1 || opcode == DW_CFA_advance_loc2 || opcode == DW_CFA_advance_loc4) { sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_advance_loc %" PRId64, codeOffset, operand); return; } if(high2 == 2) { sb.appendf( "@%" WAVM_PRIuPTR ": DW_CFA_offset r%u at CFA%+" PRId64, codeOffset, reg, operand); return; } if(high2 == 3) { sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_restore r%u", codeOffset, reg); return; } switch(opcode) { case DW_CFA_nop: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_nop", codeOffset); break; case DW_CFA_undefined: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_undefined r%u", codeOffset, reg); break; case DW_CFA_same_value: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_same_value r%u", codeOffset, reg); break; case DW_CFA_register: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_register r%u=r%" PRId64, codeOffset, reg, operand); break; case DW_CFA_def_cfa: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_def_cfa r%u%+" PRId64, codeOffset, reg, operand); break; case DW_CFA_def_cfa_register: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_def_cfa_register r%u", codeOffset, reg); break; case DW_CFA_def_cfa_offset: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_def_cfa_offset %" PRId64, codeOffset, operand); break; case DW_CFA_def_cfa_expression: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_def_cfa_expression", codeOffset); break; case DW_CFA_expression: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_expression r%u", codeOffset, reg); break; case DW_CFA_val_expression: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_val_expression r%u", codeOffset, reg); break; case DW_CFA_offset_extended: case DW_CFA_offset_extended_sf: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_offset_extended r%u at CFA%+" PRId64, codeOffset, reg, operand); break; case DW_CFA_restore_extended: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_restore_extended r%u", codeOffset, reg); break; case DW_CFA_remember_state: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_remember_state", codeOffset); break; case DW_CFA_restore_state: sb.appendf("@%" WAVM_PRIuPTR ": DW_CFA_restore_state", codeOffset); break; default: sb.appendf("@%" WAVM_PRIuPTR ": unknown (opcode 0x%02x)", codeOffset, opcode); break; } } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/ErrorPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include "POSIXPrivate.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Platform/Error.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Platform/Unwind.h" using namespace WAVM; using namespace WAVM::Platform; static Mutex& getErrorReportingMutex() { static Platform::Mutex mutex; return mutex; } static std::atomic currentErrorHandler{nullptr}; void Platform::setErrorHandler(ErrorHandler handler) { currentErrorHandler.store(handler, std::memory_order_release); if(handler) { initGlobalSignals(); } } // Dispatches to the error handler or falls back to printing the message to stderr. // numOmittedFramesFromTop counts frames above the caller to skip when capturing the UnwindState. static void reportError(const char* message, bool printCallStack, Uptr numOmittedFramesFromTop) { ErrorHandler handler = currentErrorHandler.load(std::memory_order_acquire); if(handler) { // +1 to skip reportError itself. UnwindState state = UnwindState::capture(numOmittedFramesFromTop + 1); handler(message, printCallStack, std::move(state)); } else { std::fprintf(stderr, "%s\n", message); std::fflush(stderr); } } void Platform::handleFatalError(const char* messageFormat, bool printCallStack, va_list varArgs) { Platform::Mutex::Lock lock(getErrorReportingMutex()); TruncatingFixedStringBuilder<4096> message; message.vappendf(messageFormat, varArgs); reportError(message.c_str(), printCallStack, 1); std::abort(); } void Platform::handleAssertionFailure(const AssertMetadata& metadata) { Platform::Mutex::Lock lock(getErrorReportingMutex()); TruncatingFixedStringBuilder<4096> message; message.appendf( "Assertion failed at %s(%u): %s", metadata.file, metadata.line, metadata.condition); reportError(message.c_str(), true, 1); } void Platform::reportErrorWithCallStack(Uptr numOmittedFramesFromTop, const char* messageFormat, ...) { Platform::Mutex::Lock lock(getErrorReportingMutex()); TruncatingFixedStringBuilder<4096> message; va_list varArgs; va_start(varArgs, messageFormat); message.vappendf(messageFormat, varArgs); va_end(varArgs); reportError(message.c_str(), true, numOmittedFramesFromTop + 1); } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/FilePOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #ifdef _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/File.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/VFS/VFS.h" #ifdef __APPLE__ #include #endif #ifdef __linux__ #include #endif #define FILE_OFFSET_IS_64BIT (sizeof(off_t) == 8) using namespace WAVM; using namespace WAVM::Platform; using namespace WAVM::VFS; static_assert(offsetof(struct iovec, iov_base) == offsetof(IOReadBuffer, data) && offsetof(struct iovec, iov_len) == offsetof(IOReadBuffer, numBytes) && sizeof(((struct iovec*)nullptr)->iov_base) == sizeof(IOReadBuffer::data) && sizeof(((struct iovec*)nullptr)->iov_len) == sizeof(IOReadBuffer::numBytes) && sizeof(struct iovec) == sizeof(IOReadBuffer), "IOReadBuffer must match iovec"); static_assert(offsetof(struct iovec, iov_base) == offsetof(IOWriteBuffer, data) && offsetof(struct iovec, iov_len) == offsetof(IOWriteBuffer, numBytes) && sizeof(((struct iovec*)nullptr)->iov_base) == sizeof(IOWriteBuffer::data) && sizeof(((struct iovec*)nullptr)->iov_len) == sizeof(IOWriteBuffer::numBytes) && sizeof(struct iovec) == sizeof(IOWriteBuffer), "IOWriteBuffer must match iovec"); static Result asVFSResult(int error) { switch(error) { case ESPIPE: return Result::notSeekable; case EIO: return Result::ioDeviceError; case EINTR: return Result::interruptedBySignal; case EISDIR: return Result::isDirectory; case EFAULT: return Result::inaccessibleBuffer; case EFBIG: return Result::exceededFileSizeLimit; case EPERM: return Result::notPermitted; case EOVERFLOW: return Result::notEnoughBits; case EMFILE: return Result::outOfProcessFDs; case ENOTDIR: return Result::isNotDirectory; case EACCES: return Result::notAccessible; case EEXIST: return Result::alreadyExists; case ENAMETOOLONG: return Result::nameTooLong; case ENFILE: return Result::outOfSystemFDs; case ENOENT: return Result::doesNotExist; case ENOSPC: return Result::outOfFreeSpace; case EROFS: return Result::notPermitted; case ENOMEM: return Result::outOfMemory; case EDQUOT: return Result::outOfQuota; case ELOOP: return Result::tooManyLinksInPath; case EAGAIN: return Result::wouldBlock; case EINPROGRESS: return Result::ioPending; case ENOSR: return Result::outOfMemory; case ENXIO: return Result::missingDevice; case ETXTBSY: return Result::notAccessible; case EBUSY: return Result::busy; case ENOTEMPTY: return Result::isNotEmpty; case EMLINK: return Result::outOfLinksToParentDir; case ENOTSUP: return Result::notSupported; case EINVAL: // This probably needs to be handled differently for each API entry point. Errors::fatalfWithCallStack("ERROR_INVALID_PARAMETER"); case EBADF: Errors::fatalfWithCallStack("EBADF"); default: Errors::fatalfWithCallStack("Unexpected error code: %i (%s)", error, strerror(error)); }; } static FileType getFileTypeFromMode(mode_t mode) { switch(mode & S_IFMT) { case S_IFBLK: return FileType::blockDevice; case S_IFCHR: return FileType::characterDevice; case S_IFIFO: return FileType::pipe; case S_IFREG: return FileType::file; case S_IFDIR: return FileType::directory; case S_IFLNK: return FileType::symbolicLink; case S_IFSOCK: default: return FileType::unknown; }; } #ifdef _DIRENT_HAVE_D_TYPE static FileType getFileTypeFromDirEntType(U8 type) { switch(type) { case DT_BLK: return FileType::blockDevice; case DT_CHR: return FileType::characterDevice; case DT_DIR: return FileType::directory; case DT_FIFO: return FileType::pipe; case DT_LNK: return FileType::symbolicLink; case DT_REG: return FileType::file; case DT_SOCK: case DT_UNKNOWN: default: return FileType::unknown; }; } #endif static I128 timeToNS(time_t time) { // time_t might be a long, and I128 doesn't have a long constructor, so coerce it to an integer // type first. const U64 timeInt = U64(time); return I128(timeInt) * 1000000000; } static void getFileInfoFromStatus(const struct stat& status, FileInfo& outInfo) { outInfo.deviceNumber = status.st_dev; outInfo.fileNumber = status.st_ino; outInfo.type = getFileTypeFromMode(status.st_mode); outInfo.numLinks = status.st_nlink; outInfo.numBytes = status.st_size; outInfo.lastAccessTime.ns = timeToNS(status.st_atime); outInfo.lastWriteTime.ns = timeToNS(status.st_mtime); outInfo.creationTime.ns = timeToNS(status.st_ctime); } static I32 translateVFDFlags(const VFDFlags& vfsFlags) { I32 flags = 0; if(vfsFlags.append) { flags |= O_APPEND; } if(vfsFlags.nonBlocking) { flags |= O_NONBLOCK; } switch(vfsFlags.syncLevel) { case VFDSync::none: break; case VFDSync::contentsAfterWrite: flags |= O_DSYNC; break; case VFDSync::contentsAndMetadataAfterWrite: flags |= O_SYNC; break; #ifdef __APPLE__ // Apple doesn't support O_RSYNC. case VFDSync::contentsAfterWriteAndBeforeRead: Errors::fatal( "VFDSync::contentsAfterWriteAndBeforeRead is not yet implemented on Apple " "platforms."); case VFDSync::contentsAndMetadataAfterWriteAndBeforeRead: Errors::fatal( "VFDSync::contentsAndMetadataAfterWriteAndBeforeRead is not yet implemented " "on Apple platforms."); #else case VFDSync::contentsAfterWriteAndBeforeRead: flags |= O_DSYNC | O_RSYNC; break; case VFDSync::contentsAndMetadataAfterWriteAndBeforeRead: flags |= O_SYNC | O_RSYNC; break; #endif default: WAVM_UNREACHABLE(); } return flags; } struct POSIXDirEntStream : DirEntStream { POSIXDirEntStream(DIR* inDir) : dir(inDir) {} virtual void close() override { closedir(dir); delete this; } virtual bool getNext(DirEnt& outEntry) override { Platform::Mutex::Lock lock(mutex); errno = 0; struct dirent* dirent = readdir(dir); if(dirent) { WAVM_ASSERT(dirent); outEntry.fileNumber = dirent->d_ino; outEntry.name = dirent->d_name; #ifdef _DIRENT_HAVE_D_TYPE outEntry.type = getFileTypeFromDirEntType(dirent->d_type); #else outEntry.type = FileType::unknown; #endif return true; } else if(errno == 0) { // Reached the end of the directory. return false; } else if(errno == ENOENT || errno == EOVERFLOW) { return false; } else { Errors::fatalfWithCallStack("readdir returned unexpected error: %s", strerror(errno)); } } virtual void restart() override { Platform::Mutex::Lock lock(mutex); rewinddir(dir); maxValidOffset = 0; } virtual U64 tell() override { Platform::Mutex::Lock lock(mutex); const long offset = telldir(dir); WAVM_ERROR_UNLESS(offset >= 0 && (LONG_MAX <= UINT64_MAX || (unsigned long)offset <= UINT64_MAX)); if(U64(offset) > maxValidOffset) { maxValidOffset = U64(offset); } return U64(offset); } virtual bool seek(U64 offset) override { Platform::Mutex::Lock lock(mutex); // Don't allow seeking to higher offsets than have been returned by tell since the last // rewind. if(offset > maxValidOffset) { return false; }; WAVM_ERROR_UNLESS(offset <= LONG_MAX); seekdir(dir, long(offset)); return true; } private: Platform::Mutex mutex; DIR* dir; U64 maxValidOffset{0}; }; struct POSIXFD : VFD { const I32 fd; POSIXFD(I32 inFD) : fd(inFD) {} virtual Result close() override { WAVM_ASSERT(fd >= 0); VFS::Result result = VFS::Result::success; if(::close(fd)) { // close is specified by POSIX to leave the file descriptor in an unspecified state when // an error occurs: https://pubs.opengroup.org/onlinepubs/009695399/functions/close.html // The Linux man page for close also says that close should not be retried after an // error: http://man7.org/linux/man-pages/man2/close.2.html#NOTES // Assume that even though an error was returned, that the file descriptor was closed. // Report the error to caller, but delete the VFD. } delete this; return result; } virtual Result seek(I64 offset, SeekOrigin origin, U64* outAbsoluteOffset = nullptr) override { I32 whence = 0; switch(origin) { case SeekOrigin::begin: whence = SEEK_SET; break; case SeekOrigin::cur: whence = SEEK_CUR; break; case SeekOrigin::end: whence = SEEK_END; break; default: WAVM_UNREACHABLE(); }; if(!FILE_OFFSET_IS_64BIT && (offset < INT32_MIN || offset > INT32_MAX)) { return Result::invalidOffset; } const I64 result = lseek(fd, off_t(offset), whence); if(result == -1) { return errno == EINVAL ? Result::invalidOffset : asVFSResult(errno); } if(outAbsoluteOffset) { *outAbsoluteOffset = U64(result); } return Result::success; } virtual Result readv(const IOReadBuffer* buffers, Uptr numBuffers, Uptr* outNumBytesRead = nullptr, const U64* offset = nullptr) override { if(outNumBytesRead) { *outNumBytesRead = 0; } if(numBuffers == 0) { return Result::success; } else if(numBuffers > IOV_MAX) { return Result::tooManyBuffers; } if(offset == nullptr) { // Do the read. ssize_t result = ::readv(fd, (const struct iovec*)buffers, numBuffers); if(result == -1) { return asVFSResult(errno); } if(outNumBytesRead) { *outNumBytesRead = result; } return Result::success; } else { if(!FILE_OFFSET_IS_64BIT && *offset > INT32_MAX) { return Result::invalidOffset; } // Count the number of bytes in all the buffers. Uptr numBufferBytes = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers; ++bufferIndex) { const IOReadBuffer& buffer = buffers[bufferIndex]; if(numBufferBytes + buffer.numBytes < numBufferBytes) { return Result::tooManyBufferBytes; } numBufferBytes += buffer.numBytes; } if(numBufferBytes > UINT32_MAX) { return Result::tooManyBufferBytes; } // Allocate a combined buffer. U8* combinedBuffer = (U8*)malloc(numBufferBytes); if(!combinedBuffer) { return Result::outOfMemory; } // Do the read. Result vfsResult = Result::success; const ssize_t result = pread(fd, combinedBuffer, numBufferBytes, off_t(*offset)); if(result < 0) { vfsResult = asVFSResult(errno); } else { const Uptr numBytesRead = Uptr(result); // Copy the contents of the combined buffer to the individual buffers. Uptr numBytesCopied = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers && numBytesCopied < numBytesRead; ++bufferIndex) { const IOReadBuffer& buffer = buffers[bufferIndex]; const Uptr numBytesToCopy = std::min(buffer.numBytes, numBytesRead - numBytesCopied); if(numBytesToCopy) { memcpy(buffer.data, combinedBuffer + numBytesCopied, numBytesToCopy); } numBytesCopied += numBytesToCopy; } // Write the total number of bytes read. if(outNumBytesRead) { *outNumBytesRead = numBytesRead; } } // Free the combined buffer. free(combinedBuffer); return vfsResult; } } virtual Result writev(const IOWriteBuffer* buffers, Uptr numBuffers, Uptr* outNumBytesWritten = nullptr, const U64* offset = nullptr) override { if(outNumBytesWritten) { *outNumBytesWritten = 0; } if(numBuffers == 0) { return Result::success; } else if(numBuffers > IOV_MAX) { return Result::tooManyBuffers; } if(offset == nullptr) { ssize_t result = ::writev(fd, (const struct iovec*)buffers, numBuffers); if(result == -1) { return asVFSResult(errno); } if(outNumBytesWritten) { *outNumBytesWritten = result; } return Result::success; } else { if(!FILE_OFFSET_IS_64BIT && *offset > INT32_MAX) { return Result::invalidOffset; } // Count the number of bytes in all the buffers. Uptr numBufferBytes = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers; ++bufferIndex) { const IOWriteBuffer& buffer = buffers[bufferIndex]; if(numBufferBytes + buffer.numBytes < numBufferBytes) { return Result::tooManyBufferBytes; } numBufferBytes += buffer.numBytes; } if(numBufferBytes > UINT32_MAX) { return Result::tooManyBufferBytes; } // Allocate a combined buffer. U8* combinedBuffer = (U8*)malloc(numBufferBytes); if(!combinedBuffer) { return Result::outOfMemory; } // Copy the individual buffers into the combined buffer. Uptr numBytesCopied = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers; ++bufferIndex) { const IOWriteBuffer& buffer = buffers[bufferIndex]; const Uptr numBytesToCopy = std::min(buffer.numBytes, numBufferBytes - numBytesCopied); if(numBytesToCopy) { memcpy(combinedBuffer + numBytesCopied, buffer.data, numBytesToCopy); } numBytesCopied += numBytesToCopy; } // Do the write. Result vfsResult = Result::success; ssize_t result = pwrite(fd, combinedBuffer, numBufferBytes, off_t(*offset)); if(result < 0) { vfsResult = asVFSResult(errno); } // Write the total number of bytes writte. if(outNumBytesWritten) { *outNumBytesWritten = Uptr(result); } // Free the combined buffer. free(combinedBuffer); return vfsResult; } } virtual Result sync(SyncType syncType) override { #ifdef __APPLE__ I32 result = fsync(fd); #else I32 result; switch(syncType) { case SyncType::contents: result = fdatasync(fd); break; case SyncType::contentsAndMetadata: result = fsync(fd); break; default: Errors::fatalfWithCallStack("Unexpected errno: %s", strerror(errno)); } #endif if(result) { return errno == EINVAL ? Result::notSynchronizable : asVFSResult(errno); } return Result::success; } virtual Result getVFDInfo(VFDInfo& outInfo) override { struct stat fdStatus; if(fstat(fd, &fdStatus) != 0) { return asVFSResult(errno); } outInfo.type = getFileTypeFromMode(fdStatus.st_mode); I32 fdFlags = fcntl(fd, F_GETFL); if(fdFlags < 0) { return asVFSResult(errno); } outInfo.flags.append = fdFlags & O_APPEND; outInfo.flags.nonBlocking = fdFlags & O_NONBLOCK; if(fdFlags & O_SYNC) { #ifdef O_RSYNC outInfo.flags.syncLevel = fdFlags & O_RSYNC ? VFDSync::contentsAndMetadataAfterWriteAndBeforeRead : VFDSync::contentsAndMetadataAfterWrite; #else outInfo.flags.syncLevel = VFDSync::contentsAndMetadataAfterWrite; #endif } else if(fdFlags & O_DSYNC) { #ifdef O_RSYNC outInfo.flags.syncLevel = fdFlags & O_RSYNC ? VFDSync::contentsAfterWriteAndBeforeRead : VFDSync::contentsAfterWrite; #else outInfo.flags.syncLevel = VFDSync::contentsAfterWrite; #endif } else { outInfo.flags.syncLevel = VFDSync::none; } return Result::success; } virtual Result setVFDFlags(const VFDFlags& vfsFlags) override { const I32 flags = translateVFDFlags(vfsFlags); return fcntl(fd, F_SETFL, flags) == 0 ? Result::success : asVFSResult(errno); } virtual Result setFileSize(U64 numBytes) override { if(!FILE_OFFSET_IS_64BIT && numBytes > INT32_MAX) { return Result::exceededFileSizeLimit; } int result = ftruncate(fd, off_t(numBytes)); return result == 0 ? Result::success : asVFSResult(errno); } virtual Result setFileTimes(bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) override { #ifdef HAS_FUTIMENS struct timespec timespecs[2]; if(!setLastAccessTime) { timespecs[0].tv_nsec = UTIME_OMIT; } else { timespecs[0].tv_sec = U64(lastAccessTime.ns / 1000000000); timespecs[0].tv_nsec = U32(lastAccessTime.ns % 1000000000); } if(!setLastWriteTime) { timespecs[1].tv_nsec = UTIME_OMIT; } else { timespecs[1].tv_sec = U64(lastWriteTime.ns / 1000000000); timespecs[1].tv_nsec = U32(lastWriteTime.ns % 1000000000); } return futimens(fd, timespecs) == 0 ? Result::success : asVFSResult(errno); #else // MacOS pre-10.13 does not have futimens, so fall back to utimes, which only has // microsecond precision, and no equivalent of UTIME_OMIT. // If !setLastAccessTime or !setLastWriteTime, use fstat to read the current times. // This isn't atomic, but seems like the best we can do without futimens. if(!setLastAccessTime || !setLastWriteTime) { struct stat fdStatus; if(fstat(fd, &fdStatus)) { return asVFSResult(errno); } if(!setLastAccessTime) { lastAccessTime.ns = timeToNS(fdStatus.st_atime); } if(!setLastWriteTime) { lastWriteTime.ns = timeToNS(fdStatus.st_mtime); } } struct timeval timevals[2]; timevals[0].tv_sec = U64(lastAccessTime.ns / 1000000000); timevals[0].tv_usec = U64(lastAccessTime.ns / 1000 % 1000000); timevals[1].tv_sec = U64(lastWriteTime.ns / 1000000000); timevals[1].tv_usec = U64(lastWriteTime.ns / 1000 % 1000000); // utimes takes a path instead of a fd, so use the BSD fcntl(F_GETPATH) to get the path to // the fd's file. char fdPath[PATH_MAX + 1]; if(fcntl(fd, F_GETPATH, fdPath)) { return asVFSResult(errno); } fdPath[PATH_MAX] = 0; return utimes(fdPath, timevals) == 0 ? Result::success : asVFSResult(errno); #endif } virtual Result getFileInfo(FileInfo& outInfo) override { struct stat fdStatus; if(fstat(fd, &fdStatus)) { return asVFSResult(errno); } getFileInfoFromStatus(fdStatus, outInfo); return Result::success; } virtual Result openDir(DirEntStream*& outStream) override { const I32 duplicateFD = dup(fd); if(duplicateFD < 0) { return asVFSResult(errno); } DIR* dir = fdopendir(duplicateFD); if(!dir) { return asVFSResult(errno); } // Rewind the dir to the beginning to ensure previous seeks on the FD don't affect the // dirent stream. rewinddir(dir); outStream = new POSIXDirEntStream(dir); return Result::success; } }; struct POSIXStdFD : POSIXFD { POSIXStdFD(I32 inFD) : POSIXFD(inFD) {} virtual Result close() override { // The stdio FDs are shared, so don't close them. return Result::success; } }; // Initialized during dynamic init (before main), so signal-safe to access later. static POSIXStdFD stdinVFD(0); static POSIXStdFD stdoutVFD(1); static POSIXStdFD stderrVFD(2); VFD* Platform::getStdFD(StdDevice device) { switch(device) { case StdDevice::in: return &stdinVFD; case StdDevice::out: return &stdoutVFD; case StdDevice::err: return &stderrVFD; default: WAVM_UNREACHABLE(); }; } struct POSIXFS : HostFS { virtual Result open(const std::string& path, FileAccessMode accessMode, FileCreateMode createMode, VFD*& outFD, const VFDFlags& flags = VFDFlags{}) override; virtual Result getFileInfo(const std::string& path, FileInfo& outInfo) override; virtual Result setFileTimes(const std::string& path, bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) override; virtual Result openDir(const std::string& path, DirEntStream*& outStream) override; virtual Result renameFile(const std::string& oldPath, const std::string& newPath) override; virtual Result unlinkFile(const std::string& path) override; virtual Result removeDir(const std::string& path) override; virtual Result createDir(const std::string& path) override; static POSIXFS& get() { static POSIXFS posixFS; return posixFS; } protected: POSIXFS() {} }; HostFS& Platform::getHostFS() { return POSIXFS::get(); } Result POSIXFS::open(const std::string& path, FileAccessMode accessMode, FileCreateMode createMode, VFD*& outFD, const VFDFlags& vfsFlags) { U32 flags = 0; switch(accessMode) { case FileAccessMode::none: flags = O_RDONLY; break; case FileAccessMode::readOnly: flags = O_RDONLY; break; case FileAccessMode::writeOnly: flags = O_WRONLY; break; case FileAccessMode::readWrite: flags = O_RDWR; break; default: WAVM_UNREACHABLE(); }; switch(createMode) { case FileCreateMode::createAlways: flags |= O_CREAT | O_TRUNC; break; case FileCreateMode::createNew: flags |= O_CREAT | O_EXCL; break; case FileCreateMode::openAlways: flags |= O_CREAT; break; case FileCreateMode::openExisting: break; case FileCreateMode::truncateExisting: flags |= O_TRUNC; break; default: WAVM_UNREACHABLE(); }; mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; flags |= translateVFDFlags(vfsFlags); const I32 fd = ::open(path.c_str(), flags, mode); if(fd == -1) { return asVFSResult(errno); } outFD = new POSIXFD(fd); return Result::success; } Result POSIXFS::getFileInfo(const std::string& path, VFS::FileInfo& outInfo) { struct stat fileStatus; if(stat(path.c_str(), &fileStatus)) { return asVFSResult(errno); } getFileInfoFromStatus(fileStatus, outInfo); return Result::success; } Result POSIXFS::setFileTimes(const std::string& path, bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) { #ifdef HAS_UTIMENSAT struct timespec timespecs[2]; if(!setLastAccessTime) { timespecs[0].tv_nsec = UTIME_OMIT; } else { timespecs[0].tv_sec = U64(lastAccessTime.ns / 1000000000); timespecs[0].tv_nsec = U32(lastAccessTime.ns % 1000000000); } if(!setLastWriteTime) { timespecs[1].tv_nsec = UTIME_OMIT; } else { timespecs[1].tv_sec = U64(lastWriteTime.ns / 1000000000); timespecs[1].tv_nsec = U32(lastWriteTime.ns % 1000000000); } return utimensat(AT_FDCWD, path.c_str(), timespecs, 0) == 0 ? Result::success : asVFSResult(errno); #else // MacOS pre-10.13 does not have utimensat, so fall back to utimes, which only has microsecond // precision, and no equivalent of UTIME_OMIT. // If !setLastAccessTime or !setLastWriteTime, use stat to read the current times. // This isn't atomic, but seems like the best we can do without futimens. if(!setLastAccessTime || !setLastWriteTime) { struct stat fileStatus; if(stat(path.c_str(), &fileStatus)) { return asVFSResult(errno); } if(!setLastAccessTime) { lastAccessTime.ns = timeToNS(fileStatus.st_atime); } if(!setLastWriteTime) { lastWriteTime.ns = timeToNS(fileStatus.st_mtime); } } struct timeval timevals[2]; timevals[0].tv_sec = U64(lastAccessTime.ns / 1000000000); timevals[0].tv_usec = U64(lastAccessTime.ns / 1000 % 1000000); timevals[1].tv_sec = U64(lastWriteTime.ns / 1000000000); timevals[1].tv_usec = U64(lastWriteTime.ns / 1000 % 1000000); return utimes(path.c_str(), timevals) == 0 ? Result::success : asVFSResult(errno); #endif } Result POSIXFS::openDir(const std::string& path, DirEntStream*& outStream) { DIR* dir = opendir(path.c_str()); if(!dir) { return asVFSResult(errno); } outStream = new POSIXDirEntStream(dir); return Result::success; } Result POSIXFS::renameFile(const std::string& oldPath, const std::string& newPath) { return !rename(oldPath.c_str(), newPath.c_str()) ? VFS::Result::success : asVFSResult(errno); } Result POSIXFS::unlinkFile(const std::string& path) { return !unlink(path.c_str()) ? VFS::Result::success : asVFSResult(errno); } Result POSIXFS::removeDir(const std::string& path) { return !unlinkat(AT_FDCWD, path.c_str(), AT_REMOVEDIR) ? Result::success : asVFSResult(errno); } Result POSIXFS::createDir(const std::string& path) { return !mkdir(path.c_str(), 0666) ? Result::success : asVFSResult(errno); } std::string Platform::getCurrentWorkingDirectory() { const Uptr maxPathBytes = pathconf(".", _PC_PATH_MAX); char* buffer = (char*)alloca(maxPathBytes); WAVM_ERROR_UNLESS(getcwd(buffer, maxPathBytes) == buffer); return std::string(buffer); } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/MemoryPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Error.h" #include "WAVM/Platform/Intrinsic.h" #include "WAVM/Platform/Memory.h" #ifdef __APPLE__ #define MAP_ANONYMOUS MAP_ANON #endif using namespace WAVM; using namespace WAVM::Platform; static Uptr internalGetPreferredVirtualPageSizeLog2() { U32 preferredVirtualPageSize = sysconf(_SC_PAGESIZE); // Verify our assumption that the virtual page size is a power of two. WAVM_ASSERT(!(preferredVirtualPageSize & (preferredVirtualPageSize - 1))); return floorLogTwo(preferredVirtualPageSize); } Uptr Platform::getBytesPerPageLog2() { static Uptr preferredVirtualPageSizeLog2 = internalGetPreferredVirtualPageSizeLog2(); return preferredVirtualPageSizeLog2; } static U32 memoryAccessAsPOSIXFlag(MemoryAccess access) { switch(access) { default: case MemoryAccess::none: return PROT_NONE; case MemoryAccess::readOnly: return PROT_READ; case MemoryAccess::readWrite: return PROT_READ | PROT_WRITE; case MemoryAccess::readExecute: return PROT_READ | PROT_EXEC; case MemoryAccess::readWriteExecute: return PROT_EXEC | PROT_READ | PROT_WRITE; } } static bool isPageAligned(U8* address) { const Uptr addressBits = reinterpret_cast(address); return (addressBits & (getBytesPerPage() - 1)) == 0; } U8* Platform::allocateVirtualPages(Uptr numPages) { Uptr numBytes = numPages << getBytesPerPageLog2(); void* result = mmap(nullptr, numBytes, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if(result == MAP_FAILED) { if(errno != ENOMEM) { Platform::reportErrorWithCallStack( 0, "mmap(0, %" WAVM_PRIuPTR ", PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) failed! errno=%s", numBytes, strerror(errno)); } return nullptr; } return (U8*)result; } U8* Platform::allocateAlignedVirtualPages(Uptr numPages, Uptr alignmentLog2, U8*& outUnalignedBaseAddress) { const Uptr pageSizeLog2 = getBytesPerPageLog2(); const Uptr numBytes = numPages << pageSizeLog2; if(alignmentLog2 > pageSizeLog2) { // Call mmap with enough padding added to the size to align the allocation within the // unaligned mapping. const Uptr alignmentBytes = 1ull << alignmentLog2; U8* unalignedBaseAddress = (U8*)mmap( nullptr, numBytes + alignmentBytes, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if(unalignedBaseAddress == MAP_FAILED) { if(errno != ENOMEM) { Platform::reportErrorWithCallStack( 0, "mmap(0, %" WAVM_PRIuPTR ", PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) failed! errno=%s", numBytes + alignmentBytes, strerror(errno)); } return nullptr; } const Uptr address = reinterpret_cast(unalignedBaseAddress); const Uptr alignedAddress = (address + alignmentBytes - 1) & ~(alignmentBytes - 1); U8* result = reinterpret_cast(alignedAddress); // Unmap the start and end of the unaligned mapping, leaving the aligned mapping in the // middle. const Uptr numHeadPaddingBytes = alignedAddress - address; if(numHeadPaddingBytes > 0) { WAVM_ERROR_UNLESS(!munmap(unalignedBaseAddress, numHeadPaddingBytes)); } const Uptr numTailPaddingBytes = alignmentBytes - (alignedAddress - address); if(numTailPaddingBytes > 0) { WAVM_ERROR_UNLESS(!munmap(result + (numPages << pageSizeLog2), numTailPaddingBytes)); } outUnalignedBaseAddress = result; return result; } else { outUnalignedBaseAddress = allocateVirtualPages(numPages); return outUnalignedBaseAddress; } } bool Platform::commitVirtualPages(U8* baseVirtualAddress, Uptr numPages, MemoryAccess access) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); int result = mprotect( baseVirtualAddress, numPages << getBytesPerPageLog2(), memoryAccessAsPOSIXFlag(access)); if(result != 0) { Platform::reportErrorWithCallStack(0, "mprotect(0x%" WAVM_PRIxPTR ", %" WAVM_PRIuPTR ", %u) failed: %s", reinterpret_cast(baseVirtualAddress), numPages << getBytesPerPageLog2(), memoryAccessAsPOSIXFlag(access), strerror(errno)); } return result == 0; } bool Platform::setVirtualPageAccess(U8* baseVirtualAddress, Uptr numPages, MemoryAccess access) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); int result = mprotect( baseVirtualAddress, numPages << getBytesPerPageLog2(), memoryAccessAsPOSIXFlag(access)); if(result != 0) { Platform::reportErrorWithCallStack(0, "mprotect(0x%" WAVM_PRIxPTR ", %" WAVM_PRIuPTR ", %u) failed: %s", reinterpret_cast(baseVirtualAddress), numPages << getBytesPerPageLog2(), memoryAccessAsPOSIXFlag(access), strerror(errno)); } return result == 0; } void Platform::decommitVirtualPages(U8* baseVirtualAddress, Uptr numPages) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); auto numBytes = numPages << getBytesPerPageLog2(); if(mmap(baseVirtualAddress, numBytes, PROT_NONE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) == MAP_FAILED) { Errors::fatalf("mmap(0x%" WAVM_PRIxPTR ", %" WAVM_PRIuPTR ", PROT_NONE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) failed: %s", reinterpret_cast(baseVirtualAddress), numBytes, strerror(errno)); } } void Platform::freeVirtualPages(U8* baseVirtualAddress, Uptr numPages) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); if(munmap(baseVirtualAddress, numPages << getBytesPerPageLog2())) { Errors::fatalf("munmap(0x%" WAVM_PRIxPTR ", %u) failed: %s", reinterpret_cast(baseVirtualAddress), numPages << getBytesPerPageLog2(), strerror(errno)); } } void Platform::freeAlignedVirtualPages(U8* unalignedBaseAddress, Uptr numPages, Uptr alignmentLog2) { WAVM_ERROR_UNLESS(isPageAligned(unalignedBaseAddress)); if(munmap(unalignedBaseAddress, numPages << getBytesPerPageLog2())) { Errors::fatalf("munmap(0x%" WAVM_PRIxPTR ", %u) failed: %s", reinterpret_cast(unalignedBaseAddress), numPages << getBytesPerPageLog2(), strerror(errno)); } } void Platform::flushInstructionCache(U8* baseAddress, Uptr numBytes) { __builtin___clear_cache(reinterpret_cast(baseAddress), reinterpret_cast(baseAddress + numBytes)); } Uptr Platform::getPeakMemoryUsageBytes() { struct rusage ru; WAVM_ERROR_UNLESS(!getrusage(RUSAGE_SELF, &ru)); #ifdef __APPLE__ // POSIX and even the Mac OS X docs say this is in KB, but it's actually in bytes. return Uptr(ru.ru_maxrss); #else return Uptr(ru.ru_maxrss) * 1024; #endif } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/MutexPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Mutex.h" using namespace WAVM; using namespace WAVM::Platform; Platform::Mutex::Mutex() { static_assert(sizeof(LockData) >= sizeof(pthread_mutex_t), ""); static_assert(alignof(LockData) >= alignof(pthread_mutex_t), ""); #if WAVM_ENABLE_ASSERTS // Use a recursive mutex in debug builds to support isLockedByCurrentThread. pthread_mutexattr_t pthreadMutexAttr; WAVM_ERROR_UNLESS(!pthread_mutexattr_init(&pthreadMutexAttr)); WAVM_ERROR_UNLESS(!pthread_mutexattr_settype(&pthreadMutexAttr, PTHREAD_MUTEX_RECURSIVE)); WAVM_ERROR_UNLESS(!pthread_mutex_init((pthread_mutex_t*)&lockData, &pthreadMutexAttr)); WAVM_ERROR_UNLESS(!pthread_mutexattr_destroy(&pthreadMutexAttr)); isLocked = false; #else WAVM_ERROR_UNLESS(!pthread_mutex_init((pthread_mutex_t*)&lockData, nullptr)); #endif } Platform::Mutex::~Mutex() { WAVM_ERROR_UNLESS(!pthread_mutex_destroy((pthread_mutex_t*)&lockData)); } void Platform::Mutex::lock() { WAVM_ERROR_UNLESS(!pthread_mutex_lock((pthread_mutex_t*)&lockData)); #if WAVM_ENABLE_ASSERTS if(isLocked) { Errors::fatal("Recursive mutex lock"); } isLocked = true; #endif } void Platform::Mutex::unlock() { #if WAVM_ENABLE_ASSERTS isLocked = false; #endif WAVM_ERROR_UNLESS(!pthread_mutex_unlock((pthread_mutex_t*)&lockData)); } #if WAVM_ENABLE_ASSERTS bool Platform::Mutex::isLockedByCurrentThread() { // Try to lock the mutex, and if EDEADLK is returned, it means the mutex was already locked by // this thread. int tryLockResult = pthread_mutex_trylock((pthread_mutex_t*)&lockData); if(tryLockResult) { return false; } const bool result = isLocked; WAVM_ERROR_UNLESS(!pthread_mutex_unlock((pthread_mutex_t*)&lockData)); return result; } #endif #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/POSIXPrivate.h ================================================ #pragma once #if WAVM_PLATFORM_POSIX #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Platform/Signal.h" #include "WAVM/Platform/Unwind.h" namespace WAVM { namespace Platform { struct SignalContext { SignalContext* outerContext; jmp_buf catchJump; bool (*filter)(void*, Signal, UnwindState&&); void* filterArgument; }; struct SigAltStack { ~SigAltStack() { deinit(); } void init(); void deinit(); void getNonSignalStack(U8*& outMinGuardAddr, U8*& outMinAddr, U8*& outMaxAddr); private: U8* base = nullptr; U8* stackMinAddr; U8* stackMaxAddr; U8* stackMinGuardAddr; }; extern thread_local SigAltStack sigAltStack; extern thread_local SignalContext* innermostSignalContext; extern bool initThreadAndGlobalSignalsOnce(); extern bool initGlobalSignalsOnce(); inline void initGlobalSignals() { static bool initedGlobalSignals = initGlobalSignalsOnce(); WAVM_ASSERT(initedGlobalSignals); } inline void initThreadAndGlobalSignals() { static thread_local bool initedThread = initThreadAndGlobalSignalsOnce(); WAVM_ASSERT(initedThread); } UnwindState makeUnwindStateFromSignalContext(void* contextPtr); void getCurrentThreadStack(U8*& outMinGuardAddr, U8*& outMinAddr, U8*& outMaxAddr); }} #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/RWMutexPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/RWMutex.h" using namespace WAVM; using namespace WAVM::Platform; Platform::RWMutex::RWMutex() { static_assert(sizeof(LockData) >= sizeof(pthread_rwlock_t), ""); static_assert(alignof(LockData) >= alignof(pthread_rwlock_t), ""); #if WAVM_ENABLE_ASSERTS static_assert(sizeof(exclusiveLockingThreadId) == sizeof(pthread_t), ""); static_assert(alignof(Uptr) >= alignof(pthread_t), ""); #endif WAVM_ERROR_UNLESS(!pthread_rwlock_init((pthread_rwlock_t*)&lockData, nullptr)); } Platform::RWMutex::~RWMutex() { WAVM_ERROR_UNLESS(!pthread_rwlock_destroy((pthread_rwlock_t*)&lockData)); } void Platform::RWMutex::lock(LockShareability shareability) { if(shareability == LockShareability::exclusive) { WAVM_ERROR_UNLESS(!pthread_rwlock_wrlock((pthread_rwlock_t*)&lockData)); #if WAVM_ENABLE_ASSERTS exclusiveLockingThreadId.store(reinterpret_cast(pthread_self()), std::memory_order_relaxed); #endif } else { WAVM_ERROR_UNLESS(!pthread_rwlock_rdlock((pthread_rwlock_t*)&lockData)); } } void Platform::RWMutex::unlock(LockShareability shareability) { if(shareability == LockShareability::exclusive) { WAVM_ERROR_UNLESS(!pthread_rwlock_unlock((pthread_rwlock_t*)&lockData)); #if WAVM_ENABLE_ASSERTS exclusiveLockingThreadId.store(0, std::memory_order_relaxed); #endif } else { WAVM_ERROR_UNLESS(!pthread_rwlock_unlock((pthread_rwlock_t*)&lockData)); } } #if WAVM_ENABLE_ASSERTS bool Platform::RWMutex::isExclusivelyLockedByCurrentThread() { return reinterpret_cast(exclusiveLockingThreadId.load(std::memory_order_relaxed)) == pthread_self(); } #endif #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/RandomPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Random.h" using namespace WAVM; using namespace WAVM::Platform; static void readDevRandom(U8* outRandomBytes, Uptr numBytes) { static I32 randomFD = open("/dev/urandom", O_RDONLY); if(randomFD < 0) { Errors::fatalf("Failed to open /dev/urandom: %s", strerror(errno)); } while(numBytes > 0) { I32 result = read(randomFD, outRandomBytes, numBytes); if(result >= 0) { outRandomBytes += result; numBytes -= result; } else if(errno != EINTR) { Errors::fatalf("Failed to read from /dev/urandom: %s", strerror(errno)); } } } void Platform::getCryptographicRNG(U8* outRandomBytes, Uptr numBytes) { readDevRandom(outRandomBytes, numBytes); } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/SignalPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include "POSIXPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Signal.h" #include "WAVM/Platform/Unwind.h" using namespace WAVM; using namespace WAVM::Platform; #if defined(__APPLE__) #define UC_RESET_ALT_STACK 0x80000000 extern "C" int __sigreturn(ucontext_t*, int); #endif thread_local SignalContext* Platform::innermostSignalContext = nullptr; struct ScopedSignalContext : SignalContext { bool isLinked = false; void link() { outerContext = innermostSignalContext; innermostSignalContext = this; isLinked = true; } ~ScopedSignalContext() { if(isLinked) { innermostSignalContext = outerContext; isLinked = false; } } }; static void maskSignals(int how) { sigset_t set; sigemptyset(&set); sigaddset(&set, SIGFPE); sigaddset(&set, SIGSEGV); sigaddset(&set, SIGBUS); pthread_sigmask(how, &set, nullptr); } [[noreturn]] static void signalHandler(int signalNumber, siginfo_t* signalInfo, void* contextPtr) { maskSignals(SIG_BLOCK); Signal signal; // Derive the exception cause the from signal that was received. switch(signalNumber) { case SIGFPE: if(signalInfo->si_code != FPE_INTDIV && signalInfo->si_code != FPE_INTOVF) { Errors::fatalfWithCallStack("unknown SIGFPE code"); } signal.type = Signal::Type::intDivideByZeroOrOverflow; break; case SIGSEGV: case SIGBUS: { // Determine whether the faulting address was an address reserved by the stack. U8* stackMinGuardAddr; U8* stackMinAddr; U8* stackMaxAddr; sigAltStack.getNonSignalStack(stackMinGuardAddr, stackMinAddr, stackMaxAddr); signal.type = signalInfo->si_addr >= stackMinGuardAddr && signalInfo->si_addr < stackMaxAddr ? Signal::Type::stackOverflow : Signal::Type::accessViolation; signal.accessViolation.address = reinterpret_cast(signalInfo->si_addr); break; } default: Errors::fatalfWithCallStack("unknown signal number: %i", signalNumber); break; }; // Call the signal filters, from innermost to outermost, until one returns true. { UnwindState state = makeUnwindStateFromSignalContext(contextPtr); for(SignalContext* signalContext = innermostSignalContext; signalContext; signalContext = signalContext->outerContext) { if(signalContext->filter(signalContext->filterArgument, signal, std::move(state))) { // siglongjmp won't unwind the stack, so manually call the UnwindState destructor. state.~UnwindState(); // Jump back to the execution context that was saved in catchSignals. siglongjmp(signalContext->catchJump, 1); } } } switch(signalNumber) { case SIGFPE: Errors::fatalfWithCallStack("unhandled SIGFPE"); case SIGSEGV: Errors::fatalfWithCallStack("unhandled SIGSEGV"); case SIGBUS: Errors::fatalfWithCallStack("unhandled SIGBUS"); default: WAVM_UNREACHABLE(); }; } bool Platform::initGlobalSignalsOnce() { // Set the signal handler for the signals we want to intercept. struct sigaction signalAction; signalAction.sa_sigaction = signalHandler; signalAction.sa_flags = SA_SIGINFO | SA_ONSTACK | SA_NODEFER; sigemptyset(&signalAction.sa_mask); WAVM_ERROR_UNLESS(!sigaction(SIGSEGV, &signalAction, nullptr)); WAVM_ERROR_UNLESS(!sigaction(SIGBUS, &signalAction, nullptr)); WAVM_ERROR_UNLESS(!sigaction(SIGFPE, &signalAction, nullptr)); return true; } bool Platform::catchSignals(void (*thunk)(void*), bool (*filter)(void*, Signal, UnwindState&&), void* argument) { initThreadAndGlobalSignals(); ScopedSignalContext signalContext; signalContext.filter = filter; signalContext.filterArgument = argument; // Use sigsetjmp to capture the execution state into the signal context. If a signal is raised, // the signal handler will jump back to here. Tell sigsetjmp not to save the signal mask, since // that's quite expensive (a syscall). Instead, just unblock the signals that our handler blocks // after handling those signals. bool isReturningFromSignalHandler = sigsetjmp(signalContext.catchJump, 0) != 0; if(!isReturningFromSignalHandler) { signalContext.link(); // Call the thunk. thunk(argument); } else { #if defined(__APPLE__) // On MacOS, it's necessary to call __sigreturn to restore the sigaltstack state after // exiting the signal handler. __sigreturn(nullptr, UC_RESET_ALT_STACK); #endif // Unblock the signals that are blocked by the signal handler. maskSignals(SIG_UNBLOCK); } return isReturningFromSignalHandler; } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/ThreadPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include #include #include #include #include #include #include #include #include #include #include #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Defines.h" #if WAVM_ENABLE_ASAN #include #endif #ifdef __linux__ #include #endif #include "POSIXPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Platform/Thread.h" #ifdef __APPLE__ #define MAP_ANONYMOUS MAP_ANON #endif #ifdef __linux__ #define MAP_STACK_FLAGS (MAP_STACK) #else #define MAP_STACK_FLAGS 0 #endif using namespace WAVM; using namespace WAVM::Platform; struct Platform::Thread { pthread_t id; }; struct CreateThreadArgs { I64 (*entry)(void*); void* entryArgument; }; static constexpr Uptr sigAltStackNumBytes = 65536; #define ALLOCATE_SIGALTSTACK_ON_MAIN_STACK WAVM_ENABLE_ASAN static bool isAlignedLog2(void* pointer, Uptr alignmentLog2) { return !(reinterpret_cast(pointer) & ((Uptr(1) << alignmentLog2) - 1)); } void SigAltStack::deinit() { if(base) { // Disable the sig alt stack. // According to the docs, ss_size is ignored if SS_DISABLE is set, but MacOS returns an // ENOMEM error if ss_size is too small regardless of whether SS_DISABLE is set. stack_t disableAltStack; memset(&disableAltStack, 0, sizeof(stack_t)); disableAltStack.ss_flags = SS_DISABLE; disableAltStack.ss_size = sigAltStackNumBytes; WAVM_ERROR_UNLESS(!sigaltstack(&disableAltStack, nullptr)); // Free the alt stack's memory. if(!ALLOCATE_SIGALTSTACK_ON_MAIN_STACK) { WAVM_ERROR_UNLESS(!munmap(base, sigAltStackNumBytes)); } else { U8* signalStackMaxAddr = base + sigAltStackNumBytes; if(mprotect(signalStackMaxAddr, getBytesPerPage(), PROT_READ | PROT_WRITE) != 0) { Errors::fatalf("mprotect(0x%" WAVM_PRIxPTR ", %" WAVM_PRIuPTR ", PROT_READ | PROT_WRITE) returned %i.\n", reinterpret_cast(signalStackMaxAddr), getBytesPerPage(), errno); } } base = nullptr; } } #ifdef __linux__ static void getGlibcVersion(unsigned long& outMajor, unsigned long& outMinor) { const char* versionString = gnu_get_libc_version(); char* majorEnd; outMajor = strtoul(versionString, &majorEnd, 10); WAVM_ERROR_UNLESS(outMajor != 0 && outMajor != ULONG_MAX); WAVM_ASSERT(majorEnd > versionString); WAVM_ERROR_UNLESS(*majorEnd == '.'); const char* minorStart = majorEnd + 1; char* minorEnd; outMinor = strtoul(minorStart, &minorEnd, 10); WAVM_ERROR_UNLESS(outMinor != 0 && outMinor != ULONG_MAX); WAVM_ASSERT(minorEnd > minorStart); } #endif static void getThreadStack(pthread_t thread, U8*& outMinGuardAddr, U8*& outMinAddr, U8*& outMaxAddr) { #ifdef __linux__ // Linux uses pthread_getattr_np/pthread_attr_getstack, and returns a pointer to the minimum // address of the stack. pthread_attr_t threadAttributes; memset(&threadAttributes, 0, sizeof(threadAttributes)); WAVM_ERROR_UNLESS(!pthread_getattr_np(thread, &threadAttributes)); Uptr numStackBytes = 0; Uptr numGuardBytes = 0; WAVM_ERROR_UNLESS( !pthread_attr_getstack(&threadAttributes, (void**)&outMinAddr, &numStackBytes)); WAVM_ERROR_UNLESS(!pthread_attr_getguardsize(&threadAttributes, &numGuardBytes)); WAVM_ERROR_UNLESS(!pthread_attr_destroy(&threadAttributes)); outMaxAddr = outMinAddr + numStackBytes; // Before GLIBC 2.27, pthread_attr_getstack erroneously included the guard page in the result. unsigned long glibcMajorVersion = 0; unsigned long glibcMinorVersion = 0; getGlibcVersion(glibcMajorVersion, glibcMinorVersion); if(glibcMajorVersion > 2 || (glibcMajorVersion == 2 && glibcMinorVersion >= 27)) { outMinGuardAddr = outMinAddr - numGuardBytes; } else { outMinGuardAddr = outMinAddr; outMinAddr += numGuardBytes; // CentOS 7's GLIBC says it's version 2.17, but appears to have the pthread_attr_getstack // patch from GLIBC 2.27. I'm not sure how to precisely detect this situation, so just // make a conservative guess that the guard region extends 1 page both above and below the // returned stack base address. outMinGuardAddr -= numGuardBytes; } #elif defined(__APPLE__) // MacOS uses pthread_get_stackaddr_np, and returns a pointer to the maximum address of the // stack. outMaxAddr = (U8*)pthread_get_stackaddr_np(thread); const Uptr numStackBytes = pthread_get_stacksize_np(thread); outMinAddr = outMaxAddr - numStackBytes; outMinGuardAddr = outMinAddr - getBytesPerPage(); #elif defined(__WAVIX__) Errors::unimplemented("Wavix getThreadStack"); #else #error unsupported platform #endif } WAVM_NO_ASAN static void touchStackPages(U8* minAddr, Uptr numBytesPerPage) { while(true) { volatile U8* touchAddr = (volatile U8*)alloca(numBytesPerPage / 2); *touchAddr = 0; if(touchAddr < minAddr + numBytesPerPage) { break; } } } bool Platform::initThreadAndGlobalSignalsOnce() { sigAltStack.init(); initGlobalSignals(); return true; } void SigAltStack::init() { if(!base) { // Save the original stack information, since mprotecting part of the stack may change the // result of pthread_getattr_np on the main thread. This is because glibc parses // /proc/self/maps to implement pthread_getattr_np: // https://github.com/lattera/glibc/blob/master/nptl/pthread_getattr_np.c#L72 getThreadStack(pthread_self(), stackMinGuardAddr, stackMinAddr, stackMaxAddr); // Allocate a stack to use when handling signals, so stack overflow can be handled safely. if(!ALLOCATE_SIGALTSTACK_ON_MAIN_STACK) { base = (U8*)mmap(nullptr, sigAltStackNumBytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); } else { const Uptr pageSizeLog2 = getBytesPerPageLog2(); const Uptr numBytesPerPage = Uptr(1) << pageSizeLog2; // Use the top of the thread's normal stack to handle signals: just protect a page below // the pages used by the sigaltstack that will catch stack overflows before they // overwrite the sigaltstack. // Touch each stack page from bottom to top to ensure that it has been mapped: Linux and // possibly other OSes lazily grow the stack mapping as a guard page is hit. touchStackPages(stackMinAddr, numBytesPerPage); // Protect a page in between the sigaltstack and the rest of the stack. U8* signalStackMaxAddr = stackMinAddr + sigAltStackNumBytes; WAVM_ERROR_UNLESS(isAlignedLog2(signalStackMaxAddr, pageSizeLog2)); if(mprotect(signalStackMaxAddr, numBytesPerPage, PROT_NONE) != 0) { Errors::fatalf("mprotect(0x%" WAVM_PRIxPTR ", %" WAVM_PRIuPTR ", PROT_NONE) returned %i.\n", reinterpret_cast(signalStackMaxAddr), numBytesPerPage, errno); } base = stackMinAddr; // Exclude the sigaltstack region from the saved "non-signal" stack information. stackMinGuardAddr = signalStackMaxAddr; stackMinAddr = signalStackMaxAddr + numBytesPerPage; } WAVM_ERROR_UNLESS(base != MAP_FAILED); stack_t sigAltStackInfo; sigAltStackInfo.ss_size = sigAltStackNumBytes; sigAltStackInfo.ss_sp = base; sigAltStackInfo.ss_flags = 0; WAVM_ERROR_UNLESS(!sigaltstack(&sigAltStackInfo, nullptr)); } } void SigAltStack::getNonSignalStack(U8*& outMinGuardAddr, U8*& outMinAddr, U8*& outMaxAddr) { if(!base) { getThreadStack(pthread_self(), outMinGuardAddr, outMinAddr, outMaxAddr); } else { outMinGuardAddr = stackMinGuardAddr; outMinAddr = stackMinAddr; outMaxAddr = stackMaxAddr; } } thread_local SigAltStack Platform::sigAltStack; WAVM_NO_ASAN static void* createThreadEntry(void* argsVoid) { std::unique_ptr args((CreateThreadArgs*)argsVoid); initThreadAndGlobalSignals(); I64 exitCode = (*args->entry)(args->entryArgument); sigAltStack.deinit(); return reinterpret_cast(exitCode); } Platform::Thread* Platform::createThread(Uptr numStackBytes, I64 (*threadEntry)(void*), void* argument) { auto thread = new Thread; auto createArgs = new CreateThreadArgs; createArgs->entry = threadEntry; createArgs->entryArgument = argument; pthread_attr_t threadAttr; WAVM_ERROR_UNLESS(!pthread_attr_init(&threadAttr)); if(numStackBytes != 0) { WAVM_ERROR_UNLESS(!pthread_attr_setstacksize(&threadAttr, numStackBytes)); } // Create a new pthread. WAVM_ERROR_UNLESS(!pthread_create(&thread->id, &threadAttr, createThreadEntry, createArgs)); WAVM_ERROR_UNLESS(!pthread_attr_destroy(&threadAttr)); return thread; } void Platform::detachThread(Thread* thread) { WAVM_ERROR_UNLESS(!pthread_detach(thread->id)); delete thread; } I64 Platform::joinThread(Thread* thread) { void* returnValue = nullptr; WAVM_ERROR_UNLESS(!pthread_join(thread->id, &returnValue)); delete thread; return reinterpret_cast(returnValue); } Uptr Platform::getNumberOfHardwareThreads() { return std::thread::hardware_concurrency(); } void Platform::yieldToAnotherThread() { WAVM_ERROR_UNLESS(sched_yield() == 0); } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/POSIX/UnwindPOSIX.cpp ================================================ #if WAVM_PLATFORM_POSIX #include // IWYU pragma: keep #include #include "POSIXPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/CPU.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Platform/Unwind.h" #if defined(__APPLE__) #include #include #include #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Memory.h" #endif #define UNW_LOCAL_ONLY #ifdef __APPLE__ #include #else #include "libunwind.h" #endif // libunwind eh_frame section registration/deregistration. extern "C" void __unw_add_dynamic_eh_frame_section(const void* eh_frame_start); extern "C" void __unw_remove_dynamic_eh_frame_section(const void* eh_frame_start); using namespace WAVM; using namespace WAVM::Platform; // On macOS, we use the dynamic unwind sections API (__unw_add_find_dynamic_unwind_sections) // instead of __register_frame. The __register_frame approach uses DwarfFDECache which is only // checked as a fallback after static unwind sections. On arm64 with pointer authentication, // setInfoBasedOnIPRegister fails to find dynamically registered FDEs because it checks static // sections first. The dynamic unwind sections API integrates directly into libunwind's // findUnwindSections path, ensuring JIT unwind info is found. #if defined(__APPLE__) // This struct's layout must match libunwind's unw_dynamic_unwind_sections struct. struct UnwindSections { Uptr dso_base; Uptr dwarf_section; Uptr dwarf_section_length; Uptr compact_unwind_section; Uptr compact_unwind_section_length; }; // Manages dynamic unwind sections registration for JIT code on macOS. // // Both DWARF eh_frame and compact unwind data are provided via the // __unw_add_find_dynamic_unwind_sections callback. The callback sets dso_base to the imageBase // (codeStart), so libunwind caches DWARF FDEs with mh=imageBase as the cache key. // // On deregistration, we call __unw_remove_dynamic_eh_frame_section(imageBase) to flush any // DwarfFDECache entries keyed by imageBase. This prevents stale FDE pointers from causing // crashes when the virtual address range is reused by a new module. The function just calls // DwarfFDECache::removeAllIn(), which doesn't validate its argument. class DynamicUnwindRegistration { public: static DynamicUnwindRegistration& getInstance() { static DynamicUnwindRegistration instance; return instance; } void registerSections(Uptr codeStart, Uptr codeEnd, const U8* ehFrames, Uptr ehFramesNumBytes, const U8* compactUnwind, Uptr compactUnwindNumBytes) { Platform::Mutex::Lock lock(mutex); RegisteredUnwindSections entry; entry.sections.dso_base = codeStart; entry.sections.dwarf_section = reinterpret_cast(ehFrames); entry.sections.dwarf_section_length = ehFramesNumBytes; entry.sections.compact_unwind_section = reinterpret_cast(compactUnwind); entry.sections.compact_unwind_section_length = compactUnwindNumBytes; entry.codeEnd = codeEnd; unwindSections[codeStart] = entry; Log::printf(Log::debug, "Registered dynamic unwind sections: codeStart=0x%" WAVM_PRIxPTR " codeEnd=0x%" WAVM_PRIxPTR " ehFrames=0x%" WAVM_PRIxPTR "/%" WAVM_PRIuPTR " compactUnwind=0x%" WAVM_PRIxPTR "/%" WAVM_PRIuPTR "\n", codeStart, codeEnd, entry.sections.dwarf_section, ehFramesNumBytes, entry.sections.compact_unwind_section, compactUnwindNumBytes); } void deregisterSections(Uptr codeStart) { Platform::Mutex::Lock lock(mutex); unwindSections.erase(codeStart); // Flush stale DwarfFDECache entries keyed by this imageBase. The callback path caches // DWARF FDEs with mh=sects.dso_base=codeStart. Without this flush, reusing the same // imageBase for a new module would find stale cache entries pointing to freed memory. __unw_remove_dynamic_eh_frame_section(reinterpret_cast(codeStart)); Log::printf(Log::debug, "Deregistered dynamic unwind sections: codeStart=0x%" WAVM_PRIxPTR "\n", codeStart); } private: using AddFn = int (*)(int (*)(Uptr, UnwindSections*)); using RemoveFn = int (*)(int (*)(Uptr, UnwindSections*)); struct RegisteredUnwindSections { UnwindSections sections; Uptr codeEnd; }; Platform::Mutex mutex; std::map unwindSections; RemoveFn removeFn = nullptr; DynamicUnwindRegistration() { auto addFn = reinterpret_cast( dlsym(RTLD_DEFAULT, "__unw_add_find_dynamic_unwind_sections")); removeFn = reinterpret_cast( dlsym(RTLD_DEFAULT, "__unw_remove_find_dynamic_unwind_sections")); WAVM_ERROR_UNLESS(addFn && removeFn); int result = addFn(findSectionsCallback); WAVM_ERROR_UNLESS(result == 0); Log::printf(Log::debug, "Dynamic unwind sections API enabled\n"); } ~DynamicUnwindRegistration() { if(removeFn) { int result = removeFn(findSectionsCallback); if(result != 0) { Log::printf(Log::debug, "Failed to unregister dynamic unwind sections callback: %d\n", result); } } } // Callback function that libunwind calls to find unwind sections for a given address static int findSectionsCallback(Uptr addr, UnwindSections* info) { return getInstance().findSections(addr, info); } int findSections(Uptr addr, UnwindSections* info) { Platform::Mutex::Lock lock(mutex); // Find the entry with the largest start address <= addr auto it = unwindSections.upper_bound(addr); if(it == unwindSections.begin()) { return 0; } --it; // Check that addr is within this module's address range. if(addr >= it->second.codeEnd) { return 0; } *info = it->second.sections; Log::printf(Log::debug, "DynamicUnwindRegistration::findSections: addr=0x%" WAVM_PRIxPTR " -> dso_base=0x%" WAVM_PRIxPTR " ehFrames=0x%" WAVM_PRIxPTR "/%" WAVM_PRIuPTR " compact=0x%" WAVM_PRIxPTR "/%" WAVM_PRIuPTR "\n", addr, info->dso_base, info->dwarf_section, info->dwarf_section_length, info->compact_unwind_section, info->compact_unwind_section_length); return 1; } }; UnwindRegistration* Platform::registerUnwindData(const U8* imageBase, Uptr imageNumPages, const UnwindInfo& unwindInfo) { if(!unwindInfo.data && !unwindInfo.compactUnwind) { return nullptr; } Uptr codeStart = reinterpret_cast(imageBase); Uptr codeEnd = codeStart + imageNumPages * Platform::getBytesPerPage(); DynamicUnwindRegistration::getInstance().registerSections(codeStart, codeEnd, unwindInfo.data, unwindInfo.dataNumBytes, unwindInfo.compactUnwind, unwindInfo.compactUnwindNumBytes); return reinterpret_cast(codeStart); } void Platform::deregisterUnwindData(UnwindRegistration* registration) { DynamicUnwindRegistration::getInstance().deregisterSections( reinterpret_cast(registration)); } #else // !__APPLE__ UnwindRegistration* Platform::registerUnwindData(const U8* imageBase, Uptr imageNumPages, const UnwindInfo& unwindInfo) { if(!unwindInfo.data) { return nullptr; } __unw_add_dynamic_eh_frame_section(unwindInfo.data); return reinterpret_cast(const_cast(unwindInfo.data)); } void Platform::deregisterUnwindData(UnwindRegistration* registration) { __unw_remove_dynamic_eh_frame_section(reinterpret_cast(registration)); } #endif // // Platform-independent unwind API implementation // struct UnwindStateImpl { unw_context_t context; unw_cursor_t cursor; Iptr ipAdjustment; bool valid; }; static_assert(sizeof(UnwindStateImpl) <= WAVM_PLATFORM_UNWIND_STATE_SIZE, "WAVM_PLATFORM_UNWIND_STATE_SIZE is too small"); static_assert(alignof(UnwindStateImpl) <= WAVM_PLATFORM_UNWIND_STATE_ALIGN, "WAVM_PLATFORM_UNWIND_STATE_ALIGN is too small"); static UnwindStateImpl& getImpl(U8* storage) { return *reinterpret_cast(storage); } static const UnwindStateImpl& getImpl(const U8* storage) { return *reinterpret_cast(storage); } UnwindState::UnwindState(const UnwindState& other) { getImpl(storage) = getImpl(other.storage); } UnwindState::UnwindState(UnwindState&& other) noexcept { getImpl(storage) = getImpl(other.storage); } UnwindState& UnwindState::operator=(const UnwindState& other) { getImpl(storage) = getImpl(other.storage); return *this; } UnwindState& UnwindState::operator=(UnwindState&& other) noexcept { getImpl(storage) = getImpl(other.storage); return *this; } // Must not be inlined: the step() call below skips capture() itself, so if capture() were inlined // into the caller, that step would skip the caller's frame instead. WAVM_FORCENOINLINE UnwindState UnwindState::capture(Uptr numFramesToSkip) { UnwindState state; auto& impl = getImpl(state.storage); if(unw_getcontext(&impl.context) || unw_init_local(&impl.cursor, &impl.context)) { impl.valid = false; return state; } impl.ipAdjustment = 0; impl.valid = true; // Step past capture() itself so frame 0 is the caller. if(state.step() != UnwindStepResult::success) { impl.valid = false; return state; } // Skip additional frames as requested. for(Uptr i = 0; i < numFramesToSkip; ++i) { if(state.step() != UnwindStepResult::success) { break; } } return state; } UnwindStepResult UnwindState::step() { auto& impl = getImpl(storage); WAVM_ASSERT(impl.valid); int result = unw_step(&impl.cursor); if(result > 0) { // After stepping, all subsequent frames are return addresses that need -1 to get the // call-site address. impl.ipAdjustment = 1; return UnwindStepResult::success; } if(result == 0) { return UnwindStepResult::end; } return UnwindStepResult::error; } // Helper to get a libunwind register value directly static bool getLibunwindReg(const U8* storage, int libunwindReg, Uptr& outValue) { const auto& impl = getImpl(storage); unw_word_t value; if(unw_get_reg(const_cast(&impl.cursor), libunwindReg, &value) != 0) { return false; } outValue = static_cast(value); return true; } bool UnwindState::getProcInfo(UnwindProcInfo& outInfo) const { const auto& impl = getImpl(storage); WAVM_ASSERT(impl.valid); unw_proc_info_t procInfo; if(unw_get_proc_info(const_cast(&impl.cursor), &procInfo) != 0) { return false; } outInfo.startIP = static_cast(procInfo.start_ip); outInfo.endIP = static_cast(procInfo.end_ip); outInfo.lsda = static_cast(procInfo.lsda); outInfo.handler = static_cast(procInfo.handler); outInfo.unwindData = reinterpret_cast(procInfo.unwind_info); outInfo.unwindDataSize = static_cast(procInfo.unwind_info_size); #ifdef __APPLE__ outInfo.compactEncoding = static_cast(procInfo.format); #endif return true; } std::optional UnwindState::getRegister(HostCPURegister reg) const { WAVM_ASSERT(getImpl(storage).valid); int libunwindReg; #if defined(__x86_64__) switch(reg) { case X86CPURegister::RAX: libunwindReg = UNW_X86_64_RAX; break; case X86CPURegister::RBX: libunwindReg = UNW_X86_64_RBX; break; case X86CPURegister::RCX: libunwindReg = UNW_X86_64_RCX; break; case X86CPURegister::RDX: libunwindReg = UNW_X86_64_RDX; break; case X86CPURegister::RSI: libunwindReg = UNW_X86_64_RSI; break; case X86CPURegister::RDI: libunwindReg = UNW_X86_64_RDI; break; case X86CPURegister::RBP: libunwindReg = UNW_X86_64_RBP; break; case X86CPURegister::RSP: libunwindReg = UNW_REG_SP; break; case X86CPURegister::R8: libunwindReg = UNW_X86_64_R8; break; case X86CPURegister::R9: libunwindReg = UNW_X86_64_R9; break; case X86CPURegister::R10: libunwindReg = UNW_X86_64_R10; break; case X86CPURegister::R11: libunwindReg = UNW_X86_64_R11; break; case X86CPURegister::R12: libunwindReg = UNW_X86_64_R12; break; case X86CPURegister::R13: libunwindReg = UNW_X86_64_R13; break; case X86CPURegister::R14: libunwindReg = UNW_X86_64_R14; break; case X86CPURegister::R15: libunwindReg = UNW_X86_64_R15; break; case X86CPURegister::RIP: libunwindReg = UNW_REG_IP; break; default: return std::nullopt; } #elif defined(__aarch64__) switch(reg) { case AArch64CPURegister::X0: libunwindReg = UNW_AARCH64_X0; break; case AArch64CPURegister::X1: libunwindReg = UNW_AARCH64_X0 + 1; break; case AArch64CPURegister::X2: libunwindReg = UNW_AARCH64_X0 + 2; break; case AArch64CPURegister::X3: libunwindReg = UNW_AARCH64_X0 + 3; break; case AArch64CPURegister::X4: libunwindReg = UNW_AARCH64_X0 + 4; break; case AArch64CPURegister::X5: libunwindReg = UNW_AARCH64_X0 + 5; break; case AArch64CPURegister::X6: libunwindReg = UNW_AARCH64_X0 + 6; break; case AArch64CPURegister::X7: libunwindReg = UNW_AARCH64_X0 + 7; break; case AArch64CPURegister::X8: libunwindReg = UNW_AARCH64_X0 + 8; break; case AArch64CPURegister::X9: libunwindReg = UNW_AARCH64_X0 + 9; break; case AArch64CPURegister::X10: libunwindReg = UNW_AARCH64_X0 + 10; break; case AArch64CPURegister::X11: libunwindReg = UNW_AARCH64_X0 + 11; break; case AArch64CPURegister::X12: libunwindReg = UNW_AARCH64_X0 + 12; break; case AArch64CPURegister::X13: libunwindReg = UNW_AARCH64_X0 + 13; break; case AArch64CPURegister::X14: libunwindReg = UNW_AARCH64_X0 + 14; break; case AArch64CPURegister::X15: libunwindReg = UNW_AARCH64_X0 + 15; break; case AArch64CPURegister::X16: libunwindReg = UNW_AARCH64_X0 + 16; break; case AArch64CPURegister::X17: libunwindReg = UNW_AARCH64_X0 + 17; break; case AArch64CPURegister::X18: libunwindReg = UNW_AARCH64_X0 + 18; break; case AArch64CPURegister::X19: libunwindReg = UNW_AARCH64_X0 + 19; break; case AArch64CPURegister::X20: libunwindReg = UNW_AARCH64_X0 + 20; break; case AArch64CPURegister::X21: libunwindReg = UNW_AARCH64_X0 + 21; break; case AArch64CPURegister::X22: libunwindReg = UNW_AARCH64_X0 + 22; break; case AArch64CPURegister::X23: libunwindReg = UNW_AARCH64_X0 + 23; break; case AArch64CPURegister::X24: libunwindReg = UNW_AARCH64_X0 + 24; break; case AArch64CPURegister::X25: libunwindReg = UNW_AARCH64_X0 + 25; break; case AArch64CPURegister::X26: libunwindReg = UNW_AARCH64_X0 + 26; break; case AArch64CPURegister::X27: libunwindReg = UNW_AARCH64_X0 + 27; break; case AArch64CPURegister::X28: libunwindReg = UNW_AARCH64_X0 + 28; break; case AArch64CPURegister::FP: libunwindReg = UNW_AARCH64_FP; break; case AArch64CPURegister::LR: libunwindReg = UNW_AARCH64_LR; break; case AArch64CPURegister::SP: libunwindReg = UNW_REG_SP; break; case AArch64CPURegister::PC: libunwindReg = UNW_REG_IP; break; default: return std::nullopt; } #endif Uptr value; if(!getLibunwindReg(storage, libunwindReg, value)) { return std::nullopt; } // If reading the IP register, subtract the ipAdjustment to convert from the +1 biased value // (needed for libunwind FDE matching) back to the actual instruction address. if(libunwindReg == UNW_REG_IP) { value -= getImpl(storage).ipAdjustment; } return value; } // Set all registers in an unw_cursor_t from a ucontext_t's saved register state. // ipAdjustment is added to the IP when setting it in the cursor. static void setUnwindCursorFromUContext(unw_cursor_t& cursor, ucontext_t* uc, Iptr ipAdjustment) { #if defined(__APPLE__) && defined(__aarch64__) const auto& ss = uc->uc_mcontext->__ss; for(int i = 0; i < 29; ++i) { unw_set_reg(&cursor, UNW_AARCH64_X0 + i, ss.__x[i]); } unw_set_reg(&cursor, UNW_AARCH64_FP, ss.__fp); unw_set_reg(&cursor, UNW_AARCH64_LR, ss.__lr); unw_set_reg(&cursor, UNW_REG_SP, ss.__sp); // Set IP last via UNW_REG_IP (not UNW_AARCH64_PC) so that libunwind re-looks up the // unwind info for the new IP. All other registers must be set first since the re-lookup // may depend on them. unw_set_reg(&cursor, UNW_REG_IP, ss.__pc + ipAdjustment); #elif defined(__APPLE__) && defined(__x86_64__) const auto& ss = uc->uc_mcontext->__ss; unw_set_reg(&cursor, UNW_X86_64_RAX, ss.__rax); unw_set_reg(&cursor, UNW_X86_64_RDX, ss.__rdx); unw_set_reg(&cursor, UNW_X86_64_RCX, ss.__rcx); unw_set_reg(&cursor, UNW_X86_64_RBX, ss.__rbx); unw_set_reg(&cursor, UNW_X86_64_RSI, ss.__rsi); unw_set_reg(&cursor, UNW_X86_64_RDI, ss.__rdi); unw_set_reg(&cursor, UNW_X86_64_RBP, ss.__rbp); unw_set_reg(&cursor, UNW_REG_SP, ss.__rsp); unw_set_reg(&cursor, UNW_X86_64_R8, ss.__r8); unw_set_reg(&cursor, UNW_X86_64_R9, ss.__r9); unw_set_reg(&cursor, UNW_X86_64_R10, ss.__r10); unw_set_reg(&cursor, UNW_X86_64_R11, ss.__r11); unw_set_reg(&cursor, UNW_X86_64_R12, ss.__r12); unw_set_reg(&cursor, UNW_X86_64_R13, ss.__r13); unw_set_reg(&cursor, UNW_X86_64_R14, ss.__r14); unw_set_reg(&cursor, UNW_X86_64_R15, ss.__r15); // Must be last: triggers unwind info re-lookup (see UNW_REG_IP comment above). unw_set_reg(&cursor, UNW_REG_IP, ss.__rip + ipAdjustment); #elif defined(__linux__) && defined(__aarch64__) const auto& mc = uc->uc_mcontext; for(int i = 0; i < 31; ++i) { unw_set_reg(&cursor, UNW_AARCH64_X0 + i, mc.regs[i]); } unw_set_reg(&cursor, UNW_REG_SP, mc.sp); // Must be last: triggers unwind info re-lookup (see UNW_REG_IP comment above). unw_set_reg(&cursor, UNW_REG_IP, mc.pc + ipAdjustment); #elif defined(__linux__) && defined(__x86_64__) const auto& gregs = uc->uc_mcontext.gregs; unw_set_reg(&cursor, UNW_X86_64_RAX, gregs[REG_RAX]); unw_set_reg(&cursor, UNW_X86_64_RDX, gregs[REG_RDX]); unw_set_reg(&cursor, UNW_X86_64_RCX, gregs[REG_RCX]); unw_set_reg(&cursor, UNW_X86_64_RBX, gregs[REG_RBX]); unw_set_reg(&cursor, UNW_X86_64_RSI, gregs[REG_RSI]); unw_set_reg(&cursor, UNW_X86_64_RDI, gregs[REG_RDI]); unw_set_reg(&cursor, UNW_X86_64_RBP, gregs[REG_RBP]); unw_set_reg(&cursor, UNW_REG_SP, gregs[REG_RSP]); unw_set_reg(&cursor, UNW_X86_64_R8, gregs[REG_R8]); unw_set_reg(&cursor, UNW_X86_64_R9, gregs[REG_R9]); unw_set_reg(&cursor, UNW_X86_64_R10, gregs[REG_R10]); unw_set_reg(&cursor, UNW_X86_64_R11, gregs[REG_R11]); unw_set_reg(&cursor, UNW_X86_64_R12, gregs[REG_R12]); unw_set_reg(&cursor, UNW_X86_64_R13, gregs[REG_R13]); unw_set_reg(&cursor, UNW_X86_64_R14, gregs[REG_R14]); unw_set_reg(&cursor, UNW_X86_64_R15, gregs[REG_R15]); // Must be last: triggers unwind info re-lookup (see UNW_REG_IP comment above). unw_set_reg(&cursor, UNW_REG_IP, gregs[REG_RIP] + ipAdjustment); #else #error "Unsupported platform for setUnwindCursorFromUContext" #endif } UnwindState Platform::makeUnwindStateFromSignalContext(void* contextPtr) { UnwindState state; auto* signalContext = static_cast(contextPtr); state = UnwindState::capture(); auto& impl = getImpl(state.storage); if(!impl.valid) { return state; } // An IP adjustment of +1 is necessary because libunwind's DWARF FDE matching uses the // condition (pcStart < pc), i.e. the lower bound is exclusive. A signal can interrupt at the // very first instruction of a function where pc == pcStart, which would fail the match. // The ipAdjustment field ensures getRegister(IP) undoes this +1 for the caller. impl.ipAdjustment = 1; setUnwindCursorFromUContext(impl.cursor, signalContext, 1); return state; } #endif // WAVM_PLATFORM_POSIX ================================================ FILE: Lib/Platform/Windows/CPUWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include "WAVM/Platform/CPU.h" #include "WindowsPrivate.h" #if WAVM_CPU_ARCH_X86 #include #elif WAVM_CPU_ARCH_ARM #include #endif WAVM::Platform::HostCPUFeatures WAVM::Platform::getHostCPUFeatures() { WAVM::Platform::HostCPUFeatures result; #if WAVM_CPU_ARCH_X86 // __cpuid returns [EAX, EBX, ECX, EDX] int leaf1[4]; __cpuid(leaf1, 1); int ecx1 = leaf1[2]; int edx1 = leaf1[3]; int leaf7[4]; __cpuidex(leaf7, 7, 0); int ebx7 = leaf7[1]; int extLeaf[4]; __cpuid(extLeaf, 0x80000001); int ecxExt = extLeaf[2]; // Leaf 1 EDX result.sse = !!(edx1 & (1 << 25)); result.sse2 = !!(edx1 & (1 << 26)); // Leaf 1 ECX result.sse3 = !!(ecx1 & (1 << 0)); result.ssse3 = !!(ecx1 & (1 << 9)); result.fma = !!(ecx1 & (1 << 12)); result.sse4_1 = !!(ecx1 & (1 << 19)); result.sse4_2 = !!(ecx1 & (1 << 20)); result.popcnt = !!(ecx1 & (1 << 23)); result.avx = !!(ecx1 & (1 << 28)); // Leaf 7 subleaf 0 EBX result.bmi1 = !!(ebx7 & (1 << 3)); result.avx2 = !!(ebx7 & (1 << 5)); result.bmi2 = !!(ebx7 & (1 << 8)); result.avx512f = !!(ebx7 & (1 << 16)); result.avx512dq = !!(ebx7 & (1 << 17)); result.avx512bw = !!(ebx7 & (1 << 30)); result.avx512vl = !!(ebx7 & (1 << 31)); // Extended leaf 0x80000001 ECX result.lzcnt = !!(ecxExt & (1 << 5)); #elif WAVM_CPU_ARCH_ARM result.lse = IsProcessorFeaturePresent(PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE); #endif return result; } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/ClockWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Clock.h" #include "WindowsPrivate.h" #include #include #include using namespace WAVM; using namespace WAVM::Platform; static I128 fileTimeToI128(FILETIME fileTime) { return I128(U64(fileTime.dwLowDateTime) | (U64(fileTime.dwHighDateTime) << 32)) * 100; } static FILETIME i128ToFileTime(I128 i128) { const I128 fileTime128 = i128 / 100; const U64 fileTime64 = fileTime128 >= 0 && fileTime128 <= UINT64_MAX ? U64(fileTime128) : 0; FILETIME result; result.dwLowDateTime = U32(fileTime64); result.dwHighDateTime = U32(fileTime64 >> 32); return result; } static I128 getRealtimeClockOrigin() { SYSTEMTIME systemTime; systemTime.wYear = 1970; systemTime.wMonth = 1; systemTime.wDay = 1; systemTime.wHour = 0; systemTime.wMinute = 0; systemTime.wSecond = 0; systemTime.wMilliseconds = 0; FILETIME fileTime; WAVM_ERROR_UNLESS(SystemTimeToFileTime(&systemTime, &fileTime)); return fileTimeToI128(fileTime); } static const I128& getCachedRealtimeClockOrigin() { static const I128 cachedRealtimeClockOrigin = getRealtimeClockOrigin(); return cachedRealtimeClockOrigin; } static LARGE_INTEGER getQPCFrequency() { LARGE_INTEGER result; WAVM_ERROR_UNLESS(QueryPerformanceFrequency(&result)); return result; } static LARGE_INTEGER getCachedQPCFrequency() { static const LARGE_INTEGER cachedResult = getQPCFrequency(); return cachedResult; } Time Platform::fileTimeToWAVMRealTime(FILETIME fileTime) { return Time{fileTimeToI128(fileTime) - getCachedRealtimeClockOrigin()}; } FILETIME Platform::wavmRealTimeToFileTime(Time realTime) { return i128ToFileTime(getCachedRealtimeClockOrigin() + realTime.ns); } Time Platform::getClockTime(Clock clock) { switch(clock) { case Clock::realtime: { FILETIME realtimeClock; GetSystemTimePreciseAsFileTime(&realtimeClock); return Time{fileTimeToWAVMRealTime(realtimeClock)}; } case Clock::monotonic: { LARGE_INTEGER ticksPerSecond = getCachedQPCFrequency(); LARGE_INTEGER ticks; WAVM_ERROR_UNLESS(QueryPerformanceCounter(&ticks)); return Time{I128(ticks.QuadPart) * 1000000000 / ticksPerSecond.QuadPart}; } case Clock::processCPUTime: { FILETIME creationTime; FILETIME exitTime; FILETIME kernelTime; FILETIME userTime; WAVM_ERROR_UNLESS( GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime)); return Time{fileTimeToI128(kernelTime) + fileTimeToI128(userTime)}; } default: WAVM_UNREACHABLE(); }; } Time Platform::getClockResolution(Clock clock) { switch(clock) { case Clock::realtime: return Time{100}; case Clock::monotonic: { LARGE_INTEGER ticksPerSecond = getCachedQPCFrequency(); U64 result = U64(1000000000) / ticksPerSecond.QuadPart; if(result == 0) { result = 1; } return Time{I128(result)}; } case Clock::processCPUTime: return Time{100}; default: WAVM_UNREACHABLE(); }; } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/ConditionVariableWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Clock.h" #include "WAVM/Platform/ConditionVariable.h" #include "WAVM/Platform/Mutex.h" #include "WindowsPrivate.h" #include using namespace WAVM; using namespace WAVM::Platform; Platform::ConditionVariable::ConditionVariable() { static_assert(sizeof(CondData) >= sizeof(CONDITION_VARIABLE), ""); static_assert(alignof(CondData) >= alignof(CONDITION_VARIABLE), ""); InitializeConditionVariable((CONDITION_VARIABLE*)&condData); } Platform::ConditionVariable::~ConditionVariable() {} bool Platform::ConditionVariable::wait(Mutex& mutex, Time waitDuration) { #if WAVM_ENABLE_ASSERTS mutex.lockingThreadId.store(0, std::memory_order_relaxed); #endif if(isInfinity(waitDuration)) { WAVM_ERROR_UNLESS(SleepConditionVariableSRW( (CONDITION_VARIABLE*)&condData, (SRWLOCK*)&mutex.lockData, INFINITE, 0)); #if WAVM_ENABLE_ASSERTS mutex.lockingThreadId.store(GetCurrentThreadId(), std::memory_order_relaxed); #endif return true; } else { Time currentTime = getClockTime(Clock::monotonic); const Time untilTime = Time{currentTime.ns + waitDuration.ns}; while(true) { const I128 durationMS = currentTime.ns > untilTime.ns ? 0 : (untilTime.ns - currentTime.ns) / 1000000; const U32 durationMS32 = durationMS <= 0 ? 0 : durationMS >= UINT32_MAX ? (UINT32_MAX - 1) : U32(durationMS); if(SleepConditionVariableSRW( (CONDITION_VARIABLE*)&condData, (SRWLOCK*)&mutex.lockData, durationMS32, 0)) { #if WAVM_ENABLE_ASSERTS mutex.lockingThreadId.store(GetCurrentThreadId(), std::memory_order_relaxed); #endif return true; } if(GetLastError() == ERROR_TIMEOUT) { currentTime = getClockTime(Clock::monotonic); if(currentTime.ns >= untilTime.ns) { #if WAVM_ENABLE_ASSERTS mutex.lockingThreadId.store(GetCurrentThreadId(), std::memory_order_relaxed); #endif return false; } } else { Errors::fatal("SleepConditionVariableSRW failed"); } } } } void Platform::ConditionVariable::signal() { WakeConditionVariable((CONDITION_VARIABLE*)&condData); } void Platform::ConditionVariable::broadcast() { WakeAllConditionVariable((CONDITION_VARIABLE*)&condData); } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/DiagnosticsWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Mutex.h" #include "WindowsPrivate.h" #include #include using namespace WAVM; using namespace WAVM::Platform; // The interface to the DbgHelp DLL struct DbgHelp { typedef BOOL(WINAPI* SymFromAddr)(HANDLE, U64, U64*, SYMBOL_INFO*); SymFromAddr symFromAddr; static DbgHelp* get() { static Platform::Mutex dbgHelpMutex; static DbgHelp* dbgHelp = nullptr; if(!dbgHelp) { Platform::Mutex::Lock dbgHelpLock(dbgHelpMutex); if(!dbgHelp) { dbgHelp = new DbgHelp(); } } return dbgHelp; } private: DbgHelp() { HMODULE dbgHelpModule = ::LoadLibraryA("Dbghelp.dll"); if(dbgHelpModule) { symFromAddr = (SymFromAddr)::GetProcAddress(dbgHelpModule, "SymFromAddr"); // Initialize the debug symbol lookup. typedef BOOL(WINAPI * SymInitialize)(HANDLE, PCTSTR, BOOL); SymInitialize symInitialize = (SymInitialize)::GetProcAddress(dbgHelpModule, "SymInitialize"); if(symInitialize) { symInitialize(GetCurrentProcess(), nullptr, TRUE); } } } }; static HMODULE getCurrentModule() { HMODULE module = nullptr; GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)getCurrentModule, &module); return module; } static HMODULE getModuleFromBaseAddress(Uptr baseAddress) { return reinterpret_cast(baseAddress); } static void getModuleName(HMODULE module, char* outName, Uptr outNameSize) { U32 len = GetModuleFileNameA(module, outName, U32(outNameSize)); if(len >= outNameSize) { len = U32(outNameSize - 1); } outName[len] = '\0'; } static void trimModuleName(char* moduleName, Uptr moduleNameSize) { // Get this module's path to find the common directory prefix. char thisModuleName[MAX_PATH + 1]; getModuleName(getCurrentModule(), thisModuleName, sizeof(thisModuleName)); // Find the last backslash in this module's path. const char* lastBackslash = strrchr(thisModuleName, '\\'); if(!lastBackslash) { return; } Uptr prefixLen = Uptr(lastBackslash - thisModuleName); if(strlen(moduleName) > prefixLen && strncmp(moduleName, thisModuleName, prefixLen) == 0) { // Remove the common directory prefix. Uptr remaining = strlen(moduleName + prefixLen + 1); memmove(moduleName, moduleName + prefixLen + 1, remaining + 1); } } bool Platform::getInstructionSourceByAddress(Uptr ip, InstructionSource& outSource) { // Look up static symbol information using DbgHelp. DbgHelp* dbgHelp = DbgHelp::get(); // Allocate a SYMBOL_INFO struct to receive information about the symbol for this // instruction pointer. const Uptr maxSymbolNameChars = 256; const Uptr symbolAllocationSize = sizeof(SYMBOL_INFO) + sizeof(TCHAR) * (maxSymbolNameChars - 1); SYMBOL_INFO* symbolInfo = (SYMBOL_INFO*)alloca(symbolAllocationSize); memset(symbolInfo, 0, symbolAllocationSize); symbolInfo->SizeOfStruct = sizeof(SYMBOL_INFO); symbolInfo->MaxNameLen = maxSymbolNameChars; // Call DbgHelp::SymFromAddr to try to find any debug symbol containing this address. U64 displacement; if(!dbgHelp->symFromAddr(GetCurrentProcess(), ip, &displacement, symbolInfo)) { return false; } else { getModuleName(getModuleFromBaseAddress(Uptr(symbolInfo->ModBase)), outSource.module.mutableData(), outSource.module.capacity()); trimModuleName(outSource.module.mutableData(), outSource.module.capacity()); outSource.function.assign(symbolInfo->Name, symbolInfo->NameLen); outSource.instructionOffset = Uptr(displacement); return true; } } static std::atomic numCommittedPageBytes{0}; void Platform::printMemoryProfile() { printf("Committed virtual pages: %" PRIuPTR " KB\n", numCommittedPageBytes.load(std::memory_order_seq_cst) / 1024); fflush(stdout); } void Platform::registerVirtualAllocation(Uptr numBytes) { numCommittedPageBytes += numBytes; } void Platform::deregisterVirtualAllocation(Uptr numBytes) { numCommittedPageBytes -= numBytes; } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/ErrorWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include #include #include #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Platform/Error.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Platform/Unwind.h" #include "WindowsPrivate.h" #include using namespace WAVM; using namespace WAVM::Platform; static Mutex& getErrorReportingMutex() { static Platform::Mutex mutex; return mutex; } static std::atomic currentErrorHandler{nullptr}; void Platform::setErrorHandler(ErrorHandler handler) { currentErrorHandler.store(handler, std::memory_order_release); } // Dispatches to the error handler or falls back to printing the message to stderr. // numOmittedFramesFromTop counts frames above the caller to skip when capturing the UnwindState. static void reportError(const char* message, bool printCallStack, Uptr numOmittedFramesFromTop) { ErrorHandler handler = currentErrorHandler.load(std::memory_order_acquire); if(handler) { // +1 to skip reportError itself. UnwindState state = UnwindState::capture(numOmittedFramesFromTop + 1); handler(message, printCallStack, std::move(state)); return; } std::fprintf(stderr, "%s\n", message); std::fflush(stderr); } void Platform::handleFatalError(const char* messageFormat, bool printCallStack, va_list varArgs) { Platform::Mutex::Lock lock(getErrorReportingMutex()); TruncatingFixedStringBuilder<4096> message; message.vappendf(messageFormat, varArgs); reportError(message.c_str(), printCallStack, 1); if(IsDebuggerPresent()) { DebugBreak(); } TerminateProcess(GetCurrentProcess(), 1); // This throw is necessary to convince clang-cl that the function doesn't return. throw; } void Platform::handleAssertionFailure(const AssertMetadata& metadata) { Platform::Mutex::Lock lock(getErrorReportingMutex()); TruncatingFixedStringBuilder<4096> message; message.appendf( "Assertion failed at %s(%u): %s", metadata.file, metadata.line, metadata.condition); reportError(message.c_str(), true, 1); } void Platform::reportErrorWithCallStack(Uptr numOmittedFramesFromTop, const char* messageFormat, ...) { Platform::Mutex::Lock lock(getErrorReportingMutex()); TruncatingFixedStringBuilder<4096> message; va_list varArgs; va_start(varArgs, messageFormat); message.vappendf(messageFormat, varArgs); va_end(varArgs); reportError(message.c_str(), true, numOmittedFramesFromTop + 1); } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/FileWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include #include #include #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Time.h" #include "WAVM/Inline/Unicode.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/File.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/VFS/VFS.h" #include "WindowsPrivate.h" #include #include #include using namespace WAVM; using namespace WAVM::Platform; using namespace WAVM::VFS; static Result asVFSResult(DWORD windowsError) { switch(windowsError) { case ERROR_SUCCESS: return Result::success; case ERROR_READ_FAULT: case ERROR_WRITE_FAULT: case ERROR_NET_WRITE_FAULT: case ERROR_IO_DEVICE: return Result::ioDeviceError; case ERROR_PATH_NOT_FOUND: case ERROR_FILE_NOT_FOUND: return Result::doesNotExist; case ERROR_NEGATIVE_SEEK: return Result::invalidOffset; case ERROR_INVALID_FUNCTION: return Result::notPermitted; case ERROR_ACCESS_DENIED: return Result::notAccessible; case ERROR_IO_PENDING: return Result::ioPending; case ERROR_OPERATION_ABORTED: return Result::interruptedByCancellation; case ERROR_NOT_ENOUGH_MEMORY: return Result::outOfMemory; case ERROR_NOT_ENOUGH_QUOTA: return Result::outOfQuota; case ERROR_HANDLE_DISK_FULL: return Result::outOfFreeSpace; case ERROR_INVALID_USER_BUFFER: return Result::inaccessibleBuffer; case ERROR_INSUFFICIENT_BUFFER: return Result::notEnoughBufferBytes; case ERROR_BROKEN_PIPE: case ERROR_NO_DATA: return Result::brokenPipe; case ERROR_ALREADY_EXISTS: return Result::alreadyExists; case ERROR_DIR_NOT_EMPTY: return Result::isNotEmpty; case ERROR_INVALID_ADDRESS: return Result::inaccessibleBuffer; case ERROR_DIRECTORY: return Result::isNotDirectory; case ERROR_INVALID_PARAMETER: // This probably needs to be handled differently for each API entry point. Errors::fatalfWithCallStack("ERROR_INVALID_PARAMETER"); case ERROR_INVALID_HANDLE: // This must be a bug, so make it a fatal error. Errors::fatalfWithCallStack("ERROR_INVALID_HANDLE"); default: Errors::fatalfWithCallStack("Unexpected windows error code: %u", GetLastError()); }; } static LARGE_INTEGER makeLargeInt(U64 u64) { LARGE_INTEGER result; result.QuadPart = u64; return result; } static Result getFileType(HANDLE handle, FileType& outType) { const DWORD windowsFileType = GetFileType(handle); if(windowsFileType == FILE_TYPE_UNKNOWN && GetLastError() != ERROR_SUCCESS) { return asVFSResult(GetLastError()); } switch(windowsFileType) { case FILE_TYPE_CHAR: outType = FileType::characterDevice; break; case FILE_TYPE_PIPE: outType = FileType::pipe; break; case FILE_TYPE_DISK: { FILE_BASIC_INFO fileBasicInfo; if(!GetFileInformationByHandleEx( handle, FileBasicInfo, &fileBasicInfo, sizeof(fileBasicInfo))) { return asVFSResult(GetLastError()); } outType = fileBasicInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY ? FileType::directory : FileType::file; break; } default: outType = FileType::unknown; }; return Result::success; } static Result getFileInfoByHandle(HANDLE handle, FileInfo& outInfo) { BY_HANDLE_FILE_INFORMATION windowsFileInfo; if(!GetFileInformationByHandle(handle, &windowsFileInfo)) { return asVFSResult(GetLastError()); } outInfo.deviceNumber = windowsFileInfo.dwVolumeSerialNumber; outInfo.fileNumber = windowsFileInfo.nFileIndexLow | (U64(windowsFileInfo.nFileIndexHigh) << 32); const Result getTypeResult = getFileType(handle, outInfo.type); if(getTypeResult != Result::success) { return getTypeResult; } outInfo.numLinks = windowsFileInfo.nNumberOfLinks; outInfo.numBytes = windowsFileInfo.nFileSizeLow | (U64(windowsFileInfo.nFileSizeHigh) << 32); outInfo.lastAccessTime = fileTimeToWAVMRealTime(windowsFileInfo.ftLastAccessTime); outInfo.lastWriteTime = fileTimeToWAVMRealTime(windowsFileInfo.ftLastWriteTime); outInfo.creationTime = fileTimeToWAVMRealTime(windowsFileInfo.ftCreationTime); return Result::success; } static bool getWindowsPath(const std::string& inString, std::wstring& outString) { outString.clear(); U32 codePoint; const U8* nextChar = (const U8*)inString.c_str(); const U8* endChar = nextChar + inString.size(); while(nextChar != endChar) { if(!Unicode::decodeUTF8CodePoint(nextChar, endChar, codePoint)) { return false; } if(codePoint == U32('/')) { codePoint = U32('\\'); } Unicode::encodeUTF16CodePoint(codePoint, outString); }; return true; } static void getVFSPath(const wchar_t* inChars, size_t numChars, std::string& outString, const char* context) { outString.clear(); U32 codePoint; const U16* nextChar = (const U16*)inChars; const U16* endChar = nextChar + numChars; while(nextChar != endChar) { if(!Unicode::decodeUTF16CodePoint(nextChar, endChar, codePoint)) { Errors::fatalf("Found an invalid UTF-16 code point (%u) in %s", *nextChar, context); } if(codePoint == U32('\\')) { codePoint = U32('/'); } Unicode::encodeUTF8CodePoint(codePoint, outString); }; } static bool readDirEnts(HANDLE handle, bool startFromBeginning, std::vector& outDirEnts) { U8 buffer[2048]; if(!GetFileInformationByHandleEx( handle, startFromBeginning ? FileIdBothDirectoryRestartInfo : FileIdBothDirectoryInfo, buffer, sizeof(buffer))) { return false; } auto fileInfo = (FILE_ID_BOTH_DIR_INFO*)buffer; while(true) { DirEnt dirEnt; dirEnt.fileNumber = fileInfo->FileId.QuadPart; // Convert the Windows path (UTF-16 + \) to a VFS path (UTF-8 + /). getVFSPath(fileInfo->FileName, fileInfo->FileNameLength / sizeof(wchar_t), dirEnt.name, "a filename returned by GetFileInformationByHandleEx"); // Assume this is a FILE_TYPE_DISK. dirEnt.type = fileInfo->FileAttributes & FILE_ATTRIBUTE_DIRECTORY ? FileType::directory : FileType::file; outDirEnts.push_back(dirEnt); if(fileInfo->NextEntryOffset == 0) { break; } else { fileInfo = (FILE_ID_BOTH_DIR_INFO*)(((U8*)fileInfo) + fileInfo->NextEntryOffset); } }; return true; } struct WindowsDirEntStream : DirEntStream { WindowsDirEntStream(HANDLE inHandle, std::vector&& inDirEnts) : handle(inHandle), dirEnts(std::move(inDirEnts)) { } virtual void close() override { if(!CloseHandle(handle)) { Errors::fatalf("CloseHandle failed: GetLastError()=%u", GetLastError()); } delete this; } virtual bool getNext(DirEnt& outEntry) override { RWMutex::ExclusiveLock lock(mutex); while(nextReadIndex >= dirEnts.size()) { if(!readDirEnts(handle, nextReadIndex == 0, dirEnts)) { if(GetLastError() == ERROR_NO_MORE_FILES) { return false; } else { Errors::fatalfWithCallStack("Unexpected windows error code: %u", GetLastError()); } } }; outEntry = dirEnts[nextReadIndex++]; return true; } virtual void restart() override { RWMutex::ExclusiveLock lock(mutex); dirEnts.clear(); nextReadIndex = 0; } virtual U64 tell() override { WAVM_ERROR_UNLESS(nextReadIndex < UINT64_MAX); return U64(nextReadIndex); } virtual bool seek(U64 offset) override { RWMutex::ShareableLock lock(mutex); // Don't allow seeking forward past the last buffered dirent. if(offset > UINTPTR_MAX || offset > dirEnts.size()) { return false; } nextReadIndex = Uptr(offset); return true; } private: HANDLE handle; Platform::RWMutex mutex; std::vector dirEnts; std::atomic nextReadIndex{0}; }; struct WindowsFD : VFD { WindowsFD(HANDLE inHandle, DWORD inDesiredAccess, DWORD inShareMode, DWORD inFlagsAndAttributes, bool inNonBlocking, VFDSync inImplicitSync) : handle(inHandle) , desiredAccess(inDesiredAccess) , shareMode(inShareMode) , flagsAndAttributes(inFlagsAndAttributes) , nonBlocking(inNonBlocking) , syncLevel(inImplicitSync) { WAVM_ASSERT(handle != INVALID_HANDLE_VALUE); } virtual Result close() override { Result result = Result::success; if(!CloseHandle(handle)) { result = asVFSResult(GetLastError()); } delete this; return result; } virtual Result seek(I64 offset, SeekOrigin origin, U64* outAbsoluteOffset = nullptr) override { RWMutex::ShareableLock lock(mutex); DWORD windowsOrigin; switch(origin) { case SeekOrigin::begin: windowsOrigin = FILE_BEGIN; break; case SeekOrigin::cur: windowsOrigin = FILE_CURRENT; break; case SeekOrigin::end: windowsOrigin = FILE_END; break; default: WAVM_UNREACHABLE(); } LONG offsetHigh = LONG((offset >> 32) & 0xffffffff); LONG result = SetFilePointer(handle, LONG(offset & 0xffffffff), &offsetHigh, windowsOrigin); if(result == LONG(INVALID_SET_FILE_POINTER)) { // "If an application calls SetFilePointer with distance to move values that result // in a position not sector-aligned and a handle that is opened with // FILE_FLAG_NO_BUFFERING, the function fails, and GetLastError returns // ERROR_INVALID_PARAMETER." return GetLastError() == ERROR_INVALID_PARAMETER ? Result::invalidOffset : asVFSResult(GetLastError()); } if(outAbsoluteOffset) { *outAbsoluteOffset = (U64(offsetHigh) << 32) | result; } return Result::success; } virtual Result readv(const IOReadBuffer* buffers, Uptr numBuffers, Uptr* outNumBytesRead, const U64* offset) override { RWMutex::ShareableLock lock(mutex); if(outNumBytesRead) { *outNumBytesRead = 0; } if(numBuffers == 0) { return Result::success; } // If there's an offset specified, translate it to an OVERLAPPED struct. OVERLAPPED* overlapped = nullptr; if(offset) { overlapped = (OVERLAPPED*)alloca(sizeof(OVERLAPPED)); overlapped->Offset = DWORD(*offset); overlapped->OffsetHigh = DWORD(*offset >> 32); overlapped->hEvent = nullptr; } // Count the number of bytes in all the buffers. Uptr numBufferBytes = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers; ++bufferIndex) { const IOReadBuffer& buffer = buffers[bufferIndex]; if(numBufferBytes + buffer.numBytes < numBufferBytes) { return Result::tooManyBufferBytes; } numBufferBytes += buffer.numBytes; } if(numBufferBytes > UINT32_MAX) { return Result::tooManyBufferBytes; } const U32 numBufferBytesU32 = U32(numBufferBytes); // If there's a single buffer, just use it directly. Otherwise, allocate a combined buffer. if(numBuffers == 1) { return readImpl(buffers[0].data, numBufferBytesU32, overlapped, outNumBytesRead); } else { U8* combinedBuffer = (U8*)malloc(numBufferBytes); if(!combinedBuffer) { return Result::outOfMemory; } Uptr numBytesRead = 0; const Result result = readImpl(combinedBuffer, numBufferBytesU32, overlapped, &numBytesRead); if(result == Result::success) { // If there was a combined buffer, copy the contents of it to the individual // buffers. Uptr numBytesCopied = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers && numBytesCopied < numBytesRead; ++bufferIndex) { const IOReadBuffer& buffer = buffers[bufferIndex]; const Uptr numBytesToCopy = std::min(buffer.numBytes, numBytesRead - numBytesCopied); if(numBytesToCopy) { memcpy(buffer.data, combinedBuffer + numBytesCopied, numBytesToCopy); } numBytesCopied += numBytesToCopy; } // Write the total number of bytes read. if(outNumBytesRead) { *outNumBytesRead = numBytesRead; } } // Free the combined buffer. free(combinedBuffer); return result; } } virtual Result writev(const IOWriteBuffer* buffers, Uptr numBuffers, Uptr* outNumBytesWritten, const U64* offset) override { RWMutex::ShareableLock lock(mutex); if(outNumBytesWritten) { *outNumBytesWritten = 0; } if(numBuffers == 0) { return Result::success; } // If there's an offset specified, translate it to an OVERLAPPED struct. OVERLAPPED* overlapped = nullptr; if(offset) { overlapped = (OVERLAPPED*)alloca(sizeof(OVERLAPPED)); overlapped->Offset = DWORD(*offset); overlapped->OffsetHigh = DWORD(*offset >> 32); overlapped->hEvent = nullptr; } // Count the number of bytes in all the buffers. Uptr numBufferBytes = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers; ++bufferIndex) { const IOWriteBuffer& buffer = buffers[bufferIndex]; if(numBufferBytes + buffer.numBytes < numBufferBytes) { return Result::tooManyBufferBytes; } numBufferBytes += buffer.numBytes; } if(numBufferBytes > Uptr(UINT32_MAX)) { return Result::tooManyBufferBytes; } const U32 numBufferBytesU32 = U32(numBufferBytes); // If there's a single buffer, just use it directly. Otherwise, allocate a combined buffer. if(numBuffers == 1) { return writeImpl(buffers[0].data, numBufferBytesU32, overlapped, outNumBytesWritten); } else { U8* combinedBuffer = (U8*)malloc(numBufferBytes); if(!combinedBuffer) { return Result::outOfMemory; } // Copy all the input buffers into the combined buffer. Uptr numBytesCopied = 0; for(Uptr bufferIndex = 0; bufferIndex < numBuffers; ++bufferIndex) { const IOWriteBuffer& buffer = buffers[bufferIndex]; if(buffer.numBytes) { memcpy(combinedBuffer + numBytesCopied, buffer.data, buffer.numBytes); } numBytesCopied += buffer.numBytes; } // Do the write. const Result result = writeImpl(combinedBuffer, numBufferBytesU32, overlapped, outNumBytesWritten); // Free the combined buffer. free(combinedBuffer); return result; } } virtual Result sync(SyncType syncType) override { RWMutex::ShareableLock lock(mutex); return FlushFileBuffers(handle) ? Result::success : asVFSResult(GetLastError()); } virtual Result getVFDInfo(VFDInfo& outInfo) override { RWMutex::ShareableLock lock(mutex); const Result getTypeResult = getFileType(handle, outInfo.type); if(getTypeResult != Result::success) { return getTypeResult; } outInfo.flags.append = desiredAccess & FILE_APPEND_DATA; outInfo.flags.nonBlocking = nonBlocking; outInfo.flags.syncLevel = syncLevel; return Result::success; } virtual Result getFileInfo(FileInfo& outInfo) override { RWMutex::ShareableLock lock(mutex); return getFileInfoByHandle(handle, outInfo); } virtual Result setVFDFlags(const VFDFlags& flags) override { RWMutex::ExclusiveLock lock(mutex); const DWORD originalDesiredAccess = desiredAccess; if(originalDesiredAccess & (GENERIC_WRITE | FILE_APPEND_DATA)) { desiredAccess &= ~(GENERIC_WRITE | FILE_APPEND_DATA); desiredAccess |= flags.append ? FILE_APPEND_DATA : GENERIC_WRITE; } if(desiredAccess != originalDesiredAccess) { HANDLE reopenedHandle = ReOpenFile(handle, desiredAccess, shareMode, flagsAndAttributes); if(reopenedHandle != INVALID_HANDLE_VALUE) { if(!CloseHandle(handle)) { Errors::fatalf("CloseHandle failed: GetLastError()=%u", GetLastError()); } handle = reopenedHandle; } else { desiredAccess = originalDesiredAccess; return asVFSResult(GetLastError()); } } nonBlocking = flags.nonBlocking; syncLevel = flags.syncLevel; return Result::success; } virtual Result setFileSize(U64 numBytes) override { RWMutex::ShareableLock lock(mutex); FILE_END_OF_FILE_INFO endOfFileInfo; endOfFileInfo.EndOfFile = makeLargeInt(numBytes); return SetFileInformationByHandle( handle, FileEndOfFileInfo, &endOfFileInfo, sizeof(endOfFileInfo)) ? Result::success : asVFSResult(GetLastError()); } virtual Result setFileTimes(bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) override { RWMutex::ShareableLock lock(mutex); // Translate the times to Windows file times. FILETIME lastAccessFileTime; if(setLastAccessTime) { lastAccessFileTime = wavmRealTimeToFileTime(lastAccessTime); } FILETIME lastWriteFileTime; if(setLastWriteTime) { lastWriteFileTime = wavmRealTimeToFileTime(lastWriteTime); } return SetFileTime(handle, nullptr, setLastAccessTime ? &lastAccessFileTime : nullptr, setLastWriteTime ? &lastWriteFileTime : nullptr) ? Result::success : asVFSResult(GetLastError()); } virtual Result openDir(DirEntStream*& outStream) override { RWMutex::ShareableLock lock(mutex); // Make a copy of the handle, so the FD and the DirEntStream can be closed independently. HANDLE duplicatedHandle = INVALID_HANDLE_VALUE; WAVM_ERROR_UNLESS(DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), &duplicatedHandle, 0, TRUE, DUPLICATE_SAME_ACCESS)); // Try to read the initial buffer-full of dirents to determine whether this is a directory. std::vector initialDirEnts; if(readDirEnts(duplicatedHandle, true, initialDirEnts) || GetLastError() == ERROR_NO_MORE_FILES) { outStream = new WindowsDirEntStream(duplicatedHandle, std::move(initialDirEnts)); return Result::success; } else { const Result result = GetLastError() == ERROR_INVALID_PARAMETER ? Result::isNotDirectory : asVFSResult(GetLastError()); // Close the duplicated handle. if(!CloseHandle(duplicatedHandle)) { Errors::fatalf("CloseHandle failed: GetLastError()=%u", GetLastError()); } return result; } } private: Platform::RWMutex mutex; HANDLE handle; DWORD desiredAccess; const DWORD shareMode; const DWORD flagsAndAttributes; bool nonBlocking; VFDSync syncLevel; Result readImpl(void* buffer, U32 numBufferBytesU32, OVERLAPPED* overlapped, Uptr* outNumBytesRead) { // If the FD has implicit syncing before reads, do it. if(syncLevel == VFDSync::contentsAfterWriteAndBeforeRead || syncLevel == VFDSync::contentsAndMetadataAfterWriteAndBeforeRead) { if(!FlushFileBuffers(handle)) { return asVFSResult(GetLastError()); } } // Do the read. DWORD numBytesRead = 0; if(!ReadFile(handle, buffer, numBufferBytesU32, &numBytesRead, overlapped)) { // "The ReadFile function may fail with ERROR_NOT_ENOUGH_QUOTA, which means the calling // process's buffer could not be page-locked." return GetLastError() == ERROR_NOT_ENOUGH_QUOTA ? Result::outOfMemory : asVFSResult(GetLastError()); } // Write the total number of bytes read. if(outNumBytesRead) { *outNumBytesRead = Uptr(numBytesRead); } return Result::success; } Result writeImpl(const void* buffer, U32 numBufferBytesU32, OVERLAPPED* overlapped, Uptr* outNumBytesWritten) { // Do the write. DWORD numBytesWritten = 0; if(!WriteFile(handle, buffer, numBufferBytesU32, &numBytesWritten, overlapped)) { // "The WriteFile function may fail with ERROR_NOT_ENOUGH_QUOTA, which means the calling // process's buffer could not be page-locked." return GetLastError() == ERROR_NOT_ENOUGH_QUOTA ? Result::outOfMemory : asVFSResult(GetLastError()); } // If the FD has implicit syncing after writes, do it. if(syncLevel != VFDSync::none) { if(!FlushFileBuffers(handle)) { return asVFSResult(GetLastError()); } } // Write the total number of bytes written. if(outNumBytesWritten) { *outNumBytesWritten = Uptr(numBytesWritten); } return Result::success; } }; struct WindowsStdFD : WindowsFD { WindowsStdFD(HANDLE inHandle, DWORD inDesiredAccess, VFDSync inImplicitSync) : WindowsFD(inHandle, inDesiredAccess, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, false, inImplicitSync) { } virtual Result close() { // The stdio FDs are shared, so don't close them. return Result::success; } }; VFD* Platform::getStdFD(StdDevice device) { static WindowsStdFD* stdinVFD = new WindowsStdFD(GetStdHandle(STD_INPUT_HANDLE), GENERIC_READ, VFDSync::none); static WindowsStdFD* stdoutVFD = new WindowsStdFD(GetStdHandle(STD_OUTPUT_HANDLE), FILE_APPEND_DATA, VFDSync::none); static WindowsStdFD* stderrVFD = new WindowsStdFD(GetStdHandle(STD_ERROR_HANDLE), FILE_APPEND_DATA, VFDSync::none); switch(device) { case StdDevice::in: return stdinVFD; case StdDevice::out: return stdoutVFD; case StdDevice::err: return stderrVFD; default: WAVM_UNREACHABLE(); }; } struct WindowsFS : HostFS { virtual Result open(const std::string& path, FileAccessMode accessMode, FileCreateMode createMode, VFD*& outFD, const VFDFlags& flags = VFDFlags{}) override; virtual Result getFileInfo(const std::string& path, FileInfo& outInfo) override; virtual Result setFileTimes(const std::string& path, bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) override; virtual Result openDir(const std::string& path, DirEntStream*& outStream) override; virtual Result renameFile(const std::string& oldPath, const std::string& newPath) override; virtual Result unlinkFile(const std::string& path) override; virtual Result removeDir(const std::string& path) override; virtual Result createDir(const std::string& path) override; static WindowsFS& get() { static WindowsFS windowsFS; return windowsFS; } protected: WindowsFS() {} }; HostFS& Platform::getHostFS() { return WindowsFS::get(); } Result WindowsFS::open(const std::string& path, FileAccessMode accessMode, FileCreateMode createMode, VFD*& outFD, const VFDFlags& flags) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } // Map the VFS accessMode/createMode to the appropriate Windows CreateFile arguments. DWORD desiredAccess = 0; DWORD shareMode = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE; DWORD creationDisposition = 0; DWORD flagsAndAttributes = 0; // From https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilew: // The file is being opened or created for a backup or restore operation. The system // ensures that the calling process overrides file security checks when the process has // SE_BACKUP_NAME and SE_RESTORE_NAME privileges. For more information, see Changing // Privileges in a Token. // You must set this flag to obtain a handle to a directory. A directory handle can be // passed to some functions instead of a file handle.For more information, see the Remarks // section. flagsAndAttributes |= FILE_FLAG_BACKUP_SEMANTICS; const DWORD writeOrAppend = flags.append ? FILE_APPEND_DATA : GENERIC_WRITE; switch(accessMode) { case FileAccessMode::none: desiredAccess = 0; break; case FileAccessMode::readOnly: desiredAccess = GENERIC_READ; break; case FileAccessMode::writeOnly: desiredAccess = writeOrAppend; break; case FileAccessMode::readWrite: desiredAccess = GENERIC_READ | writeOrAppend; break; default: WAVM_UNREACHABLE(); }; switch(createMode) { case FileCreateMode::createAlways: creationDisposition = CREATE_ALWAYS; break; case FileCreateMode::createNew: creationDisposition = CREATE_NEW; break; case FileCreateMode::openAlways: creationDisposition = OPEN_ALWAYS; break; case FileCreateMode::openExisting: creationDisposition = OPEN_EXISTING; break; case FileCreateMode::truncateExisting: creationDisposition = TRUNCATE_EXISTING; break; default: WAVM_UNREACHABLE(); }; // Try to open the file. HANDLE handle = CreateFileW(windowsPath.c_str(), desiredAccess, shareMode, nullptr, creationDisposition, flagsAndAttributes, nullptr); if(handle == INVALID_HANDLE_VALUE) { return asVFSResult(GetLastError()); } outFD = new WindowsFD( handle, desiredAccess, shareMode, flagsAndAttributes, flags.nonBlocking, flags.syncLevel); return Result::success; } Result WindowsFS::getFileInfo(const std::string& path, FileInfo& outInfo) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } // Try to open the file with no access requested. HANDLE handle = CreateFileW(windowsPath.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr); if(handle == INVALID_HANDLE_VALUE) { return asVFSResult(GetLastError()); } const Result result = getFileInfoByHandle(handle, outInfo); if(!CloseHandle(handle)) { Errors::fatalf("CloseHandle failed: GetLastError()=%u", GetLastError()); } return result; } Result WindowsFS::setFileTimes(const std::string& path, bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } // Try to open the file with no access requested. HANDLE handle = CreateFileW(windowsPath.c_str(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr); if(handle == INVALID_HANDLE_VALUE) { return asVFSResult(GetLastError()); } // Translate the times to Windows file times. FILETIME lastAccessFileTime; if(setLastAccessTime) { lastAccessFileTime = wavmRealTimeToFileTime(lastAccessTime); } FILETIME lastWriteFileTime; if(setLastWriteTime) { lastWriteFileTime = wavmRealTimeToFileTime(lastWriteTime); } const VFS::Result result = SetFileTime(handle, nullptr, setLastAccessTime ? &lastAccessFileTime : nullptr, setLastWriteTime ? &lastWriteFileTime : nullptr) ? Result::success : asVFSResult(GetLastError()); if(!CloseHandle(handle)) { Errors::fatalf("CloseHandle failed: GetLastError()=%u", GetLastError()); } return result; } Result WindowsFS::renameFile(const std::string& oldPath, const std::string& newPath) { // Convert the paths from UTF-8 VFS paths (with /) to UTF-16 Windows paths (with \). std::wstring oldWindowsPath; if(!getWindowsPath(oldPath, oldWindowsPath)) { return Result::invalidNameCharacter; } std::wstring newWindowsPath; if(!getWindowsPath(newPath, newWindowsPath)) { return Result::invalidNameCharacter; } return MoveFileW(oldWindowsPath.c_str(), newWindowsPath.c_str()) ? Result::success : asVFSResult(GetLastError()); } Result WindowsFS::unlinkFile(const std::string& path) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } return DeleteFileW(windowsPath.c_str()) ? Result::success : asVFSResult(GetLastError()); } Result WindowsFS::removeDir(const std::string& path) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } return RemoveDirectoryW(windowsPath.c_str()) ? Result::success : asVFSResult(GetLastError()); } Result WindowsFS::createDir(const std::string& path) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } return CreateDirectoryW(windowsPath.c_str(), nullptr) ? Result::success : asVFSResult(GetLastError()); } Result WindowsFS::openDir(const std::string& path, DirEntStream*& outStream) { // Convert the path from a UTF-8 VFS path (with /) to a UTF-16 Windows path (with \). std::wstring windowsPath; if(!getWindowsPath(path, windowsPath)) { return Result::invalidNameCharacter; } // Try to open the file. HANDLE handle = CreateFileW(windowsPath.c_str(), FILE_LIST_DIRECTORY, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr); if(handle == INVALID_HANDLE_VALUE) { return asVFSResult(GetLastError()); } // Try to read the initial buffer-full of dirents to determine whether this is a directory. std::vector initialDirEnts; if(readDirEnts(handle, true, initialDirEnts) || GetLastError() == ERROR_NO_MORE_FILES) { outStream = new WindowsDirEntStream(handle, std::move(initialDirEnts)); return Result::success; } else { const VFS::Result result = GetLastError() == ERROR_INVALID_PARAMETER ? Result::isNotDirectory : asVFSResult(GetLastError()); // Close the file handle we just opened if there was an error reading dirents from it. if(!CloseHandle(handle)) { Errors::fatalf("CloseHandle failed: GetLastError()=%u", GetLastError()); } return result; } } std::string Platform::getCurrentWorkingDirectory() { wchar_t buffer[MAX_PATH]; const DWORD numChars = GetCurrentDirectoryW(MAX_PATH, buffer); WAVM_ERROR_UNLESS(numChars); // Convert the Windows path (UTF-16 + \) to a VFS path (UTF-8 + /). std::string result; getVFSPath(buffer, numChars, result, "the result of GetCurrentDirectoryW"); return result; } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/MemoryWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Intrinsic.h" #include "WAVM/Platform/Memory.h" #include "WindowsPrivate.h" #include #include #include #include using namespace WAVM; using namespace WAVM::Platform; static Uptr internalGetPreferredVirtualPageSizeLog2() { SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); Uptr preferredVirtualPageSize = systemInfo.dwPageSize; // Verify our assumption that the virtual page size is a power of two. WAVM_ERROR_UNLESS(!(preferredVirtualPageSize & (preferredVirtualPageSize - 1))); return floorLogTwo(preferredVirtualPageSize); } Uptr Platform::getBytesPerPageLog2() { static Uptr preferredVirtualPageSizeLog2 = internalGetPreferredVirtualPageSizeLog2(); return preferredVirtualPageSizeLog2; } static U32 memoryAccessAsWin32Flag(MemoryAccess access) { switch(access) { default: case MemoryAccess::none: return PAGE_NOACCESS; case MemoryAccess::readOnly: return PAGE_READONLY; case MemoryAccess::readWrite: return PAGE_READWRITE; case MemoryAccess::readExecute: return PAGE_EXECUTE_READ; case MemoryAccess::readWriteExecute: return PAGE_EXECUTE_READWRITE; } } static bool isPageAligned(U8* address) { const Uptr addressBits = reinterpret_cast(address); return (addressBits & (getBytesPerPage() - 1)) == 0; } U8* Platform::allocateVirtualPages(Uptr numPages) { const Uptr pageSizeLog2 = getBytesPerPageLog2(); const Uptr numBytes = numPages << pageSizeLog2; return (U8*)VirtualAlloc(nullptr, numBytes, MEM_RESERVE, PAGE_NOACCESS); } #ifdef MEM_EXTENDED_PARAMETER_TYPE_BITS #define ENABLE_VIRTUALALLOC2 1 #else #define ENABLE_VIRTUALALLOC2 0 #endif #if ENABLE_VIRTUALALLOC2 typedef void*( __stdcall* VirtualAlloc2PointerType)(HANDLE, PVOID, size_t, ULONG, ULONG, PVOID, ULONG); static VirtualAlloc2PointerType loadVirtualAlloc2() { // VirtualAlloc2 is only available on Windows 10+ and Windows Server 2016+. Try to dynamically // look it up by name from the API DLL. HMODULE kernelBaseHandle = LoadLibraryA("kernelbase.dll"); if(!kernelBaseHandle) { return nullptr; } VirtualAlloc2PointerType virtualAlloc2 = reinterpret_cast( ::GetProcAddress(kernelBaseHandle, "VirtualAlloc2")); WAVM_ERROR_UNLESS(FreeLibrary(kernelBaseHandle)); return virtualAlloc2; } static VirtualAlloc2PointerType getVirtualAlloc2() { static const VirtualAlloc2PointerType virtualAlloc2 = loadVirtualAlloc2(); return virtualAlloc2; } #endif U8* Platform::allocateAlignedVirtualPages(Uptr numPages, Uptr alignmentLog2, U8*& outUnalignedBaseAddress) { const Uptr pageSizeLog2 = getBytesPerPageLog2(); const Uptr numBytes = numPages << pageSizeLog2; #if ENABLE_VIRTUALALLOC2 // If VirtualAlloc2 is available on the host Windows version, use it to allocate aligned memory. if(const VirtualAlloc2PointerType virtualAlloc2 = getVirtualAlloc2()) { MEM_ADDRESS_REQUIREMENTS addressRequirements{}; addressRequirements.Alignment = Uptr(1) << alignmentLog2; MEM_EXTENDED_PARAMETER alignmentParam{}; alignmentParam.Type = MemExtendedParameterAddressRequirements; alignmentParam.Pointer = &addressRequirements; outUnalignedBaseAddress = (U8*)(*virtualAlloc2)( GetCurrentProcess(), nullptr, numBytes, MEM_RESERVE, PAGE_NOACCESS, &alignmentParam, 1); return outUnalignedBaseAddress; } else #endif { if(alignmentLog2 > pageSizeLog2) { Uptr numTries = 0; while(true) { // Call VirtualAlloc with enough padding added to the size to align the allocation // within the unaligned mapping. const Uptr alignmentBytes = 1ull << alignmentLog2; void* probeResult = VirtualAlloc(nullptr, numBytes + alignmentBytes, MEM_RESERVE, PAGE_NOACCESS); if(!probeResult) { return nullptr; } const Uptr address = reinterpret_cast(probeResult); const Uptr alignedAddress = (address + alignmentBytes - 1) & ~(alignmentBytes - 1); if(numTries < 10) { // Free the unaligned+padded allocation, and try to immediately reserve just the // aligned middle part again. This can fail due to races with other threads, so // handle the VirtualAlloc failing by just retrying with a new unaligned+padded // allocation. WAVM_ERROR_UNLESS(VirtualFree(probeResult, 0, MEM_RELEASE)); outUnalignedBaseAddress = (U8*)VirtualAlloc(reinterpret_cast(alignedAddress), numBytes, MEM_RESERVE, PAGE_NOACCESS); if(outUnalignedBaseAddress) { return outUnalignedBaseAddress; } ++numTries; } else { // If the below free and re-alloc of the aligned address fails too many times, // just return the padded allocation. outUnalignedBaseAddress = (U8*)probeResult; return reinterpret_cast(alignedAddress); } } } else { outUnalignedBaseAddress = allocateVirtualPages(numPages); return outUnalignedBaseAddress; } } } bool Platform::commitVirtualPages(U8* baseVirtualAddress, Uptr numPages, MemoryAccess access) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); return baseVirtualAddress == VirtualAlloc(baseVirtualAddress, numPages << getBytesPerPageLog2(), MEM_COMMIT, memoryAccessAsWin32Flag(access)); } bool Platform::setVirtualPageAccess(U8* baseVirtualAddress, Uptr numPages, MemoryAccess access) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); DWORD oldProtection = 0; return VirtualProtect(baseVirtualAddress, numPages << getBytesPerPageLog2(), memoryAccessAsWin32Flag(access), &oldProtection) != 0; } void Platform::decommitVirtualPages(U8* baseVirtualAddress, Uptr numPages) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); auto result = VirtualFree(baseVirtualAddress, numPages << getBytesPerPageLog2(), MEM_DECOMMIT); if(baseVirtualAddress && !result) { Errors::fatal("VirtualFree(MEM_DECOMMIT) failed"); } } void Platform::freeVirtualPages(U8* baseVirtualAddress, Uptr numPages) { WAVM_ERROR_UNLESS(isPageAligned(baseVirtualAddress)); auto result = VirtualFree(baseVirtualAddress, 0, MEM_RELEASE); if(baseVirtualAddress && !result) { Errors::fatal("VirtualFree(MEM_RELEASE) failed"); } } void Platform::freeAlignedVirtualPages(U8* unalignedBaseAddress, Uptr numPages, Uptr alignmentLog2) { WAVM_ERROR_UNLESS(isPageAligned(unalignedBaseAddress)); auto result = VirtualFree(unalignedBaseAddress, 0, MEM_RELEASE); if(unalignedBaseAddress && !result) { Errors::fatal("VirtualFree(MEM_RELEASE) failed"); } } void Platform::flushInstructionCache(U8* baseAddress, Uptr numBytes) { FlushInstructionCache(GetCurrentProcess(), baseAddress, numBytes); } Uptr Platform::getPeakMemoryUsageBytes() { PROCESS_MEMORY_COUNTERS processMemoryCounters; WAVM_ERROR_UNLESS(GetProcessMemoryInfo( GetCurrentProcess(), &processMemoryCounters, sizeof(processMemoryCounters))); return processMemoryCounters.PeakWorkingSetSize; } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/MutexWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Mutex.h" #include "WindowsPrivate.h" using namespace WAVM; using namespace WAVM::Platform; Platform::Mutex::Mutex() { static_assert(sizeof(LockData) == sizeof(SRWLOCK), ""); static_assert(alignof(LockData) >= alignof(SRWLOCK), ""); InitializeSRWLock((SRWLOCK*)&lockData); } Platform::Mutex::~Mutex() { if(!TryAcquireSRWLockExclusive((SRWLOCK*)&lockData)) { Errors::fatal("Destroying Mutex that is locked"); } } void Platform::Mutex::lock() { AcquireSRWLockExclusive((SRWLOCK*)&lockData); #if WAVM_ENABLE_ASSERTS lockingThreadId.store(GetCurrentThreadId(), std::memory_order_relaxed); #endif } void Platform::Mutex::unlock() { #if WAVM_ENABLE_ASSERTS lockingThreadId.store(0, std::memory_order_relaxed); #endif ReleaseSRWLockExclusive((SRWLOCK*)&lockData); } #if WAVM_ENABLE_ASSERTS bool Platform::Mutex::isLockedByCurrentThread() { return lockingThreadId.load(std::memory_order_relaxed) == GetCurrentThreadId(); } #endif #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/RWMutexWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/RWMutex.h" #include "WindowsPrivate.h" using namespace WAVM; using namespace WAVM::Platform; Platform::RWMutex::RWMutex() { static_assert(sizeof(LockData) == sizeof(SRWLOCK), ""); static_assert(alignof(LockData) >= alignof(SRWLOCK), ""); InitializeSRWLock((SRWLOCK*)&lockData); } Platform::RWMutex::~RWMutex() { if(!TryAcquireSRWLockExclusive((SRWLOCK*)&lockData)) { Errors::fatal("Destroying RWMutex that is locked"); } } void Platform::RWMutex::lock(LockShareability shareability) { if(shareability == LockShareability::exclusive) { AcquireSRWLockExclusive((SRWLOCK*)&lockData); #if WAVM_ENABLE_ASSERTS exclusiveLockingThreadId.store(GetCurrentThreadId(), std::memory_order_relaxed); #endif } else { AcquireSRWLockShared((SRWLOCK*)&lockData); } } void Platform::RWMutex::unlock(LockShareability shareability) { if(shareability == LockShareability::exclusive) { #if WAVM_ENABLE_ASSERTS exclusiveLockingThreadId.store(0, std::memory_order_relaxed); #endif ReleaseSRWLockExclusive((SRWLOCK*)&lockData); } else { ReleaseSRWLockShared((SRWLOCK*)&lockData); } } #if WAVM_ENABLE_ASSERTS bool Platform::RWMutex::isExclusivelyLockedByCurrentThread() { return exclusiveLockingThreadId.load(std::memory_order_relaxed) == GetCurrentThreadId(); } #endif #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/RandomWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Random.h" #include "WindowsPrivate.h" #include using namespace WAVM; using namespace WAVM::Platform; void Platform::getCryptographicRNG(U8* outRandomBytes, Uptr numBytes) { WAVM_ERROR_UNLESS(numBytes <= ULONG_MAX); WAVM_ERROR_UNLESS(!BCryptGenRandom( nullptr, outRandomBytes, ULONG(numBytes), BCRYPT_USE_SYSTEM_PREFERRED_RNG)); } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/SignalWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Signal.h" #include "WAVM/Platform/Unwind.h" #include "WindowsPrivate.h" #include using namespace WAVM; using namespace WAVM::Platform; static bool translateSEHToSignal(EXCEPTION_POINTERS* exceptionPointers, Signal& outSignal) { // Decide how to handle this exception code. switch(exceptionPointers->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: { outSignal.type = Signal::Type::accessViolation; outSignal.accessViolation.address = exceptionPointers->ExceptionRecord->ExceptionInformation[1]; return true; } case EXCEPTION_STACK_OVERFLOW: outSignal.type = Signal::Type::stackOverflow; return true; case STATUS_INTEGER_DIVIDE_BY_ZERO: outSignal.type = Signal::Type::intDivideByZeroOrOverflow; return true; case STATUS_INTEGER_OVERFLOW: outSignal.type = Signal::Type::intDivideByZeroOrOverflow; return true; default: return false; } } // __try/__except doesn't support locals with destructors in the same function, so this is just // the body of the sehSignalFilterFunction __try pulled out into a function. static LONG CALLBACK sehSignalFilterFunctionNonReentrant(EXCEPTION_POINTERS* exceptionPointers, bool (*filter)(void*, Signal, UnwindState&&), void* context) { Signal signal; if(!translateSEHToSignal(exceptionPointers, signal)) { return EXCEPTION_CONTINUE_SEARCH; } else { // Create an unwind state from the exception context. UnwindState state = makeUnwindStateFromSignalContext(exceptionPointers->ContextRecord); if((*filter)(context, signal, std::move(state))) { return EXCEPTION_EXECUTE_HANDLER; } else { return EXCEPTION_CONTINUE_SEARCH; } } } static LONG CALLBACK sehSignalFilterFunction(EXCEPTION_POINTERS* exceptionPointers, bool (*filter)(void*, Signal, UnwindState&&), void* context) { __try { return sehSignalFilterFunctionNonReentrant(exceptionPointers, filter, context); } __except(Errors::fatal("reentrant exception"), true) { WAVM_UNREACHABLE(); } } bool Platform::catchSignals(void (*thunk)(void*), bool (*filter)(void*, Signal, UnwindState&&), void* context) { initThread(); __try { (*thunk)(context); return false; } __except(sehSignalFilterFunction(GetExceptionInformation(), filter, context)) { // After a stack overflow, the stack will be left in a damaged state. Let the CRT repair it. WAVM_ERROR_UNLESS(_resetstkoflw()); return true; } } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/ThreadWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Platform/Thread.h" #include "WindowsPrivate.h" #include #include #define POISON_FORKED_STACK_SELF_POINTERS 0 using namespace WAVM; using namespace WAVM::Platform; static thread_local bool isThreadInitialized = false; struct Platform::Thread { HANDLE handle = INVALID_HANDLE_VALUE; DWORD id = 0xffffffff; std::atomic numRefs{2}; I64 result = -1; void releaseRef() { if(--numRefs == 0) { delete this; } } private: ~Thread() { WAVM_ERROR_UNLESS(CloseHandle(handle)); handle = nullptr; id = 0; } }; struct CreateThreadArgs { Thread* thread{nullptr}; I64 (*entry)(void*){nullptr}; void* entryArgument{nullptr}; ~CreateThreadArgs() { if(thread) { thread->releaseRef(); thread = nullptr; } } }; void Platform::initThread() { if(!isThreadInitialized) { isThreadInitialized = true; // Ensure that there's enough space left on the stack in the case of a stack overflow to // prepare the stack trace. ULONG stackOverflowReserveBytes = 32768; SetThreadStackGuarantee(&stackOverflowReserveBytes); } } static DWORD WINAPI createThreadEntry(void* argsVoid) { initThread(); std::unique_ptr args((CreateThreadArgs*)argsVoid); args->thread->result = (*args->entry)(args->entryArgument); return 0; } struct ProcessorGroupInfo { U32 numProcessors; }; static std::vector getProcessorGroupInfos() { std::vector results; const U16 numProcessorGroups = GetActiveProcessorGroupCount(); for(U16 groupIndex = 0; groupIndex < numProcessorGroups; ++groupIndex) { results.push_back({GetActiveProcessorCount(groupIndex)}); } return results; } Platform::Thread* Platform::createThread(Uptr numStackBytes, I64 (*entry)(void*), void* entryArgument) { CreateThreadArgs* args = new CreateThreadArgs; auto thread = new Thread; args->thread = thread; args->entry = entry; args->entryArgument = entryArgument; thread->handle = CreateThread(nullptr, numStackBytes, createThreadEntry, args, 0, &args->thread->id); // On systems with more than 64 logical processors, Windows splits them into processor groups, // and a thread may only be assigned to run on a single processor group. By default, all threads // in a process are assigned to a processor group that is chosen when creating the process. // To allow running threads on all the processors in a system, assign new threads to processor // groups in a round robin manner. static std::vector processorGroupInfos = getProcessorGroupInfos(); static std::atomic nextProcessorGroup{0}; GROUP_AFFINITY groupAffinity; memset(&groupAffinity, 0, sizeof(groupAffinity)); groupAffinity.Group = nextProcessorGroup++ % processorGroupInfos.size(); groupAffinity.Mask = (1ull << U64(processorGroupInfos[groupAffinity.Group].numProcessors)) - 1; if(!SetThreadGroupAffinity(thread->handle, &groupAffinity, nullptr)) { Errors::fatalf("SetThreadGroupAffinity failed: GetLastError=%x", GetLastError()); } return args->thread; } void Platform::detachThread(Thread* thread) { WAVM_ASSERT(thread); thread->releaseRef(); } I64 Platform::joinThread(Thread* thread) { DWORD waitResult = WaitForSingleObject(thread->handle, INFINITE); switch(waitResult) { case WAIT_OBJECT_0: break; case WAIT_ABANDONED: Errors::fatal("WaitForSingleObject(INFINITE) on thread returned WAIT_ABANDONED"); break; case WAIT_TIMEOUT: Errors::fatal("WaitForSingleObject(INFINITE) on thread returned WAIT_TIMEOUT"); break; case WAIT_FAILED: default: Errors::fatalf( "WaitForSingleObject(INFINITE) on thread returned WAIT_FAILED. GetLastError()=%u", GetLastError()); break; }; const I64 result = thread->result; thread->releaseRef(); return result; } static Uptr getNumberOfHardwareThreadsImpl() { Uptr result = 0; const U16 numProcessorGroups = GetActiveProcessorGroupCount(); for(U16 groupIndex = 0; groupIndex < numProcessorGroups; ++groupIndex) { result += GetActiveProcessorCount(groupIndex); } return result; } Uptr Platform::getNumberOfHardwareThreads() { static Uptr cachedNumberOfHardwareThreads = getNumberOfHardwareThreadsImpl(); return cachedNumberOfHardwareThreads; } void Platform::yieldToAnotherThread() { SwitchToThread(); } #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/UnwindWindows.cpp ================================================ #if WAVM_PLATFORM_WINDOWS #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Platform/CPU.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Unwind.h" #include "WindowsPrivate.h" #include using namespace WAVM; using namespace WAVM::Platform; #if defined(_M_ARM64) inline DWORD64 getContextIP(const CONTEXT& ctx) { return ctx.Pc; } #elif defined(_M_X64) inline DWORD64 getContextIP(const CONTEXT& ctx) { return ctx.Rip; } #endif UnwindRegistration* Platform::registerUnwindData(const U8* imageBase, Uptr imageNumPages, const UnwindInfo& unwindInfo) { #ifdef _WIN64 if(!unwindInfo.data) { return nullptr; } const U32 numFunctions = (U32)(unwindInfo.dataNumBytes / sizeof(RUNTIME_FUNCTION)); // Register our manually fixed up copy of the function table. RUNTIME_FUNCTION* runtimeFunctions = (RUNTIME_FUNCTION*)unwindInfo.data; if(!RtlAddFunctionTable(runtimeFunctions, numFunctions, reinterpret_cast(imageBase))) { Errors::fatal("RtlAddFunctionTable failed"); } return reinterpret_cast(runtimeFunctions); #else Errors::fatal("registerUnwindData isn't implemented on 32-bit Windows"); #endif } void Platform::deregisterUnwindData(UnwindRegistration* registration) { #ifdef _WIN64 RtlDeleteFunctionTable(reinterpret_cast(registration)); #else Errors::fatal("deregisterUnwindData isn't implemented on 32-bit Windows"); #endif } // // Platform-independent unwind API implementation // // The internal structure stored in UnwindState::storage struct UnwindStateImpl { CONTEXT context; DWORD64 imageBase; RUNTIME_FUNCTION* runtimeFunction; Iptr ipAdjustment; bool valid; }; static_assert(sizeof(UnwindStateImpl) <= WAVM_PLATFORM_UNWIND_STATE_SIZE, "UnwindStateImpl exceeds WAVM_PLATFORM_UNWIND_STATE_SIZE"); static_assert(alignof(UnwindStateImpl) <= WAVM_PLATFORM_UNWIND_STATE_ALIGN, "UnwindStateImpl alignment exceeds WAVM_PLATFORM_UNWIND_STATE_ALIGN"); static UnwindStateImpl& getImpl(U8* storage) { return *reinterpret_cast(storage); } static const UnwindStateImpl& getImpl(const U8* storage) { return *reinterpret_cast(storage); } UnwindState::UnwindState(const UnwindState& other) { getImpl(storage) = getImpl(other.storage); } UnwindState::UnwindState(UnwindState&& other) noexcept { getImpl(storage) = getImpl(other.storage); } UnwindState& UnwindState::operator=(const UnwindState& other) { getImpl(storage) = getImpl(other.storage); return *this; } UnwindState& UnwindState::operator=(UnwindState&& other) noexcept { getImpl(storage) = getImpl(other.storage); return *this; } static void setUnwindStateRuntimeFunctionAndImageBase(UnwindStateImpl& impl) { // Look up the unwind info for the current position impl.runtimeFunction = RtlLookupFunctionEntry(getContextIP(impl.context), &impl.imageBase, nullptr); } // Must not be inlined: the step() call below skips capture() itself, so if capture() were inlined // into the caller, that step would skip the caller's frame instead. WAVM_FORCENOINLINE UnwindState UnwindState::capture(Uptr numFramesToSkip) { UnwindState state; UnwindStateImpl& impl = getImpl(state.storage); RtlCaptureContext(&impl.context); setUnwindStateRuntimeFunctionAndImageBase(impl); impl.valid = true; // Step past capture() itself so frame 0 is the caller. if(state.step() != UnwindStepResult::success) { impl.valid = false; return state; } // Skip additional frames as requested. for(Uptr i = 0; i < numFramesToSkip; ++i) { if(state.step() != UnwindStepResult::success) { break; } } return state; } UnwindState Platform::makeUnwindStateFromSignalContext(void* contextPtr) { UnwindState state; const CONTEXT& context = *static_cast(contextPtr); UnwindStateImpl& impl = getImpl(state.storage); memcpy(&impl.context, &context, sizeof(CONTEXT)); setUnwindStateRuntimeFunctionAndImageBase(impl); impl.ipAdjustment = 0; impl.valid = true; return state; } UnwindStepResult UnwindState::step() { UnwindStateImpl& impl = getImpl(storage); WAVM_ASSERT(impl.valid); if(getContextIP(impl.context) == 0) { return UnwindStepResult::end; } if(!impl.runtimeFunction) { #if defined(_M_ARM64) impl.context.Pc = impl.context.Lr; #elif defined(_M_X64) impl.context.Rip = *reinterpret_cast(impl.context.Rsp); impl.context.Rsp += 8; #endif } else { // Use SEH unwind info void* handlerData; U64 establisherFrame; RtlVirtualUnwind(UNW_FLAG_NHANDLER, impl.imageBase, getContextIP(impl.context), impl.runtimeFunction, &impl.context, &handlerData, &establisherFrame, nullptr); } if(getContextIP(impl.context) == 0) { return UnwindStepResult::end; } // Look up unwind info for new position setUnwindStateRuntimeFunctionAndImageBase(impl); // After stepping, all subsequent frames are return addresses that need -1 to get the // call-site address. impl.ipAdjustment = 1; return UnwindStepResult::success; } bool UnwindState::getProcInfo(UnwindProcInfo& outInfo) const { const UnwindStateImpl& impl = getImpl(storage); WAVM_ASSERT(impl.valid); if(!impl.runtimeFunction) { return false; } outInfo.startIP = Uptr(impl.imageBase + impl.runtimeFunction->BeginAddress); #if defined(_M_ARM64) // ARM64 RUNTIME_FUNCTION uses a union: Flag (bits [1:0]) distinguishes packed vs xdata. DWORD unwindData = impl.runtimeFunction->UnwindData; DWORD flag = unwindData & 0x3; if(flag != 0) { // Packed format: FunctionLength in bits [12:2], in 4-byte instruction units DWORD functionLength = (unwindData >> 2) & 0x7FF; outInfo.endIP = outInfo.startIP + functionLength * 4; outInfo.unwindData = nullptr; outInfo.handler = 0; outInfo.lsda = 0; } else { // UnwindData is an RVA to .xdata record const U8* xdata = reinterpret_cast(impl.imageBase + unwindData); DWORD header = *reinterpret_cast(xdata); DWORD functionLength = header & 0x3FFFF; // bits [17:0], in 4-byte units outInfo.endIP = outInfo.startIP + functionLength * 4; outInfo.unwindData = xdata; bool hasExceptionData = (header >> 20) & 1; // X bit bool packedEpilog = (header >> 21) & 1; // E bit DWORD epilogCount = (header >> 22) & 0x1F; // bits [26:22] DWORD codeWords = (header >> 27) & 0x1F; // bits [31:27] const U8* ptr = xdata + 4; // Extended header when codeWords == 0 and E == 0 if(codeWords == 0 && !packedEpilog) { DWORD extHeader = *reinterpret_cast(ptr); epilogCount = extHeader & 0xFFFF; codeWords = (extHeader >> 16) & 0xFF; ptr += 4; } // Skip epilog scopes (4 bytes each, only present when E == 0) if(!packedEpilog) { ptr += epilogCount * 4; } // Skip unwind codes ptr += codeWords * 4; if(hasExceptionData) { outInfo.handler = Uptr(impl.imageBase + *reinterpret_cast(ptr)); outInfo.lsda = Uptr(ptr + 4); } else { outInfo.handler = 0; outInfo.lsda = 0; } } #elif defined(_M_X64) outInfo.endIP = Uptr(impl.imageBase + impl.runtimeFunction->EndAddress); // Get UNWIND_INFO pointer const U8* unwindInfo = reinterpret_cast(impl.imageBase + impl.runtimeFunction->UnwindData); outInfo.unwindData = unwindInfo; // Parse UNWIND_INFO to find LSDA and handler // UNWIND_INFO structure: // Offset 0: Version:3, Flags:5 // Offset 1: SizeOfProlog // Offset 2: CountOfUnwindCodes // Offset 3: FrameRegister:4, FrameOffset:4 // Offset 4: UnwindCodes[CountOfUnwindCodes] (each 2 bytes) // After codes (aligned): ExceptionHandler (if UNW_FLAG_EHANDLER or UNW_FLAG_UHANDLER) // After handler: ExceptionData (LSDA) U8 flags = (unwindInfo[0] >> 3) & 0x1F; U8 countOfUnwindCodes = unwindInfo[2]; // Round up to even number for alignment Uptr codesSize = ((countOfUnwindCodes + 1) & ~1) * 2; const U8* afterCodes = unwindInfo + 4 + codesSize; if(flags & (UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER)) { outInfo.handler = Uptr(impl.imageBase + *reinterpret_cast(afterCodes)); outInfo.lsda = Uptr(afterCodes + 4); } else { outInfo.handler = 0; outInfo.lsda = 0; } #endif outInfo.unwindDataSize = 0; return true; } std::optional UnwindState::getRegister(HostCPURegister reg) const { const UnwindStateImpl& impl = getImpl(storage); WAVM_ASSERT(impl.valid); #if defined(_M_ARM64) switch(reg) { case AArch64CPURegister::X0: return Uptr(impl.context.X[0]); case AArch64CPURegister::X1: return Uptr(impl.context.X[1]); case AArch64CPURegister::X2: return Uptr(impl.context.X[2]); case AArch64CPURegister::X3: return Uptr(impl.context.X[3]); case AArch64CPURegister::X4: return Uptr(impl.context.X[4]); case AArch64CPURegister::X5: return Uptr(impl.context.X[5]); case AArch64CPURegister::X6: return Uptr(impl.context.X[6]); case AArch64CPURegister::X7: return Uptr(impl.context.X[7]); case AArch64CPURegister::X8: return Uptr(impl.context.X[8]); case AArch64CPURegister::X9: return Uptr(impl.context.X[9]); case AArch64CPURegister::X10: return Uptr(impl.context.X[10]); case AArch64CPURegister::X11: return Uptr(impl.context.X[11]); case AArch64CPURegister::X12: return Uptr(impl.context.X[12]); case AArch64CPURegister::X13: return Uptr(impl.context.X[13]); case AArch64CPURegister::X14: return Uptr(impl.context.X[14]); case AArch64CPURegister::X15: return Uptr(impl.context.X[15]); case AArch64CPURegister::X16: return Uptr(impl.context.X[16]); case AArch64CPURegister::X17: return Uptr(impl.context.X[17]); case AArch64CPURegister::X18: return Uptr(impl.context.X[18]); case AArch64CPURegister::X19: return Uptr(impl.context.X[19]); case AArch64CPURegister::X20: return Uptr(impl.context.X[20]); case AArch64CPURegister::X21: return Uptr(impl.context.X[21]); case AArch64CPURegister::X22: return Uptr(impl.context.X[22]); case AArch64CPURegister::X23: return Uptr(impl.context.X[23]); case AArch64CPURegister::X24: return Uptr(impl.context.X[24]); case AArch64CPURegister::X25: return Uptr(impl.context.X[25]); case AArch64CPURegister::X26: return Uptr(impl.context.X[26]); case AArch64CPURegister::X27: return Uptr(impl.context.X[27]); case AArch64CPURegister::X28: return Uptr(impl.context.X[28]); case AArch64CPURegister::FP: return Uptr(impl.context.Fp); case AArch64CPURegister::LR: return Uptr(impl.context.Lr); case AArch64CPURegister::SP: return Uptr(impl.context.Sp); case AArch64CPURegister::PC: return Uptr(impl.context.Pc) - impl.ipAdjustment; default: WAVM_UNREACHABLE(); } #elif defined(_M_X64) switch(reg) { case X86CPURegister::RAX: return Uptr(impl.context.Rax); case X86CPURegister::RBX: return Uptr(impl.context.Rbx); case X86CPURegister::RCX: return Uptr(impl.context.Rcx); case X86CPURegister::RDX: return Uptr(impl.context.Rdx); case X86CPURegister::RSI: return Uptr(impl.context.Rsi); case X86CPURegister::RDI: return Uptr(impl.context.Rdi); case X86CPURegister::RBP: return Uptr(impl.context.Rbp); case X86CPURegister::RSP: return Uptr(impl.context.Rsp); case X86CPURegister::R8: return Uptr(impl.context.R8); case X86CPURegister::R9: return Uptr(impl.context.R9); case X86CPURegister::R10: return Uptr(impl.context.R10); case X86CPURegister::R11: return Uptr(impl.context.R11); case X86CPURegister::R12: return Uptr(impl.context.R12); case X86CPURegister::R13: return Uptr(impl.context.R13); case X86CPURegister::R14: return Uptr(impl.context.R14); case X86CPURegister::R15: return Uptr(impl.context.R15); case X86CPURegister::RIP: return Uptr(impl.context.Rip) - impl.ipAdjustment; default: WAVM_UNREACHABLE(); } #endif return std::nullopt; } // // UnwindOp iteration for Windows // #if defined(_M_ARM64) // ARM64 unwind opcode types, decoded from xdata byte codes enum ARM64UnwindOpType : U8 { ARM64_UOP_ALLOC_S = 0, ARM64_UOP_SAVE_R19R20_X, ARM64_UOP_SAVE_FPLR, ARM64_UOP_SAVE_FPLR_X, ARM64_UOP_ALLOC_M, ARM64_UOP_SAVE_REGP, ARM64_UOP_SAVE_REGP_X, ARM64_UOP_SAVE_REG, ARM64_UOP_SAVE_REG_X, ARM64_UOP_SAVE_LRPAIR, ARM64_UOP_SAVE_FREGP, ARM64_UOP_SAVE_FREGP_X, ARM64_UOP_SAVE_FREG, ARM64_UOP_SAVE_FREG_X, ARM64_UOP_ALLOC_L, ARM64_UOP_SET_FP, ARM64_UOP_ADD_FP, ARM64_UOP_NOP, ARM64_UOP_END, ARM64_UOP_END_C, ARM64_UOP_SAVE_NEXT, ARM64_UOP_PAC_SIGN_LR, }; struct DecodedARM64Op { U8 type; U32 reg; I64 operand; }; // Returns the byte size of an ARM64 unwind code given its first byte. static Uptr getARM64UnwindCodeSize(U8 b0) { if(b0 <= 0xBF) { return 1; } if(b0 <= 0xDF) { return 2; } switch(b0) { case 0xE0: return 4; // alloc_l case 0xE2: return 2; // add_fp case 0xE7: return 3; // save_any_reg case 0xF8: return 2; case 0xF9: return 3; case 0xFA: return 4; case 0xFB: return 5; default: return 1; } } // Decode one ARM64 unwind code at the given byte offset. // Returns the number of bytes consumed, or 0 on error. static Uptr decodeARM64UnwindCode(const U8* codes, Uptr offset, Uptr codeBytes, DecodedARM64Op* out) { if(offset >= codeBytes) { return 0; } U8 b0 = codes[offset]; Uptr size = getARM64UnwindCodeSize(b0); if(offset + size > codeBytes) { return 0; } if(!out) { return size; } out->type = ARM64_UOP_NOP; out->reg = 0; out->operand = 0; U8 b1 = size >= 2 ? codes[offset + 1] : 0; // 1-byte opcodes: 0x00-0xBF if(b0 <= 0x1F) { out->type = ARM64_UOP_ALLOC_S; out->operand = (b0 & 0x1F) * 16; } else if(b0 <= 0x3F) { out->type = ARM64_UOP_SAVE_R19R20_X; out->reg = 19; out->operand = (b0 & 0x1F) * 8; } else if(b0 <= 0x7F) { out->type = ARM64_UOP_SAVE_FPLR; out->reg = 29; out->operand = (b0 & 0x3F) * 8; } else if(b0 <= 0xBF) { out->type = ARM64_UOP_SAVE_FPLR_X; out->reg = 29; out->operand = I64((b0 & 0x3F) + 1) * 8; } // 2-byte opcodes: 0xC0-0xDF else if(b0 <= 0xC7) { out->type = ARM64_UOP_ALLOC_M; out->operand = I64(((U32)(b0 & 0x07) << 8) | b1) * 16; } else if(b0 <= 0xCB) { U32 X = ((b0 & 0x03) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_REGP; out->reg = 19 + X; out->operand = (b1 & 0x3F) * 8; } else if(b0 <= 0xCF) { U32 X = ((b0 & 0x03) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_REGP_X; out->reg = 19 + X; out->operand = I64((b1 & 0x3F) + 1) * 8; } else if(b0 <= 0xD3) { U32 X = ((b0 & 0x03) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_REG; out->reg = 19 + X; out->operand = (b1 & 0x3F) * 8; } else if(b0 <= 0xD5) { U32 X = ((b0 & 0x01) << 3) | (b1 >> 5); out->type = ARM64_UOP_SAVE_REG_X; out->reg = 19 + X; out->operand = I64((b1 & 0x1F) + 1) * 8; } else if(b0 <= 0xD7) { U32 X = ((b0 & 0x01) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_LRPAIR; out->reg = 19 + 2 * X; out->operand = (b1 & 0x3F) * 8; } else if(b0 <= 0xD9) { U32 X = ((b0 & 0x01) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_FREGP; out->reg = 8 + X; out->operand = (b1 & 0x3F) * 8; } else if(b0 <= 0xDB) { U32 X = ((b0 & 0x01) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_FREGP_X; out->reg = 8 + X; out->operand = I64((b1 & 0x3F) + 1) * 8; } else if(b0 <= 0xDD) { U32 X = ((b0 & 0x01) << 2) | (b1 >> 6); out->type = ARM64_UOP_SAVE_FREG; out->reg = 8 + X; out->operand = (b1 & 0x3F) * 8; } else if(b0 == 0xDE) { out->type = ARM64_UOP_SAVE_FREG_X; out->reg = 8 + (b1 >> 5); out->operand = I64((b1 & 0x1F) + 1) * 8; } // Fixed opcodes 0xE0+ else { switch(b0) { case 0xE0: out->type = ARM64_UOP_ALLOC_L; out->operand = I64(((U32)b1 << 16) | ((U32)codes[offset + 2] << 8) | codes[offset + 3]) * 16; break; case 0xE1: out->type = ARM64_UOP_SET_FP; out->reg = 29; break; case 0xE2: out->type = ARM64_UOP_ADD_FP; out->reg = 29; out->operand = b1 * 8; break; case 0xE3: out->type = ARM64_UOP_NOP; break; case 0xE4: out->type = ARM64_UOP_END; break; case 0xE5: out->type = ARM64_UOP_END_C; break; case 0xE6: out->type = ARM64_UOP_SAVE_NEXT; break; case 0xFC: out->type = ARM64_UOP_PAC_SIGN_LR; out->reg = 30; break; default: break; } } return size; } Uptr UnwindProcInfo::decodeUnwindOps(UnwindOp* outOps, Uptr maxOps) const { if(!unwindData) { return 0; } // Re-parse xdata header to locate the unwind code bytes. // Same header format as getProcInfo, but here we need the code stream. DWORD header = *reinterpret_cast(unwindData); bool packedEpilog = (header >> 21) & 1; DWORD epilogCount = (header >> 22) & 0x1F; DWORD codeWords = (header >> 27) & 0x1F; const U8* ptr = unwindData + 4; if(codeWords == 0 && !packedEpilog) { DWORD extHeader = *reinterpret_cast(ptr); epilogCount = extHeader & 0xFFFF; codeWords = (extHeader >> 16) & 0xFF; ptr += 4; } if(!packedEpilog) { ptr += epilogCount * 4; } const U8* codes = ptr; Uptr codeBytes = codeWords * 4; // Count prolog ops and check for end/end_c terminator. Uptr numPrologOps = 0; bool hasEnd = false; Uptr byteOffset = 0; while(byteOffset < codeBytes) { U8 b0 = codes[byteOffset]; Uptr codeSize = getARM64UnwindCodeSize(b0); if(byteOffset + codeSize > codeBytes) { break; } if(b0 == 0xE4 || b0 == 0xE5) { hasEnd = true; break; } ++numPrologOps; byteOffset += codeSize; } Uptr numOps = numPrologOps + (hasEnd ? 1 : 0); if(!outOps) { return numOps; } // ARM64 xdata stores prolog codes in descending offset order (last prolog // instruction first). Write prolog codes to reversed positions; redirect // the end/end_c terminator to the end of the output array. Uptr prologToWrite = (numPrologOps < maxOps) ? numPrologOps : maxOps; Uptr writeIndex = prologToWrite; byteOffset = 0; while(byteOffset < codeBytes) { DecodedARM64Op decoded; Uptr consumed = decodeARM64UnwindCode(codes, byteOffset, codeBytes, &decoded); if(consumed == 0) { break; } bool isEnd = codes[byteOffset] == 0xE4 || codes[byteOffset] == 0xE5; Uptr dest = isEnd ? prologToWrite : --writeIndex; if(dest >= maxOps) { break; } outOps[dest].codeOffset = dest * 4; outOps[dest].opcode = decoded.type; outOps[dest].reg = decoded.reg; outOps[dest].operand = decoded.operand; byteOffset += consumed; if(isEnd) { break; } } return numOps; } void UnwindOp::format(StringBuilderBase& sb) const { switch(opcode) { case ARM64_UOP_ALLOC_S: sb.appendf("@%" WAVM_PRIuPTR ": alloc_s #%" PRId64, codeOffset, operand); break; case ARM64_UOP_SAVE_R19R20_X: sb.appendf("@%" WAVM_PRIuPTR ": save_r19r20_x [sp, #-%" PRId64 "]!", codeOffset, operand); break; case ARM64_UOP_SAVE_FPLR: sb.appendf("@%" WAVM_PRIuPTR ": save_fplr [sp, #%" PRId64 "]", codeOffset, operand); break; case ARM64_UOP_SAVE_FPLR_X: sb.appendf("@%" WAVM_PRIuPTR ": save_fplr_x [sp, #-%" PRId64 "]!", codeOffset, operand); break; case ARM64_UOP_ALLOC_M: sb.appendf("@%" WAVM_PRIuPTR ": alloc_m #%" PRId64, codeOffset, operand); break; case ARM64_UOP_SAVE_REGP: sb.appendf( "@%" WAVM_PRIuPTR ": save_regp x%u [sp, #%" PRId64 "]", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_REGP_X: sb.appendf( "@%" WAVM_PRIuPTR ": save_regp_x x%u [sp, #-%" PRId64 "]!", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_REG: sb.appendf("@%" WAVM_PRIuPTR ": save_reg x%u [sp, #%" PRId64 "]", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_REG_X: sb.appendf( "@%" WAVM_PRIuPTR ": save_reg_x x%u [sp, #-%" PRId64 "]!", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_LRPAIR: sb.appendf( "@%" WAVM_PRIuPTR ": save_lrpair x%u, lr [sp, #%" PRId64 "]", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_FREGP: sb.appendf( "@%" WAVM_PRIuPTR ": save_fregp d%u [sp, #%" PRId64 "]", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_FREGP_X: sb.appendf( "@%" WAVM_PRIuPTR ": save_fregp_x d%u [sp, #-%" PRId64 "]!", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_FREG: sb.appendf( "@%" WAVM_PRIuPTR ": save_freg d%u [sp, #%" PRId64 "]", codeOffset, reg, operand); break; case ARM64_UOP_SAVE_FREG_X: sb.appendf( "@%" WAVM_PRIuPTR ": save_freg_x d%u [sp, #-%" PRId64 "]!", codeOffset, reg, operand); break; case ARM64_UOP_ALLOC_L: sb.appendf("@%" WAVM_PRIuPTR ": alloc_l #%" PRId64, codeOffset, operand); break; case ARM64_UOP_SET_FP: sb.appendf("@%" WAVM_PRIuPTR ": set_fp", codeOffset); break; case ARM64_UOP_ADD_FP: sb.appendf("@%" WAVM_PRIuPTR ": add_fp #%" PRId64, codeOffset, operand); break; case ARM64_UOP_NOP: sb.appendf("@%" WAVM_PRIuPTR ": nop", codeOffset); break; case ARM64_UOP_END: sb.appendf("@%" WAVM_PRIuPTR ": end", codeOffset); break; case ARM64_UOP_END_C: sb.appendf("@%" WAVM_PRIuPTR ": end_c", codeOffset); break; case ARM64_UOP_SAVE_NEXT: sb.appendf("@%" WAVM_PRIuPTR ": save_next", codeOffset); break; case ARM64_UOP_PAC_SIGN_LR: sb.appendf("@%" WAVM_PRIuPTR ": pac_sign_lr", codeOffset); break; default: sb.appendf("@%" WAVM_PRIuPTR ": unknown (opcode 0x%02x)", codeOffset, opcode); break; } } #elif defined(_M_X64) // x86-64 UNWIND_CODE operation types enum WindowsUnwindOpType { UWOP_PUSH_NONVOL = 0, UWOP_ALLOC_LARGE = 1, UWOP_ALLOC_SMALL = 2, UWOP_SET_FPREG = 3, UWOP_SAVE_NONVOL = 4, UWOP_SAVE_NONVOL_FAR = 5, UWOP_EPILOG = 6, UWOP_SPARE_CODE = 7, UWOP_SAVE_XMM128 = 8, UWOP_SAVE_XMM128_FAR = 9, UWOP_PUSH_MACHFRAME = 10 }; struct DecodedSlot { U8 codeOffset; U8 opcode; U8 reg; Uptr offset; }; // Decode an unwind op at the given slot index, returning the number of slots consumed. // If outSlot is non-null, fills it with the decoded values. static Uptr decodeUnwindOpAtSlot(const U8* codes, Uptr slotIndex, DecodedSlot* outSlot) { U8 codeOffset = codes[slotIndex * 2]; U8 opInfo = codes[slotIndex * 2 + 1]; U8 opType = opInfo & 0x0F; U8 opReg = opInfo >> 4; Uptr slotsConsumed = 1; Uptr offset = 0; switch(opType) { case UWOP_PUSH_NONVOL: offset = 8; break; case UWOP_ALLOC_LARGE: if(opReg == 0) { offset = *reinterpret_cast(&codes[(slotIndex + 1) * 2]) * 8; slotsConsumed = 2; } else { offset = *reinterpret_cast(&codes[(slotIndex + 1) * 2]); slotsConsumed = 3; } break; case UWOP_ALLOC_SMALL: offset = (opReg + 1) * 8; break; case UWOP_SET_FPREG: break; case UWOP_SAVE_NONVOL: offset = *reinterpret_cast(&codes[(slotIndex + 1) * 2]) * 8; slotsConsumed = 2; break; case UWOP_SAVE_NONVOL_FAR: offset = *reinterpret_cast(&codes[(slotIndex + 1) * 2]); slotsConsumed = 3; break; case UWOP_SAVE_XMM128: offset = *reinterpret_cast(&codes[(slotIndex + 1) * 2]) * 16; slotsConsumed = 2; break; case UWOP_SAVE_XMM128_FAR: offset = *reinterpret_cast(&codes[(slotIndex + 1) * 2]); slotsConsumed = 3; break; case UWOP_PUSH_MACHFRAME: break; default: break; } if(outSlot) { outSlot->codeOffset = codeOffset; outSlot->opcode = opType; outSlot->reg = opReg; outSlot->offset = offset; } return slotsConsumed; } Uptr UnwindProcInfo::decodeUnwindOps(UnwindOp* outOps, Uptr maxOps) const { if(!unwindData) { return 0; } Uptr slotCount = unwindData[2]; // CountOfUnwindCodes const U8* codes = unwindData + 4; // First pass: count ops Uptr numOps = 0; Uptr slotIndex = 0; while(slotIndex < slotCount) { ++numOps; slotIndex += decodeUnwindOpAtSlot(codes, slotIndex, nullptr); } if(!outOps) { return numOps; } // Second pass: decode ops in reverse order (Windows stores descending, we want ascending) Uptr writeIndex = (numOps < maxOps) ? numOps : maxOps; slotIndex = 0; while(slotIndex < slotCount && writeIndex > 0) { --writeIndex; DecodedSlot slot; slotIndex += decodeUnwindOpAtSlot(codes, slotIndex, &slot); outOps[writeIndex].codeOffset = slot.codeOffset; outOps[writeIndex].opcode = slot.opcode; outOps[writeIndex].reg = slot.reg; outOps[writeIndex].operand = I64(slot.offset); } return numOps; } static const char* getWindowsRegisterName(U32 reg) { static const char* names[] = {"RAX", "RCX", "RDX", "RBX", "RSP", "RBP", "RSI", "RDI", "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15"}; if(reg < 16) { return names[reg]; } return "???"; } void UnwindOp::format(StringBuilderBase& sb) const { const char* regName = getWindowsRegisterName(reg); switch(opcode) { case UWOP_PUSH_NONVOL: sb.appendf("@%" WAVM_PRIuPTR ": PUSH_NONVOL %s", codeOffset, regName); break; case UWOP_ALLOC_SMALL: sb.appendf("@%" WAVM_PRIuPTR ": ALLOC_SMALL %" PRId64, codeOffset, operand); break; case UWOP_ALLOC_LARGE: sb.appendf("@%" WAVM_PRIuPTR ": ALLOC_LARGE %" PRId64, codeOffset, operand); break; case UWOP_SET_FPREG: sb.appendf("@%" WAVM_PRIuPTR ": SET_FPREG %s", codeOffset, regName); break; case UWOP_SAVE_NONVOL: sb.appendf( "@%" WAVM_PRIuPTR ": SAVE_NONVOL %s at RSP+%" PRId64, codeOffset, regName, operand); break; case UWOP_SAVE_NONVOL_FAR: sb.appendf( "@%" WAVM_PRIuPTR ": SAVE_NONVOL_FAR %s at RSP+%" PRId64, codeOffset, regName, operand); break; case UWOP_SAVE_XMM128: sb.appendf( "@%" WAVM_PRIuPTR ": SAVE_XMM128 XMM%u at RSP+%" PRId64, codeOffset, reg, operand); break; case UWOP_SAVE_XMM128_FAR: sb.appendf( "@%" WAVM_PRIuPTR ": SAVE_XMM128_FAR XMM%u at RSP+%" PRId64, codeOffset, reg, operand); break; case UWOP_PUSH_MACHFRAME: sb.appendf("@%" WAVM_PRIuPTR ": PUSH_MACHFRAME", codeOffset); break; default: sb.appendf("@%" WAVM_PRIuPTR ": unknown (opcode 0x%02x)", codeOffset, opcode); break; } } #endif // _M_X64 #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/Platform/Windows/WindowsPrivate.h ================================================ #pragma once #if WAVM_PLATFORM_WINDOWS #include #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Unwind.h" #define NOMINMAX #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export namespace WAVM { namespace Platform { void initThread(); Time fileTimeToWAVMRealTime(FILETIME fileTime); FILETIME wavmRealTimeToFileTime(Time realTime); UnwindState makeUnwindStateFromSignalContext(void* contextPtr); }} #endif // WAVM_PLATFORM_WINDOWS ================================================ FILE: Lib/RegExp/CMakeLists.txt ================================================ set(Sources RegExp.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/RegExp/RegExp.h) WAVM_ADD_LIB_COMPONENT(RegExp SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/RegExp/RegExp.cpp ================================================ #include "WAVM/RegExp/RegExp.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/DenseStaticIntSet.h" #include "WAVM/Inline/Errors.h" #include "WAVM/NFA/NFA.h" using namespace WAVM; enum class NodeType : U8 { lit, zeroOrMore, oneOrMore, optional, alt, seq, }; struct Node { const NodeType type; Node(NodeType inType) : type(inType) {} virtual ~Node() {} }; struct Lit : Node { NFA::CharSet charSet; Lit(const NFA::CharSet& inCharSet) : Node(NodeType::lit), charSet(inCharSet) {} }; template struct Unary : Node { Node* child; Unary(Node* inChild) : Node(inType), child(inChild) {} ~Unary() { delete child; } }; template struct Binary : Node { Node* firstChild; Node* secondChild; Binary(Node* inFirstChild, Node* inSecondChild) : Node(inType), firstChild(inFirstChild), secondChild(inSecondChild) { } ~Binary() { delete firstChild; delete secondChild; } }; typedef Unary ZeroOrMore; typedef Unary OneOrMore; typedef Unary Optional; typedef Binary Alt; typedef Binary Seq; template static bool isMetachar(char c) { switch(c) { case '^': case '\\': return true; case '-': case ']': return inSet; case '$': case '.': case '|': case '*': case '+': case '?': case '(': case ')': case '[': case '{': return !inSet; default: return false; }; } template static char parseChar(const char*& nextChar) { if(*nextChar == '\\') { ++nextChar; if(!isMetachar(*nextChar)) { Errors::fatalf("'%c' is not a metachar in this context", *nextChar); } } else if(isMetachar(*nextChar)) { Errors::fatalf("'%c' is a metachar in this context", *nextChar); } else if(*nextChar == 0) { Errors::fatalf("unexpected end of string"); } return *nextChar++; } template static NFA::CharSet parseLit(const char*& nextChar) { NFA::CharSet result; const char c = parseChar(nextChar); if(inSet && *nextChar == '-') { ++nextChar; const char d = parseChar(nextChar); result.addRange((U8)c, (U8)d); } else { result.add((U8)c); } return result; } template static NFA::CharSet parseCharClass(const char*& nextChar) { if(*nextChar != '\\') { return parseLit(nextChar); } else { NFA::CharSet result; switch(nextChar[1]) { case 'd': result.addRange('0', '9'); break; case 'w': result.addRange('a', 'z'); result.addRange('A', 'Z'); result.addRange('0', '9'); result.add('_'); break; case 's': result.add(' '); result.add('\t'); result.add('\f'); result.add('\r'); result.add('\n'); break; default: if(!isMetachar(nextChar[1])) { Errors::fatalf("'%c' is not a metachar in this context", nextChar[1]); } result.add(nextChar[1]); break; }; nextChar += 2; return result; } } static NFA::CharSet parseSet(const char*& nextChar) { NFA::CharSet result; WAVM_ASSERT(*nextChar == '['); ++nextChar; bool isNegative = false; if(*nextChar == '^') { isNegative = true; ++nextChar; } while(*nextChar && *nextChar != ']') { result = result | parseCharClass(nextChar); }; ++nextChar; if(isNegative) { result = ~result; result.remove(0); } return result; } static Node* parseElementary(const char*& nextChar, Uptr groupDepth) { NFA::CharSet charSet; switch(*nextChar) { case '[': { charSet = parseSet(nextChar); break; } case '.': { charSet = ~NFA::CharSet(0); ++nextChar; break; } case '$': { charSet.add('\n'); ++nextChar; break; } default: { charSet = parseCharClass(nextChar); break; } }; return new Lit(charSet); } static Node* parseUnion(const char*& nextChar, Uptr groupDepth); static Node* parseGroup(const char*& nextChar, Uptr groupDepth) { if(*nextChar != '(') { return parseElementary(nextChar, groupDepth); } else { ++nextChar; Node* result = parseUnion(nextChar, groupDepth + 1); WAVM_ASSERT(*nextChar == ')'); ++nextChar; return result; } } static Node* parseQuantifier(const char*& nextChar, Uptr groupDepth) { Node* group = parseGroup(nextChar, groupDepth); switch(*nextChar) { case '+': ++nextChar; return new OneOrMore(group); case '*': ++nextChar; return new ZeroOrMore(group); case '?': ++nextChar; return new Optional(group); default: return group; }; } static Node* parseSeq(const char*& nextChar, Uptr groupDepth) { Node* result = nullptr; while(true) { Node* newNode = parseQuantifier(nextChar, groupDepth); result = result ? new Seq(result, newNode) : newNode; switch(*nextChar) { case ')': if(groupDepth == 0) { Errors::fatalf("unexpected ')'"); } return result; case 0: if(groupDepth != 0) { Errors::fatalf("unexpected end of string"); } return result; case '|': return result; default: break; }; }; } static Node* parseUnion(const char*& nextChar, Uptr groupDepth) { Node* result = nullptr; while(true) { Node* newNode = parseSeq(nextChar, groupDepth); result = result ? new Alt(result, newNode) : newNode; switch(*nextChar) { case ')': if(groupDepth == 0) { Errors::fatalf("unexpected ')'"); } return result; case 0: if(groupDepth != 0) { Errors::fatalf("unexpected end of string"); } return result; case '|': ++nextChar; break; default: Errors::fatalf("unrecognized input"); }; }; } static Node* parse(const char* string) { const char* nextChar = string; Node* node = parseUnion(nextChar, 0); if(*nextChar != 0) { Errors::fatalf("failed to parse entire regexp"); } return node; } static void createNFA(NFA::Builder* nfaBuilder, Node* node, NFA::StateIndex initialState, NFA::StateIndex finalState) { switch(node->type) { case NodeType::lit: { auto lit = (Lit*)node; NFA::addEdge(nfaBuilder, initialState, lit->charSet, finalState); break; } case NodeType::zeroOrMore: { auto zeroOrMore = (ZeroOrMore*)node; createNFA(nfaBuilder, zeroOrMore->child, initialState, initialState); NFA::addEpsilonEdge(nfaBuilder, initialState, finalState); break; }; case NodeType::oneOrMore: { auto oneOrMore = (OneOrMore*)node; auto intermediateState = NFA::addState(nfaBuilder); createNFA(nfaBuilder, oneOrMore->child, initialState, intermediateState); createNFA(nfaBuilder, oneOrMore->child, intermediateState, intermediateState); NFA::addEpsilonEdge(nfaBuilder, intermediateState, finalState); break; } case NodeType::optional: { auto optional = (Optional*)node; createNFA(nfaBuilder, optional->child, initialState, finalState); NFA::addEpsilonEdge(nfaBuilder, initialState, finalState); break; } case NodeType::alt: { auto alt = (Alt*)node; createNFA(nfaBuilder, alt->firstChild, initialState, finalState); createNFA(nfaBuilder, alt->secondChild, initialState, finalState); break; } case NodeType::seq: { auto seq = (Seq*)node; auto intermediateState = NFA::addState(nfaBuilder); createNFA(nfaBuilder, seq->firstChild, initialState, intermediateState); createNFA(nfaBuilder, seq->secondChild, intermediateState, finalState); break; } default: WAVM_UNREACHABLE(); }; } void RegExp::addToNFA(const char* regexpString, NFA::Builder* nfaBuilder, NFA::StateIndex initialState, NFA::StateIndex finalState) { Node* rootNode = parse(regexpString); createNFA(nfaBuilder, rootNode, initialState, finalState); delete rootNode; } ================================================ FILE: Lib/Runtime/Atomics.cpp ================================================ #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/IR.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Clock.h" #include "WAVM/Platform/ConditionVariable.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; namespace WAVM { namespace Runtime { WAVM_DEFINE_INTRINSIC_MODULE(wavmIntrinsicsAtomics) }} // Holds a list of threads waiting on a specific address. struct WaitList { Platform::Mutex mutex; Platform::ConditionVariable condVar; U32 numWaiters{0}; U32 pendingWakes{0}; std::atomic numReferences; WaitList() : numReferences(1) {} }; // A map from address to a list of threads waiting on that address. static Platform::Mutex addressToWaitListMapMutex; static HashMap addressToWaitListMap; // Opens the wait list for a given address. // Increases the wait list's reference count, and returns a pointer to it. // Note that it does not lock the wait list mutex. // A call to openWaitList should be followed by a call to closeWaitList to avoid leaks. static WaitList* openWaitList(Uptr address) { Platform::Mutex::Lock mapLock(addressToWaitListMapMutex); auto waitListPtr = addressToWaitListMap.get(address); if(waitListPtr) { ++(*waitListPtr)->numReferences; return *waitListPtr; } else { WaitList* waitList = new WaitList(); addressToWaitListMap.set(address, waitList); return waitList; } } // Closes a wait list, deleting it and removing it from the global map if it was the last reference. static void closeWaitList(Uptr address, WaitList* waitList) { if(--waitList->numReferences == 0) { Platform::Mutex::Lock mapLock(addressToWaitListMapMutex); if(!waitList->numReferences) { WAVM_ASSERT(!waitList->numWaiters); delete waitList; addressToWaitListMap.remove(address); } } } // Loads a value from memory with seq_cst memory order. // The caller must ensure that the pointer is naturally aligned. template static Value atomicLoad(const Value* valuePointer) { static_assert(sizeof(std::atomic) == sizeof(Value), "relying on non-standard behavior"); std::atomic* valuePointerAtomic = (std::atomic*)valuePointer; return valuePointerAtomic->load(); } template static U32 waitOnAddress(Value* valuePointer, Value expectedValue, I64 timeout) { // Open the wait list for this address. const Uptr address = reinterpret_cast(valuePointer); WaitList* waitList = openWaitList(address); { Platform::Mutex::Lock waitListLock(waitList->mutex); // Use unwindSignalsAsExceptions to ensure that an access violation signal produced by the // load will be thrown as a Runtime::Exception and unwind the stack (e.g. the locks). Value value; Runtime::unwindSignalsAsExceptions( [valuePointer, &value] { value = atomicLoad(valuePointer); }); if(value != expectedValue) { // If *valuePointer wasn't the expected value, unlock the wait list and return. waitListLock.unlock(); closeWaitList(address, waitList); return 1; } ++waitList->numWaiters; if(timeout < 0) { // Infinite wait: loop until a wake is pending, handling spurious wakeups. while(waitList->pendingWakes == 0) { waitList->condVar.wait(waitList->mutex, Time::infinity()); } } else { // Timed wait: compute a deadline, then loop until a wake is pending or timed out. const I128 deadlineNS = Platform::getClockTime(Platform::Clock::monotonic).ns + I128(timeout); I128 remainingNS = I128(timeout); while(waitList->pendingWakes == 0 && remainingNS > 0 && waitList->condVar.wait(waitList->mutex, Time{remainingNS})) { remainingNS = deadlineNS - Platform::getClockTime(Platform::Clock::monotonic).ns; } } const bool wasWoken = waitList->pendingWakes > 0; if(wasWoken) { --waitList->pendingWakes; } --waitList->numWaiters; waitListLock.unlock(); closeWaitList(address, waitList); return wasWoken ? 0 : 2; } } static U32 wakeAddress(void* pointer, U32 numToWake) { if(numToWake == 0) { return 0; } // Open the wait list for this address. const Uptr address = reinterpret_cast(pointer); WaitList* waitList = openWaitList(address); Uptr actualNumToWake; { Platform::Mutex::Lock waitListLock(waitList->mutex); // Determine how many threads to wake. // Can only wake threads that aren't already pending a wake. const U32 wakeable = waitList->numWaiters > waitList->pendingWakes ? waitList->numWaiters - waitList->pendingWakes : 0; actualNumToWake = (numToWake == UINT32_MAX) ? wakeable : std::min(U32(numToWake), wakeable); waitList->pendingWakes += U32(actualNumToWake); if(actualNumToWake > 0) { if(actualNumToWake == waitList->numWaiters) { waitList->condVar.broadcast(); } else { for(Uptr i = 0; i < actualNumToWake; ++i) { waitList->condVar.signal(); } } } } closeWaitList(address, waitList); if(actualNumToWake > UINT32_MAX) { throwException(ExceptionTypes::integerDivideByZeroOrOverflow, {}, 2); } return U32(actualNumToWake); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsAtomics, "misalignedAtomicTrap", void, misalignedAtomicTrap, U64 address) { throwException(ExceptionTypes::misalignedAtomicMemoryAccess, {address}, 1); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsAtomics, "memory.atomic.notify", I32, atomic_notify, Uptr address, I32 numToWake, Uptr memoryId) { Memory* memory = getMemoryFromRuntimeData(contextRuntimeData, memoryId); // Validate that the address is within the memory's bounds. const U64 memoryNumBytes = U64(memory->numPages) * IR::numBytesPerPage; if(U64(address) + 4 > memoryNumBytes) { throwException(ExceptionTypes::outOfBoundsMemoryAccess, {memory, memoryNumBytes}, 1); } // The alignment check is done by the caller. WAVM_ASSERT(!(address & 3)); return wakeAddress(memory->baseAddress + address, numToWake); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsAtomics, "memory.atomic.wait32", I32, atomic_wait_I32, Uptr address, I32 expectedValue, I64 timeout, Uptr memoryId) { Memory* memory = getMemoryFromRuntimeData(contextRuntimeData, memoryId); // Throw a waitOnUnsharedMemory exception if the memory is not shared. if(!memory->isShared) { throwException(ExceptionTypes::waitOnUnsharedMemory, {memory}, 1); } // Assume that the caller has validated the alignment. WAVM_ASSERT(!(address & 3)); // Validate that the address is within the memory's bounds, and convert it to a pointer. I32* valuePointer = &memoryRef(memory, address); return waitOnAddress(valuePointer, expectedValue, timeout); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsAtomics, "memory.atomic.wait64", I32, atomic_wait_i64, Uptr address, I64 expectedValue, I64 timeout, Uptr memoryId) { Memory* memory = getMemoryFromRuntimeData(contextRuntimeData, memoryId); // Throw a waitOnUnsharedMemory exception if the memory is not shared. if(!memory->isShared) { throwException(ExceptionTypes::waitOnUnsharedMemory, {memory}, 1); } // Assume that the caller has validated the alignment. WAVM_ASSERT(!(address & 7)); // Validate that the address is within the memory's bounds, and convert it to a pointer. I64* valuePointer = &memoryRef(memory, address); return waitOnAddress(valuePointer, expectedValue, timeout); } ================================================ FILE: Lib/Runtime/CMakeLists.txt ================================================ set(Sources Atomics.cpp Compartment.cpp Context.cpp Diagnostics.cpp Exception.cpp Global.cpp Instance.cpp Intrinsics.cpp Invoke.cpp Linker.cpp Memory.cpp Module.cpp ObjectGC.cpp ResourceQuota.cpp Runtime.cpp Table.cpp WAVMIntrinsics.cpp) set(PrivateHeaders RuntimePrivate.h) set(PublicHeaders ${WAVM_INCLUDE_DIR}/Runtime/Intrinsics.h ${WAVM_INCLUDE_DIR}/Runtime/Linker.h ${WAVM_INCLUDE_DIR}/Runtime/Runtime.h) WAVM_ADD_LIB_COMPONENT(Runtime SOURCES ${Sources} HEADERS ${PublicHeaders} ${PrivateHeaders}) ================================================ FILE: Lib/Runtime/Compartment.cpp ================================================ #include #include #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; Runtime::Compartment::Compartment(std::string&& inDebugName, struct CompartmentRuntimeData* inRuntimeData, U8* inUnalignedRuntimeData) : GCObject(ObjectKind::compartment, this, std::move(inDebugName)) , runtimeData(inRuntimeData) , unalignedRuntimeData(inUnalignedRuntimeData) , tables(0, maxTables - 1) , memories(0, maxMemories - 1) // Use UINTPTR_MAX as an invalid ID for globals, exception types, and instances. , globals(0, UINTPTR_MAX - 1) , exceptionTypes(0, UINTPTR_MAX - 1) , instances(0, UINTPTR_MAX - 1) , contexts(0, maxContexts - 1) , foreigns(0, UINTPTR_MAX - 1) { runtimeData->compartment = this; } Runtime::Compartment::~Compartment() { Platform::RWMutex::ExclusiveLock compartmentLock(mutex); WAVM_ASSERT(!memories.size()); WAVM_ASSERT(!tables.size()); WAVM_ASSERT(!exceptionTypes.size()); WAVM_ASSERT(!globals.size()); WAVM_ASSERT(!instances.size()); WAVM_ASSERT(!contexts.size()); WAVM_ASSERT(!foreigns.size()); Platform::freeAlignedVirtualPages(unalignedRuntimeData, compartmentReservedBytes >> Platform::getBytesPerPageLog2(), compartmentRuntimeDataAlignmentLog2); Platform::deregisterVirtualAllocation(offsetof(CompartmentRuntimeData, contexts)); } static CompartmentRuntimeData* initCompartmentRuntimeData(U8*& outUnalignedRuntimeData) { CompartmentRuntimeData* runtimeData = (CompartmentRuntimeData*)Platform::allocateAlignedVirtualPages( compartmentReservedBytes >> Platform::getBytesPerPageLog2(), compartmentRuntimeDataAlignmentLog2, outUnalignedRuntimeData); WAVM_ERROR_UNLESS(Platform::commitVirtualPages( (U8*)runtimeData, offsetof(CompartmentRuntimeData, contexts) >> Platform::getBytesPerPageLog2())); Platform::registerVirtualAllocation(offsetof(CompartmentRuntimeData, contexts)); return runtimeData; } Compartment* Runtime::createCompartment(std::string&& debugName) { U8* unalignedRuntimeData = nullptr; CompartmentRuntimeData* runtimeData = initCompartmentRuntimeData(unalignedRuntimeData); if(!runtimeData) { return nullptr; } return new Compartment(std::move(debugName), runtimeData, unalignedRuntimeData); } Compartment* Runtime::cloneCompartment(const Compartment* compartment, std::string&& debugName) { Timing::Timer timer; U8* unalignedRuntimeData = nullptr; CompartmentRuntimeData* runtimeData = initCompartmentRuntimeData(unalignedRuntimeData); if(!runtimeData) { return nullptr; } Compartment* newCompartment = new Compartment(std::move(debugName), runtimeData, unalignedRuntimeData); if(!newCompartment) { goto error; } else { Platform::RWMutex::ShareableLock compartmentLock(compartment->mutex); // Clone tables. for(Table* table : compartment->tables) { Table* newTable = cloneTable(table, newCompartment); if(!newTable) { goto error; } WAVM_ASSERT(newTable->id == table->id); } // Clone memories. for(Memory* memory : compartment->memories) { Memory* newMemory = cloneMemory(memory, newCompartment); if(!newMemory) { goto error; } WAVM_ASSERT(newMemory->id == memory->id); } // Clone globals. newCompartment->globalDataAllocationMask = compartment->globalDataAllocationMask; memcpy(newCompartment->initialContextMutableGlobals, compartment->initialContextMutableGlobals, sizeof(newCompartment->initialContextMutableGlobals)); for(Global* global : compartment->globals) { Global* newGlobal = cloneGlobal(global, newCompartment); if(!newGlobal) { goto error; } WAVM_ASSERT(newGlobal->id == global->id); WAVM_ASSERT(newGlobal->mutableGlobalIndex == global->mutableGlobalIndex); } // Clone exception types. for(ExceptionType* exceptionType : compartment->exceptionTypes) { ExceptionType* newExceptionType = cloneExceptionType(exceptionType, newCompartment); if(!newExceptionType) { goto error; } WAVM_ASSERT(newExceptionType->id == exceptionType->id); } // Clone instances. for(Instance* instance : compartment->instances) { Instance* newInstance = cloneInstance(instance, newCompartment); if(!newInstance) { goto error; } WAVM_ASSERT(newInstance->id == instance->id); } Timing::logTimer("Cloned compartment", timer); return newCompartment; } error: // If there was an error, clean up the partially created compartment. if(newCompartment) { WAVM_ERROR_UNLESS(tryCollectCompartment(GCPointer(newCompartment))); } return nullptr; } Object* Runtime::remapToClonedCompartment(const Object* object, const Compartment* newCompartment) { if(!object) { return nullptr; } if(object->kind == ObjectKind::function) { return const_cast(object); } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); switch(object->kind) { case ObjectKind::table: return newCompartment->tables[asTable(object)->id]; case ObjectKind::memory: return newCompartment->memories[asMemory(object)->id]; case ObjectKind::global: return newCompartment->globals[asGlobal(object)->id]; case ObjectKind::exceptionType: return newCompartment->exceptionTypes[asExceptionType(object)->id]; case ObjectKind::instance: return newCompartment->instances[asInstance(object)->id]; case ObjectKind::function: case ObjectKind::context: case ObjectKind::compartment: case ObjectKind::foreign: case ObjectKind::invalid: default: WAVM_UNREACHABLE(); }; } Function* Runtime::remapToClonedCompartment(const Function* function, const Compartment* newCompartment) { return const_cast(function); } Table* Runtime::remapToClonedCompartment(const Table* table, const Compartment* newCompartment) { if(!table) { return nullptr; } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); return newCompartment->tables[table->id]; } Memory* Runtime::remapToClonedCompartment(const Memory* memory, const Compartment* newCompartment) { if(!memory) { return nullptr; } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); return newCompartment->memories[memory->id]; } Global* Runtime::remapToClonedCompartment(const Global* global, const Compartment* newCompartment) { if(!global) { return nullptr; } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); return newCompartment->globals[global->id]; } ExceptionType* Runtime::remapToClonedCompartment(const ExceptionType* exceptionType, const Compartment* newCompartment) { if(!exceptionType) { return nullptr; } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); return newCompartment->exceptionTypes[exceptionType->id]; } Instance* Runtime::remapToClonedCompartment(const Instance* instance, const Compartment* newCompartment) { if(!instance) { return nullptr; } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); return newCompartment->instances[instance->id]; } Foreign* Runtime::remapToClonedCompartment(const Foreign* foreign, const Compartment* newCompartment) { if(!foreign) { return nullptr; } Platform::RWMutex::ShareableLock compartmentLock(newCompartment->mutex); return newCompartment->foreigns[foreign->id]; } bool Runtime::isInCompartment(const Object* object, const Compartment* compartment) { if(object->kind == ObjectKind::function) { // The function may be in multiple compartments, but if this compartment maps the function's // instanceId to a Instance with the LLVMJIT LoadedModule that contains this // function, then the function is in this compartment. Function* function = (Function*)object; // Treat functions with instanceId=UINTPTR_MAX as if they are in all compartments. if(function->instanceId == UINTPTR_MAX) { return true; } Platform::RWMutex::ShareableLock compartmentLock(compartment->mutex); if(!compartment->instances.contains(function->instanceId)) { return false; } Instance* instance = compartment->instances[function->instanceId]; return instance->jitModule.get() == function->mutableData->jitModule; } else { GCObject* gcObject = (GCObject*)object; return gcObject->compartment == compartment; } } ================================================ FILE: Lib/Runtime/Context.cpp ================================================ #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; Context* Runtime::createContext(Compartment* compartment, std::string&& debugName) { WAVM_ASSERT(compartment); Context* context = new Context(compartment, std::move(debugName)); { Platform::RWMutex::ExclusiveLock lock(compartment->mutex); // Allocate an ID for the context in the compartment. context->id = compartment->contexts.add(UINTPTR_MAX, context); if(context->id == UINTPTR_MAX) { delete context; return nullptr; } context->runtimeData = &compartment->runtimeData->contexts[context->id]; // Commit the page(s) for the context's runtime data. if(!Platform::commitVirtualPages( (U8*)context->runtimeData, sizeof(ContextRuntimeData) >> Platform::getBytesPerPageLog2())) { delete context; return nullptr; } Platform::registerVirtualAllocation(sizeof(ContextRuntimeData)); // Initialize the context's global data. memcpy(context->runtimeData->mutableGlobals, compartment->initialContextMutableGlobals, maxMutableGlobals * sizeof(IR::UntaggedValue)); context->runtimeData->context = context; } return context; } Runtime::Context::~Context() { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); if(id != UINTPTR_MAX) { compartment->contexts.removeOrFail(id); } Platform::decommitVirtualPages((U8*)runtimeData, sizeof(ContextRuntimeData) >> Platform::getBytesPerPageLog2()); Platform::deregisterVirtualAllocation(sizeof(ContextRuntimeData)); } Compartment* Runtime::getCompartment(const Context* context) { return context->compartment; } Context* Runtime::cloneContext(const Context* context, Compartment* newCompartment) { // Create a new context and initialize its runtime data with the values from the source context. Context* clonedContext = createContext(newCompartment); if(clonedContext) { memcpy(clonedContext->runtimeData->mutableGlobals, context->runtimeData->mutableGlobals, maxMutableGlobals * sizeof(IR::UntaggedValue)); } return clonedContext; } ================================================ FILE: Lib/Runtime/Diagnostics.cpp ================================================ #include "WAVM/Platform/Diagnostics.h" #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/CPU.h" #include "WAVM/Platform/Unwind.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Platform; using namespace WAVM::Runtime; // Pre-created host disassembler for signal-safe use in trace-unwind path. static std::shared_ptr hostDisassembler; void Runtime::appendToString(StringBuilderBase& stringBuilder, const InstructionSource& source) { switch(source.type) { case InstructionSource::Type::unknown: stringBuilder.append(""); break; case InstructionSource::Type::native: stringBuilder.append("host!", 5); appendToString(stringBuilder, source.native); break; case InstructionSource::Type::wasm: stringBuilder.appendf("%s+%" WAVM_PRIuPTR, source.wasm.function->mutableData->debugName.c_str(), source.wasm.instructionIndex); break; default: WAVM_UNREACHABLE(); } } Uptr Runtime::getInstructionSourceByAddress(Uptr ip, InstructionSource* outSources, Uptr maxSources) { if(maxSources == 0) { return 0; } // First try JIT'd WASM code LLVMJIT::InstructionSource jitSources[16]; Uptr numJitSources = LLVMJIT::getInstructionSourceByAddress(ip, jitSources, 16); if(numJitSources > 0) { Uptr count = numJitSources < maxSources ? numJitSources : maxSources; for(Uptr i = 0; i < count; ++i) { outSources[i].type = InstructionSource::Type::wasm; outSources[i].wasm.function = jitSources[i].function; outSources[i].wasm.instructionIndex = jitSources[i].instructionIndex; } return count; } // Fall back to native code lookup if(Platform::getInstructionSourceByAddress(ip, outSources[0].native)) { outSources[0].type = InstructionSource::Type::native; return 1; } return 0; } std::vector Runtime::resolveCallStackFrames(const CallStack& callStack) { std::vector result; for(Uptr frameIndex = 0; frameIndex < callStack.frames.size(); ++frameIndex) { Runtime::InstructionSource sources[Runtime::maxInlineSourceFrames]; Uptr numSources = getInstructionSourceByAddress( callStack.frames[frameIndex].ip, sources, Runtime::maxInlineSourceFrames); if(numSources == 0) { result.push_back(Runtime::InstructionSource()); } else { for(Uptr i = 0; i < numSources; ++i) { result.push_back(sources[i]); } } } return result; } std::vector Runtime::describeCallStack(const CallStack& callStack) { std::vector frameDescriptions; HashSet describedIPs; Uptr frameIndex = 0; while(frameIndex < callStack.frames.size()) { if(frameIndex + 1 < callStack.frames.size() && describedIPs.contains(callStack.frames[frameIndex].ip) && describedIPs.contains(callStack.frames[frameIndex + 1].ip)) { Uptr numOmittedFrames = 2; while(frameIndex + numOmittedFrames < callStack.frames.size() && describedIPs.contains(callStack.frames[frameIndex + numOmittedFrames].ip)) { ++numOmittedFrames; } frameDescriptions.emplace_back("<" + std::to_string(numOmittedFrames) + " redundant frames omitted>"); frameIndex += numOmittedFrames; } else { const Uptr frameIP = callStack.frames[frameIndex].ip; InstructionSource sources[Runtime::maxInlineSourceFrames]; Uptr numSources = getInstructionSourceByAddress(frameIP, sources, Runtime::maxInlineSourceFrames); if(numSources == 0) { frameDescriptions.push_back(""); } else { for(Uptr i = 0; i < numSources; ++i) { StringBuilder stringBuilder; appendToString(stringBuilder, sources[i]); frameDescriptions.push_back(stringBuilder.moveToString()); } } describedIPs.add(frameIP); ++frameIndex; } } return frameDescriptions; } // Disassemble a function and interleave CFI ops at the appropriate offsets. // Limits output to a window around the current IP. static void disassembleWithCFI(const std::shared_ptr& disasm, const UnwindProcInfo& procInfo, Uptr currentIP) { constexpr Uptr maxBytesBeforeIP = 32; constexpr Uptr maxBytesAfterIP = 32; const U8* codeStart = reinterpret_cast(procInfo.startIP); Uptr codeSize = procInfo.endIP - procInfo.startIP; Uptr currentIPOffset = currentIP > procInfo.startIP ? currentIP - procInfo.startIP : 0; Uptr printStartOffset = currentIPOffset > maxBytesBeforeIP ? currentIPOffset - maxBytesBeforeIP : 0; Uptr endOffset = std::min(codeSize, currentIPOffset + maxBytesAfterIP); // Decode unwind ops into a stack-allocated buffer Uptr numUnwindOps = procInfo.decodeUnwindOps(nullptr, 0); UnwindOp* unwindOps = numUnwindOps > 0 ? static_cast(alloca(numUnwindOps * sizeof(UnwindOp))) : nullptr; if(unwindOps) { procInfo.decodeUnwindOps(unwindOps, numUnwindOps); } Uptr unwindOpIndex = 0; // Skip to the first instruction boundary at or after printStartOffset. Uptr codeOffset = LLVMJIT::findInstructionBoundary(disasm, codeStart, codeSize, printStartOffset); while(unwindOpIndex < numUnwindOps && unwindOps[unwindOpIndex].codeOffset < codeOffset) { ++unwindOpIndex; } if(codeOffset > 0) { Log::printf(Log::traceUnwind, " ...\n"); } while(codeOffset < endOffset) { // Print any CFI ops that apply at this code offset while(unwindOpIndex < numUnwindOps && unwindOps[unwindOpIndex].codeOffset <= codeOffset) { TruncatingFixedStringBuilder<256> opBuf; unwindOps[unwindOpIndex].format(opBuf); Log::printf(Log::traceUnwind, " ; %s\n", opBuf.c_str()); ++unwindOpIndex; } // Get the absolute address for this instruction Uptr instrAddr = procInfo.startIP + codeOffset; // Disassemble the instruction LLVMJIT::DisassembledInstruction instr = LLVMJIT::disassembleInstruction( disasm, codeStart + codeOffset, codeSize - codeOffset); // Mark current IP with an arrow const char* marker = (instrAddr <= currentIP && currentIP < instrAddr + instr.numBytes) ? ">>>" : " "; if(instr.numBytes == 0) { // Disassembly failed, print raw byte and advance Log::printf(Log::traceUnwind, " %s 0x%" WAVM_PRIxPTR ": .byte 0x%02x\n", marker, instrAddr, codeStart[codeOffset]); codeOffset += 1; } else { Log::printf(Log::traceUnwind, " %s 0x%" WAVM_PRIxPTR ": %s\n", marker, instrAddr, instr.mnemonic); codeOffset += instr.numBytes; } } if(endOffset < codeSize) { Log::printf(Log::traceUnwind, " ...\n"); } } static void traceFrame(const std::shared_ptr& disasm, UnwindState& state, Uptr frameIndex, Uptr ip) { auto optSP = state.getRegister(HostCPURegister::SP); WAVM_ERROR_UNLESS(optSP.has_value()); Uptr sp = *optSP; // Get instruction source using signal-safe API (handles both WASM and native). Runtime::InstructionSource sources[Runtime::maxInlineSourceFrames]; Uptr numSources = Runtime::getInstructionSourceByAddress(ip, sources, Runtime::maxInlineSourceFrames); // Format source string using a stack buffer (no heap allocation). TruncatingFixedStringBuilder<512> stringBuilder; if(numSources > 0) { for(Uptr i = 0; i < numSources; ++i) { if(i > 0) { stringBuilder.append(" <- ", 4); } appendToString(stringBuilder, sources[i]); } } else { stringBuilder.append(""); } Log::printf(Log::traceUnwind, " Frame %" WAVM_PRIuPTR ": IP=0x%" WAVM_PRIxPTR " SP=0x%" WAVM_PRIxPTR " %s\n", frameIndex, ip, sp, stringBuilder.c_str()); // Try to get procedure info UnwindProcInfo procInfo; if(state.getProcInfo(procInfo)) { Log::printf(Log::traceUnwind, " start=0x%" WAVM_PRIxPTR " end=0x%" WAVM_PRIxPTR " lsda=0x%" WAVM_PRIxPTR " handler=0x%" WAVM_PRIxPTR "\n", procInfo.startIP, procInfo.endIP, procInfo.lsda, procInfo.handler); // Disassemble with interleaved CFI ops disassembleWithCFI(disasm, procInfo, ip); } // Print all registers at this frame Log::printf(Log::traceUnwind, " Registers:\n"); #define WAVM_TRACE_REGISTER_(enumName, displayName) \ { \ auto value = state.getRegister(HostCPURegister::enumName); \ if(value.has_value()) \ { \ Log::printf(Log::traceUnwind, \ " %-3s=%016" WAVM_PRIxPTR "\n", \ displayName, \ *value); \ } \ } WAVM_ENUM_HOST_CPU_REGISTERS(WAVM_TRACE_REGISTER_) #undef WAVM_TRACE_REGISTER_ } void Runtime::initTraceUnwindState() { if(!hostDisassembler) { hostDisassembler = LLVMJIT::createDisassembler(LLVMJIT::getHostTargetSpec()); } } CallStack Runtime::unwindCallStack(UnwindState& state) { CallStack result; constexpr Uptr maxUnwindSteps = 50; if(Log::isCategoryEnabled(Log::traceUnwind) && hostDisassembler) { Log::printf(Log::traceUnwind, "=== Unwinding call stack ===\n"); for(Uptr frameIndex = 0; frameIndex < maxUnwindSteps; ++frameIndex) { Uptr ip = *state.getRegister(HostCPURegister::IP); traceFrame(hostDisassembler, state, frameIndex, ip); if(!result.frames.isFull()) { result.frames.push_back(CallStack::Frame{ip}); } UnwindStepResult stepResult = state.step(); if(stepResult == UnwindStepResult::end) { Log::printf(Log::traceUnwind, " End of stack\n"); break; } else if(stepResult == UnwindStepResult::error) { Log::printf(Log::traceUnwind, " Unwind step failed\n"); break; } } Log::printf(Log::traceUnwind, "=== End call stack ===\n"); } else { for(Uptr frameIndex = 0; frameIndex < maxUnwindSteps; ++frameIndex) { Uptr ip = *state.getRegister(HostCPURegister::IP); if(!result.frames.isFull()) { result.frames.push_back(CallStack::Frame{ip}); } if(state.step() != UnwindStepResult::success) { break; } } } return result; } ================================================ FILE: Lib/Runtime/Exception.cpp ================================================ #include #include #include #include #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Error.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Platform/Signal.h" #include "WAVM/Platform/Unwind.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; namespace WAVM { namespace Runtime { WAVM_DEFINE_INTRINSIC_MODULE(wavmIntrinsicsException) }} #define DEFINE_INTRINSIC_EXCEPTION_TYPE(name, ...) \ ExceptionType* Runtime::ExceptionTypes::name = new ExceptionType( \ nullptr, IR::ExceptionType{IR::TypeTuple({__VA_ARGS__})}, "wavm." #name); WAVM_ENUM_INTRINSIC_EXCEPTION_TYPES(DEFINE_INTRINSIC_EXCEPTION_TYPE) #undef DEFINE_INTRINSIC_EXCEPTION_TYPE Runtime::Exception::~Exception() { if(finalizeUserData) { (*finalizeUserData)(userData); } } void Runtime::setUserData(Exception* exception, void* userData, void (*finalizer)(void*)) { exception->userData = userData; exception->finalizeUserData = finalizer; } void* Runtime::getUserData(const Exception* exception) { return exception->userData; } ExceptionType* Runtime::createExceptionType(Compartment* compartment, IR::ExceptionType sig, std::string&& debugName) { auto exceptionType = new ExceptionType(compartment, sig, std::move(debugName)); Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); exceptionType->id = compartment->exceptionTypes.add(UINTPTR_MAX, exceptionType); if(exceptionType->id == UINTPTR_MAX) { delete exceptionType; return nullptr; } return exceptionType; } ExceptionType* Runtime::cloneExceptionType(ExceptionType* exceptionType, Compartment* newCompartment) { auto newExceptionType = new ExceptionType( newCompartment, exceptionType->sig, std::string(exceptionType->debugName)); newExceptionType->id = exceptionType->id; Platform::RWMutex::ExclusiveLock compartmentLock(newCompartment->mutex); newCompartment->exceptionTypes.insertOrFail(exceptionType->id, newExceptionType); return newExceptionType; } Runtime::ExceptionType::~ExceptionType() { if(id != UINTPTR_MAX) { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); compartment->exceptionTypes.removeOrFail(id); } } std::string Runtime::describeExceptionType(const ExceptionType* type) { WAVM_ASSERT(type); return type->debugName; } IR::TypeTuple Runtime::getExceptionTypeParameters(const ExceptionType* type) { return type->sig.params; } Exception* Runtime::createException(ExceptionType* type, const IR::UntaggedValue* arguments, Uptr numArguments, CallStack&& callStack) { const IR::TypeTuple& params = type->sig.params; WAVM_ASSERT(numArguments == params.size()); const bool isUserException = type->compartment != nullptr; Exception* exception = new(malloc(Exception::calcNumBytes(params.size()))) Exception(type->id, type, isUserException, std::move(callStack)); if(params.size()) { memcpy(exception->arguments, arguments, sizeof(IR::UntaggedValue) * params.size()); } return exception; } void Runtime::destroyException(Exception* exception) { exception->~Exception(); free(exception); } ExceptionType* Runtime::getExceptionType(const Exception* exception) { return exception->type; } IR::UntaggedValue Runtime::getExceptionArgument(const Exception* exception, Uptr argIndex) { WAVM_ERROR_UNLESS(argIndex < exception->type->sig.params.size()); return exception->arguments[argIndex]; } const CallStack& Runtime::getExceptionCallStack(const Exception* exception) { return exception->callStack; } std::string Runtime::describeException(const Exception* exception) { std::string result = describeExceptionType(exception->type); if(exception->type == ExceptionTypes::outOfBoundsMemoryAccess) { Memory* memory = asMemoryNullable(exception->arguments[0].object); result += '('; result += memory ? memory->debugName : ""; result += '+'; result += std::to_string(exception->arguments[1].u64); result += ')'; } else if(exception->type == ExceptionTypes::outOfBoundsTableAccess || exception->type == ExceptionTypes::uninitializedTableElement) { Table* table = asTableNullable(exception->arguments[0].object); result += '('; result += table ? table->debugName : ""; result += '['; result += std::to_string(exception->arguments[1].u64); result += "])"; } else if(exception->type == ExceptionTypes::indirectCallSignatureMismatch) { Function* function = exception->arguments[0].function; IR::FunctionType expectedSignature( IR::FunctionType::Encoding{Uptr(exception->arguments[1].u64)}); result += '('; if(!function) { result += ""; } else { result += function->mutableData->debugName; result += " : "; result += asString(getFunctionType(function)); } result += ", "; result += asString(expectedSignature); result += ')'; } else if(exception->type->sig.params.size()) { result += '('; for(Uptr argumentIndex = 0; argumentIndex < exception->type->sig.params.size(); ++argumentIndex) { if(argumentIndex != 0) { result += ", "; } result += asString(IR::Value(exception->type->sig.params[argumentIndex], exception->arguments[argumentIndex])); } result += ')'; } std::vector callStackDescription = Runtime::describeCallStack(exception->callStack); result += "\nCall stack:\n"; for(auto calledFunction : callStackDescription) { result += " "; result += calledFunction.c_str(); result += '\n'; } return result; } [[noreturn]] void Runtime::throwException(Exception* exception) { throw exception; } [[noreturn]] WAVM_FORCENOINLINE void Runtime::throwException( ExceptionType* type, const std::vector& arguments, Uptr numOmittedFramesFromCaller) { WAVM_ASSERT(type->sig.params.size() == arguments.size()); // Skip throwException + caller's requested frames. Platform::UnwindState state = Platform::UnwindState::capture(1 + numOmittedFramesFromCaller); throwException( createException(type, arguments.data(), arguments.size(), Runtime::unwindCallStack(state))); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsException, "createException", Uptr, intrinsicCreateException, Uptr exceptionTypeId, Uptr argsBits, U32 isUserException) { ExceptionType* exceptionType; { Compartment* compartment = getCompartmentRuntimeData(contextRuntimeData)->compartment; Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); exceptionType = compartment->exceptionTypes[exceptionTypeId]; } auto args = reinterpret_cast(Uptr(argsBits)); // Skip intrinsicCreateException. Platform::UnwindState state = Platform::UnwindState::capture(1); Exception* exception = createException( exceptionType, args, exceptionType->sig.params.size(), Runtime::unwindCallStack(state)); return reinterpret_cast(exception); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsException, "destroyException", void, intrinsicDestroyException, Uptr exceptionBits) { Exception* exception = reinterpret_cast(exceptionBits); destroyException(exception); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsException, "throwException", void, intrinsicThrowException, Uptr exceptionBits) { Exception* exception = reinterpret_cast(exceptionBits); throw exception; } static bool isRuntimeException(const Platform::Signal& signal) { switch(signal.type) { case Platform::Signal::Type::accessViolation: { // If the access violation occured in a Memory or Table's reserved pages, it's a runtime // exception. Table* table = nullptr; Uptr tableIndex = 0; Memory* memory = nullptr; Uptr memoryAddress = 0; U8* badPointer = reinterpret_cast(signal.accessViolation.address); return isAddressOwnedByTable(badPointer, table, tableIndex) || isAddressOwnedByMemory(badPointer, memory, memoryAddress); } case Platform::Signal::Type::stackOverflow: case Platform::Signal::Type::intDivideByZeroOrOverflow: return true; case Platform::Signal::Type::invalid: default: WAVM_UNREACHABLE(); } } static void translateSignalToRuntimeException(const Platform::Signal& signal, CallStack&& callStack, Runtime::Exception*& outException) { switch(signal.type) { case Platform::Signal::Type::accessViolation: { // If the access violation occured in a Table's reserved pages, treat it as an undefined // table element runtime error. Table* table = nullptr; Uptr tableIndex = 0; Memory* memory = nullptr; Uptr memoryAddress = 0; U8* const badPointer = reinterpret_cast(signal.accessViolation.address); if(isAddressOwnedByTable(badPointer, table, tableIndex)) { IR::UntaggedValue exceptionArguments[2] = {table, U64(tableIndex)}; outException = createException(ExceptionTypes::outOfBoundsTableAccess, exceptionArguments, 2, std::move(callStack)); } // If the access violation occured in a Memory's reserved pages, treat it as an // out-of-bounds memory access. else if(isAddressOwnedByMemory(badPointer, memory, memoryAddress)) { IR::UntaggedValue exceptionArguments[2] = {memory, U64(memoryAddress)}; outException = createException(ExceptionTypes::outOfBoundsMemoryAccess, exceptionArguments, 2, std::move(callStack)); } break; } case Platform::Signal::Type::stackOverflow: outException = createException(ExceptionTypes::stackOverflow, nullptr, 0, std::move(callStack)); break; case Platform::Signal::Type::intDivideByZeroOrOverflow: outException = createException( ExceptionTypes::integerDivideByZeroOrOverflow, nullptr, 0, std::move(callStack)); break; case Platform::Signal::Type::invalid: default: WAVM_UNREACHABLE(); } } void Runtime::catchRuntimeExceptions(const std::function& thunk, const std::function& catchThunk) { try { unwindSignalsAsExceptions(thunk); } catch(Exception* exception) { catchThunk(exception); } } void Runtime::handleError(const char* message, bool printCallStack, Platform::UnwindState&& state) { std::fprintf(stderr, "%s\n", message); if(printCallStack) { std::fprintf(stderr, "Call stack:\n"); CallStack callStack = Runtime::unwindCallStack(state); std::vector descriptions = Runtime::describeCallStack(callStack); for(const auto& desc : descriptions) { std::fprintf(stderr, " %s\n", desc.c_str()); } } std::fflush(stderr); } void Runtime::unwindSignalsAsExceptions(const std::function& thunk) { // Pre-create trace-unwind resources before entering the signal-catching scope. initTraceUnwindState(); // Catch signals and translate them into runtime exceptions. struct UnwindContext { const std::function* thunk; Platform::Signal signal; CallStack callStack; } context; context.thunk = &thunk; if(Platform::catchSignals( [](void* contextVoid) { UnwindContext& context = *(UnwindContext*)contextVoid; (*context.thunk)(); }, [](void* contextVoid, Platform::Signal signal, Platform::UnwindState&& state) { if(!isRuntimeException(signal)) { return false; } else { UnwindContext& context = *(UnwindContext*)contextVoid; context.signal = signal; context.callStack = Runtime::unwindCallStack(state); return true; } }, &context)) { Exception* exception = nullptr; translateSignalToRuntimeException(context.signal, std::move(context.callStack), exception); throw exception; } } ================================================ FILE: Lib/Runtime/Global.cpp ================================================ #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; Global* Runtime::createGlobal(Compartment* compartment, GlobalType type, std::string&& debugName, ResourceQuotaRefParam resourceQuota) { U32 mutableGlobalIndex = UINT32_MAX; if(type.isMutable) { mutableGlobalIndex = compartment->globalDataAllocationMask.getSmallestNonMember(); if(mutableGlobalIndex == maxMutableGlobals) { return nullptr; } compartment->globalDataAllocationMask.add(mutableGlobalIndex); // Zero-initialize the global's mutable value for all current and future contexts. compartment->initialContextMutableGlobals[mutableGlobalIndex] = IR::UntaggedValue(); for(Context* context : compartment->contexts) { context->runtimeData->mutableGlobals[mutableGlobalIndex] = IR::UntaggedValue(); } } // Create the global and add it to the compartment's list of globals. Global* global = new Global(compartment, type, mutableGlobalIndex, std::move(debugName)); { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); global->id = compartment->globals.add(UINTPTR_MAX, global); if(global->id == UINTPTR_MAX) { delete global; return nullptr; } } return global; } void Runtime::initializeGlobal(Global* global, Value value) { Compartment* compartment = global->compartment; WAVM_ERROR_UNLESS(isSubtype(value.type, global->type.valueType)); WAVM_ERROR_UNLESS(!isReferenceType(global->type.valueType) || !value.object || isInCompartment(value.object, compartment)); WAVM_ERROR_UNLESS(!global->hasBeenInitialized); global->hasBeenInitialized = true; global->initialValue = value; if(global->type.isMutable) { // Initialize the global's mutable value for all current and future contexts. compartment->initialContextMutableGlobals[global->mutableGlobalIndex] = value; for(Context* context : compartment->contexts) { context->runtimeData->mutableGlobals[global->mutableGlobalIndex] = value; } } } Global* Runtime::cloneGlobal(Global* global, Compartment* newCompartment) { IR::UntaggedValue initialValue = global->initialValue; if(isReferenceType(global->type.valueType)) { initialValue.object = remapToClonedCompartment(initialValue.object, newCompartment); if(global->type.isMutable) { Object*& initialMutableRef = newCompartment->initialContextMutableGlobals[global->mutableGlobalIndex].object; initialMutableRef = remapToClonedCompartment(initialMutableRef, newCompartment); } } Global* newGlobal = new Global(newCompartment, global->type, global->mutableGlobalIndex, std::string(global->debugName), initialValue); newGlobal->id = global->id; Platform::RWMutex::ExclusiveLock compartmentLock(newCompartment->mutex); newCompartment->globals.insertOrFail(global->id, newGlobal); return newGlobal; } Runtime::Global::~Global() { if(id != UINTPTR_MAX) { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); compartment->globals.removeOrFail(id); } if(type.isMutable) { WAVM_ASSERT(mutableGlobalIndex < maxMutableGlobals); WAVM_ASSERT(compartment->globalDataAllocationMask.contains(mutableGlobalIndex)); compartment->globalDataAllocationMask.remove(mutableGlobalIndex); } } Value Runtime::getGlobalValue(const Context* context, const Global* global) { WAVM_ASSERT(context || !global->type.isMutable); return Value(global->type.valueType, global->type.isMutable ? context->runtimeData->mutableGlobals[global->mutableGlobalIndex] : global->initialValue); } Value Runtime::setGlobalValue(Context* context, const Global* global, Value newValue) { WAVM_ASSERT(context); WAVM_ASSERT(newValue.type == global->type.valueType); WAVM_ASSERT(global->type.isMutable); WAVM_ERROR_UNLESS(context->compartment == global->compartment); WAVM_ERROR_UNLESS(!isReferenceType(global->type.valueType) || !newValue.object || isInCompartment(newValue.object, context->compartment)); UntaggedValue& value = context->runtimeData->mutableGlobals[global->mutableGlobalIndex]; const Value previousValue = Value(global->type.valueType, value); value = newValue; return previousValue; } GlobalType Runtime::getGlobalType(const Global* global) { return global->type; } ================================================ FILE: Lib/Runtime/Instance.cpp ================================================ #include #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #include "WAVM/WASM/WASM.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; static Value evaluateInitializer(const std::vector& moduleGlobals, InitializerExpression expression) { switch(expression.type) { case InitializerExpression::Type::i32_const: return expression.i32; case InitializerExpression::Type::i64_const: return expression.i64; case InitializerExpression::Type::f32_const: return expression.f32; case InitializerExpression::Type::f64_const: return expression.f64; case InitializerExpression::Type::v128_const: return expression.v128; case InitializerExpression::Type::global_get: { // Find the import this refers to. WAVM_ERROR_UNLESS(expression.ref < moduleGlobals.size()); Global* global = moduleGlobals[expression.ref]; WAVM_ERROR_UNLESS(global); WAVM_ERROR_UNLESS(!global->type.isMutable); return IR::Value(global->type.valueType, global->initialValue); } case InitializerExpression::Type::ref_null: return Value(asValueType(expression.nullReferenceType), UntaggedValue()); case InitializerExpression::Type::ref_func: // instantiateModule delays evaluating ref.func initializers until the module is loaded and // we have addresses for its functions. case InitializerExpression::Type::invalid: default: WAVM_UNREACHABLE(); }; } static Uptr getIndexValue(const Value& value, IndexType indexType) { switch(indexType) { case IndexType::i32: WAVM_ASSERT(value.type == ValueType::i32); return value.u32; case IndexType::i64: WAVM_ASSERT(value.type == ValueType::i64); return value.u64; default: WAVM_UNREACHABLE(); }; } Instance::~Instance() { if(id != UINTPTR_MAX) { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); compartment->instances.removeOrFail(id); } } Instance* Runtime::instantiateModule(Compartment* compartment, ModuleConstRefParam module, ImportBindings&& imports, std::string&& moduleDebugName, ResourceQuotaRefParam resourceQuota) { // Check the types of the Instance's imports, and build per-kind import arrays. std::vector functionImports; std::vector tableImports; std::vector memoryImports; std::vector globalImports; std::vector exceptionTypeImports; WAVM_ERROR_UNLESS(imports.size() == module->ir.imports.size()); for(Uptr importIndex = 0; importIndex < imports.size(); ++importIndex) { const auto& kindIndex = module->ir.imports[importIndex]; Object* importObject = imports[importIndex]; WAVM_ERROR_UNLESS(importObject); WAVM_ERROR_UNLESS(isInCompartment(importObject, compartment)); WAVM_ERROR_UNLESS(importObject->kind == ObjectKind(kindIndex.kind)); switch(kindIndex.kind) { case ExternKind::function: { Function* function = asFunction(importObject); const auto& importType = module->ir.types[module->ir.functions.getType(kindIndex.index).index]; WAVM_ERROR_UNLESS(function->encodedType == importType); WAVM_ERROR_UNLESS(importType.callingConvention() == CallingConvention::wasm); functionImports.push_back({function}); break; } case ExternKind::table: { Table* table = asTable(importObject); WAVM_ERROR_UNLESS( isSubtype(getTableType(table), module->ir.tables.getType(kindIndex.index))); tableImports.push_back(table); break; } case ExternKind::memory: { Memory* memory = asMemory(importObject); WAVM_ERROR_UNLESS( isSubtype(getMemoryType(memory), module->ir.memories.getType(kindIndex.index))); memoryImports.push_back(memory); break; } case ExternKind::global: { Global* global = asGlobal(importObject); WAVM_ERROR_UNLESS(isSubtype(global->type, module->ir.globals.getType(kindIndex.index))); globalImports.push_back(global); break; } case ExternKind::exceptionType: { ExceptionType* exceptionType = asExceptionType(importObject); WAVM_ERROR_UNLESS(isSubtype(exceptionType->sig.params, module->ir.exceptionTypes.getType(kindIndex.index).params)); exceptionTypeImports.push_back(exceptionType); break; } case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } return instantiateModuleInternal(compartment, module, std::move(functionImports), std::move(tableImports), std::move(memoryImports), std::move(globalImports), std::move(exceptionTypeImports), std::move(moduleDebugName), resourceQuota); } Instance* Runtime::instantiateModuleInternal(Compartment* compartment, ModuleConstRefParam module, std::vector&& functionImports, std::vector&& tables, std::vector&& memories, std::vector&& globals, std::vector&& exceptionTypes, std::string&& moduleDebugName, ResourceQuotaRefParam resourceQuota) { WAVM_ASSERT(functionImports.size() == module->ir.functions.imports.size()); WAVM_ASSERT(tables.size() == module->ir.tables.imports.size()); WAVM_ASSERT(memories.size() == module->ir.memories.imports.size()); WAVM_ASSERT(globals.size() == module->ir.globals.imports.size()); WAVM_ASSERT(exceptionTypes.size() == module->ir.exceptionTypes.imports.size()); Uptr id = UINTPTR_MAX; { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); id = compartment->instances.add(UINTPTR_MAX, nullptr); } if(id == UINTPTR_MAX) { return nullptr; } // Deserialize the disassembly names. DisassemblyNames disassemblyNames; getDisassemblyNames(module->ir, disassemblyNames); // Instantiate the module's memory and table definitions. for(Uptr tableDefIndex = 0; tableDefIndex < module->ir.tables.defs.size(); ++tableDefIndex) { std::string debugName = disassemblyNames.tables[module->ir.tables.imports.size() + tableDefIndex]; auto table = createTable(compartment, module->ir.tables.defs[tableDefIndex].type, nullptr, std::move(debugName), resourceQuota); if(!table) { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); compartment->instances.removeOrFail(id); throwException(ExceptionTypes::outOfMemory); } tables.push_back(table); } for(Uptr memoryDefIndex = 0; memoryDefIndex < module->ir.memories.defs.size(); ++memoryDefIndex) { std::string debugName = disassemblyNames.memories[module->ir.memories.imports.size() + memoryDefIndex]; auto memory = createMemory(compartment, module->ir.memories.defs[memoryDefIndex].type, std::move(debugName), resourceQuota); if(!memory) { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); compartment->instances.removeOrFail(id); throwException(ExceptionTypes::outOfMemory); } memories.push_back(memory); } // Instantiate the module's global definitions. for(Uptr globalDefIndex = 0; globalDefIndex < module->ir.globals.defs.size(); ++globalDefIndex) { std::string debugName = disassemblyNames.globals[module->ir.globals.imports.size() + globalDefIndex]; const GlobalDef& globalDef = module->ir.globals.defs[globalDefIndex]; Global* global = createGlobal(compartment, globalDef.type, std::move(debugName), resourceQuota); globals.push_back(global); // Defer evaluation of globals with (ref.func ...) initializers until the module's code is // loaded and we have pointers to the Runtime::Function objects. if(globalDef.initializer.type != InitializerExpression::Type::ref_func) { const Value initialValue = evaluateInitializer(globals, globalDef.initializer); WAVM_ERROR_UNLESS(isSubtype(initialValue.type, globalDef.type.valueType)); initializeGlobal(global, initialValue); } } // Instantiate the module's exception types. for(Uptr exceptionTypeDefIndex = 0; exceptionTypeDefIndex < module->ir.exceptionTypes.defs.size(); ++exceptionTypeDefIndex) { const ExceptionTypeDef& exceptionTypeDef = module->ir.exceptionTypes.defs[exceptionTypeDefIndex]; std::string debugName = disassemblyNames .exceptionTypes[module->ir.exceptionTypes.imports.size() + exceptionTypeDefIndex]; exceptionTypes.push_back( createExceptionType(compartment, exceptionTypeDef.type, std::move(debugName))); } // Set up the values to bind to the symbols in the LLVMJIT object code. HashMap wavmIntrinsicsExportMap; for(const HashMapPair& intrinsicFunctionPair : Intrinsics::getUninstantiatedFunctions({WAVM_INTRINSIC_MODULE_REF(wavmIntrinsics), WAVM_INTRINSIC_MODULE_REF(wavmIntrinsicsAtomics), WAVM_INTRINSIC_MODULE_REF(wavmIntrinsicsException), WAVM_INTRINSIC_MODULE_REF(wavmIntrinsicsMemory), WAVM_INTRINSIC_MODULE_REF(wavmIntrinsicsTable)})) { LLVMJIT::FunctionBinding functionBinding{intrinsicFunctionPair.value->getNativeFunction()}; wavmIntrinsicsExportMap.add(intrinsicFunctionPair.key, functionBinding); } std::vector functions; std::vector jitFunctionImports; for(Uptr importIndex = 0; importIndex < module->ir.functions.imports.size(); ++importIndex) { const FunctionType functionType = module->ir.types[module->ir.functions.imports[importIndex].type.index]; if(functionType.callingConvention() == CallingConvention::wasm) { functions.push_back(functionImports[importIndex].wasmFunction); jitFunctionImports.push_back({functionImports[importIndex].wasmFunction->code}); } else { functions.push_back(nullptr); jitFunctionImports.push_back({functionImports[importIndex].nativeFunction}); } } std::vector jitTables; for(Table* table : tables) { jitTables.push_back({table->id}); } std::vector jitMemories; for(Memory* memory : memories) { jitMemories.push_back({memory->id}); } std::vector jitGlobals; for(Global* global : globals) { LLVMJIT::GlobalBinding globalSpec; globalSpec.type = global->type; if(global->type.isMutable) { globalSpec.mutableGlobalIndex = global->mutableGlobalIndex; } else { globalSpec.immutableValuePointer = &global->initialValue; } jitGlobals.push_back(globalSpec); } std::vector jitExceptionTypes; for(ExceptionType* exceptionType : exceptionTypes) { jitExceptionTypes.push_back({exceptionType->id}); } // Create a FunctionMutableData for each function definition. std::vector functionDefMutableDatas; for(Uptr functionDefIndex = 0; functionDefIndex < module->ir.functions.defs.size(); ++functionDefIndex) { std::string debugName = disassemblyNames.functions[module->ir.functions.imports.size() + functionDefIndex] .name; if(!debugName.size()) { debugName = ""; } debugName = "wasm!" + moduleDebugName + '!' + debugName; functionDefMutableDatas.push_back(new FunctionMutableData(std::move(debugName))); } // Load the compiled module's object code with this instance's imports. std::vector jitTypes = module->ir.types; std::vector jitFunctionDefs; jitFunctionDefs.resize(module->ir.functions.defs.size(), nullptr); std::shared_ptr jitModule = LLVMJIT::loadModule(module->objectCode, std::move(wavmIntrinsicsExportMap), std::move(jitTypes), std::move(jitFunctionImports), std::move(jitTables), std::move(jitMemories), std::move(jitGlobals), std::move(jitExceptionTypes), {id}, reinterpret_cast(getOutOfBoundsElement()), functionDefMutableDatas, std::string(moduleDebugName)); // LLVMJIT::loadModule filled in the functionDefMutableDatas' function pointers with the // compiled functions. Add those functions to the module. for(FunctionMutableData* functionMutableData : functionDefMutableDatas) { functions.push_back(functionMutableData->function); } // Set up the instance's exports. HashMap exportMap; std::vector exports; for(const Export& exportIt : module->ir.exports) { Object* exportedObject = nullptr; switch(exportIt.kind) { case IR::ExternKind::function: exportedObject = asObject(functions[exportIt.index]); WAVM_ERROR_UNLESS( exportedObject && "Trying to export an import without a Runtime::Function (a native function?)"); break; case IR::ExternKind::table: exportedObject = tables[exportIt.index]; break; case IR::ExternKind::memory: exportedObject = memories[exportIt.index]; break; case IR::ExternKind::global: exportedObject = globals[exportIt.index]; break; case IR::ExternKind::exceptionType: exportedObject = exceptionTypes[exportIt.index]; break; case IR::ExternKind::invalid: default: WAVM_UNREACHABLE(); } exportMap.addOrFail(exportIt.name, exportedObject); exports.push_back(exportedObject); } // Copy the module's data and elem segments into the Instance for later use. DataSegmentVector dataSegments; ElemSegmentVector elemSegments; for(const DataSegment& dataSegment : module->ir.dataSegments) { dataSegments.push_back(dataSegment.isActive ? nullptr : dataSegment.data); } for(const ElemSegment& elemSegment : module->ir.elemSegments) { elemSegments.push_back(elemSegment.type == ElemSegment::Type::passive ? elemSegment.contents : nullptr); } // Look up the module's start function. Function* startFunction = nullptr; if(module->ir.startFunctionIndex != UINTPTR_MAX) { startFunction = functions[module->ir.startFunctionIndex]; WAVM_ASSERT(FunctionType(startFunction->encodedType) == FunctionType()); } // Create the Instance and add it to the compartment's modules list. Instance* instance = new Instance(compartment, id, std::move(exportMap), std::move(exports), std::move(functions), std::move(tables), std::move(memories), std::move(globals), std::move(exceptionTypes), startFunction, std::move(dataSegments), std::move(elemSegments), std::move(jitModule), std::move(moduleDebugName), resourceQuota); { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); compartment->instances[id] = instance; } // Initialize the globals with (ref.func ...) initializers that were deferred until after the // Runtime::Function objects were loaded. for(Uptr globalDefIndex = 0; globalDefIndex < module->ir.globals.defs.size(); ++globalDefIndex) { const GlobalDef& globalDef = module->ir.globals.defs[globalDefIndex]; if(globalDef.initializer.type == InitializerExpression::Type::ref_func) { Global* global = instance->globals[module->ir.globals.imports.size() + globalDefIndex]; initializeGlobal(global, instance->functions[globalDef.initializer.ref]); } } // Copy the module's data segments into their designated memory instances. for(Uptr segmentIndex = 0; segmentIndex < module->ir.dataSegments.size(); ++segmentIndex) { const DataSegment& dataSegment = module->ir.dataSegments[segmentIndex]; if(dataSegment.isActive) { WAVM_ASSERT(instance->dataSegments[segmentIndex] == nullptr); const Value baseOffsetValue = evaluateInitializer(instance->globals, dataSegment.baseOffset); const MemoryType& memoryType = module->ir.memories.getType(dataSegment.memoryIndex); Uptr baseOffset = getIndexValue(baseOffsetValue, memoryType.indexType); initDataSegment(instance, segmentIndex, dataSegment.data.get(), instance->memories[dataSegment.memoryIndex], baseOffset, 0, dataSegment.data->size()); } } // Copy the module's elem segments into their designated table instances. for(Uptr segmentIndex = 0; segmentIndex < module->ir.elemSegments.size(); ++segmentIndex) { const ElemSegment& elemSegment = module->ir.elemSegments[segmentIndex]; if(elemSegment.type == ElemSegment::Type::active) { WAVM_ASSERT(instance->elemSegments[segmentIndex] == nullptr); const Value baseOffsetValue = evaluateInitializer(instance->globals, elemSegment.baseOffset); const TableType& tableType = module->ir.tables.getType(elemSegment.tableIndex); Uptr baseOffset = getIndexValue(baseOffsetValue, tableType.indexType); Uptr numElements = 0; switch(elemSegment.contents->encoding) { case ElemSegment::Encoding::expr: numElements = elemSegment.contents->elemExprs.size(); break; case ElemSegment::Encoding::index: numElements = elemSegment.contents->elemIndices.size(); break; default: WAVM_UNREACHABLE(); }; Table* table = instance->tables[elemSegment.tableIndex]; initElemSegment(instance, segmentIndex, elemSegment.contents.get(), table, baseOffset, 0, numElements); } } return instance; } Instance* Runtime::cloneInstance(Instance* instance, Compartment* newCompartment) { // Remap the module's references to the cloned compartment. HashMap newExportMap; for(const auto& pair : instance->exportMap) { newExportMap.add(pair.key, remapToClonedCompartment(pair.value, newCompartment)); } std::vector newExports; for(Object* exportObject : instance->exports) { newExports.push_back(remapToClonedCompartment(exportObject, newCompartment)); } std::vector newFunctions = instance->functions; std::vector newTables; for(Table* table : instance->tables) { newTables.push_back(remapToClonedCompartment(table, newCompartment)); } std::vector newMemories; for(Memory* memory : instance->memories) { newMemories.push_back(remapToClonedCompartment(memory, newCompartment)); } std::vector newGlobals; for(Global* global : instance->globals) { newGlobals.push_back(remapToClonedCompartment(global, newCompartment)); } std::vector newExceptionTypes; for(ExceptionType* exceptionType : instance->exceptionTypes) { newExceptionTypes.push_back(remapToClonedCompartment(exceptionType, newCompartment)); } Function* newStartFunction = remapToClonedCompartment(instance->startFunction, newCompartment); DataSegmentVector newDataSegments; { Platform::RWMutex::ExclusiveLock passiveDataSegmentsLock(instance->dataSegmentsMutex); newDataSegments = instance->dataSegments; } ElemSegmentVector newElemSegments; { Platform::RWMutex::ExclusiveLock passiveElemSegmentsLock(instance->elemSegmentsMutex); newElemSegments = instance->elemSegments; } // Create the new Instance in the cloned compartment, but with the same ID as the old one. std::shared_ptr jitModuleCopy = instance->jitModule; Instance* newInstance = new Instance(newCompartment, instance->id, std::move(newExportMap), std::move(newExports), std::move(newFunctions), std::move(newTables), std::move(newMemories), std::move(newGlobals), std::move(newExceptionTypes), std::move(newStartFunction), std::move(newDataSegments), std::move(newElemSegments), std::move(jitModuleCopy), std::string(instance->debugName), instance->resourceQuota); { Platform::RWMutex::ExclusiveLock compartmentLock(newCompartment->mutex); newCompartment->instances.insertOrFail(instance->id, newInstance); } return newInstance; } Function* Runtime::getStartFunction(const Instance* instance) { return instance->startFunction; } Memory* Runtime::getDefaultMemory(const Instance* instance) { return instance->memories.size() ? instance->memories[0] : nullptr; } Table* Runtime::getDefaultTable(const Instance* instance) { return instance->tables.size() ? instance->tables[0] : nullptr; } Object* Runtime::getInstanceExport(const Instance* instance, const std::string& name) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr ? *exportedObjectPtr : nullptr; } Object* Runtime::getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::ExternType& type) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr && isA(*exportedObjectPtr, type) ? *exportedObjectPtr : nullptr; } Function* Runtime::getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::FunctionType& type) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr && (*exportedObjectPtr)->kind == ObjectKind::function && FunctionType(asFunction(*exportedObjectPtr)->encodedType) == type ? asFunction(*exportedObjectPtr) : nullptr; } Table* Runtime::getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::TableType& type) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr && (*exportedObjectPtr)->kind == ObjectKind::table && isSubtype(getTableType(asTable(*exportedObjectPtr)), type) ? asTable(*exportedObjectPtr) : nullptr; } Memory* Runtime::getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::MemoryType& type) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr && (*exportedObjectPtr)->kind == ObjectKind::memory && isSubtype(getMemoryType(asMemory(*exportedObjectPtr)), type) ? asMemory(*exportedObjectPtr) : nullptr; } Global* Runtime::getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::GlobalType& type) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr && (*exportedObjectPtr)->kind == ObjectKind::global && isSubtype(asGlobal(*exportedObjectPtr)->type, type) ? asGlobal(*exportedObjectPtr) : nullptr; } Runtime::ExceptionType* Runtime::getTypedInstanceExport(const Instance* instance, const std::string& name, const IR::ExceptionType& type) { WAVM_ASSERT(instance); Object* const* exportedObjectPtr = instance->exportMap.get(name); return exportedObjectPtr && (*exportedObjectPtr)->kind == ObjectKind::function && isSubtype(asExceptionType(*exportedObjectPtr)->sig.params, type.params) ? asExceptionType(*exportedObjectPtr) : nullptr; } const std::vector& Runtime::getInstanceExports(const Instance* instance) { return instance->exports; } ================================================ FILE: Lib/Runtime/Intrinsics.cpp ================================================ #include "WAVM/Runtime/Intrinsics.h" #include #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Runtime/Runtime.h" namespace WAVM { namespace Intrinsics { struct ModuleImpl { HashMap functionMap; HashMap tableMap; HashMap memoryMap; HashMap globalMap; }; }} using namespace WAVM; using namespace WAVM::Runtime; using namespace WAVM::IR; Intrinsics::Module::~Module() { if(impl) { delete impl; } } static void initializeModule(Intrinsics::Module* moduleRef) { if(!moduleRef->impl) { moduleRef->impl = new Intrinsics::ModuleImpl; } } Intrinsics::Function::Function(Intrinsics::Module* moduleRef, const char* inName, void* inNativeFunction, FunctionType inType) : name(inName), type(inType), nativeFunction(inNativeFunction) { initializeModule(moduleRef); if(moduleRef->impl->functionMap.contains(name)) { Errors::fatalf("Intrinsic function already registered: %s", name); } moduleRef->impl->functionMap.set(name, this); } Intrinsics::Global::Global(Intrinsics::Module* moduleRef, const char* inName, ValueType inType, Value inValue) : name(inName), type(inType), value(inValue) { initializeModule(moduleRef); if(moduleRef->impl->globalMap.contains(name)) { Errors::fatalf("Intrinsic global already registered: %s", name); } moduleRef->impl->globalMap.set(name, this); } Intrinsics::Table::Table(Intrinsics::Module* moduleRef, const char* inName, const TableType& inType) : name(inName), type(inType) { initializeModule(moduleRef); if(moduleRef->impl->tableMap.contains(name)) { Errors::fatalf("Intrinsic table already registered: %s", name); } moduleRef->impl->tableMap.set(name, this); } Intrinsics::Memory::Memory(Intrinsics::Module* moduleRef, const char* inName, const MemoryType& inType) : name(inName), type(inType) { initializeModule(moduleRef); if(moduleRef->impl->memoryMap.contains(name)) { Errors::fatalf("Intrinsic memory already registered: %s", name); } moduleRef->impl->memoryMap.set(name, this); } Instance* Intrinsics::instantiateModule( Compartment* compartment, const std::initializer_list& moduleRefs, std::string&& debugName) { Timing::Timer timer; IR::Module irModule(FeatureLevel::wavm); irModule.featureSpec.nonWASMFunctionTypes = true; DisassemblyNames names; std::vector functionImportBindings; for(const Intrinsics::Module* moduleRef : moduleRefs) { if(moduleRef->impl) { for(const auto& pair : moduleRef->impl->functionMap) { functionImportBindings.push_back({pair.value->getNativeFunction()}); const Uptr typeIndex = irModule.types.size(); const Uptr functionIndex = irModule.functions.size(); irModule.types.push_back(pair.value->getType()); irModule.functions.imports.push_back({{typeIndex}, "", pair.value->getName()}); irModule.imports.push_back({ExternKind::function, functionIndex}); names.functions.push_back({pair.value->getName(), {}, {}}); } for(const auto& pair : moduleRef->impl->tableMap) { const Uptr tableIndex = irModule.tables.size(); irModule.tables.defs.push_back({pair.value->getType()}); names.tables.push_back(pair.value->getName()); irModule.exports.push_back({pair.value->getName(), ExternKind::table, tableIndex}); } for(const auto& pair : moduleRef->impl->memoryMap) { const Uptr memoryIndex = irModule.memories.size(); irModule.memories.defs.push_back({pair.value->getType()}); names.memories.push_back(pair.value->getName()); irModule.exports.push_back( {pair.value->getName(), ExternKind::memory, memoryIndex}); } for(const auto& pair : moduleRef->impl->globalMap) { InitializerExpression initializerExpression; switch(pair.value->getType()) { case ValueType::i32: initializerExpression.type = InitializerExpression::Type::i32_const; initializerExpression.i32 = pair.value->getValue().i32; break; case ValueType::i64: initializerExpression.type = InitializerExpression::Type::i64_const; initializerExpression.i64 = pair.value->getValue().i64; break; case ValueType::f32: initializerExpression.type = InitializerExpression::Type::f32_const; initializerExpression.f32 = pair.value->getValue().f32; break; case ValueType::f64: initializerExpression.type = InitializerExpression::Type::f64_const; initializerExpression.f64 = pair.value->getValue().f64; break; case ValueType::v128: initializerExpression.type = InitializerExpression::Type::v128_const; initializerExpression.v128 = pair.value->getValue().v128; break; case ValueType::externref: case ValueType::funcref: Errors::fatal("Intrinsic reference-typed globals are not supported"); case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); }; const Uptr globalIndex = irModule.globals.size(); irModule.globals.defs.push_back( {GlobalType(pair.value->getType(), false), initializerExpression}); names.globals.push_back(pair.value->getName()); irModule.exports.push_back( {pair.value->getName(), ExternKind::global, globalIndex}); } } } // Generate thunks for the intrinsic functions. for(Uptr functionImportIndex = 0; functionImportIndex < irModule.functions.imports.size(); ++functionImportIndex) { const FunctionImport& functionImport = irModule.functions.imports[functionImportIndex]; const FunctionType intrinsicFunctionType = irModule.types[functionImport.type.index]; const FunctionType wasmFunctionType(intrinsicFunctionType.results(), intrinsicFunctionType.params(), CallingConvention::wasm); const Uptr wasmFunctionTypeIndex = irModule.types.size(); irModule.types.push_back(wasmFunctionType); Serialization::ArrayOutputStream codeStream; OperatorEncoderStream opEncoder(codeStream); for(Uptr paramIndex = 0; paramIndex < intrinsicFunctionType.params().size(); ++paramIndex) { opEncoder.local_get({paramIndex}); } opEncoder.call({functionImportIndex}); opEncoder.end(); const Uptr wasmFunctionIndex = irModule.functions.size(); irModule.functions.defs.push_back({{wasmFunctionTypeIndex}, {}, codeStream.getBytes(), {}}); names.functions.push_back({"thunk:" + functionImport.exportName, {}, {}}); irModule.exports.push_back( {functionImport.exportName, ExternKind::function, wasmFunctionIndex}); } setDisassemblyNames(irModule, names); if(WAVM_ENABLE_ASSERTS) { try { std::shared_ptr moduleValidationState = IR::createModuleValidationState(irModule); validatePreCodeSections(*moduleValidationState); validateCodeSection(*moduleValidationState); validatePostCodeSections(*moduleValidationState); } catch(ValidationException const& exception) { Errors::fatalf("Validation exception in intrinsic module: %s", exception.message.c_str()); } } ModuleRef module = compileModule(irModule); Instance* instance = instantiateModuleInternal(compartment, module, std::move(functionImportBindings), {}, {}, {}, {}, std::move(debugName)); Timing::logTimer("Instantiated intrinsic module", timer); return instance; } HashMap Intrinsics::getUninstantiatedFunctions( const std::initializer_list& moduleRefs) { HashMap result; for(const Intrinsics::Module* moduleRef : moduleRefs) { if(moduleRef->impl) { for(const auto& pair : moduleRef->impl->functionMap) { result.addOrFail(pair.key, pair.value); } } } return result; } ================================================ FILE: Lib/Runtime/Invoke.cpp ================================================ #include #include "RuntimePrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; void Runtime::invokeFunction(Context* context, const Function* function, FunctionType invokeSig, const UntaggedValue arguments[], UntaggedValue outResults[]) { FunctionType functionType{function->encodedType}; // Verify that the invoke signature matches the function being invoked. if(invokeSig != functionType && !isSubtype(functionType, invokeSig)) { if(Log::isCategoryEnabled(Log::debug)) { Log::printf( Log::debug, "Invoke signature mismatch:\n Invoke signature: %s\n Invoked function type: %s\n", asString(invokeSig).c_str(), asString(getFunctionType(function)).c_str()); } throwException(ExceptionTypes::invokeSignatureMismatch); } // Assert that the function, the context, and any reference arguments are all in the same // compartment. if(WAVM_ENABLE_ASSERTS) { WAVM_ASSERT(isInCompartment(asObject(function), context->compartment)); for(Uptr argumentIndex = 0; argumentIndex < invokeSig.params().size(); ++argumentIndex) { const ValueType argType = invokeSig.params()[argumentIndex]; const UntaggedValue& arg = arguments[argumentIndex]; WAVM_ASSERT(!isReferenceType(argType) || !arg.object || isInCompartment(arg.object, context->compartment)); } } // Get the invoke thunk for this function type. Cache it in the function's FunctionMutableData // to avoid the global lock implied by LLVMJIT::getInvokeThunk. InvokeThunkPointer invokeThunk = function->mutableData->invokeThunk.load(std::memory_order_acquire); if(WAVM_UNLIKELY(!invokeThunk)) { invokeThunk = LLVMJIT::getInvokeThunk(functionType); // Replace the cached thunk pointer, but since LLVMJIT::getInvokeThunk is guaranteed to // return the same thunk when called with the same FunctionType, we can assume that any // other writes this might race with were are writing the same value. function->mutableData->invokeThunk.store(invokeThunk, std::memory_order_release); } WAVM_ASSERT(invokeThunk); // MacOS std::function is a little more pessimistic about heap allocating captures, and without // wrapping these captured variables into a single reference, does a heap allocation for the // thunk passed to unwindSignalsAsExceptions below. struct InvokeContext { Context* context; const Function* function; const UntaggedValue* arguments; UntaggedValue* outResults; InvokeThunkPointer invokeThunk; }; InvokeContext invokeContext; invokeContext.context = context; invokeContext.function = function; invokeContext.arguments = arguments; invokeContext.outResults = outResults; invokeContext.invokeThunk = invokeThunk; // Use unwindSignalsAsExceptions to ensure that any signal that occurs in WebAssembly code calls // C++ destructors on the stack between here and where it is caught. unwindSignalsAsExceptions([&invokeContext] { ContextRuntimeData* contextRuntimeData = getContextRuntimeData(invokeContext.context); // Call the invoke thunk. (*invokeContext.invokeThunk)(invokeContext.function, contextRuntimeData, invokeContext.arguments, invokeContext.outResults); }); } ================================================ FILE: Lib/Runtime/Linker.cpp ================================================ #include "WAVM/Runtime/Linker.h" #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Runtime/Runtime.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; Runtime::StubResolver::StubResolver(Compartment* inCompartment, StubFunctionBehavior inFunctionBehavior, bool inLogErrorOnStubGeneration, ResourceQuotaRefParam inResourceQuota) : compartment(inCompartment) , resourceQuota(inResourceQuota) , functionBehavior(inFunctionBehavior) , logErrorOnStubGeneration(inLogErrorOnStubGeneration) { } bool Runtime::StubResolver::resolve(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Runtime::Object*& outObject) { if(logErrorOnStubGeneration) { Log::printf(Log::error, "Generated stub for missing import %s.%s : %s\n", moduleName.c_str(), exportName.c_str(), asString(type).c_str()); } return generateStub( moduleName, exportName, type, outObject, compartment, functionBehavior, resourceQuota); } bool Runtime::generateStub(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Runtime::Object*& outObject, Compartment* compartment, StubFunctionBehavior functionBehavior, ResourceQuotaRefParam resourceQuota) { // If the import couldn't be resolved, stub it in. switch(type.kind) { case IR::ExternKind::function: { Serialization::ArrayOutputStream codeStream; OperatorEncoderStream encoder(codeStream); if(functionBehavior == StubFunctionBehavior::trap) { // Generate a function body that just uses the unreachable op to fault if called. encoder.unreachable(); } else { // Generate a function body that just returns some reasonable zero value. for(IR::ValueType result : asFunctionType(type).results()) { switch(result) { case IR::ValueType::i32: encoder.i32_const({0}); break; case IR::ValueType::i64: encoder.i64_const({0}); break; case IR::ValueType::f32: encoder.f32_const({0.0f}); break; case IR::ValueType::f64: encoder.f64_const({0.0}); break; case IR::ValueType::v128: encoder.v128_const({V128{{0, 0}}}); break; case IR::ValueType::externref: encoder.ref_null({IR::ReferenceType::externref}); break; case IR::ValueType::funcref: encoder.ref_null({IR::ReferenceType::funcref}); break; case IR::ValueType::none: case IR::ValueType::any: default: WAVM_UNREACHABLE(); }; } } encoder.end(); // Generate a module for the stub function. IR::Module stubIRModule(FeatureLevel::wavm); DisassemblyNames stubModuleNames; stubIRModule.types.push_back(asFunctionType(type)); stubIRModule.functions.defs.push_back({{0}, {}, std::move(codeStream.getBytes()), {}}); stubIRModule.exports.push_back({"importStub", IR::ExternKind::function, 0}); stubModuleNames.functions.push_back( {"importStub: " + exportName + " (" + asString(asFunctionType(type)) + ")"}); IR::setDisassemblyNames(stubIRModule, stubModuleNames); if(WAVM_ENABLE_ASSERTS) { try { std::shared_ptr moduleValidationState = IR::createModuleValidationState(stubIRModule); IR::validatePreCodeSections(*moduleValidationState); IR::validateCodeSection(*moduleValidationState); IR::validatePostCodeSections(*moduleValidationState); } catch(const ValidationException& exception) { Errors::fatalf("Stub module failed validation: %s", exception.message.c_str()); } } // Instantiate the module and return the stub function instance. auto stubModule = compileModule(stubIRModule); auto stubInstance = instantiateModule(compartment, stubModule, {}, "importStub", resourceQuota); if(!stubInstance) { return false; } outObject = getInstanceExport(stubInstance, "importStub"); WAVM_ASSERT(outObject); return true; } case IR::ExternKind::memory: { outObject = asObject(Runtime::createMemory( compartment, asMemoryType(type), std::string(exportName), resourceQuota)); return outObject != nullptr; } case IR::ExternKind::table: { outObject = asObject(Runtime::createTable( compartment, asTableType(type), nullptr, std::string(exportName), resourceQuota)); return outObject != nullptr; } case IR::ExternKind::global: { outObject = asObject(Runtime::createGlobal( compartment, asGlobalType(type), std::string(exportName), resourceQuota)); return outObject != nullptr; } case IR::ExternKind::exceptionType: { outObject = asObject( Runtime::createExceptionType(compartment, asExceptionType(type), "importStub")); return outObject != nullptr; } case IR::ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } template static void linkImport(const IR::Module& module, const Import& import, ResolvedType resolvedType, Resolver& resolver, LinkResult& linkResult) { // Ask the resolver for a value for this import. Object* importValue; if(resolver.resolve(import.moduleName, import.exportName, resolvedType, importValue)) { // Sanity check that the resolver returned an object of the right type. WAVM_ASSERT(importValue); WAVM_ASSERT(isA(importValue, resolvedType)); linkResult.resolvedImports.push_back(importValue); } else { linkResult.missingImports.push_back({import.moduleName, import.exportName, resolvedType}); linkResult.resolvedImports.push_back(nullptr); } } LinkResult Runtime::linkModule(const IR::Module& module, Resolver& resolver) { LinkResult linkResult; WAVM_ASSERT(module.imports.size() == module.functions.imports.size() + module.tables.imports.size() + module.memories.imports.size() + module.globals.imports.size() + module.exceptionTypes.imports.size()); for(const auto& kindIndex : module.imports) { switch(kindIndex.kind) { case ExternKind::function: { const auto& functionImport = module.functions.imports[kindIndex.index]; linkImport(module, functionImport, module.types[functionImport.type.index], resolver, linkResult); break; } case ExternKind::table: { const auto& tableImport = module.tables.imports[kindIndex.index]; linkImport(module, tableImport, tableImport.type, resolver, linkResult); break; } case ExternKind::memory: { const auto& memoryImport = module.memories.imports[kindIndex.index]; linkImport(module, memoryImport, memoryImport.type, resolver, linkResult); break; } case ExternKind::global: { const auto& globalImport = module.globals.imports[kindIndex.index]; linkImport(module, globalImport, globalImport.type, resolver, linkResult); break; } case ExternKind::exceptionType: { const auto& exceptionTypeImport = module.exceptionTypes.imports[kindIndex.index]; linkImport(module, exceptionTypeImport, exceptionTypeImport.type, resolver, linkResult); break; } case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } linkResult.success = linkResult.missingImports.size() == 0; return linkResult; } ================================================ FILE: Lib/Runtime/Memory.cpp ================================================ #include "WAVM/Platform/Memory.h" #include #include #include #include #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/IR.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Intrinsic.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; namespace WAVM { namespace Runtime { WAVM_DEFINE_INTRINSIC_MODULE(wavmIntrinsicsMemory) }} // Global lists of memories; used to query whether an address is reserved by one of them. static Platform::RWMutex memoriesMutex; static std::vector memories; static constexpr U64 maxMemory64WASMPages = #if WAVM_ENABLE_TSAN (U64(8) * 1024 * 1024 * 1024) >> IR::numBytesPerPageLog2; // 8GB #else (U64(1) * 1024 * 1024 * 1024 * 1024) >> IR::numBytesPerPageLog2; // 1TB #endif static Uptr getPlatformPagesPerWebAssemblyPageLog2() { WAVM_ERROR_UNLESS(Platform::getBytesPerPageLog2() <= IR::numBytesPerPageLog2); return IR::numBytesPerPageLog2 - Platform::getBytesPerPageLog2(); } static Memory* createMemoryImpl(Compartment* compartment, IR::MemoryType type, std::string&& debugName, ResourceQuotaRefParam resourceQuota) { Memory* memory = new Memory(compartment, type, std::move(debugName), resourceQuota); const Uptr pageBytesLog2 = Platform::getBytesPerPageLog2(); Uptr memoryMaxPages; if(type.indexType == IR::IndexType::i32) { static_assert(sizeof(Uptr) == 8, "WAVM's runtime requires a 64-bit host"); // For 32-bit memories on a 64-bit runtime, allocate 8GB of address space for the memory. // This allows eliding bounds checks on memory accesses, since a 32-bit index + 32-bit // offset will always be within the reserved address-space. memoryMaxPages = (Uptr(8) * 1024 * 1024 * 1024) >> pageBytesLog2; } else { // Clamp the maximum size of 64-bit memories to maxMemory64Bytes. memoryMaxPages = std::min(type.size.max, maxMemory64WASMPages); // Convert maxMemoryPages from fixed size WASM pages (64KB) to platform-specific pages. memoryMaxPages <<= getPlatformPagesPerWebAssemblyPageLog2(); } const Uptr numGuardPages = memoryNumGuardBytes >> pageBytesLog2; memory->baseAddress = Platform::allocateVirtualPages(memoryMaxPages + numGuardPages); memory->numReservedBytes = memoryMaxPages << pageBytesLog2; if(!memory->baseAddress) { delete memory; return nullptr; } // Grow the memory to the type's minimum size. if(growMemory(memory, type.size.min) != GrowResult::success) { delete memory; return nullptr; } // Add the memory to the global array. { Platform::RWMutex::ExclusiveLock memoriesLock(memoriesMutex); memories.push_back(memory); } return memory; } Memory* Runtime::createMemory(Compartment* compartment, IR::MemoryType type, std::string&& debugName, ResourceQuotaRefParam resourceQuota) { WAVM_ASSERT(type.size.min <= UINTPTR_MAX); Memory* memory = createMemoryImpl(compartment, type, std::move(debugName), resourceQuota); if(!memory) { return nullptr; } // Add the memory to the compartment's memories IndexMap. { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); memory->id = compartment->memories.add(UINTPTR_MAX, memory); if(memory->id == UINTPTR_MAX) { delete memory; return nullptr; } MemoryRuntimeData& runtimeData = compartment->runtimeData->memories[memory->id]; runtimeData.base = memory->baseAddress; runtimeData.endAddress = memory->numReservedBytes; runtimeData.numPages.store(memory->numPages.load(std::memory_order_acquire), std::memory_order_release); } return memory; } Memory* Runtime::cloneMemory(Memory* memory, Compartment* newCompartment) { Platform::RWMutex::ExclusiveLock resizingLock(memory->resizingMutex); const IR::MemoryType memoryType = getMemoryType(memory); std::string debugName = memory->debugName; Memory* newMemory = createMemoryImpl(newCompartment, memoryType, std::move(debugName), memory->resourceQuota); if(!newMemory) { return nullptr; } // Copy the memory contents to the new memory. memcpy(newMemory->baseAddress, memory->baseAddress, memoryType.size.min * IR::numBytesPerPage); resizingLock.unlock(); // Insert the memory in the new compartment's memories array with the same index as it had in // the original compartment's memories IndexMap. { Platform::RWMutex::ExclusiveLock compartmentLock(newCompartment->mutex); newMemory->id = memory->id; newCompartment->memories.insertOrFail(newMemory->id, newMemory); MemoryRuntimeData& runtimeData = newCompartment->runtimeData->memories[newMemory->id]; runtimeData.base = newMemory->baseAddress; runtimeData.numPages.store(newMemory->numPages, std::memory_order_release); runtimeData.endAddress = newMemory->numReservedBytes; } return newMemory; } Runtime::Memory::~Memory() { if(id != UINTPTR_MAX) { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); WAVM_ASSERT(compartment->memories[id] == this); compartment->memories.removeOrFail(id); MemoryRuntimeData& runtimeData = compartment->runtimeData->memories[id]; WAVM_ASSERT(runtimeData.base == baseAddress); runtimeData.base = nullptr; runtimeData.numPages.store(0, std::memory_order_release); runtimeData.endAddress = 0; } // Remove the memory from the global array. { Platform::RWMutex::ExclusiveLock memoriesLock(memoriesMutex); for(Uptr memoryIndex = 0; memoryIndex < memories.size(); ++memoryIndex) { if(memories[memoryIndex] == this) { memories.erase(memories.begin() + memoryIndex); break; } } } // Free the virtual address space. const Uptr pageBytesLog2 = Platform::getBytesPerPageLog2(); if(baseAddress && numReservedBytes > 0) { Platform::freeVirtualPages(baseAddress, (numReservedBytes + memoryNumGuardBytes) >> pageBytesLog2); Platform::deregisterVirtualAllocation(numPages >> pageBytesLog2); } // Free the allocated quota. if(resourceQuota) { resourceQuota->memoryPages.free(numPages); } } bool Runtime::isAddressOwnedByMemory(U8* address, Memory*& outMemory, Uptr& outMemoryAddress) { // Iterate over all memories and check if the address is within the reserved address space for // each. Platform::RWMutex::ShareableLock memoriesLock(memoriesMutex); for(auto memory : memories) { U8* startAddress = memory->baseAddress; U8* endAddress = memory->baseAddress + memory->numReservedBytes + memoryNumGuardBytes; if(address >= startAddress && address < endAddress) { outMemory = memory; outMemoryAddress = address - startAddress; return true; } } return false; } Uptr Runtime::getMemoryNumPages(const Memory* memory) { return memory->numPages.load(std::memory_order_seq_cst); } IR::MemoryType Runtime::getMemoryType(const Memory* memory) { return IR::MemoryType(memory->isShared, memory->indexType, IR::SizeConstraints{getMemoryNumPages(memory), memory->maxPages}); } GrowResult Runtime::growMemory(Memory* memory, Uptr numPagesToGrow, Uptr* outOldNumPages) { Uptr oldNumPages; if(numPagesToGrow == 0) { oldNumPages = memory->numPages.load(std::memory_order_seq_cst); } else { // Check the memory page quota. if(memory->resourceQuota && !memory->resourceQuota->memoryPages.allocate(numPagesToGrow)) { return GrowResult::outOfQuota; } Platform::RWMutex::ExclusiveLock resizingLock(memory->resizingMutex); oldNumPages = memory->numPages.load(std::memory_order_acquire); // If the number of pages to grow would cause the memory's size to exceed its maximum, // return GrowResult::outOfMaxSize. const U64 maxMemoryPages = memory->indexType == IR::IndexType::i32 ? IR::maxMemory32Pages : std::min(maxMemory64WASMPages, IR::maxMemory64Pages); if(numPagesToGrow > memory->maxPages || oldNumPages > memory->maxPages - numPagesToGrow || numPagesToGrow > maxMemoryPages || oldNumPages > maxMemoryPages - numPagesToGrow) { if(memory->resourceQuota) { memory->resourceQuota->memoryPages.free(numPagesToGrow); } return GrowResult::outOfMaxSize; } // Try to commit the new pages, and return GrowResult::outOfMemory if the commit fails. if(!Platform::commitVirtualPages( memory->baseAddress + oldNumPages * IR::numBytesPerPage, numPagesToGrow << getPlatformPagesPerWebAssemblyPageLog2())) { if(memory->resourceQuota) { memory->resourceQuota->memoryPages.free(numPagesToGrow); } return GrowResult::outOfMemory; } Platform::registerVirtualAllocation(numPagesToGrow << getPlatformPagesPerWebAssemblyPageLog2()); const Uptr newNumPages = oldNumPages + numPagesToGrow; memory->numPages.store(newNumPages, std::memory_order_release); if(memory->id != UINTPTR_MAX) { memory->compartment->runtimeData->memories[memory->id].numPages.store( newNumPages, std::memory_order_release); } } if(outOldNumPages) { *outOldNumPages = oldNumPages; } return GrowResult::success; } void Runtime::unmapMemoryPages(Memory* memory, Uptr pageIndex, Uptr numPages) { WAVM_ASSERT(pageIndex + numPages > pageIndex); WAVM_ASSERT((pageIndex + numPages) * IR::numBytesPerPage <= memory->numReservedBytes); // Decommit the pages. Platform::decommitVirtualPages(memory->baseAddress + pageIndex * IR::numBytesPerPage, numPages << getPlatformPagesPerWebAssemblyPageLog2()); Platform::deregisterVirtualAllocation(numPages << getPlatformPagesPerWebAssemblyPageLog2()); } U8* Runtime::getMemoryBaseAddress(Memory* memory) { return memory->baseAddress; } static U8* getValidatedMemoryOffsetRangeImpl(Memory* memory, U8* memoryBase, Uptr memoryNumBytes, Uptr address, Uptr numBytes) { if(address + numBytes > memoryNumBytes || address + numBytes < address) { throwException( ExceptionTypes::outOfBoundsMemoryAccess, {asObject(memory), U64(address > memoryNumBytes ? address : memoryNumBytes)}); } WAVM_ASSERT(memoryBase); numBytes = branchlessMin(numBytes, memoryNumBytes); return memoryBase + branchlessMin(address, memoryNumBytes - numBytes); } U8* Runtime::getReservedMemoryOffsetRange(Memory* memory, Uptr address, Uptr numBytes) { WAVM_ASSERT(memory); // Validate that the range [offset..offset+numBytes) is contained by the memory's reserved // pages. return ::getValidatedMemoryOffsetRangeImpl( memory, memory->baseAddress, memory->numReservedBytes, address, numBytes); } U8* Runtime::getValidatedMemoryOffsetRange(Memory* memory, Uptr address, Uptr numBytes) { WAVM_ASSERT(memory); // Validate that the range [offset..offset+numBytes) is contained by the memory's committed // pages. return ::getValidatedMemoryOffsetRangeImpl( memory, memory->baseAddress, memory->numPages.load(std::memory_order_acquire) * IR::numBytesPerPage, address, numBytes); } void Runtime::initDataSegment(Instance* instance, Uptr dataSegmentIndex, const std::vector* dataVector, Memory* memory, Uptr destAddress, Uptr sourceOffset, Uptr numBytes) { U8* destPointer = getValidatedMemoryOffsetRange(memory, destAddress, numBytes); if(sourceOffset + numBytes > dataVector->size() || sourceOffset + numBytes < sourceOffset) { throwException( ExceptionTypes::outOfBoundsDataSegmentAccess, {asObject(instance), U64(dataSegmentIndex), U64(sourceOffset > dataVector->size() ? sourceOffset : dataVector->size())}); } else { Runtime::unwindSignalsAsExceptions([destPointer, sourceOffset, numBytes, dataVector] { bytewiseMemCopy(destPointer, dataVector->data() + sourceOffset, numBytes); }); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsMemory, "memory.grow", Iptr, memory_grow, Uptr deltaPages, Uptr memoryId) { Memory* memory = getMemoryFromRuntimeData(contextRuntimeData, memoryId); Uptr oldNumPages = 0; if(growMemory(memory, deltaPages, &oldNumPages) != GrowResult::success) { return -1; } WAVM_ASSERT(oldNumPages <= INTPTR_MAX); return Iptr(oldNumPages); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsMemory, "memory.init", void, memory_init, Uptr destAddress, Uptr sourceOffset, Uptr numBytes, Uptr instanceId, Uptr memoryId, Uptr dataSegmentIndex) { Instance* instance = getInstanceFromRuntimeData(contextRuntimeData, instanceId); Memory* memory = getMemoryFromRuntimeData(contextRuntimeData, memoryId); Platform::RWMutex::ShareableLock dataSegmentsLock(instance->dataSegmentsMutex); if(!instance->dataSegments[dataSegmentIndex]) { if(sourceOffset != 0 || numBytes != 0) { throwException(ExceptionTypes::outOfBoundsDataSegmentAccess, {instance, dataSegmentIndex, sourceOffset}, 1); } if(destAddress > getMemoryNumPages(memory) * IR::numBytesPerPage) { throwException(ExceptionTypes::outOfBoundsMemoryAccess, {memory, U64(destAddress)}); } } else { // Make a copy of the shared_ptr to the data and unlock the data segments mutex. std::shared_ptr> dataVector = instance->dataSegments[dataSegmentIndex]; dataSegmentsLock.unlock(); initDataSegment(instance, dataSegmentIndex, dataVector.get(), memory, destAddress, sourceOffset, numBytes); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsMemory, "data.drop", void, data_drop, Uptr instanceId, Uptr dataSegmentIndex) { Instance* instance = getInstanceFromRuntimeData(contextRuntimeData, instanceId); Platform::RWMutex::ExclusiveLock dataSegmentsLock(instance->dataSegmentsMutex); if(instance->dataSegments[dataSegmentIndex]) { instance->dataSegments[dataSegmentIndex].reset(); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "memoryOutOfBoundsTrap", void, outOfBoundsMemoryTrap, Uptr address, Uptr numBytes, Uptr memoryNumBytes, Uptr memoryId) { Compartment* compartment = getCompartmentFromContextRuntimeData(contextRuntimeData); Platform::RWMutex::ShareableLock compartmentLock(compartment->mutex); Memory* memory = compartment->memories[memoryId]; compartmentLock.unlock(); const U64 outOfBoundsAddress = U64(address) > memoryNumBytes ? U64(address) : memoryNumBytes; throwException(ExceptionTypes::outOfBoundsMemoryAccess, {memory, outOfBoundsAddress}, 1); } ================================================ FILE: Lib/Runtime/Module.cpp ================================================ #include "WAVM/IR/Module.h" #include #include #include #include "RuntimePrivate.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Timing.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASM/WASM.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; Platform::RWMutex globalObjectCacheMutex; std::shared_ptr globalObjectCache; void Runtime::setGlobalObjectCache(std::shared_ptr&& objectCache) { Platform::RWMutex::ExclusiveLock globalObjectCacheLock(globalObjectCacheMutex); globalObjectCache = std::move(objectCache); } static std::shared_ptr getGlobalObjectCache() { Platform::RWMutex::ShareableLock globalObjectCacheLock(globalObjectCacheMutex); return globalObjectCache; } ModuleRef Runtime::compileModule(const IR::Module& irModule) { // Get a pointer to the global object cache, if there is one. std::shared_ptr objectCache = getGlobalObjectCache(); std::vector objectCode; if(!objectCache) { // If there's no global object cache, just compile the module. objectCode = LLVMJIT::compileModule(irModule, LLVMJIT::getHostTargetSpec()); } else { // Serialize the IR module to WASM. Timing::Timer keyTimer; std::vector wasmBytes = WASM::saveBinaryModule(irModule); Timing::logTimer("Created object cache key from IR module", keyTimer); // Check for cached object code for the module before compiling it. objectCode = objectCache->getCachedObject(wasmBytes.data(), wasmBytes.size(), [&irModule]() { return LLVMJIT::compileModule(irModule, LLVMJIT::getHostTargetSpec()); }); } return std::make_shared(IR::Module(irModule), std::move(objectCode)); } bool Runtime::loadBinaryModule(const U8* wasmBytes, Uptr numWASMBytes, ModuleRef& outModule, const IR::FeatureSpec& featureSpec, WASM::LoadError* outError) { // Load the module IR. IR::Module irModule(std::move(featureSpec)); if(!WASM::loadBinaryModule(wasmBytes, numWASMBytes, irModule, outError)) { return false; } // Get a pointer to the global object cache, if there is one. std::shared_ptr objectCache = getGlobalObjectCache(); std::vector objectCode; if(!objectCache) { // If there's no global object cache, just compile the module. objectCode = LLVMJIT::compileModule(irModule, LLVMJIT::getHostTargetSpec()); } else { // Check for cached object code for the module before compiling it. objectCode = objectCache->getCachedObject(wasmBytes, numWASMBytes, [&irModule]() { return LLVMJIT::compileModule(irModule, LLVMJIT::getHostTargetSpec()); }); } outModule = std::make_shared(std::move(irModule), std::move(objectCode)); return true; } ModuleRef Runtime::loadPrecompiledModule(const IR::Module& irModule, const std::vector& objectCode) { return std::make_shared(IR::Module(irModule), std::vector(objectCode)); } const IR::Module& Runtime::getModuleIR(ModuleConstRefParam module) { return module->ir; } std::vector Runtime::getObjectCode(ModuleConstRefParam module) { return module->objectCode; } ================================================ FILE: Lib/Runtime/ObjectGC.cpp ================================================ #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; Runtime::GCObject::GCObject(ObjectKind inKind, Compartment* inCompartment, std::string&& inDebugName) : Object{inKind} , compartment(inCompartment) , userData(nullptr) , finalizeUserData(nullptr) , debugName(inDebugName) { } #define IMPLEMENT_GCOBJECT_REFCOUNTING(Type) \ void Runtime::addGCRoot(const Type* object) { ++object->numRootReferences; } \ void Runtime::removeGCRoot(const Type* object) noexcept { --object->numRootReferences; } IMPLEMENT_GCOBJECT_REFCOUNTING(Table) IMPLEMENT_GCOBJECT_REFCOUNTING(Memory) IMPLEMENT_GCOBJECT_REFCOUNTING(Global) IMPLEMENT_GCOBJECT_REFCOUNTING(ExceptionType) IMPLEMENT_GCOBJECT_REFCOUNTING(Instance) IMPLEMENT_GCOBJECT_REFCOUNTING(Context) IMPLEMENT_GCOBJECT_REFCOUNTING(Compartment) IMPLEMENT_GCOBJECT_REFCOUNTING(Foreign) void Runtime::addGCRoot(const Function* function) { WAVM_ASSERT(function->mutableData); ++function->mutableData->numRootReferences; } void Runtime::removeGCRoot(const Function* function) noexcept { WAVM_ASSERT(function->mutableData); --function->mutableData->numRootReferences; } void Runtime::addGCRoot(const Object* object) { if(object->kind == ObjectKind::function) { addGCRoot((const Function*)object); } else { const GCObject* gcObject = static_cast(object); ++gcObject->numRootReferences; } } void Runtime::removeGCRoot(const Object* object) noexcept { if(object->kind == ObjectKind::function) { removeGCRoot((const Function*)object); } else { GCObject* gcObject = (GCObject*)object; --gcObject->numRootReferences; } } struct GCState { Compartment* compartment; HashSet unreferencedObjects; std::vector pendingScanObjects; GCState(Compartment* inCompartment) : compartment(inCompartment) {} void visitReference(Object* object) { if(object) { if(object->kind == ObjectKind::function) { Function* function = asFunction(object); if(function->instanceId != UINTPTR_MAX) { WAVM_ASSERT(compartment->instances.contains(function->instanceId)); Instance* instance = compartment->instances[function->instanceId]; visitReference(instance); } } else if(unreferencedObjects.remove((GCObject*)object)) { pendingScanObjects.push_back((GCObject*)object); } } } template void visitReferenceArray(const Array& array) { for(auto reference : array) { visitReference(asObject(reference)); } } void initGCObject(GCObject* object, bool forceRoot = false) { if(forceRoot || object->numRootReferences > 0) { pendingScanObjects.push_back(object); } else { unreferencedObjects.add(object); } } void scanObject(GCObject* object) { WAVM_ASSERT(!object->compartment || object->compartment == compartment); visitReference(object->compartment); // Gather the child references for this object based on its kind. switch(object->kind) { case ObjectKind::table: { Table* table = asTable(object); Platform::RWMutex::ShareableLock resizingLock(table->resizingMutex); const Uptr numElements = getTableNumElements(table); for(Uptr elementIndex = 0; elementIndex < numElements; ++elementIndex) { visitReference(getTableElement(table, elementIndex)); } break; } case ObjectKind::global: { Global* global = asGlobal(object); if(isReferenceType(global->type.valueType)) { if(global->type.isMutable) { visitReference( compartment->initialContextMutableGlobals[global->mutableGlobalIndex] .object); for(Context* context : compartment->contexts) { visitReference( context->runtimeData->mutableGlobals[global->mutableGlobalIndex] .object); } } visitReference(global->initialValue.object); } break; } case ObjectKind::instance: { Instance* instance = asInstance(object); visitReferenceArray(instance->functions); visitReferenceArray(instance->tables); visitReferenceArray(instance->memories); visitReferenceArray(instance->globals); visitReferenceArray(instance->exceptionTypes); break; } case ObjectKind::compartment: { WAVM_ASSERT(object == compartment); break; } case ObjectKind::memory: case ObjectKind::exceptionType: case ObjectKind::foreign: case ObjectKind::context: break; case ObjectKind::function: case ObjectKind::invalid: default: WAVM_UNREACHABLE(); }; } }; static bool collectGarbageImpl(Compartment* compartment) { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); Timing::Timer timer; GCState state(compartment); // Initialize the GC state from the compartment's various sets of objects. state.initGCObject(compartment); for(Instance* instance : compartment->instances) { if(instance) { // Transfer root markings from functions to their instance. bool hasRootFunction = false; for(Function* function : instance->functions) { if(function && function->mutableData->numRootReferences && function->instanceId == instance->id) { hasRootFunction = true; break; } } state.initGCObject(instance, hasRootFunction); } } for(Memory* memory : compartment->memories) { state.initGCObject(memory); } for(Table* table : compartment->tables) { state.initGCObject(table); } for(ExceptionType* exceptionType : compartment->exceptionTypes) { state.initGCObject(exceptionType); } for(Global* global : compartment->globals) { state.initGCObject(global); } for(Foreign* foreign : compartment->foreigns) { state.initGCObject(foreign); } for(Context* context : compartment->contexts) { state.initGCObject(context); } // Scan the objects added to the referenced set so far: gather their child references and // recurse. const Uptr numInitialObjects = state.pendingScanObjects.size() + state.unreferencedObjects.size(); const Uptr numRoots = state.pendingScanObjects.size(); while(state.pendingScanObjects.size()) { GCObject* object = state.pendingScanObjects.back(); state.pendingScanObjects.pop_back(); state.scanObject(object); }; // Delete each unreferenced object that isn't the compartment. bool wasCompartmentUnreferenced = false; for(GCObject* object : state.unreferencedObjects) { if(object == compartment) { wasCompartmentUnreferenced = true; } else { delete object; } } // Delete the compartment last, if it wasn't referenced. compartmentLock.unlock(); if(wasCompartmentUnreferenced) { delete compartment; } Log::printf(Log::metrics, "Collected garbage in %.2fms: %" WAVM_PRIuPTR " roots, %" WAVM_PRIuPTR " objects, %" WAVM_PRIuPTR " garbage\n", timer.getMilliseconds(), numRoots, numInitialObjects, Uptr(state.unreferencedObjects.size())); return wasCompartmentUnreferenced; } void Runtime::collectCompartmentGarbage(Compartment* compartment) { collectGarbageImpl(compartment); } bool Runtime::tryCollectCompartment(GCPointer&& compartmentRootRef) { Compartment* compartment = &*compartmentRootRef; compartmentRootRef = nullptr; return collectGarbageImpl(compartment); } ================================================ FILE: Lib/Runtime/ResourceQuota.cpp ================================================ #include #include "RuntimePrivate.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Runtime/Runtime.h" using namespace WAVM; using namespace WAVM::Runtime; ResourceQuotaRef Runtime::createResourceQuota() { return std::make_shared(); } Uptr Runtime::getResourceQuotaMaxTableElems(ResourceQuotaConstRefParam resourceQuota) { return resourceQuota->tableElems.getMax(); } Uptr Runtime::getResourceQuotaCurrentTableElems(ResourceQuotaConstRefParam resourceQuota) { return resourceQuota->tableElems.getCurrent(); } void Runtime::setResourceQuotaMaxTableElems(ResourceQuotaRefParam resourceQuota, Uptr maxTableElems) { resourceQuota->tableElems.setMax(maxTableElems); } Uptr Runtime::getResourceQuotaMaxMemoryPages(ResourceQuotaConstRefParam resourceQuota) { return resourceQuota->memoryPages.getMax(); } Uptr Runtime::getResourceQuotaCurrentMemoryPages(ResourceQuotaConstRefParam resourceQuota) { return resourceQuota->memoryPages.getCurrent(); } void Runtime::setResourceQuotaMaxMemoryPages(ResourceQuotaRefParam resourceQuota, Uptr maxMemoryPages) { resourceQuota->memoryPages.setMax(maxMemoryPages); } ================================================ FILE: Lib/Runtime/Runtime.cpp ================================================ #include "WAVM/Runtime/Runtime.h" #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; #define DEFINE_OBJECT_TYPE(kindId, kindName, Type) \ Runtime::Type* Runtime::as##kindName(Object* object) \ { \ WAVM_ASSERT(!object || object->kind == kindId); \ return (Runtime::Type*)object; \ } \ Runtime::Type* Runtime::as##kindName##Nullable(Object* object) \ { \ return object && object->kind == kindId ? (Runtime::Type*)object : nullptr; \ } \ const Runtime::Type* Runtime::as##kindName(const Object* object) \ { \ WAVM_ASSERT(!object || object->kind == kindId); \ return (const Runtime::Type*)object; \ } \ const Runtime::Type* Runtime::as##kindName##Nullable(const Object* object) \ { \ return object && object->kind == kindId ? (const Runtime::Type*)object : nullptr; \ } \ Object* Runtime::asObject(Runtime::Type* object) { return (Object*)object; } \ const Object* Runtime::asObject(const Runtime::Type* object) { return (const Object*)object; } #define DEFINE_GCOBJECT_TYPE(kindId, kindName, Type) \ DEFINE_OBJECT_TYPE(kindId, kindName, Type) \ void Runtime::setUserData(Runtime::Type* object, void* userData, void (*finalizer)(void*)) \ { \ object->userData = userData; \ object->finalizeUserData = finalizer; \ } \ void* Runtime::getUserData(const Runtime::Type* object) { return object->userData; } \ const std::string& Runtime::getDebugName(const Type* object) { return object->debugName; } DEFINE_GCOBJECT_TYPE(ObjectKind::table, Table, Table); DEFINE_GCOBJECT_TYPE(ObjectKind::memory, Memory, Memory); DEFINE_GCOBJECT_TYPE(ObjectKind::global, Global, Global); DEFINE_GCOBJECT_TYPE(ObjectKind::exceptionType, ExceptionType, ExceptionType); DEFINE_GCOBJECT_TYPE(ObjectKind::instance, Instance, Instance); DEFINE_GCOBJECT_TYPE(ObjectKind::context, Context, Context); DEFINE_GCOBJECT_TYPE(ObjectKind::compartment, Compartment, Compartment); DEFINE_GCOBJECT_TYPE(ObjectKind::foreign, Foreign, Foreign); DEFINE_OBJECT_TYPE(ObjectKind::function, Function, Function); void Runtime::setUserData(Runtime::Function* function, void* userData, void (*finalizer)(void*)) { function->mutableData->userData = userData; function->mutableData->finalizeUserData = finalizer; } void* Runtime::getUserData(const Runtime::Function* function) { return function->mutableData->userData; } const std::string& Runtime::getDebugName(const Runtime::Function* function) { return function->mutableData->debugName; } void Runtime::setUserData(Runtime::Object* object, void* userData, void (*finalizer)(void*)) { if(object->kind == ObjectKind::function) { setUserData(asFunction(object), userData, finalizer); } else { auto gcObject = (GCObject*)object; gcObject->userData = userData; gcObject->finalizeUserData = finalizer; } } void* Runtime::getUserData(const Runtime::Object* object) { if(object->kind == ObjectKind::function) { return getUserData(asFunction(object)); } else { auto gcObject = (GCObject*)object; return gcObject->userData; } } const std::string& Runtime::getDebugName(const Runtime::Object* object) { if(object->kind == ObjectKind::function) { return getDebugName(asFunction(object)); } else { auto gcObject = (GCObject*)object; return gcObject->debugName; } } Runtime::GCObject::~GCObject() { WAVM_ASSERT(numRootReferences.load(std::memory_order_acquire) == 0); if(finalizeUserData) { (*finalizeUserData)(userData); } } bool Runtime::isA(const Object* object, const ExternType& type) { if(ObjectKind(type.kind) != object->kind) { return false; } switch(type.kind) { case ExternKind::function: return asFunction(object)->encodedType == asFunctionType(type); case ExternKind::global: return isSubtype(asGlobal(object)->type, asGlobalType(type)); case ExternKind::table: return isSubtype(getTableType(asTable(object)), asTableType(type)); case ExternKind::memory: return isSubtype(getMemoryType(asMemory(object)), asMemoryType(type)); case ExternKind::exceptionType: return isSubtype(asExceptionType(type).params, asExceptionType(object)->sig.params); case ExternKind::invalid: default: WAVM_UNREACHABLE(); } } ExternType Runtime::getExternType(const Object* object) { switch(object->kind) { case ObjectKind::function: return FunctionType(asFunction(object)->encodedType); case ObjectKind::global: return asGlobal(object)->type; case ObjectKind::table: return getTableType(asTable(object)); case ObjectKind::memory: return getMemoryType(asMemory(object)); case ObjectKind::exceptionType: return asExceptionType(object)->sig; case ObjectKind::instance: case ObjectKind::context: case ObjectKind::compartment: case ObjectKind::foreign: case ObjectKind::invalid: default: WAVM_UNREACHABLE(); }; } FunctionType Runtime::getFunctionType(const Function* function) { return function->encodedType; } Context* Runtime::getContextFromRuntimeData(ContextRuntimeData* contextRuntimeData) { return contextRuntimeData->context; } Compartment* Runtime::getCompartmentFromContextRuntimeData( struct ContextRuntimeData* contextRuntimeData) { const CompartmentRuntimeData* compartmentRuntimeData = getCompartmentRuntimeData(contextRuntimeData); return compartmentRuntimeData->compartment; } ContextRuntimeData* Runtime::getContextRuntimeData(const Context* context) { return context->runtimeData; } Instance* Runtime::getInstanceFromRuntimeData(ContextRuntimeData* contextRuntimeData, Uptr instanceId) { Compartment* compartment = getCompartmentRuntimeData(contextRuntimeData)->compartment; Platform::RWMutex::ShareableLock compartmentLock(compartment->mutex); WAVM_ASSERT(compartment->instances.contains(instanceId)); return compartment->instances[instanceId]; } Table* Runtime::getTableFromRuntimeData(ContextRuntimeData* contextRuntimeData, Uptr tableId) { Compartment* compartment = getCompartmentRuntimeData(contextRuntimeData)->compartment; Platform::RWMutex::ShareableLock compartmentLock(compartment->mutex); WAVM_ASSERT(compartment->tables.contains(tableId)); return compartment->tables[tableId]; } Memory* Runtime::getMemoryFromRuntimeData(ContextRuntimeData* contextRuntimeData, Uptr memoryId) { Compartment* compartment = getCompartmentRuntimeData(contextRuntimeData)->compartment; Platform::RWMutex::ShareableLock compartmentLock(compartment->mutex); return compartment->memories[memoryId]; } Runtime::Foreign::~Foreign() { if(id != UINTPTR_MAX) { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); compartment->foreigns.removeOrFail(id); } } Foreign* Runtime::createForeign(Compartment* compartment, void* userData, void (*finalizer)(void*), std::string&& debugName) { Foreign* foreign = new Foreign(compartment, std::move(debugName)); setUserData(foreign, userData, finalizer); { Platform::RWMutex::ExclusiveLock lock(compartment->mutex); foreign->id = compartment->foreigns.add(UINTPTR_MAX, foreign); if(foreign->id == UINTPTR_MAX) { delete foreign; return nullptr; } } return foreign; } ================================================ FILE: Lib/Runtime/RuntimePrivate.h ================================================ #pragma once #include #include #include #include #include #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/DenseStaticIntSet.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/IndexMap.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" namespace WAVM { namespace Intrinsics { struct Module; }} namespace WAVM { namespace Runtime { // A private base class for all runtime objects that are garbage collected. struct GCObject : Object { Compartment* const compartment; mutable std::atomic numRootReferences{0}; void* userData{nullptr}; void (*finalizeUserData)(void*); std::string debugName; GCObject(ObjectKind inKind, Compartment* inCompartment, std::string&& inDebugName); virtual ~GCObject(); }; // An instance of a WebAssembly Table. struct Table : GCObject { struct Element { std::atomic biasedValue; }; Uptr id = UINTPTR_MAX; const IR::ReferenceType elementType; const bool isShared; const IR::IndexType indexType; const U64 maxElements; Element* elements = nullptr; Uptr numReservedBytes = 0; Uptr numReservedElements = 0; mutable Platform::RWMutex resizingMutex; std::atomic numElements{0}; ResourceQuotaRef resourceQuota; Table(Compartment* inCompartment, const IR::TableType& inType, std::string&& inDebugName, ResourceQuotaRefParam inResourceQuota) : GCObject(ObjectKind::table, inCompartment, std::move(inDebugName)) , elementType(inType.elementType) , isShared(inType.isShared) , indexType(inType.indexType) , maxElements(inType.size.max) , resourceQuota(inResourceQuota) { } ~Table() override; }; // This is used as a sentinel value for table elements that are out-of-bounds. The address of // this Object is subtracted from every address stored in the table, so zero-initialized pages // at the end of the array will, when re-adding this Function's address, point to this Object. extern Object* getOutOfBoundsElement(); // An instance of a WebAssembly Memory. struct Memory : GCObject { Uptr id = UINTPTR_MAX; const bool isShared; const IR::IndexType indexType; const U64 maxPages; U8* baseAddress = nullptr; Uptr numReservedBytes = 0; mutable Platform::RWMutex resizingMutex; std::atomic numPages{0}; ResourceQuotaRef resourceQuota; Memory(Compartment* inCompartment, const IR::MemoryType& inType, std::string&& inDebugName, ResourceQuotaRefParam inResourceQuota) : GCObject(ObjectKind::memory, inCompartment, std::move(inDebugName)) , isShared(inType.isShared) , indexType(inType.indexType) , maxPages(inType.size.max) , resourceQuota(inResourceQuota) { } ~Memory() override; }; // An instance of a WebAssembly global. struct Global : GCObject { Uptr id = UINTPTR_MAX; const IR::GlobalType type; const U32 mutableGlobalIndex; IR::UntaggedValue initialValue; bool hasBeenInitialized; Global(Compartment* inCompartment, IR::GlobalType inType, U32 inMutableGlobalId, std::string&& inDebugName, IR::UntaggedValue inInitialValue = IR::UntaggedValue()) : GCObject(ObjectKind::global, inCompartment, std::move(inDebugName)) , type(inType) , mutableGlobalIndex(inMutableGlobalId) , initialValue(inInitialValue) , hasBeenInitialized(false) { } ~Global() override; }; // An instance of a WebAssembly exception type. struct ExceptionType : GCObject { Uptr id = UINTPTR_MAX; IR::ExceptionType sig; ExceptionType(Compartment* inCompartment, IR::ExceptionType inSig, std::string&& inDebugName) : GCObject(ObjectKind::exceptionType, inCompartment, std::move(inDebugName)), sig(inSig) { } ~ExceptionType() override; }; typedef std::vector>> DataSegmentVector; typedef std::vector> ElemSegmentVector; // A compiled WebAssembly module. struct Module { IR::Module ir; std::vector objectCode; Module(IR::Module&& inIR, std::vector&& inObjectCode) : ir(inIR), objectCode(std::move(inObjectCode)) { } }; // An instance of a WebAssembly module. struct Instance : GCObject { const Uptr id; const HashMap exportMap; const std::vector exports; const std::vector functions; const std::vector tables; const std::vector memories; const std::vector globals; const std::vector exceptionTypes; Function* const startFunction; mutable Platform::RWMutex dataSegmentsMutex; DataSegmentVector dataSegments; mutable Platform::RWMutex elemSegmentsMutex; ElemSegmentVector elemSegments; const std::shared_ptr jitModule; ResourceQuotaRef resourceQuota; Instance(Compartment* inCompartment, Uptr inID, HashMap&& inExportMap, std::vector&& inExports, std::vector&& inFunctions, std::vector&& inTables, std::vector&& inMemories, std::vector&& inGlobals, std::vector&& inExceptionTypes, Function* inStartFunction, DataSegmentVector&& inPassiveDataSegments, ElemSegmentVector&& inPassiveElemSegments, std::shared_ptr&& inJITModule, std::string&& inDebugName, ResourceQuotaRefParam inResourceQuota) : GCObject(ObjectKind::instance, inCompartment, std::move(inDebugName)) , id(inID) , exportMap(std::move(inExportMap)) , exports(std::move(inExports)) , functions(std::move(inFunctions)) , tables(std::move(inTables)) , memories(std::move(inMemories)) , globals(std::move(inGlobals)) , exceptionTypes(std::move(inExceptionTypes)) , startFunction(inStartFunction) , dataSegments(std::move(inPassiveDataSegments)) , elemSegments(std::move(inPassiveElemSegments)) , jitModule(std::move(inJITModule)) , resourceQuota(inResourceQuota) { } virtual ~Instance() override; }; struct Context : GCObject { Uptr id = UINTPTR_MAX; struct ContextRuntimeData* runtimeData = nullptr; Context(Compartment* inCompartment, std::string&& inDebugName) : GCObject(ObjectKind::context, inCompartment, std::move(inDebugName)) { } ~Context(); }; struct Compartment : GCObject { mutable Platform::RWMutex mutex; struct CompartmentRuntimeData* const runtimeData; U8* const unalignedRuntimeData; IndexMap tables; IndexMap memories; IndexMap globals; IndexMap exceptionTypes; IndexMap instances; IndexMap contexts; IndexMap foreigns; DenseStaticIntSet globalDataAllocationMask; IR::UntaggedValue initialContextMutableGlobals[maxMutableGlobals]; Compartment(std::string&& inDebugName, struct CompartmentRuntimeData* inRuntimeData, U8* inUnalignedRuntimeData); ~Compartment(); }; struct Foreign : GCObject { Uptr id = UINTPTR_MAX; Foreign(Compartment* inCompartment, std::string&& inDebugName) : GCObject(ObjectKind::foreign, inCompartment, std::move(inDebugName)) { } ~Foreign(); }; struct ResourceQuota { template struct CurrentAndMax { CurrentAndMax(Value inMax) : current{0}, max(inMax) {} bool allocate(Value delta) { Platform::RWMutex::ExclusiveLock lock(mutex); // Make sure the delta doesn't make current overflow. if(current + delta < current) { return false; } if(current + delta > max) { return false; } current += delta; return true; } void free(Value delta) { Platform::RWMutex::ExclusiveLock lock(mutex); WAVM_ASSERT(current - delta <= current); current -= delta; } Value getCurrent() const { Platform::RWMutex::ShareableLock lock(mutex); return current; } Value getMax() const { Platform::RWMutex::ShareableLock lock(mutex); return max; } void setMax(Value newMax) { Platform::RWMutex::ExclusiveLock lock(mutex); max = newMax; } private: mutable Platform::RWMutex mutex; Value current; Value max; }; CurrentAndMax memoryPages{UINTPTR_MAX}; CurrentAndMax tableElems{UINTPTR_MAX}; }; WAVM_DECLARE_INTRINSIC_MODULE(wavmIntrinsics); WAVM_DECLARE_INTRINSIC_MODULE(wavmIntrinsicsAtomics); WAVM_DECLARE_INTRINSIC_MODULE(wavmIntrinsicsException); WAVM_DECLARE_INTRINSIC_MODULE(wavmIntrinsicsMemory); WAVM_DECLARE_INTRINSIC_MODULE(wavmIntrinsicsTable); // Checks whether an address is owned by a table or memory. bool isAddressOwnedByTable(U8* address, Table*& outTable, Uptr& outTableIndex); bool isAddressOwnedByMemory(U8* address, Memory*& outMemory, Uptr& outMemoryAddress); // Clones objects into a new compartment with the same ID. Table* cloneTable(Table* memory, Compartment* newCompartment); Memory* cloneMemory(Memory* memory, Compartment* newCompartment); ExceptionType* cloneExceptionType(ExceptionType* exceptionType, Compartment* newCompartment); Instance* cloneInstance(Instance* instance, Compartment* newCompartment); // Clone a global with same ID and mutable data offset (if mutable) in a new compartment. Global* cloneGlobal(Global* global, Compartment* newCompartment); Instance* getInstanceFromRuntimeData(ContextRuntimeData* contextRuntimeData, Uptr instanceId); Table* getTableFromRuntimeData(ContextRuntimeData* contextRuntimeData, Uptr tableId); Memory* getMemoryFromRuntimeData(ContextRuntimeData* contextRuntimeData, Uptr memoryId); // Initialize a data segment (equivalent to executing a memory.init instruction). void initDataSegment(Instance* instance, Uptr dataSegmentIndex, const std::vector* dataVector, Memory* memory, Uptr destAddress, Uptr sourceOffset, Uptr numBytes); // Initialize a table segment (equivalent to executing a table.init instruction). void initElemSegment(Instance* instance, Uptr elemSegmentIndex, const IR::ElemSegment::Contents* contents, Table* table, Uptr destOffset, Uptr sourceOffset, Uptr numElems); // This function is like Runtime::instantiateModule, but allows binding function imports // directly to native code. The interpretation of each FunctionImportBinding is determined by // the import's calling convention: // An import with CallingConvention::wasm reads FunctionImportBinding::wasmFunction, // but all other imports read FunctionImportBinding::nativeFunction. struct FunctionImportBinding { union { Function* wasmFunction; const void* nativeFunction; }; FunctionImportBinding(Function* inWASMFunction) : wasmFunction(inWASMFunction) {} FunctionImportBinding(void* inNativeFunction) : nativeFunction(inNativeFunction) {} }; Instance* instantiateModuleInternal(Compartment* compartment, ModuleConstRefParam module, std::vector&& functionImports, std::vector&& tableImports, std::vector&& memoryImports, std::vector&& globalImports, std::vector&& exceptionTypeImports, std::string&& debugName, ResourceQuotaRefParam resourceQuota = ResourceQuotaRef()); }} namespace WAVM { namespace Intrinsics { HashMap getUninstantiatedFunctions( const std::initializer_list& moduleRefs); }} ================================================ FILE: Lib/Runtime/Table.cpp ================================================ #include #include #include #include #include #include #include "RuntimePrivate.h" #include "WAVM/IR/IR.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/Diagnostics.h" #include "WAVM/Platform/Intrinsic.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; namespace WAVM { namespace Runtime { WAVM_DEFINE_INTRINSIC_MODULE(wavmIntrinsicsTable) }} // Global lists of tables; used to query whether an address is reserved by one of them. static Platform::RWMutex tablesMutex; static std::vector tables; static constexpr Uptr numGuardPages = 1; static constexpr U64 maxTable32Elems = U64(UINT32_MAX) + 1; static constexpr U64 maxTable64Elems = U64(128) * 1024 * 1024 * 1024; static Uptr getNumPlatformPages(Uptr numBytes) { return (numBytes + Platform::getBytesPerPage() - 1) >> Platform::getBytesPerPageLog2(); } static Function* makeDummyFunction(const char* debugName) { FunctionMutableData* functionMutableData = new FunctionMutableData(debugName); Function* function = new Function(functionMutableData, UINTPTR_MAX, IR::FunctionType::Encoding{0}); functionMutableData->function = function; return function; } Object* Runtime::getOutOfBoundsElement() { static Function* function = makeDummyFunction("out-of-bounds table element"); return asObject(function); } static Object* getUninitializedElement() { static Function* function = makeDummyFunction("uninitialized table element"); return asObject(function); } static Uptr objectToBiasedTableElementValue(Object* object) { return reinterpret_cast(object) - reinterpret_cast(getOutOfBoundsElement()); } static Object* biasedTableElementValueToObject(Uptr biasedValue) { return reinterpret_cast(biasedValue + reinterpret_cast(getOutOfBoundsElement())); } static Table* createTableImpl(Compartment* compartment, IR::TableType type, std::string&& debugName, ResourceQuotaRefParam resourceQuota) { Table* table = new Table(compartment, type, std::move(debugName), resourceQuota); const U64 tableMaxElements = std::min( type.size.max, type.indexType == IR::IndexType::i32 ? maxTable32Elems : maxTable64Elems); const U64 tableMaxBytes = sizeof(Table::Element) * tableMaxElements; const U64 tableMaxPages = (tableMaxBytes + Platform::getBytesPerPage() - 1) >> Platform::getBytesPerPageLog2(); table->elements = (Table::Element*)Platform::allocateVirtualPages(tableMaxPages + numGuardPages); table->numReservedBytes = tableMaxBytes; table->numReservedElements = tableMaxElements; if(!table->elements) { delete table; return nullptr; } // Add the table to the global array. { Platform::RWMutex::ExclusiveLock tablesLock(tablesMutex); tables.push_back(table); } return table; } static GrowResult growTableImpl(Table* table, Uptr numElementsToGrow, Uptr* outOldNumElements, bool initializeNewElements, Runtime::Object* initializeToElement = getUninitializedElement()) { Uptr oldNumElements; if(!numElementsToGrow) { oldNumElements = table->numElements.load(std::memory_order_acquire); } else { // Check the table element quota. if(table->resourceQuota && !table->resourceQuota->tableElems.allocate(numElementsToGrow)) { return GrowResult::outOfQuota; } Platform::RWMutex::ExclusiveLock resizingLock(table->resizingMutex); oldNumElements = table->numElements.load(std::memory_order_acquire); // If the growth would cause the table's size to exceed its maximum, return // GrowResult::outOfMaxSize. const U64 maxTableElems = table->indexType == IR::IndexType::i32 ? IR::maxTable32Elems : ::maxTable64Elems; if(numElementsToGrow > table->maxElements || oldNumElements > table->maxElements - numElementsToGrow || numElementsToGrow > maxTableElems || oldNumElements > maxTableElems - numElementsToGrow) { if(table->resourceQuota) { table->resourceQuota->tableElems.free(numElementsToGrow); } return GrowResult::outOfMaxSize; } // Try to commit pages for the new elements, and return GrowResult::outOfMemory if the // commit fails. const Uptr newNumElements = oldNumElements + numElementsToGrow; const Uptr previousNumPlatformPages = getNumPlatformPages(oldNumElements * sizeof(Table::Element)); const Uptr newNumPlatformPages = getNumPlatformPages(newNumElements * sizeof(Table::Element)); if(newNumPlatformPages != previousNumPlatformPages && !Platform::commitVirtualPages( (U8*)table->elements + (previousNumPlatformPages << Platform::getBytesPerPageLog2()), newNumPlatformPages - previousNumPlatformPages)) { if(table->resourceQuota) { table->resourceQuota->tableElems.free(numElementsToGrow); } return GrowResult::outOfMemory; } Platform::registerVirtualAllocation((newNumPlatformPages - previousNumPlatformPages) << Platform::getBytesPerPageLog2()); if(initializeNewElements) { // Write the uninitialized sentinel value to the new elements. const Uptr biasedTableInitElement = objectToBiasedTableElementValue(initializeToElement); for(Uptr elementIndex = oldNumElements; elementIndex < newNumElements; ++elementIndex) { table->elements[elementIndex].biasedValue.store(biasedTableInitElement, std::memory_order_release); } } table->numElements.store(newNumElements, std::memory_order_release); } if(outOldNumElements) { *outOldNumElements = oldNumElements; } return GrowResult::success; } Table* Runtime::createTable(Compartment* compartment, IR::TableType type, Object* element, std::string&& debugName, ResourceQuotaRefParam resourceQuota) { WAVM_ASSERT(type.size.min <= UINTPTR_MAX); Table* table = createTableImpl(compartment, type, std::move(debugName), resourceQuota); if(!table) { return nullptr; } // If element is null, use the uninitialized element sentinel instead. if(!element) { element = getUninitializedElement(); } else { WAVM_ERROR_UNLESS(isSubtype(asReferenceType(getExternType(element)), type.elementType)); } // Grow the table to the type's minimum size. if(growTableImpl(table, Uptr(type.size.min), nullptr, true, element) != GrowResult::success) { delete table; return nullptr; } // Add the table to the compartment's tables IndexMap. { Platform::RWMutex::ExclusiveLock compartmentLock(compartment->mutex); table->id = compartment->tables.add(UINTPTR_MAX, table); if(table->id == UINTPTR_MAX) { delete table; return nullptr; } compartment->runtimeData->tables[table->id].base = table->elements; compartment->runtimeData->tables[table->id].endIndex = table->numReservedElements; } return table; } Table* Runtime::cloneTable(Table* table, Compartment* newCompartment) { Platform::RWMutex::ExclusiveLock resizingLock(table->resizingMutex); // Create the new table. const IR::TableType tableType = getTableType(table); std::string debugName = table->debugName; Table* newTable = createTableImpl(newCompartment, tableType, std::move(debugName), table->resourceQuota); if(!newTable) { return nullptr; } // Grow the table to the same size as the original, without initializing the new elements since // they will be written immediately following this. if(growTableImpl(newTable, tableType.size.min, nullptr, false) != GrowResult::success) { delete newTable; return nullptr; } // Copy the original table's elements to the new table. for(Uptr elementIndex = 0; elementIndex < tableType.size.min; ++elementIndex) { newTable->elements[elementIndex].biasedValue.store( table->elements[elementIndex].biasedValue.load(std::memory_order_acquire), std::memory_order_release); } resizingLock.unlock(); // Insert the table in the new compartment's tables array with the same index as it had in the // original compartment's tables IndexMap. { Platform::RWMutex::ExclusiveLock compartmentLock(newCompartment->mutex); newTable->id = table->id; newCompartment->tables.insertOrFail(newTable->id, newTable); newCompartment->runtimeData->tables[newTable->id].base = newTable->elements; newCompartment->runtimeData->tables[newTable->id].endIndex = newTable->numReservedElements; } return newTable; } Table::~Table() { if(id != UINTPTR_MAX) { WAVM_ASSERT_RWMUTEX_IS_EXCLUSIVELY_LOCKED_BY_CURRENT_THREAD(compartment->mutex); WAVM_ASSERT(compartment->tables[id] == this); compartment->tables.removeOrFail(id); WAVM_ASSERT(compartment->runtimeData->tables[id].base == elements); compartment->runtimeData->tables[id].base = nullptr; compartment->runtimeData->tables[id].endIndex = 0; } // Remove the table from the global array. { Platform::RWMutex::ExclusiveLock tablesLock(tablesMutex); for(Uptr tableIndex = 0; tableIndex < tables.size(); ++tableIndex) { if(tables[tableIndex] == this) { tables.erase(tables.begin() + tableIndex); break; } } } // Free the virtual address space. const Uptr pageBytesLog2 = Platform::getBytesPerPageLog2(); if(elements && numReservedBytes > 0) { Platform::freeVirtualPages((U8*)elements, (numReservedBytes >> pageBytesLog2) + numGuardPages); Platform::deregisterVirtualAllocation( getNumPlatformPages(numElements * sizeof(Table::Element)) << Platform::getBytesPerPageLog2()); } // Free the allocated quota. if(resourceQuota) { resourceQuota->tableElems.free(numElements); } } bool Runtime::isAddressOwnedByTable(U8* address, Table*& outTable, Uptr& outTableIndex) { // Iterate over all tables and check if the address is within the reserved address space for // each. Platform::RWMutex::ShareableLock tablesLock(tablesMutex); for(auto table : tables) { U8* startAddress = (U8*)table->elements; U8* endAddress = ((U8*)table->elements) + table->numReservedBytes; if(address >= startAddress && address < endAddress) { outTable = table; outTableIndex = (address - startAddress) / sizeof(Table::Element); return true; } } return false; } static Object* setTableElementNonNull(Table* table, Uptr index, Object* object) { WAVM_ASSERT(object); // Verify the index is within the table's bounds. if(index >= table->numReservedElements) { throwException(ExceptionTypes::outOfBoundsTableAccess, {table, U64(index)}); } // Use a saturated index to access the table data to ensure that it's harmless for the CPU to // speculate past the above bounds check. const Uptr saturatedIndex = branchlessMin(index, U64(table->numReservedElements) - 1); // Compute the biased value to store in the table. const Uptr biasedValue = objectToBiasedTableElementValue(object); // Atomically replace the table element, throwing an out-of-bounds exception before the write if // the element being replaced is an out-of-bounds sentinel value. Uptr oldBiasedValue = table->elements[saturatedIndex].biasedValue; while(true) { if(biasedTableElementValueToObject(oldBiasedValue) == getOutOfBoundsElement()) { throwException(ExceptionTypes::outOfBoundsTableAccess, {table, U64(index)}); } if(table->elements[saturatedIndex].biasedValue.compare_exchange_weak( oldBiasedValue, biasedValue, std::memory_order_acq_rel)) { break; } }; return biasedTableElementValueToObject(oldBiasedValue); } static Object* getTableElementNonNull(const Table* table, Uptr index) { // Verify the index is within the table's bounds. if(index >= table->numReservedElements) { throwException(ExceptionTypes::outOfBoundsTableAccess, {const_cast(table), U64(index)}); } // Use a saturated index to access the table data to ensure that it's harmless for the CPU to // speculate past the above bounds check. const Uptr saturatedIndex = branchlessMin(index, U64(table->numReservedElements) - 1); // Read the table element. const Uptr biasedValue = table->elements[saturatedIndex].biasedValue.load(std::memory_order_acquire); Object* object = biasedTableElementValueToObject(biasedValue); // If the element was an out-of-bounds sentinel value, throw an out-of-bounds exception. if(object == getOutOfBoundsElement()) { throwException(ExceptionTypes::outOfBoundsTableAccess, {const_cast(table), U64(index)}); } WAVM_ASSERT(object); return object; } Object* Runtime::setTableElement(Table* table, Uptr index, Object* newValue) { WAVM_ASSERT(!newValue || isInCompartment(newValue, table->compartment)); // If the new value is null, write the uninitialized sentinel value instead. if(!newValue) { newValue = getUninitializedElement(); } // Write the table element. Object* oldObject = nullptr; Runtime::unwindSignalsAsExceptions([table, index, newValue, &oldObject] { oldObject = setTableElementNonNull(table, index, newValue); }); // If the old table element was the uninitialized sentinel value, return null. return oldObject == getUninitializedElement() ? nullptr : oldObject; } Object* Runtime::getTableElement(const Table* table, Uptr index) { Object* object = nullptr; Runtime::unwindSignalsAsExceptions( [table, index, &object] { object = getTableElementNonNull(table, index); }); // If the old table element was the uninitialized sentinel value, return null. return object == getUninitializedElement() ? nullptr : object; } Uptr Runtime::getTableNumElements(const Table* table) { return table->numElements.load(std::memory_order_acquire); } IR::TableType Runtime::getTableType(const Table* table) { return IR::TableType(table->elementType, table->isShared, table->indexType, IR::SizeConstraints{getTableNumElements(table), table->maxElements}); } GrowResult Runtime::growTable(Table* table, Uptr numElementsToGrow, Uptr* outOldNumElements, Object* initialElement) { // If the initial value is null, write the uninitialized sentinel value instead. if(!initialElement) { initialElement = getUninitializedElement(); } return growTableImpl(table, numElementsToGrow, outOldNumElements, true, initialElement); } void Runtime::initElemSegment(Instance* instance, Uptr elemSegmentIndex, const IR::ElemSegment::Contents* contents, Table* table, Uptr destOffset, Uptr sourceOffset, Uptr numElems) { Uptr numSourceElems; switch(contents->encoding) { case IR::ElemSegment::Encoding::expr: numSourceElems = contents->elemExprs.size(); break; case IR::ElemSegment::Encoding::index: numSourceElems = contents->elemIndices.size(); break; default: WAVM_UNREACHABLE(); }; if(sourceOffset + numElems > numSourceElems || sourceOffset + numElems < sourceOffset) { throwException(ExceptionTypes::outOfBoundsElemSegmentAccess, {instance, U64(elemSegmentIndex), U64(sourceOffset > numSourceElems ? sourceOffset : numSourceElems)}); } else { const Uptr numTableElems = getTableNumElements(table); if(destOffset + numElems > numTableElems || destOffset + numElems < destOffset) { throwException(ExceptionTypes::outOfBoundsTableAccess, {table, U64(destOffset > numTableElems ? destOffset : numTableElems)}); } } // Assert that the segment's elems are the right type for the table. switch(contents->encoding) { case IR::ElemSegment::Encoding::expr: WAVM_ASSERT(isSubtype(contents->elemType, table->elementType)); break; case IR::ElemSegment::Encoding::index: WAVM_ASSERT(isSubtype(asReferenceType(contents->externKind), table->elementType)); break; default: WAVM_UNREACHABLE(); }; for(Uptr index = 0; index < numElems; ++index) { Uptr sourceIndex = sourceOffset + index; const Uptr destIndex = destOffset + index; if(sourceIndex >= numSourceElems || sourceIndex < sourceOffset) { throwException(ExceptionTypes::outOfBoundsElemSegmentAccess, {asObject(instance), U64(elemSegmentIndex), sourceIndex}); } sourceIndex = branchlessMin(sourceIndex, numSourceElems); // Decode the element value. Object* elemObject = nullptr; switch(contents->encoding) { case IR::ElemSegment::Encoding::expr: { const IR::ElemExpr& elemExpr = contents->elemExprs[sourceIndex]; switch(elemExpr.type) { case IR::ElemExpr::Type::ref_null: elemObject = nullptr; break; case IR::ElemExpr::Type::ref_func: elemObject = asObject(instance->functions[elemExpr.index]); break; case IR::ElemExpr::Type::invalid: default: WAVM_UNREACHABLE(); } break; } case IR::ElemSegment::Encoding::index: { const Uptr externIndex = contents->elemIndices[sourceIndex]; switch(contents->externKind) { case IR::ExternKind::function: elemObject = asObject(instance->functions[externIndex]); break; case IR::ExternKind::table: elemObject = asObject(instance->tables[externIndex]); break; case IR::ExternKind::memory: elemObject = asObject(instance->memories[externIndex]); break; case IR::ExternKind::global: elemObject = asObject(instance->globals[externIndex]); break; case IR::ExternKind::exceptionType: elemObject = asObject(instance->exceptionTypes[externIndex]); break; case IR::ExternKind::invalid: default: WAVM_UNREACHABLE(); } break; } default: WAVM_UNREACHABLE(); }; setTableElement(table, destIndex, elemObject); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.grow", Iptr, table_grow, Object* initialValue, Uptr deltaNumElements, Uptr tableId) { Table* table = getTableFromRuntimeData(contextRuntimeData, tableId); Uptr oldNumElements = 0; if(growTable(table, deltaNumElements, &oldNumElements, initialValue ? initialValue : getUninitializedElement()) != GrowResult::success) { return -1; } WAVM_ASSERT(oldNumElements <= INTPTR_MAX); return Iptr(oldNumElements); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.size", Uptr, table_size, Uptr tableId) { Table* table = getTableFromRuntimeData(contextRuntimeData, tableId); return getTableNumElements(table); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.get", Object*, table_get, Uptr index, Uptr tableId) { Table* table = getTableFromRuntimeData(contextRuntimeData, tableId); return getTableElement(table, index); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.set", void, table_set, Uptr index, Object* value, Uptr tableId) { Table* table = getTableFromRuntimeData(contextRuntimeData, tableId); setTableElement(table, index, value); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.init", void, table_init, Uptr destIndex, Uptr sourceIndex, Uptr numElems, Uptr instanceId, Uptr tableId, Uptr elemSegmentIndex) { Instance* instance = getInstanceFromRuntimeData(contextRuntimeData, instanceId); Table* table = getTableFromRuntimeData(contextRuntimeData, tableId); Platform::RWMutex::ShareableLock elemSegmentsLock(instance->elemSegmentsMutex); if(!instance->elemSegments[elemSegmentIndex]) { if(sourceIndex != 0 || numElems != 0) { throwException(ExceptionTypes::outOfBoundsElemSegmentAccess, {instance, elemSegmentIndex, sourceIndex}, 1); } if(destIndex > getTableNumElements(table)) { throwException(ExceptionTypes::outOfBoundsTableAccess, {table, U64(destIndex)}); } } else { // Make a copy of the shared_ptr to the segment contents and unlock the elem segments mutex. std::shared_ptr contents = instance->elemSegments[elemSegmentIndex]; elemSegmentsLock.unlock(); initElemSegment( instance, elemSegmentIndex, contents.get(), table, destIndex, sourceIndex, numElems); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "elem.drop", void, elem_drop, Uptr instanceId, Uptr elemSegmentIndex) { Instance* instance = getInstanceFromRuntimeData(contextRuntimeData, instanceId); Platform::RWMutex::ExclusiveLock elemSegmentsLock(instance->elemSegmentsMutex); if(instance->elemSegments[elemSegmentIndex]) { instance->elemSegments[elemSegmentIndex].reset(); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.copy", void, table_copy, Uptr destOffset, Uptr sourceOffset, Uptr numElements, Uptr destTableId, Uptr sourceTableId) { Runtime::unwindSignalsAsExceptions([=] { Table* destTable = getTableFromRuntimeData(contextRuntimeData, destTableId); Table* sourceTable = getTableFromRuntimeData(contextRuntimeData, sourceTableId); const Uptr destOffsetUptr = Uptr(destOffset); const Uptr sourceOffsetUptr = Uptr(sourceOffset); const Uptr numElementsUptr = Uptr(numElements); const Uptr sourceTableNumElements = getTableNumElements(sourceTable); if(sourceOffsetUptr + numElementsUptr > sourceTableNumElements || sourceOffsetUptr + numElementsUptr < sourceOffsetUptr) { const Uptr outOfBoundsSourceOffset = sourceOffsetUptr > sourceTableNumElements ? sourceOffsetUptr : sourceTableNumElements; throwException( ExceptionTypes::outOfBoundsTableAccess, {sourceTable, outOfBoundsSourceOffset}, 1); } const Uptr destTableNumElements = getTableNumElements(destTable); if(destOffsetUptr + numElementsUptr > destTableNumElements || destOffsetUptr + numElementsUptr < destOffsetUptr) { const Uptr outOfBoundsDestOffset = destOffsetUptr > destTableNumElements ? destOffsetUptr : destTableNumElements; throwException( ExceptionTypes::outOfBoundsTableAccess, {destTable, outOfBoundsDestOffset}, 1); } if(sourceOffset < destOffset) { // When copying to higher indices, copy the elements in descending order to ensure that // source elements may only be overwritten after they have been copied. for(Uptr index = 0; index < numElements; ++index) { setTableElementNonNull( destTable, U64(destOffset) + U64(numElements - index - 1), getTableElementNonNull(sourceTable, U64(sourceOffset) + U64(numElements - index - 1))); } } else { for(Uptr index = 0; index < numElements; ++index) { setTableElementNonNull( destTable, U64(destOffset) + U64(index), getTableElementNonNull(sourceTable, U64(sourceOffset) + U64(index))); } } }); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "table.fill", void, table_fill, Uptr destOffset, Runtime::Object* value, Uptr numElements, Uptr destTableId) { // If the value is null, write the uninitialized sentinel value instead. if(!value) { value = getUninitializedElement(); } Runtime::unwindSignalsAsExceptions([=] { Table* destTable = getTableFromRuntimeData(contextRuntimeData, destTableId); const Uptr destOffsetUptr = Uptr(destOffset); const Uptr numElementsUptr = Uptr(numElements); const Uptr destTableNumElements = getTableNumElements(destTable); if(destOffsetUptr + numElementsUptr > destTableNumElements || destOffsetUptr + numElementsUptr < destOffsetUptr) { const Uptr outOfBoundsDestOffset = destOffsetUptr > destTableNumElements ? destOffsetUptr : destTableNumElements; throwException( ExceptionTypes::outOfBoundsTableAccess, {destTable, outOfBoundsDestOffset}, 1); } for(Uptr index = 0; index < numElements; ++index) { setTableElementNonNull(destTable, U64(destOffset) + U64(index), value); } }); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsicsTable, "callIndirectFail", void, callIndirectFail, Uptr index, Uptr tableId, Function* function, Uptr expectedTypeEncoding) { Table* table = getTableFromRuntimeData(contextRuntimeData, tableId); if(asObject(function) == getOutOfBoundsElement()) { throwException(ExceptionTypes::outOfBoundsTableAccess, {table, U64(index)}, 1); } else if(asObject(function) == getUninitializedElement()) { throwException(ExceptionTypes::uninitializedTableElement, {table, U64(index)}, 1); } else { throwException(ExceptionTypes::indirectCallSignatureMismatch, {function, U64(expectedTypeEncoding)}, 1); } } ================================================ FILE: Lib/Runtime/WAVMIntrinsics.cpp ================================================ #include #include #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" using namespace WAVM; using namespace WAVM::Runtime; namespace WAVM { namespace Runtime { WAVM_DEFINE_INTRINSIC_MODULE(wavmIntrinsics) }} WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "divideByZeroOrIntegerOverflowTrap", void, divideByZeroOrIntegerOverflowTrap) { throwException(ExceptionTypes::integerDivideByZeroOrOverflow, {}, 1); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "unreachableTrap", void, unreachableTrap) { throwException(ExceptionTypes::reachedUnreachable, {}, 1); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "invalidFloatOperationTrap", void, invalidFloatOperationTrap) { throwException(ExceptionTypes::invalidFloatOperation, {}, 1); } static thread_local Uptr indentLevel = 0; WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "debugEnterFunction", void, debugEnterFunction, const Function* function) { Log::printf(Log::debug, "ENTER: %*s\n", U32(indentLevel * 4 + function->mutableData->debugName.size()), function->mutableData->debugName.c_str()); ++indentLevel; } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "debugExitFunction", void, debugExitFunction, const Function* function) { --indentLevel; Log::printf(Log::debug, "EXIT: %*s\n", U32(indentLevel * 4 + function->mutableData->debugName.size()), function->mutableData->debugName.c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(wavmIntrinsics, "debugBreak", void, debugBreak) { Log::printf(Log::debug, "================== wavmIntrinsics.debugBreak\n"); } ================================================ FILE: Lib/ThreadTest/CMakeLists.txt ================================================ set(Sources ThreadTest.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/ThreadTest/ThreadTest.h) WAVM_ADD_LIB_COMPONENT(ThreadTest SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/ThreadTest/ThreadTest.cpp ================================================ #include "WAVM/Platform/Thread.h" #include #include #include #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/IndexMap.h" #include "WAVM/Inline/IntrusiveSharedPtr.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #include "WAVM/ThreadTest/ThreadTest.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; static constexpr Uptr numStackBytes = 1 * 1024 * 1024; // Keeps track of the entry function used by a running WebAssembly-spawned thread. // Used to find garbage collection roots. struct Thread { Uptr id = UINTPTR_MAX; std::atomic numRefs{0}; Platform::Thread* platformThread = nullptr; GCPointer context; GCPointer entryFunction; Platform::Mutex resultMutex; bool threwException = false; Exception* exception = nullptr; I64 result = -1; I32 argument; WAVM_FORCENOINLINE Thread(Context* inContext, Function* inEntryFunction, I32 inArgument) : context(inContext), entryFunction(inEntryFunction), argument(inArgument) { } void addRef(Uptr delta = 1) { numRefs += delta; } void removeRef() { if(--numRefs == 0) { delete this; } } }; struct ExitThreadException { I64 code; }; // A global list of running threads created by WebAssembly code. static Platform::Mutex threadsMutex; static IndexMap> threads(1, UINTPTR_MAX); // A shared pointer to the current thread. This is used to decrement the thread's reference count // when the thread exits. static thread_local IntrusiveSharedPtr currentThread = nullptr; // Adds the thread to the global thread array, assigning it an ID corresponding to its index in the // array. WAVM_FORCENOINLINE static Uptr allocateThreadId(Thread* thread) { Platform::Mutex::Lock threadsLock(threadsMutex); thread->id = threads.add(0, thread); WAVM_ERROR_UNLESS(thread->id != 0); return thread->id; } // Validates that a thread ID is valid. i.e. 0 < threadId < threads.size(), and threads[threadId] != // null If the thread ID is invalid, throws an invalid argument exception. The caller must have // already locked threadsMutex before calling validateThreadId. static void validateThreadId(Uptr threadId) { if(threadId == 0 || !threads.contains(threadId)) { throwException(ExceptionTypes::invalidArgument); } } WAVM_DEFINE_INTRINSIC_MODULE(threadTest); static I64 threadEntry(void* threadVoid) { // Assign the thread reference to currentThread, and discard it the local copy. { Thread* thread = (Thread*)threadVoid; currentThread = thread; thread->removeRef(); } catchRuntimeExceptions( []() { I64 result; try { UntaggedValue argumentValue{currentThread->argument}; UntaggedValue resultValue; invokeFunction(currentThread->context, currentThread->entryFunction, FunctionType({ValueType::i64}, {ValueType::i32}), &argumentValue, &resultValue); result = resultValue.i64; } catch(ExitThreadException& exitThreadException) { result = exitThreadException.code; } Platform::Mutex::Lock resultLock(currentThread->resultMutex); currentThread->result = result; }, [](Exception* exception) { Platform::Mutex::Lock resultLock(currentThread->resultMutex); if(currentThread->numRefs == 1) { // If the thread has already been detached, the exception is fatal. Errors::fatalf("Runtime exception in detached thread: %s", describeException(exception).c_str()); } else { currentThread->threwException = true; currentThread->exception = exception; } }); return 0; } WAVM_DEFINE_INTRINSIC_FUNCTION(threadTest, "createThread", U64, createThread, Function* entryFunction, I32 entryArgument) { // Validate that the entry function is non-null and has the correct type (i32)->i64 if(!entryFunction || IR::FunctionType{entryFunction->encodedType} != FunctionType(TypeTuple{ValueType::i64}, TypeTuple{ValueType::i32})) { throwException(Runtime::ExceptionTypes::indirectCallSignatureMismatch); } // Create a thread object that will expose its entry and error functions to the garbage // collector as roots. auto newContext = createContext(getCompartmentFromContextRuntimeData(contextRuntimeData)); Thread* thread = new Thread(newContext, entryFunction, entryArgument); allocateThreadId(thread); // Increment the Thread's reference count for the pointer passed to the thread's entry function. // threadFunc calls the corresponding removeRef. thread->addRef(); // Spawn and detach a platform thread that calls threadFunc. thread->platformThread = Platform::createThread(numStackBytes, threadEntry, thread); return thread->id; } WAVM_DEFINE_INTRINSIC_FUNCTION(threadTest, "exitThread", void, exitThread, I64 code) { if(!currentThread) { throwException(ExceptionTypes::calledAbort); } throw ExitThreadException{code}; } // Validates a thread ID, removes the corresponding thread from the threads array, and returns it. static IntrusiveSharedPtr removeThreadById(Uptr threadId) { IntrusiveSharedPtr thread; Platform::Mutex::Lock threadsLock(threadsMutex); validateThreadId(threadId); thread = std::move(threads[threadId]); threads.removeOrFail(threadId); WAVM_ASSERT(thread->id == Uptr(threadId)); thread->id = UINTPTR_MAX; return thread; } WAVM_DEFINE_INTRINSIC_FUNCTION(threadTest, "joinThread", I64, joinThread, U64 threadId) { IntrusiveSharedPtr thread = removeThreadById(Uptr(threadId)); Platform::joinThread(thread->platformThread); thread->platformThread = nullptr; Platform::Mutex::Lock resultLock(thread->resultMutex); if(thread->threwException) { throwException(thread->exception); } else { return thread->result; } } WAVM_DEFINE_INTRINSIC_FUNCTION(threadTest, "detachThread", void, detachThread, U64 threadId) { IntrusiveSharedPtr thread = removeThreadById(Uptr(threadId)); Platform::detachThread(thread->platformThread); thread->platformThread = nullptr; // If the thread threw an exception, turn it into a fatal error. Platform::Mutex::Lock resultLock(thread->resultMutex); if(thread->threwException) { Errors::fatalf("Runtime exception in detached thread: %s", describeException(thread->exception).c_str()); } } Instance* ThreadTest::instantiate(Compartment* compartment) { return Intrinsics::instantiateModule( compartment, {WAVM_INTRINSIC_MODULE_REF(threadTest)}, "threadTest"); } ================================================ FILE: Lib/VFS/CMakeLists.txt ================================================ set(Sources SandboxFS.cpp VFS.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/VFS/SandboxFS.h ${WAVM_INCLUDE_DIR}/VFS/VFS.h) WAVM_ADD_LIB_COMPONENT(VFS SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/VFS/SandboxFS.cpp ================================================ #include "WAVM/VFS/SandboxFS.h" #include #include #include "WAVM/Inline/Time.h" #include "WAVM/VFS/VFS.h" using namespace WAVM; using namespace WAVM::VFS; struct SandboxFS : FileSystem { SandboxFS(FileSystem* inInnerFS, const std::string& inRootPath) : innerFS(inInnerFS), rootPath(inRootPath) { if(rootPath.back() != '/' && rootPath.back() != '\\') { rootPath += '/'; } } virtual Result open(const std::string& path, FileAccessMode accessMode, FileCreateMode createMode, VFD*& outFD, const VFDFlags& flags) override { return innerFS->open(getInnerPath(path), accessMode, createMode, outFD, flags); } virtual Result getFileInfo(const std::string& path, FileInfo& outInfo) override { return innerFS->getFileInfo(getInnerPath(path), outInfo); } virtual Result setFileTimes(const std::string& path, bool setLastAccessTime, Time lastAccessTime, bool setLastWriteTime, Time lastWriteTime) override { return innerFS->setFileTimes( getInnerPath(path), setLastAccessTime, lastAccessTime, setLastWriteTime, lastWriteTime); } virtual Result openDir(const std::string& path, DirEntStream*& outStream) override { return innerFS->openDir(getInnerPath(path), outStream); } virtual Result renameFile(const std::string& oldPath, const std::string& newPath) override { return innerFS->renameFile(getInnerPath(oldPath), getInnerPath(newPath)); } virtual Result unlinkFile(const std::string& path) override { return innerFS->unlinkFile(getInnerPath(path)); } virtual Result removeDir(const std::string& path) override { return innerFS->removeDir(getInnerPath(path)); } virtual Result createDir(const std::string& path) override { return innerFS->createDir(getInnerPath(path)); } private: VFS::FileSystem* innerFS; std::string rootPath; std::string getInnerPath(const std::string& absolutePathName) { return rootPath + absolutePathName; } }; std::shared_ptr VFS::makeSandboxFS(FileSystem* innerFS, const std::string& innerRootPath) { return std::make_shared(innerFS, innerRootPath); } ================================================ FILE: Lib/VFS/VFS.cpp ================================================ #include "WAVM/VFS/VFS.h" #include "WAVM/Inline/Assert.h" using namespace WAVM; using namespace WAVM::VFS; const char* VFS::describeResult(Result result) { switch(result) { // clang-format off #define V(name, description) case VFS::Result::name: return description; WAVM_ENUM_VFS_RESULTS(V) #undef V // clang-format on default: WAVM_UNREACHABLE(); }; } ================================================ FILE: Lib/WASI/CMakeLists.txt ================================================ set(Sources WASI.cpp WASIArgsEnvs.cpp WASIClocks.cpp WASIDiagnostics.cpp WASIFile.cpp) set(PrivateHeaders WASIPrivate.h) set(PublicHeaders ${WAVM_INCLUDE_DIR}/WASI/WASI.h ${WAVM_INCLUDE_DIR}/WASI/WASIABI.h) WAVM_ADD_LIB_COMPONENT(WASI SOURCES ${Sources} HEADERS ${PublicHeaders} ${PrivateHeaders} NONCOMPILED_SOURCES ${WAVM_INCLUDE_DIR}/WASI/WASIABI.LICENSE) ================================================ FILE: Lib/WASI/WASI.cpp ================================================ #include "WAVM/WASI/WASI.h" #include #include #include #include #include #include "./WASIPrivate.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/IndexMap.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Clock.h" #include "WAVM/Platform/Random.h" #include "WAVM/Platform/Thread.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/VFS/VFS.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASI/WASIABI.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; using namespace WAVM::WASI; namespace WAVM { namespace WASI { WAVM_DEFINE_INTRINSIC_MODULE(wasi); }} bool ProcessResolver::resolve(const std::string& moduleName, const std::string& exportName, ExternType type, Object*& outObject) { const auto& namedInstance = moduleNameToInstanceMap.get(moduleName); if(namedInstance) { outObject = getInstanceExport(*namedInstance, exportName); if(outObject) { if(isA(outObject, type)) { return true; } else { Log::printf(Log::debug, "Resolved import %s.%s to a %s, but was expecting %s\n", moduleName.c_str(), exportName.c_str(), asString(getExternType(outObject)).c_str(), asString(type).c_str()); return false; } } } return false; } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "poll_oneoff", __wasi_errno_return_t, wasi_poll_oneoff, WASIAddress inAddress, WASIAddress outAddress, WASIAddress numSubscriptions, WASIAddress outNumEventsAddress) { UNIMPLEMENTED_SYSCALL("poll_oneoff", "(" WASIADDRESS_FORMAT ", " WASIADDRESS_FORMAT ", %u, " WASIADDRESS_FORMAT ")", inAddress, outAddress, numSubscriptions, outNumEventsAddress); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "proc_exit", void, wasi_proc_exit, __wasi_exitcode_t exitCode) { TRACE_SYSCALL("proc_exit", "(%u)", exitCode); throw ExitException{exitCode}; } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "proc_raise", __wasi_errno_return_t, wasi_proc_raise, __wasi_signal_t sig) { // proc_raise will possibly be removed: https://github.com/WebAssembly/WASI/issues/7 UNIMPLEMENTED_SYSCALL("proc_raise", "(%u)", sig); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "random_get", __wasi_errno_return_t, wasi_random_get, WASIAddress bufferAddress, WASIAddress numBufferBytes) { TRACE_SYSCALL("random_get", "(" WASIADDRESS_FORMAT ", %u)", bufferAddress, numBufferBytes); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); __wasi_errno_t result = __WASI_ESUCCESS; Runtime::catchRuntimeExceptions( [&] { U8* buffer = memoryArrayPtr(process->memory, bufferAddress, numBufferBytes); Platform::getCryptographicRNG(buffer, numBufferBytes); }, [&](Runtime::Exception* exception) { WAVM_ASSERT(getExceptionType(exception) == ExceptionTypes::outOfBoundsMemoryAccess); Runtime::destroyException(exception); result = __WASI_EFAULT; }); return TRACE_SYSCALL_RETURN(result); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "sock_recv", __wasi_errno_return_t, wasi_sock_recv, __wasi_fd_t sock, WASIAddress ri_data, WASIAddress ri_data_len, __wasi_riflags_t ri_flags, WASIAddress ro_datalen, WASIAddress ro_flags) { UNIMPLEMENTED_SYSCALL("sock_recv", "(%u, " WASIADDRESS_FORMAT ", %u, 0x%04x, " WASIADDRESS_FORMAT ", " WASIADDRESS_FORMAT ")", sock, ri_data, ri_data_len, ri_flags, ro_datalen, ro_flags); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "sock_send", __wasi_errno_return_t, wasi_sock_send, __wasi_fd_t sock, WASIAddress si_data, WASIAddress si_data_len, __wasi_siflags_t si_flags, WASIAddress so_datalen) { UNIMPLEMENTED_SYSCALL("sock_send", "(%u, " WASIADDRESS_FORMAT ", %u, 0x%04x, " WASIADDRESS_FORMAT ")", sock, si_data, si_data_len, si_flags, so_datalen); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "sock_shutdown", __wasi_errno_return_t, wasi_sock_shutdown, __wasi_fd_t sock, __wasi_sdflags_t how) { UNIMPLEMENTED_SYSCALL("sock_shutdown", "(%u, 0x%02x)", sock, how); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasi, "sched_yield", __wasi_errno_return_t, wasi_sched_yield) { TRACE_SYSCALL("sched_yield", "()"); Platform::yieldToAnotherThread(); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WASI::Process::~Process() { for(const std::shared_ptr& fde : fdMap) { VFS::Result result = fde->close(); if(result != VFS::Result::success) { Log::printf(Log::Category::debug, "Error while closing file because of process exit: %s\n", VFS::describeResult(result)); } } } std::shared_ptr WASI::createProcess(Runtime::Compartment* compartment, std::vector&& inArgs, std::vector&& inEnvs, VFS::FileSystem* fileSystem, VFS::VFD* stdIn, VFS::VFD* stdOut, VFS::VFD* stdErr) { std::shared_ptr process = std::make_shared(); process->args = std::move(inArgs); process->envs = std::move(inEnvs); process->fileSystem = fileSystem; process->compartment = compartment; setUserData(process->compartment, process.get(), nullptr); Instance* wasi_snapshot_preview1 = Intrinsics::instantiateModule(compartment, {WAVM_INTRINSIC_MODULE_REF(wasi), WAVM_INTRINSIC_MODULE_REF(wasiArgsEnvs), WAVM_INTRINSIC_MODULE_REF(wasiClocks), WAVM_INTRINSIC_MODULE_REF(wasiFile)}, "wasi_snapshot_preview1"); process->resolver.moduleNameToInstanceMap.set("wasi_unstable", wasi_snapshot_preview1); process->resolver.moduleNameToInstanceMap.set("wasi_snapshot_preview1", wasi_snapshot_preview1); __wasi_rights_t stdioRights = __WASI_RIGHT_FD_READ | __WASI_RIGHT_FD_FDSTAT_SET_FLAGS | __WASI_RIGHT_FD_WRITE | __WASI_RIGHT_FD_FILESTAT_GET | __WASI_RIGHT_POLL_FD_READWRITE; process->fdMap.insertOrFail(0, std::make_shared(stdIn, stdioRights, 0, "/dev/stdin")); process->fdMap.insertOrFail(1, std::make_shared(stdOut, stdioRights, 0, "/dev/stdout")); process->fdMap.insertOrFail(2, std::make_shared(stdErr, stdioRights, 0, "/dev/stderr")); if(fileSystem) { // Map the root directory as both / and ., which allows files to be opened from it using // either "/file" or just "file". const char* preopenedRootAliases[2] = {"/", "."}; for(Uptr aliasIndex = 0; aliasIndex < 2; ++aliasIndex) { VFS::VFD* rootFD = nullptr; VFS::Result openResult = fileSystem->open( "/", VFS::FileAccessMode::none, VFS::FileCreateMode::openExisting, rootFD); if(openResult != VFS::Result::success) { Errors::fatalf("Error opening WASI root directory: %s", VFS::describeResult(openResult)); } process->fdMap.insertOrFail( 3 + __wasi_fd_t(aliasIndex), std::make_shared(rootFD, DIRECTORY_RIGHTS, INHERITING_DIRECTORY_RIGHTS, preopenedRootAliases[aliasIndex], true, __wasi_preopentype_t(__WASI_PREOPENTYPE_DIR))); } } process->processClockOrigin = Platform::getClockTime(Platform::Clock::processCPUTime); return process; } Resolver& WASI::getProcessResolver(Process& process) { return process.resolver; } Process* WASI::getProcessFromContextRuntimeData(Runtime::ContextRuntimeData* contextRuntimeData) { return (Process*)Runtime::getUserData( Runtime::getCompartmentFromContextRuntimeData(contextRuntimeData)); } Memory* WASI::getProcessMemory(const Process& process) { return process.memory; } void WASI::setProcessMemory(Process& process, Memory* memory) { process.memory = memory; } I32 WASI::catchExit(std::function&& thunk) { try { return std::move(thunk)(); } catch(ExitException const& exitException) { return I32(exitException.exitCode); } } ================================================ FILE: Lib/WASI/WASIArgsEnvs.cpp ================================================ #include #include #include "./WASIPrivate.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASI/WASIABI.h" using namespace WAVM; using namespace WAVM::WASI; using namespace WAVM::Runtime; namespace WAVM { namespace WASI { WAVM_DEFINE_INTRINSIC_MODULE(wasiArgsEnvs) }} WAVM_DEFINE_INTRINSIC_FUNCTION(wasiArgsEnvs, "args_sizes_get", __wasi_errno_return_t, wasi_args_sizes_get, U32 argcAddress, U32 argBufSizeAddress) { TRACE_SYSCALL("args_sizes_get", "(" WASIADDRESS_FORMAT ", " WASIADDRESS_FORMAT ")", argcAddress, argBufSizeAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Uptr numArgBufferBytes = 0; for(const std::string& arg : process->args) { numArgBufferBytes += arg.size() + 1; } if(process->args.size() > WASIADDRESS_MAX || numArgBufferBytes > WASIADDRESS_MAX) { return TRACE_SYSCALL_RETURN(__WASI_EOVERFLOW); } memoryRef(process->memory, argcAddress) = WASIAddress(process->args.size()); memoryRef(process->memory, argBufSizeAddress) = WASIAddress(numArgBufferBytes); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiArgsEnvs, "args_get", __wasi_errno_return_t, wasi_args_get, U32 argvAddress, U32 argBufAddress) { TRACE_SYSCALL( "args_get", "(" WASIADDRESS_FORMAT ", " WASIADDRESS_FORMAT ")", argvAddress, argBufAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); WASIAddress nextArgBufAddress = argBufAddress; for(Uptr argIndex = 0; argIndex < process->args.size(); ++argIndex) { const std::string& arg = process->args[argIndex]; const Uptr numArgBytes = arg.size() + 1; if(numArgBytes > WASIADDRESS_MAX || nextArgBufAddress > WASIADDRESS_MAX - numArgBytes - 1) { return TRACE_SYSCALL_RETURN(__WASI_EOVERFLOW); } if(numArgBytes > 0) { memcpy(memoryArrayPtr(process->memory, nextArgBufAddress, numArgBytes), (const U8*)arg.c_str(), numArgBytes); } memoryRef(process->memory, argvAddress + argIndex * sizeof(U32)) = WASIAddress(nextArgBufAddress); nextArgBufAddress += WASIAddress(numArgBytes); } return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiArgsEnvs, "environ_sizes_get", __wasi_errno_return_t, wasi_environ_sizes_get, WASIAddress envCountAddress, WASIAddress envBufSizeAddress) { TRACE_SYSCALL("environ_sizes_get", "(" WASIADDRESS_FORMAT ", " WASIADDRESS_FORMAT ")", envCountAddress, envBufSizeAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Uptr numEnvBufferBytes = 0; for(const std::string& env : process->envs) { numEnvBufferBytes += env.size() + 1; } if(process->envs.size() > WASIADDRESS_MAX || numEnvBufferBytes > WASIADDRESS_MAX) { return TRACE_SYSCALL_RETURN(__WASI_EOVERFLOW); } memoryRef(process->memory, envCountAddress) = WASIAddress(process->envs.size()); memoryRef(process->memory, envBufSizeAddress) = WASIAddress(numEnvBufferBytes); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiArgsEnvs, "environ_get", __wasi_errno_return_t, wasi_environ_get, WASIAddress envvAddress, WASIAddress envBufAddress) { TRACE_SYSCALL("environ_get", "(" WASIADDRESS_FORMAT ", " WASIADDRESS_FORMAT ")", envvAddress, envBufAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); WASIAddress nextEnvBufAddress = envBufAddress; for(Uptr argIndex = 0; argIndex < process->envs.size(); ++argIndex) { const std::string& env = process->envs[argIndex]; const Uptr numEnvBytes = env.size() + 1; if(numEnvBytes > WASIADDRESS_MAX || nextEnvBufAddress > WASIADDRESS_MAX - numEnvBytes - 1) { return TRACE_SYSCALL_RETURN(__WASI_EOVERFLOW); } if(numEnvBytes > 0) { memcpy(memoryArrayPtr(process->memory, nextEnvBufAddress, numEnvBytes), (const U8*)env.c_str(), numEnvBytes); } memoryRef(process->memory, envvAddress + argIndex * sizeof(U32)) = WASIAddress(nextEnvBufAddress); nextEnvBufAddress += WASIAddress(numEnvBytes); } return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } ================================================ FILE: Lib/WASI/WASIClocks.cpp ================================================ #include #include "./WASIPrivate.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Clock.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASI/WASIABI.h" using namespace WAVM; using namespace WAVM::WASI; using namespace WAVM::Runtime; namespace WAVM { namespace WASI { WAVM_DEFINE_INTRINSIC_MODULE(wasiClocks) }} static bool getPlatformClock(__wasi_clockid_t clock, Platform::Clock& outPlatformClock) { switch(clock) { case __WASI_CLOCK_REALTIME: outPlatformClock = Platform::Clock::realtime; return true; case __WASI_CLOCK_MONOTONIC: outPlatformClock = Platform::Clock::monotonic; return true; case __WASI_CLOCK_PROCESS_CPUTIME_ID: case __WASI_CLOCK_THREAD_CPUTIME_ID: outPlatformClock = Platform::Clock::processCPUTime; return true; default: return false; } } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiClocks, "clock_res_get", __wasi_errno_return_t, __wasi_clock_res_get, __wasi_clockid_t clockId, WASIAddress resolutionAddress) { TRACE_SYSCALL("clock_res_get", "(%u, " WASIADDRESS_FORMAT ")", clockId, resolutionAddress); Platform::Clock platformClock; if(!getPlatformClock(clockId, platformClock)) { return TRACE_SYSCALL_RETURN(__WASI_EINVAL); } const Time clockResolution = Platform::getClockResolution(platformClock); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); __wasi_timestamp_t wasiClockResolution = __wasi_timestamp_t(clockResolution.ns); memoryRef<__wasi_timestamp_t>(process->memory, resolutionAddress) = wasiClockResolution; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS, "(%" PRIu64 ")", wasiClockResolution); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiClocks, "clock_time_get", __wasi_errno_return_t, __wasi_clock_time_get, __wasi_clockid_t clockId, __wasi_timestamp_t precision, WASIAddress timeAddress) { TRACE_SYSCALL("clock_time_get", "(%u, %" PRIu64 ", " WASIADDRESS_FORMAT ")", clockId, precision, timeAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Platform::Clock platformClock; if(!getPlatformClock(clockId, platformClock)) { return TRACE_SYSCALL_RETURN(__WASI_EINVAL); } Time clockTime = Platform::getClockTime(platformClock); if(platformClock == Platform::Clock::processCPUTime) { clockTime.ns -= process->processClockOrigin.ns; } __wasi_timestamp_t wasiClockTime = __wasi_timestamp_t(clockTime.ns); memoryRef<__wasi_timestamp_t>(process->memory, timeAddress) = wasiClockTime; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS, "(%" PRIu64 ")", wasiClockTime); } ================================================ FILE: Lib/WASI/WASIDiagnostics.cpp ================================================ #include #include #include #include #include "./WASIPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Unwind.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASI/WASIABI.h" using namespace WAVM; using namespace WAVM::WASI; std::atomic syscallTraceLevel{SyscallTraceLevel::none}; void WASI::setSyscallTraceLevel(SyscallTraceLevel newLevel) { syscallTraceLevel.store(newLevel, std::memory_order_relaxed); } static const char* describeErrNo(__wasi_errno_t wasiErrNo) { switch(wasiErrNo) { case __WASI_ESUCCESS: return "ESUCCESS"; case __WASI_E2BIG: return "E2BIG"; case __WASI_EACCES: return "EACCES"; case __WASI_EADDRINUSE: return "EADDRINUSE"; case __WASI_EADDRNOTAVAIL: return "EADDRNOTAVAIL"; case __WASI_EAFNOSUPPORT: return "EAFNOSUPPORT"; case __WASI_EAGAIN: return "EAGAIN"; case __WASI_EALREADY: return "EALREADY"; case __WASI_EBADF: return "EBADF"; case __WASI_EBADMSG: return "EBADMSG"; case __WASI_EBUSY: return "EBUSY"; case __WASI_ECANCELED: return "ECANCELED"; case __WASI_ECHILD: return "ECHILD"; case __WASI_ECONNABORTED: return "ECONNABORTED"; case __WASI_ECONNREFUSED: return "ECONNREFUSED"; case __WASI_ECONNRESET: return "ECONNRESET"; case __WASI_EDEADLK: return "EDEADLK"; case __WASI_EDESTADDRREQ: return "EDESTADDRREQ"; case __WASI_EDOM: return "EDOM"; case __WASI_EDQUOT: return "EDQUOT"; case __WASI_EEXIST: return "EEXIST"; case __WASI_EFAULT: return "EFAULT"; case __WASI_EFBIG: return "EFBIG"; case __WASI_EHOSTUNREACH: return "EHOSTUNREACH"; case __WASI_EIDRM: return "EIDRM"; case __WASI_EILSEQ: return "EILSEQ"; case __WASI_EINPROGRESS: return "EINPROGRESS"; case __WASI_EINTR: return "EINTR"; case __WASI_EINVAL: return "EINVAL"; case __WASI_EIO: return "EIO"; case __WASI_EISCONN: return "EISCONN"; case __WASI_EISDIR: return "EISDIR"; case __WASI_ELOOP: return "ELOOP"; case __WASI_EMFILE: return "EMFILE"; case __WASI_EMLINK: return "EMLINK"; case __WASI_EMSGSIZE: return "EMSGSIZE"; case __WASI_EMULTIHOP: return "EMULTIHOP"; case __WASI_ENAMETOOLONG: return "ENAMETOOLONG"; case __WASI_ENETDOWN: return "ENETDOWN"; case __WASI_ENETRESET: return "ENETRESET"; case __WASI_ENETUNREACH: return "ENETUNREACH"; case __WASI_ENFILE: return "ENFILE"; case __WASI_ENOBUFS: return "ENOBUFS"; case __WASI_ENODEV: return "ENODEV"; case __WASI_ENOENT: return "ENOENT"; case __WASI_ENOEXEC: return "ENOEXEC"; case __WASI_ENOLCK: return "ENOLCK"; case __WASI_ENOLINK: return "ENOLINK"; case __WASI_ENOMEM: return "ENOMEM"; case __WASI_ENOMSG: return "ENOMSG"; case __WASI_ENOPROTOOPT: return "ENOPROTOOPT"; case __WASI_ENOSPC: return "ENOSPC"; case __WASI_ENOSYS: return "ENOSYS"; case __WASI_ENOTCONN: return "ENOTCONN"; case __WASI_ENOTDIR: return "ENOTDIR"; case __WASI_ENOTEMPTY: return "ENOTEMPTY"; case __WASI_ENOTRECOVERABLE: return "ENOTRECOVERABLE"; case __WASI_ENOTSOCK: return "ENOTSOCK"; case __WASI_ENOTSUP: return "ENOTSUP"; case __WASI_ENOTTY: return "ENOTTY"; case __WASI_ENXIO: return "ENXIO"; case __WASI_EOVERFLOW: return "EOVERFLOW"; case __WASI_EOWNERDEAD: return "EOWNERDEAD"; case __WASI_EPERM: return "EPERM"; case __WASI_EPIPE: return "EPIPE"; case __WASI_EPROTO: return "EPROTO"; case __WASI_EPROTONOSUPPORT: return "EPROTONOSUPPORT"; case __WASI_EPROTOTYPE: return "EPROTOTYPE"; case __WASI_ERANGE: return "ERANGE"; case __WASI_EROFS: return "EROFS"; case __WASI_ESPIPE: return "ESPIPE"; case __WASI_ESRCH: return "ESRCH"; case __WASI_ESTALE: return "ESTALE"; case __WASI_ETIMEDOUT: return "ETIMEDOUT"; case __WASI_ETXTBSY: return "ETXTBSY"; case __WASI_EXDEV: return "EXDEV"; case __WASI_ENOTCAPABLE: return "ENOTCAPABLE"; default: WAVM_UNREACHABLE(); } } WAVM_FORCENOINLINE static void traceSyscallv(const char* syscallName, const char* argFormat, va_list argList) { SyscallTraceLevel syscallTraceLevelSnapshot = syscallTraceLevel.load(std::memory_order_relaxed); if(syscallTraceLevelSnapshot != SyscallTraceLevel::none) { Log::printf(Log::output, "SYSCALL: %s", syscallName); Log::vprintf(Log::output, argFormat, argList); va_end(argList); if(syscallTraceLevelSnapshot != SyscallTraceLevel::syscallsWithCallstacks) { Log::printf(Log::output, "\n"); } else { Log::printf(Log::output, " - Call stack:\n"); // Skip traceSyscallv + traceSyscallf + WASI wrappers. Platform::UnwindState state = Platform::UnwindState::capture(4); Runtime::CallStack callStack = Runtime::unwindCallStack(state); if(callStack.frames.size() > 4) { callStack.frames.resize(4); } std::vector callStackFrameDescriptions = Runtime::describeCallStack(callStack); for(const std::string& frameDescription : callStackFrameDescriptions) { Log::printf(Log::output, "SYSCALL: %s\n", frameDescription.c_str()); } } } } WAVM_VALIDATE_AS_PRINTF(2, 3) void WASI::traceSyscallf(const char* syscallName, const char* argFormat, ...) { va_list argList; va_start(argList, argFormat); traceSyscallv(syscallName, argFormat, argList); va_end(argList); } WAVM_VALIDATE_AS_PRINTF(3, 4) __wasi_errno_t WASI::traceSyscallReturnf(const char* syscallName, __wasi_errno_t wasiErrNo, const char* returnFormat, ...) { SyscallTraceLevel syscallTraceLevelSnapshot = syscallTraceLevel.load(std::memory_order_relaxed); if(syscallTraceLevelSnapshot != SyscallTraceLevel::none) { va_list argList; va_start(argList, returnFormat); Log::printf(Log::output, "SYSCALL: %s -> %s", syscallName, describeErrNo(wasiErrNo)); Log::vprintf(Log::output, returnFormat, argList); Log::printf(Log::output, "\n"); va_end(argList); } return wasiErrNo; } ================================================ FILE: Lib/WASI/WASIFile.cpp ================================================ #include #include #include #include #include #include #include #include #include "./WASIPrivate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Time.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Clock.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/VFS/VFS.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASI/WASIABI.h" using namespace WAVM; using namespace WAVM::WASI; using namespace WAVM::Runtime; using namespace WAVM::VFS; namespace WAVM { namespace WASI { WAVM_DEFINE_INTRINSIC_MODULE(wasiFile) }} static __wasi_errno_t asWASIErrNo(VFS::Result result) { switch(result) { case Result::success: return __WASI_ESUCCESS; case Result::ioPending: return __WASI_EINPROGRESS; case Result::ioDeviceError: return __WASI_EIO; case Result::interruptedBySignal: return __WASI_EINTR; case Result::interruptedByCancellation: return __WASI_EINTR; case Result::wouldBlock: return __WASI_EAGAIN; case Result::inaccessibleBuffer: return __WASI_EFAULT; case Result::invalidOffset: return __WASI_EINVAL; case Result::notSeekable: return __WASI_ESPIPE; case Result::notPermitted: return __WASI_EPERM; case Result::notAccessible: return __WASI_EACCES; case Result::notSynchronizable: return __WASI_EINVAL; case Result::tooManyBufferBytes: return __WASI_EINVAL; case Result::notEnoughBufferBytes: return __WASI_EINVAL; case Result::tooManyBuffers: return __WASI_EINVAL; case Result::notEnoughBits: return __WASI_EOVERFLOW; case Result::exceededFileSizeLimit: return __WASI_EFBIG; case Result::outOfSystemFDs: return __WASI_ENFILE; case Result::outOfProcessFDs: return __WASI_EMFILE; case Result::outOfMemory: return __WASI_ENOMEM; case Result::outOfQuota: return __WASI_EDQUOT; case Result::outOfFreeSpace: return __WASI_ENOSPC; case Result::outOfLinksToParentDir: return __WASI_EMLINK; case Result::invalidNameCharacter: return __WASI_EACCES; case Result::nameTooLong: return __WASI_ENAMETOOLONG; case Result::tooManyLinksInPath: return __WASI_ELOOP; case Result::alreadyExists: return __WASI_EEXIST; case Result::doesNotExist: return __WASI_ENOENT; case Result::isDirectory: return __WASI_EISDIR; case Result::isNotDirectory: return __WASI_ENOTDIR; case Result::isNotEmpty: return __WASI_ENOTEMPTY; case Result::brokenPipe: return __WASI_EPIPE; case Result::missingDevice: return __WASI_ENXIO; case Result::busy: return __WASI_EBUSY; case Result::notSupported: return __WASI_ENOTSUP; default: WAVM_UNREACHABLE(); }; } static __wasi_timestamp_t asWASITimestamp(I128 time) { return clampedCast<__wasi_timestamp_t>(time); } struct LockedFDE { __wasi_errno_t error; // Only set if result==_WASI_ESUCCESS: Platform::RWMutex::Lock fdeLock; std::shared_ptr fde; LockedFDE(__wasi_errno_t inError) : error(inError) {} LockedFDE(const std::shared_ptr& inFDE, Platform::RWMutex::LockShareability lockShareability) : error(__WASI_ESUCCESS), fdeLock(inFDE->mutex, lockShareability), fde(inFDE) { } }; static LockedFDE getLockedFDE(Process* process, __wasi_fd_t fd, __wasi_rights_t requiredRights, __wasi_rights_t requiredInheritingRights, Platform::RWMutex::LockShareability lockShareability = Platform::RWMutex::shareable) { // Shareably lock the fdMap mutex. Platform::RWMutex::ShareableLock fdsLock(process->fdMapMutex); // Check that the fdMap contains a FDE for the given FD. if(fd < process->fdMap.getMinIndex() || fd > process->fdMap.getMaxIndex()) { return LockedFDE(__WASI_EBADF); } std::shared_ptr* fde = process->fdMap.get(fd); if(!fde) { return LockedFDE(__WASI_EBADF); } // Check that the FDE has the required rights. if(((*fde)->rights & requiredRights) != requiredRights || ((*fde)->inheritingRights & requiredInheritingRights) != requiredInheritingRights) { return LockedFDE(__WASI_ENOTCAPABLE); } TRACE_SYSCALL_FLOW("Locked FDE: %s", (*fde)->originalPath.c_str()); // Lock the FDE and return a reference to it. return LockedFDE(*fde, lockShareability); } static __wasi_filetype_t asWASIFileType(FileType type) { switch(type) { case FileType::unknown: return __WASI_FILETYPE_UNKNOWN; case FileType::blockDevice: return __WASI_FILETYPE_BLOCK_DEVICE; case FileType::characterDevice: return __WASI_FILETYPE_CHARACTER_DEVICE; case FileType::directory: return __WASI_FILETYPE_DIRECTORY; case FileType::file: return __WASI_FILETYPE_REGULAR_FILE; case FileType::datagramSocket: return __WASI_FILETYPE_SOCKET_DGRAM; case FileType::streamSocket: return __WASI_FILETYPE_SOCKET_STREAM; case FileType::symbolicLink: return __WASI_FILETYPE_SYMBOLIC_LINK; case FileType::pipe: return __WASI_FILETYPE_UNKNOWN; default: WAVM_UNREACHABLE(); }; } static bool readUserString(Memory* memory, WASIAddress stringAddress, WASIAddress numStringBytes, std::string& outString) { outString.clear(); bool succeeded = true; catchRuntimeExceptions( [&] { char* stringBytes = memoryArrayPtr(memory, stringAddress, numStringBytes); for(Uptr index = 0; index < numStringBytes; ++index) { outString += stringBytes[index]; } }, [&succeeded](Exception* exception) { WAVM_ERROR_UNLESS(getExceptionType(exception) == ExceptionTypes::outOfBoundsMemoryAccess); Log::printf(Log::debug, "Caught runtime exception while reading string at address 0x%" PRIx64, getExceptionArgument(exception, 1).i64); destroyException(exception); succeeded = false; }); return succeeded; } static bool getCanonicalPath(const std::string& basePath, const std::string& relativePath, std::string& outAbsolutePath) { outAbsolutePath = basePath; if(outAbsolutePath.back() == '/') { outAbsolutePath.pop_back(); } std::vector relativePathComponents; Uptr componentStart = 0; while(componentStart < relativePath.size()) { while(componentStart < relativePath.size() && relativePath[componentStart] == '/') { ++componentStart; } Uptr nextPathSeparator = relativePath.find_first_of('/', componentStart); if(nextPathSeparator == std::string::npos) { nextPathSeparator = relativePath.size(); } if(nextPathSeparator != componentStart) { std::string component = relativePath.substr(componentStart, nextPathSeparator - componentStart); if(component == "..") { if(!relativePathComponents.size()) { return false; } else { relativePathComponents.pop_back(); } } else if(component != ".") { relativePathComponents.push_back(component); } componentStart = nextPathSeparator + 1; } }; for(const std::string& component : relativePathComponents) { outAbsolutePath += '/'; outAbsolutePath += component; } return true; } static __wasi_errno_t validatePath(Process* process, __wasi_fd_t dirFD, __wasi_lookupflags_t lookupFlags, __wasi_rights_t requiredDirRights, __wasi_rights_t requiredDirInheritingRights, WASIAddress pathAddress, WASIAddress numPathBytes, std::string& outCanonicalPath) { if(!process->fileSystem) { return __WASI_ENOTCAPABLE; } LockedFDE lockedDirFDE = getLockedFDE(process, dirFD, requiredDirRights, requiredDirInheritingRights); if(lockedDirFDE.error != __WASI_ESUCCESS) { return lockedDirFDE.error; } std::string relativePath; if(!readUserString(process->memory, pathAddress, numPathBytes, relativePath)) { return __WASI_EFAULT; } TRACE_SYSCALL_FLOW("Read path from process memory: %s", relativePath.c_str()); if(!getCanonicalPath(lockedDirFDE.fde->originalPath, relativePath, outCanonicalPath)) { return __WASI_ENOTCAPABLE; } TRACE_SYSCALL_FLOW("Canonical path: %s", outCanonicalPath.c_str()); return __WASI_ESUCCESS; } static VFDFlags translateWASIVFDFlags(__wasi_fdflags_t fdFlags, __wasi_rights_t& outRequiredRights) { VFDFlags result; if(fdFlags & __WASI_FDFLAG_DSYNC) { result.syncLevel = (fdFlags & __WASI_FDFLAG_RSYNC) ? VFDSync::contentsAfterWriteAndBeforeRead : VFDSync::contentsAfterWrite; outRequiredRights |= __WASI_RIGHT_FD_DATASYNC; } if(fdFlags & __WASI_FDFLAG_SYNC) { result.syncLevel = (fdFlags & __WASI_FDFLAG_RSYNC) ? VFDSync::contentsAndMetadataAfterWriteAndBeforeRead : VFDSync::contentsAndMetadataAfterWrite; outRequiredRights |= __WASI_RIGHT_FD_SYNC; } if(fdFlags & __WASI_FDFLAG_NONBLOCK) { result.nonBlocking = true; } if(fdFlags & __WASI_FDFLAG_APPEND) { result.append = true; } return result; } WASI::FDE::~FDE() { // The FDE should have been closed before it is destroyed. WAVM_ERROR_UNLESS(!vfd); } Result WASI::FDE::close() { WAVM_ASSERT(vfd); Result result = vfd->close(); vfd = nullptr; if(dirEntStream) { dirEntStream->close(); dirEntStream = nullptr; } return result; } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_prestat_get", __wasi_errno_return_t, wasi_fd_prestat_get, __wasi_fd_t fd, WASIAddress prestatAddress) { TRACE_SYSCALL("fd_prestat_get", "(%u, " WASIADDRESS_FORMAT ")", fd, prestatAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, 0, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } if(lockedFDE.fde->originalPath.size() > UINT32_MAX) { return TRACE_SYSCALL_RETURN(__WASI_EOVERFLOW); } __wasi_prestat_t& prestat = memoryRef<__wasi_prestat_t>(process->memory, prestatAddress); prestat.pr_type = lockedFDE.fde->preopenedType; WAVM_ASSERT(lockedFDE.fde->preopenedType == __WASI_PREOPENTYPE_DIR); prestat.u.dir.pr_name_len = U32(lockedFDE.fde->originalPath.size()); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_prestat_dir_name", __wasi_errno_return_t, wasi_fd_prestat_dir_name, __wasi_fd_t fd, WASIAddress bufferAddress, WASIAddress bufferLength) { TRACE_SYSCALL( "fd_prestat_dir_name", "(%u, " WASIADDRESS_FORMAT ", %u)", fd, bufferAddress, bufferLength); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, 0, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } if(!lockedFDE.fde->isPreopened) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } if(bufferLength != lockedFDE.fde->originalPath.size()) { return TRACE_SYSCALL_RETURN(__WASI_EINVAL); } char* buffer = memoryArrayPtr(process->memory, bufferAddress, bufferLength); memcpy(buffer, lockedFDE.fde->originalPath.c_str(), bufferLength); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_close", __wasi_errno_return_t, wasi_fd_close, __wasi_fd_t fd) { TRACE_SYSCALL("fd_close", "(%u)", fd); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); // Exclusively lock the fds mutex, and look up the FDE corresponding to the FD. Platform::RWMutex::ExclusiveLock fdsLock(process->fdMapMutex); if(fd < process->fdMap.getMinIndex() || fd > process->fdMap.getMaxIndex()) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } std::shared_ptr* fdePointer = process->fdMap.get(fd); if(!fdePointer) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } std::shared_ptr fde = *fdePointer; // Exclusively lock the FDE. Platform::RWMutex::ExclusiveLock fdeLock(fde->mutex); // Remove this FDE from the FD table, and unlock the fds mutex. process->fdMap.removeOrFail(fd); fdsLock.unlock(); // Don't allow closing preopened FDs for now. if(fde->isPreopened) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } // Close the FDE's underlying VFD+DirEntStream. This can return an error code, but closes the // VFD+DirEntStream even if there was an error. const VFS::Result result = fde->close(); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_datasync", __wasi_errno_return_t, wasi_fd_datasync, __wasi_fd_t fd) { TRACE_SYSCALL("fd_datasync", "(%u)", fd); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_DATASYNC, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } return TRACE_SYSCALL_RETURN(asWASIErrNo(lockedFDE.fde->vfd->sync(SyncType::contents))); } static __wasi_errno_t readImpl(Process* process, __wasi_fd_t fd, WASIAddress iovsAddress, I32 numIOVs, const __wasi_filesize_t* offset, Uptr& outNumBytesRead) { const __wasi_rights_t requiredRights = __WASI_RIGHT_FD_READ | (offset ? __WASI_RIGHT_FD_SEEK : 0); LockedFDE lockedFDE = getLockedFDE(process, fd, requiredRights, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return lockedFDE.error; } if(numIOVs < 0 || numIOVs > __WASI_IOV_MAX) { return __WASI_EINVAL; } // Allocate memory for the IOReadBuffers. IOReadBuffer* vfsReadBuffers = (IOReadBuffer*)malloc(numIOVs * sizeof(IOReadBuffer)); // Catch any out-of-bounds memory access exceptions that are thrown. __wasi_errno_t result = __WASI_ESUCCESS; Runtime::catchRuntimeExceptions( [&] { // Translate the IOVs to IOReadBuffers. const __wasi_iovec_t* iovs = memoryArrayPtr<__wasi_iovec_t>(process->memory, iovsAddress, numIOVs); U64 numBufferBytes = 0; for(I32 iovIndex = 0; iovIndex < numIOVs; ++iovIndex) { __wasi_iovec_t iov = iovs[iovIndex]; TRACE_SYSCALL_FLOW("IOV[%u]=(buf=" WASIADDRESS_FORMAT ", buf_len=%u)", iovIndex, iov.buf, iov.buf_len); vfsReadBuffers[iovIndex].data = memoryArrayPtr(process->memory, iov.buf, iov.buf_len); vfsReadBuffers[iovIndex].numBytes = iov.buf_len; numBufferBytes += iov.buf_len; } if(numBufferBytes > WASIADDRESS_MAX) { result = __WASI_EOVERFLOW; } else { // Do the read. result = asWASIErrNo( lockedFDE.fde->vfd->readv(vfsReadBuffers, numIOVs, &outNumBytesRead, offset)); } }, [&](Exception* exception) { // If we catch an out-of-bounds memory exception, return EFAULT. WAVM_ERROR_UNLESS(getExceptionType(exception) == ExceptionTypes::outOfBoundsMemoryAccess); Log::printf(Log::debug, "Caught runtime exception while reading memory at address 0x%" PRIx64, getExceptionArgument(exception, 1).i64); destroyException(exception); result = __WASI_EFAULT; }); // Free the VFS read buffers. free(vfsReadBuffers); return result; } static __wasi_errno_t writeImpl(Process* process, __wasi_fd_t fd, WASIAddress iovsAddress, I32 numIOVs, const __wasi_filesize_t* offset, Uptr& outNumBytesWritten) { const __wasi_rights_t requiredRights = __WASI_RIGHT_FD_WRITE | (offset ? __WASI_RIGHT_FD_SEEK : 0); LockedFDE lockedFDE = getLockedFDE(process, fd, requiredRights, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return lockedFDE.error; } if(numIOVs < 0 || numIOVs > __WASI_IOV_MAX) { return __WASI_EINVAL; } // Allocate memory for the IOWriteBuffers. IOWriteBuffer* vfsWriteBuffers = (IOWriteBuffer*)malloc(numIOVs * sizeof(IOWriteBuffer)); // Catch any out-of-bounds memory access exceptions that are thrown. __wasi_errno_t result = __WASI_ESUCCESS; Runtime::catchRuntimeExceptions( [&] { // Translate the IOVs to IOWriteBuffers const __wasi_ciovec_t* iovs = memoryArrayPtr<__wasi_ciovec_t>(process->memory, iovsAddress, numIOVs); U64 numBufferBytes = 0; for(I32 iovIndex = 0; iovIndex < numIOVs; ++iovIndex) { __wasi_ciovec_t iov = iovs[iovIndex]; TRACE_SYSCALL_FLOW("IOV[%u]=(buf=" WASIADDRESS_FORMAT ", buf_len=%u)", iovIndex, iov.buf, iov.buf_len); vfsWriteBuffers[iovIndex].data = memoryArrayPtr(process->memory, iov.buf, iov.buf_len); vfsWriteBuffers[iovIndex].numBytes = iov.buf_len; numBufferBytes += iov.buf_len; } if(numBufferBytes > WASIADDRESS_MAX) { result = __WASI_EOVERFLOW; } else { // Do the writes. result = asWASIErrNo(lockedFDE.fde->vfd->writev( vfsWriteBuffers, numIOVs, &outNumBytesWritten, offset)); } }, [&](Exception* exception) { // If we catch an out-of-bounds memory exception, return EFAULT. WAVM_ERROR_UNLESS(getExceptionType(exception) == ExceptionTypes::outOfBoundsMemoryAccess); Log::printf(Log::debug, "Caught runtime exception while reading memory at address 0x%" PRIx64, getExceptionArgument(exception, 1).i64); destroyException(exception); result = __WASI_EFAULT; }); // Free the VFS write buffers. free(vfsWriteBuffers); return result; } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_pread", __wasi_errno_return_t, wasi_fd_pread, __wasi_fd_t fd, WASIAddress iovsAddress, WASIAddress numIOVs, __wasi_filesize_t offset, WASIAddress numBytesReadAddress) { TRACE_SYSCALL("fd_pread", "(%u, " WASIADDRESS_FORMAT ", %u, %" PRIu64 ", " WASIADDRESS_FORMAT ")", fd, iovsAddress, numIOVs, offset, numBytesReadAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Uptr numBytesRead = 0; const __wasi_errno_t result = readImpl(process, fd, iovsAddress, numIOVs, &offset, numBytesRead); // Write the number of bytes read to memory. WAVM_ASSERT(numBytesRead <= WASIADDRESS_MAX); memoryRef(process->memory, numBytesReadAddress) = WASIAddress(numBytesRead); return TRACE_SYSCALL_RETURN(result, "(numBytesRead=%" WAVM_PRIuPTR ")", numBytesRead); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_pwrite", __wasi_errno_return_t, wasi_fd_pwrite, __wasi_fd_t fd, WASIAddress iovsAddress, WASIAddress numIOVs, __wasi_filesize_t offset, WASIAddress numBytesWrittenAddress) { TRACE_SYSCALL("fd_pwrite", "(%u, " WASIADDRESS_FORMAT ", %u, %" PRIu64 ", " WASIADDRESS_FORMAT ")", fd, iovsAddress, numIOVs, offset, numBytesWrittenAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Uptr numBytesWritten = 0; const __wasi_errno_t result = writeImpl(process, fd, iovsAddress, numIOVs, &offset, numBytesWritten); // Write the number of bytes written to memory. WAVM_ASSERT(numBytesWritten <= WASIADDRESS_MAX); memoryRef(process->memory, numBytesWrittenAddress) = WASIAddress(numBytesWritten); return TRACE_SYSCALL_RETURN(result, "(numBytesWritten=%" WAVM_PRIuPTR ")", numBytesWritten); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_read", __wasi_errno_return_t, wasi_fd_read, __wasi_fd_t fd, WASIAddress iovsAddress, I32 numIOVs, WASIAddress numBytesReadAddress) { TRACE_SYSCALL("fd_read", "(%u, " WASIADDRESS_FORMAT ", %u, " WASIADDRESS_FORMAT ")", fd, iovsAddress, numIOVs, numBytesReadAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Uptr numBytesRead = 0; const __wasi_errno_t result = readImpl(process, fd, iovsAddress, numIOVs, nullptr, numBytesRead); // Write the number of bytes read to memory. WAVM_ASSERT(numBytesRead <= WASIADDRESS_MAX); memoryRef(process->memory, numBytesReadAddress) = WASIAddress(numBytesRead); return TRACE_SYSCALL_RETURN(result, "(numBytesRead=%" WAVM_PRIuPTR ")", numBytesRead); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_write", __wasi_errno_return_t, wasi_fd_write, __wasi_fd_t fd, WASIAddress iovsAddress, I32 numIOVs, WASIAddress numBytesWrittenAddress) { TRACE_SYSCALL("fd_write", "(%u, " WASIADDRESS_FORMAT ", %u, " WASIADDRESS_FORMAT ")", fd, iovsAddress, numIOVs, numBytesWrittenAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); Uptr numBytesWritten = 0; const __wasi_errno_t result = writeImpl(process, fd, iovsAddress, numIOVs, nullptr, numBytesWritten); // Write the number of bytes written to memory. WAVM_ASSERT(numBytesWritten <= WASIADDRESS_MAX); memoryRef(process->memory, numBytesWrittenAddress) = WASIAddress(numBytesWritten); return TRACE_SYSCALL_RETURN(result, "(numBytesWritten=%" WAVM_PRIuPTR ")", numBytesWritten); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_renumber", __wasi_errno_return_t, wasi_fd_renumber, __wasi_fd_t fromFD, __wasi_fd_t toFD) { TRACE_SYSCALL("fd_renumber", "(%u, %u)", fromFD, toFD); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); // Exclusively lock the fds mutex. Platform::RWMutex::ExclusiveLock fdsLock(process->fdMapMutex); // Look up the FDE for the source FD. if(fromFD < process->fdMap.getMinIndex() || fromFD > process->fdMap.getMaxIndex()) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } std::shared_ptr* fromFDEPointer = process->fdMap.get(fromFD); if(!fromFDEPointer) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } std::shared_ptr fromFDE = *fromFDEPointer; // Look up the FDE for the destination FD. if(toFD < process->fdMap.getMinIndex() || toFD > process->fdMap.getMaxIndex()) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } std::shared_ptr* toFDEPointer = process->fdMap.get(toFD); if(!toFDEPointer) { return TRACE_SYSCALL_RETURN(__WASI_EBADF); } std::shared_ptr toFDE = *toFDEPointer; // Don't allow renumbering preopened files. if(fromFDE->isPreopened || toFDE->isPreopened) { return TRACE_SYSCALL_RETURN(__WASI_ENOTSUP); } // Exclusively lock the FDE being replaced at the destination FD. Platform::RWMutex::ExclusiveLock fromFDELock(fromFDE->mutex); // Close the FDE being replaced. This can return an error code, but closes the VFD+DirEntStream // even if there was an error. Result result = toFDE->close(); // Move the FDE from fromFD to toFD in the fds map. process->fdMap[toFD] = std::move(fromFDE); process->fdMap.removeOrFail(fromFD); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } static std::string describeSeekWhence(U32 whence) { switch(whence) { case __WASI_WHENCE_CUR: return "__WASI_WHENCE_CUR"; break; case __WASI_WHENCE_END: return "__WASI_WHENCE_END"; break; case __WASI_WHENCE_SET: return "__WASI_WHENCE_SET"; break; default: return std::to_string(whence); }; } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_seek", __wasi_errno_return_t, wasi_fd_seek, __wasi_fd_t fd, __wasi_filedelta_t offset, U32 whence, WASIAddress newOffsetAddress) { TRACE_SYSCALL("fd_seek", "(%u, %" PRIi64 ", %s, " WASIADDRESS_FORMAT ")", fd, offset, describeSeekWhence(whence).c_str(), newOffsetAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_SEEK, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } SeekOrigin origin; switch(whence) { case __WASI_WHENCE_CUR: origin = SeekOrigin::cur; break; case __WASI_WHENCE_END: origin = SeekOrigin::end; break; case __WASI_WHENCE_SET: origin = SeekOrigin::begin; break; default: return TRACE_SYSCALL_RETURN(__WASI_EINVAL); }; U64 newOffset; const VFS::Result result = lockedFDE.fde->vfd->seek(offset, origin, &newOffset); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } memoryRef<__wasi_filesize_t>(process->memory, newOffsetAddress) = newOffset; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_tell", __wasi_errno_return_t, wasi_fd_tell, __wasi_fd_t fd, WASIAddress offsetAddress) { TRACE_SYSCALL("fd_tell", "(%u, " WASIADDRESS_FORMAT ")", fd, offsetAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_TELL, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } U64 currentOffset; const VFS::Result result = lockedFDE.fde->vfd->seek(0, SeekOrigin::cur, ¤tOffset); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } memoryRef<__wasi_filesize_t>(process->memory, offsetAddress) = currentOffset; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_fdstat_get", __wasi_errno_return_t, wasi_fd_fdstat_get, __wasi_fd_t fd, WASIAddress fdstatAddress) { TRACE_SYSCALL("fd_fdstat_get", "(%u, " WASIADDRESS_FORMAT ")", fd, fdstatAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, 0, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } VFDInfo fdInfo; const VFS::Result result = lockedFDE.fde->vfd->getVFDInfo(fdInfo); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } __wasi_fdstat_t& fdstat = memoryRef<__wasi_fdstat_t>(process->memory, fdstatAddress); fdstat.fs_filetype = asWASIFileType(fdInfo.type); fdstat.fs_flags = 0; if(fdInfo.flags.append) { fdstat.fs_flags |= __WASI_FDFLAG_APPEND; } if(fdInfo.flags.nonBlocking) { fdstat.fs_flags |= __WASI_FDFLAG_NONBLOCK; } switch(fdInfo.flags.syncLevel) { case VFDSync::none: break; case VFDSync::contentsAfterWrite: fdstat.fs_flags |= __WASI_FDFLAG_DSYNC; break; case VFDSync::contentsAndMetadataAfterWrite: fdstat.fs_flags |= __WASI_FDFLAG_SYNC; break; case VFDSync::contentsAfterWriteAndBeforeRead: fdstat.fs_flags |= __WASI_FDFLAG_DSYNC | __WASI_FDFLAG_RSYNC; break; case VFDSync::contentsAndMetadataAfterWriteAndBeforeRead: fdstat.fs_flags |= __WASI_FDFLAG_SYNC | __WASI_FDFLAG_RSYNC; break; default: WAVM_UNREACHABLE(); } fdstat.fs_rights_base = lockedFDE.fde->rights; fdstat.fs_rights_inheriting = lockedFDE.fde->inheritingRights; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_fdstat_set_flags", __wasi_errno_return_t, wasi_fd_fdstat_set_flags, __wasi_fd_t fd, __wasi_fdflags_t flags) { TRACE_SYSCALL("fd_fdstat_set_flags", "(%u, 0x%04x)", fd, flags); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); __wasi_rights_t requiredRights = 0; VFDFlags vfsVFDFlags = translateWASIVFDFlags(flags, requiredRights); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_FDSTAT_SET_FLAGS | requiredRights, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } const VFS::Result result = lockedFDE.fde->vfd->setVFDFlags(vfsVFDFlags); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_fdstat_set_rights", __wasi_errno_return_t, wasi_fd_fdstat_set_rights, __wasi_fd_t fd, __wasi_rights_t rights, __wasi_rights_t inheritingRights) { TRACE_SYSCALL("fd_fdstat_set_rights", "(%u, 0x%" PRIx64 ", 0x %" PRIx64 ") ", fd, rights, inheritingRights); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, rights, inheritingRights, Platform::RWMutex::exclusive); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } // Narrow the FD's rights. lockedFDE.fde->rights = rights; lockedFDE.fde->inheritingRights = inheritingRights; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_sync", __wasi_errno_return_t, wasi_fd_sync, __wasi_fd_t fd) { TRACE_SYSCALL("fd_sync", "(%u)", fd); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_SYNC, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } const VFS::Result result = lockedFDE.fde->vfd->sync(SyncType::contentsAndMetadata); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_advise", __wasi_errno_return_t, wasi_fd_advise, __wasi_fd_t fd, __wasi_filesize_t offset, __wasi_filesize_t numBytes, __wasi_advice_t advice) { TRACE_SYSCALL( "fd_advise", "(%u, %" PRIu64 ", %" PRIu64 ", 0x%02x)", fd, offset, numBytes, advice); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_ADVISE, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } switch(advice) { case __WASI_ADVICE_DONTNEED: case __WASI_ADVICE_NOREUSE: case __WASI_ADVICE_NORMAL: case __WASI_ADVICE_RANDOM: case __WASI_ADVICE_SEQUENTIAL: case __WASI_ADVICE_WILLNEED: // It's safe to ignore the advice, so just return success for now. // TODO: do something with the advice! return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS); default: return TRACE_SYSCALL_RETURN(__WASI_EINVAL); } } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_allocate", __wasi_errno_return_t, wasi_fd_allocate, __wasi_fd_t fd, __wasi_filesize_t offset, __wasi_filesize_t numBytes) { UNIMPLEMENTED_SYSCALL("fd_allocate", "(%u, %" PRIu64 ", %" PRIu64 ")", fd, offset, numBytes); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_link", __wasi_errno_return_t, wasi_path_link, __wasi_fd_t dirFD, __wasi_lookupflags_t lookupFlags, WASIAddress oldPathAddress, WASIAddress numOldPathBytes, __wasi_fd_t newFD, WASIAddress newPathAddress, WASIAddress numNewPathBytes) { UNIMPLEMENTED_SYSCALL("path_link", "(%u, 0x%08x, " WASIADDRESS_FORMAT ", %u, %u, " WASIADDRESS_FORMAT ", %u)", dirFD, lookupFlags, oldPathAddress, numOldPathBytes, newFD, newPathAddress, numNewPathBytes); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_open", __wasi_errno_return_t, wasi_path_open, __wasi_fd_t dirFD, __wasi_lookupflags_t lookupFlags, WASIAddress pathAddress, WASIAddress numPathBytes, __wasi_oflags_t openFlags, __wasi_rights_t requestedRights, __wasi_rights_t requestedInheritingRights, __wasi_fdflags_t fdFlags, WASIAddress fdAddress) { TRACE_SYSCALL("path_open", "(%u, 0x%08x, " WASIADDRESS_FORMAT ", %u, 0x%04x, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%04x, " WASIADDRESS_FORMAT ")", dirFD, lookupFlags, pathAddress, numPathBytes, openFlags, requestedRights, requestedInheritingRights, fdFlags, fdAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); __wasi_rights_t requiredDirRights = __WASI_RIGHT_PATH_OPEN; __wasi_rights_t requiredDirInheritingRights = requestedRights | requestedInheritingRights; const bool read = requestedRights & (__WASI_RIGHT_FD_READ | __WASI_RIGHT_FD_READDIR); const bool write = requestedRights & (__WASI_RIGHT_FD_DATASYNC | __WASI_RIGHT_FD_WRITE | __WASI_RIGHT_FD_ALLOCATE | __WASI_RIGHT_FD_FILESTAT_SET_SIZE); const FileAccessMode accessMode = read && write ? FileAccessMode::readWrite : read ? FileAccessMode::readOnly : write ? FileAccessMode::writeOnly : FileAccessMode::none; FileCreateMode createMode = FileCreateMode::openExisting; switch(openFlags & (__WASI_O_CREAT | __WASI_O_EXCL | __WASI_O_TRUNC)) { case __WASI_O_CREAT | __WASI_O_EXCL: createMode = FileCreateMode::createNew; break; case __WASI_O_CREAT | __WASI_O_TRUNC: createMode = FileCreateMode::createAlways; break; case __WASI_O_CREAT: createMode = FileCreateMode::openAlways; break; case __WASI_O_TRUNC: createMode = FileCreateMode::truncateExisting; break; case 0: createMode = FileCreateMode::openExisting; break; // Undefined oflag combinations case __WASI_O_CREAT | __WASI_O_EXCL | __WASI_O_TRUNC: case __WASI_O_EXCL | __WASI_O_TRUNC: case __WASI_O_EXCL: default: return TRACE_SYSCALL_RETURN(__WASI_EINVAL); }; if(openFlags & __WASI_O_CREAT) { requiredDirRights |= __WASI_RIGHT_PATH_CREATE_FILE; } if(openFlags & __WASI_O_TRUNC) { requiredDirRights |= __WASI_RIGHT_PATH_FILESTAT_SET_SIZE; } VFDFlags vfsVFDFlags = translateWASIVFDFlags(fdFlags, requiredDirInheritingRights); if(write && !(fdFlags & __WASI_FDFLAG_APPEND) && !(openFlags & __WASI_O_TRUNC)) { requiredDirInheritingRights |= __WASI_RIGHT_FD_SEEK; } std::string canonicalPath; const __wasi_errno_t pathError = validatePath(process, dirFD, lookupFlags, requiredDirRights, requiredDirInheritingRights, pathAddress, numPathBytes, canonicalPath); if(pathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(pathError); } VFD* openedVFD = nullptr; VFS::Result result = process->fileSystem->open(canonicalPath, accessMode, createMode, openedVFD, vfsVFDFlags); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } Platform::RWMutex::ExclusiveLock fdsLock(process->fdMapMutex); __wasi_fd_t fd = process->fdMap.add( UINT32_MAX, std::make_shared( openedVFD, requestedRights, requestedInheritingRights, std::move(canonicalPath))); if(fd == UINT32_MAX) { result = openedVFD->close(); if(result != VFS::Result::success) { Log::printf(Log::Category::debug, "Error when closing newly opened VFD due to full FD table: %s\n", VFS::describeResult(result)); } return TRACE_SYSCALL_RETURN(__WASI_EMFILE); } memoryRef<__wasi_fd_t>(process->memory, fdAddress) = fd; return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS, "(%u)", fd); } static Uptr truncatingMemcpy(void* dest, const void* source, Uptr numSourceBytes, Uptr numDestBytes) { Uptr numBytes = numSourceBytes; if(numBytes > numDestBytes) { numBytes = numDestBytes; } if(numBytes > 0) { memcpy(dest, source, numBytes); } return numBytes; } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_readdir", __wasi_errno_return_t, wasi_fd_readdir, __wasi_fd_t dirFD, WASIAddress bufferAddress, WASIAddress numBufferBytes, __wasi_dircookie_t firstCookie, WASIAddress outNumBufferBytesUsedAddress) { TRACE_SYSCALL("fd_readdir", "(%u, " WASIADDRESS_FORMAT ", %u, 0x%" PRIx64 ", " WASIADDRESS_FORMAT ")", dirFD, bufferAddress, numBufferBytes, firstCookie, outNumBufferBytesUsedAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, dirFD, __WASI_RIGHT_FD_READDIR, 0, Platform::RWMutex::exclusive); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } // If this is the first time readdir was called, open a DirEntStream for the FD. if(!lockedFDE.fde->dirEntStream) { if(firstCookie != __WASI_DIRCOOKIE_START) { return TRACE_SYSCALL_RETURN(__WASI_EINVAL); } const VFS::Result result = lockedFDE.fde->vfd->openDir(lockedFDE.fde->dirEntStream); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } } else if(lockedFDE.fde->dirEntStream->tell() != firstCookie) { if(!lockedFDE.fde->dirEntStream->seek(firstCookie)) { return TRACE_SYSCALL_RETURN(__WASI_EINVAL); } } U8* buffer = memoryArrayPtr(process->memory, bufferAddress, numBufferBytes); Uptr numBufferBytesUsed = 0; while(numBufferBytesUsed < numBufferBytes) { DirEnt dirEnt; if(!lockedFDE.fde->dirEntStream->getNext(dirEnt)) { break; } WAVM_ERROR_UNLESS(dirEnt.name.size() <= UINT32_MAX); __wasi_dirent_t wasiDirEnt; wasiDirEnt.d_next = lockedFDE.fde->dirEntStream->tell(); wasiDirEnt.d_ino = dirEnt.fileNumber; wasiDirEnt.d_namlen = U32(dirEnt.name.size()); wasiDirEnt.d_type = asWASIFileType(dirEnt.type); numBufferBytesUsed += truncatingMemcpy(buffer + numBufferBytesUsed, &wasiDirEnt, sizeof(wasiDirEnt), numBufferBytes - numBufferBytesUsed); numBufferBytesUsed += truncatingMemcpy(buffer + numBufferBytesUsed, dirEnt.name.c_str(), dirEnt.name.size(), numBufferBytes - numBufferBytesUsed); }; WAVM_ASSERT(numBufferBytesUsed <= numBufferBytes); memoryRef(process->memory, outNumBufferBytesUsedAddress) = WASIAddress(numBufferBytesUsed); return TRACE_SYSCALL_RETURN( __WASI_ESUCCESS, "(numBufferBytesUsed=%" WAVM_PRIuPTR ")", numBufferBytesUsed); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_readlink", __wasi_errno_return_t, wasi_path_readlink, __wasi_fd_t fd, WASIAddress pathAddress, WASIAddress numPathBytes, WASIAddress bufferAddress, WASIAddress numBufferBytes, WASIAddress outNumBufferBytesUsedAddress) { UNIMPLEMENTED_SYSCALL("path_readlink", "(%u, " WASIADDRESS_FORMAT ", %u, " WASIADDRESS_FORMAT ", %u, " WASIADDRESS_FORMAT ")", fd, pathAddress, numPathBytes, bufferAddress, numBufferBytes, outNumBufferBytesUsedAddress); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_rename", __wasi_errno_return_t, wasi_path_rename, __wasi_fd_t oldFD, WASIAddress oldPathAddress, WASIAddress numOldPathBytes, __wasi_fd_t newFD, WASIAddress newPathAddress, WASIAddress numNewPathBytes) { TRACE_SYSCALL("path_rename", "(%u, " WASIADDRESS_FORMAT ", %u, %u, " WASIADDRESS_FORMAT ", %u)", oldFD, oldPathAddress, numOldPathBytes, newFD, newPathAddress, numNewPathBytes); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); std::string canonicalOldPath; const __wasi_errno_t oldPathError = validatePath(process, oldFD, 0, __WASI_RIGHT_PATH_RENAME_SOURCE, 0, oldPathAddress, numOldPathBytes, canonicalOldPath); if(oldPathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(oldPathError); } std::string canonicalNewPath; const __wasi_errno_t newPathError = validatePath(process, newFD, 0, __WASI_RIGHT_PATH_RENAME_TARGET, 0, newPathAddress, numNewPathBytes, canonicalNewPath); if(newPathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(newPathError); } return TRACE_SYSCALL_RETURN( asWASIErrNo(process->fileSystem->renameFile(canonicalOldPath, canonicalNewPath))); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_filestat_get", __wasi_errno_return_t, wasi_fd_filestat_get, __wasi_fd_t fd, WASIAddress filestatAddress) { TRACE_SYSCALL("fd_filestat_get", "(%u, " WASIADDRESS_FORMAT ")", fd, filestatAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_FILESTAT_GET, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } FileInfo fileInfo; const VFS::Result result = lockedFDE.fde->vfd->getFileInfo(fileInfo); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } __wasi_filestat_t& fileStat = memoryRef<__wasi_filestat_t>(process->memory, filestatAddress); fileStat.st_dev = fileInfo.deviceNumber; fileStat.st_ino = fileInfo.fileNumber; fileStat.st_filetype = asWASIFileType(fileInfo.type); fileStat.st_nlink = fileInfo.numLinks; fileStat.st_size = fileInfo.numBytes; fileStat.st_atim = asWASITimestamp(fileInfo.lastAccessTime.ns); fileStat.st_mtim = asWASITimestamp(fileInfo.lastWriteTime.ns); fileStat.st_ctim = asWASITimestamp(fileInfo.creationTime.ns); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS, "(st_dev=%" PRIu64 ", st_ino=%" PRIu64 ", st_filetype=%u" ", st_nlink=%" PRIu64 ", st_size=%" PRIu64 ", st_atim=%" PRIu64 ", st_mtim=%" PRIu64 ", st_ctim=%" PRIu64 ")", fileStat.st_dev, fileStat.st_ino, fileStat.st_filetype, fileStat.st_nlink, fileStat.st_size, fileStat.st_atim, fileStat.st_mtim, fileStat.st_ctim); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_filestat_set_times", __wasi_errno_return_t, wasi_fd_filestat_set_times, __wasi_fd_t fd, __wasi_timestamp_t lastAccessTime64, __wasi_timestamp_t lastWriteTime64, __wasi_fstflags_t flags) { TRACE_SYSCALL("fd_filestat_set_times", "(%u, %" PRIu64 ", %" PRIu64 ", 0x%04x)", fd, lastAccessTime64, lastWriteTime64, flags); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_FILESTAT_SET_TIMES, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } Time now = Platform::getClockTime(Platform::Clock::realtime); bool setLastAccessTime = false; Time lastAccessTime; if(flags & __WASI_FILESTAT_SET_ATIM) { lastAccessTime.ns = lastAccessTime64; setLastAccessTime = true; } else if(flags & __WASI_FILESTAT_SET_ATIM_NOW) { lastAccessTime = now; setLastAccessTime = true; } bool setLastWriteTime = false; Time lastWriteTime; if(flags & __WASI_FILESTAT_SET_MTIM) { lastWriteTime.ns = lastWriteTime64; setLastWriteTime = true; } else if(flags & __WASI_FILESTAT_SET_MTIM_NOW) { lastWriteTime = now; setLastWriteTime = true; } const VFS::Result result = lockedFDE.fde->vfd->setFileTimes( setLastAccessTime, lastAccessTime, setLastWriteTime, lastWriteTime); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "fd_filestat_set_size", __wasi_errno_return_t, wasi_fd_filestat_set_size, __wasi_fd_t fd, __wasi_filesize_t numBytes) { TRACE_SYSCALL("fd_filestat_set_size", "(%u, %" PRIu64 ")", fd, numBytes); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); LockedFDE lockedFDE = getLockedFDE(process, fd, __WASI_RIGHT_FD_FILESTAT_SET_SIZE, 0); if(lockedFDE.error != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(lockedFDE.error); } return TRACE_SYSCALL_RETURN(asWASIErrNo(lockedFDE.fde->vfd->setFileSize(numBytes))); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_filestat_get", __wasi_errno_return_t, wasi_path_filestat_get, __wasi_fd_t dirFD, __wasi_lookupflags_t lookupFlags, WASIAddress pathAddress, WASIAddress numPathBytes, WASIAddress filestatAddress) { TRACE_SYSCALL("path_filestat_get", "(%u, 0x%08x, " WASIADDRESS_FORMAT ", %u, " WASIADDRESS_FORMAT ")", dirFD, lookupFlags, pathAddress, numPathBytes, filestatAddress); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); std::string canonicalPath; const __wasi_errno_t pathError = validatePath(process, dirFD, lookupFlags, __WASI_RIGHT_PATH_FILESTAT_GET, 0, pathAddress, numPathBytes, canonicalPath); if(pathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(pathError); } FileInfo fileInfo; const VFS::Result result = process->fileSystem->getFileInfo(canonicalPath, fileInfo); if(result != VFS::Result::success) { return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } __wasi_filestat_t& fileStat = memoryRef<__wasi_filestat_t>(process->memory, filestatAddress); fileStat.st_dev = fileInfo.deviceNumber; fileStat.st_ino = fileInfo.fileNumber; fileStat.st_filetype = asWASIFileType(fileInfo.type); fileStat.st_nlink = fileInfo.numLinks; fileStat.st_size = fileInfo.numBytes; fileStat.st_atim = asWASITimestamp(fileInfo.lastAccessTime.ns); fileStat.st_mtim = asWASITimestamp(fileInfo.lastWriteTime.ns); fileStat.st_ctim = asWASITimestamp(fileInfo.creationTime.ns); return TRACE_SYSCALL_RETURN(__WASI_ESUCCESS, "(st_dev=%" PRIu64 ", st_ino=%" PRIu64 ", st_filetype=%u" ", st_nlink=%" PRIu64 ", st_size=%" PRIu64 ", st_atim=%" PRIu64 ", st_mtim=%" PRIu64 ", st_ctim=%" PRIu64 ")", fileStat.st_dev, fileStat.st_ino, fileStat.st_filetype, fileStat.st_nlink, fileStat.st_size, fileStat.st_atim, fileStat.st_mtim, fileStat.st_ctim); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_filestat_set_times", __wasi_errno_return_t, wasi_path_filestat_set_times, __wasi_fd_t dirFD, __wasi_lookupflags_t lookupFlags, WASIAddress pathAddress, WASIAddress numPathBytes, __wasi_timestamp_t lastAccessTime64, __wasi_timestamp_t lastWriteTime64, __wasi_fstflags_t flags) { TRACE_SYSCALL("path_filestat_set_times", "(%u, 0x%08x, " WASIADDRESS_FORMAT ", %u, %" PRIu64 ", %" PRIu64 ", 0x%04x)", dirFD, lookupFlags, pathAddress, numPathBytes, lastAccessTime64, lastWriteTime64, flags); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); std::string canonicalPath; const __wasi_errno_t pathError = validatePath(process, dirFD, lookupFlags, __WASI_RIGHT_PATH_FILESTAT_SET_TIMES, 0, pathAddress, numPathBytes, canonicalPath); if(pathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(pathError); } Time now = Platform::getClockTime(Platform::Clock::realtime); bool setLastAccessTime = false; Time lastAccessTime; if(flags & __WASI_FILESTAT_SET_ATIM) { lastAccessTime.ns = lastAccessTime64; setLastAccessTime = true; } else if(flags & __WASI_FILESTAT_SET_ATIM_NOW) { lastAccessTime = now; setLastAccessTime = true; } bool setLastWriteTime = false; Time lastWriteTime; if(flags & __WASI_FILESTAT_SET_MTIM) { lastWriteTime.ns = lastWriteTime64; setLastWriteTime = true; } else if(flags & __WASI_FILESTAT_SET_MTIM_NOW) { lastWriteTime = now; setLastWriteTime = true; } const VFS::Result result = process->fileSystem->setFileTimes( canonicalPath, setLastAccessTime, lastAccessTime, setLastWriteTime, lastWriteTime); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_symlink", __wasi_errno_return_t, wasi_path_symlink, WASIAddress oldPathAddress, WASIAddress numOldPathBytes, __wasi_fd_t fd, WASIAddress newPathAddress, WASIAddress numNewPathBytes) { UNIMPLEMENTED_SYSCALL("path_symlink", "(" WASIADDRESS_FORMAT ", %u, %u, " WASIADDRESS_FORMAT ", %u)", oldPathAddress, numOldPathBytes, fd, newPathAddress, numNewPathBytes); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_unlink_file", __wasi_errno_return_t, wasi_path_unlink_file, __wasi_fd_t dirFD, WASIAddress pathAddress, WASIAddress numPathBytes) { TRACE_SYSCALL( "path_unlink_file", "(%u, " WASIADDRESS_FORMAT ", %u)", dirFD, pathAddress, numPathBytes); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); std::string canonicalPath; const __wasi_errno_t pathError = validatePath(process, dirFD, 0, __WASI_RIGHT_PATH_UNLINK_FILE, 0, pathAddress, numPathBytes, canonicalPath); if(pathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(pathError); } if(!process->fileSystem) { return TRACE_SYSCALL_RETURN(__WASI_ENOTCAPABLE); } Result result = process->fileSystem->unlinkFile(canonicalPath); return TRACE_SYSCALL_RETURN(result == VFS::Result::isDirectory ? __WASI_EPERM : asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_remove_directory", __wasi_errno_return_t, wasi_path_remove_directory, __wasi_fd_t dirFD, WASIAddress pathAddress, WASIAddress numPathBytes) { TRACE_SYSCALL("path_remove_directory", "(%u, " WASIADDRESS_FORMAT ", %u)", dirFD, pathAddress, numPathBytes); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); std::string canonicalPath; const __wasi_errno_t pathError = validatePath(process, dirFD, 0, __WASI_RIGHT_PATH_REMOVE_DIRECTORY, 0, pathAddress, numPathBytes, canonicalPath); if(pathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(pathError); } if(!process->fileSystem) { return TRACE_SYSCALL_RETURN(__WASI_ENOTCAPABLE); } const VFS::Result result = process->fileSystem->removeDir(canonicalPath); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } WAVM_DEFINE_INTRINSIC_FUNCTION(wasiFile, "path_create_directory", __wasi_errno_return_t, wasi_path_create_directory, __wasi_fd_t dirFD, WASIAddress pathAddress, WASIAddress numPathBytes) { TRACE_SYSCALL("path_create_directory", "(%u, " WASIADDRESS_FORMAT ", %u)", dirFD, pathAddress, numPathBytes); Process* process = getProcessFromContextRuntimeData(contextRuntimeData); std::string canonicalPath; const __wasi_errno_t pathError = validatePath(process, dirFD, 0, __WASI_RIGHT_PATH_CREATE_DIRECTORY, 0, pathAddress, numPathBytes, canonicalPath); if(pathError != __WASI_ESUCCESS) { return TRACE_SYSCALL_RETURN(pathError); } const VFS::Result result = process->fileSystem->createDir(canonicalPath); return TRACE_SYSCALL_RETURN(asWASIErrNo(result)); } ================================================ FILE: Lib/WASI/WASIPrivate.h ================================================ #include #include #include #include #include #include "WAVM/IR/Types.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/IndexMap.h" #include "WAVM/Inline/Time.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/RWMutex.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASI/WASIABI.h" // Macros for tracing syscalls #define TRACE_SYSCALL(syscallName, argFormat, ...) \ const char* TRACE_SYSCALL_name = syscallName; \ traceSyscallf(TRACE_SYSCALL_name, argFormat, ##__VA_ARGS__) #define TRACE_SYSCALL_RETURN(returnCode, ...) \ traceSyscallReturnf(TRACE_SYSCALL_name, returnCode, " " __VA_ARGS__) #define TRACE_SYSCALL_FLOW(argFormat, ...) traceSyscallf(" ", argFormat, ##__VA_ARGS__) #define UNIMPLEMENTED_SYSCALL(syscallName, argFormat, ...) \ TRACE_SYSCALL(syscallName, argFormat, ##__VA_ARGS__); \ Log::printf(Log::error, "Called unimplemented WASI syscall %s.\n", syscallName); \ return TRACE_SYSCALL_RETURN(__WASI_ENOSYS); // Operations that apply to regular files. #define REGULAR_FILE_RIGHTS \ (__WASI_RIGHT_FD_DATASYNC | __WASI_RIGHT_FD_READ | __WASI_RIGHT_FD_SEEK \ | __WASI_RIGHT_FD_FDSTAT_SET_FLAGS | __WASI_RIGHT_FD_SYNC | __WASI_RIGHT_FD_TELL \ | __WASI_RIGHT_FD_WRITE | __WASI_RIGHT_FD_ADVISE | __WASI_RIGHT_FD_ALLOCATE \ | __WASI_RIGHT_FD_FILESTAT_GET | __WASI_RIGHT_FD_FILESTAT_SET_SIZE \ | __WASI_RIGHT_FD_FILESTAT_SET_TIMES | __WASI_RIGHT_POLL_FD_READWRITE) // Only allow directory operations on directories. #define DIRECTORY_RIGHTS \ (__WASI_RIGHT_FD_FDSTAT_SET_FLAGS | __WASI_RIGHT_FD_SYNC | __WASI_RIGHT_FD_ADVISE \ | __WASI_RIGHT_PATH_CREATE_DIRECTORY | __WASI_RIGHT_PATH_CREATE_FILE \ | __WASI_RIGHT_PATH_LINK_SOURCE | __WASI_RIGHT_PATH_LINK_TARGET | __WASI_RIGHT_PATH_OPEN \ | __WASI_RIGHT_FD_READDIR | __WASI_RIGHT_PATH_READLINK | __WASI_RIGHT_PATH_RENAME_SOURCE \ | __WASI_RIGHT_PATH_RENAME_TARGET | __WASI_RIGHT_PATH_FILESTAT_GET \ | __WASI_RIGHT_PATH_FILESTAT_SET_SIZE | __WASI_RIGHT_PATH_FILESTAT_SET_TIMES \ | __WASI_RIGHT_FD_FILESTAT_GET | __WASI_RIGHT_FD_FILESTAT_SET_TIMES \ | __WASI_RIGHT_PATH_SYMLINK | __WASI_RIGHT_PATH_UNLINK_FILE \ | __WASI_RIGHT_PATH_REMOVE_DIRECTORY | __WASI_RIGHT_POLL_FD_READWRITE) // Only allow directory or file operations to be derived from directories. #define INHERITING_DIRECTORY_RIGHTS (DIRECTORY_RIGHTS | REGULAR_FILE_RIGHTS) namespace WAVM { namespace VFS { enum class Result; struct DirEntStream; struct VFD; }} namespace WAVM { namespace WASI { struct FDE { mutable Platform::RWMutex mutex; VFS::VFD* vfd; __wasi_rights_t rights; __wasi_rights_t inheritingRights; std::string originalPath; bool isPreopened; __wasi_preopentype_t preopenedType; VFS::DirEntStream* dirEntStream{nullptr}; FDE(VFS::VFD* inVFD, __wasi_rights_t inRights, __wasi_rights_t inInheritingRights, std::string&& inOriginalPath, bool inIsPreopened = false, __wasi_preopentype_t inPreopenedType = __WASI_PREOPENTYPE_DIR) : vfd(inVFD) , rights(inRights) , inheritingRights(inInheritingRights) , originalPath(std::move(inOriginalPath)) , isPreopened(inIsPreopened) , preopenedType(inPreopenedType) { } ~FDE(); VFS::Result close(); }; struct ProcessResolver : Runtime::Resolver { HashMap> moduleNameToInstanceMap; bool resolve(const std::string& moduleName, const std::string& exportName, IR::ExternType type, Runtime::Object*& outObject) override; }; struct Process { Runtime::GCPointer compartment; Runtime::GCPointer memory; std::vector args; std::vector envs; Platform::RWMutex fdMapMutex; IndexMap<__wasi_fd_t, std::shared_ptr> fdMap{0, INT32_MAX}; VFS::FileSystem* fileSystem = nullptr; ProcessResolver resolver; Time processClockOrigin; ~Process(); }; struct ExitException { U32 exitCode; }; typedef U32 WASIAddress; #define WASIADDRESS_MAX UINT32_MAX #define WASIADDRESS_FORMAT "0x%08x" // __wasi_errno_t is actually 16-bits but since WebAssembly doesn't have an I16 type, we need to // return an I32 from the intrinsic functions. typedef uint32_t __wasi_errno_return_t; WAVM_VALIDATE_AS_PRINTF(2, 3) void traceSyscallf(const char* syscallName, const char* argFormat, ...); WAVM_VALIDATE_AS_PRINTF(3, 4) __wasi_errno_t traceSyscallReturnf(const char* syscallName, __wasi_errno_t result, const char* format, ...); WAVM_DECLARE_INTRINSIC_MODULE(wasi); WAVM_DECLARE_INTRINSIC_MODULE(wasiArgsEnvs); WAVM_DECLARE_INTRINSIC_MODULE(wasiClocks); WAVM_DECLARE_INTRINSIC_MODULE(wasiFile); }} ================================================ FILE: Lib/WASM/CMakeLists.txt ================================================ set(Sources WASMSerialization.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/WASM/WASM.h) WAVM_ADD_LIB_COMPONENT(WASM SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/WASM/WASMSerialization.cpp ================================================ #include #include #include #include #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Inline/Unicode.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Defines.h" #include "WAVM/WASM/WASM.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Serialization; static void throwIfNotValidUTF8(const std::string& string) { const U8* endChar = (const U8*)string.data() + string.size(); if(Unicode::validateUTF8String((const U8*)string.data(), endChar) != endChar) { throw FatalSerializationException("invalid UTF-8 encoding"); } } WAVM_FORCEINLINE void serializeOpcode(InputStream& stream, Opcode& opcode) { U8 opcodeU8; serializeNativeValue(stream, opcodeU8); if(opcodeU8 <= maxSingleByteOpcode) { opcode = Opcode(opcodeU8); } else { U32 opcodeVarUInt; serializeVarUInt32(stream, opcodeVarUInt); if(opcodeVarUInt > 0xff) { throw FatalSerializationException(std::string("unknown opcode (") + std::to_string(Uptr(opcodeU8)) + " " + std::to_string(opcodeVarUInt) + ")"); } opcode = Opcode((U32(opcodeU8) << 8) | opcodeVarUInt); } } WAVM_FORCEINLINE void serializeOpcode(OutputStream& stream, Opcode opcode) { if(opcode <= (Opcode)maxSingleByteOpcode) { U8 opcodeU8 = U8(opcode); Serialization::serializeNativeValue(stream, opcodeU8); } else { U8 opcodePrefix = U8(U16(opcode) >> 8); U32 opcodeVarUInt = U32(opcode) & 0xff; serializeNativeValue(stream, opcodePrefix); serializeVarUInt32(stream, opcodeVarUInt); } } // These serialization functions need to be declared in the IR namespace for the array serializer in // the Serialization namespace to find them. namespace WAVM { namespace IR { static ValueType decodeValueType(Iptr encodedValueType) { switch(encodedValueType) { case -1: return ValueType::i32; case -2: return ValueType::i64; case -3: return ValueType::f32; case -4: return ValueType::f64; case -5: return ValueType::v128; case -16: return ValueType::funcref; case -17: return ValueType::externref; default: throw FatalSerializationException("invalid value type encoding"); }; } static I8 encodeValueType(ValueType valueType) { switch(valueType) { case ValueType::i32: return -1; case ValueType::i64: return -2; case ValueType::f32: return -3; case ValueType::f64: return -4; case ValueType::v128: return -5; case ValueType::funcref: return -16; case ValueType::externref: return -17; case ValueType::none: case ValueType::any: default: throw FatalSerializationException("invalid value type"); }; } static void serialize(InputStream& stream, ValueType& type) { I8 encodedValueType = 0; serializeVarInt7(stream, encodedValueType); type = decodeValueType(encodedValueType); } static void serialize(OutputStream& stream, ValueType type) { I8 encodedValueType = encodeValueType(type); serializeVarInt7(stream, encodedValueType); } WAVM_FORCEINLINE static void serialize(InputStream& stream, TypeTuple& typeTuple) { Uptr numElems; serializeVarUInt32(stream, numElems); std::vector elems; for(Uptr elemIndex = 0; elemIndex < numElems; ++elemIndex) { ValueType elem; serialize(stream, elem); elems.push_back(elem); } typeTuple = TypeTuple(elems); } static void serialize(OutputStream& stream, TypeTuple& typeTuple) { Uptr numElems = typeTuple.size(); serializeVarUInt32(stream, numElems); for(ValueType elem : typeTuple) { serialize(stream, elem); } } template void serializeIndex(Stream& stream, U64& size, IndexType sizeType) { if(sizeType == IndexType::i32) { serializeVarUInt32(stream, size); } else { serializeVarUInt64(stream, size); } } template void serialize(Stream& stream, SizeConstraints& sizeConstraints, bool hasMax, IndexType sizeType) { serializeIndex(stream, sizeConstraints.min, sizeType); if(hasMax) { serializeIndex(stream, sizeConstraints.max, sizeType); } else if(Stream::isInput) { sizeConstraints.max = UINT64_MAX; } } template void serialize(Stream& stream, ReferenceType& referenceType) { if(Stream::isInput) { U8 encodedReferenceType = 0; serializeNativeValue(stream, encodedReferenceType); switch(encodedReferenceType) { case 0x70: referenceType = ReferenceType::funcref; break; case 0x6F: referenceType = ReferenceType::externref; break; default: throw FatalSerializationException("invalid reference type encoding"); } } else { U8 encodedReferenceType; switch(referenceType) { case ReferenceType::funcref: encodedReferenceType = 0x70; break; case ReferenceType::externref: encodedReferenceType = 0x6F; break; case ReferenceType::none: default: WAVM_UNREACHABLE(); } serializeNativeValue(stream, encodedReferenceType); } } template void serialize(Stream& stream, TableType& tableType) { serialize(stream, tableType.elementType); U8 flags = 0; if(!Stream::isInput && tableType.size.max != UINT64_MAX) { flags |= 0x01; } if(!Stream::isInput && tableType.isShared) { flags |= 0x02; } if(!Stream::isInput && tableType.indexType == IndexType::i64) { flags |= 0x04; } serializeVarUInt7(stream, flags); if(Stream::isInput) { tableType.isShared = (flags & 0x02) != 0; tableType.indexType = (flags & 0x04) ? IndexType::i64 : IndexType::i32; if(flags & ~0x07) { throw FatalSerializationException("unknown table type flag"); } } serialize(stream, tableType.size, flags & 0x01, tableType.indexType); } template void serialize(Stream& stream, MemoryType& memoryType) { U8 flags = 0; if(!Stream::isInput && memoryType.size.max != UINT64_MAX) { flags |= 0x01; } if(!Stream::isInput && memoryType.isShared) { flags |= 0x02; } if(!Stream::isInput && memoryType.indexType == IndexType::i64) { flags |= 0x04; } serializeVarUInt7(stream, flags); if(Stream::isInput) { memoryType.isShared = (flags & 0x02) != 0; memoryType.indexType = (flags & 0x04) ? IndexType::i64 : IndexType::i32; if(flags & ~0x07) { throw FatalSerializationException("unknown memory type flag"); } } serialize(stream, memoryType.size, flags & 0x01, memoryType.indexType); } template void serialize(Stream& stream, GlobalType& globalType) { serialize(stream, globalType.valueType); U8 isMutable = globalType.isMutable ? 1 : 0; serializeVarUInt1(stream, isMutable); if(Stream::isInput) { globalType.isMutable = isMutable != 0; } } template void serialize(Stream& stream, ExceptionType& exceptionType) { serialize(stream, exceptionType.params); } static void serialize(InputStream& stream, ExternKind& kind) { U8 encodedKind = 0; serializeVarUInt7(stream, encodedKind); switch(encodedKind) { case 0: kind = ExternKind::function; break; case 1: kind = ExternKind::table; break; case 2: kind = ExternKind::memory; break; case 3: kind = ExternKind::global; break; case 127: kind = ExternKind::exceptionType; break; default: throw FatalSerializationException("invalid reference type encoding"); }; } static void serialize(OutputStream& stream, ExternKind& kind) { U8 encodedKind; switch(kind) { case ExternKind::function: encodedKind = 0; break; case ExternKind::table: encodedKind = 1; break; case ExternKind::memory: encodedKind = 2; break; case ExternKind::global: encodedKind = 3; break; case ExternKind::exceptionType: encodedKind = 127; break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; serializeVarUInt7(stream, encodedKind); } template void serialize(Stream& stream, Export& e) { serialize(stream, e.name); throwIfNotValidUTF8(e.name); serialize(stream, e.kind); serializeVarUInt32(stream, e.index); } template void serialize(Stream& stream, InitializerExpression& initializer) { serializeOpcode(stream, initializer.typeOpcode); switch(initializer.type) { case InitializerExpression::Type::i32_const: serializeVarInt32(stream, initializer.i32); break; case InitializerExpression::Type::i64_const: serializeVarInt64(stream, initializer.i64); break; case InitializerExpression::Type::f32_const: serialize(stream, initializer.f32); break; case InitializerExpression::Type::f64_const: serialize(stream, initializer.f64); break; case InitializerExpression::Type::v128_const: serialize(stream, initializer.v128); break; case InitializerExpression::Type::global_get: serializeVarUInt32(stream, initializer.ref); break; case InitializerExpression::Type::ref_null: serialize(stream, initializer.nullReferenceType); break; case InitializerExpression::Type::ref_func: serializeVarUInt32(stream, initializer.ref); break; case InitializerExpression::Type::invalid: default: throw FatalSerializationException("invalid initializer expression opcode"); } serializeConstant(stream, "expected end opcode", (U8)Opcode::end); } template void serialize(Stream& stream, TableDef& tableDef) { serialize(stream, tableDef.type); } template void serialize(Stream& stream, MemoryDef& memoryDef) { serialize(stream, memoryDef.type); } template void serialize(Stream& stream, GlobalDef& globalDef) { serialize(stream, globalDef.type); serialize(stream, globalDef.initializer); } template void serialize(Stream& stream, ExceptionTypeDef& exceptionTypeDef) { serialize(stream, exceptionTypeDef.type); } template void serialize(Stream& stream, ElemSegment& elemSegment) { // Serialize the segment flags. U32 flags = 0; if(!Stream::isInput) { bool hasNonFunctionElements = false; switch(elemSegment.contents->encoding) { case ElemSegment::Encoding::expr: flags |= 4; if(elemSegment.contents->elemType != ReferenceType::funcref) { hasNonFunctionElements = true; } break; case ElemSegment::Encoding::index: if(elemSegment.contents->externKind != ExternKind::function) { hasNonFunctionElements = true; } break; default: WAVM_UNREACHABLE(); }; switch(elemSegment.type) { case ElemSegment::Type::active: if(elemSegment.tableIndex != 0 || hasNonFunctionElements) { flags |= 2; } break; case ElemSegment::Type::passive: flags |= 1; break; case ElemSegment::Type::declared: flags |= 3; break; default: WAVM_UNREACHABLE(); }; } serializeVarUInt32(stream, flags); if(Stream::isInput) { if(flags > 7) { throw FatalSerializationException("invalid elem segment flags"); } elemSegment.contents = std::make_shared(); elemSegment.contents->encoding = (flags & 4) ? ElemSegment::Encoding::expr : ElemSegment::Encoding::index; elemSegment.tableIndex = UINTPTR_MAX; elemSegment.baseOffset = {}; switch(flags & 3) { case 0: elemSegment.type = ElemSegment::Type::active; elemSegment.tableIndex = 0; elemSegment.contents->elemType = ReferenceType::funcref; elemSegment.contents->externKind = ExternKind::function; break; case 1: elemSegment.type = ElemSegment::Type::passive; break; case 2: elemSegment.type = ElemSegment::Type::active; break; case 3: elemSegment.type = ElemSegment::Type::declared; break; default: WAVM_UNREACHABLE(); }; } // Serialize the table the element segment writes to. if((flags & 3) == 2) { serializeVarUInt32(stream, elemSegment.tableIndex); } // Serialize the offset the element segment writes to the table at. if(!(flags & 1)) { serialize(stream, elemSegment.baseOffset); } switch(elemSegment.contents->encoding) { case ElemSegment::Encoding::expr: { // Serialize the type of the element expressions as a reference type. if(flags & 3) { serialize(stream, elemSegment.contents->elemType); } serializeArray( stream, elemSegment.contents->elemExprs, [](Stream& stream, ElemExpr& elem) { serializeOpcode(stream, elem.typeOpcode); switch(elem.type) { case ElemExpr::Type::ref_null: serialize(stream, elem.nullReferenceType); break; case ElemExpr::Type::ref_func: serializeVarUInt32(stream, elem.index); break; case ElemExpr::Type::invalid: default: throw FatalSerializationException("invalid elem opcode"); }; serializeConstant(stream, "expected end opcode", (U8)Opcode::end); }); break; } case ElemSegment::Encoding::index: { // Serialize the extern kind referenced by the segment elements. if(flags & 3) { serialize(stream, elemSegment.contents->externKind); } serializeArray( stream, elemSegment.contents->elemIndices, [](Stream& stream, Uptr& externIndex) { serializeVarUInt32(stream, externIndex); }); break; } default: WAVM_UNREACHABLE(); }; } template void serialize(Stream& stream, DataSegment& dataSegment) { if(Stream::isInput) { U32 flags = 0; serializeVarUInt32(stream, flags); switch(flags) { case 0: dataSegment.isActive = true; dataSegment.memoryIndex = 0; serialize(stream, dataSegment.baseOffset); break; case 1: dataSegment.isActive = false; dataSegment.memoryIndex = UINTPTR_MAX; dataSegment.baseOffset = {}; break; case 2: dataSegment.isActive = true; serializeVarUInt32(stream, dataSegment.memoryIndex); serialize(stream, dataSegment.baseOffset); break; default: throw FatalSerializationException("invalid data segment flags"); }; dataSegment.data = std::make_shared>(); } else { if(!dataSegment.isActive) { serializeConstant(stream, "", 1); } else { if(dataSegment.memoryIndex == 0) { serializeConstant(stream, "", 0); } else { serializeConstant(stream, "", 2); serializeVarUInt32(stream, dataSegment.memoryIndex); } serialize(stream, dataSegment.baseOffset); } } serialize(stream, *dataSegment.data); } }} static constexpr U32 magicNumber = 0x6d736100; // "\0asm" static constexpr U32 currentVersion = 1; enum class SectionID : U8 { custom = 0, type = 1, import = 2, function = 3, table = 4, memory = 5, global = 6, export_ = 7, start = 8, elem = 9, code = 10, data = 11, dataCount = 12, exceptionType = 0x7f, }; static void serialize(InputStream& stream, SectionID& sectionID) { serializeNativeValue(stream, *(U8*)§ionID); } static void serialize(OutputStream& stream, SectionID sectionID) { serializeNativeValue(stream, *(U8*)§ionID); } struct ModuleSerializationState { bool hadDataCountSection = false; std::shared_ptr validationState; const Module& module; ModuleSerializationState(const Module& inModule) : module(inModule) {} }; template void serialize(Stream& stream, NoImm&, const FunctionDef&, const ModuleSerializationState&) { } static void serialize(InputStream& stream, ControlStructureImm& imm, const FunctionDef&, const ModuleSerializationState&) { Iptr encodedBlockType; serializeVarInt32(stream, encodedBlockType); if(encodedBlockType >= 0) { imm.type.format = IndexedBlockType::functionType; imm.type.index = encodedBlockType; } else if(encodedBlockType == -64) { imm.type.format = IndexedBlockType::noParametersOrResult; imm.type.resultType = ValueType::none; } else { imm.type.format = IndexedBlockType::oneResult; imm.type.resultType = decodeValueType(encodedBlockType); } } static void serialize(OutputStream& stream, const ControlStructureImm& imm, const FunctionDef&, const ModuleSerializationState&) { Iptr encodedBlockType; switch(imm.type.format) { case IndexedBlockType::noParametersOrResult: encodedBlockType = -64; break; case IndexedBlockType::oneResult: encodedBlockType = encodeValueType(imm.type.resultType); break; case IndexedBlockType::functionType: encodedBlockType = imm.type.index; break; default: WAVM_UNREACHABLE(); }; serializeVarInt32(stream, encodedBlockType); } template void serialize(Stream& stream, SelectImm& imm, const FunctionDef&, const ModuleSerializationState&) { U32 numResults = 1; serializeVarUInt32(stream, numResults); if(Stream::isInput && numResults != 1) { throw ValidationException("typed select must have exactly one result"); } serialize(stream, imm.type); } template void serialize(Stream& stream, BranchImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.targetDepth); } static void serialize(InputStream& stream, BranchTableImm& imm, FunctionDef& functionDef, const ModuleSerializationState&) { std::vector branchTable; serializeArray(stream, branchTable, [](InputStream& stream, Uptr& targetDepth) { serializeVarUInt32(stream, targetDepth); }); imm.branchTableIndex = functionDef.branchTables.size(); functionDef.branchTables.push_back(std::move(branchTable)); serializeVarUInt32(stream, imm.defaultTargetDepth); } static void serialize(OutputStream& stream, BranchTableImm& imm, FunctionDef& functionDef, const ModuleSerializationState&) { WAVM_ASSERT(imm.branchTableIndex < functionDef.branchTables.size()); std::vector& branchTable = functionDef.branchTables[imm.branchTableIndex]; serializeArray(stream, branchTable, [](OutputStream& stream, Uptr& targetDepth) { serializeVarUInt32(stream, targetDepth); }); serializeVarUInt32(stream, imm.defaultTargetDepth); } template void serialize(Stream& stream, LiteralImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarInt32(stream, imm.value); } template void serialize(Stream& stream, LiteralImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarInt64(stream, imm.value); } template void serialize(Stream& stream, GetOrSetVariableImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.variableIndex); } template void serialize(Stream& stream, FunctionImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.functionIndex); } template void serialize(Stream& stream, FunctionRefImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.functionIndex); } template void serialize(Stream& stream, CallIndirectImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.type.index); serializeVarUInt32(stream, imm.tableIndex); } template void serialize(Stream& stream, BaseLoadOrStoreImm& imm, const FunctionDef&, const ModuleSerializationState& moduleState) { constexpr U32 hasMemoryIndexFlag = 0x40; constexpr U32 maxAlignmentLog2 = 0x3f; // The memarg encoding uses a varuint32 where the lower 6 bits are the alignment (log2). // With multi-memory, bit 6 indicates a memory index follows. U32 alignmentLog2AndFlags = imm.alignmentLog2; if(!Stream::isInput && imm.memoryIndex != 0) { alignmentLog2AndFlags |= hasMemoryIndexFlag; } serializeVarUInt32(stream, alignmentLog2AndFlags); const U32 alignmentLog2 = moduleState.module.featureSpec.multipleMemories ? (alignmentLog2AndFlags & ~hasMemoryIndexFlag) : alignmentLog2AndFlags; const bool hasMemoryIndex = moduleState.module.featureSpec.multipleMemories && !!(alignmentLog2AndFlags & hasMemoryIndexFlag); if(alignmentLog2 > maxAlignmentLog2) { throw FatalSerializationException("Invalid alignment"); } imm.alignmentLog2 = static_cast(alignmentLog2); if(moduleState.module.featureSpec.memory64) { serializeVarUInt64(stream, imm.offset); } else { serializeVarUInt32(stream, imm.offset); } if(hasMemoryIndex) { serializeVarUInt32(stream, imm.memoryIndex); } else { imm.memoryIndex = 0; } } template void serialize(Stream& stream, LoadOrStoreLaneImm& imm, const FunctionDef& functionDef, const ModuleSerializationState& state) { serialize(stream, static_cast(imm), functionDef, state); serializeNativeValue(stream, imm.laneIndex); } template void serializeMemoryIndex(Stream& stream, Uptr& memoryIndex, const FeatureSpec& featureSpec) { // Without the multipleMemories feature, the memory index byte must be serialized as a single // zero byte rather than any ULEB128 encoding that denotes zero. if(featureSpec.multipleMemories) { serializeVarUInt32(stream, memoryIndex); } else { serializeConstant(stream, "memory index reserved byte must be zero", 0); if(Stream::isInput) { memoryIndex = 0; } } } template void serialize(Stream& stream, MemoryImm& imm, const FunctionDef&, const ModuleSerializationState& state) { serializeMemoryIndex(stream, imm.memoryIndex, state.module.featureSpec); } template void serialize(Stream& stream, MemoryCopyImm& imm, const FunctionDef&, const ModuleSerializationState& state) { serializeMemoryIndex(stream, imm.destMemoryIndex, state.module.featureSpec); serializeMemoryIndex(stream, imm.sourceMemoryIndex, state.module.featureSpec); } template void serializeTableIndex(Stream& stream, Uptr& tableIndex, const FeatureSpec& featureSpec) { // Without the referenceTypes feature, the memory index byte must be serialized as a single zero // byte rather than any ULEB128 encoding that denotes zero. if(featureSpec.referenceTypes) { serializeVarUInt32(stream, tableIndex); } else { serializeConstant(stream, "table index reserved byte must be zero", 0); if(Stream::isInput) { tableIndex = 0; } } } template void serialize(Stream& stream, TableImm& imm, const FunctionDef&, const ModuleSerializationState& state) { serializeTableIndex(stream, imm.tableIndex, state.module.featureSpec); } template void serialize(Stream& stream, TableCopyImm& imm, const FunctionDef&, const ModuleSerializationState& state) { serializeTableIndex(stream, imm.destTableIndex, state.module.featureSpec); serializeTableIndex(stream, imm.sourceTableIndex, state.module.featureSpec); } namespace WAVM { template void serialize(Stream& stream, V128& v128) { serializeNativeValue(stream, v128); } } template void serialize(Stream& stream, LaneIndexImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeNativeValue(stream, imm.laneIndex); } template void serialize(Stream& stream, ShuffleImm& imm, const FunctionDef&, const ModuleSerializationState&) { for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { serializeNativeValue(stream, imm.laneIndices[laneIndex]); } } template void serialize(Stream& stream, AtomicFenceImm& imm, const FunctionDef&, const ModuleSerializationState&) { if(!Stream::isInput) { WAVM_ASSERT(imm.order == MemoryOrder::sequentiallyConsistent); } U8 memoryOrder = 0; serializeNativeValue(stream, memoryOrder); if(Stream::isInput) { if(memoryOrder != 0) { throw FatalSerializationException("Invalid memory order in atomic.fence instruction"); } imm.order = MemoryOrder::sequentiallyConsistent; } } template void serialize(Stream& stream, ExceptionTypeImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.exceptionTypeIndex); } template void serialize(Stream& stream, RethrowImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.catchDepth); } template void serialize(Stream& stream, DataSegmentAndMemImm& imm, const FunctionDef&, const ModuleSerializationState& moduleState) { if(Stream::isInput && !moduleState.hadDataCountSection) { throw FatalSerializationException( "memory.init instruction cannot occur in a module without a DataCount section"); } serializeVarUInt32(stream, imm.dataSegmentIndex); serializeVarUInt32(stream, imm.memoryIndex); } template void serialize(Stream& stream, DataSegmentImm& imm, const FunctionDef&, const ModuleSerializationState& moduleState) { if(Stream::isInput && !moduleState.hadDataCountSection) { throw FatalSerializationException( "data.drop instruction cannot occur in a module without a DataCount section"); } serializeVarUInt32(stream, imm.dataSegmentIndex); } template void serialize(Stream& stream, ElemSegmentAndTableImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.elemSegmentIndex); serializeVarUInt32(stream, imm.tableIndex); } template void serialize(Stream& stream, ElemSegmentImm& imm, const FunctionDef&, const ModuleSerializationState&) { serializeVarUInt32(stream, imm.elemSegmentIndex); } template void serialize(Stream& stream, LiteralImm& imm, const FunctionDef&, const ModuleSerializationState&) { serialize(stream, imm.value); } template void serialize(Stream& stream, ReferenceTypeImm& imm, const FunctionDef&, const ModuleSerializationState&) { serialize(stream, imm.referenceType); } template void serializeSection(OutputStream& stream, SectionID id, SerializeSection serializeSectionBody) { serialize(stream, id); ArrayOutputStream sectionStream; serializeSectionBody(sectionStream); std::vector sectionBytes = sectionStream.getBytes(); Uptr sectionNumBytes = sectionBytes.size(); serializeVarUInt32(stream, sectionNumBytes); serializeBytes(stream, sectionBytes.data(), sectionBytes.size()); } template void serializeSection(InputStream& stream, SectionID id, SerializeSection serializeSectionBody) { Uptr numSectionBytes = 0; serializeVarUInt32(stream, numSectionBytes); MemoryInputStream sectionStream(stream.advance(numSectionBytes), numSectionBytes); serializeSectionBody(sectionStream); if(sectionStream.capacity()) { throw FatalSerializationException("section contained more data than expected"); } } static void serialize(OutputStream& stream, CustomSection& customSection) { serialize(stream, SectionID::custom); ArrayOutputStream sectionStream; serialize(sectionStream, customSection.name); serializeBytes(sectionStream, customSection.data.data(), customSection.data.size()); std::vector sectionBytes = sectionStream.getBytes(); serialize(stream, sectionBytes); } static void serialize(InputStream& stream, CustomSection& customSection) { Uptr numSectionBytes = 0; serializeVarUInt32(stream, numSectionBytes); MemoryInputStream sectionStream(stream.advance(numSectionBytes), numSectionBytes); serialize(sectionStream, customSection.name); throwIfNotValidUTF8(customSection.name); customSection.data.resize(sectionStream.capacity()); serializeBytes(sectionStream, customSection.data.data(), customSection.data.size()); WAVM_ASSERT(!sectionStream.capacity()); } struct LocalSet { Uptr num; ValueType type; }; template void serialize(Stream& stream, LocalSet& localSet) { serializeVarUInt32(stream, localSet.num); serialize(stream, localSet.type); } struct OperatorSerializerStream { typedef void Result; OperatorSerializerStream(Serialization::OutputStream& inByteStream, FunctionDef& inFunctionDef, const ModuleSerializationState& inModuleState) : byteStream(inByteStream), functionDef(inFunctionDef), moduleState(inModuleState) { } #define VISIT_OPCODE(_, name, nameString, Imm, ...) \ void name(Imm imm) const \ { \ Opcode opcode = Opcode::name; \ serializeOpcode(byteStream, opcode); \ serialize(byteStream, imm, functionDef, moduleState); \ } WAVM_ENUM_NONOVERLOADED_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE void select(SelectImm imm) const { // Serialize different opcodes depending on the select immediates: // implicitly-typed select: 0x1b // explicitly-typed select: 0x1c if(imm.type == ValueType::any) { Opcode opcode = Opcode(0x1b); serializeOpcode(byteStream, opcode); } else { Opcode opcode = Opcode(0x1c); serializeOpcode(byteStream, opcode); serialize(byteStream, imm, functionDef, moduleState); } } private: Serialization::OutputStream& byteStream; FunctionDef& functionDef; const ModuleSerializationState& moduleState; }; static void serializeFunctionBody(OutputStream& sectionStream, Module& module, FunctionDef& functionDef, const ModuleSerializationState& moduleState) { ArrayOutputStream bodyStream; // Convert the function's local types into LocalSets: runs of locals of the same type. LocalSet* localSets = (LocalSet*)alloca(sizeof(LocalSet) * functionDef.nonParameterLocalTypes.size()); Uptr numLocalSets = 0; if(functionDef.nonParameterLocalTypes.size()) { localSets[0].type = ValueType::any; localSets[0].num = 0; for(auto localType : functionDef.nonParameterLocalTypes) { if(localSets[numLocalSets].type != localType) { if(localSets[numLocalSets].type != ValueType::any) { ++numLocalSets; } localSets[numLocalSets].type = localType; localSets[numLocalSets].num = 0; } ++localSets[numLocalSets].num; } if(localSets[numLocalSets].type != ValueType::any) { ++numLocalSets; } } // Serialize the local sets. serializeVarUInt32(bodyStream, numLocalSets); for(Uptr setIndex = 0; setIndex < numLocalSets; ++setIndex) { serialize(bodyStream, localSets[setIndex]); } // Serialize the function code. OperatorDecoderStream irDecoderStream(functionDef.code); OperatorSerializerStream wasmOpEncoderStream(bodyStream, functionDef, moduleState); while(irDecoderStream) { irDecoderStream.decodeOp(wasmOpEncoderStream); }; std::vector bodyBytes = bodyStream.getBytes(); serialize(sectionStream, bodyBytes); } static void serializeFunctionBody(InputStream& sectionStream, Module& module, FunctionDef& functionDef, const ModuleSerializationState& moduleState) { Uptr numBodyBytes = 0; serializeVarUInt32(sectionStream, numBodyBytes); MemoryInputStream bodyStream(sectionStream.advance(numBodyBytes), numBodyBytes); // Deserialize local sets and unpack them into a linear array of local types. Uptr numLocalSets = 0; serializeVarUInt32(bodyStream, numLocalSets); for(Uptr setIndex = 0; setIndex < numLocalSets; ++setIndex) { LocalSet localSet; serialize(bodyStream, localSet); if(functionDef.nonParameterLocalTypes.size() + localSet.num >= module.featureSpec.maxLocals) { throw FatalSerializationException("too many locals"); } for(Uptr index = 0; index < localSet.num; ++index) { functionDef.nonParameterLocalTypes.push_back(localSet.type); } } // Deserialize the function code, validate it, and re-encode it in the IR format. ArrayOutputStream irCodeByteStream; OperatorEncoderStream irEncoderStream(irCodeByteStream); CodeValidationStream codeValidationStream(*moduleState.validationState, functionDef); while(bodyStream.capacity()) { Opcode opcode; serializeOpcode(bodyStream, opcode); switch(U16(opcode)) { #define VISIT_OPCODE(_, name, nameString, Imm, ...) \ case Uptr(Opcode::name): { \ Imm imm; \ serialize(bodyStream, imm, functionDef, moduleState); \ codeValidationStream.name(imm); \ irEncoderStream.name(imm); \ break; \ } WAVM_ENUM_NONOVERLOADED_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE // Explicitly handle both select opcodes here: case 0x1b: { SelectImm imm{ValueType::any}; codeValidationStream.select(imm); irEncoderStream.select(imm); break; } case 0x1c: { SelectImm imm; serialize(bodyStream, imm, functionDef, moduleState); codeValidationStream.select(imm); irEncoderStream.select(imm); break; } default: throw FatalSerializationException(std::string("unknown opcode (") + std::to_string(Uptr(opcode)) + ")"); }; }; codeValidationStream.finish(); functionDef.code = std::move(irCodeByteStream.getBytes()); } static void serializeCallingConvention(InputStream& stream, CallingConvention& callingConvention) { U32 encoding = 0; serializeVarUInt32(stream, encoding); switch(encoding) { case 0: callingConvention = CallingConvention::wasm; break; case 1: callingConvention = CallingConvention::intrinsic; break; case 2: callingConvention = CallingConvention::intrinsicWithContextSwitch; break; case 3: callingConvention = CallingConvention::c; break; case 4: callingConvention = CallingConvention::cAPICallback; break; default: throw FatalSerializationException("unknown calling convention (" + std::to_string(encoding) + ")"); }; } static void serializeCallingConvention(OutputStream& stream, CallingConvention callingConvention) { U32 encoding = 0; switch(callingConvention) { case CallingConvention::wasm: encoding = 0; break; case CallingConvention::intrinsic: encoding = 1; break; case CallingConvention::intrinsicWithContextSwitch: encoding = 2; break; case CallingConvention::c: encoding = 3; break; case CallingConvention::cAPICallback: encoding = 4; break; default: WAVM_UNREACHABLE(); }; serializeVarUInt32(stream, encoding); } template void serializeFunctionType(Stream& stream, FunctionType& functionType) { if(Stream::isInput) { U8 tag = 0; serializeNativeValue(stream, tag); CallingConvention callingConvention = CallingConvention::wasm; switch(tag) { case 0x60: break; case 0x61: serializeCallingConvention(stream, callingConvention); break; default: throw FatalSerializationException("unknown function type tag (" + std::to_string(tag) + ")"); }; TypeTuple params; serialize(stream, params); TypeTuple results; serialize(stream, results); functionType = FunctionType(results, params, callingConvention); } else { U8 tag = functionType.callingConvention() == CallingConvention::wasm ? 0x60 : 0x61; serializeNativeValue(stream, tag); if(tag == 0x61) { CallingConvention callingConvention = functionType.callingConvention(); serializeCallingConvention(stream, callingConvention); } TypeTuple params = functionType.params(); serialize(stream, params); TypeTuple results = functionType.results(); serialize(stream, results); } } template void serializeTypeSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::type, [&module](Stream& sectionStream) { serializeArray(sectionStream, module.types, serializeFunctionType); }); } template void serializeImportSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::import, [&module](Stream& sectionStream) { Uptr size = module.functions.imports.size() + module.tables.imports.size() + module.memories.imports.size() + module.globals.imports.size() + module.exceptionTypes.imports.size(); serializeVarUInt32(sectionStream, size); if(Stream::isInput) { for(Uptr index = 0; index < size; ++index) { std::string moduleName; std::string exportName; ExternKind kind = ExternKind::invalid; serialize(sectionStream, moduleName); serialize(sectionStream, exportName); throwIfNotValidUTF8(moduleName); throwIfNotValidUTF8(exportName); serialize(sectionStream, kind); Uptr kindIndex = 0; switch(kind) { case ExternKind::function: { U32 functionTypeIndex = 0; serializeVarUInt32(sectionStream, functionTypeIndex); if(functionTypeIndex >= module.types.size()) { throw FatalSerializationException("invalid import function type index"); } kindIndex = module.functions.imports.size(); module.functions.imports.push_back( {{functionTypeIndex}, std::move(moduleName), std::move(exportName)}); break; } case ExternKind::table: { TableType tableType; serialize(sectionStream, tableType); kindIndex = module.tables.imports.size(); module.tables.imports.push_back( {tableType, std::move(moduleName), std::move(exportName)}); break; } case ExternKind::memory: { MemoryType memoryType; serialize(sectionStream, memoryType); kindIndex = module.memories.imports.size(); module.memories.imports.push_back( {memoryType, std::move(moduleName), std::move(exportName)}); break; } case ExternKind::global: { GlobalType globalType; serialize(sectionStream, globalType); kindIndex = module.globals.imports.size(); module.globals.imports.push_back( {globalType, std::move(moduleName), std::move(exportName)}); break; } case ExternKind::exceptionType: { ExceptionType exceptionType; serialize(sectionStream, exceptionType); kindIndex = module.exceptionTypes.imports.size(); module.exceptionTypes.imports.push_back( {exceptionType, std::move(moduleName), std::move(exportName)}); break; } case ExternKind::invalid: default: throw FatalSerializationException("invalid ExternKind"); }; module.imports.push_back({kind, kindIndex}); } } else { WAVM_ASSERT(module.imports.size() == module.functions.imports.size() + module.tables.imports.size() + module.memories.imports.size() + module.globals.imports.size() + module.exceptionTypes.imports.size()); for(const auto& kindIndex : module.imports) { ExternKind kind = kindIndex.kind; switch(kindIndex.kind) { case ExternKind::function: { auto& functionImport = module.functions.imports[kindIndex.index]; serialize(sectionStream, functionImport.moduleName); serialize(sectionStream, functionImport.exportName); serialize(sectionStream, kind); serializeVarUInt32(sectionStream, functionImport.type.index); break; } case ExternKind::table: { auto& tableImport = module.tables.imports[kindIndex.index]; serialize(sectionStream, tableImport.moduleName); serialize(sectionStream, tableImport.exportName); serialize(sectionStream, kind); serialize(sectionStream, tableImport.type); break; } case ExternKind::memory: { auto& memoryImport = module.memories.imports[kindIndex.index]; serialize(sectionStream, memoryImport.moduleName); serialize(sectionStream, memoryImport.exportName); serialize(sectionStream, kind); serialize(sectionStream, memoryImport.type); break; } case ExternKind::global: { auto& globalImport = module.globals.imports[kindIndex.index]; serialize(sectionStream, globalImport.moduleName); serialize(sectionStream, globalImport.exportName); serialize(sectionStream, kind); serialize(sectionStream, globalImport.type); break; } case ExternKind::exceptionType: { auto& exceptionTypeImport = module.exceptionTypes.imports[kindIndex.index]; serialize(sectionStream, exceptionTypeImport.moduleName); serialize(sectionStream, exceptionTypeImport.exportName); serialize(sectionStream, kind); serialize(sectionStream, exceptionTypeImport.type); break; } case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } } }); } template void serializeFunctionSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::function, [&module](Stream& sectionStream) { Uptr numFunctions = module.functions.defs.size(); serializeVarUInt32(sectionStream, numFunctions); if(Stream::isInput) { // Grow the vector one element at a time: try to get a serialization exception // before making a huge allocation for malformed input. module.functions.defs.clear(); for(Uptr functionIndex = 0; functionIndex < numFunctions; ++functionIndex) { U32 functionTypeIndex = 0; serializeVarUInt32(sectionStream, functionTypeIndex); if(functionTypeIndex >= module.types.size()) { throw FatalSerializationException("invalid function type index"); } module.functions.defs.push_back({{functionTypeIndex}, {}, {}, {}}); } module.functions.defs.shrink_to_fit(); } else { for(FunctionDef& function : module.functions.defs) { serializeVarUInt32(sectionStream, function.type.index); } } }); } template void serializeTableSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::table, [&module](Stream& sectionStream) { serialize(sectionStream, module.tables.defs); }); } template void serializeMemorySection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::memory, [&module](Stream& sectionStream) { serialize(sectionStream, module.memories.defs); }); } template void serializeGlobalSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::global, [&module](Stream& sectionStream) { serialize(sectionStream, module.globals.defs); }); } template void serializeExceptionTypeSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::exceptionType, [&module](Stream& sectionStream) { serialize(sectionStream, module.exceptionTypes.defs); }); } template void serializeExportSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::export_, [&module](Stream& sectionStream) { serialize(sectionStream, module.exports); }); } template void serializeStartSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::start, [&module](Stream& sectionStream) { serializeVarUInt32(sectionStream, module.startFunctionIndex); }); } template void serializeElementSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::elem, [&module](Stream& sectionStream) { serialize(sectionStream, module.elemSegments); }); } static void serializeCodeSection(InputStream& moduleStream, Module& module, const ModuleSerializationState& moduleState) { serializeSection( moduleStream, SectionID::code, [&module, &moduleState](InputStream& sectionStream) { Uptr numFunctionBodies = module.functions.defs.size(); serializeVarUInt32(sectionStream, numFunctionBodies); if(numFunctionBodies != module.functions.defs.size()) { throw FatalSerializationException( "function and code sections have mismatched function counts"); } for(FunctionDef& functionDef : module.functions.defs) { serializeFunctionBody(sectionStream, module, functionDef, moduleState); } }); } void serializeCodeSection(OutputStream& moduleStream, Module& module, const ModuleSerializationState& moduleState) { serializeSection( moduleStream, SectionID::code, [&module, &moduleState](OutputStream& sectionStream) { Uptr numFunctionBodies = module.functions.defs.size(); serializeVarUInt32(sectionStream, numFunctionBodies); for(FunctionDef& functionDef : module.functions.defs) { serializeFunctionBody(sectionStream, module, functionDef, moduleState); } }); } template void serializeDataCountSection(Stream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::dataCount, [&module](Stream& sectionStream) { Uptr numDataSegments = module.dataSegments.size(); serializeVarUInt32(sectionStream, numDataSegments); if(Stream::isInput) { // To make fuzzing more effective, fail gracefully instead of through OOM if the // DataCount section specifies a large number of data segments. if(numDataSegments > module.featureSpec.maxDataSegments) { throw FatalSerializationException("too many data segments"); } module.dataSegments.resize(numDataSegments); } }); } void serializeDataSection(InputStream& moduleStream, Module& module, bool hadDataCountSection) { serializeSection( moduleStream, SectionID::data, [&module, hadDataCountSection](InputStream& sectionStream) { Uptr numDataSegments = 0; serializeVarUInt32(sectionStream, numDataSegments); if(!hadDataCountSection) { // To make fuzzing more effective, fail gracefully instead of // through OOM if the DataCount section specifies a large number of // data segments. if(numDataSegments > module.featureSpec.maxDataSegments) { throw FatalSerializationException("too many data segments"); } module.dataSegments.resize(numDataSegments); } else if(numDataSegments != module.dataSegments.size()) { throw FatalSerializationException( "DataCount and Data sections have mismatched segment counts"); } for(Uptr segmentIndex = 0; segmentIndex < module.dataSegments.size(); ++segmentIndex) { serialize(sectionStream, module.dataSegments[segmentIndex]); } }); } void serializeDataSection(OutputStream& moduleStream, Module& module) { serializeSection(moduleStream, SectionID::data, [&module](OutputStream& sectionStream) { serialize(sectionStream, module.dataSegments); }); } void serializeCustomSectionsAfterKnownSection(OutputStream& moduleStream, Module& module, OrderedSectionID afterSection) { for(CustomSection& customSection : module.customSections) { if(customSection.afterSection == afterSection) { serialize(moduleStream, customSection); } } } static void serializeModule(OutputStream& moduleStream, Module& module) { ModuleSerializationState moduleState(module); serializeConstant(moduleStream, "magic number", U32(magicNumber)); serializeConstant(moduleStream, "version", U32(currentVersion)); serializeCustomSectionsAfterKnownSection( moduleStream, module, OrderedSectionID::moduleBeginning); if(hasTypeSection(module)) { serializeTypeSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::type); if(hasImportSection(module)) { serializeImportSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::import); if(hasFunctionSection(module)) { serializeFunctionSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::function); if(hasTableSection(module)) { serializeTableSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::table); if(hasMemorySection(module)) { serializeMemorySection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::memory); if(hasGlobalSection(module)) { serializeGlobalSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::global); if(hasExceptionTypeSection(module)) { serializeExceptionTypeSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::exceptionType); if(hasExportSection(module)) { serializeExportSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::export_); if(hasStartSection(module)) { serializeStartSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::start); if(hasElemSection(module)) { serializeElementSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::elem); if(hasDataCountSection(module)) { serializeDataCountSection(moduleStream, module); moduleState.hadDataCountSection = true; } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::dataCount); if(hasCodeSection(module)) { serializeCodeSection(moduleStream, module, moduleState); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::code); if(hasDataSection(module)) { serializeDataSection(moduleStream, module); } serializeCustomSectionsAfterKnownSection(moduleStream, module, OrderedSectionID::data); } static void serializeModule(InputStream& moduleStream, Module& module) { serializeConstant(moduleStream, "magic number", U32(magicNumber)); serializeConstant(moduleStream, "version", U32(currentVersion)); ModuleSerializationState moduleState(module); moduleState.validationState = IR::createModuleValidationState(module); OrderedSectionID lastKnownOrderedSectionID = OrderedSectionID::moduleBeginning; bool hadFunctionDefinitions = false; bool hadDataSection = false; while(moduleStream.capacity()) { SectionID sectionID; serialize(moduleStream, sectionID); if(sectionID != SectionID::custom) { OrderedSectionID orderedSectionID; switch(sectionID) { case SectionID::type: orderedSectionID = OrderedSectionID::type; break; case SectionID::import: orderedSectionID = OrderedSectionID::import; break; case SectionID::function: orderedSectionID = OrderedSectionID::function; break; case SectionID::table: orderedSectionID = OrderedSectionID::table; break; case SectionID::memory: orderedSectionID = OrderedSectionID::memory; break; case SectionID::global: orderedSectionID = OrderedSectionID::global; break; case SectionID::export_: orderedSectionID = OrderedSectionID::export_; break; case SectionID::start: orderedSectionID = OrderedSectionID::start; break; case SectionID::elem: orderedSectionID = OrderedSectionID::elem; break; case SectionID::code: orderedSectionID = OrderedSectionID::code; break; case SectionID::data: orderedSectionID = OrderedSectionID::data; break; case SectionID::dataCount: orderedSectionID = OrderedSectionID::dataCount; break; case SectionID::exceptionType: orderedSectionID = OrderedSectionID::exceptionType; break; case SectionID::custom: WAVM_UNREACHABLE(); default: throw FatalSerializationException("unknown section ID (" + std::to_string(U8(sectionID))); }; if(orderedSectionID > lastKnownOrderedSectionID) { lastKnownOrderedSectionID = orderedSectionID; } else { throw FatalSerializationException("incorrect order for known section"); } } switch(sectionID) { case SectionID::type: serializeTypeSection(moduleStream, module); IR::validateTypes(*moduleState.validationState); break; case SectionID::import: serializeImportSection(moduleStream, module); IR::validateImports(*moduleState.validationState); break; case SectionID::function: serializeFunctionSection(moduleStream, module); IR::validateFunctionDeclarations(*moduleState.validationState); break; case SectionID::table: serializeTableSection(moduleStream, module); IR::validateTableDefs(*moduleState.validationState); break; case SectionID::memory: serializeMemorySection(moduleStream, module); IR::validateMemoryDefs(*moduleState.validationState); break; case SectionID::global: serializeGlobalSection(moduleStream, module); IR::validateGlobalDefs(*moduleState.validationState); break; case SectionID::exceptionType: serializeExceptionTypeSection(moduleStream, module); IR::validateExceptionTypeDefs(*moduleState.validationState); break; case SectionID::export_: serializeExportSection(moduleStream, module); IR::validateExports(*moduleState.validationState); break; case SectionID::start: serializeStartSection(moduleStream, module); IR::validateStartFunction(*moduleState.validationState); break; case SectionID::elem: serializeElementSection(moduleStream, module); IR::validateElemSegments(*moduleState.validationState); break; case SectionID::dataCount: serializeDataCountSection(moduleStream, module); moduleState.hadDataCountSection = true; break; case SectionID::code: serializeCodeSection(moduleStream, module, moduleState); hadFunctionDefinitions = true; break; case SectionID::data: serializeDataSection(moduleStream, module, moduleState.hadDataCountSection); hadDataSection = true; IR::validateDataSegments(*moduleState.validationState); break; case SectionID::custom: { CustomSection& customSection = *module.customSections.insert(module.customSections.end(), CustomSection()); customSection.afterSection = getMaxPresentSection(module, lastKnownOrderedSectionID); serialize(moduleStream, customSection); break; } default: throw FatalSerializationException("unknown section ID"); }; }; if(module.functions.defs.size() && !hadFunctionDefinitions) { throw FatalSerializationException( "module contained function declarations, but no corresponding " "function definition section"); } if(module.dataSegments.size() && !hadDataSection) { throw FatalSerializationException( "module contained DataCount section with non-zero segment count, but no corresponding " "Data section"); } } std::vector WASM::saveBinaryModule(const Module& module) { try { ArrayOutputStream stream; serializeModule(stream, const_cast(module)); return stream.getBytes(); } catch(Serialization::FatalSerializationException const& exception) { Errors::fatalf("Failed to save WASM module: %s", exception.message.c_str()); } } bool WASM::loadBinaryModule(const U8* wasmBytes, Uptr numWASMBytes, IR::Module& outModule, LoadError* outError) { // Load the module from a binary WebAssembly file. try { Timing::Timer loadTimer; MemoryInputStream stream(wasmBytes, numWASMBytes); serializeModule(stream, outModule); Timing::logRatePerSecond("Loaded WASM", loadTimer, numWASMBytes / 1024.0 / 1024.0, "MiB"); return true; } catch(Serialization::FatalSerializationException const& exception) { if(outError) { outError->type = LoadError::Type::malformed; outError->message = "Module was malformed: " + exception.message; } return false; } catch(IR::ValidationException const& exception) { if(outError) { outError->type = LoadError::Type::invalid; outError->message = "Module was invalid: " + exception.message; } return false; } catch(std::bad_alloc const&) { if(outError) { outError->type = LoadError::Type::malformed; outError->message = "Memory allocation failed: input is likely malformed"; } return false; } } ================================================ FILE: Lib/WASTParse/CMakeLists.txt ================================================ set(Sources Lexer.cpp Parse.cpp ParseFunction.cpp ParseNumbers.cpp ParseModule.cpp ParseTests.cpp) set(PrivateHeaders Lexer.h Parse.h) set(PublicHeaders ${WAVM_INCLUDE_DIR}/WASTParse/WASTParse.h ${WAVM_INCLUDE_DIR}/WASTParse/TestScript.h) WAVM_ADD_LIB_COMPONENT(WASTParse SOURCES ${Sources} HEADERS ${PublicHeaders} ${PrivateHeaders}) ================================================ FILE: Lib/WASTParse/Lexer.cpp ================================================ #include "Lexer.h" #include #include #include #include #include #include "WAVM/IR/Operators.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Logging/Logging.h" #include "WAVM/NFA/NFA.h" #include "WAVM/RegExp/RegExp.h" #include "WAVM/WASTParse/WASTParse.h" #define DUMP_NFA_GRAPH 0 #define DUMP_DFA_GRAPH 0 using namespace WAVM; using namespace WAVM::WAST; namespace WAVM { namespace WAST { struct LineInfo { U32* lineStarts; U32 numLineStarts; mutable Uptr lastQueryCharOffset{0}; mutable U32 lastQueryTabs{0}; mutable U32 lastQueryCharactersAndTabs{0}; LineInfo(U32* inLineStarts, U32 inNumLineStarts) : lineStarts(inLineStarts), numLineStarts(inNumLineStarts) { } }; }} const char* WAST::describeToken(TokenType tokenType) { static const char* tokenDescriptions[] = { // This ENUM_TOKENS must come before the literalTokenPairs definition that redefines // VISIT_OPERATOR_TOKEN. #define VISIT_TOKEN(name, description, _) description, ENUM_TOKENS() #undef VISIT_TOKEN }; WAVM_ASSERT(tokenType * sizeof(const char*) < sizeof(tokenDescriptions)); return tokenDescriptions[tokenType]; } struct StaticData { NFA::Machine nfaMachine; StaticData(bool allowLegacyInstructionNames); static StaticData& get(bool allowLegacyInstructionNames); }; static NFA::StateIndex createTokenSeparatorPeekState(NFA::Builder* builder, NFA::StateIndex finalState) { NFA::CharSet tokenSeparatorCharSet; tokenSeparatorCharSet.add(U8(' ')); tokenSeparatorCharSet.add(U8('\t')); tokenSeparatorCharSet.add(U8('\r')); tokenSeparatorCharSet.add(U8('\n')); tokenSeparatorCharSet.add(U8('=')); tokenSeparatorCharSet.add(U8('(')); tokenSeparatorCharSet.add(U8(')')); tokenSeparatorCharSet.add(U8(';')); tokenSeparatorCharSet.add(0); auto separatorState = addState(builder); NFA::addEdge(builder, separatorState, tokenSeparatorCharSet, finalState | NFA::edgeDoesntConsumeInputFlag); return separatorState; } static void addLiteralStringToNFA(const char* string, NFA::Builder* builder, NFA::StateIndex initialState, NFA::StateIndex finalState) { // Add the literal to the NFA, one character at a time, reusing existing states that are // reachable by the same string. for(const char* nextChar = string; *nextChar; ++nextChar) { NFA::StateIndex nextState = NFA::getNonTerminalEdge(builder, initialState, *nextChar); if(nextState < 0 || nextChar[1] == 0) { nextState = nextChar[1] == 0 ? finalState : addState(builder); NFA::addEdge(builder, initialState, NFA::CharSet(*nextChar), nextState); } initialState = nextState; } } static void addLiteralTokenToNFA(const char* literalString, NFA::Builder* builder, TokenType tokenType, bool isTokenSeparator) { NFA::StateIndex finalState = NFA::maximumTerminalStateIndex - (NFA::StateIndex)tokenType; if(!isTokenSeparator) { finalState = createTokenSeparatorPeekState(builder, finalState); } addLiteralStringToNFA(literalString, builder, 0, finalState); } StaticData::StaticData(bool allowLegacyInstructionNames) { // clang-format off static const std::pair regexpTokenPairs[] = { {t_decimalInt, "[+\\-]?\\d+(_\\d+)*"}, {t_decimalFloat, "[+\\-]?\\d+(_\\d+)*\\.(\\d+(_\\d+)*)*([eE][+\\-]?\\d+(_\\d+)*)?"}, {t_decimalFloat, "[+\\-]?\\d+(_\\d+)*[eE][+\\-]?\\d+(_\\d+)*"}, {t_hexInt, "[+\\-]?0[xX][\\da-fA-F]+(_[\\da-fA-F]+)*"}, {t_hexFloat, "[+\\-]?0[xX][\\da-fA-F]+(_[\\da-fA-F]+)*\\.([\\da-fA-F]+(_[\\da-fA-F]+)*)*([pP][+\\-]?\\d+(_\\d+)*)?"}, {t_hexFloat, "[+\\-]?0[xX][\\da-fA-F]+(_[\\da-fA-F]+)*[pP][+\\-]?\\d+(_\\d+)*"}, {t_floatNaN, "[+\\-]?nan(:0[xX][\\da-fA-F]+(_[\\da-fA-F]+)*)?"}, {t_floatInf, "[+\\-]?inf"}, {t_string, "\"([^\"\n\\\\]*(\\\\([^0-9a-fA-Fu]|[0-9a-fA-F][0-9a-fA-F]|u\\{[0-9a-fA-F]+})))*\""}, {t_name, "\\$[a-zA-Z0-9\'_+*/~=<>!?@#$%&|:`.\\-\\^\\\\]+"}, {t_quotedName, "\\$\"([^\"\n\\\\]*(\\\\([^0-9a-fA-Fu]|[0-9a-fA-F][0-9a-fA-F]|u\\{[0-9a-fA-F]+})))*\""}, }; static const std::tuple literalTokenTuples[] = { std::make_tuple(t_leftParenthesis, "(", true), std::make_tuple(t_rightParenthesis, ")", true), std::make_tuple(t_equals, "=", true), std::make_tuple(t_canonicalNaN, "nan:canonical", false), std::make_tuple(t_arithmeticNaN, "nan:arithmetic", false), #define VISIT_TOKEN(name, _, literalString) std::make_tuple(t_##name, literalString, false), ENUM_LITERAL_TOKENS() #undef VISIT_TOKEN #undef VISIT_OPERATOR_TOKEN #define VISIT_OPERATOR_TOKEN(_, name, nameString, ...) std::make_tuple(t_##name, nameString, false), WAVM_ENUM_OPERATORS(VISIT_OPERATOR_TOKEN) #undef VISIT_OPERATOR_TOKEN }; // Legacy aliases for tokens. static const std::tuple legacyOperatorAliasTuples[] = { std::make_tuple(t_funcref , "anyfunc" ), std::make_tuple(t_local_get , "get_local" ), std::make_tuple(t_local_set , "set_local" ), std::make_tuple(t_local_tee , "tee_local" ), std::make_tuple(t_global_get , "get_global" ), std::make_tuple(t_global_set , "set_global" ), std::make_tuple(t_i32_wrap_i64 , "i32.wrap/i64" ), std::make_tuple(t_i32_trunc_f32_s , "i32.trunc_s/f32" ), std::make_tuple(t_i32_trunc_f32_u , "i32.trunc_u/f32" ), std::make_tuple(t_i32_trunc_f64_s , "i32.trunc_s/f64" ), std::make_tuple(t_i32_trunc_f64_u , "i32.trunc_u/f64" ), std::make_tuple(t_i64_extend_i32_s , "i64.extend_s/i32" ), std::make_tuple(t_i64_extend_i32_u , "i64.extend_u/i32" ), std::make_tuple(t_i64_trunc_f32_s , "i64.trunc_s/f32" ), std::make_tuple(t_i64_trunc_f32_u , "i64.trunc_u/f32" ), std::make_tuple(t_i64_trunc_f64_s , "i64.trunc_s/f64" ), std::make_tuple(t_i64_trunc_f64_u , "i64.trunc_u/f64" ), std::make_tuple(t_f32_convert_i32_s , "f32.convert_s/i32" ), std::make_tuple(t_f32_convert_i32_u , "f32.convert_u/i32" ), std::make_tuple(t_f32_convert_i64_s , "f32.convert_s/i64" ), std::make_tuple(t_f32_convert_i64_u , "f32.convert_u/i64" ), std::make_tuple(t_f32_demote_f64 , "f32.demote/f64" ), std::make_tuple(t_f64_convert_i32_s , "f64.convert_s/i32" ), std::make_tuple(t_f64_convert_i32_u , "f64.convert_u/i32" ), std::make_tuple(t_f64_convert_i64_s , "f64.convert_s/i64" ), std::make_tuple(t_f64_convert_i64_u , "f64.convert_u/i64" ), std::make_tuple(t_f64_promote_f32 , "f64.promote/f32" ), std::make_tuple(t_i32_reinterpret_f32, "i32.reinterpret/f32"), std::make_tuple(t_i64_reinterpret_f64, "i64.reinterpret/f64"), std::make_tuple(t_f32_reinterpret_i32, "f32.reinterpret/i32"), std::make_tuple(t_f64_reinterpret_i64, "f64.reinterpret/i64") }; // clang-format on Timing::Timer timer; NFA::Builder* nfaBuilder = NFA::createBuilder(); for(auto regexpTokenPair : regexpTokenPairs) { NFA::StateIndex finalState = NFA::maximumTerminalStateIndex - (NFA::StateIndex)regexpTokenPair.first; finalState = createTokenSeparatorPeekState(nfaBuilder, finalState); RegExp::addToNFA(regexpTokenPair.second, nfaBuilder, 0, finalState); } for(auto literalTokenTuple : literalTokenTuples) { const TokenType tokenType = std::get<0>(literalTokenTuple); const char* literalString = std::get<1>(literalTokenTuple); const bool isTokenSeparator = std::get<2>(literalTokenTuple); addLiteralTokenToNFA(literalString, nfaBuilder, tokenType, isTokenSeparator); } for(auto legacyOperatorAliasTuple : legacyOperatorAliasTuples) { const TokenType tokenType = allowLegacyInstructionNames ? std::get<0>(legacyOperatorAliasTuple) : TokenType(t_legacyInstructionName); const char* literalString = std::get<1>(legacyOperatorAliasTuple); addLiteralTokenToNFA(literalString, nfaBuilder, tokenType, false); } if(DUMP_NFA_GRAPH) { std::string nfaGraphVizString = NFA::dumpNFAGraphViz(nfaBuilder); WAVM_ERROR_UNLESS( saveFile("nfaGraph.dot", nfaGraphVizString.data(), nfaGraphVizString.size())); } nfaMachine = NFA::Machine(nfaBuilder); if(DUMP_DFA_GRAPH) { std::string dfaGraphVizString = nfaMachine.dumpDFAGraphViz(); WAVM_ERROR_UNLESS( saveFile("dfaGraph.dot", dfaGraphVizString.data(), dfaGraphVizString.size())); } Timing::logTimer("built lexer tables", timer); } StaticData& StaticData::get(bool allowLegacyInstructionNames) { if(allowLegacyInstructionNames) { static StaticData staticData(true); return staticData; } else { static StaticData staticData(false); return staticData; } } inline bool isRecoveryPointChar(char c) { switch(c) { // Recover lexing at the next whitespace or parenthesis. case ' ': case '\t': case '\r': case '\n': case '\f': case '(': case ')': return true; default: return false; }; } Token* WAST::lex(const char* string, Uptr stringLength, LineInfo*& outLineInfo, bool allowLegacyInstructionNames) { WAVM_ERROR_UNLESS(string); WAVM_ERROR_UNLESS(string[stringLength - 1] == 0); StaticData& staticData = StaticData::get(allowLegacyInstructionNames); Timing::Timer timer; if(stringLength > UINT32_MAX) { Errors::fatalf("cannot lex strings with more than %u characters", UINT32_MAX); } // Allocate enough memory up front for a token and newline for each character in the input // string. Token* tokens = (Token*)malloc(sizeof(Token) * (stringLength + 1)); U32* lineStarts = (U32*)malloc(sizeof(U32) * (stringLength + 2)); Token* nextToken = tokens; U32* nextLineStart = lineStarts; *nextLineStart++ = 0; const char* nextChar = string; while(true) { // Skip whitespace and comments (keeping track of newlines). while(true) { switch(*nextChar) { // Single line comments. case ';': if(nextChar[1] != ';') { goto doneSkippingWhitespace; } else { nextChar += 2; while(*nextChar) { if(*nextChar == '\n') { // Emit a line start for the newline. *nextLineStart++ = U32(nextChar - string + 1); ++nextChar; break; } ++nextChar; }; } break; // Delimited (possibly multi-line) comments. case '(': if(nextChar[1] != ';') { goto doneSkippingWhitespace; } else { const char* firstCommentChar = nextChar; nextChar += 2; U32 commentDepth = 1; while(commentDepth) { if(nextChar[0] == ';' && nextChar[1] == ')') { --commentDepth; nextChar += 2; } else if(nextChar[0] == '(' && nextChar[1] == ';') { ++commentDepth; nextChar += 2; } else if(nextChar == string + stringLength - 1) { // Emit an unterminated comment token. nextToken->type = t_unterminatedComment; nextToken->begin = U32(firstCommentChar - string); ++nextToken; goto doneSkippingWhitespace; } else { if(*nextChar == '\n') { // Emit a line start for the newline. *nextLineStart++ = U32(nextChar - string); } ++nextChar; } }; } break; // Whitespace. case '\n': *nextLineStart++ = U32(nextChar - string + 1); ++nextChar; break; case ' ': case '\t': case '\r': case '\f': ++nextChar; break; default: goto doneSkippingWhitespace; }; } doneSkippingWhitespace: // Once we reach a non-whitespace, non-comment character, feed characters into the NFA // until it reaches a terminal state. nextToken->begin = U32(nextChar - string); NFA::StateIndex terminalState = staticData.nfaMachine.feed(nextChar); if(terminalState != NFA::unmatchedCharacterTerminal) { nextToken->type = TokenType(NFA::maximumTerminalStateIndex - (NFA::StateIndex)terminalState); ++nextToken; } else { if(nextToken->begin < stringLength - 1) { // Emit an unrecognized token. nextToken->type = t_unrecognized; ++nextToken; // Advance until a recovery point or the end of the string. const char* stringEnd = string + stringLength - 1; while(nextChar < stringEnd && !isRecoveryPointChar(*nextChar)) { ++nextChar; } } else { break; } } } // Emit an end token to mark the end of the token stream. nextToken->type = t_eof; ++nextToken; // Emit an extra line start for the end of the file, so you can find the end of a line with // lineStarts[line + 1]. *nextLineStart++ = U32(nextChar - string) + 1; // Shrink the line start and token arrays to the final number of tokens/lines. const Uptr numLineStarts = nextLineStart - lineStarts; const Uptr numTokens = nextToken - tokens; lineStarts = (U32*)realloc(lineStarts, sizeof(U32) * numLineStarts); tokens = (Token*)realloc(tokens, sizeof(Token) * numTokens); // Create the LineInfo object that encapsulates the line start information. outLineInfo = new LineInfo{lineStarts, U32(numLineStarts)}; Timing::logRatePerSecond("lexed WAST file", timer, stringLength / 1024.0 / 1024.0, "MiB"); Log::printf(Log::metrics, "lexer produced %" WAVM_PRIuPTR " tokens (%.1fMiB)\n", numTokens, numTokens * sizeof(Token) / 1024.0 / 1024.0); return tokens; } void WAST::freeTokens(Token* tokens) { free(tokens); } void WAST::freeLineInfo(LineInfo* lineInfo) { free(lineInfo->lineStarts); delete lineInfo; } static Uptr getLineOffset(const LineInfo* lineInfo, Uptr lineIndex) { WAVM_ERROR_UNLESS(lineIndex < lineInfo->numLineStarts); return lineInfo->lineStarts[lineIndex]; } TextFileLocus WAST::calcLocusFromOffset(const char* string, const LineInfo* lineInfo, Uptr charOffset) { // The last line start is at the end of the string, so use it to sanity check that the // charOffset isn't past the end of the string. const Uptr numChars = lineInfo->lineStarts[lineInfo->numLineStarts - 1]; WAVM_ASSERT(charOffset <= numChars); // Binary search the line starts for the last one before charIndex. Uptr minLineIndex = 0; Uptr maxLineIndex = lineInfo->numLineStarts - 1; while(maxLineIndex > minLineIndex) { const Uptr medianLineIndex = (minLineIndex + maxLineIndex + 1) / 2; if(charOffset < lineInfo->lineStarts[medianLineIndex]) { maxLineIndex = medianLineIndex - 1; } else if(charOffset > lineInfo->lineStarts[medianLineIndex]) { minLineIndex = medianLineIndex; } else { minLineIndex = maxLineIndex = medianLineIndex; } }; TextFileLocus result; result.newlines = (U32)minLineIndex; // Calculate the offsets to the start and end of the line containing the locus. result.lineStartOffset = getLineOffset(lineInfo, result.newlines); result.lineEndOffset = getLineOffset(lineInfo, result.newlines + 1) - 1; WAVM_ASSERT(charOffset >= result.lineStartOffset); WAVM_ASSERT(charOffset <= result.lineEndOffset); // Try to reuse work done by the last query counting characters on this line. Without this // reuse, it's possible to craft an input that takes O(numChars^2) time to parse: an input with // a single line with O(numChars) errors will take O(numChars) time to count the tabs+characters // preceding the error on the line *for each error*. const char* nextChar = string + result.lineStartOffset; if(lineInfo->lastQueryCharOffset < charOffset && lineInfo->lastQueryCharOffset > result.lineStartOffset) { nextChar = string + lineInfo->lastQueryCharOffset; result.tabs = lineInfo->lastQueryTabs; } // Count tabs from the beginning of the line to locus. while(nextChar < string + charOffset) { result.tabs += *nextChar == '\t' ? 1 : 0; ++nextChar; } // Derive the number of non-tab characters from the offset within the line and the number of // tabs preceding this locus in the line. result.characters = U32(charOffset - result.lineStartOffset - result.tabs); lineInfo->lastQueryCharOffset = charOffset; lineInfo->lastQueryTabs = result.tabs; return result; } ================================================ FILE: Lib/WASTParse/Lexer.h ================================================ #pragma once #include "WAVM/IR/Operators.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Platform/Defines.h" #include "WAVM/WASTParse/WASTParse.h" #define VISIT_OPERATOR_TOKEN(opcode, name, nameString, ...) \ VISIT_TOKEN(name, "'" #nameString "'", #nameString) #define VISIT_LITERAL_TOKEN(name) VISIT_TOKEN(name, "'" #name "'", #name) #define ENUM_LITERAL_TOKENS() \ VISIT_LITERAL_TOKEN(module) \ VISIT_LITERAL_TOKEN(func) \ VISIT_LITERAL_TOKEN(type) \ VISIT_LITERAL_TOKEN(table) \ VISIT_LITERAL_TOKEN(export) \ VISIT_LITERAL_TOKEN(import) \ VISIT_LITERAL_TOKEN(memory) \ VISIT_LITERAL_TOKEN(data) \ VISIT_LITERAL_TOKEN(elem) \ VISIT_LITERAL_TOKEN(start) \ VISIT_LITERAL_TOKEN(param) \ VISIT_LITERAL_TOKEN(result) \ VISIT_LITERAL_TOKEN(local) \ VISIT_LITERAL_TOKEN(global) \ VISIT_LITERAL_TOKEN(assert_return) \ VISIT_LITERAL_TOKEN(assert_return_arithmetic_nan) \ VISIT_LITERAL_TOKEN(assert_return_canonical_nan) \ VISIT_LITERAL_TOKEN(assert_return_arithmetic_nan_f32x4) \ VISIT_LITERAL_TOKEN(assert_return_canonical_nan_f32x4) \ VISIT_LITERAL_TOKEN(assert_return_arithmetic_nan_f64x2) \ VISIT_LITERAL_TOKEN(assert_return_canonical_nan_f64x2) \ VISIT_LITERAL_TOKEN(assert_return_func) \ VISIT_LITERAL_TOKEN(assert_trap) \ VISIT_LITERAL_TOKEN(assert_throws) \ VISIT_LITERAL_TOKEN(assert_invalid) \ VISIT_LITERAL_TOKEN(assert_unlinkable) \ VISIT_LITERAL_TOKEN(assert_malformed) \ VISIT_LITERAL_TOKEN(assert_exhaustion) \ VISIT_LITERAL_TOKEN(thread) \ VISIT_LITERAL_TOKEN(wait) \ VISIT_LITERAL_TOKEN(either) \ VISIT_LITERAL_TOKEN(invoke) \ VISIT_LITERAL_TOKEN(get) \ VISIT_LITERAL_TOKEN(align) \ VISIT_LITERAL_TOKEN(offset) \ VISIT_LITERAL_TOKEN(item) \ VISIT_LITERAL_TOKEN(then) \ VISIT_LITERAL_TOKEN(register) \ VISIT_LITERAL_TOKEN(mut) \ VISIT_LITERAL_TOKEN(i32) \ VISIT_LITERAL_TOKEN(i64) \ VISIT_LITERAL_TOKEN(f32) \ VISIT_LITERAL_TOKEN(f64) \ VISIT_LITERAL_TOKEN(i8x16) \ VISIT_LITERAL_TOKEN(i16x8) \ VISIT_LITERAL_TOKEN(i32x4) \ VISIT_LITERAL_TOKEN(i64x2) \ VISIT_LITERAL_TOKEN(f32x4) \ VISIT_LITERAL_TOKEN(f64x2) \ VISIT_LITERAL_TOKEN(externref) \ VISIT_LITERAL_TOKEN(funcref) \ VISIT_LITERAL_TOKEN(extern) \ VISIT_LITERAL_TOKEN(declare) \ VISIT_LITERAL_TOKEN(shared) \ VISIT_LITERAL_TOKEN(quote) \ VISIT_LITERAL_TOKEN(binary) \ VISIT_LITERAL_TOKEN(v128) \ VISIT_LITERAL_TOKEN(exception_type) \ VISIT_LITERAL_TOKEN(custom_section) \ VISIT_LITERAL_TOKEN(after) \ VISIT_LITERAL_TOKEN(before) \ VISIT_LITERAL_TOKEN(data_count) \ VISIT_LITERAL_TOKEN(code) \ VISIT_LITERAL_TOKEN(calling_conv) \ VISIT_LITERAL_TOKEN(intrinsic) \ VISIT_LITERAL_TOKEN(intrinsic_with_context_switch) \ VISIT_LITERAL_TOKEN(c) \ VISIT_LITERAL_TOKEN(c_api_callback) \ VISIT_TOKEN(ref_extern, "'ref.extern'", "ref.extern") #define ENUM_TOKENS() \ VISIT_TOKEN(eof, "eof", _) \ \ VISIT_TOKEN(unterminatedComment, "unterminated comment", _) \ VISIT_TOKEN(unrecognized, "unrecognized token", _) \ VISIT_TOKEN(legacyInstructionName, "legacy operator name", _) \ \ VISIT_TOKEN(decimalFloat, "decimal float literal", _) \ VISIT_TOKEN(decimalInt, "decimal int literal", _) \ VISIT_TOKEN(hexFloat, "hexadecimal float literal", _) \ VISIT_TOKEN(hexInt, "hexadecimal int literal", _) \ VISIT_TOKEN(floatNaN, "float NaN literal", _) \ VISIT_TOKEN(floatInf, "float infinity literal", _) \ VISIT_TOKEN(canonicalNaN, "float canonical NaN literal", _) \ VISIT_TOKEN(arithmeticNaN, "float arithmetic NaN literal", _) \ VISIT_TOKEN(string, "string literal", _) \ VISIT_TOKEN(name, "name literal", _) \ VISIT_TOKEN(quotedName, "quoted name literal", _) \ \ VISIT_TOKEN(leftParenthesis, "'('", _) \ VISIT_TOKEN(rightParenthesis, "')'", _) \ VISIT_TOKEN(equals, "'='", _) \ \ ENUM_LITERAL_TOKENS() \ \ WAVM_ENUM_OPERATORS(VISIT_OPERATOR_TOKEN) namespace WAVM { namespace WAST { typedef U16 TokenType; enum : U16 { #define VISIT_TOKEN(name, description, _) t_##name, ENUM_TOKENS() #undef VISIT_TOKEN }; WAVM_PACKED_STRUCT(struct Token { TokenType type; U32 begin; }); struct LineInfo; // Lexes a string and returns an array of tokens. // Also returns a pointer in outLineInfo to the information necessary to resolve line/column // numbers for the tokens. The caller should pass the tokens and line info to // freeTokens/freeLineInfo, respectively, when it is done with them. Token* lex(const char* string, Uptr stringLength, LineInfo*& outLineInfo, bool allowLegacyInstructionNames); void freeTokens(Token* tokens); void freeLineInfo(LineInfo* lineInfo); const char* describeToken(TokenType tokenType); TextFileLocus calcLocusFromOffset(const char* string, const LineInfo* lineInfo, Uptr charOffset); }} ================================================ FILE: Lib/WASTParse/Parse.cpp ================================================ #include "Parse.h" #include #include #include #include #include #include #include #include #include "Lexer.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/IsNameChar.h" #include "WAVM/Inline/Unicode.h" #include "WAVM/Logging/Logging.h" #include "WAVM/WASTParse/WASTParse.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::WAST; void WAST::findClosingParenthesis(CursorState* cursor, const Token* openingParenthesisToken) { // Skip over tokens until the ')' closing the current parentheses nesting depth is found. Uptr depth = 1; while(depth > 0) { switch(cursor->nextToken->type) { default: ++cursor->nextToken; break; case t_leftParenthesis: ++cursor->nextToken; ++depth; break; case t_rightParenthesis: ++cursor->nextToken; --depth; break; case t_eof: parseErrorf(cursor->parseState, openingParenthesisToken, "reached end of input while trying to find closing parenthesis"); throw FatalParseException(); } } } static void parseErrorfImpl(ParseState* parseState, Uptr charOffset, const char* messageFormat, va_list messageArgs) { // Call vsnprintf to determine how many bytes the formatted string will be. // vsnprintf consumes the va_list passed to it, so make a copy of it. va_list messageArgsProbe; va_copy(messageArgsProbe, messageArgs); int numFormattedChars = std::vsnprintf(nullptr, 0, messageFormat, messageArgsProbe); va_end(messageArgsProbe); // Allocate a buffer for the formatted message. WAVM_ERROR_UNLESS(numFormattedChars >= 0); std::string formattedMessage; formattedMessage.resize(numFormattedChars); // Print the formatted message int numWrittenChars = std::vsnprintf( (char*)formattedMessage.data(), numFormattedChars + 1, messageFormat, messageArgs); WAVM_ASSERT(numWrittenChars == numFormattedChars); // Add the error to the cursor's error list. parseState->unresolvedErrors.emplace_back(charOffset, std::move(formattedMessage)); } void WAST::parseErrorf(ParseState* parseState, Uptr charOffset, const char* messageFormat, ...) { va_list messageArguments; va_start(messageArguments, messageFormat); parseErrorfImpl(parseState, charOffset, messageFormat, messageArguments); va_end(messageArguments); } void WAST::parseErrorf(ParseState* parseState, const char* nextChar, const char* messageFormat, ...) { va_list messageArguments; va_start(messageArguments, messageFormat); parseErrorfImpl(parseState, nextChar - parseState->string, messageFormat, messageArguments); va_end(messageArguments); } void WAST::parseErrorf(ParseState* parseState, const Token* nextToken, const char* messageFormat, ...) { va_list messageArguments; va_start(messageArguments, messageFormat); parseErrorfImpl(parseState, nextToken->begin, messageFormat, messageArguments); va_end(messageArguments); } void WAST::require(CursorState* cursor, TokenType type) { if(cursor->nextToken->type != type) { parseErrorf(cursor->parseState, cursor->nextToken, "expected %s", describeToken(type)); throw RecoverParseException(); } ++cursor->nextToken; } bool WAST::tryParseValueType(CursorState* cursor, ValueType& outValueType) { switch(cursor->nextToken->type) { case t_i32: outValueType = ValueType::i32; break; case t_i64: outValueType = ValueType::i64; break; case t_f32: outValueType = ValueType::f32; break; case t_f64: outValueType = ValueType::f64; break; case t_v128: outValueType = ValueType::v128; break; case t_externref: outValueType = ValueType::externref; break; case t_funcref: outValueType = ValueType::funcref; break; default: outValueType = ValueType::none; return false; }; ++cursor->nextToken; return true; } ValueType WAST::parseValueType(CursorState* cursor) { ValueType result; if(!tryParseValueType(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected value type"); throw RecoverParseException(); } return result; } bool WAST::tryParseReferenceType(CursorState* cursor, IR::ReferenceType& outRefType) { switch(cursor->nextToken->type) { case t_externref: ++cursor->nextToken; outRefType = ReferenceType::externref; return true; case t_funcref: ++cursor->nextToken; outRefType = ReferenceType::funcref; return true; default: return false; }; } ReferenceType WAST::parseReferenceType(CursorState* cursor) { ReferenceType result; if(!tryParseReferenceType(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected reference type"); throw RecoverParseException(); } return result; } static bool tryParseReferencedType(CursorState* cursor, IR::ReferenceType& outRefType) { switch(cursor->nextToken->type) { case t_extern: ++cursor->nextToken; outRefType = ReferenceType::externref; return true; case t_func: ++cursor->nextToken; outRefType = ReferenceType::funcref; return true; default: return false; }; } ReferenceType WAST::parseReferencedType(CursorState* cursor) { ReferenceType result; if(!tryParseReferencedType(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected 'func' or 'extern'"); throw RecoverParseException(); } return result; } FunctionType WAST::parseFunctionType(CursorState* cursor, NameToIndexMap& outLocalNameToIndexMap, std::vector& outLocalDisassemblyNames) { std::vector parameters; std::vector results; CallingConvention callingConvention = CallingConvention::wasm; // Parse the function parameters. while(tryParseParenthesizedTagged(cursor, t_param, [&] { Name parameterName; if(tryParseName(cursor, parameterName)) { // (param ) bindName(cursor->parseState, outLocalNameToIndexMap, parameterName, parameters.size()); parameters.push_back(parseValueType(cursor)); outLocalDisassemblyNames.push_back(parameterName.getString()); } else { // (param *) ValueType parameterType; while(tryParseValueType(cursor, parameterType)) { parameters.push_back(parameterType); outLocalDisassemblyNames.emplace_back(); }; } })) { }; // Parse the result types: (result *)* while(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_result) { parseParenthesized(cursor, [&] { require(cursor, t_result); ValueType result; while(tryParseValueType(cursor, result)) { results.push_back(result); }; }); }; // Parse an optional calling convention. if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_calling_conv) { parseParenthesized(cursor, [&] { require(cursor, t_calling_conv); switch(cursor->nextToken->type) { case t_intrinsic: callingConvention = CallingConvention::intrinsic; break; case t_intrinsic_with_context_switch: callingConvention = CallingConvention::intrinsicWithContextSwitch; break; case t_c: callingConvention = CallingConvention::c; break; case t_c_api_callback: callingConvention = CallingConvention::cAPICallback; break; default: parseErrorf(cursor->parseState, cursor->nextToken, "expected calling convention"); throw RecoverParseException(); }; ++cursor->nextToken; }); } return FunctionType(TypeTuple(results), TypeTuple(parameters), callingConvention); } UnresolvedFunctionType WAST::parseFunctionTypeRefAndOrDecl( CursorState* cursor, NameToIndexMap& outLocalNameToIndexMap, std::vector& outLocalDisassemblyNames) { // Parse an optional function type reference. Reference functionTypeRef; if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_type) { parseParenthesized(cursor, [&] { require(cursor, t_type); if(!tryParseNameOrIndexRef(cursor, functionTypeRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected type name or index"); throw RecoverParseException(); } }); } // Parse the explicit function parameters and result type. FunctionType explicitFunctionType = parseFunctionType(cursor, outLocalNameToIndexMap, outLocalDisassemblyNames); UnresolvedFunctionType result; result.reference = functionTypeRef; result.explicitType = explicitFunctionType; return result; } IndexedFunctionType WAST::resolveFunctionType(ModuleState* moduleState, const UnresolvedFunctionType& unresolvedType) { if(!unresolvedType.reference) { return getUniqueFunctionTypeIndex(moduleState, unresolvedType.explicitType); } else { // Resolve the referenced type. const Uptr referencedFunctionTypeIndex = resolveRef(moduleState->parseState, moduleState->typeNameToIndexMap, moduleState->module.types.size(), unresolvedType.reference); // Validate that if the function definition has both a type reference and explicit // parameter/result type declarations, they match. const bool hasExplicitParametersOrResultType = unresolvedType.explicitType != FunctionType(); if(hasExplicitParametersOrResultType) { if(referencedFunctionTypeIndex != UINTPTR_MAX && moduleState->module.types[referencedFunctionTypeIndex] != unresolvedType.explicitType) { parseErrorf( moduleState->parseState, unresolvedType.reference.token, "referenced function type (%s) does not match declared parameters and " "results (%s)", asString(moduleState->module.types[referencedFunctionTypeIndex]).c_str(), asString(unresolvedType.explicitType).c_str()); } } return {referencedFunctionTypeIndex}; } } IndexedFunctionType WAST::getUniqueFunctionTypeIndex(ModuleState* moduleState, FunctionType functionType) { // If this type is not in the module's type table yet, add it. Uptr& functionTypeIndex = moduleState->functionTypeToIndexMap.getOrAdd(functionType, UINTPTR_MAX); if(functionTypeIndex == UINTPTR_MAX) { functionTypeIndex = moduleState->module.types.size(); moduleState->module.types.push_back(functionType); moduleState->disassemblyNames.types.emplace_back(); } return IndexedFunctionType{functionTypeIndex}; } static void parseStringChars(const char*& nextChar, ParseState* parseState, std::string& outString); bool WAST::tryParseName(CursorState* cursor, Name& outName) { if(cursor->nextToken->type != t_quotedName && cursor->nextToken->type != t_name) { return false; } const char* firstChar = cursor->parseState->string + cursor->nextToken->begin; const char* nextChar = firstChar; WAVM_ASSERT(*nextChar == '$'); ++nextChar; if(cursor->nextToken->type == t_quotedName) { if(!cursor->moduleState->module.featureSpec.quotedNamesInTextFormat) { parseErrorf(cursor->parseState, cursor->nextToken, "quoted names are disabled"); } WAVM_ASSERT(*nextChar == '\"'); ++nextChar; { std::string quotedNameChars; parseStringChars(nextChar, cursor->parseState, quotedNameChars); if(quotedNameChars.size() == 0) { parseErrorf( cursor->parseState, cursor->nextToken, "quoted names must not be empty"); outName = Name(); } else { cursor->parseState->quotedNameStrings.push_back( std::unique_ptr{new std::string(std::move(quotedNameChars))}); const std::unique_ptr& quotedName = cursor->parseState->quotedNameStrings.back(); WAVM_ASSERT(quotedName->size() <= UINT32_MAX); outName = Name(quotedName->data(), U32(quotedName->size()), cursor->nextToken->begin); } } } else { // Find the first non-name character. while(true) { const char c = *nextChar; if(isNameChar(c)) { ++nextChar; } else { break; } }; outName = Name(firstChar + 1, U32(nextChar - firstChar - 1), cursor->nextToken->begin); } WAVM_ASSERT(U32(nextChar - cursor->parseState->string) > cursor->nextToken->begin + 1); ++cursor->nextToken; WAVM_ASSERT(U32(nextChar - cursor->parseState->string) <= cursor->nextToken->begin); WAVM_ASSERT(U32(nextChar - firstChar) <= UINT32_MAX); return true; } bool WAST::tryParseNameOrIndexRef(CursorState* cursor, Reference& outRef) { outRef.token = cursor->nextToken; if(tryParseName(cursor, outRef.name)) { outRef.type = Reference::Type::name; return true; } else if(tryParseUptr(cursor, outRef.index)) { outRef.type = Reference::Type::index; return true; } return false; } bool WAST::tryParseAndResolveNameOrIndexRef(CursorState* cursor, const NameToIndexMap& nameToIndexMap, Uptr maxIndex, const char* context, Uptr& outIndex) { Reference ref; if(!tryParseNameOrIndexRef(cursor, ref)) { return false; } outIndex = resolveRef(cursor->parseState, nameToIndexMap, maxIndex, ref); return true; } Name WAST::parseName(CursorState* cursor, const char* context) { Name result; if(!tryParseName(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected %s name", context); throw RecoverParseException(); } return result; } Reference WAST::parseNameOrIndexRef(CursorState* cursor, const char* context) { Reference result; if(!tryParseNameOrIndexRef(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected %s name or index", context); throw RecoverParseException(); } return result; } Uptr WAST::parseAndResolveNameOrIndexRef(CursorState* cursor, const NameToIndexMap& nameToIndexMap, Uptr maxIndex, const char* context) { Uptr resolvedIndex; if(!tryParseAndResolveNameOrIndexRef(cursor, nameToIndexMap, maxIndex, context, resolvedIndex)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected %s name or index", context); throw RecoverParseException(); } return resolvedIndex; } void WAST::bindName(ParseState* parseState, NameToIndexMap& nameToIndexMap, const Name& name, Uptr index) { if(name) { if(!nameToIndexMap.add(name, index)) { const HashMapPair* nameIndexPair = nameToIndexMap.getPair(name); WAVM_ASSERT(nameIndexPair); const TextFileLocus previousDefinitionLocus = calcLocusFromOffset( parseState->string, parseState->lineInfo, nameIndexPair->key.getSourceOffset()); parseErrorf(parseState, name.getSourceOffset(), "redefinition of name defined at %s", previousDefinitionLocus.describe().c_str()); nameToIndexMap.set(name, index); } } } Uptr WAST::resolveRef(ParseState* parseState, const NameToIndexMap& nameToIndexMap, Uptr maxIndex, const Reference& ref) { switch(ref.type) { case Reference::Type::index: { if(ref.index >= maxIndex) { parseErrorf(parseState, ref.token, "validation error: invalid index"); return UINTPTR_MAX; } return ref.index; } case Reference::Type::name: { const HashMapPair* nameIndexPair = nameToIndexMap.getPair(ref.name); if(!nameIndexPair) { parseErrorf(parseState, ref.token, "unknown name"); return UINTPTR_MAX; } else { return nameIndexPair->value; } } case Reference::Type::invalid: default: WAVM_UNREACHABLE(); }; } Uptr WAST::resolveExternRef(ModuleState* moduleState, ExternKind externKind, const Reference& ref) { switch(externKind) { case ExternKind::function: return resolveRef(moduleState->parseState, moduleState->functionNameToIndexMap, moduleState->module.functions.size(), ref); case ExternKind::table: return resolveRef(moduleState->parseState, moduleState->tableNameToIndexMap, moduleState->module.tables.size(), ref); case ExternKind::memory: return resolveRef(moduleState->parseState, moduleState->memoryNameToIndexMap, moduleState->module.memories.size(), ref); case ExternKind::global: return resolveRef(moduleState->parseState, moduleState->globalNameToIndexMap, moduleState->module.globals.size(), ref); case ExternKind::exceptionType: return resolveRef(moduleState->parseState, moduleState->exceptionTypeNameToIndexMap, moduleState->module.exceptionTypes.size(), ref); case ExternKind::invalid: default: WAVM_UNREACHABLE(); } } bool WAST::tryParseHexit(const char*& nextChar, U8& outValue) { if(*nextChar >= '0' && *nextChar <= '9') { outValue = *nextChar - '0'; } else if(*nextChar >= 'a' && *nextChar <= 'f') { outValue = *nextChar - 'a' + 10; } else if(*nextChar >= 'A' && *nextChar <= 'F') { outValue = *nextChar - 'A' + 10; } else { outValue = 0; return false; } ++nextChar; return true; } static void parseCharEscapeCode(const char*& nextChar, ParseState* parseState, std::string& outString) { U8 firstNibble; if(tryParseHexit(nextChar, firstNibble)) { // Parse an 8-bit literal from two hexits. U8 secondNibble; if(!tryParseHexit(nextChar, secondNibble)) { parseErrorf(parseState, nextChar, "expected hexit"); } outString += char(firstNibble * 16 + secondNibble); } else { switch(*nextChar) { case 't': outString += '\t'; ++nextChar; break; case 'n': outString += '\n'; ++nextChar; break; case 'r': outString += '\r'; ++nextChar; break; case '\"': outString += '\"'; ++nextChar; break; case '\'': outString += '\''; ++nextChar; break; case '\\': outString += '\\'; ++nextChar; break; case 'u': { // \u{...} - Unicode codepoint from hexadecimal number if(nextChar[1] != '{') { parseErrorf(parseState, nextChar, "expected '{'"); } nextChar += 2; // Parse the hexadecimal number. const char* firstHexit = nextChar; U32 codepoint = 0; U8 hexit = 0; while(tryParseHexit(nextChar, hexit)) { if(codepoint > (UINT32_MAX - hexit) / 16) { codepoint = UINT32_MAX; while(tryParseHexit(nextChar, hexit)) {}; break; } WAVM_ASSERT(codepoint * 16 + hexit >= codepoint); codepoint = codepoint * 16 + hexit; } // Check that it denotes a valid Unicode codepoint. if((codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint >= 0x110000) { parseErrorf(parseState, firstHexit, "invalid Unicode codepoint"); codepoint = 0x1F642; } // Encode the codepoint as UTF-8. Unicode::encodeUTF8CodePoint(codepoint, outString); if(*nextChar != '}') { parseErrorf(parseState, nextChar, "expected '}'"); } ++nextChar; break; } default: outString += '\\'; ++nextChar; parseErrorf(parseState, nextChar, "invalid escape code"); break; } } } static void parseStringChars(const char*& nextChar, ParseState* parseState, std::string& outString) { while(true) { switch(*nextChar) { case '\\': { ++nextChar; parseCharEscapeCode(nextChar, parseState, outString); break; } case '\"': return; default: outString += *nextChar++; break; }; }; } bool WAST::tryParseString(CursorState* cursor, std::string& outString) { if(cursor->nextToken->type != t_string) { return false; } // Parse a string literal; the lexer has already rejected unterminated strings, so this just // needs to copy the characters and evaluate escape codes. const char* nextChar = cursor->parseState->string + cursor->nextToken->begin; WAVM_ASSERT(*nextChar == '\"'); ++nextChar; parseStringChars(nextChar, cursor->parseState, outString); ++cursor->nextToken; WAVM_ASSERT(cursor->parseState->string + cursor->nextToken->begin > nextChar); return true; } std::string WAST::parseUTF8String(CursorState* cursor) { const Token* stringToken = cursor->nextToken; std::string result; if(!tryParseString(cursor, result)) { parseErrorf(cursor->parseState, stringToken, "expected string literal"); throw RecoverParseException(); } // Check that the string is a valid UTF-8 encoding. const U8* endChar = (const U8*)result.data() + result.size(); const U8* nextChar = Unicode::validateUTF8String((const U8*)result.data(), endChar); if(nextChar != endChar) { const Uptr charOffset = stringToken->begin + (nextChar - (const U8*)result.data()) + 1; parseErrorf(cursor->parseState, charOffset, "invalid UTF-8 encoding"); } return result; } void WAST::reportParseErrors(const char* filename, const char* source, const std::vector& parseErrors, Log::Category outputCategory) { // Print any parse errors. for(auto& error : parseErrors) { Log::printf(outputCategory, "%s:%s: %s\n%.*s\n%*s\n", filename, error.locus.describe().c_str(), error.message.c_str(), int(error.locus.lineEndOffset - error.locus.lineStartOffset), source + error.locus.lineStartOffset, error.locus.column(8), "^"); } } ================================================ FILE: Lib/WASTParse/Parse.h ================================================ #pragma once #include #include #include #include #include #include "Lexer.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Platform/Defines.h" #include "WAVM/WASTParse/WASTParse.h" namespace WAVM { namespace WAST { struct FatalParseException { }; struct RecoverParseException { }; // Like WAST::Error, but only has an offset in the input string instead of a full // TextFileLocus. struct UnresolvedError { Uptr charOffset; std::string message; UnresolvedError(Uptr inCharOffset, std::string&& inMessage) : charOffset(inCharOffset), message(inMessage) { } }; struct ParseState { const char* string; const LineInfo* lineInfo; std::vector unresolvedErrors; std::vector> quotedNameStrings; ParseState(const char* inString, const LineInfo* inLineInfo) : string(inString), lineInfo(inLineInfo) { } }; // Encapsulates a name ($whatever) parsed from the WAST file. // References the characters in the input string the name was parsed from, // so it can handle arbitrary length names in a fixed size struct, but only // as long as the input string isn't freed. // Includes a hash of the name's characters. struct Name { constexpr Name() : begin(nullptr), numChars(0), sourceOffset(0) {} Name(const char* inBegin, U32 inNumChars, U32 inSourceOffset) : begin(inBegin), numChars(inNumChars), sourceOffset(inSourceOffset) { WAVM_ASSERT(inNumChars > 0); } constexpr operator bool() const { return begin != nullptr; } std::string getString() const { return begin ? std::string(begin, numChars) : std::string(); } constexpr Uptr getSourceOffset() const { return sourceOffset; } Uptr getHash() const { return XXH(begin, numChars, 0); } void reset() { begin = nullptr; numChars = 0; } friend constexpr bool operator==(const Name& a, const Name& b) { return a.numChars == b.numChars && (a.numChars == 0 || memcmp(a.begin, b.begin, a.numChars) == 0); } friend constexpr bool operator!=(const Name& a, const Name& b) { return !(a == b); } struct HashPolicy { static bool areKeysEqual(const Name& left, const Name& right) { return left == right; } static Uptr getKeyHash(const Name& name) { return name.getHash(); } }; private: const char* begin; U32 numChars; U32 sourceOffset; }; // A map from Name to index using a hash table. typedef HashMap NameToIndexMap; // Represents a yet-to-be-resolved reference, parsed as either a name or an index. struct Reference { enum class Type { invalid, name, index }; Type type; union { Name name; Uptr index; }; const Token* token; Reference(const Name& inName) : type(Type::name), name(inName) {} Reference(Uptr inIndex) : type(Type::index), index(inIndex) {} Reference() : type(Type::invalid), token(nullptr) {} operator bool() const { return type != Type::invalid; } }; // Represents a function type, either as an unresolved name/index, or as an explicit type, or // both. struct UnresolvedFunctionType { Reference reference; IR::FunctionType explicitType; }; // State associated with parsing a module. struct ModuleState { ParseState* parseState; IR::Module& module; std::shared_ptr validationState; HashMap functionTypeToIndexMap; NameToIndexMap typeNameToIndexMap; NameToIndexMap functionNameToIndexMap; NameToIndexMap tableNameToIndexMap; NameToIndexMap memoryNameToIndexMap; NameToIndexMap globalNameToIndexMap; NameToIndexMap exceptionTypeNameToIndexMap; NameToIndexMap elemNameToIndexMap; NameToIndexMap dataNameToIndexMap; IR::DisassemblyNames disassemblyNames; const Token* startFieldToken{nullptr}; const Token* lastCustomSectionToken{nullptr}; // Thunks that are called after parsing all types. std::vector> postTypeCallbacks; // Thunks that are called after parsing all declarations. std::vector> postDeclarationCallbacks; // Thunks that are called to parse function bodies. std::vector> functionBodyCallbacks; ModuleState(ParseState* inParseState, IR::Module& inModule) : parseState(inParseState) , module(inModule) , validationState(IR::createModuleValidationState(inModule)) { } }; // The state that's threaded through the various parsers. struct CursorState { const Token* nextToken; ParseState* parseState; ModuleState* moduleState; struct FunctionState* functionState; CursorState(const Token* inNextToken, ParseState* inParseState, ModuleState* inModuleState = nullptr, struct FunctionState* inFunctionState = nullptr) : nextToken(inNextToken) , parseState(inParseState) , moduleState(inModuleState) , functionState(inFunctionState) { } }; // Error handling. void parseErrorf(ParseState* parseState, Uptr charOffset, const char* messageFormat, ...) WAVM_VALIDATE_AS_PRINTF(3, 4); void parseErrorf(ParseState* parseState, const char* nextChar, const char* messageFormat, ...) WAVM_VALIDATE_AS_PRINTF(3, 4); void parseErrorf(ParseState* parseState, const Token* nextToken, const char* messageFormat, ...) WAVM_VALIDATE_AS_PRINTF(3, 4); void require(CursorState* cursor, TokenType type); // Type parsing and uniqueing bool tryParseValueType(CursorState* cursor, IR::ValueType& outValueType); IR::ValueType parseValueType(CursorState* cursor); bool tryParseReferenceType(CursorState* cursor, IR::ReferenceType& outRefType); IR::ReferenceType parseReferenceType(CursorState* cursor); IR::ReferenceType parseReferencedType(CursorState* cursor); IR::FunctionType parseFunctionType(CursorState* cursor, NameToIndexMap& outLocalNameToIndexMap, std::vector& outLocalDisassemblyNames); UnresolvedFunctionType parseFunctionTypeRefAndOrDecl( CursorState* cursor, NameToIndexMap& outLocalNameToIndexMap, std::vector& outLocalDisassemblyNames); IR::IndexedFunctionType resolveFunctionType(ModuleState* moduleState, const UnresolvedFunctionType& unresolvedType); IR::IndexedFunctionType getUniqueFunctionTypeIndex(ModuleState* moduleState, IR::FunctionType functionType); // Literal parsing. bool tryParseHexit(const char*& nextChar, U8& outValue); bool tryParseU64(CursorState* cursor, U64& outI64); bool tryParseUptr(CursorState* cursor, Uptr& outUptr); U8 parseU8(CursorState* cursor, bool allowSign = true); U32 parseU32(CursorState* cursor); U64 parseU64(CursorState* cursor); // Uninterpreted integers: may be anywhere in the range INT_MIN to UINT_MAX. I8 parseI8(CursorState* cursor); I16 parseI16(CursorState* cursor); I32 parseI32(CursorState* cursor); I64 parseI64(CursorState* cursor); F32 parseF32(CursorState* cursor); F64 parseF64(CursorState* cursor); template Float parseFloat(CursorState* cursor); template<> inline F32 parseFloat(CursorState* cursor) { return parseF32(cursor); } template<> inline F64 parseFloat(CursorState* cursor) { return parseF64(cursor); } V128 parseV128(CursorState* cursor); bool tryParseString(CursorState* cursor, std::string& outString); std::string parseUTF8String(CursorState* cursor); // Name parsing and resolution. bool tryParseName(CursorState* cursor, Name& outName); bool tryParseNameOrIndexRef(CursorState* cursor, Reference& outRef); bool tryParseAndResolveNameOrIndexRef(CursorState* cursor, const NameToIndexMap& nameToIndexMap, Uptr maxIndex, const char* context, Uptr& outIndex); Name parseName(CursorState* cursor, const char* context); Reference parseNameOrIndexRef(CursorState* cursor, const char* context); Uptr parseAndResolveNameOrIndexRef(CursorState* cursor, const NameToIndexMap& nameToIndexMap, Uptr maxIndex, const char* context); void bindName(ParseState* parseState, NameToIndexMap& nameToIndexMap, const Name& name, Uptr index); Uptr resolveRef(ParseState* parseState, const NameToIndexMap& nameToIndexMap, Uptr maxIndex, const Reference& ref); Uptr resolveExternRef(ModuleState* moduleState, IR::ExternKind externKind, const Reference& ref); // Finds the parenthesis closing the current s-expression. void findClosingParenthesis(CursorState* cursor, const Token* openingParenthesisToken); // Parses the surrounding parentheses for an inner parser, and handles recovery at the closing // parenthesis. template static void parseParenthesized(CursorState* cursor, ParseInner parseInner) { const Token* openingParenthesisToken = cursor->nextToken; require(cursor, t_leftParenthesis); try { parseInner(); require(cursor, t_rightParenthesis); } catch(RecoverParseException const&) { findClosingParenthesis(cursor, openingParenthesisToken); } } // Tries to parse '(' tagType parseInner ')', handling recovery at the closing parenthesis. // Returns true if any tokens were consumed. template static bool tryParseParenthesizedTagged(CursorState* cursor, TokenType tagType, ParseInner parseInner) { const Token* openingParenthesisToken = cursor->nextToken; if(cursor->nextToken[0].type != t_leftParenthesis || cursor->nextToken[1].type != tagType) { return false; } try { cursor->nextToken += 2; parseInner(); require(cursor, t_rightParenthesis); } catch(RecoverParseException const&) { findClosingParenthesis(cursor, openingParenthesisToken); } return true; } // Function parsing. IR::FunctionDef parseFunctionDef(CursorState* cursor, const Token* funcToken); // Module parsing. void parseModuleBody(CursorState* cursor, IR::Module& outModule); }} ================================================ FILE: Lib/WASTParse/ParseFunction.cpp ================================================ #include #include #include #include #include #include "Lexer.h" #include "Parse.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Intrinsic.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::WAST; namespace WAVM { namespace WAST { template struct ResumableCodeValidationProxyStream { const Token* validationErrorToken{nullptr}; ResumableCodeValidationProxyStream(ModuleState* moduleState, const FunctionDef& function, InnerStream& inInnerStream) : codeValidationStream(*moduleState->validationState, function) , innerStream(inInnerStream) , parseState(moduleState->parseState) { } #define VISIT_OPERATOR(name, Imm, isControlOp) \ void name(Imm imm = {}) \ { \ try \ { \ codeValidationStream.name(imm); \ innerStream.name(imm); \ } \ catch(ValidationException const& exception) \ { \ try \ { \ codeValidationStream.unreachable(); \ innerStream.unreachable(); \ } \ catch(ValidationException const&) \ { \ /* If a second validation exception occurs trying to emit unreachable, just */ \ /* throw the original exception up to the top level. */ \ throw exception; \ } \ parseErrorf(parseState, \ validationErrorToken, \ "validation error: %s", \ exception.message.c_str()); \ /* The validator won't have the correct control state after an invalid control */ \ /* operator, so just continue parsing at the next recovery point. */ \ if(isControlOp) { throw RecoverParseException(); } \ } \ } #define VISIT_CONTROL_OPERATOR(_1, name, _2, Imm, ...) VISIT_OPERATOR(name, Imm, true) #define VISIT_NONCONTROL_OPERATOR(_1, name, _2, Imm, ...) VISIT_OPERATOR(name, Imm, false) WAVM_ENUM_NONCONTROL_OPERATORS(VISIT_NONCONTROL_OPERATOR) WAVM_ENUM_CONTROL_OPERATORS(VISIT_CONTROL_OPERATOR) #undef VISIT_CONTROL_OPERATOR #undef VISIT_NONCONTROL_OPERATOR void finishValidation() { codeValidationStream.finish(); } private: CodeValidationStream codeValidationStream; InnerStream& innerStream; ParseState* parseState; }; // State associated with parsing a function. struct FunctionState { FunctionDef& functionDef; std::shared_ptr localNameToIndexMap; Uptr numLocals; NameToIndexMap branchTargetNameToIndexMap; Uptr branchTargetDepth; std::vector labelDisassemblyNames; Serialization::ArrayOutputStream codeByteStream; OperatorEncoderStream operationEncoder; ResumableCodeValidationProxyStream validatingCodeStream; FunctionState(const std::shared_ptr& inLocalNameToIndexMap, FunctionDef& inFunctionDef, ModuleState* moduleState) : functionDef(inFunctionDef) , localNameToIndexMap(inLocalNameToIndexMap) , numLocals(inFunctionDef.nonParameterLocalTypes.size() + moduleState->module.types[inFunctionDef.type.index].params().size()) , branchTargetDepth(0) , operationEncoder(codeByteStream) , validatingCodeStream(moduleState, inFunctionDef, operationEncoder) { } }; }} namespace { // While in scope, pushes a branch target onto the branch target stack. // Also maintains the branchTargetNameToIndexMap struct ScopedBranchTarget { ScopedBranchTarget(FunctionState* inFunctionState, Name inName) : functionState(inFunctionState), name(inName), previousBranchTargetIndex(UINTPTR_MAX) { branchTargetIndex = ++functionState->branchTargetDepth; if(name) { Uptr& mapValueRef = functionState->branchTargetNameToIndexMap.getOrAdd(name, UINTPTR_MAX); if(mapValueRef != UINTPTR_MAX) { // If the name was already bound to a branch target, remember the previously // bound branch target. previousBranchTargetIndex = mapValueRef; mapValueRef = branchTargetIndex; } else { mapValueRef = branchTargetIndex; } } } ~ScopedBranchTarget() { WAVM_ASSERT(branchTargetIndex == functionState->branchTargetDepth); --functionState->branchTargetDepth; if(name) { WAVM_ASSERT(functionState->branchTargetNameToIndexMap.contains(name)); WAVM_ASSERT(functionState->branchTargetNameToIndexMap[name] == branchTargetIndex); if(previousBranchTargetIndex == UINTPTR_MAX) { WAVM_ERROR_UNLESS(functionState->branchTargetNameToIndexMap.remove(name)); } else { functionState->branchTargetNameToIndexMap.set(name, previousBranchTargetIndex); } } } private: FunctionState* functionState; Name name; Uptr branchTargetIndex; Uptr previousBranchTargetIndex; }; } static bool tryParseAndResolveBranchTargetRef(CursorState* cursor, Uptr& outTargetDepth) { Reference branchTargetRef; if(tryParseNameOrIndexRef(cursor, branchTargetRef)) { switch(branchTargetRef.type) { case Reference::Type::index: outTargetDepth = branchTargetRef.index; break; case Reference::Type::name: { const HashMapPair* nameIndexPair = cursor->functionState->branchTargetNameToIndexMap.getPair(branchTargetRef.name); if(!nameIndexPair) { parseErrorf(cursor->parseState, branchTargetRef.token, "unknown name"); outTargetDepth = UINTPTR_MAX; } else { outTargetDepth = cursor->functionState->branchTargetDepth - nameIndexPair->value; } break; } case Reference::Type::invalid: default: WAVM_UNREACHABLE(); }; return true; } return false; } static void parseAndValidateRedundantBranchTargetName(CursorState* cursor, Name branchTargetName, const char* context, const char* redundantContext) { Name redundantName; if(tryParseName(cursor, redundantName) && branchTargetName != redundantName) { parseErrorf(cursor->parseState, cursor->nextToken - 1, "%s label doesn't match %s label", redundantContext, context); } } static void parseImm(CursorState* cursor, NoImm&) {} static void parseImm(CursorState* cursor, MemoryImm& outImm) { if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories.size(), "memory", outImm.memoryIndex)) { outImm.memoryIndex = 0; } } static void parseImm(CursorState* cursor, MemoryCopyImm& outImm) { if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories.size(), "memory", outImm.destMemoryIndex)) { outImm.destMemoryIndex = 0; } if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories.size(), "memory", outImm.sourceMemoryIndex)) { outImm.sourceMemoryIndex = outImm.destMemoryIndex; } } static void parseImm(CursorState* cursor, TableImm& outImm) { if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables.size(), "table", outImm.tableIndex)) { outImm.tableIndex = 0; } } static void parseImm(CursorState* cursor, TableCopyImm& outImm) { if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables.size(), "table", outImm.destTableIndex)) { outImm.destTableIndex = 0; } if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables.size(), "table", outImm.sourceTableIndex)) { outImm.sourceTableIndex = outImm.destTableIndex; } } static void parseImm(CursorState* cursor, SelectImm& outImm) { outImm.type = ValueType::any; const Token* firstResultToken = nullptr; while(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_result) { parseParenthesized(cursor, [&] { const Token* resultToken = cursor->nextToken; require(cursor, t_result); if(!firstResultToken) { firstResultToken = resultToken; } const Token* valueTypeToken = cursor->nextToken; ValueType result; while(tryParseValueType(cursor, result)) { if(outImm.type == ValueType::any) { outImm.type = result; } else { parseErrorf(cursor->parseState, valueTypeToken, "validation error: typed select must have exactly one result"); } }; }); }; if(firstResultToken && outImm.type == ValueType::any) { parseErrorf(cursor->parseState, firstResultToken, "validation error: typed select must have exactly one result"); } } static void parseImm(CursorState* cursor, LiteralImm& outImm) { outImm.value = parseI32(cursor); } static void parseImm(CursorState* cursor, LiteralImm& outImm) { outImm.value = parseI64(cursor); } static void parseImm(CursorState* cursor, LiteralImm& outImm) { outImm.value = parseF32(cursor); } static void parseImm(CursorState* cursor, LiteralImm& outImm) { outImm.value = parseF64(cursor); } static void parseImm(CursorState* cursor, BranchImm& outImm) { if(!tryParseAndResolveBranchTargetRef(cursor, outImm.targetDepth)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected branch target name or index"); throw RecoverParseException(); } } static void parseImm(CursorState* cursor, BranchTableImm& outImm) { std::vector targetDepths; Uptr targetDepth = 0; while(tryParseAndResolveBranchTargetRef(cursor, targetDepth)) { targetDepths.push_back(targetDepth); }; if(!targetDepths.size()) { parseErrorf(cursor->parseState, cursor->nextToken, "expected branch target name or index"); throw RecoverParseException(); } else { outImm.defaultTargetDepth = targetDepths.back(); targetDepths.pop_back(); outImm.branchTableIndex = cursor->functionState->functionDef.branchTables.size(); cursor->functionState->functionDef.branchTables.push_back(std::move(targetDepths)); } } template static void parseImm(CursorState* cursor, GetOrSetVariableImm& outImm) { outImm.variableIndex = parseAndResolveNameOrIndexRef( cursor, isGlobal ? cursor->moduleState->globalNameToIndexMap : *cursor->functionState->localNameToIndexMap, isGlobal ? cursor->moduleState->module.globals.size() : cursor->functionState->numLocals, isGlobal ? "global" : "local"); } static void parseImm(CursorState* cursor, FunctionImm& outImm) { outImm.functionIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->functionNameToIndexMap, cursor->moduleState->module.functions.size(), "function"); } static void parseImm(CursorState* cursor, FunctionRefImm& outImm) { outImm.functionIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->functionNameToIndexMap, cursor->moduleState->module.functions.size(), "function"); } static void parseImm(CursorState* cursor, CallIndirectImm& outImm) { if(cursor->nextToken->type == t_name || cursor->nextToken->type == t_quotedName || cursor->nextToken->type == t_decimalInt || cursor->nextToken->type == t_hexInt) { // Parse a table name or index. outImm.tableIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables.size(), "table"); } else { outImm.tableIndex = 0; } // Parse the callee type, as a reference or explicit declaration. const Token* firstTypeToken = cursor->nextToken; std::vector paramDisassemblyNames; NameToIndexMap paramNameToIndexMap; const UnresolvedFunctionType unresolvedFunctionType = parseFunctionTypeRefAndOrDecl(cursor, paramNameToIndexMap, paramDisassemblyNames); outImm.type.index = resolveFunctionType(cursor->moduleState, unresolvedFunctionType).index; // Disallow named parameters. if(paramNameToIndexMap.size()) { auto paramNameIt = paramNameToIndexMap.begin(); parseErrorf(cursor->parseState, firstTypeToken, "call_indirect callee type declaration may not declare parameter names ($%s)", paramNameIt->key.getString().c_str()); } } template static void parseImm(CursorState* cursor, LoadOrStoreImm& outImm) { if(!tryParseAndResolveNameOrIndexRef(cursor, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories.size(), "memory", outImm.memoryIndex)) { outImm.memoryIndex = 0; } outImm.offset = 0; if(cursor->nextToken->type == t_offset) { ++cursor->nextToken; require(cursor, t_equals); outImm.offset = cursor->moduleState->module.featureSpec.memory64 ? parseU64(cursor) : parseU32(cursor); } const U32 naturalAlignment = 1 << naturalAlignmentLog2; U32 alignment = naturalAlignment; if(cursor->nextToken->type == t_align) { ++cursor->nextToken; require(cursor, t_equals); const Token* alignmentToken = cursor->nextToken; alignment = parseU32(cursor); if(!alignment || alignment & (alignment - 1)) { parseErrorf(cursor->parseState, cursor->nextToken, "alignment must be power of 2"); } else if(alignment > naturalAlignment) { parseErrorf(cursor->parseState, alignmentToken, "validation error: alignment must be <= natural alignment"); alignment = naturalAlignment; } } outImm.alignmentLog2 = (U8)floorLogTwo(alignment); } static bool isIntLiteral(TokenType tokenType) { return tokenType == t_hexInt || tokenType == t_decimalInt; } template static void parseImm(CursorState* cursor, LoadOrStoreLaneImm& outImm) { // If the first immediate is a name, or an integer followed by another integer, alignment, or // offset, interpret it as a memory reference. if(cursor->nextToken->type == t_name || cursor->nextToken->type == t_quotedName || (isIntLiteral(cursor->nextToken->type) && (isIntLiteral(cursor->nextToken[1].type) || cursor->nextToken[1].type == t_offset || cursor->nextToken[1].type == t_align))) { outImm.memoryIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories.size(), "memory"); } else { outImm.memoryIndex = 0; } outImm.offset = 0; if(cursor->nextToken->type == t_offset) { ++cursor->nextToken; require(cursor, t_equals); outImm.offset = cursor->moduleState->module.featureSpec.memory64 ? parseU64(cursor) : parseU32(cursor); } const U32 naturalAlignment = 1 << naturalAlignmentLog2; U32 alignment = naturalAlignment; if(cursor->nextToken->type == t_align) { ++cursor->nextToken; require(cursor, t_equals); const Token* alignmentToken = cursor->nextToken; alignment = parseU32(cursor); if(!alignment || alignment & (alignment - 1)) { parseErrorf(cursor->parseState, cursor->nextToken, "alignment must be power of 2"); } else if(alignment > naturalAlignment) { parseErrorf(cursor->parseState, alignmentToken, "validation error: alignment must be <= natural alignment"); alignment = naturalAlignment; } } outImm.alignmentLog2 = (U8)floorLogTwo(alignment); U8 laneIndex = parseU8(cursor, false); if(Uptr(laneIndex) >= numLanes) { parseErrorf(cursor->parseState, cursor->nextToken - 1, "validation error: lane index must be in the range 0..%" WAVM_PRIuPTR, numLanes - 1); laneIndex = 0; } outImm.laneIndex = laneIndex; } static void parseImm(CursorState* cursor, LiteralImm& outImm) { outImm.value = parseV128(cursor); } template static void parseImm(CursorState* cursor, LaneIndexImm& outImm) { U8 laneIndex = parseU8(cursor, false); if(Uptr(laneIndex) >= numLanes) { parseErrorf(cursor->parseState, cursor->nextToken - 1, "validation error: lane index must be in the range 0..%" WAVM_PRIuPTR, numLanes - 1); laneIndex = 0; } outImm.laneIndex = laneIndex; } template static void parseImm(CursorState* cursor, ShuffleImm& outImm) { for(Uptr destLaneIndex = 0; destLaneIndex < numLanes; ++destLaneIndex) { U8 sourceLaneIndex = parseU8(cursor, false); if(Uptr(sourceLaneIndex) >= numLanes * 2) { parseErrorf(cursor->parseState, cursor->nextToken - 1, "validation error: lane index must be in the range 0..%" WAVM_PRIuPTR, numLanes * 2 - 1); sourceLaneIndex = 0; } outImm.laneIndices[destLaneIndex] = sourceLaneIndex; } } template static void parseImm(CursorState* cursor, AtomicLoadOrStoreImm& outImm) { LoadOrStoreImm loadOrStoreImm; parseImm(cursor, loadOrStoreImm); outImm.memoryIndex = loadOrStoreImm.memoryIndex; outImm.alignmentLog2 = loadOrStoreImm.alignmentLog2; outImm.offset = loadOrStoreImm.offset; } static void parseImm(CursorState* cursor, AtomicFenceImm& outImm) { outImm.order = MemoryOrder::sequentiallyConsistent; } static void parseImm(CursorState* cursor, ExceptionTypeImm& outImm) { outImm.exceptionTypeIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->exceptionTypeNameToIndexMap, cursor->moduleState->module.exceptionTypes.size(), "exception type"); } static void parseImm(CursorState* cursor, RethrowImm& outImm) { if(!tryParseAndResolveBranchTargetRef(cursor, outImm.catchDepth)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected try label or index"); throw RecoverParseException(); } } static void parseImm(CursorState* cursor, DataSegmentAndMemImm& outImm) { Reference firstRef; if(!tryParseNameOrIndexRef(cursor, firstRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected data segment name or index"); throw RecoverParseException(); } else { Reference secondRef; const bool hasSecondRef = tryParseNameOrIndexRef(cursor, secondRef); outImm.memoryIndex = hasSecondRef ? resolveRef(cursor->parseState, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories.size(), firstRef) : 0; outImm.dataSegmentIndex = resolveRef(cursor->parseState, cursor->moduleState->dataNameToIndexMap, cursor->moduleState->module.dataSegments.size(), hasSecondRef ? secondRef : firstRef); } } static void parseImm(CursorState* cursor, DataSegmentImm& outImm) { outImm.dataSegmentIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->dataNameToIndexMap, cursor->moduleState->module.dataSegments.size(), "data"); } static void parseImm(CursorState* cursor, ElemSegmentAndTableImm& outImm) { Reference firstRef; if(!tryParseNameOrIndexRef(cursor, firstRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected elem segment name or index"); throw RecoverParseException(); } else { Reference secondRef; const bool hasSecondRef = tryParseNameOrIndexRef(cursor, secondRef); outImm.tableIndex = hasSecondRef ? resolveRef(cursor->parseState, cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables.size(), firstRef) : 0; outImm.elemSegmentIndex = resolveRef(cursor->parseState, cursor->moduleState->elemNameToIndexMap, cursor->moduleState->module.elemSegments.size(), hasSecondRef ? secondRef : firstRef); } } static void parseImm(CursorState* cursor, ElemSegmentImm& outImm) { outImm.elemSegmentIndex = parseAndResolveNameOrIndexRef(cursor, cursor->moduleState->elemNameToIndexMap, cursor->moduleState->module.elemSegments.size(), "elem"); } static void parseImm(CursorState* cursor, ReferenceTypeImm& outImm) { outImm.referenceType = parseReferencedType(cursor); } static void parseInstrSequence(CursorState* cursor, Uptr depth); static void parseExpr(CursorState* cursor, Uptr depth); static void parseControlImm(CursorState* cursor, Name& outBranchTargetName, ControlStructureImm& imm) { tryParseName(cursor, outBranchTargetName); cursor->functionState->labelDisassemblyNames.push_back(outBranchTargetName.getString()); FunctionType functionType; // For backward compatibility, handle a naked result type. ValueType singleResultType; if(tryParseValueType(cursor, singleResultType)) { functionType = FunctionType(TypeTuple(singleResultType)); } else { // Parse the callee type, as a reference or explicit declaration. const Token* firstTypeToken = cursor->nextToken; std::vector paramDisassemblyNames; NameToIndexMap paramNameToIndexMap; const UnresolvedFunctionType unresolvedFunctionType = parseFunctionTypeRefAndOrDecl(cursor, paramNameToIndexMap, paramDisassemblyNames); // Disallow named parameters. if(paramNameToIndexMap.size()) { auto paramNameIt = paramNameToIndexMap.begin(); parseErrorf(cursor->parseState, firstTypeToken, "block type declaration may not declare parameter names ($%s)", paramNameIt->key.getString().c_str()); } if(!unresolvedFunctionType.reference) { // If there wasn't a type reference, just use the inline declared params and results. functionType = unresolvedFunctionType.explicitType; } else { // If there was a type reference, resolve it. This also verifies that if there were also // params and/or results declared inline that they match the resolved type reference. const Uptr referencedFunctionTypeIndex = resolveFunctionType(cursor->moduleState, unresolvedFunctionType).index; if(referencedFunctionTypeIndex != UINTPTR_MAX) { WAVM_ASSERT(referencedFunctionTypeIndex < cursor->moduleState->module.types.size()); functionType = cursor->moduleState->module.types[referencedFunctionTypeIndex]; } } } // Translate the function type into an indexed block type. if(functionType.params().size() == 0 && functionType.results().size() == 0) { imm.type.format = IndexedBlockType::noParametersOrResult; imm.type.resultType = ValueType::none; } else if(functionType.params().size() == 0 && functionType.results().size() == 1) { imm.type.format = IndexedBlockType::oneResult; imm.type.resultType = functionType.results()[0]; } else { imm.type.format = IndexedBlockType::functionType; imm.type.index = getUniqueFunctionTypeIndex(cursor->moduleState, functionType).index; } } static void checkRecursionDepth(CursorState* cursor, Uptr depth) { if(depth > cursor->moduleState->module.featureSpec.maxSyntaxRecursion) { parseErrorf(cursor->parseState, cursor->nextToken, "exceeded maximum recursion depth"); throw RecoverParseException(); } } static WAVM_FORCENOINLINE void parseBlock(CursorState* cursor, bool isExpr, Uptr depth) { Name branchTargetName; ControlStructureImm imm; parseControlImm(cursor, branchTargetName, imm); ScopedBranchTarget branchTarget(cursor->functionState, branchTargetName); cursor->functionState->validatingCodeStream.block(imm); parseInstrSequence(cursor, depth); cursor->functionState->validatingCodeStream.end(); if(!isExpr) { require(cursor, t_end); parseAndValidateRedundantBranchTargetName(cursor, branchTargetName, "block", "end"); } } static WAVM_FORCENOINLINE void parseLoop(CursorState* cursor, bool isExpr, Uptr depth) { Name branchTargetName; ControlStructureImm imm; parseControlImm(cursor, branchTargetName, imm); ScopedBranchTarget branchTarget(cursor->functionState, branchTargetName); cursor->functionState->validatingCodeStream.loop(imm); parseInstrSequence(cursor, depth); cursor->functionState->validatingCodeStream.end(); if(!isExpr) { require(cursor, t_end); parseAndValidateRedundantBranchTargetName(cursor, branchTargetName, "loop", "end"); } } static WAVM_FORCENOINLINE void parseIfInstr(CursorState* cursor, Uptr depth) { Name branchTargetName; ControlStructureImm imm; parseControlImm(cursor, branchTargetName, imm); ScopedBranchTarget branchTarget(cursor->functionState, branchTargetName); cursor->functionState->validatingCodeStream.if_(imm); // Parse the then clause. parseInstrSequence(cursor, depth); // Parse the else clause. if(cursor->nextToken->type == t_else_) { ++cursor->nextToken; parseAndValidateRedundantBranchTargetName(cursor, branchTargetName, "if", "else"); cursor->functionState->validatingCodeStream.else_(); parseInstrSequence(cursor, depth); } cursor->functionState->validatingCodeStream.end(); require(cursor, t_end); parseAndValidateRedundantBranchTargetName(cursor, branchTargetName, "if", "end"); } static WAVM_FORCENOINLINE void parseIfExpr(CursorState* cursor, Uptr depth) { Name branchTargetName; ControlStructureImm imm; parseControlImm(cursor, branchTargetName, imm); // Parse an optional condition expression. if(cursor->nextToken[0].type != t_leftParenthesis || cursor->nextToken[1].type != t_then) { parseExpr(cursor, depth); } ScopedBranchTarget branchTarget(cursor->functionState, branchTargetName); cursor->functionState->validatingCodeStream.if_(imm); // Parse the if clauses. if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_then) { // First syntax: (then )* (else *)? parseParenthesized(cursor, [&] { require(cursor, t_then); parseInstrSequence(cursor, depth); }); if(cursor->nextToken->type == t_leftParenthesis) { parseParenthesized(cursor, [&] { require(cursor, t_else_); cursor->functionState->validatingCodeStream.validationErrorToken = cursor->nextToken; cursor->functionState->validatingCodeStream.else_(); parseInstrSequence(cursor, depth); }); } } else { // Second syntax option: ? parseExpr(cursor, depth); if(cursor->nextToken->type != t_rightParenthesis) { cursor->functionState->validatingCodeStream.else_(); parseExpr(cursor, depth); } } cursor->functionState->validatingCodeStream.end(); } static WAVM_FORCENOINLINE void parseTryInstr(CursorState* cursor, Uptr depth) { Name branchTargetName; ControlStructureImm imm; parseControlImm(cursor, branchTargetName, imm); ScopedBranchTarget branchTarget(cursor->functionState, branchTargetName); cursor->functionState->validatingCodeStream.try_(imm); // Parse the try clause. parseInstrSequence(cursor, depth); // Parse catch clauses. while(cursor->nextToken->type != t_end) { if(cursor->nextToken->type == t_catch_) { ++cursor->nextToken; ExceptionTypeImm exceptionTypeImm; parseImm(cursor, exceptionTypeImm); cursor->functionState->validatingCodeStream.catch_(exceptionTypeImm); parseInstrSequence(cursor, depth); } else if(cursor->nextToken->type == t_catch_all) { ++cursor->nextToken; cursor->functionState->validatingCodeStream.catch_all(); parseInstrSequence(cursor, depth); } else { parseErrorf(cursor->parseState, cursor->nextToken, "expected 'catch', 'catch_all', or 'end' following 'try'"); throw RecoverParseException(); } }; require(cursor, t_end); parseAndValidateRedundantBranchTargetName(cursor, branchTargetName, "try", "end"); cursor->functionState->validatingCodeStream.end(); } static WAVM_FORCENOINLINE void parseExprSequence(CursorState* cursor, Uptr depth) { while(cursor->nextToken->type != t_rightParenthesis) { parseExpr(cursor, depth); }; } #define VISIT_OP(opcode, name, nameString, Imm, ...) \ static WAVM_FORCENOINLINE void parseOp_##name( \ CursorState* cursor, bool isExpression, Uptr depth) \ { \ const Token* opcodeToken = cursor->nextToken; \ ++cursor->nextToken; \ Imm imm; \ parseImm(cursor, imm); \ if(isExpression) { parseExprSequence(cursor, depth); } \ cursor->functionState->validatingCodeStream.validationErrorToken = opcodeToken; \ cursor->functionState->validatingCodeStream.name(imm); \ } WAVM_ENUM_NONCONTROL_OPERATORS(VISIT_OP) #undef VISIT_OP static void parseExpr(CursorState* cursor, Uptr depth) { ++depth; checkRecursionDepth(cursor, depth); parseParenthesized(cursor, [&] { cursor->functionState->validatingCodeStream.validationErrorToken = cursor->nextToken; try { switch(cursor->nextToken->type) { case t_block: { ++cursor->nextToken; parseBlock(cursor, true, depth); break; } case t_loop: { ++cursor->nextToken; parseLoop(cursor, true, depth); break; } case t_if_: { ++cursor->nextToken; parseIfExpr(cursor, depth); break; } #define VISIT_OP(opcode, name, nameString, Imm, ...) \ case t_##name: parseOp_##name(cursor, true, depth); break; WAVM_ENUM_NONCONTROL_OPERATORS(VISIT_OP) #undef VISIT_OP case t_legacyInstructionName: parseErrorf(cursor->parseState, cursor->nextToken, "legacy instruction name: requires the legacy-instr-name feature."); throw RecoverParseException(); default: parseErrorf(cursor->parseState, cursor->nextToken, "expected instruction name"); throw RecoverParseException(); } } catch(RecoverParseException const&) { cursor->functionState->validatingCodeStream.unreachable(); throw RecoverParseException(); } }); } static void parseInstrSequence(CursorState* cursor, Uptr depth) { while(true) { cursor->functionState->validatingCodeStream.validationErrorToken = cursor->nextToken; try { switch(cursor->nextToken->type) { case t_leftParenthesis: parseExpr(cursor, depth); break; case t_rightParenthesis: return; case t_else_: return; case t_end: return; case t_catch_: return; case t_catch_all: return; case t_block: { checkRecursionDepth(cursor, depth + 1); ++cursor->nextToken; parseBlock(cursor, false, depth + 1); break; } case t_loop: { checkRecursionDepth(cursor, depth + 1); ++cursor->nextToken; parseLoop(cursor, false, depth + 1); break; } case t_if_: { checkRecursionDepth(cursor, depth + 1); ++cursor->nextToken; parseIfInstr(cursor, depth + 1); break; } case t_try_: { checkRecursionDepth(cursor, depth + 1); ++cursor->nextToken; parseTryInstr(cursor, depth + 1); break; } #define VISIT_OP(opcode, name, nameString, Imm, ...) \ case t_##name: parseOp_##name(cursor, false, depth); break; WAVM_ENUM_NONCONTROL_OPERATORS(VISIT_OP) #undef VISIT_OP case t_legacyInstructionName: parseErrorf(cursor->parseState, cursor->nextToken, "legacy instruction name: requires the legacy-instr-name feature."); throw RecoverParseException(); default: parseErrorf(cursor->parseState, cursor->nextToken, "expected instruction name"); throw RecoverParseException(); } } catch(RecoverParseException const&) { cursor->functionState->validatingCodeStream.unreachable(); // This is a workaround for rethrowing from a catch handler blowing up the stack. // On Windows, the call stack frames between the throw and the catch are not freed until // exiting the catch scope. The throw uses substantial stack space, and the catch adds a // stack frame on top of that. As a result, unwinding a call stack by recursively // throwing exceptions from within catch scopes can overflow the stack. // Jumping out of the catch before rethrowing ensures that the stack frames between the // original throw and this function are freed before continuing to unwind the stack. goto rethrowRecoverParseException; } }; WAVM_UNREACHABLE(); rethrowRecoverParseException: throw RecoverParseException(); } FunctionDef WAST::parseFunctionDef(CursorState* cursor, const Token* funcToken) { std::shared_ptr> localDisassemblyNames = std::make_shared>(); std::shared_ptr localNameToIndexMap = std::make_shared(); // Parse the function type, as a reference or explicit declaration. const UnresolvedFunctionType unresolvedFunctionType = parseFunctionTypeRefAndOrDecl(cursor, *localNameToIndexMap, *localDisassemblyNames); // Defer resolving the function type until all type declarations have been parsed. const Uptr functionIndex = cursor->moduleState->module.functions.size(); const Uptr functionDefIndex = cursor->moduleState->module.functions.defs.size(); const Token* firstBodyToken = cursor->nextToken; cursor->moduleState->postTypeCallbacks.push_back([functionIndex, functionDefIndex, firstBodyToken, localNameToIndexMap, localDisassemblyNames, unresolvedFunctionType]( ModuleState* moduleState) { // Resolve the function type and set it on the FunctionDef. const IndexedFunctionType functionTypeIndex = resolveFunctionType(moduleState, unresolvedFunctionType); moduleState->module.functions.defs[functionDefIndex].type = functionTypeIndex; // Defer parsing the body of the function until all function types have been resolved. moduleState->functionBodyCallbacks.push_back([functionIndex, functionDefIndex, firstBodyToken, localNameToIndexMap, localDisassemblyNames, functionTypeIndex](ModuleState* moduleState) { FunctionDef& functionDef = moduleState->module.functions.defs[functionDefIndex]; FunctionType functionType = functionTypeIndex.index == UINTPTR_MAX ? FunctionType() : moduleState->module.types[functionTypeIndex.index]; // Parse the function's local variables. CursorState functionCursorState(firstBodyToken, moduleState->parseState, moduleState); while(tryParseParenthesizedTagged(&functionCursorState, t_local, [&] { Name localName; if(tryParseName(&functionCursorState, localName)) { bindName( moduleState->parseState, *localNameToIndexMap, localName, functionType.params().size() + functionDef.nonParameterLocalTypes.size()); localDisassemblyNames->push_back(localName.getString()); functionDef.nonParameterLocalTypes.push_back( parseValueType(&functionCursorState)); } else { while(functionCursorState.nextToken->type != t_rightParenthesis) { localDisassemblyNames->push_back(std::string()); functionDef.nonParameterLocalTypes.push_back( parseValueType(&functionCursorState)); }; } })) { }; moduleState->disassemblyNames.functions[functionIndex].locals = std::move(*localDisassemblyNames); // Parse the function's code. const Token* validationErrorToken = firstBodyToken; try { FunctionState functionState(localNameToIndexMap, functionDef, moduleState); functionCursorState.functionState = &functionState; try { parseInstrSequence(&functionCursorState, 0); if(!moduleState->parseState->unresolvedErrors.size()) { validationErrorToken = functionCursorState.nextToken; functionState.validatingCodeStream.end(); functionState.validatingCodeStream.finishValidation(); } } catch(RecoverParseException const&) { } catch(FatalParseException const&) { } functionDef.code = std::move(functionState.codeByteStream.getBytes()); moduleState->disassemblyNames.functions[functionIndex].labels = std::move(functionState.labelDisassemblyNames); } catch(ValidationException const& exception) { parseErrorf(moduleState->parseState, validationErrorToken, "validation error: %s", exception.message.c_str()); } }); }); // Continue parsing after the closing parenthesis. findClosingParenthesis(cursor, funcToken - 1); --cursor->nextToken; return {{UINTPTR_MAX}, {}, {}, {}}; } ================================================ FILE: Lib/WASTParse/ParseModule.cpp ================================================ #include #include #include #include #include #include #include "Lexer.h" #include "Parse.h" #include "WAVM/IR/IR.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Timing.h" #include "WAVM/WASTParse/WASTParse.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::WAST; static bool tryParseSizeConstraints(CursorState* cursor, U64 maxMax, SizeConstraints& outSizeConstraints) { outSizeConstraints.min = 0; outSizeConstraints.max = UINT64_MAX; // Parse a minimum. if(!tryParseU64(cursor, outSizeConstraints.min)) { return false; } else { // Parse an optional maximum. if(!tryParseU64(cursor, outSizeConstraints.max)) { outSizeConstraints.max = UINT64_MAX; } else { // Validate that the maximum size is within the limit, and that the size contraints is // not disjoint. if(outSizeConstraints.max > maxMax) { parseErrorf(cursor->parseState, cursor->nextToken - 1, "validation error: maximum size exceeds limit (%" PRIu64 ">%" PRIu64 ")", outSizeConstraints.max, maxMax); outSizeConstraints.max = maxMax; } else if(outSizeConstraints.max < outSizeConstraints.min) { parseErrorf(cursor->parseState, cursor->nextToken - 1, "validation error: maximum size is less than minimum size (%" PRIu64 "<%" PRIu64 ")", outSizeConstraints.max, outSizeConstraints.min); outSizeConstraints.max = outSizeConstraints.min; } } return true; } } static IndexType parseOptionalIndexType(CursorState* cursor) { if(cursor->nextToken->type == t_i32) { ++cursor->nextToken; return IndexType::i32; } else if(cursor->nextToken->type == t_i64) { ++cursor->nextToken; return IndexType::i64; } else { return IndexType::i32; } } static SizeConstraints parseSizeConstraints(CursorState* cursor, U64 maxMax) { SizeConstraints result; if(!tryParseSizeConstraints(cursor, maxMax, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected size constraints"); } return result; } static GlobalType parseGlobalType(CursorState* cursor) { GlobalType result; result.isMutable = tryParseParenthesizedTagged( cursor, t_mut, [&] { result.valueType = parseValueType(cursor); }); if(!result.isMutable) { result.valueType = parseValueType(cursor); } return result; } static TypeTuple parseTypeTuple(CursorState* cursor) { std::vector parameters; ValueType elementType; while(tryParseValueType(cursor, elementType)) { parameters.push_back(elementType); } return TypeTuple(parameters); } // An unresolved initializer expression: uses a Reference instead of an index for global.get and // ref.func. typedef InitializerExpressionBase UnresolvedInitializerExpression; static UnresolvedInitializerExpression parseInitializerInstruction(CursorState* cursor) { UnresolvedInitializerExpression result; switch(cursor->nextToken->type) { case t_i32_const: { ++cursor->nextToken; result = parseI32(cursor); break; } case t_i64_const: { ++cursor->nextToken; result = parseI64(cursor); break; } case t_f32_const: { ++cursor->nextToken; result = parseF32(cursor); break; } case t_f64_const: { ++cursor->nextToken; result = parseF64(cursor); break; } case t_v128_const: { ++cursor->nextToken; result = parseV128(cursor); break; } case t_global_get: { ++cursor->nextToken; Reference globalRef; if(!tryParseNameOrIndexRef(cursor, globalRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected global name or index"); throw RecoverParseException(); } result = UnresolvedInitializerExpression(UnresolvedInitializerExpression::Type::global_get, globalRef); break; } case t_ref_null: { ++cursor->nextToken; result = parseReferencedType(cursor); break; } case t_ref_func: { ++cursor->nextToken; Reference funcRef; if(!tryParseNameOrIndexRef(cursor, funcRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected function name or index"); throw RecoverParseException(); } result = UnresolvedInitializerExpression(UnresolvedInitializerExpression::Type::ref_func, funcRef); break; } default: parseErrorf(cursor->parseState, cursor->nextToken, "expected initializer expression"); throw RecoverParseException(); }; return result; } static UnresolvedInitializerExpression parseInitializerExpression(CursorState* cursor) { UnresolvedInitializerExpression result; // Parse either a parenthesized or unparenthesized instruction. if(cursor->nextToken->type == t_leftParenthesis) { parseParenthesized(cursor, [&] { result = parseInitializerInstruction(cursor); }); } else { result = parseInitializerInstruction(cursor); } return result; } static InitializerExpression resolveInitializerExpression( ModuleState* moduleState, UnresolvedInitializerExpression unresolvedExpression) { switch(unresolvedExpression.type) { case UnresolvedInitializerExpression::Type::i32_const: return InitializerExpression(unresolvedExpression.i32); case UnresolvedInitializerExpression::Type::i64_const: return InitializerExpression(unresolvedExpression.i64); case UnresolvedInitializerExpression::Type::f32_const: return InitializerExpression(unresolvedExpression.f32); case UnresolvedInitializerExpression::Type::f64_const: return InitializerExpression(unresolvedExpression.f64); case UnresolvedInitializerExpression::Type::v128_const: return InitializerExpression(unresolvedExpression.v128); case UnresolvedInitializerExpression::Type::global_get: return InitializerExpression(InitializerExpression::Type::global_get, resolveRef(moduleState->parseState, moduleState->globalNameToIndexMap, moduleState->module.globals.size(), unresolvedExpression.ref)); case UnresolvedInitializerExpression::Type::ref_null: return InitializerExpression(unresolvedExpression.nullReferenceType); case UnresolvedInitializerExpression::Type::ref_func: return InitializerExpression(InitializerExpression::Type::ref_func, resolveRef(moduleState->parseState, moduleState->functionNameToIndexMap, moduleState->module.functions.size(), unresolvedExpression.ref)); case UnresolvedInitializerExpression::Type::invalid: return InitializerExpression(); default: WAVM_UNREACHABLE(); } } static void errorIfFollowsDefinitions(CursorState* cursor) { if(cursor->moduleState->module.functions.defs.size() || cursor->moduleState->module.tables.defs.size() || cursor->moduleState->module.memories.defs.size() || cursor->moduleState->module.globals.defs.size()) { parseErrorf(cursor->parseState, cursor->nextToken, "import declarations must precede all definitions"); } } template static Uptr createImport(CursorState* cursor, Name name, std::string&& moduleName, std::string&& exportName, NameToIndexMap& nameToIndexMap, IndexSpace& indexSpace, std::vector& disassemblyNameArray, Type type, ExternKind kind) { const Uptr importIndex = indexSpace.imports.size(); bindName(cursor->parseState, nameToIndexMap, name, indexSpace.size()); disassemblyNameArray.push_back({name.getString()}); indexSpace.imports.push_back({type, std::move(moduleName), std::move(exportName)}); cursor->moduleState->module.imports.push_back({kind, importIndex}); return importIndex; } static bool parseOptionalSharedDeclaration(CursorState* cursor) { if(cursor->nextToken->type == t_shared) { ++cursor->nextToken; return true; } else { return false; } } static void parseImport(CursorState* cursor) { errorIfFollowsDefinitions(cursor); require(cursor, t_import); std::string moduleName = parseUTF8String(cursor); std::string exportName = parseUTF8String(cursor); parseParenthesized(cursor, [&] { // Parse the import kind. const Token* importKindToken = cursor->nextToken; switch(importKindToken->type) { case t_func: case t_table: case t_memory: case t_global: case t_exception_type: ++cursor->nextToken; break; default: parseErrorf(cursor->parseState, cursor->nextToken, "invalid import type"); throw RecoverParseException(); } // Parse an optional internal name for the import. Name name; tryParseName(cursor, name); // Parse the import type and create the import in the appropriate name/index spaces. switch(importKindToken->type) { case t_func: { NameToIndexMap localNameToIndexMap; std::vector localDissassemblyNames; const UnresolvedFunctionType unresolvedFunctionType = parseFunctionTypeRefAndOrDecl( cursor, localNameToIndexMap, localDissassemblyNames); const Uptr importIndex = createImport(cursor, name, std::move(moduleName), std::move(exportName), cursor->moduleState->functionNameToIndexMap, cursor->moduleState->module.functions, cursor->moduleState->disassemblyNames.functions, {UINTPTR_MAX}, ExternKind::function); cursor->moduleState->disassemblyNames.functions.back().locals = localDissassemblyNames; // Resolve the function import type after all type declarations have been parsed. cursor->moduleState->postTypeCallbacks.push_back( [unresolvedFunctionType, importIndex](ModuleState* moduleState) { moduleState->module.functions.imports[importIndex].type = resolveFunctionType(moduleState, unresolvedFunctionType); }); break; } case t_table: { const IndexType indexType = parseOptionalIndexType(cursor); const SizeConstraints sizeConstraints = parseSizeConstraints( cursor, indexType == IndexType::i32 ? IR::maxTable32Elems : IR::maxTable64Elems); const bool isShared = parseOptionalSharedDeclaration(cursor); const ReferenceType elemType = parseReferenceType(cursor); createImport(cursor, name, std::move(moduleName), std::move(exportName), cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables, cursor->moduleState->disassemblyNames.tables, TableType{elemType, isShared, indexType, sizeConstraints}, ExternKind::table); break; } case t_memory: { const IndexType indexType = parseOptionalIndexType(cursor); const SizeConstraints sizeConstraints = parseSizeConstraints( cursor, indexType == IndexType::i32 ? IR::maxTable32Elems : IR::maxTable64Elems); const bool isShared = parseOptionalSharedDeclaration(cursor); createImport(cursor, name, std::move(moduleName), std::move(exportName), cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories, cursor->moduleState->disassemblyNames.memories, MemoryType{isShared, indexType, sizeConstraints}, ExternKind::memory); break; } case t_global: { const GlobalType globalType = parseGlobalType(cursor); createImport(cursor, name, std::move(moduleName), std::move(exportName), cursor->moduleState->globalNameToIndexMap, cursor->moduleState->module.globals, cursor->moduleState->disassemblyNames.globals, globalType, ExternKind::global); break; } case t_exception_type: { TypeTuple params = parseTypeTuple(cursor); createImport(cursor, name, std::move(moduleName), std::move(exportName), cursor->moduleState->exceptionTypeNameToIndexMap, cursor->moduleState->module.exceptionTypes, cursor->moduleState->disassemblyNames.exceptionTypes, ExceptionType{params}, ExternKind::exceptionType); break; } default: WAVM_UNREACHABLE(); }; }); } static bool tryParseExternKind(CursorState* cursor, ExternKind& outKind) { switch(cursor->nextToken->type) { case t_func: ++cursor->nextToken; outKind = ExternKind::function; return true; case t_table: ++cursor->nextToken; outKind = ExternKind::table; return true; case t_memory: ++cursor->nextToken; outKind = ExternKind::memory; return true; case t_global: ++cursor->nextToken; outKind = ExternKind::global; return true; case t_exception_type: ++cursor->nextToken; outKind = ExternKind::exceptionType; return true; default: return false; }; } static void parseExport(CursorState* cursor) { require(cursor, t_export); std::string exportName = parseUTF8String(cursor); parseParenthesized(cursor, [&] { ExternKind exportKind; if(!tryParseExternKind(cursor, exportKind)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected export kind"); throw RecoverParseException(); } Reference exportRef; if(!tryParseNameOrIndexRef(cursor, exportRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected name or index"); throw RecoverParseException(); } const Uptr exportIndex = cursor->moduleState->module.exports.size(); cursor->moduleState->module.exports.push_back({std::move(exportName), exportKind, 0}); cursor->moduleState->postDeclarationCallbacks.push_back([=](ModuleState* moduleState) { moduleState->module.exports[exportIndex].index = resolveExternRef(moduleState, exportKind, exportRef); }); }); } static void parseType(CursorState* cursor) { require(cursor, t_type); Name name; tryParseName(cursor, name); parseParenthesized(cursor, [&] { require(cursor, t_func); NameToIndexMap parameterNameToIndexMap; std::vector localDisassemblyNames; FunctionType functionType = parseFunctionType(cursor, parameterNameToIndexMap, localDisassemblyNames); const Uptr functionTypeIndex = cursor->moduleState->module.types.size(); cursor->moduleState->module.types.push_back(functionType); cursor->moduleState->functionTypeToIndexMap.set(functionType, functionTypeIndex); bindName( cursor->parseState, cursor->moduleState->typeNameToIndexMap, name, functionTypeIndex); cursor->moduleState->disassemblyNames.types.push_back(name.getString()); }); } static void parseData(CursorState* cursor) { const Token* firstToken = cursor->nextToken; require(cursor, t_data); Name segmentName; Reference memoryRef; UnresolvedInitializerExpression baseAddress; bool isActive = false; tryParseName(cursor, segmentName); if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_memory) { parseParenthesized(cursor, [&]() { require(cursor, t_memory); memoryRef = parseNameOrIndexRef(cursor, "data memory"); }); isActive = true; } if(isActive || cursor->nextToken[0].type == t_leftParenthesis) { if(!isActive) { memoryRef = Reference(0); isActive = true; } if(cursor->nextToken[0].type != t_leftParenthesis || cursor->nextToken[1].type != t_offset) { baseAddress = parseInitializerExpression(cursor); } else { parseParenthesized(cursor, [&]() { require(cursor, t_offset); baseAddress = parseInitializerExpression(cursor); }); } } // Parse a list of strings that contains the segment's data. std::string dataString; while(tryParseString(cursor, dataString)) {}; // Create the data segment. std::vector dataVector((const U8*)dataString.data(), (const U8*)dataString.data() + dataString.size()); const Uptr dataSegmentIndex = cursor->moduleState->module.dataSegments.size(); cursor->moduleState->module.dataSegments.push_back( {isActive, UINTPTR_MAX, InitializerExpression(), std::make_shared>(std::move(dataVector))}); if(segmentName) { bindName(cursor->parseState, cursor->moduleState->dataNameToIndexMap, segmentName, dataSegmentIndex); } cursor->moduleState->disassemblyNames.dataSegments.push_back(segmentName.getString()); // Enqueue a callback that is called after all declarations are parsed to resolve the memory to // put the data segment in, and the base offset. if(isActive) { cursor->moduleState->postDeclarationCallbacks.push_back([=](ModuleState* moduleState) { if(!moduleState->module.memories.size()) { parseErrorf( moduleState->parseState, firstToken, "validation error: data segments aren't allowed in modules without any memory declarations"); } else { DataSegment& dataSegment = moduleState->module.dataSegments[dataSegmentIndex]; dataSegment.memoryIndex = memoryRef ? resolveRef(moduleState->parseState, moduleState->memoryNameToIndexMap, moduleState->module.memories.size(), memoryRef) : 0; dataSegment.baseOffset = resolveInitializerExpression(moduleState, baseAddress); } }); } } struct UnresolvedElem { union { Reference ref; ReferenceType nullReferenceType; }; ElemExpr::Type type; UnresolvedElem(Reference&& inRef = Reference(), ElemExpr::Type inType = ElemExpr::Type::ref_null) : ref(std::move(inRef)), type(inType) { } UnresolvedElem(ReferenceType inNullReferenceType) : nullReferenceType(inNullReferenceType), type(ElemExpr::Type::ref_null) { } }; static UnresolvedElem parseElemSegmentInstr(CursorState* cursor) { switch(cursor->nextToken->type) { case t_ref_null: { ++cursor->nextToken; const ReferenceType nullReferenceType = parseReferencedType(cursor); return UnresolvedElem(nullReferenceType); break; } case t_ref_func: { ++cursor->nextToken; Reference elementRef; if(!tryParseNameOrIndexRef(cursor, elementRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected function name or index"); throw RecoverParseException(); } return UnresolvedElem(std::move(elementRef), ElemExpr::Type::ref_func); break; } default: parseErrorf(cursor->parseState, cursor->nextToken, "expected 'ref.func' or 'ref.null'"); throw RecoverParseException(); }; } static UnresolvedElem parseElemSegmentExpr(CursorState* cursor) { UnresolvedElem result; if(cursor->nextToken->type != t_leftParenthesis) { result = parseElemSegmentInstr(cursor); } else { parseParenthesized(cursor, [&] { result = parseElemSegmentInstr(cursor); }); } return result; } static UnresolvedElem parseElemSegmentItemExpr(CursorState* cursor) { UnresolvedElem result; parseParenthesized(cursor, [&] { if(cursor->nextToken->type == t_item) { ++cursor->nextToken; result = parseElemSegmentExpr(cursor); } else { result = parseElemSegmentExpr(cursor); } }); return result; } static Uptr parseElemSegmentBody(CursorState* cursor, ElemSegment::Type segmentType, ElemSegment::Encoding encoding, ExternKind externKind, ReferenceType elemType, Name segmentName, Reference tableRef, UnresolvedInitializerExpression baseIndex, const Token* elemToken) { // Allocate the elementReferences array on the heap so it doesn't need to be copied for the // post-declaration callback. std::shared_ptr> elementReferences = std::make_shared>(); while(cursor->nextToken->type != t_rightParenthesis) { switch(encoding) { case ElemSegment::Encoding::expr: { elementReferences->push_back(parseElemSegmentItemExpr(cursor)); break; } case ElemSegment::Encoding::index: { Reference elementRef; if(!tryParseNameOrIndexRef(cursor, elementRef)) { parseErrorf( cursor->parseState, cursor->nextToken, "expected function name or index"); throw RecoverParseException(); } elementReferences->push_back(UnresolvedElem(std::move(elementRef))); break; } default: WAVM_UNREACHABLE(); } } // Create the elem segment. const Uptr elemSegmentIndex = cursor->moduleState->module.elemSegments.size(); auto contents = std::make_shared(); contents->encoding = encoding; contents->elemType = elemType; contents->externKind = externKind; cursor->moduleState->module.elemSegments.push_back( {segmentType, UINTPTR_MAX, InitializerExpression(), std::move(contents)}); if(segmentName) { bindName(cursor->parseState, cursor->moduleState->elemNameToIndexMap, segmentName, elemSegmentIndex); } cursor->moduleState->disassemblyNames.elemSegments.push_back(segmentName.getString()); // Enqueue a callback that is called after all declarations are parsed to resolve the table // elements' references. cursor->moduleState->postDeclarationCallbacks.push_back([segmentType, tableRef, elemSegmentIndex, elementReferences, elemToken, baseIndex, encoding, externKind](ModuleState* moduleState) { ElemSegment& elemSegment = moduleState->module.elemSegments[elemSegmentIndex]; if(segmentType == ElemSegment::Type::active) { if(!moduleState->module.tables.size()) { parseErrorf( moduleState->parseState, elemToken, "validation error: " "elem segments aren't allowed in modules without any table declarations"); } else { elemSegment.tableIndex = tableRef ? resolveRef(moduleState->parseState, moduleState->tableNameToIndexMap, moduleState->module.tables.size(), tableRef) : 0; elemSegment.baseOffset = resolveInitializerExpression(moduleState, baseIndex); } } switch(encoding) { case ElemSegment::Encoding::expr: elemSegment.contents->elemExprs.resize(elementReferences->size()); for(Uptr elementIndex = 0; elementIndex < elementReferences->size(); ++elementIndex) { const UnresolvedElem& unresolvedElem = (*elementReferences)[elementIndex]; switch(unresolvedElem.type) { case ElemExpr::Type::ref_null: elemSegment.contents->elemExprs[elementIndex] = ElemExpr(unresolvedElem.nullReferenceType); break; case ElemExpr::Type::ref_func: elemSegment.contents->elemExprs[elementIndex] = ElemExpr(ElemExpr::Type::ref_func, resolveRef(moduleState->parseState, moduleState->functionNameToIndexMap, moduleState->module.functions.size(), unresolvedElem.ref)); break; case ElemExpr::Type::invalid: default: WAVM_UNREACHABLE(); } } break; case ElemSegment::Encoding::index: elemSegment.contents->elemIndices.resize(elementReferences->size()); for(Uptr elementIndex = 0; elementIndex < elementReferences->size(); ++elementIndex) { const UnresolvedElem& unresolvedElem = (*elementReferences)[elementIndex]; elemSegment.contents->elemIndices[elementIndex] = resolveExternRef(moduleState, externKind, unresolvedElem.ref); } break; default: WAVM_UNREACHABLE(); }; }); return elementReferences->size(); } static void parseElem(CursorState* cursor) { const Token* elemToken = cursor->nextToken; require(cursor, t_elem); Name segmentName; Reference tableRef; UnresolvedInitializerExpression baseIndex; ElemSegment::Type segmentType = ElemSegment::Type::passive; tryParseName(cursor, segmentName); if(cursor->nextToken->type == t_declare) { ++cursor->nextToken; segmentType = ElemSegment::Type::declared; } else if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_table) { parseParenthesized(cursor, [&]() { require(cursor, t_table); tableRef = parseNameOrIndexRef(cursor, "elem table"); }); segmentType = ElemSegment::Type::active; } if(segmentType == ElemSegment::Type::active || cursor->nextToken[0].type == t_leftParenthesis) { if(segmentType != ElemSegment::Type::active) { tableRef = Reference(0); segmentType = ElemSegment::Type::active; } if(cursor->nextToken[0].type != t_leftParenthesis || cursor->nextToken[1].type != t_offset) { baseIndex = parseInitializerExpression(cursor); } else { parseParenthesized(cursor, [&]() { require(cursor, t_offset); baseIndex = parseInitializerExpression(cursor); }); } } ExternKind elemExternKind = ExternKind::invalid; ReferenceType elemRefType = ReferenceType::none; ElemSegment::Encoding encoding; if(tryParseExternKind(cursor, elemExternKind)) { encoding = ElemSegment::Encoding::index; } else if(tryParseReferenceType(cursor, elemRefType)) { encoding = ElemSegment::Encoding::expr; } else { encoding = ElemSegment::Encoding::index; elemExternKind = ExternKind::function; } parseElemSegmentBody(cursor, segmentType, encoding, elemExternKind, elemRefType, segmentName, tableRef, baseIndex, elemToken); } template static void parseObjectDefOrImport(CursorState* cursor, NameToIndexMap& nameToIndexMap, IR::IndexSpace& indexSpace, std::vector& disassemblyNameArray, TokenType declarationTag, IR::ExternKind kind, ParseImport parseImportFunc, ParseDef parseDefFunc) { const Token* declarationTagToken = cursor->nextToken; require(cursor, declarationTag); Name name; tryParseName(cursor, name); // Handle inline export declarations. while(true) { const bool isExport = tryParseParenthesizedTagged(cursor, t_export, [&] { cursor->moduleState->module.exports.push_back( {parseUTF8String(cursor), kind, indexSpace.size()}); }); if(!isExport) { break; } }; // Handle an inline import declaration. std::string importModuleName; std::string exportName; const bool isImport = tryParseParenthesizedTagged(cursor, t_import, [&] { errorIfFollowsDefinitions(cursor); importModuleName = parseUTF8String(cursor); exportName = parseUTF8String(cursor); }); if(isImport) { Type importType = parseImportFunc(cursor); createImport(cursor, name, std::move(importModuleName), std::move(exportName), nameToIndexMap, indexSpace, disassemblyNameArray, importType, kind); } else { Def def = parseDefFunc(cursor, declarationTagToken); bindName(cursor->parseState, nameToIndexMap, name, indexSpace.size()); indexSpace.defs.push_back(std::move(def)); disassemblyNameArray.push_back({name.getString()}); } } static void parseFunc(CursorState* cursor) { parseObjectDefOrImport( cursor, cursor->moduleState->functionNameToIndexMap, cursor->moduleState->module.functions, cursor->moduleState->disassemblyNames.functions, t_func, ExternKind::function, [&](CursorState* cursor) { // Parse the imported function's type. NameToIndexMap localNameToIndexMap; std::vector localDisassemblyNames; const UnresolvedFunctionType unresolvedFunctionType = parseFunctionTypeRefAndOrDecl(cursor, localNameToIndexMap, localDisassemblyNames); // Resolve the function import type after all type declarations have been parsed. const Uptr importIndex = cursor->moduleState->module.functions.imports.size(); cursor->moduleState->postTypeCallbacks.push_back( [unresolvedFunctionType, importIndex](ModuleState* moduleState) { moduleState->module.functions.imports[importIndex].type = resolveFunctionType(moduleState, unresolvedFunctionType); }); return IndexedFunctionType{UINTPTR_MAX}; }, parseFunctionDef); } static void parseTable(CursorState* cursor) { parseObjectDefOrImport( cursor, cursor->moduleState->tableNameToIndexMap, cursor->moduleState->module.tables, cursor->moduleState->disassemblyNames.tables, t_table, ExternKind::table, // Parse a table import. [](CursorState* cursor) { const IndexType indexType = parseOptionalIndexType(cursor); const SizeConstraints sizeConstraints = parseSizeConstraints( cursor, indexType == IndexType::i32 ? IR::maxTable32Elems : IR::maxTable64Elems); const bool isShared = parseOptionalSharedDeclaration(cursor); const ReferenceType elemType = parseReferenceType(cursor); return TableType{elemType, isShared, indexType, sizeConstraints}; }, // Parse a table definition. [](CursorState* cursor, const Token*) { // Parse the table type. const IndexType indexType = parseOptionalIndexType(cursor); SizeConstraints sizeConstraints; const bool hasSizeConstraints = tryParseSizeConstraints( cursor, indexType == IndexType::i32 ? IR::maxTable32Elems : IR::maxTable64Elems, sizeConstraints); const bool isShared = parseOptionalSharedDeclaration(cursor); const ReferenceType elemType = parseReferenceType(cursor); // If we couldn't parse an explicit size constraints, the table definition must contain // an elem segment that implicitly defines the size. if(!hasSizeConstraints) { parseParenthesized(cursor, [&] { require(cursor, t_elem); const Uptr tableIndex = cursor->moduleState->module.tables.size(); ElemSegment::Encoding encoding = ElemSegment::Encoding::index; ExternKind elemExternKind = ExternKind::invalid; ReferenceType elemRefType = ReferenceType::none; if(cursor->nextToken->type != t_leftParenthesis) { elemExternKind = ExternKind::function; } else { encoding = ElemSegment::Encoding::expr; elemRefType = elemType; } const Uptr numElements = parseElemSegmentBody( cursor, ElemSegment::Type::active, encoding, elemExternKind, elemRefType, Name(), Reference(tableIndex), indexType == IndexType::i32 ? UnresolvedInitializerExpression(I32(0)) : UnresolvedInitializerExpression(I64(0)), cursor->nextToken - 1); sizeConstraints.min = sizeConstraints.max = numElements; }); } return TableDef{TableType(elemType, isShared, indexType, sizeConstraints)}; }); } static void parseMemory(CursorState* cursor) { parseObjectDefOrImport( cursor, cursor->moduleState->memoryNameToIndexMap, cursor->moduleState->module.memories, cursor->moduleState->disassemblyNames.memories, t_memory, ExternKind::memory, // Parse a memory import. [](CursorState* cursor) { const IndexType indexType = parseOptionalIndexType(cursor); const SizeConstraints sizeConstraints = parseSizeConstraints( cursor, indexType == IndexType::i32 ? IR::maxMemory32Pages : IR::maxMemory64Pages); const bool isShared = parseOptionalSharedDeclaration(cursor); return MemoryType{isShared, indexType, sizeConstraints}; }, // Parse a memory definition [](CursorState* cursor, const Token*) { const IndexType indexType = parseOptionalIndexType(cursor); SizeConstraints sizeConstraints; if(!tryParseSizeConstraints( cursor, indexType == IndexType::i32 ? IR::maxMemory32Pages : IR::maxMemory64Pages, sizeConstraints)) { std::string dataString; parseParenthesized(cursor, [&] { require(cursor, t_data); while(tryParseString(cursor, dataString)) {}; }); std::vector dataVector((const U8*)dataString.data(), (const U8*)dataString.data() + dataString.size()); sizeConstraints.min = sizeConstraints.max = (dataVector.size() + IR::numBytesPerPage - 1) / IR::numBytesPerPage; cursor->moduleState->module.dataSegments.push_back( {true, cursor->moduleState->module.memories.size(), indexType == IndexType::i32 ? InitializerExpression(I32(0)) : InitializerExpression(I64(0)), std::make_shared>(std::move(dataVector))}); cursor->moduleState->disassemblyNames.dataSegments.emplace_back(); } const bool isShared = parseOptionalSharedDeclaration(cursor); return MemoryDef{MemoryType(isShared, indexType, sizeConstraints)}; }); } static void parseGlobal(CursorState* cursor) { parseObjectDefOrImport( cursor, cursor->moduleState->globalNameToIndexMap, cursor->moduleState->module.globals, cursor->moduleState->disassemblyNames.globals, t_global, ExternKind::global, // Parse a global import. parseGlobalType, // Parse a global definition [](CursorState* cursor, const Token*) { const GlobalType globalType = parseGlobalType(cursor); // Parse the unresolved initializer expression, but defer resolving it until all // declarations have been parsed. This allows the initializer to reference // function/global names declared after this global. const UnresolvedInitializerExpression unresolvedInitializerExpression = parseInitializerExpression(cursor); const Uptr globalDefIndex = cursor->moduleState->module.globals.defs.size(); cursor->moduleState->postDeclarationCallbacks.push_back( [cursor, globalDefIndex, unresolvedInitializerExpression]( ModuleState* moduleState) { cursor->moduleState->module.globals.defs[globalDefIndex].initializer = resolveInitializerExpression(cursor->moduleState, unresolvedInitializerExpression); }); return GlobalDef{globalType, InitializerExpression()}; }); } static void parseExceptionType(CursorState* cursor) { parseObjectDefOrImport( cursor, cursor->moduleState->exceptionTypeNameToIndexMap, cursor->moduleState->module.exceptionTypes, cursor->moduleState->disassemblyNames.exceptionTypes, t_exception_type, ExternKind::exceptionType, // Parse an exception type import. [](CursorState* cursor) { TypeTuple params = parseTypeTuple(cursor); return ExceptionType{params}; }, // Parse an exception type definition [](CursorState* cursor, const Token*) { TypeTuple params = parseTypeTuple(cursor); return ExceptionTypeDef{ExceptionType{params}}; }); } static void parseStart(CursorState* cursor) { if(cursor->moduleState->startFieldToken) { parseErrorf(cursor->parseState, cursor->nextToken, "module may not have more than one 'start' field."); parseErrorf(cursor->parseState, cursor->moduleState->startFieldToken, "first 'start' field occurred here"); } cursor->moduleState->startFieldToken = cursor->nextToken; require(cursor, t_start); Reference functionRef; if(!tryParseNameOrIndexRef(cursor, functionRef)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected function name or index"); } cursor->moduleState->postDeclarationCallbacks.push_back([functionRef]( ModuleState* moduleState) { moduleState->module.startFunctionIndex = resolveRef(moduleState->parseState, moduleState->functionNameToIndexMap, moduleState->module.functions.size(), functionRef); }); } static OrderedSectionID parseOrderedSectionID(CursorState* cursor) { OrderedSectionID result; switch(cursor->nextToken->type) { case t_type: result = OrderedSectionID::type; break; case t_import: result = OrderedSectionID::import; break; case t_func: result = OrderedSectionID::function; break; case t_table: result = OrderedSectionID::table; break; case t_memory: result = OrderedSectionID::memory; break; case t_global: result = OrderedSectionID::global; break; case t_exception_type: if(!cursor->moduleState->module.featureSpec.exceptionHandling) { parseErrorf( cursor->parseState, cursor->nextToken, "custom section after 'exception_type' section requires the 'exception-handling' feature."); } result = OrderedSectionID::exceptionType; break; case t_export: result = OrderedSectionID::export_; break; case t_start: result = OrderedSectionID::start; break; case t_elem: result = OrderedSectionID::elem; break; case t_data_count: if(!cursor->moduleState->module.featureSpec.bulkMemoryOperations) { parseErrorf( cursor->parseState, cursor->nextToken, "custom section after exception_type section requires the 'bulk-memory-operations' feature."); } result = OrderedSectionID::dataCount; break; case t_code: result = OrderedSectionID::code; break; case t_data: result = OrderedSectionID::data; break; default: parseErrorf(cursor->parseState, cursor->nextToken, "expected section ID"); throw RecoverParseException(); }; ++cursor->nextToken; return result; } static void parseCustomSection(CursorState* cursor) { if(!cursor->moduleState->module.featureSpec.customSectionsInTextFormat) { parseErrorf( cursor->parseState, cursor->nextToken, "custom sections in the text format require the 'wat-custom-sections' feature."); } const Token* customSectionToken = cursor->nextToken; require(cursor, t_custom_section); // Parse the section name. IR::CustomSection customSection; customSection.name = parseUTF8String(cursor); // Parse the section order. OrderedSectionID afterSection = OrderedSectionID::moduleBeginning; if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_after) { parseParenthesized(cursor, [&] { WAVM_ASSERT(cursor->nextToken->type == t_after); ++cursor->nextToken; afterSection = parseOrderedSectionID(cursor); }); } customSection.afterSection = afterSection; // Ensure that custom sections do not occur out-of-order w.r.t. afterSection. if(cursor->moduleState->module.customSections.size()) { const CustomSection& lastCustomSection = cursor->moduleState->module.customSections.back(); if(lastCustomSection.afterSection > afterSection) { WAVM_ASSERT(cursor->moduleState->lastCustomSectionToken); parseErrorf(cursor->parseState, customSectionToken, "out-of-order custom section: this section is declared to be after '%s'...", asString(afterSection)); parseErrorf(cursor->parseState, cursor->moduleState->lastCustomSectionToken, "...but it occurs after a custom section that is declared to be after '%s'", asString(lastCustomSection.afterSection)); } } cursor->moduleState->lastCustomSectionToken = customSectionToken; // Parse a list of strings that contains the custom section's data. std::string dataString; while(tryParseString(cursor, dataString)) {}; customSection.data = std::vector((const U8*)dataString.data(), (const U8*)dataString.data() + dataString.size()); // Add the custom section to the module. cursor->moduleState->module.customSections.push_back(std::move(customSection)); // After all declarations have been parsed, validate that the custom section ordering constraint // doesn't reference a virtual section that may not be present in the binary encoding of the // module. This ensures that the text format cannot express order constraints that may not be // encoded in a binary module. cursor->moduleState->postDeclarationCallbacks.push_back( [customSectionToken, afterSection](ModuleState* moduleState) { const IR::Module& module = moduleState->module; bool hasPrecedingSection = true; switch(afterSection) { case OrderedSectionID::moduleBeginning: break; case OrderedSectionID::type: hasPrecedingSection = hasTypeSection(module); break; case OrderedSectionID::import: hasPrecedingSection = hasImportSection(module); break; case OrderedSectionID::function: hasPrecedingSection = hasFunctionSection(module); break; case OrderedSectionID::table: hasPrecedingSection = hasTableSection(module); break; case OrderedSectionID::memory: hasPrecedingSection = hasMemorySection(module); break; case OrderedSectionID::global: hasPrecedingSection = hasGlobalSection(module); break; case OrderedSectionID::exceptionType: hasPrecedingSection = hasExceptionTypeSection(module); break; case OrderedSectionID::export_: hasPrecedingSection = hasExportSection(module); break; case OrderedSectionID::start: hasPrecedingSection = hasStartSection(module); break; case OrderedSectionID::elem: hasPrecedingSection = hasElemSection(module); break; case OrderedSectionID::dataCount: hasPrecedingSection = hasDataCountSection(module); break; case OrderedSectionID::code: hasPrecedingSection = hasCodeSection(module); break; case OrderedSectionID::data: hasPrecedingSection = hasDataSection(module); break; default: WAVM_UNREACHABLE(); }; if(!hasPrecedingSection) { parseErrorf(moduleState->parseState, customSectionToken, "custom section is after a virtual section that is not present (%s)", asString(afterSection)); } }); } static void parseDeclaration(CursorState* cursor) { parseParenthesized(cursor, [&] { switch(cursor->nextToken->type) { case t_import: parseImport(cursor); return true; case t_export: parseExport(cursor); return true; case t_exception_type: parseExceptionType(cursor); return true; case t_global: parseGlobal(cursor); return true; case t_memory: parseMemory(cursor); return true; case t_table: parseTable(cursor); return true; case t_type: parseType(cursor); return true; case t_data: parseData(cursor); return true; case t_elem: parseElem(cursor); return true; case t_func: parseFunc(cursor); return true; case t_start: parseStart(cursor); return true; case t_custom_section: parseCustomSection(cursor); return true; default: parseErrorf(cursor->parseState, cursor->nextToken, "unrecognized definition in module"); throw RecoverParseException(); }; }); } void WAST::parseModuleBody(CursorState* cursor, IR::Module& outModule) { try { const Token* firstToken = cursor->nextToken; ModuleState moduleState(cursor->parseState, outModule); cursor->moduleState = &moduleState; // Parse the module's declarations. while(cursor->nextToken->type != t_rightParenthesis && cursor->nextToken->type != t_eof) { parseDeclaration(cursor); }; // Process the callbacks requested after all type declarations have been parsed. if(!cursor->parseState->unresolvedErrors.size()) { for(const auto& callback : cursor->moduleState->postTypeCallbacks) { callback(&moduleState); } } // Process the callbacks requested after all declarations have been parsed. if(!cursor->parseState->unresolvedErrors.size()) { for(const auto& callback : cursor->moduleState->postDeclarationCallbacks) { callback(&moduleState); } } // After all declarations have been parsed, but before function bodies are parsed, validate // the parts of the module that correspond to pre-code sections in binary modules. if(!cursor->parseState->unresolvedErrors.size()) { try { IR::validatePreCodeSections(*moduleState.validationState); } catch(ValidationException const& validationException) { parseErrorf(cursor->parseState, firstToken, "validation error: %s", validationException.message.c_str()); } } // Process the function body parsing callbacks. if(!cursor->parseState->unresolvedErrors.size()) { for(const auto& callback : cursor->moduleState->functionBodyCallbacks) { callback(&moduleState); } } // After function bodies have been parsed, validate the parts of the module that correspond // to post-code sections in binary modules. if(!cursor->parseState->unresolvedErrors.size()) { try { IR::validatePostCodeSections(*moduleState.validationState); } catch(ValidationException const& validationException) { parseErrorf(cursor->parseState, firstToken, "validation error: %s", validationException.message.c_str()); } } // Set the module's disassembly names. const DisassemblyNames& disassemblyNames = moduleState.disassemblyNames; WAVM_ASSERT(outModule.functions.size() == disassemblyNames.functions.size()); WAVM_ASSERT(outModule.tables.size() == disassemblyNames.tables.size()); WAVM_ASSERT(outModule.memories.size() == disassemblyNames.memories.size()); WAVM_ASSERT(outModule.globals.size() == disassemblyNames.globals.size()); WAVM_ASSERT(outModule.elemSegments.size() == disassemblyNames.elemSegments.size()); WAVM_ASSERT(outModule.dataSegments.size() == disassemblyNames.dataSegments.size()); WAVM_ASSERT(outModule.exceptionTypes.size() == disassemblyNames.exceptionTypes.size()); IR::setDisassemblyNames(outModule, disassemblyNames); } catch(RecoverParseException const&) { cursor->moduleState = nullptr; throw RecoverParseException(); } cursor->moduleState = nullptr; } bool WAST::parseModule(const char* string, Uptr stringLength, IR::Module& outModule, std::vector& outErrors) { Timing::Timer timer; // Lex the string. LineInfo* lineInfo = nullptr; Token* tokens = lex(string, stringLength, lineInfo, outModule.featureSpec.allowLegacyInstructionNames); ParseState parseState(string, lineInfo); CursorState cursor(tokens, &parseState); try { if(cursor.nextToken[0].type == t_leftParenthesis && cursor.nextToken[1].type == t_module) { // Parse (module ) parseParenthesized(&cursor, [&] { require(&cursor, t_module); parseModuleBody(&cursor, outModule); }); } else { // Also allow a module body without any enclosing (module ...). parseModuleBody(&cursor, outModule); } require(&cursor, t_eof); } catch(RecoverParseException const&) { } catch(FatalParseException const&) { } // Resolve line information for any errors, and write them to outErrors. for(auto& unresolvedError : parseState.unresolvedErrors) { TextFileLocus locus = calcLocusFromOffset(string, lineInfo, unresolvedError.charOffset); outErrors.push_back({std::move(locus), std::move(unresolvedError.message)}); } // Free the tokens and line info. freeTokens(tokens); freeLineInfo(lineInfo); Timing::logRatePerSecond("lexed and parsed WAST", timer, stringLength / 1024.0 / 1024.0, "MiB"); return outErrors.size() == 0; } ================================================ FILE: Lib/WASTParse/ParseNumbers.cpp ================================================ #include #include #include #include #include "Lexer.h" #include "Parse.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/FloatComponents.h" #include "WAVM/Platform/Intrinsic.h" using namespace WAVM; using namespace WAVM::WAST; // Parses an optional + or - sign and returns true if a - sign was parsed. // If either a + or - sign is parsed, nextChar is advanced past it. static bool parseSign(const char*& nextChar) { if(*nextChar == '-') { ++nextChar; return true; } else if(*nextChar == '+') { ++nextChar; } return false; } // Parses an unsigned integer from hexits, starting with "0x", and advancing nextChar past the // parsed hexits. be called for input that's already been accepted by the lexer as a hexadecimal // integer. static U64 parseHexUnsignedInt(const char*& nextChar, ParseState* parseState, U64 maxValue) { const char* firstHexit = nextChar; WAVM_ASSERT(nextChar[0] == '0' && (nextChar[1] == 'x' || nextChar[1] == 'X')); nextChar += 2; U64 result = 0; U8 hexit = 0; while(true) { if(*nextChar == '_') { ++nextChar; continue; } if(!tryParseHexit(nextChar, hexit)) { break; } if(result > (maxValue - hexit) / 16) { parseErrorf(parseState, firstHexit, "integer literal is too large"); result = maxValue; while(tryParseHexit(nextChar, hexit)) {}; break; } WAVM_ASSERT(result * 16 + hexit >= result); result = result * 16 + hexit; } return result; } // Parses an unsigned integer from digits, advancing nextChar past the parsed digits. // Assumes it will only be called for input that's already been accepted by the lexer as a decimal // integer. static U64 parseDecimalUnsignedInt(const char*& nextChar, ParseState* parseState, U64 maxValue, const char* context) { U64 result = 0; const char* firstDigit = nextChar; while(true) { if(*nextChar == '_') { ++nextChar; continue; } if(*nextChar < '0' || *nextChar > '9') { break; } const U8 digit = *nextChar - '0'; ++nextChar; if(result > U64(maxValue - digit) / 10) { parseErrorf(parseState, firstDigit, "%s is too large", context); result = maxValue; while((*nextChar >= '0' && *nextChar <= '9') || *nextChar == '_') { ++nextChar; }; break; } WAVM_ASSERT(result * 10 + digit >= result); result = result * 10 + digit; }; return result; } // Parses a floating-point NaN, advancing nextChar past the parsed characters. // Assumes it will only be called for input that's already been accepted by the lexer as a literal // NaN. template Float parseNaN(const char*& nextChar, ParseState* parseState) { const char* firstChar = nextChar; typedef FloatComponents FloatComponents; FloatComponents resultComponents; resultComponents.bits.sign = parseSign(nextChar) ? 1 : 0; resultComponents.bits.exponent = FloatComponents::maxExponentBits; WAVM_ASSERT(nextChar[0] == 'n' && nextChar[1] == 'a' && nextChar[2] == 'n'); nextChar += 3; if(*nextChar == ':') { ++nextChar; const U64 significandBits = parseHexUnsignedInt(nextChar, parseState, FloatComponents::maxSignificand); if(!significandBits) { parseErrorf(parseState, firstChar, "NaN significand must be non-zero"); resultComponents.bits.significand = 1; } resultComponents.bits.significand = typename FloatComponents::Bits(significandBits); } else { // If the NaN's significand isn't specified, just set the top bit. resultComponents.bits.significand = typename FloatComponents::Bits(1) << (FloatComponents::numSignificandBits - 1); } return resultComponents.value; } // Parses a floating-point infinity. Does not advance nextChar. // Assumes it will only be called for input that's already been accepted by the lexer as a literal // infinity. template Float parseInfinity(const char* nextChar) { // Floating point infinite is represented by max exponent with a zero significand. typedef FloatComponents FloatComponents; FloatComponents resultComponents; resultComponents.bits.sign = parseSign(nextChar) ? 1 : 0; resultComponents.bits.exponent = FloatComponents::maxExponentBits; resultComponents.bits.significand = 0; return resultComponents.value; } template Float strtox(const char* firstChar, char** endChar); template<> F32 strtox(const char* firstChar, char** endChar) { return strtof(firstChar, endChar); } template<> F64 strtox(const char* firstChar, char** endChar) { return strtod(firstChar, endChar); } // Parses a floating point literal, advancing nextChar past the parsed characters. Assumes it will // only be called for input that's already been accepted by the lexer as a float literal. template Float parseDecimalFloat(const char*& nextChar, ParseState* parseState) { // Scan the token's characters for underscores, and make a copy of it without the underscores // for strtof/strtod. const char* firstChar = nextChar; std::string noUnderscoreString; bool hasUnderscores = false; while(true) { const char c = *nextChar; // Determine whether the next character is still part of the number. const bool isNumericChar = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || c == 'x' || c == 'X' || c == 'p' || c == 'P' || c == '+' || c == '-' || c == '.' || c == '_'; if(!isNumericChar) { break; } if(c == '_' && !hasUnderscores) { // If this is the first underscore encountered, copy the preceding characters of the // number to a std::string. noUnderscoreString = std::string(firstChar, nextChar); hasUnderscores = true; } else if(c != '_' && hasUnderscores) { // If an underscore has previously been encountered, copy non-underscore characters to // that string. noUnderscoreString += *nextChar; } ++nextChar; }; // Pass the underscore-free string to parseNonSpecialF64 instead of the original input string. const char* noUnderscoreFirstChar = firstChar; if(hasUnderscores) { noUnderscoreFirstChar = noUnderscoreString.c_str(); } // Use libc strtof/strtod to parse decimal floats. char* endChar = nullptr; Float result = strtox(noUnderscoreFirstChar, &endChar); if(endChar == noUnderscoreFirstChar) { Errors::fatalf("strtof/strtod failed to parse number accepted by lexer"); } if(std::isinf(result)) { parseErrorf(parseState, firstChar, "float literal is too large"); } return result; } static bool roundSignificand(U64& significand64, bool hasNonZeroTailBits, U64 numSignificandBits) { // Round to the nearest even significand. const bool lsb = significand64 & (U64(1) << (64 - numSignificandBits)); const bool halfLSB = significand64 & (U64(1) << (64 - numSignificandBits - 1)); hasNonZeroTailBits |= !!(significand64 & ((U64(1) << (64 - numSignificandBits - 1)) - 1)); if(halfLSB && (lsb || hasNonZeroTailBits)) { U64 addend = U64(1) << (64 - numSignificandBits); const bool overflowed = significand64 + addend < significand64; significand64 += addend; return overflowed; } return false; } // Parses a hexadecimal floating point literal, advancing nextChar past the parsed characters. // Assumes it will only be called for input that's already been accepted by the lexer as a // hexadecimal float literal. template Float parseHexFloat(const char*& nextChar, ParseState* parseState) { const char* firstChar = nextChar; typedef FloatComponents FloatComponents; typedef typename FloatComponents::Bits FloatBits; FloatComponents resultComponents; resultComponents.bits.sign = parseSign(nextChar) ? 1 : 0; WAVM_ASSERT(nextChar[0] == '0' && (nextChar[1] == 'x' || nextChar[1] == 'X')); nextChar += 2; // Parse hexits into a 64-bit fixed point number, keeping track of where the point is in // exponent. U64 significand64 = 0; bool hasSeenPoint = false; bool hasNonZeroTailBits = false; I64 exponent = 0; while(true) { U8 hexit = 0; if(tryParseHexit(nextChar, hexit)) { // Once there are too many hexits to accumulate in the 64-bit fixed point number, ignore // the hexits, but continue to update exponent so we get an accurate but imprecise // number. if(significand64 <= UINT64_MAX / 16) { WAVM_ASSERT(significand64 * 16 + hexit >= significand64); significand64 = significand64 * 16 + hexit; exponent -= hasSeenPoint ? 4 : 0; } else { hasNonZeroTailBits |= hexit != 0; exponent += hasSeenPoint ? 0 : 4; } } else if(*nextChar == '_') { ++nextChar; } else if(*nextChar == '.') { WAVM_ASSERT(!hasSeenPoint); hasSeenPoint = true; ++nextChar; } else { break; } } // Parse an optional exponent. if(*nextChar == 'p' || *nextChar == 'P') { ++nextChar; const bool isExponentNegative = parseSign(nextChar); const U64 userExponent = parseDecimalUnsignedInt( nextChar, parseState, U64(-I64(INT32_MIN)), "float literal exponent"); exponent = isExponentNegative ? exponent - userExponent : exponent + userExponent; } if(!significand64) { // If both the integer and fractional part are zero, just return +/- zero. resultComponents.bits.exponent = 0; resultComponents.bits.significand = 0; return resultComponents.value; } else { // Normalize the significand so the most significand set bit is in the MSB. const U64 leadingZeroes = countLeadingZeroes(significand64); significand64 <<= leadingZeroes; exponent += 64; exponent -= leadingZeroes; if(exponent - 1 < FloatComponents::minNormalExponent) { // Renormalize the significand for an exponent of FloatComponents::minNormalExponent. const U64 subnormalShift = U64(I64(FloatComponents::minNormalExponent) - exponent); if(subnormalShift >= 64) { significand64 = 0; } else { hasNonZeroTailBits = significand64 & ((U64(1) << subnormalShift) - 1); significand64 >>= subnormalShift; } exponent += subnormalShift; // Round the significand as if it's subnormal. const bool overflowed = roundSignificand( significand64, hasNonZeroTailBits, FloatComponents::numSignificandBits); if(overflowed) { // If rounding the subnormal significand overflowed, then it rounded up to the // smallest normal number. resultComponents.bits.exponent = 1; resultComponents.bits.significand = 0; } else { // Subnormal significands are encoded as if their exponent is minNormalExponent, but // without the implicit leading 1. resultComponents.bits.exponent = 0; resultComponents.bits.significand = FloatBits(significand64 >> (64 - FloatComponents::numSignificandBits)); } } else { // Round the significand. if(roundSignificand( significand64, hasNonZeroTailBits, FloatComponents::numSignificandBits + 1)) { significand64 = U64(1) << 63; ++exponent; } // Drop the implicit leading 1 for normal encodings. WAVM_ASSERT(significand64 & (U64(1) << 63)); significand64 <<= 1; --exponent; if(exponent > FloatComponents::maxNormalExponent) { // If the number is out of range, produce an error and return infinity. resultComponents.bits.exponent = FloatComponents::maxExponentBits; resultComponents.bits.significand = FloatComponents::maxSignificand; parseErrorf(parseState, firstChar, "hexadecimal float literal is out of range"); } else { // Encode a normal floating point value. WAVM_ASSERT(exponent >= FloatComponents::minNormalExponent); WAVM_ASSERT(exponent <= FloatComponents::maxNormalExponent); resultComponents.bits.exponent = FloatBits(exponent + FloatComponents::exponentBias); resultComponents.bits.significand = FloatBits(significand64 >> (64 - FloatComponents::numSignificandBits)); } } } return resultComponents.value; } // Tries to parse an numeric literal token as an integer, advancing cursor->nextToken. // Returns true if it matched a token. template bool tryParseInt(CursorState* cursor, UnsignedInt& outUnsignedInt, I64 minSignedValue, U64 maxUnsignedValue, bool allowSign = true) { if(cursor->nextToken->type != t_decimalInt && cursor->nextToken->type != t_hexInt) { return false; } const char* nextChar = cursor->parseState->string + cursor->nextToken->begin; const bool isNegative = allowSign && parseSign(nextChar); if(!allowSign && (*nextChar == '-' || *nextChar == '+')) { return false; } const U64 u64 = cursor->nextToken->type == t_decimalInt ? parseDecimalUnsignedInt(nextChar, cursor->parseState, isNegative ? -U64(minSignedValue) : maxUnsignedValue, "int literal") : parseHexUnsignedInt(nextChar, cursor->parseState, isNegative ? -U64(minSignedValue) : maxUnsignedValue); if(minSignedValue == 0 && isNegative) { outUnsignedInt = 0; return false; } else { outUnsignedInt = isNegative ? UnsignedInt(-u64) : UnsignedInt(u64); ++cursor->nextToken; WAVM_ASSERT(nextChar <= cursor->parseState->string + cursor->nextToken->begin); return true; } } // Tries to parse a numeric literal literal token as a float, advancing cursor->nextToken. // Returns true if it matched a token. template bool tryParseFloat(CursorState* cursor, Float& outFloat) { const char* nextChar = cursor->parseState->string + cursor->nextToken->begin; switch(cursor->nextToken->type) { case t_decimalInt: case t_decimalFloat: outFloat = parseDecimalFloat(nextChar, cursor->parseState); break; case t_hexInt: case t_hexFloat: outFloat = parseHexFloat(nextChar, cursor->parseState); break; case t_floatNaN: outFloat = parseNaN(nextChar, cursor->parseState); break; case t_floatInf: outFloat = parseInfinity(nextChar); break; default: parseErrorf(cursor->parseState, cursor->nextToken, "expected float literal"); return false; }; ++cursor->nextToken; WAVM_ASSERT(nextChar <= cursor->parseState->string + cursor->nextToken->begin); return true; } bool WAST::tryParseU64(CursorState* cursor, U64& outI64) { return tryParseInt(cursor, outI64, 0, UINT64_MAX); } bool WAST::tryParseUptr(CursorState* cursor, Uptr& outUptr) { return tryParseInt(cursor, outUptr, 0, UINTPTR_MAX); } U8 WAST::parseU8(CursorState* cursor, bool allowSign) { U8 result; if(!tryParseInt(cursor, result, 0, 255, allowSign)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected u8 literal"); throw RecoverParseException(); } return result; } U32 WAST::parseU32(CursorState* cursor) { U32 result; if(!tryParseInt(cursor, result, 0, UINT32_MAX)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected u32 literal"); throw RecoverParseException(); } return result; } U64 WAST::parseU64(CursorState* cursor) { U64 result; if(!tryParseInt(cursor, result, 0, UINT64_MAX)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected u64 literal"); throw RecoverParseException(); } return result; } I8 WAST::parseI8(CursorState* cursor) { U32 result; if(!tryParseInt(cursor, result, INT8_MIN, UINT8_MAX)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected i8 literal"); throw RecoverParseException(); } return I8(result); } I16 WAST::parseI16(CursorState* cursor) { U32 result; if(!tryParseInt(cursor, result, INT16_MIN, UINT16_MAX)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected i16 literal"); throw RecoverParseException(); } return I16(result); } I32 WAST::parseI32(CursorState* cursor) { U32 result; if(!tryParseInt(cursor, result, INT32_MIN, UINT32_MAX)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected i32 literal"); throw RecoverParseException(); } return I32(result); } I64 WAST::parseI64(CursorState* cursor) { U64 result; if(!tryParseInt(cursor, result, INT64_MIN, UINT64_MAX)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected i64 literal"); throw RecoverParseException(); } return I64(result); } F32 WAST::parseF32(CursorState* cursor) { F32 result; if(!tryParseFloat(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected f32 literal"); throw RecoverParseException(); } return result; } F64 WAST::parseF64(CursorState* cursor) { F64 result; if(!tryParseFloat(cursor, result)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected f64 literal"); throw RecoverParseException(); } return result; } V128 WAST::parseV128(CursorState* cursor) { V128 result; switch(cursor->nextToken->type) { case t_i8x16: ++cursor->nextToken; for(Uptr laneIndex = 0; laneIndex < 16; ++laneIndex) { result.i8x16[laneIndex] = parseI8(cursor); } break; case t_i16x8: ++cursor->nextToken; for(Uptr laneIndex = 0; laneIndex < 8; ++laneIndex) { result.i16x8[laneIndex] = parseI16(cursor); } break; case t_i32x4: ++cursor->nextToken; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { result.i32x4[laneIndex] = parseI32(cursor); } break; case t_i64x2: ++cursor->nextToken; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { result.i64x2[laneIndex] = parseI64(cursor); } break; case t_f32x4: ++cursor->nextToken; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { result.f32x4[laneIndex] = parseF32(cursor); } break; case t_f64x2: ++cursor->nextToken; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { result.f64x2[laneIndex] = parseF64(cursor); } break; default: parseErrorf(cursor->parseState, cursor->nextToken, "expected 'i8x6', 'i16x8', 'i32x4', 'i64x2', 'f32x4', or 'f64x2'"); throw RecoverParseException(); }; return result; } ================================================ FILE: Lib/WASTParse/ParseTests.cpp ================================================ #include #include #include #include #include #include #include "Lexer.h" #include "Parse.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/TestScript.h" #include "WAVM/WASTParse/WASTParse.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::WAST; struct HostRef { Runtime::Function* function; HostRef() : function(nullptr) {} ~HostRef() { if(function) { delete function->mutableData; delete function; } } HostRef(HostRef&& movee) noexcept { function = movee.function; movee.function = nullptr; } void operator=(HostRef&& movee) noexcept { function = movee.function; movee.function = nullptr; } }; static Runtime::Function* makeHostRef(Uptr index) { static Platform::Mutex indexToHostRefMapMutex; static HashMap indexToHostRefMap; Platform::Mutex::Lock lock(indexToHostRefMapMutex); HostRef& hostRef = indexToHostRefMap.getOrAdd(index, HostRef()); if(!hostRef.function) { Runtime::FunctionMutableData* functionMutableData = new Runtime::FunctionMutableData("test!ref.host!" + std::to_string(index)); hostRef.function = new Runtime::Function(functionMutableData, UINTPTR_MAX, FunctionType::Encoding{0}); functionMutableData->function = hostRef.function; } return hostRef.function; } static IR::Value parseConstExpression(CursorState* cursor) { IR::Value result; parseParenthesized(cursor, [&] { switch(cursor->nextToken->type) { case t_i32_const: { ++cursor->nextToken; result = parseI32(cursor); break; } case t_i64_const: { ++cursor->nextToken; result = parseI64(cursor); break; } case t_f32_const: { ++cursor->nextToken; result = parseF32(cursor); break; } case t_f64_const: { ++cursor->nextToken; result = parseF64(cursor); break; } case t_v128_const: { ++cursor->nextToken; result.type = ValueType::v128; result.v128 = parseV128(cursor); break; } case t_ref_extern: { ++cursor->nextToken; result.type = ValueType::externref; result.function = makeHostRef(parseU32(cursor)); break; } case t_ref_null: { ++cursor->nextToken; result.type = asValueType(parseReferencedType(cursor)); result.object = nullptr; break; } default: parseErrorf(cursor->parseState, cursor->nextToken, "expected const expression"); throw RecoverParseException(); }; }); return result; } static std::vector parseConstExpressionTuple(CursorState* cursor) { std::vector values; while(cursor->nextToken->type == t_leftParenthesis) { values.push_back(parseConstExpression(cursor)); }; return values; } template FloatResultSet parseFloatResultSet(CursorState* cursor) { FloatResultSet result; switch(cursor->nextToken->type) { case t_canonicalNaN: ++cursor->nextToken; result.type = FloatResultSet::Type::canonicalNaN; result.literal = Float(0); break; case t_arithmeticNaN: ++cursor->nextToken; result.type = FloatResultSet::Type::arithmeticNaN; result.literal = Float(0); break; default: result.type = FloatResultSet::Type::literal; result.literal = parseFloat(cursor); break; }; return result; } static ResultSet parseV128ResultSet(CursorState* cursor) { ResultSet result; switch(cursor->nextToken->type) { case t_i8x16: ++cursor->nextToken; result.type = ResultSet::Type::i8x16_const; for(Uptr laneIndex = 0; laneIndex < 16; ++laneIndex) { result.i8x16[laneIndex] = parseI8(cursor); } break; case t_i16x8: ++cursor->nextToken; result.type = ResultSet::Type::i16x8_const; for(Uptr laneIndex = 0; laneIndex < 8; ++laneIndex) { result.i16x8[laneIndex] = parseI16(cursor); } break; case t_i32x4: ++cursor->nextToken; result.type = ResultSet::Type::i32x4_const; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { result.i32x4[laneIndex] = parseI32(cursor); } break; case t_i64x2: ++cursor->nextToken; result.type = ResultSet::Type::i64x2_const; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { result.i64x2[laneIndex] = parseI64(cursor); } break; case t_f32x4: ++cursor->nextToken; result.type = ResultSet::Type::f32x4_const; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { result.f32x4[laneIndex] = parseFloatResultSet(cursor); } break; case t_f64x2: ++cursor->nextToken; result.type = ResultSet::Type::f64x2_const; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { result.f64x2[laneIndex] = parseFloatResultSet(cursor); } break; default: parseErrorf(cursor->parseState, cursor->nextToken, "expected 'i8x6', 'i16x8', 'i32x4', 'i64x2', 'f32x4', or 'f64x2'"); throw RecoverParseException(); }; return result; } static ResultSet parseResultSet(CursorState* cursor) { ResultSet result; parseParenthesized(cursor, [&] { switch(cursor->nextToken->type) { case t_i32_const: { ++cursor->nextToken; result.type = ResultSet::Type::i32_const; result.i32 = parseI32(cursor); break; } case t_i64_const: { ++cursor->nextToken; result.type = ResultSet::Type::i64_const; result.i64 = parseI64(cursor); break; } case t_f32_const: { ++cursor->nextToken; result.type = ResultSet::Type::f32_const; result.f32 = parseFloatResultSet(cursor); break; } case t_f64_const: { ++cursor->nextToken; result.type = ResultSet::Type::f64_const; result.f64 = parseFloatResultSet(cursor); break; } case t_v128_const: { ++cursor->nextToken; result = parseV128ResultSet(cursor); break; } case t_ref_extern: { ++cursor->nextToken; result.type = ResultSet::Type::ref_extern; result.object = &makeHostRef(parseU32(cursor))->object; break; } case t_ref_func: { ++cursor->nextToken; result.type = ResultSet::Type::ref_func; break; } case t_ref_null: { ++cursor->nextToken; result.type = ResultSet::Type::ref_null; result.nullReferenceType = parseReferencedType(cursor); break; } case t_either: { ++cursor->nextToken; result.type = ResultSet::Type::either; new(&result.alternatives) std::vector>(); while(cursor->nextToken->type != t_rightParenthesis) { result.alternatives.emplace_back( std::make_shared(parseResultSet(cursor))); }; break; } default: parseErrorf(cursor->parseState, cursor->nextToken, "expected const expression"); throw RecoverParseException(); }; }); return result; } static std::vector parseResultSetTuple(CursorState* cursor) { std::vector results; while(cursor->nextToken->type == t_leftParenthesis) { results.push_back(parseResultSet(cursor)); }; return results; } static std::string parseOptionalNameAsString(CursorState* cursor) { Name name; return tryParseName(cursor, name) ? name.getString() : std::string(); } static void parseTestScriptModule(CursorState* cursor, IR::Module& outModule, std::string& outInternalModuleName, QuotedModuleType& outQuotedModuleType, std::string& outQuotedModuleString) { outInternalModuleName = parseOptionalNameAsString(cursor); if(cursor->nextToken->type == t_quote || cursor->nextToken->type == t_binary) { // Parse a quoted module: (module quote|binary "...") const Token* quoteToken = cursor->nextToken; ++cursor->nextToken; if(!tryParseString(cursor, outQuotedModuleString)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected string"); } else { while(tryParseString(cursor, outQuotedModuleString)) {}; } if(quoteToken->type == t_quote) { outQuotedModuleType = QuotedModuleType::text; std::vector quotedErrors; parseModule(outQuotedModuleString.c_str(), outQuotedModuleString.size() + 1, outModule, quotedErrors); for(auto&& error : quotedErrors) { cursor->parseState->unresolvedErrors.push_back( {quoteToken->begin, std::move(error.message)}); } } else { outQuotedModuleType = QuotedModuleType::binary; WASM::LoadError loadError; if(!WASM::loadBinaryModule((const U8*)outQuotedModuleString.data(), outQuotedModuleString.size(), outModule, &loadError)) { switch(loadError.type) { case WASM::LoadError::Type::malformed: parseErrorf(cursor->parseState, quoteToken, "error deserializing binary module: %s", loadError.message.c_str()); break; case WASM::LoadError::Type::invalid: parseErrorf(cursor->parseState, quoteToken, "validation error: %s", loadError.message.c_str()); break; default: WAVM_UNREACHABLE(); }; } } } else { const U32 startCharOffset = cursor->nextToken->begin; parseModuleBody(cursor, outModule); const U32 endCharOffset = cursor->nextToken->begin; outQuotedModuleType = QuotedModuleType::text; outQuotedModuleString = std::string(cursor->parseState->string + startCharOffset, cursor->parseState->string + endCharOffset); } } static std::unique_ptr parseAction(CursorState* cursor, const IR::FeatureSpec& featureSpec) { std::unique_ptr result; parseParenthesized(cursor, [&] { TextFileLocus locus = calcLocusFromOffset( cursor->parseState->string, cursor->parseState->lineInfo, cursor->nextToken->begin); switch(cursor->nextToken->type) { case t_get: { ++cursor->nextToken; std::string nameString = parseOptionalNameAsString(cursor); std::string exportName = parseUTF8String(cursor); result = std::unique_ptr( new GetAction(std::move(locus), std::move(nameString), std::move(exportName))); break; } case t_invoke: { ++cursor->nextToken; std::string nameString = parseOptionalNameAsString(cursor); std::string exportName = parseUTF8String(cursor); std::vector arguments = parseConstExpressionTuple(cursor); result = std::unique_ptr(new InvokeAction(std::move(locus), std::move(nameString), std::move(exportName), std::move(arguments))); break; } case t_module: { ++cursor->nextToken; std::string internalModuleName; std::unique_ptr module{new Module(featureSpec)}; QuotedModuleType quotedModuleType = QuotedModuleType::none; std::string quotedModuleString; parseTestScriptModule( cursor, *module, internalModuleName, quotedModuleType, quotedModuleString); result = std::unique_ptr(new ModuleAction( std::move(locus), std::move(internalModuleName), std::move(module))); break; } default: parseErrorf(cursor->parseState, cursor->nextToken, "expected 'get' or 'invoke'"); throw RecoverParseException(); }; }); return result; } template static bool stringStartsWith(const char* string, const char (&prefix)[numPrefixChars]) { return !strncmp(string, prefix, numPrefixChars - 1); } static std::unique_ptr parseCommand(CursorState* cursor, const IR::FeatureSpec& featureSpec) { std::unique_ptr result; if(cursor->nextToken[0].type == t_leftParenthesis && (cursor->nextToken[1].type == t_module || cursor->nextToken[1].type == t_invoke || cursor->nextToken[1].type == t_get)) { std::unique_ptr action = parseAction(cursor, featureSpec); if(action) { TextFileLocus locus = action->locus; result = std::unique_ptr(new ActionCommand(std::move(locus), std::move(action))); } } else { parseParenthesized(cursor, [&] { TextFileLocus locus = calcLocusFromOffset( cursor->parseState->string, cursor->parseState->lineInfo, cursor->nextToken->begin); switch(cursor->nextToken->type) { case t_register: { ++cursor->nextToken; std::string moduleName = parseUTF8String(cursor); std::string nameString = parseOptionalNameAsString(cursor); result = std::unique_ptr(new RegisterCommand( std::move(locus), std::move(moduleName), std::move(nameString))); break; } case t_assert_return: { ++cursor->nextToken; std::unique_ptr action = parseAction(cursor, featureSpec); std::vector expectedResults = parseResultSetTuple(cursor); result = std::unique_ptr(new AssertReturnCommand( std::move(locus), std::move(action), std::move(expectedResults))); break; } case t_assert_return_arithmetic_nan: case t_assert_return_canonical_nan: case t_assert_return_arithmetic_nan_f32x4: case t_assert_return_canonical_nan_f32x4: case t_assert_return_arithmetic_nan_f64x2: case t_assert_return_canonical_nan_f64x2: { // Translate the token to a command type. Command::Type commandType; switch(cursor->nextToken->type) { case t_assert_return_arithmetic_nan: commandType = Command::assert_return_arithmetic_nan; break; case t_assert_return_canonical_nan: commandType = Command::assert_return_canonical_nan; break; case t_assert_return_arithmetic_nan_f32x4: commandType = Command::assert_return_arithmetic_nan_f32x4; break; case t_assert_return_canonical_nan_f32x4: commandType = Command::assert_return_canonical_nan_f32x4; break; case t_assert_return_arithmetic_nan_f64x2: commandType = Command::assert_return_arithmetic_nan_f64x2; break; case t_assert_return_canonical_nan_f64x2: commandType = Command::assert_return_canonical_nan_f64x2; break; default: WAVM_UNREACHABLE(); } ++cursor->nextToken; std::unique_ptr action = parseAction(cursor, featureSpec); result = std::unique_ptr( new AssertReturnNaNCommand(commandType, std::move(locus), std::move(action))); break; } case t_assert_return_func: { ++cursor->nextToken; std::unique_ptr action = parseAction(cursor, featureSpec); result = std::unique_ptr( new AssertReturnFuncCommand(std::move(locus), std::move(action))); break; } case t_assert_exhaustion: case t_assert_trap: { ++cursor->nextToken; std::unique_ptr action = parseAction(cursor, featureSpec); const Token* errorToken = cursor->nextToken; std::string expectedErrorMessage; if(!tryParseString(cursor, expectedErrorMessage)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected string literal"); throw RecoverParseException(); } ExpectedTrapType expectedType; if(!strcmp(expectedErrorMessage.c_str(), "out of bounds memory access")) { expectedType = ExpectedTrapType::outOfBoundsMemoryAccess; } else if(stringStartsWith(expectedErrorMessage.c_str(), "out of bounds data segment access")) { expectedType = ExpectedTrapType::outOfBoundsDataSegmentAccess; } else if(stringStartsWith(expectedErrorMessage.c_str(), "out of bounds elem segment access")) { expectedType = ExpectedTrapType::outOfBoundsElemSegmentAccess; } else if(stringStartsWith(expectedErrorMessage.c_str(), "out of bounds")) { expectedType = ExpectedTrapType::outOfBounds; } else if(!strcmp(expectedErrorMessage.c_str(), "call stack exhausted")) { expectedType = ExpectedTrapType::stackOverflow; } else if(!strcmp(expectedErrorMessage.c_str(), "integer overflow")) { expectedType = ExpectedTrapType::integerDivideByZeroOrIntegerOverflow; } else if(!strcmp(expectedErrorMessage.c_str(), "integer divide by zero")) { expectedType = ExpectedTrapType::integerDivideByZeroOrIntegerOverflow; } else if(!strcmp(expectedErrorMessage.c_str(), "invalid conversion to integer")) { expectedType = ExpectedTrapType::invalidFloatOperation; } else if(!strcmp(expectedErrorMessage.c_str(), "unaligned atomic")) { expectedType = ExpectedTrapType::misalignedAtomicMemoryAccess; } else if(!strcmp(expectedErrorMessage.c_str(), "atomic wait on unshared memory")) { expectedType = ExpectedTrapType::waitOnUnsharedMemory; } else if(stringStartsWith(expectedErrorMessage.c_str(), "unreachable")) { expectedType = ExpectedTrapType::reachedUnreachable; } else if(stringStartsWith(expectedErrorMessage.c_str(), "indirect call")) { expectedType = ExpectedTrapType::indirectCallSignatureMismatch; } else if(stringStartsWith(expectedErrorMessage.c_str(), "undefined")) { expectedType = ExpectedTrapType::outOfBoundsTableAccess; } else if(stringStartsWith(expectedErrorMessage.c_str(), "uninitialized")) { expectedType = ExpectedTrapType::uninitializedTableElement; } else if(stringStartsWith(expectedErrorMessage.c_str(), "invalid argument")) { expectedType = ExpectedTrapType::invalidArgument; } else if(!strcmp(expectedErrorMessage.c_str(), "element segment dropped")) { expectedType = ExpectedTrapType::invalidArgument; } else if(!strcmp(expectedErrorMessage.c_str(), "data segment dropped")) { expectedType = ExpectedTrapType::invalidArgument; } else { parseErrorf(cursor->parseState, errorToken, "unrecognized trap type"); throw RecoverParseException(); } result = std::unique_ptr( new AssertTrapCommand(std::move(locus), std::move(action), expectedType)); break; } case t_assert_throws: { ++cursor->nextToken; std::unique_ptr action = parseAction(cursor, featureSpec); std::string exceptionTypeInternalModuleName = parseOptionalNameAsString(cursor); std::string exceptionTypeExportName = parseUTF8String(cursor); std::vector expectedArguments = parseConstExpressionTuple(cursor); result = std::unique_ptr( new AssertThrowsCommand(std::move(locus), std::move(action), std::move(exceptionTypeInternalModuleName), std::move(exceptionTypeExportName), std::move(expectedArguments))); break; } case t_assert_unlinkable: { ++cursor->nextToken; if(cursor->nextToken[0].type != t_leftParenthesis || cursor->nextToken[1].type != t_module) { parseErrorf(cursor->parseState, cursor->nextToken, "expected module"); throw RecoverParseException(); } std::unique_ptr moduleAction( (ModuleAction*)parseAction(cursor, featureSpec).release()); std::string expectedErrorMessage; if(!tryParseString(cursor, expectedErrorMessage)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected string literal"); throw RecoverParseException(); } result = std::unique_ptr( new AssertUnlinkableCommand(std::move(locus), std::move(moduleAction))); break; } case t_assert_invalid: case t_assert_malformed: { const Command::Type commandType = cursor->nextToken->type == t_assert_invalid ? Command::assert_invalid : Command::assert_malformed; ++cursor->nextToken; std::string internalModuleName; Module module(featureSpec); ParseState* outerParseState = cursor->parseState; ParseState malformedModuleParseState(outerParseState->string, outerParseState->lineInfo); if(commandType == Command::assert_malformed && (cursor->nextToken[0].type != t_leftParenthesis || cursor->nextToken[1].type != t_module || (cursor->nextToken[2].type != t_quote && cursor->nextToken[2].type != t_binary))) { parseErrorf( cursor->parseState, cursor->nextToken, "expected quoted or binary module"); throw RecoverParseException(); } QuotedModuleType quotedModuleType = QuotedModuleType::none; std::string quotedModuleString; try { cursor->parseState = &malformedModuleParseState; parseParenthesized(cursor, [&] { require(cursor, t_module); parseTestScriptModule(cursor, module, internalModuleName, quotedModuleType, quotedModuleString); }); } catch(RecoverParseException const&) { cursor->parseState = outerParseState; throw RecoverParseException(); } cursor->parseState = outerParseState; std::string expectedErrorMessage; if(!tryParseString(cursor, expectedErrorMessage)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected string literal"); throw RecoverParseException(); } // Determine whether the module was invalid or malformed. If there are any syntax // errors, the module is malformed. If there are only validation errors, the module // is invalid. InvalidOrMalformed invalidOrMalformed = InvalidOrMalformed::wellFormedAndValid; for(const UnresolvedError& error : malformedModuleParseState.unresolvedErrors) { if(stringStartsWith(error.message.c_str(), "validation error")) { invalidOrMalformed = InvalidOrMalformed::invalid; } else { invalidOrMalformed = InvalidOrMalformed::malformed; break; } } result = std::unique_ptr( new AssertInvalidOrMalformedCommand(commandType, std::move(locus), invalidOrMalformed, quotedModuleType, std::move(quotedModuleString))); break; } case t_thread: { ++cursor->nextToken; Name threadName; if(!tryParseName(cursor, threadName)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected thread name"); throw RecoverParseException(); } std::vector sharedModuleInternalNames; if(cursor->nextToken[0].type == t_leftParenthesis && cursor->nextToken[1].type == t_shared) { parseParenthesized(cursor, [&] { ++cursor->nextToken; while(cursor->nextToken->type == t_leftParenthesis) { parseParenthesized(cursor, [&] { require(cursor, t_module); Name internalModuleName; if(!tryParseName(cursor, internalModuleName)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected module name"); throw RecoverParseException(); } sharedModuleInternalNames.push_back(internalModuleName.getString()); }); }; }); } std::vector> commands; while(cursor->nextToken->type == t_leftParenthesis) { commands.emplace_back(parseCommand(cursor, featureSpec)); }; result = std::unique_ptr( new ThreadCommand(std::move(locus), threadName.getString(), std::move(sharedModuleInternalNames), std::move(commands))); break; } case t_wait: { ++cursor->nextToken; Name threadName; if(!tryParseName(cursor, threadName)) { parseErrorf(cursor->parseState, cursor->nextToken, "expected thread name"); throw RecoverParseException(); } result = std::unique_ptr( new WaitCommand(std::move(locus), threadName.getString())); break; } default: parseErrorf(cursor->parseState, cursor->nextToken, "unknown script command"); throw RecoverParseException(); }; }); } return result; } void WAST::parseTestCommands(const char* string, Uptr stringLength, const FeatureSpec& featureSpec, std::vector>& outTestCommands, std::vector& outErrors) { // Lex the input string. LineInfo* lineInfo = nullptr; Token* tokens = lex(string, stringLength, lineInfo, featureSpec.allowLegacyInstructionNames); ParseState parseState(string, lineInfo); CursorState cursor(tokens, &parseState); try { // Support test scripts that are just an inline module. if(cursor.nextToken[0].type == t_leftParenthesis && (cursor.nextToken[1].type == t_import || cursor.nextToken[1].type == t_export || cursor.nextToken[1].type == t_exception_type || cursor.nextToken[1].type == t_global || cursor.nextToken[1].type == t_memory || cursor.nextToken[1].type == t_table || cursor.nextToken[1].type == t_type || cursor.nextToken[1].type == t_data || cursor.nextToken[1].type == t_elem || cursor.nextToken[1].type == t_func || cursor.nextToken[1].type == t_start)) { const TextFileLocus locus = calcLocusFromOffset(string, lineInfo, cursor.nextToken[0].begin); std::unique_ptr module{new Module(featureSpec)}; parseModuleBody(&cursor, *module); std::unique_ptr moduleAction{ new ModuleAction(TextFileLocus(locus), "", std::move(module))}; auto actionCommand = new ActionCommand(TextFileLocus(locus), std::move(moduleAction)); outTestCommands.emplace_back(actionCommand); } else { // (command)* while(cursor.nextToken->type == t_leftParenthesis) { outTestCommands.emplace_back(parseCommand(&cursor, featureSpec)); }; } require(&cursor, t_eof); } catch(RecoverParseException const&) { } catch(FatalParseException const&) { } // Resolve line information for any errors, and write them to outErrors. for(auto& unresolvedError : parseState.unresolvedErrors) { TextFileLocus locus = calcLocusFromOffset(string, lineInfo, unresolvedError.charOffset); outErrors.push_back({std::move(locus), std::move(unresolvedError.message)}); } // Free the tokens and line info. freeTokens(tokens); freeLineInfo(lineInfo); } ================================================ FILE: Lib/WASTPrint/CMakeLists.txt ================================================ set(Sources Print.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/WASTPrint/WASTPrint.h) WAVM_ADD_LIB_COMPONENT(WASTPrint SOURCES ${Sources} HEADERS ${PublicHeaders}) ================================================ FILE: Lib/WASTPrint/Print.cpp ================================================ #include #include #include #include #include #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/IsNameChar.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/WASTPrint/WASTPrint.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Serialization; #define INDENT_STRING "\xE0\x01" #define DEDENT_STRING "\xE0\x02" static char nibbleToHexChar(U8 value) { return value < 10 ? ('0' + value) : 'a' + value - 10; } static std::string escapeString(const char* string, Uptr numChars) { std::string result; for(Uptr charIndex = 0; charIndex < numChars; ++charIndex) { auto c = string[charIndex]; if(c == '\\') { result += "\\\\"; } else if(c == '\"') { result += "\\\""; } else if(c == '\n') { result += "\\n"; } else if(c < 0x20 || c > 0x7e) { result += '\\'; result += nibbleToHexChar((c & 0xf0) >> 4); result += nibbleToHexChar((c & 0x0f) >> 0); } else { result += c; } } return result; } static std::string escapeString(const std::string& string) { return escapeString(string.c_str(), string.size()); } static std::string escapeName(const std::string& name) { std::string escapedName; for(char c : name) { if(c == '(') { escapedName += "_lparen_"; } else if(c == ')') { escapedName += "_rparen_"; } else if(c == ' ') { escapedName += '_'; } else if(!isNameChar(c)) { escapedName += '_'; escapedName += nibbleToHexChar((c & 0xf0) >> 4); escapedName += nibbleToHexChar((c & 0x0f) >> 0); escapedName += '_'; } else { escapedName += c; } } return escapedName; } static bool hasNonNameChars(const std::string& name) { for(char c : name) { if(!isNameChar(c)) { return true; } } return false; } static std::string expandIndentation(std::string&& inString, U8 spacesPerIndentLevel = 2) { std::string paddedInput = std::move(inString); paddedInput += '\0'; std::string result; result.reserve(paddedInput.size() * 2); const char* next = paddedInput.data(); const char* end = paddedInput.data() + paddedInput.size() - 1; Uptr indentDepth = 0; while(next < end) { // Absorb INDENT_STRING and DEDENT_STRING, but keep track of the indentation depth, and // insert a proportional number of spaces following newlines. if(next[0] == INDENT_STRING[0] && next[1] == INDENT_STRING[1]) { ++indentDepth; next += 2; } else if(next[0] == DEDENT_STRING[0] && next[1] == DEDENT_STRING[1]) { WAVM_ERROR_UNLESS(indentDepth > 0); --indentDepth; next += 2; } else if(*next == '\n') { result += '\n'; result.insert(result.end(), indentDepth * spacesPerIndentLevel, ' '); ++next; } else { result += *next++; } } return result; } struct ScopedTagPrinter { ScopedTagPrinter(std::string& inString, const char* tag) : string(inString) { string += "("; string += tag; string += INDENT_STRING; } ~ScopedTagPrinter() { string += DEDENT_STRING ")"; } private: std::string& string; }; static void print(std::string& string, ValueType type) { string += asString(type); } static void print(std::string& string, const SizeConstraints& size) { string += std::to_string(size.min); if(size.max != UINT64_MAX) { string += ' '; string += std::to_string(size.max); } } static void print(std::string& string, FunctionType functionType) { // Print the function parameters. if(functionType.params().size()) { string += ' '; ScopedTagPrinter paramTag(string, "param"); for(Uptr paramIndex = 0; paramIndex < functionType.params().size(); ++paramIndex) { string += ' '; print(string, functionType.params()[paramIndex]); } } // Print the function return types. if(functionType.results().size()) { string += ' '; ScopedTagPrinter paramTag(string, "result"); for(Uptr resultIndex = 0; resultIndex < functionType.results().size(); ++resultIndex) { string += ' '; print(string, functionType.results()[resultIndex]); } } switch(functionType.callingConvention()) { case CallingConvention::wasm: break; case CallingConvention::intrinsic: string += " (calling_conv intrinsic)"; break; case CallingConvention::intrinsicWithContextSwitch: string += " (calling_conv intrinsic_with_context_switch)"; break; case CallingConvention::c: string += " (calling_conv c)"; break; case CallingConvention::cAPICallback: string += " (calling_conv c_api_callback)"; break; default: WAVM_UNREACHABLE(); } } static void print(std::string& string, ReferenceType type) { switch(type) { case ReferenceType::funcref: string += "funcref"; break; case ReferenceType::externref: string += "externref"; break; case ReferenceType::none: default: WAVM_UNREACHABLE(); } } static void print(std::string& string, IndexType type) { switch(type) { case IndexType::i32: string += "i32"; break; case IndexType::i64: string += "i64"; break; default: WAVM_UNREACHABLE(); } } static void print(std::string& string, const TableType& type) { string += ' '; if(type.indexType != IndexType::i32) { print(string, type.indexType); string += ' '; } print(string, type.size); if(type.isShared) { string += " shared"; } string += ' '; print(string, type.elementType); } static void print(std::string& string, const MemoryType& type) { string += ' '; if(type.indexType != IndexType::i32) { print(string, type.indexType); string += ' '; } print(string, type.size); if(type.isShared) { string += " shared"; } } static void print(std::string& string, GlobalType type) { string += ' '; if(type.isMutable) { string += "(mut "; } print(string, type.valueType); if(type.isMutable) { string += ")"; } } static void print(std::string& string, const ExceptionType& type) { for(ValueType param : type.params) { string += ' '; print(string, param); } } static void printReferencedType(std::string& string, const ReferenceType type) { switch(type) { case ReferenceType::funcref: string += "func"; break; case ReferenceType::externref: string += "extern"; break; case ReferenceType::none: default: WAVM_UNREACHABLE(); }; } struct NameScope { NameScope(const char inSigil, bool inAllowQuotedNames, Uptr estimatedNumElements) : sigil(inSigil) , allowQuotedNames(inAllowQuotedNames) , nameSet(estimatedNumElements) , nameToUniqueIndexMap() { } void map(std::string& name) { std::string baseName = name.size() ? name + '_' : name; // If the name hasn't been taken yet, use it without a suffix. // Otherwise, find the first instance of the name with a numeric suffix that isn't taken. if(!name.size() || !nameSet.add(name)) { Uptr& numPrecedingDuplicates = nameToUniqueIndexMap.getOrAdd(name, 0); do { name = baseName + std::to_string(numPrecedingDuplicates); ++numPrecedingDuplicates; } while(!nameSet.add(name)); } if(!allowQuotedNames) { name = escapeName(name); } else if(hasNonNameChars(name)) { name = '\"' + escapeString(name.data(), name.size()) + '\"'; } name = sigil + name; } private: char sigil; bool allowQuotedNames; HashSet nameSet; HashMap nameToUniqueIndexMap; }; struct ModulePrintContext { const Module& module; std::string& string; DisassemblyNames names; ModulePrintContext(const Module& inModule, std::string& inString) : module(inModule), string(inString) { // Start with the names from the module's user name section, but make sure they are unique, // and add the "$" sigil. IR::getDisassemblyNames(module, names); const Uptr numGlobalNames = names.types.size() + names.tables.size() + names.memories.size() + names.globals.size() + names.exceptionTypes.size(); NameScope globalNameScope('$', module.featureSpec.quotedNamesInTextFormat, numGlobalNames); for(auto& name : names.types) { globalNameScope.map(name); } for(auto& name : names.tables) { globalNameScope.map(name); } for(auto& name : names.memories) { globalNameScope.map(name); } for(auto& name : names.globals) { globalNameScope.map(name); } for(auto& name : names.elemSegments) { globalNameScope.map(name); } for(auto& name : names.dataSegments) { globalNameScope.map(name); } for(auto& name : names.exceptionTypes) { globalNameScope.map(name); } for(auto& function : names.functions) { globalNameScope.map(function.name); NameScope localNameScope( '$', module.featureSpec.quotedNamesInTextFormat, function.locals.size()); for(auto& name : function.locals) { localNameScope.map(name); } } } void printModule(); void printCustomSectionsAfterKnownSection(OrderedSectionID sectionID); void printLinkingSection(const IR::CustomSection& linkingSection); void printInitializerExpression(const InitializerExpression& expression) { switch(expression.type) { case InitializerExpression::Type::i32_const: string += "(i32.const " + std::to_string(expression.i32) + ')'; break; case InitializerExpression::Type::i64_const: string += "(i64.const " + std::to_string(expression.i64) + ')'; break; case InitializerExpression::Type::f32_const: string += "(f32.const " + asString(expression.f32) + ')'; break; case InitializerExpression::Type::f64_const: string += "(f64.const " + asString(expression.f64) + ')'; break; case InitializerExpression::Type::v128_const: string += "(v128.const " + asString(expression.v128) + ')'; break; case InitializerExpression::Type::global_get: string += "(global.get " + names.globals[expression.ref] + ')'; break; case InitializerExpression::Type::ref_null: string += "(ref.null "; printReferencedType(string, expression.nullReferenceType); string += ')'; break; case InitializerExpression::Type::ref_func: string += "(ref.func " + names.functions[expression.ref].name + ')'; break; case InitializerExpression::Type::invalid: default: WAVM_UNREACHABLE(); }; } }; struct FunctionPrintContext { typedef void Result; ModulePrintContext& moduleContext; const Module& module; const FunctionDef& functionDef; FunctionType functionType; std::string& string; const std::vector& labelNames; const std::vector& localNames; NameScope labelNameScope; Uptr labelIndex; FunctionPrintContext(ModulePrintContext& inModuleContext, Uptr functionDefIndex) : moduleContext(inModuleContext) , module(inModuleContext.module) , functionDef(inModuleContext.module.functions.defs[functionDefIndex]) , functionType(inModuleContext.module.types[functionDef.type.index]) , string(inModuleContext.string) , labelNames(inModuleContext.names.functions[module.functions.imports.size() + functionDefIndex] .labels) , localNames(inModuleContext.names.functions[module.functions.imports.size() + functionDefIndex] .locals) , labelNameScope('$', inModuleContext.module.featureSpec.quotedNamesInTextFormat, 4) , labelIndex(0) { } void printFunctionBody(); void block(ControlStructureImm imm) { string += "\nblock"; std::string labelId = printControlLabel("block"); printControlSignature(imm.type); pushControlStack(ControlContext::Type::block, labelId); } void loop(ControlStructureImm imm) { string += "\nloop"; std::string labelId = printControlLabel("loop"); printControlSignature(imm.type); pushControlStack(ControlContext::Type::loop, labelId); } void if_(ControlStructureImm imm) { string += "\nif"; std::string labelId = printControlLabel("if"); printControlSignature(imm.type); pushControlStack(ControlContext::Type::ifThen, labelId); } void else_(NoImm imm) { string += DEDENT_STRING; controlStack.back().type = ControlContext::Type::ifElse; string += "\nelse" INDENT_STRING; } void end(NoImm) { string += DEDENT_STRING; if(controlStack.back().type != ControlContext::Type::function) { string += "\nend ;; "; string += controlStack.back().labelId; } controlStack.pop_back(); } void return_(NoImm) { string += "\nreturn"; enterUnreachable(); } void br(BranchImm imm) { string += "\nbr " + getBranchTargetId(imm.targetDepth); enterUnreachable(); } void br_table(BranchTableImm imm) { string += "\nbr_table" INDENT_STRING; static constexpr Uptr numTargetsPerLine = 16; WAVM_ASSERT(imm.branchTableIndex < functionDef.branchTables.size()); const std::vector& targetDepths = functionDef.branchTables[imm.branchTableIndex]; for(Uptr targetIndex = 0; targetIndex < targetDepths.size(); ++targetIndex) { if(targetIndex % numTargetsPerLine == 0) { string += '\n'; } else { string += ' '; } string += getBranchTargetId(targetDepths[targetIndex]); } string += '\n'; string += getBranchTargetId(imm.defaultTargetDepth); string += " ;; default" DEDENT_STRING; enterUnreachable(); } void br_if(BranchImm imm) { string += "\nbr_if " + getBranchTargetId(imm.targetDepth); } void unreachable(NoImm) { string += "\nunreachable"; enterUnreachable(); } void drop(NoImm) { string += "\ndrop"; } void select(SelectImm imm) { if(imm.type == ValueType::any) { string += "\nselect"; } else { string += "\nselect (result "; string += asString(imm.type); string += ")"; } } void local_get(GetOrSetVariableImm imm) { string += "\nlocal.get " + localNames[imm.variableIndex]; } void local_set(GetOrSetVariableImm imm) { string += "\nlocal.set " + localNames[imm.variableIndex]; } void local_tee(GetOrSetVariableImm imm) { string += "\nlocal.tee " + localNames[imm.variableIndex]; } void global_get(GetOrSetVariableImm imm) { string += "\nglobal.get " + moduleContext.names.globals[imm.variableIndex]; } void global_set(GetOrSetVariableImm imm) { string += "\nglobal.set " + moduleContext.names.globals[imm.variableIndex]; } void table_get(TableImm imm) { string += "\ntable.get " + moduleContext.names.tables[imm.tableIndex]; } void table_set(TableImm imm) { string += "\ntable.set " + moduleContext.names.tables[imm.tableIndex]; } void table_grow(TableImm imm) { string += "\ntable.grow " + moduleContext.names.tables[imm.tableIndex]; } void table_fill(TableImm imm) { string += "\ntable.fill " + moduleContext.names.tables[imm.tableIndex]; } void throw_(ExceptionTypeImm imm) { string += "\nthrow " + moduleContext.names.exceptionTypes[imm.exceptionTypeIndex]; } void rethrow(RethrowImm imm) { WAVM_ASSERT(controlStack[controlStack.size() - 1 - imm.catchDepth].type == ControlContext::Type::catch_); string += "\nrethrow " + getBranchTargetId(imm.catchDepth); } void ref_null(ReferenceTypeImm imm) { string += "\nref.null "; printReferencedType(string, imm.referenceType); } void ref_is_null(NoImm) { string += "\nref.is_null"; } void call(FunctionImm imm) { string += "\ncall " + moduleContext.names.functions[imm.functionIndex].name; } void call_indirect(CallIndirectImm imm) { string += "\ncall_indirect " + moduleContext.names.tables[imm.tableIndex]; string += " (type " + moduleContext.names.types[imm.type.index] + ')'; } void printControlSignature(IndexedBlockType indexedSignature) { FunctionType signature = resolveBlockType(module, indexedSignature); print(string, signature); } void printImm(NoImm) {} void printImm(MemoryImm imm) { if(imm.memoryIndex != 0) { string += ' '; string += moduleContext.names.memories[imm.memoryIndex]; } } void printImm(MemoryCopyImm imm) { if(imm.destMemoryIndex != 0 || imm.sourceMemoryIndex != imm.destMemoryIndex) { string += ' '; string += moduleContext.names.memories[imm.destMemoryIndex]; } if(imm.sourceMemoryIndex != imm.destMemoryIndex) { string += ' '; string += moduleContext.names.memories[imm.sourceMemoryIndex]; } } void printImm(TableImm imm) { string += ' '; string += moduleContext.names.tables[imm.tableIndex]; } void printImm(TableCopyImm imm) { if(imm.destTableIndex != 0 || imm.sourceTableIndex != imm.destTableIndex) { string += ' '; string += moduleContext.names.tables[imm.destTableIndex]; } if(imm.sourceTableIndex != imm.destTableIndex) { string += ' '; string += moduleContext.names.tables[imm.sourceTableIndex]; } } void printImm(FunctionImm imm) { string += ' '; string += moduleContext.names.functions[imm.functionIndex].name; } void printImm(FunctionRefImm imm) { string += ' '; string += moduleContext.names.functions[imm.functionIndex].name; } void printImm(LiteralImm imm) { string += ' '; string += std::to_string(imm.value); } void printImm(LiteralImm imm) { string += ' '; string += std::to_string(imm.value); } void printImm(LiteralImm imm) { string += ' '; string += asString(imm.value); } void printImm(LiteralImm imm) { string += ' '; string += asString(imm.value); } template void printImm(LoadOrStoreImm imm) { if(imm.memoryIndex != 0) { string += ' '; string += moduleContext.names.memories[imm.memoryIndex]; } if(imm.offset != 0) { string += " offset="; string += std::to_string(imm.offset); } if(imm.alignmentLog2 != naturalAlignmentLog2) { string += " align="; string += std::to_string(1 << imm.alignmentLog2); } } template void printImm(LoadOrStoreLaneImm imm) { printImm(static_cast&>(imm)); string += ' '; string += std::to_string(imm.laneIndex); } void printImm(LiteralImm imm) { string += ' '; string += asString(imm.value); } template void printImm(LaneIndexImm imm) { string += ' '; string += std::to_string(imm.laneIndex); } template void printImm(ShuffleImm imm) { for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { string += ' '; string += std::to_string(imm.laneIndices[laneIndex]); } } template void printImm(AtomicLoadOrStoreImm imm) { if(imm.memoryIndex != 0) { string += ' '; string += moduleContext.names.memories[imm.memoryIndex]; } if(imm.offset != 0) { string += " offset="; string += std::to_string(imm.offset); } WAVM_ASSERT(imm.alignmentLog2 == naturalAlignmentLog2); } void printImm(AtomicFenceImm imm) { switch(imm.order) { case MemoryOrder::sequentiallyConsistent: break; default: WAVM_UNREACHABLE(); }; } void printImm(DataSegmentAndMemImm imm) { if(imm.memoryIndex != 0) { string += " " + moduleContext.names.memories[imm.memoryIndex]; } string += " " + moduleContext.names.dataSegments[imm.dataSegmentIndex]; } void printImm(DataSegmentImm imm) { string += " " + moduleContext.names.dataSegments[imm.dataSegmentIndex]; } void printImm(ElemSegmentAndTableImm imm) { if(imm.tableIndex != 0) { string += " " + moduleContext.names.tables[imm.tableIndex]; } string += " " + moduleContext.names.elemSegments[imm.elemSegmentIndex]; } void printImm(ElemSegmentImm imm) { string += " " + moduleContext.names.elemSegments[imm.elemSegmentIndex]; } void try_(ControlStructureImm imm) { string += "\ntry"; std::string labelId = printControlLabel("try"); pushControlStack(ControlContext::Type::try_, labelId); printControlSignature(imm.type); } void catch_(ExceptionTypeImm imm) { string += DEDENT_STRING; controlStack.back().type = ControlContext::Type::catch_; string += "\ncatch "; string += moduleContext.names.exceptionTypes[imm.exceptionTypeIndex]; string += INDENT_STRING; } void catch_all(NoImm) { string += DEDENT_STRING; controlStack.back().type = ControlContext::Type::catch_; string += "\ncatch_all" INDENT_STRING; } #define PRINT_OP(opcode, name, nameString, Imm, printOperands, requiredFeature) \ void name(Imm imm) \ { \ WAVM_ASSERT(module.featureSpec.requiredFeature); \ string += "\n" nameString; \ printImm(imm); \ } WAVM_ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(PRINT_OP) WAVM_ENUM_INDEX_POLYMORPHIC_OPERATORS(PRINT_OP) #undef VALIDATE_OP private: struct ControlContext { enum class Type : U8 { function, block, ifThen, ifElse, loop, try_, catch_, }; Type type; std::string labelId; }; std::vector controlStack; std::string getBranchTargetId(Uptr depth) { const ControlContext& controlContext = controlStack[controlStack.size() - depth - 1]; return controlContext.type == ControlContext::Type::function ? std::to_string(depth) : controlContext.labelId; } std::string printControlLabel(const char* labelIdBase) { std::string labelId = labelIndex < labelNames.size() ? labelNames[labelIndex] : labelIdBase; labelNameScope.map(labelId); string += ' '; string += labelId; ++labelIndex; return labelId; } void pushControlStack(ControlContext::Type type, std::string labelId) { controlStack.push_back({type, labelId}); string += INDENT_STRING; } void enterUnreachable() {} }; template void printImportType(std::string& string, const Module& module, Type type) { print(string, type); } template<> void printImportType(std::string& string, const Module& module, IndexedFunctionType type) { print(string, module.types[type.index]); } template void printImport(std::string& string, const Module& module, const Import& import, Uptr importIndex, const char* name, const char* typeTag) { string += '\n'; ScopedTagPrinter importTag(string, "import"); string += " \""; string += escapeString(import.moduleName.c_str(), import.moduleName.length()); string += "\" \""; string += escapeString(import.exportName.c_str(), import.exportName.length()); string += "\" ("; string += typeTag; string += ' '; string += name; printImportType(string, module, import.type); string += ')'; } void ModulePrintContext::printModule() { ScopedTagPrinter moduleTag(string, "module"); // Print the custom sections that precede all known sections. printCustomSectionsAfterKnownSection(OrderedSectionID::moduleBeginning); // Print the types. for(Uptr typeIndex = 0; typeIndex < module.types.size(); ++typeIndex) { string += '\n'; ScopedTagPrinter typeTag(string, "type"); string += ' '; string += names.types[typeIndex]; string += " (func"; print(string, module.types[typeIndex]); string += ')'; } printCustomSectionsAfterKnownSection(OrderedSectionID::type); // Print the module imports. for(const auto& import : module.imports) { switch(import.kind) { case ExternKind::function: printImport(string, module, module.functions.imports[import.index], import.index, names.functions[import.index].name.c_str(), "func"); break; case ExternKind::table: printImport(string, module, module.tables.imports[import.index], import.index, names.tables[import.index].c_str(), "table"); break; case ExternKind::memory: printImport(string, module, module.memories.imports[import.index], import.index, names.memories[import.index].c_str(), "memory"); break; case ExternKind::global: printImport(string, module, module.globals.imports[import.index], import.index, names.globals[import.index].c_str(), "global"); break; case ExternKind::exceptionType: printImport(string, module, module.exceptionTypes.imports[import.index], import.index, names.exceptionTypes[import.index].c_str(), "exception_type"); break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } printCustomSectionsAfterKnownSection(OrderedSectionID::import); // Print the custom sections that are meant to occur after the function declaration section // here. The text format prints the function declarations later, at the same time as their code, // but printing the custom sections here maintains the same custom section order as a binary // module. printCustomSectionsAfterKnownSection(OrderedSectionID::function); // Print the module memory definitions. for(Uptr defIndex = 0; defIndex < module.memories.defs.size(); ++defIndex) { const MemoryDef& memoryDef = module.memories.defs[defIndex]; string += '\n'; ScopedTagPrinter memoryTag(string, "memory"); string += ' '; string += names.memories[module.memories.imports.size() + defIndex]; string += ' '; print(string, memoryDef.type); } printCustomSectionsAfterKnownSection(OrderedSectionID::memory); // Print the module table definitions. for(Uptr defIndex = 0; defIndex < module.tables.defs.size(); ++defIndex) { const TableDef& tableDef = module.tables.defs[defIndex]; string += '\n'; ScopedTagPrinter memoryTag(string, "table"); string += ' '; string += names.tables[module.tables.imports.size() + defIndex]; string += ' '; print(string, tableDef.type); } printCustomSectionsAfterKnownSection(OrderedSectionID::table); // Print the module global definitions. for(Uptr defIndex = 0; defIndex < module.globals.defs.size(); ++defIndex) { const GlobalDef& globalDef = module.globals.defs[defIndex]; string += '\n'; ScopedTagPrinter memoryTag(string, "global"); string += ' '; string += names.globals[module.globals.imports.size() + defIndex]; string += ' '; print(string, globalDef.type); string += ' '; printInitializerExpression(globalDef.initializer); } printCustomSectionsAfterKnownSection(OrderedSectionID::global); // Print the module exception type definitions. for(Uptr defIndex = 0; defIndex < module.exceptionTypes.defs.size(); ++defIndex) { const ExceptionTypeDef& exceptionTypeDef = module.exceptionTypes.defs[defIndex]; string += '\n'; ScopedTagPrinter exceptionTypeTag(string, "exception_type"); string += ' '; string += names.exceptionTypes[module.exceptionTypes.imports.size() + defIndex]; print(string, exceptionTypeDef.type); } printCustomSectionsAfterKnownSection(OrderedSectionID::exceptionType); // Print the module exports. for(auto export_ : module.exports) { string += '\n'; ScopedTagPrinter exportTag(string, "export"); string += " \""; string += escapeString(export_.name.c_str(), export_.name.length()); string += "\" ("; switch(export_.kind) { case ExternKind::function: string += "func " + names.functions[export_.index].name; break; case ExternKind::table: string += "table " + names.tables[export_.index]; break; case ExternKind::memory: string += "memory " + names.memories[export_.index]; break; case ExternKind::global: string += "global " + names.globals[export_.index]; break; case ExternKind::exceptionType: string += "exception_type " + names.exceptionTypes[export_.index]; break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; string += ')'; } printCustomSectionsAfterKnownSection(OrderedSectionID::export_); // Print the start function. if(module.startFunctionIndex != UINTPTR_MAX) { string += '\n'; ScopedTagPrinter startTag(string, "start"); string += ' '; string += names.functions[module.startFunctionIndex].name; } printCustomSectionsAfterKnownSection(OrderedSectionID::start); // Print the elem segments. for(Uptr segmentIndex = 0; segmentIndex < module.elemSegments.size(); ++segmentIndex) { const ElemSegment& elemSegment = module.elemSegments[segmentIndex]; string += '\n'; ScopedTagPrinter dataTag(string, "elem"); string += ' '; string += names.elemSegments[segmentIndex]; if(elemSegment.type == ElemSegment::Type::active) { if(elemSegment.tableIndex != 0) { string += " (table "; string += names.tables[elemSegment.tableIndex]; string += ")"; } string += ' '; printInitializerExpression(elemSegment.baseOffset); } else if(elemSegment.type == ElemSegment::Type::declared) { string += " declare"; } if(elemSegment.contents->encoding == ElemSegment::Encoding::index) { if(elemSegment.contents->externKind != ExternKind::function) { switch(elemSegment.contents->externKind) { case ExternKind::function: string += " func"; break; case ExternKind::table: string += " table"; break; case ExternKind::memory: string += " memory"; break; case ExternKind::global: string += " global"; break; case ExternKind::exceptionType: string += " exception_type"; break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } static constexpr Uptr numElemsPerLine = 8; for(Uptr elementIndex = 0; elementIndex < elemSegment.contents->elemIndices.size(); ++elementIndex) { const Uptr externIndex = elemSegment.contents->elemIndices[elementIndex]; string += (elementIndex % numElemsPerLine == 0) ? '\n' : ' '; switch(elemSegment.contents->externKind) { case ExternKind::function: string += names.functions[externIndex].name; break; case ExternKind::table: string += names.tables[externIndex]; break; case ExternKind::memory: string += names.memories[externIndex]; break; case ExternKind::global: string += names.globals[externIndex]; break; case ExternKind::exceptionType: string += names.exceptionTypes[externIndex]; break; case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } } else { switch(elemSegment.contents->elemType) { case ReferenceType::externref: string += " externref"; break; case ReferenceType::funcref: string += " funcref"; break; case ReferenceType::none: default: WAVM_UNREACHABLE(); }; constexpr Uptr numElemsPerLine = 4; for(Uptr elementIndex = 0; elementIndex < elemSegment.contents->elemExprs.size(); ++elementIndex) { const ElemExpr& elemExpr = elemSegment.contents->elemExprs[elementIndex]; string += (elementIndex % numElemsPerLine == 0) ? '\n' : ' '; switch(elemExpr.type) { case ElemExpr::Type::ref_null: string += "(ref.null "; printReferencedType(string, elemExpr.nullReferenceType); string += ')'; break; case ElemExpr::Type::ref_func: WAVM_ASSERT(elemExpr.index < names.functions.size()); string += "(ref.func "; string += names.functions[elemExpr.index].name; string += ')'; break; case ElemExpr::Type::invalid: default: WAVM_UNREACHABLE(); }; } } } printCustomSectionsAfterKnownSection(OrderedSectionID::elem); // The data count section is not directly represented in the text format, but print the custom // sections that follow it here. printCustomSectionsAfterKnownSection(OrderedSectionID::dataCount); // Print the function definitions. for(Uptr functionDefIndex = 0; functionDefIndex < module.functions.defs.size(); ++functionDefIndex) { const Uptr functionIndex = module.functions.imports.size() + functionDefIndex; const FunctionDef& functionDef = module.functions.defs[functionDefIndex]; FunctionType functionType = module.types[functionDef.type.index]; FunctionPrintContext functionContext(*this, functionDefIndex); string += "\n\n"; ScopedTagPrinter funcTag(string, "func"); string += ' '; string += names.functions[functionIndex].name; // Print the function's type. string += " (type "; string += names.types[functionDef.type.index]; string += ')'; // Print the function parameters. if(functionType.params().size()) { for(Uptr parameterIndex = 0; parameterIndex < functionType.params().size(); ++parameterIndex) { string += '\n'; ScopedTagPrinter paramTag(string, "param"); string += ' '; string += functionContext.localNames[parameterIndex]; string += ' '; print(string, functionType.params()[parameterIndex]); } } // Print the function return type. if(functionType.results().size()) { string += '\n'; ScopedTagPrinter resultTag(string, "result"); for(Uptr resultIndex = 0; resultIndex < functionType.results().size(); ++resultIndex) { string += ' '; print(string, functionType.results()[resultIndex]); } } // Print the function's locals. for(Uptr localIndex = 0; localIndex < functionDef.nonParameterLocalTypes.size(); ++localIndex) { string += '\n'; ScopedTagPrinter localTag(string, "local"); string += ' '; string += functionContext.localNames[functionType.params().size() + localIndex]; string += ' '; print(string, functionDef.nonParameterLocalTypes[localIndex]); } functionContext.printFunctionBody(); } printCustomSectionsAfterKnownSection(OrderedSectionID::code); // Print the data segments for(Uptr segmentIndex = 0; segmentIndex < module.dataSegments.size(); ++segmentIndex) { const DataSegment& dataSegment = module.dataSegments[segmentIndex]; string += "\n\n"; ScopedTagPrinter dataTag(string, "data"); string += ' '; string += names.dataSegments[segmentIndex]; string += ' '; if(dataSegment.isActive) { if(dataSegment.memoryIndex != 0) { string += "(memory "; string += names.memories[dataSegment.memoryIndex]; string += ") "; } printInitializerExpression(dataSegment.baseOffset); } static constexpr Uptr numBytesPerLine = 64; for(Uptr offset = 0; offset < dataSegment.data->size(); offset += numBytesPerLine) { string += "\n\""; string += escapeString( (const char*)dataSegment.data->data() + offset, std::min(Uptr(dataSegment.data->size()) - offset, Uptr(numBytesPerLine))); string += "\""; } } printCustomSectionsAfterKnownSection(OrderedSectionID::data); } void ModulePrintContext::printCustomSectionsAfterKnownSection(OrderedSectionID afterSection) { // Print custom sections (other than the name section) that are tagged as occurring after the // given section ID. for(const auto& customSection : module.customSections) { if(customSection.afterSection == afterSection) { if(customSection.name == "linking") { printLinkingSection(customSection); } if(customSection.name != "name") { string += "\n\n"; if(!module.featureSpec.customSectionsInTextFormat) { string += ";;"; } string += "(custom_section \""; string += escapeString(customSection.name.c_str(), customSection.name.length()); string += '\"'; if(module.featureSpec.customSectionsInTextFormat) { string += INDENT_STRING; } if(customSection.afterSection != OrderedSectionID::moduleBeginning) { string += '\n'; if(!module.featureSpec.customSectionsInTextFormat) { string += ";; "; } string += "(after "; string += asString(customSection.afterSection); string += ')'; } static constexpr Uptr numBytesPerLine = 32; for(Uptr offset = 0; offset < customSection.data.size(); offset += numBytesPerLine) { string += '\n'; if(!module.featureSpec.customSectionsInTextFormat) { string += ";; "; } string += '\"'; string += escapeString( (const char*)customSection.data.data() + offset, std::min(Uptr(customSection.data.size()) - offset, Uptr(numBytesPerLine))); string += "\""; } string += ')'; if(module.featureSpec.customSectionsInTextFormat) { string += DEDENT_STRING; } string += "\n\n"; } } } } void ModulePrintContext::printLinkingSection(const IR::CustomSection& linkingSection) { enum class LinkingSubsectionType { invalid = 0, segmentInfo = 5, initFuncs = 6, comdatInfo = 7, symbolTable = 8, }; enum class COMDATKind { data = 0, function = 1, global = 2, }; enum class SymbolKind { function = 0, data = 1, global = 2, section = 3, }; // Print a comment that describes the contents of the linking section. std::string linkingSectionString; Uptr indentDepth = 1; linkingSectionString += "\n;; linking section:" INDENT_STRING; try { MemoryInputStream stream(linkingSection.data.data(), linkingSection.data.size()); U32 version = 1; serializeVarUInt32(stream, version); linkingSectionString += "\n;; Version: " + std::to_string(version); while(stream.capacity()) { U8 subsectionType = (U8)LinkingSubsectionType::invalid; serializeNativeValue(stream, subsectionType); Uptr numSubsectionBytes = 0; serializeVarUInt32(stream, numSubsectionBytes); MemoryInputStream substream(stream.advance(numSubsectionBytes), numSubsectionBytes); switch((LinkingSubsectionType)subsectionType) { case LinkingSubsectionType::segmentInfo: { linkingSectionString += "\n;; Segments:" INDENT_STRING; ++indentDepth; Uptr numSegments = 0; serializeVarUInt32(substream, numSegments); for(Uptr segmentIndex = 0; segmentIndex < numSegments; ++segmentIndex) { std::string segmentName; serialize(substream, segmentName); Uptr alignmentLog2 = 0; Uptr flags = 0; serializeVarUInt32(substream, alignmentLog2); serializeVarUInt32(substream, flags); linkingSectionString += "\n;; \""; linkingSectionString += escapeString(segmentName); linkingSectionString += "\" alignment=2^" + std::to_string(alignmentLog2); linkingSectionString += " flags=" + std::to_string(flags); } linkingSectionString += DEDENT_STRING; --indentDepth; break; } case LinkingSubsectionType::initFuncs: { linkingSectionString += "\n;; Init funcs:" INDENT_STRING; ++indentDepth; Uptr numInitFuncs = 0; serializeVarUInt32(substream, numInitFuncs); for(Uptr initFuncIndex = 0; initFuncIndex < numInitFuncs; ++initFuncIndex) { Uptr functionIndex = 0; serializeVarUInt32(substream, functionIndex); linkingSectionString += "\n;; "; if(functionIndex < names.functions.size()) { linkingSectionString += names.functions[functionIndex].name; } else { linkingSectionString += ""; } } linkingSectionString += DEDENT_STRING; --indentDepth; break; } case LinkingSubsectionType::comdatInfo: { linkingSectionString += "\n;; Comdats:" INDENT_STRING; ++indentDepth; Uptr numComdats = 0; serializeVarUInt32(substream, numComdats); for(Uptr comdatIndex = 0; comdatIndex < numComdats; ++comdatIndex) { std::string comdatName; serialize(substream, comdatName); U32 flags = 0; serializeVarUInt32(substream, flags); linkingSectionString += "\n;; \""; linkingSectionString += escapeString(comdatName); linkingSectionString += '\"'; if(flags) { linkingSectionString += " OtherFlags=" + std::to_string(flags); } linkingSectionString += INDENT_STRING; ++indentDepth; Uptr numSymbols = 0; serializeVarUInt32(substream, numSymbols); for(Uptr symbolIndex = 0; symbolIndex < numSymbols; ++symbolIndex) { U32 kind = 0; U32 index = 0; serializeVarUInt32(substream, kind); serializeVarUInt32(substream, index); linkingSectionString += "\n;; Symbol: "; switch((COMDATKind)kind) { case COMDATKind::data: linkingSectionString += "data segment "; linkingSectionString += std::to_string(index); break; case COMDATKind::function: linkingSectionString += "function "; if(index >= names.functions.size()) { linkingSectionString += "Invalid COMDAT function index " + std::to_string(index); throw FatalSerializationException("Invalid COMDAT function index"); } linkingSectionString += names.functions[index].name; break; case COMDATKind::global: linkingSectionString += "global "; if(index >= names.globals.size()) { linkingSectionString += "Invalid COMDAT global index " + std::to_string(index); throw FatalSerializationException("Invalid COMDAT global index"); } linkingSectionString += names.globals[index]; break; default: linkingSectionString += "\n;; Unknown comdat kind: " + std::to_string(kind); throw FatalSerializationException("Unknown COMDAT kind"); break; }; } linkingSectionString += DEDENT_STRING; --indentDepth; } linkingSectionString += DEDENT_STRING; --indentDepth; break; } case LinkingSubsectionType::symbolTable: { linkingSectionString += "\n;; Symbols:" INDENT_STRING; ++indentDepth; Uptr numSymbols = 0; serializeVarUInt32(substream, numSymbols); for(Uptr symbolIndex = 0; symbolIndex < numSymbols; ++symbolIndex) { U8 kind = 0; serializeNativeValue(substream, kind); U32 flags = 0; serializeVarUInt32(substream, flags); const char* kindName = nullptr; std::string symbolName; U32 index = 0; U32 offset = 0; U32 numBytes = 0; switch(SymbolKind(kind)) { case SymbolKind::function: { kindName = "function "; serializeVarUInt32(substream, index); if(index < module.functions.imports.size()) { symbolName = module.functions.imports[index].moduleName + "." + module.functions.imports[index].exportName; } else { serialize(substream, symbolName); } break; } case SymbolKind::global: { kindName = "global "; serializeVarUInt32(substream, index); if(index < module.globals.imports.size()) { symbolName = module.globals.imports[index].moduleName + "." + module.globals.imports[index].exportName; } else { serialize(substream, symbolName); } break; } case SymbolKind::data: { kindName = "data "; serialize(substream, symbolName); serializeVarUInt32(substream, index); serializeVarUInt32(substream, offset); serializeVarUInt32(substream, numBytes); break; } case SymbolKind::section: { kindName = "section "; serializeVarUInt32(substream, index); if(index < module.customSections.size()) { symbolName = module.customSections[index].name; } else { symbolName = "*invalid index*"; } break; } default: linkingSectionString += "\n;; Unknown symbol kind: " + std::to_string(kind); throw FatalSerializationException("Unknown symbol kind"); }; linkingSectionString += "\n;; "; linkingSectionString += kindName; linkingSectionString += '\"'; linkingSectionString += escapeString(symbolName); linkingSectionString += '\"'; switch(SymbolKind(kind)) { case SymbolKind::function: if(index < names.functions.size()) { linkingSectionString += " " + names.functions[index].name; } else { linkingSectionString += " *invalid index " + std::to_string(index) + "*"; } break; case SymbolKind::global: if(index < names.globals.size()) { linkingSectionString += " " + names.globals[index]; } else { linkingSectionString += " *invalid index " + std::to_string(index) + "*"; } break; case SymbolKind::data: case SymbolKind::section: linkingSectionString += " index=" + std::to_string(index); break; default: WAVM_UNREACHABLE(); } if(SymbolKind(kind) == SymbolKind::data) { linkingSectionString += " offset=" + std::to_string(offset); linkingSectionString += " size=" + std::to_string(numBytes); } if(flags & 1) { linkingSectionString += " *WEAK*"; flags &= ~1; } if(flags & 2) { linkingSectionString += " *LOCAL*"; flags &= ~2; } if(flags & 4) { linkingSectionString += " *HIDDEN*"; flags &= ~4; } if(flags & 16) { linkingSectionString += " *UNDEFINED*"; flags &= ~16; } if(flags) { linkingSectionString += " OtherFlags=" + std::to_string(flags); } } linkingSectionString += DEDENT_STRING; --indentDepth; break; } case LinkingSubsectionType::invalid: default: linkingSectionString += "\n;; Unknown WASM linking subsection type: " + std::to_string(subsectionType); throw FatalSerializationException("Unknown linking subsection type"); break; }; }; } catch(FatalSerializationException const&) { linkingSectionString += "\n;; Fatal serialization exception!"; while(indentDepth > 1) { linkingSectionString += DEDENT_STRING; --indentDepth; }; } WAVM_ASSERT(indentDepth == 1); linkingSectionString += DEDENT_STRING "\n"; string += linkingSectionString; } void FunctionPrintContext::printFunctionBody() { // string += "("; pushControlStack(ControlContext::Type::function, ""); string += DEDENT_STRING; OperatorDecoderStream decoder(functionDef.code); while(decoder && controlStack.size()) { decoder.decodeOp(*this); }; string += INDENT_STRING "\n"; } std::string WAST::print(const Module& module) { std::string string; ModulePrintContext context(module, string); context.printModule(); return expandIndentation(std::move(string)); } ================================================ FILE: Lib/wavm-c/CMakeLists.txt ================================================ set(Sources wavm-c.cpp) set(PublicHeaders ${WAVM_INCLUDE_DIR}/wavm-c/wavm-c.h) WAVM_ADD_LIB_COMPONENT(wavm-c SOURCES ${Sources} HEADERS ${PublicHeaders} NONCOMPILED_SOURCES ${WAVM_INCLUDE_DIR}/wavm-c/wasm-c-api.LICENSE PUBLIC_DEFINITIONS "WASM_C_API=WAVM_API") ================================================ FILE: Lib/wavm-c/wavm-c.cpp ================================================ #include #include #include #include #include #include #include "WAVM/IR/IR.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Unwind.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" #include "WAVM/WASTPrint/WASTPrint.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; // Before including the C API definitions, typedef the C API's opaque types to map directly to the // WAVM Runtime's opaque types. #define WASM_OPAQUE_TYPES_DEFINED typedef Compartment wasm_compartment_t; typedef Context wasm_store_t; typedef Object wasm_ref_t; typedef Exception wasm_trap_t; typedef Foreign wasm_foreign_t; typedef Function wasm_func_t; typedef Table wasm_table_t; typedef Memory wasm_memory_t; typedef Global wasm_global_t; typedef Object wasm_extern_t; typedef Instance wasm_instance_t; typedef Function wasm_shared_func_t; typedef Table wasm_shared_table_t; typedef Memory wasm_shared_memory_t; typedef Foreign wasm_shared_foreign_t; struct wasm_config_t; struct wasm_engine_t; struct wasm_valtype_t; struct wasm_functype_t; struct wasm_tabletype_t; struct wasm_memorytype_t; struct wasm_globaltype_t; struct wasm_externtype_t; struct wasm_module_t; typedef struct wasm_module_t wasm_shared_module_t; #include "WAVM/wavm-c/wavm-c.h" static_assert(sizeof(wasm_val_t) == sizeof(UntaggedValue), "wasm_val_t should match UntaggedValue"); struct wasm_config_t { FeatureSpec featureSpec; }; struct wasm_engine_t { wasm_config_t config; }; struct wasm_valtype_t { ValueType type; }; struct wasm_externtype_t { ExternKind kind; wasm_externtype_t(ExternKind inKind) : kind(inKind) {} }; struct wasm_functype_t : wasm_externtype_t { FunctionType type; wasm_functype_t(FunctionType inType) : wasm_externtype_t(ExternKind::function), type(inType) {} }; struct wasm_globaltype_t : wasm_externtype_t { GlobalType type; wasm_valtype_t* valtype; wasm_globaltype_t(GlobalType inType, wasm_valtype_t* inValtype) : wasm_externtype_t(ExternKind::global), type(inType), valtype(inValtype) { } }; struct wasm_tabletype_t : wasm_externtype_t { TableType type; wasm_valtype_t* element; wasm_limits_t limits; wasm_tabletype_t(TableType inType, wasm_valtype_t* inElement, wasm_limits_t inLimits) : wasm_externtype_t(ExternKind::table), type(inType), element(inElement), limits(inLimits) { } }; struct wasm_memorytype_t : wasm_externtype_t { MemoryType type; wasm_limits_t limits; wasm_memorytype_t(MemoryType inType, wasm_limits_t inLimits) : wasm_externtype_t(ExternKind::memory), type(inType), limits(inLimits) { } }; struct wasm_module_t { ModuleRef module; wasm_module_t(ModuleRef inModule) : module(inModule) {} }; static wasm_index_t as_index(IndexType indexType) { switch(indexType) { case IndexType::i32: return WASM_INDEX_I32; case IndexType::i64: return WASM_INDEX_I64; default: WAVM_UNREACHABLE(); }; } static wasm_limits_t as_limits(const SizeConstraints& size) { WAVM_ERROR_UNLESS(size.min <= UINT32_MAX); WAVM_ERROR_UNLESS(size.max == UINT64_MAX || size.max <= UINT32_MAX); return {U32(size.min), size.max == UINT64_MAX ? UINT32_MAX : U32(size.max)}; } static wasm_functype_t* as_externtype(FunctionType type) { return new wasm_functype_t(type); } static wasm_tabletype_t* as_externtype(TableType type) { return new wasm_tabletype_t( type, new wasm_valtype_t{ValueType(type.elementType)}, as_limits(type.size)); } static wasm_memorytype_t* as_externtype(MemoryType type) { return new wasm_memorytype_t(type, as_limits(type.size)); } static wasm_globaltype_t* as_externtype(GlobalType type) { return new wasm_globaltype_t(type, new wasm_valtype_t{ValueType(type.valueType)}); } static wasm_externtype_t* as_externtype(ExternType type) { switch(type.kind) { case ExternKind::function: return as_externtype(asFunctionType(type)); case ExternKind::table: return as_externtype(asTableType(type)); case ExternKind::memory: return as_externtype(asMemoryType(type)); case ExternKind::global: return as_externtype(asGlobalType(type)); case ExternKind::exceptionType: Errors::unimplemented("Converting exception type to C API wasm_externtype_t"); case ExternKind::invalid: default: WAVM_UNREACHABLE(); } } static IndexType asIndexType(wasm_index_t index) { switch(index) { case WASM_INDEX_I32: return IndexType::i32; case WASM_INDEX_I64: return IndexType::i64; default: WAVM_UNREACHABLE(); }; } static ValueType asValueType(wasm_valkind_t kind) { switch(kind) { case WASM_I32: return ValueType::i32; case WASM_I64: return ValueType::i64; case WASM_F32: return ValueType::f32; case WASM_F64: return ValueType::f64; case WASM_V128: return ValueType::v128; case WASM_ANYREF: return ValueType::externref; case WASM_FUNCREF: return ValueType::funcref; default: Errors::fatalf("Unknown wasm_valkind_t value: %u", kind); } } static Value asValue(ValueType type, const wasm_val_t* value) { switch(type) { case ValueType::i32: return Value(value->i32); case ValueType::i64: return Value(value->i64); case ValueType::f32: return Value(value->f32); case ValueType::f64: return Value(value->f64); case ValueType::v128: { V128 v128; v128.u64x2[0] = value->v128.u64x2[0]; v128.u64x2[1] = value->v128.u64x2[1]; return Value(v128); } case ValueType::externref: return Value(value->ref); case ValueType::funcref: return Value(asFunction(value->ref)); case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); } } static wasm_val_t as_val(const Value& value) { wasm_val_t result; switch(value.type) { case ValueType::i32: result.i32 = value.i32; break; case ValueType::i64: result.i64 = value.i64; break; case ValueType::f32: result.f32 = value.f32; break; case ValueType::f64: result.f64 = value.f64; break; case ValueType::v128: { result.v128.u64x2[0] = value.v128.u64x2[0]; result.v128.u64x2[1] = value.v128.u64x2[1]; break; } case ValueType::externref: result.ref = value.object; break; case ValueType::funcref: result.ref = asObject(value.function); break; case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); } return result; } extern "C" { // wasm_config_t void wasm_config_delete(wasm_config_t* config) { delete config; } wasm_config_t* wasm_config_new() { return new wasm_config_t; } #define IMPLEMENT_FEATURE(cAPIName, wavmName) \ WASM_C_API void wasm_config_feature_set_##cAPIName(wasm_config_t* config, bool enable) \ { \ config->featureSpec.wavmName = enable; \ } IMPLEMENT_FEATURE(import_export_mutable_globals, importExportMutableGlobals) IMPLEMENT_FEATURE(nontrapping_float_to_int, nonTrappingFloatToInt) IMPLEMENT_FEATURE(sign_extension, signExtension) IMPLEMENT_FEATURE(bulk_memory_ops, bulkMemoryOperations) IMPLEMENT_FEATURE(simd, simd) IMPLEMENT_FEATURE(atomics, atomics) IMPLEMENT_FEATURE(exception_handling, exceptionHandling) IMPLEMENT_FEATURE(multivalue, multipleResultsAndBlockParams) IMPLEMENT_FEATURE(reference_types, referenceTypes) IMPLEMENT_FEATURE(extended_name_section, extendedNameSection) IMPLEMENT_FEATURE(multimemory, multipleMemories) IMPLEMENT_FEATURE(shared_tables, sharedTables) IMPLEMENT_FEATURE(allow_legacy_inst_names, allowLegacyInstructionNames) IMPLEMENT_FEATURE(any_extern_kind_elems, allowAnyExternKindElemSegments) IMPLEMENT_FEATURE(wat_quoted_names, quotedNamesInTextFormat) IMPLEMENT_FEATURE(wat_custom_sections, customSectionsInTextFormat) // wasm_engine_t wasm_engine_t* wasm_engine_new() { return new wasm_engine_t; } wasm_engine_t* wasm_engine_new_with_config(wasm_config_t* config) { wasm_engine_t* engine = new wasm_engine_t{*config}; delete config; return engine; } void wasm_engine_delete(wasm_engine_t* engine) { delete engine; } // wasm_compartment_t void wasm_compartment_delete(wasm_compartment_t* compartment) { GCPointer compartmentGCRef = compartment; removeGCRoot(compartment); WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartmentGCRef))); } wasm_compartment_t* wasm_compartment_new(wasm_engine_t*, const char* debug_name) { Compartment* compartment = createCompartment(std::string(debug_name)); addGCRoot(compartment); return compartment; } wasm_compartment_t* wasm_compartment_clone(const wasm_compartment_t* compartment) { Compartment* clone = cloneCompartment(compartment); if(clone) { addGCRoot(clone); } return clone; } bool wasm_compartment_contains(const wasm_compartment_t* compartment, const wasm_ref_t* ref) { return isInCompartment(ref, compartment); } // wasm_store_t void wasm_store_delete(wasm_store_t* store) { removeGCRoot(store); } wasm_store_t* wasm_store_new(wasm_compartment_t* compartment, const char* debug_name) { Context* context = createContext(compartment, std::string(debug_name)); addGCRoot(context); return context; } // wasm_valtype_t void wasm_valtype_delete(wasm_valtype_t* type) { delete type; } wasm_valtype_t* wasm_valtype_copy(wasm_valtype_t* type) { return new wasm_valtype_t{type->type}; } wasm_valtype_t* wasm_valtype_new(wasm_valkind_t kind) { ValueType type = asValueType(kind); return new wasm_valtype_t{type}; } wasm_valkind_t wasm_valtype_kind(const wasm_valtype_t* type) { switch(type->type) { case ValueType::i32: return WASM_I32; case ValueType::i64: return WASM_I64; case ValueType::f32: return WASM_F32; case ValueType::f64: return WASM_F64; case ValueType::v128: return WASM_V128; case ValueType::externref: return WASM_ANYREF; case ValueType::funcref: return WASM_FUNCREF; case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); }; } // wasm_functype_t void wasm_functype_delete(wasm_functype_t* type) { delete type; } wasm_functype_t* wasm_functype_copy(wasm_functype_t* type) { return new wasm_functype_t(type->type); } wasm_functype_t* wasm_functype_new(wasm_valtype_t** params, uintptr_t numParams, wasm_valtype_t** results, uintptr_t numResults) { ValueType* paramsTemp = new(alloca(sizeof(ValueType) * numParams)) ValueType[numParams]; ValueType* resultsTemp = new(alloca(sizeof(ValueType) * numResults)) ValueType[numResults]; for(Uptr paramIndex = 0; paramIndex < numParams; ++paramIndex) { paramsTemp[paramIndex] = params[paramIndex]->type; wasm_valtype_delete(params[paramIndex]); } for(Uptr resultIndex = 0; resultIndex < numResults; ++resultIndex) { resultsTemp[resultIndex] = results[resultIndex]->type; wasm_valtype_delete(results[resultIndex]); } return new wasm_functype_t( FunctionType(TypeTuple(resultsTemp, numResults), TypeTuple(paramsTemp, numParams))); } size_t wasm_functype_num_params(const wasm_functype_t* type) { return type->type.params().size(); } wasm_valtype_t* wasm_functype_param(const wasm_functype_t* type, size_t index) { return new wasm_valtype_t{type->type.params()[index]}; } size_t wasm_functype_num_results(const wasm_functype_t* type) { return type->type.results().size(); } wasm_valtype_t* wasm_functype_result(const wasm_functype_t* type, size_t index) { return new wasm_valtype_t{type->type.results()[index]}; } // wasm_globaltype_t void wasm_globaltype_delete(wasm_globaltype_t* type) { wasm_valtype_delete(type->valtype); delete type; } wasm_globaltype_t* wasm_globaltype_copy(wasm_globaltype_t* type) { return new wasm_globaltype_t(type->type, wasm_valtype_copy(type->valtype)); } wasm_globaltype_t* wasm_globaltype_new(wasm_valtype_t* valtype, wasm_mutability_t mutability) { return new wasm_globaltype_t(GlobalType(valtype->type, mutability == WASM_VAR), valtype); } const wasm_valtype_t* wasm_globaltype_content(const wasm_globaltype_t* type) { return type->valtype; } wasm_mutability_t wasm_globaltype_mutability(const wasm_globaltype_t* type) { return wasm_mutability_t(type->type.isMutable ? WASM_VAR : WASM_CONST); } // wasm_tabletype_t void wasm_tabletype_delete(wasm_tabletype_t* type) { wasm_valtype_delete(type->element); delete type; } wasm_tabletype_t* wasm_tabletype_copy(wasm_tabletype_t* type) { return new wasm_tabletype_t(type->type, wasm_valtype_copy(type->element), type->limits); } wasm_tabletype_t* wasm_tabletype_new(wasm_valtype_t* element, const wasm_limits_t* limits, wasm_shared_t shared, wasm_index_t index) { WAVM_ERROR_UNLESS(isReferenceType(element->type)); return new wasm_tabletype_t(TableType(ReferenceType(element->type), shared == WASM_SHARED, asIndexType(index), SizeConstraints{limits->min, limits->max}), element, *limits); } const wasm_valtype_t* wasm_tabletype_element(const wasm_tabletype_t* type) { return type->element; } const wasm_limits_t* wasm_tabletype_limits(const wasm_tabletype_t* type) { return &type->limits; } wasm_shared_t wasm_tabletype_shared(const wasm_tabletype_t* type) { return wasm_shared_t(type->type.isShared ? WASM_SHARED : WASM_NOTSHARED); } wasm_index_t wasm_tabletype_index(const wasm_tabletype_t* type) { return as_index(type->type.indexType); } // wasm_memorytype_t void wasm_memorytype_delete(wasm_memorytype_t* type) { delete type; } wasm_memorytype_t* wasm_memorytype_copy(wasm_memorytype_t* type) { return new wasm_memorytype_t(type->type, type->limits); } wasm_memorytype_t* wasm_memorytype_new(const wasm_limits_t* limits, wasm_shared_t shared, wasm_index_t index) { return new wasm_memorytype_t( MemoryType( shared == WASM_SHARED, asIndexType(index), SizeConstraints{limits->min, limits->max}), *limits); } const wasm_limits_t* wasm_memorytype_limits(const wasm_memorytype_t* type) { return &type->limits; } wasm_shared_t wasm_memorytype_shared(const wasm_memorytype_t* type) { return wasm_shared_t(type->type.isShared ? WASM_SHARED : WASM_NOTSHARED); } wasm_index_t wasm_memorytype_index(const wasm_memorytype_t* type) { return as_index(type->type.indexType); } // wasm_externtype_t void wasm_externtype_delete(wasm_externtype_t* type) { switch(type->kind) { case ExternKind::function: wasm_functype_delete(wasm_externtype_as_functype(type)); break; case ExternKind::table: wasm_tabletype_delete(wasm_externtype_as_tabletype(type)); break; case ExternKind::memory: wasm_memorytype_delete(wasm_externtype_as_memorytype(type)); break; case ExternKind::global: wasm_globaltype_delete(wasm_externtype_as_globaltype(type)); break; case ExternKind::exceptionType: Errors::unimplemented("exception types in C API"); case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } wasm_externtype_t* wasm_externtype_copy(wasm_externtype_t* type) { switch(type->kind) { case ExternKind::function: return wasm_functype_as_externtype(wasm_functype_copy(wasm_externtype_as_functype(type))); case ExternKind::table: return wasm_tabletype_as_externtype( wasm_tabletype_copy(wasm_externtype_as_tabletype(type))); case ExternKind::memory: return wasm_memorytype_as_externtype( wasm_memorytype_copy(wasm_externtype_as_memorytype(type))); case ExternKind::global: return wasm_globaltype_as_externtype( wasm_globaltype_copy(wasm_externtype_as_globaltype(type))); case ExternKind::exceptionType: Errors::unimplemented("exception types in C API"); case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } wasm_externkind_t wasm_externtype_kind(const wasm_externtype_t* type) { switch(type->kind) { case ExternKind::function: return WASM_EXTERN_FUNC; case ExternKind::table: return WASM_EXTERN_TABLE; case ExternKind::memory: return WASM_EXTERN_MEMORY; case ExternKind::global: return WASM_EXTERN_GLOBAL; case ExternKind::exceptionType: Errors::unimplemented("exception types in C API"); case ExternKind::invalid: default: WAVM_UNREACHABLE(); } } wasm_externtype_t* wasm_functype_as_externtype(wasm_functype_t* type) { return (wasm_externtype_t*)type; } wasm_externtype_t* wasm_globaltype_as_externtype(wasm_globaltype_t* type) { return (wasm_externtype_t*)type; } wasm_externtype_t* wasm_tabletype_as_externtype(wasm_tabletype_t* type) { return (wasm_externtype_t*)type; } wasm_externtype_t* wasm_memorytype_as_externtype(wasm_memorytype_t* type) { return (wasm_externtype_t*)type; } wasm_functype_t* wasm_externtype_as_functype(wasm_externtype_t* type) { return (wasm_functype_t*)type; } wasm_globaltype_t* wasm_externtype_as_globaltype(wasm_externtype_t* type) { return (wasm_globaltype_t*)type; } wasm_tabletype_t* wasm_externtype_as_tabletype(wasm_externtype_t* type) { return (wasm_tabletype_t*)type; } wasm_memorytype_t* wasm_externtype_as_memorytype(wasm_externtype_t* type) { return (wasm_memorytype_t*)type; } const wasm_externtype_t* wasm_functype_as_externtype_const(const wasm_functype_t* type) { return (wasm_externtype_t*)type; } const wasm_externtype_t* wasm_globaltype_as_externtype_const(const wasm_globaltype_t* type) { return (wasm_externtype_t*)type; } const wasm_externtype_t* wasm_tabletype_as_externtype_const(const wasm_tabletype_t* type) { return (wasm_externtype_t*)type; } const wasm_externtype_t* wasm_memorytype_as_externtype_const(const wasm_memorytype_t* type) { return (wasm_externtype_t*)type; } const wasm_functype_t* wasm_externtype_as_functype_const(const wasm_externtype_t* type) { return (wasm_functype_t*)type; } const wasm_globaltype_t* wasm_externtype_as_globaltype_const(const wasm_externtype_t* type) { return (wasm_globaltype_t*)type; } const wasm_tabletype_t* wasm_externtype_as_tabletype_const(const wasm_externtype_t* type) { return (wasm_tabletype_t*)type; } const wasm_memorytype_t* wasm_externtype_as_memorytype_const(const wasm_externtype_t* type) { return (wasm_memorytype_t*)type; } // wasm_ref_t #define IMPLEMENT_REF_BASE(name, Type) \ void wasm_##name##_delete(wasm_##name##_t* ref) { removeGCRoot(ref); } \ \ wasm_##name##_t* wasm_##name##_copy(const wasm_##name##_t* constRef) \ { \ wasm_##name##_t* ref = const_cast(constRef); \ addGCRoot(ref); \ return ref; \ } \ bool wasm_##name##_same(const wasm_##name##_t* a, const wasm_##name##_t* b) { return a == b; } \ \ void* wasm_##name##_get_host_info(const wasm_##name##_t* ref) { return getUserData(ref); } \ void wasm_##name##_set_host_info(wasm_##name##_t* ref, void* userData) \ { \ setUserData(ref, userData, nullptr); \ } \ void wasm_##name##_set_host_info_with_finalizer( \ wasm_##name##_t* ref, void* userData, void (*finalizeUserData)(void*)) \ { \ setUserData(ref, userData, finalizeUserData); \ } \ \ wasm_##name##_t* wasm_##name##_remap_to_cloned_compartment( \ const wasm_##name##_t* ref, const wasm_compartment_t* compartment) \ { \ wasm_##name##_t* remappedRef = remapToClonedCompartment(ref, compartment); \ addGCRoot(remappedRef); \ return remappedRef; \ } \ \ const char* wasm_##name##_name(const wasm_##name##_t* ref) { return getDebugName(ref).c_str(); } #define IMPLEMENT_REF(name, Type) \ IMPLEMENT_REF_BASE(name, Type) \ \ wasm_ref_t* wasm_##name##_as_ref(wasm_##name##_t* ref) { return asObject(ref); } \ wasm_##name##_t* wasm_ref_as_##name(wasm_ref_t* ref) { return as##Type(ref); } \ const wasm_ref_t* wasm_##name##_as_ref_const(const wasm_##name##_t* ref) \ { \ return asObject(ref); \ } \ const wasm_##name##_t* wasm_ref_as_##name##_const(const wasm_ref_t* ref) \ { \ return as##Type(ref); \ } #define IMPLEMENT_SHAREABLE_REF(name, Type) \ IMPLEMENT_REF(name, Type) \ \ void wasm_shared_##name##_delete(wasm_shared_##name##_t* ref) { removeGCRoot(ref); } \ \ wasm_shared_##name##_t* wasm_##name##_share(const wasm_##name##_t* constRef) \ { \ wasm_shared_##name##_t* ref = const_cast(constRef); \ addGCRoot(ref); \ return ref; \ } \ wasm_##name##_t* wasm_##name##_obtain(wasm_store_t* store, \ const wasm_shared_##name##_t* constRef) \ { \ wasm_shared_##name##_t* ref = const_cast(constRef); \ WAVM_ASSERT(isInCompartment(asObject(ref), getCompartment(store))); \ addGCRoot(ref); \ return ref; \ } IMPLEMENT_REF_BASE(ref, Object) // wasm_trap_t void wasm_trap_delete(wasm_trap_t* trap) { destroyException(trap); } wasm_trap_t* wasm_trap_copy(const wasm_trap_t* trap) { return new Exception(*trap); } bool wasm_trap_same(const wasm_trap_t* a, const wasm_trap_t* b) { return a == b; } void* wasm_trap_get_host_info(const wasm_trap_t* trap) { return getUserData(trap); } void wasm_trap_set_host_info(wasm_trap_t* trap, void* userData) { setUserData(trap, userData, nullptr); } void wasm_trap_set_host_info_with_finalizer(wasm_trap_t* trap, void* userData, void (*finalizeUserData)(void*)) { setUserData(trap, userData, finalizeUserData); } wasm_ref_t* wasm_trap_as_ref(wasm_trap_t* trap) { Errors::unimplemented("wasm_trap_as_ref"); } wasm_trap_t* wasm_ref_as_trap(wasm_ref_t* object) { Errors::unimplemented("wasm_ref_as_trap"); } const wasm_ref_t* wasm_trap_as_ref_const(const wasm_trap_t*) { Errors::unimplemented("wasm_trap_as_ref_const"); } const wasm_trap_t* wasm_ref_as_trap_const(const wasm_ref_t*) { Errors::unimplemented("wasm_ref_as_trap_const"); } WAVM_FORCENOINLINE wasm_trap_t* wasm_trap_new(wasm_compartment_t* compartment, const char* message, size_t num_message_bytes) { // Skip wasm_trap_new. Platform::UnwindState state = Platform::UnwindState::capture(1); return createException( ExceptionTypes::calledAbort, nullptr, 0, Runtime::unwindCallStack(state)); } bool wasm_trap_message(const wasm_trap_t* trap, char* out_message, size_t* inout_num_message_bytes) { const std::string description = describeExceptionType(getExceptionType(trap)); if(*inout_num_message_bytes < description.size()) { *inout_num_message_bytes = description.size(); return false; } else { WAVM_ASSERT(out_message); memcpy(out_message, description.c_str(), description.size()); *inout_num_message_bytes = description.size(); return true; } } // TODO: these re-resolve the entire call stack on every call; consider caching the result. size_t wasm_trap_stack_num_frames(const wasm_trap_t* trap) { return resolveCallStackFrames(getExceptionCallStack(trap)).size(); } void wasm_trap_stack_frame(const wasm_trap_t* trap, size_t index, wasm_frame_t* out_frame) { std::vector frames = resolveCallStackFrames(getExceptionCallStack(trap)); if(index < frames.size() && frames[index].type == InstructionSource::Type::wasm) { out_frame->function = frames[index].wasm.function; out_frame->instr_index = frames[index].wasm.instructionIndex; } else { out_frame->function = nullptr; out_frame->instr_index = 0; } } // wasm_foreign_t IMPLEMENT_SHAREABLE_REF(foreign, Foreign) wasm_foreign_t* wasm_foreign_new(wasm_compartment_t* compartment, const char* debug_name) { Foreign* foreign = createForeign(compartment, nullptr, nullptr, std::string(debug_name)); addGCRoot(foreign); return foreign; } // wasm_val_t void wasm_val_delete(wasm_valkind_t kind, wasm_val_t* val) {} void wasm_val_copy(wasm_valkind_t kind, wasm_val_t* out, const wasm_val_t* val) { memcpy(out, val, sizeof(wasm_val_t)); } // wasm_module_t void wasm_module_delete(wasm_module_t* module) { delete module; } wasm_module_t* wasm_module_copy(wasm_module_t* module) { return new wasm_module_t{module->module}; } wasm_module_t* wasm_module_new(wasm_engine_t* engine, const char* wasmBytes, uintptr_t numWASMBytes) { WASM::LoadError loadError; ModuleRef module; if(loadBinaryModule( (const U8*)wasmBytes, numWASMBytes, module, engine->config.featureSpec, &loadError)) { return new wasm_module_t{module}; } else { Log::printf(Log::debug, "%s\n", loadError.message.c_str()); return nullptr; } } wasm_module_t* wasm_module_new_text(wasm_engine_t* engine, const char* text, size_t num_text_chars) { // wasm_module_new_text requires the input string to be null terminated. WAVM_ERROR_UNLESS(text[num_text_chars - 1] == 0); std::vector parseErrors; IR::Module irModule(engine->config.featureSpec); if(!WAST::parseModule(text, num_text_chars, irModule, parseErrors)) { if(Log::isCategoryEnabled(Log::debug)) { WAST::reportParseErrors("wasm_module_new_text", text, parseErrors, Log::debug); } return nullptr; } ModuleRef module = compileModule(irModule); return new wasm_module_t{module}; } char* wasm_module_print(const wasm_module_t* module, size_t* out_num_chars) { const std::string wastString = WAST::print(getModuleIR(module->module)); char* returnBuffer = (char*)malloc(wastString.size() + 1); memcpy(returnBuffer, wastString.c_str(), wastString.size()); returnBuffer[wastString.size()] = 0; *out_num_chars = wastString.size(); return returnBuffer; } bool wasm_module_validate(const char* binary, size_t numBinaryBytes) { IR::Module irModule; WASM::LoadError loadError; if(WASM::loadBinaryModule((const U8*)binary, numBinaryBytes, irModule, &loadError)) { return true; } else { Log::printf(Log::debug, "%s\n", loadError.message.c_str()); return false; } } size_t wasm_module_num_imports(const wasm_module_t* module) { return getModuleIR(module->module).imports.size(); } void wasm_module_import(const wasm_module_t* module, size_t index, wasm_import_t* out_import) { const IR::Module& irModule = getModuleIR(module->module); const KindAndIndex& kindAndIndex = irModule.imports[index]; switch(kindAndIndex.kind) { case ExternKind::function: { const auto& functionImport = irModule.functions.imports[kindAndIndex.index]; out_import->module = functionImport.moduleName.c_str(); out_import->num_module_bytes = functionImport.moduleName.size(); out_import->name = functionImport.exportName.c_str(); out_import->num_name_bytes = functionImport.exportName.size(); out_import->type = as_externtype(irModule.types[functionImport.type.index]); break; } case ExternKind::table: { const auto& tableImport = irModule.tables.imports[kindAndIndex.index]; out_import->module = tableImport.moduleName.c_str(); out_import->num_module_bytes = tableImport.moduleName.size(); out_import->name = tableImport.exportName.c_str(); out_import->num_name_bytes = tableImport.exportName.size(); out_import->type = as_externtype(tableImport.type); break; } case ExternKind::memory: { const auto& memoryImport = irModule.memories.imports[kindAndIndex.index]; out_import->module = memoryImport.moduleName.c_str(); out_import->num_module_bytes = memoryImport.moduleName.size(); out_import->name = memoryImport.exportName.c_str(); out_import->num_name_bytes = memoryImport.exportName.size(); out_import->type = as_externtype(memoryImport.type); break; } case ExternKind::global: { const auto& globalImport = irModule.globals.imports[kindAndIndex.index]; out_import->module = globalImport.moduleName.c_str(); out_import->num_module_bytes = globalImport.moduleName.size(); out_import->name = globalImport.exportName.c_str(); out_import->num_name_bytes = globalImport.exportName.size(); out_import->type = as_externtype(globalImport.type); break; } case ExternKind::exceptionType: { Errors::fatal("wasm_module_import can't handle exception type imports"); } case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } size_t wasm_module_num_exports(const wasm_module_t* module) { return getModuleIR(module->module).exports.size(); } void wasm_module_export(const wasm_module_t* module, size_t index, wasm_export_t* out_export) { const IR::Module& irModule = getModuleIR(module->module); const Export& export_ = irModule.exports[index]; out_export->name = export_.name.c_str(); out_export->num_name_bytes = export_.name.size(); switch(export_.kind) { case ExternKind::function: out_export->type = as_externtype(irModule.types[irModule.functions.getType(export_.index).index]); break; case ExternKind::table: out_export->type = as_externtype(irModule.tables.getType(export_.index)); break; case ExternKind::memory: out_export->type = as_externtype(irModule.memories.getType(export_.index)); break; case ExternKind::global: out_export->type = as_externtype(irModule.globals.getType(export_.index)); break; case ExternKind::exceptionType: Errors::fatal("wasm_module_export can't handle exception type exports"); case ExternKind::invalid: default: WAVM_UNREACHABLE(); }; } // wasm_func_t IMPLEMENT_SHAREABLE_REF(func, Function) wasm_func_t* wasm_func_new(wasm_compartment_t* compartment, const wasm_functype_t* type, wasm_func_callback_t callback, const char* debug_name) { FunctionType callbackType( type->type.results(), type->type.params(), CallingConvention::cAPICallback); Intrinsics::Module intrinsicModule; Intrinsics::Function intrinsicFunction( &intrinsicModule, debug_name, (void*)callback, callbackType); Instance* instance = Intrinsics::instantiateModule(compartment, {&intrinsicModule}, debug_name); Function* function = getTypedInstanceExport(instance, debug_name, type->type); addGCRoot(function); return function; } wasm_func_t* wasm_func_new_with_env(wasm_compartment_t*, const wasm_functype_t* type, wasm_func_callback_with_env_t, void* env, void (*finalizer)(void*), const char* debug_name) { Errors::fatal("wasm_func_new_with_env is not yet supported"); } wasm_functype_t* wasm_func_type(const wasm_func_t* function) { return new wasm_functype_t(getFunctionType(function)); } size_t wasm_func_param_arity(const wasm_func_t* function) { return getFunctionType(function).params().size(); } size_t wasm_func_result_arity(const wasm_func_t* function) { return getFunctionType(function).results().size(); } wasm_trap_t* wasm_func_call(wasm_store_t* store, const wasm_func_t* function, const wasm_val_t args[], wasm_val_t outResults[]) { Exception* exception = nullptr; catchRuntimeExceptions( [store, function, &args, &outResults]() { FunctionType functionType = getFunctionType((Function*)function); auto wavmArgs = (UntaggedValue*)alloca(functionType.params().size() * sizeof(UntaggedValue)); for(Uptr argIndex = 0; argIndex < functionType.params().size(); ++argIndex) { memcpy(&wavmArgs[argIndex].bytes, &args[argIndex], sizeof(wasm_val_t)); } auto wavmResults = (UntaggedValue*)alloca(functionType.results().size() * sizeof(UntaggedValue)); invokeFunction(store, function, functionType, wavmArgs, wavmResults); for(Uptr resultIndex = 0; resultIndex < functionType.results().size(); ++resultIndex) { memcpy( &outResults[resultIndex], &wavmResults[resultIndex].bytes, sizeof(wasm_val_t)); } }, [&exception](Exception* caughtException) { exception = caughtException; }); return exception; } // wasm_global_t IMPLEMENT_REF(global, Global) wasm_global_t* wasm_global_new(wasm_compartment_t* compartment, const wasm_globaltype_t* type, const wasm_val_t* value, const char* debug_name) { Global* global = createGlobal(compartment, type->type, std::string(debug_name)); addGCRoot(global); initializeGlobal(global, asValue(type->type.valueType, value)); return global; } wasm_globaltype_t* wasm_global_type(const wasm_global_t* global) { return as_externtype(getGlobalType(global)); } void wasm_global_get(wasm_store_t* store, const wasm_global_t* global, wasm_val_t* out) { *out = as_val(getGlobalValue(store, global)); } void wasm_global_set(wasm_store_t* store, wasm_global_t* global, const wasm_val_t* val) { setGlobalValue(store, global, asValue(getGlobalType(global).valueType, val)); } // wasm_table_t IMPLEMENT_SHAREABLE_REF(table, Table) wasm_table_t* wasm_table_new(wasm_compartment_t* compartment, const wasm_tabletype_t* type, wasm_ref_t* init, const char* debug_name) { Table* table = createTable(compartment, type->type, init, std::string(debug_name)); addGCRoot(table); return table; } wasm_tabletype_t* wasm_table_type(const wasm_table_t* table) { return as_externtype(getTableType(table)); } wasm_ref_t* wasm_table_get(const wasm_table_t* table, wasm_table_size_t index) { return getTableElement(table, index); } bool wasm_table_set(wasm_table_t* table, wasm_table_size_t index, wasm_ref_t* value) { bool result = true; catchRuntimeExceptions([table, index, value]() { setTableElement(table, index, value); }, [&result](Runtime::Exception* exception) { result = false; }); return result; } wasm_table_size_t wasm_table_size(const wasm_table_t* table) { Uptr numElements = getTableNumElements(table); WAVM_ERROR_UNLESS(numElements <= WASM_TABLE_SIZE_MAX); return wasm_table_size_t(numElements); } bool wasm_table_grow(wasm_table_t* table, wasm_table_size_t delta, wasm_ref_t* init, wasm_table_size_t* out_previous_size) { Uptr oldNumElements = 0; if(growTable(table, delta, &oldNumElements, init) != GrowResult::success) { return false; } else { WAVM_ERROR_UNLESS(oldNumElements <= WASM_TABLE_SIZE_MAX); if(out_previous_size) { *out_previous_size = wasm_table_size_t(oldNumElements); } return true; } } // wasm_memory_t IMPLEMENT_SHAREABLE_REF(memory, Memory) wasm_memory_t* wasm_memory_new(wasm_compartment_t* compartment, const wasm_memorytype_t* type, const char* debug_name) { Memory* memory = createMemory(compartment, type->type, std::string(debug_name)); addGCRoot(memory); return memory; } wasm_memorytype_t* wasm_memory_type(const wasm_memory_t* memory) { return as_externtype(getMemoryType(memory)); } char* wasm_memory_data(wasm_memory_t* memory) { return (char*)getMemoryBaseAddress(memory); } size_t wasm_memory_data_size(const wasm_memory_t* memory) { return getMemoryNumPages(memory) * IR::numBytesPerPage; } wasm_memory_pages_t wasm_memory_size(const wasm_memory_t* memory) { Uptr numPages = getMemoryNumPages(memory); WAVM_ERROR_UNLESS(numPages <= WASM_MEMORY_PAGES_MAX); return wasm_memory_pages_t(numPages); } bool wasm_memory_grow(wasm_memory_t* memory, wasm_memory_pages_t delta, wasm_memory_pages_t* out_previous_size) { Uptr oldNumPages = 0; if(growMemory(memory, delta, &oldNumPages) != GrowResult::success) { return false; } else { WAVM_ERROR_UNLESS(oldNumPages <= WASM_MEMORY_PAGES_MAX); if(out_previous_size) { *out_previous_size = wasm_memory_pages_t(oldNumPages); } return true; } } // wasm_extern_t IMPLEMENT_REF(extern, Object) wasm_externkind_t wasm_extern_kind(const wasm_extern_t* object) { switch(object->kind) { case ObjectKind::function: return WASM_EXTERN_FUNC; case ObjectKind::table: return WASM_EXTERN_TABLE; case ObjectKind::memory: return WASM_EXTERN_MEMORY; case ObjectKind::global: return WASM_EXTERN_GLOBAL; case ObjectKind::exceptionType: Errors::fatal("wasm_extern_kind can't handle exception types"); case ObjectKind::instance: case ObjectKind::context: case ObjectKind::compartment: case ObjectKind::foreign: case ObjectKind::invalid: default: WAVM_UNREACHABLE(); }; } wasm_externtype_t* wasm_extern_type(const wasm_extern_t* object) { return as_externtype(getExternType(object)); } #define IMPLEMENT_EXTERN_SUBTYPE(name, Name) \ wasm_extern_t* wasm_##name##_as_extern(wasm_##name##_t* name) { return asObject(name); } \ const wasm_extern_t* wasm_##name##_as_extern_const(const wasm_##name##_t* name) \ { \ return asObject(name); \ } \ wasm_##name##_t* wasm_extern_as_##name(wasm_extern_t* object) { return as##Name(object); } \ const wasm_##name##_t* wasm_extern_as_##name##_const(const wasm_extern_t* object) \ { \ return as##Name(object); \ } IMPLEMENT_EXTERN_SUBTYPE(func, Function) IMPLEMENT_EXTERN_SUBTYPE(global, Global) IMPLEMENT_EXTERN_SUBTYPE(table, Table) IMPLEMENT_EXTERN_SUBTYPE(memory, Memory) // wasm_instance_t wasm_instance_t* wasm_instance_new(wasm_store_t* store, const wasm_module_t* module, const wasm_extern_t* const imports[], wasm_trap_t** out_trap, const char* debug_name) { const IR::Module& irModule = getModuleIR(module->module); if(out_trap) { *out_trap = nullptr; } ImportBindings importBindings; for(Uptr importIndex = 0; importIndex < irModule.imports.size(); ++importIndex) { importBindings.push_back(const_cast(imports[importIndex])); } Instance* instance = nullptr; catchRuntimeExceptions( [store, module, &importBindings, &instance, debug_name]() { instance = instantiateModule(getCompartment(store), module->module, std::move(importBindings), std::string(debug_name)); addGCRoot(instance); Function* startFunction = getStartFunction(instance); if(startFunction) { invokeFunction(store, startFunction); } }, [&](Runtime::Exception* exception) { if(out_trap) { *out_trap = exception; } else { destroyException(exception); } }); return instance; } void wasm_instance_delete(wasm_instance_t* instance) { removeGCRoot(instance); } size_t wasm_instance_num_exports(const wasm_instance_t* instance) { return getInstanceExports(instance).size(); } wasm_extern_t* wasm_instance_export(const wasm_instance_t* instance, size_t index) { return getInstanceExports(instance)[index]; } } ================================================ FILE: Programs/wavm/CMakeLists.txt ================================================ set(NonRuntimeSources Testing/DumpTestModules.cpp Testing/TestHashMap.cpp Testing/TestHashSet.cpp Testing/TestI128.cpp Testing/TestLEB128.cpp Testing/wavm-test.cpp Testing/wavm-test.h wavm.cpp wavm.h wavm-assemble.cpp wavm-disassemble.cpp) set(RuntimeOnlySources Testing/Benchmark.cpp Testing/RunTestScript.cpp Testing/TestAPI.cpp Testing/TestCAPI.c Testing/TestDWARF.cpp Testing/TestObjectLinker.cpp wavm-compile.cpp wavm-run.cpp) set(CompiledSources ${NonRuntimeSources}) set(NonCompiledSources) if(WAVM_ENABLE_RUNTIME) list(APPEND CompiledSources ${RuntimeOnlySources}) else() list(APPEND NonCompiledSources ${RuntimeOnlySources}) endif() WAVM_ADD_EXECUTABLE(wavm FOLDER Programs SOURCES ${CompiledSources} NONCOMPILED_SOURCES ${NonCompiledSources}) WAVM_INSTALL_TARGET(wavm) ================================================ FILE: Programs/wavm/Testing/Benchmark.cpp ================================================ #include #include #include #include #include #include #include "../wavm.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Timing.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/File.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; static std::string getFilenameAndExtension(const char* path) { const char* filenameBegin = path; for(Uptr charIndex = 0; path[charIndex]; ++charIndex) { if(path[charIndex] == '/' || path[charIndex] == '\\' || path[charIndex] == ':') { filenameBegin = path + charIndex + 1; } } return std::string(filenameBegin); } void showBenchmarkHelp(WAVM::Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm test benchmark [options] [program args...]\n" "\n" "Options:\n" " --json Output results as JSON (for machine parsing)\n" " --enable Enable the specified WebAssembly feature\n" "\n" "Benchmarks load, compile, instantiate, and execute phases\n" "of a WASI module. Arguments after the filename are passed to the\n" "WASI program.\n"); } int execBenchmark(int argc, char** argv) { bool jsonOutput = false; const char* filename = nullptr; std::vector programArgs; IR::FeatureSpec featureSpec; for(int i = 0; i < argc; ++i) { if(filename) { // Everything after the filename is a program argument. programArgs.push_back(argv[i]); } else if(!strcmp(argv[i], "--json")) { jsonOutput = true; } else if(!strcmp(argv[i], "--enable")) { ++i; if(i >= argc) { Log::printf(Log::error, "Expected feature name following '--enable'.\n"); return EXIT_FAILURE; } if(!parseAndSetFeature(argv[i], featureSpec, true)) { Log::printf(Log::error, "Unknown feature '%s'. Supported features:\n%s\n", argv[i], getFeatureListHelpText().c_str()); return EXIT_FAILURE; } } else if(argv[i][0] != '-') { filename = argv[i]; } else { Log::printf(Log::error, "Unknown option: %s\n", argv[i]); showBenchmarkHelp(Log::error); return EXIT_FAILURE; } } if(!filename) { showBenchmarkHelp(Log::error); return EXIT_FAILURE; } // Phase 1: Load the file Timing::Timer loadTimer; std::vector fileBytes; if(!loadFile(filename, fileBytes)) { return EXIT_FAILURE; } IR::Module irModule(featureSpec); if(fileBytes.size() >= sizeof(WASM::magicNumber) && !memcmp(fileBytes.data(), WASM::magicNumber, sizeof(WASM::magicNumber))) { WASM::LoadError loadError; if(!WASM::loadBinaryModule(fileBytes.data(), fileBytes.size(), irModule, &loadError)) { Log::printf(Log::error, "%s\n", loadError.message.c_str()); return EXIT_FAILURE; } } else { fileBytes.push_back(0); std::vector parseErrors; if(!WAST::parseModule( (const char*)fileBytes.data(), fileBytes.size(), irModule, parseErrors)) { Log::printf(Log::error, "Error parsing WebAssembly text file:\n"); WAST::reportParseErrors(filename, (const char*)fileBytes.data(), parseErrors); return EXIT_FAILURE; } } loadTimer.stop(); const F64 loadMs = loadTimer.getMilliseconds(); // Phase 2: Compile the module Timing::Timer compileTimer; auto module = Runtime::compileModule(irModule); compileTimer.stop(); const F64 compileMs = compileTimer.getMilliseconds(); // Phase 3: Instantiate the module with WASI GCPointer compartment = Runtime::createCompartment(); std::vector wasiArgs; wasiArgs.push_back(getFilenameAndExtension(filename)); for(const auto& arg : programArgs) { wasiArgs.push_back(arg); } auto wasiProcess = WASI::createProcess(compartment, std::move(wasiArgs), {}, nullptr, Platform::getStdFD(Platform::StdDevice::in), Platform::getStdFD(Platform::StdDevice::out), Platform::getStdFD(Platform::StdDevice::err)); Timing::Timer instantiateTimer; LinkResult linkResult = linkModule(irModule, WASI::getProcessResolver(*wasiProcess)); if(!linkResult.success) { Log::printf(Log::error, "Failed to link module:\n"); for(auto& missingImport : linkResult.missingImports) { Log::printf(Log::error, "Missing import: module=\"%s\" export=\"%s\" type=\"%s\"\n", missingImport.moduleName.c_str(), missingImport.exportName.c_str(), asString(missingImport.type).c_str()); } return EXIT_FAILURE; } Instance* instance = instantiateModule(compartment, module, std::move(linkResult.resolvedImports), filename); if(!instance) { return EXIT_FAILURE; } Memory* memory = asMemoryNullable(getInstanceExport(instance, "memory")); if(!memory) { Log::printf(Log::error, "WASM module doesn't export WASI memory.\n"); return EXIT_FAILURE; } WASI::setProcessMemory(*wasiProcess, memory); instantiateTimer.stop(); const F64 instantiateMs = instantiateTimer.getMilliseconds(); // Phase 4: Execute Context* context = Runtime::createContext(compartment); Function* startFunction = getStartFunction(instance); if(startFunction) { invokeFunction(context, startFunction); } Function* entryFunction = getTypedInstanceExport(instance, "_start", FunctionType()); if(!entryFunction) { Log::printf(Log::error, "WASM module doesn't export WASI _start function.\n"); return EXIT_FAILURE; } F64 executeMs = 0; { Timing::Timer executeTimer; Runtime::catchRuntimeExceptions( [&]() { auto executeThunk = [&]() -> int { invokeFunction(context, entryFunction); return 0; }; WASI::catchExit(std::move(executeThunk)); }, [](Runtime::Exception* exception) { Errors::fatalf("Runtime exception: %s", describeException(exception).c_str()); }); executeTimer.stop(); executeMs = executeTimer.getMilliseconds(); } Uptr peakMemoryBytes = Platform::getPeakMemoryUsageBytes(); if(jsonOutput) { Log::printf(Log::output, "{\n" " \"file\": \"%s\",\n" " \"phases\": {\n" " \"load_ms\": %.2f,\n" " \"compile_ms\": %.2f,\n" " \"instantiate_ms\": %.2f,\n" " \"execute_ms\": %.2f\n" " },\n" " \"peak_memory_bytes\": %" WAVM_PRIuPTR "\n" "}\n", getFilenameAndExtension(filename).c_str(), loadMs, compileMs, instantiateMs, executeMs, peakMemoryBytes); } else { Log::printf(Log::output, "File: %s\n", filename); Log::printf(Log::output, " load: %.2fms\n", loadMs); Log::printf(Log::output, " compile: %.2fms\n", compileMs); Log::printf(Log::output, " instantiate: %.2fms\n", instantiateMs); Log::printf(Log::output, " execute: %.2fms\n", executeMs); Log::printf(Log::output, " peak memory: %" WAVM_PRIuPTR " bytes\n", peakMemoryBytes); } // Cleanup wasiProcess.reset(); WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartment))); return 0; } ================================================ FILE: Programs/wavm/Testing/DumpTestModules.cpp ================================================ #include #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Logging/Logging.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/TestScript.h" #include "WAVM/WASTParse/WASTParse.h" #include "WAVM/WASTPrint/WASTPrint.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::WAST; enum class DumpFormat { wast, wasm, both }; static void dumpWAST(const std::string& wastString, const char* outputDir) { const Uptr wastHash = Hash()(wastString); const std::string outputPath = std::string(outputDir) + "/" + std::to_string(wastHash) + ".wast"; WAVM_ERROR_UNLESS(saveFile(outputPath.c_str(), wastString.c_str(), wastString.size())); } static void dumpWASM(const U8* wasmBytes, Uptr numBytes, const char* outputDir) { const Uptr wasmHash = XXH(wasmBytes, numBytes, 0); const std::string outputPath = std::string(outputDir) + "/" + std::to_string(wasmHash) + ".wasm"; WAVM_ERROR_UNLESS(saveFile(outputPath.c_str(), wasmBytes, numBytes)); } static void dumpModule(const Module& module, const char* outputDir, DumpFormat dumpFormat) { if(dumpFormat == DumpFormat::wast || dumpFormat == DumpFormat::both) { const std::string wastString = WAST::print(module); dumpWAST(wastString, outputDir); } if(dumpFormat == DumpFormat::wasm || dumpFormat == DumpFormat::both) { std::vector wasmBytes = WASM::saveBinaryModule(module); dumpWASM(wasmBytes.data(), wasmBytes.size(), outputDir); } } static void dumpCommandModules(const char* filename, const Command* command, const char* outputDir, DumpFormat dumpFormat) { switch(command->type) { case Command::action: { auto actionCommand = (ActionCommand*)command; switch(actionCommand->action->type) { case ActionType::_module: { auto moduleAction = (ModuleAction*)actionCommand->action.get(); Log::printf(Log::output, "Dumping module at %s:%s...\n", filename, moduleAction->locus.describe().c_str()); dumpModule(*moduleAction->module, outputDir, dumpFormat); break; } case ActionType::invoke: case ActionType::get: default: break; } break; } case Command::assert_unlinkable: { auto assertUnlinkableCommand = (AssertUnlinkableCommand*)command; Log::printf(Log::output, "Dumping unlinkable module at %s:%s...\n", filename, assertUnlinkableCommand->locus.describe().c_str()); dumpModule(*assertUnlinkableCommand->moduleAction->module, outputDir, dumpFormat); break; } case Command::assert_invalid: case Command::assert_malformed: { auto assertInvalidOrMalformedCommand = (AssertInvalidOrMalformedCommand*)command; Log::printf(Log::output, "Dumping malformed or invalid module at %s:%s...\n", filename, assertInvalidOrMalformedCommand->locus.describe().c_str()); if(assertInvalidOrMalformedCommand->quotedModuleType == QuotedModuleType::text && (dumpFormat == DumpFormat::wast || dumpFormat == DumpFormat::both)) { dumpWAST(assertInvalidOrMalformedCommand->quotedModuleString, outputDir); } else if(assertInvalidOrMalformedCommand->quotedModuleType == QuotedModuleType::binary && (dumpFormat == DumpFormat::wasm || dumpFormat == DumpFormat::both)) { dumpWASM((const U8*)assertInvalidOrMalformedCommand->quotedModuleString.data(), assertInvalidOrMalformedCommand->quotedModuleString.size(), outputDir); } break; } case Command::thread: { auto threadCommand = (ThreadCommand*)command; for(auto& innerCommand : threadCommand->commands) { dumpCommandModules(filename, innerCommand.get(), outputDir, dumpFormat); } break; } case Command::_register: case Command::assert_return: case Command::assert_return_arithmetic_nan: case Command::assert_return_canonical_nan: case Command::assert_return_arithmetic_nan_f32x4: case Command::assert_return_canonical_nan_f32x4: case Command::assert_return_arithmetic_nan_f64x2: case Command::assert_return_canonical_nan_f64x2: case Command::assert_return_func: case Command::assert_trap: case Command::assert_throws: case Command::wait: default: break; }; } int execDumpTestModules(int argc, char** argv) { const char* filename = nullptr; const char* outputDir = "."; DumpFormat dumpFormat = DumpFormat::both; bool showHelpAndExit = false; for(Iptr argumentIndex = 0; argumentIndex < argc; ++argumentIndex) { if(!strcmp(argv[argumentIndex], "--output-dir")) { ++argumentIndex; if(argumentIndex < argc) { outputDir = argv[argumentIndex]; } else { Log::printf(Log::error, "Expected directory after '--output-dir'\n"); showHelpAndExit = true; break; } } else if(!strcmp(argv[argumentIndex], "--wast")) { dumpFormat = dumpFormat == DumpFormat::wasm ? DumpFormat::both : DumpFormat::wast; } else if(!strcmp(argv[argumentIndex], "--wasm")) { dumpFormat = dumpFormat == DumpFormat::wast ? DumpFormat::both : DumpFormat::wasm; } else if(!filename) { filename = argv[argumentIndex]; } else { Log::printf(Log::error, "Unrecognized argument: %s\n", argv[argumentIndex]); showHelpAndExit = true; break; } } if(!filename) { showHelpAndExit = true; } if(showHelpAndExit) { Log::printf( Log::error, "Usage: wavm test dumpmodules [--output-dir ] [--wast] [--wasm] \n"); return EXIT_FAILURE; } WAVM_ASSERT(filename); Log::printf(Log::output, "Dumping test modules from '%s'...\n", filename); // Read the file into a vector. std::vector testScriptBytes; if(!loadFile(filename, testScriptBytes)) { return EXIT_FAILURE; } // Make sure the file is null terminated. testScriptBytes.push_back(0); // Process the test script. std::vector> testCommands; std::vector testErrors; // Parse the test script. IR::FeatureSpec featureSpec(IR::FeatureLevel::wavm); WAST::parseTestCommands((const char*)testScriptBytes.data(), testScriptBytes.size(), featureSpec, testCommands, testErrors); if(!testErrors.size()) { for(auto& command : testCommands) { dumpCommandModules(filename, command.get(), outputDir, dumpFormat); } return EXIT_SUCCESS; } else { reportParseErrors(filename, (const char*)testScriptBytes.data(), testErrors); return EXIT_FAILURE; } } ================================================ FILE: Programs/wavm/Testing/RunTestScript.cpp ================================================ #include #include #include #include #include #include #include #include #include #include #include "../wavm.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/IR.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/FloatComponents.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Timing.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Platform/Thread.h" #include "WAVM/Runtime/Intrinsics.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/RuntimeABI/RuntimeABI.h" #include "WAVM/ThreadTest/ThreadTest.h" #include "WAVM/WASTParse/TestScript.h" #include "WAVM/WASTParse/WASTParse.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; using namespace WAVM::WAST; WAVM_DEFINE_INTRINSIC_MODULE(spectest); // Try to use the default thread stack size to make sure WAVM passes tests with it, but on // MacOS the default thread stack size of 512KB is not enough for sanitized builds. #if defined(__APPLE__) && (WAVM_ENABLE_ASAN || WAVM_ENABLE_UBSAN) constexpr Uptr threadStackNumBytes = 1 * 1024 * 1024; #else constexpr Uptr threadStackNumBytes = 0; #endif struct Config { bool strictAssertInvalid{false}; bool strictAssertMalformed{false}; bool testCloning{false}; bool traceTests{false}; bool traceLLVMIR{false}; bool traceAssembly{false}; FeatureSpec featureSpec{FeatureLevel::standard}; }; enum class TestScriptStateKind { root, childThread }; struct TestScriptState { const char* scriptFilename; const Config& config; TestScriptStateKind kind; bool hasInstantiatedModule; GCPointer lastInstance; GCPointer compartment; GCPointer context; HashMap> moduleInternalNameToInstanceMap; HashMap> moduleNameToInstanceMap; std::vector errors; HashMap> threads; TestScriptState(const char* inScriptFilename, const Config& inConfig) : scriptFilename(inScriptFilename) , config(inConfig) , kind(TestScriptStateKind::root) , hasInstantiatedModule(false) , compartment(Runtime::createCompartment()) , context(Runtime::createContext(compartment)) { addIntrinsicModules(); } TestScriptState(TestScriptState&& movee) noexcept : scriptFilename(movee.scriptFilename) , config(movee.config) , kind(movee.kind) , hasInstantiatedModule(movee.hasInstantiatedModule) , lastInstance(movee.lastInstance) , compartment(std::move(movee.compartment)) , context(std::move(movee.context)) , moduleInternalNameToInstanceMap(std::move(movee.moduleInternalNameToInstanceMap)) , moduleNameToInstanceMap(std::move(movee.moduleNameToInstanceMap)) { } TestScriptState forkThread() const { TestScriptState result(scriptFilename, config, TestScriptStateKind::childThread); result.scriptFilename = scriptFilename; result.hasInstantiatedModule = false; result.compartment = compartment; result.context = context; result.addIntrinsicModules(); return result; } TestScriptState* clone() const { WAVM_ASSERT(kind == TestScriptStateKind::root); Compartment* clonedCompartment = Runtime::cloneCompartment(compartment); if(!clonedCompartment) { return nullptr; } Context* clonedContext = Runtime::cloneContext(context, clonedCompartment); if(!clonedContext) { WAVM_ERROR_UNLESS(tryCollectCompartment(clonedCompartment)); } TestScriptState* result = new TestScriptState(scriptFilename, config, TestScriptStateKind::root); result->compartment = clonedCompartment; result->context = clonedContext; result->hasInstantiatedModule = hasInstantiatedModule; result->lastInstance = Runtime::remapToClonedCompartment(lastInstance, result->compartment); for(const auto& pair : moduleInternalNameToInstanceMap) { result->moduleInternalNameToInstanceMap.addOrFail( pair.key, Runtime::remapToClonedCompartment(pair.value, result->compartment)); } for(const auto& pair : moduleNameToInstanceMap) { result->moduleNameToInstanceMap.addOrFail( pair.key, Runtime::remapToClonedCompartment(pair.value, result->compartment)); } result->errors = errors; return result; } ~TestScriptState() { WAVM_ASSERT(!threads.size()); if(compartment && kind == TestScriptStateKind::root) { // Ensure that the compartment is garbage-collected after clearing all the references // held by the script state. lastInstance = nullptr; context = nullptr; moduleInternalNameToInstanceMap.clear(); moduleNameToInstanceMap.clear(); WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartment))); } } private: TestScriptState(const char* inScriptFilename, const Config& inConfig, TestScriptStateKind inKind) : scriptFilename(inScriptFilename), config(inConfig), kind(inKind) { } void addIntrinsicModules() { moduleNameToInstanceMap.set( "spectest", Intrinsics::instantiateModule( compartment, {WAVM_INTRINSIC_MODULE_REF(spectest)}, "spectest")); moduleNameToInstanceMap.set("threadTest", ThreadTest::instantiate(compartment)); } }; struct TestScriptThread { TestScriptState state; const ThreadCommand* threadCommand; Platform::Thread* platformThread; }; struct TestScriptResolver : Resolver { TestScriptResolver(const TestScriptState& inState) : state(inState) {} bool resolve(const std::string& moduleName, const std::string& exportName, ExternType type, Object*& outObject) override { auto namedModule = state.moduleNameToInstanceMap.get(moduleName); if(namedModule && *namedModule) { outObject = getInstanceExport(*namedModule, exportName); return outObject != nullptr && isA(outObject, type); } return false; } private: const TestScriptState& state; }; WAVM_VALIDATE_AS_PRINTF(3, 4) static void testErrorf(TestScriptState& state, const TextFileLocus& locus, const char* messageFormat, ...) { va_list messageArgs; va_start(messageArgs, messageFormat); // Call vsnprintf to determine how many bytes the formatted string will be. // vsnprintf consumes the va_list passed to it, so make a copy of it. va_list messageArgsProbe; va_copy(messageArgsProbe, messageArgs); int numFormattedChars = std::vsnprintf(nullptr, 0, messageFormat, messageArgsProbe); va_end(messageArgsProbe); // Allocate a buffer for the formatted message. WAVM_ERROR_UNLESS(numFormattedChars >= 0); std::string formattedMessage; formattedMessage.resize(numFormattedChars); // Print the formatted message int numWrittenChars = std::vsnprintf( (char*)formattedMessage.data(), numFormattedChars + 1, messageFormat, messageArgs); WAVM_ASSERT(numWrittenChars == numFormattedChars); va_end(messageArgs); // Add the error to the cursor's error list. state.errors.push_back({locus, std::move(formattedMessage)}); } static Instance* getModuleContextByInternalName(TestScriptState& state, const TextFileLocus& locus, const char* context, const std::string& internalName) { // Look up the module this invoke uses. if(!state.hasInstantiatedModule) { testErrorf(state, locus, "no module to use in %s", context); return nullptr; } Instance* instance = state.lastInstance; if(internalName.size()) { auto namedModule = state.moduleInternalNameToInstanceMap.get(internalName); if(!namedModule) { testErrorf(state, locus, "unknown %s module name: %s", context, internalName.c_str()); return nullptr; } instance = *namedModule; } return instance; } static Runtime::ExceptionType* getExpectedTrapType(WAST::ExpectedTrapType expectedType) { switch(expectedType) { case WAST::ExpectedTrapType::outOfBoundsMemoryAccess: return Runtime::ExceptionTypes::outOfBoundsMemoryAccess; case WAST::ExpectedTrapType::outOfBoundsTableAccess: return Runtime::ExceptionTypes::outOfBoundsTableAccess; case WAST::ExpectedTrapType::outOfBoundsDataSegmentAccess: return Runtime::ExceptionTypes::outOfBoundsDataSegmentAccess; case WAST::ExpectedTrapType::outOfBoundsElemSegmentAccess: return Runtime::ExceptionTypes::outOfBoundsElemSegmentAccess; case WAST::ExpectedTrapType::stackOverflow: return Runtime::ExceptionTypes::stackOverflow; case WAST::ExpectedTrapType::integerDivideByZeroOrIntegerOverflow: return Runtime::ExceptionTypes::integerDivideByZeroOrOverflow; case WAST::ExpectedTrapType::invalidFloatOperation: return Runtime::ExceptionTypes::invalidFloatOperation; case WAST::ExpectedTrapType::invokeSignatureMismatch: return Runtime::ExceptionTypes::invokeSignatureMismatch; case WAST::ExpectedTrapType::reachedUnreachable: return Runtime::ExceptionTypes::reachedUnreachable; case WAST::ExpectedTrapType::indirectCallSignatureMismatch: return Runtime::ExceptionTypes::indirectCallSignatureMismatch; case WAST::ExpectedTrapType::uninitializedTableElement: return Runtime::ExceptionTypes::uninitializedTableElement; case WAST::ExpectedTrapType::outOfMemory: return Runtime::ExceptionTypes::outOfMemory; case WAST::ExpectedTrapType::misalignedAtomicMemoryAccess: return Runtime::ExceptionTypes::misalignedAtomicMemoryAccess; case WAST::ExpectedTrapType::invalidArgument: return Runtime::ExceptionTypes::invalidArgument; case WAST::ExpectedTrapType::waitOnUnsharedMemory: return Runtime::ExceptionTypes::waitOnUnsharedMemory; case WAST::ExpectedTrapType::outOfBounds: default: WAVM_UNREACHABLE(); }; } static std::string describeExpectedTrapType(WAST::ExpectedTrapType expectedType) { if(expectedType == WAST::ExpectedTrapType::outOfBounds) { return "wavm.outOfBounds*"; } else { return describeExceptionType(getExpectedTrapType(expectedType)); } } static bool isExpectedExceptionType(WAST::ExpectedTrapType expectedType, Runtime::ExceptionType* actualType) { // WAVM has more precise trap types for out-of-bounds accesses than the spec tests. if(expectedType == WAST::ExpectedTrapType::outOfBounds) { return actualType == Runtime::ExceptionTypes::outOfBoundsMemoryAccess || actualType == Runtime::ExceptionTypes::outOfBoundsDataSegmentAccess || actualType == Runtime::ExceptionTypes::outOfBoundsTableAccess || actualType == Runtime::ExceptionTypes::outOfBoundsElemSegmentAccess; } else if(expectedType == WAST::ExpectedTrapType::outOfBoundsMemoryAccess) { return actualType == Runtime::ExceptionTypes::outOfBoundsMemoryAccess || actualType == Runtime::ExceptionTypes::outOfBoundsDataSegmentAccess; } else if(expectedType == WAST::ExpectedTrapType::outOfBoundsTableAccess) { return actualType == Runtime::ExceptionTypes::outOfBoundsTableAccess || actualType == Runtime::ExceptionTypes::outOfBoundsElemSegmentAccess; } else { return getExpectedTrapType(expectedType) == actualType; } } static void traceLLVMIR(const char* moduleName, const IR::Module& irModule) { std::string llvmIR = LLVMJIT::emitLLVMIR(irModule, LLVMJIT::getHostTargetSpec(), true); Log::printf(Log::output, "%s LLVM IR:\n%s\n", moduleName, llvmIR.c_str()); } static void traceAssembly(const char* moduleName, ModuleConstRefParam compiledModule) { const std::vector objectBytes = getObjectCode(compiledModule); const std::string disassemblyString = LLVMJIT::disassembleObject(LLVMJIT::getHostTargetSpec(), objectBytes); Log::printf( Log::output, "%s object code disassembly:\n%s\n", moduleName, disassemblyString.c_str()); } static void maybeCollectGarbage(TestScriptState& state) { // collectCompartmentGarbage assumes that no WebAssembly code is running in the compartment, so // only run it for the root test script state, and if it has no active child threads. if(state.kind == TestScriptStateKind::root && !state.threads.size()) { collectCompartmentGarbage(state.compartment); } } static bool processAction(TestScriptState& state, Action* action, std::vector* outResults) { if(outResults) { outResults->clear(); } switch(action->type) { case ActionType::_module: { auto moduleAction = (ModuleAction*)action; // Clear the previous module. state.lastInstance = nullptr; maybeCollectGarbage(state); // Link and instantiate the module. TestScriptResolver resolver(state); LinkResult linkResult = linkModule(*moduleAction->module, resolver); if(linkResult.success) { std::string moduleDebugName = std::string(state.scriptFilename) + ":" + action->locus.describe(); if(state.config.traceLLVMIR) { traceLLVMIR(moduleDebugName.c_str(), *moduleAction->module); } ModuleRef compiledModule = compileModule(*moduleAction->module); if(state.config.traceAssembly) { traceAssembly(moduleDebugName.c_str(), compiledModule); } state.hasInstantiatedModule = true; state.lastInstance = instantiateModule(state.compartment, compiledModule, std::move(linkResult.resolvedImports), std::move(moduleDebugName)); // Call the module start function, if it has one. Function* startFunction = getStartFunction(state.lastInstance); if(startFunction) { invokeFunction(state.context, startFunction); } } else { // Create an error for each import that couldn't be linked. for(auto& missingImport : linkResult.missingImports) { testErrorf(state, moduleAction->locus, "missing import module=\"%s\" export=\"%s\" type=\"%s\"", missingImport.moduleName.c_str(), missingImport.exportName.c_str(), asString(missingImport.type).c_str()); } } // Register the module under its internal name. if(moduleAction->internalModuleName.size()) { state.moduleInternalNameToInstanceMap.set(moduleAction->internalModuleName, state.lastInstance); } return true; } case ActionType::invoke: { auto invokeAction = (InvokeAction*)action; // Look up the module this invoke uses. Instance* instance = getModuleContextByInternalName( state, invokeAction->locus, "invoke", invokeAction->internalModuleName); // A null instance at this point indicates a module that failed to link or instantiate, so // don't produce further errors. if(!instance) { return false; } // Find the named export in the instance. auto function = asFunctionNullable(getInstanceExport(instance, invokeAction->exportName)); if(!function) { testErrorf(state, invokeAction->locus, "couldn't find exported function with name: %s", invokeAction->exportName.c_str()); return false; } // Split the tagged argument values into their types and untagged values. std::vector argTypes; std::vector untaggedArgs; for(const Value& arg : invokeAction->arguments) { argTypes.push_back(arg.type); untaggedArgs.push_back(arg); } // Infer the expected type of the function from the number and type of the invoke's // arguments and the function's actual result types. const FunctionType invokeSig(getFunctionType(function).results(), TypeTuple(argTypes)); // Allocate an array to receive the invoke results. std::vector untaggedResults; untaggedResults.resize(invokeSig.results().size()); // Invoke the function. invokeFunction( state.context, function, invokeSig, untaggedArgs.data(), untaggedResults.data()); // Convert the untagged result values to tagged values. if(outResults) { outResults->resize(invokeSig.results().size()); for(Uptr resultIndex = 0; resultIndex < untaggedResults.size(); ++resultIndex) { const ValueType resultType = invokeSig.results()[resultIndex]; const UntaggedValue& untaggedResult = untaggedResults[resultIndex]; (*outResults)[resultIndex] = Value(resultType, untaggedResult); } } return true; } case ActionType::get: { auto getAction = (GetAction*)action; // Look up the module this get uses. Instance* instance = getModuleContextByInternalName( state, getAction->locus, "get", getAction->internalModuleName); // A null instance at this point indicates a module that failed to link or instantiate, so // just return without further errors. if(!instance) { return false; } // Find the named export in the instance. auto global = asGlobalNullable(getInstanceExport(instance, getAction->exportName)); if(!global) { testErrorf(state, getAction->locus, "couldn't find exported global with name: %s", getAction->exportName.c_str()); return false; } // Get the value of the specified global. if(outResults) { *outResults = {getGlobalValue(state.context, global)}; } return true; } default: WAVM_UNREACHABLE(); } } // Tests whether a float is an "arithmetic" NaN, which have the MSB of the significand set. template bool isArithmeticNaN(Float value) { FloatComponents components; components.value = value; return components.bits.exponent == FloatComponents::maxExponentBits && components.bits.significand >= FloatComponents::canonicalSignificand; } // Tests whether a float is a "canonical" NaN, which *only* have the MSB of the significand set. template bool isCanonicalNaN(Float value) { FloatComponents components; components.value = value; return components.bits.exponent == FloatComponents::maxExponentBits && components.bits.significand == FloatComponents::canonicalSignificand; } template bool isFloatResultInExpectedSet(Float result, const FloatResultSet& expectedResultSet) { switch(expectedResultSet.type) { case FloatResultSet::Type::canonicalNaN: return isCanonicalNaN(result); case FloatResultSet::Type::arithmeticNaN: return isArithmeticNaN(result); case FloatResultSet::Type::literal: return !memcmp(&result, &expectedResultSet.literal, sizeof(Float)); default: WAVM_UNREACHABLE(); }; } static bool isResultInExpectedSet(const Value& result, const ResultSet& expectedResultSet) { switch(expectedResultSet.type) { case ResultSet::Type::i32_const: return result.type == ValueType::i32 && result.i32 == expectedResultSet.i32; case ResultSet::Type::i64_const: return result.type == ValueType::i64 && result.i64 == expectedResultSet.i64; case ResultSet::Type::i8x16_const: case ResultSet::Type::i16x8_const: case ResultSet::Type::i32x4_const: case ResultSet::Type::i64x2_const: return result.type == ValueType::v128 && result.v128.i64x2[0] == expectedResultSet.i64x2[0] && result.v128.i64x2[1] == expectedResultSet.i64x2[1]; case ResultSet::Type::f32_const: return result.type == ValueType::f32 && isFloatResultInExpectedSet(result.f32, expectedResultSet.f32); case ResultSet::Type::f64_const: return result.type == ValueType::f64 && isFloatResultInExpectedSet(result.f64, expectedResultSet.f64); case ResultSet::Type::f32x4_const: return result.type == ValueType::v128 && isFloatResultInExpectedSet(result.v128.f32x4[0], expectedResultSet.f32x4[0]) && isFloatResultInExpectedSet(result.v128.f32x4[1], expectedResultSet.f32x4[1]) && isFloatResultInExpectedSet(result.v128.f32x4[2], expectedResultSet.f32x4[2]) && isFloatResultInExpectedSet(result.v128.f32x4[3], expectedResultSet.f32x4[3]); case ResultSet::Type::f64x2_const: return result.type == ValueType::v128 && isFloatResultInExpectedSet(result.v128.f64x2[0], expectedResultSet.f64x2[0]) && isFloatResultInExpectedSet(result.v128.f64x2[1], expectedResultSet.f64x2[1]); case ResultSet::Type::ref_extern: return isReferenceType(result.type) && result.object == expectedResultSet.object; case ResultSet::Type::ref_func: return isReferenceType(result.type) && result.object && result.object->kind == ObjectKind::function; case ResultSet::Type::ref_null: return result.type == asValueType(expectedResultSet.nullReferenceType) && !result.object; case ResultSet::Type::either: for(const std::shared_ptr& alternative : expectedResultSet.alternatives) { if(isResultInExpectedSet(result, *alternative)) { return true; } } return false; default: WAVM_UNREACHABLE(); }; } template std::string asString(const FloatResultSet resultSet) { switch(resultSet.type) { case FloatResultSet::Type::canonicalNaN: return "nan:canonical"; case FloatResultSet::Type::arithmeticNaN: return "nan:arithmetic"; case FloatResultSet::Type::literal: return asString(resultSet.literal); default: WAVM_UNREACHABLE(); }; } static std::string asString(const ResultSet& resultSet) { switch(resultSet.type) { case ResultSet::Type::i32_const: return "(i32.const " + asString(resultSet.i32) + ')'; case ResultSet::Type::i64_const: return "(i64.const " + asString(resultSet.i64) + ')'; case ResultSet::Type::i8x16_const: { std::string string = "(v128.const i8x16"; for(Uptr laneIndex = 0; laneIndex < 16; ++laneIndex) { string += ' '; string += asString(resultSet.i8x16[laneIndex]); } string += ')'; return string; } case ResultSet::Type::i16x8_const: { std::string string = "(v128.const i16x8"; for(Uptr laneIndex = 0; laneIndex < 8; ++laneIndex) { string += ' '; string += asString(resultSet.i16x8[laneIndex]); } string += ')'; return string; } case ResultSet::Type::i32x4_const: { std::string string = "(v128.const i32x4"; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { string += ' '; string += asString(resultSet.i32x4[laneIndex]); } string += ')'; return string; } case ResultSet::Type::i64x2_const: { std::string string = "(v128.const i64x2"; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { string += ' '; string += asString(resultSet.i64x2[laneIndex]); } string += ')'; return string; } case ResultSet::Type::f32_const: return "(f32.const " + asString(resultSet.f32) + ')'; case ResultSet::Type::f64_const: return "(f64.const " + asString(resultSet.f64) + ')'; case ResultSet::Type::f32x4_const: { std::string string = "(v128.const f32x4"; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { string += ' '; string += asString(resultSet.f32x4[laneIndex]); } string += ')'; return string; } case ResultSet::Type::f64x2_const: { std::string string = "(v128.const f64x2"; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { string += ' '; string += asString(resultSet.f64x2[laneIndex]); } string += ')'; return string; } case ResultSet::Type::ref_extern: { // buffer needs 34 characters: // (ref.extern <0xHHHHHHHHHHHHHHHH>)\0 char buffer[34]; snprintf(buffer, sizeof(buffer), "(ref.extern <0x%.16" WAVM_PRIxPTR ">)", reinterpret_cast(resultSet.object)); return std::string(buffer); } case ResultSet::Type::ref_func: return "(ref.func)"; case ResultSet::Type::ref_null: { // buffer needs 18 characters: // (ref.null (func|extern))\0 char buffer[18]; snprintf(buffer, sizeof(buffer), "(ref.null %s)", resultSet.nullReferenceType == ReferenceType::funcref ? "func" : "extern"); return std::string(buffer); } case ResultSet::Type::either: { std::string result = "(either"; for(const std::shared_ptr& alternative : resultSet.alternatives) { result += ' '; result += asString(*alternative); } result += ')'; return result; } default: WAVM_UNREACHABLE(); }; } static ResultSet asResultSet(const Value& value, ResultSet::Type expectedType) { ResultSet resultSet; if(value.type == ValueType::v128 && (expectedType == ResultSet::Type::i8x16_const || expectedType == ResultSet::Type::i16x8_const || expectedType == ResultSet::Type::i32x4_const || expectedType == ResultSet::Type::i64x2_const)) { resultSet.type = expectedType; memcpy(resultSet.i8x16, value.v128.i8x16, sizeof(V128)); } else if(value.type == ValueType::v128 && expectedType == ResultSet::Type::f32x4_const) { resultSet.type = expectedType; for(Uptr laneIndex = 0; laneIndex < 4; ++laneIndex) { resultSet.f32x4[laneIndex].type = FloatResultSet::Type::literal; resultSet.f32x4[laneIndex].literal = value.v128.f32x4[laneIndex]; } } else if(value.type == ValueType::v128 && expectedType == ResultSet::Type::f64x2_const) { resultSet.type = expectedType; for(Uptr laneIndex = 0; laneIndex < 2; ++laneIndex) { resultSet.f64x2[laneIndex].type = FloatResultSet::Type::literal; resultSet.f64x2[laneIndex].literal = value.v128.f64x2[laneIndex]; } } else { switch(value.type) { case ValueType::i32: resultSet.type = ResultSet::Type::i32_const; resultSet.i32 = value.i32; break; case ValueType::i64: resultSet.type = ResultSet::Type::i64_const; resultSet.i64 = value.i64; break; case ValueType::f32: resultSet.type = ResultSet::Type::f32_const; resultSet.f32.type = FloatResultSet::Type::literal; resultSet.f32.literal = value.f32; break; case ValueType::f64: resultSet.type = ResultSet::Type::f64_const; resultSet.f64.type = FloatResultSet::Type::literal; resultSet.f64.literal = value.f64; break; case ValueType::v128: resultSet.type = ResultSet::Type::i8x16_const; memcpy(resultSet.i8x16, value.v128.i8x16, sizeof(V128)); break; case ValueType::externref: resultSet.type = ResultSet::Type::ref_extern; resultSet.object = value.object; break; case ValueType::funcref: resultSet.type = ResultSet::Type::ref_extern; resultSet.object = asObject(value.function); break; case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); }; } return resultSet; } static bool areResultsInExpectedSet(const std::vector& results, const std::vector& expectedResultSets, std::string& outMessage) { if(results.size() != expectedResultSets.size()) { outMessage = "expected " + std::to_string(expectedResultSets.size()) + " results, but got " + asString(results); return false; } for(Uptr resultIndex = 0; resultIndex < results.size(); ++resultIndex) { if(!isResultInExpectedSet(results[resultIndex], expectedResultSets[resultIndex])) { outMessage = "expected " + asString(expectedResultSets[resultIndex]) + ", but got " + asString(asResultSet(results[resultIndex], expectedResultSets[resultIndex].type)); if(results.size() != 1) { outMessage += " in result " + std::to_string(resultIndex); } return false; } } return true; } static void processRegister(TestScriptState& state, const RegisterCommand* registerCommand) { // Look up a module by internal name, and bind the result to the public name. Instance* instance = getModuleContextByInternalName( state, registerCommand->locus, "register", registerCommand->internalModuleName); state.moduleNameToInstanceMap.set(registerCommand->moduleName, instance); } static void processAssertReturn(TestScriptState& state, const AssertReturnCommand* assertCommand) { // Execute the action and do a bitwise comparison of the result to the expected result. std::vector actionResults; std::string errorMessage; if(processAction(state, assertCommand->action.get(), &actionResults) && !areResultsInExpectedSet(actionResults, assertCommand->expectedResultSets, errorMessage)) { testErrorf(state, assertCommand->locus, "%s", errorMessage.c_str()); } } static void processAssertReturnNaN(TestScriptState& state, const AssertReturnNaNCommand* assertCommand) { // Execute the action and check that the result is a NaN of the expected type. std::vector actionResults; if(processAction(state, assertCommand->action.get(), &actionResults)) { if(actionResults.size() != 1) { testErrorf(state, assertCommand->locus, "expected single floating-point result, but got %s", asString(actionResults).c_str()); } else { Value actionResult = actionResults[0]; bool requireCanonicalNaN = false; bool isError; if(assertCommand->type == Command::assert_return_canonical_nan) { requireCanonicalNaN = true; isError = actionResult.type == ValueType::f32 ? !isCanonicalNaN(actionResult.f32) : actionResult.type == ValueType::f64 ? !isCanonicalNaN(actionResult.f64) : true; } else if(assertCommand->type == Command::assert_return_arithmetic_nan) { isError = actionResult.type == ValueType::f32 ? !isArithmeticNaN(actionResult.f32) : actionResult.type == ValueType::f64 ? !isArithmeticNaN(actionResult.f64) : true; } else if(assertCommand->type == Command::assert_return_canonical_nan_f32x4) { requireCanonicalNaN = true; isError = !isCanonicalNaN(actionResult.v128.f32x4[0]) || !isCanonicalNaN(actionResult.v128.f32x4[1]) || !isCanonicalNaN(actionResult.v128.f32x4[2]) || !isCanonicalNaN(actionResult.v128.f32x4[3]); } else if(assertCommand->type == Command::assert_return_arithmetic_nan_f32x4) { isError = !isArithmeticNaN(actionResult.v128.f32x4[0]) || !isArithmeticNaN(actionResult.v128.f32x4[1]) || !isArithmeticNaN(actionResult.v128.f32x4[2]) || !isArithmeticNaN(actionResult.v128.f32x4[3]); } else if(assertCommand->type == Command::assert_return_canonical_nan_f64x2) { requireCanonicalNaN = true; isError = !isCanonicalNaN(actionResult.v128.f64x2[0]) || !isCanonicalNaN(actionResult.v128.f64x2[1]); } else if(assertCommand->type == Command::assert_return_arithmetic_nan_f64x2) { isError = !isArithmeticNaN(actionResult.v128.f64x2[0]) || !isArithmeticNaN(actionResult.v128.f64x2[1]); } else { WAVM_UNREACHABLE(); } if(isError) { testErrorf(state, assertCommand->locus, requireCanonicalNaN ? "expected canonical NaN but got %s" : "expected arithmetic NaN but got %s", asString(actionResult).c_str()); } } } } static void processAssertReturnFunc(TestScriptState& state, const AssertReturnFuncCommand* assertCommand) { // Execute the action and check that the result is a function. std::vector actionResults; if(processAction(state, assertCommand->action.get(), &actionResults)) { if(actionResults.size() != 1 || !isReferenceType(actionResults[0].type) || !asFunctionNullable(actionResults[0].object)) { testErrorf(state, assertCommand->locus, "expected single reference result but got %s", asString(actionResults).c_str()); } } } static void processAssertTrap(TestScriptState& state, const AssertTrapCommand* assertCommand) { Runtime::catchRuntimeExceptions( [&] { std::vector actionResults; if(processAction(state, assertCommand->action.get(), &actionResults)) { testErrorf(state, assertCommand->locus, "expected trap but got %s", asString(actionResults).c_str()); } }, [&](Runtime::Exception* exception) { if(!isExpectedExceptionType(assertCommand->expectedType, exception->type)) { testErrorf(state, assertCommand->action->locus, "expected %s trap but got %s trap", describeExpectedTrapType(assertCommand->expectedType).c_str(), describeExceptionType(exception->type).c_str()); } destroyException(exception); }); } static void processAssertThrows(TestScriptState& state, const AssertThrowsCommand* assertCommand) { // Look up the module containing the expected exception type. Instance* instance = getModuleContextByInternalName(state, assertCommand->locus, "assert_throws", assertCommand->exceptionTypeInternalModuleName); // A null instance at this point indicates a module that failed to link or instantiate, so // don't produce further errors. if(!instance) { return; } // Find the named export in the instance. auto expectedExceptionType = asExceptionTypeNullable( getInstanceExport(instance, assertCommand->exceptionTypeExportName)); if(!expectedExceptionType) { testErrorf(state, assertCommand->locus, "couldn't find exported exception type with name: %s", assertCommand->exceptionTypeExportName.c_str()); return; } Runtime::catchRuntimeExceptions( [&] { std::vector actionResults; if(processAction(state, assertCommand->action.get(), &actionResults)) { testErrorf(state, assertCommand->locus, "expected trap but got %s", asString(actionResults).c_str()); } }, [&](Runtime::Exception* exception) { if(exception->type != expectedExceptionType) { testErrorf(state, assertCommand->action->locus, "expected %s exception but got %s exception", describeExceptionType(expectedExceptionType).c_str(), describeExceptionType(exception->type).c_str()); } else { TypeTuple exceptionParameterTypes = getExceptionTypeParameters(expectedExceptionType); for(Uptr argumentIndex = 0; argumentIndex < exceptionParameterTypes.size(); ++argumentIndex) { Value argumentValue(exceptionParameterTypes[argumentIndex], exception->arguments[argumentIndex]); if(argumentValue != assertCommand->expectedArguments[argumentIndex]) { testErrorf( state, assertCommand->locus, "expected %s for exception argument %" WAVM_PRIuPTR " but got %s", asString(assertCommand->expectedArguments[argumentIndex]).c_str(), argumentIndex, asString(argumentValue).c_str()); } } } destroyException(exception); }); } static void processAssertInvalid(TestScriptState& state, const AssertInvalidOrMalformedCommand* assertCommand) { switch(assertCommand->wasInvalidOrMalformed) { case InvalidOrMalformed::wellFormedAndValid: testErrorf(state, assertCommand->locus, "module was well formed and valid"); break; case InvalidOrMalformed::malformed: if(state.config.strictAssertInvalid) { testErrorf(state, assertCommand->locus, "module was malformed"); } break; case InvalidOrMalformed::invalid: default: break; }; } static void processAssertMalformed(TestScriptState& state, const AssertInvalidOrMalformedCommand* assertCommand) { switch(assertCommand->wasInvalidOrMalformed) { case InvalidOrMalformed::wellFormedAndValid: testErrorf(state, assertCommand->locus, "module was well formed and valid"); break; case InvalidOrMalformed::invalid: if(state.config.strictAssertMalformed) { testErrorf(state, assertCommand->locus, "module was invalid"); } break; case InvalidOrMalformed::malformed: default: break; }; } static void processAssertUnlinkable(TestScriptState& state, const AssertUnlinkableCommand* assertCommand) { Runtime::catchRuntimeExceptions( [&] { TestScriptResolver resolver(state); LinkResult linkResult = linkModule(*assertCommand->moduleAction->module, resolver); if(linkResult.success) { auto instance = instantiateModule(state.compartment, compileModule(*assertCommand->moduleAction->module), std::move(linkResult.resolvedImports), "test module"); // Call the module start function, if it has one. Function* startFunction = getStartFunction(instance); if(startFunction) { invokeFunction(state.context, startFunction); } testErrorf(state, assertCommand->locus, "module was linkable"); } }, [&](Runtime::Exception* exception) { destroyException(exception); // If the instantiation throws an exception, the assert_unlinkable succeeds. }); } static void processCommands(TestScriptState& state, const std::vector>& commands); static I64 testScriptThreadMain(void* sharedStateVoid) { TestScriptThread* testScriptThread = (TestScriptThread*)sharedStateVoid; processCommands(testScriptThread->state, testScriptThread->threadCommand->commands); return 0; } static void processThread(TestScriptState& state, const ThreadCommand* threadCommand) { std::unique_ptr thread( new TestScriptThread{state.forkThread(), threadCommand, nullptr}); for(const std::string& sharedModuleInternalName : threadCommand->sharedModuleInternalNames) { GCPointer* sharedInstance = state.moduleInternalNameToInstanceMap.get(sharedModuleInternalName); if(!sharedInstance) { testErrorf(state, threadCommand->locus, "No module named %s to share.", sharedModuleInternalName.c_str()); } else if(!thread->state.moduleInternalNameToInstanceMap.add(sharedModuleInternalName, *sharedInstance)) { testErrorf(state, threadCommand->locus, "Module named %s may only be shared once.", sharedModuleInternalName.c_str()); } thread->state.hasInstantiatedModule = true; } thread->platformThread = Platform::createThread(threadStackNumBytes, testScriptThreadMain, thread.get()); if(!state.threads.add(threadCommand->threadName, std::move(thread))) { testErrorf(state, threadCommand->locus, "A thread with the name %s is already running.", threadCommand->threadName.c_str()); } } static void processWait(TestScriptState& state, const WaitCommand* waitCommand) { std::unique_ptr* maybeThread = state.threads.get(waitCommand->threadName); if(!maybeThread) { testErrorf(state, waitCommand->locus, "There is no thread running with the name %s.", waitCommand->threadName.c_str()); } else { std::unique_ptr& thread = *maybeThread; const I64 threadResult = Platform::joinThread(thread->platformThread); if(threadResult) { testErrorf(state, waitCommand->locus, "Thread %s exited with error code %" PRId64 ".", waitCommand->threadName.c_str(), threadResult); } state.errors.insert( state.errors.end(), thread->state.errors.begin(), thread->state.errors.end()); state.threads.removeOrFail(waitCommand->threadName); } // The thread might have been blocking garbage collection, so try collecting garbage after // waiting for it to end. maybeCollectGarbage(state); } static void processCommand(TestScriptState& state, const Command* command) { switch(command->type) { case Command::_register: processRegister(state, (RegisterCommand*)command); break; case Command::action: processAction(state, ((ActionCommand*)command)->action.get(), nullptr); break; case Command::assert_return: processAssertReturn(state, (AssertReturnCommand*)command); break; case Command::assert_return_canonical_nan: case Command::assert_return_arithmetic_nan: case Command::assert_return_canonical_nan_f32x4: case Command::assert_return_arithmetic_nan_f32x4: case Command::assert_return_canonical_nan_f64x2: case Command::assert_return_arithmetic_nan_f64x2: processAssertReturnNaN(state, (AssertReturnNaNCommand*)command); break; case Command::assert_return_func: processAssertReturnFunc(state, (AssertReturnFuncCommand*)command); break; case Command::assert_trap: processAssertTrap(state, (AssertTrapCommand*)command); break; case Command::assert_throws: processAssertThrows(state, (AssertThrowsCommand*)command); break; case Command::assert_invalid: processAssertInvalid(state, (AssertInvalidOrMalformedCommand*)command); break; case Command::assert_malformed: processAssertMalformed(state, (AssertInvalidOrMalformedCommand*)command); break; case Command::assert_unlinkable: processAssertUnlinkable(state, (AssertUnlinkableCommand*)command); break; case Command::thread: processThread(state, (ThreadCommand*)command); break; case Command::wait: processWait(state, (WaitCommand*)command); break; default: WAVM_UNREACHABLE(); }; } static void processCommandWithCloning(TestScriptState& state, const Command* command) { // If testing cloning is disabled, or this is running in a thread, or with child threads, or // about to start a child thread, don't clone the compartment. This avoids issues with trying to // synchronize cloning the compartment between the root and child states. if(!state.config.testCloning || state.kind != TestScriptStateKind::root || state.threads.size() || command->type == Command::Type::thread) { processCommand(state, command); return; } const Uptr originalNumErrors = state.errors.size(); // Clone the test compartment and state. TestScriptState* maybeClonedState = state.clone(); if(!maybeClonedState) { testErrorf(state, command->locus, "Failed to clone compartment due to failure to allocate memory."); } // Process the command in both the original and the cloned compartments. processCommand(state, command); if(maybeClonedState) { TestScriptState& clonedState = *maybeClonedState; processCommand(clonedState, command); // Check that the command produced the same errors in both the original and cloned // compartments. if(state.errors.size() != clonedState.errors.size()) { testErrorf(state, command->locus, "Command produced different number of errors in cloned compartment"); } else { for(Uptr errorIndex = originalNumErrors; errorIndex < state.errors.size(); ++errorIndex) { if(state.errors[errorIndex] != clonedState.errors[errorIndex]) { testErrorf(state, clonedState.errors[errorIndex].locus, "Error only occurs in cloned state: %s", clonedState.errors[errorIndex].message.c_str()); } } } // Check that the original and cloned memory are the same after processing the command. if(state.lastInstance && clonedState.lastInstance) { WAVM_ASSERT(state.lastInstance != clonedState.lastInstance); Memory* memory = getDefaultMemory(state.lastInstance); Memory* clonedMemory = getDefaultMemory(clonedState.lastInstance); if(memory && clonedMemory) { WAVM_ASSERT(memory != clonedMemory); const Uptr numMemoryPages = getMemoryNumPages(memory); const Uptr numClonedMemoryPages = getMemoryNumPages(clonedMemory); if(numMemoryPages != numClonedMemoryPages) { testErrorf(state, command->locus, "Cloned memory size doesn't match (original = %" WAVM_PRIuPTR " pages, cloned = %" WAVM_PRIuPTR " pages", numMemoryPages, numClonedMemoryPages); } else { const Uptr numMemoryBytes = numMemoryPages * IR::numBytesPerPage; U8* memoryBytes = memoryArrayPtr(memory, 0, numMemoryBytes); U8* clonedMemoryBytes = memoryArrayPtr(clonedMemory, 0, numMemoryBytes); if(memcmp(memoryBytes, clonedMemoryBytes, numMemoryBytes)) { for(Uptr byteIndex = 0; byteIndex < numMemoryBytes; ++byteIndex) { const U8 value = memoryBytes[byteIndex]; const U8 clonedValue = clonedMemoryBytes[byteIndex]; if(value != clonedValue) { testErrorf( state, command->locus, "Memory differs from cloned memory at address 0x08%" WAVM_PRIxPTR ": 0x%02x vs 0x%02x", byteIndex, value, clonedValue); } } } } } } delete maybeClonedState; } } static void processCommands(TestScriptState& state, const std::vector>& commands) { for(auto& command : commands) { if(state.config.traceTests) { Log::printf(Log::output, "Evaluating test command at %s(%s)\n", state.scriptFilename, command->locus.describe().c_str()); } catchRuntimeExceptions( [&state, &command] { processCommandWithCloning(state, command.get()); }, [&state, &command](Runtime::Exception* exception) { testErrorf(state, command->locus, "unexpected trap: %s", describeExceptionType(exception->type).c_str()); destroyException(exception); }); } } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print", void, spectest_print) {} WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_i32", void, spectest_print_i32, I32 a) { Log::printf(Log::debug, "%s : i32\n", asString(a).c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_i64", void, spectest_print_i64, I64 a) { Log::printf(Log::debug, "%s : i64\n", asString(a).c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_f32", void, spectest_print_f32, F32 a) { Log::printf(Log::debug, "%s : f32\n", asString(a).c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_f64", void, spectest_print_f64, F64 a) { Log::printf(Log::debug, "%s : f64\n", asString(a).c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_f64_f64", void, spectest_print_f64_f64, F64 a, F64 b) { Log::printf(Log::debug, "%s : f64\n%s : f64\n", asString(a).c_str(), asString(b).c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_i32_f32", void, spectest_print_i32_f32, I32 a, F32 b) { Log::printf(Log::debug, "%s : i32\n%s : f32\n", asString(a).c_str(), asString(b).c_str()); } WAVM_DEFINE_INTRINSIC_FUNCTION(spectest, "print_i64_f64", void, spectest_print_i64_f64, I64 a, F64 b) { Log::printf(Log::debug, "%s : i64\n%s : f64\n", asString(a).c_str(), asString(b).c_str()); } WAVM_DEFINE_INTRINSIC_GLOBAL(spectest, "global_i32", I32, spectest_global_i32, 666) WAVM_DEFINE_INTRINSIC_GLOBAL(spectest, "global_i64", I64, spectest_global_i64, 666) WAVM_DEFINE_INTRINSIC_GLOBAL(spectest, "global_f32", F32, spectest_global_f32, 666.0f) WAVM_DEFINE_INTRINSIC_GLOBAL(spectest, "global_f64", F64, spectest_global_f64, 666.0) WAVM_DEFINE_INTRINSIC_TABLE( spectest, spectest_table, table, TableType(ReferenceType::funcref, false, IndexType::i32, SizeConstraints{10, 20})) WAVM_DEFINE_INTRINSIC_MEMORY(spectest, spectest_memory, memory, MemoryType(false, IndexType::i32, SizeConstraints{1, 2})) WAVM_DEFINE_INTRINSIC_MEMORY(spectest, spectest_shared_memory, shared_memory, MemoryType(true, IndexType::i32, SizeConstraints{1, 2})) struct SharedState { Config config; Platform::Mutex mutex; std::vector pendingFilenames; }; static I64 threadMain(void* sharedStateVoid) { auto sharedState = (SharedState*)sharedStateVoid; // Process files from sharedState->pendingFilenames until they've all been processed. I64 numErrors = 0; while(true) { const char* filename; { Platform::Mutex::Lock sharedStateLock(sharedState->mutex); if(!sharedState->pendingFilenames.size()) { break; } filename = sharedState->pendingFilenames.back(); sharedState->pendingFilenames.pop_back(); } // Read the file into a vector. std::vector testScriptBytes; if(!loadFile(filename, testScriptBytes)) { ++numErrors; continue; } // Make sure the file is null terminated. testScriptBytes.push_back(0); // Process the test script. TestScriptState testScriptState(filename, sharedState->config); std::vector> testCommands; // Parse the test script. WAST::parseTestCommands((const char*)testScriptBytes.data(), testScriptBytes.size(), testScriptState.config.featureSpec, testCommands, testScriptState.errors); if(!testScriptState.errors.size()) { // Process the test script commands. processCommands(testScriptState, testCommands); } numErrors += testScriptState.errors.size(); // Print any errors. reportParseErrors(filename, (const char*)testScriptBytes.data(), testScriptState.errors); } return numErrors; } static void showHelp() { Log::printf( Log::error, "Usage: wavm test script [options] in.wast [options]\n" " -h|--help Display this message\n" " -l |--loop Run tests N times in a loop until an error occurs\n" " --strict-assert-invalid Strictly evaluate assert_invalid, failing if the\n" " module was malformed\n" " --strict-assert-malformed Strictly evaluate assert_malformed, failing if the\n" " module was invalid\n" " --test-cloning Run each test command in the original compartment\n" " and a clone of it, and compare the resulting state\n" " --trace Prints instructions to stdout as they are compiled.\n" " --trace-tests Prints test commands to stdout as they are executed.\n" " --trace-llvmir Prints the LLVM IR for modules as they are compiled.\n" " --trace-assembly Prints the machine assembly for modules as they are\n" " compiled.\n"); } int execRunTestScript(int argc, char** argv) { // Parse the command-line. Uptr numLoops = 1; std::vector filenames; Config config; for(int argIndex = 0; argIndex < argc; ++argIndex) { if(!strcmp(argv[argIndex], "--help") || !strcmp(argv[argIndex], "-h")) { showHelp(); return EXIT_SUCCESS; } else if(!strcmp(argv[argIndex], "--loop") || !strcmp(argv[argIndex], "-l")) { if(argIndex + 1 >= argc) { showHelp(); return EXIT_FAILURE; } ++argIndex; long int numLoopsLongInt = strtol(argv[argIndex], nullptr, 10); if(numLoopsLongInt <= 0) { showHelp(); return EXIT_FAILURE; } numLoops = Uptr(numLoopsLongInt); } else if(!strcmp(argv[argIndex], "--strict-assert-invalid")) { config.strictAssertInvalid = true; } else if(!strcmp(argv[argIndex], "--strict-assert-malformed")) { config.strictAssertMalformed = true; } else if(!strcmp(argv[argIndex], "--test-cloning")) { config.testCloning = true; } else if(!strcmp(argv[argIndex], "--trace")) { Log::setCategoryEnabled(Log::traceValidation, true); Log::setCategoryEnabled(Log::traceCompilation, true); } else if(!strcmp(argv[argIndex], "--trace-tests")) { config.traceTests = true; } else if(!strcmp(argv[argIndex], "--trace-llvmir")) { config.traceLLVMIR = true; } else if(!strcmp(argv[argIndex], "--trace-assembly")) { config.traceAssembly = true; } else if(!strcmp(argv[argIndex], "--enable") || !strcmp(argv[argIndex], "--disable")) { const bool enableFeature = !strcmp(argv[argIndex], "--enable"); ++argIndex; if(!argv[argIndex]) { Log::printf(Log::error, "Expected feature name following '--enable'.\n"); return EXIT_FAILURE; } if(!parseAndSetFeature(argv[argIndex], config.featureSpec, enableFeature)) { Log::printf(Log::error, "Unknown feature '%s'. Supported features:\n" "%s" "\n", argv[argIndex], getFeatureListHelpText().c_str()); return EXIT_FAILURE; } } else { filenames.push_back(argv[argIndex]); } } if(!filenames.size()) { showHelp(); return EXIT_FAILURE; } Uptr loopIndex = 0; while(true) { Timing::Timer timer; SharedState sharedState; sharedState.config = config; sharedState.pendingFilenames = filenames; // Create a thread for each hardware thread. std::vector threads; const Uptr numHardwareThreads = Platform::getNumberOfHardwareThreads(); const Uptr numTestThreads = std::min(numHardwareThreads, Uptr(sharedState.pendingFilenames.size())); for(Uptr threadIndex = 0; threadIndex < numTestThreads; ++threadIndex) { threads.push_back( Platform::createThread(threadStackNumBytes, threadMain, &sharedState)); } // Wait for the threads to exit, summing up their return code, which will be the number of // errors found by the thread. I64 numErrors = 0; for(Platform::Thread* thread : threads) { numErrors += Platform::joinThread(thread); } if(numErrors) { Log::printf(Log::error, "Testing failed with %" PRIi64 " error(s)\n", numErrors); return EXIT_FAILURE; } else { Log::printf(Log::output, "All tests succeeded in %.1fms!\n", timer.getMilliseconds()); if(++loopIndex >= numLoops) { return EXIT_SUCCESS; } } } } ================================================ FILE: Programs/wavm/Testing/TestAPI.cpp ================================================ #include #include #include #include #include #include #include "TestUtils.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/WASTParse/WASTParse.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; using namespace WAVM::Testing; static bool loadTextModule(const char* wat, Uptr watLength, ModuleRef& outModule) { IR::Module irModule; std::vector parseErrors; if(!WAST::parseModule(wat, watLength, irModule, parseErrors)) { WAST::reportParseErrors("loadTextModule", wat, parseErrors); return false; } outModule = compileModule(irModule); return true; } namespace WAVM { namespace IR { inline std::string testToString(ValueType type) { switch(type) { case ValueType::none: return "none"; case ValueType::any: return "any"; case ValueType::i32: return "i32"; case ValueType::i64: return "i64"; case ValueType::f32: return "f32"; case ValueType::f64: return "f64"; case ValueType::v128: return "v128"; case ValueType::externref: return "externref"; case ValueType::funcref: return "funcref"; default: return "unknown(" + std::to_string(U8(type)) + ")"; } } }} namespace WAVM { namespace Runtime { inline std::string testToString(GrowResult result) { switch(result) { case GrowResult::success: return "success"; case GrowResult::outOfMemory: return "outOfMemory"; case GrowResult::outOfQuota: return "outOfQuota"; case GrowResult::outOfMaxSize: return "outOfMaxSize"; default: return "unknown"; } } inline std::string testToString(InstructionSource::Type type) { switch(type) { case InstructionSource::Type::unknown: return "unknown"; case InstructionSource::Type::native: return "native"; case InstructionSource::Type::wasm: return "wasm"; default: return "InstructionSource::Type(" + std::to_string(int(type)) + ")"; } } inline std::string testToString(Function* function) { return function ? getDebugName(function) : ""; } }} static void testCompartmentCloning(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("testCloning"); WAVM_ERROR_UNLESS(compartment); // Create objects in the compartment. Memory* memory = createMemory( compartment, MemoryType(false, IndexType::i32, SizeConstraints{1, 10}), "memory"); WAVM_ERROR_UNLESS(memory); Table* table = createTable(compartment, TableType(ReferenceType::funcref, false, IndexType::i32, {1, 10}), nullptr, "table"); WAVM_ERROR_UNLESS(table); Global* global = createGlobal(compartment, GlobalType(ValueType::i32, true), "global"); WAVM_ERROR_UNLESS(global); initializeGlobal(global, Value(I32(42))); // Verify the objects are in this compartment. CHECK_TRUE(isInCompartment(asObject(memory), compartment)); CHECK_TRUE(isInCompartment(asObject(table), compartment)); CHECK_TRUE(isInCompartment(asObject(global), compartment)); // Clone the compartment. GCPointer clonedCompartment = cloneCompartment(compartment, "clonedCompartment"); WAVM_ERROR_UNLESS(clonedCompartment); // Remap objects to the cloned compartment. Memory* clonedMemory = remapToClonedCompartment(memory, clonedCompartment); Table* clonedTable = remapToClonedCompartment(table, clonedCompartment); Global* clonedGlobal = remapToClonedCompartment(global, clonedCompartment); CHECK_NOT_NULL(clonedMemory); CHECK_NOT_NULL(clonedTable); CHECK_NOT_NULL(clonedGlobal); // Verify the cloned objects are in the cloned compartment. CHECK_TRUE(isInCompartment(asObject(clonedMemory), clonedCompartment)); CHECK_TRUE(isInCompartment(asObject(clonedTable), clonedCompartment)); CHECK_TRUE(isInCompartment(asObject(clonedGlobal), clonedCompartment)); // Verify the cloned objects are NOT in the original compartment. CHECK_FALSE(isInCompartment(asObject(clonedMemory), compartment)); CHECK_FALSE(isInCompartment(asObject(clonedTable), compartment)); CHECK_FALSE(isInCompartment(asObject(clonedGlobal), compartment)); // Verify the cloned global has the same value. Context* clonedContext = createContext(clonedCompartment, "clonedContext"); WAVM_ERROR_UNLESS(clonedContext); Value clonedGlobalValue = getGlobalValue(clonedContext, clonedGlobal); CHECK_EQ(clonedGlobalValue.type, ValueType::i32); CHECK_EQ(clonedGlobalValue.i32, I32(42)); // Clean up. CHECK_TRUE(tryCollectCompartment(std::move(clonedCompartment))); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testResourceQuotas(TEST_STATE_PARAM) { ResourceQuotaRef quota = createResourceQuota(); // Verify default quotas (UINT64_MAX represents unlimited). CHECK_EQ(getResourceQuotaMaxMemoryPages(quota), Uptr(UINT64_MAX)); CHECK_EQ(getResourceQuotaMaxTableElems(quota), Uptr(UINT64_MAX)); // Set and verify memory page quota. setResourceQuotaMaxMemoryPages(quota, 100); CHECK_EQ(getResourceQuotaMaxMemoryPages(quota), Uptr(100)); // Set and verify table element quota. setResourceQuotaMaxTableElems(quota, 200); CHECK_EQ(getResourceQuotaMaxTableElems(quota), Uptr(200)); // Create a compartment and memory within the quota. GCPointer compartment = createCompartment("quotaTest"); WAVM_ERROR_UNLESS(compartment); Memory* memory = createMemory(compartment, MemoryType(false, IndexType::i32, SizeConstraints{1, 1000}), "quotaMemory", quota); WAVM_ERROR_UNLESS(memory); // Growing within quota should succeed. Uptr oldNumPages = 0; GrowResult growResult = growMemory(memory, 1, &oldNumPages); CHECK_EQ(growResult, GrowResult::success); CHECK_EQ(oldNumPages, Uptr(1)); // Set a very restrictive quota and try to exceed it. setResourceQuotaMaxMemoryPages(quota, 3); growResult = growMemory(memory, 10, nullptr); CHECK_EQ(growResult, GrowResult::outOfQuota); // Verify table element quota enforcement. Table* table = createTable(compartment, TableType(ReferenceType::funcref, false, IndexType::i32, {1, 1000}), nullptr, "quotaTable", quota); WAVM_ERROR_UNLESS(table); setResourceQuotaMaxTableElems(quota, 3); GrowResult tableGrowResult = growTable(table, 10, nullptr); CHECK_EQ(tableGrowResult, GrowResult::outOfQuota); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testMemoryOperations(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("memoryTest"); WAVM_ERROR_UNLESS(compartment); // Create a memory with initial size 1 page and max 10 pages. MemoryType memType(false, IndexType::i32, SizeConstraints{1, 10}); Memory* memory = createMemory(compartment, memType, "testMemory"); WAVM_ERROR_UNLESS(memory); // Verify initial state. CHECK_EQ(getMemoryNumPages(memory), Uptr(1)); MemoryType retrievedType = getMemoryType(memory); CHECK_EQ(retrievedType.size.min, U64(1)); CHECK_EQ(retrievedType.size.max, U64(10)); CHECK_FALSE(retrievedType.isShared); // Verify base address is non-null. U8* baseAddress = getMemoryBaseAddress(memory); CHECK_NOT_NULL(baseAddress); // Write to and read from memory. WAVM_ERROR_UNLESS(baseAddress); baseAddress[0] = 0xAB; baseAddress[1] = 0xCD; CHECK_EQ(baseAddress[0], U8(0xAB)); CHECK_EQ(baseAddress[1], U8(0xCD)); // Grow the memory. Uptr oldNumPages = 0; GrowResult result = growMemory(memory, 2, &oldNumPages); CHECK_EQ(result, GrowResult::success); CHECK_EQ(oldNumPages, Uptr(1)); CHECK_EQ(getMemoryNumPages(memory), Uptr(3)); // Verify that the original data is still there after growing. baseAddress = getMemoryBaseAddress(memory); WAVM_ERROR_UNLESS(baseAddress); CHECK_EQ(baseAddress[0], U8(0xAB)); CHECK_EQ(baseAddress[1], U8(0xCD)); // Try to grow beyond the maximum. result = growMemory(memory, 100, nullptr); CHECK_EQ(result, GrowResult::outOfMaxSize); CHECK_EQ(getMemoryNumPages(memory), Uptr(3)); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testTableOperations(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("tableTest"); WAVM_ERROR_UNLESS(compartment); // Create a table with initial size 5 and max 20. TableType tableType(ReferenceType::funcref, false, IndexType::i32, {5, 20}); Table* table = createTable(compartment, tableType, nullptr, "testTable"); WAVM_ERROR_UNLESS(table); // Verify initial state. CHECK_EQ(getTableNumElements(table), Uptr(5)); TableType retrievedType = getTableType(table); CHECK_EQ(retrievedType.size.min, U64(5)); CHECK_EQ(retrievedType.size.max, U64(20)); CHECK_FALSE(retrievedType.isShared); // All elements should initially be null. for(Uptr i = 0; i < 5; ++i) { CHECK_NULL(getTableElement(table, i)); } // Grow the table. Uptr oldNumElems = 0; GrowResult result = growTable(table, 3, &oldNumElems); CHECK_EQ(result, GrowResult::success); CHECK_EQ(oldNumElems, Uptr(5)); CHECK_EQ(getTableNumElements(table), Uptr(8)); // Try to grow beyond the maximum. result = growTable(table, 100, nullptr); CHECK_EQ(result, GrowResult::outOfMaxSize); CHECK_EQ(getTableNumElements(table), Uptr(8)); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testGlobalOperations(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("globalTest"); WAVM_ERROR_UNLESS(compartment); Context* context = createContext(compartment, "globalContext"); WAVM_ERROR_UNLESS(context); // Test a mutable i32 global. Global* mutableI32 = createGlobal(compartment, GlobalType(ValueType::i32, true), "mutableI32"); WAVM_ERROR_UNLESS(mutableI32); initializeGlobal(mutableI32, Value(I32(100))); GlobalType mutableI32Type = getGlobalType(mutableI32); CHECK_EQ(mutableI32Type.valueType, ValueType::i32); CHECK_TRUE(mutableI32Type.isMutable); Value val = getGlobalValue(context, mutableI32); CHECK_EQ(val.type, ValueType::i32); CHECK_EQ(val.i32, I32(100)); // Set a new value and read it back. setGlobalValue(context, mutableI32, Value(I32(200))); val = getGlobalValue(context, mutableI32); CHECK_EQ(val.i32, I32(200)); // Test a mutable i64 global. Global* mutableI64 = createGlobal(compartment, GlobalType(ValueType::i64, true), "mutableI64"); WAVM_ERROR_UNLESS(mutableI64); initializeGlobal(mutableI64, Value(I64(9999999999LL))); val = getGlobalValue(context, mutableI64); CHECK_EQ(val.type, ValueType::i64); CHECK_EQ(val.i64, I64(9999999999LL)); // Test a mutable f32 global. Global* mutableF32 = createGlobal(compartment, GlobalType(ValueType::f32, true), "mutableF32"); WAVM_ERROR_UNLESS(mutableF32); initializeGlobal(mutableF32, Value(F32(3.14f))); val = getGlobalValue(context, mutableF32); CHECK_EQ(val.type, ValueType::f32); // Test a mutable f64 global. Global* mutableF64 = createGlobal(compartment, GlobalType(ValueType::f64, true), "mutableF64"); WAVM_ERROR_UNLESS(mutableF64); initializeGlobal(mutableF64, Value(F64(2.718281828))); val = getGlobalValue(context, mutableF64); CHECK_EQ(val.type, ValueType::f64); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testExceptionTypes(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("exceptionTest"); WAVM_ERROR_UNLESS(compartment); // Create an exception type with no parameters. Runtime::ExceptionType* emptyExType = createExceptionType(compartment, IR::ExceptionType{{}}, "emptyException"); WAVM_ERROR_UNLESS(emptyExType); TypeTuple emptyParams = getExceptionTypeParameters(emptyExType); CHECK_EQ(emptyParams.size(), Uptr(0)); // Create an exception type with i32 and i64 parameters. Runtime::ExceptionType* paramExType = createExceptionType(compartment, IR::ExceptionType{TypeTuple{ValueType::i32, ValueType::i64}}, "paramException"); WAVM_ERROR_UNLESS(paramExType); TypeTuple params = getExceptionTypeParameters(paramExType); CHECK_EQ(params.size(), Uptr(2)); CHECK_EQ(params[0], ValueType::i32); CHECK_EQ(params[1], ValueType::i64); // Verify describeExceptionType returns a non-empty string. std::string description = describeExceptionType(paramExType); CHECK_TRUE(description.size() > 0); // Create and destroy an exception instance. UntaggedValue args[2]; args[0].i32 = 42; args[1].i64 = 99; CallStack callStack; Exception* exception = createException(paramExType, args, 2, std::move(callStack)); WAVM_ERROR_UNLESS(exception); CHECK_EQ(getExceptionType(exception), paramExType); UntaggedValue arg0 = getExceptionArgument(exception, 0); UntaggedValue arg1 = getExceptionArgument(exception, 1); CHECK_EQ(arg0.i32, I32(42)); CHECK_EQ(arg1.i64, I64(99)); std::string exDescription = describeException(exception); CHECK_TRUE(exDescription.size() > 0); destroyException(exception); // Test throwing and catching an exception. bool caughtException = false; Runtime::ExceptionType* caughtType = nullptr; catchRuntimeExceptions( [&]() { throwException(createException(emptyExType, nullptr, 0, CallStack())); }, [&](Exception* caught) { caughtException = true; caughtType = getExceptionType(caught); destroyException(caught); }); CHECK_TRUE(caughtException); CHECK_EQ(caughtType, emptyExType); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testModuleCompileAndIntrospect(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("moduleTest"); WAVM_ERROR_UNLESS(compartment); // A module with a single identity function: (i32) -> (i32). static const char wat[] = "(module" " (func (export \"identity\") (param i32) (result i32) (local.get 0))" ")"; // Parse and compile the module from WAT text. ModuleRef compiledModule; bool loaded = loadTextModule(wat, sizeof(wat), compiledModule); CHECK_TRUE(loaded); WAVM_ERROR_UNLESS(loaded && compiledModule); // Verify the IR is accessible. const IR::Module& retrievedIR = getModuleIR(compiledModule); CHECK_EQ(retrievedIR.types.size(), Uptr(1)); CHECK_EQ(retrievedIR.functions.defs.size(), Uptr(1)); CHECK_EQ(retrievedIR.exports.size(), Uptr(1)); // Verify object code can be extracted. std::vector objectCode = getObjectCode(compiledModule); CHECK_TRUE(objectCode.size() > 0); // Instantiate the module. ImportBindings imports; Instance* instance = instantiateModule(compartment, compiledModule, std::move(imports), "testInstance"); WAVM_ERROR_UNLESS(instance); // Look up the exported function. Object* exportedObj = getInstanceExport(instance, "identity"); CHECK_NOT_NULL(exportedObj); WAVM_ERROR_UNLESS(exportedObj); Function* identityFunc = asFunctionNullable(exportedObj); CHECK_NOT_NULL(identityFunc); WAVM_ERROR_UNLESS(identityFunc); FunctionType funcType = getFunctionType(identityFunc); CHECK_EQ(funcType.params().size(), Uptr(1)); CHECK_EQ(funcType.results().size(), Uptr(1)); CHECK_EQ(funcType.params()[0], ValueType::i32); CHECK_EQ(funcType.results()[0], ValueType::i32); // Invoke the identity function. Context* context = createContext(compartment, "moduleContext"); WAVM_ERROR_UNLESS(context); UntaggedValue invokeArgs[1]; invokeArgs[0].i32 = 123; UntaggedValue invokeResults[1]; invokeFunction(context, identityFunc, funcType, invokeArgs, invokeResults); CHECK_EQ(invokeResults[0].i32, I32(123)); // Test that a non-existent export returns null. CHECK_NULL(getInstanceExport(instance, "nonExistent")); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testForeignObjects(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("foreignTest"); WAVM_ERROR_UNLESS(compartment); // Create a foreign object with user data. int userData = 42; Foreign* foreign = createForeign(compartment, &userData, nullptr, "testForeign"); WAVM_ERROR_UNLESS(foreign); // Verify the user data is retrievable. void* retrieved = getUserData(foreign); CHECK_EQ(retrieved, static_cast(&userData)); // Create a foreign object with a finalizer that sets a flag in the heap object. struct FinalizerData { int value; bool finalized; }; FinalizerData* heapData = new FinalizerData{99, false}; Foreign* foreignWithFinalizer = createForeign( compartment, heapData, [](void* ptr) { static_cast(ptr)->finalized = true; }, "foreignWithFinalizer"); WAVM_ERROR_UNLESS(foreignWithFinalizer); CHECK_EQ(getUserData(foreignWithFinalizer), static_cast(heapData)); // Update user data on an object. int newUserData = 77; setUserData(foreign, &newUserData); CHECK_EQ(getUserData(foreign), static_cast(&newUserData)); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); // Verify the finalizer was called during compartment collection. CHECK_TRUE(heapData->finalized); delete heapData; } static void testTrapInstructionIndex(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("trapIndexTest"); WAVM_ERROR_UNLESS(compartment); // A module with a single exported function "trap" containing: // nop, nop, unreachable, end // The unreachable instruction is at op index 2. static const char wat[] = "(module" " (func (export \"trap\") nop nop unreachable)" ")"; ModuleRef compiledModule; bool loaded = loadTextModule(wat, sizeof(wat), compiledModule); CHECK_TRUE(loaded); WAVM_ERROR_UNLESS(loaded && compiledModule); ImportBindings imports; Instance* instance = instantiateModule(compartment, compiledModule, std::move(imports), "trapInstance"); WAVM_ERROR_UNLESS(instance); Object* exportedObj = getInstanceExport(instance, "trap"); CHECK_NOT_NULL(exportedObj); WAVM_ERROR_UNLESS(exportedObj); Function* trapFunc = asFunctionNullable(exportedObj); CHECK_NOT_NULL(trapFunc); WAVM_ERROR_UNLESS(trapFunc); Context* context = createContext(compartment, "trapContext"); WAVM_ERROR_UNLESS(context); // Invoke the trap function and catch the runtime exception. bool caughtException = false; catchRuntimeExceptions( [&]() { invokeFunction(context, trapFunc, getFunctionType(trapFunc)); }, [&](Exception* caught) { caughtException = true; const CallStack& callStack = getExceptionCallStack(caught); bool foundTrapFrame = false; for(const auto& frame : callStack.frames) { InstructionSource sources[Runtime::maxInlineSourceFrames]; Uptr numSources = getInstructionSourceByAddress( frame.ip, sources, Runtime::maxInlineSourceFrames); if(numSources != 1 || sources[0].type != InstructionSource::Type::wasm) { continue; } foundTrapFrame = true; CHECK_EQ(sources[0].wasm.function, trapFunc); CHECK_EQ(sources[0].wasm.instructionIndex, Uptr(2)); break; } CHECK_TRUE(foundTrapFrame); destroyException(caught); }); CHECK_TRUE(caughtException); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testTrapInstructionIndexWithInlining(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("inliningTest"); WAVM_ERROR_UNLESS(compartment); // A module with two functions: // - Function 0 (inner): nop, unreachable, end (trap at instruction index 1) // - Function 1 (outer): nop, call 0, end (call at instruction index 1) // Both are exported. LLVM may inline function 0 into function 1. static const char wat[] = "(module" " (func (export \"inner\") nop unreachable)" " (func (export \"outer\") nop (call 0))" ")"; ModuleRef compiledModule; bool loaded = loadTextModule(wat, sizeof(wat), compiledModule); CHECK_TRUE(loaded); WAVM_ERROR_UNLESS(loaded && compiledModule); ImportBindings imports; Instance* instance = instantiateModule(compartment, compiledModule, std::move(imports), "inliningInstance"); WAVM_ERROR_UNLESS(instance); Object* innerExport = getInstanceExport(instance, "inner"); CHECK_NOT_NULL(innerExport); WAVM_ERROR_UNLESS(innerExport); Function* innerFunc = asFunctionNullable(innerExport); CHECK_NOT_NULL(innerFunc); WAVM_ERROR_UNLESS(innerFunc); Object* outerExport = getInstanceExport(instance, "outer"); CHECK_NOT_NULL(outerExport); WAVM_ERROR_UNLESS(outerExport); Function* outerFunc = asFunctionNullable(outerExport); CHECK_NOT_NULL(outerFunc); WAVM_ERROR_UNLESS(outerFunc); Context* context = createContext(compartment, "inliningContext"); WAVM_ERROR_UNLESS(context); bool caughtException = false; catchRuntimeExceptions( [&]() { invokeFunction(context, outerFunc, getFunctionType(outerFunc)); }, [&](Exception* caught) { caughtException = true; const CallStack& callStack = getExceptionCallStack(caught); // Collect all instruction sources including inline frames, skipping unknown // frames and any native frames at the top of the stack (runtime internals). std::vector framesFromFirstWasm; for(const auto& frame : callStack.frames) { InstructionSource inlineSources[Runtime::maxInlineSourceFrames]; Uptr numInline = getInstructionSourceByAddress( frame.ip, inlineSources, Runtime::maxInlineSourceFrames); for(Uptr si = 0; si < numInline; ++si) { if(inlineSources[si].type == InstructionSource::Type::wasm || !framesFromFirstWasm.empty()) { framesFromFirstWasm.push_back(inlineSources[si]); } } } if(CHECK_GE(framesFromFirstWasm.size(), Uptr(2))) { if(CHECK_EQ(framesFromFirstWasm[0].type, InstructionSource::Type::wasm)) { CHECK_EQ(framesFromFirstWasm[0].wasm.function, innerFunc); CHECK_EQ(framesFromFirstWasm[0].wasm.instructionIndex, Uptr(1)); } if(CHECK_EQ(framesFromFirstWasm[1].type, InstructionSource::Type::wasm)) { CHECK_EQ(framesFromFirstWasm[1].wasm.function, outerFunc); CHECK_EQ(framesFromFirstWasm[1].wasm.instructionIndex, Uptr(1)); } } destroyException(caught); }); CHECK_TRUE(caughtException); CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } static void testGarbageCollection(TEST_STATE_PARAM) { GCPointer compartment = createCompartment("gcTest"); WAVM_ERROR_UNLESS(compartment); // Create several objects. Memory* memory = createMemory( compartment, MemoryType(false, IndexType::i32, SizeConstraints{1, 1}), "gcMemory"); WAVM_ERROR_UNLESS(memory); Table* table = createTable(compartment, TableType(ReferenceType::funcref, false, IndexType::i32, {1, 1}), nullptr, "gcTable"); WAVM_ERROR_UNLESS(table); // Add a GC root for the memory, so it persists across garbage collection. addGCRoot(memory); // Collect garbage; table has no root so it may be freed. collectCompartmentGarbage(compartment); // The memory should still be accessible since it has a root. CHECK_EQ(getMemoryNumPages(memory), Uptr(1)); removeGCRoot(memory); // Test tryCollectCompartment. CHECK_TRUE(tryCollectCompartment(std::move(compartment))); } int execAPITest(int argc, char** argv) { TEST_STATE_LOCAL; testCompartmentCloning(testState); testResourceQuotas(testState); testMemoryOperations(testState); testTableOperations(testState); testGlobalOperations(testState); testExceptionTypes(testState); testModuleCompileAndIntrospect(testState); testTrapInstructionIndex(testState); testTrapInstructionIndexWithInlining(testState); testForeignObjects(testState); testGarbageCollection(testState); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestCAPI.c ================================================ #include #include #include #include #include "WAVM/wavm-c/wavm-c.h" #include "wavm-test.h" #define own static int numFailures = 0; #define CAPI_CHECK(cond, msg) \ do \ { \ if(!(cond)) \ { \ fprintf(stderr, "%s(%d): FAIL: %s\n", __FILE__, __LINE__, msg); \ ++numFailures; \ } \ } while(0) #define CAPI_CHECK_NOT_NULL(ptr) CAPI_CHECK((ptr) != NULL, #ptr " != NULL") static uintptr_t numCallbacks = 0; // A function to be called from Wasm code. own wasm_trap_t* hello_callback(const wasm_val_t args[], wasm_val_t results[]) { ++numCallbacks; return NULL; } int execCAPITest(int argc, char** argv) { // Initialize. wasm_engine_t* engine = wasm_engine_new(); wasm_compartment_t* compartment = wasm_compartment_new(engine, "compartment"); wasm_store_t* store = wasm_store_new(compartment, "store"); // Load binary. // Module: imports (hello : [] -> []), defines (run : [] -> []) that calls hello. char hello_wasm[] = {0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x84, 0x80, 0x80, 0x80, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x8a, 0x80, 0x80, 0x80, 0x00, 0x01, 0x00, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x03, 0x82, 0x80, 0x80, 0x80, 0x00, 0x01, 0x00, 0x07, 0x87, 0x80, 0x80, 0x80, 0x00, 0x01, 0x03, 0x72, 0x75, 0x6e, 0x00, 0x01, 0x0a, 0x8a, 0x80, 0x80, 0x80, 0x00, 0x01, 0x84, 0x80, 0x80, 0x80, 0x00, 0x00, 0x10, 0x00, 0x0b}; // Compile. own wasm_module_t* module = wasm_module_new(engine, hello_wasm, sizeof(hello_wasm)); if(!module) { return 1; } // Create external print functions. own wasm_functype_t* hello_type = wasm_functype_new_0_0(); own wasm_func_t* hello_func = wasm_func_new(compartment, hello_type, hello_callback, "hello_callback"); wasm_functype_delete(hello_type); // Instantiate. const wasm_extern_t* imports[1]; imports[0] = wasm_func_as_extern(hello_func); own wasm_instance_t* instance = wasm_instance_new(store, module, imports, NULL, "instance"); if(!instance) { return 1; } wasm_func_delete(hello_func); // Extract export. wasm_extern_t* run_extern = wasm_instance_export(instance, 0); if(run_extern == NULL) { return 1; } const wasm_func_t* run_func = wasm_extern_as_func(run_extern); if(run_func == NULL) { return 1; } wasm_module_delete(module); wasm_instance_delete(instance); // Call. if(wasm_func_call(store, run_func, NULL, NULL)) { return 1; } // Assert that the callback was called exactly once. CAPI_CHECK(numCallbacks == 1, "numCallbacks == 1"); // ========================================================================= // Config and features // ========================================================================= { own wasm_config_t* config = wasm_config_new(); CAPI_CHECK_NOT_NULL(config); wasm_config_feature_set_simd(config, true); wasm_config_feature_set_atomics(config, false); wasm_config_feature_set_reference_types(config, true); own wasm_engine_t* engine2 = wasm_engine_new_with_config(config); CAPI_CHECK_NOT_NULL(engine2); // config is consumed by wasm_engine_new_with_config wasm_engine_delete(engine2); } // ========================================================================= // Value types // ========================================================================= { own wasm_valtype_t* t_i32 = wasm_valtype_new_i32(); CAPI_CHECK_NOT_NULL(t_i32); CAPI_CHECK(wasm_valtype_kind(t_i32) == WASM_I32, "valtype_kind == WASM_I32"); own wasm_valtype_t* t_i64 = wasm_valtype_new_i64(); CAPI_CHECK(wasm_valtype_kind(t_i64) == WASM_I64, "valtype_kind == WASM_I64"); own wasm_valtype_t* t_f32 = wasm_valtype_new_f32(); CAPI_CHECK(wasm_valtype_kind(t_f32) == WASM_F32, "valtype_kind == WASM_F32"); own wasm_valtype_t* t_f64 = wasm_valtype_new_f64(); CAPI_CHECK(wasm_valtype_kind(t_f64) == WASM_F64, "valtype_kind == WASM_F64"); own wasm_valtype_t* t_copy = wasm_valtype_copy(t_i32); CAPI_CHECK_NOT_NULL(t_copy); CAPI_CHECK(wasm_valtype_kind(t_copy) == WASM_I32, "copied valtype kind == WASM_I32"); wasm_valtype_delete(t_copy); wasm_valtype_delete(t_i32); wasm_valtype_delete(t_i64); wasm_valtype_delete(t_f32); wasm_valtype_delete(t_f64); } // ========================================================================= // Function types // ========================================================================= { own wasm_valtype_t* params[2]; params[0] = wasm_valtype_new_i32(); params[1] = wasm_valtype_new_i64(); own wasm_valtype_t* results[1]; results[0] = wasm_valtype_new_f32(); own wasm_functype_t* ft = wasm_functype_new(params, 2, results, 1); CAPI_CHECK_NOT_NULL(ft); CAPI_CHECK(wasm_functype_num_params(ft) == 2, "functype num_params == 2"); CAPI_CHECK(wasm_functype_num_results(ft) == 1, "functype num_results == 1"); own wasm_valtype_t* p0 = wasm_functype_param(ft, 0); CAPI_CHECK_NOT_NULL(p0); CAPI_CHECK(wasm_valtype_kind(p0) == WASM_I32, "functype param 0 == i32"); own wasm_valtype_t* p1 = wasm_functype_param(ft, 1); CAPI_CHECK_NOT_NULL(p1); CAPI_CHECK(wasm_valtype_kind(p1) == WASM_I64, "functype param 1 == i64"); own wasm_valtype_t* r0 = wasm_functype_result(ft, 0); CAPI_CHECK_NOT_NULL(r0); CAPI_CHECK(wasm_valtype_kind(r0) == WASM_F32, "functype result 0 == f32"); wasm_valtype_delete(p0); wasm_valtype_delete(p1); wasm_valtype_delete(r0); own wasm_functype_t* ft_copy = wasm_functype_copy(ft); CAPI_CHECK_NOT_NULL(ft_copy); CAPI_CHECK(wasm_functype_num_params(ft_copy) == 2, "copied functype num_params == 2"); wasm_functype_delete(ft_copy); wasm_functype_delete(ft); } // ========================================================================= // Memory operations // ========================================================================= { wasm_limits_t limits = {1, 4}; own wasm_memorytype_t* memtype = wasm_memorytype_new(&limits, WASM_NOTSHARED, WASM_INDEX_I32); CAPI_CHECK_NOT_NULL(memtype); own wasm_memory_t* mem = wasm_memory_new(compartment, memtype, "test_memory"); CAPI_CHECK_NOT_NULL(mem); CAPI_CHECK(wasm_memory_size(mem) == 1, "memory initial size == 1"); CAPI_CHECK(wasm_memory_data_size(mem) == 65536, "memory data_size == 65536"); char* data = wasm_memory_data(mem); CAPI_CHECK_NOT_NULL(data); data[0] = 42; CAPI_CHECK(data[0] == 42, "memory read back == 42"); wasm_memory_pages_t prev_size = 0; CAPI_CHECK(wasm_memory_grow(mem, 2, &prev_size), "memory grow succeeds"); CAPI_CHECK(prev_size == 1, "memory grow prev_size == 1"); CAPI_CHECK(wasm_memory_size(mem) == 3, "memory size after grow == 3"); // Grow beyond max should fail CAPI_CHECK(!wasm_memory_grow(mem, 10, NULL), "memory grow beyond max fails"); wasm_memorytype_delete(memtype); wasm_memory_delete(mem); } // ========================================================================= // Table operations // ========================================================================= { own wasm_valtype_t* elem_type = wasm_valtype_new_funcref(); wasm_limits_t limits = {2, 10}; own wasm_tabletype_t* tabtype = wasm_tabletype_new(elem_type, &limits, WASM_NOTSHARED, WASM_INDEX_I32); CAPI_CHECK_NOT_NULL(tabtype); own wasm_table_t* tab = wasm_table_new(compartment, tabtype, NULL, "test_table"); CAPI_CHECK_NOT_NULL(tab); CAPI_CHECK(wasm_table_size(tab) == 2, "table initial size == 2"); own wasm_ref_t* elem = wasm_table_get(tab, 0); CAPI_CHECK(elem == NULL, "table initial element is null"); wasm_table_size_t prev_size = 0; CAPI_CHECK(wasm_table_grow(tab, 3, NULL, &prev_size), "table grow succeeds"); CAPI_CHECK(prev_size == 2, "table grow prev_size == 2"); CAPI_CHECK(wasm_table_size(tab) == 5, "table size after grow == 5"); CAPI_CHECK(wasm_table_set(tab, 0, NULL), "table set null succeeds"); wasm_tabletype_delete(tabtype); wasm_table_delete(tab); } // ========================================================================= // Global operations // ========================================================================= { own wasm_valtype_t* val_type = wasm_valtype_new_i32(); own wasm_globaltype_t* gt = wasm_globaltype_new(val_type, WASM_VAR); CAPI_CHECK_NOT_NULL(gt); wasm_val_t init_val; init_val.i32 = 42; own wasm_global_t* glob = wasm_global_new(compartment, gt, &init_val, "test_global"); CAPI_CHECK_NOT_NULL(glob); wasm_val_t got_val; wasm_global_get(store, glob, &got_val); CAPI_CHECK(got_val.i32 == 42, "global get == 42"); wasm_val_t new_val; new_val.i32 = 99; wasm_global_set(store, glob, &new_val); wasm_global_get(store, glob, &got_val); CAPI_CHECK(got_val.i32 == 99, "global get after set == 99"); own wasm_globaltype_t* gt2 = wasm_global_type(glob); CAPI_CHECK_NOT_NULL(gt2); CAPI_CHECK(wasm_globaltype_mutability(gt2) == WASM_VAR, "global is mutable"); const wasm_valtype_t* content = wasm_globaltype_content(gt2); CAPI_CHECK_NOT_NULL(content); CAPI_CHECK(wasm_valtype_kind(content) == WASM_I32, "global content type == i32"); wasm_globaltype_delete(gt2); wasm_globaltype_delete(gt); wasm_global_delete(glob); } // ========================================================================= // Module introspection // ========================================================================= { // Recompile the hello module for introspection own wasm_module_t* mod = wasm_module_new(engine, hello_wasm, sizeof(hello_wasm)); CAPI_CHECK_NOT_NULL(mod); CAPI_CHECK(wasm_module_num_imports(mod) == 1, "module has 1 import"); wasm_import_t imp; wasm_module_import(mod, 0, &imp); CAPI_CHECK(imp.num_name_bytes == 5, "import name length == 5"); CAPI_CHECK(memcmp(imp.name, "hello", 5) == 0, "import name == 'hello'"); wasm_externtype_delete(imp.type); CAPI_CHECK(wasm_module_num_exports(mod) == 1, "module has 1 export"); wasm_export_t exp; wasm_module_export(mod, 0, &exp); CAPI_CHECK(exp.num_name_bytes == 3, "export name length == 3"); CAPI_CHECK(memcmp(exp.name, "run", 3) == 0, "export name == 'run'"); wasm_externtype_delete(exp.type); wasm_module_delete(mod); } // ========================================================================= // Module validation // ========================================================================= { // A minimal valid WASM binary (just the 8-byte header for an empty module). char valid_wasm[] = {0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00}; CAPI_CHECK(wasm_module_validate(valid_wasm, sizeof(valid_wasm)), "valid module passes validation"); char invalid_wasm[] = {0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0xFF}; CAPI_CHECK(!wasm_module_validate(invalid_wasm, sizeof(invalid_wasm)), "invalid module fails validation"); } // ========================================================================= // Text module compilation // ========================================================================= { static const char hello_wat[] = "(module" " (func (import \"\" \"hello\"))" " (func (export \"run\") (call 0))" ")"; own wasm_module_t* text_mod = wasm_module_new_text(engine, hello_wat, sizeof(hello_wat)); CAPI_CHECK_NOT_NULL(text_mod); // Instantiate and call the text-compiled module. own wasm_functype_t* ft = wasm_functype_new_0_0(); own wasm_func_t* func = wasm_func_new(compartment, ft, hello_callback, "text_hello_callback"); const wasm_extern_t* text_imports[1]; text_imports[0] = wasm_func_as_extern(func); own wasm_instance_t* text_instance = wasm_instance_new(store, text_mod, text_imports, NULL, "text_instance"); CAPI_CHECK_NOT_NULL(text_instance); wasm_extern_t* text_run_extern = wasm_instance_export(text_instance, 0); CAPI_CHECK_NOT_NULL(text_run_extern); const wasm_func_t* text_run_func = wasm_extern_as_func(text_run_extern); CAPI_CHECK_NOT_NULL(text_run_func); wasm_module_delete(text_mod); wasm_instance_delete(text_instance); CAPI_CHECK(!wasm_func_call(store, text_run_func, NULL, NULL), "text module call succeeds"); CAPI_CHECK(numCallbacks == 2, "numCallbacks == 2 after text module call"); wasm_functype_delete(ft); wasm_func_delete(func); } // ========================================================================= // Trap inspection // ========================================================================= { own wasm_trap_t* trap = wasm_trap_new(compartment, "test error", 10); CAPI_CHECK_NOT_NULL(trap); char message_buf[256]; size_t message_len = sizeof(message_buf); CAPI_CHECK(wasm_trap_message(trap, message_buf, &message_len), "trap_message succeeds"); CAPI_CHECK(message_len > 0, "trap message is non-empty"); wasm_trap_delete(trap); } // ========================================================================= // Foreign objects // ========================================================================= { own wasm_foreign_t* foreign = wasm_foreign_new(compartment, "test_foreign"); CAPI_CHECK_NOT_NULL(foreign); wasm_foreign_delete(foreign); } // ========================================================================= // Compartment cloning and contains // ========================================================================= { own wasm_functype_t* ft = wasm_functype_new_0_0(); own wasm_func_t* func = wasm_func_new(compartment, ft, hello_callback, "clone_test_func"); CAPI_CHECK_NOT_NULL(func); const wasm_ref_t* func_ref = wasm_func_as_ref_const(func); CAPI_CHECK(wasm_compartment_contains(compartment, func_ref), "compartment contains its func"); own wasm_compartment_t* clone = wasm_compartment_clone(compartment); CAPI_CHECK_NOT_NULL(clone); // Functions are shared across cloned compartments, so the original func is in both. CAPI_CHECK(wasm_compartment_contains(clone, func_ref), "clone contains original func (functions are shared)"); // Delete the function before the clone, since shared functions with GC roots prevent // the cloned compartment from being collected. wasm_functype_delete(ft); wasm_func_delete(func); wasm_compartment_delete(clone); } // ========================================================================= // Reference operations: copy, same, host info // ========================================================================= { own wasm_functype_t* ft = wasm_functype_new_0_0(); own wasm_func_t* func = wasm_func_new(compartment, ft, hello_callback, "ref_test_func"); CAPI_CHECK_NOT_NULL(func); own wasm_func_t* func_copy = wasm_func_copy(func); CAPI_CHECK_NOT_NULL(func_copy); CAPI_CHECK(wasm_func_same(func, func_copy), "original and copy are same"); int host_data = 123; wasm_func_set_host_info(func, &host_data); CAPI_CHECK(wasm_func_get_host_info(func) == &host_data, "get_host_info returns set value"); const char* name = wasm_func_name(func); CAPI_CHECK_NOT_NULL(name); CAPI_CHECK(strlen(name) > 0, "func name is non-empty"); wasm_func_delete(func_copy); wasm_functype_delete(ft); wasm_func_delete(func); } // Shut down. wasm_store_delete(store); wasm_compartment_delete(compartment); wasm_engine_delete(engine); return numFailures > 0 ? 1 : 0; } ================================================ FILE: Programs/wavm/Testing/TestDWARF.cpp ================================================ // Tests for the DWARF parser (WAVM::DWARF::getSourceLocations). // Constructs synthetic DWARF sections in memory and verifies address-to-source-location lookup. #include #include #include "TestUtils.h" #include "WAVM/DWARF/Constants.h" #include "WAVM/DWARF/DWARF.h" #include "WAVM/DWARF/Sections.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Platform/Defines.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::DWARF; using namespace WAVM::Testing; using Serialization::ArrayOutputStream; using Serialization::serializeBytes; // --------------------------------------------------------------------------- // Helpers // --------------------------------------------------------------------------- template static void write(Serialization::OutputStream& stream, const T& value) { serializeBytes(stream, (const U8*)&value, sizeof(T)); } static void writeULEB128(Serialization::OutputStream& stream, U64 value) { Serialization::serializeVarUInt64(stream, value); } static void writeSLEB128(Serialization::OutputStream& stream, I64 value) { Serialization::serializeVarInt64(stream, value); } // Patch a U32 at a given offset in the finalized byte vector. static void patchU32(std::vector& bytes, Uptr offset, U32 value) { memcpy(bytes.data() + offset, &value, sizeof(U32)); } // Populate Sections from finalized vectors. static DWARF::Sections makeSections(const std::vector& info, const std::vector& abbrev, const std::vector& str, const std::vector& line) { DWARF::Sections s; s.debugInfo = info.empty() ? nullptr : info.data(); s.debugInfoSize = info.size(); s.debugAbbrev = abbrev.empty() ? nullptr : abbrev.data(); s.debugAbbrevSize = abbrev.size(); s.debugStr = str.empty() ? nullptr : str.data(); s.debugStrSize = str.size(); s.debugLine = line.empty() ? nullptr : line.data(); s.debugLineSize = line.size(); return s; } // --------------------------------------------------------------------------- // .debug_abbrev builder // --------------------------------------------------------------------------- struct AbbrevAttrDef { U16 attr; U8 form; }; static void buildAbbrevEntry(Serialization::OutputStream& stream, U64 code, U16 tag, bool hasChildren, const std::vector& attrs) { writeULEB128(stream, code); writeULEB128(stream, tag); write(stream, U8(hasChildren ? 1 : 0)); for(const auto& a : attrs) { writeULEB128(stream, a.attr); writeULEB128(stream, a.form); } // Terminating pair writeULEB128(stream, U64(0)); writeULEB128(stream, U64(0)); } static void terminateAbbrevTable(Serialization::OutputStream& stream) { writeULEB128(stream, U64(0)); } // --------------------------------------------------------------------------- // .debug_str builder // --------------------------------------------------------------------------- // Adds a null-terminated string to .debug_str stream, returns its offset. static U32 addDebugStr(ArrayOutputStream& stream, const char* str) { U32 offset = U32(stream.position()); while(*str) { write(stream, U8(*str++)); } write(stream, U8(0)); return offset; } // --------------------------------------------------------------------------- // .debug_info CU header builder // --------------------------------------------------------------------------- // Begins a DWARF v4 CU. Returns the offset of the unit_length placeholder. // After building all DIEs, get the bytes and patch the unit_length. static Uptr beginCUv4(ArrayOutputStream& stream, U32 abbrevOffset, U8 addrSize = 8) { Uptr lengthOffset = stream.position(); write(stream, U32(0)); // placeholder for unit_length write(stream, U16(4)); // version = 4 write(stream, abbrevOffset); write(stream, addrSize); return lengthOffset; } // Begins a DWARF v5 CU. Returns the offset of the unit_length placeholder. static Uptr beginCUv5(ArrayOutputStream& stream, U32 abbrevOffset, U8 addrSize = 8) { Uptr lengthOffset = stream.position(); write(stream, U32(0)); // placeholder for unit_length write(stream, U16(5)); // version = 5 write(stream, DW_UT_compile); write(stream, addrSize); write(stream, abbrevOffset); return lengthOffset; } // --------------------------------------------------------------------------- // .debug_line builder // --------------------------------------------------------------------------- // Line table header constants used by all tests. static constexpr U8 kMinInstructionLength = 1; static constexpr U8 kMaxOpsPerInstruction = 1; static constexpr U8 kDefaultIsStmt = 1; static constexpr I8 kLineBase = -5; static constexpr U8 kLineRange = 14; static constexpr U8 kOpcodeBase = 13; // Standard opcode lengths (opcodes 1..12) static const U8 kStdOpcodeLengths[12] = {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1}; // Header content size is fixed for our tests (no directories or files). static constexpr U32 kLineHeaderLength = 1 + 1 + 1 + 1 + 1 + 1 + 12 + 1 + 1; // = 20 // Begins a DWARF v4 line table. Returns the offset of the unit_length placeholder. static Uptr beginLineTableV4(ArrayOutputStream& stream) { Uptr lengthOffset = stream.position(); write(stream, U32(0)); // placeholder for unit_length write(stream, U16(4)); // version = 4 write(stream, kLineHeaderLength); // header_length (fixed for our tests) write(stream, kMinInstructionLength); write(stream, kMaxOpsPerInstruction); write(stream, kDefaultIsStmt); write(stream, kLineBase); write(stream, kLineRange); write(stream, kOpcodeBase); for(int i = 0; i < 12; ++i) { write(stream, kStdOpcodeLengths[i]); } write(stream, U8(0)); // empty include directory list write(stream, U8(0)); // empty file name list return lengthOffset; } // Emit DW_LNE_set_address extended opcode. static void lineSetAddress(Serialization::OutputStream& stream, U64 address) { write(stream, U8(0)); // extended opcode marker writeULEB128(stream, U64(9)); // length = 1 (extOp) + 8 (address) write(stream, U8(2)); // DW_LNE_set_address write(stream, address); } // Emit DW_LNE_end_sequence. static void lineEndSequence(Serialization::OutputStream& stream) { write(stream, U8(0)); // extended opcode marker writeULEB128(stream, U64(1)); write(stream, U8(1)); // DW_LNE_end_sequence } // Emit DW_LNS_copy (opcode 1): emit row without advancing. static void lineCopy(Serialization::OutputStream& stream) { write(stream, U8(1)); } // Emit DW_LNS_advance_pc (opcode 2). static void lineAdvancePC(Serialization::OutputStream& stream, U64 adv) { write(stream, U8(2)); writeULEB128(stream, adv); } // Emit DW_LNS_advance_line (opcode 3). static void lineAdvanceLine(Serialization::OutputStream& stream, I64 adv) { write(stream, U8(3)); writeSLEB128(stream, adv); } // Emit DW_LNS_const_add_pc (opcode 8). static void lineConstAddPC(Serialization::OutputStream& stream) { write(stream, U8(8)); } // Compute the const_add_pc address increment. static Uptr constAddPCIncrement() { return Uptr((255 - kOpcodeBase) / kLineRange) * kMinInstructionLength; } // --------------------------------------------------------------------------- // Test 1: testSimpleFunction // 1 CU with 1 subprogram, name via .debug_str, line from .debug_line. // --------------------------------------------------------------------------- static void testSimpleFunction(TEST_STATE_PARAM) { // .debug_str ArrayOutputStream strStream; write(strStream, U8(0)); // offset 0 = empty string U32 nameOffset = addDebugStr(strStream, "myFunction"); // .debug_abbrev ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); // .debug_info ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); // CU DIE (abbrev 1) writeULEB128(infoStream, 1); write(infoStream, U64(0x1000)); // low_pc write(infoStream, U32(0x100)); // high_pc (offset) write(infoStream, U32(0)); // stmt_list // Subprogram DIE (abbrev 2) writeULEB128(infoStream, 2); write(infoStream, nameOffset); // name -> .debug_str write(infoStream, U64(0x1000)); // low_pc write(infoStream, U32(0x80)); // high_pc (offset) // Null terminator for CU children write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); // .debug_line ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0x1000); lineAdvanceLine(lineStream, 41); // line = 1 + 41 = 42 lineCopy(lineStream); lineAdvancePC(lineStream, 0x100); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x1020, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "myFunction") == 0); CHECK_EQ(locs[0].line, Uptr(42)); } } // --------------------------------------------------------------------------- // Test 2: testFunctionNotFound // --------------------------------------------------------------------------- static void testFunctionNotFound(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); addDebugStr(strStream, "foo"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0x1000)); write(infoStream, U32(0x100)); writeULEB128(infoStream, 2); write(infoStream, U32(1)); // name write(infoStream, U64(0x1000)); write(infoStream, U32(0x80)); write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); std::vector line; // empty auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); // Address 0x2000 is outside [0x1000, 0x1100) Uptr count = DWARF::getSourceLocations(sections, 0x2000, locs, 4); CHECK_EQ(count, Uptr(0)); } // --------------------------------------------------------------------------- // Test 3: testInlineChain // --------------------------------------------------------------------------- static void testInlineChain(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 outerName = addDebugStr(strStream, "outerFunc"); U32 innerName = addDebugStr(strStream, "innerFunc"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, true, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); buildAbbrevEntry(abbrevStream, 3, DW_TAG_inlined_subroutine, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_call_line, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0x1000)); write(infoStream, U32(0x200)); write(infoStream, U32(0)); // stmt_list // subprogram writeULEB128(infoStream, 2); write(infoStream, outerName); write(infoStream, U64(0x1000)); write(infoStream, U32(0x200)); // inlined_subroutine writeULEB128(infoStream, 3); write(infoStream, innerName); write(infoStream, U64(0x1050)); write(infoStream, U32(0x40)); write(infoStream, U32(100)); // call_line write(infoStream, U8(0)); // null for subprogram children write(infoStream, U8(0)); // null for CU children auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0x1050); lineAdvanceLine(lineStream, 54); // line = 55 lineCopy(lineStream); lineAdvancePC(lineStream, 0x200); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x1060, locs, 4); CHECK_EQ(count, Uptr(2)); if(count >= 2) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "innerFunc") == 0); CHECK_EQ(locs[0].line, Uptr(55)); CHECK_TRUE(locs[1].name != nullptr && strcmp(locs[1].name, "outerFunc") == 0); CHECK_EQ(locs[1].line, Uptr(100)); } } // --------------------------------------------------------------------------- // Test 4: testAbstractOrigin // --------------------------------------------------------------------------- static void testAbstractOrigin(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 callerName = addDebugStr(strStream, "caller"); U32 inlinedName = addDebugStr(strStream, "inlinedHelper"); U32 inlinedLinkage = addDebugStr(strStream, "_Z13inlinedHelperv"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry(abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_linkage_name, DW_FORM_strp}}); buildAbbrevEntry( abbrevStream, 3, DW_TAG_subprogram, true, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); buildAbbrevEntry(abbrevStream, 4, DW_TAG_inlined_subroutine, false, {{DW_AT_abstract_origin, DW_FORM_ref4}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_call_line, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); // CU DIE writeULEB128(infoStream, 1); write(infoStream, U64(0x2000)); write(infoStream, U32(0x200)); write(infoStream, U32(0)); // Abstract subprogram DIE: record CU-relative offset Uptr abstractDIEOffset = infoStream.position(); U32 abstractCURelOffset = U32(abstractDIEOffset - cuLenOff); writeULEB128(infoStream, 2); write(infoStream, inlinedName); write(infoStream, inlinedLinkage); // Concrete subprogram writeULEB128(infoStream, 3); write(infoStream, callerName); write(infoStream, U64(0x2000)); write(infoStream, U32(0x200)); // Inlined subroutine writeULEB128(infoStream, 4); write(infoStream, abstractCURelOffset); write(infoStream, U64(0x2080)); write(infoStream, U32(0x40)); write(infoStream, U32(77)); // call_line write(infoStream, U8(0)); // null for caller children write(infoStream, U8(0)); // null for CU children auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0x2080); lineAdvanceLine(lineStream, 29); // line = 30 lineCopy(lineStream); lineAdvancePC(lineStream, 0x200); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x2090, locs, 4); CHECK_EQ(count, Uptr(2)); if(count >= 2) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "inlinedHelper") == 0); CHECK_TRUE(locs[0].linkageName != nullptr && strcmp(locs[0].linkageName, "_Z13inlinedHelperv") == 0); CHECK_EQ(locs[0].line, Uptr(30)); CHECK_TRUE(locs[1].name != nullptr && strcmp(locs[1].name, "caller") == 0); CHECK_EQ(locs[1].line, Uptr(77)); } } // --------------------------------------------------------------------------- // Test 5: testDWARFv4Header // --------------------------------------------------------------------------- // Helper: build a simple CU+subprogram+line-table and verify lookup. static void testSimpleCU(TEST_STATE_PARAM, Uptr (*beginCU)(ArrayOutputStream&, U32, U8), const char* funcName, U64 baseAddr, Uptr expectedLine) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 nameOff = addDebugStr(strStream, funcName); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCU(infoStream, 0, 8); writeULEB128(infoStream, 1); write(infoStream, baseAddr); write(infoStream, U32(0x80)); write(infoStream, U32(0)); writeULEB128(infoStream, 2); write(infoStream, nameOff); write(infoStream, baseAddr); write(infoStream, U32(0x80)); write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, baseAddr); lineAdvanceLine(lineStream, I64(expectedLine) - 1); lineCopy(lineStream); lineAdvancePC(lineStream, 0x80); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, Uptr(baseAddr) + 0x10, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, funcName) == 0); CHECK_EQ(locs[0].line, expectedLine); } } static void testDWARFv4Header(TEST_STATE_PARAM) { testSimpleCU(TEST_STATE_ARG, beginCUv4, "v4func", 0x3000, 10); } // --------------------------------------------------------------------------- // Test 6: testDWARFv5Header // --------------------------------------------------------------------------- static void testDWARFv5Header(TEST_STATE_PARAM) { testSimpleCU(TEST_STATE_ARG, beginCUv5, "v5func", 0x4000, 20); } // --------------------------------------------------------------------------- // Test 7: testHighPCAsOffset // --------------------------------------------------------------------------- static void testHighPCAsOffset(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 nameOff = addDebugStr(strStream, "offsetFunc"); ArrayOutputStream abbrevStream; // CU uses high_pc as addr (absolute) buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_addr}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); // Subprogram uses high_pc as data4 (offset) buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0x5000)); // low_pc write(infoStream, U64(0x5200)); // high_pc (absolute addr) write(infoStream, U32(0)); writeULEB128(infoStream, 2); write(infoStream, nameOff); write(infoStream, U64(0x5000)); write(infoStream, U32(0x100)); // high_pc offset -> actual 0x5100 write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0x5000); lineAdvanceLine(lineStream, 74); // line = 75 lineCopy(lineStream); lineAdvancePC(lineStream, 0x200); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x5050, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "offsetFunc") == 0); CHECK_EQ(locs[0].line, Uptr(75)); } } // --------------------------------------------------------------------------- // Test 8: testLineTableSpecialOpcodes // --------------------------------------------------------------------------- static void testLineTableSpecialOpcodes(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 nameOff = addDebugStr(strStream, "specialFunc"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0x6000)); write(infoStream, U32(0x400)); write(infoStream, U32(0)); writeULEB128(infoStream, 2); write(infoStream, nameOff); write(infoStream, U64(0x6000)); write(infoStream, U32(0x400)); write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); // Line table with special opcodes. // With lineBase=-5, lineRange=14, opcodeBase=13: // Special opcode: adjusted = opcode - 13 // addr_advance = (adjusted / 14) * 1 // line_advance = -5 + (adjusted % 14) ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0x6000); lineAdvanceLine(lineStream, 9); // line = 10 lineCopy(lineStream); // row at 0x6000, line=10 // Special opcode: advance addr by 2, line by 1. adjusted=2*14+6=34, opcode=47 write(lineStream, U8(47)); // row at 0x6002, line=11 // Special opcode: advance addr by 1, line by 3. adjusted=1*14+8=22, opcode=35 write(lineStream, U8(35)); // row at 0x6003, line=14 lineAdvancePC(lineStream, 0x400); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x6000, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_EQ(locs[0].line, Uptr(10)); } memset(locs, 0, sizeof(locs)); count = DWARF::getSourceLocations(sections, 0x6002, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_EQ(locs[0].line, Uptr(11)); } memset(locs, 0, sizeof(locs)); count = DWARF::getSourceLocations(sections, 0x6003, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_EQ(locs[0].line, Uptr(14)); } } // --------------------------------------------------------------------------- // Test 9: testLineTableConstAddPC // --------------------------------------------------------------------------- static void testLineTableConstAddPC(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 nameOff = addDebugStr(strStream, "constAddPCFunc"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); Uptr expectedIncrement = constAddPCIncrement(); U32 cuSize = U32(0x100 + expectedIncrement); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0x7000)); write(infoStream, cuSize); write(infoStream, U32(0)); writeULEB128(infoStream, 2); write(infoStream, nameOff); write(infoStream, U64(0x7000)); write(infoStream, cuSize); write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0x7000); lineAdvanceLine(lineStream, 19); // line = 20 lineCopy(lineStream); lineConstAddPC(lineStream); lineAdvanceLine(lineStream, 5); // line = 25 lineCopy(lineStream); lineAdvancePC(lineStream, 0x100); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x7000, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_EQ(locs[0].line, Uptr(20)); } memset(locs, 0, sizeof(locs)); count = DWARF::getSourceLocations(sections, 0x7000 + expectedIncrement, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_EQ(locs[0].line, Uptr(25)); } } // --------------------------------------------------------------------------- // Test 10: testMultipleCUs // --------------------------------------------------------------------------- static void testMultipleCUs(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 name1 = addDebugStr(strStream, "cu1func"); U32 name2 = addDebugStr(strStream, "cu2func"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); // Line table for CU1 at offset 0, CU2 at lineOffset2 ArrayOutputStream lineStream; Uptr lineLenOff1 = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0xA000); lineAdvanceLine(lineStream, 9); lineCopy(lineStream); lineAdvancePC(lineStream, 0x100); lineEndSequence(lineStream); Uptr line1End = lineStream.position(); U32 lineOffset2 = U32(lineStream.position()); Uptr lineLenOff2 = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0xB000); lineAdvanceLine(lineStream, 49); // line = 50 lineCopy(lineStream); lineAdvancePC(lineStream, 0x100); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff1, U32(line1End - lineLenOff1 - 4)); patchU32(line, lineLenOff2, U32(line.size() - lineLenOff2 - 4)); ArrayOutputStream infoStream; // CU 1 Uptr cu1LenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0xA000)); write(infoStream, U32(0x100)); write(infoStream, U32(0)); writeULEB128(infoStream, 2); write(infoStream, name1); write(infoStream, U64(0xA000)); write(infoStream, U32(0x100)); write(infoStream, U8(0)); Uptr cu1End = infoStream.position(); // CU 2 Uptr cu2LenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0xB000)); write(infoStream, U32(0x100)); write(infoStream, lineOffset2); writeULEB128(infoStream, 2); write(infoStream, name2); write(infoStream, U64(0xB000)); write(infoStream, U32(0x100)); write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cu1LenOff, U32(cu1End - cu1LenOff - 4)); patchU32(info, cu2LenOff, U32(info.size() - cu2LenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0xB020, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "cu2func") == 0); CHECK_EQ(locs[0].line, Uptr(50)); } } // --------------------------------------------------------------------------- // Test 11: testInlineStringForm // --------------------------------------------------------------------------- static void testInlineStringForm(TEST_STATE_PARAM) { ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry(abbrevStream, 2, DW_TAG_subprogram, false, {{DW_AT_name, DW_FORM_string}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0xC000)); write(infoStream, U32(0x100)); write(infoStream, U32(0)); writeULEB128(infoStream, 2); // Inline string "inlineStr" const char* inlineName = "inlineStr"; for(const char* c = inlineName; *c; ++c) { write(infoStream, U8(*c)); } write(infoStream, U8(0)); write(infoStream, U64(0xC000)); write(infoStream, U32(0x100)); write(infoStream, U8(0)); auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0xC000); lineAdvanceLine(lineStream, 4); // line = 5 lineCopy(lineStream); lineAdvancePC(lineStream, 0x100); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); std::vector str; // empty auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0xC010, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "inlineStr") == 0); CHECK_EQ(locs[0].line, Uptr(5)); } } // --------------------------------------------------------------------------- // Test 12: testEmptySections // --------------------------------------------------------------------------- static void testEmptySections(TEST_STATE_PARAM) { { DWARF::Sections sections; DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x1000, locs, 4); CHECK_EQ(count, Uptr(0)); } { U8 dummy = 0; DWARF::Sections sections; sections.debugInfo = &dummy; sections.debugInfoSize = 0; sections.debugAbbrev = &dummy; sections.debugAbbrevSize = 0; DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0x1000, locs, 4); CHECK_EQ(count, Uptr(0)); } { DWARF::Sections sections; Uptr count = DWARF::getSourceLocations(sections, 0x1000, nullptr, 0); CHECK_EQ(count, Uptr(0)); } } // --------------------------------------------------------------------------- // Test 13: testMaxLocations // --------------------------------------------------------------------------- static void testMaxLocations(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 name0 = addDebugStr(strStream, "level0"); U32 name1 = addDebugStr(strStream, "level1"); U32 name2 = addDebugStr(strStream, "level2"); U32 name3 = addDebugStr(strStream, "level3"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry( abbrevStream, 2, DW_TAG_subprogram, true, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}}); buildAbbrevEntry(abbrevStream, 3, DW_TAG_inlined_subroutine, true, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_call_line, DW_FORM_data4}}); buildAbbrevEntry(abbrevStream, 4, DW_TAG_inlined_subroutine, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_call_line, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0xD000)); write(infoStream, U32(0x200)); write(infoStream, U32(0)); // level0: subprogram writeULEB128(infoStream, 2); write(infoStream, name0); write(infoStream, U64(0xD000)); write(infoStream, U32(0x200)); // level1: inlined (has children) writeULEB128(infoStream, 3); write(infoStream, name1); write(infoStream, U64(0xD000)); write(infoStream, U32(0x180)); write(infoStream, U32(10)); // level2: inlined (has children) writeULEB128(infoStream, 3); write(infoStream, name2); write(infoStream, U64(0xD000)); write(infoStream, U32(0x100)); write(infoStream, U32(20)); // level3: inlined (leaf) writeULEB128(infoStream, 4); write(infoStream, name3); write(infoStream, U64(0xD000)); write(infoStream, U32(0x80)); write(infoStream, U32(30)); write(infoStream, U8(0)); // null for level2 write(infoStream, U8(0)); // null for level1 write(infoStream, U8(0)); // null for level0 write(infoStream, U8(0)); // null for CU auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0xD000); lineAdvanceLine(lineStream, 41); // line = 42 lineCopy(lineStream); lineAdvancePC(lineStream, 0x200); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); // Full chain would be 4 locations. Request only 2. Uptr count = DWARF::getSourceLocations(sections, 0xD010, locs, 2); CHECK_EQ(count, Uptr(2)); if(count >= 2) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "level3") == 0); CHECK_EQ(locs[0].line, Uptr(42)); CHECK_TRUE(locs[1].name != nullptr && strcmp(locs[1].name, "level2") == 0); CHECK_EQ(locs[1].line, Uptr(30)); } } // --------------------------------------------------------------------------- // Test 14: testDeclLineForSubprogram // --------------------------------------------------------------------------- static void testDeclLineForSubprogram(TEST_STATE_PARAM) { ArrayOutputStream strStream; write(strStream, U8(0)); U32 outerName = addDebugStr(strStream, "outerWithDeclLine"); U32 innerName = addDebugStr(strStream, "innerInlined"); ArrayOutputStream abbrevStream; buildAbbrevEntry(abbrevStream, 1, DW_TAG_compile_unit, true, {{DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_stmt_list, DW_FORM_sec_offset}}); buildAbbrevEntry(abbrevStream, 2, DW_TAG_subprogram, true, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_decl_line, DW_FORM_data4}}); buildAbbrevEntry(abbrevStream, 3, DW_TAG_inlined_subroutine, false, {{DW_AT_name, DW_FORM_strp}, {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_data4}, {DW_AT_call_line, DW_FORM_data4}}); terminateAbbrevTable(abbrevStream); ArrayOutputStream infoStream; Uptr cuLenOff = beginCUv4(infoStream, 0); writeULEB128(infoStream, 1); write(infoStream, U64(0xE000)); write(infoStream, U32(0x200)); write(infoStream, U32(0)); // Subprogram with decl_line = 200 writeULEB128(infoStream, 2); write(infoStream, outerName); write(infoStream, U64(0xE000)); write(infoStream, U32(0x200)); write(infoStream, U32(200)); // Inlined subroutine with call_line = 210 writeULEB128(infoStream, 3); write(infoStream, innerName); write(infoStream, U64(0xE040)); write(infoStream, U32(0x40)); write(infoStream, U32(210)); write(infoStream, U8(0)); // null for subprogram children write(infoStream, U8(0)); // null for CU children auto info = infoStream.getBytes(); patchU32(info, cuLenOff, U32(info.size() - cuLenOff - 4)); ArrayOutputStream lineStream; Uptr lineLenOff = beginLineTableV4(lineStream); lineSetAddress(lineStream, 0xE040); lineAdvanceLine(lineStream, 14); // line = 15 lineCopy(lineStream); lineAdvancePC(lineStream, 0x200); lineEndSequence(lineStream); auto line = lineStream.getBytes(); patchU32(line, lineLenOff, U32(line.size() - lineLenOff - 4)); auto str = strStream.getBytes(); auto abbrev = abbrevStream.getBytes(); DWARF::Sections sections = makeSections(info, abbrev, str, line); DWARF::SourceLocation locs[4]; memset(locs, 0, sizeof(locs)); Uptr count = DWARF::getSourceLocations(sections, 0xE050, locs, 4); CHECK_EQ(count, Uptr(2)); if(count >= 2) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "innerInlined") == 0); CHECK_EQ(locs[0].line, Uptr(15)); CHECK_TRUE(locs[1].name != nullptr && strcmp(locs[1].name, "outerWithDeclLine") == 0); CHECK_EQ(locs[1].line, Uptr(210)); } // Address outside inlined but inside subprogram: only subprogram returned. memset(locs, 0, sizeof(locs)); count = DWARF::getSourceLocations(sections, 0xE000, locs, 4); CHECK_EQ(count, Uptr(1)); if(count >= 1) { CHECK_TRUE(locs[0].name != nullptr && strcmp(locs[0].name, "outerWithDeclLine") == 0); CHECK_EQ(locs[0].line, Uptr(0)); // no line table entry covers 0xE000 } } // --------------------------------------------------------------------------- // Entry point // --------------------------------------------------------------------------- I32 execDWARFTest(int argc, char** argv) { WAVM_SUPPRESS_UNUSED(argc); WAVM_SUPPRESS_UNUSED(argv); TEST_STATE_LOCAL; Timing::Timer timer; testSimpleFunction(TEST_STATE_ARG); testFunctionNotFound(TEST_STATE_ARG); testInlineChain(TEST_STATE_ARG); testAbstractOrigin(TEST_STATE_ARG); testDWARFv4Header(TEST_STATE_ARG); testDWARFv5Header(TEST_STATE_ARG); testHighPCAsOffset(TEST_STATE_ARG); testLineTableSpecialOpcodes(TEST_STATE_ARG); testLineTableConstAddPC(TEST_STATE_ARG); testMultipleCUs(TEST_STATE_ARG); testInlineStringForm(TEST_STATE_ARG); testEmptySections(TEST_STATE_ARG); testMaxLocations(TEST_STATE_ARG); testDeclLineForSubprogram(TEST_STATE_ARG); Timing::logTimer("Ran DWARF tests", timer); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestHashMap.cpp ================================================ #include #include #include #include #include #include #include #include "TestUtils.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Defines.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::Testing; static std::string generateRandomString() { static constexpr Uptr maxChars = 16; const Uptr numChars = rand() % maxChars; char* buffer = (char*)alloca(numChars + 1); for(Uptr charIndex = 0; charIndex < numChars; ++charIndex) { buffer[charIndex] = 0x20 + (rand() % (0x7E - 0x20)); } buffer[numChars] = 0; return std::string(buffer); } static void testStringMap(TEST_STATE_PARAM) { static constexpr Uptr numStrings = 1000; HashMap map; std::vector> pairs; srand(0); for(Uptr i = 0; i < numStrings; ++i) { while(true) { std::string randomString = generateRandomString(); bool alreadySawString = false; for(const HashMapPair& pair : pairs) { if(pair.key == randomString) { alreadySawString = true; break; } } if(!alreadySawString) { pairs.emplace_back(std::move(randomString), rand()); break; } }; } for(Uptr i = 0; i < pairs.size(); ++i) { CHECK_TRUE(map.add(pairs[i].key, pairs[i].value)); CHECK_FALSE(map.add(pairs[i].key, pairs[i].value)); for(Uptr j = 0; j < pairs.size(); ++j) { const U32* valuePtr = map.get(pairs[j].key); if(j <= i) { CHECK_NOT_NULL(valuePtr); if(valuePtr) { CHECK_EQ(*valuePtr, pairs[j].value); } } else { CHECK_NULL(valuePtr); } } } for(Uptr i = 0; i < pairs.size(); ++i) { CHECK_TRUE(map.remove(pairs[i].key)); CHECK_FALSE(map.remove(pairs[i].key)); for(Uptr j = 0; j < pairs.size(); ++j) { const U32* valuePtr = map.get(pairs[j].key); if(j > i) { CHECK_NOT_NULL(valuePtr); if(valuePtr) { CHECK_EQ(*valuePtr, pairs[j].value); } } else { CHECK_NULL(valuePtr); } } } } static void testU32Map(TEST_STATE_PARAM) { HashMap map; static constexpr Uptr maxI = 1024 * 1024; for(Uptr i = 0; i < maxI; ++i) { CHECK_FALSE(map.contains(U32(i))); } CHECK_EQ(map.size(), Uptr(0)); for(Uptr i = 0; i < maxI; ++i) { CHECK_FALSE(map.contains(U32(i))); CHECK_NULL(map.get(U32(i))); CHECK_TRUE(map.add(U32(i), U32(i * 2))); CHECK_TRUE(map.contains(U32(i))); CHECK_EQ(map[U32(i)], U32(i * 2)); CHECK_EQ(map.size(), i + 1); } for(Uptr i = 0; i < maxI; ++i) { CHECK_TRUE(map.contains(U32(i))); CHECK_TRUE(map.remove(U32(i))); CHECK_FALSE(map.contains(U32(i))); CHECK_EQ(map.size(), maxI - i - 1); } for(Uptr i = 0; i < maxI; ++i) { CHECK_FALSE(map.contains(U32(i))); } } static void testMapCopy(TEST_STATE_PARAM) { // Add 1000..1999 to a HashMap. HashMap a; for(Uptr i = 0; i < 1000; ++i) { a.add(i + 1000, i); } // Copy the map to a new HashMap. HashMap b{a}; // Test that both the new and old HashMap contain the expected numbers. for(Uptr i = 0; i < 1000; ++i) { CHECK_NULL(a.get(i)); CHECK_EQ(a[i + 1000], i); CHECK_NULL(a.get(i + 2000)); CHECK_NULL(b.get(i)); CHECK_EQ(b[i + 1000], i); CHECK_NULL(b.get(i + 2000)); } // Test copying a map from itself. WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(b = b;) // Test that the map wasn't changed by the copy-to-self. for(Uptr i = 0; i < 1000; ++i) { CHECK_NULL(b.get(i)); CHECK_EQ(b[i + 1000], i); CHECK_NULL(b.get(i + 2000)); } // Test removing an element from the map. b.remove(1000); CHECK_EQ(a[1000], Uptr(0)); CHECK_NULL(b.get(1000)); } static void testMapMove(TEST_STATE_PARAM) { // Add 1000..1999 to a HashMap. HashMap a; for(Uptr i = 0; i < 1000; ++i) { a.add(i + 1000, i); } // Move the map to a new HashMap. HashMap b{std::move(a)}; // Test that the new HashMap contains the expected numbers. for(Uptr i = 0; i < 1000; ++i) { CHECK_NULL(b.get(i)); CHECK_EQ(b[i + 1000], i); CHECK_NULL(b.get(i + 2000)); } // Test moving the map to itself. WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(b = std::move(b);) // Test that the map wasn't changed by the move-to-self. for(Uptr i = 0; i < 1000; ++i) { CHECK_NULL(b.get(i)); CHECK_EQ(b[i + 1000], i); CHECK_NULL(b.get(i + 2000)); } } static void testMapInitializerList(TEST_STATE_PARAM) { HashMap map{{1, 1}, {3, 2}, {5, 3}, {7, 4}, {11, 5}, {13, 6}, {17, 7}}; CHECK_NULL(map.get(0)); CHECK_EQ(map[1], Uptr(1)); CHECK_NULL(map.get(2)); CHECK_EQ(map[3], Uptr(2)); CHECK_NULL(map.get(4)); CHECK_EQ(map[5], Uptr(3)); CHECK_NULL(map.get(6)); CHECK_EQ(map[7], Uptr(4)); CHECK_NULL(map.get(8)); CHECK_NULL(map.get(9)); CHECK_NULL(map.get(10)); CHECK_EQ(map[11], Uptr(5)); CHECK_NULL(map.get(12)); CHECK_EQ(map[13], Uptr(6)); CHECK_NULL(map.get(14)); CHECK_NULL(map.get(15)); CHECK_NULL(map.get(16)); CHECK_EQ(map[17], Uptr(7)); } static void testMapIterator(TEST_STATE_PARAM) { // Add 1..9 to a HashMap. HashMap a; for(Uptr i = 1; i < 10; ++i) { a.add(i, i * 2); } // 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45 { Uptr keySum = 0; Uptr valueSum = 0; for(const auto& pair : a) { keySum += pair.key; valueSum += pair.value; } CHECK_EQ(keySum, Uptr(45)); CHECK_EQ(valueSum, Uptr(90)); } // Remove 5. a.remove(5); // 1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 = 40 { Uptr keySum = 0; Uptr valueSum = 0; for(const auto& pair : a) { keySum += pair.key; valueSum += pair.value; } CHECK_EQ(keySum, Uptr(40)); CHECK_EQ(valueSum, Uptr(80)); } } static void testMapGetOrAdd(TEST_STATE_PARAM) { HashMap map; CHECK_NULL(map.get(0)); CHECK_EQ(map.getOrAdd(0, 1), Uptr(1)); CHECK_EQ(map[0], Uptr(1)); CHECK_EQ(map.getOrAdd(0, 3), Uptr(1)); CHECK_EQ(map[0], Uptr(1)); CHECK_EQ((map.getOrAdd(0, 5) += 7), Uptr(8)); CHECK_EQ(map[0], Uptr(8)); } static void testMapSet(TEST_STATE_PARAM) { HashMap map; CHECK_NULL(map.get(0)); CHECK_EQ(map.set(0, 1), Uptr(1)); CHECK_EQ(map[0], Uptr(1)); CHECK_EQ(map.set(0, 3), Uptr(3)); CHECK_EQ(map[0], Uptr(3)); } struct EmplacedValue { std::string a; std::string b; EmplacedValue(const std::string& inA, const std::string& inB) : a(inA), b(inB) {} }; static void testMapEmplace(TEST_STATE_PARAM) { HashMap map; EmplacedValue& a = map.getOrAdd(0, "a", "b"); CHECK_EQ(a.a, std::string("a")); CHECK_EQ(a.b, std::string("b")); CHECK_TRUE(map.add(1, "c", "d")); const EmplacedValue* bPtr = map.get(1); CHECK_NOT_NULL(bPtr); if(bPtr) { CHECK_EQ(bPtr->a, std::string("c")); CHECK_EQ(bPtr->b, std::string("d")); } EmplacedValue& c = map.set(2, "e", "f"); CHECK_EQ(c.a, std::string("e")); CHECK_EQ(c.b, std::string("f")); EmplacedValue& d = map.getOrAdd(2, "g", "h"); CHECK_EQ(d.a, std::string("e")); CHECK_EQ(d.b, std::string("f")); } static void testMapBracketOperator(TEST_STATE_PARAM) { HashMap map{{1, 1}, {3, 2}, {5, 3}, {7, 4}, {11, 5}, {13, 6}, {17, 7}}; CHECK_EQ(map[1], Uptr(1)); CHECK_EQ(map[3], Uptr(2)); CHECK_EQ(map[5], Uptr(3)); CHECK_EQ(map[7], Uptr(4)); CHECK_EQ(map[11], Uptr(5)); CHECK_EQ(map[13], Uptr(6)); CHECK_EQ(map[17], Uptr(7)); } static void testMapEmpty(TEST_STATE_PARAM) { HashMap map; CHECK_EQ(map.size(), Uptr(0)); CHECK_FALSE(map.contains(0)); CHECK_NULL(map.get(0)); CHECK_FALSE(map.remove(0)); // Iteration over empty map Uptr count = 0; for(const auto& pair : map) { (void)pair; ++count; } CHECK_EQ(count, Uptr(0)); // begin() == end() for empty map CHECK_TRUE(map.begin() == map.end()); } static void testMapClear(TEST_STATE_PARAM) { HashMap map; for(Uptr i = 0; i < 100; ++i) { map.add(i, i * 2); } CHECK_EQ(map.size(), Uptr(100)); map.clear(); CHECK_EQ(map.size(), Uptr(0)); CHECK_FALSE(map.contains(0)); CHECK_FALSE(map.contains(50)); CHECK_FALSE(map.contains(99)); // Can add again after clear CHECK_TRUE(map.add(42, 84)); CHECK_EQ(map[42], Uptr(84)); } static void testMapGetPair(TEST_STATE_PARAM) { HashMap map; map.add("hello", 1); map.add("world", 2); const HashMapPair* pair = map.getPair("hello"); CHECK_NOT_NULL(pair); if(pair) { CHECK_EQ(pair->key, std::string("hello")); CHECK_EQ(pair->value, Uptr(1)); } CHECK_NULL(map.getPair("missing")); } static void testMapReserve(TEST_STATE_PARAM) { // Constructor with reserve HashMap map(1000); // Should be able to add many elements efficiently for(Uptr i = 0; i < 1000; ++i) { map.add(i, i); } CHECK_EQ(map.size(), Uptr(1000)); for(Uptr i = 0; i < 1000; ++i) { CHECK_EQ(map[i], i); } } static void testMapAddOrFail(TEST_STATE_PARAM) { HashMap map; // addOrFail on empty map should succeed map.addOrFail(1, 10); CHECK_EQ(map[1], Uptr(10)); } static void testMapRemoveOrFail(TEST_STATE_PARAM) { HashMap map; map.add(1, 10); // removeOrFail on existing key should succeed map.removeOrFail(1); CHECK_FALSE(map.contains(1)); } static void testMapAnalyzeSpaceUsage(TEST_STATE_PARAM) { HashMap map; for(Uptr i = 0; i < 100; ++i) { map.add(i, i); } Uptr totalMemoryBytes = 0; Uptr maxProbeCount = 0; F32 occupancy = 0; F32 averageProbeCount = 0; map.analyzeSpaceUsage(totalMemoryBytes, maxProbeCount, occupancy, averageProbeCount); CHECK_GT(totalMemoryBytes, Uptr(0)); CHECK_GT(occupancy, 0.0f); CHECK_LE(occupancy, 1.0f); CHECK_GE(averageProbeCount, 1.0f); } static void testMapAnalyzeSpaceUsageAfterClear(TEST_STATE_PARAM) { HashMap map; for(Uptr i = 0; i < 100; ++i) { map.add(i, i); } map.clear(); // After clear, analyzeSpaceUsage should not crash (division by zero) Uptr totalMemoryBytes = 0; Uptr maxProbeCount = 0; F32 occupancy = 0; F32 averageProbeCount = 0; map.analyzeSpaceUsage(totalMemoryBytes, maxProbeCount, occupancy, averageProbeCount); CHECK_EQ(map.size(), Uptr(0)); } static void testMapMovedFromState(TEST_STATE_PARAM) { HashMap a; for(Uptr i = 0; i < 100; ++i) { a.add(i, i * 2); } // Move to b HashMap b{std::move(a)}; // The moved-from map 'a' should be in a valid, empty state CHECK_EQ(a.size(), Uptr(0)); // Iterating over moved-from map should be safe (begin == end) Uptr count = 0; for(const auto& pair : a) { (void)pair; ++count; } CHECK_EQ(count, Uptr(0)); // Should be able to add to moved-from map CHECK_TRUE(a.add(42, 84)); CHECK_EQ(a[42], Uptr(84)); } // Custom hash policy that causes all keys to hash to the same bucket struct CollidingHashPolicy { static bool areKeysEqual(Uptr left, Uptr right) { return left == right; } static Uptr getKeyHash(Uptr) { return 0; } // All keys hash to 0 }; static void testMapHashCollisions(TEST_STATE_PARAM) { // Use a map where all keys collide HashMap map; // Add many elements that all hash to the same bucket static constexpr Uptr numElements = 100; for(Uptr i = 0; i < numElements; ++i) { CHECK_TRUE(map.add(i, i * 2)); } CHECK_EQ(map.size(), numElements); // Verify all elements can be found for(Uptr i = 0; i < numElements; ++i) { CHECK_TRUE(map.contains(i)); CHECK_EQ(map[i], i * 2); } // Remove every other element for(Uptr i = 0; i < numElements; i += 2) { CHECK_TRUE(map.remove(i)); } CHECK_EQ(map.size(), numElements / 2); // Verify remaining elements for(Uptr i = 0; i < numElements; ++i) { if(i % 2 == 0) { CHECK_FALSE(map.contains(i)); } else { CHECK_TRUE(map.contains(i)); CHECK_EQ(map[i], i * 2); } } } static void testMapAnalyzeSpaceUsageEmpty(TEST_STATE_PARAM) { // Test analyzeSpaceUsage on a freshly constructed empty map HashMap map; Uptr totalMemoryBytes = 0; Uptr maxProbeCount = 0; F32 occupancy = 0; F32 averageProbeCount = 0; map.analyzeSpaceUsage(totalMemoryBytes, maxProbeCount, occupancy, averageProbeCount); CHECK_EQ(map.size(), Uptr(0)); } static void testMapTrackedValueDestruction(TEST_STATE_PARAM) { TrackedValueRealm realm; { HashMap map; map.add(TrackedValue(realm, 1), TrackedValue(realm, 10)); map.add(TrackedValue(realm, 2), TrackedValue(realm, 20)); map.add(TrackedValue(realm, 3), TrackedValue(realm, 30)); CHECK_EQ(map.size(), Uptr(3)); } // All elements should be destroyed when map goes out of scope CHECK_TRUE(realm.allDestroyed()); } static void testMapTrackedValueClear(TEST_STATE_PARAM) { TrackedValueRealm realm; HashMap map; map.add(TrackedValue(realm, 1), TrackedValue(realm, 10)); map.add(TrackedValue(realm, 2), TrackedValue(realm, 20)); map.add(TrackedValue(realm, 3), TrackedValue(realm, 30)); // Capture HeapValues before clear std::vector> heapValuesBefore; for(const auto& pair : map) { heapValuesBefore.push_back(pair.key.heapValue); heapValuesBefore.push_back(pair.value.heapValue); } map.clear(); // All captured HeapValues should be marked destroyed for(const auto& hv : heapValuesBefore) { CHECK_TRUE(hv->destroyed); } } static void testMapTrackedValueRemove(TEST_STATE_PARAM) { TrackedValueRealm realm; HashMap map; map.add(1, TrackedValue(realm, 10)); map.add(2, TrackedValue(realm, 20)); map.add(3, TrackedValue(realm, 30)); // Capture HeapValue for key 2 TrackedValue* tv2 = map.get(2); WAVM_ERROR_UNLESS(tv2); std::shared_ptr hv2 = tv2->heapValue; CHECK_FALSE(hv2->destroyed); map.remove(2); // HeapValue for removed element should be destroyed CHECK_TRUE(hv2->destroyed); } static void testMapTrackedValueContainerMove(TEST_STATE_PARAM) { TrackedValueRealm realm; HashMap a; a.add(TrackedValue(realm, 1), TrackedValue(realm, 10)); a.add(TrackedValue(realm, 2), TrackedValue(realm, 20)); // Capture original HeapValues std::set> originalHeapValues; for(const auto& pair : a) { originalHeapValues.insert(pair.key.heapValue); originalHeapValues.insert(pair.value.heapValue); } // Move container HashMap b = std::move(a); // Original HeapValues should NOT be destroyed (ownership transferred) for(const auto& hv : originalHeapValues) { CHECK_FALSE(hv->destroyed); } // Elements in b should have the same HeapValues (no copy/move of elements) for(const auto& pair : b) { CHECK_TRUE(originalHeapValues.count(pair.key.heapValue) == 1); CHECK_TRUE(originalHeapValues.count(pair.value.heapValue) == 1); } } static void testMapTrackedValueContainerCopy(TEST_STATE_PARAM) { TrackedValueRealm realm; HashMap a; a.add(TrackedValue(realm, 1), TrackedValue(realm, 10)); a.add(TrackedValue(realm, 2), TrackedValue(realm, 20)); // Capture original HeapValues std::set> originalHeapValues; for(const auto& pair : a) { originalHeapValues.insert(pair.key.heapValue); originalHeapValues.insert(pair.value.heapValue); } // Copy container HashMap b{a}; // Original HeapValues should NOT be destroyed (a still exists) for(const auto& hv : originalHeapValues) { CHECK_FALSE(hv->destroyed); } // Elements in b should have DIFFERENT HeapValues (copies were made) for(const auto& pair : b) { CHECK_TRUE(originalHeapValues.count(pair.key.heapValue) == 0); CHECK_TRUE(originalHeapValues.count(pair.value.heapValue) == 0); // Elide any internal moves to find the underlying provenance auto keyElided = pair.key.heapValue->elideMoves(); auto valueElided = pair.value.heapValue->elideMoves(); WAVM_ERROR_UNLESS(keyElided); WAVM_ERROR_UNLESS(valueElided); // Should be CopyConstructed with source pointing to originals CHECK_EQ(keyElided->provenance, HeapValue::Provenance::CopyConstructed); CHECK_EQ(valueElided->provenance, HeapValue::Provenance::CopyConstructed); CHECK_TRUE(originalHeapValues.count(keyElided->source) == 1); CHECK_TRUE(originalHeapValues.count(valueElided->source) == 1); } } I32 execHashMapTest(int argc, char** argv) { TEST_STATE_LOCAL; Timing::Timer timer; testStringMap(TEST_STATE_ARG); testU32Map(TEST_STATE_ARG); testMapCopy(TEST_STATE_ARG); testMapMove(TEST_STATE_ARG); testMapInitializerList(TEST_STATE_ARG); testMapIterator(TEST_STATE_ARG); testMapGetOrAdd(TEST_STATE_ARG); testMapSet(TEST_STATE_ARG); testMapEmplace(TEST_STATE_ARG); testMapBracketOperator(TEST_STATE_ARG); testMapEmpty(TEST_STATE_ARG); testMapClear(TEST_STATE_ARG); testMapGetPair(TEST_STATE_ARG); testMapReserve(TEST_STATE_ARG); testMapAddOrFail(TEST_STATE_ARG); testMapRemoveOrFail(TEST_STATE_ARG); testMapAnalyzeSpaceUsage(TEST_STATE_ARG); testMapAnalyzeSpaceUsageAfterClear(TEST_STATE_ARG); testMapAnalyzeSpaceUsageEmpty(TEST_STATE_ARG); testMapMovedFromState(TEST_STATE_ARG); testMapHashCollisions(TEST_STATE_ARG); testMapTrackedValueDestruction(TEST_STATE_ARG); testMapTrackedValueClear(TEST_STATE_ARG); testMapTrackedValueRemove(TEST_STATE_ARG); testMapTrackedValueContainerMove(TEST_STATE_ARG); testMapTrackedValueContainerCopy(TEST_STATE_ARG); Timing::logTimer("HashMapTest", timer); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestHashSet.cpp ================================================ #include #include #include #include #include #include #include #include "TestUtils.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashSet.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Platform/Alloca.h" #include "WAVM/Platform/Defines.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::Testing; static std::string generateRandomString() { static constexpr Uptr maxChars = 16; const Uptr numChars = rand() % maxChars; char* buffer = (char*)alloca(numChars + 1); for(Uptr charIndex = 0; charIndex < numChars; ++charIndex) { buffer[charIndex] = 0x20 + (rand() % (0x7E - 0x20)); } buffer[numChars] = 0; return std::string(buffer); } static void testStringSet(TEST_STATE_PARAM) { static constexpr Uptr numStrings = 1000; HashSet set; std::vector strings; srand(0); for(Uptr i = 0; i < numStrings; ++i) { while(true) { std::string randomString = generateRandomString(); bool alreadySawString = false; for(const std::string& string : strings) { if(string == randomString) { alreadySawString = true; break; } } if(!alreadySawString) { strings.push_back(std::move(randomString)); break; } }; } for(Uptr i = 0; i < strings.size(); ++i) { CHECK_TRUE(set.add(strings[i])); CHECK_FALSE(set.add(strings[i])); for(Uptr j = 0; j < strings.size(); ++j) { const bool expectedContains = j <= i; CHECK_EQ(set.contains(strings[j]), expectedContains); } } for(Uptr i = 0; i < strings.size(); ++i) { CHECK_TRUE(set.remove(strings[i])); CHECK_FALSE(set.remove(strings[i])); for(Uptr j = 0; j < strings.size(); ++j) { const bool expectedContains = j > i; CHECK_EQ(set.contains(strings[j]), expectedContains); } } } static void testU32Set(TEST_STATE_PARAM) { HashSet set; static constexpr Uptr maxI = 1024 * 1024; for(Uptr i = 0; i < maxI; ++i) { CHECK_FALSE(set.contains(U32(i))); } CHECK_EQ(set.size(), Uptr(0)); for(Uptr i = 0; i < maxI; ++i) { CHECK_FALSE(set.contains(U32(i))); CHECK_NULL(set.get(U32(i))); CHECK_TRUE(set.add(U32(i))); CHECK_TRUE(set.contains(U32(i))); CHECK_NOT_NULL(set.get(U32(i))); CHECK_EQ(set.size(), i + 1); } for(Uptr i = 0; i < maxI; ++i) { CHECK_TRUE(set.contains(U32(i))); CHECK_TRUE(set.remove(U32(i))); CHECK_FALSE(set.contains(U32(i))); CHECK_EQ(set.size(), maxI - i - 1); } for(Uptr i = 0; i < maxI; ++i) { CHECK_FALSE(set.contains(U32(i))); } } static void testSetCopy(TEST_STATE_PARAM) { // Add 1000..1999 to a HashSet. HashSet a; for(Uptr i = 0; i < 1000; ++i) { a.add(i + 1000); } // Copy the set to a new HashSet. HashSet b{a}; // Test that both the new and old HashSet contain the expected numbers. for(Uptr i = 0; i < 1000; ++i) { CHECK_FALSE(a.contains(i)); CHECK_TRUE(a.contains(i + 1000)); CHECK_FALSE(a.contains(i + 2000)); CHECK_FALSE(b.contains(i)); CHECK_TRUE(b.contains(i + 1000)); CHECK_FALSE(b.contains(i + 2000)); } // Test copying a set from itself. WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(b = b;) // Test that the set wasn't changed by the copy-to-self. for(Uptr i = 0; i < 1000; ++i) { CHECK_FALSE(b.contains(i)); CHECK_TRUE(b.contains(i + 1000)); CHECK_FALSE(b.contains(i + 2000)); } // Test removing an element from the set. b.remove(1000); CHECK_TRUE(a.contains(1000)); CHECK_FALSE(b.contains(1000)); } static void testSetMove(TEST_STATE_PARAM) { // Add 1000..1999 to a HashSet. HashSet a; for(Uptr i = 0; i < 1000; ++i) { a.add(i + 1000); } // Move the set to a new HashSet. HashSet b{std::move(a)}; // Test that the new HashSet contains the expected numbers. for(Uptr i = 0; i < 1000; ++i) { CHECK_FALSE(b.contains(i)); CHECK_TRUE(b.contains(i + 1000)); CHECK_FALSE(b.contains(i + 2000)); } // Test moving the set to itself. WAVM_SCOPED_DISABLE_SELF_ASSIGN_WARNINGS(b = std::move(b);) // Test that the set wasn't changed by the move-to-self. for(Uptr i = 0; i < 1000; ++i) { CHECK_FALSE(b.contains(i)); CHECK_TRUE(b.contains(i + 1000)); CHECK_FALSE(b.contains(i + 2000)); } } static void testSetInitializerList(TEST_STATE_PARAM) { HashSet set{1, 3, 5, 7, 11, 13, 17}; CHECK_FALSE(set.contains(0)); CHECK_TRUE(set.contains(1)); CHECK_FALSE(set.contains(2)); CHECK_TRUE(set.contains(3)); CHECK_FALSE(set.contains(4)); CHECK_TRUE(set.contains(5)); CHECK_FALSE(set.contains(6)); CHECK_TRUE(set.contains(7)); CHECK_FALSE(set.contains(8)); CHECK_FALSE(set.contains(9)); CHECK_FALSE(set.contains(10)); CHECK_TRUE(set.contains(11)); CHECK_FALSE(set.contains(12)); CHECK_TRUE(set.contains(13)); CHECK_FALSE(set.contains(14)); CHECK_FALSE(set.contains(15)); CHECK_FALSE(set.contains(16)); CHECK_TRUE(set.contains(17)); } static void testSetIterator(TEST_STATE_PARAM) { // Add 1..9 to a HashSet. HashSet a; for(Uptr i = 1; i < 10; ++i) { a.add(i); } // 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45 { Uptr sum = 0; for(Uptr i : a) { sum += i; } CHECK_EQ(sum, Uptr(45)); } // Remove 5. a.remove(5); // 1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 = 40 { Uptr sum = 0; for(Uptr i : a) { sum += i; } CHECK_EQ(sum, Uptr(40)); } } static void testSetBracketOperator(TEST_STATE_PARAM) { HashSet set{1, 3, 5, 7, 11, 13, 17}; CHECK_EQ(set[1], Uptr(1)); CHECK_EQ(set[3], Uptr(3)); CHECK_EQ(set[5], Uptr(5)); CHECK_EQ(set[7], Uptr(7)); CHECK_EQ(set[11], Uptr(11)); CHECK_EQ(set[13], Uptr(13)); CHECK_EQ(set[17], Uptr(17)); } static void testSetEmpty(TEST_STATE_PARAM) { HashSet set; CHECK_EQ(set.size(), Uptr(0)); CHECK_FALSE(set.contains(0)); CHECK_NULL(set.get(0)); CHECK_FALSE(set.remove(0)); // Iteration over empty set Uptr count = 0; for(Uptr value : set) { (void)value; ++count; } CHECK_EQ(count, Uptr(0)); // begin() == end() for empty set CHECK_TRUE(set.begin() == set.end()); } static void testSetClear(TEST_STATE_PARAM) { HashSet set; for(Uptr i = 0; i < 100; ++i) { set.add(i); } CHECK_EQ(set.size(), Uptr(100)); set.clear(); CHECK_EQ(set.size(), Uptr(0)); CHECK_FALSE(set.contains(0)); CHECK_FALSE(set.contains(50)); CHECK_FALSE(set.contains(99)); // Can add again after clear CHECK_TRUE(set.add(42)); CHECK_TRUE(set.contains(42)); } static void testSetReserve(TEST_STATE_PARAM) { // Constructor with reserve HashSet set(1000); // Should be able to add many elements efficiently for(Uptr i = 0; i < 1000; ++i) { set.add(i); } CHECK_EQ(set.size(), Uptr(1000)); for(Uptr i = 0; i < 1000; ++i) { CHECK_TRUE(set.contains(i)); } } static void testSetAddOrFail(TEST_STATE_PARAM) { HashSet set; // addOrFail on empty set should succeed set.addOrFail(1); CHECK_TRUE(set.contains(1)); } static void testSetRemoveOrFail(TEST_STATE_PARAM) { HashSet set; set.add(1); // removeOrFail on existing key should succeed set.removeOrFail(1); CHECK_FALSE(set.contains(1)); } static void testSetAnalyzeSpaceUsage(TEST_STATE_PARAM) { HashSet set; for(Uptr i = 0; i < 100; ++i) { set.add(i); } Uptr totalMemoryBytes = 0; Uptr maxProbeCount = 0; F32 occupancy = 0; F32 averageProbeCount = 0; set.analyzeSpaceUsage(totalMemoryBytes, maxProbeCount, occupancy, averageProbeCount); CHECK_GT(totalMemoryBytes, Uptr(0)); CHECK_GT(occupancy, 0.0f); CHECK_LE(occupancy, 1.0f); CHECK_GE(averageProbeCount, 1.0f); } static void testSetAnalyzeSpaceUsageAfterClear(TEST_STATE_PARAM) { HashSet set; for(Uptr i = 0; i < 100; ++i) { set.add(i); } set.clear(); // After clear, analyzeSpaceUsage should not crash (division by zero) Uptr totalMemoryBytes = 0; Uptr maxProbeCount = 0; F32 occupancy = 0; F32 averageProbeCount = 0; set.analyzeSpaceUsage(totalMemoryBytes, maxProbeCount, occupancy, averageProbeCount); CHECK_EQ(set.size(), Uptr(0)); } static void testSetMovedFromState(TEST_STATE_PARAM) { HashSet a; for(Uptr i = 0; i < 100; ++i) { a.add(i); } // Move to b HashSet b{std::move(a)}; // The moved-from set 'a' should be in a valid, empty state CHECK_EQ(a.size(), Uptr(0)); // Iterating over moved-from set should be safe (begin == end) Uptr count = 0; for(Uptr value : a) { (void)value; ++count; } CHECK_EQ(count, Uptr(0)); // Should be able to add to moved-from set CHECK_TRUE(a.add(42)); CHECK_TRUE(a.contains(42)); } // Custom hash policy that causes all elements to hash to the same bucket struct CollidingHashPolicy { static bool areKeysEqual(Uptr left, Uptr right) { return left == right; } static Uptr getKeyHash(Uptr) { return 0; } // All elements hash to 0 }; static void testSetHashCollisions(TEST_STATE_PARAM) { // Use a set where all elements collide HashSet set; // Add many elements that all hash to the same bucket static constexpr Uptr numElements = 100; for(Uptr i = 0; i < numElements; ++i) { CHECK_TRUE(set.add(i)); } CHECK_EQ(set.size(), numElements); // Verify all elements can be found for(Uptr i = 0; i < numElements; ++i) { CHECK_TRUE(set.contains(i)); } // Remove every other element for(Uptr i = 0; i < numElements; i += 2) { CHECK_TRUE(set.remove(i)); } CHECK_EQ(set.size(), numElements / 2); // Verify remaining elements for(Uptr i = 0; i < numElements; ++i) { if(i % 2 == 0) { CHECK_FALSE(set.contains(i)); } else { CHECK_TRUE(set.contains(i)); } } } static void testSetAnalyzeSpaceUsageEmpty(TEST_STATE_PARAM) { // Test analyzeSpaceUsage on a freshly constructed empty set HashSet set; Uptr totalMemoryBytes = 0; Uptr maxProbeCount = 0; F32 occupancy = 0; F32 averageProbeCount = 0; set.analyzeSpaceUsage(totalMemoryBytes, maxProbeCount, occupancy, averageProbeCount); CHECK_EQ(set.size(), Uptr(0)); } static void testSetTrackedValueDestruction(TEST_STATE_PARAM) { TrackedValueRealm realm; { HashSet set; set.add(TrackedValue(realm, 1)); set.add(TrackedValue(realm, 2)); } // After set destruction, all TrackedValues should be destroyed CHECK_TRUE(realm.allDestroyed()); } static void testSetTrackedValueClear(TEST_STATE_PARAM) { TrackedValueRealm realm; HashSet set; set.add(TrackedValue(realm, 1)); set.add(TrackedValue(realm, 2)); // Capture HeapValues before clear std::vector> heapValues; for(const auto& tv : set) { heapValues.push_back(tv.heapValue); } set.clear(); // All captured HeapValues should be marked as destroyed for(const auto& hv : heapValues) { CHECK_TRUE(hv->destroyed); } CHECK_EQ(set.size(), Uptr(0)); } static void testSetTrackedValueRemove(TEST_STATE_PARAM) { TrackedValueRealm realm; HashSet set; set.add(TrackedValue(realm, 1)); // Capture the HeapValue of the element in the set WAVM_ERROR_UNLESS(set.size() == 1); std::shared_ptr setHeapValue = set.begin()->heapValue; CHECK_FALSE(setHeapValue->destroyed); // Create a lookup key with the same value TrackedValue lookupKey(realm, 1); CHECK_TRUE(set.remove(lookupKey)); // The HeapValue that was in the set should be destroyed CHECK_TRUE(setHeapValue->destroyed); } static void testSetTrackedValueContainerMove(TEST_STATE_PARAM) { TrackedValueRealm realm; HashSet a; a.add(TrackedValue(realm, 1)); a.add(TrackedValue(realm, 2)); // Capture HeapValues from a std::set> originalHeapValues; for(const auto& tv : a) { originalHeapValues.insert(tv.heapValue); } // Move container HashSet b{std::move(a)}; // Original HeapValues should NOT be destroyed (moved, not copied) for(const auto& hv : originalHeapValues) { CHECK_FALSE(hv->destroyed); } // Elements in b should have the SAME HeapValues (no copy/move of elements) for(const auto& tv : b) { CHECK_TRUE(originalHeapValues.count(tv.heapValue) == 1); } } static void testSetTrackedValueContainerCopy(TEST_STATE_PARAM) { TrackedValueRealm realm; HashSet a; a.add(TrackedValue(realm, 1)); a.add(TrackedValue(realm, 2)); // Capture original HeapValues std::set> originalHeapValues; for(const auto& tv : a) { originalHeapValues.insert(tv.heapValue); } // Copy container HashSet b{a}; // Original HeapValues should NOT be destroyed (a still exists) for(const auto& hv : originalHeapValues) { CHECK_FALSE(hv->destroyed); } // Elements in b should have DIFFERENT HeapValues (copies were made) for(const auto& tv : b) { CHECK_TRUE(originalHeapValues.count(tv.heapValue) == 0); // Elide any internal moves to find the underlying provenance auto elided = tv.heapValue->elideMoves(); WAVM_ERROR_UNLESS(elided); // Should be CopyConstructed with source pointing to originals CHECK_EQ(elided->provenance, HeapValue::Provenance::CopyConstructed); CHECK_TRUE(originalHeapValues.count(elided->source) == 1); } } I32 execHashSetTest(int argc, char** argv) { TEST_STATE_LOCAL; Timing::Timer timer; testStringSet(TEST_STATE_ARG); testU32Set(TEST_STATE_ARG); testSetCopy(TEST_STATE_ARG); testSetMove(TEST_STATE_ARG); testSetInitializerList(TEST_STATE_ARG); testSetIterator(TEST_STATE_ARG); testSetBracketOperator(TEST_STATE_ARG); testSetEmpty(TEST_STATE_ARG); testSetClear(TEST_STATE_ARG); testSetReserve(TEST_STATE_ARG); testSetAddOrFail(TEST_STATE_ARG); testSetRemoveOrFail(TEST_STATE_ARG); testSetAnalyzeSpaceUsage(TEST_STATE_ARG); testSetAnalyzeSpaceUsageAfterClear(TEST_STATE_ARG); testSetAnalyzeSpaceUsageEmpty(TEST_STATE_ARG); testSetMovedFromState(TEST_STATE_ARG); testSetHashCollisions(TEST_STATE_ARG); testSetTrackedValueDestruction(TEST_STATE_ARG); testSetTrackedValueClear(TEST_STATE_ARG); testSetTrackedValueRemove(TEST_STATE_ARG); testSetTrackedValueContainerMove(TEST_STATE_ARG); testSetTrackedValueContainerCopy(TEST_STATE_ARG); Timing::logTimer("HashSetTest", timer); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestI128.cpp ================================================ #include #include "TestUtils.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/Timing.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::Testing; struct RandomStream { RandomStream(I128 inSeed) : seed(inSeed) {} I128 get() { seed = addmod127(mulmod127(seed, U64(6364136223846793005)), U64(1442695040888963407)); return seed; } private: I128 seed; }; // I128-specific check macros using the generic check() function #define CHECK_NAN(expr) \ WAVM::Testing::check( \ testState, \ [](I128 v) { return isNaN(v); }, \ __FILE__, \ __LINE__, \ "CHECK_NAN(" #expr ")", \ " actual: %s\n", \ expr) #define CHECK_NOT_NAN(expr) \ WAVM::Testing::check( \ testState, \ [](I128 v) { return !isNaN(v); }, \ __FILE__, \ __LINE__, \ "CHECK_NOT_NAN(" #expr ")", \ " actual: %s\n", \ expr) #define CHECK_EQ_OR_NAN(actual, expected) \ WAVM::Testing::check( \ testState, \ [](I128 a, I128 e) { return isNaN(a) || isNaN(e) || a == e; }, \ __FILE__, \ __LINE__, \ "CHECK_EQ_OR_NAN(" #actual ", " #expected ")", \ " actual: %s\n expected: %s\n", \ actual, \ expected) static void testNaNHandling(TEST_STATE_PARAM) { // NaN propagation through arithmetic CHECK_NAN(I128::nan()); CHECK_NAN(I128::nan() + I128(1)); CHECK_NAN(I128(1) + I128::nan()); CHECK_NAN(I128::nan() - I128(1)); CHECK_NAN(I128(1) - I128::nan()); CHECK_NAN(I128::nan() * I128(2)); CHECK_NAN(I128(2) * I128::nan()); CHECK_NAN(I128::nan() / I128(2)); CHECK_NAN(I128(2) / I128::nan()); CHECK_NAN(I128::nan() % I128(2)); CHECK_NAN(I128(2) % I128::nan()); // NaN propagation through shifts CHECK_NAN(I128::nan() >> I128(1)); CHECK_NAN(I128(1) >> I128::nan()); CHECK_NAN(I128::nan() << I128(1)); CHECK_NAN(I128(1) << I128::nan()); // NaN propagation through bitwise ops CHECK_NAN(I128::nan() & I128(1)); CHECK_NAN(I128(1) & I128::nan()); CHECK_NAN(I128::nan() | I128(1)); CHECK_NAN(I128(1) | I128::nan()); CHECK_NAN(I128::nan() ^ I128(1)); CHECK_NAN(I128(1) ^ I128::nan()); CHECK_NAN(~I128::nan()); // NaN equality: NaN == NaN is true (unlike IEEE floats) CHECK_TRUE(I128::nan() == I128::nan()); CHECK_FALSE(I128::nan() != I128::nan()); CHECK_FALSE(I128::nan() == I128(0)); CHECK_NE(I128::nan(), I128(0)); // Ordered comparisons with NaN: NaN is unordered, so < and > return false CHECK_NOT_LT(I128::nan(), I128(0)); CHECK_NOT_LT(I128(0), I128::nan()); CHECK_NOT_GT(I128::nan(), I128(0)); CHECK_NOT_GT(I128(0), I128::nan()); CHECK_NOT_LT(I128::nan(), I128::nan()); CHECK_NOT_GT(I128::nan(), I128::nan()); // But NaN >= NaN and NaN <= NaN are true (since NaN == NaN) CHECK_GE(I128::nan(), I128::nan()); CHECK_LE(I128::nan(), I128::nan()); CHECK_NOT_LE(I128::nan(), I128(0)); CHECK_NOT_LE(I128(0), I128::nan()); CHECK_NOT_GE(I128::nan(), I128(0)); CHECK_NOT_GE(I128(0), I128::nan()); // NaN flush functions CHECK_EQ(flushNaNToZero(I128::nan()), I128(0)); CHECK_EQ(flushNaNToMax(I128::nan()), I128::max()); CHECK_EQ(flushNaNToMin(I128::nan()), I128::min()); CHECK_EQ(flushNaNToZero(I128(42)), I128(42)); CHECK_EQ(flushNaNToMax(I128(42)), I128(42)); CHECK_EQ(flushNaNToMin(I128(42)), I128(42)); } static void testOverflow(TEST_STATE_PARAM) { // Addition overflow produces NaN CHECK_NAN(I128::max() + I128(1)); CHECK_NAN(I128::min() - I128(1)); // Multiplication overflow produces NaN CHECK_NAN(I128::max() * I128(2)); CHECK_NAN(I128::min() * I128(2)); // Multiplication at boundaries that doesn't overflow CHECK_EQ(I128::min() * I128(1), I128::min()); CHECK_EQ(I128(1) * I128::min(), I128::min()); CHECK_EQ(I128::max() * I128(-1), I128::min()); CHECK_EQ(I128(-1) * I128::max(), I128::min()); CHECK_EQ(I128::min() * I128(-1), I128::max()); CHECK_EQ(I128(-1) * I128::min(), I128::max()); // addAndCheckOverflow I128 result; CHECK_TRUE(addAndCheckOverflow(I128::max(), I128(1), &result) == true); CHECK_TRUE(addAndCheckOverflow(I128(100), I128(200), &result) == false); CHECK_EQ(result, I128(300)); // mulAndCheckOverflow: overflow cases CHECK_TRUE(mulAndCheckOverflow(I128::max(), I128(2), &result) == true); // mulAndCheckOverflow: non-overflow cases CHECK_TRUE(mulAndCheckOverflow(I128(100), I128(200), &result) == false); CHECK_EQ(result, I128(20000)); CHECK_FALSE(mulAndCheckOverflow(I128::min(), I128(1), &result)); CHECK_EQ(result, I128::min()); CHECK_FALSE(mulAndCheckOverflow(I128::max(), I128(-1), &result)); CHECK_EQ(result, I128::min()); CHECK_FALSE(mulAndCheckOverflow(I128::min(), I128(-1), &result)); CHECK_EQ(result, I128::max()); // mulmod127/addmod127 don't produce NaN on overflow - they wrap CHECK_NOT_NAN(addmod127(I128::max(), I128(100))); CHECK_NOT_NAN(mulmod127(I128::max(), I128(2))); CHECK_EQ(mulmod127(I128::min(), I128(1)), I128::min()); CHECK_EQ(mulmod127(I128::max(), I128(-1)), I128::min()); } static void testDivision(TEST_STATE_PARAM) { // Division by zero produces NaN CHECK_NAN(I128(100) / I128(0)); CHECK_NAN(I128(100) % I128(0)); CHECK_NAN(I128(0) / I128(0)); // Basic division CHECK_EQ(I128(100) / I128(10), I128(10)); CHECK_EQ(I128(100) % I128(10), I128(0)); CHECK_EQ(I128(100) / I128(3), I128(33)); CHECK_EQ(I128(100) % I128(3), I128(1)); // Division of negative numbers CHECK_EQ(I128(-100) / I128(3), I128(-33)); CHECK_EQ(I128(-100) % I128(3), I128(-1)); CHECK_EQ(I128(100) / I128(-3), I128(-33)); CHECK_EQ(I128(100) % I128(-3), I128(1)); CHECK_EQ(I128(-100) / I128(-3), I128(33)); CHECK_EQ(I128(-100) % I128(-3), I128(-1)); // Division with large values CHECK_EQ(I128::max() / I128::max(), I128(1)); CHECK_EQ(I128::max() % I128::max(), I128(0)); CHECK_EQ(I128::max() / I128(1), I128::max()); CHECK_EQ(I128::min() / I128(1), I128::min()); CHECK_EQ(I128::min() / I128(-1), I128::max()); CHECK_EQ(I128::max() / I128(-1), I128::min()); // Modulo with boundary values CHECK_EQ(I128::min() % I128(1), I128(0)); CHECK_EQ(I128::min() % I128(-1), I128(0)); CHECK_EQ(I128::min() % I128(2), I128(-1)); CHECK_EQ(I128::min() % I128(-2), I128(-1)); CHECK_EQ(I128::max() % I128(1), I128(0)); CHECK_EQ(I128::max() % I128(-1), I128(0)); // Division where quotient is 0 CHECK_EQ(I128(5) / I128(10), I128(0)); CHECK_EQ(I128(5) % I128(10), I128(5)); } static void testShifts(TEST_STATE_PARAM) { // Right shift CHECK_EQ(I128(0x100) >> I128(4), I128(0x10)); CHECK_EQ(I128(0x100) >> I128(0), I128(0x100)); CHECK_EQ(I128(-128) >> I128(1), I128(-64)); // arithmetic shift preserves sign // Left shift CHECK_EQ(I128(1) << I128(0), I128(1)); CHECK_EQ(I128(1) << I128(4), I128(16)); CHECK_EQ(I128(1) << I128(63), I128(U64(1) << 63)); // Shift crossing word boundary I128 shifted = I128(1) << I128(64); CHECK_EQ(shifted >> I128(64), I128(1)); // 1 << 64 should be 2^64, which fits in I128 I128 twoTo64 = I128(1) << I128(64); CHECK_GT(twoTo64, I128(U64(0xFFFFFFFFFFFFFFFF))); // 2^64 > 2^64-1 // 1 << 126 should be 2^126, which fits in I128 (max is ~2^127) I128 twoTo126 = I128(1) << I128(126); CHECK_GT(twoTo126, I128(0)); // Shift by 127 should overflow (result would be 2^127 which is > max) CHECK_NAN(I128(1) << I128(127)); // 2^63 << 64 = 2^127 > max, should overflow CHECK_NAN(I128(U64(1) << 63) << I128(64)); // (2^64-1) << 64 is much larger than max, should overflow CHECK_NAN(I128(U64(0xFFFFFFFFFFFFFFFF)) << I128(64)); } static void testBitwise(TEST_STATE_PARAM) { I128 a(U64(0x123456789ABCDEF0)); I128 allOnes(-1); // XOR properties CHECK_EQ(a ^ a, I128(0)); CHECK_EQ(a ^ I128(0), a); CHECK_EQ(a ^ allOnes, ~a); // AND properties CHECK_EQ(a & a, a); CHECK_EQ(a & I128(0), I128(0)); CHECK_EQ(a & allOnes, a); // OR properties CHECK_EQ(a | a, a); CHECK_EQ(a | I128(0), a); CHECK_EQ(a | allOnes, allOnes); // NOT CHECK_EQ(~~a, a); CHECK_EQ(~I128(0), allOnes); } static void testComparisons(TEST_STATE_PARAM) { // Basic comparisons CHECK_GT(I128(100), I128(50)); CHECK_NOT_GT(I128(50), I128(100)); CHECK_NOT_GT(I128(100), I128(100)); CHECK_GE(I128(100), I128(50)); CHECK_GE(I128(100), I128(100)); CHECK_NOT_GE(I128(50), I128(100)); CHECK_LT(I128(50), I128(100)); CHECK_NOT_LT(I128(100), I128(50)); CHECK_NOT_LT(I128(100), I128(100)); CHECK_LE(I128(50), I128(100)); CHECK_LE(I128(100), I128(100)); CHECK_NOT_LE(I128(100), I128(50)); CHECK_EQ(I128(100), I128(100)); CHECK_FALSE(I128(100) == I128(50)); CHECK_NE(I128(100), I128(50)); CHECK_FALSE(I128(100) != I128(100)); // Negative number comparisons CHECK_LT(I128(-100), I128(100)); CHECK_LT(I128(-100), I128(-50)); CHECK_GT(I128(-50), I128(-100)); CHECK_LT(I128(-100), I128(0)); CHECK_GT(I128(0), I128(-100)); // Boundary comparisons CHECK_GT(I128::max(), I128::min()); CHECK_LT(I128::min(), I128(0)); CHECK_GT(I128::max(), I128(0)); CHECK_GT(I128(0), I128::min()); CHECK_LT(I128(0), I128::max()); // Verify that the low word is compared as unsigned, not signed. // When high words are equal and non-negative, values with low word bit 63 set should // compare greater than values without it set. CHECK_GT(I128(U64(0x8000000000000000)), I128(0)); CHECK_LT(I128(0), I128(U64(0x8000000000000000))); CHECK_GE(I128(U64(0x8000000000000000)), I128(0)); CHECK_LE(I128(0), I128(U64(0x8000000000000000))); CHECK_GT(I128(U64(0xFFFFFFFFFFFFFFFF)), I128(0)); CHECK_LT(I128(0), I128(U64(0xFFFFFFFFFFFFFFFF))); CHECK_GT(I128(U64(0xFFFFFFFFFFFFFFFF)), I128(U64(0x8000000000000000))); CHECK_LT(I128(U64(0x8000000000000000)), I128(U64(0xFFFFFFFFFFFFFFFF))); CHECK_GT(I128(U64(0xFFFFFFFFFFFFFFFF)), I128(U64(0x7FFFFFFFFFFFFFFF))); CHECK_LT(I128(U64(0x7FFFFFFFFFFFFFFF)), I128(U64(0xFFFFFFFFFFFFFFFF))); CHECK_GT(I128(U64(0x8000000000000000)), I128(U64(0x7FFFFFFFFFFFFFFF))); CHECK_LT(I128(U64(0x7FFFFFFFFFFFFFFF)), I128(U64(0x8000000000000000))); CHECK_EQ(I128(U64(0x8000000000000000)), I128(U64(0x8000000000000000))); CHECK_EQ(I128(U64(0xFFFFFFFFFFFFFFFF)), I128(U64(0xFFFFFFFFFFFFFFFF))); } static void testUnaryOps(TEST_STATE_PARAM) { // Unary plus CHECK_EQ(+I128(42), I128(42)); CHECK_EQ(+I128(-42), I128(-42)); CHECK_EQ(+I128(0), I128(0)); // Negation CHECK_EQ(-I128(42), I128(-42)); CHECK_EQ(-I128(-42), I128(42)); CHECK_EQ(-I128(0), I128(0)); // abs() CHECK_EQ(abs(I128(42)), I128(42)); CHECK_EQ(abs(I128(-42)), I128(42)); CHECK_EQ(abs(I128(0)), I128(0)); CHECK_EQ(abs(I128::max()), I128::max()); } static void testConstructorsAndConversions(TEST_STATE_PARAM) { // Constructors from signed types sign-extend CHECK_EQ(I128(I32(-1)), I128(-1)); CHECK_EQ(I128(I64(-1)), I128(-1)); // Constructors from unsigned types zero-extend CHECK_EQ(I128(U32(0xFFFFFFFF)), (I128(1) << 32) - 1); CHECK_EQ(I128(U64(0xFFFFFFFFFFFFFFFF)), (I128(1) << 64) - 1); // Unsigned values are positive CHECK_GT(I128(U32(0xFFFFFFFF)), I128(0)); } static void testFloatConversions(TEST_STATE_PARAM) { // F64 has 53-bit mantissa, F32 has 24-bit mantissa // Zero CHECK_EQ(F64(I128(0)), 0.0); CHECK_EQ(F32(I128(0)), 0.0f); // Small positive integers (exact representation) CHECK_EQ(F64(I128(1)), 1.0); CHECK_EQ(F64(I128(2)), 2.0); CHECK_EQ(F64(I128(100)), 100.0); CHECK_EQ(F64(I128(1000000)), 1000000.0); CHECK_EQ(F32(I128(1)), 1.0f); CHECK_EQ(F32(I128(100)), 100.0f); // Small negative integers (exact representation) CHECK_EQ(F64(I128(-1)), -1.0); CHECK_EQ(F64(I128(-2)), -2.0); CHECK_EQ(F64(I128(-100)), -100.0); CHECK_EQ(F64(I128(-1000000)), -1000000.0); CHECK_EQ(F32(I128(-1)), -1.0f); CHECK_EQ(F32(I128(-100)), -100.0f); // Powers of 2 (exact representation) // These test different code paths based on leadingZeroes CHECK_EQ(F64(I128(1) << I128(10)), 1024.0); // 2^10 CHECK_EQ(F64(I128(1) << I128(20)), 1048576.0); // 2^20 CHECK_EQ(F64(I128(1) << I128(30)), 1073741824.0); // 2^30 CHECK_EQ(F64(I128(1) << I128(52)), 4503599627370496.0); // 2^52 CHECK_EQ(F64(I128(1) << I128(53)), 9007199254740992.0); // 2^53 CHECK_EQ(F64(I128(1) << I128(62)), 4611686018427387904.0); // 2^62 CHECK_EQ(F64(I128(1) << I128(63)), 9223372036854775808.0); // 2^63 CHECK_EQ(F64(I128(1) << I128(64)), 18446744073709551616.0); // 2^64 (crosses word boundary) CHECK_EQ(F64(I128(1) << I128(100)), 1267650600228229401496703205376.0); // 2^100 // Negative powers of 2 CHECK_EQ(F64(-(I128(1) << I128(10))), -1024.0); CHECK_EQ(F64(-(I128(1) << I128(63))), -9223372036854775808.0); CHECK_EQ(F64(-(I128(1) << I128(64))), -18446744073709551616.0); // F32 powers of 2 CHECK_EQ(F32(I128(1) << I128(10)), 1024.0f); CHECK_EQ(F32(I128(1) << I128(23)), 8388608.0f); // 2^23 CHECK_EQ(F32(I128(1) << I128(24)), 16777216.0f); // 2^24 CHECK_EQ(F32(I128(1) << I128(64)), 18446744073709551616.0f); // Large values (will lose precision but should be approximately correct) // max is approximately 1.7e38 F64 maxF64 = F64(I128::max()); CHECK_GT(maxF64, 1.7e38); CHECK_LT(maxF64, 1.8e38); F64 minF64 = F64(I128::min()); CHECK_LT(minF64, -1.7e38); CHECK_GT(minF64, -1.8e38); // Verify max and min are negatives of each other (symmetric range) CHECK_EQ(maxF64, -minF64); // F32 large values F32 maxF32 = F32(I128::max()); CHECK_GT(maxF32, 1.7e38f); CHECK_LT(maxF32, 1.8e38f); // NaN converts to float NaN F64 nanF64 = F64(I128::nan()); CHECK_TRUE(nanF64 != nanF64); // NaN != NaN F32 nanF32 = F32(I128::nan()); CHECK_TRUE(nanF32 != nanF32); // NaN != NaN // Values that test different branches in asFloat(): // leadingZeroes == 0: value with MSB set in highU64 (large positive) I128 largeVal = I128(1) << I128(126); CHECK_GT(F64(largeVal), 0.0); // leadingZeroes < 64: value with some bits in highU64 I128 mediumVal = I128(1) << I128(70); CHECK_EQ(F64(mediumVal), 1180591620717411303424.0); // 2^70 // leadingZeroes == 64: value exactly filling lowU64 I128 lowFullVal = I128(U64(0x8000000000000000)); // 2^63 CHECK_EQ(F64(lowFullVal), 9223372036854775808.0); // leadingZeroes > 64: small value only in lower bits of lowU64 I128 smallVal = I128(12345); CHECK_EQ(F64(smallVal), 12345.0); // Round-to-nearest-even edge cases for F64 (53-bit mantissa including hidden bit) // The LSB of the representable value corresponds to 2^(exponent - 52) // 2^53 is exactly representable I128 twoTo53 = I128(1) << I128(53); CHECK_EQ(F64(twoTo53), 9007199254740992.0); // 2^53 + 1: truncated bits = 1, which is < half of 2, so round down to 2^53 CHECK_EQ(F64(twoTo53 + I128(1)), 9007199254740992.0); // 2^53 + 2: exactly representable (LSB = 2 at this scale) CHECK_EQ(F64(twoTo53 + I128(2)), 9007199254740994.0); // 2^53 + 3: truncated bits = 1, exactly half. Tie breaks to even (2^53 + 4 has even sig) CHECK_EQ(F64(twoTo53 + I128(3)), 9007199254740996.0); // 2^54 + 2: truncated bits = 2, which is exactly half of 4 (the LSB at this scale) // Result significand LSB is 0, so round down (to even) I128 twoTo54 = I128(1) << I128(54); CHECK_EQ(F64(twoTo54 + I128(2)), 18014398509481984.0); // 2^54 // 2^54 + 6: truncated bits = 2, exactly half, result LSB would be 1, round up (to even) CHECK_EQ(F64(twoTo54 + I128(6)), 18014398509481992.0); // 2^54 + 8 // 2^54 + 3: truncated bits = 3, which is > half of 4, round up CHECK_EQ(F64(twoTo54 + I128(3)), 18014398509481988.0); // 2^54 + 4 // 2^54 + 5: truncated bits = 1, which is < half of 4, round down CHECK_EQ(F64(twoTo54 + I128(5)), 18014398509481988.0); // 2^54 + 4 // 2^54 - 1: truncated bits exactly half. Tie breaks to even (2^54 has even sig=0) CHECK_EQ(F64(twoTo54 - I128(1)), 18014398509481984.0); // 2^54 // INT64_MAX = 2^63 - 1: truncated bits are all 1s (> half), rounds up to 2^63 CHECK_EQ(F64(I128(I64(INT64_MAX))), 9223372036854775808.0); // 2^63 // UINT64_MAX = 2^64 - 1: truncated bits are all 1s (> half), rounds up to 2^64 CHECK_EQ(F64(I128(U64(UINT64_MAX))), 18446744073709551616.0); // 2^64 // Negative values should round symmetrically CHECK_EQ(F64(-twoTo53 - I128(1)), -9007199254740992.0); CHECK_EQ(F64(-twoTo54 - I128(3)), -18014398509481988.0); } static void testBoundaryValues(TEST_STATE_PARAM) { // min/max have correct signs (implicitly checks they're not NaN) CHECK_GT(I128::max(), I128(0)); CHECK_LT(I128::min(), I128(0)); // Relationship between min and max (symmetric range: min = -max) CHECK_EQ(I128::max() + I128::min(), I128(0)); CHECK_EQ(-I128::max(), I128::min()); CHECK_EQ(-I128::min(), I128::max()); // Operations at boundaries that don't overflow CHECK_EQ(I128::max() - I128::max(), I128(0)); CHECK_EQ(I128::min() - I128::min(), I128(0)); CHECK_EQ(I128::max() + I128::min(), I128(0)); CHECK_EQ(I128::min() + I128::max(), I128(0)); } static void testAssignmentOps(TEST_STATE_PARAM) { I128 a; a = I128(100); a += I128(50); CHECK_EQ(a, I128(150)); a = I128(100); a -= I128(50); CHECK_EQ(a, I128(50)); a = I128(10); a *= I128(5); CHECK_EQ(a, I128(50)); a = I128(100); a /= I128(5); CHECK_EQ(a, I128(20)); a = I128(100); a %= I128(30); CHECK_EQ(a, I128(10)); a = I128(0xFF); a &= I128(0x0F); CHECK_EQ(a, I128(0x0F)); a = I128(0xF0); a |= I128(0x0F); CHECK_EQ(a, I128(0xFF)); a = I128(0xFF); a ^= I128(0x0F); CHECK_EQ(a, I128(0xF0)); a = I128(16); a >>= I128(2); CHECK_EQ(a, I128(4)); a = I128(4); a <<= I128(2); CHECK_EQ(a, I128(16)); } I32 execI128Test(int argc, char** argv) { TEST_STATE_LOCAL; Timing::Timer timer; // Run deterministic tests first testNaNHandling(TEST_STATE_ARG); testOverflow(TEST_STATE_ARG); testDivision(TEST_STATE_ARG); testShifts(TEST_STATE_ARG); testBitwise(TEST_STATE_ARG); testComparisons(TEST_STATE_ARG); testUnaryOps(TEST_STATE_ARG); testConstructorsAndConversions(TEST_STATE_ARG); testFloatConversions(TEST_STATE_ARG); testBoundaryValues(TEST_STATE_ARG); testAssignmentOps(TEST_STATE_ARG); // Run randomized algebraic property tests RandomStream random(0); I128 phaseMasks[3] = {I128::max(), UINT64_MAX, 32767}; for(Uptr phase = 0; phase < 3; ++phase) { for(Uptr i = 0; i < 100000; ++i) { I128 a = random.get() & phaseMasks[phase]; I128 b = random.get() & phaseMasks[phase]; I128 c = random.get() & phaseMasks[phase]; CHECK_EQ_OR_NAN(a - a, I128(0)); CHECK_EQ_OR_NAN(a + (-a), I128(0)); CHECK_EQ_OR_NAN(a + 1, a - (-1)); CHECK_EQ_OR_NAN(a - 1, a + (-1)); CHECK_EQ_OR_NAN(a - 0, a); CHECK_EQ_OR_NAN(a + 0, a); // Identity CHECK_EQ_OR_NAN(a + b, b + a); // Commutativity CHECK_EQ_OR_NAN((a + b) + c, a + (b + c)); // Associativity CHECK_EQ_OR_NAN(a * 0, I128(0)); CHECK_EQ_OR_NAN(a * -1, -a); CHECK_EQ_OR_NAN(a * 1, a); // Identity CHECK_EQ_OR_NAN(a * b, b * a); // Commutativity CHECK_EQ_OR_NAN((a * b) * c, a * (b * c)); // Associativity CHECK_EQ_OR_NAN(a * (b + c), (a * b) + (a * c)); // Distributivity if(b != 0) { CHECK_EQ_OR_NAN((a * b) / b, a); } CHECK_EQ_OR_NAN((a + b) - b, a); CHECK_EQ_OR_NAN((a - b) + b, a); if(b != 0) { CHECK_EQ_OR_NAN(((a / b) * b) + (a % b), a); } } } Timing::logTimer("Ran I128 tests", timer); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestLEB128.cpp ================================================ #include #include #include #include "TestUtils.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/LEB128.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Inline/Timing.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::Serialization; using namespace WAVM::Testing; template static void roundtrip(TEST_STATE_PARAM, Value value, Value minValue, Value maxValue) { // Serialize ArrayOutputStream outputStream; serializeVarInt(outputStream, value, minValue, maxValue); std::vector bytes = outputStream.getBytes(); // Deserialize MemoryInputStream inputStream(bytes.data(), bytes.size()); Value decoded = 0; serializeVarInt(inputStream, decoded, minValue, maxValue); CHECK_EQ(decoded, value); } static void testUnsigned32(TEST_STATE_PARAM) { // Single byte values (0-127) roundtrip(TEST_STATE_ARG, 0, 0, UINT32_MAX); roundtrip(TEST_STATE_ARG, 1, 0, UINT32_MAX); roundtrip(TEST_STATE_ARG, 127, 0, UINT32_MAX); // Two byte values (128-16383) roundtrip(TEST_STATE_ARG, 128, 0, UINT32_MAX); roundtrip(TEST_STATE_ARG, 255, 0, UINT32_MAX); roundtrip(TEST_STATE_ARG, 16383, 0, UINT32_MAX); // Larger values roundtrip(TEST_STATE_ARG, 16384, 0, UINT32_MAX); roundtrip(TEST_STATE_ARG, 1000000, 0, UINT32_MAX); // Maximum value roundtrip(TEST_STATE_ARG, UINT32_MAX, 0, UINT32_MAX); } static void testSigned32(TEST_STATE_PARAM) { // Zero roundtrip(TEST_STATE_ARG, 0, INT32_MIN, INT32_MAX); // Positive values roundtrip(TEST_STATE_ARG, 1, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, 63, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, 64, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, 127, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, 128, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, 1000000, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, INT32_MAX, INT32_MIN, INT32_MAX); // Negative values roundtrip(TEST_STATE_ARG, -1, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, -64, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, -65, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, -128, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, -1000000, INT32_MIN, INT32_MAX); roundtrip(TEST_STATE_ARG, INT32_MIN, INT32_MIN, INT32_MAX); } static void testUnsigned64(TEST_STATE_PARAM) { roundtrip(TEST_STATE_ARG, 0, 0, UINT64_MAX); roundtrip(TEST_STATE_ARG, 1, 0, UINT64_MAX); roundtrip(TEST_STATE_ARG, 127, 0, UINT64_MAX); roundtrip(TEST_STATE_ARG, 128, 0, UINT64_MAX); roundtrip(TEST_STATE_ARG, U64(1) << 32, 0, UINT64_MAX); roundtrip(TEST_STATE_ARG, UINT64_MAX, 0, UINT64_MAX); } static void testSigned64(TEST_STATE_PARAM) { roundtrip(TEST_STATE_ARG, 0, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, 1, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, -1, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, 63, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, -64, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, I64(1) << 32, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, INT64_MAX, INT64_MIN, INT64_MAX); roundtrip(TEST_STATE_ARG, INT64_MIN, INT64_MIN, INT64_MAX); } static void testSmallWidths(TEST_STATE_PARAM) { // VarUInt1 roundtrip(TEST_STATE_ARG, 0, 0, 1); roundtrip(TEST_STATE_ARG, 1, 0, 1); // VarUInt7 roundtrip(TEST_STATE_ARG, 0, 0, 127); roundtrip(TEST_STATE_ARG, 127, 0, 127); // VarInt7 roundtrip(TEST_STATE_ARG, 0, -64, 63); roundtrip(TEST_STATE_ARG, 63, -64, 63); roundtrip(TEST_STATE_ARG, -64, -64, 63); roundtrip(TEST_STATE_ARG, -1, -64, 63); } static bool expectSerializationException(std::function func) { try { func(); return false; } catch(FatalSerializationException&) { return true; } } static void testOutOfRange(TEST_STATE_PARAM) { // Serializing out-of-range values should throw // Unsigned value exceeds max CHECK_TRUE(expectSerializationException([]() { ArrayOutputStream out; U32 v = 2; serializeVarUInt1(out, v); })); CHECK_TRUE(expectSerializationException([]() { ArrayOutputStream out; U32 v = 128; serializeVarUInt7(out, v); })); // Signed value exceeds range CHECK_TRUE(expectSerializationException([]() { ArrayOutputStream out; I32 v = 64; serializeVarInt7(out, v); })); CHECK_TRUE(expectSerializationException([]() { ArrayOutputStream out; I32 v = -65; serializeVarInt7(out, v); })); } static void testTruncatedInput(TEST_STATE_PARAM) { // Reading from an empty stream should throw CHECK_TRUE(expectSerializationException([]() { MemoryInputStream in(nullptr, 0); U32 v = 0; serializeVarUInt32(in, v); })); // Truncated multi-byte encoding (high bit set but no continuation) U8 truncated[] = {0x80}; // high bit set, expects more bytes CHECK_TRUE(expectSerializationException([&]() { MemoryInputStream in(truncated, sizeof(truncated)); U32 v = 0; serializeVarUInt32(in, v); })); } static void testInvalidEncoding(TEST_STATE_PARAM) { // Unsigned LEB128 with unused bits set in the final byte should be rejected. // For a 1-bit unsigned LEB, only bit 0 is used; bits 1-6 must be 0. // Byte 0x02 has bit 1 set, which is invalid for a 1-bit value. U8 invalidUint1[] = {0x02}; CHECK_TRUE(expectSerializationException([&]() { MemoryInputStream in(invalidUint1, sizeof(invalidUint1)); U32 v = 0; serializeVarUInt1(in, v); })); // For unsigned 7-bit LEB, the value 128 requires two bytes. // A single byte 0x80 has the continuation bit set but no second byte. // Using a two-byte encoding: 0x80 0x01 = 128, which exceeds the range [0,127] for VarUInt7. // This is caught as out-of-range. U8 overflowUint7[] = {0x80, 0x01}; CHECK_TRUE(expectSerializationException([&]() { MemoryInputStream in(overflowUint7, sizeof(overflowUint7)); U32 v = 0; serializeVarUInt7(in, v); })); // Signed LEB128 with continuation bit set in final byte: for VarInt7, // maxBytes=1, so only one byte is read. If that byte has the continuation // bit (0x80) set, the unused bits check rejects it. U8 invalidInt7[] = {0xC0}; // continuation bit + sign bit set CHECK_TRUE(expectSerializationException([&]() { MemoryInputStream in(invalidInt7, sizeof(invalidInt7)); I32 v = 0; serializeVarInt7(in, v); })); } static void testEncodingSize(TEST_STATE_PARAM) { // Verify that LEB128 encoding uses the expected number of bytes // Single byte: 0-127 unsigned, -64 to 63 signed { ArrayOutputStream out; U32 v = 0; serializeVarUInt32(out, v); CHECK_EQ((U32)out.getBytes().size(), U32(1)); } { ArrayOutputStream out; U32 v = 127; serializeVarUInt32(out, v); CHECK_EQ((U32)out.getBytes().size(), U32(1)); } // Two bytes: 128-16383 unsigned { ArrayOutputStream out; U32 v = 128; serializeVarUInt32(out, v); CHECK_EQ((U32)out.getBytes().size(), U32(2)); } // Five bytes for max U32 { ArrayOutputStream out; U32 v = UINT32_MAX; serializeVarUInt32(out, v); CHECK_EQ((U32)out.getBytes().size(), U32(5)); } } I32 execLEB128Test(int argc, char** argv) { TEST_STATE_LOCAL; Timing::Timer timer; testUnsigned32(TEST_STATE_ARG); testSigned32(TEST_STATE_ARG); testUnsigned64(TEST_STATE_ARG); testSigned64(TEST_STATE_ARG); testSmallWidths(TEST_STATE_ARG); testEncodingSize(TEST_STATE_ARG); testOutOfRange(TEST_STATE_ARG); testTruncatedInput(TEST_STATE_ARG); testInvalidEncoding(TEST_STATE_ARG); Timing::logTimer("Ran LEB128 tests", timer); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestObjectLinker.cpp ================================================ #include #include #include #include #include "TestUtils.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/HashMap.h" #include "WAVM/Inline/Serialization.h" #include "WAVM/Inline/Timing.h" #include "WAVM/ObjectLinker/ObjectLinker.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/Memory.h" #include "wavm-test.h" using namespace WAVM; using namespace WAVM::ObjectLinker; using namespace WAVM::Testing; namespace { // ===== Constants ===== // COFF machine types static constexpr U16 IMAGE_FILE_MACHINE_AMD64 = 0x8664; static constexpr U16 IMAGE_FILE_MACHINE_ARM64 = 0xAA64; // COFF section characteristics static constexpr U32 IMAGE_SCN_MEM_EXECUTE = 0x20000000; // COFF symbol storage class static constexpr U8 IMAGE_SYM_CLASS_EXTERNAL = 2; // COFF x86-64 relocation types static constexpr U16 IMAGE_REL_AMD64_ADDR64 = 0x0001; static constexpr U16 IMAGE_REL_AMD64_ADDR32NB = 0x0003; static constexpr U16 IMAGE_REL_AMD64_REL32 = 0x0004; static constexpr U16 IMAGE_REL_AMD64_REL32_1 = 0x0005; static constexpr U16 IMAGE_REL_AMD64_REL32_2 = 0x0006; static constexpr U16 IMAGE_REL_AMD64_REL32_3 = 0x0007; static constexpr U16 IMAGE_REL_AMD64_REL32_4 = 0x0008; static constexpr U16 IMAGE_REL_AMD64_REL32_5 = 0x0009; static constexpr U16 IMAGE_REL_AMD64_SECTION = 0x000A; static constexpr U16 IMAGE_REL_AMD64_SECREL = 0x000B; // COFF ARM64 relocation types static constexpr U16 IMAGE_REL_ARM64_ADDR64 = 0x000E; static constexpr U16 IMAGE_REL_ARM64_ADDR32NB = 0x0002; static constexpr U16 IMAGE_REL_ARM64_BRANCH26 = 0x0003; static constexpr U16 IMAGE_REL_ARM64_PAGEBASE_REL21 = 0x0004; static constexpr U16 IMAGE_REL_ARM64_PAGEOFFSET_12A = 0x0006; static constexpr U16 IMAGE_REL_ARM64_PAGEOFFSET_12L = 0x0007; static constexpr U16 IMAGE_REL_ARM64_SECREL = 0x0008; static constexpr U16 IMAGE_REL_ARM64_SECREL_LOW12A = 0x0009; static constexpr U16 IMAGE_REL_ARM64_SECREL_HIGH12A = 0x000A; static constexpr U16 IMAGE_REL_ARM64_SECREL_LOW12L = 0x000B; static constexpr U16 IMAGE_REL_ARM64_SECTION = 0x000D; // ELF machine types static constexpr U16 EM_X86_64 = 62; static constexpr U16 EM_AARCH64 = 183; // ELF section types static constexpr U32 SHT_PROGBITS = 1; static constexpr U32 SHT_SYMTAB = 2; static constexpr U32 SHT_STRTAB = 3; static constexpr U32 SHT_RELA = 4; // ELF section flags static constexpr U64 SHF_ALLOC = 0x2; static constexpr U64 SHF_EXECINSTR = 0x4; // ELF symbol binding/type static constexpr U8 STB_GLOBAL = 1; static constexpr U8 STT_FUNC = 2; // ELF x86-64 relocation types static constexpr U32 R_X86_64_64 = 1; static constexpr U32 R_X86_64_PC32 = 2; static constexpr U32 R_X86_64_PLT32 = 4; static constexpr U32 R_X86_64_32 = 10; static constexpr U32 R_X86_64_32S = 11; static constexpr U32 R_X86_64_GOTPCREL = 9; static constexpr U32 R_X86_64_PC64 = 24; static constexpr U32 R_X86_64_GOTPCRELX = 41; static constexpr U32 R_X86_64_REX_GOTPCRELX = 42; // ELF AArch64 relocation types static constexpr U32 R_AARCH64_ABS64 = 257; static constexpr U32 R_AARCH64_ABS32 = 258; static constexpr U32 R_AARCH64_PREL64 = 260; static constexpr U32 R_AARCH64_PREL32 = 261; static constexpr U32 R_AARCH64_CALL26 = 283; static constexpr U32 R_AARCH64_JUMP26 = 282; static constexpr U32 R_AARCH64_ADR_PREL_PG_HI21 = 275; static constexpr U32 R_AARCH64_ADD_ABS_LO12_NC = 277; static constexpr U32 R_AARCH64_LDST8_ABS_LO12_NC = 278; static constexpr U32 R_AARCH64_LDST16_ABS_LO12_NC = 284; static constexpr U32 R_AARCH64_LDST32_ABS_LO12_NC = 285; static constexpr U32 R_AARCH64_LDST64_ABS_LO12_NC = 286; static constexpr U32 R_AARCH64_LDST128_ABS_LO12_NC = 299; static constexpr U32 R_AARCH64_MOVW_UABS_G0 = 263; static constexpr U32 R_AARCH64_MOVW_UABS_G0_NC = 264; static constexpr U32 R_AARCH64_MOVW_UABS_G1 = 265; static constexpr U32 R_AARCH64_MOVW_UABS_G1_NC = 266; static constexpr U32 R_AARCH64_MOVW_UABS_G2 = 267; static constexpr U32 R_AARCH64_MOVW_UABS_G2_NC = 268; static constexpr U32 R_AARCH64_MOVW_UABS_G3 = 269; static constexpr U32 R_AARCH64_ADR_GOT_PAGE = 311; static constexpr U32 R_AARCH64_LD64_GOT_LO12_NC = 312; // Mach-O constants static constexpr U32 MH_MAGIC_64 = 0xFEEDFACF; static constexpr U32 LC_SEGMENT_64 = 0x19; static constexpr U32 LC_SYMTAB = 0x02; static constexpr U32 CPU_TYPE_X86_64 = 0x01000007; static constexpr U32 CPU_TYPE_ARM64 = 0x0100000C; static constexpr U8 N_EXT = 0x01; static constexpr U8 N_SECT = 0x0E; static constexpr U32 S_ATTR_PURE_INSTRUCTIONS = 0x80000000; // Mach-O x86-64 relocation types static constexpr U32 X86_64_RELOC_UNSIGNED = 0; static constexpr U32 X86_64_RELOC_SIGNED = 1; static constexpr U32 X86_64_RELOC_BRANCH = 2; static constexpr U32 X86_64_RELOC_GOT_LOAD = 3; static constexpr U32 X86_64_RELOC_GOT = 4; static constexpr U32 X86_64_RELOC_SIGNED_1 = 6; static constexpr U32 X86_64_RELOC_SIGNED_2 = 7; static constexpr U32 X86_64_RELOC_SIGNED_4 = 8; // Mach-O AArch64 relocation types static constexpr U32 ARM64_RELOC_UNSIGNED = 0; static constexpr U32 ARM64_RELOC_BRANCH26 = 2; static constexpr U32 ARM64_RELOC_PAGE21 = 3; static constexpr U32 ARM64_RELOC_PAGEOFF12 = 4; static constexpr U32 ARM64_RELOC_GOT_LOAD_PAGE21 = 5; static constexpr U32 ARM64_RELOC_GOT_LOAD_PAGEOFF12 = 6; static constexpr U32 ARM64_RELOC_POINTER_TO_GOT = 7; static constexpr U32 ARM64_RELOC_ADDEND = 10; // AArch64 instruction templates static constexpr U32 adrpX0 = 0x90000000; static constexpr U32 addX0X0Imm0 = 0x91000000; static constexpr U32 ldrX0X0Imm0 = 0xF9400000; static constexpr U32 ldrX0X0Imm8 = 0xF9400400; static constexpr U32 strX1X0Imm0 = 0xF9000001; static constexpr U32 ldrW0X0Imm0 = 0xB9400000; static constexpr U32 nop = 0xD503201F; static constexpr U32 ret = 0xD65F03C0; static constexpr U32 blTarget0 = 0x94000000; static constexpr U32 bTarget0 = 0x14000000; static constexpr U32 movzX0Imm0 = 0xD2800000; static constexpr U32 movkX0Imm0Lsl16 = 0xF2A00000; static constexpr U32 movkX0Imm0Lsl32 = 0xF2C00000; static constexpr U32 movkX0Imm0Lsl48 = 0xF2E00000; static constexpr U32 ldrbW0X0Imm0 = 0x39400000; static constexpr U32 ldrhW0X0Imm0 = 0x79400000; static constexpr U32 ldrQ0X0Imm0 = 0x3DC00000; // Import addresses static constexpr Uptr nearImportedAddress = 0x1000; static constexpr U64 farImportedAddress = 0x10000000000ull; // ===== Struct definitions ===== WAVM_PACKED_STRUCT(struct CoffFileHeader { U16 Machine; U16 NumberOfSections; U32 TimeDateStamp; U32 PointerToSymbolTable; U32 NumberOfSymbols; U16 SizeOfOptionalHeader; U16 Characteristics; }); WAVM_PACKED_STRUCT(struct CoffSectionHeader { char Name[8]; U32 VirtualSize; U32 VirtualAddress; U32 SizeOfRawData; U32 PointerToRawData; U32 PointerToRelocations; U32 PointerToLinenumbers; U16 NumberOfRelocations; U16 NumberOfLinenumbers; U32 Characteristics; }); WAVM_PACKED_STRUCT(struct CoffSymbol { union { char ShortName[8]; struct { U32 Zeros; U32 Offset; } LongName; } Name; U32 Value; I16 SectionNumber; U16 Type; U8 StorageClass; U8 NumberOfAuxSymbols; }); WAVM_PACKED_STRUCT(struct CoffRelocation { U32 VirtualAddress; U32 SymbolTableIndex; U16 Type; }); struct Elf64_Ehdr { U8 e_ident[16]; U16 e_type; U16 e_machine; U32 e_version; U64 e_entry; U64 e_phoff; U64 e_shoff; U32 e_flags; U16 e_ehsize; U16 e_phentsize; U16 e_phnum; U16 e_shentsize; U16 e_shnum; U16 e_shstrndx; }; struct Elf64_Shdr { U32 sh_name; U32 sh_type; U64 sh_flags; U64 sh_addr; U64 sh_offset; U64 sh_size; U32 sh_link; U32 sh_info; U64 sh_addralign; U64 sh_entsize; }; struct Elf64_Sym { U32 st_name; U8 st_info; U8 st_other; U16 st_shndx; U64 st_value; U64 st_size; }; struct Elf64_Rela { U64 r_offset; U64 r_info; I64 r_addend; }; struct MachHeader64 { U32 magic; U32 cputype; U32 cpusubtype; U32 filetype; U32 ncmds; U32 sizeofcmds; U32 flags; U32 reserved; }; struct SegmentCommand64 { U32 cmd; U32 cmdsize; char segname[16]; U64 vmaddr; U64 vmsize; U64 fileoff; U64 filesize; U32 maxprot; U32 initprot; U32 nsects; U32 flags; }; struct TestMachOSection64 { char sectname[16]; char segname[16]; U64 addr; U64 size; U32 offset; U32 align; U32 reloff; U32 nreloc; U32 flags; U32 reserved1; U32 reserved2; U32 reserved3; }; struct TestSymtabCommand { U32 cmd; U32 cmdsize; U32 symoff; U32 nsyms; U32 stroff; U32 strsize; }; struct NList64 { U32 n_strx; U8 n_type; U8 n_sect; U16 n_desc; U64 n_value; }; struct TestMachOReloc { I32 r_address; U32 r_info; }; static_assert(sizeof(CoffFileHeader) == 20, ""); static_assert(sizeof(CoffSectionHeader) == 40, ""); static_assert(sizeof(CoffSymbol) == 18, ""); static_assert(sizeof(CoffRelocation) == 10, ""); static_assert(sizeof(Elf64_Ehdr) == 64, ""); static_assert(sizeof(Elf64_Shdr) == 64, ""); static_assert(sizeof(Elf64_Sym) == 24, ""); static_assert(sizeof(Elf64_Rela) == 24, ""); static_assert(sizeof(MachHeader64) == 32, ""); static_assert(sizeof(SegmentCommand64) == 72, ""); static_assert(sizeof(TestMachOSection64) == 80, ""); static_assert(sizeof(TestSymtabCommand) == 24, ""); static_assert(sizeof(NList64) == 16, ""); static_assert(sizeof(TestMachOReloc) == 8, ""); // ===== Helpers ===== using Serialization::ArrayOutputStream; using Serialization::serializeBytes; // Write a struct or scalar value to a serialization stream. template static void write(Serialization::OutputStream& stream, const T& value) { serializeBytes(stream, (const U8*)&value, sizeof(T)); } static U32 readU32(const U8* bytes) { U32 value; memcpy(&value, bytes, sizeof(value)); return value; } static U64 readU64(const U8* bytes) { U64 value; memcpy(&value, bytes, sizeof(value)); return value; } static I32 readI32(const U8* bytes) { I32 value; memcpy(&value, bytes, sizeof(value)); return value; } static I64 readI64(const U8* bytes) { I64 value; memcpy(&value, bytes, sizeof(value)); return value; } static U16 readU16(const U8* bytes) { U16 value; memcpy(&value, bytes, sizeof(value)); return value; } static std::vector arm64Code(std::initializer_list insns) { ArrayOutputStream stream; for(U32 insn : insns) { write(stream, insn); } return stream.getBytes(); } static std::vector arm64Code(const std::vector& insns) { ArrayOutputStream stream; for(U32 insn : insns) { write(stream, insn); } return stream.getBytes(); } static U32 makeMachORelocInfo(U32 symbolnum, bool pcrel, U32 length, bool isExtern, U32 type) { return (symbolnum & 0x00FFFFFF) | (U32(pcrel) << 24) | ((length & 3) << 25) | (U32(isExtern) << 27) | ((type & 0xF) << 28); } // ===== Object builders ===== // Build a minimal COFF object with one .text section. // Symbol table: [0..N-1] = imported symbols, [N] = "func" at offset 0 in section 1. static std::vector makeCOFFObject(U16 machine, const std::vector& code, const std::vector& relocs, const std::vector& importNames) { U32 numImports = U32(importNames.size()); U32 numSymbols = numImports + 1; U32 codeSize = U32(code.size()); U32 numRelocs = U32(relocs.size()); U32 pointerToRawData = sizeof(CoffFileHeader) + sizeof(CoffSectionHeader); U32 pointerToRelocations = pointerToRawData + codeSize; U32 pointerToSymbolTable = pointerToRelocations + numRelocs * sizeof(CoffRelocation); CoffFileHeader fileHeader = {}; fileHeader.Machine = machine; fileHeader.NumberOfSections = 1; fileHeader.PointerToSymbolTable = pointerToSymbolTable; fileHeader.NumberOfSymbols = numSymbols; CoffSectionHeader sectionHeader = {}; memcpy(sectionHeader.Name, ".text", 5); sectionHeader.SizeOfRawData = codeSize; sectionHeader.PointerToRawData = pointerToRawData; sectionHeader.PointerToRelocations = pointerToRelocations; sectionHeader.NumberOfRelocations = U16(numRelocs); sectionHeader.Characteristics = IMAGE_SCN_MEM_EXECUTE; ArrayOutputStream stream; write(stream, fileHeader); write(stream, sectionHeader); serializeBytes(stream, code.data(), code.size()); for(const auto& rel : relocs) { write(stream, rel); } for(U32 i = 0; i < numImports; ++i) { CoffSymbol sym = {}; const auto& name = importNames[i]; if(name.size() <= 8) { memcpy(sym.Name.ShortName, name.c_str(), name.size()); } sym.SectionNumber = 0; sym.StorageClass = IMAGE_SYM_CLASS_EXTERNAL; write(stream, sym); } CoffSymbol funcSym = {}; memcpy(funcSym.Name.ShortName, "func", 4); funcSym.SectionNumber = 1; funcSym.Type = 0x20; funcSym.StorageClass = IMAGE_SYM_CLASS_EXTERNAL; write(stream, funcSym); write(stream, U32(4)); // empty string table return stream.getBytes(); } // COFF builder with a "target" symbol defined at a given offset in section 1. // Symbol table: [0] = "target" in section 1 at targetValue, [1] = "func" in section 1 at 0. static std::vector makeCOFFObjectWithTarget(U16 machine, const std::vector& code, const std::vector& relocs, U32 targetValue) { U32 numSymbols = 2; U32 codeSize = U32(code.size()); U32 numRelocs = U32(relocs.size()); U32 pointerToRawData = sizeof(CoffFileHeader) + sizeof(CoffSectionHeader); U32 pointerToRelocations = pointerToRawData + codeSize; U32 pointerToSymbolTable = pointerToRelocations + numRelocs * sizeof(CoffRelocation); CoffFileHeader fileHeader = {}; fileHeader.Machine = machine; fileHeader.NumberOfSections = 1; fileHeader.PointerToSymbolTable = pointerToSymbolTable; fileHeader.NumberOfSymbols = numSymbols; CoffSectionHeader sectionHeader = {}; memcpy(sectionHeader.Name, ".text", 5); sectionHeader.SizeOfRawData = codeSize; sectionHeader.PointerToRawData = pointerToRawData; sectionHeader.PointerToRelocations = pointerToRelocations; sectionHeader.NumberOfRelocations = U16(numRelocs); sectionHeader.Characteristics = IMAGE_SCN_MEM_EXECUTE; ArrayOutputStream stream; write(stream, fileHeader); write(stream, sectionHeader); serializeBytes(stream, code.data(), code.size()); for(const auto& rel : relocs) { write(stream, rel); } CoffSymbol targetSym = {}; memcpy(targetSym.Name.ShortName, "target", 6); targetSym.Value = targetValue; targetSym.SectionNumber = 1; targetSym.StorageClass = IMAGE_SYM_CLASS_EXTERNAL; write(stream, targetSym); CoffSymbol funcSym = {}; memcpy(funcSym.Name.ShortName, "func", 4); funcSym.SectionNumber = 1; funcSym.Type = 0x20; funcSym.StorageClass = IMAGE_SYM_CLASS_EXTERNAL; write(stream, funcSym); write(stream, U32(4)); // empty string table return stream.getBytes(); } // Build a minimal ELF relocatable object with one .text section. // Symbols: [0]=null, [1..N]=imports, [N+1]="func". static std::vector makeELFObject(U16 machine, const std::vector& code, const std::vector& relas, const std::vector& importNames) { U32 numImports = U32(importNames.size()); U32 numSymbols = numImports + 2; // null + imports + func U32 codeSize = U32(code.size()); U32 numRelas = U32(relas.size()); // Build .strtab: "\0" + import names + "func\0" std::vector strtab; strtab.push_back(0); std::vector importNameOffsets; for(const auto& name : importNames) { importNameOffsets.push_back(U32(strtab.size())); for(char c : name) { strtab.push_back(U8(c)); } strtab.push_back(0); } U32 funcNameOffset = U32(strtab.size()); for(char c : std::string("func")) { strtab.push_back(U8(c)); } strtab.push_back(0); // .shstrtab: section name strings // "\0.text\0.rela.text\0.symtab\0.strtab\0.shstrtab\0" const char shstrtabData[] = "\0.text\0.rela.text\0.symtab\0.strtab\0.shstrtab"; U32 shstrtabSize = sizeof(shstrtabData); // includes trailing \0 // Section name offsets: U32 nameText = 1; U32 nameRelaText = 7; U32 nameSymtab = 18; U32 nameStrtab = 26; U32 nameShstrtab = 34; // Calculate sizes and offsets. Align struct sections to 8 bytes // (Elf64_Rela, Elf64_Sym, Elf64_Shdr all have 8-byte fields). auto align8 = [](U32 v) -> U32 { return (v + 7) & ~U32(7); }; U32 relaSize = numRelas * sizeof(Elf64_Rela); U32 symtabSize = numSymbols * sizeof(Elf64_Sym); U32 strtabSize = U32(strtab.size()); U32 textOff = sizeof(Elf64_Ehdr); U32 relaOff = align8(textOff + codeSize); U32 symtabOff = align8(relaOff + relaSize); U32 strtabOff = symtabOff + symtabSize; // strtab is bytes, no alignment needed U32 shstrtabOff = strtabOff + strtabSize; U32 shdrOff = align8(shstrtabOff + shstrtabSize); // Build the ELF file ArrayOutputStream stream; // ELF header Elf64_Ehdr ehdr = {}; ehdr.e_ident[0] = 0x7f; ehdr.e_ident[1] = 'E'; ehdr.e_ident[2] = 'L'; ehdr.e_ident[3] = 'F'; ehdr.e_ident[4] = 2; // ELFCLASS64 ehdr.e_ident[5] = 1; // ELFDATA2LSB ehdr.e_ident[6] = 1; // EV_CURRENT ehdr.e_type = 1; // ET_REL ehdr.e_machine = machine; ehdr.e_version = 1; ehdr.e_shoff = shdrOff; ehdr.e_ehsize = sizeof(Elf64_Ehdr); ehdr.e_shentsize = sizeof(Elf64_Shdr); ehdr.e_shnum = 6; ehdr.e_shstrndx = 5; write(stream, ehdr); // .text data serializeBytes(stream, code.data(), code.size()); // .rela.text data serializeZerosUntilOffset(stream, relaOff); for(const auto& rela : relas) { write(stream, rela); } // .symtab data serializeZerosUntilOffset(stream, symtabOff); Elf64_Sym nullSym = {}; write(stream, nullSym); for(U32 i = 0; i < numImports; ++i) { Elf64_Sym sym = {}; sym.st_name = importNameOffsets[i]; sym.st_info = (STB_GLOBAL << 4); sym.st_shndx = 0; // SHN_UNDEF write(stream, sym); } Elf64_Sym funcSym = {}; funcSym.st_name = funcNameOffset; funcSym.st_info = (STB_GLOBAL << 4) | STT_FUNC; funcSym.st_shndx = 1; // .text section funcSym.st_value = 0; funcSym.st_size = codeSize; write(stream, funcSym); // .strtab data serializeBytes(stream, strtab.data(), strtab.size()); // .shstrtab data serializeBytes(stream, (const U8*)shstrtabData, shstrtabSize); // Section headers serializeZerosUntilOffset(stream, shdrOff); Elf64_Shdr nullShdr = {}; write(stream, nullShdr); Elf64_Shdr textShdr = {}; textShdr.sh_name = nameText; textShdr.sh_type = SHT_PROGBITS; textShdr.sh_flags = SHF_ALLOC | SHF_EXECINSTR; textShdr.sh_offset = textOff; textShdr.sh_size = codeSize; textShdr.sh_addralign = 16; write(stream, textShdr); Elf64_Shdr relaShdr = {}; relaShdr.sh_name = nameRelaText; relaShdr.sh_type = SHT_RELA; relaShdr.sh_offset = relaOff; relaShdr.sh_size = relaSize; relaShdr.sh_link = 3; // .symtab relaShdr.sh_info = 1; // .text relaShdr.sh_addralign = 8; relaShdr.sh_entsize = sizeof(Elf64_Rela); write(stream, relaShdr); Elf64_Shdr symtabShdr = {}; symtabShdr.sh_name = nameSymtab; symtabShdr.sh_type = SHT_SYMTAB; symtabShdr.sh_offset = symtabOff; symtabShdr.sh_size = symtabSize; symtabShdr.sh_link = 4; // .strtab symtabShdr.sh_info = 1; // first non-local symbol index symtabShdr.sh_addralign = 8; symtabShdr.sh_entsize = sizeof(Elf64_Sym); write(stream, symtabShdr); Elf64_Shdr strtabShdr = {}; strtabShdr.sh_name = nameStrtab; strtabShdr.sh_type = SHT_STRTAB; strtabShdr.sh_offset = strtabOff; strtabShdr.sh_size = strtabSize; strtabShdr.sh_addralign = 1; write(stream, strtabShdr); Elf64_Shdr shstrtabShdr = {}; shstrtabShdr.sh_name = nameShstrtab; shstrtabShdr.sh_type = SHT_STRTAB; shstrtabShdr.sh_offset = shstrtabOff; shstrtabShdr.sh_size = shstrtabSize; shstrtabShdr.sh_addralign = 1; write(stream, shstrtabShdr); return stream.getBytes(); } // Build a minimal Mach-O object with one __TEXT,__text section. // Symbols: [0..N-1] = imports (names have leading _), [N] = "_func". // Import map keys should NOT have leading underscore (linker strips it). static std::vector makeMachOObject(U32 cputype, const std::vector& code, const std::vector& relocs, const std::vector& importNames) { U32 numImports = U32(importNames.size()); U32 numSymbols = numImports + 1; U32 codeSize = U32(code.size()); U32 numRelocs = U32(relocs.size()); // Build string table: "\0_name1\0_name2\0..._func\0" std::vector strtab; strtab.push_back(0); std::vector importStrOffsets; for(const auto& name : importNames) { importStrOffsets.push_back(U32(strtab.size())); strtab.push_back('_'); for(char c : name) { strtab.push_back(U8(c)); } strtab.push_back(0); } U32 funcStrOffset = U32(strtab.size()); for(char c : std::string("_func")) { strtab.push_back(U8(c)); } strtab.push_back(0); U32 relocSize = numRelocs * U32(sizeof(TestMachOReloc)); U32 symtabSize = numSymbols * U32(sizeof(NList64)); U32 strtabSize = U32(strtab.size()); U32 dataStart = U32(sizeof(MachHeader64) + sizeof(SegmentCommand64) + sizeof(TestMachOSection64) + sizeof(TestSymtabCommand)); U32 codeOff = dataStart; U32 relocOff = codeOff + codeSize; U32 symtabOff = relocOff + relocSize; U32 strtabOff = symtabOff + symtabSize; ArrayOutputStream stream; // Mach-O header MachHeader64 hdr = {}; hdr.magic = MH_MAGIC_64; hdr.cputype = cputype; hdr.filetype = 1; // MH_OBJECT hdr.ncmds = 2; hdr.sizeofcmds = U32(sizeof(SegmentCommand64) + sizeof(TestMachOSection64) + sizeof(TestSymtabCommand)); write(stream, hdr); // LC_SEGMENT_64 SegmentCommand64 seg = {}; seg.cmd = LC_SEGMENT_64; seg.cmdsize = U32(sizeof(SegmentCommand64) + sizeof(TestMachOSection64)); seg.vmsize = codeSize; seg.fileoff = codeOff; seg.filesize = codeSize; seg.maxprot = 7; seg.initprot = 7; seg.nsects = 1; write(stream, seg); // Section TestMachOSection64 sect = {}; memcpy(sect.sectname, "__text", 6); memcpy(sect.segname, "__TEXT", 6); sect.size = codeSize; sect.offset = codeOff; sect.align = 2; // 2^2 = 4 byte alignment sect.reloff = relocOff; sect.nreloc = numRelocs; sect.flags = S_ATTR_PURE_INSTRUCTIONS; write(stream, sect); // LC_SYMTAB TestSymtabCommand symcmd = {}; symcmd.cmd = LC_SYMTAB; symcmd.cmdsize = sizeof(TestSymtabCommand); symcmd.symoff = symtabOff; symcmd.nsyms = numSymbols; symcmd.stroff = strtabOff; symcmd.strsize = strtabSize; write(stream, symcmd); // Code serializeBytes(stream, code.data(), code.size()); // Relocations for(const auto& rel : relocs) { write(stream, rel); } // Symbol table for(U32 i = 0; i < numImports; ++i) { NList64 sym = {}; sym.n_strx = importStrOffsets[i]; sym.n_type = N_EXT; // N_UNDF | N_EXT write(stream, sym); } NList64 funcSym = {}; funcSym.n_strx = funcStrOffset; funcSym.n_type = N_SECT | N_EXT; funcSym.n_sect = 1; write(stream, funcSym); // String table serializeBytes(stream, strtab.data(), strtab.size()); return stream.getBytes(); } // ===== RAII wrapper and import helpers ===== // RAII wrapper that pre-allocates image pages so import addresses can be computed // relative to a known base. All tests use link() to link into the pre-allocated pages. struct LinkedImage { static constexpr Uptr reservePages = 16; LinkResult result; // Address near the image (just past the reserved region), for relative relocation tests. Uptr nearAddr; LinkedImage() { preAllocBase_ = Platform::allocateVirtualPages(reservePages); WAVM_ERROR_UNLESS(preAllocBase_); WAVM_ERROR_UNLESS(Platform::commitVirtualPages(preAllocBase_, reservePages)); nearAddr = reinterpret_cast(preAllocBase_) + reservePages * Platform::getBytesPerPage() + 0x1000; } void link(U8* objectBytes, Uptr objectNumBytes, const HashMap& imports) { linkObject(objectBytes, objectNumBytes, imports, result, [this](Uptr numPages) -> U8* { WAVM_ERROR_UNLESS(numPages <= reservePages); return preAllocBase_; }); } ~LinkedImage() { if(preAllocBase_) { Platform::freeVirtualPages(preAllocBase_, reservePages); } } private: U8* preAllocBase_ = nullptr; }; static HashMap makeFarImportMap() { HashMap imports; imports.addOrFail("imported", Uptr(farImportedAddress)); return imports; } static HashMap makeNearImportMap(Uptr addr) { HashMap imports; imports.addOrFail("imported", addr); return imports; } static HashMap makeImportMap( const std::vector>& entries) { HashMap imports; for(const auto& e : entries) { imports.addOrFail(e.first, e.second); } return imports; } // Helper: get code pointer from linked image. // Caller should CHECK_EQ(definedSymbols.size(), ...) separately for diagnostic quality. static const U8* getCodePtr(const LinkedImage& img) { WAVM_ERROR_UNLESS(img.result.definedSymbols.size() >= 1); return reinterpret_cast(img.result.definedSymbols[0].address); } // ===================================================================== // COFF x86-64 tests // ===================================================================== static void testCOFFX64Addr64(TEST_STATE_PARAM) { std::vector code(8, 0); code.push_back(0xC3); // ret CoffRelocation rel = {0, 0, IMAGE_REL_AMD64_ADDR64}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_AMD64, code, {rel}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU64(p), U64(nearImportedAddress)); } static void testCOFFX64Addr32NB(TEST_STATE_PARAM) { // ADDR32NB: writes symbolValue + addend - imageBase as I32. // Fixup bytes must be 0 (inline addend). Use a defined symbol to guarantee it fits. std::vector code(20, 0); CoffRelocation rel = {0, 0, IMAGE_REL_AMD64_ADDR32NB}; // targets "target" (sym 0) auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_AMD64, code, {rel}, 16); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr imageBase = Uptr(img.result.imageBase); // "func" (sym 1) is at offset 0 = definedSymbols[0].address. // "target" (sym 0) is at offset 16 = definedSymbols[0].address + 16. Uptr targetAddr = img.result.definedSymbols[0].address + 16; I32 expected = I32(Iptr(targetAddr) - Iptr(imageBase)); CHECK_EQ(readI32(p), expected); } static void testCOFFX64Rel32Near(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); CoffRelocation rel = {0, 0, IMAGE_REL_AMD64_REL32}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_AMD64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; // COFF REL32: value = sym + (inline_addend + 4), delta = value - (fixupAddr + 4) // inline_addend = 0, so delta = (sym + 4) - (fixupAddr + 4) = sym - fixupAddr I32 expected = I32(Iptr(img.nearAddr) - Iptr(fixupAddr)); CHECK_EQ(readI32(p), expected); } static void testCOFFX64Rel32Far(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); CoffRelocation rel = {0, 0, IMAGE_REL_AMD64_REL32}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_AMD64, code, {rel}, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // Follow the rel32 displacement to find the stub. I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; // COFF REL32: value = sym + (inline_addend + 4), delta = value - (fixupAddr + 4) // delta = stub - (fixupAddr + 4), so stub = fixupAddr + 4 + disp const U8* stub = reinterpret_cast(fixupAddr + 4 + disp); CHECK_EQ(stub[0], U8(0xFF)); CHECK_EQ(stub[1], U8(0x25)); } // Parameterized helper for REL32_1 through REL32_5. static void testCOFFX64Rel32Variant(TEST_STATE_PARAM, U16 relocType, I64 extraAddend) { std::vector code(4, 0); code.push_back(0xC3); CoffRelocation rel = {0, 0, relocType}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_AMD64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; // REL32_N: value = sym + (inline_addend + N+4), delta = value - (fixupAddr + 4) // inline_addend = 0, so delta = sym + extraAddend - fixupAddr - 4 I32 expected = I32(Iptr(img.nearAddr) + extraAddend - Iptr(fixupAddr) - 4); CHECK_EQ(readI32(p), expected); } static void testCOFFX64Rel32_1(TEST_STATE_PARAM) { testCOFFX64Rel32Variant(TEST_STATE_ARG, IMAGE_REL_AMD64_REL32_1, 5); } static void testCOFFX64Rel32_2(TEST_STATE_PARAM) { testCOFFX64Rel32Variant(TEST_STATE_ARG, IMAGE_REL_AMD64_REL32_2, 6); } static void testCOFFX64Rel32_3(TEST_STATE_PARAM) { testCOFFX64Rel32Variant(TEST_STATE_ARG, IMAGE_REL_AMD64_REL32_3, 7); } static void testCOFFX64Rel32_4(TEST_STATE_PARAM) { testCOFFX64Rel32Variant(TEST_STATE_ARG, IMAGE_REL_AMD64_REL32_4, 8); } static void testCOFFX64Rel32_5(TEST_STATE_PARAM) { testCOFFX64Rel32Variant(TEST_STATE_ARG, IMAGE_REL_AMD64_REL32_5, 9); } static void testCOFFX64Section(TEST_STATE_PARAM) { std::vector code(20, 0x90); // 20 NOP bytes CoffRelocation rel = {0, 0, IMAGE_REL_AMD64_SECTION}; // targets "target" (sym 0) auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_AMD64, code, {rel}, 16); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); // "func" is sym 1 at offset 0. Find code via definedSymbols. // "target" is in section 1, so SECTION writes 1. const U8* p = getCodePtr(img); CHECK_EQ(readU16(p), U16(1)); } static void testCOFFX64SecRel(TEST_STATE_PARAM) { std::vector code(20, 0); CoffRelocation rel = {0, 0, IMAGE_REL_AMD64_SECREL}; // targets "target" (sym 0) auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_AMD64, code, {rel}, 16); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // target is at value=16 within section 1, so secrel = 16 CHECK_EQ(readI32(p), I32(16)); } // ===================================================================== // COFF ARM64 tests: existing tests // ===================================================================== static constexpr Uptr rawCodeSize = 12; static std::vector makeARM64COFFObject(U16 pageOffsetRelocType, U32 secondInstruction) { const U32 pointerToRawData = sizeof(CoffFileHeader) + sizeof(CoffSectionHeader); const U32 pointerToRelocations = pointerToRawData + rawCodeSize; const U32 pointerToSymbolTable = pointerToRelocations + sizeof(CoffRelocation) * 2; CoffFileHeader fileHeader = {}; fileHeader.Machine = IMAGE_FILE_MACHINE_ARM64; fileHeader.NumberOfSections = 1; fileHeader.PointerToSymbolTable = pointerToSymbolTable; fileHeader.NumberOfSymbols = 2; CoffSectionHeader sectionHeader = {}; memcpy(sectionHeader.Name, ".text", 5); sectionHeader.SizeOfRawData = rawCodeSize; sectionHeader.PointerToRawData = pointerToRawData; sectionHeader.PointerToRelocations = pointerToRelocations; sectionHeader.NumberOfRelocations = 2; sectionHeader.Characteristics = IMAGE_SCN_MEM_EXECUTE; CoffRelocation pageBaseReloc = {}; pageBaseReloc.VirtualAddress = 0; pageBaseReloc.SymbolTableIndex = 0; pageBaseReloc.Type = IMAGE_REL_ARM64_PAGEBASE_REL21; CoffRelocation pageOffsetReloc = {}; pageOffsetReloc.VirtualAddress = 4; pageOffsetReloc.SymbolTableIndex = 0; pageOffsetReloc.Type = pageOffsetRelocType; CoffSymbol importedSymbol = {}; memcpy(importedSymbol.Name.ShortName, "imported", 8); importedSymbol.SectionNumber = 0; importedSymbol.StorageClass = IMAGE_SYM_CLASS_EXTERNAL; CoffSymbol functionSymbol = {}; memcpy(functionSymbol.Name.ShortName, "func", 4); functionSymbol.SectionNumber = 1; functionSymbol.Type = 0x20; functionSymbol.StorageClass = IMAGE_SYM_CLASS_EXTERNAL; ArrayOutputStream stream; write(stream, fileHeader); write(stream, sectionHeader); write(stream, adrpX0); write(stream, secondInstruction); write(stream, ret); write(stream, pageBaseReloc); write(stream, pageOffsetReloc); write(stream, importedSymbol); write(stream, functionSymbol); write(stream, U32(4)); // Empty COFF string table. return stream.getBytes(); } static void testCOFFARM64OutOfRangePageOffset12A(TEST_STATE_PARAM) { std::vector objectBytes = makeARM64COFFObject(IMAGE_REL_ARM64_PAGEOFFSET_12A, addX0X0Imm0); HashMap imports = makeFarImportMap(); LinkedImage image; image.link(objectBytes.data(), objectBytes.size(), imports); CHECK_EQ(image.result.definedSymbols.size(), Uptr(1)); CHECK_EQ(image.result.definedSymbols[0].name, std::string("func")); const U8* code = reinterpret_cast(image.result.definedSymbols[0].address); // The ADD should have been transformed to a 64-bit LDR from the GOT entry. U32 secondInsn = readU32(code + 4); CHECK_EQ(secondInsn & 0xFFC00000, U32(0xF9400000)); // RET should be unchanged. CHECK_EQ(readU32(code + 8), ret); } static void testCOFFARM64OutOfRangePageOffset12L(TEST_STATE_PARAM) { std::vector objectBytes = makeARM64COFFObject(IMAGE_REL_ARM64_PAGEOFFSET_12L, ldrX0X0Imm0); HashMap imports = makeFarImportMap(); LinkedImage image; image.link(objectBytes.data(), objectBytes.size(), imports); CHECK_EQ(image.result.definedSymbols.size(), Uptr(1)); CHECK_EQ(image.result.definedSymbols[0].name, std::string("func")); const U8* code = reinterpret_cast(image.result.definedSymbols[0].address); // The ADRP should have been replaced with a B to the data-access stub. U32 firstInsn = readU32(code); CHECK_EQ(firstInsn & 0xFC000000, U32(0x14000000)); // The LDR should have been replaced with a NOP. CHECK_EQ(readU32(code + 4), nop); // RET should be unchanged. CHECK_EQ(readU32(code + 8), ret); // Follow the B to find the stub and verify its contents. I32 branchImm26 = I32(firstInsn << 6) >> 6; // sign-extend 26-bit offset const U8* stub = code + I64(branchImm26) * 4; // Stub[+0]: LDR X16, [PC, #12] CHECK_EQ(readU32(stub), U32(0x58000070)); // Stub[+4]: LDR X0, [X16, #0] (original LDR with Rn=X16, imm12=0) CHECK_EQ(readU32(stub + 4), U32(0xF9400200)); // Stub[+8]: B back to the RET instruction U32 returnInsn = readU32(stub + 8); CHECK_EQ(returnInsn & 0xFC000000, U32(0x14000000)); // Stub[+12]: .quad farImportedAddress CHECK_EQ(readU64(stub + 12), farImportedAddress); } static void testCOFFARM64OutOfRangePageOffset12LWithAddend(TEST_STATE_PARAM) { // ADRP X0, imported; LDR X0, [X0, #8]: the addend should be folded into the stub literal. std::vector objectBytes = makeARM64COFFObject(IMAGE_REL_ARM64_PAGEOFFSET_12L, ldrX0X0Imm8); HashMap imports = makeFarImportMap(); LinkedImage image; image.link(objectBytes.data(), objectBytes.size(), imports); const U8* code = reinterpret_cast(image.result.definedSymbols[0].address); // Should be rewritten to B stub; NOP; RET. U32 firstInsn = readU32(code); CHECK_EQ(firstInsn & 0xFC000000, U32(0x14000000)); CHECK_EQ(readU32(code + 4), nop); // The stub's inline literal should be farImportedAddress + 8. I32 branchImm26 = I32(firstInsn << 6) >> 6; const U8* stub = code + I64(branchImm26) * 4; CHECK_EQ(readU64(stub + 12), farImportedAddress + 8); // The stub's LDR should use X16 as base with imm12=0. CHECK_EQ(readU32(stub + 4), U32(0xF9400200)); } static void testCOFFARM64OutOfRangePageOffset12LStore(TEST_STATE_PARAM) { // ADRP X0, imported; STR X1, [X0, #0]: store via data-access stub. std::vector objectBytes = makeARM64COFFObject(IMAGE_REL_ARM64_PAGEOFFSET_12L, strX1X0Imm0); HashMap imports = makeFarImportMap(); LinkedImage image; image.link(objectBytes.data(), objectBytes.size(), imports); const U8* code = reinterpret_cast(image.result.definedSymbols[0].address); U32 firstInsn = readU32(code); CHECK_EQ(firstInsn & 0xFC000000, U32(0x14000000)); CHECK_EQ(readU32(code + 4), nop); I32 branchImm26 = I32(firstInsn << 6) >> 6; const U8* stub = code + I64(branchImm26) * 4; CHECK_EQ(readU64(stub + 12), farImportedAddress); // The stub's modified STR should be STR X1, [X16, #0]: CHECK_EQ(readU32(stub + 4), U32(0xF9000201)); } static void testCOFFARM64OutOfRangePageOffset12L32Bit(TEST_STATE_PARAM) { // ADRP X0, imported; LDR W0, [X0, #0]: 32-bit load via data-access stub. std::vector objectBytes = makeARM64COFFObject(IMAGE_REL_ARM64_PAGEOFFSET_12L, ldrW0X0Imm0); HashMap imports = makeFarImportMap(); LinkedImage image; image.link(objectBytes.data(), objectBytes.size(), imports); const U8* code = reinterpret_cast(image.result.definedSymbols[0].address); U32 firstInsn = readU32(code); CHECK_EQ(firstInsn & 0xFC000000, U32(0x14000000)); CHECK_EQ(readU32(code + 4), nop); I32 branchImm26 = I32(firstInsn << 6) >> 6; const U8* stub = code + I64(branchImm26) * 4; CHECK_EQ(readU64(stub + 12), farImportedAddress); // The stub's modified LDR should be LDR W0, [X16, #0]: CHECK_EQ(readU32(stub + 4), U32(0xB9400200)); } // ===================================================================== // COFF ARM64 tests: new tests // ===================================================================== static void testCOFFARM64Addr64(TEST_STATE_PARAM) { std::vector code(8, 0); code.push_back(0); // padding code.push_back(0); code.push_back(0); code.push_back(0); CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_ADDR64}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_ARM64, code, {rel}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU64(p), U64(nearImportedAddress)); } static void testCOFFARM64Addr32NB(TEST_STATE_PARAM) { auto code = arm64Code({0, 0, 0, 0, 0}); // 20 bytes CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_ADDR32NB}; // targets "target" (sym 0) auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_ARM64, code, {rel}, 16); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr imageBase = Uptr(img.result.imageBase); Uptr targetAddr = img.result.definedSymbols[0].address + 16; I32 expected = I32(Iptr(targetAddr) - Iptr(imageBase)); CHECK_EQ(readI32(p), expected); } static void testCOFFARM64Branch26Near(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_BRANCH26}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_ARM64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); // Verify it's still a BL (opcode preserved) CHECK_EQ(insn & 0xFC000000, U32(0x94000000)); // Extract imm26 and verify target I32 imm26 = I32(insn << 6) >> 6; Uptr target = img.result.definedSymbols[0].address + Uptr(I64(imm26) * 4); CHECK_EQ(target, img.nearAddr); } static void testCOFFARM64Branch26Far(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_BRANCH26}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_ARM64, code, {rel}, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); // Should still be a BL but targeting a stub CHECK_EQ(insn & 0xFC000000, U32(0x94000000)); // Follow to stub I32 imm26 = I32(insn << 6) >> 6; const U8* stub = p + I64(imm26) * 4; // AArch64 stub: LDR X16, [PC, #8]; BR X16; .quad addr CHECK_EQ(readU32(stub), U32(0x58000050)); CHECK_EQ(readU32(stub + 4), U32(0xD61F0200)); CHECK_EQ(readU64(stub + 8), farImportedAddress); } static void testCOFFARM64PagebaseAndAddNear(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, addX0X0Imm0, ret}); CoffRelocation rel0 = {0, 0, IMAGE_REL_ARM64_PAGEBASE_REL21}; CoffRelocation rel1 = {4, 0, IMAGE_REL_ARM64_PAGEOFFSET_12A}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_ARM64, code, {rel0, rel1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // Verify ADD imm12 == (img.nearAddr & 0xFFF) U32 addInsn = readU32(p + 4); U32 imm12 = (addInsn >> 10) & 0xFFF; CHECK_EQ(imm12, U32(img.nearAddr & 0xFFF)); } static void testCOFFARM64PagebaseAndLdstNear(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, ldrX0X0Imm0, ret}); CoffRelocation rel0 = {0, 0, IMAGE_REL_ARM64_PAGEBASE_REL21}; CoffRelocation rel1 = {4, 0, IMAGE_REL_ARM64_PAGEOFFSET_12L}; auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_ARM64, code, {rel0, rel1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // For 64-bit LDR, shift=3, imm12 = (addr & 0xFFF) >> 3 U32 ldrInsn = readU32(p + 4); U32 imm12 = (ldrInsn >> 10) & 0xFFF; CHECK_EQ(imm12, U32((img.nearAddr & 0xFFF) >> 3)); } static void testCOFFARM64SecRel(TEST_STATE_PARAM) { auto code = arm64Code({0, 0, 0, 0, 0}); // 20 bytes CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_SECREL}; auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_ARM64, code, {rel}, 16); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readI32(p), I32(16)); } static void testCOFFARM64Section(TEST_STATE_PARAM) { auto code = arm64Code({0, 0, 0, 0, 0}); CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_SECTION}; auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_ARM64, code, {rel}, 16); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU16(p), U16(1)); } static void testCOFFARM64SecRelLow12A(TEST_STATE_PARAM) { // ADD X0, X0, #0 at offset 0, target at secrel offset 0x123. auto code = arm64Code({addX0X0Imm0, ret, 0, 0, 0}); // pad to 20 bytes CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_SECREL_LOW12A}; auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_ARM64, code, {rel}, 0x123); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); U32 imm12 = (insn >> 10) & 0xFFF; CHECK_EQ(imm12, U32(0x123)); } static void testCOFFARM64SecRelHigh12A(TEST_STATE_PARAM) { auto code = arm64Code({addX0X0Imm0, ret, 0, 0, 0}); CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_SECREL_HIGH12A}; // Target at offset 0x12345 within section. high12 = (0x12345 >> 12) & 0xFFF = 0x12. auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_ARM64, code, {rel}, 0x12345); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); U32 imm12 = (insn >> 10) & 0xFFF; CHECK_EQ(imm12, U32(0x12)); } static void testCOFFARM64SecRelLow12L(TEST_STATE_PARAM) { // LDR X0, [X0, #0]: 64-bit load, size field=3, shift=3. // Target at secrel offset 0x18. imm12 = (0x18 & 0xFFF) >> 3 = 3. auto code = arm64Code({ldrX0X0Imm0, ret, 0, 0, 0}); CoffRelocation rel = {0, 0, IMAGE_REL_ARM64_SECREL_LOW12L}; auto obj = makeCOFFObjectWithTarget(IMAGE_FILE_MACHINE_ARM64, code, {rel}, 0x18); HashMap imports; LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); U32 imm12 = (insn >> 10) & 0xFFF; CHECK_EQ(imm12, U32(3)); } // ===================================================================== // ELF x86-64 tests // ===================================================================== static void testELFX64Abs64(TEST_STATE_PARAM) { std::vector code(8, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_64, 0}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU64(p), U64(nearImportedAddress)); } static void testELFX64Abs32(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_32, 0}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU32(p), U32(nearImportedAddress)); } static void testELFX64Abs32S(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_32S, 0}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readI32(p), I32(nearImportedAddress)); } static void testELFX64PC32Near(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); // r_addend = -4 is standard for PC32 (displacement from end of field) Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_PC32, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; // relocRel32: value = sym + addend = nearImport + (-4), delta = value - fixupAddr // But with stub fallback. For near, delta fits. I32 expected = I32(Iptr(img.nearAddr) - 4 - Iptr(fixupAddr)); CHECK_EQ(readI32(p), expected); } static void testELFX64PC32Far(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_PC32, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // Far import triggers stub. Follow rel32 to stub. I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; // stub value = fixupAddr + disp + addend_correction... just verify stub pattern const U8* stub = reinterpret_cast(fixupAddr + disp + 4 - 4); CHECK_EQ(stub[0], U8(0xFF)); CHECK_EQ(stub[1], U8(0x25)); } static void testELFX64PLT32(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_PLT32, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; I32 expected = I32(Iptr(img.nearAddr) - 4 - Iptr(fixupAddr)); CHECK_EQ(readI32(p), expected); } static void testELFX64PC64(TEST_STATE_PARAM) { std::vector code(8, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_PC64, 0}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; I64 expected = I64(Iptr(img.nearAddr) - Iptr(fixupAddr)); CHECK_EQ(readI64(p), expected); } static void testELFX64GotPcRel(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_GOTPCREL, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // Follow the rel32 to the GOT entry and verify it contains the symbol value. I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; // GOT entry is at fixupAddr + disp + 4 (accounting for addend = -4 in the reloc) // Actually: value = gotEntry + (-4), delta = value - fixupAddr // so gotEntry = fixupAddr + disp + 4 const U8* gotEntry = reinterpret_cast(fixupAddr + disp + 4); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } static void testELFX64GotPcRelX(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_GOTPCRELX, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; const U8* gotEntry = reinterpret_cast(fixupAddr + disp + 4); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } static void testELFX64RexGotPcRelX(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); Elf64_Rela rela = {0, ((U64)1 << 32) | R_X86_64_REX_GOTPCRELX, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; const U8* gotEntry = reinterpret_cast(fixupAddr + disp + 4); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } // ===================================================================== // ELF AArch64 tests // ===================================================================== static void testELFARM64Abs64(TEST_STATE_PARAM) { std::vector code(8, 0); auto padded = arm64Code({ret}); code.insert(code.end(), padded.begin(), padded.end()); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_ABS64, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU64(p), U64(nearImportedAddress)); } static void testELFARM64Abs32(TEST_STATE_PARAM) { auto code = arm64Code({0, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_ABS32, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU32(p), U32(nearImportedAddress)); } static void testELFARM64Prel64(TEST_STATE_PARAM) { std::vector code(8, 0); auto padded = arm64Code({ret}); code.insert(code.end(), padded.begin(), padded.end()); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_PREL64, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; I64 expected = I64(Iptr(img.nearAddr) - Iptr(fixupAddr)); CHECK_EQ(readI64(p), expected); } static void testELFARM64Prel32(TEST_STATE_PARAM) { auto code = arm64Code({0, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_PREL32, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; I32 expected = I32(Iptr(img.nearAddr) - Iptr(fixupAddr)); CHECK_EQ(readI32(p), expected); } static void testELFARM64Call26Near(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_CALL26, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); CHECK_EQ(insn & 0xFC000000, U32(0x94000000)); I32 imm26 = I32(insn << 6) >> 6; Uptr target = img.result.definedSymbols[0].address + Uptr(I64(imm26) * 4); CHECK_EQ(target, img.nearAddr); } static void testELFARM64Call26Far(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_CALL26, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); CHECK_EQ(insn & 0xFC000000, U32(0x94000000)); I32 imm26 = I32(insn << 6) >> 6; const U8* stub = p + I64(imm26) * 4; CHECK_EQ(readU32(stub), U32(0x58000050)); // LDR X16, [PC, #8] CHECK_EQ(readU32(stub + 4), U32(0xD61F0200)); // BR X16 CHECK_EQ(readU64(stub + 8), farImportedAddress); } static void testELFARM64Jump26Near(TEST_STATE_PARAM) { auto code = arm64Code({bTarget0, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | R_AARCH64_JUMP26, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); CHECK_EQ(insn & 0xFC000000, U32(0x14000000)); I32 imm26 = I32(insn << 6) >> 6; Uptr target = img.result.definedSymbols[0].address + Uptr(I64(imm26) * 4); CHECK_EQ(target, img.nearAddr); } static void testELFARM64AdrpAndAddLo12(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, addX0X0Imm0, ret}); Elf64_Rela rela0 = {0, ((U64)1 << 32) | R_AARCH64_ADR_PREL_PG_HI21, 0}; Elf64_Rela rela1 = {4, ((U64)1 << 32) | R_AARCH64_ADD_ABS_LO12_NC, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela0, rela1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 addInsn = readU32(p + 4); U32 imm12 = (addInsn >> 10) & 0xFFF; CHECK_EQ(imm12, U32(img.nearAddr & 0xFFF)); } // Parameterized LDST test static void testELFARM64LdstVariant(TEST_STATE_PARAM, U32 relocType, U32 insn, U32 shift) { auto code = arm64Code({insn, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | relocType, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 patchedInsn = readU32(p); U32 imm12 = (patchedInsn >> 10) & 0xFFF; CHECK_EQ(imm12, U32((img.nearAddr & 0xFFF) >> shift)); } static void testELFARM64Ldst8Lo12(TEST_STATE_PARAM) { testELFARM64LdstVariant(TEST_STATE_ARG, R_AARCH64_LDST8_ABS_LO12_NC, ldrbW0X0Imm0, 0); } static void testELFARM64Ldst16Lo12(TEST_STATE_PARAM) { testELFARM64LdstVariant(TEST_STATE_ARG, R_AARCH64_LDST16_ABS_LO12_NC, ldrhW0X0Imm0, 1); } static void testELFARM64Ldst32Lo12(TEST_STATE_PARAM) { testELFARM64LdstVariant(TEST_STATE_ARG, R_AARCH64_LDST32_ABS_LO12_NC, ldrW0X0Imm0, 2); } static void testELFARM64Ldst64Lo12(TEST_STATE_PARAM) { testELFARM64LdstVariant(TEST_STATE_ARG, R_AARCH64_LDST64_ABS_LO12_NC, ldrX0X0Imm0, 3); } static void testELFARM64Ldst128Lo12(TEST_STATE_PARAM) { testELFARM64LdstVariant(TEST_STATE_ARG, R_AARCH64_LDST128_ABS_LO12_NC, ldrQ0X0Imm0, 4); } // Parameterized MOVW test. Uses import 0x1234567890ABCDEF. static void testELFARM64MovwVariant(TEST_STATE_PARAM, U32 relocType, U32 insn, U32 shift) { auto code = arm64Code({insn, ret}); Elf64_Rela rela = {0, ((U64)1 << 32) | relocType, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela}, {"imported"}); Uptr addr = 0x1234567890ABCDEF; auto imports = makeImportMap({{"imported", addr}}); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 patchedInsn = readU32(p); U16 imm16 = U16((patchedInsn >> 5) & 0xFFFF); U16 expected = U16((addr >> shift) & 0xFFFF); CHECK_EQ(imm16, expected); } static void testELFARM64MovwG0(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G0, movzX0Imm0, 0); } static void testELFARM64MovwG0NC(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G0_NC, movzX0Imm0, 0); } static void testELFARM64MovwG1(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G1, movkX0Imm0Lsl16, 16); } static void testELFARM64MovwG1NC(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G1_NC, movkX0Imm0Lsl16, 16); } static void testELFARM64MovwG2(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G2, movkX0Imm0Lsl32, 32); } static void testELFARM64MovwG2NC(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G2_NC, movkX0Imm0Lsl32, 32); } static void testELFARM64MovwG3(TEST_STATE_PARAM) { testELFARM64MovwVariant(TEST_STATE_ARG, R_AARCH64_MOVW_UABS_G3, movkX0Imm0Lsl48, 48); } static void testELFARM64GotPage(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, ldrX0X0Imm0, ret}); Elf64_Rela rela0 = {0, ((U64)1 << 32) | R_AARCH64_ADR_GOT_PAGE, 0}; Elf64_Rela rela1 = {4, ((U64)1 << 32) | R_AARCH64_LD64_GOT_LO12_NC, 0}; auto obj = makeELFObject(EM_AARCH64, code, {rela0, rela1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); // Just verify it linked without error and produced a symbol. CHECK_EQ(img.result.definedSymbols.size(), Uptr(1)); } // ===================================================================== // Mach-O x86-64 tests // ===================================================================== static void testMachOX64Unsigned64(TEST_STATE_PARAM) { std::vector code(8, 0); code.push_back(0xC3); TestMachOReloc rel = {0, makeMachORelocInfo(0, false, 3, true, X86_64_RELOC_UNSIGNED)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU64(p), U64(nearImportedAddress)); } static void testMachOX64Unsigned32(TEST_STATE_PARAM) { std::vector code(4, 0); code.push_back(0xC3); TestMachOReloc rel = {0, makeMachORelocInfo(0, false, 2, true, X86_64_RELOC_UNSIGNED)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU32(p), U32(nearImportedAddress)); } static void testMachOX64SignedNear(TEST_STATE_PARAM) { // Code bytes at fixup: I32 addend. Implementation: addend + 4. // Set to -4 (0xFFFFFFFC) so net addend = 0. std::vector code = {0xFC, 0xFF, 0xFF, 0xFF, 0xC3}; TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, X86_64_RELOC_SIGNED)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; // value = sym + addend + 4 = sym + (-4) + 4 = sym // delta = value - (fixupAddr + 4) = sym - fixupAddr - 4 I32 expected = I32(Iptr(img.nearAddr) - Iptr(fixupAddr) - 4); CHECK_EQ(readI32(p), expected); } static void testMachOX64SignedFar(TEST_STATE_PARAM) { std::vector code = {0xFC, 0xFF, 0xFF, 0xFF, 0xC3}; TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, X86_64_RELOC_SIGNED)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // Verify stub was created (FF 25 pattern) I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; const U8* stub = reinterpret_cast(fixupAddr + 4 + disp); CHECK_EQ(stub[0], U8(0xFF)); CHECK_EQ(stub[1], U8(0x25)); } static void testMachOX64Branch(TEST_STATE_PARAM) { std::vector code = {0xFC, 0xFF, 0xFF, 0xFF, 0xC3}; TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, X86_64_RELOC_BRANCH)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; I32 expected = I32(Iptr(img.nearAddr) - Iptr(fixupAddr) - 4); CHECK_EQ(readI32(p), expected); } static void testMachOX64GotLoad(TEST_STATE_PARAM) { // Code GOT: addend = 0, RIP-relative. GOT entry at fixupAddr + 4 + disp. std::vector code = {0x00, 0x00, 0x00, 0x00, 0xC3}; TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, X86_64_RELOC_GOT_LOAD)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; const U8* gotEntry = reinterpret_cast(fixupAddr + 4 + disp); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } static void testMachOX64Got(TEST_STATE_PARAM) { // Code GOT: addend = 0, RIP-relative. GOT entry at fixupAddr + 4 + disp. std::vector code = {0x00, 0x00, 0x00, 0x00, 0xC3}; TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, X86_64_RELOC_GOT)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; const U8* gotEntry = reinterpret_cast(fixupAddr + 4 + disp); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } static void testMachOX64GotDataPcRel(TEST_STATE_PARAM) { // Data GOT (e.g. eh_frame personality pointer): addend = 4 (LLVM's pcrel compensation), // pure pcrel (not RIP-relative). GOT entry at fixupAddr + disp (no +4). std::vector code = {0x04, 0x00, 0x00, 0x00, 0xC3}; TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, X86_64_RELOC_GOT)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; // For data pcrel (DW_EH_PE_pcrel), the reference point is the fixup itself (no +4). const U8* gotEntry = reinterpret_cast(fixupAddr + disp); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } // Parameterized SIGNED_1/2/4 test static void testMachOX64SignedVariant(TEST_STATE_PARAM, U32 relocType, I64 extraAddend) { // Inline addend = -(extraAddend) so that net = 0 I32 inlineAddend = I32(-extraAddend); std::vector code(4, 0); memcpy(code.data(), &inlineAddend, 4); code.push_back(0xC3); TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, relocType)}; auto obj = makeMachOObject(CPU_TYPE_X86_64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr fixupAddr = img.result.definedSymbols[0].address; // value = sym + inlineAddend + extraAddend = sym + 0 = sym // delta = value - (fixupAddr + 4) = sym - fixupAddr - 4 I32 expected = I32(Iptr(img.nearAddr) - Iptr(fixupAddr) - 4); CHECK_EQ(readI32(p), expected); } static void testMachOX64Signed1(TEST_STATE_PARAM) { testMachOX64SignedVariant(TEST_STATE_ARG, X86_64_RELOC_SIGNED_1, 5); } static void testMachOX64Signed2(TEST_STATE_PARAM) { testMachOX64SignedVariant(TEST_STATE_ARG, X86_64_RELOC_SIGNED_2, 6); } static void testMachOX64Signed4(TEST_STATE_PARAM) { testMachOX64SignedVariant(TEST_STATE_ARG, X86_64_RELOC_SIGNED_4, 8); } // ===================================================================== // Mach-O AArch64 tests // ===================================================================== static void testMachOARM64Unsigned64(TEST_STATE_PARAM) { std::vector code(8, 0); auto padded = arm64Code({ret}); code.insert(code.end(), padded.begin(), padded.end()); TestMachOReloc rel = {0, makeMachORelocInfo(0, false, 3, true, ARM64_RELOC_UNSIGNED)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel}, {"imported"}); auto imports = makeNearImportMap(nearImportedAddress); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); CHECK_EQ(readU64(p), U64(nearImportedAddress)); } static void testMachOARM64Branch26Near(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_BRANCH26)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); CHECK_EQ(insn & 0xFC000000, U32(0x94000000)); I32 imm26 = I32(insn << 6) >> 6; Uptr target = img.result.definedSymbols[0].address + Uptr(I64(imm26) * 4); CHECK_EQ(target, img.nearAddr); } static void testMachOARM64Branch26Far(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_BRANCH26)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel}, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); I32 imm26 = I32(insn << 6) >> 6; const U8* stub = p + I64(imm26) * 4; CHECK_EQ(readU32(stub), U32(0x58000050)); // LDR X16, [PC, #8] CHECK_EQ(readU32(stub + 4), U32(0xD61F0200)); // BR X16 CHECK_EQ(readU64(stub + 8), farImportedAddress); } static void testMachOARM64Page21AndPageOff12Add(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, addX0X0Imm0, ret}); TestMachOReloc rel0 = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_PAGE21)}; TestMachOReloc rel1 = {4, makeMachORelocInfo(0, false, 2, true, ARM64_RELOC_PAGEOFF12)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel0, rel1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 addInsn = readU32(p + 4); U32 imm12 = (addInsn >> 10) & 0xFFF; CHECK_EQ(imm12, U32(img.nearAddr & 0xFFF)); } static void testMachOARM64Page21AndPageOff12Ldr(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, ldrX0X0Imm0, ret}); TestMachOReloc rel0 = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_PAGE21)}; TestMachOReloc rel1 = {4, makeMachORelocInfo(0, false, 2, true, ARM64_RELOC_PAGEOFF12)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel0, rel1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 ldrInsn = readU32(p + 4); U32 imm12 = (ldrInsn >> 10) & 0xFFF; CHECK_EQ(imm12, U32((img.nearAddr & 0xFFF) >> 3)); } static void testMachOARM64GotLoadPage21AndPageOff12(TEST_STATE_PARAM) { auto code = arm64Code({adrpX0, ldrX0X0Imm0, ret}); TestMachOReloc rel0 = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_GOT_LOAD_PAGE21)}; TestMachOReloc rel1 = {4, makeMachORelocInfo(0, false, 2, true, ARM64_RELOC_GOT_LOAD_PAGEOFF12)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel0, rel1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); CHECK_EQ(img.result.definedSymbols.size(), Uptr(1)); } static void testMachOARM64PointerToGotPcRel(TEST_STATE_PARAM) { auto code = arm64Code({0, ret}); TestMachOReloc rel = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_POINTER_TO_GOT)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {rel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); // I32 at fixup = gotEntry - fixupAddr I32 disp = readI32(p); Uptr fixupAddr = img.result.definedSymbols[0].address; const U8* gotEntry = reinterpret_cast(fixupAddr + disp); CHECK_EQ(readU64(gotEntry), U64(img.nearAddr)); } static void testMachOARM64Addend(TEST_STATE_PARAM) { auto code = arm64Code({blTarget0, ret}); // ADDEND reloc provides addend for next reloc. r_info symbolnum field = addend value. TestMachOReloc addendRel = {0, makeMachORelocInfo(4, false, 0, false, ARM64_RELOC_ADDEND)}; TestMachOReloc branchRel = {0, makeMachORelocInfo(0, true, 2, true, ARM64_RELOC_BRANCH26)}; auto obj = makeMachOObject(CPU_TYPE_ARM64, code, {addendRel, branchRel}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); U32 insn = readU32(p); I32 imm26 = I32(insn << 6) >> 6; Uptr target = img.result.definedSymbols[0].address + Uptr(I64(imm26) * 4); // Target should be img.nearAddr + 4 (the addend) CHECK_EQ(target, img.nearAddr + 4); } // ===================================================================== // Mach-O compact unwind multi-page test // ===================================================================== // Build a Mach-O object with __text and __LD,__compact_unwind sections. // Each compact_unwind entry is 32 bytes: {U64 funcStart, U32 length, U32 encoding, // U64 personality, U64 lsda}. The funcStart fields need X86_64_RELOC_UNSIGNED // relocations to resolve to the function addresses in __text. static std::vector makeMachOObjectWithCompactUnwind(U32 cputype, const std::vector& code, U32 numFunctions, U32 funcSize) { U32 codeSize = U32(code.size()); U32 cuEntrySize = 32; U32 cuDataSize = numFunctions * cuEntrySize; U32 numCuRelocs = numFunctions; // one UNSIGNED reloc per entry (for funcStart) // String table: "\0_func\0" std::vector strtab; strtab.push_back(0); U32 funcStrOffset = U32(strtab.size()); for(char c : std::string("_func")) { strtab.push_back(U8(c)); } strtab.push_back(0); U32 numSymbols = 1; // just the func symbol U32 cuRelocSize = numCuRelocs * U32(sizeof(TestMachOReloc)); U32 symtabSize = numSymbols * U32(sizeof(NList64)); U32 strtabSize = U32(strtab.size()); U32 numSections = 2; // __text + __compact_unwind U32 dataStart = U32(sizeof(MachHeader64) + sizeof(SegmentCommand64) + numSections * sizeof(TestMachOSection64) + sizeof(TestSymtabCommand)); U32 codeOff = dataStart; U32 cuDataOff = codeOff + codeSize; U32 cuRelocOff = cuDataOff + cuDataSize; U32 symtabOff = cuRelocOff + cuRelocSize; U32 strtabOff = symtabOff + symtabSize; ArrayOutputStream stream; // Mach-O header MachHeader64 hdr = {}; hdr.magic = MH_MAGIC_64; hdr.cputype = cputype; hdr.filetype = 1; // MH_OBJECT hdr.ncmds = 2; // LC_SEGMENT_64 + LC_SYMTAB hdr.sizeofcmds = U32(sizeof(SegmentCommand64) + numSections * sizeof(TestMachOSection64) + sizeof(TestSymtabCommand)); write(stream, hdr); // LC_SEGMENT_64 SegmentCommand64 seg = {}; seg.cmd = LC_SEGMENT_64; seg.cmdsize = U32(sizeof(SegmentCommand64) + numSections * sizeof(TestMachOSection64)); seg.vmsize = codeSize + cuDataSize; seg.fileoff = codeOff; seg.filesize = codeSize + cuDataSize; seg.maxprot = 7; seg.initprot = 7; seg.nsects = numSections; write(stream, seg); // Section 0: __text TestMachOSection64 textSect = {}; memcpy(textSect.sectname, "__text", 6); memcpy(textSect.segname, "__TEXT", 6); textSect.size = codeSize; textSect.offset = codeOff; textSect.align = 2; textSect.flags = S_ATTR_PURE_INSTRUCTIONS; write(stream, textSect); // Section 1: __compact_unwind (exactly 16 chars, fills the field) TestMachOSection64 cuSect = {}; memcpy(cuSect.sectname, "__compact_unwind", 16); memcpy(cuSect.segname, "__LD\0\0\0\0\0\0\0\0\0\0\0\0", 16); cuSect.addr = codeSize; // starts after __text in VM cuSect.size = cuDataSize; cuSect.offset = cuDataOff; cuSect.align = 3; // 2^3 = 8 byte alignment cuSect.reloff = cuRelocOff; cuSect.nreloc = numCuRelocs; write(stream, cuSect); // LC_SYMTAB TestSymtabCommand symcmd = {}; symcmd.cmd = LC_SYMTAB; symcmd.cmdsize = sizeof(TestSymtabCommand); symcmd.symoff = symtabOff; symcmd.nsyms = numSymbols; symcmd.stroff = strtabOff; symcmd.strsize = strtabSize; write(stream, symcmd); // Code bytes serializeBytes(stream, code.data(), code.size()); // Compact unwind entries U32 dwarfEncoding = (cputype == CPU_TYPE_ARM64) ? 0x03000000 : 0x04000000; for(U32 i = 0; i < numFunctions; ++i) { U64 funcStart = U64(i) * funcSize; // section-relative, will be relocated U32 funcLength = funcSize; U32 encoding = dwarfEncoding; U64 personality = 0; U64 lsda = 0; write(stream, funcStart); write(stream, funcLength); write(stream, encoding); write(stream, personality); write(stream, lsda); } // Relocations for compact unwind entries (X86_64_RELOC_UNSIGNED on funcStart field) U32 relocType = (cputype == CPU_TYPE_ARM64) ? ARM64_RELOC_UNSIGNED : X86_64_RELOC_UNSIGNED; for(U32 i = 0; i < numFunctions; ++i) { TestMachOReloc rel; rel.r_address = I32(i * cuEntrySize); // length=3 (8 bytes), pcrel=false, extern=false, symbolnum=section 1 (1-based __text) rel.r_info = makeMachORelocInfo(1, false, 3, false, relocType); write(stream, rel); } // Symbol table (one defined symbol) NList64 funcSym = {}; funcSym.n_strx = funcStrOffset; funcSym.n_type = N_SECT | N_EXT; funcSym.n_sect = 1; // 1-based section index for __text write(stream, funcSym); // String table serializeBytes(stream, strtab.data(), strtab.size()); return stream.getBytes(); } static void testMachOCompactUnwindMultiPage(TEST_STATE_PARAM) { // Create a Mach-O object with 600 functions (> 511 max per regular page). constexpr U32 numFunctions = 600; constexpr U32 funcSize = 4; // 4 bytes per function U32 codeSize = numFunctions * funcSize; // Fill code with RET instructions (0xC3 for x86-64, padded to funcSize). std::vector code(codeSize, 0xCC); // INT3 padding for(U32 i = 0; i < numFunctions; ++i) { code[i * funcSize] = 0xC3; } auto obj = makeMachOObjectWithCompactUnwind(CPU_TYPE_X86_64, code, numFunctions, funcSize); LinkedImage img; HashMap imports; img.link(obj.data(), obj.size(), imports); // Verify compact unwind info was synthesized. const U8* unwindInfo = img.result.unwindInfo.compactUnwind; CHECK_EQ(unwindInfo != nullptr, true); if(!unwindInfo) { return; } Uptr unwindInfoSize = img.result.unwindInfo.compactUnwindNumBytes; CHECK_EQ(unwindInfoSize > 0, true); // Parse header. CHECK_EQ(unwindInfoSize >= 28, true); U32 version = readU32(unwindInfo + 0); CHECK_EQ(version, U32(1)); U32 indexOff = readU32(unwindInfo + 20); U32 indexCount = readU32(unwindInfo + 24); // With 600 entries and max 511 per page, we need at least 2 pages + sentinel = 3. CHECK_EQ(indexCount >= U32(3), true); // Verify each second-level page has kind=2 (REGULAR) and entryCount <= 511. U32 totalEntries = 0; for(U32 i = 0; i + 1 < indexCount; ++i) { U32 pageOff = readU32(unwindInfo + indexOff + i * 12 + 4); CHECK_EQ(pageOff > 0, true); if(pageOff == 0 || pageOff + 8 > unwindInfoSize) { continue; } U32 pageKind = readU32(unwindInfo + pageOff); CHECK_EQ(pageKind, U32(2)); // REGULAR U16 entryCount = readU16(unwindInfo + pageOff + 6); CHECK_EQ(entryCount <= U16(511), true); totalEntries += entryCount; } // All entries accounted for. CHECK_EQ(totalEntries, numFunctions); // Sentinel entry should have pageOff=0. U32 sentinelPageOff = readU32(unwindInfo + indexOff + (indexCount - 1) * 12 + 4); CHECK_EQ(sentinelPageOff, U32(0)); } // ===================================================================== // Stub/GOT stress tests // ===================================================================== static void testX64StubCachingManyRelocs(TEST_STATE_PARAM) { // 1 far import, 8 REL32 relocs all to same target. All should share 1 stub. std::vector code(8 * 4 + 1, 0); // 8 fixup slots + ret code.back() = 0xC3; std::vector relocs; for(U32 i = 0; i < 8; ++i) { relocs.push_back({i * 4, 0, IMAGE_REL_AMD64_REL32}); } auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_AMD64, code, relocs, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr baseAddr = img.result.definedSymbols[0].address; // All 8 should resolve to the same stub. Verify first two match. I32 disp0 = readI32(p); I32 disp1 = readI32(p + 4); // stub address from slot 0: baseAddr + 4 + disp0 // stub address from slot 1: (baseAddr + 4) + 4 + disp1 Uptr stub0 = Uptr(Iptr(baseAddr) + 4 + disp0); Uptr stub1 = Uptr(Iptr(baseAddr + 4) + 4 + disp1); CHECK_EQ(stub0, stub1); } static void testX64StubMultipleTargets(TEST_STATE_PARAM) { // 3 far imports, 2 REL32 each. Should create 3 distinct stubs. std::vector code(6 * 4 + 1, 0); code.back() = 0xC3; std::vector relocs; relocs.push_back({0, 0, IMAGE_REL_AMD64_REL32}); // import 0 relocs.push_back({4, 0, IMAGE_REL_AMD64_REL32}); // import 0 relocs.push_back({8, 1, IMAGE_REL_AMD64_REL32}); // import 1 relocs.push_back({12, 1, IMAGE_REL_AMD64_REL32}); // import 1 relocs.push_back({16, 2, IMAGE_REL_AMD64_REL32}); // import 2 relocs.push_back({20, 2, IMAGE_REL_AMD64_REL32}); // import 2 auto obj = makeCOFFObject(IMAGE_FILE_MACHINE_AMD64, code, relocs, {"imp0", "imp1", "imp2"}); Uptr addr0 = 0x10000000000ull; Uptr addr1 = 0x20000000000ull; Uptr addr2 = 0x30000000000ull; auto imports = makeImportMap({{"imp0", addr0}, {"imp1", addr1}, {"imp2", addr2}}); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr base = img.result.definedSymbols[0].address; // Pairs targeting same import should share a stub. Uptr s0a = Uptr(Iptr(base + 0) + 4 + readI32(p + 0)); Uptr s0b = Uptr(Iptr(base + 4) + 4 + readI32(p + 4)); Uptr s1a = Uptr(Iptr(base + 8) + 4 + readI32(p + 8)); Uptr s2a = Uptr(Iptr(base + 16) + 4 + readI32(p + 16)); CHECK_EQ(s0a, s0b); // same import -> same stub CHECK_NE(s0a, s1a); // different imports -> different stubs CHECK_NE(s1a, s2a); } static void testARM64StubCachingManyRelocs(TEST_STATE_PARAM) { // 1 far import, 8 CALL26 relocs. std::vector insns; for(int i = 0; i < 8; ++i) { insns.push_back(blTarget0); } insns.push_back(ret); auto code = arm64Code(insns); std::vector relas; for(U32 i = 0; i < 8; ++i) { relas.push_back({U64(i * 4), ((U64)1 << 32) | R_AARCH64_CALL26, 0}); } auto obj = makeELFObject(EM_AARCH64, code, relas, {"imported"}); auto imports = makeFarImportMap(); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr base = img.result.definedSymbols[0].address; // All should reach the same stub. U32 insn0 = readU32(p); U32 insn1 = readU32(p + 4); I32 off0 = I32(insn0 << 6) >> 6; I32 off1 = I32(insn1 << 6) >> 6; Uptr stub0 = base + Uptr(I64(off0) * 4); Uptr stub1 = (base + 4) + Uptr(I64(off1) * 4); CHECK_EQ(stub0, stub1); } static void testGotCachingSameSymbol(TEST_STATE_PARAM) { // 1 import, 2 GOTPCREL relocs. Should share 1 GOT entry. std::vector code(8, 0); code.push_back(0xC3); Elf64_Rela rela0 = {0, ((U64)1 << 32) | R_X86_64_GOTPCREL, -4}; Elf64_Rela rela1 = {4, ((U64)1 << 32) | R_X86_64_GOTPCREL, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela0, rela1}, {"imported"}); LinkedImage img; auto imports = makeNearImportMap(img.nearAddr); img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr base = img.result.definedSymbols[0].address; Uptr got0 = Uptr(Iptr(base + 0) + 4 + readI32(p + 0)); Uptr got1 = Uptr(Iptr(base + 4) + 4 + readI32(p + 4)); CHECK_EQ(got0, got1); // same symbol -> same GOT entry } static void testGotMultipleSymbols(TEST_STATE_PARAM) { // 3 imports, 1 GOTPCREL each. 3 distinct GOT entries. std::vector code(12, 0); code.push_back(0xC3); // sym indices: imp0=1, imp1=2, imp2=3 (0=null) Elf64_Rela rela0 = {0, ((U64)1 << 32) | R_X86_64_GOTPCREL, -4}; Elf64_Rela rela1 = {4, ((U64)2 << 32) | R_X86_64_GOTPCREL, -4}; Elf64_Rela rela2 = {8, ((U64)3 << 32) | R_X86_64_GOTPCREL, -4}; auto obj = makeELFObject(EM_X86_64, code, {rela0, rela1, rela2}, {"imp0", "imp1", "imp2"}); auto imports = makeImportMap( {{"imp0", Uptr(0x1000)}, {"imp1", Uptr(0x2000)}, {"imp2", Uptr(0x3000)}}); LinkedImage img; img.link(obj.data(), obj.size(), imports); const U8* p = getCodePtr(img); Uptr base = img.result.definedSymbols[0].address; Uptr got0 = Uptr(Iptr(base + 0) + 4 + readI32(p + 0)); Uptr got1 = Uptr(Iptr(base + 4) + 4 + readI32(p + 4)); Uptr got2 = Uptr(Iptr(base + 8) + 4 + readI32(p + 8)); CHECK_NE(got0, got1); CHECK_NE(got1, got2); CHECK_EQ(readU64(reinterpret_cast(got0)), U64(0x1000)); CHECK_EQ(readU64(reinterpret_cast(got1)), U64(0x2000)); CHECK_EQ(readU64(reinterpret_cast(got2)), U64(0x3000)); } } // anonymous namespace I32 execObjectLinkerTest(int argc, char** argv) { WAVM_SUPPRESS_UNUSED(argc); WAVM_SUPPRESS_UNUSED(argv); TEST_STATE_LOCAL; Timing::Timer timer; // COFF x86-64 testCOFFX64Addr64(TEST_STATE_ARG); testCOFFX64Addr32NB(TEST_STATE_ARG); testCOFFX64Rel32Near(TEST_STATE_ARG); testCOFFX64Rel32Far(TEST_STATE_ARG); testCOFFX64Rel32_1(TEST_STATE_ARG); testCOFFX64Rel32_2(TEST_STATE_ARG); testCOFFX64Rel32_3(TEST_STATE_ARG); testCOFFX64Rel32_4(TEST_STATE_ARG); testCOFFX64Rel32_5(TEST_STATE_ARG); testCOFFX64Section(TEST_STATE_ARG); testCOFFX64SecRel(TEST_STATE_ARG); // COFF ARM64 (existing) testCOFFARM64OutOfRangePageOffset12A(TEST_STATE_ARG); testCOFFARM64OutOfRangePageOffset12L(TEST_STATE_ARG); testCOFFARM64OutOfRangePageOffset12LWithAddend(TEST_STATE_ARG); testCOFFARM64OutOfRangePageOffset12LStore(TEST_STATE_ARG); testCOFFARM64OutOfRangePageOffset12L32Bit(TEST_STATE_ARG); // COFF ARM64 (new) testCOFFARM64Addr64(TEST_STATE_ARG); testCOFFARM64Addr32NB(TEST_STATE_ARG); testCOFFARM64Branch26Near(TEST_STATE_ARG); testCOFFARM64Branch26Far(TEST_STATE_ARG); testCOFFARM64PagebaseAndAddNear(TEST_STATE_ARG); testCOFFARM64PagebaseAndLdstNear(TEST_STATE_ARG); testCOFFARM64SecRel(TEST_STATE_ARG); testCOFFARM64Section(TEST_STATE_ARG); testCOFFARM64SecRelLow12A(TEST_STATE_ARG); testCOFFARM64SecRelHigh12A(TEST_STATE_ARG); testCOFFARM64SecRelLow12L(TEST_STATE_ARG); // ELF x86-64 testELFX64Abs64(TEST_STATE_ARG); testELFX64Abs32(TEST_STATE_ARG); testELFX64Abs32S(TEST_STATE_ARG); testELFX64PC32Near(TEST_STATE_ARG); testELFX64PC32Far(TEST_STATE_ARG); testELFX64PLT32(TEST_STATE_ARG); testELFX64PC64(TEST_STATE_ARG); testELFX64GotPcRel(TEST_STATE_ARG); testELFX64GotPcRelX(TEST_STATE_ARG); testELFX64RexGotPcRelX(TEST_STATE_ARG); // ELF AArch64 testELFARM64Abs64(TEST_STATE_ARG); testELFARM64Abs32(TEST_STATE_ARG); testELFARM64Prel64(TEST_STATE_ARG); testELFARM64Prel32(TEST_STATE_ARG); testELFARM64Call26Near(TEST_STATE_ARG); testELFARM64Call26Far(TEST_STATE_ARG); testELFARM64Jump26Near(TEST_STATE_ARG); testELFARM64AdrpAndAddLo12(TEST_STATE_ARG); testELFARM64Ldst8Lo12(TEST_STATE_ARG); testELFARM64Ldst16Lo12(TEST_STATE_ARG); testELFARM64Ldst32Lo12(TEST_STATE_ARG); testELFARM64Ldst64Lo12(TEST_STATE_ARG); testELFARM64Ldst128Lo12(TEST_STATE_ARG); testELFARM64MovwG0(TEST_STATE_ARG); testELFARM64MovwG0NC(TEST_STATE_ARG); testELFARM64MovwG1(TEST_STATE_ARG); testELFARM64MovwG1NC(TEST_STATE_ARG); testELFARM64MovwG2(TEST_STATE_ARG); testELFARM64MovwG2NC(TEST_STATE_ARG); testELFARM64MovwG3(TEST_STATE_ARG); testELFARM64GotPage(TEST_STATE_ARG); // Mach-O x86-64 testMachOX64Unsigned64(TEST_STATE_ARG); testMachOX64Unsigned32(TEST_STATE_ARG); testMachOX64SignedNear(TEST_STATE_ARG); testMachOX64SignedFar(TEST_STATE_ARG); testMachOX64Branch(TEST_STATE_ARG); testMachOX64GotLoad(TEST_STATE_ARG); testMachOX64Got(TEST_STATE_ARG); testMachOX64GotDataPcRel(TEST_STATE_ARG); testMachOX64Signed1(TEST_STATE_ARG); testMachOX64Signed2(TEST_STATE_ARG); testMachOX64Signed4(TEST_STATE_ARG); // Mach-O AArch64 testMachOARM64Unsigned64(TEST_STATE_ARG); testMachOARM64Branch26Near(TEST_STATE_ARG); testMachOARM64Branch26Far(TEST_STATE_ARG); testMachOARM64Page21AndPageOff12Add(TEST_STATE_ARG); testMachOARM64Page21AndPageOff12Ldr(TEST_STATE_ARG); testMachOARM64GotLoadPage21AndPageOff12(TEST_STATE_ARG); testMachOARM64PointerToGotPcRel(TEST_STATE_ARG); testMachOARM64Addend(TEST_STATE_ARG); // Mach-O compact unwind testMachOCompactUnwindMultiPage(TEST_STATE_ARG); // Stub/GOT stress tests testX64StubCachingManyRelocs(TEST_STATE_ARG); testX64StubMultipleTargets(TEST_STATE_ARG); testARM64StubCachingManyRelocs(TEST_STATE_ARG); testGotCachingSameSymbol(TEST_STATE_ARG); testGotMultipleSymbols(TEST_STATE_ARG); Timing::logTimer("ObjectLinkerTest", timer); return testState.exitCode(); } ================================================ FILE: Programs/wavm/Testing/TestUtils.h ================================================ #pragma once #include #include #include #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/FloatComponents.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/I128.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Logging/Logging.h" namespace WAVM { namespace Testing { // Holds test state including failure count struct TestState { int numFailures = 0; bool failed() const { return numFailures > 0; } int exitCode() const { return numFailures > 0 ? 1 : 0; } }; // Default testToString for arithmetic types template inline std::enable_if_t, std::string> testToString(T value) { return std::to_string(value); } inline std::string testToString(const std::string& value) { return value; } inline std::string testToString(bool value) { return value ? "true" : "false"; } inline std::string testToString(F32 value) { FloatComponents c; c.value = value; TruncatingFixedStringBuilder<128> sb; sb.appendf("%g (sign=%u exp=0x%02x sig=0x%06x)", (double)value, (unsigned)c.bits.sign, (unsigned)c.bits.exponent, (unsigned)c.bits.significand); return sb.toString(); } inline std::string testToString(F64 value) { FloatComponents c; c.value = value; TruncatingFixedStringBuilder<128> sb; sb.appendf("%g (sign=%u exp=0x%03x sig=0x%013" PRIx64 ")", value, (unsigned)c.bits.sign, (unsigned)c.bits.exponent, (U64)c.bits.significand); return sb.toString(); } inline std::string testToString(I128 value) { // Build decimal representation char decBuf[48]; // 39 digits + sign + null ToCharsResult result = toChars(decBuf, decBuf + sizeof(decBuf) - 1, value); *result.writeEnd = '\0'; // Get the two 64-bit words U64 low = U64(value & I128(U64(0xFFFFFFFFFFFFFFFF))); I128 high128 = value >> I128(64); U64 high = U64(high128 & I128(U64(0xFFFFFFFFFFFFFFFF))); // Return "decimal (high:low)" // 41 characters: " (0x" + 16 hex + ":0x" + 16 hex + ")\0" FixedStringBuilder<48> sb; sb.appendf(" (0x%" PRIx64 ":0x%" PRIx64 ")", high, low); return std::string(decBuf) + sb.c_str(); } // testToString for pointers (non-null vs null) template inline std::enable_if_t, std::string> testToString(T value) { if(value == nullptr) { return "(null)"; } else { return "(non-null)"; } } // Generic check function: calls pred(args...) and reports failure // Prints: file(line): FAIL: expr\n followed by format with testToString(args)... template bool check(TestState& state, Predicate pred, const char* file, int line, const char* expr, const char* format, Args&&... args) { if(!pred(args...)) { Log::printf(Log::error, "%s(%d): FAIL: %s\n", file, line, expr); Log::printf(Log::error, format, testToString(args).c_str()...); ++state.numFailures; return false; } return true; } // Infrastructure for tracking object lifetimes and copy/move operations struct TrackedValueRealm; struct HeapValue : std::enable_shared_from_this { enum class Provenance { DefaultConstructed, CopyConstructed, MoveConstructed, CopyAssigned, MoveAssigned }; Uptr value; Provenance provenance; std::shared_ptr source; TrackedValueRealm& realm; bool destroyed = false; private: HeapValue(TrackedValueRealm& r, Uptr v, Provenance p, std::shared_ptr src) : value(v), provenance(p), source(std::move(src)), realm(r) { } public: static std::shared_ptr create(TrackedValueRealm& realm, Uptr value, Provenance p, std::shared_ptr src = nullptr); // Follow the source chain through moves to find the underlying HeapValue std::shared_ptr elideMoves() { std::shared_ptr current = shared_from_this(); while(current && current->provenance == Provenance::MoveConstructed) { current = current->source; } return current; } }; struct TrackedValueRealm { std::set, std::owner_less>> liveObjects; ~TrackedValueRealm() { WAVM_ASSERT(allDestroyed()); } bool allDestroyed() const { for(const auto& wp : liveObjects) { if(!wp.expired()) { return false; } } return true; } }; inline std::shared_ptr HeapValue::create(TrackedValueRealm& realm, Uptr value, Provenance p, std::shared_ptr src) { auto ptr = std::shared_ptr(new HeapValue(realm, value, p, std::move(src))); realm.liveObjects.insert(ptr); return ptr; } struct TrackedValue { std::shared_ptr heapValue; TrackedValue(TrackedValueRealm& realm, Uptr value) : heapValue(HeapValue::create(realm, value, HeapValue::Provenance::DefaultConstructed)) { } TrackedValue(const TrackedValue& other) : heapValue(HeapValue::create(other.heapValue->realm, other.heapValue->value, HeapValue::Provenance::CopyConstructed, other.heapValue)) { } TrackedValue(TrackedValue&& other) noexcept : heapValue(HeapValue::create(other.heapValue->realm, other.heapValue->value, HeapValue::Provenance::MoveConstructed, other.heapValue)) { } ~TrackedValue() { WAVM_ASSERT(!heapValue->destroyed); heapValue->destroyed = true; } TrackedValue& operator=(const TrackedValue& other) { heapValue = HeapValue::create(heapValue->realm, other.heapValue->value, HeapValue::Provenance::CopyAssigned, other.heapValue); return *this; } TrackedValue& operator=(TrackedValue&& other) noexcept { heapValue = HeapValue::create(heapValue->realm, other.heapValue->value, HeapValue::Provenance::MoveAssigned, other.heapValue); return *this; } bool operator==(const TrackedValue& other) const { return heapValue->value == other.heapValue->value; } }; inline std::string testToString(HeapValue::Provenance p) { switch(p) { case HeapValue::Provenance::DefaultConstructed: return "DefaultConstructed"; case HeapValue::Provenance::CopyConstructed: return "CopyConstructed"; case HeapValue::Provenance::MoveConstructed: return "MoveConstructed"; case HeapValue::Provenance::CopyAssigned: return "CopyAssigned"; case HeapValue::Provenance::MoveAssigned: return "MoveAssigned"; default: return "Unknown"; } } }} // Hash specialization for TrackedValue (must be in WAVM namespace) namespace WAVM { template<> struct Hash { Uptr operator()(const Testing::TrackedValue& v, Uptr seed = 0) const { return Hash()(v.heapValue->value, seed); } }; } // Macros for TestState declaration and passing #define TEST_STATE_PARAM WAVM::Testing::TestState& testState #define TEST_STATE_ARG testState #define TEST_STATE_LOCAL WAVM::Testing::TestState testState // Macros that capture expression text and source location // These require a TestState variable named 'testState' in scope #define CHECK_EQ(actual, expected) \ WAVM::Testing::check( \ testState, \ [](auto&& a, auto&& b) { return a == b; }, \ __FILE__, \ __LINE__, \ "CHECK_EQ(" #actual ", " #expected ")", \ " " #actual ": %s\n " #expected ": %s\n", \ actual, \ expected) #define CHECK_NE(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return x != y; }, \ __FILE__, \ __LINE__, \ "CHECK_NE(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_LT(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return x < y; }, \ __FILE__, \ __LINE__, \ "CHECK_LT(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_LE(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return x <= y; }, \ __FILE__, \ __LINE__, \ "CHECK_LE(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_GT(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return x > y; }, \ __FILE__, \ __LINE__, \ "CHECK_GT(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_GE(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return x >= y; }, \ __FILE__, \ __LINE__, \ "CHECK_GE(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_NOT_LT(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return !(x < y); }, \ __FILE__, \ __LINE__, \ "CHECK_NOT_LT(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_NOT_LE(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return !(x <= y); }, \ __FILE__, \ __LINE__, \ "CHECK_NOT_LE(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_NOT_GT(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return !(x > y); }, \ __FILE__, \ __LINE__, \ "CHECK_NOT_GT(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_NOT_GE(a, b) \ WAVM::Testing::check( \ testState, \ [](auto&& x, auto&& y) { return !(x >= y); }, \ __FILE__, \ __LINE__, \ "CHECK_NOT_GE(" #a ", " #b ")", \ " " #a ": %s\n " #b ": %s\n", \ a, \ b) #define CHECK_TRUE(expr) \ WAVM::Testing::check( \ testState, \ [](bool v) { return v; }, \ __FILE__, \ __LINE__, \ "CHECK_TRUE(" #expr ")", \ " " #expr ": %s\n", \ static_cast(expr)) #define CHECK_FALSE(expr) \ WAVM::Testing::check( \ testState, \ [](bool v) { return !v; }, \ __FILE__, \ __LINE__, \ "CHECK_FALSE(" #expr ")", \ " " #expr ": %s\n", \ static_cast(expr)) #define CHECK_NULL(expr) \ WAVM::Testing::check( \ testState, \ [](auto* p) { return p == nullptr; }, \ __FILE__, \ __LINE__, \ "CHECK_NULL(" #expr ")", \ " " #expr ": %s\n", \ expr) #define CHECK_NOT_NULL(expr) \ WAVM::Testing::check( \ testState, \ [](auto* p) { return p != nullptr; }, \ __FILE__, \ __LINE__, \ "CHECK_NOT_NULL(" #expr ")", \ " " #expr ": %s\n", \ expr) ================================================ FILE: Programs/wavm/Testing/wavm-test.cpp ================================================ #include "wavm-test.h" #include #include #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/Config.h" #include "WAVM/Logging/Logging.h" using namespace WAVM; enum class TestCommand { invalid, dumpModules, hashMap, hashSet, i128, leb128, #if WAVM_ENABLE_RUNTIME api, cAPI, benchmark, dwarf, objectLinker, script, #endif }; static const char* getTestCommandListHelpText() { return "TestCommands:\n" #if WAVM_ENABLE_RUNTIME " api Test the C++ Runtime API\n" " c-api Test the C API\n" #endif " dumpmodules Dump WAST/WASM modules from WAST test scripts\n" #if WAVM_ENABLE_RUNTIME " dwarf Test DWARF parser\n" #endif " hashmap Test HashMap\n" " hashset Test HashSet\n" " i128 Test I128\n" " leb128 Test LEB128 serialization\n" #if WAVM_ENABLE_RUNTIME " objectlinker Test ObjectLinker\n" " benchmark Benchmark WAVM\n" " script Run WAST test scripts\n" #endif ; } void showTestHelp(Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm test [command arguments]\n" "\n" "%s", getTestCommandListHelpText()); } static TestCommand parseTestCommand(const char* string) { if(!strcmp(string, "dumpmodules")) { return TestCommand::dumpModules; } else if(!strcmp(string, "hashmap")) { return TestCommand::hashMap; } else if(!strcmp(string, "hashset")) { return TestCommand::hashSet; } else if(!strcmp(string, "i128")) { return TestCommand::i128; } else if(!strcmp(string, "leb128")) { return TestCommand::leb128; } #if WAVM_ENABLE_RUNTIME else if(!strcmp(string, "api")) { return TestCommand::api; } else if(!strcmp(string, "c-api")) { return TestCommand::cAPI; } else if(!strcmp(string, "benchmark")) { return TestCommand::benchmark; } else if(!strcmp(string, "dwarf")) { return TestCommand::dwarf; } else if(!strcmp(string, "objectlinker")) { return TestCommand::objectLinker; } else if(!strcmp(string, "script")) { return TestCommand::script; } #endif else { return TestCommand::invalid; } } int execTestCommand(int argc, char** argv) { if(argc < 1) { showTestHelp(Log::Category::error); return EXIT_FAILURE; } else { const TestCommand command = parseTestCommand(argv[0]); switch(command) { case TestCommand::dumpModules: return execDumpTestModules(argc - 1, argv + 1); case TestCommand::hashMap: return execHashMapTest(argc - 1, argv + 1); case TestCommand::hashSet: return execHashSetTest(argc - 1, argv + 1); case TestCommand::i128: return execI128Test(argc - 1, argv + 1); case TestCommand::leb128: return execLEB128Test(argc - 1, argv + 1); #if WAVM_ENABLE_RUNTIME case TestCommand::api: return execAPITest(argc - 1, argv + 1); case TestCommand::cAPI: return execCAPITest(argc - 1, argv + 1); case TestCommand::benchmark: return execBenchmark(argc - 1, argv + 1); case TestCommand::dwarf: return execDWARFTest(argc - 1, argv + 1); case TestCommand::objectLinker: return execObjectLinkerTest(argc - 1, argv + 1); case TestCommand::script: return execRunTestScript(argc - 1, argv + 1); #endif case TestCommand::invalid: Log::printf(Log::error, "Invalid command: %s\n" "\n" "%s", argv[0], getTestCommandListHelpText()); return EXIT_FAILURE; default: WAVM_UNREACHABLE(); }; } } ================================================ FILE: Programs/wavm/Testing/wavm-test.h ================================================ #pragma once #include "WAVM/Inline/Config.h" int execDumpTestModules(int argc, char** argv); int execHashMapTest(int argc, char** argv); int execHashSetTest(int argc, char** argv); int execI128Test(int argc, char** argv); int execLEB128Test(int argc, char** argv); #if WAVM_ENABLE_RUNTIME int execAPITest(int argc, char** argv); int execBenchmark(int argc, char** argv); int execDWARFTest(int argc, char** argv); int execObjectLinkerTest(int argc, char** argv); int execRunTestScript(int argc, char** argv); #ifdef __cplusplus extern "C" #endif int execCAPITest(int argc, char** argv); #endif ================================================ FILE: Programs/wavm/wavm-assemble.cpp ================================================ #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Logging/Logging.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" #include "wavm.h" using namespace WAVM; static bool loadTextModuleFromFile(const char* filename, IR::Module& outModule) { std::vector wastBytes; if(!loadFile(filename, wastBytes)) { return false; } // Make sure the WAST is null terminated. wastBytes.push_back(0); std::vector parseErrors; if(WAST::parseModule((const char*)wastBytes.data(), wastBytes.size(), outModule, parseErrors)) { return true; } else { Log::printf(Log::error, "Error parsing WebAssembly text file:\n"); reportParseErrors(filename, (const char*)wastBytes.data(), parseErrors); return false; } } void showAssembleHelp(Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm assemble [options] in.wast out.wasm\n" " -n|--omit-names Omits WAST names from the output\n" " --enable Enable the specified feature. See the list of supported\n" " features below.\n" "\n" "Features:\n" "%s" "\n", getFeatureListHelpText().c_str()); } int execAssembleCommand(int argc, char** argv) { const char* inputFilename = nullptr; const char* outputFilename = nullptr; bool omitNames = false; IR::FeatureSpec featureSpec; for(Iptr argIndex = 0; argIndex < argc; ++argIndex) { if(!strcmp(argv[argIndex], "-n") || !strcmp(argv[argIndex], "--omit-names")) { omitNames = true; } else if(!strcmp(argv[argIndex], "--enable")) { ++argIndex; if(!argv[argIndex]) { Log::printf(Log::error, "Expected feature name following '--enable'.\n"); return false; } if(!parseAndSetFeature(argv[argIndex], featureSpec, true)) { Log::printf(Log::error, "Unknown feature '%s'. Supported features:\n" "%s" "\n", argv[argIndex], getFeatureListHelpText().c_str()); return false; } } else if(!inputFilename) { inputFilename = argv[argIndex]; } else if(!outputFilename) { outputFilename = argv[argIndex]; } else { Log::printf(Log::error, "Unrecognized argument: %s\n", argv[argIndex]); showDisassembleHelp(Log::error); return EXIT_FAILURE; } } if(!inputFilename || !outputFilename) { showAssembleHelp(Log::error); return EXIT_FAILURE; } // Load the WAST module. IR::Module module(featureSpec); if(!loadTextModuleFromFile(inputFilename, module)) { return EXIT_FAILURE; } // If the command-line switch to omit names was specified, strip the name section. if(omitNames) { for(auto sectionIt = module.customSections.begin(); sectionIt != module.customSections.end(); ++sectionIt) { if(sectionIt->name == "name") { module.customSections.erase(sectionIt); break; } } } // Serialize the WASM module. Timing::Timer saveTimer; std::vector wasmBytes = WASM::saveBinaryModule(module); Timing::logRatePerSecond( "Serialized WASM", saveTimer, wasmBytes.size() / 1024.0 / 1024.0, "MiB"); // Write the serialized data to the output file. return saveFile(outputFilename, wasmBytes.data(), wasmBytes.size()) ? EXIT_SUCCESS : EXIT_FAILURE; } ================================================ FILE: Programs/wavm/wavm-compile.cpp ================================================ #include #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Timing.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/CPU.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" #include "wavm.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; bool loadTextOrBinaryModule(const char* filename, IR::Module& outModule) { // Read the specified file into an array. std::vector fileBytes; if(!loadFile(filename, fileBytes)) { return false; } // If the file starts with the WASM binary magic number, load it as a binary irModule. if(fileBytes.size() >= sizeof(WASM::magicNumber) && !memcmp(fileBytes.data(), WASM::magicNumber, sizeof(WASM::magicNumber))) { WASM::LoadError loadError; if(WASM::loadBinaryModule(fileBytes.data(), fileBytes.size(), outModule, &loadError)) { return true; } else { Log::printf(Log::error, "%s\n", loadError.message.c_str()); return false; } } else { // Make sure the WAST file is null terminated. fileBytes.push_back(0); // Load it as a text irModule. std::vector parseErrors; if(!WAST::parseModule( (const char*)fileBytes.data(), fileBytes.size(), outModule, parseErrors)) { Log::printf(Log::error, "Error parsing WebAssembly text file:\n"); WAST::reportParseErrors(filename, (const char*)fileBytes.data(), parseErrors); return false; } return true; } } static const char* getOutputFormatHelpText() { return " unoptimized-llvmir Unoptimized LLVM IR for the input module.\n" " optimized-llvmir Optimized LLVM IR for the input module.\n" " object The target platform's native object file format.\n" " assembly The target platform's native assembly format.\n" " precompiled-wasm (default) The original WebAssembly module with object code\n" " embedded in the wavm.precompiled_object section.\n"; } static std::string getCPUFeatureHelpText() { std::string result; const char* separator; result += " x86: "; separator = ""; #define VISIT_FEATURE(fieldName, cliName) \ result += separator; \ result += cliName; \ separator = ", "; WAVM_ENUM_X86_CPU_FEATURES(VISIT_FEATURE) #undef VISIT_FEATURE result += "\n"; result += " aarch64: "; separator = ""; #define VISIT_FEATURE(fieldName, cliName) \ result += separator; \ result += cliName; \ separator = ", "; WAVM_ENUM_AARCH64_CPU_FEATURES(VISIT_FEATURE) #undef VISIT_FEATURE result += "\n"; return result; } void showCompileHelp(Log::Category outputCategory) { LLVMJIT::TargetSpec hostTargetSpec = LLVMJIT::getHostTargetSpec(); Log::printf(outputCategory, "Usage: wavm compile [options] \n" " --target-arch Set the target architecture (x86_64, aarch64)\n" " --target-os Set the target OS (linux, macos, windows)\n" " --target-cpu Set the target CPU (default: %s)\n" " --target-cpu-feature Comma-separated CPU features with +/- prefix.\n" " e.g. --target-cpu-feature +sse4.1,+avx,-avx512f\n" " --enable Enable the specified feature. See the list of\n" " supported features below.\n" " --format= Specifies the format of the output file. See the\n" " list of supported output formats below.\n" "\n" "Output formats:\n" "%s" "\n" "CPU features:\n" "%s" "\n" "WebAssembly features:\n" "%s" "\n", hostTargetSpec.cpu.c_str(), getOutputFormatHelpText(), getCPUFeatureHelpText().c_str(), getFeatureListHelpText().c_str()); } enum class OutputFormat { unspecified, precompiledModule, unoptimizedLLVMIR, optimizedLLVMIR, object, assembly, }; static bool parseArch(const char* str, LLVMJIT::TargetArch& outArch) { if(!strcmp(str, "x86_64")) { outArch = LLVMJIT::TargetArch::x86_64; return true; } if(!strcmp(str, "aarch64")) { outArch = LLVMJIT::TargetArch::aarch64; return true; } return false; } static bool parseOS(const char* str, LLVMJIT::TargetOS& outOS) { if(!strcmp(str, "linux")) { outOS = LLVMJIT::TargetOS::linux_; return true; } if(!strcmp(str, "macos")) { outOS = LLVMJIT::TargetOS::macos; return true; } if(!strcmp(str, "windows")) { outOS = LLVMJIT::TargetOS::windows; return true; } return false; } int execCompileCommand(int argc, char** argv) { const char* inputFilename = nullptr; const char* outputFilename = nullptr; bool useHostTargetSpec = true; LLVMJIT::TargetSpec targetSpec; const char* cpuFeatureStr = nullptr; IR::FeatureSpec featureSpec; OutputFormat outputFormat = OutputFormat::unspecified; for(int argIndex = 0; argIndex < argc; ++argIndex) { const char* suffix = nullptr; if(!strcmp(argv[argIndex], "--target-arch")) { if(argIndex + 1 == argc) { Log::printf(Log::error, "Expected architecture following '--target-arch'.\n"); return EXIT_FAILURE; } ++argIndex; if(!parseArch(argv[argIndex], targetSpec.arch)) { Log::printf(Log::error, "Unknown architecture '%s'. Use x86_64 or aarch64.\n", argv[argIndex]); return EXIT_FAILURE; } useHostTargetSpec = false; } else if(!strcmp(argv[argIndex], "--target-os")) { if(argIndex + 1 == argc) { Log::printf(Log::error, "Expected OS following '--target-os'.\n"); return EXIT_FAILURE; } ++argIndex; if(!parseOS(argv[argIndex], targetSpec.os)) { Log::printf( Log::error, "Unknown OS '%s'. Use linux, macos, or windows.\n", argv[argIndex]); return EXIT_FAILURE; } useHostTargetSpec = false; } else if(!strcmp(argv[argIndex], "--target-cpu")) { if(argIndex + 1 == argc) { Log::printf(Log::error, "Expected target CPU name following '--target-cpu'.\n"); return EXIT_FAILURE; } ++argIndex; targetSpec.cpu = argv[argIndex]; useHostTargetSpec = false; } else if(!strcmp(argv[argIndex], "--target-cpu-feature")) { if(argIndex + 1 == argc) { Log::printf(Log::error, "Expected feature spec following '--target-cpu-feature'.\n"); return EXIT_FAILURE; } ++argIndex; cpuFeatureStr = argv[argIndex]; useHostTargetSpec = false; } else if(!strcmp(argv[argIndex], "--enable")) { ++argIndex; if(argIndex == argc) { Log::printf(Log::error, "Expected feature name following '--enable'.\n"); return EXIT_FAILURE; } if(!parseAndSetFeature(argv[argIndex], featureSpec, true)) { Log::printf(Log::error, "Unknown feature '%s'.\n", argv[argIndex]); return EXIT_FAILURE; } } else if(stringStartsWith(argv[argIndex], "--format=", suffix)) { if(outputFormat != OutputFormat::unspecified) { Log::printf(Log::error, "'--format=' may only occur once on the command line.\n"); return EXIT_FAILURE; } const char* formatString = suffix; if(!strcmp(formatString, "precompiled-wasm")) { outputFormat = OutputFormat::precompiledModule; } else if(!strcmp(formatString, "unoptimized-llvmir")) { outputFormat = OutputFormat::unoptimizedLLVMIR; } else if(!strcmp(formatString, "optimized-llvmir")) { outputFormat = OutputFormat::optimizedLLVMIR; } else if(!strcmp(formatString, "object")) { outputFormat = OutputFormat::object; } else if(!strcmp(formatString, "assembly")) { outputFormat = OutputFormat::assembly; } else { Log::printf(Log::error, "Invalid output format '%s'. Supported output formats:\n" "%s" "\n", formatString, getOutputFormatHelpText()); return EXIT_FAILURE; } } else if(!inputFilename) { inputFilename = argv[argIndex]; } else if(!outputFilename) { outputFilename = argv[argIndex]; } else { Log::printf(Log::error, "Unrecognized argument: %s\n", argv[argIndex]); showCompileHelp(Log::error); return EXIT_FAILURE; } } if(!inputFilename || !outputFilename) { showCompileHelp(Log::error); return EXIT_FAILURE; } if(useHostTargetSpec) { targetSpec = LLVMJIT::getHostTargetSpec(); } if(cpuFeatureStr) { auto setFeature = [&](const std::string& name, bool enable) { bool found = false; auto trySet = [&](const char* featureName, auto& value) { if(!found && name == featureName) { value = enable; found = true; } }; if(targetSpec.arch == LLVMJIT::TargetArch::x86_64) { targetSpec.x86FeatureOverrides.forEachFeature(trySet); } else if(targetSpec.arch == LLVMJIT::TargetArch::aarch64) { targetSpec.aarch64FeatureOverrides.forEachFeature(trySet); } return found; }; if(!parseFeatureSpec(cpuFeatureStr, setFeature)) { return EXIT_FAILURE; } } // Validate the target. switch(LLVMJIT::validateTarget(targetSpec, featureSpec)) { case LLVMJIT::TargetValidationResult::valid: break; case LLVMJIT::TargetValidationResult::invalidTargetSpec: Log::printf(Log::error, "Target spec (cpu=%s) is invalid.\n", targetSpec.cpu.c_str()); return EXIT_FAILURE; case LLVMJIT::TargetValidationResult::unsupportedArchitecture: Log::printf(Log::error, "WAVM doesn't support the target architecture.\n"); return EXIT_FAILURE; case LLVMJIT::TargetValidationResult::x86CPUDoesNotSupportSSE41: Log::printf(Log::error, "Target X86 CPU (%s) does not support SSE 4.1, which" " WAVM requires for WebAssembly SIMD code.\n", targetSpec.cpu.c_str()); return EXIT_FAILURE; case LLVMJIT::TargetValidationResult::wavmDoesNotSupportSIMDOnArch: Log::printf(Log::error, "WAVM does not support SIMD on the target CPU architecture.\n"); return EXIT_FAILURE; case LLVMJIT::TargetValidationResult::memory64Requires64bitTarget: Log::printf(Log::error, "Target CPU (%s) does not support 64-bit memories.\n", targetSpec.cpu.c_str()); return EXIT_FAILURE; case LLVMJIT::TargetValidationResult::table64Requires64bitTarget: Log::printf(Log::error, "Target CPU (%s) does not support 64-bit tables.\n", targetSpec.cpu.c_str()); return EXIT_FAILURE; default: WAVM_UNREACHABLE(); }; if(outputFormat == OutputFormat::unspecified) { outputFormat = OutputFormat::precompiledModule; } // Load the module IR. IR::Module irModule(featureSpec); if(!loadTextOrBinaryModule(inputFilename, irModule)) { return EXIT_FAILURE; } switch(outputFormat) { case OutputFormat::precompiledModule: { // Compile the module to object code. std::vector objectCode = LLVMJIT::compileModule(irModule, targetSpec); // Extract the compiled object code and add it to the IR module as a user section. irModule.customSections.push_back(CustomSection{ OrderedSectionID::moduleBeginning, "wavm.precompiled_object", std::move(objectCode)}); // Serialize the WASM module. Timing::Timer saveTimer; std::vector wasmBytes = WASM::saveBinaryModule(irModule); Timing::logRatePerSecond( "Serialized WASM", saveTimer, wasmBytes.size() / 1024.0 / 1024.0, "MiB"); // Write the serialized data to the output file. return saveFile(outputFilename, wasmBytes.data(), wasmBytes.size()) ? EXIT_SUCCESS : EXIT_FAILURE; } case OutputFormat::object: { // Compile the module to object code. std::vector objectCode = LLVMJIT::compileModule(irModule, targetSpec); // Write the object code to the output file. return saveFile(outputFilename, objectCode.data(), objectCode.size()) ? EXIT_SUCCESS : EXIT_FAILURE; } case OutputFormat::assembly: { // Compile the module to object code. std::vector objectCode = LLVMJIT::compileModule(irModule, targetSpec); // Disassemble the object code. std::string disassembly = LLVMJIT::disassembleObject(targetSpec, objectCode); // Write the disassembly to the output file. return saveFile(outputFilename, disassembly.data(), disassembly.size()) ? EXIT_SUCCESS : EXIT_FAILURE; } case OutputFormat::optimizedLLVMIR: case OutputFormat::unoptimizedLLVMIR: { // Compile the module to LLVM IR. std::string llvmIR = LLVMJIT::emitLLVMIR( irModule, targetSpec, outputFormat == OutputFormat::optimizedLLVMIR); // Write the LLVM IR to the output file. return saveFile(outputFilename, llvmIR.data(), llvmIR.size()) ? EXIT_SUCCESS : EXIT_FAILURE; } case OutputFormat::unspecified: default: WAVM_UNREACHABLE(); }; } ================================================ FILE: Programs/wavm/wavm-disassemble.cpp ================================================ #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Logging/Logging.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTPrint/WASTPrint.h" #include "wavm.h" using namespace WAVM; static bool loadBinaryModuleFromFile(const char* filename, IR::Module& outModule, Log::Category errorCategory = Log::error) { std::vector wasmBytes; if(!loadFile(filename, wasmBytes)) { return false; } WASM::LoadError loadError; if(WASM::loadBinaryModule(wasmBytes.data(), wasmBytes.size(), outModule, &loadError)) { return true; } else { Log::printf(Log::error, "%s\n", loadError.message.c_str()); return false; } } void showDisassembleHelp(Log::Category outputCategory) { Log::printf(Log::error, "Usage: wavm disassemble [options] in.wasm [out.wast]\n" " --enable Enable the specified feature. See the list of supported\n" " features below.\n" "\n" "Features:\n" "%s" "\n", getFeatureListHelpText().c_str()); } int execDisassembleCommand(int argc, char** argv) { const char* inputFilename = nullptr; const char* outputFilename = nullptr; IR::FeatureSpec featureSpec; for(int argIndex = 0; argIndex < argc; ++argIndex) { if(!strcmp(argv[argIndex], "--enable")) { ++argIndex; if(!argv[argIndex]) { Log::printf(Log::error, "Expected feature name following '--enable'.\n"); return false; } if(!parseAndSetFeature(argv[argIndex], featureSpec, true)) { Log::printf(Log::error, "Unknown feature '%s'. Supported features:\n" "%s" "\n", argv[argIndex], getFeatureListHelpText().c_str()); return false; } } else if(!inputFilename) { inputFilename = argv[argIndex]; } else if(!outputFilename) { outputFilename = argv[argIndex]; } else { Log::printf(Log::error, "Unrecognized argument: %s\n", argv[argIndex]); showDisassembleHelp(Log::error); return EXIT_FAILURE; } } if(!inputFilename) { showDisassembleHelp(Log::error); return EXIT_FAILURE; } // Load the WASM file. IR::Module module(featureSpec); if(!loadBinaryModuleFromFile(inputFilename, module)) { return EXIT_FAILURE; } // Print the module to WAST. Timing::Timer printTimer; const std::string wastString = WAST::print(module); Timing::logRatePerSecond( "Printed WAST", printTimer, F64(wastString.size()) / 1024.0 / 1024.0, "MiB"); if(!outputFilename) { Log::printf(Log::output, "%s", wastString.c_str()); } else { // Write the serialized data to the output file. if(!saveFile(outputFilename, wastString.data(), wastString.size())) { return EXIT_FAILURE; } } return EXIT_SUCCESS; } ================================================ FILE: Programs/wavm/wavm-run.cpp ================================================ #include #include #include #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Types.h" #include "WAVM/IR/Validate.h" #include "WAVM/IR/Value.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Inline/Hash.h" #include "WAVM/Inline/Timing.h" #include "WAVM/Inline/Version.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #include "WAVM/ObjectCache/ObjectCache.h" #include "WAVM/Platform/Defines.h" #include "WAVM/Platform/File.h" #include "WAVM/Platform/Memory.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #include "WAVM/VFS/SandboxFS.h" #include "WAVM/WASI/WASI.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" #include "wavm.h" using namespace WAVM; using namespace WAVM::IR; using namespace WAVM::Runtime; static bool loadTextOrBinaryModule(const char* filename, std::vector&& fileBytes, const IR::FeatureSpec& featureSpec, ModuleRef& outModule) { // If the file starts with the WASM binary magic number, load it as a binary module. if(fileBytes.size() >= sizeof(WASM::magicNumber) && !memcmp(fileBytes.data(), WASM::magicNumber, sizeof(WASM::magicNumber))) { WASM::LoadError loadError; if(Runtime::loadBinaryModule( fileBytes.data(), fileBytes.size(), outModule, featureSpec, &loadError)) { return true; } else { Log::printf(Log::error, "Error loading WebAssembly binary file: %s\n", loadError.message.c_str()); return false; } } else { // Make sure the WAST file is null terminated. fileBytes.push_back(0); // Parse the module text format to IR. std::vector parseErrors; IR::Module irModule(featureSpec); if(!WAST::parseModule( (const char*)fileBytes.data(), fileBytes.size(), irModule, parseErrors)) { Log::printf(Log::error, "Error parsing WebAssembly text file:\n"); WAST::reportParseErrors(filename, (const char*)fileBytes.data(), parseErrors); return false; } // Compile the IR. outModule = Runtime::compileModule(irModule); return true; } } static bool loadPrecompiledModule(std::vector&& fileBytes, const IR::FeatureSpec& featureSpec, ModuleRef& outModule) { IR::Module irModule(featureSpec); // Deserialize the module IR from the binary format. WASM::LoadError loadError; if(!WASM::loadBinaryModule(fileBytes.data(), fileBytes.size(), irModule, &loadError)) { Log::printf( Log::error, "Error loading WebAssembly binary file: %s\n", loadError.message.c_str()); return false; } // Check for a precompiled object section. const CustomSection* precompiledObjectSection = nullptr; for(const CustomSection& customSection : irModule.customSections) { if(customSection.name == "wavm.precompiled_object") { precompiledObjectSection = &customSection; break; } } if(!precompiledObjectSection) { Log::printf(Log::error, "Input file did not contain 'wavm.precompiled_object' section.\n"); return false; } else { // Load the IR + precompiled object code as a runtime module. outModule = Runtime::loadPrecompiledModule(irModule, precompiledObjectSection->data); return true; } } static void reportLinkErrors(const LinkResult& linkResult) { Log::printf(Log::error, "Failed to link module:\n"); for(auto& missingImport : linkResult.missingImports) { Log::printf(Log::error, "Missing import: module=\"%s\" export=\"%s\" type=\"%s\"\n", missingImport.moduleName.c_str(), missingImport.exportName.c_str(), asString(missingImport.type).c_str()); } } static const char* getABIListHelpText() { return " none No ABI: bare virtual metal.\n" " wasi WebAssembly System Interface ABI.\n"; } void showRunHelp(Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm run [options] [program arguments]\n" " The WebAssembly module (.wast/.wasm) to run\n" " [program arguments] The arguments to pass to the WebAssembly function\n" "\n" "Options:\n" " --function= Specify function name to run in module (default:main)\n" " --precompiled Use precompiled object code in program file\n" " --nocache Don't use the WAVM object cache\n" " --enable Enable the specified feature. See the list of supported\n" " features below.\n" " --abi= Specifies the ABI used by the WASM module. See the list\n" " of supported ABIs below. The default is to detect the\n" " ABI based on the module imports/exports.\n" " --mount-root Mounts as the WASI root directory\n" " --wasi-trace= Sets the level of WASI tracing:\n" " - syscalls\n" " - syscalls-with-callstacks\n" "\n" "ABIs:\n" "%s" "\n" "Features:\n" "%s" "\n", getABIListHelpText(), getFeatureListHelpText().c_str()); } static std::string getFilenameAndExtension(const char* path) { const char* filenameBegin = path; for(Uptr charIndex = 0; path[charIndex]; ++charIndex) { if(path[charIndex] == '/' || path[charIndex] == '\\' || path[charIndex] == ':') { filenameBegin = path + charIndex + 1; } } return std::string(filenameBegin); } enum class ABI { detect, bare, wasi }; struct State { IR::FeatureSpec featureSpec; // Command-line options. const char* filename = nullptr; const char* functionName = nullptr; const char* rootMountPath = nullptr; std::vector runArgs; ABI abi = ABI::detect; bool precompiled = false; bool allowCaching = true; WASI::SyscallTraceLevel wasiTraceLavel = WASI::SyscallTraceLevel::none; // Objects that need to be cleaned up before exiting. GCPointer compartment = createCompartment(); std::shared_ptr wasiProcess; std::shared_ptr sandboxFS; ~State() { wasiProcess.reset(); WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartment))); } bool parseCommandLineAndEnvironment(char** argv) { char** nextArg = argv; while(*nextArg) { const char* suffix = nullptr; if(stringStartsWith(*nextArg, "--function=", suffix)) { if(functionName) { Log::printf(Log::error, "'--function=' may only occur once on the command line.\n"); return false; } functionName = suffix; } else if(stringStartsWith(*nextArg, "--abi=", suffix)) { if(abi != ABI::detect) { Log::printf(Log::error, "'--abi=' may only occur once on the command line.\n"); return false; } const char* abiString = suffix; if(!strcmp(abiString, "bare")) { abi = ABI::bare; } else if(!strcmp(abiString, "wasi")) { abi = ABI::wasi; } else { Log::printf(Log::error, "Unknown ABI '%s'. Supported ABIs:\n" "%s" "\n", abiString, getABIListHelpText()); return false; } } else if(!strcmp(*nextArg, "--enable")) { ++nextArg; if(!*nextArg) { Log::printf(Log::error, "Expected feature name following '--enable'.\n"); return false; } if(!parseAndSetFeature(*nextArg, featureSpec, true)) { Log::printf(Log::error, "Unknown feature '%s'. Supported features:\n" "%s" "\n", *nextArg, getFeatureListHelpText().c_str()); return false; } } else if(!strcmp(*nextArg, "--precompiled")) { precompiled = true; } else if(!strcmp(*nextArg, "--nocache")) { allowCaching = false; } else if(!strcmp(*nextArg, "--mount-root")) { if(rootMountPath) { Log::printf(Log::error, "'--mount-root' may only occur once on the command line.\n"); return false; } ++nextArg; if(!*nextArg) { Log::printf(Log::error, "Expected path following '--mount-root'.\n"); return false; } rootMountPath = *nextArg; } else if(stringStartsWith(*nextArg, "--wasi-trace=", suffix)) { if(wasiTraceLavel != WASI::SyscallTraceLevel::none) { Log::printf(Log::error, "--wasi-trace=' may only occur once on the command line.\n"); return false; } const char* levelString = suffix; if(!strcmp(levelString, "syscalls")) { wasiTraceLavel = WASI::SyscallTraceLevel::syscalls; } else if(!strcmp(levelString, "syscalls-with-callstacks")) { wasiTraceLavel = WASI::SyscallTraceLevel::syscallsWithCallstacks; } else { Log::printf(Log::error, "Invalid WASI trace level: %s\n", levelString); return false; } } else if((*nextArg)[0] != '-') { filename = *nextArg; ++nextArg; break; } else { Log::printf(Log::error, "Unknown command-line argument: '%s'\n", *nextArg); showRunHelp(Log::error); return false; } ++nextArg; } if(!filename) { showRunHelp(Log::error); return false; } while(*nextArg) { runArgs.push_back(*nextArg++); }; // Check that the requested features are supported by the host CPU. switch(LLVMJIT::validateTarget(LLVMJIT::getHostTargetSpec(), featureSpec)) { case LLVMJIT::TargetValidationResult::valid: break; case LLVMJIT::TargetValidationResult::unsupportedArchitecture: Log::printf(Log::error, "Host architecture is not supported by WAVM."); return false; case LLVMJIT::TargetValidationResult::x86CPUDoesNotSupportSSE41: Log::printf(Log::error, "Host X86 CPU does not support SSE 4.1, which" " WAVM requires for WebAssembly SIMD code.\n"); return false; case LLVMJIT::TargetValidationResult::wavmDoesNotSupportSIMDOnArch: Log::printf(Log::error, "WAVM does not support SIMD on the host CPU architecture.\n"); return false; case LLVMJIT::TargetValidationResult::memory64Requires64bitTarget: Log::printf(Log::error, "Host CPU does not support 64-bit memories.\n"); return false; case LLVMJIT::TargetValidationResult::table64Requires64bitTarget: Log::printf(Log::error, "Host CPU does not support 64-bit tables.\n"); return false; case LLVMJIT::TargetValidationResult::invalidTargetSpec: default: WAVM_UNREACHABLE(); }; const char* objectCachePath = WAVM_SCOPED_DISABLE_SECURE_CRT_WARNINGS(getenv("WAVM_OBJECT_CACHE_DIR")); if(allowCaching && objectCachePath && *objectCachePath) { Uptr maxBytes = 1024 * 1024 * 1024; const char* maxMegabytesEnv = WAVM_SCOPED_DISABLE_SECURE_CRT_WARNINGS(getenv("WAVM_OBJECT_CACHE_MAX_MB")); if(maxMegabytesEnv && *maxMegabytesEnv) { int maxMegabytes = atoi(maxMegabytesEnv); if(maxMegabytes <= 0) { Log::printf( Log::error, "Invalid object cache size \"%s\". Expected an integer greater than 1.", maxMegabytesEnv); return false; } maxBytes = Uptr(maxMegabytes) * 1000000; } // Calculate a "code key" that identifies the code involved in compiling WebAssembly to // object code in the cache. If recompiling the module would produce different object // code, the code key should be different, and if recompiling the module would produce // the same object code, the code key should be the same. LLVMJIT::Version llvmjitVersion = LLVMJIT::getVersion(); U64 codeKey = 0; codeKey = Hash()(llvmjitVersion.llvmMajor, codeKey); codeKey = Hash()(llvmjitVersion.llvmMinor, codeKey); codeKey = Hash()(llvmjitVersion.llvmPatch, codeKey); codeKey = Hash()(llvmjitVersion.llvmjitVersion, codeKey); codeKey = Hash()(WAVM_VERSION_MAJOR, codeKey); codeKey = Hash()(WAVM_VERSION_MINOR, codeKey); codeKey = Hash()(WAVM_VERSION_PATCH, codeKey); // Initialize the object cache. std::shared_ptr objectCache; ObjectCache::OpenResult openResult = ObjectCache::open(objectCachePath, maxBytes, codeKey, objectCache); switch(openResult) { case ObjectCache::OpenResult::doesNotExist: Log::printf( Log::error, "Object cache directory \"%s\" does not exist.\n", objectCachePath); return false; case ObjectCache::OpenResult::notDirectory: Log::printf(Log::error, "Object cache path \"%s\" does not refer to a directory.\n", objectCachePath); return false; case ObjectCache::OpenResult::notAccessible: Log::printf( Log::error, "Object cache path \"%s\" is not accessible.\n", objectCachePath); return false; case ObjectCache::OpenResult::invalidDatabase: Log::printf( Log::error, "Object cache database in \"%s\" is not valid.\n", objectCachePath); return false; case ObjectCache::OpenResult::tooManyReaders: Log::printf(Log::error, "Object cache database in \"%s\" has too many concurrent readers.\n", objectCachePath); return false; case ObjectCache::OpenResult::success: Runtime::setGlobalObjectCache(std::move(objectCache)); break; default: WAVM_UNREACHABLE(); }; } return true; } bool detectModuleABI(const IR::Module& irModule) { // Check whether the module has any WASI-specific imports. for(const auto& import : irModule.functions.imports) { const char* suffix = nullptr; if(stringStartsWith(import.moduleName.c_str(), "wasi_", suffix)) { Log::printf(Log::debug, "Module has WASI imports: using WASI ABI.\n"); abi = ABI::wasi; return true; } } Log::printf(Log::debug, "Module has no recognized imports: using bare ABI.\n"); abi = ABI::bare; return true; } bool initABIEnvironment(const IR::Module& irModule) { // If the user didn't specify an ABI on the command-line, try to detect it from the module. if(abi == ABI::detect && !detectModuleABI(irModule)) { return false; } // If a directory to mount as the root filesystem was passed on the command-line, create a // SandboxFS for it. if(rootMountPath) { if(abi != ABI::wasi) { Log::printf(Log::error, "--mount-root may only be used with the WASI ABI.\n"); return false; } std::string absoluteRootMountPath; if(rootMountPath[0] == '/' || rootMountPath[0] == '\\' || rootMountPath[0] == '~' || rootMountPath[1] == ':') { absoluteRootMountPath = rootMountPath; } else { absoluteRootMountPath = Platform::getCurrentWorkingDirectory() + '/' + rootMountPath; } sandboxFS = VFS::makeSandboxFS(&Platform::getHostFS(), absoluteRootMountPath); } if(abi == ABI::wasi) { std::vector args = runArgs; args.insert(args.begin(), getFilenameAndExtension(filename)); // Create the WASI process. wasiProcess = WASI::createProcess(compartment, std::move(args), {}, sandboxFS.get(), Platform::getStdFD(Platform::StdDevice::in), Platform::getStdFD(Platform::StdDevice::out), Platform::getStdFD(Platform::StdDevice::err)); } else if(abi == ABI::bare) { // Require that a function name to invoke is specified for bare ABI modules. if(!functionName) { Log::printf( Log::error, "You must specify the name of the function to invoke when running a bare ABI" " module. e.g. wavm run --abi=bare --function=main ...\n"); return false; } } if(wasiTraceLavel != WASI::SyscallTraceLevel::none) { if(abi != ABI::wasi) { Log::printf(Log::error, "--wasi-trace may only be used with the WASI ABI.\n"); return false; } WASI::setSyscallTraceLevel(wasiTraceLavel); } return true; } I32 execute(const IR::Module& irModule, Instance* instance) { // Create a WASM execution context. Context* context = Runtime::createContext(compartment); // Call the module start function, if it has one. Function* startFunction = getStartFunction(instance); if(startFunction) { invokeFunction(context, startFunction); } // Look up the function export to call, validate its type, and set up the invoke arguments. Function* function = nullptr; std::vector invokeArgs; WAVM_ASSERT(abi != ABI::bare || functionName); if(functionName) { function = asFunctionNullable(getInstanceExport(instance, functionName)); if(!function) { Log::printf(Log::error, "Module does not export '%s'\n", functionName); return EXIT_FAILURE; } const FunctionType functionType = getFunctionType(function); if(functionType.params().size() != runArgs.size()) { Log::printf(Log::error, "'%s' expects %" WAVM_PRIuPTR " argument(s), but command line had %" WAVM_PRIuPTR ".\n", functionName, Uptr(functionType.params().size()), Uptr(runArgs.size())); return EXIT_FAILURE; } for(Uptr argIndex = 0; argIndex < runArgs.size(); ++argIndex) { const std::string& argString = runArgs[argIndex]; Value value; switch(functionType.params()[argIndex]) { case ValueType::i32: value = (U32)atoi(argString.c_str()); break; case ValueType::i64: value = (U64)atol(argString.c_str()); break; case ValueType::f32: value = (F32)atof(argString.c_str()); break; case ValueType::f64: value = atof(argString.c_str()); break; case ValueType::v128: case ValueType::externref: case ValueType::funcref: Errors::fatalf("Cannot parse command-line argument for %s function parameter", asString(functionType.params()[argIndex])); case ValueType::none: case ValueType::any: default: WAVM_UNREACHABLE(); } invokeArgs.push_back(value); } } else if(abi == ABI::wasi) { // WASI calls a _start function with the signature ()->(). function = getTypedInstanceExport(instance, "_start", FunctionType()); if(!function) { Log::printf(Log::error, "WASM module doesn't export WASI _start function.\n"); return EXIT_FAILURE; } } WAVM_ASSERT(function); // Split the tagged argument values into their types and untagged values. std::vector invokeArgTypes; std::vector untaggedInvokeArgs; for(const Value& arg : invokeArgs) { invokeArgTypes.push_back(arg.type); untaggedInvokeArgs.push_back(arg); } // Infer the expected type of the function from the number and type of the invoke's // arguments and the function's actual result types. const FunctionType invokeSig(getFunctionType(function).results(), TypeTuple(invokeArgTypes)); // Allocate an array to receive the invoke results. std::vector untaggedInvokeResults; untaggedInvokeResults.resize(invokeSig.results().size()); // Invoke the function. invokeFunction( context, function, invokeSig, untaggedInvokeArgs.data(), untaggedInvokeResults.data()); if(untaggedInvokeResults.size() == 1 && invokeSig.results()[0] == ValueType::i32) { return untaggedInvokeResults[0].i32; } else { // Convert the untagged result values to tagged values. std::vector invokeResults; invokeResults.resize(invokeSig.results().size()); for(Uptr resultIndex = 0; resultIndex < untaggedInvokeResults.size(); ++resultIndex) { const ValueType resultType = invokeSig.results()[resultIndex]; const UntaggedValue& untaggedResult = untaggedInvokeResults[resultIndex]; invokeResults[resultIndex] = Value(resultType, untaggedResult); } Log::printf(Log::debug, "%s returned: %s\n", functionName ? functionName : "Module entry point", asString(invokeResults).c_str()); return EXIT_SUCCESS; } } int run(char** argv) { // Parse the command line. if(!parseCommandLineAndEnvironment(argv)) { return EXIT_FAILURE; } // Read the specified file into a byte array. std::vector fileBytes; if(!loadFile(filename, fileBytes)) { return EXIT_FAILURE; } // Load the module from the byte array Runtime::ModuleRef module = nullptr; if(precompiled) { if(!loadPrecompiledModule(std::move(fileBytes), featureSpec, module)) { return EXIT_FAILURE; } } else if(!loadTextOrBinaryModule(filename, std::move(fileBytes), featureSpec, module)) { return EXIT_FAILURE; } const IR::Module& irModule = Runtime::getModuleIR(module); // Initialize the ABI-specific environment. if(!initABIEnvironment(irModule)) { return EXIT_FAILURE; } // Link the module with the intrinsic modules. LinkResult linkResult; if(abi == ABI::wasi) { linkResult = linkModule(irModule, WASI::getProcessResolver(*wasiProcess)); } else if(abi == ABI::bare) { NullResolver nullResolver; linkResult = linkModule(irModule, nullResolver); } else { WAVM_UNREACHABLE(); } if(!linkResult.success) { reportLinkErrors(linkResult); return EXIT_FAILURE; } // Instantiate the module. Instance* instance = instantiateModule( compartment, module, std::move(linkResult.resolvedImports), filename); if(!instance) { return EXIT_FAILURE; } // Take the module's memory as the WASI process memory. if(abi == ABI::wasi) { Memory* memory = asMemoryNullable(getInstanceExport(instance, "memory")); if(!memory) { Log::printf(Log::error, "WASM module doesn't export WASI memory.\n"); return EXIT_FAILURE; } WASI::setProcessMemory(*wasiProcess, memory); } // Execute the program. Timing::Timer executionTimer; auto executeThunk = [&] { return execute(irModule, instance); }; int result; if(wasiProcess) { result = WASI::catchExit(std::move(executeThunk)); } else { result = executeThunk(); } Timing::logTimer("Executed program", executionTimer); // Log the peak memory usage. Uptr peakMemoryUsage = Platform::getPeakMemoryUsageBytes(); Log::printf( Log::metrics, "Peak memory usage: %" WAVM_PRIuPTR "KiB\n", peakMemoryUsage / 1024); return result; } int runAndCatchRuntimeExceptions(char** argv) { int result = EXIT_FAILURE; Runtime::catchRuntimeExceptions([&result, argv, this]() { result = run(argv); }, [](Runtime::Exception* exception) { // Treat any unhandled exception as a fatal error. Errors::fatalf("Runtime exception: %s", describeException(exception).c_str()); }); return result; } }; int execRunCommand(int argc, char** argv) { State state; return state.runAndCatchRuntimeExceptions(argv); } ================================================ FILE: Programs/wavm/wavm.cpp ================================================ #include "wavm.h" #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/StringBuilder.h" #include "WAVM/Inline/Version.h" #include "WAVM/Logging/Logging.h" #if WAVM_ENABLE_RUNTIME #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Platform/Error.h" #include "WAVM/Runtime/Runtime.h" #endif using namespace WAVM; enum class Command { invalid, assemble, disassemble, help, test, version, #if WAVM_ENABLE_RUNTIME compile, run, #endif }; static Command parseCommand(const char* string) { if(!strcmp(string, "assemble")) { return Command::assemble; } else if(!strcmp(string, "disassemble")) { return Command::disassemble; } else if(!strcmp(string, "help")) { return Command::help; } else if(!strcmp(string, "test")) { return Command::test; } else if(!strcmp(string, "version")) { return Command::version; } #if WAVM_ENABLE_RUNTIME else if(!strcmp(string, "compile")) { return Command::compile; } else if(!strcmp(string, "run")) { return Command::run; } #endif else { return Command::invalid; } } static const char* getCommandListHelpText() { return "Commands:\n" " assemble Assemble WAST/WAT to WASM\n" " disassemble Disassemble WASM to WAST/WAT\n" #if WAVM_ENABLE_RUNTIME " compile Compile a WebAssembly module\n" #endif " help Display help about command-line usage of WAVM\n" #if WAVM_ENABLE_RUNTIME " run Run a WebAssembly program\n" #endif " test Groups subcommands used to test WAVM\n" " version Display information about the WAVM version\n"; } std::string getFeatureListHelpText() { StringBuilder sb; auto formatFeature = [&sb](const char* name, const char* desc, bool isNonStandard) { sb.appendf(" %-23s %s %s\n", name, isNonStandard ? "*" : " ", desc); }; #define VISIT_STANDARD_FEATURE(_, name, desc) formatFeature(name, desc, false); #define VISIT_NONSTANDARD_FEATURE(_, name, desc) formatFeature(name, desc, true); WAVM_ENUM_STANDARD_FEATURES(VISIT_STANDARD_FEATURE) WAVM_ENUM_MATURE_FEATURES(VISIT_STANDARD_FEATURE) WAVM_ENUM_PROPOSED_FEATURES(VISIT_STANDARD_FEATURE) formatFeature("all-proposed", "All features proposed for standardization", false); formatFeature("", "", false); WAVM_ENUM_NONSTANDARD_FEATURES(VISIT_NONSTANDARD_FEATURE) formatFeature("", "", false); formatFeature("all", "All features supported by WAVM", true); #undef VISIT_STANDARD_FEATURE #undef VISIT_NONSTANDARD_FEATURE formatFeature("", "", false); formatFeature("", "Indicates a non-standard feature", true); return sb.moveToString(); } bool parseAndSetFeature(const char* featureName, IR::FeatureSpec& featureSpec, bool enable) { if(!strcmp(featureName, "all-proposed")) { #define VISIT_FEATURE(cName, ...) featureSpec.cName = true; WAVM_ENUM_STANDARD_FEATURES(VISIT_FEATURE) WAVM_ENUM_MATURE_FEATURES(VISIT_FEATURE) WAVM_ENUM_PROPOSED_FEATURES(VISIT_FEATURE) #undef VISIT_FEATURE return true; } if(!strcmp(featureName, "all")) { #define VISIT_FEATURE(cName, ...) featureSpec.cName = true; WAVM_ENUM_STANDARD_FEATURES(VISIT_FEATURE) WAVM_ENUM_MATURE_FEATURES(VISIT_FEATURE) WAVM_ENUM_PROPOSED_FEATURES(VISIT_FEATURE) WAVM_ENUM_NONSTANDARD_FEATURES(VISIT_FEATURE) #undef VISIT_FEATURE return true; } #define VISIT_FEATURE(cName, cliName, ...) \ if(!strcmp(featureName, cliName)) \ { \ featureSpec.cName = enable; \ return true; \ } WAVM_ENUM_PROPOSED_FEATURES(VISIT_FEATURE) WAVM_ENUM_NONSTANDARD_FEATURES(VISIT_FEATURE) WAVM_ENUM_MATURE_FEATURES(VISIT_FEATURE) WAVM_ENUM_STANDARD_FEATURES(VISIT_FEATURE) #undef VISIT_FEATURE return false; } static void showTopLevelHelp(Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm [command arguments]\n" "\n" "%s" "\n" "%s\n", getCommandListHelpText(), getEnvironmentVariableHelpText()); } static void showHelpHelp(Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm help \n" "\n" "%s", getCommandListHelpText()); } static int execHelpCommand(int argc, char** argv) { if(argc == 1) { const Command helpCommand = parseCommand(argv[0]); switch(helpCommand) { case Command::assemble: showAssembleHelp(Log::output); return EXIT_SUCCESS; case Command::disassemble: showDisassembleHelp(Log::output); return EXIT_SUCCESS; case Command::help: showHelpHelp(Log::output); return EXIT_SUCCESS; case Command::test: showTestHelp(Log::output); return EXIT_SUCCESS; case Command::version: showVersionHelp(Log::output); return EXIT_SUCCESS; #if WAVM_ENABLE_RUNTIME case Command::compile: showCompileHelp(Log::output); return EXIT_SUCCESS; case Command::run: showRunHelp(Log::output); return EXIT_SUCCESS; #endif case Command::invalid: Log::printf(Log::error, "Invalid command: %s\n" "\n" "%s", argv[0], getCommandListHelpText()); return EXIT_FAILURE; default: WAVM_UNREACHABLE(); }; } else { showHelpHelp(Log::error); return EXIT_FAILURE; } } void showVersionHelp(Log::Category outputCategory) { Log::printf(outputCategory, "Usage: wavm version\n"); } #define LOG_BUILD_CONFIG_BOOL(variable) \ Log::printf(Log::output, "%-30s %s\n", #variable ":", variable ? "true" : "false"); int execVersionCommand(int argc, char** argv) { if(argc != 0) { showVersionHelp(Log::error); return EXIT_FAILURE; } Log::printf(Log::output, "WAVM version %s\n", WAVM_VERSION_STRING); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_RUNTIME); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_STATIC_LINKING); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_ASAN); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_UBSAN); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_TSAN); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_LIBFUZZER); LOG_BUILD_CONFIG_BOOL(WAVM_ENABLE_RELEASE_ASSERTS); #if WAVM_ENABLE_RUNTIME LLVMJIT::Version llvmVersion = LLVMJIT::getVersion(); Log::printf(Log::output, "LLVM version: %" WAVM_PRIuPTR ".%" WAVM_PRIuPTR ".%" WAVM_PRIuPTR "\n", llvmVersion.llvmMajor, llvmVersion.llvmMinor, llvmVersion.llvmPatch); LLVMJIT::TargetSpec hostTargetSpec = LLVMJIT::getHostTargetSpec(); Log::printf( Log::output, "Host target: %s\n", asString(hostTargetSpec).c_str()); #endif return false; } int main(int argc, char** argv) { if(!initLogFromEnvironment()) { return EXIT_FAILURE; } #if WAVM_ENABLE_RUNTIME Platform::setErrorHandler(Runtime::handleError); #endif if(argc < 2) { showTopLevelHelp(Log::Category::error); return EXIT_FAILURE; } else { const Command command = parseCommand(argv[1]); switch(command) { case Command::assemble: return execAssembleCommand(argc - 2, argv + 2); case Command::disassemble: return execDisassembleCommand(argc - 2, argv + 2); case Command::help: return execHelpCommand(argc - 2, argv + 2); case Command::test: return execTestCommand(argc - 2, argv + 2); case Command::version: return execVersionCommand(argc - 2, argv + 2); #if WAVM_ENABLE_RUNTIME case Command::compile: return execCompileCommand(argc - 2, argv + 2); case Command::run: return execRunCommand(argc - 2, argv + 2); #endif case Command::invalid: Log::printf(Log::error, "Invalid command: %s\n" "\n" "%s", argv[1], getCommandListHelpText()); return EXIT_FAILURE; default: WAVM_UNREACHABLE(); }; } } ================================================ FILE: Programs/wavm/wavm.h ================================================ #pragma once #include #include "WAVM/Logging/Logging.h" namespace WAVM { namespace IR { struct Module; struct FeatureSpec; }}; int execAssembleCommand(int argc, char** argv); int execDisassembleCommand(int argc, char** argv); int execTestCommand(int argc, char** argv); int execVersionCommand(int argc, char** argv); void showAssembleHelp(WAVM::Log::Category outputCategory); void showDisassembleHelp(WAVM::Log::Category outputCategory); void showTestHelp(WAVM::Log::Category outputCategory); void showVersionHelp(WAVM::Log::Category outputCategory); #if WAVM_ENABLE_RUNTIME int execCompileCommand(int argc, char** argv); int execRunCommand(int argc, char** argv); void showCompileHelp(WAVM::Log::Category outputCategory); void showRunHelp(WAVM::Log::Category outputCategory); #endif std::string getFeatureListHelpText(); bool parseAndSetFeature(const char* featureName, WAVM::IR::FeatureSpec& featureSpec, bool enable); ================================================ FILE: README.md ================================================ [![BSD license](https://img.shields.io/badge/license-BSD-green)](LICENSE.txt) [![GitHub repo](https://img.shields.io/badge/repo-github-green.svg)](https://github.com/WAVM/WAVM) [![Discord](https://img.shields.io/discord/484466837988573194)](https://discordapp.com/invite/fchkxFM) [![Build Status](https://github.com/WAVM/WAVM/actions/workflows/build.yml/badge.svg)](https://github.com/WAVM/WAVM/actions/workflows/build.yml) # WAVM [Getting Started](Doc/GettingStarted.md) | [Building WAVM from Source](Doc/Building.md) | [Exploring the WAVM source](Doc/CodeOrganization.md) ##### WAVM is a WebAssembly virtual machine, designed for use in non-browser applications. ### Fast WAVM uses [LLVM](https://llvm.org/) to compile WebAssembly code to machine code with close to native performance. It can even beat native performance in some cases, thanks to the ability to generate machine code tuned for the exact CPU that is running the code. WAVM also leverages virtual memory and signal handlers to execute WebAssembly's bounds-checked memory accesses at the same cost as a native, unchecked memory access. ### Safe WAVM prevents WebAssembly code from accessing state outside of WebAssembly virtual machine*, or calling native code that you do not explicitly link with the WebAssembly module. * WAVM is vulnerable to some side-channel attacks, such as Spectre variant 2. WAVM may add further mitigations for specific side-channel attacks, but it's impractical to guard against all such attacks. You should use another form of isolation, such as OS processes, to protect sensitive data from untrusted WebAssembly code. ### WebAssembly 1.0+ WAVM fully supports WebAssembly 1.0, plus many proposed extensions to it: * [WASI](https://github.com/WebAssembly/WASI) * [128-bit SIMD](https://github.com/WebAssembly/simd) * [Threads](https://github.com/WebAssembly/threads) * [Reference types](https://github.com/WebAssembly/reference-types) * [Multiple results and block parameters](https://github.com/WebAssembly/multi-value) * [Bulk memory operations](https://github.com/webassembly/bulk-memory-operations) * [Non-trapping float-to-int conversions](https://github.com/WebAssembly/nontrapping-float-to-int-conversions) * [Sign-extension instructions](https://github.com/WebAssembly/sign-extension-ops) * [Exception handling](https://github.com/WebAssembly/exception-handling) * [Extended name section](https://github.com/WebAssembly/extended-name-section) * [Multiple memories](https://github.com/WebAssembly/multi-memory) ### Portable WAVM is written in portable C/C++, with a small amount of architecture-specific assembly and LLVM IR generation code. WAVM is tested on and fully supports x86-64 and AArch64 on Windows, macOS, and Linux. All six platform/architecture combinations are tested in CI. It is designed to run on any POSIX-compatible system, but is not routinely tested on other systems. WAVM's runtime requires a 64-bit virtual address space, and so is not portable to 32-bit hosts. However, WAVM's assembler and disassembler work on 32-bit hosts. [Portability Matrix](Doc/PortabilityMatrix.md) ================================================ FILE: THIRD-PARTY.md ================================================ Third Party Software ==================== Parts of the I128 code are derived from LLVM's compiler-rt library (https://github.com/llvm/llvm-project/tree/master/compiler-rt), which is covered by the license in https://github.com/WAVM/WAVM/blob/master/Include/WAVM/Inline/Impl/I128Impl.LICENSE. The WebAssembly spec test suite (https://github.com/WAVM/WAVM/tree/master/Test/WebAssembly) are covered by the license in https://github.com/WAVM/WAVM/blob/master/Test/WebAssembly/LICENSE.txt. The libunwind library (https://github.com/WAVM/WAVM/tree/master/ThirdParty/libunwind) is covered by the license in https://github.com/WAVM/WAVM/blob/master/ThirdParty/libunwind/LICENSE.TXT. The liblmdb library (https://github.com/WAVM/WAVM/tree/master/ThirdParty/liblmdb) is covered by the license in https://github.com/WAVM/WAVM/blob/master/ThirdParty/liblmdb/LICENSE. The xxhash library (https://github.com/WAVM/WAVM/tree/master/Include/WAVM/Inline/xxhash) is covered by the license in https://github.com/WAVM/WAVM/blob/master/Include/WAVM/Inline/xxhash/LICENSE. The WASI ABI header (https://github.com/WAVM/WAVM/blob/master/Include/WAVM/WASI/WASIABI.h) is covered by the license in https://github.com/WAVM/WAVM/blob/master/Include/WAVM/WASI/WASIABI.LICENSE. The WAVM C API (https://github.com/WAVM/WAVM/blob/master/Include/WAVM/wavm-c/wavm-c.h) is based on wasm-c-api (https://github.com/WebAssembly/wasm-c-api), which is covered by the license in https://github.com/WAVM/WAVM/blob/master/Include/WAVM/wavm-c/wasm-c-api.LICENSE. The BLAKE2 library (https://github.com/WAVM/WAVM/tree/master/ThirdParty/BLAKE2) is covered by the license in https://github.com/WAVM/WAVM/blob/master/ThirdParty/BLAKE2/COPYING. ================================================ FILE: Test/CMakeLists.txt ================================================ if(WAVM_ENABLE_FUZZ_TARGETS) add_subdirectory(fuzz) endif() ================================================ FILE: Test/WebAssembly/LICENSE.txt ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Test/WebAssembly/memory64/address.wast ================================================ ;; Load i32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i32) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i32) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i32) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i32) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i32) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i32) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") (assert_invalid (module quote "(memory 1)" "(func (drop (i32.load offset=4294967296 (i32.const 0))))" ) "offset out of range" ) ;; Load i64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i32) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i32) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i32) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i32) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i32) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i32) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i32) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i32) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i32) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i32) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i32) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i32) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i32) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i32) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i32) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i32) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i32) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i32) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i32) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i32) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i32) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i32) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i32) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i32) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i32) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i32) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i32) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i32) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i32) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i32) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/memory64/address64.wast ================================================ ;; Load i32 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i64) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i64) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i64) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i64) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i64) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i64) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i64) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i64) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i64) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i64) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i64) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i64) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i64) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i64) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i64) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i64) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i64) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i64) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i64) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i64) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i64) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i64) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i64) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i64) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i64) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i64) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i64) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i64) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i64) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i64) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i64.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i64.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i64.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i64.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i64.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i64.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i64.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i64.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i64.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i64.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i64.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i64.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i64.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i64.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 1)) "out of bounds memory access") ;; Load i64 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i64) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i64) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i64) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i64) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i64) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i64) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i64) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i64) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i64) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i64) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i64) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i64) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i64) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i64) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i64) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i64) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i64) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i64) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i64) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i64) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i64) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i64) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i64) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i64) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i64) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i64) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i64) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i64) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i64) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i64) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i64) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i64) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i64) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i64) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i64) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i64) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i64) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i64) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i64) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i64) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i64) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i64) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i64.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i64.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i64.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i64.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i64.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i64.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i64.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i64.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i64.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i64.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i64.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i64.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i64.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i64.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i64.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i64.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i64.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i64.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i64) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i64) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i64) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i64) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i64) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i64) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i64.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i64.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i64.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i64.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i64.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i64.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i64) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i64) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i64) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i64) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i64) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i64) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i64.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i64.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i64.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i64.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i64.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i64.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 1)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/memory64/align.wast ================================================ ;; Test alignment annotation rules (module (memory 0) (func (drop (i32.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_s align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_u align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load align=8 (i32.const 0))))) (module (memory 0) (func (drop (f32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (f64.load align=8 (i32.const 0))))) (module (memory 0) (func (i32.store8 align=1 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store16 align=2 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store align=4 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i64.store8 align=1 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store16 align=2 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store32 align=4 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store align=8 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (f32.store align=4 (i32.const 0) (f32.const 1.0)))) (module (memory 0) (func (f64.store align=8 (i32.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store8 align=2 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store16 align=4 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store align=8 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store8 align=2 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store16 align=4 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store32 align=8 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f32.store align=8 (i32.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f64.store align=16 (i32.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i32.const 0) (local.get 1)) (local.set 2 (f32.load (i32.const 0))) (br $4) ) ;; default (f32.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i32.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i32.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i32.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i32.const 0) (local.get 1)) (local.set 2 (f64.load (i32.const 0))) (br $8) ) ;; default (f64.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i32.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i32.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i32.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i32.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i32.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i32.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i32.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i32.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i32.const 0) (local.get 2)) (local.set 3 (i32.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i32.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i32.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i32.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i32.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i32.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i32.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i32.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i32.const 0) (local.get 2)) (local.set 3 (i64.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i32.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory 1) (func (export "store") (param i32 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i32) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i32.const 65532)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/memory64/align64.wast ================================================ ;; Test alignment annotation rules (module (memory i64 0) (func (drop (i32.load8_s align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load8_u align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load16_s align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load16_u align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load8_s align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load8_u align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load16_s align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load16_u align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load32_s align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load32_u align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load align=8 (i64.const 0))))) (module (memory i64 0) (func (drop (f32.load align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (f64.load align=8 (i64.const 0))))) (module (memory i64 0) (func (i32.store8 align=1 (i64.const 0) (i32.const 1)))) (module (memory i64 0) (func (i32.store16 align=2 (i64.const 0) (i32.const 1)))) (module (memory i64 0) (func (i32.store align=4 (i64.const 0) (i32.const 1)))) (module (memory i64 0) (func (i64.store8 align=1 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (i64.store16 align=2 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (i64.store32 align=4 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (i64.store align=8 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (f32.store align=4 (i64.const 0) (f32.const 1.0)))) (module (memory i64 0) (func (f64.store align=8 (i64.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f32.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f32.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f64.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f64.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store8 align=0 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store8 align=7 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store16 align=0 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store16 align=7 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store align=0 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store align=7 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store8 align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store8 align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store16 align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store16 align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store32 align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store32 align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f32.store align=0 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f32.store align=7 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f64.store align=0 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f64.store align=7 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i32.store8 align=2 (i64.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i32.store16 align=4 (i64.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i32.store align=8 (i64.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store8 align=2 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store16 align=4 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store32 align=8 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store align=16 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (f32.store align=8 (i64.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (f64.store align=16 (i64.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory i64 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i64.const 0) (local.get 1)) (local.set 2 (f32.load (i64.const 0))) (br $4) ) ;; default (f32.store align=1 (i64.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i64.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i64.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i64.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i64.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i64.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i64.const 0) (local.get 1)) (local.set 2 (f64.load (i64.const 0))) (br $8) ) ;; default (f64.store align=1 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i64.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i64.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i64.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i64.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i64.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i64.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i64.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i64.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i64.const 0) (local.get 2)) (local.set 3 (i32.load (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i64.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i64.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i64.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i64.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i64.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i64.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i64.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i64.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i64.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i64.const 0) (local.get 2)) (local.set 3 (i64.load (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i64.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory i64 1) (func (export "store") (param i64 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i64) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i64.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i64.const 65532)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/memory64/binary-leb128.wast ================================================ ;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\06\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Memory index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\07\01" ;; Element section with 1 entry "\80\00" ;; Table index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\8a\00" ;; section size 10, encoded with 2 bytes "\01" ;; name byte count "1" ;; name "23456789" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0b" ;; section size "\88\00" ;; name byte count 8, encoded with 2 bytes "12345678" ;; name "9" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\82\00" ;; num params 2, encoded with 2 bytes "\7f\7e" ;; param type "\01" ;; num results "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\00" ;; num results 1, encoded with 2 bytes "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\88\00" ;; module name length 8, encoded with 2 bytes "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\00" ;; entity name length 9, encoded with 2 bytes "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\00" ;; import signature index, encoded with 2 bytes ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\00" ;; function 0 signature index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\82\00" ;; string length 2, encoded with 2 bytes "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\00" ;; export func index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\00" ;; num functions, encoded with 2 bytes "\02\00\0b" ;; function body ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\80\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\0a\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\80\80\80\80\80\00" ;; max 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0b\01" ;; Data section with 1 entry "\80\80\80\80\80\00" ;; Memory index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0b\01" ;; Element section with 1 entry "\80\80\80\80\80\00" ;; Table index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\80\00" ;; section size 3 with one byte too many "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0A" ;; section size "\83\80\80\80\80\00" ;; name byte count 3 with one byte too many "123" ;; name "4" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0c\01" ;; type section "\60" ;; func type "\82\80\80\80\80\00" ;; num params 2 with one byte too many "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\80\00" ;; num result 1 with one byte too many "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\88\80\80\80\80\00" ;; module name length 8 with one byte too many "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\80\00" ;; entity name length 9 with one byte too many "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\80\00" ;; import signature index 0 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\80\80\80\80\00" ;; function 0 signature index with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\82\80\80\80\80\00" ;; string length 2 with one byte too many "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\80\00" ;; export func index 0 with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\80\80\80\80\00" ;; num functions 1 with one byte too many "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\80\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\80\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\80\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\80\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\80\80\80\80\10" ;; max 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\80\80\80\80\40" ;; max 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0a\01" ;; Data section with 1 entry "\80\80\80\80\10" ;; Memory index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0a\01" ;; Element section with 1 entry "\80\80\80\80\10" ;; Table index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\10" ;; section size 3 with unused bits set "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\09" ;; section size "\83\80\80\80\40" ;; name byte count 3 with unused bits set "123" ;; name "4" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\82\80\80\80\10" ;; num params 2 with unused bits set "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\40" ;; num result 1 with unused bits set "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\88\80\80\80\10" ;; module name length 8 with unused bits set "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\40" ;; entity name length 9 with unused bits set "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\10" ;; import signature index 0 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\06\01" ;; function section "\80\80\80\80\10" ;; function 0 signature index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\82\80\80\80\10" ;; string length 2 with unused bits set "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\10" ;; export func index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\08" ;; section size "\81\80\80\80\10" ;; num functions 1 with unused bits set "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\80\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\80\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\80\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\80\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\1b\01\19" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\80\00" ;; i32_trunc_sat_f32_s with 2 bytes "\00" ;; unreachable "\fc\81\80\00" ;; i32_trunc_sat_f32_u with 3 bytes "\00" ;; unreachable "\fc\86\80\80\00" ;; i64_trunc_sat_f64_s with 4 bytes "\00" ;; unreachable "\fc\87\80\80\80\00" ;; i64_trunc_sat_f64_u with 5 bytes "\00" ;; unreachable "\0b" ;; end ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\0d\01\0b" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\87\80\80\80\80\00" ;; i64_trunc_sat_f64_u with 6 bytes "\00" ;; unreachable "\0b" ;; end ) "integer representation too long" ) ================================================ FILE: Test/WebAssembly/memory64/binary.wast ================================================ (module binary "\00asm\01\00\00\00") (module binary "\00asm" "\01\00\00\00") (module $M1 binary "\00asm\01\00\00\00") (module $M2 binary "\00asm" "\01\00\00\00") (assert_malformed (module binary "") "unexpected end") (assert_malformed (module binary "\01") "unexpected end") (assert_malformed (module binary "\00as") "unexpected end") (assert_malformed (module binary "asm\00") "magic header not detected") (assert_malformed (module binary "msa\00") "magic header not detected") (assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") (assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") (assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") (assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") ;; 8-byte endian-reversed. (assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") ;; Middle-endian byte orderings. (assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") (assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") ;; Upper-cased. (assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") ;; EBCDIC-encoded magic. (assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") ;; Leading UTF-8 BOM. (assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") ;; Malformed binary version. (assert_malformed (module binary "\00asm") "unexpected end") (assert_malformed (module binary "\00asm\01") "unexpected end") (assert_malformed (module binary "\00asm\01\00\00") "unexpected end") (assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") ;; Invalid section id. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0c\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\7f\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\80\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\81\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\ff\00\01\00") "malformed section id") ;; Type section with signed LEB128 encoded type (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01" ;; Type section id "\05" ;; Type section length "\01" ;; Types vector length "\e0\7f" ;; Malformed functype, -0x20 in signed LEB128 encoding "\00\00" ) "integer representation too long" ) ;; call_indirect reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\01" ;; call_indirect reserved byte is not equal to zero! "\0b" ;; end ) "zero flag expected" ) ;; call_indirect reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0a\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0b\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0c\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0d\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) ;; memory.grow reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\01" ;; memory.grow reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.grow reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0c\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0d\01" ;; Code section ;; function 0 "\0b\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.size reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\07\01" ;; Code section ;; function 0 "\05\00" "\3f" ;; memory.size "\01" ;; memory.size reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.size reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\08\01" ;; Code section ;; function 0 "\06\00" "\3f" ;; memory.size "\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\3f" ;; memory.size "\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\3f" ;; memory.size "\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\3f" ;; memory.size "\80\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; No more than 2^32 locals. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\ff\ff\ff\ff\0f\7f" ;; 0xFFFFFFFF i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "too many locals" ) ;; Local count can be 0. (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0a\01" ;; Code section ;; function 0 "\08\03" "\00\7f" ;; 0 i32 "\00\7e" ;; 0 i64 "\02\7d" ;; 2 f32 "\0b" ;; end ) ;; Function section has non-zero count, but code section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions ) "function and code section have inconsistent lengths" ) ;; Code section has non-zero count, but function section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count > code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count < code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section with 1 function "\0a\07\02\02\00\0b\02\00\0b" ;; Code section with 2 empty functions ) "function and code section have inconsistent lengths" ) ;; Function section has zero count, and code section is absent. (module binary "\00asm" "\01\00\00\00" "\03\01\00" ;; Function section with 0 functions ) ;; Code section has zero count, and function section is absent. (module binary "\00asm" "\01\00\00\00" "\0a\01\00" ;; Code section with 0 functions ) ;; Type count can be zero (module binary "\00asm" "\01\00\00\00" "\01\01\00" ;; type count can be zero ) ;; 2 type declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\02" ;; type section with inconsistent count (2 declared, 1 given) "\60\00\00" ;; 1st type ;; "\60\00\00" ;; 2nd type (missed) ) "unexpected end of section or function" ) ;; 1 type declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01" ;; type section with inconsistent count (1 declared, 2 given) "\60\00\00" ;; 1st type "\60\00\00" ;; 2nd type (redundant) ) "section size mismatch" ) ;; Import count can be zero (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\01\00" ;; import count can be zero ) ;; Malformed import kind (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) ;; 2 import declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\16\02" ;; import section with inconsistent count (2 declared, 1 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (missed) ) "unexpected end of section or function" ) ;; 1 import declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\09\02" ;; type section "\60\01\7f\00" ;; type 0 "\60\01\7d\00" ;; type 1 "\02\2b\01" ;; import section with inconsistent count (1 declared, 2 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (redundant) "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\66\33\32" ;; print_f32 "\00\01" ;; import kind, import signature index ) "section size mismatch" ) ;; Table count can be zero (module binary "\00asm" "\01\00\00\00" "\04\01\00" ;; table count can be zero ) ;; 1 table declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\01\01" ;; table section with inconsistent count (1 declared, 0 given) ;; "\70\01\00\00" ;; table entity ) "unexpected end of section or function" ) ;; Malformed table limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; table section with one entry "\70" ;; anyfunc "\08" ;; malformed table limits flag ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; table section with one entry "\70" ;; anyfunc "\08" ;; malformed table limits flag "\00" ;; dummy byte ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\06\01" ;; table section with one entry "\70" ;; anyfunc "\81\00" ;; malformed table limits flag as LEB128 "\00\00" ;; dummy bytes ) "malformed limits flags" ) ;; Memory count can be zero (module binary "\00asm" "\01\00\00\00" "\05\01\00" ;; memory count can be zero ) ;; 1 memory declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\01\01" ;; memory section with inconsistent count (1 declared, 0 given) ;; "\00\00" ;; memory 0 (missed) ) "unexpected end of section or function" ) ;; Malformed memory limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\02\01" ;; memory section with one entry "\08" ;; malformed memory limits flag ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section with one entry "\08" ;; malformed memory limits flag "\00" ;; dummy byte ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\05\01" ;; memory section with one entry "\81\00" ;; malformed memory limits flag as LEB128 "\00\00" ;; dummy bytes ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\05\01" ;; memory section with one entry "\81\01" ;; malformed memory limits flag as LEB128 "\00\00" ;; dummy bytes ) "malformed limits flags" ) ;; Global count can be zero (module binary "\00asm" "\01\00\00\00" "\06\01\00" ;; global count can be zero ) ;; 2 global declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\06\02" ;; global section with inconsistent count (2 declared, 1 given) "\7f\00\41\00\0b" ;; global 0 ;; "\7f\00\41\00\0b" ;; global 1 (missed) ) "unexpected end of section or function" ) ;; 1 global declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; global section with inconsistent count (1 declared, 2 given) "\7f\00\41\00\0b" ;; global 0 "\7f\00\41\00\0b" ;; global 1 (redundant) ) "section size mismatch" ) ;; Export count can be 0 (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\01\00" ;; export count can be zero "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) ;; 2 export declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\06\02" ;; export section with inconsistent count (2 declared, 1 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index ;; "\02" ;; export 1 (missed) ;; "\66\32" ;; export name ;; "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "unexpected end of section or function" ) ;; 1 export declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\0b\01" ;; export section with inconsistent count (1 declared, 2 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index "\02" ;; export 1 (redundant) "\66\32" ;; export name "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "section size mismatch" ) ;; elem segment count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\01\00" ;; elem segment count can be zero "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) ;; 2 elem segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 ;; "\00\41\00\0b\01\00" ;; elem 1 (missed) ) "unexpected end" ) ;; 2 elem segment declared, 1.5 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00" ;; elem 1 (partial) ;; "\0b\01\00" ;; elem 1 (missing part) ) "unexpected end" ) ;; 1 elem segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\0d\01" ;; elem with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00\0b\01\00" ;; elem 1 (redundant) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "section size mismatch" ) ;; data segment count can be zero (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\01\00" ;; data segment count can be zero ) ;; 2 data segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\07\02" ;; data with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\61" ;; data 0 ;; "\00\41\01\0b\01\62" ;; data 1 (missed) ) "unexpected end of section or function" ) ;; 1 data segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0d\01" ;; data with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\61" ;; data 0 "\00\41\01\0b\01\62" ;; data 1 (redundant) ) "section size mismatch" ) ;; data segment has 7 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\03\0b" ;; data segment 0 "\07" ;; data segment size with inconsistent lengths (7 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "unexpected end of section or function" ) ;; data segment has 5 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\00\0b" ;; data segment 0 "\05" ;; data segment size with inconsistent lengths (5 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "section size mismatch" ) ;; br_table target count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\11\01" ;; code section "\0f\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\00" ;; br_table target count can be zero "\02" ;; break depth for default "\0b\0b\0b" ;; end ) ;; 1 br_table target declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\12\01" ;; code section "\11\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\01" ;; br_table with inconsistent target count (1 declared, 2 given) "\00" ;; break depth 0 "\01" ;; break depth 1 "\02" ;; break depth for default "\0b\0b\0b" ;; end ) "unexpected end" ) ;; Start section (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) ;; Multiple start sections (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) "junk after last section" ) ================================================ FILE: Test/WebAssembly/memory64/block.wast ================================================ ;; Test `block` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (block) (block $l) ) (func (export "singular") (result i32) (block (nop)) (block (result i32) (i32.const 7)) ) (func (export "multi") (result i32) (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 7) (call $dummy) ) (drop) (block (result i32 i64 i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i64.const 7) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i32.const 9) (call $dummy) ) (drop) (drop) ) (func (export "nested") (result i32) (block (result i32) (block (call $dummy) (block) (nop)) (block (result i32) (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (call $dummy) (i32.const 150) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) ) (func (export "as-select-first") (result i32) (select (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (block (result i32) (i32.const 1))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (block (result i32) (i32.const 1)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (block (result i32) (i32.const 1)) (call $dummy)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (block (result i32) (i32.const 1))) ) (func (export "as-if-condition") (block (result i32) (i32.const 1)) (if (then (call $dummy))) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (block (result i32) (i32.const 1))) (else (i32.const 2))) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 1) (then (i32.const 2)) (else (block (result i32) (i32.const 1)))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (block (result i32) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (block (result i32) (i32.const 1)))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (block (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (block (result i32) (i32.const 1)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (block (result i32) (i32.const 0)) ) ) ) (func (export "as-store-first") (block (result i32) (i32.const 1)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (block (result i32) (i32.const 1)) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (block (result i32) (i32.const 1))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (block (result i32) (i32.const 1))) ) (func (export "as-return-value") (result i32) (block (result i32) (i32.const 1)) (return) ) (func (export "as-drop-operand") (drop (block (result i32) (i32.const 1))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (block (result i32) (i32.const 1)))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (block (result i32) (i32.const 1))) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (block (result i32) (i32.const 1))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (block (result i32) (i32.const 1))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (block (result i32) (i32.const 1))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (block (result i32) (call $dummy) (i32.const 3)) (block (result i32) (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (block (result f32) (call $dummy) (f32.const 3)) (block (result f32) (call $dummy) (f32.const 3)) ) ) (func (export "as-binary-operands") (result i32) (i32.mul (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) ) ) (func (export "as-compare-operands") (result i32) (f32.gt (block (result f32 f32) (call $dummy) (f32.const 3) (call $dummy) (f32.const 3) ) ) ) (func (export "as-mixed-operands") (result i32) (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (block (br 0) (unreachable)) (block (br_if 0 (i32.const 1)) (unreachable)) (block (br_table 0 (i32.const 0)) (unreachable)) (block (br_table 0 0 0 (i32.const 1)) (unreachable)) (i32.const 19) ) (func (export "break-value") (result i32) (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) ) (func (export "break-multi-value") (result i32 i32 i64) (block (result i32 i32 i64) (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) ) (func (export "break-repeated") (result i32) (block (result i32) (br 0 (i32.const 18)) (br 0 (i32.const 19)) (drop (br_if 0 (i32.const 20) (i32.const 0))) (drop (br_if 0 (i32.const 20) (i32.const 1))) (br 0 (i32.const 21)) (br_table 0 (i32.const 22) (i32.const 4)) (br_table 0 0 0 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) ) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) ) (local.get 0) ) (func (export "param") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) ) ) (func (export "params") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) ) ) (func (export "params-id") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32)) (i32.add) ) (func (export "param-break") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) (br 0) ) ) (func (export "params-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) (br 0) ) ) (func (export "params-id-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32) (br 0)) (i32.add) ) (func (export "effects") (result i32) (local i32) (block (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 0) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) (i32.eq (local.get 0) (i32.const -14)) ) (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (block (type $block-sig-1)) (block (type $block-sig-2) (i32.const 0)) (block (type $block-sig-3) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4)) (drop) (drop) (drop) (block (type $block-sig-2) (result i32) (i32.const 0)) (block (type $block-sig-3) (param i32) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-select-first") (i32.const 1)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 1)) (assert_return (invoke "as-loop-mid") (i32.const 1)) (assert_return (invoke "as-loop-last") (i32.const 1)) (assert_return (invoke "as-if-condition")) (assert_return (invoke "as-if-then") (i32.const 1)) (assert_return (invoke "as-if-else") (i32.const 2)) (assert_return (invoke "as-br_if-first") (i32.const 1)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 1)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-local.set-value") (i32.const 1)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "as-binary-operands") (i32.const 12)) (assert_return (invoke "as-compare-operands") (i32.const 0)) (assert_return (invoke "as-mixed-operands") (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-multi-value") (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0xf)) (assert_return (invoke "param") (i32.const 3)) (assert_return (invoke "params") (i32.const 3)) (assert_return (invoke "params-id") (i32.const 3)) (assert_return (invoke "param-break") (i32.const 3)) (assert_return (invoke "params-break") (i32.const 3)) (assert_return (invoke "params-id-break") (i32.const 3)) (assert_return (invoke "effects") (i32.const 1)) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (type $sig) (result i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (result i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (type $sig) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (param i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (param $x i32) (drop)))") "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (drop)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (result i32)) (unreachable))" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (block (type $sig) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (block))) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-void (block (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-void (block (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-void (block (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-void (block (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (block (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i32 (result i32) (block (result i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i64 (result i64) (block (result i64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f32 (result f32) (block (result f32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f64 (result f64) (block (result f64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-nums (result i32 i32) (block (result i32 i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-block (i32.const 0) (block (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-loop (i32.const 0) (loop (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (block (result i32)) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i32 (result i32) (block (result i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i64 (result i64) (block (result i64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f32 (result f32) (block (result f32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f64 (result f64) (block (result f64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (block (result i32 i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-i64 (result i32) (block (result i32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f32 (result i32) (block (result i32) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f64 (result i32) (block (result i32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-i32 (result i64) (block (result i64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f32 (result i64) (block (result i64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f64 (result i64) (block (result i64) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i32 (result f32) (block (result f32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i64 (result f32) (block (result f32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-f64 (result f32) (block (result f32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i32 (result f64) (block (result f64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i64 (result f64) (block (result f64) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-f32 (result f32) (block (result f64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result i32 i32) (block (result i32 i32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result i32) (block (result i32) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-i64 (result i32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f32 (result i32) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f64 (result i32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-i32 (result i64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f32 (result i64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f64 (result i64) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i32 (result f32) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i64 (result f32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-f64 (result f32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i32 (result f64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i64 (result f64) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-f32 (result f64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i32 (result i32) (block (result i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i64 (result i64) (block (result i64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f32 (result f32) (block (result f32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f64 (result f64) (block (result f64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i32 (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i64 (result i64) (block (result i64) (br 0) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f32 (result f32) (block (result f32) (br 0) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f64 (result f64) (block (result f64) (br 0) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-nums (result i32 i32) (block (result i32 i32) (br 0) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i32 (result f64) (block (result i64) (br 0 (i32.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (nop)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i32 (result f64) (block (result f64) (br 0 (i32.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-void (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-void (block (result i64) (block (result i64) (br 1 (i64.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-void (block (result f32) (block (result f32) (br 1 (f32.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-void (block (result f64) (block (result f64) (br 1 (f64.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-nums-vs-void (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 1) (i32.const 2))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i32 (result i32) (block (result i32) (block (br 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i64 (result i64) (block (result i64) (block (br 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f32 (result f32) (block (result f32) (block (br 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f64 (result f64) (block (result f64) (block (br 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i32 (result i32) (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i64 (result i64) (block (result i64) (block (result i64) (br 1 (nop))) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f32 (result f32) (block (result f32) (block (result f32) (br 1 (nop))) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f64 (result f64) (block (result f64) (block (result f64) (br 1 (nop))) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-i64 (result i32) (block (result i32) (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f32 (result i32) (block (result i32) (block (result i32) (br 1 (f32.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f64 (result i32) (block (result i32) (block (result i32) (br 1 (f64.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-i32 (result i64) (block (result i64) (block (result i64) (br 1 (i32.const 1))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f32 (result i64) (block (result i64) (block (result i64) (br 1 (f32.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f64 (result i64) (block (result i64) (block (result i64) (br 1 (f64.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i32 (result f32) (block (result f32) (block (result f32) (br 1 (i32.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i64 (result f32) (block (result f32) (block (result f32) (br 1 (i64.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-f64 (result f32) (block (result f32) (block (result f32) (br 1 (f64.const 1.0))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i32 (result f64) (block (result f64) (block (result f64) (br 1 (i32.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i64 (result f64) (block (result f64) (block (result f64) (br 1 (i64.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-f32 (result f64) (block (result f64) (block (result f64) (br 1 (f32.const 1.0))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 0))) (br 0 (i32.const 1) (i32.const 2)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i32 (result i32) (i32.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i64 (result i64) (i64.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f32 (result f32) (f32.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f64 (result f64) (f64.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-nums (result i32) (i32.add (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i32 (result i32) (i32.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i64 (result i64) (i64.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f32 (result f32) (f32.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f64 (result f64) (f64.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-nums (result i32) (i32.add (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-i64 (result i32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f32 (result i32) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f64 (result i32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-i32 (result i64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f32 (result i64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f64 (result i64) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i32 (result f32) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i64 (result f32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-f64 (result f32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i32 (result f64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i64 (result f64) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-f32 (result f64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-num-vs-nums (result i32) (i32.add (block (br 0 (i64.const 9) (i32.const 10)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (param i32 f64) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (block (param f32 i32) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (block (param i32 f64) (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (block (param f32 i32) (drop) (drop))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) block (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (block (param $x i32)))") "unexpected token" ) (assert_malformed (module quote "(func block end $l)") "mismatching label" ) (assert_malformed (module quote "(func block $a end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/memory64/br.wast ================================================ ;; Test `br` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br 0))))) (func (export "type-i64") (block (drop (i64.ctz (br 0))))) (func (export "type-f32") (block (drop (f32.neg (br 0))))) (func (export "type-f64") (block (drop (f64.neg (br 0))))) (func (export "type-i32-i32") (block (drop (i32.add (br 0))))) (func (export "type-i64-i64") (block (drop (i64.add (br 0))))) (func (export "type-f32-f32") (block (drop (f32.add (br 0))))) (func (export "type-f64-f64") (block (drop (f64.add (br 0))))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br 0 (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br 0 (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br 0 (f64.const 4)))) ) (func (export "type-f64-f64-value") (result f64 f64) (block (result f64 f64) (f64.add (br 0 (f64.const 4) (f64.const 5))) (f64.const 6) ) ) (func (export "as-block-first") (block (br 0) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br 0) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br 0)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br 0 (i32.const 2))) ) (func (export "as-loop-first") (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 3)) (i32.const 2))) ) (func (export "as-loop-mid") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 4)) (i32.const 2)) ) ) (func (export "as-loop-last") (result i32) (block (result i32) (loop (result i32) (nop) (call $dummy) (br 1 (i32.const 5))) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br 0 (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br 0))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br 0 (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br 0))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br 0 (i64.const 7)))) ) (func (export "as-return-values") (result i32 i64) (i32.const 2) (block (result i64) (return (br 0 (i32.const 1) (i64.const 7)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br 0 (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br 1 (i32.const 3))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br 1 (i32.const 4))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br 0 (i32.const 5)) (local.get 0) (local.get 1)) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br 0 (i32.const 6)) (local.get 1)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7))) ) ) (func (export "as-select-all") (result i32) (block (result i32) (select (br 0 (i32.const 8)))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3)) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3)) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14))) ) ) (func (export "as-call-all") (result i32) (block (result i32) (call $f (br 0 (i32.const 15)))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) ) ) ) (func (export "as-call_indirect-all") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 24)))) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br 0 (i32.const 17))) (i32.const -1)) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.tee 0 (br 0 (i32.const 1)))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br 0 (i32.const 1)))) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br 0 (f32.const 1.7)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br 0 (i64.const 30)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1) ) ) (func (export "as-store-both") (result i32) (block (result i32) (i64.store (br 0 (i32.const 32))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1) ) ) (func (export "as-storeN-both") (result i32) (block (result i32) (i64.store16 (br 0 (i32.const 34))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3.4)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br 0 (i32.const 3)) (i32.const 10))) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br 0 (i64.const 45)))) ) (func (export "as-binary-both") (result i32) (block (result i32) (i32.add (br 0 (i32.const 46)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br 0 (i32.const 44)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br 0 (i32.const 43)) (f64.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br 0 (i32.const 42)))) ) (func (export "as-compare-both") (result i32) (block (result i32) (f64.le (br 0 (i32.const 44)))) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br 0 (i32.const 41)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br 0 (i32.const 40)))) ) (func (export "nested-block-value") (result i32) (i32.add (i32.const 1) (block (result i32) (call $dummy) (i32.add (i32.const 4) (br 0 (i32.const 8))) ) ) ) (func (export "nested-br-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br 1 (i32.const 8))) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br 1 (i32.const 8)) (i32.const 1))) (i32.const 32) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) ) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br 0 (i32.const 8))) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-i32")) (assert_return (invoke "type-i64-i64")) (assert_return (invoke "type-f32-f32")) (assert_return (invoke "type-f64-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "type-f64-f64-value") (f64.const 4) (f64.const 5)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-return-values") (i32.const 2) (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-select-all") (i32.const 8)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call-all") (i32.const 15)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-call_indirect-all") (i32.const 24)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-store-both") (i32.const 32)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-storeN-both") (i32.const 34)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-binary-both") (i32.const 46)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-compare-both") (i32.const 44)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value") (i32.const 9)) (assert_return (invoke "nested-br-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) (assert_return (invoke "nested-br_table-value") (i32.const 9)) (assert_return (invoke "nested-br_table-value-index") (i32.const 9)) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br (i32.const 0) (block (result i32) (br 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_if (i32.const 0) (block (result i32) (br_if 0 (br 0) (i32.const 1))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_table (i32.const 0) (block (result i32) (br_table 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-return (block (result i32) (return (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-select (block (result i32) (select (br 0) (i32.const 1) (i32.const 2)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-call (block (result i32) (call 1 (br 0)) ) (i32.eqz) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-arg-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (br 0) (i32.const 0) ) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.set (local i32) (block (result i32) (local.set 0 (br 0)) (local.get 0) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.tee (local i32) (block (result i32) (local.tee 0 (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-arg-empty-in-global.set (block (result i32) (global.set $x (br 0)) (global.get $x) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-arg-empty-in-memory.grow (block (result i32) (memory.grow (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-load (block (result i32) (i32.load (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-store (block (result i32) (i32.store (br 0) (i32.const 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br 1))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br 5))))) "unknown label" ) (assert_invalid (module (func $large-label (br 0x10000001))) "unknown label" ) ================================================ FILE: Test/WebAssembly/memory64/br_if.wast ================================================ ;; Test `br_if` operator (module (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_if 0 (i32.const 0) (i32.const 1))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_if 0 (i64.const 0) (i32.const 1))))) ) (func (export "type-f32") (block (drop (f32.neg (br_if 0 (f32.const 0) (i32.const 1))))) ) (func (export "type-f64") (block (drop (f64.neg (br_if 0 (f64.const 0) (i32.const 1))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_if 0 (i64.const 2) (i32.const 1)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_if 0 (f32.const 3) (i32.const 1)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 4) (i32.const 1)))) ) (func (export "as-block-first") (param i32) (result i32) (block (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-mid") (param i32) (result i32) (block (call $dummy) (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-last") (param i32) (block (call $dummy) (call $dummy) (br_if 0 (local.get 0))) ) (func (export "as-block-first-value") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 10) (local.get 0))) (return (i32.const 11)) ) ) (func (export "as-block-mid-value") (param i32) (result i32) (block (result i32) (call $dummy) (drop (br_if 0 (i32.const 20) (local.get 0))) (return (i32.const 21)) ) ) (func (export "as-block-last-value") (param i32) (result i32) (block (result i32) (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (local.get 0)) ) ) (func (export "as-loop-first") (param i32) (result i32) (block (loop (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 3) ) (func (export "as-loop-mid") (param i32) (result i32) (block (loop (call $dummy) (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 4) ) (func (export "as-loop-last") (param i32) (loop (call $dummy) (br_if 1 (local.get 0))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3))) (i32.const 4) ) ) (func (export "as-br_if-value-cond") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 2) (br_if 0 (i32.const 1) (local.get 0)))) (i32.const 4) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3)) (i32.const 4) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 2) (br_if 0 (i32.const 1) (i32.const 3))) (i32.const 4) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_if 0 (i64.const 1) (i32.const 2)))) ) (func (export "as-if-cond") (param i32) (result i32) (block (result i32) (if (result i32) (br_if 0 (i32.const 1) (local.get 0)) (then (i32.const 2)) (else (i32.const 3)) ) ) ) (func (export "as-if-then") (param i32 i32) (block (if (local.get 0) (then (br_if 1 (local.get 1))) (else (call $dummy))) ) ) (func (export "as-if-else") (param i32 i32) (block (if (local.get 0) (then (call $dummy)) (else (br_if 1 (local.get 1)))) ) ) (func (export "as-select-first") (param i32) (result i32) (block (result i32) (select (br_if 0 (i32.const 3) (i32.const 10)) (i32.const 2) (local.get 0)) ) ) (func (export "as-select-second") (param i32) (result i32) (block (result i32) (select (i32.const 1) (br_if 0 (i32.const 3) (i32.const 10)) (local.get 0)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 1) (i32.const 2) (br_if 0 (i32.const 3) (i32.const 10))) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_if 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_if 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_if 0 (i32.const 14) (i32.const 1)) ) ) ) (func $func (param i32 i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $check) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 1) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (i32.const 3) (br_if 0 (i32.const 4) (i32.const 10)) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (block (result i32) (local.set 0 (br_if 0 (i32.const 17) (local.get 0))) (i32.const -1) ) ) (func (export "as-local.tee-value") (param i32) (result i32) (block (result i32) (local.tee 0 (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (block (result i32) (global.set $a (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (memory 1) (func (export "as-load-address") (result i32) (block (result i32) (i32.load (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-loadN-address") (result i32) (block (result i32) (i32.load8_s (br_if 0 (i32.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (i32.store (br_if 0 (i32.const 30) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i32.store (i32.const 2) (br_if 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_if 0 (i32.const 32) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i32.store16 (i32.const 2) (br_if 0 (i32.const 33) (i32.const 1))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 1.0) (i32.const 1)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_if 0 (i32.const 0) (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (br_if 0 (i32.const 1) (i32.const 42)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "nested-block-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (i32.add (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) )) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) )) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) ) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-last" (i32.const 0))) (assert_return (invoke "as-block-last" (i32.const 1))) (assert_return (invoke "as-block-first-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-first-value" (i32.const 1)) (i32.const 10)) (assert_return (invoke "as-block-mid-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "as-block-mid-value" (i32.const 1)) (i32.const 20)) (assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) (assert_return (invoke "as-loop-last" (i32.const 0))) (assert_return (invoke "as-loop-last" (i32.const 1))) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 1)) (assert_return (invoke "as-br_if-value-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-value-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 1)) (assert_return (invoke "as-br_table-value-index") (i32.const 1)) (assert_return (invoke "as-return-value") (i64.const 1)) (assert_return (invoke "as-if-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-if-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-cond") (i32.const 3)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 4)) (assert_return (invoke "as-call_indirect-first") (i32.const 4)) (assert_return (invoke "as-call_indirect-mid") (i32.const 4)) (assert_return (invoke "as-call_indirect-last") (i32.const 4)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-address") (i32.const 1)) (assert_return (invoke "as-loadN-address") (i32.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f64.const 1.0)) (assert_return (invoke "as-binary-left") (i32.const 1)) (assert_return (invoke "as-binary-right") (i32.const 1)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-memory.grow-size") (i32.const 1)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) (assert_invalid (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-cond-empty-vs-i32 (block (br_if 0)) )) "type mismatch" ) (assert_invalid (module (func $type-cond-void-vs-i32 (block (br_if 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cond-num-vs-i32 (block (br_if 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-void-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_if 1 (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-num-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-return (block (result i32) (return (br_if 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-return (block (result i32) (return (br_if 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br_if 1 (i32.const 1)))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) "unknown label" ) (assert_invalid (module (func $large-label (br_if 0x10000001 (i32.const 1)))) "unknown label" ) ================================================ FILE: Test/WebAssembly/memory64/br_table.wast ================================================ ;; Test `br_table` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-f32") (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-f64") (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) ) (func (export "empty") (param i32) (result i32) (block (br_table 0 (local.get 0)) (return (i32.const 21))) (i32.const 22) ) (func (export "empty-value") (param i32) (result i32) (block (result i32) (br_table 0 (i32.const 33) (local.get 0)) (i32.const 31) ) ) (func (export "singleton") (param i32) (result i32) (block (block (br_table 1 0 (local.get 0)) (return (i32.const 21)) ) (return (i32.const 20)) ) (i32.const 22) ) (func (export "singleton-value") (param i32) (result i32) (block (result i32) (drop (block (result i32) (br_table 0 1 (i32.const 33) (local.get 0)) (return (i32.const 31)) ) ) (i32.const 32) ) ) (func (export "multiple") (param i32) (result i32) (block (block (block (block (block (br_table 3 2 1 0 4 (local.get 0)) (return (i32.const 99)) ) (return (i32.const 100)) ) (return (i32.const 101)) ) (return (i32.const 102)) ) (return (i32.const 103)) ) (i32.const 104) ) (func (export "multiple-value") (param i32) (result i32) (local i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (br_table 3 2 1 0 4 (i32.const 200) (local.get 0)) (return (i32.add (local.get 1) (i32.const 99))) )) (return (i32.add (local.get 1) (i32.const 10))) )) (return (i32.add (local.get 1) (i32.const 11))) )) (return (i32.add (local.get 1) (i32.const 12))) )) (return (i32.add (local.get 1) (i32.const 13))) )) (i32.add (local.get 1) (i32.const 14)) ) (func (export "large") (param i32) (result i32) (block (block (br_table 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (local.get 0) ) (return (i32.const -1)) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (func (export "as-block-first") (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0)) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (br_table 1 1 1 (i32.const 4) (i32.const -1)) (i32.const 2) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_table 0 (i32.const 9) (i32.const 0)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_table 0 (i64.const 7) (i32.const 0)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br_table 0 (i32.const 2) (i32.const 0)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br_table 1 (i32.const 3) (i32.const 0))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br_table 1 0 (i32.const 4) (i32.const 0))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br_table 0 (i32.const 5) (i32.const 0)) (local.get 0) (local.get 1) ) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br_table 0 (i32.const 6) (i32.const 1)) (local.get 1) ) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) ) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br_table 0 (i32.const 23) (i32.const 1)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br_table 0 (i32.const 17) (i32.const 1))) (i32.const -1) ) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.set 0 (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) ) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) ) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br_table 0 (i32.const 41) (i32.const 0))) ) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_table 0 (i32.const 40) (i32.const 0)))) ) (func (export "nested-block-value") (param i32) (result i32) (block (result i32) (drop (i32.const -1)) (i32.add (i32.const 1) (block (result i32) (i32.add (i32.const 2) (block (result i32) (drop (i32.const 4)) (i32.add (i32.const 8) (br_table 0 1 2 (i32.const 16) (local.get 0)) ) ) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br_table 2 1 0 (i32.const 8) (local.get 0))) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1) ) ) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) (func (export "nested-br_table-loop-block") (param i32) (result i32) (local.set 0 (loop (result i32) (block (br_table 1 0 0 (local.get 0)) ) (i32.const 0) ) ) (loop (result i32) (block (br_table 0 1 1 (local.get 0)) ) (i32.const 3) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) (assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) (assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) (assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) (assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) (assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) (assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) (assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) (assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) (assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) (assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) (assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) (assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) (assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) (assert_return (invoke "large" (i32.const 0)) (i32.const 0)) (assert_return (invoke "large" (i32.const 1)) (i32.const 1)) (assert_return (invoke "large" (i32.const 100)) (i32.const 0)) (assert_return (invoke "large" (i32.const 101)) (i32.const 1)) (assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) (assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-first") (i32.const 20)) (assert_return (invoke "as-call_indirect-mid") (i32.const 21)) (assert_return (invoke "as-call_indirect-last") (i32.const 22)) (assert_return (invoke "as-call_indirect-func") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-loop-block" (i32.const 1)) (i32.const 3)) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (br_table 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br_table 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-arg-num (block (block (result f32) (br_table 0 1 (f32.const 0) (i32.const 0)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-index-void-vs-i32 (block (br_table 0 0 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-index-num-vs-i32 (block (br_table 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-void-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_table 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-num-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-return (block (result i32) (return (br_table 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-return (block (result i32) (return (br_table 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (block (br_table 2 1 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label (block (br_table 0 0x10000001 0 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-label-default (block (br_table 1 2 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label-default (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label-default (block (br_table 0 0 0x10000001 (i32.const 1))) )) "unknown label" ) ================================================ FILE: Test/WebAssembly/memory64/bulk64._wast ================================================ ;; segment syntax (module (memory i64 1) (data "foo")) ;; memory.fill (module (memory i64 1) (func (export "fill") (param i64 i32 i64) (memory.fill (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i64) (result i32) (i32.load8_u (local.get 0))) ) ;; Basic fill test. (invoke "fill" (i64.const 1) (i32.const 0xff) (i64.const 3)) (assert_return (invoke "load8_u" (i64.const 0)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 1)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i64.const 2)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i64.const 3)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i64.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "fill" (i64.const 0) (i32.const 0xbbaa) (i64.const 2)) (assert_return (invoke "load8_u" (i64.const 0)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "fill" (i64.const 0) (i32.const 0) (i64.const 0x10000)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "fill" (i64.const 0x10000) (i32.const 0) (i64.const 0)) ;; Writing 0 bytes outside of memory limit is NOT allowed. (assert_trap (invoke "fill" (i64.const 0x10001) (i32.const 0) (i64.const 0)) "out of bounds") ;; memory.copy (module (memory i64 1 1) (data (i64.const 0) "\aa\bb\cc\dd") (func (export "copy") (param i64 i64 i64) (memory.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i64) (result i32) (i32.load8_u (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i64.const 10) (i64.const 0) (i64.const 4)) (assert_return (invoke "load8_u" (i64.const 9)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 14)) (i32.const 0)) ;; Overlap, source > dest (invoke "copy" (i64.const 8) (i64.const 10) (i64.const 4)) (assert_return (invoke "load8_u" (i64.const 8)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 9)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xdd)) ;; Overlap, source < dest (invoke "copy" (i64.const 10) (i64.const 7) (i64.const 6)) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 16)) (i32.const 0)) ;; Overlap, source < dest but size is out of bounds (assert_trap (invoke "copy" (i64.const 13) (i64.const 11) (i64.const -1)) "out of bounds") (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 16)) (i32.const 0)) ;; Copy ending at memory limit is ok. (invoke "copy" (i64.const 0xff00) (i64.const 0) (i64.const 0x100)) (invoke "copy" (i64.const 0xfe00) (i64.const 0xff00) (i64.const 0x100)) ;; Succeed when copying 0 bytes at the end of the region. (invoke "copy" (i64.const 0x10000) (i64.const 0) (i64.const 0)) (invoke "copy" (i64.const 0) (i64.const 0x10000) (i64.const 0)) ;; Copying 0 bytes outside of memory limit is NOT allowed. (assert_trap (invoke "copy" (i64.const 0x10001) (i64.const 0) (i64.const 0)) "out of bounds") (assert_trap (invoke "copy" (i64.const 0) (i64.const 0x10001) (i64.const 0)) "out of bounds") ;; memory.init (module (memory i64 1) (data "\aa\bb\cc\dd") (func (export "init") (param i64 i32 i32) (memory.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i64) (result i32) (i32.load8_u (local.get 0))) ) (invoke "init" (i64.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "load8_u" (i64.const 0)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 1)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 2)) (i32.const 0)) ;; Init ending at memory limit and segment limit is ok. (invoke "init" (i64.const 0xfffc) (i32.const 0) (i32.const 4)) ;; Out-of-bounds writes trap, and no partial writes has been made. (assert_trap (invoke "init" (i64.const 0xfffe) (i32.const 0) (i32.const 3)) "out of bounds") (assert_return (invoke "load8_u" (i64.const 0xfffe)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 0xffff)) (i32.const 0xdd)) ;; Succeed when writing 0 bytes at the end of either region. (invoke "init" (i64.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "init" (i64.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 bytes outside of memory / segment limit is NOT allowed. (assert_trap (invoke "init" (i64.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds") (assert_trap (invoke "init" (i64.const 0) (i32.const 5) (i32.const 0)) "out of bounds") ;; OK to access 0 bytes at offset 0 in a dropped segment. (invoke "init" (i64.const 0) (i32.const 0) (i32.const 0)) ;; data.drop (module (memory i64 1) (data "") (data (i64.const 0) "") (func (export "drop_passive") (data.drop 0)) (func (export "init_passive") (memory.init 0 (i64.const 0) (i32.const 0) (i32.const 0))) (func (export "drop_active") (data.drop 1)) (func (export "init_active") (memory.init 1 (i64.const 0) (i32.const 0) (i32.const 0))) ) ;; OK to drop the same segment multiple times or drop an active segment. (invoke "init_passive") (invoke "drop_passive") (invoke "drop_passive") (invoke "drop_active") ================================================ FILE: Test/WebAssembly/memory64/call.wast ================================================ ;; Test `call` operator (module ;; Auxiliary definitions (func $const-i32 (result i32) (i32.const 0x132)) (func $const-i64 (result i64) (i64.const 0x164)) (func $const-f32 (result f32) (f32.const 0xf32)) (func $const-f64 (result f64) (f64.const 0xf64)) (func $const-i32-i64 (result i32 i64) (i32.const 0x132) (i64.const 0x164)) (func $id-i32 (param i32) (result i32) (local.get 0)) (func $id-i64 (param i64) (result i64) (local.get 0)) (func $id-f32 (param f32) (result f32) (local.get 0)) (func $id-f64 (param f64) (result f64) (local.get 0)) (func $id-i32-f64 (param i32 f64) (result i32 f64) (local.get 0) (local.get 1) ) (func $swap-i32-i32 (param i32 i32) (result i32 i32) (local.get 1) (local.get 0) ) (func $swap-f32-f64 (param f32 f64) (result f64 f32) (local.get 1) (local.get 0) ) (func $swap-f64-i32 (param f64 i32) (result i32 f64) (local.get 1) (local.get 0) ) (func $f32-i32 (param f32 i32) (result i32) (local.get 1)) (func $i32-i64 (param i32 i64) (result i64) (local.get 1)) (func $f64-f32 (param f64 f32) (result f32) (local.get 1)) (func $i64-f64 (param i64 f64) (result f64) (local.get 1)) ;; Typing (func (export "type-i32") (result i32) (call $const-i32)) (func (export "type-i64") (result i64) (call $const-i64)) (func (export "type-f32") (result f32) (call $const-f32)) (func (export "type-f64") (result f64) (call $const-f64)) (func (export "type-i32-i64") (result i32 i64) (call $const-i32-i64)) (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) (func (export "type-second-i32") (result i32) (call $f32-i32 (f32.const 32.1) (i32.const 32)) ) (func (export "type-second-i64") (result i64) (call $i32-i64 (i32.const 32) (i64.const 64)) ) (func (export "type-second-f32") (result f32) (call $f64-f32 (f64.const 64) (f32.const 32)) ) (func (export "type-second-f64") (result f64) (call $i64-f64 (i64.const 64) (f64.const 64.1)) ) (func (export "type-all-i32-f64") (result i32 f64) (call $id-i32-f64 (i32.const 32) (f64.const 1.64)) ) (func (export "type-all-i32-i32") (result i32 i32) (call $swap-i32-i32 (i32.const 1) (i32.const 2)) ) (func (export "type-all-f32-f64") (result f64 f32) (call $swap-f32-f64 (f32.const 1) (f64.const 2)) ) (func (export "type-all-f64-i32") (result i32 f64) (call $swap-f64-i32 (f64.const 1) (i32.const 2)) ) ;; Composition (func (export "as-binary-all-operands") (result i32) (i32.add (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) (func (export "as-mixed-operands") (result i32) (call $swap-i32-i32 (i32.const 3) (i32.const 4)) (i32.const 5) (i32.add) (i32.mul) ) (func (export "as-call-all-operands") (result i32 i32) (call $swap-i32-i32 (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) ;; Recursion (func $fac (export "fac") (param i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (local.get 1)) (else (call $fac-acc (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) ) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call $fib (i64.sub (local.get 0) (i64.const 2))) (call $fib (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $even (export "even") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 44)) (else (call $odd (i64.sub (local.get 0) (i64.const 1)))) ) ) (func $odd (export "odd") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 99)) (else (call $even (i64.sub (local.get 0) (i64.const 1)))) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call $runaway)) (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) (func $mutual-runaway2 (call $mutual-runaway1)) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call $const-i32) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call $const-i32) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call $const-i32)) ) (func (export "as-if-condition") (result i32) (if (result i32) (call $const-i32) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (call $const-i32) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call $const-i32))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (call $const-i32) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call $const-i32) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (call $const-i32) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (call $const-i32) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (call $const-i32) ) ) ) (func (export "as-store-first") (call $const-i32) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call $const-i32) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call $const-i32)) ) (func (export "as-return-value") (result i32) (call $const-i32) (return) ) (func (export "as-drop-operand") (call $const-i32) (drop) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (call $const-i32))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (call $const-i32)) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (call $const-i32)) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (call $const-i32)) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call $const-i32)) ) (func $dummy (param i32) (result i32) (local.get 0)) (func $du (param f32) (result f32) (local.get 0)) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call $du (f32.const 0x0p+0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call $dummy (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call $dummy (i32.const 1)))) ) ;; Test correct argument passing (func $return-from-long-argument-list-helper (param f32 i32 i32 f64 f32 f32 f32 f64 f32 i32 i32 f32 f64 i64 i64 i32 i64 i64 f32 i64 i64 i64 i32 f32 f32 f32 f64 f32 i32 i64 f32 f64 f64 f32 i32 f32 f32 f64 i64 f64 i32 i64 f32 f64 i32 i32 i32 i64 f64 i32 i64 i64 f64 f64 f64 f64 f64 f64 i32 f32 f64 f64 i32 i64 f32 f32 f32 i32 f64 f64 f64 f64 f64 f32 i64 i64 i32 i32 i32 f32 f64 i32 i64 f32 f32 f32 i32 i32 f32 f64 i64 f32 f64 f32 f32 f32 i32 f32 i64 i32) (result i32) (local.get 99) ) (func (export "return-from-long-argument-list") (param i32) (result i32) (call $return-from-long-argument-list-helper (f32.const 0) (i32.const 0) (i32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (i64.const 0) (local.get 0)) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-i32-i64") (i32.const 0x132) (i64.const 0x164)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-i32-f64") (i32.const 32) (f64.const 1.64)) (assert_return (invoke "type-all-i32-i32") (i32.const 2) (i32.const 1)) (assert_return (invoke "type-all-f32-f64") (f64.const 2) (f32.const 1)) (assert_return (invoke "type-all-f64-i32") (i32.const 2) (f64.const 1)) (assert_return (invoke "as-binary-all-operands") (i32.const 7)) (assert_return (invoke "as-mixed-operands") (i32.const 32)) (assert_return (invoke "as-call-all-operands") (i32.const 3) (i32.const 4)) (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i32.const 44)) (assert_return (invoke "even" (i64.const 1)) (i32.const 99)) (assert_return (invoke "even" (i64.const 100)) (i32.const 44)) (assert_return (invoke "even" (i64.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i32.const 0x132)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 0x132)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 0x132)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 0x132)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 0x132)) (assert_return (invoke "as-local.set-value") (i32.const 0x132)) (assert_return (invoke "as-local.tee-value") (i32.const 0x132)) (assert_return (invoke "as-global.set-value") (i32.const 0x132)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) (assert_return (invoke "return-from-long-argument-list" (i32.const 42)) (i32.const 42)) ;; Invalid typing (assert_invalid (module (func $type-void-vs-num (i32.eqz (call 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (i32.eqz (call 1))) (func (result i64) (i64.const 1)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-1 (call 1)) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-2 (call 1)) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-1-vs-0 (call 1 (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) (func (param i32 f64)) ) "type mismatch" ) (assert_invalid (module (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-block (block (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-block (block (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-loop (loop (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-loop (loop (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-then (if (i32.const 0) (then (call 1))) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-then (if (i32.const 0) (then (call 1 (i32.const 0)))) ) (func (param i32 i32)) ) "type mismatch" ) ;; Unbound function (assert_invalid (module (func $unbound-func (call 1))) "unknown function" ) (assert_invalid (module (func $large-func (call 1012321300))) "unknown function" ) ================================================ FILE: Test/WebAssembly/memory64/call_indirect.wast ================================================ ;; Test `call_indirect` operator (module ;; Auxiliary definitions (type $proc (func)) (type $out-i32 (func (result i32))) (type $out-i64 (func (result i64))) (type $out-f32 (func (result f32))) (type $out-f64 (func (result f64))) (type $out-f64-i32 (func (result f64 i32))) (type $over-i32 (func (param i32) (result i32))) (type $over-i64 (func (param i64) (result i64))) (type $over-f32 (func (param f32) (result f32))) (type $over-f64 (func (param f64) (result f64))) (type $over-i32-f64 (func (param i32 f64) (result i32 f64))) (type $swap-i32-i64 (func (param i32 i64) (result i64 i32))) (type $f32-i32 (func (param f32 i32) (result i32))) (type $i32-i64 (func (param i32 i64) (result i64))) (type $f64-f32 (func (param f64 f32) (result f32))) (type $i64-f64 (func (param i64 f64) (result f64))) (type $over-i32-duplicate (func (param i32) (result i32))) (type $over-i64-duplicate (func (param i64) (result i64))) (type $over-f32-duplicate (func (param f32) (result f32))) (type $over-f64-duplicate (func (param f64) (result f64))) (func $const-i32 (type $out-i32) (i32.const 0x132)) (func $const-i64 (type $out-i64) (i64.const 0x164)) (func $const-f32 (type $out-f32) (f32.const 0xf32)) (func $const-f64 (type $out-f64) (f64.const 0xf64)) (func $const-f64-i32 (type $out-f64-i32) (f64.const 0xf64) (i32.const 32)) (func $id-i32 (type $over-i32) (local.get 0)) (func $id-i64 (type $over-i64) (local.get 0)) (func $id-f32 (type $over-f32) (local.get 0)) (func $id-f64 (type $over-f64) (local.get 0)) (func $id-i32-f64 (type $over-i32-f64) (local.get 0) (local.get 1)) (func $swap-i32-i64 (type $swap-i32-i64) (local.get 1) (local.get 0)) (func $i32-i64 (type $i32-i64) (local.get 1)) (func $i64-f64 (type $i64-f64) (local.get 1)) (func $f32-i32 (type $f32-i32) (local.get 1)) (func $f64-f32 (type $f64-f32) (local.get 1)) (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) (table funcref (elem $const-i32 $const-i64 $const-f32 $const-f64 ;; 0..3 $id-i32 $id-i64 $id-f32 $id-f64 ;; 4..7 $f32-i32 $i32-i64 $f64-f32 $i64-f64 ;; 9..11 $fac-i64 $fib-i64 $even $odd ;; 12..15 $runaway $mutual-runaway1 $mutual-runaway2 ;; 16..18 $over-i32-duplicate $over-i64-duplicate ;; 19..20 $over-f32-duplicate $over-f64-duplicate ;; 21..22 $fac-i32 $fac-f32 $fac-f64 ;; 23..25 $fib-i32 $fib-f32 $fib-f64 ;; 26..28 $const-f64-i32 $id-i32-f64 $swap-i32-i64 ;; 29..31 ) ) ;; Syntax (func (call_indirect (i32.const 0)) (call_indirect (param i64) (i64.const 0) (i32.const 0)) (call_indirect (param i64) (param) (param f64 i32 i64) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) (call_indirect (result) (i32.const 0)) (drop (i32.eqz (call_indirect (result i32) (i32.const 0)))) (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0)))) (drop (i32.eqz (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0)) )) (drop (i32.eqz (call_indirect (param) (param i64) (param) (param f64 i32 i64) (param) (param) (result) (result i32) (result) (result) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) )) (drop (i64.eqz (call_indirect (type $over-i64) (param i64) (result i64) (i64.const 0) (i32.const 0) ) )) ) ;; Typing (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0)) ) (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1)) ) (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2)) ) (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3)) ) (func (export "type-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-index") (result i64) (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) ) (func (export "type-first-i32") (result i32) (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) ) (func (export "type-first-i64") (result i64) (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) ) (func (export "type-first-f32") (result f32) (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) ) (func (export "type-first-f64") (result f64) (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) ) (func (export "type-second-i32") (result i32) (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) ) (func (export "type-second-i64") (result i64) (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) ) (func (export "type-second-f32") (result f32) (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) ) (func (export "type-second-f64") (result f64) (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) ) (func (export "type-all-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-all-i32-f64") (result i32 f64) (call_indirect (type $over-i32-f64) (i32.const 1) (f64.const 2) (i32.const 30) ) ) (func (export "type-all-i32-i64") (result i64 i32) (call_indirect (type $swap-i32-i64) (i32.const 1) (i64.const 2) (i32.const 31) ) ) ;; Dispatch (func (export "dispatch") (param i32 i64) (result i64) (call_indirect (type $over-i64) (local.get 1) (local.get 0)) ) (func (export "dispatch-structural-i64") (param i32) (result i64) (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) ) (func (export "dispatch-structural-i32") (param i32) (result i32) (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0)) ) (func (export "dispatch-structural-f32") (param i32) (result f32) (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0)) ) (func (export "dispatch-structural-f64") (param i32) (result f64) (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0)) ) ;; Recursion (func $fac-i64 (export "fac-i64") (type $over-i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 12) ) ) ) ) ) (func $fib-i64 (export "fib-i64") (type $over-i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 2)) (i32.const 13) ) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 13) ) ) ) ) ) (func $fac-i32 (export "fac-i32") (type $over-i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 1)) (else (i32.mul (local.get 0) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 23) ) ) ) ) ) (func $fac-f32 (export "fac-f32") (type $over-f32) (if (result f32) (f32.eq (local.get 0) (f32.const 0.0)) (then (f32.const 1.0)) (else (f32.mul (local.get 0) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 24) ) ) ) ) ) (func $fac-f64 (export "fac-f64") (type $over-f64) (if (result f64) (f64.eq (local.get 0) (f64.const 0.0)) (then (f64.const 1.0)) (else (f64.mul (local.get 0) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 25) ) ) ) ) ) (func $fib-i32 (export "fib-i32") (type $over-i32) (if (result i32) (i32.le_u (local.get 0) (i32.const 1)) (then (i32.const 1)) (else (i32.add (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 2)) (i32.const 26) ) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 26) ) ) ) ) ) (func $fib-f32 (export "fib-f32") (type $over-f32) (if (result f32) (f32.le (local.get 0) (f32.const 1.0)) (then (f32.const 1.0)) (else (f32.add (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 2.0)) (i32.const 27) ) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 27) ) ) ) ) ) (func $fib-f64 (export "fib-f64") (type $over-f64) (if (result f64) (f64.le (local.get 0) (f64.const 1.0)) (then (f64.const 1.0)) (else (f64.add (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 2.0)) (i32.const 28) ) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 28) ) ) ) ) ) (func $even (export "even") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 44)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 15) ) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 99)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 14) ) ) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-if-condition") (result i32) (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i64) (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)))) ) (func (export "as-br_table-first") (result f32) (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0)) ) (func (export "as-store-first") (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-return-value") (result i32) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return) ) (func (export "as-drop-operand") (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop) ) (func (export "as-br-value") (result f32) (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6)))) ) (func (export "as-local.set-value") (result f64) (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0) ) (func (export "as-local.tee-value") (result f64) (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) ) (global $a (mut f64) (f64.const 10.0)) (func (export "as-global.set-value") (result f64) (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6)) ) ) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-index") (i64.const 100)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-all-i32-f64") (i32.const 1) (f64.const 2)) (assert_return (invoke "type-all-i32-i64") (i64.const 2) (i32.const 1)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 32) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") (assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880)) (assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55)) (assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9)) (assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9)) (assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880)) (assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55)) (assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0)) (assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0)) (assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch") (assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120)) (assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800)) (assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0)) (assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0)) (assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0)) (assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0)) (assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2)) (assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8)) (assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946)) (assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0)) (assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0)) (assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0)) (assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0)) (assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0)) (assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0)) (assert_return (invoke "even" (i32.const 0)) (i32.const 44)) (assert_return (invoke "even" (i32.const 1)) (i32.const 99)) (assert_return (invoke "even" (i32.const 100)) (i32.const 44)) (assert_return (invoke "even" (i32.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i64.const 0x164)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (f32.const 0xf32)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (f32.const 1)) (assert_return (invoke "as-local.set-value") (f64.const 1)) (assert_return (invoke "as-local.tee-value") (f64.const 1)) (assert_return (invoke "as-global.set-value") (f64.const 1.0)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) ;; Invalid syntax (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (type $sig) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (result i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (type $sig) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func" " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (param i32) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "inline function type" ) ;; Invalid typing (assert_invalid (module (type (func)) (func $no-table (call_indirect (type 0) (i32.const 0))) ) "unknown table" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (result i64))) (table 0 funcref) (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-2-vs-0 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-first-void-vs-num (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-second-void-vs-num (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 f64))) (table 0 funcref) (func $type-first-num-vs-num (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $type-second-num-vs-num (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-block (block (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-block (block (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) ) "type mismatch" ) ;; Unbound type (assert_invalid (module (table 0 funcref) (func $unbound-type (call_indirect (type 1) (i32.const 0))) ) "unknown type" ) (assert_invalid (module (table 0 funcref) (func $large-type (call_indirect (type 1012321300) (i32.const 0))) ) "unknown type" ) ;; Unbound function in table (assert_invalid (module (table funcref (elem 0 0))) "unknown function" ) ================================================ FILE: Test/WebAssembly/memory64/const.wast ================================================ ;; Test t.const instructions ;; Syntax error (module (func (i32.const 0_123_456_789) drop)) (module (func (i32.const 0x0_9acf_fBDF) drop)) (assert_malformed (module quote "(func (i32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 0xg) drop)") "unknown operator" ) (module (func (i64.const 0_123_456_789) drop)) (module (func (i64.const 0x0125_6789_ADEF_bcef) drop)) (assert_malformed (module quote "(func (i64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 0xg) drop)") "unknown operator" ) (module (func (f32.const 0123456789) drop)) (module (func (f32.const 0123456789e019) drop)) (module (func (f32.const 0123456789e+019) drop)) (module (func (f32.const 0123456789e-019) drop)) (module (func (f32.const 0123456789.) drop)) (module (func (f32.const 0123456789.e019) drop)) (module (func (f32.const 0123456789.e+019) drop)) (module (func (f32.const 0123456789.e-019) drop)) (module (func (f32.const 0123456789.0123456789) drop)) (module (func (f32.const 0123456789.0123456789e019) drop)) (module (func (f32.const 0123456789.0123456789e+019) drop)) (module (func (f32.const 0123456789.0123456789e-019) drop)) (module (func (f32.const 0x0123456789ABCDEF) drop)) (module (func (f32.const 0x0123456789ABCDEFp019) drop)) (module (func (f32.const 0x0123456789ABCDEFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEFp-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.) drop)) (module (func (f32.const 0x0123456789ABCDEF.p019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aF) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp-019) drop)) (assert_malformed (module quote "(func (f32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f32.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0pA) drop)") "unknown operator" ) (module (func (f64.const 0123456789) drop)) (module (func (f64.const 0123456789e019) drop)) (module (func (f64.const 0123456789e+019) drop)) (module (func (f64.const 0123456789e-019) drop)) (module (func (f64.const 0123456789.) drop)) (module (func (f64.const 0123456789.e019) drop)) (module (func (f64.const 0123456789.e+019) drop)) (module (func (f64.const 0123456789.e-019) drop)) (module (func (f64.const 0123456789.0123456789) drop)) (module (func (f64.const 0123456789.0123456789e019) drop)) (module (func (f64.const 0123456789.0123456789e+019) drop)) (module (func (f64.const 0123456789.0123456789e-019) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9e0_1_9) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.p0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (assert_malformed (module quote "(func (f64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f64.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0pA) drop)") "unknown operator" ) ;; Range error (module (func (i32.const 0xffffffff) drop)) (module (func (i32.const -0x80000000) drop)) (assert_malformed (module quote "(func (i32.const 0x100000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -0x80000001) drop)") "constant out of range" ) (module (func (i32.const 4294967295) drop)) (module (func (i32.const -2147483648) drop)) (assert_malformed (module quote "(func (i32.const 4294967296) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -2147483649) drop)") "constant out of range" ) (module (func (i64.const 0xffffffffffffffff) drop)) (module (func (i64.const -0x8000000000000000) drop)) (assert_malformed (module quote "(func (i64.const 0x10000000000000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -0x8000000000000001) drop)") "constant out of range" ) (module (func (i64.const 18446744073709551615) drop)) (module (func (i64.const -9223372036854775808) drop)) (assert_malformed (module quote "(func (i64.const 18446744073709551616) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -9223372036854775809) drop)") "constant out of range" ) (module (func (f32.const 0x1p127) drop)) (module (func (f32.const -0x1p127) drop)) (module (func (f32.const 0x1.fffffep127) drop)) (module (func (f32.const -0x1.fffffep127) drop)) (module (func (f32.const 0x1.fffffe7p127) drop)) (module (func (f32.const -0x1.fffffe7p127) drop)) (module (func (f32.const 0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const -0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const 0x1.fffffefffffffffffffp127) drop)) (module (func (f32.const -0x1.fffffefffffffffffffp127) drop)) (assert_malformed (module quote "(func (f32.const 0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const 0x1.ffffffp127) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1.ffffffp127) drop)") "constant out of range" ) (module (func (f32.const 1e38) drop)) (module (func (f32.const -1e38) drop)) (assert_malformed (module quote "(func (f32.const 1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -1e39) drop)") "constant out of range" ) (module (func (f32.const 340282356779733623858607532500980858880) drop)) (module (func (f32.const -340282356779733623858607532500980858880) drop)) (assert_malformed (module quote "(func (f32.const 340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -340282356779733661637539395458142568448) drop)") "constant out of range" ) (module (func (f64.const 0x1p1023) drop)) (module (func (f64.const -0x1p1023) drop)) (module (func (f64.const 0x1.fffffffffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffffp1023) drop)) (module (func (f64.const 0x1.fffffffffffff7p1023) drop)) (module (func (f64.const -0x1.fffffffffffff7p1023) drop)) (module (func (f64.const 0x1.fffffffffffff7ffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffff7ffffffp1023) drop)) (assert_malformed (module quote "(func (f64.const 0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const 0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (module (func (f64.const 1e308) drop)) (module (func (f64.const -1e308) drop)) (assert_malformed (module quote "(func (f64.const 1e309) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -1e309) drop)") "constant out of range" ) (module (func (f64.const 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (f64.const -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (assert_malformed (module quote "(func (f64.const 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (module (func (f32.const nan:0x1) drop)) (module (func (f64.const nan:0x1) drop)) (module (func (f32.const nan:0x7f_ffff) drop)) (module (func (f64.const nan:0xf_ffff_ffff_ffff) drop)) (assert_malformed (module quote "(func (f32.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const nan:0x80_0000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x10_0000_0000_0000) drop)") "constant out of range" ) ;; Rounding behaviour ;; f32, small exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) ;; f32, large exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000000))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000000))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000007ffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000007ffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000000))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000000))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000bffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x400000bffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000c000000))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x400000c000000))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951488))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951488))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951489))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951489))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169215))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169215))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169216))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169216))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) ;; f32, subnormal (module (func (export "f") (result f32) (f32.const +0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000006p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000006p-126)) ;; f32, round down at limit to infinity (module (func (export "f") (result f32) (f32.const +0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) ;; f64, small exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+999)) ;; f64, large exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const +1152921504606847104))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847104))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847105))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847105))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847359))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847359))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847360))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847360))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+60)) ;; f64, subnormal (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-1022)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-1022)) ;; f64, round down at limit to infinity (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) ================================================ FILE: Test/WebAssembly/memory64/conversions.wast ================================================ (module (func (export "i64.extend_i32_s") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_i32_u") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_f32_s") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_f32_u") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) (func (export "i32.trunc_f64_s") (param $x f64) (result i32) (i32.trunc_f64_s (local.get $x))) (func (export "i32.trunc_f64_u") (param $x f64) (result i32) (i32.trunc_f64_u (local.get $x))) (func (export "i64.trunc_f32_s") (param $x f32) (result i64) (i64.trunc_f32_s (local.get $x))) (func (export "i64.trunc_f32_u") (param $x f32) (result i64) (i64.trunc_f32_u (local.get $x))) (func (export "i64.trunc_f64_s") (param $x f64) (result i64) (i64.trunc_f64_s (local.get $x))) (func (export "i64.trunc_f64_u") (param $x f64) (result i64) (i64.trunc_f64_u (local.get $x))) (func (export "i32.trunc_sat_f32_s") (param $x f32) (result i32) (i32.trunc_sat_f32_s (local.get $x))) (func (export "i32.trunc_sat_f32_u") (param $x f32) (result i32) (i32.trunc_sat_f32_u (local.get $x))) (func (export "i32.trunc_sat_f64_s") (param $x f64) (result i32) (i32.trunc_sat_f64_s (local.get $x))) (func (export "i32.trunc_sat_f64_u") (param $x f64) (result i32) (i32.trunc_sat_f64_u (local.get $x))) (func (export "i64.trunc_sat_f32_s") (param $x f32) (result i64) (i64.trunc_sat_f32_s (local.get $x))) (func (export "i64.trunc_sat_f32_u") (param $x f32) (result i64) (i64.trunc_sat_f32_u (local.get $x))) (func (export "i64.trunc_sat_f64_s") (param $x f64) (result i64) (i64.trunc_sat_f64_s (local.get $x))) (func (export "i64.trunc_sat_f64_u") (param $x f64) (result i64) (i64.trunc_sat_f64_u (local.get $x))) (func (export "f32.convert_i32_s") (param $x i32) (result f32) (f32.convert_i32_s (local.get $x))) (func (export "f32.convert_i64_s") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f64.convert_i32_s") (param $x i32) (result f64) (f64.convert_i32_s (local.get $x))) (func (export "f64.convert_i64_s") (param $x i64) (result f64) (f64.convert_i64_s (local.get $x))) (func (export "f32.convert_i32_u") (param $x i32) (result f32) (f32.convert_i32_u (local.get $x))) (func (export "f32.convert_i64_u") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) (func (export "f64.convert_i32_u") (param $x i32) (result f64) (f64.convert_i32_u (local.get $x))) (func (export "f64.convert_i64_u") (param $x i64) (result f64) (f64.convert_i64_u (local.get $x))) (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote_f32 (local.get $x))) (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote_f64 (local.get $x))) (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret_i32 (local.get $x))) (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret_i64 (local.get $x))) (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret_f32 (local.get $x))) (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret_f64 (local.get $x))) ) (assert_return (invoke "i64.extend_i32_s" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_s" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -10000)) (i64.const -10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -1)) (i64.const -1)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_u" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_u" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) (assert_return (invoke "i64.extend_i32_u" (i32.const -1)) (i64.const 0xffffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) (assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) (assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) (assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f32_s" (f32.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -2147483904.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_trap (invoke "i32.trunc_f32_u" (f32.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9)) (i32.const 2147483647)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483649.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.9)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9)) (i32.const 4294967295)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e16)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e30)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 9223372036854775808)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f32_s" (f32.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -9223373136366403584.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_trap (invoke "i64.trunc_f32_u" (f32.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_s" (f64.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -9223372036854777856.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_u" (f64.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "f32.convert_i32_s" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const -2147483648)) (f32.const -2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) ;; Saturating conversions: test all the same values as the non-saturating conversions. (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483904.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483649.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e16)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e30)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223373136366403584.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854777856.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i64.const 0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_s" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_s" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) (assert_return (invoke "f32.convert_i64_s" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_s" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53)) (assert_return (invoke "f64.convert_i32_s" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_s" (i32.const -2147483648)) (f64.const -2147483648)) (assert_return (invoke "f64.convert_i32_s" (i32.const 987654321)) (f64.const 987654321)) (assert_return (invoke "f64.convert_i64_s" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) (assert_return (invoke "f64.convert_i64_s" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740993)) (f64.const -9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740995)) (f64.const -9007199254740996)) (assert_return (invoke "f32.convert_i32_u" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const -2147483648)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xffffffff)) (f32.const 4294967296.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000080)) (f32.const 0x1.000000p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000081)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000082)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe80)) (f32.const 0x1.fffffcp+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe81)) (f32.const 0x1.fffffep+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe82)) (f32.const 0x1.fffffep+31)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_u" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_u" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_u" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x7fffffbfffffffff)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x8000008000000001)) (f32.const 0x1.000002p+63)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xfffffe8000000001)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "f64.convert_i32_u" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_u" (i32.const -2147483648)) (f64.const 2147483648)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0xffffffff)) (f64.const 4294967295.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_u" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000400)) (f64.const 0x1.0000000000000p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000401)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000402)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff400)) (f64.const 0x1.ffffffffffffep+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff401)) (f64.const 0x1.fffffffffffffp+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff402)) (f64.const 0x1.fffffffffffffp+63)) ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) (assert_return (invoke "f64.promote_f32" (f32.const inf)) (f64.const inf)) (assert_return (invoke "f64.promote_f32" (f32.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.promote_f32" (f32.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f64.promote_f32" (f32.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const -nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) (assert_return (invoke "f32.demote_f64" (f64.const inf)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) (assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const -nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) (assert_return (invoke "i32.reinterpret_f32" (f32.const inf)) (i32.const 0x7f800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -inf)) (i32.const 0xff800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) (assert_return (invoke "i64.reinterpret_f64" (f64.const inf)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -inf)) (i64.const 0xfff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) ;; Type check (assert_invalid (module (func (result i32) (i32.wrap_i64 (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.reinterpret_f32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.reinterpret_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.demote_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.reinterpret_i32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/custom.wast ================================================ (module binary "\00asm" "\01\00\00\00" "\00\24\10" "a custom section" "this is the payload" "\00\20\10" "a custom section" "this is payload" "\00\11\10" "a custom section" "" "\00\10\00" "" "this is payload" "\00\01\00" "" "" "\00\24\10" "\00\00custom sectio\00" "this is the payload" "\00\24\10" "\ef\bb\bfa custom sect" "this is the payload" "\00\24\10" "a custom sect\e2\8c\a3" "this is the payload" "\00\1f\16" "module within a module" "\00asm" "\01\00\00\00" ) (module binary "\00asm" "\01\00\00\00" "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\01\01\00" ;; type section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\02\01\00" ;; import section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\03\01\00" ;; function section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\04\01\00" ;; table section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\05\01\00" ;; memory section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\06\01\00" ;; global section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\07\01\00" ;; export section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\09\01\00" ;; element section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0a\01\00" ;; code section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0b\01\00" ;; data section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" ) (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\1a\06" "custom" "this is the payload" ;; custom section "\03\02\01\00" ;; function section "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00\00\05\01\00\07\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\26\10" "a custom section" "this is the payload" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\25\10" "a custom section" "this is the payload" "\00\24\10" "a custom section" "this is the payload" ) "malformed section id" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\25\10" "a custom section" "this is the payload" ;; wrong length! "\03\02\01\00" ;; function section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) "function and code section have inconsistent lengths" ) ;; Test concatenated modules. (assert_malformed (module binary "\00asm\01\00\00\00" "\00asm\01\00\00\00" ) "length out of bounds" ) ================================================ FILE: Test/WebAssembly/memory64/data.wast ================================================ ;; Test the data section ;; Syntax (module (memory $m 1) (data (i32.const 0)) (data (i32.const 1) "a" "" "bcd") (data (offset (i32.const 0))) (data (offset (i32.const 0)) "" "a" "bc" "") (data (memory 0) (i32.const 0)) (data (memory 0x0) (i32.const 1) "a" "" "bcd") (data (memory 0x000) (offset (i32.const 0))) (data (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data (memory $m) (i32.const 0)) (data (memory $m) (i32.const 1) "a" "" "bcd") (data (memory $m) (offset (i32.const 0))) (data (memory $m) (offset (i32.const 0)) "" "a" "bc" "") ) ;; Basic use (module (memory 1) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") ) (module (memory 1) (data (i32.const 0) "a") (data (i32.const 3) "b") (data (i32.const 100) "cde") (data (i32.const 5) "x") (data (i32.const 3) "c") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 1) "b") (data (i32.const 2) "cde") (data (i32.const 3) "f") (data (i32.const 2) "g") (data (i32.const 1) "h") ) (module (global (import "spectest" "global_i32") i32) (memory 1) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get 0) "a") ) (module (global $g (import "spectest" "global_i32") i32) (memory 1) (data (global.get $g) "a") ) (module (global $g (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get $g) "a") ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (module (memory 1) (data (global.get 0) "a") (global i32 (i32.const 0))) ;; (module (memory 1) (data (global.get $g) "a") (global $g i32 (i32.const 0))) ;; Corner cases (module (memory 1) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (memory 2) (data (i32.const 0x1_ffff) "a") ) (module (memory 0) (data (i32.const 0)) ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0)) ) (module (memory 0 0) (data (i32.const 0)) ) (module (memory 1) (data (i32.const 0x1_0000) "") ) (module (memory 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "" "") ) (module (memory 0 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0)) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0 3)) (data (global.get 0) "a") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 1) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 1) "a") ) ;; Invalid bounds for data (assert_unlinkable (module (memory 0) (data (i32.const 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 0 0) (data (i32.const 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 0 1) (data (i32.const 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 0) (data (i32.const 1)) ) "data segment does not fit" ) (assert_unlinkable (module (memory 0 1) (data (i32.const 1)) ) "data segment does not fit" ) ;; This seems to cause a time-out on Travis. (;assert_unlinkable (module (memory 0x10000) (data (i32.const 0xffffffff) "ab") ) "" ;; either out of memory or segment does not fit ;) (assert_unlinkable (module (global (import "spectest" "global_i32") i32) (memory 0) (data (global.get 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 1 2) (data (i32.const 0x1_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1)) (data (i32.const 0x1_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 2) (data (i32.const 0x2_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 2 3) (data (i32.const 0x2_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 1) (data (i32.const -1) "a") ) "data segment does not fit" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1)) (data (i32.const -1) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 2) (data (i32.const -100) "a") ) "data segment does not fit" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1)) (data (i32.const -100) "a") ) "data segment does not fit" ) ;; Data without memory (assert_invalid (module (data (i32.const 0) "") ) "unknown memory" ) ;; Data segment with memory index 1 (only memory 0 available) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\06\01" ;; data section "\01\41\00\0b" ;; data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 1 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\06\01" ;; data section "\01\41\00\0b" ;; data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 1 and vec(byte) as above, ;; only memory 0 available. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Data segment with memory index 1 and specially crafted vec(byte) after. ;; This is to detect incorrect validation where memory index is interpreted ;; as a flag followed by "\41" interpreted as the size of vec(byte) ;; with the expected number of bytes following. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Invalid offsets (assert_invalid (module (memory 1) (data (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (nop)) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) ================================================ FILE: Test/WebAssembly/memory64/elem.wast ================================================ ;; Test the element section ;; Syntax (module (table $t 10 funcref) (func $f) (elem (i32.const 0)) (elem (i32.const 0) $f $f) (elem (offset (i32.const 0))) (elem (offset (i32.const 0)) $f $f) (elem (table 0) (i32.const 0)) (elem (table 0x0) (i32.const 0) $f $f) (elem (table 0x000) (offset (i32.const 0))) (elem (table 0) (offset (i32.const 0)) $f $f) (elem (table $t) (i32.const 0)) (elem (table $t) (i32.const 0) $f $f) (elem (table $t) (offset (i32.const 0))) (elem (table $t) (offset (i32.const 0)) $f $f) ) ;; Basic use (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 5) $f) (elem (i32.const 3) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 3) $f) (elem (i32.const 5) $f) ) (module (global (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get 0) $f) ) (module (global $g (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get $g) $f) ) (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 7) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-7") (i32.const 65)) (assert_return (invoke "call-9") (i32.const 66)) ;; Corner cases (module (table 10 funcref) (func $f) (elem (i32.const 9) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) ) (module (table 0 funcref) (elem (i32.const 0)) ) (module (import "spectest" "table" (table 0 funcref)) (elem (i32.const 0)) ) (module (table 0 0 funcref) (elem (i32.const 0)) ) (module (table 20 funcref) (elem (i32.const 20)) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 100 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 1) $f) ) (module (import "spectest" "table" (table 0 30 funcref)) (func $f) (elem (i32.const 1) $f) ) ;; Invalid bounds for elements (assert_unlinkable (module (table 0 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 0 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 1 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 funcref) (elem (i32.const 1)) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 20 funcref) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const -1) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -1) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const -10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -10) $f) ) "elements segment does not fit" ) ;; Element without table (assert_invalid (module (func $f) (elem (i32.const 0) $f) ) "unknown table" ) ;; Invalid offsets (assert_invalid (module (table 1 funcref) (elem (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) ;; Two elements target the same slot (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten") (i32.const 66)) (module (type $out-i32 (func (result i32))) (import "spectest" "table" (table 10 funcref)) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten-element") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten-element") (i32.const 66)) ;; Element sections across multiple modules change the same table (module $module1 (type $out-i32 (func (result i32))) (table (export "shared-table") 10 funcref) (elem (i32.const 8) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-8") (type $out-i32) (call_indirect (type $out-i32) (i32.const 8)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (register "module1" $module1) (assert_trap (invoke $module1 "call-7") "uninitialized element") (assert_return (invoke $module1 "call-8") (i32.const 65)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module2 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 7) $const-i32-c) (elem (i32.const 8) $const-i32-d) (func $const-i32-c (type $out-i32) (i32.const 67)) (func $const-i32-d (type $out-i32) (i32.const 68)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 68)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module3 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 8) $const-i32-e) (elem (i32.const 9) $const-i32-f) (func $const-i32-e (type $out-i32) (i32.const 69)) (func $const-i32-f (type $out-i32) (i32.const 70)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 69)) (assert_return (invoke $module1 "call-9") (i32.const 70)) ================================================ FILE: Test/WebAssembly/memory64/endianness.wast ================================================ (module (memory 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i32) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i32.add (local.get $address) (i32.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i32) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i32.add (local.get $address) (i32.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i32) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i32.add (local.get $address) (i32.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i32) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i32.add (local.get $address) (i32.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i32) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i32.add (local.get $address) (i32.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i32) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i32.add (local.get $address) (i32.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_s (i32.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_u (i32.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i32.const 0) (local.get $value)) (i32.load (i32.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i32.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i32.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i32.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i32.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i32.const 0) (local.get $value)) (i64.load (i32.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i32.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i32.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i32.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i32.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i32.const 0) (local.get $value)) (call $i16_load_little (i32.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i32.const 0) (local.get $value)) (call $i32_load_little (i32.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i32.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i32.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i32.const 0) (local.get $value)) (call $i64_load_little (i32.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i32.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i32.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i32.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i32.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) ================================================ FILE: Test/WebAssembly/memory64/endianness64.wast ================================================ (module (memory i64 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i64) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i64.add (local.get $address) (i64.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i64) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i64.add (local.get $address) (i64.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i64) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i64.add (local.get $address) (i64.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i64) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i64.add (local.get $address) (i64.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i64) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i64.add (local.get $address) (i64.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i64) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i64.add (local.get $address) (i64.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i64.const 0) (local.get $value)) (i32.load16_s (i64.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i64.const 0) (local.get $value)) (i32.load16_u (i64.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i64.const 0) (local.get $value)) (i32.load (i64.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i64.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i64.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i64.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i64.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i64.const 0) (local.get $value)) (i64.load (i64.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i64.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i64.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i64.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i64.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i64.const 0) (local.get $value)) (call $i16_load_little (i64.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i64.const 0) (local.get $value)) (call $i32_load_little (i64.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i64.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i64.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i64.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i64.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i64.const 0) (local.get $value)) (call $i64_load_little (i64.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i64.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i64.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i64.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i64.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) ================================================ FILE: Test/WebAssembly/memory64/exports.wast ================================================ ;; Functions (module (func) (export "a" (func 0))) (module (func) (export "a" (func 0)) (export "b" (func 0))) (module (func) (func) (export "a" (func 0)) (export "b" (func 1))) (module (func (export "a"))) (module (func (export "a") (export "b") (export "c"))) (module (func (export "a") (export "b") (param i32))) (module (func) (export "a" (func 0))) (module (func $a (export "a"))) (module (func $a) (export "a" (func $a))) (module (export "a" (func 0)) (func)) (module (export "a" (func $a)) (func $a)) (module $Func (export "e" (func $f)) (func $f (param $n i32) (result i32) (return (i32.add (local.get $n) (i32.const 1))) ) ) (assert_return (invoke "e" (i32.const 42)) (i32.const 43)) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module) (module $Other1) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (assert_invalid (module (export "a" (func 0))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (import "spectest" "print_i32" (func (param i32))) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) "duplicate export name" ) (assert_invalid (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (func) (table 0 funcref) (export "a" (func 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Globals (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) (module (global (export "a") i32 (i32.const 0))) (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global $a (export "a") i32 (i32.const 0))) (module (global $a i32 (i32.const 0)) (export "a" (global $a))) (module (export "a" (global 0)) (global i32 (i32.const 0))) (module (export "a" (global $a)) (global $a i32 (i32.const 0))) (module $Global (export "e" (global $g)) (global $g i32 (i32.const 42)) ) (assert_return (get "e") (i32.const 42)) (assert_return (get $Global "e") (i32.const 42)) (module) (module $Other2) (assert_return (get $Global "e") (i32.const 42)) (assert_invalid (module (export "a" (global 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (table 0 funcref) (export "a" (global 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Tables (module (table 0 funcref) (export "a" (table 0))) (module (table 0 funcref) (export "a" (table 0)) (export "b" (table 0))) ;; No multiple tables yet. ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "b" (table 1))) (module (table (export "a") 0 funcref)) (module (table (export "a") 0 1 funcref)) (module (table 0 funcref) (export "a" (table 0))) (module (table 0 1 funcref) (export "a" (table 0))) (module (table $a (export "a") 0 funcref)) (module (table $a (export "a") 0 1 funcref)) (module (table $a 0 funcref) (export "a" (table $a))) (module (table $a 0 1 funcref) (export "a" (table $a))) (module (export "a" (table 0)) (table 0 funcref)) (module (export "a" (table 0)) (table 0 1 funcref)) (module (export "a" (table $a)) (table $a 0 funcref)) (module (export "a" (table $a)) (table $a 0 1 funcref)) (; TODO: access table ;) (assert_invalid (module (export "a" (table 0))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (import "spectest" "table" (table 10 20 funcref)) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 0)) (export "a" (table 0))) "duplicate export name" ) ;; No multiple tables yet. ;; (assert_invalid ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "a" (table 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (table 0 funcref) (func) (export "a" (table 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Memories (module (memory 0) (export "a" (memory 0))) (module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) ;; No multiple memories yet. ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) (module (memory (export "a") 0)) (module (memory (export "a") 0 1)) (module (memory 0) (export "a" (memory 0))) (module (memory 0 1) (export "a" (memory 0))) (module (memory $a (export "a") 0)) (module (memory $a (export "a") 0 1)) (module (memory $a 0) (export "a" (memory $a))) (module (memory $a 0 1) (export "a" (memory $a))) (module (export "a" (memory 0)) (memory 0)) (module (export "a" (memory 0)) (memory 0 1)) (module (export "a" (memory $a)) (memory $a 0)) (module (export "a" (memory $a)) (memory $a 0 1)) (; TODO: access memory ;) (assert_invalid (module (export "a" (memory 0))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (import "spectest" "memory" (memory 1 2)) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) "duplicate export name" ) ;; No multiple memories yet. ;; (assert_invalid ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (table 0 funcref) (export "a" (memory 0)) (export "a" (table 0))) "duplicate export name" ) ================================================ FILE: Test/WebAssembly/memory64/f32.wast ================================================ ;; Test all the f32 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f32_bitwise.wast and f32_cmp.wast). (module (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) ) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -inf)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -inf)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -inf)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -inf)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sqrt" (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) (assert_return (invoke "sqrt" (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) (assert_return (invoke "sqrt" (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) (assert_return (invoke "sqrt" (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sqrt" (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) (assert_return (invoke "sqrt" (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "sqrt" (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const inf)) (f32.const inf)) (assert_return (invoke "sqrt" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) (assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "floor" (f32.const inf)) (f32.const inf)) (assert_return (invoke "floor" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) (assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "ceil" (f32.const inf)) (f32.const inf)) (assert_return (invoke "ceil" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "trunc" (f32.const inf)) (f32.const inf)) (assert_return (invoke "trunc" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "nearest" (f32.const inf)) (f32.const inf)) (assert_return (invoke "nearest" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f32) (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.trunc (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/f32_bitwise.wast ================================================ ;; Test all the f32 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "neg" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) ;; Type check (assert_invalid (module (func (result f32) (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/f32_cmp.wast ================================================ ;; Test all the f32 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f32) (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/f64.wast ================================================ ;; Test all the f64 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f64_bitwise.wast and f64_cmp.wast). (module (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) ) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -inf)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -inf)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sqrt" (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) (assert_return (invoke "sqrt" (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) (assert_return (invoke "sqrt" (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) (assert_return (invoke "sqrt" (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) (assert_return (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) (assert_return (invoke "sqrt" (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const inf)) (f64.const inf)) (assert_return (invoke "sqrt" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) (assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "floor" (f64.const inf)) (f64.const inf)) (assert_return (invoke "floor" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) (assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "ceil" (f64.const inf)) (f64.const inf)) (assert_return (invoke "ceil" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "trunc" (f64.const inf)) (f64.const inf)) (assert_return (invoke "trunc" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "nearest" (f64.const inf)) (f64.const inf)) (assert_return (invoke "nearest" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f64) (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.trunc (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/f64_bitwise.wast ================================================ ;; Test all the f64 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "neg" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) ;; Type check (assert_invalid (module (func (result f64) (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/f64_cmp.wast ================================================ ;; Test all the f64 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f64) (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/fac.wast ================================================ (module ;; Recursive factorial (func (export "fac-rec") (param i64) (result i64) (if (result i64) (i64.eq (local.get 0) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call 0 (i64.sub (local.get 0) (i64.const 1)))) ) ) ) ;; Recursive factorial named (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) (if (result i64) (i64.eq (local.get $n) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get $n) (call $fac-rec-named (i64.sub (local.get $n) (i64.const 1))) ) ) ) ) ;; Iterative factorial (func (export "fac-iter") (param i64) (result i64) (local i64 i64) (local.set 1 (local.get 0)) (local.set 2 (i64.const 1)) (block (loop (if (i64.eq (local.get 1) (i64.const 0)) (then (br 2)) (else (local.set 2 (i64.mul (local.get 1) (local.get 2))) (local.set 1 (i64.sub (local.get 1) (i64.const 1))) ) ) (br 0) ) ) (local.get 2) ) ;; Iterative factorial named (func (export "fac-iter-named") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) ;; Optimized factorial. (func (export "fac-opt") (param i64) (result i64) (local i64) (local.set 1 (i64.const 1)) (block (br_if 0 (i64.lt_s (local.get 0) (i64.const 2))) (loop (local.set 1 (i64.mul (local.get 1) (local.get 0))) (local.set 0 (i64.add (local.get 0) (i64.const -1))) (br_if 0 (i64.gt_s (local.get 0) (i64.const 1))) ) ) (local.get 1) ) ;; Iterative factorial without locals. (func $pick0 (param i64) (result i64 i64) (local.get 0) (local.get 0) ) (func $pick1 (param i64 i64) (result i64 i64 i64) (local.get 0) (local.get 1) (local.get 0) ) (func (export "fac-ssa") (param i64) (result i64) (i64.const 1) (local.get 0) (loop $l (param i64 i64) (result i64) (call $pick1) (call $pick1) (i64.mul) (call $pick1) (i64.const 1) (i64.sub) (call $pick0) (i64.const 0) (i64.gt_u) (br_if $l) (drop) (return) ) ) ) (assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-ssa" (i64.const 25)) (i64.const 7034535277573963776)) (assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/memory64/float_exprs.wast ================================================ ;; Test interesting floating-point "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x*y+z is not done with x87-style intermediate precision. (module (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) ;; Test that x*y+z is not folded to fma. (module (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) (assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) ;; Test that x+0.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) (f32.add (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) (f64.add (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0 - x is not folded to -x. (module (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) (f32.sub (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) (f64.sub (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x - 0.0 is not folded to x. (module (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) (f32.sub (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) (f64.sub (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*0.0 is not folded to 0.0. (module (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*1.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0/x is not folded to 0.0. (module (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) (f32.div (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) (f64.div (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_div" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const -0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/1.0 is not folded to x. (module (func (export "f32.no_fold_div_one") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_div_one") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-1.0 is not folded to -x. (module (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -1.0))) (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -1.0))) ) (assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -0.0 - x is not folded to -x. (module (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) (f32.sub (f32.const -0.0) (local.get $x))) (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) (f64.sub (f64.const -0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -1.0 * x is not folded to -x. (module (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) (f32.mul (f32.const -1.0) (local.get $x))) (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) (f64.mul (f64.const -1.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x == x is not folded to true. (module (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) (f32.eq (local.get $x) (local.get $x))) (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) (f64.eq (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) ;; Test that x != x is not folded to false. (module (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) (f32.ne (local.get $x) (local.get $x))) (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) (f64.ne (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) ;; Test that x - x is not folded to 0.0. (module (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) (f32.sub (local.get $x) (local.get $x))) (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) (f64.sub (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_sub_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_sub_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const nan)) (f64.const nan:canonical)) ;; Test that x / x is not folded to 1.0. (module (func (export "f32.no_fold_div_self") (param $x f32) (result f32) (f32.div (local.get $x) (local.get $x))) (func (export "f64.no_fold_div_self") (param $x f64) (result f64) (f64.div (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_div_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const -0.0)) (f64.const nan:canonical)) ;; Test that x/3 is not folded to x*(1/3). (module (func (export "f32.no_fold_div_3") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 3.0))) (func (export "f64.no_fold_div_3") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 3.0))) ) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) ;; Test that (x*z)+(y*z) is not folded to (x+y)*z. (module (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $z)) (f32.mul (local.get $y) (local.get $z)))) (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $z)) (f64.mul (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) ;; Test that (x+y)*z is not folded to (x*z)+(y*z). (module (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (f32.add (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (f64.add (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) ;; Test that x*(y/z) is not folded to (x*y)/z. (module (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (local.get $x) (f32.div (local.get $y) (local.get $z)))) (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (local.get $x) (f64.div (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const inf)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) ;; Test that (x*y)/z is not folded to x*(y/z). (module (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) ;; Test that x+y+z+w is not reassociated. (module (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.add (f32.add (f32.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.add (f64.add (f64.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) (assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) ;; Test that x*y*z*w is not reassociated. (module (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.mul (f32.mul (f32.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.mul (f64.mul (f64.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) ;; Test that x/0 is not folded away. (module (func (export "f32.no_fold_div_0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_div_0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-0 is not folded away. (module (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -0.0))) (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -0.0))) ) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that sqrt(x*x+y*y) is not folded to hypot. (module (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.add (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.add (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) ;; Test that 1.0/x isn't approximated. (module (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) (f32.div (f32.const 1.0) (local.get $x))) ) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) ;; Test that 1.0/sqrt(x) isn't approximated or fused. (module (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) (f32.div (f32.const 1.0) (f32.sqrt (local.get $x)))) (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) (f64.div (f64.const 1.0) (f64.sqrt (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) ;; Test that sqrt(1.0/x) isn't approximated. (module (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) (f32.sqrt (f32.div (f32.const 1.0) (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) ;; Test that converting i32/i64 to f32/f64 and back isn't folded away. (module (func (export "i32.no_fold_f32_s") (param i32) (result i32) (i32.trunc_f32_s (f32.convert_i32_s (local.get 0)))) (func (export "i32.no_fold_f32_u") (param i32) (result i32) (i32.trunc_f32_u (f32.convert_i32_u (local.get 0)))) (func (export "i64.no_fold_f64_s") (param i64) (result i64) (i64.trunc_f64_s (f64.convert_i64_s (local.get 0)))) (func (export "i64.no_fold_f64_u") (param i64) (result i64) (i64.trunc_f64_u (f64.convert_i64_u (local.get 0)))) ) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) ;; Test that x+y-y is not folded to x. (module (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) (f32.sub (f32.add (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) (f64.sub (f64.add (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) ;; Test that x-y+y is not folded to x. (module (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) (f32.add (f32.sub (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) (f64.add (f64.sub (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) ;; Test that x*y/y is not folded to x. (module (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) ;; Test that x/y*y is not folded to x. (module (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) (f32.mul (f32.div (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) (f64.mul (f64.div (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) ;; Test that x/2*2 is not folded to x. (module (func (export "f32.no_fold_div2_mul2") (param $x f32) (result f32) (f32.mul (f32.div (local.get $x) (f32.const 2.0)) (f32.const 2.0))) (func (export "f64.no_fold_div2_mul2") (param $x f64) (result f64) (f64.mul (f64.div (local.get $x) (f64.const 2.0)) (f64.const 2.0))) ) (assert_return (invoke "f32.no_fold_div2_mul2" (f32.const 0x1.fffffep-126)) (f32.const 0x1p-125)) (assert_return (invoke "f64.no_fold_div2_mul2" (f64.const 0x1.fffffffffffffp-1022)) (f64.const 0x1p-1021)) ;; Test that promote(demote(x)) is not folded to x. (module (func (export "no_fold_demote_promote") (param $x f64) (result f64) (f64.promote_f32 (f32.demote_f64 (local.get $x)))) ) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) ;; Test that demote(promote(x)) is not folded to x, and aside from NaN is ;; bit-preserving. (module (func (export "no_fold_promote_demote") (param $x f32) (result f32) (f32.demote_f64 (f64.promote_f32 (local.get $x)))) ) (assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const inf)) (f32.const inf)) (assert_return (invoke "no_fold_promote_demote" (f32.const -inf)) (f32.const -inf)) ;; Test that demote(x+promote(y)) is not folded to demote(x)+y. (module (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.add (local.get $x) (f64.promote_f32 (local.get $y))))) (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $y)) (local.get $x)))) ) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) ;; Test that demote(x-promote(y)) is not folded to demote(x)-y. (module (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.sub (local.get $x) (f64.promote_f32 (local.get $y))))) ) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) ;; Test that converting between integer and float and back isn't folded away. (module (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_u (local.get $x)))) (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_u (local.get $x)))) ) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) ;; Test that dividing by a loop-invariant constant isn't optimized to be a ;; multiplication by a reciprocal, which would be particularly tempting since ;; the reciprocal computation could be hoisted. (module (memory 1 1) (func (export "init") (param $i i32) (param $x f32) (f32.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f32) (local $i i32) (block $exit (loop $cont (f32.store (local.get $i) (f32.div (f32.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f32) (f32.load (local.get $i))) ) (invoke "init" (i32.const 0) (f32.const 15.1)) (invoke "init" (i32.const 4) (f32.const 15.2)) (invoke "init" (i32.const 8) (f32.const 15.3)) (invoke "init" (i32.const 12) (f32.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) (assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) (assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) (invoke "run" (i32.const 16) (f32.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) (assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) (assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) (module (memory 1 1) (func (export "init") (param $i i32) (param $x f64) (f64.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f64) (local $i i32) (block $exit (loop $cont (f64.store (local.get $i) (f64.div (f64.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 8))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f64) (f64.load (local.get $i))) ) (invoke "init" (i32.const 0) (f64.const 15.1)) (invoke "init" (i32.const 8) (f64.const 15.2)) (invoke "init" (i32.const 16) (f64.const 15.3)) (invoke "init" (i32.const 24) (f64.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) (assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) (assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) (invoke "run" (i32.const 32) (f64.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) (assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) (assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) ;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. (module (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) ;; Test that x= y+z is not optimized to x >= y (monotonicity). ;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf (module (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.le (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.ge (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.le (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.ge (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const inf) (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const inf) (f64.const -inf) (f64.const inf)) (i32.const 0)) ;; Test that !(x < y) and friends are not optimized to x >= y and friends. (module (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) ;; Test that a method for approximating a "machine epsilon" produces the expected ;; approximation. ;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 (module (func (export "f32.epsilon") (result f32) (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) (func (export "f64.epsilon") (result f64) (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) ) (assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that a method for computing a "machine epsilon" produces the expected ;; result. ;; https://www.math.utah.edu/~beebe/software/ieee/ (module (func (export "f32.epsilon") (result f32) (local $x f32) (local $result f32) (local.set $x (f32.const 1)) (loop $loop (br_if $loop (f32.gt (f32.add (local.tee $x (f32.mul (local.tee $result (local.get $x)) (f32.const 0.5) ) ) (f32.const 1) ) (f32.const 1) ) ) ) (local.get $result) ) (func (export "f64.epsilon") (result f64) (local $x f64) (local $result f64) (local.set $x (f64.const 1)) (loop $loop (br_if $loop (f64.gt (f64.add (local.tee $x (f64.mul (local.tee $result (local.get $x)) (f64.const 0.5) ) ) (f64.const 1) ) (f64.const 1) ) ) ) (local.get $result) ) ) (assert_return (invoke "f32.epsilon") (f32.const 0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that floating-point numbers are not optimized as if they form a ;; trichotomy. (module (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.lt (local.get $x) (local.get $y)) (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) (i32.or (f32.le (local.get $x) (local.get $y)) (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.gt (local.get $x) (local.get $y)) (f32.le (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) (i32.or (f32.ge (local.get $x) (local.get $y)) (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.lt (local.get $x) (local.get $y)) (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) (i32.or (f64.le (local.get $x) (local.get $y)) (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.gt (local.get $x) (local.get $y)) (f64.le (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) (i32.or (f64.ge (local.get $x) (local.get $y)) (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) ;; Some test harnesses which can run this testsuite are unable to perform tests ;; of NaN bitpatterns. The following tests whether the underlying platform is ;; generally producing the kinds of NaNs expected. (module (func (export "f32.arithmetic_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fc00000))) (func (export "f32.canonical_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fffffff))) (func (export "f32.nonarithmetic_nan_bitpattern") (param $x i32) (result i32) (i32.reinterpret_f32 (f32.neg (f32.reinterpret_i32 (local.get $x))))) (func (export "f64.arithmetic_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7ff8000000000000))) (func (export "f64.canonical_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7fffffffffffffff))) (func (export "f64.nonarithmetic_nan_bitpattern") (param $x i64) (result i64) (i64.reinterpret_f64 (f64.neg (f64.reinterpret_i64 (local.get $x))))) ;; Versions of no_fold testcases that only care about NaN bitpatterns. (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (local.get $x)) (f32.const 0.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.const -0.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.const -1.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const -1.0))) (i32.const 0x7fc00000))) (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (local.get $x)) (f64.const 0.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.const -0.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.const -1.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const -1.0))) (i64.const 0x7ff8000000000000))) (func (export "no_fold_promote_demote") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.demote_f64 (f64.promote_f32 (f32.reinterpret_i32 (local.get $x))))) (i32.const 0x7fc00000))) ) (assert_return (invoke "f32.arithmetic_nan_bitpattern" (i32.const 0x7f803210) (i32.const 0x7f803210)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0) (i32.const 0)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7fc03210)) (i32.const 0xffc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xffc03210)) (i32.const 0x7fc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7f803210)) (i32.const 0xff803210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xff803210)) (i32.const 0x7f803210)) (assert_return (invoke "f64.arithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210) (i64.const 0x7ff0000000003210)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0) (i64.const 0)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff8000000003210)) (i64.const 0xfff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff8000000003210)) (i64.const 0x7ff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210)) (i64.const 0xfff0000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff0000000003210)) (i64.const 0x7ff0000000003210)) (assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) ;; Test that IEEE 754 double precision does, in fact, compute a certain dot ;; product correctly. (module (func (export "dot_product_example") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.mul (local.get $x2) (local.get $y2))) (f64.mul (local.get $x3) (local.get $y3))) ) (func (export "with_binary_sum_collapse") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.add (f64.mul (local.get $x2) (local.get $y2)) (f64.mul (local.get $x3) (local.get $y3)))) ) ) (assert_return (invoke "dot_product_example" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) (assert_return (invoke "with_binary_sum_collapse" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) ;; http://www.vinc17.org/research/fptest.en.html#contract2fma (module (func (export "f32.contract2fma") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.sub (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.contract2fma") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.sub (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.contract2fma" (f32.const 1.0) (f32.const 1.0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.19999ap+0) (f32.const 0x1.19999ap+0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.333332p+0) (f32.const 0x1.333332p+0)) (f32.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 1.0) (f64.const 1.0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.199999999999ap+0) (f64.const 0x1.199999999999ap+0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.3333333333333p+0) (f64.const 0x1.3333333333333p+0)) (f64.const 0.0)) ;; Test that floating-point isn't implemented with QuickBasic for MS-DOS. ;; https://support.microsoft.com/en-us/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors (module (func (export "f32.division_by_small_number") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.sub (local.get $a) (f32.div (local.get $b) (local.get $c)))) (func (export "f64.division_by_small_number") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.sub (local.get $a) (f64.div (local.get $b) (local.get $c)))) ) (assert_return (invoke "f32.division_by_small_number" (f32.const 112000000) (f32.const 100000) (f32.const 0.0009)) (f32.const 888888)) (assert_return (invoke "f64.division_by_small_number" (f64.const 112000000) (f64.const 100000) (f64.const 0.0009)) (f64.const 888888.8888888806)) ;; Test a simple golden ratio computation. ;; http://mathworld.wolfram.com/GoldenRatio.html (module (func (export "f32.golden_ratio") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.mul (local.get 0) (f32.add (local.get 1) (f32.sqrt (local.get 2))))) (func (export "f64.golden_ratio") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.mul (local.get 0) (f64.add (local.get 1) (f64.sqrt (local.get 2))))) ) (assert_return (invoke "f32.golden_ratio" (f32.const 0.5) (f32.const 1.0) (f32.const 5.0)) (f32.const 1.618034)) (assert_return (invoke "f64.golden_ratio" (f64.const 0.5) (f64.const 1.0) (f64.const 5.0)) (f64.const 1.618033988749895)) ;; Test some silver means computations. ;; http://mathworld.wolfram.com/SilverRatio.html (module (func (export "f32.silver_means") (param $n f32) (result f32) (f32.mul (f32.const 0.5) (f32.add (local.get $n) (f32.sqrt (f32.add (f32.mul (local.get $n) (local.get $n)) (f32.const 4.0)))))) (func (export "f64.silver_means") (param $n f64) (result f64) (f64.mul (f64.const 0.5) (f64.add (local.get $n) (f64.sqrt (f64.add (f64.mul (local.get $n) (local.get $n)) (f64.const 4.0)))))) ) (assert_return (invoke "f32.silver_means" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "f32.silver_means" (f32.const 1.0)) (f32.const 1.6180340)) (assert_return (invoke "f32.silver_means" (f32.const 2.0)) (f32.const 2.4142136)) (assert_return (invoke "f32.silver_means" (f32.const 3.0)) (f32.const 3.3027756)) (assert_return (invoke "f32.silver_means" (f32.const 4.0)) (f32.const 4.2360680)) (assert_return (invoke "f32.silver_means" (f32.const 5.0)) (f32.const 5.1925821)) (assert_return (invoke "f64.silver_means" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "f64.silver_means" (f64.const 1.0)) (f64.const 1.618033988749895)) (assert_return (invoke "f64.silver_means" (f64.const 2.0)) (f64.const 2.414213562373095)) (assert_return (invoke "f64.silver_means" (f64.const 3.0)) (f64.const 3.302775637731995)) (assert_return (invoke "f64.silver_means" (f64.const 4.0)) (f64.const 4.236067977499790)) (assert_return (invoke "f64.silver_means" (f64.const 5.0)) (f64.const 5.192582403567252)) ;; Test that an f64 0.4 isn't double-rounded as via extended precision. ;; https://bugs.llvm.org/show_bug.cgi?id=11200 (module (func (export "point_four") (param $four f64) (param $ten f64) (result i32) (f64.lt (f64.div (local.get $four) (local.get $ten)) (f64.const 0.4))) ) (assert_return (invoke "point_four" (f64.const 4.0) (f64.const 10.0)) (i32.const 0)) ;; Test an approximation function for tau; it should produces the correctly ;; rounded result after (and only after) the expected number of iterations. (module (func (export "tau") (param i32) (result f64) (local f64 f64 f64 f64) f64.const 0x0p+0 local.set 1 block local.get 0 i32.const 1 i32.lt_s br_if 0 f64.const 0x1p+0 local.set 2 f64.const 0x0p+0 local.set 3 loop local.get 1 local.get 2 f64.const 0x1p+3 local.get 3 f64.const 0x1p+3 f64.mul local.tee 4 f64.const 0x1p+0 f64.add f64.div f64.const 0x1p+2 local.get 4 f64.const 0x1p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.4p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.8p+2 f64.add f64.div f64.sub f64.mul f64.add local.set 1 local.get 3 f64.const 0x1p+0 f64.add local.set 3 local.get 2 f64.const 0x1p-4 f64.mul local.set 2 local.get 0 i32.const -1 i32.add local.tee 0 br_if 0 end end local.get 1 ) ) (assert_return (invoke "tau" (i32.const 10)) (f64.const 0x1.921fb54442d14p+2)) (assert_return (invoke "tau" (i32.const 11)) (f64.const 0x1.921fb54442d18p+2)) ;; Test that y < 0 ? x : (x + 1) is not folded to x + (y < 0). (module (func (export "f32.no_fold_conditional_inc") (param $x f32) (param $y f32) (result f32) (select (local.get $x) (f32.add (local.get $x) (f32.const 1.0)) (f32.lt (local.get $y) (f32.const 0.0)))) (func (export "f64.no_fold_conditional_inc") (param $x f64) (param $y f64) (result f64) (select (local.get $x) (f64.add (local.get $x) (f64.const 1.0)) (f64.lt (local.get $y) (f64.const 0.0)))) ) (assert_return (invoke "f32.no_fold_conditional_inc" (f32.const -0.0) (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f64.no_fold_conditional_inc" (f64.const -0.0) (f64.const -1.0)) (f64.const -0.0)) ================================================ FILE: Test/WebAssembly/memory64/float_literals.wast ================================================ ;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const inf))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +inf))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -inf))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f32_dec.root_beer_float") (result i32) (i32.reinterpret_f32 (f32.const 1.000000119))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const inf))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +inf))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -inf))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f64_dec.root_beer_float") (result i64) (i64.reinterpret_f64 (f64.const 1.000000119))) (func (export "f32-dec-sep1") (result f32) (f32.const 1_000_000)) (func (export "f32-dec-sep2") (result f32) (f32.const 1_0_0_0)) (func (export "f32-dec-sep3") (result f32) (f32.const 100_3.141_592)) (func (export "f32-dec-sep4") (result f32) (f32.const 99e+1_3)) (func (export "f32-dec-sep5") (result f32) (f32.const 122_000.11_3_54E0_2_3)) (func (export "f32-hex-sep1") (result f32) (f32.const 0xa_0f_00_99)) (func (export "f32-hex-sep2") (result f32) (f32.const 0x1_a_A_0_f)) (func (export "f32-hex-sep3") (result f32) (f32.const 0xa0_ff.f141_a59a)) (func (export "f32-hex-sep4") (result f32) (f32.const 0xf0P+1_3)) (func (export "f32-hex-sep5") (result f32) (f32.const 0x2a_f00a.1f_3_eep2_3)) (func (export "f64-dec-sep1") (result f64) (f64.const 1_000_000)) (func (export "f64-dec-sep2") (result f64) (f64.const 1_0_0_0)) (func (export "f64-dec-sep3") (result f64) (f64.const 100_3.141_592)) (func (export "f64-dec-sep4") (result f64) (f64.const 99e-1_23)) (func (export "f64-dec-sep5") (result f64) (f64.const 122_000.11_3_54e0_2_3)) (func (export "f64-hex-sep1") (result f64) (f64.const 0xa_f00f_0000_9999)) (func (export "f64-hex-sep2") (result f64) (f64.const 0x1_a_A_0_f)) (func (export "f64-hex-sep3") (result f64) (f64.const 0xa0_ff.f141_a59a)) (func (export "f64-hex-sep4") (result f64) (f64.const 0xf0P+1_3)) (func (export "f64-hex-sep5") (result f64) (f64.const 0x2a_f00a.1f_3_eep2_3)) ) (assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) (assert_return (invoke "f32_dec.root_beer_float") (i32.const 0x3f800001)) (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) (assert_return (invoke "f64_dec.root_beer_float") (i64.const 0x3ff000001ff19e24)) (assert_return (invoke "f32-dec-sep1") (f32.const 1000000)) (assert_return (invoke "f32-dec-sep2") (f32.const 1000)) (assert_return (invoke "f32-dec-sep3") (f32.const 1003.141592)) (assert_return (invoke "f32-dec-sep4") (f32.const 99e+13)) (assert_return (invoke "f32-dec-sep5") (f32.const 122000.11354e23)) (assert_return (invoke "f32-hex-sep1") (f32.const 0xa0f0099)) (assert_return (invoke "f32-hex-sep2") (f32.const 0x1aa0f)) (assert_return (invoke "f32-hex-sep3") (f32.const 0xa0ff.f141a59a)) (assert_return (invoke "f32-hex-sep4") (f32.const 0xf0P+13)) (assert_return (invoke "f32-hex-sep5") (f32.const 0x2af00a.1f3eep23)) (assert_return (invoke "f64-dec-sep1") (f64.const 1000000)) (assert_return (invoke "f64-dec-sep2") (f64.const 1000)) (assert_return (invoke "f64-dec-sep3") (f64.const 1003.141592)) (assert_return (invoke "f64-dec-sep4") (f64.const 99e-123)) (assert_return (invoke "f64-dec-sep5") (f64.const 122000.11354e23)) (assert_return (invoke "f64-hex-sep1") (f64.const 0xaf00f00009999)) (assert_return (invoke "f64-hex-sep2") (f64.const 0x1aa0f)) (assert_return (invoke "f64-hex-sep3") (f64.const 0xa0ff.f141a59a)) (assert_return (invoke "f64-hex-sep4") (f64.const 0xf0P+13)) (assert_return (invoke "f64-hex-sep5") (f64.const 0x2af00a.1f3eep23)) ;; Test parsing a float from binary (module binary ;; (func (export "4294967249") (result f64) (f64.const 4294967249)) "\00\61\73\6d\01\00\00\00\01\85\80\80\80\00\01\60" "\00\01\7c\03\82\80\80\80\00\01\00\07\8e\80\80\80" "\00\01\0a\34\32\39\34\39\36\37\32\34\39\00\00\0a" "\91\80\80\80\00\01\8b\80\80\80\00\00\44\00\00\20" "\fa\ff\ff\ef\41\0b" ) (assert_return (invoke "4294967249") (f64.const 4294967249)) (assert_malformed (module quote "(global f32 (f32.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_+1))") "unknown operator" ) ================================================ FILE: Test/WebAssembly/memory64/float_memory.wast ================================================ ;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory (data "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory (data "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 1))) (func (export "i32.load") (result i32) (i32.load (i32.const 1))) (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 1))) (func (export "i64.load") (result i64) (i64.load (i32.const 1))) (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory (data "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory (data "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) ================================================ FILE: Test/WebAssembly/memory64/float_memory64.wast ================================================ ;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory i64 (data "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i64.const 0))) (func (export "i32.load") (result i32) (i32.load (i64.const 0))) (func (export "f32.store") (f32.store (i64.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i64.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i64.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory i64 (data "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i64.const 0))) (func (export "i64.load") (result i64) (i64.load (i64.const 0))) (func (export "f64.store") (f64.store (i64.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i64.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i64.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory i64 (data "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i64.const 1))) (func (export "i32.load") (result i32) (i32.load (i64.const 1))) (func (export "f32.store") (f32.store (i64.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i64.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i64.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory i64 (data "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i64.const 1))) (func (export "i64.load") (result i64) (i64.load (i64.const 1))) (func (export "f64.store") (f64.store (i64.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i64.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i64.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory i64 (data "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i64.const 0))) (func (export "i32.load") (result i32) (i32.load (i64.const 0))) (func (export "f32.store") (f32.store (i64.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i64.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i64.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory i64 (data "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i64.const 0))) (func (export "i64.load") (result i64) (i64.load (i64.const 0))) (func (export "f64.store") (f64.store (i64.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i64.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i64.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) ================================================ FILE: Test/WebAssembly/memory64/float_misc.wast ================================================ ;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. ;; This testsuite is not currently sufficient for full IEEE 754 conformance ;; testing; platforms are currently expected to meet these requirements in ;; their own way (widely-used hardware platforms already do this). ;; ;; What this testsuite does test is that (a) the platform is basically IEEE 754 ;; rather than something else entirely, (b) it's configured correctly for ;; WebAssembly (rounding direction, exception masks, precision level, subnormal ;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common ;; value-changing optimizations, and (d) that the WebAssembly implementation ;; doesn't exhibit any known implementation bugs. ;; ;; This file supplements f32.wast, f64.wast, f32_bitwise.wast, f64_bitwise.wast, ;; f32_cmp.wast, and f64_cmp.wast with additional single-instruction tests ;; covering additional miscellaneous interesting cases. (module (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) ) ;; Miscellaneous values. (assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) (assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) ;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the ;; least that rounds to something greater. (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) ;; Max subnormal + min subnormal = min normal. (assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) (assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) (assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) ;; Test a case that was "tricky" on MMIX. ;; http://mmix.cs.hm.edu/bugs/bug_rounding.html (assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) ;; http://www.vinc17.org/software/tst-ieee754.xsl (assert_return (invoke "f64.add" (f64.const 9007199254740992) (f64.const 1.00001)) (f64.const 9007199254740994)) ;; http://www.vinc17.org/software/test.java (assert_return (invoke "f64.add" (f64.const 9007199254740994) (f64.const 0x1.fffep-1)) (f64.const 9007199254740994)) ;; Computations that round differently in ties-to-odd mode. (assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) (assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) (assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) (assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) (assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) (assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) (assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) (assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) (assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) (assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) (assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) (assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) (assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) (assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) (assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) (assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) (assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) (assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) (assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) (assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) (assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) (assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) (assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) (assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) (assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) (assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) (assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) (assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) (assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) (assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) ;; Computations that round differently on x87. (assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) (assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) (assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) (assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) (assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) (assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) (assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) (assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) (assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) ;; Computations that utilize the maximum exponent value to avoid overflow. (assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) (assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) (assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) (assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) (assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) (assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) ;; Computations that utilize the minimum exponent value. (assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) (assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) (assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) (assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) (assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) (assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) (assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) (assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) ;; Test an add of the second-greatest finite value with the distance to greatest ;; finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) ;; http://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/ (assert_return (invoke "f32.add" (f32.const 2.0) (f32.const 2.0)) (f32.const 4.0)) (assert_return (invoke "f64.add" (f64.const 2.0) (f64.const 2.0)) (f64.const 4.0)) ;; Test rounding above the greatest finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const inf)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const inf)) ;; Test for a historic spreadsheet bug. ;; https://blogs.office.com/2007/09/25/calculation-issue-update/ (assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) (assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) ;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the ;; least that rounds to something less. (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) (assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) (assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) (assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) (assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) (assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) (assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) (assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) (assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) (assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) (assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) (assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) (assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) (assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) (assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) (assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) (assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) (assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) (assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) (assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) (assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) (assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) (assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) (assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) (assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) (assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) (assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) (assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) (assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) (assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) (assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) (assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) (assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) (assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) ;; pow(e, π) - π ;; https://xkcd.com/217/ (assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) (assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) ;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ (assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) (assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) ;; Min normal - max subnormal = min subnormal. (assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) ;; Test subtraction of numbers very close to 1. (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.8p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.0p+0)) (f32.const 0x1p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p-24)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.8p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0p+0)) (f64.const 0x1p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p-53)) ;; Test the least value that can be subtracted from the max value to produce a ;; different value. (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const 0x1.ffffffffffffep+1023)) ;; Miscellaneous values. (assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) (assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) (assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) (assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) (assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) ;; Test for a historic spreadsheet bug. ;; http://www.joelonsoftware.com/items/2007/09/26b.html (assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) (assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) (assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) (assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) (assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) (assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) (assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) (assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) (assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) (assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) (assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) (assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) (assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) (assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) (assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) (assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) (assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) (assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) (assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) (assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) (assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) (assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) (assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) (assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) ;; Computations that round differently on x87. (assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) (assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) (assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) (assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) (assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) (assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) (assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) (assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) (assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) ;; Test the least positive value with a positive square. (assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) ;; Test the greatest positive value with a finite square. (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) (assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const inf)) ;; Test the squares of values very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep-1) (f32.const 0x1.fffffep-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test multiplication of numbers very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000004p+0) (f32.const 0x1.fffffcp-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000002p+0) (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.0000000000001p+0)) ;; Test MIN * EPSILON. ;; http://www.mpfr.org/mpfr-2.0.1/patch2 (assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) ;; http://opencores.org/bug,view,2454 (assert_return (invoke "f32.mul" (f32.const -0x1.0006p+4) (f32.const 0x1.ap-132)) (f32.const -0x1.a009cp-128)) ;; Miscellaneous values. (assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) (assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) (assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) (assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) (assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) (assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) (assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) (assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) (assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) (assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) ;; Test for a historic hardware bug. ;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug (assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) (assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) (assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) (assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) (assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) (assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) (assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) (assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) (assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) (assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) (assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) (assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) (assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) (assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) (assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) (assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) (assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) (assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) (assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) (assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) (assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) (assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) (assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) (assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) ;; Computations that round differently on x87. (assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) (assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) (assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) (assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) (assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) ;; Computations that round differently when div is mul by reciprocal. (assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) (assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) (assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) (assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) (assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) (assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) (assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) (assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) (assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) (assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) (assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) (assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) (assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) (assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) ;; Division involving the maximum subnormal value and the minimum normal value. (assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) ;; Test the least positive value with a positive quotient with the maximum value. (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) ;; Test the least positive value with a finite reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) ;; Test the least positive value that has a subnormal reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) ;; Test that the last binary digit of 1.0/3.0 is even in f32, ;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples ;; ;; and odd in f64, ;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples ;; ;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. ;; http://www.netlib.org/paranoia (assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) ;; Test division of numbers very close to 1. (assert_return (invoke "f32.div" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-1) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffap-1)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffdp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffep-1)) ;; Test for bugs found in an early RISC-V implementation. ;; https://github.com/riscv/riscv-tests/pull/8 (assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) ;; Test another sqrt case on x87. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 (assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963)) (f64.const nan:canonical)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) ;; Test the least value with a sqrt that rounds to one. (assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) ;; Test the greatest value less than one for which sqrt is not an identity. (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffcp-1)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffap-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test that the bitwise floating point operators are bitwise on NaN. (assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) ;; Test values close to 1.0. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) (assert_return (invoke "f32.ceil" (f32.const 0x1.000002p+0)) (f32.const 2.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.0000000000001p+0)) (f64.const 2.0)) ;; Test the maximum and minimum value for which ceil is not an identity operator. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) ;; Test that implementations don't do the x+0x1p52-0x1p52 trick outside the ;; range where it's safe. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+23)) (f32.const 0x1.fffffep+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+23)) (f32.const -0x1.fffffep+23)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+52)) (f64.const 0x1.fffffffffffffp+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+52)) (f64.const -0x1.fffffffffffffp+52)) ;; Test values close to -1.0. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) (assert_return (invoke "f32.floor" (f32.const -0x1.000002p+0)) (f32.const -2.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.0000000000001p+0)) (f64.const -2.0)) ;; Test the maximum and minimum value for which floor is not an identity operator. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that floor isn't implemented as XMVectorFloor. ;; http://dss.stephanierct.com/DevBlog/?p=8#comment-4 (assert_return (invoke "f32.floor" (f32.const 88607.0)) (f32.const 88607.0)) (assert_return (invoke "f64.floor" (f64.const 88607.0)) (f64.const 88607.0)) ;; Test the maximum and minimum value for which trunc is not an identity operator. (assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) (assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that nearest isn't implemented naively. ;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 ;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 (assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) ;; Nearest should not round halfway cases away from zero (as C's round(3) does) ;; or up (as JS's Math.round does). (assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) (assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) (assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) (assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) ;; Test the maximum and minimum value for which nearest is not an identity operator. (assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) ================================================ FILE: Test/WebAssembly/memory64/forward.wast ================================================ (module (func $even (export "even") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 1)) (else (call $odd (i32.sub (local.get $n) (i32.const 1)))) ) ) (func $odd (export "odd") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 0)) (else (call $even (i32.sub (local.get $n) (i32.const 1)))) ) ) ) (assert_return (invoke "even" (i32.const 13)) (i32.const 0)) (assert_return (invoke "even" (i32.const 20)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/memory64/func.wast ================================================ ;; Test `func` declarations, i.e. functions (module ;; Auxiliary definition (type $sig (func)) (func $dummy) ;; Syntax (func) (func (export "f")) (func $f) (func $h (export "g")) (func (local)) (func (local) (local)) (func (local i32)) (func (local $x i32)) (func (local i32 f64 i64)) (func (local i32) (local f64)) (func (local i32 f32) (local $x i64) (local) (local i32 f64)) (func (param)) (func (param) (param)) (func (param i32)) (func (param $x i32)) (func (param i32 f64 i64)) (func (param i32) (param f64)) (func (param i32 f32) (param $x i64) (param) (param i32 f64)) (func (result)) (func (result) (result)) (func (result i32) (unreachable)) (func (result i32 f64 f32) (unreachable)) (func (result i32) (result f64) (unreachable)) (func (result i32 f32) (result i64) (result) (result i32 f64) (unreachable)) (type $sig-1 (func)) (type $sig-2 (func (result i32))) (type $sig-3 (func (param $x i32))) (type $sig-4 (func (param i32 f64 i32) (result i32))) (func (export "type-use-1") (type $sig-1)) (func (export "type-use-2") (type $sig-2) (i32.const 0)) (func (export "type-use-3") (type $sig-3)) (func (export "type-use-4") (type $sig-4) (i32.const 0)) (func (export "type-use-5") (type $sig-2) (result i32) (i32.const 0)) (func (export "type-use-6") (type $sig-3) (param i32)) (func (export "type-use-7") (type $sig-4) (param i32) (param f64 i32) (result i32) (i32.const 0) ) (func (type $sig)) (func (type $forward)) ;; forward reference (func $complex (param i32 f32) (param $x i64) (param) (param i32) (result) (result i32) (result) (result i64 i32) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (func $complex-sig (type $sig) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (type $forward (func)) ;; Typing of locals (func (export "local-first-i32") (result i32) (local i32 i32) (local.get 0)) (func (export "local-first-i64") (result i64) (local i64 i64) (local.get 0)) (func (export "local-first-f32") (result f32) (local f32 f32) (local.get 0)) (func (export "local-first-f64") (result f64) (local f64 f64) (local.get 0)) (func (export "local-second-i32") (result i32) (local i32 i32) (local.get 1)) (func (export "local-second-i64") (result i64) (local i64 i64) (local.get 1)) (func (export "local-second-f32") (result f32) (local f32 f32) (local.get 1)) (func (export "local-second-f64") (result f64) (local f64 f64) (local.get 1)) (func (export "local-mixed") (result f64) (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of parameters (func (export "param-first-i32") (param i32 i32) (result i32) (local.get 0)) (func (export "param-first-i64") (param i64 i64) (result i64) (local.get 0)) (func (export "param-first-f32") (param f32 f32) (result f32) (local.get 0)) (func (export "param-first-f64") (param f64 f64) (result f64) (local.get 0)) (func (export "param-second-i32") (param i32 i32) (result i32) (local.get 1)) (func (export "param-second-i64") (param i64 i64) (result i64) (local.get 1)) (func (export "param-second-f32") (param f32 f32) (result f32) (local.get 1)) (func (export "param-second-f64") (param f64 f64) (result f64) (local.get 1)) (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) (result f64) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of results (func (export "empty")) (func (export "value-void") (call $dummy)) (func (export "value-i32") (result i32) (i32.const 77)) (func (export "value-i64") (result i64) (i64.const 7777)) (func (export "value-f32") (result f32) (f32.const 77.7)) (func (export "value-f64") (result f64) (f64.const 77.77)) (func (export "value-i32-f64") (result i32 f64) (i32.const 77) (f64.const 7)) (func (export "value-i32-i32-i32") (result i32 i32 i32) (i32.const 1) (i32.const 2) (i32.const 3) ) (func (export "value-block-void") (block (call $dummy) (call $dummy))) (func (export "value-block-i32") (result i32) (block (result i32) (call $dummy) (i32.const 77)) ) (func (export "value-block-i32-i64") (result i32 i64) (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2)) ) (func (export "return-empty") (return)) (func (export "return-i32") (result i32) (return (i32.const 78))) (func (export "return-i64") (result i64) (return (i64.const 7878))) (func (export "return-f32") (result f32) (return (f32.const 78.7))) (func (export "return-f64") (result f64) (return (f64.const 78.78))) (func (export "return-i32-f64") (result i32 f64) (return (i32.const 78) (f64.const 78.78)) ) (func (export "return-i32-i32-i32") (result i32 i32 i32) (return (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "return-block-i32") (result i32) (return (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "return-block-i32-i64") (result i32 i64) (return (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-empty") (br 0)) (func (export "break-i32") (result i32) (br 0 (i32.const 79))) (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) (func (export "break-i32-f64") (result i32 f64) (br 0 (i32.const 79) (f64.const 79.79)) ) (func (export "break-i32-i32-i32") (result i32 i32 i32) (br 0 (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "break-block-i32") (result i32) (br 0 (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "break-block-i32-i64") (result i32 i64) (br 0 (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-br_if-empty") (param i32) (br_if 0 (local.get 0)) ) (func (export "break-br_if-num") (param i32) (result i32) (drop (br_if 0 (i32.const 50) (local.get 0))) (i32.const 51) ) (func (export "break-br_if-num-num") (param i32) (result i32 i64) (drop (drop (br_if 0 (i32.const 50) (i64.const 51) (local.get 0)))) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-empty") (param i32) (br_table 0 0 0 (local.get 0)) ) (func (export "break-br_table-num") (param i32) (result i32) (br_table 0 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (func (export "break-br_table-num-num") (param i32) (result i32 i64) (br_table 0 0 (i32.const 50) (i64.const 51) (local.get 0)) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-nested-empty") (param i32) (block (br_table 0 1 0 (local.get 0))) ) (func (export "break-br_table-nested-num") (param i32) (result i32) (i32.add (block (result i32) (br_table 0 1 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (i32.const 2) ) ) (func (export "break-br_table-nested-num-num") (param i32) (result i32 i32) (i32.add (block (result i32 i32) (br_table 0 1 0 (i32.const 50) (i32.const 51) (local.get 0)) (i32.const 51) (i32.const -3) ) ) (i32.const 52) ) ;; Large signatures (func (export "large-sig") (param i32 i64 f32 f32 i32 f64 f32 i32 i32 i32 f32 f64 f64 f64 i32 i32 f32) (result f64 f32 i32 i32 i32 i64 f32 i32 i32 f32 f64 f64 i32 f32 i32 f64) (local.get 5) (local.get 2) (local.get 0) (local.get 8) (local.get 7) (local.get 1) (local.get 3) (local.get 9) (local.get 4) (local.get 6) (local.get 13) (local.get 11) (local.get 15) (local.get 16) (local.get 14) (local.get 12) ) ;; Default initialization of locals (func (export "init-local-i32") (result i32) (local i32) (local.get 0)) (func (export "init-local-i64") (result i64) (local i64) (local.get 0)) (func (export "init-local-f32") (result f32) (local f32) (local.get 0)) (func (export "init-local-f64") (result f64) (local f64) (local.get 0)) ) (assert_return (invoke "type-use-1")) (assert_return (invoke "type-use-2") (i32.const 0)) (assert_return (invoke "type-use-3" (i32.const 1))) (assert_return (invoke "type-use-4" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "type-use-5") (i32.const 0)) (assert_return (invoke "type-use-6" (i32.const 1))) (assert_return (invoke "type-use-7" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "local-first-i32") (i32.const 0)) (assert_return (invoke "local-first-i64") (i64.const 0)) (assert_return (invoke "local-first-f32") (f32.const 0)) (assert_return (invoke "local-first-f64") (f64.const 0)) (assert_return (invoke "local-second-i32") (i32.const 0)) (assert_return (invoke "local-second-i64") (i64.const 0)) (assert_return (invoke "local-second-f32") (f32.const 0)) (assert_return (invoke "local-second-f64") (f64.const 0)) (assert_return (invoke "local-mixed") (f64.const 0)) (assert_return (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) ) (assert_return (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) ) (assert_return (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) ) (assert_return (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) ) (assert_return (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) ) (assert_return (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) ) (assert_return (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) ) (assert_return (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) ) (assert_return (invoke "param-mixed" (f32.const 1) (i32.const 2) (i64.const 3) (i32.const 4) (f64.const 5.5) (i32.const 6) ) (f64.const 5.5) ) (assert_return (invoke "empty")) (assert_return (invoke "value-void")) (assert_return (invoke "value-i32") (i32.const 77)) (assert_return (invoke "value-i64") (i64.const 7777)) (assert_return (invoke "value-f32") (f32.const 77.7)) (assert_return (invoke "value-f64") (f64.const 77.77)) (assert_return (invoke "value-i32-f64") (i32.const 77) (f64.const 7)) (assert_return (invoke "value-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "value-block-void")) (assert_return (invoke "value-block-i32") (i32.const 77)) (assert_return (invoke "value-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "return-empty")) (assert_return (invoke "return-i32") (i32.const 78)) (assert_return (invoke "return-i64") (i64.const 7878)) (assert_return (invoke "return-f32") (f32.const 78.7)) (assert_return (invoke "return-f64") (f64.const 78.78)) (assert_return (invoke "return-i32-f64") (i32.const 78) (f64.const 78.78)) (assert_return (invoke "return-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "return-block-i32") (i32.const 77)) (assert_return (invoke "return-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-empty")) (assert_return (invoke "break-i32") (i32.const 79)) (assert_return (invoke "break-i64") (i64.const 7979)) (assert_return (invoke "break-f32") (f32.const 79.9)) (assert_return (invoke "break-f64") (f64.const 79.79)) (assert_return (invoke "break-i32-f64") (i32.const 79) (f64.const 79.79)) (assert_return (invoke "break-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "break-block-i32") (i32.const 77)) (assert_return (invoke "break-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-br_if-empty" (i32.const 0))) (assert_return (invoke "break-br_if-empty" (i32.const 2))) (assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) (assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_if-num-num" (i32.const 0)) (i32.const 51) (i64.const 52) ) (assert_return (invoke "break-br_if-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-empty" (i32.const 0))) (assert_return (invoke "break-br_table-empty" (i32.const 1))) (assert_return (invoke "break-br_table-empty" (i32.const 5))) (assert_return (invoke "break-br_table-empty" (i32.const -1))) (assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) (assert_return (invoke "break-br_table-num-num" (i32.const 0)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 10)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const -100)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) (assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) (assert_return (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 0)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 1)) (i32.const 50) (i32.const 51) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 2)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const -3)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "large-sig" (i32.const 0) (i64.const 1) (f32.const 2) (f32.const 3) (i32.const 4) (f64.const 5) (f32.const 6) (i32.const 7) (i32.const 8) (i32.const 9) (f32.const 10) (f64.const 11) (f64.const 12) (f64.const 13) (i32.const 14) (i32.const 15) (f32.const 16) ) (f64.const 5) (f32.const 2) (i32.const 0) (i32.const 8) (i32.const 7) (i64.const 1) (f32.const 3) (i32.const 9) (i32.const 4) (f32.const 6) (f64.const 13) (f64.const 11) (i32.const 15) (f32.const 16) (i32.const 14) (f64.const 12) ) (assert_return (invoke "init-local-i32") (i32.const 0)) (assert_return (invoke "init-local-i64") (i64.const 0)) (assert_return (invoke "init-local-f32") (f32.const 0)) (assert_return (invoke "init-local-f64") (f64.const 0)) ;; Expansion of inline function types (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (type $t (func (param i32))) (func $i32->void (type 0)) ;; (param i32) (func $void->f64 (type 1) (f64.const 0)) ;; (result f64) (func $check (call $i32->void (i32.const 0)) (drop (call $void->f64)) ) ) (assert_invalid (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (func $h (result f64) (f64.const 1)) ;; reuses implicit type definition (type $t (func (param i32))) (func (type 2)) ;; does not exist ) "unknown type" ) (assert_malformed (module quote "(func $f (result f64) (f64.const 0))" ;; adds implicit type definition "(func $g (param i32))" ;; reuses explicit type definition "(func $h (result f64) (f64.const 1))" ;; reuses implicit type definition "(type $t (func (param i32)))" "(func (type 2) (param i32))" ;; does not exist ) "unknown type" ) (module (type $proc (func (result i32))) (type $sig (func (param i32) (result i32))) (func (export "f") (type $sig) (local $var i32) (local.get $var) ) (func $g (type $sig) (local $var i32) (local.get $var) ) (func (export "g") (type $sig) (call $g (local.get 0)) ) (func (export "p") (type $proc) (local $var i32) (local.set 0 (i32.const 42)) (local.get $var) ) ) (assert_return (invoke "f" (i32.const 42)) (i32.const 0)) (assert_return (invoke "g" (i32.const 42)) (i32.const 0)) (assert_return (invoke "p") (i32.const 42)) (module (type $sig (func)) (func $empty-sig-1) ;; should be assigned type $sig (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $empty-sig-2) ;; should be assigned type $sig (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-4 (param i64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-5 (param i64 i64 f64 i64 f64 i64 f32 i32)) (type $empty-sig-duplicate (func)) (type $complex-sig-duplicate (func (param i64 i64 f64 i64 f64 i64 f32 i32))) (table funcref (elem $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 $complex-sig-4 $complex-sig-5 ) ) (func (export "signature-explicit-reused") (call_indirect (type $sig) (i32.const 1)) (call_indirect (type $sig) (i32.const 4)) ) (func (export "signature-implicit-reused") ;; The implicit index 3 in this test depends on the function and ;; type definitions, and may need adapting if they change. (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 2) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 3) ) ) (func (export "signature-explicit-duplicate") (call_indirect (type $empty-sig-duplicate) (i32.const 1)) ) (func (export "signature-implicit-duplicate") (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 5) ) (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 6) ) ) ) (assert_return (invoke "signature-explicit-reused")) (assert_return (invoke "signature-implicit-reused")) (assert_return (invoke "signature-explicit-duplicate")) (assert_return (invoke "signature-implicit-duplicate")) ;; Malformed type use (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (type $sig) (result i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (result i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (type $sig) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (param i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (param i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (type $sig) (param i32) (result i32) (unreachable))" ) "inline function type" ) ;; Invalid typing of locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of result (assert_invalid (module (func $type-empty-i32 (result i32))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64-i32 (result f64 i32))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (i32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (i32.const 0) (i64.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result f32 f32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result f32) (f32.const 0) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-num (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-nums (result i32 i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-num (result i32) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-nums (result i32 i64) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-num (result i32) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-nums (result i64 i64) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-num (result i32) (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-nums (result i32 i32) (return) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-partial-vs-nums (result i32 i32) (i32.const 1) (return) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-num (result i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-nums (result i32 i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-num (result i32) (return (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-nums (result i32 i32) (return (i64.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-num (result i32) (return (i64.const 1)) (return (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-nums (result i32 i32) (return (i32.const 1)) (return (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-num (result i32) (br 0 (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-nums (result i32 i32) (br 0 (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-nums (result i32 i32) (br 0) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (br 0 (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (br 0 (i32.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (br 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (br 1 (nop))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32) (br 1 (i32.const 1))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) ;; Syntax errors (assert_malformed (module quote "(func (nop) (local i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (result i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (result i32) (local.get 0))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (local.get 0))") "unexpected token" ) ;; Duplicate name errors (assert_malformed (module quote "(func $foo)" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(import \"\" \"\" (func $foo))") "duplicate func") (assert_malformed (module quote "(func (param $foo i32) (param $foo i32))") "duplicate local") (assert_malformed (module quote "(func (param $foo i32) (local $foo i32))") "duplicate local") (assert_malformed (module quote "(func (local $foo i32) (local $foo i32))") "duplicate local") ================================================ FILE: Test/WebAssembly/memory64/func_ptrs.wast ================================================ (module (type (func)) ;; 0: void -> void (type $S (func)) ;; 1: void -> void (type (func (param))) ;; 2: void -> void (type (func (result i32))) ;; 3: void -> i32 (type (func (param) (result i32))) ;; 4: void -> i32 (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 (type $U (func (param i32))) ;; 6: i32 -> void (func $print (import "spectest" "print_i32") (type 6)) (func (type 0)) (func (type $S)) (func (export "one") (type 4) (i32.const 13)) (func (export "two") (type $T) (i32.add (local.get 0) (i32.const 1))) ;; Both signature and parameters are allowed (and required to match) ;; since this allows the naming of parameters. (func (export "three") (type $T) (param $a i32) (result i32) (i32.sub (local.get 0) (i32.const 2)) ) (func (export "four") (type $U) (call $print (local.get 0))) ) (assert_return (invoke "one") (i32.const 13)) (assert_return (invoke "two" (i32.const 13)) (i32.const 14)) (assert_return (invoke "three" (i32.const 13)) (i32.const 11)) (invoke "four" (i32.const 83)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") (assert_invalid (module (table 1 funcref) (elem (i64.const 0))) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop))) "constant expression required" ) (assert_invalid (module (func (type 42))) "unknown type") (assert_invalid (module (import "spectest" "print_i32" (func (type 43)))) "unknown type") (module (type $T (func (param) (result i32))) (type $U (func (param) (result i32))) (table funcref (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func $t3 (type $T) (i32.const 3)) (func $u1 (type $U) (i32.const 4)) (func $u2 (type $U) (i32.const 5)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) (func (export "callu") (param $i i32) (result i32) (call_indirect (type $U) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callt" (i32.const 7)) "undefined element") (assert_trap (invoke "callt" (i32.const 100)) "undefined element") (assert_trap (invoke "callt" (i32.const -1)) "undefined element") (assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callu" (i32.const 7)) "undefined element") (assert_trap (invoke "callu" (i32.const 100)) "undefined element") (assert_trap (invoke "callu" (i32.const -1)) "undefined element") (module (type $T (func (result i32))) (table funcref (elem 0 1)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) ================================================ FILE: Test/WebAssembly/memory64/global.wast ================================================ ;; Test globals (module (global $a i32 (i32.const -2)) (global (;1;) f32 (f32.const -3)) (global (;2;) f64 (f64.const -4)) (global $b i64 (i64.const -5)) (global $x (mut i32) (i32.const -12)) (global (;5;) (mut f32) (f32.const -13)) (global (;6;) (mut f64) (f64.const -14)) (global $y (mut i64) (i64.const -15)) (func (export "get-a") (result i32) (global.get $a)) (func (export "get-b") (result i64) (global.get $b)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i64) (global.get $y)) (func (export "set-x") (param i32) (global.set $x (local.get 0))) (func (export "set-y") (param i64) (global.set $y (local.get 0))) (func (export "get-1") (result f32) (global.get 1)) (func (export "get-2") (result f64) (global.get 2)) (func (export "get-5") (result f32) (global.get 5)) (func (export "get-6") (result f64) (global.get 6)) (func (export "set-5") (param f32) (global.set 5 (local.get 0))) (func (export "set-6") (param f64) (global.set 6 (local.get 0))) ;; As the argument of control constructs and instructions (memory 1) (func $dummy) (func (export "as-select-first") (result i32) (select (global.get $x) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (global.get $x) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (global.get $x)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (global.get $x) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (global.get $x) (call $dummy) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (global.get $x) ) ) (func (export "as-if-condition") (result i32) (if (result i32) (global.get $x) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (global.get $x)) (else (i32.const 2)) ) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (global.get $x)) ) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (global.get $x) (i32.const 2)) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (global.get $x)) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (result i32) (block (result i32) (global.get $x) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (global.get $x) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (global.get $x) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (global.get $x) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (global.get $x) ) ) ) (func (export "as-store-first") (global.get $x) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 0) (global.get $x) (i32.store) ) (func (export "as-load-operand") (result i32) (i32.load (global.get $x)) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (global.get $x)) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (global.get $x)) ) (func (export "as-return-value") (result i32) (global.get $x) (return) ) (func (export "as-drop-operand") (drop (global.get $x)) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (global.get $x))) ) (func (export "as-local.set-value") (param i32) (result i32) (local.set 0 (global.get $x)) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (global.get $x)) ) (func (export "as-global.set-value") (result i32) (global.set $x (global.get $x)) (global.get $x) ) (func (export "as-unary-operand") (result i32) (i32.eqz (global.get $x)) ) (func (export "as-binary-operand") (result i32) (i32.mul (global.get $x) (global.get $x) ) ) (func (export "as-compare-operand") (result i32) (i32.gt_u (global.get 0) (i32.const 1) ) ) ) (assert_return (invoke "get-a") (i32.const -2)) (assert_return (invoke "get-b") (i64.const -5)) (assert_return (invoke "get-x") (i32.const -12)) (assert_return (invoke "get-y") (i64.const -15)) (assert_return (invoke "get-1") (f32.const -3)) (assert_return (invoke "get-2") (f64.const -4)) (assert_return (invoke "get-5") (f32.const -13)) (assert_return (invoke "get-6") (f64.const -14)) (assert_return (invoke "set-x" (i32.const 6))) (assert_return (invoke "set-y" (i64.const 7))) (assert_return (invoke "set-5" (f32.const 8))) (assert_return (invoke "set-6" (f64.const 9))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-5") (f32.const 8)) (assert_return (invoke "get-6") (f64.const 9)) (assert_return (invoke "as-select-first") (i32.const 6)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 6)) (assert_return (invoke "as-loop-mid") (i32.const 6)) (assert_return (invoke "as-loop-last") (i32.const 6)) (assert_return (invoke "as-if-condition") (i32.const 2)) (assert_return (invoke "as-if-then") (i32.const 6)) (assert_return (invoke "as-if-else") (i32.const 6)) (assert_return (invoke "as-br_if-first") (i32.const 6)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 6)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 6)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 6)) (assert_return (invoke "as-return-value") (i32.const 6)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 6)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-global.set-value") (i32.const 6)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 36)) (assert_return (invoke "as-compare-operand") (i32.const 1)) (assert_invalid (module (global f32 (f32.const 0)) (func (global.set 0 (f32.const 1)))) "global is immutable" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (global.set 0 (i32.const 1)))) "global is immutable" ) ;; mutable globals can be exported (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) (module (global (export "a") (mut f32) (f32.const 0))) (assert_invalid (module (global f32 (f32.neg (f32.const 0)))) "constant expression required" ) (assert_invalid (module (global f32 (local.get 0))) "constant expression required" ) (assert_invalid (module (global f32 (f32.neg (f32.const 1)))) "constant expression required" ) (assert_invalid (module (global i32 (i32.const 0) (nop))) "constant expression required" ) (assert_invalid (module (global i32 (nop))) "constant expression required" ) (assert_invalid (module (global i32 (f32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (i32.const 0) (i32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (;empty instruction sequence;))) "type mismatch" ) (assert_invalid (module (global i32 (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (global.get 1)) (global i32 (i32.const 0))) "unknown global" ) (module (import "spectest" "global_i32" (global i32)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\02" ;; malformed mutability ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\ff" ;; malformed mutability ) "malformed mutability" ) (module (global i32 (i32.const 0)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\02" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\ff" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) ;; global.get with invalid index (assert_invalid (module (func (result i32) (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (func (result i32) (global.get 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (result i32) (global.get 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (global i32 (i32.const 0)) (func (result i32) (global.get 2)) ) "unknown global" ) ;; global.set with invalid index (assert_invalid (module (func (i32.const 0) (global.set 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (func (i32.const 0) (global.set 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (i32.const 0) (global.set 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (global i32 (i32.const 0)) (func (i32.const 0) (global.set 2)) ) "unknown global" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty (global.set $x) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-block (i32.const 0) (block (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-loop (i32.const 0) (loop (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br (i32.const 0) (block (br 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_if (i32.const 0) (block (br_if 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_table (i32.const 0) (block (br_table 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-return (return (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-select (select (global.set $x) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-call (call 1 (global.set $x)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-global.set-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (global.set $x) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Duplicate identifier errors (assert_malformed (module quote "(global $foo i32 (i32.const 0))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(import \"\" \"\" (global $foo i32))") "duplicate global") ================================================ FILE: Test/WebAssembly/memory64/i32.wast ================================================ ;; i32 operations (module (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (local.get $x) (local.get $y))) (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i32) (result i32) (i32.clz (local.get $x))) (func (export "ctz") (param $x i32) (result i32) (i32.ctz (local.get $x))) (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (local.get $x))) (func (export "extend8_s") (param $x i32) (result i32) (i32.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i32) (result i32) (i32.extend16_s (local.get $x))) (func (export "eqz") (param $x i32) (result i32) (i32.eqz (local.get $x))) (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) (assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) (assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) (assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) (assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) (assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) (assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) (assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) (assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) (assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) (assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) (assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) (assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) (assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) (assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) (assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00000400)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 31)) (i32.const 2)) (assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) (assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) (assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) (assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) (assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) (assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) (assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) (assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) (assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) (assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) (assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) (assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) (assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) (assert_return (invoke "extend8_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0x7f)) (i32.const 127)) (assert_return (invoke "extend8_s" (i32.const 0x80)) (i32.const -128)) (assert_return (invoke "extend8_s" (i32.const 0xff)) (i32.const -1)) (assert_return (invoke "extend8_s" (i32.const 0x012345_00)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0xfedcba_80)) (i32.const -0x80)) (assert_return (invoke "extend8_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0x7fff)) (i32.const 32767)) (assert_return (invoke "extend16_s" (i32.const 0x8000)) (i32.const -32768)) (assert_return (invoke "extend16_s" (i32.const 0xffff)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0x0123_0000)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0xfedc_8000)) (i32.const -0x8000)) (assert_return (invoke "extend16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_invalid (module (func $type-unary-operand-empty (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-block (i32.const 0) (block (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-loop (i32.const 0) (loop (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-if (i32.const 0) (i32.const 0) (if (then (i32.eqz) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.eqz))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br (i32.const 0) (block (br 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.eqz) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-return (return (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-select (select (i32.eqz) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-call (call 1 (i32.eqz)) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-unary-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.eqz) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.set (local i32) (local.set 0 (i32.eqz)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-unary-operand-empty-in-global.set (global.set $x (i32.eqz)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-memory.grow (memory.grow (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-load (i32.load (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-unary-operand-empty-in-store (i32.store (i32.eqz) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty (i32.const 0) (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-if (i32.const 0) (i32.const 0) (i32.const 0) (if (i32.add) (then (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-if (i32.const 0) (i32.const 0) (if (i32.const 0) (then (i32.add)) (else (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-else (i32.const 0) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add) (i32.const 0))) (drop) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-return (return (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-return (return (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-select (select (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-select (select (i32.const 0) (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-call (call 1 (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-call (call 1 (i32.const 0) (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-1st-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-2nd-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.set (local i32) (local.set 0 (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.set (local i32) (local.set 0 (i32.const 0) (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-1st-operand-empty-in-global.set (global.set $x (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-2nd-operand-empty-in-global.set (global.set $x (i32.const 0) (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-memory.grow (memory.grow (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-memory.grow (memory.grow (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-load (i32.load (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-load (i32.load (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-1st-operand-empty-in-store (i32.store (i32.add) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-2nd-operand-empty-in-store (i32.store (i32.const 1) (i32.add) (i32.const 0)) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (func (result i32) (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eqz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.clz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ctz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.popcnt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/i64.wast ================================================ ;; i64 operations (module (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (local.get $x) (local.get $y))) (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i64) (result i64) (i64.clz (local.get $x))) (func (export "ctz") (param $x i64) (result i64) (i64.ctz (local.get $x))) (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (local.get $x))) (func (export "extend8_s") (param $x i64) (result i64) (i64.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i64) (result i64) (i64.extend16_s (local.get $x))) (func (export "extend32_s") (param $x i64) (result i64) (i64.extend32_s (local.get $x))) (func (export "eqz") (param $x i64) (result i32) (i64.eqz (local.get $x))) (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) (assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) (assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) (assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) (assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) (assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) (assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) (assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) (assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) (assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) (assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) (assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) (assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) (assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) (assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) (assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x579b30ec048d159d)) (assert_return (invoke "rotl" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0xe000000dc000000f)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0xcf013579ae529dea)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x55e6cc3b01234567)) (assert_return (invoke "rotr" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0x0fe000000dc00000)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0x94a77ab3c04d5e6b)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 63)) (i64.const 2)) (assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) (assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) (assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) (assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) (assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) (assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) (assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) (assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) (assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) (assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) (assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) (assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) (assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) (assert_return (invoke "extend8_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0x7f)) (i64.const 127)) (assert_return (invoke "extend8_s" (i64.const 0x80)) (i64.const -128)) (assert_return (invoke "extend8_s" (i64.const 0xff)) (i64.const -1)) (assert_return (invoke "extend8_s" (i64.const 0x01234567_89abcd_00)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0xfedcba98_765432_80)) (i64.const -0x80)) (assert_return (invoke "extend8_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend16_s" (i64.const 0x8000)) (i64.const -32768)) (assert_return (invoke "extend16_s" (i64.const 0xffff)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0x12345678_9abc_0000)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0xfedcba98_7654_8000)) (i64.const -0x8000)) (assert_return (invoke "extend16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend32_s" (i64.const 0x8000)) (i64.const 32768)) (assert_return (invoke "extend32_s" (i64.const 0xffff)) (i64.const 65535)) (assert_return (invoke "extend32_s" (i64.const 0x7fffffff)) (i64.const 0x7fffffff)) (assert_return (invoke "extend32_s" (i64.const 0x80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const 0xffffffff)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0x01234567_00000000)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0xfedcba98_80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0xffffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result i64) (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eqz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.clz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ctz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.popcnt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/if.wast ================================================ ;; Test `if` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (param i32) (if (local.get 0) (then)) (if (local.get 0) (then) (else)) (if $l (local.get 0) (then)) (if $l (local.get 0) (then) (else)) ) (func (export "singular") (param i32) (result i32) (if (local.get 0) (then (nop))) (if (local.get 0) (then (nop)) (else (nop))) (if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8))) ) (func (export "multi") (param i32) (result i32 i32) (if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy))) (if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy))) (if (result i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 8) (call $dummy)) (else (call $dummy) (call $dummy) (i32.const 9) (call $dummy)) ) (if (result i32 i64 i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 1) (call $dummy) (call $dummy) (call $dummy) (i64.const 2) (call $dummy) (call $dummy) (call $dummy) (i32.const 3) (call $dummy) ) (else (call $dummy) (call $dummy) (i32.const -1) (call $dummy) (call $dummy) (call $dummy) (i64.const -2) (call $dummy) (call $dummy) (call $dummy) (i32.const -3) (call $dummy) ) ) (drop) (drop) ) (func (export "nested") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 9)) (else (call $dummy) (i32.const 10)) ) ) (else (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 10)) (else (call $dummy) (i32.const 11)) ) ) ) ) (func (export "as-select-first") (param i32) (result i32) (select (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 3) ) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 3) ) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) ) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-if-condition") (param i32) (result i32) (if (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) ) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) ) (func (export "as-store-first") (param i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-return-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0))) (return) ) (func (export "as-drop-operand") (param i32) (drop (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (if (result i32) (local.get 0) (then (i32.const 11)) (else (i32.const 10)) ) ) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.ctz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const -13)) ) ) ) (func (export "as-binary-operand") (param i32 i32) (result i32) (i32.mul (if (result i32) (local.get 0) (then (call $dummy) (i32.const 3)) (else (call $dummy) (i32.const -3)) ) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -5)) ) ) ) (func (export "as-test-operand") (param i32) (result i32) (i32.eqz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-compare-operand") (param i32 i32) (result i32) (f32.gt (if (result f32) (local.get 0) (then (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -3)) ) (if (result f32) (local.get 1) (then (call $dummy) (f32.const 4)) (else (call $dummy) (f32.const -4)) ) ) ) (func (export "as-binary-operands") (param i32) (result i32) (i32.mul (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const 3) (call $dummy) (i32.const -4)) ) ) ) (func (export "as-compare-operands") (param i32) (result i32) (f32.gt (if (result f32 f32) (local.get 0) (then (call $dummy) (f32.const 3) (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -2) (call $dummy) (f32.const -3)) ) ) ) (func (export "as-mixed-operands") (param i32) (result i32) (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -3) (call $dummy) (i32.const -4)) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (if (i32.const 1) (then (br 0) (unreachable))) (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable))) (i32.const 19) ) (func (export "break-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (br 0 (i32.const 18)) (i32.const 19)) (else (br 0 (i32.const 21)) (i32.const 20)) ) ) (func (export "break-multi-value") (param i32) (result i32 i32 i64) (if (result i32 i32 i64) (local.get 0) (then (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) (else (br 0 (i32.const -18) (i32.const 18) (i64.const -18)) (i32.const -19) (i32.const 19) (i64.const -19) ) ) ) (func (export "param") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add)) (else (i32.const -2) (i32.add)) ) ) (func (export "params") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add)) (else (i32.sub)) ) ) (func (export "params-id") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then)) (i32.add) ) (func (export "param-break") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add) (br 0)) (else (i32.const -2) (i32.add) (br 0)) ) ) (func (export "params-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add) (br 0)) (else (i32.sub) (br 0)) ) ) (func (export "params-id-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0))) (i32.add) ) (func (export "effects") (param i32) (result i32) (local i32) (if (block (result i32) (local.set 1 (i32.const 1)) (local.get 0)) (then (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (local.set 1 (i32.sub (local.get 1) (i32.const 5))) (local.set 1 (i32.mul (local.get 1) (i32.const 7))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 100))) ) (else (local.set 1 (i32.mul (local.get 1) (i32.const 5))) (local.set 1 (i32.sub (local.get 1) (i32.const 7))) (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 1000))) ) ) (local.get 1) ) ;; Examples (func $add64_u_with_carry (export "add64_u_with_carry") (param $i i64) (param $j i64) (param $c i32) (result i64 i32) (local $k i64) (local.set $k (i64.add (i64.add (local.get $i) (local.get $j)) (i64.extend_i32_u (local.get $c)) ) ) (return (local.get $k) (i64.lt_u (local.get $k) (local.get $i))) ) (func $add64_u_saturated (export "add64_u_saturated") (param i64 i64) (result i64) (call $add64_u_with_carry (local.get 0) (local.get 1) (i32.const 0)) (if (param i64) (result i64) (then (drop) (i64.const -1)) ) ) ;; Block signature syntax (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (if (type $block-sig-1) (i32.const 1) (then)) (if (type $block-sig-2) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (i32.const 1) (then (drop)) (else (drop))) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (i32.const 1) (then)) (drop) (drop) (drop) (if (type $block-sig-2) (result i32) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (param i32) (i32.const 1) (then (drop)) (else (drop)) ) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) (i32.const 1) (then) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty" (i32.const 0))) (assert_return (invoke "empty" (i32.const 1))) (assert_return (invoke "empty" (i32.const 100))) (assert_return (invoke "empty" (i32.const -2))) (assert_return (invoke "singular" (i32.const 0)) (i32.const 8)) (assert_return (invoke "singular" (i32.const 1)) (i32.const 7)) (assert_return (invoke "singular" (i32.const 10)) (i32.const 7)) (assert_return (invoke "singular" (i32.const -10)) (i32.const 7)) (assert_return (invoke "multi" (i32.const 0)) (i32.const 9) (i32.const -1)) (assert_return (invoke "multi" (i32.const 1)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const 13)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const -5)) (i32.const 8) (i32.const 1)) (assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11)) (assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-condition" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-condition" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-last" (i32.const 0)) (i32.const 2)) (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-binary-operands" (i32.const 0)) (i32.const -12)) (assert_return (invoke "as-binary-operands" (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-compare-operands" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operands" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-mixed-operands" (i32.const 0)) (i32.const -3)) (assert_return (invoke "as-mixed-operands" (i32.const 1)) (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value" (i32.const 1)) (i32.const 18)) (assert_return (invoke "break-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "break-multi-value" (i32.const 0)) (i32.const -18) (i32.const 18) (i64.const -18) ) (assert_return (invoke "break-multi-value" (i32.const 1)) (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "param" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 1)) (i32.const 3)) (assert_return (invoke "param-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "effects" (i32.const 1)) (i32.const -14)) (assert_return (invoke "effects" (i32.const 0)) (i32.const -6)) (assert_return (invoke "add64_u_with_carry" (i64.const 0) (i64.const 0) (i32.const 0)) (i64.const 0) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const 100) (i64.const 124) (i32.const 0)) (i64.const 224) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 0)) (i64.const -1) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const -1) (i32.const 0)) (i64.const -2) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 1)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 1)) (i64.const 1) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0) (i64.const 0)) (i64.const 0) ) (assert_return (invoke "add64_u_saturated" (i64.const 1230) (i64.const 23)) (i64.const 1253) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 0)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const -1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const -1) ) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (type $sig) (result i32) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (type $sig) (result i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (result i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (type $sig) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (param i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (if (result i32) (param i32) (i32.const 1) (then)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (i32.const 1)" " (if (param $x i32) (then (drop)) (else (drop)))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (then (drop)) (else (drop)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (result i32) (then)) (unreachable)" ")" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (i32.const 1) (if (type $sig) (i32.const 0) (then))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void (if (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void-else (if (i32.const 1) (then (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-void (if (i32.const 1) (then) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-void (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void-else (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-void (if (i32.const 1) (then) (else (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else (i32.const 2) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else (i32.const 0) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-nums-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-unreached-select (result i32) (if (result i64) (i32.const 0) (then (select (unreachable) (unreachable) (unreachable))) (else (i64.const 0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (i64.const 0)) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (select (unreachable) (unreachable) (unreachable))) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (nop)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (nop)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-condition-empty (if (then)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-block (i32.const 0) (block (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-loop (i32.const 0) (loop (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-then (i32.const 0) (i32.const 0) (if (then (if (then)))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br (i32.const 0) (block (br 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_if (i32.const 0) (block (br_if 0 (if(then)) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_table (i32.const 0) (block (br_table 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-return (return (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-select (select (if(then)) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-call (call 1 (if(then))) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-condition-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (if(then)) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.set (local i32) (local.set 0 (if(then))) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.tee (local i32) (local.tee 0 (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-condition-empty-in-global.set (global.set $x (if(then))) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-memory.grow (memory.grow (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-load (i32.load (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-condition-empty-in-store (i32.store (if(then)) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (if (param i32 f64) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (if (param i32 f64) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) if (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (if (param $x i32) (then)))") "unexpected token" ) (assert_malformed (module quote "(func i32.const 0 if end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l1 end $l2)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/memory64/imports.wast ================================================ ;; Auxiliary module to import from (module (func (export "func")) (func (export "func-i32") (param i32)) (func (export "func-f32") (param f32)) (func (export "func->i32") (result i32) (i32.const 22)) (func (export "func->f32") (result f32) (f32.const 11)) (func (export "func-i32->i32") (param i32) (result i32) (local.get 0)) (func (export "func-i64->i64") (param i64) (result i64) (local.get 0)) (global (export "global-i32") i32 (i32.const 55)) (global (export "global-f32") f32 (f32.const 44)) (table (export "table-10-inf") 10 funcref) ;; (table (export "table-10-20") 10 20 funcref) (memory (export "memory-2-inf") 2) ;; (memory (export "memory-2-4") 2 4) ) (register "test") ;; Functions (module (type $func_i32 (func (param i32))) (type $func_i64 (func (param i64))) (type $func_f32 (func (param f32))) (type $func_f64 (func (param f64))) (import "spectest" "print_i32" (func (param i32))) ;; JavaScript can't handle i64 yet. ;; (func (import "spectest" "print_i64") (param i64)) (import "spectest" "print_i32" (func $print_i32 (param i32))) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "print_i64" (func $print_i64 (param i64))) (import "spectest" "print_f32" (func $print_f32 (param f32))) (import "spectest" "print_f64" (func $print_f64 (param f64))) (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32))) (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64))) (func $print_i32-2 (import "spectest" "print_i32") (param i32)) (func $print_f64-2 (import "spectest" "print_f64") (param f64)) (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) (func (export "p1") (import "spectest" "print_i32") (param i32)) (func $p (export "p2") (import "spectest" "print_i32") (param i32)) (func (export "p3") (export "p4") (import "spectest" "print_i32") (param i32)) (func (export "p5") (import "spectest" "print_i32") (type 0)) (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result)) (import "spectest" "print_i32" (func (type $forward))) (func (import "spectest" "print_i32") (type $forward)) (type $forward (func (param i32))) (table funcref (elem $print_i32 $print_f64)) (func (export "print32") (param $i i32) (local $x f32) (local.set $x (f32.convert_i32_s (local.get $i))) (call 0 (local.get $i)) (call $print_i32_f32 (i32.add (local.get $i) (i32.const 1)) (f32.const 42) ) (call $print_i32 (local.get $i)) (call $print_i32-2 (local.get $i)) (call $print_f32 (local.get $x)) (call_indirect (type $func_i32) (local.get $i) (i32.const 0)) ) (func (export "print64") (param $i i64) (local $x f64) (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i)))) ;; JavaScript can't handle i64 yet. ;; (call 1 (local.get $i)) (call $print_f64_f64 (f64.add (local.get $x) (f64.const 1)) (f64.const 53) ) ;; JavaScript can't handle i64 yet. ;; (call $print_i64 (local.get $i)) (call $print_f64 (local.get $x)) (call $print_f64-2 (local.get $x)) (call_indirect (type $func_f64) (local.get $x) (i32.const 1)) ) ) (assert_return (invoke "print32" (i32.const 13))) (assert_return (invoke "print64" (i64.const 24))) (assert_invalid (module (type (func (result i32))) (import "test" "func" (func (type 1))) ) "unknown type" ) (module (import "test" "func" (func))) (module (import "test" "func-i32" (func (param i32)))) (module (import "test" "func-f32" (func (param f32)))) (module (import "test" "func->i32" (func (result i32)))) (module (import "test" "func->f32" (func (result f32)))) (module (import "test" "func-i32->i32" (func (param i32) (result i32)))) (module (import "test" "func-i64->i64" (func (param i64) (result i64)))) (assert_unlinkable (module (import "test" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (func))) "incompatible import type" ) ;; Globals (module (import "spectest" "global_i32" (global i32)) (global (import "spectest" "global_i32") i32) (import "spectest" "global_i32" (global $x i32)) (global $y (import "spectest" "global_i32") i32) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "global_i64" (global i64)) (import "spectest" "global_f32" (global f32)) (import "spectest" "global_f64" (global f64)) (func (export "get-0") (result i32) (global.get 0)) (func (export "get-1") (result i32) (global.get 1)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i32) (global.get $y)) ) (assert_return (invoke "get-0") (i32.const 666)) (assert_return (invoke "get-1") (i32.const 666)) (assert_return (invoke "get-x") (i32.const 666)) (assert_return (invoke "get-y") (i32.const 666)) (module (import "test" "global-i32" (global i32))) (module (import "test" "global-f32" (global f32))) (assert_unlinkable (module (import "test" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (global i32))) "incompatible import type" ) ;; Tables (module (type (func (result i32))) (import "spectest" "table" (table 10 20 funcref)) (elem (table 0) (i32.const 1) $f $g) (func (export "call") (param i32) (result i32) (call_indirect (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (type (func (result i32))) (table (import "spectest" "table") 10 20 funcref) (elem (table 0) (i32.const 1) $f $g) (func (export "call") (param i32) (result i32) (call_indirect (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") ;; Disabled for incompatibility with reference-types proposal, which adds support for multiple tables. ;; (assert_invalid ;; (module (import "" "" (table 10 funcref)) (import "" "" (table 10 funcref))) ;; "multiple tables" ;; ) ;; (assert_invalid ;; (module (import "" "" (table 10 funcref)) (table 10 funcref)) ;; "multiple tables" ;; ) ;; (assert_invalid ;; (module (table 10 funcref) (table 10 funcref)) ;; "multiple tables" ;; ) (module (import "test" "table-10-inf" (table 10 funcref))) (module (import "test" "table-10-inf" (table 5 funcref))) (module (import "test" "table-10-inf" (table 0 funcref))) (module (import "spectest" "table" (table 10 funcref))) (module (import "spectest" "table" (table 5 funcref))) (module (import "spectest" "table" (table 0 funcref))) (module (import "spectest" "table" (table 10 20 funcref))) (module (import "spectest" "table" (table 5 20 funcref))) (module (import "spectest" "table" (table 0 20 funcref))) (module (import "spectest" "table" (table 10 25 funcref))) (module (import "spectest" "table" (table 5 25 funcref))) (assert_unlinkable (module (import "test" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 10 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 10 15 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (table 10 funcref))) "incompatible import type" ) ;; Memories (module (import "spectest" "memory" (memory 1 2)) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (memory (import "spectest" "memory") 1 2) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (assert_invalid (module (import "" "" (memory 1)) (import "" "" (memory 1))) "multiple memories" ) (assert_invalid (module (import "" "" (memory 1)) (memory 0)) "multiple memories" ) (assert_invalid (module (memory 0) (memory 0)) "multiple memories" ) (module (import "test" "memory-2-inf" (memory 2))) (module (import "test" "memory-2-inf" (memory 1))) (module (import "test" "memory-2-inf" (memory 0))) (module (import "spectest" "memory" (memory 1))) (module (import "spectest" "memory" (memory 0))) (module (import "spectest" "memory" (memory 1 2))) (module (import "spectest" "memory" (memory 0 2))) (module (import "spectest" "memory" (memory 1 3))) (module (import "spectest" "memory" (memory 0 3))) (assert_unlinkable (module (import "test" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 3))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 2 3))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (module (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) ;; Syntax errors (assert_malformed (module quote "(func) (import \"\" \"\" (func))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (global i64))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (table 0 funcref))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (memory 0))") "import after function" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") "import after global" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (func))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (global i32))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))") "import after table" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (func))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (global i32))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") "import after memory" ) ;; This module is required to validate, regardless of whether it can be ;; linked. Overloading is not possible in wasm itself, but it is possible ;; in modules from which wasm can import. (module) (register "not wasm") (assert_unlinkable (module (import "not wasm" "overloaded" (func)) (import "not wasm" "overloaded" (func (param i32))) (import "not wasm" "overloaded" (func (param i32 i32))) (import "not wasm" "overloaded" (func (param i64))) (import "not wasm" "overloaded" (func (param f32))) (import "not wasm" "overloaded" (func (param f64))) (import "not wasm" "overloaded" (func (result i32))) (import "not wasm" "overloaded" (func (result i64))) (import "not wasm" "overloaded" (func (result f32))) (import "not wasm" "overloaded" (func (result f64))) (import "not wasm" "overloaded" (global i32)) (import "not wasm" "overloaded" (global i64)) (import "not wasm" "overloaded" (global f32)) (import "not wasm" "overloaded" (global f64)) (import "not wasm" "overloaded" (table 0 funcref)) (import "not wasm" "overloaded" (memory 0)) ) "unknown import" ) ================================================ FILE: Test/WebAssembly/memory64/inline-module.wast ================================================ (func) (memory 0) (func (export "f")) ================================================ FILE: Test/WebAssembly/memory64/int_exprs.wast ================================================ ;; Test interesting integer "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x+1>n is not folded to x. (module (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) (i32.shr_s (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) (i32.shr_u (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) (i64.shr_s (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) (i64.shr_u (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) ) (assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) ;; Test that x>>n<?,./ ") (result i32) (i32.const 6)) ;; Test that we can use names that have special meaning in JS. (func (export "NaN") (result i32) (i32.const 7)) (func (export "Infinity") (result i32) (i32.const 8)) (func (export "if") (result i32) (i32.const 9)) ;; Test that we can use common libc names without conflict. (func (export "malloc") (result i32) (i32.const 10)) ;; Test that we can use some libc hidden names without conflict. (func (export "_malloc") (result i32) (i32.const 11)) (func (export "__malloc") (result i32) (i32.const 12)) ;; Test that names are case-sensitive. (func (export "a") (result i32) (i32.const 13)) (func (export "A") (result i32) (i32.const 14)) ;; Test that UTF-8 BOM code points can appear in identifiers. (func (export "") (result i32) (i32.const 15)) ;; Test that Unicode normalization is not applied. These function names ;; contain different codepoints which normalize to the same thing under ;; NFC or NFD. (func (export "Å") (result i32) (i32.const 16)) (func (export "Å") (result i32) (i32.const 17)) (func (export "Å") (result i32) (i32.const 18)) ;; Test that Unicode compatibility normalization is not applied. These ;; function names contain different codepoints which normalize to the ;; same thing under NFKC or NFKD. (func (export "ffi") (result i32) (i32.const 19)) (func (export "ffi") (result i32) (i32.const 20)) (func (export "ffi") (result i32) (i32.const 21)) ;; Test the C0 control codes. (func (export "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (result i32) (i32.const 22)) (func (export "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (result i32) (i32.const 23)) ;; Test miscellaneous control codes. (func (export " \7f") (result i32) (i32.const 24)) ;; Test the C1 control codes. (func (export "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (result i32) (i32.const 25)) (func (export "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (result i32) (i32.const 26)) ;; Test the Unicode Specials. (func (export "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (result i32) (i32.const 27)) (func (export "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (result i32) (i32.const 28)) ;; Test that the control pictures are distinct from the control codes they ;; depict. These correspond to the C0 and miscellaneous control code tests ;; above. (func (export "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (result i32) (i32.const 29)) (func (export "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (result i32) (i32.const 30)) (func (export "␠␡") (result i32) (i32.const 31)) ;; Test the Unicode Specials in non-escaped form (excluding U+FFFE and ;; U+FFFF, so that generic tools don't detect this file as non-UTF-8). (func (export "￰￱￲￳￴￵￶￷￸�") (result i32) (i32.const 32)) ;; Test a bare ZWJ code point. (func (export "‍") (result i32) (i32.const 33)) ;; Test a bare ZWNJ code point. (func (export "‌") (result i32) (i32.const 34)) ;; Test various bare joiner code points. (func (export "͏") (result i32) (i32.const 35)) (func (export "⁠") (result i32) (i32.const 36)) (func (export "⵿") (result i32) (i32.const 37)) (func (export "𑁿") (result i32) (i32.const 38)) (func (export "᠎") (result i32) (i32.const 39)) ;; Test various interesting code points: reverse BOM, zero-width space, ;; no-break space, soft hyphen, word joiner, ogham space mark, ;; right-to-left override, left-to-right override. (func (export "￯​ ­⁠ ‮‭") (result i32) (i32.const 40)) ;; Test more interesting code points: left-to-right mark, right-to-left mark, ;; non-breaking hyphen, line separator, paragraph separator, ;; left-to-right embedding, right-to-left embedding, ;; pop directional formatting, narrow no-break space, left-to-right isolate, ;; right-to-left isolate, first strong isolate, pop directional isolate. (func (export "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (result i32) (i32.const 41)) ;; Test some deprecated code points: inhibit symmetric swapping, ;; activate symmetric swapping, inhibit arabic form shaping, ;; activate arabic form shaping, national digit shapes, nominal digit shapes. (func (export "") (result i32) (i32.const 42)) ;; Test "invisible" operator code points. (func (export "⁡⁢⁣⁤") (result i32) (i32.const 43)) ;; Test that code points outside the BMP are supported. (func (export "𐀀󟿿􏿿") (result i32) (i32.const 44)) ;; Test that WebAssembly implementations cope in the presence of Zalgo. (func (export "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (result i32) (i32.const 45)) ;; Test Hangul filler code points. (func (export "ᅟᅠㅤᅠ") (result i32) (i32.const 46)) ;; Test variation selectors (which are also ID_Continue code points). (func (export "︀") (result i32) (i32.const 47)) (func (export "︄") (result i32) (i32.const 48)) (func (export "󠄀") (result i32) (i32.const 49)) (func (export "󠇯") (result i32) (i32.const 50)) ;; Test an uncombined combining code point. (func (export "̈") (result i32) (i32.const 51)) ;; Test that numerous different present and historical representations of the ;; "newline" concept are distinct. Tests largely inspired by: ;; https://en.wikipedia.org/wiki/Newline#Representations ;; https://en.wikipedia.org/wiki/Newline#Unicode and ;; https://en.wikipedia.org/wiki/Newline#Reverse_and_partial_line_feeds (func (export "\0a") (result i32) (i32.const 52)) (func (export "␤") (result i32) (i32.const 53)) (func (export "
") (result i32) (i32.const 54)) (func (export "\0d") (result i32) (i32.const 55)) (func (export "\0d\0a") (result i32) (i32.const 56)) (func (export "\0a\0d") (result i32) (i32.const 57)) (func (export "\1e") (result i32) (i32.const 58)) (func (export "\0b") (result i32) (i32.const 59)) (func (export "\0c") (result i32) (i32.const 60)) (func (export "\c2\85") (result i32) (i32.const 61)) (func (export "
") (result i32) (i32.const 62)) (func (export "…") (result i32) (i32.const 63)) (func (export "⏎") (result i32) (i32.const 64)) (func (export "\c2\8b") (result i32) (i32.const 65)) (func (export "\c2\8c") (result i32) (i32.const 66)) (func (export "\c2\8d") (result i32) (i32.const 67)) (func (export "↵") (result i32) (i32.const 68)) (func (export "↩") (result i32) (i32.const 69)) (func (export "⌤") (result i32) (i32.const 70)) (func (export "⤶") (result i32) (i32.const 71)) (func (export "↲") (result i32) (i32.const 72)) (func (export "⮨") (result i32) (i32.const 73)) (func (export "⮰") (result i32) (i32.const 74)) ;; Test that non-characters are not replaced by the replacement character. (func (export "�") (result i32) (i32.const 75)) (func (export "\ef\b7\90") (result i32) (i32.const 76)) (func (export "\ef\b7\91") (result i32) (i32.const 77)) (func (export "\ef\b7\92") (result i32) (i32.const 78)) (func (export "\ef\b7\93") (result i32) (i32.const 79)) (func (export "\ef\b7\94") (result i32) (i32.const 80)) (func (export "\ef\b7\95") (result i32) (i32.const 81)) (func (export "\ef\b7\96") (result i32) (i32.const 82)) (func (export "\ef\b7\97") (result i32) (i32.const 83)) (func (export "\ef\b7\98") (result i32) (i32.const 84)) (func (export "\ef\b7\99") (result i32) (i32.const 85)) (func (export "\ef\b7\9a") (result i32) (i32.const 86)) (func (export "\ef\b7\9b") (result i32) (i32.const 87)) (func (export "\ef\b7\9c") (result i32) (i32.const 88)) (func (export "\ef\b7\9d") (result i32) (i32.const 89)) (func (export "\ef\b7\9e") (result i32) (i32.const 90)) (func (export "\ef\b7\9f") (result i32) (i32.const 91)) (func (export "\ef\b7\a0") (result i32) (i32.const 92)) (func (export "\ef\b7\a1") (result i32) (i32.const 93)) (func (export "\ef\b7\a2") (result i32) (i32.const 94)) (func (export "\ef\b7\a3") (result i32) (i32.const 95)) (func (export "\ef\b7\a4") (result i32) (i32.const 96)) (func (export "\ef\b7\a5") (result i32) (i32.const 97)) (func (export "\ef\b7\a6") (result i32) (i32.const 98)) (func (export "\ef\b7\a7") (result i32) (i32.const 99)) (func (export "\ef\b7\a8") (result i32) (i32.const 100)) (func (export "\ef\b7\a9") (result i32) (i32.const 101)) (func (export "\ef\b7\aa") (result i32) (i32.const 102)) (func (export "\ef\b7\ab") (result i32) (i32.const 103)) (func (export "\ef\b7\ac") (result i32) (i32.const 104)) (func (export "\ef\b7\ad") (result i32) (i32.const 105)) (func (export "\ef\b7\ae") (result i32) (i32.const 106)) (func (export "\ef\b7\af") (result i32) (i32.const 107)) (func (export "\ef\bf\be") (result i32) (i32.const 108)) (func (export "\ef\bf\bf") (result i32) (i32.const 109)) (func (export "\f0\9f\bf\be") (result i32) (i32.const 110)) (func (export "\f0\9f\bf\bf") (result i32) (i32.const 111)) (func (export "\f0\af\bf\be") (result i32) (i32.const 112)) (func (export "\f0\af\bf\bf") (result i32) (i32.const 113)) (func (export "\f0\bf\bf\be") (result i32) (i32.const 114)) (func (export "\f0\bf\bf\bf") (result i32) (i32.const 115)) (func (export "\f1\8f\bf\be") (result i32) (i32.const 116)) (func (export "\f1\8f\bf\bf") (result i32) (i32.const 117)) (func (export "\f1\9f\bf\be") (result i32) (i32.const 118)) (func (export "\f1\9f\bf\bf") (result i32) (i32.const 119)) (func (export "\f1\af\bf\be") (result i32) (i32.const 120)) (func (export "\f1\af\bf\bf") (result i32) (i32.const 121)) (func (export "\f1\bf\bf\be") (result i32) (i32.const 122)) (func (export "\f1\bf\bf\bf") (result i32) (i32.const 123)) (func (export "\f2\8f\bf\be") (result i32) (i32.const 124)) (func (export "\f2\8f\bf\bf") (result i32) (i32.const 125)) (func (export "\f2\9f\bf\be") (result i32) (i32.const 126)) (func (export "\f2\9f\bf\bf") (result i32) (i32.const 127)) (func (export "\f2\af\bf\be") (result i32) (i32.const 128)) (func (export "\f2\af\bf\bf") (result i32) (i32.const 129)) (func (export "\f2\bf\bf\be") (result i32) (i32.const 130)) (func (export "\f2\bf\bf\bf") (result i32) (i32.const 131)) (func (export "\f3\8f\bf\be") (result i32) (i32.const 132)) (func (export "\f3\8f\bf\bf") (result i32) (i32.const 133)) (func (export "\f3\9f\bf\be") (result i32) (i32.const 134)) (func (export "\f3\9f\bf\bf") (result i32) (i32.const 135)) (func (export "\f3\af\bf\be") (result i32) (i32.const 136)) (func (export "\f3\af\bf\bf") (result i32) (i32.const 137)) (func (export "\f3\bf\bf\be") (result i32) (i32.const 138)) (func (export "\f3\bf\bf\bf") (result i32) (i32.const 139)) (func (export "\f4\8f\bf\be") (result i32) (i32.const 140)) (func (export "\f4\8f\bf\bf") (result i32) (i32.const 141)) ;; Test an interrobang with combining diacritical marks above. ;; https://xkcd.com/1209/ (func (export "̈‽̈̉") (result i32) (i32.const 142)) ;; Test that RLM/LRM don't change the logical byte order. (func (export "abc") (result i32) (i32.const 143)) (func (export "‭abc") (result i32) (i32.const 144)) (func (export "‮cba") (result i32) (i32.const 145)) (func (export "‭abc‮") (result i32) (i32.const 146)) (func (export "‮cba‭") (result i32) (i32.const 147)) ;; Test that Unicode font variations are preserved. (func (export "𝑨") (result i32) (i32.const 148)) (func (export "𝐴") (result i32) (i32.const 149)) (func (export "𝘈") (result i32) (i32.const 150)) (func (export "𝘼") (result i32) (i32.const 151)) (func (export "𝐀") (result i32) (i32.const 152)) (func (export "𝓐") (result i32) (i32.const 153)) (func (export "𝕬") (result i32) (i32.const 154)) (func (export "𝗔") (result i32) (i32.const 155)) (func (export "𝒜") (result i32) (i32.const 156)) (func (export "𝔄") (result i32) (i32.const 157)) (func (export "𝔸") (result i32) (i32.const 158)) (func (export "𝖠") (result i32) (i32.const 159)) (func (export "𝙰") (result i32) (i32.const 160)) (func (export "ᴀ") (result i32) (i32.const 161)) ;; Test that various additional letter variations are preserved. ;; (U+0040, U+0061, U+0041, U+00C5, U+0041 U+030A, U+212B, and the font ;; variations are covered above.) (func (export "ᴬ") (result i32) (i32.const 162)) (func (export "Ⓐ") (result i32) (i32.const 163)) (func (export "A") (result i32) (i32.const 164)) (func (export "🄐") (result i32) (i32.const 165)) (func (export "🄰") (result i32) (i32.const 166)) (func (export "󠁁") (result i32) (i32.const 167)) (func (export "U+0041") (result i32) (i32.const 168)) (func (export "A​") (result i32) (i32.const 169)) (func (export "А") (result i32) (i32.const 170)) (func (export "Ꙗ") (result i32) (i32.const 171)) (func (export "ⷼ") (result i32) (i32.const 172)) (func (export "ⷶ") (result i32) (i32.const 173)) (func (export "Ɐ") (result i32) (i32.const 174)) (func (export "🅐") (result i32) (i32.const 175)) (func (export "🅰") (result i32) (i32.const 176)) (func (export "Ⱝ") (result i32) (i32.const 177)) (func (export "𐐂") (result i32) (i32.const 178)) (func (export "𐐈") (result i32) (i32.const 179)) (func (export "𐒰") (result i32) (i32.const 180)) (func (export "À") (result i32) (i32.const 181)) (func (export "Á") (result i32) (i32.const 182)) (func (export "Â") (result i32) (i32.const 183)) (func (export "Ã") (result i32) (i32.const 184)) (func (export "Ä") (result i32) (i32.const 185)) (func (export "Ā") (result i32) (i32.const 186)) (func (export "Ă") (result i32) (i32.const 187)) (func (export "Ą") (result i32) (i32.const 188)) (func (export "Ǎ") (result i32) (i32.const 189)) (func (export "Ǟ") (result i32) (i32.const 190)) (func (export "Ǡ") (result i32) (i32.const 191)) (func (export "Ǻ") (result i32) (i32.const 192)) (func (export "Ȁ") (result i32) (i32.const 193)) (func (export "Ȃ") (result i32) (i32.const 194)) (func (export "Ȧ") (result i32) (i32.const 195)) (func (export "Ⱥ") (result i32) (i32.const 196)) (func (export "Ӑ") (result i32) (i32.const 197)) (func (export "Ӓ") (result i32) (i32.const 198)) (func (export "ߊ") (result i32) (i32.const 199)) (func (export "ࠡ") (result i32) (i32.const 200)) (func (export "ࠢ") (result i32) (i32.const 201)) (func (export "ࠣ") (result i32) (i32.const 202)) (func (export "ࠤ") (result i32) (i32.const 203)) (func (export "ࠥ") (result i32) (i32.const 204)) (func (export "ऄ") (result i32) (i32.const 205)) (func (export "अ") (result i32) (i32.const 206)) (func (export "ॲ") (result i32) (i32.const 207)) (func (export "অ") (result i32) (i32.const 208)) (func (export "ਅ") (result i32) (i32.const 209)) (func (export "અ") (result i32) (i32.const 210)) (func (export "ଅ") (result i32) (i32.const 211)) (func (export "அ") (result i32) (i32.const 212)) (func (export "అ") (result i32) (i32.const 213)) (func (export "ಅ") (result i32) (i32.const 214)) (func (export "അ") (result i32) (i32.const 215)) (func (export "ะ") (result i32) (i32.const 216)) (func (export "ະ") (result i32) (i32.const 217)) (func (export "༁") (result i32) (i32.const 218)) (func (export "ཨ") (result i32) (i32.const 219)) (func (export "ྸ") (result i32) (i32.const 220)) (func (export "အ") (result i32) (i32.const 221)) (func (export "ဢ") (result i32) (i32.const 222)) (func (export "ႜ") (result i32) (i32.const 223)) (func (export "ᅡ") (result i32) (i32.const 224)) (func (export "አ") (result i32) (i32.const 225)) (func (export "ዐ") (result i32) (i32.const 226)) (func (export "Ꭰ") (result i32) (i32.const 227)) (func (export "ᐊ") (result i32) (i32.const 228)) (func (export "ᖳ") (result i32) (i32.const 229)) (func (export "ᚨ") (result i32) (i32.const 230)) (func (export "ᚪ") (result i32) (i32.const 231)) (func (export "ᛆ") (result i32) (i32.const 232)) (func (export "ᜀ") (result i32) (i32.const 233)) (func (export "ᜠ") (result i32) (i32.const 234)) (func (export "ᝀ") (result i32) (i32.const 235)) (func (export "ᝠ") (result i32) (i32.const 236)) (func (export "ᠠ") (result i32) (i32.const 237)) (func (export "ᢇ") (result i32) (i32.const 238)) (func (export "ᤠ") (result i32) (i32.const 239)) (func (export "ᥣ") (result i32) (i32.const 240)) (func (export "ᨕ") (result i32) (i32.const 241)) (func (export "ᩋ") (result i32) (i32.const 242)) (func (export "ᩡ") (result i32) (i32.const 243)) (func (export "ᮃ") (result i32) (i32.const 244)) (func (export "ᯀ") (result i32) (i32.const 245)) (func (export "ᯁ") (result i32) (i32.const 246)) (func (export "ᰣ") (result i32) (i32.const 247)) (func (export "Ḁ") (result i32) (i32.const 248)) (func (export "Ạ") (result i32) (i32.const 249)) (func (export "Ả") (result i32) (i32.const 250)) (func (export "Ấ") (result i32) (i32.const 251)) (func (export "Ầ") (result i32) (i32.const 252)) (func (export "Ẩ") (result i32) (i32.const 253)) (func (export "Ẫ") (result i32) (i32.const 254)) (func (export "Ậ") (result i32) (i32.const 255)) (func (export "Ắ") (result i32) (i32.const 256)) (func (export "Ằ") (result i32) (i32.const 257)) (func (export "Ẳ") (result i32) (i32.const 258)) (func (export "Ẵ") (result i32) (i32.const 259)) (func (export "Ặ") (result i32) (i32.const 260)) (func (export "あ") (result i32) (i32.const 261)) (func (export "ア") (result i32) (i32.const 262)) (func (export "ㄚ") (result i32) (i32.const 263)) (func (export "ㅏ") (result i32) (i32.const 264)) (func (export "㈎") (result i32) (i32.const 265)) (func (export "㈏") (result i32) (i32.const 266)) (func (export "㈐") (result i32) (i32.const 267)) (func (export "㈑") (result i32) (i32.const 268)) (func (export "㈒") (result i32) (i32.const 269)) (func (export "㈓") (result i32) (i32.const 270)) (func (export "㈔") (result i32) (i32.const 271)) (func (export "㈕") (result i32) (i32.const 272)) (func (export "㈖") (result i32) (i32.const 273)) (func (export "㈗") (result i32) (i32.const 274)) (func (export "㈘") (result i32) (i32.const 275)) (func (export "㈙") (result i32) (i32.const 276)) (func (export "㈚") (result i32) (i32.const 277)) (func (export "㈛") (result i32) (i32.const 278)) (func (export "㉮") (result i32) (i32.const 279)) (func (export "㉯") (result i32) (i32.const 280)) (func (export "㉰") (result i32) (i32.const 281)) (func (export "㉱") (result i32) (i32.const 282)) (func (export "㉲") (result i32) (i32.const 283)) (func (export "㉳") (result i32) (i32.const 284)) (func (export "㉴") (result i32) (i32.const 285)) (func (export "㉵") (result i32) (i32.const 286)) (func (export "㉶") (result i32) (i32.const 287)) (func (export "㉷") (result i32) (i32.const 288)) (func (export "㉸") (result i32) (i32.const 289)) (func (export "㉹") (result i32) (i32.const 290)) (func (export "㉺") (result i32) (i32.const 291)) (func (export "㉻") (result i32) (i32.const 292)) (func (export "㋐") (result i32) (i32.const 293)) (func (export "ꀊ") (result i32) (i32.const 294)) (func (export "ꓮ") (result i32) (i32.const 295)) (func (export "ꕉ") (result i32) (i32.const 296)) (func (export "ꚠ") (result i32) (i32.const 297)) (func (export "ꠀ") (result i32) (i32.const 298)) (func (export "ꠣ") (result i32) (i32.const 299)) (func (export "ꡝ") (result i32) (i32.const 300)) (func (export "ꢂ") (result i32) (i32.const 301)) (func (export "꣪") (result i32) (i32.const 302)) (func (export "ꤢ") (result i32) (i32.const 303)) (func (export "ꥆ") (result i32) (i32.const 304)) (func (export "ꦄ") (result i32) (i32.const 305)) (func (export "ꨀ") (result i32) (i32.const 306)) (func (export "ア") (result i32) (i32.const 307)) (func (export "ᅡ") (result i32) (i32.const 308)) (func (export "𐀀") (result i32) (i32.const 309)) (func (export "𐊀") (result i32) (i32.const 310)) (func (export "𐊠") (result i32) (i32.const 311)) (func (export "𐌀") (result i32) (i32.const 312)) (func (export "𐎠") (result i32) (i32.const 313)) (func (export "𐒖") (result i32) (i32.const 314)) (func (export "𐔀") (result i32) (i32.const 315)) (func (export "𐝀") (result i32) (i32.const 316)) (func (export "𐠀") (result i32) (i32.const 317)) (func (export "𐤠") (result i32) (i32.const 318)) (func (export "𐦀") (result i32) (i32.const 319)) (func (export "𐦠") (result i32) (i32.const 320)) (func (export "𐨀") (result i32) (i32.const 321)) (func (export "𐬀") (result i32) (i32.const 322)) (func (export "𐰀") (result i32) (i32.const 323)) (func (export "𐰁") (result i32) (i32.const 324)) (func (export "𐲀") (result i32) (i32.const 325)) (func (export "𑀅") (result i32) (i32.const 326)) (func (export "𑂃") (result i32) (i32.const 327)) (func (export "𑄧") (result i32) (i32.const 328)) (func (export "𑅐") (result i32) (i32.const 329)) (func (export "𑆃") (result i32) (i32.const 330)) (func (export "𑈀") (result i32) (i32.const 331)) (func (export "𑊀") (result i32) (i32.const 332)) (func (export "𑊰") (result i32) (i32.const 333)) (func (export "𑌅") (result i32) (i32.const 334)) (func (export "𑍰") (result i32) (i32.const 335)) (func (export "𑐀") (result i32) (i32.const 336)) (func (export "𑒁") (result i32) (i32.const 337)) (func (export "𑖀") (result i32) (i32.const 338)) (func (export "𑘀") (result i32) (i32.const 339)) (func (export "𑚀") (result i32) (i32.const 340)) (func (export "𑜒") (result i32) (i32.const 341)) (func (export "𑜠") (result i32) (i32.const 342)) (func (export "𑢡") (result i32) (i32.const 343)) (func (export "𑫕") (result i32) (i32.const 344)) (func (export "𑰀") (result i32) (i32.const 345)) (func (export "𑲏") (result i32) (i32.const 346)) (func (export "𑲯") (result i32) (i32.const 347)) (func (export "𒀀") (result i32) (i32.const 348)) (func (export "𖧕") (result i32) (i32.const 349)) (func (export "𖩆") (result i32) (i32.const 350)) (func (export "𖫧") (result i32) (i32.const 351)) (func (export "𖽔") (result i32) (i32.const 352)) (func (export "𛱁") (result i32) (i32.const 353)) (func (export "𛱤") (result i32) (i32.const 354)) (func (export "𞠣") (result i32) (i32.const 355)) (func (export "🇦") (result i32) (i32.const 356)) (func (export "Ɑ") (result i32) (i32.const 357)) (func (export "Λ") (result i32) (i32.const 358)) (func (export "Ɒ") (result i32) (i32.const 359)) (func (export "ª") (result i32) (i32.const 360)) (func (export "∀") (result i32) (i32.const 361)) (func (export "₳") (result i32) (i32.const 362)) (func (export "𐤀") (result i32) (i32.const 363)) (func (export "Ⲁ") (result i32) (i32.const 364)) (func (export "𐌰") (result i32) (i32.const 365)) (func (export "Ά") (result i32) (i32.const 366)) (func (export "Α") (result i32) (i32.const 367)) (func (export "Ἀ") (result i32) (i32.const 368)) (func (export "Ἁ") (result i32) (i32.const 369)) (func (export "Ἂ") (result i32) (i32.const 370)) (func (export "Ἃ") (result i32) (i32.const 371)) (func (export "Ἄ") (result i32) (i32.const 372)) (func (export "Ἅ") (result i32) (i32.const 373)) (func (export "Ἆ") (result i32) (i32.const 374)) (func (export "Ἇ") (result i32) (i32.const 375)) (func (export "ᾈ") (result i32) (i32.const 376)) (func (export "ᾉ") (result i32) (i32.const 377)) (func (export "ᾊ") (result i32) (i32.const 378)) (func (export "ᾋ") (result i32) (i32.const 379)) (func (export "ᾌ") (result i32) (i32.const 380)) (func (export "ᾍ") (result i32) (i32.const 381)) (func (export "ᾎ") (result i32) (i32.const 382)) (func (export "ᾏ") (result i32) (i32.const 383)) (func (export "Ᾰ") (result i32) (i32.const 384)) (func (export "Ᾱ") (result i32) (i32.const 385)) (func (export "Ὰ") (result i32) (i32.const 386)) (func (export "Ά") (result i32) (i32.const 387)) (func (export "ᾼ") (result i32) (i32.const 388)) (func (export "𝚨") (result i32) (i32.const 389)) (func (export "𝛢") (result i32) (i32.const 390)) (func (export "𝜜") (result i32) (i32.const 391)) (func (export "𝝖") (result i32) (i32.const 392)) (func (export "𝞐") (result i32) (i32.const 393)) (func (export "⍶") (result i32) (i32.const 394)) (func (export "⍺") (result i32) (i32.const 395)) (func (export "⩜") (result i32) (i32.const 396)) (func (export "ᗅ") (result i32) (i32.const 397)) (func (export "Ꭺ") (result i32) (i32.const 398)) ;; Test unmatched "closing" and "opening" code points. (func (export ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (result i32) (i32.const 399)) (func (export "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (result i32) (i32.const 400)) (func (export "𝪋𝪤") (result i32) (i32.const 401)) (func (export "𝪋") (result i32) (i32.const 402)) ;; Test that Unicode fraction normalization is not applied. (func (export "½") (result i32) (i32.const 403)) (func (export "1⁄2") (result i32) (i32.const 404)) (func (export "1/2") (result i32) (i32.const 405)) (func (export "୳") (result i32) (i32.const 406)) (func (export "൴") (result i32) (i32.const 407)) (func (export "⳽") (result i32) (i32.const 408)) (func (export "꠱") (result i32) (i32.const 409)) (func (export "𐅁") (result i32) (i32.const 410)) (func (export "𐅵") (result i32) (i32.const 411)) (func (export "𐅶") (result i32) (i32.const 412)) (func (export "𐦽") (result i32) (i32.const 413)) (func (export "𐹻") (result i32) (i32.const 414)) ;; Test a full-width quote. (func (export """) (result i32) (i32.const 415)) ;; Test that different present and historical representations of the "delete" ;; concept are distinct. (func (export "\7f") (result i32) (i32.const 416)) (func (export "\08") (result i32) (i32.const 417)) (func (export "⌫") (result i32) (i32.const 418)) (func (export "⌦") (result i32) (i32.const 419)) (func (export "␈") (result i32) (i32.const 420)) (func (export "␡") (result i32) (i32.const 421)) (func (export "᷻") (result i32) (i32.const 422)) (func (export "\0f") (result i32) (i32.const 423)) (func (export "←") (result i32) (i32.const 424)) (func (export "⌧") (result i32) (i32.const 425)) (func (export "⍒") (result i32) (i32.const 426)) (func (export "⍔") (result i32) (i32.const 427)) (func (export "⍢") (result i32) (i32.const 428)) (func (export "⍫") (result i32) (i32.const 429)) ;; Test that different representations of the "substitute" concept are ;; distinct. (U+FFFD is covered above.) (func (export "\1a") (result i32) (i32.const 430)) (func (export "␦") (result i32) (i32.const 431)) (func (export "␚") (result i32) (i32.const 432)) (func (export "") (result i32) (i32.const 433)) (func (export "?") (result i32) (i32.const 434)) (func (export "¿") (result i32) (i32.const 435)) (func (export "᥅") (result i32) (i32.const 436)) (func (export ";") (result i32) (i32.const 437)) (func (export "՞") (result i32) (i32.const 438)) (func (export "؟") (result i32) (i32.const 439)) (func (export "፧") (result i32) (i32.const 440)) (func (export "⁇") (result i32) (i32.const 441)) (func (export "⍰") (result i32) (i32.const 442)) (func (export "❓") (result i32) (i32.const 443)) (func (export "❔") (result i32) (i32.const 444)) (func (export "⳺") (result i32) (i32.const 445)) (func (export "⳻") (result i32) (i32.const 446)) (func (export "⸮") (result i32) (i32.const 447)) (func (export "㉄") (result i32) (i32.const 448)) (func (export "꘏") (result i32) (i32.const 449)) (func (export "꛷") (result i32) (i32.const 450)) (func (export "︖") (result i32) (i32.const 451)) (func (export "﹖") (result i32) (i32.const 452)) (func (export "?") (result i32) (i32.const 453)) (func (export "𑅃") (result i32) (i32.const 454)) (func (export "𞥟") (result i32) (i32.const 455)) (func (export "󠀿") (result i32) (i32.const 456)) (func (export "𖡄") (result i32) (i32.const 457)) (func (export "⯑") (result i32) (i32.const 458)) ;; Test that different present and historical representations of the ;; "paragraph" concept are distinct. (U+2029 is covered above). (func (export "¶") (result i32) (i32.const 459)) (func (export "⁋") (result i32) (i32.const 460)) (func (export "܀") (result i32) (i32.const 461)) (func (export "჻") (result i32) (i32.const 462)) (func (export "፨") (result i32) (i32.const 463)) (func (export "〷") (result i32) (i32.const 464)) (func (export "❡") (result i32) (i32.const 465)) (func (export "⸏") (result i32) (i32.const 466)) (func (export "⸐") (result i32) (i32.const 467)) (func (export "⸑") (result i32) (i32.const 468)) (func (export "⸎") (result i32) (i32.const 469)) (func (export "\14") (result i32) (i32.const 470)) ;; ¶ in CP437 (func (export "☙") (result i32) (i32.const 471)) (func (export "⸿") (result i32) (i32.const 472)) (func (export "〇") (result i32) (i32.const 473)) (func (export "๛") (result i32) (i32.const 474)) ;; Test an unusual character. (func (export "ꙮ") (result i32) (i32.const 475)) ;; Test the three characters whose normalization forms under NFC, NFD, NFKC, ;; and NFKD are all different. ;; http://unicode.org/faq/normalization.html#6 (func (export "ϓ") (result i32) (i32.const 476)) (func (export "ϔ") (result i32) (i32.const 477)) (func (export "ẛ") (result i32) (i32.const 478)) ) (assert_return (invoke "") (i32.const 0)) (assert_return (invoke "0") (i32.const 1)) (assert_return (invoke "-0") (i32.const 2)) (assert_return (invoke "_") (i32.const 3)) (assert_return (invoke "$") (i32.const 4)) (assert_return (invoke "@") (i32.const 5)) (assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (i32.const 6)) (assert_return (invoke "NaN") (i32.const 7)) (assert_return (invoke "Infinity") (i32.const 8)) (assert_return (invoke "if") (i32.const 9)) (assert_return (invoke "malloc") (i32.const 10)) (assert_return (invoke "_malloc") (i32.const 11)) (assert_return (invoke "__malloc") (i32.const 12)) (assert_return (invoke "a") (i32.const 13)) (assert_return (invoke "A") (i32.const 14)) (assert_return (invoke "") (i32.const 15)) (assert_return (invoke "Å") (i32.const 16)) (assert_return (invoke "Å") (i32.const 17)) (assert_return (invoke "Å") (i32.const 18)) (assert_return (invoke "ffi") (i32.const 19)) (assert_return (invoke "ffi") (i32.const 20)) (assert_return (invoke "ffi") (i32.const 21)) (assert_return (invoke "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (i32.const 22)) (assert_return (invoke "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (i32.const 23)) (assert_return (invoke " \7f") (i32.const 24)) (assert_return (invoke "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (i32.const 25)) (assert_return (invoke "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (i32.const 26)) (assert_return (invoke "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (i32.const 27)) (assert_return (invoke "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (i32.const 28)) (assert_return (invoke "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (i32.const 29)) (assert_return (invoke "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (i32.const 30)) (assert_return (invoke "␠␡") (i32.const 31)) (assert_return (invoke "￰￱￲￳￴￵￶￷￸�") (i32.const 32)) (assert_return (invoke "‍") (i32.const 33)) (assert_return (invoke "‌") (i32.const 34)) (assert_return (invoke "͏") (i32.const 35)) (assert_return (invoke "⁠") (i32.const 36)) (assert_return (invoke "⵿") (i32.const 37)) (assert_return (invoke "𑁿") (i32.const 38)) (assert_return (invoke "᠎") (i32.const 39)) (assert_return (invoke "￯​ ­⁠ ‮‭") (i32.const 40)) (assert_return (invoke "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (i32.const 41)) (assert_return (invoke "") (i32.const 42)) (assert_return (invoke "⁡⁢⁣⁤") (i32.const 43)) (assert_return (invoke "𐀀󟿿􏿿") (i32.const 44)) (assert_return (invoke "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (i32.const 45)) (assert_return (invoke "ᅟᅠㅤᅠ") (i32.const 46)) (assert_return (invoke "︀") (i32.const 47)) (assert_return (invoke "︄") (i32.const 48)) (assert_return (invoke "󠄀") (i32.const 49)) (assert_return (invoke "󠇯") (i32.const 50)) (assert_return (invoke "̈") (i32.const 51)) (assert_return (invoke "\0a") (i32.const 52)) (assert_return (invoke "␤") (i32.const 53)) (assert_return (invoke "
") (i32.const 54)) (assert_return (invoke "\0d") (i32.const 55)) (assert_return (invoke "\0d\0a") (i32.const 56)) (assert_return (invoke "\0a\0d") (i32.const 57)) (assert_return (invoke "\1e") (i32.const 58)) (assert_return (invoke "\0b") (i32.const 59)) (assert_return (invoke "\0c") (i32.const 60)) (assert_return (invoke "\c2\85") (i32.const 61)) (assert_return (invoke "
") (i32.const 62)) (assert_return (invoke "…") (i32.const 63)) (assert_return (invoke "⏎") (i32.const 64)) (assert_return (invoke "\c2\8b") (i32.const 65)) (assert_return (invoke "\c2\8c") (i32.const 66)) (assert_return (invoke "\c2\8d") (i32.const 67)) (assert_return (invoke "↵") (i32.const 68)) (assert_return (invoke "↩") (i32.const 69)) (assert_return (invoke "⌤") (i32.const 70)) (assert_return (invoke "⤶") (i32.const 71)) (assert_return (invoke "↲") (i32.const 72)) (assert_return (invoke "⮨") (i32.const 73)) (assert_return (invoke "⮰") (i32.const 74)) (assert_return (invoke "�") (i32.const 75)) (assert_return (invoke "\ef\b7\90") (i32.const 76)) (assert_return (invoke "\ef\b7\91") (i32.const 77)) (assert_return (invoke "\ef\b7\92") (i32.const 78)) (assert_return (invoke "\ef\b7\93") (i32.const 79)) (assert_return (invoke "\ef\b7\94") (i32.const 80)) (assert_return (invoke "\ef\b7\95") (i32.const 81)) (assert_return (invoke "\ef\b7\96") (i32.const 82)) (assert_return (invoke "\ef\b7\97") (i32.const 83)) (assert_return (invoke "\ef\b7\98") (i32.const 84)) (assert_return (invoke "\ef\b7\99") (i32.const 85)) (assert_return (invoke "\ef\b7\9a") (i32.const 86)) (assert_return (invoke "\ef\b7\9b") (i32.const 87)) (assert_return (invoke "\ef\b7\9c") (i32.const 88)) (assert_return (invoke "\ef\b7\9d") (i32.const 89)) (assert_return (invoke "\ef\b7\9e") (i32.const 90)) (assert_return (invoke "\ef\b7\9f") (i32.const 91)) (assert_return (invoke "\ef\b7\a0") (i32.const 92)) (assert_return (invoke "\ef\b7\a1") (i32.const 93)) (assert_return (invoke "\ef\b7\a2") (i32.const 94)) (assert_return (invoke "\ef\b7\a3") (i32.const 95)) (assert_return (invoke "\ef\b7\a4") (i32.const 96)) (assert_return (invoke "\ef\b7\a5") (i32.const 97)) (assert_return (invoke "\ef\b7\a6") (i32.const 98)) (assert_return (invoke "\ef\b7\a7") (i32.const 99)) (assert_return (invoke "\ef\b7\a8") (i32.const 100)) (assert_return (invoke "\ef\b7\a9") (i32.const 101)) (assert_return (invoke "\ef\b7\aa") (i32.const 102)) (assert_return (invoke "\ef\b7\ab") (i32.const 103)) (assert_return (invoke "\ef\b7\ac") (i32.const 104)) (assert_return (invoke "\ef\b7\ad") (i32.const 105)) (assert_return (invoke "\ef\b7\ae") (i32.const 106)) (assert_return (invoke "\ef\b7\af") (i32.const 107)) (assert_return (invoke "\ef\bf\be") (i32.const 108)) (assert_return (invoke "\ef\bf\bf") (i32.const 109)) (assert_return (invoke "\f0\9f\bf\be") (i32.const 110)) (assert_return (invoke "\f0\9f\bf\bf") (i32.const 111)) (assert_return (invoke "\f0\af\bf\be") (i32.const 112)) (assert_return (invoke "\f0\af\bf\bf") (i32.const 113)) (assert_return (invoke "\f0\bf\bf\be") (i32.const 114)) (assert_return (invoke "\f0\bf\bf\bf") (i32.const 115)) (assert_return (invoke "\f1\8f\bf\be") (i32.const 116)) (assert_return (invoke "\f1\8f\bf\bf") (i32.const 117)) (assert_return (invoke "\f1\9f\bf\be") (i32.const 118)) (assert_return (invoke "\f1\9f\bf\bf") (i32.const 119)) (assert_return (invoke "\f1\af\bf\be") (i32.const 120)) (assert_return (invoke "\f1\af\bf\bf") (i32.const 121)) (assert_return (invoke "\f1\bf\bf\be") (i32.const 122)) (assert_return (invoke "\f1\bf\bf\bf") (i32.const 123)) (assert_return (invoke "\f2\8f\bf\be") (i32.const 124)) (assert_return (invoke "\f2\8f\bf\bf") (i32.const 125)) (assert_return (invoke "\f2\9f\bf\be") (i32.const 126)) (assert_return (invoke "\f2\9f\bf\bf") (i32.const 127)) (assert_return (invoke "\f2\af\bf\be") (i32.const 128)) (assert_return (invoke "\f2\af\bf\bf") (i32.const 129)) (assert_return (invoke "\f2\bf\bf\be") (i32.const 130)) (assert_return (invoke "\f2\bf\bf\bf") (i32.const 131)) (assert_return (invoke "\f3\8f\bf\be") (i32.const 132)) (assert_return (invoke "\f3\8f\bf\bf") (i32.const 133)) (assert_return (invoke "\f3\9f\bf\be") (i32.const 134)) (assert_return (invoke "\f3\9f\bf\bf") (i32.const 135)) (assert_return (invoke "\f3\af\bf\be") (i32.const 136)) (assert_return (invoke "\f3\af\bf\bf") (i32.const 137)) (assert_return (invoke "\f3\bf\bf\be") (i32.const 138)) (assert_return (invoke "\f3\bf\bf\bf") (i32.const 139)) (assert_return (invoke "\f4\8f\bf\be") (i32.const 140)) (assert_return (invoke "\f4\8f\bf\bf") (i32.const 141)) (assert_return (invoke "̈‽̈̉") (i32.const 142)) (assert_return (invoke "abc") (i32.const 143)) (assert_return (invoke "‭abc") (i32.const 144)) (assert_return (invoke "‮cba") (i32.const 145)) (assert_return (invoke "‭abc‮") (i32.const 146)) (assert_return (invoke "‮cba‭") (i32.const 147)) (assert_return (invoke "𝑨") (i32.const 148)) (assert_return (invoke "𝐴") (i32.const 149)) (assert_return (invoke "𝘈") (i32.const 150)) (assert_return (invoke "𝘼") (i32.const 151)) (assert_return (invoke "𝐀") (i32.const 152)) (assert_return (invoke "𝓐") (i32.const 153)) (assert_return (invoke "𝕬") (i32.const 154)) (assert_return (invoke "𝗔") (i32.const 155)) (assert_return (invoke "𝒜") (i32.const 156)) (assert_return (invoke "𝔄") (i32.const 157)) (assert_return (invoke "𝔸") (i32.const 158)) (assert_return (invoke "𝖠") (i32.const 159)) (assert_return (invoke "𝙰") (i32.const 160)) (assert_return (invoke "ᴀ") (i32.const 161)) (assert_return (invoke "ᴬ") (i32.const 162)) (assert_return (invoke "Ⓐ") (i32.const 163)) (assert_return (invoke "A") (i32.const 164)) (assert_return (invoke "🄐") (i32.const 165)) (assert_return (invoke "🄰") (i32.const 166)) (assert_return (invoke "󠁁") (i32.const 167)) (assert_return (invoke "U+0041") (i32.const 168)) (assert_return (invoke "A​") (i32.const 169)) (assert_return (invoke "А") (i32.const 170)) (assert_return (invoke "Ꙗ") (i32.const 171)) (assert_return (invoke "ⷼ") (i32.const 172)) (assert_return (invoke "ⷶ") (i32.const 173)) (assert_return (invoke "Ɐ") (i32.const 174)) (assert_return (invoke "🅐") (i32.const 175)) (assert_return (invoke "🅰") (i32.const 176)) (assert_return (invoke "Ⱝ") (i32.const 177)) (assert_return (invoke "𐐂") (i32.const 178)) (assert_return (invoke "𐐈") (i32.const 179)) (assert_return (invoke "𐒰") (i32.const 180)) (assert_return (invoke "À") (i32.const 181)) (assert_return (invoke "Á") (i32.const 182)) (assert_return (invoke "Â") (i32.const 183)) (assert_return (invoke "Ã") (i32.const 184)) (assert_return (invoke "Ä") (i32.const 185)) (assert_return (invoke "Ā") (i32.const 186)) (assert_return (invoke "Ă") (i32.const 187)) (assert_return (invoke "Ą") (i32.const 188)) (assert_return (invoke "Ǎ") (i32.const 189)) (assert_return (invoke "Ǟ") (i32.const 190)) (assert_return (invoke "Ǡ") (i32.const 191)) (assert_return (invoke "Ǻ") (i32.const 192)) (assert_return (invoke "Ȁ") (i32.const 193)) (assert_return (invoke "Ȃ") (i32.const 194)) (assert_return (invoke "Ȧ") (i32.const 195)) (assert_return (invoke "Ⱥ") (i32.const 196)) (assert_return (invoke "Ӑ") (i32.const 197)) (assert_return (invoke "Ӓ") (i32.const 198)) (assert_return (invoke "ߊ") (i32.const 199)) (assert_return (invoke "ࠡ") (i32.const 200)) (assert_return (invoke "ࠢ") (i32.const 201)) (assert_return (invoke "ࠣ") (i32.const 202)) (assert_return (invoke "ࠤ") (i32.const 203)) (assert_return (invoke "ࠥ") (i32.const 204)) (assert_return (invoke "ऄ") (i32.const 205)) (assert_return (invoke "अ") (i32.const 206)) (assert_return (invoke "ॲ") (i32.const 207)) (assert_return (invoke "অ") (i32.const 208)) (assert_return (invoke "ਅ") (i32.const 209)) (assert_return (invoke "અ") (i32.const 210)) (assert_return (invoke "ଅ") (i32.const 211)) (assert_return (invoke "அ") (i32.const 212)) (assert_return (invoke "అ") (i32.const 213)) (assert_return (invoke "ಅ") (i32.const 214)) (assert_return (invoke "അ") (i32.const 215)) (assert_return (invoke "ะ") (i32.const 216)) (assert_return (invoke "ະ") (i32.const 217)) (assert_return (invoke "༁") (i32.const 218)) (assert_return (invoke "ཨ") (i32.const 219)) (assert_return (invoke "ྸ") (i32.const 220)) (assert_return (invoke "အ") (i32.const 221)) (assert_return (invoke "ဢ") (i32.const 222)) (assert_return (invoke "ႜ") (i32.const 223)) (assert_return (invoke "ᅡ") (i32.const 224)) (assert_return (invoke "አ") (i32.const 225)) (assert_return (invoke "ዐ") (i32.const 226)) (assert_return (invoke "Ꭰ") (i32.const 227)) (assert_return (invoke "ᐊ") (i32.const 228)) (assert_return (invoke "ᖳ") (i32.const 229)) (assert_return (invoke "ᚨ") (i32.const 230)) (assert_return (invoke "ᚪ") (i32.const 231)) (assert_return (invoke "ᛆ") (i32.const 232)) (assert_return (invoke "ᜀ") (i32.const 233)) (assert_return (invoke "ᜠ") (i32.const 234)) (assert_return (invoke "ᝀ") (i32.const 235)) (assert_return (invoke "ᝠ") (i32.const 236)) (assert_return (invoke "ᠠ") (i32.const 237)) (assert_return (invoke "ᢇ") (i32.const 238)) (assert_return (invoke "ᤠ") (i32.const 239)) (assert_return (invoke "ᥣ") (i32.const 240)) (assert_return (invoke "ᨕ") (i32.const 241)) (assert_return (invoke "ᩋ") (i32.const 242)) (assert_return (invoke "ᩡ") (i32.const 243)) (assert_return (invoke "ᮃ") (i32.const 244)) (assert_return (invoke "ᯀ") (i32.const 245)) (assert_return (invoke "ᯁ") (i32.const 246)) (assert_return (invoke "ᰣ") (i32.const 247)) (assert_return (invoke "Ḁ") (i32.const 248)) (assert_return (invoke "Ạ") (i32.const 249)) (assert_return (invoke "Ả") (i32.const 250)) (assert_return (invoke "Ấ") (i32.const 251)) (assert_return (invoke "Ầ") (i32.const 252)) (assert_return (invoke "Ẩ") (i32.const 253)) (assert_return (invoke "Ẫ") (i32.const 254)) (assert_return (invoke "Ậ") (i32.const 255)) (assert_return (invoke "Ắ") (i32.const 256)) (assert_return (invoke "Ằ") (i32.const 257)) (assert_return (invoke "Ẳ") (i32.const 258)) (assert_return (invoke "Ẵ") (i32.const 259)) (assert_return (invoke "Ặ") (i32.const 260)) (assert_return (invoke "あ") (i32.const 261)) (assert_return (invoke "ア") (i32.const 262)) (assert_return (invoke "ㄚ") (i32.const 263)) (assert_return (invoke "ㅏ") (i32.const 264)) (assert_return (invoke "㈎") (i32.const 265)) (assert_return (invoke "㈏") (i32.const 266)) (assert_return (invoke "㈐") (i32.const 267)) (assert_return (invoke "㈑") (i32.const 268)) (assert_return (invoke "㈒") (i32.const 269)) (assert_return (invoke "㈓") (i32.const 270)) (assert_return (invoke "㈔") (i32.const 271)) (assert_return (invoke "㈕") (i32.const 272)) (assert_return (invoke "㈖") (i32.const 273)) (assert_return (invoke "㈗") (i32.const 274)) (assert_return (invoke "㈘") (i32.const 275)) (assert_return (invoke "㈙") (i32.const 276)) (assert_return (invoke "㈚") (i32.const 277)) (assert_return (invoke "㈛") (i32.const 278)) (assert_return (invoke "㉮") (i32.const 279)) (assert_return (invoke "㉯") (i32.const 280)) (assert_return (invoke "㉰") (i32.const 281)) (assert_return (invoke "㉱") (i32.const 282)) (assert_return (invoke "㉲") (i32.const 283)) (assert_return (invoke "㉳") (i32.const 284)) (assert_return (invoke "㉴") (i32.const 285)) (assert_return (invoke "㉵") (i32.const 286)) (assert_return (invoke "㉶") (i32.const 287)) (assert_return (invoke "㉷") (i32.const 288)) (assert_return (invoke "㉸") (i32.const 289)) (assert_return (invoke "㉹") (i32.const 290)) (assert_return (invoke "㉺") (i32.const 291)) (assert_return (invoke "㉻") (i32.const 292)) (assert_return (invoke "㋐") (i32.const 293)) (assert_return (invoke "ꀊ") (i32.const 294)) (assert_return (invoke "ꓮ") (i32.const 295)) (assert_return (invoke "ꕉ") (i32.const 296)) (assert_return (invoke "ꚠ") (i32.const 297)) (assert_return (invoke "ꠀ") (i32.const 298)) (assert_return (invoke "ꠣ") (i32.const 299)) (assert_return (invoke "ꡝ") (i32.const 300)) (assert_return (invoke "ꢂ") (i32.const 301)) (assert_return (invoke "꣪") (i32.const 302)) (assert_return (invoke "ꤢ") (i32.const 303)) (assert_return (invoke "ꥆ") (i32.const 304)) (assert_return (invoke "ꦄ") (i32.const 305)) (assert_return (invoke "ꨀ") (i32.const 306)) (assert_return (invoke "ア") (i32.const 307)) (assert_return (invoke "ᅡ") (i32.const 308)) (assert_return (invoke "𐀀") (i32.const 309)) (assert_return (invoke "𐊀") (i32.const 310)) (assert_return (invoke "𐊠") (i32.const 311)) (assert_return (invoke "𐌀") (i32.const 312)) (assert_return (invoke "𐎠") (i32.const 313)) (assert_return (invoke "𐒖") (i32.const 314)) (assert_return (invoke "𐔀") (i32.const 315)) (assert_return (invoke "𐝀") (i32.const 316)) (assert_return (invoke "𐠀") (i32.const 317)) (assert_return (invoke "𐤠") (i32.const 318)) (assert_return (invoke "𐦀") (i32.const 319)) (assert_return (invoke "𐦠") (i32.const 320)) (assert_return (invoke "𐨀") (i32.const 321)) (assert_return (invoke "𐬀") (i32.const 322)) (assert_return (invoke "𐰀") (i32.const 323)) (assert_return (invoke "𐰁") (i32.const 324)) (assert_return (invoke "𐲀") (i32.const 325)) (assert_return (invoke "𑀅") (i32.const 326)) (assert_return (invoke "𑂃") (i32.const 327)) (assert_return (invoke "𑄧") (i32.const 328)) (assert_return (invoke "𑅐") (i32.const 329)) (assert_return (invoke "𑆃") (i32.const 330)) (assert_return (invoke "𑈀") (i32.const 331)) (assert_return (invoke "𑊀") (i32.const 332)) (assert_return (invoke "𑊰") (i32.const 333)) (assert_return (invoke "𑌅") (i32.const 334)) (assert_return (invoke "𑍰") (i32.const 335)) (assert_return (invoke "𑐀") (i32.const 336)) (assert_return (invoke "𑒁") (i32.const 337)) (assert_return (invoke "𑖀") (i32.const 338)) (assert_return (invoke "𑘀") (i32.const 339)) (assert_return (invoke "𑚀") (i32.const 340)) (assert_return (invoke "𑜒") (i32.const 341)) (assert_return (invoke "𑜠") (i32.const 342)) (assert_return (invoke "𑢡") (i32.const 343)) (assert_return (invoke "𑫕") (i32.const 344)) (assert_return (invoke "𑰀") (i32.const 345)) (assert_return (invoke "𑲏") (i32.const 346)) (assert_return (invoke "𑲯") (i32.const 347)) (assert_return (invoke "𒀀") (i32.const 348)) (assert_return (invoke "𖧕") (i32.const 349)) (assert_return (invoke "𖩆") (i32.const 350)) (assert_return (invoke "𖫧") (i32.const 351)) (assert_return (invoke "𖽔") (i32.const 352)) (assert_return (invoke "𛱁") (i32.const 353)) (assert_return (invoke "𛱤") (i32.const 354)) (assert_return (invoke "𞠣") (i32.const 355)) (assert_return (invoke "🇦") (i32.const 356)) (assert_return (invoke "Ɑ") (i32.const 357)) (assert_return (invoke "Λ") (i32.const 358)) (assert_return (invoke "Ɒ") (i32.const 359)) (assert_return (invoke "ª") (i32.const 360)) (assert_return (invoke "∀") (i32.const 361)) (assert_return (invoke "₳") (i32.const 362)) (assert_return (invoke "𐤀") (i32.const 363)) (assert_return (invoke "Ⲁ") (i32.const 364)) (assert_return (invoke "𐌰") (i32.const 365)) (assert_return (invoke "Ά") (i32.const 366)) (assert_return (invoke "Α") (i32.const 367)) (assert_return (invoke "Ἀ") (i32.const 368)) (assert_return (invoke "Ἁ") (i32.const 369)) (assert_return (invoke "Ἂ") (i32.const 370)) (assert_return (invoke "Ἃ") (i32.const 371)) (assert_return (invoke "Ἄ") (i32.const 372)) (assert_return (invoke "Ἅ") (i32.const 373)) (assert_return (invoke "Ἆ") (i32.const 374)) (assert_return (invoke "Ἇ") (i32.const 375)) (assert_return (invoke "ᾈ") (i32.const 376)) (assert_return (invoke "ᾉ") (i32.const 377)) (assert_return (invoke "ᾊ") (i32.const 378)) (assert_return (invoke "ᾋ") (i32.const 379)) (assert_return (invoke "ᾌ") (i32.const 380)) (assert_return (invoke "ᾍ") (i32.const 381)) (assert_return (invoke "ᾎ") (i32.const 382)) (assert_return (invoke "ᾏ") (i32.const 383)) (assert_return (invoke "Ᾰ") (i32.const 384)) (assert_return (invoke "Ᾱ") (i32.const 385)) (assert_return (invoke "Ὰ") (i32.const 386)) (assert_return (invoke "Ά") (i32.const 387)) (assert_return (invoke "ᾼ") (i32.const 388)) (assert_return (invoke "𝚨") (i32.const 389)) (assert_return (invoke "𝛢") (i32.const 390)) (assert_return (invoke "𝜜") (i32.const 391)) (assert_return (invoke "𝝖") (i32.const 392)) (assert_return (invoke "𝞐") (i32.const 393)) (assert_return (invoke "⍶") (i32.const 394)) (assert_return (invoke "⍺") (i32.const 395)) (assert_return (invoke "⩜") (i32.const 396)) (assert_return (invoke "ᗅ") (i32.const 397)) (assert_return (invoke "Ꭺ") (i32.const 398)) (assert_return (invoke ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (i32.const 399)) (assert_return (invoke "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (i32.const 400)) (assert_return (invoke "𝪋𝪤") (i32.const 401)) (assert_return (invoke "𝪋") (i32.const 402)) (assert_return (invoke "½") (i32.const 403)) (assert_return (invoke "1⁄2") (i32.const 404)) (assert_return (invoke "1/2") (i32.const 405)) (assert_return (invoke "୳") (i32.const 406)) (assert_return (invoke "൴") (i32.const 407)) (assert_return (invoke "⳽") (i32.const 408)) (assert_return (invoke "꠱") (i32.const 409)) (assert_return (invoke "𐅁") (i32.const 410)) (assert_return (invoke "𐅵") (i32.const 411)) (assert_return (invoke "𐅶") (i32.const 412)) (assert_return (invoke "𐦽") (i32.const 413)) (assert_return (invoke "𐹻") (i32.const 414)) (assert_return (invoke """) (i32.const 415)) (assert_return (invoke "\7f") (i32.const 416)) (assert_return (invoke "\08") (i32.const 417)) (assert_return (invoke "⌫") (i32.const 418)) (assert_return (invoke "⌦") (i32.const 419)) (assert_return (invoke "␈") (i32.const 420)) (assert_return (invoke "␡") (i32.const 421)) (assert_return (invoke "᷻") (i32.const 422)) (assert_return (invoke "\0f") (i32.const 423)) (assert_return (invoke "←") (i32.const 424)) (assert_return (invoke "⌧") (i32.const 425)) (assert_return (invoke "⍒") (i32.const 426)) (assert_return (invoke "⍔") (i32.const 427)) (assert_return (invoke "⍢") (i32.const 428)) (assert_return (invoke "⍫") (i32.const 429)) (assert_return (invoke "\1a") (i32.const 430)) (assert_return (invoke "␦") (i32.const 431)) (assert_return (invoke "␚") (i32.const 432)) (assert_return (invoke "") (i32.const 433)) (assert_return (invoke "?") (i32.const 434)) (assert_return (invoke "¿") (i32.const 435)) (assert_return (invoke "᥅") (i32.const 436)) (assert_return (invoke ";") (i32.const 437)) (assert_return (invoke "՞") (i32.const 438)) (assert_return (invoke "؟") (i32.const 439)) (assert_return (invoke "፧") (i32.const 440)) (assert_return (invoke "⁇") (i32.const 441)) (assert_return (invoke "⍰") (i32.const 442)) (assert_return (invoke "❓") (i32.const 443)) (assert_return (invoke "❔") (i32.const 444)) (assert_return (invoke "⳺") (i32.const 445)) (assert_return (invoke "⳻") (i32.const 446)) (assert_return (invoke "⸮") (i32.const 447)) (assert_return (invoke "㉄") (i32.const 448)) (assert_return (invoke "꘏") (i32.const 449)) (assert_return (invoke "꛷") (i32.const 450)) (assert_return (invoke "︖") (i32.const 451)) (assert_return (invoke "﹖") (i32.const 452)) (assert_return (invoke "?") (i32.const 453)) (assert_return (invoke "𑅃") (i32.const 454)) (assert_return (invoke "𞥟") (i32.const 455)) (assert_return (invoke "󠀿") (i32.const 456)) (assert_return (invoke "𖡄") (i32.const 457)) (assert_return (invoke "⯑") (i32.const 458)) (assert_return (invoke "¶") (i32.const 459)) (assert_return (invoke "⁋") (i32.const 460)) (assert_return (invoke "܀") (i32.const 461)) (assert_return (invoke "჻") (i32.const 462)) (assert_return (invoke "፨") (i32.const 463)) (assert_return (invoke "〷") (i32.const 464)) (assert_return (invoke "❡") (i32.const 465)) (assert_return (invoke "⸏") (i32.const 466)) (assert_return (invoke "⸐") (i32.const 467)) (assert_return (invoke "⸑") (i32.const 468)) (assert_return (invoke "⸎") (i32.const 469)) (assert_return (invoke "\14") (i32.const 470)) (assert_return (invoke "☙") (i32.const 471)) (assert_return (invoke "⸿") (i32.const 472)) (assert_return (invoke "〇") (i32.const 473)) (assert_return (invoke "๛") (i32.const 474)) (assert_return (invoke "ꙮ") (i32.const 475)) (assert_return (invoke "ϓ") (i32.const 476)) (assert_return (invoke "ϔ") (i32.const 477)) (assert_return (invoke "ẛ") (i32.const 478)) (module ;; Test that we can use indices instead of names to reference imports, ;; exports, functions and parameters. (import "spectest" "print_i32" (func (param i32))) (func (import "spectest" "print_i32") (param i32)) (func (param i32) (param i32) (call 0 (local.get 0)) (call 1 (local.get 1)) ) (export "print32" (func 2)) ) (assert_return (invoke "print32" (i32.const 42) (i32.const 123))) ================================================ FILE: Test/WebAssembly/memory64/nop.wast ================================================ ;; Test `nop` operator. (module ;; Auxiliary definitions (func $dummy) (func $3-ary (param i32 i32 i32) (result i32) local.get 0 local.get 1 local.get 2 i32.sub i32.add ) (memory 1) (func (export "as-func-first") (result i32) (nop) (i32.const 1) ) (func (export "as-func-mid") (result i32) (call $dummy) (nop) (i32.const 2) ) (func (export "as-func-last") (result i32) (call $dummy) (i32.const 3) (nop) ) (func (export "as-func-everywhere") (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) (func (export "as-drop-first") (param i32) (nop) (local.get 0) (drop) ) (func (export "as-drop-last") (param i32) (local.get 0) (nop) (drop) ) (func (export "as-drop-everywhere") (param i32) (nop) (nop) (local.get 0) (nop) (nop) (drop) ) (func (export "as-select-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid1") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid2") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (local.get 0) (select) ) (func (export "as-select-last") (param i32) (result i32) (local.get 0) (local.get 0) (local.get 0) (nop) (select) ) (func (export "as-select-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (select) ) (func (export "as-block-first") (result i32) (block (result i32) (nop) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-block-last") (result i32) (block (result i32) (nop) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-block-everywhere") (result i32) (block (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (nop) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-loop-everywhere") (result i32) (loop (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-if-condition") (param i32) (local.get 0) (nop) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (if (local.get 0) (then (nop)) (else (call $dummy))) ) (func (export "as-if-else") (param i32) (if (local.get 0) (then (call $dummy)) (else (nop))) ) (func (export "as-br-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (br 0)) ) (func (export "as-br-last") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (br 0)) ) (func (export "as-br-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (br 0)) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_if 0)) ) (func (export "as-br_if-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_if 0)) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_if 0)) ) (func (export "as-br_if-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_if 0) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_table 0 0)) ) (func (export "as-br_table-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_table 0 0) ) ) (func (export "as-return-first") (param i32) (result i32) (nop) (local.get 0) (return) ) (func (export "as-return-last") (param i32) (result i32) (local.get 0) (nop) (return) ) (func (export "as-return-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (return) ) (func (export "as-call-first") (param i32 i32 i32) (result i32) (nop) (local.get 0) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid1") (param i32 i32 i32) (result i32) (local.get 0) (nop) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid2") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (nop) (local.get 2) (call $3-ary) ) (func (export "as-call-last") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (local.get 2) (nop) (call $3-ary) ) (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (local.get 2) (nop) (nop) (call $3-ary) ) (func (export "as-unary-first") (param i32) (result i32) (nop) (local.get 0) (i32.ctz) ) (func (export "as-unary-last") (param i32) (result i32) (local.get 0) (nop) (i32.ctz) ) (func (export "as-unary-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.ctz) ) (func (export "as-binary-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.add) ) (func (export "as-binary-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.add) ) (func (export "as-binary-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.add) ) (func (export "as-binary-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.add) ) (func (export "as-test-first") (param i32) (result i32) (nop) (local.get 0) (i32.eqz) ) (func (export "as-test-last") (param i32) (result i32) (local.get 0) (nop) (i32.eqz) ) (func (export "as-test-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) i32.eqz ) (func (export "as-compare-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.ne) ) (func (export "as-compare-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.ne) ) (func (export "as-compare-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.lt_u) ) (func (export "as-compare-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.le_s) ) (func (export "as-memory.grow-first") (param i32) (result i32) (nop) (local.get 0) (memory.grow) ) (func (export "as-memory.grow-last") (param i32) (result i32) (local.get 0) (nop) (memory.grow) ) (func (export "as-memory.grow-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (memory.grow) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (nop) (i32.const 1) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid1") (result i32) (block (result i32) (i32.const 1) (nop) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid2") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (nop) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (i32.const 0) (nop) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-everywhere") (result i32) (block (result i32) (nop) (nop) (i32.const 1) (nop) (nop) (i32.const 2) (nop) (nop) (i32.const 0) (nop) (nop) (call_indirect (type $check)) ) ) (func (export "as-local.set-first") (param i32) (result i32) (nop) (i32.const 2) (local.set 0) (local.get 0) ) (func (export "as-local.set-last") (param i32) (result i32) (i32.const 2) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.set-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.tee-first") (param i32) (result i32) (nop) (i32.const 2) (local.tee 0) ) (func (export "as-local.tee-last") (param i32) (result i32) (i32.const 2) (nop) (local.tee 0) ) (func (export "as-local.tee-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.tee 0) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-first") (result i32) (nop) (i32.const 2) (global.set $a) (global.get $a) ) (func (export "as-global.set-last") (result i32) (i32.const 2) (nop) (global.set $a) (global.get $a) ) (func (export "as-global.set-everywhere") (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (global.set 0) (global.get $a) ) (func (export "as-load-first") (param i32) (result i32) (nop) (local.get 0) (i32.load) ) (func (export "as-load-last") (param i32) (result i32) (local.get 0) (nop) (i32.load) ) (func (export "as-load-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.load) ) (func (export "as-store-first") (param i32 i32) (nop) (local.get 0) (local.get 1) (i32.store) ) (func (export "as-store-mid") (param i32 i32) (local.get 0) (nop) (local.get 1) (i32.store) ) (func (export "as-store-last") (param i32 i32) (local.get 0) (local.get 1) (nop) (i32.store) ) (func (export "as-store-everywhere") (param i32 i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (i32.store) ) ) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last") (i32.const 3)) (assert_return (invoke "as-func-everywhere") (i32.const 4)) (assert_return (invoke "as-drop-first" (i32.const 0))) (assert_return (invoke "as-drop-last" (i32.const 0))) (assert_return (invoke "as-drop-everywhere" (i32.const 0))) (assert_return (invoke "as-select-first" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-block-first") (i32.const 2)) (assert_return (invoke "as-block-mid") (i32.const 2)) (assert_return (invoke "as-block-last") (i32.const 3)) (assert_return (invoke "as-block-everywhere") (i32.const 4)) (assert_return (invoke "as-loop-first") (i32.const 2)) (assert_return (invoke "as-loop-mid") (i32.const 2)) (assert_return (invoke "as-loop-last") (i32.const 3)) (assert_return (invoke "as-loop-everywhere") (i32.const 4)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const -1))) (assert_return (invoke "as-if-then" (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4))) (assert_return (invoke "as-if-else" (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3))) (assert_return (invoke "as-br-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_if-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_table-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-return-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-call-first" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) (assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) (assert_return (invoke "as-unary-first" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) (assert_return (invoke "as-binary-first" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-test-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-first" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) (assert_return (invoke "as-memory.grow-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-last" (i32.const 2)) (i32.const 1)) (assert_return (invoke "as-memory.grow-everywhere" (i32.const 12)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid1") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid2") (i32.const 1)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-call_indirect-everywhere") (i32.const 1)) (assert_return (invoke "as-local.set-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-global.set-first") (i32.const 2)) (assert_return (invoke "as-global.set-last") (i32.const 2)) (assert_return (invoke "as-global.set-everywhere") (i32.const 2)) (assert_return (invoke "as-load-first" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-last" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-everywhere" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-store-first" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-store-mid" (i32.const 0) (i32.const 2))) (assert_return (invoke "as-store-last" (i32.const 0) (i32.const 3))) (assert_return (invoke "as-store-everywhere" (i32.const 0) (i32.const 4))) (assert_invalid (module (func $type-i32 (result i32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-i64 (result i64) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f32 (result f32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f64 (result f64) (nop))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/memory64/return.wast ================================================ ;; Test `return` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (drop (i32.ctz (return)))) (func (export "type-i64") (drop (i64.ctz (return)))) (func (export "type-f32") (drop (f32.neg (return)))) (func (export "type-f64") (drop (f64.neg (return)))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (return (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (return (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (return (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (return (f64.const 4)))) ) (func (export "nullary") (return)) (func (export "unary") (result f64) (return (f64.const 3))) (func (export "as-func-first") (result i32) (return (i32.const 1)) (i32.const 2) ) (func (export "as-func-mid") (result i32) (call $dummy) (return (i32.const 2)) (i32.const 3) ) (func (export "as-func-last") (nop) (call $dummy) (return) ) (func (export "as-func-value") (result i32) (nop) (call $dummy) (return (i32.const 3)) ) (func (export "as-block-first") (block (return) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (return) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (return)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (return (i32.const 2))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (return (i32.const 3)) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (return (i32.const 4)) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (return (i32.const 5))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (return (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (return))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (return (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (result i64) (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (return (return (i64.const 7))) ) (func (export "as-if-cond") (result i32) (if (result i32) (return (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (return (i32.const 3))) (else (local.get 1)) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (return (i32.const 4))) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (return (i32.const 5)) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (return (i32.const 6)) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (return (i32.const 7))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (result i32) (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) ) (func (export "as-call-last") (result i32) (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (result i32) (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3) ) ) (func (export "as-call_indirect-last") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23)) ) ) (func (export "as-local.set-value") (result i32) (local f32) (local.set 0 (return (i32.const 17))) (i32.const -1) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (return (i32.const 1))) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-value") (result i32) (global.set $a (return (i32.const 1))) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (return (f32.const 1.7))) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (return (i64.const 30))) ) (func (export "as-store-address") (result i32) (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) ) (func (export "as-store-value") (result i32) (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) ) (func (export "as-storeN-address") (result i32) (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) ) (func (export "as-storeN-value") (result i32) (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) ) (func (export "as-unary-operand") (result f32) (f32.neg (return (f32.const 3.4))) ) (func (export "as-binary-left") (result i32) (i32.add (return (i32.const 3)) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (return (i64.const 45))) ) (func (export "as-test-operand") (result i32) (i32.eqz (return (i32.const 44))) ) (func (export "as-compare-left") (result i32) (f64.le (return (i32.const 43)) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (return (i32.const 42))) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (return (i32.const 41))) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (return (i32.const 40))) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "nullary")) (assert_return (invoke "unary") (f64.const 3)) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last")) (assert_return (invoke "as-func-value") (i32.const 3)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index") (i64.const 9)) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_invalid (module (func $type-value-empty-vs-num (result i32) (return))) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-block (result i32) (i32.const 0) (block (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-loop (result i32) (i32.const 0) (loop (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-then (result i32) (i32.const 0) (i32.const 0) (if (then (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-else (result i32) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (return))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br (result i32) (i32.const 0) (block (br 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_if (result i32) (i32.const 0) (block (br_if 0 (return) (i32.const 1))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_table (result i32) (i32.const 0) (block (br_table 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-return (result i32) (return (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-select (result i32) (select (return) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-call (result i32) (call 1 (return)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-vs-num-in-call_indirect (result i32) (block (result i32) (call_indirect (type $sig) (return) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.set (result i32) (local i32) (local.set 0 (return)) (local.get 0) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.tee (result i32) (local i32) (local.tee 0 (return)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-value-empty-vs-num-in-global.set (result i32) (global.set $x (return)) (global.get $x) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-memory.grow (result i32) (memory.grow (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-load (result i32) (i32.load (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-vs-num-in-store (result i32) (i32.store (return) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result f64) (return (nop)))) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/memory64/select.wast ================================================ (module (memory 1) (func $dummy) (func (export "select_i32") (param $lhs i32) (param $rhs i32) (param $cond i32) (result i32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_i64") (param $lhs i64) (param $rhs i64) (param $cond i32) (result i64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f32") (param $lhs f32) (param $rhs f32) (param $cond i32) (result f32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f64") (param $lhs f64) (param $rhs f64) (param $cond i32) (result f64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) ;; Check that both sides of the select are evaluated (func (export "select_trap_l") (param $cond i32) (result i32) (select (unreachable) (i32.const 0) (local.get $cond)) ) (func (export "select_trap_r") (param $cond i32) (result i32) (select (i32.const 0) (unreachable) (local.get $cond)) ) (func (export "select_unreached") (unreachable) (select) (unreachable) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (select) (unreachable) (f32.const 0) (i32.const 0) (select) (unreachable) ) ;; As the argument of control constructs and instructions (func (export "as-select-first") (param i32) (result i32) (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3)) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy)) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0))) ) (func (export "as-if-condition") (param i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (result i32) (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4))) ) (func (export "as-if-else") (param i32) (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4))) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0)) ) ) ) (func (export "as-store-first") (param i32) (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-return-value") (param i32) (result i32) (select (i32.const 1) (i32.const 2) (local.get 0)) (return) ) (func (export "as-drop-operand") (param i32) (drop (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0)))) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0))) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (select (i32.const 0) (i32.const 4) (local.get 0))) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-binary-operand") (param i32) (result i32) (i32.mul (select (i32.const 1) (i32.const 2) (local.get 0)) (select (i32.const 1) (i32.const 2) (local.get 0)) ) ) (func (export "as-test-operand") (param i32) (result i32) (block (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-compare-left") (param i32) (result i32) (block (result i32) (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1)) ) ) (func (export "as-compare-right") (param i32) (result i32) (block (result i32) (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-convert-operand") (param i32) (result i32) (block (result i32) (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0))) ) ) ) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select_f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select_i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_trap (invoke "select_trap_l" (i32.const 1)) "unreachable") (assert_trap (invoke "select_trap_l" (i32.const 0)) "unreachable") (assert_trap (invoke "select_trap_r" (i32.const 1)) "unreachable") (assert_trap (invoke "select_trap_r" (i32.const 0)) "unreachable") (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1)) (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element") (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4)) (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $arity-0 (select (nop) (nop) (i32.const 1)))) "type mismatch" ) ;; The first two operands should have the same type as each other (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty (i32.const 0) (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (i32.const 0) (block (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (i32.const 0) (loop (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-then (i32.const 0) (i32.const 0) (i32.const 0) (if (then (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.const 0) (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.const 0) (select) (drop))) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/memory64/skip-stack-guard-page.wast ================================================ ;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. (module (memory 1) (export "test-guard-page-skip" (func $test-guard-page-skip)) (func $test-guard-page-skip (param $depth i32) (if (i32.eq (local.get $depth) (i32.const 0)) (then (call $function-with-many-locals)) (else (call $test-guard-page-skip (i32.sub (local.get $depth) (i32.const 1)))) ) ) (func $function-with-many-locals ;; 1056 i64 = 8448 bytes of locals (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. (call $function-with-many-locals) ;; load from memory into the locals (local.set 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) (local.set 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) (local.set 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) (local.set 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) (local.set 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) (local.set 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) (local.set 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) (local.set 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) (local.set 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) (local.set 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) (local.set 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) (local.set 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) (local.set 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) (local.set 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) (local.set 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) (local.set 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) (local.set 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) (local.set 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) (local.set 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) (local.set 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) (local.set 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) (local.set 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) (local.set 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) (local.set 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) (local.set 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) (local.set 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) (local.set 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) (local.set 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) (local.set 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) (local.set 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) (local.set 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) (local.set 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) (local.set 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) (local.set 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) (local.set 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) (local.set 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) (local.set 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) (local.set 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) (local.set 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) (local.set 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) (local.set 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) (local.set 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) (local.set 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) (local.set 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) (local.set 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) (local.set 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) (local.set 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) (local.set 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) (local.set 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) (local.set 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) (local.set 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) (local.set 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) (local.set 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) (local.set 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) (local.set 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) (local.set 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) (local.set 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) (local.set 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) (local.set 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) (local.set 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) (local.set 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) (local.set 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) (local.set 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) (local.set 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) (local.set 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) (local.set 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) (local.set 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) (local.set 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) (local.set 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) (local.set 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) (local.set 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) (local.set 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) (local.set 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) (local.set 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) (local.set 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) (local.set 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) (local.set 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) (local.set 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) (local.set 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) (local.set 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) (local.set 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) (local.set 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) (local.set 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) (local.set 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) (local.set 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) (local.set 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) (local.set 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) (local.set 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) (local.set 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) (local.set 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) (local.set 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) (local.set 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) (local.set 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) (local.set 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) (local.set 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) (local.set 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) (local.set 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) (local.set 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) (local.set 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) (local.set 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) (local.set 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) (local.set 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) (local.set 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) (local.set 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) (local.set 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) (local.set 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) (local.set 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) (local.set 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) (local.set 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) (local.set 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) (local.set 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) (local.set 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) (local.set 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) (local.set 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) (local.set 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) (local.set 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) (local.set 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) (local.set 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) (local.set 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) (local.set 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) (local.set 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) (local.set 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) (local.set 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) (local.set 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) (local.set 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) (local.set 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) (local.set 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) (local.set 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) (local.set 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) (local.set 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) (local.set 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) (local.set 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) (local.set 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) (local.set 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) (local.set 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) (local.set 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) (local.set 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) (local.set 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) (local.set 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) (local.set 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) (local.set 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) (local.set 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) (local.set 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) (local.set 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) (local.set 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) (local.set 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) (local.set 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) (local.set 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) (local.set 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) (local.set 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) (local.set 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) (local.set 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) (local.set 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) (local.set 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) (local.set 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) (local.set 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) (local.set 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) (local.set 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) (local.set 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) (local.set 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) (local.set 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) (local.set 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) (local.set 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) (local.set 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) (local.set 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) (local.set 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) (local.set 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) (local.set 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) (local.set 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) (local.set 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) (local.set 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) (local.set 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) (local.set 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) (local.set 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) (local.set 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) (local.set 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) (local.set 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) (local.set 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) (local.set 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) (local.set 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) (local.set 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) (local.set 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) (local.set 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) (local.set 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) (local.set 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) (local.set 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) (local.set 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) (local.set 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) (local.set 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) (local.set 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) (local.set 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) (local.set 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) (local.set 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) (local.set 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) (local.set 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) (local.set 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) (local.set 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) (local.set 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) (local.set 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) (local.set 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) (local.set 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) (local.set 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) (local.set 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) (local.set 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) (local.set 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) (local.set 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) (local.set 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) (local.set 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) (local.set 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) (local.set 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) (local.set 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) (local.set 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) (local.set 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) (local.set 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) (local.set 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) (local.set 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) (local.set 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) (local.set 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) (local.set 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) (local.set 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) (local.set 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) (local.set 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) (local.set 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) (local.set 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) (local.set 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) (local.set 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) (local.set 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) (local.set 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) (local.set 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) (local.set 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) (local.set 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) (local.set 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) (local.set 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) (local.set 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) (local.set 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) (local.set 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) (local.set 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) (local.set 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) (local.set 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) (local.set 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) (local.set 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) (local.set 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) (local.set 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) (local.set 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) (local.set 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) (local.set 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) (local.set 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) (local.set 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) (local.set 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) (local.set 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) (local.set 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) (local.set 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) (local.set 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) (local.set 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) (local.set 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) (local.set 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) (local.set 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) (local.set 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) (local.set 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) (local.set 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) (local.set 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) (local.set 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) (local.set 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) (local.set 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) (local.set 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) (local.set 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) (local.set 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) (local.set 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) (local.set 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) (local.set 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) (local.set 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) (local.set 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) (local.set 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) (local.set 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) (local.set 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) (local.set 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) (local.set 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) (local.set 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) (local.set 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) (local.set 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) (local.set 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) (local.set 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) (local.set 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) (local.set 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) (local.set 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) (local.set 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) (local.set 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) (local.set 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) (local.set 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) (local.set 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) (local.set 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) (local.set 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) (local.set 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) (local.set 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) (local.set 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) (local.set 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) (local.set 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) (local.set 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) (local.set 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) (local.set 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) (local.set 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) (local.set 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) (local.set 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) (local.set 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) (local.set 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) (local.set 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) (local.set 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) (local.set 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) (local.set 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) (local.set 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) (local.set 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) (local.set 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) (local.set 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) (local.set 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) (local.set 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) (local.set 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) (local.set 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) (local.set 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) (local.set 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) (local.set 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) (local.set 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) (local.set 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) (local.set 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) (local.set 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) (local.set 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) (local.set 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) (local.set 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) (local.set 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) (local.set 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) (local.set 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) (local.set 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) (local.set 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) (local.set 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) (local.set 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) (local.set 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) (local.set 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) (local.set 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) (local.set 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) (local.set 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) (local.set 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) (local.set 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) (local.set 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) (local.set 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) (local.set 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) (local.set 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) (local.set 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) (local.set 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) (local.set 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) (local.set 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) (local.set 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) (local.set 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) (local.set 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) (local.set 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) (local.set 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) (local.set 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) (local.set 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) (local.set 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) (local.set 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) (local.set 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) (local.set 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) (local.set 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) (local.set 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) (local.set 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) (local.set 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) (local.set 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) (local.set 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) (local.set 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) (local.set 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) (local.set 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) (local.set 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) (local.set 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) (local.set 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) (local.set 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) (local.set 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) (local.set 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) (local.set 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) (local.set 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) (local.set 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) (local.set 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) (local.set 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) (local.set 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) (local.set 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) (local.set 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) (local.set 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) (local.set 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) (local.set 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) (local.set 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) (local.set 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) (local.set 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) (local.set 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) (local.set 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) (local.set 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) (local.set 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) (local.set 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) (local.set 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) (local.set 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) (local.set 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) (local.set 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) (local.set 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) (local.set 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) (local.set 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) (local.set 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) (local.set 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) (local.set 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) (local.set 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) (local.set 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) (local.set 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) (local.set 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) (local.set 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) (local.set 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) (local.set 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) (local.set 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) (local.set 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) (local.set 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) (local.set 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) (local.set 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) (local.set 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) (local.set 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) (local.set 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) (local.set 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) (local.set 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) (local.set 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) (local.set 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) (local.set 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) (local.set 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) (local.set 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) (local.set 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) (local.set 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) (local.set 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) (local.set 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) (local.set 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) (local.set 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) (local.set 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) (local.set 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) (local.set 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) (local.set 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) (local.set 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) (local.set 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) (local.set 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) (local.set 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) (local.set 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) (local.set 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) (local.set 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) (local.set 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) (local.set 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) (local.set 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) (local.set 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) (local.set 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) (local.set 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) (local.set 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) (local.set 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) (local.set 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) (local.set 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) (local.set 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) (local.set 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) (local.set 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) (local.set 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) (local.set 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) (local.set 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) (local.set 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) (local.set 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) (local.set 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) (local.set 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) (local.set 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) (local.set 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) (local.set 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) (local.set 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) (local.set 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) (local.set 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) (local.set 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) (local.set 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) (local.set 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) (local.set 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) (local.set 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) (local.set 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) (local.set 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) (local.set 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) (local.set 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) (local.set 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) (local.set 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) (local.set 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) (local.set 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) (local.set 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) (local.set 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) (local.set 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) (local.set 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) (local.set 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) (local.set 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) (local.set 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) (local.set 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) (local.set 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) (local.set 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) (local.set 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) (local.set 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) (local.set 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) (local.set 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) (local.set 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) (local.set 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) (local.set 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) (local.set 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) (local.set 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) (local.set 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) (local.set 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) (local.set 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) (local.set 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) (local.set 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) (local.set 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) (local.set 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) (local.set 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) (local.set 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) (local.set 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) (local.set 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) (local.set 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) (local.set 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) (local.set 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) (local.set 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) (local.set 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) (local.set 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) (local.set 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) (local.set 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) (local.set 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) (local.set 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) (local.set 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) (local.set 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) (local.set 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) (local.set 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) (local.set 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) (local.set 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) (local.set 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) (local.set 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) (local.set 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) (local.set 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) (local.set 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) (local.set 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) (local.set 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) (local.set 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) (local.set 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) (local.set 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) (local.set 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) (local.set 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) (local.set 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) (local.set 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) (local.set 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) (local.set 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) (local.set 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) (local.set 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) (local.set 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) (local.set 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) (local.set 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) (local.set 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) (local.set 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) (local.set 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) (local.set 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) (local.set 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) (local.set 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) (local.set 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) (local.set 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) (local.set 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) (local.set 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) (local.set 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) (local.set 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) (local.set 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) (local.set 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) (local.set 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) (local.set 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) (local.set 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) (local.set 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) (local.set 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) (local.set 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) (local.set 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) (local.set 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) (local.set 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) (local.set 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) (local.set 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) (local.set 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) (local.set 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) (local.set 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) (local.set 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) (local.set 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) (local.set 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) (local.set 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) (local.set 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) (local.set 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) (local.set 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) (local.set 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) (local.set 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) (local.set 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) (local.set 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) (local.set 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) (local.set 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) (local.set 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) (local.set 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) (local.set 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) (local.set 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) (local.set 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) (local.set 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) (local.set 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) (local.set 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) (local.set 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) (local.set 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) (local.set 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) (local.set 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) (local.set 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) (local.set 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) (local.set 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) (local.set 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) (local.set 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) (local.set 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) (local.set 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) (local.set 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) (local.set 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) (local.set 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) (local.set 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) (local.set 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) (local.set 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) (local.set 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) (local.set 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) (local.set 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) (local.set 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) (local.set 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) (local.set 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) (local.set 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) (local.set 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) (local.set 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) (local.set 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) (local.set 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) (local.set 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) (local.set 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) (local.set 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) (local.set 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) (local.set 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) (local.set 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) (local.set 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) (local.set 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) (local.set 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) (local.set 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) (local.set 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) (local.set 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) (local.set 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) (local.set 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) (local.set 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) (local.set 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) (local.set 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) (local.set 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) (local.set 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) (local.set 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) (local.set 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) (local.set 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) (local.set 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) (local.set 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) (local.set 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) (local.set 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) (local.set 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) (local.set 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) (local.set 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) (local.set 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) (local.set 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) (local.set 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) (local.set 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) (local.set 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) (local.set 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) (local.set 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) (local.set 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) (local.set 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) (local.set 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) (local.set 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) (local.set 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) (local.set 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) (local.set 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) (local.set 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) (local.set 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) (local.set 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) (local.set 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) (local.set 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) (local.set 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) (local.set 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) (local.set 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) (local.set 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) (local.set 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) (local.set 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) (local.set 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) (local.set 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) (local.set 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) (local.set 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) (local.set 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) (local.set 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) (local.set 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) (local.set 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) (local.set 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) (local.set 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) (local.set 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) (local.set 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) (local.set 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) (local.set 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) (local.set 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) (local.set 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) (local.set 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) (local.set 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) (local.set 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) (local.set 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) (local.set 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) (local.set 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) (local.set 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) (local.set 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) (local.set 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) (local.set 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) (local.set 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) (local.set 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) (local.set 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) (local.set 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) (local.set 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) (local.set 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) (local.set 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) (local.set 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) (local.set 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) (local.set 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) (local.set 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) (local.set 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) (local.set 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) (local.set 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) (local.set 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) (local.set 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) (local.set 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) (local.set 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) (local.set 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) (local.set 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) (local.set 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) (local.set 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) (local.set 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) (local.set 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) (local.set 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) (local.set 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) (local.set 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) (local.set 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) (local.set 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) (local.set 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) (local.set 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) (local.set 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) (local.set 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) (local.set 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) (local.set 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) (local.set 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) (local.set 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) (local.set 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) (local.set 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) (local.set 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) (local.set 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) (local.set 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) (local.set 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) (local.set 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) (local.set 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) (local.set 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) (local.set 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) (local.set 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) (local.set 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) (local.set 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) (local.set 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) (local.set 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) (local.set 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) (local.set 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) (local.set 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) (local.set 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) (local.set 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) (local.set 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) (local.set 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) (local.set 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) (local.set 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) (local.set 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) (local.set 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) (local.set 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) (local.set 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) (local.set 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) (local.set 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) (local.set 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) (local.set 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) (local.set 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) (local.set 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) (local.set 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) (local.set 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) (local.set 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) (local.set 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) (local.set 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) (local.set 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) (local.set 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) (local.set 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) (local.set 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) (local.set 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) (local.set 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) (local.set 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) (local.set 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) (local.set 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) (local.set 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) (local.set 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) (local.set 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) (local.set 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) (local.set 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) (local.set 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) (local.set 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) (local.set 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) (local.set 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) (local.set 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) (local.set 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) (local.set 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) (local.set 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) (local.set 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) (local.set 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) (local.set 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) (local.set 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) (local.set 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) (local.set 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) (local.set 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) (local.set 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) (local.set 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) (local.set 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) (local.set 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) (local.set 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) (local.set 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) (local.set 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) (local.set 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) (local.set 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) (local.set 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) (local.set 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) (local.set 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) (local.set 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) (local.set 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) (local.set 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) (local.set 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) (local.set 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) (local.set 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) (local.set 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) (local.set 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) (local.set 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) (local.set 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) (local.set 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) (local.set 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) (local.set 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) (local.set 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) (local.set 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) (local.set 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) (local.set 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) (local.set 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) (local.set 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) (local.set 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) (local.set 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) (local.set 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) (local.set 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) (local.set 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) (local.set 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) (local.set 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) (local.set 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) (local.set 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) (local.set 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) (local.set 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) (local.set 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) (local.set 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) (local.set 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) (local.set 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) (local.set 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) (local.set 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) (local.set 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) (local.set 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) (local.set 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) (local.set 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) (local.set 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) (local.set 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) (local.set 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) (local.set 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) (local.set 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) (local.set 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) (local.set 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) (local.set 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) (local.set 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) (local.set 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) (local.set 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) (local.set 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) (local.set 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) (local.set 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) (local.set 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) (local.set 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) (local.set 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) (local.set 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) (local.set 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) (local.set 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) (local.set 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) (local.set 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) (local.set 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) (local.set 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) (local.set 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) (local.set 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) (local.set 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) (local.set 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) (local.set 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) (local.set 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) (local.set 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) (local.set 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) (local.set 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) (local.set 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) (local.set 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) (local.set 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) (local.set 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) (local.set 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) (local.set 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) (local.set 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) (local.set 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) (local.set 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) (local.set 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) (local.set 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) (local.set 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) (local.set 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) (local.set 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) (local.set 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) (local.set 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) (local.set 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) (local.set 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) (local.set 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) (local.set 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) (local.set 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) (local.set 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) (local.set 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) (local.set 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) (local.set 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) (local.set 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) (local.set 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) (local.set 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) (local.set 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) (local.set 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) (local.set 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) (local.set 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) (local.set 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) (local.set 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) (local.set 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) (local.set 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) (local.set 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) (local.set 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) (local.set 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) (local.set 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) (local.set 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) (local.set 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) (local.set 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) (local.set 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) (local.set 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) (local.set 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) (local.set 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) (local.set 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) (local.set 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) (local.set 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) (local.set 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) (local.set 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) (local.set 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) (local.set 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) (local.set 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) (local.set 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) (local.set 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) (local.set 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) (local.set 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) (local.set 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) (local.set 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) (local.set 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) (local.set 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) (local.set 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) (local.set 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) (local.set 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) (local.set 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) (local.set 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) (local.set 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) (local.set 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) (local.set 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) (local.set 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) (local.set 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) (local.set 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) (local.set 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) (local.set 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) (local.set 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) (local.set 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) (local.set 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) (local.set 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) (local.set 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) (local.set 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) (local.set 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) (local.set 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) (local.set 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) (local.set 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) (local.set 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) (local.set 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) (local.set 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) (local.set 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) (local.set 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) (local.set 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) (local.set 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) (local.set 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) (local.set 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) (local.set 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) (local.set 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) (local.set 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) (local.set 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) (local.set 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) (local.set 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) (local.set 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) (local.set 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) (local.set 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) (local.set 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) (local.set 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) (local.set 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) (local.set 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) (local.set 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) (local.set 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) (local.set 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) (local.set 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) (local.set 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) (local.set 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) (local.set 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) (local.set 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) (local.set 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) (local.set 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) (local.set 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) (local.set 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) (local.set 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) (local.set 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) (local.set 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) (local.set 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) (local.set 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) (local.set 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) (local.set 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) (local.set 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) (local.set 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) (local.set 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) (local.set 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) (local.set 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) (local.set 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) (local.set 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) (local.set 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) (local.set 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) (local.set 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) (local.set 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) (local.set 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) (local.set 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) (local.set 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) (local.set 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) (local.set 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) (local.set 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) (local.set 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) (local.set 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) (local.set 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) (local.set 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) (local.set 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) (local.set 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) (local.set 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) (local.set 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) (local.set 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) (local.set 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) (local.set 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) (local.set 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) (local.set 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) (local.set 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) (local.set 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) (local.set 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) ;; store the locals back to memory (i64.store offset=0x000 align=1 (i32.const 0) (local.get 0x000)) (i64.store offset=0x001 align=1 (i32.const 0) (local.get 0x001)) (i64.store offset=0x002 align=1 (i32.const 0) (local.get 0x002)) (i64.store offset=0x003 align=1 (i32.const 0) (local.get 0x003)) (i64.store offset=0x004 align=1 (i32.const 0) (local.get 0x004)) (i64.store offset=0x005 align=1 (i32.const 0) (local.get 0x005)) (i64.store offset=0x006 align=1 (i32.const 0) (local.get 0x006)) (i64.store offset=0x007 align=1 (i32.const 0) (local.get 0x007)) (i64.store offset=0x008 align=1 (i32.const 0) (local.get 0x008)) (i64.store offset=0x009 align=1 (i32.const 0) (local.get 0x009)) (i64.store offset=0x00a align=1 (i32.const 0) (local.get 0x00a)) (i64.store offset=0x00b align=1 (i32.const 0) (local.get 0x00b)) (i64.store offset=0x00c align=1 (i32.const 0) (local.get 0x00c)) (i64.store offset=0x00d align=1 (i32.const 0) (local.get 0x00d)) (i64.store offset=0x00e align=1 (i32.const 0) (local.get 0x00e)) (i64.store offset=0x00f align=1 (i32.const 0) (local.get 0x00f)) (i64.store offset=0x010 align=1 (i32.const 0) (local.get 0x010)) (i64.store offset=0x011 align=1 (i32.const 0) (local.get 0x011)) (i64.store offset=0x012 align=1 (i32.const 0) (local.get 0x012)) (i64.store offset=0x013 align=1 (i32.const 0) (local.get 0x013)) (i64.store offset=0x014 align=1 (i32.const 0) (local.get 0x014)) (i64.store offset=0x015 align=1 (i32.const 0) (local.get 0x015)) (i64.store offset=0x016 align=1 (i32.const 0) (local.get 0x016)) (i64.store offset=0x017 align=1 (i32.const 0) (local.get 0x017)) (i64.store offset=0x018 align=1 (i32.const 0) (local.get 0x018)) (i64.store offset=0x019 align=1 (i32.const 0) (local.get 0x019)) (i64.store offset=0x01a align=1 (i32.const 0) (local.get 0x01a)) (i64.store offset=0x01b align=1 (i32.const 0) (local.get 0x01b)) (i64.store offset=0x01c align=1 (i32.const 0) (local.get 0x01c)) (i64.store offset=0x01d align=1 (i32.const 0) (local.get 0x01d)) (i64.store offset=0x01e align=1 (i32.const 0) (local.get 0x01e)) (i64.store offset=0x01f align=1 (i32.const 0) (local.get 0x01f)) (i64.store offset=0x020 align=1 (i32.const 0) (local.get 0x020)) (i64.store offset=0x021 align=1 (i32.const 0) (local.get 0x021)) (i64.store offset=0x022 align=1 (i32.const 0) (local.get 0x022)) (i64.store offset=0x023 align=1 (i32.const 0) (local.get 0x023)) (i64.store offset=0x024 align=1 (i32.const 0) (local.get 0x024)) (i64.store offset=0x025 align=1 (i32.const 0) (local.get 0x025)) (i64.store offset=0x026 align=1 (i32.const 0) (local.get 0x026)) (i64.store offset=0x027 align=1 (i32.const 0) (local.get 0x027)) (i64.store offset=0x028 align=1 (i32.const 0) (local.get 0x028)) (i64.store offset=0x029 align=1 (i32.const 0) (local.get 0x029)) (i64.store offset=0x02a align=1 (i32.const 0) (local.get 0x02a)) (i64.store offset=0x02b align=1 (i32.const 0) (local.get 0x02b)) (i64.store offset=0x02c align=1 (i32.const 0) (local.get 0x02c)) (i64.store offset=0x02d align=1 (i32.const 0) (local.get 0x02d)) (i64.store offset=0x02e align=1 (i32.const 0) (local.get 0x02e)) (i64.store offset=0x02f align=1 (i32.const 0) (local.get 0x02f)) (i64.store offset=0x030 align=1 (i32.const 0) (local.get 0x030)) (i64.store offset=0x031 align=1 (i32.const 0) (local.get 0x031)) (i64.store offset=0x032 align=1 (i32.const 0) (local.get 0x032)) (i64.store offset=0x033 align=1 (i32.const 0) (local.get 0x033)) (i64.store offset=0x034 align=1 (i32.const 0) (local.get 0x034)) (i64.store offset=0x035 align=1 (i32.const 0) (local.get 0x035)) (i64.store offset=0x036 align=1 (i32.const 0) (local.get 0x036)) (i64.store offset=0x037 align=1 (i32.const 0) (local.get 0x037)) (i64.store offset=0x038 align=1 (i32.const 0) (local.get 0x038)) (i64.store offset=0x039 align=1 (i32.const 0) (local.get 0x039)) (i64.store offset=0x03a align=1 (i32.const 0) (local.get 0x03a)) (i64.store offset=0x03b align=1 (i32.const 0) (local.get 0x03b)) (i64.store offset=0x03c align=1 (i32.const 0) (local.get 0x03c)) (i64.store offset=0x03d align=1 (i32.const 0) (local.get 0x03d)) (i64.store offset=0x03e align=1 (i32.const 0) (local.get 0x03e)) (i64.store offset=0x03f align=1 (i32.const 0) (local.get 0x03f)) (i64.store offset=0x040 align=1 (i32.const 0) (local.get 0x040)) (i64.store offset=0x041 align=1 (i32.const 0) (local.get 0x041)) (i64.store offset=0x042 align=1 (i32.const 0) (local.get 0x042)) (i64.store offset=0x043 align=1 (i32.const 0) (local.get 0x043)) (i64.store offset=0x044 align=1 (i32.const 0) (local.get 0x044)) (i64.store offset=0x045 align=1 (i32.const 0) (local.get 0x045)) (i64.store offset=0x046 align=1 (i32.const 0) (local.get 0x046)) (i64.store offset=0x047 align=1 (i32.const 0) (local.get 0x047)) (i64.store offset=0x048 align=1 (i32.const 0) (local.get 0x048)) (i64.store offset=0x049 align=1 (i32.const 0) (local.get 0x049)) (i64.store offset=0x04a align=1 (i32.const 0) (local.get 0x04a)) (i64.store offset=0x04b align=1 (i32.const 0) (local.get 0x04b)) (i64.store offset=0x04c align=1 (i32.const 0) (local.get 0x04c)) (i64.store offset=0x04d align=1 (i32.const 0) (local.get 0x04d)) (i64.store offset=0x04e align=1 (i32.const 0) (local.get 0x04e)) (i64.store offset=0x04f align=1 (i32.const 0) (local.get 0x04f)) (i64.store offset=0x050 align=1 (i32.const 0) (local.get 0x050)) (i64.store offset=0x051 align=1 (i32.const 0) (local.get 0x051)) (i64.store offset=0x052 align=1 (i32.const 0) (local.get 0x052)) (i64.store offset=0x053 align=1 (i32.const 0) (local.get 0x053)) (i64.store offset=0x054 align=1 (i32.const 0) (local.get 0x054)) (i64.store offset=0x055 align=1 (i32.const 0) (local.get 0x055)) (i64.store offset=0x056 align=1 (i32.const 0) (local.get 0x056)) (i64.store offset=0x057 align=1 (i32.const 0) (local.get 0x057)) (i64.store offset=0x058 align=1 (i32.const 0) (local.get 0x058)) (i64.store offset=0x059 align=1 (i32.const 0) (local.get 0x059)) (i64.store offset=0x05a align=1 (i32.const 0) (local.get 0x05a)) (i64.store offset=0x05b align=1 (i32.const 0) (local.get 0x05b)) (i64.store offset=0x05c align=1 (i32.const 0) (local.get 0x05c)) (i64.store offset=0x05d align=1 (i32.const 0) (local.get 0x05d)) (i64.store offset=0x05e align=1 (i32.const 0) (local.get 0x05e)) (i64.store offset=0x05f align=1 (i32.const 0) (local.get 0x05f)) (i64.store offset=0x060 align=1 (i32.const 0) (local.get 0x060)) (i64.store offset=0x061 align=1 (i32.const 0) (local.get 0x061)) (i64.store offset=0x062 align=1 (i32.const 0) (local.get 0x062)) (i64.store offset=0x063 align=1 (i32.const 0) (local.get 0x063)) (i64.store offset=0x064 align=1 (i32.const 0) (local.get 0x064)) (i64.store offset=0x065 align=1 (i32.const 0) (local.get 0x065)) (i64.store offset=0x066 align=1 (i32.const 0) (local.get 0x066)) (i64.store offset=0x067 align=1 (i32.const 0) (local.get 0x067)) (i64.store offset=0x068 align=1 (i32.const 0) (local.get 0x068)) (i64.store offset=0x069 align=1 (i32.const 0) (local.get 0x069)) (i64.store offset=0x06a align=1 (i32.const 0) (local.get 0x06a)) (i64.store offset=0x06b align=1 (i32.const 0) (local.get 0x06b)) (i64.store offset=0x06c align=1 (i32.const 0) (local.get 0x06c)) (i64.store offset=0x06d align=1 (i32.const 0) (local.get 0x06d)) (i64.store offset=0x06e align=1 (i32.const 0) (local.get 0x06e)) (i64.store offset=0x06f align=1 (i32.const 0) (local.get 0x06f)) (i64.store offset=0x070 align=1 (i32.const 0) (local.get 0x070)) (i64.store offset=0x071 align=1 (i32.const 0) (local.get 0x071)) (i64.store offset=0x072 align=1 (i32.const 0) (local.get 0x072)) (i64.store offset=0x073 align=1 (i32.const 0) (local.get 0x073)) (i64.store offset=0x074 align=1 (i32.const 0) (local.get 0x074)) (i64.store offset=0x075 align=1 (i32.const 0) (local.get 0x075)) (i64.store offset=0x076 align=1 (i32.const 0) (local.get 0x076)) (i64.store offset=0x077 align=1 (i32.const 0) (local.get 0x077)) (i64.store offset=0x078 align=1 (i32.const 0) (local.get 0x078)) (i64.store offset=0x079 align=1 (i32.const 0) (local.get 0x079)) (i64.store offset=0x07a align=1 (i32.const 0) (local.get 0x07a)) (i64.store offset=0x07b align=1 (i32.const 0) (local.get 0x07b)) (i64.store offset=0x07c align=1 (i32.const 0) (local.get 0x07c)) (i64.store offset=0x07d align=1 (i32.const 0) (local.get 0x07d)) (i64.store offset=0x07e align=1 (i32.const 0) (local.get 0x07e)) (i64.store offset=0x07f align=1 (i32.const 0) (local.get 0x07f)) (i64.store offset=0x080 align=1 (i32.const 0) (local.get 0x080)) (i64.store offset=0x081 align=1 (i32.const 0) (local.get 0x081)) (i64.store offset=0x082 align=1 (i32.const 0) (local.get 0x082)) (i64.store offset=0x083 align=1 (i32.const 0) (local.get 0x083)) (i64.store offset=0x084 align=1 (i32.const 0) (local.get 0x084)) (i64.store offset=0x085 align=1 (i32.const 0) (local.get 0x085)) (i64.store offset=0x086 align=1 (i32.const 0) (local.get 0x086)) (i64.store offset=0x087 align=1 (i32.const 0) (local.get 0x087)) (i64.store offset=0x088 align=1 (i32.const 0) (local.get 0x088)) (i64.store offset=0x089 align=1 (i32.const 0) (local.get 0x089)) (i64.store offset=0x08a align=1 (i32.const 0) (local.get 0x08a)) (i64.store offset=0x08b align=1 (i32.const 0) (local.get 0x08b)) (i64.store offset=0x08c align=1 (i32.const 0) (local.get 0x08c)) (i64.store offset=0x08d align=1 (i32.const 0) (local.get 0x08d)) (i64.store offset=0x08e align=1 (i32.const 0) (local.get 0x08e)) (i64.store offset=0x08f align=1 (i32.const 0) (local.get 0x08f)) (i64.store offset=0x090 align=1 (i32.const 0) (local.get 0x090)) (i64.store offset=0x091 align=1 (i32.const 0) (local.get 0x091)) (i64.store offset=0x092 align=1 (i32.const 0) (local.get 0x092)) (i64.store offset=0x093 align=1 (i32.const 0) (local.get 0x093)) (i64.store offset=0x094 align=1 (i32.const 0) (local.get 0x094)) (i64.store offset=0x095 align=1 (i32.const 0) (local.get 0x095)) (i64.store offset=0x096 align=1 (i32.const 0) (local.get 0x096)) (i64.store offset=0x097 align=1 (i32.const 0) (local.get 0x097)) (i64.store offset=0x098 align=1 (i32.const 0) (local.get 0x098)) (i64.store offset=0x099 align=1 (i32.const 0) (local.get 0x099)) (i64.store offset=0x09a align=1 (i32.const 0) (local.get 0x09a)) (i64.store offset=0x09b align=1 (i32.const 0) (local.get 0x09b)) (i64.store offset=0x09c align=1 (i32.const 0) (local.get 0x09c)) (i64.store offset=0x09d align=1 (i32.const 0) (local.get 0x09d)) (i64.store offset=0x09e align=1 (i32.const 0) (local.get 0x09e)) (i64.store offset=0x09f align=1 (i32.const 0) (local.get 0x09f)) (i64.store offset=0x0a0 align=1 (i32.const 0) (local.get 0x0a0)) (i64.store offset=0x0a1 align=1 (i32.const 0) (local.get 0x0a1)) (i64.store offset=0x0a2 align=1 (i32.const 0) (local.get 0x0a2)) (i64.store offset=0x0a3 align=1 (i32.const 0) (local.get 0x0a3)) (i64.store offset=0x0a4 align=1 (i32.const 0) (local.get 0x0a4)) (i64.store offset=0x0a5 align=1 (i32.const 0) (local.get 0x0a5)) (i64.store offset=0x0a6 align=1 (i32.const 0) (local.get 0x0a6)) (i64.store offset=0x0a7 align=1 (i32.const 0) (local.get 0x0a7)) (i64.store offset=0x0a8 align=1 (i32.const 0) (local.get 0x0a8)) (i64.store offset=0x0a9 align=1 (i32.const 0) (local.get 0x0a9)) (i64.store offset=0x0aa align=1 (i32.const 0) (local.get 0x0aa)) (i64.store offset=0x0ab align=1 (i32.const 0) (local.get 0x0ab)) (i64.store offset=0x0ac align=1 (i32.const 0) (local.get 0x0ac)) (i64.store offset=0x0ad align=1 (i32.const 0) (local.get 0x0ad)) (i64.store offset=0x0ae align=1 (i32.const 0) (local.get 0x0ae)) (i64.store offset=0x0af align=1 (i32.const 0) (local.get 0x0af)) (i64.store offset=0x0b0 align=1 (i32.const 0) (local.get 0x0b0)) (i64.store offset=0x0b1 align=1 (i32.const 0) (local.get 0x0b1)) (i64.store offset=0x0b2 align=1 (i32.const 0) (local.get 0x0b2)) (i64.store offset=0x0b3 align=1 (i32.const 0) (local.get 0x0b3)) (i64.store offset=0x0b4 align=1 (i32.const 0) (local.get 0x0b4)) (i64.store offset=0x0b5 align=1 (i32.const 0) (local.get 0x0b5)) (i64.store offset=0x0b6 align=1 (i32.const 0) (local.get 0x0b6)) (i64.store offset=0x0b7 align=1 (i32.const 0) (local.get 0x0b7)) (i64.store offset=0x0b8 align=1 (i32.const 0) (local.get 0x0b8)) (i64.store offset=0x0b9 align=1 (i32.const 0) (local.get 0x0b9)) (i64.store offset=0x0ba align=1 (i32.const 0) (local.get 0x0ba)) (i64.store offset=0x0bb align=1 (i32.const 0) (local.get 0x0bb)) (i64.store offset=0x0bc align=1 (i32.const 0) (local.get 0x0bc)) (i64.store offset=0x0bd align=1 (i32.const 0) (local.get 0x0bd)) (i64.store offset=0x0be align=1 (i32.const 0) (local.get 0x0be)) (i64.store offset=0x0bf align=1 (i32.const 0) (local.get 0x0bf)) (i64.store offset=0x0c0 align=1 (i32.const 0) (local.get 0x0c0)) (i64.store offset=0x0c1 align=1 (i32.const 0) (local.get 0x0c1)) (i64.store offset=0x0c2 align=1 (i32.const 0) (local.get 0x0c2)) (i64.store offset=0x0c3 align=1 (i32.const 0) (local.get 0x0c3)) (i64.store offset=0x0c4 align=1 (i32.const 0) (local.get 0x0c4)) (i64.store offset=0x0c5 align=1 (i32.const 0) (local.get 0x0c5)) (i64.store offset=0x0c6 align=1 (i32.const 0) (local.get 0x0c6)) (i64.store offset=0x0c7 align=1 (i32.const 0) (local.get 0x0c7)) (i64.store offset=0x0c8 align=1 (i32.const 0) (local.get 0x0c8)) (i64.store offset=0x0c9 align=1 (i32.const 0) (local.get 0x0c9)) (i64.store offset=0x0ca align=1 (i32.const 0) (local.get 0x0ca)) (i64.store offset=0x0cb align=1 (i32.const 0) (local.get 0x0cb)) (i64.store offset=0x0cc align=1 (i32.const 0) (local.get 0x0cc)) (i64.store offset=0x0cd align=1 (i32.const 0) (local.get 0x0cd)) (i64.store offset=0x0ce align=1 (i32.const 0) (local.get 0x0ce)) (i64.store offset=0x0cf align=1 (i32.const 0) (local.get 0x0cf)) (i64.store offset=0x0d0 align=1 (i32.const 0) (local.get 0x0d0)) (i64.store offset=0x0d1 align=1 (i32.const 0) (local.get 0x0d1)) (i64.store offset=0x0d2 align=1 (i32.const 0) (local.get 0x0d2)) (i64.store offset=0x0d3 align=1 (i32.const 0) (local.get 0x0d3)) (i64.store offset=0x0d4 align=1 (i32.const 0) (local.get 0x0d4)) (i64.store offset=0x0d5 align=1 (i32.const 0) (local.get 0x0d5)) (i64.store offset=0x0d6 align=1 (i32.const 0) (local.get 0x0d6)) (i64.store offset=0x0d7 align=1 (i32.const 0) (local.get 0x0d7)) (i64.store offset=0x0d8 align=1 (i32.const 0) (local.get 0x0d8)) (i64.store offset=0x0d9 align=1 (i32.const 0) (local.get 0x0d9)) (i64.store offset=0x0da align=1 (i32.const 0) (local.get 0x0da)) (i64.store offset=0x0db align=1 (i32.const 0) (local.get 0x0db)) (i64.store offset=0x0dc align=1 (i32.const 0) (local.get 0x0dc)) (i64.store offset=0x0dd align=1 (i32.const 0) (local.get 0x0dd)) (i64.store offset=0x0de align=1 (i32.const 0) (local.get 0x0de)) (i64.store offset=0x0df align=1 (i32.const 0) (local.get 0x0df)) (i64.store offset=0x0e0 align=1 (i32.const 0) (local.get 0x0e0)) (i64.store offset=0x0e1 align=1 (i32.const 0) (local.get 0x0e1)) (i64.store offset=0x0e2 align=1 (i32.const 0) (local.get 0x0e2)) (i64.store offset=0x0e3 align=1 (i32.const 0) (local.get 0x0e3)) (i64.store offset=0x0e4 align=1 (i32.const 0) (local.get 0x0e4)) (i64.store offset=0x0e5 align=1 (i32.const 0) (local.get 0x0e5)) (i64.store offset=0x0e6 align=1 (i32.const 0) (local.get 0x0e6)) (i64.store offset=0x0e7 align=1 (i32.const 0) (local.get 0x0e7)) (i64.store offset=0x0e8 align=1 (i32.const 0) (local.get 0x0e8)) (i64.store offset=0x0e9 align=1 (i32.const 0) (local.get 0x0e9)) (i64.store offset=0x0ea align=1 (i32.const 0) (local.get 0x0ea)) (i64.store offset=0x0eb align=1 (i32.const 0) (local.get 0x0eb)) (i64.store offset=0x0ec align=1 (i32.const 0) (local.get 0x0ec)) (i64.store offset=0x0ed align=1 (i32.const 0) (local.get 0x0ed)) (i64.store offset=0x0ee align=1 (i32.const 0) (local.get 0x0ee)) (i64.store offset=0x0ef align=1 (i32.const 0) (local.get 0x0ef)) (i64.store offset=0x0f0 align=1 (i32.const 0) (local.get 0x0f0)) (i64.store offset=0x0f1 align=1 (i32.const 0) (local.get 0x0f1)) (i64.store offset=0x0f2 align=1 (i32.const 0) (local.get 0x0f2)) (i64.store offset=0x0f3 align=1 (i32.const 0) (local.get 0x0f3)) (i64.store offset=0x0f4 align=1 (i32.const 0) (local.get 0x0f4)) (i64.store offset=0x0f5 align=1 (i32.const 0) (local.get 0x0f5)) (i64.store offset=0x0f6 align=1 (i32.const 0) (local.get 0x0f6)) (i64.store offset=0x0f7 align=1 (i32.const 0) (local.get 0x0f7)) (i64.store offset=0x0f8 align=1 (i32.const 0) (local.get 0x0f8)) (i64.store offset=0x0f9 align=1 (i32.const 0) (local.get 0x0f9)) (i64.store offset=0x0fa align=1 (i32.const 0) (local.get 0x0fa)) (i64.store offset=0x0fb align=1 (i32.const 0) (local.get 0x0fb)) (i64.store offset=0x0fc align=1 (i32.const 0) (local.get 0x0fc)) (i64.store offset=0x0fd align=1 (i32.const 0) (local.get 0x0fd)) (i64.store offset=0x0fe align=1 (i32.const 0) (local.get 0x0fe)) (i64.store offset=0x0ff align=1 (i32.const 0) (local.get 0x0ff)) (i64.store offset=0x100 align=1 (i32.const 0) (local.get 0x100)) (i64.store offset=0x101 align=1 (i32.const 0) (local.get 0x101)) (i64.store offset=0x102 align=1 (i32.const 0) (local.get 0x102)) (i64.store offset=0x103 align=1 (i32.const 0) (local.get 0x103)) (i64.store offset=0x104 align=1 (i32.const 0) (local.get 0x104)) (i64.store offset=0x105 align=1 (i32.const 0) (local.get 0x105)) (i64.store offset=0x106 align=1 (i32.const 0) (local.get 0x106)) (i64.store offset=0x107 align=1 (i32.const 0) (local.get 0x107)) (i64.store offset=0x108 align=1 (i32.const 0) (local.get 0x108)) (i64.store offset=0x109 align=1 (i32.const 0) (local.get 0x109)) (i64.store offset=0x10a align=1 (i32.const 0) (local.get 0x10a)) (i64.store offset=0x10b align=1 (i32.const 0) (local.get 0x10b)) (i64.store offset=0x10c align=1 (i32.const 0) (local.get 0x10c)) (i64.store offset=0x10d align=1 (i32.const 0) (local.get 0x10d)) (i64.store offset=0x10e align=1 (i32.const 0) (local.get 0x10e)) (i64.store offset=0x10f align=1 (i32.const 0) (local.get 0x10f)) (i64.store offset=0x110 align=1 (i32.const 0) (local.get 0x110)) (i64.store offset=0x111 align=1 (i32.const 0) (local.get 0x111)) (i64.store offset=0x112 align=1 (i32.const 0) (local.get 0x112)) (i64.store offset=0x113 align=1 (i32.const 0) (local.get 0x113)) (i64.store offset=0x114 align=1 (i32.const 0) (local.get 0x114)) (i64.store offset=0x115 align=1 (i32.const 0) (local.get 0x115)) (i64.store offset=0x116 align=1 (i32.const 0) (local.get 0x116)) (i64.store offset=0x117 align=1 (i32.const 0) (local.get 0x117)) (i64.store offset=0x118 align=1 (i32.const 0) (local.get 0x118)) (i64.store offset=0x119 align=1 (i32.const 0) (local.get 0x119)) (i64.store offset=0x11a align=1 (i32.const 0) (local.get 0x11a)) (i64.store offset=0x11b align=1 (i32.const 0) (local.get 0x11b)) (i64.store offset=0x11c align=1 (i32.const 0) (local.get 0x11c)) (i64.store offset=0x11d align=1 (i32.const 0) (local.get 0x11d)) (i64.store offset=0x11e align=1 (i32.const 0) (local.get 0x11e)) (i64.store offset=0x11f align=1 (i32.const 0) (local.get 0x11f)) (i64.store offset=0x120 align=1 (i32.const 0) (local.get 0x120)) (i64.store offset=0x121 align=1 (i32.const 0) (local.get 0x121)) (i64.store offset=0x122 align=1 (i32.const 0) (local.get 0x122)) (i64.store offset=0x123 align=1 (i32.const 0) (local.get 0x123)) (i64.store offset=0x124 align=1 (i32.const 0) (local.get 0x124)) (i64.store offset=0x125 align=1 (i32.const 0) (local.get 0x125)) (i64.store offset=0x126 align=1 (i32.const 0) (local.get 0x126)) (i64.store offset=0x127 align=1 (i32.const 0) (local.get 0x127)) (i64.store offset=0x128 align=1 (i32.const 0) (local.get 0x128)) (i64.store offset=0x129 align=1 (i32.const 0) (local.get 0x129)) (i64.store offset=0x12a align=1 (i32.const 0) (local.get 0x12a)) (i64.store offset=0x12b align=1 (i32.const 0) (local.get 0x12b)) (i64.store offset=0x12c align=1 (i32.const 0) (local.get 0x12c)) (i64.store offset=0x12d align=1 (i32.const 0) (local.get 0x12d)) (i64.store offset=0x12e align=1 (i32.const 0) (local.get 0x12e)) (i64.store offset=0x12f align=1 (i32.const 0) (local.get 0x12f)) (i64.store offset=0x130 align=1 (i32.const 0) (local.get 0x130)) (i64.store offset=0x131 align=1 (i32.const 0) (local.get 0x131)) (i64.store offset=0x132 align=1 (i32.const 0) (local.get 0x132)) (i64.store offset=0x133 align=1 (i32.const 0) (local.get 0x133)) (i64.store offset=0x134 align=1 (i32.const 0) (local.get 0x134)) (i64.store offset=0x135 align=1 (i32.const 0) (local.get 0x135)) (i64.store offset=0x136 align=1 (i32.const 0) (local.get 0x136)) (i64.store offset=0x137 align=1 (i32.const 0) (local.get 0x137)) (i64.store offset=0x138 align=1 (i32.const 0) (local.get 0x138)) (i64.store offset=0x139 align=1 (i32.const 0) (local.get 0x139)) (i64.store offset=0x13a align=1 (i32.const 0) (local.get 0x13a)) (i64.store offset=0x13b align=1 (i32.const 0) (local.get 0x13b)) (i64.store offset=0x13c align=1 (i32.const 0) (local.get 0x13c)) (i64.store offset=0x13d align=1 (i32.const 0) (local.get 0x13d)) (i64.store offset=0x13e align=1 (i32.const 0) (local.get 0x13e)) (i64.store offset=0x13f align=1 (i32.const 0) (local.get 0x13f)) (i64.store offset=0x140 align=1 (i32.const 0) (local.get 0x140)) (i64.store offset=0x141 align=1 (i32.const 0) (local.get 0x141)) (i64.store offset=0x142 align=1 (i32.const 0) (local.get 0x142)) (i64.store offset=0x143 align=1 (i32.const 0) (local.get 0x143)) (i64.store offset=0x144 align=1 (i32.const 0) (local.get 0x144)) (i64.store offset=0x145 align=1 (i32.const 0) (local.get 0x145)) (i64.store offset=0x146 align=1 (i32.const 0) (local.get 0x146)) (i64.store offset=0x147 align=1 (i32.const 0) (local.get 0x147)) (i64.store offset=0x148 align=1 (i32.const 0) (local.get 0x148)) (i64.store offset=0x149 align=1 (i32.const 0) (local.get 0x149)) (i64.store offset=0x14a align=1 (i32.const 0) (local.get 0x14a)) (i64.store offset=0x14b align=1 (i32.const 0) (local.get 0x14b)) (i64.store offset=0x14c align=1 (i32.const 0) (local.get 0x14c)) (i64.store offset=0x14d align=1 (i32.const 0) (local.get 0x14d)) (i64.store offset=0x14e align=1 (i32.const 0) (local.get 0x14e)) (i64.store offset=0x14f align=1 (i32.const 0) (local.get 0x14f)) (i64.store offset=0x150 align=1 (i32.const 0) (local.get 0x150)) (i64.store offset=0x151 align=1 (i32.const 0) (local.get 0x151)) (i64.store offset=0x152 align=1 (i32.const 0) (local.get 0x152)) (i64.store offset=0x153 align=1 (i32.const 0) (local.get 0x153)) (i64.store offset=0x154 align=1 (i32.const 0) (local.get 0x154)) (i64.store offset=0x155 align=1 (i32.const 0) (local.get 0x155)) (i64.store offset=0x156 align=1 (i32.const 0) (local.get 0x156)) (i64.store offset=0x157 align=1 (i32.const 0) (local.get 0x157)) (i64.store offset=0x158 align=1 (i32.const 0) (local.get 0x158)) (i64.store offset=0x159 align=1 (i32.const 0) (local.get 0x159)) (i64.store offset=0x15a align=1 (i32.const 0) (local.get 0x15a)) (i64.store offset=0x15b align=1 (i32.const 0) (local.get 0x15b)) (i64.store offset=0x15c align=1 (i32.const 0) (local.get 0x15c)) (i64.store offset=0x15d align=1 (i32.const 0) (local.get 0x15d)) (i64.store offset=0x15e align=1 (i32.const 0) (local.get 0x15e)) (i64.store offset=0x15f align=1 (i32.const 0) (local.get 0x15f)) (i64.store offset=0x160 align=1 (i32.const 0) (local.get 0x160)) (i64.store offset=0x161 align=1 (i32.const 0) (local.get 0x161)) (i64.store offset=0x162 align=1 (i32.const 0) (local.get 0x162)) (i64.store offset=0x163 align=1 (i32.const 0) (local.get 0x163)) (i64.store offset=0x164 align=1 (i32.const 0) (local.get 0x164)) (i64.store offset=0x165 align=1 (i32.const 0) (local.get 0x165)) (i64.store offset=0x166 align=1 (i32.const 0) (local.get 0x166)) (i64.store offset=0x167 align=1 (i32.const 0) (local.get 0x167)) (i64.store offset=0x168 align=1 (i32.const 0) (local.get 0x168)) (i64.store offset=0x169 align=1 (i32.const 0) (local.get 0x169)) (i64.store offset=0x16a align=1 (i32.const 0) (local.get 0x16a)) (i64.store offset=0x16b align=1 (i32.const 0) (local.get 0x16b)) (i64.store offset=0x16c align=1 (i32.const 0) (local.get 0x16c)) (i64.store offset=0x16d align=1 (i32.const 0) (local.get 0x16d)) (i64.store offset=0x16e align=1 (i32.const 0) (local.get 0x16e)) (i64.store offset=0x16f align=1 (i32.const 0) (local.get 0x16f)) (i64.store offset=0x170 align=1 (i32.const 0) (local.get 0x170)) (i64.store offset=0x171 align=1 (i32.const 0) (local.get 0x171)) (i64.store offset=0x172 align=1 (i32.const 0) (local.get 0x172)) (i64.store offset=0x173 align=1 (i32.const 0) (local.get 0x173)) (i64.store offset=0x174 align=1 (i32.const 0) (local.get 0x174)) (i64.store offset=0x175 align=1 (i32.const 0) (local.get 0x175)) (i64.store offset=0x176 align=1 (i32.const 0) (local.get 0x176)) (i64.store offset=0x177 align=1 (i32.const 0) (local.get 0x177)) (i64.store offset=0x178 align=1 (i32.const 0) (local.get 0x178)) (i64.store offset=0x179 align=1 (i32.const 0) (local.get 0x179)) (i64.store offset=0x17a align=1 (i32.const 0) (local.get 0x17a)) (i64.store offset=0x17b align=1 (i32.const 0) (local.get 0x17b)) (i64.store offset=0x17c align=1 (i32.const 0) (local.get 0x17c)) (i64.store offset=0x17d align=1 (i32.const 0) (local.get 0x17d)) (i64.store offset=0x17e align=1 (i32.const 0) (local.get 0x17e)) (i64.store offset=0x17f align=1 (i32.const 0) (local.get 0x17f)) (i64.store offset=0x180 align=1 (i32.const 0) (local.get 0x180)) (i64.store offset=0x181 align=1 (i32.const 0) (local.get 0x181)) (i64.store offset=0x182 align=1 (i32.const 0) (local.get 0x182)) (i64.store offset=0x183 align=1 (i32.const 0) (local.get 0x183)) (i64.store offset=0x184 align=1 (i32.const 0) (local.get 0x184)) (i64.store offset=0x185 align=1 (i32.const 0) (local.get 0x185)) (i64.store offset=0x186 align=1 (i32.const 0) (local.get 0x186)) (i64.store offset=0x187 align=1 (i32.const 0) (local.get 0x187)) (i64.store offset=0x188 align=1 (i32.const 0) (local.get 0x188)) (i64.store offset=0x189 align=1 (i32.const 0) (local.get 0x189)) (i64.store offset=0x18a align=1 (i32.const 0) (local.get 0x18a)) (i64.store offset=0x18b align=1 (i32.const 0) (local.get 0x18b)) (i64.store offset=0x18c align=1 (i32.const 0) (local.get 0x18c)) (i64.store offset=0x18d align=1 (i32.const 0) (local.get 0x18d)) (i64.store offset=0x18e align=1 (i32.const 0) (local.get 0x18e)) (i64.store offset=0x18f align=1 (i32.const 0) (local.get 0x18f)) (i64.store offset=0x190 align=1 (i32.const 0) (local.get 0x190)) (i64.store offset=0x191 align=1 (i32.const 0) (local.get 0x191)) (i64.store offset=0x192 align=1 (i32.const 0) (local.get 0x192)) (i64.store offset=0x193 align=1 (i32.const 0) (local.get 0x193)) (i64.store offset=0x194 align=1 (i32.const 0) (local.get 0x194)) (i64.store offset=0x195 align=1 (i32.const 0) (local.get 0x195)) (i64.store offset=0x196 align=1 (i32.const 0) (local.get 0x196)) (i64.store offset=0x197 align=1 (i32.const 0) (local.get 0x197)) (i64.store offset=0x198 align=1 (i32.const 0) (local.get 0x198)) (i64.store offset=0x199 align=1 (i32.const 0) (local.get 0x199)) (i64.store offset=0x19a align=1 (i32.const 0) (local.get 0x19a)) (i64.store offset=0x19b align=1 (i32.const 0) (local.get 0x19b)) (i64.store offset=0x19c align=1 (i32.const 0) (local.get 0x19c)) (i64.store offset=0x19d align=1 (i32.const 0) (local.get 0x19d)) (i64.store offset=0x19e align=1 (i32.const 0) (local.get 0x19e)) (i64.store offset=0x19f align=1 (i32.const 0) (local.get 0x19f)) (i64.store offset=0x1a0 align=1 (i32.const 0) (local.get 0x1a0)) (i64.store offset=0x1a1 align=1 (i32.const 0) (local.get 0x1a1)) (i64.store offset=0x1a2 align=1 (i32.const 0) (local.get 0x1a2)) (i64.store offset=0x1a3 align=1 (i32.const 0) (local.get 0x1a3)) (i64.store offset=0x1a4 align=1 (i32.const 0) (local.get 0x1a4)) (i64.store offset=0x1a5 align=1 (i32.const 0) (local.get 0x1a5)) (i64.store offset=0x1a6 align=1 (i32.const 0) (local.get 0x1a6)) (i64.store offset=0x1a7 align=1 (i32.const 0) (local.get 0x1a7)) (i64.store offset=0x1a8 align=1 (i32.const 0) (local.get 0x1a8)) (i64.store offset=0x1a9 align=1 (i32.const 0) (local.get 0x1a9)) (i64.store offset=0x1aa align=1 (i32.const 0) (local.get 0x1aa)) (i64.store offset=0x1ab align=1 (i32.const 0) (local.get 0x1ab)) (i64.store offset=0x1ac align=1 (i32.const 0) (local.get 0x1ac)) (i64.store offset=0x1ad align=1 (i32.const 0) (local.get 0x1ad)) (i64.store offset=0x1ae align=1 (i32.const 0) (local.get 0x1ae)) (i64.store offset=0x1af align=1 (i32.const 0) (local.get 0x1af)) (i64.store offset=0x1b0 align=1 (i32.const 0) (local.get 0x1b0)) (i64.store offset=0x1b1 align=1 (i32.const 0) (local.get 0x1b1)) (i64.store offset=0x1b2 align=1 (i32.const 0) (local.get 0x1b2)) (i64.store offset=0x1b3 align=1 (i32.const 0) (local.get 0x1b3)) (i64.store offset=0x1b4 align=1 (i32.const 0) (local.get 0x1b4)) (i64.store offset=0x1b5 align=1 (i32.const 0) (local.get 0x1b5)) (i64.store offset=0x1b6 align=1 (i32.const 0) (local.get 0x1b6)) (i64.store offset=0x1b7 align=1 (i32.const 0) (local.get 0x1b7)) (i64.store offset=0x1b8 align=1 (i32.const 0) (local.get 0x1b8)) (i64.store offset=0x1b9 align=1 (i32.const 0) (local.get 0x1b9)) (i64.store offset=0x1ba align=1 (i32.const 0) (local.get 0x1ba)) (i64.store offset=0x1bb align=1 (i32.const 0) (local.get 0x1bb)) (i64.store offset=0x1bc align=1 (i32.const 0) (local.get 0x1bc)) (i64.store offset=0x1bd align=1 (i32.const 0) (local.get 0x1bd)) (i64.store offset=0x1be align=1 (i32.const 0) (local.get 0x1be)) (i64.store offset=0x1bf align=1 (i32.const 0) (local.get 0x1bf)) (i64.store offset=0x1c0 align=1 (i32.const 0) (local.get 0x1c0)) (i64.store offset=0x1c1 align=1 (i32.const 0) (local.get 0x1c1)) (i64.store offset=0x1c2 align=1 (i32.const 0) (local.get 0x1c2)) (i64.store offset=0x1c3 align=1 (i32.const 0) (local.get 0x1c3)) (i64.store offset=0x1c4 align=1 (i32.const 0) (local.get 0x1c4)) (i64.store offset=0x1c5 align=1 (i32.const 0) (local.get 0x1c5)) (i64.store offset=0x1c6 align=1 (i32.const 0) (local.get 0x1c6)) (i64.store offset=0x1c7 align=1 (i32.const 0) (local.get 0x1c7)) (i64.store offset=0x1c8 align=1 (i32.const 0) (local.get 0x1c8)) (i64.store offset=0x1c9 align=1 (i32.const 0) (local.get 0x1c9)) (i64.store offset=0x1ca align=1 (i32.const 0) (local.get 0x1ca)) (i64.store offset=0x1cb align=1 (i32.const 0) (local.get 0x1cb)) (i64.store offset=0x1cc align=1 (i32.const 0) (local.get 0x1cc)) (i64.store offset=0x1cd align=1 (i32.const 0) (local.get 0x1cd)) (i64.store offset=0x1ce align=1 (i32.const 0) (local.get 0x1ce)) (i64.store offset=0x1cf align=1 (i32.const 0) (local.get 0x1cf)) (i64.store offset=0x1d0 align=1 (i32.const 0) (local.get 0x1d0)) (i64.store offset=0x1d1 align=1 (i32.const 0) (local.get 0x1d1)) (i64.store offset=0x1d2 align=1 (i32.const 0) (local.get 0x1d2)) (i64.store offset=0x1d3 align=1 (i32.const 0) (local.get 0x1d3)) (i64.store offset=0x1d4 align=1 (i32.const 0) (local.get 0x1d4)) (i64.store offset=0x1d5 align=1 (i32.const 0) (local.get 0x1d5)) (i64.store offset=0x1d6 align=1 (i32.const 0) (local.get 0x1d6)) (i64.store offset=0x1d7 align=1 (i32.const 0) (local.get 0x1d7)) (i64.store offset=0x1d8 align=1 (i32.const 0) (local.get 0x1d8)) (i64.store offset=0x1d9 align=1 (i32.const 0) (local.get 0x1d9)) (i64.store offset=0x1da align=1 (i32.const 0) (local.get 0x1da)) (i64.store offset=0x1db align=1 (i32.const 0) (local.get 0x1db)) (i64.store offset=0x1dc align=1 (i32.const 0) (local.get 0x1dc)) (i64.store offset=0x1dd align=1 (i32.const 0) (local.get 0x1dd)) (i64.store offset=0x1de align=1 (i32.const 0) (local.get 0x1de)) (i64.store offset=0x1df align=1 (i32.const 0) (local.get 0x1df)) (i64.store offset=0x1e0 align=1 (i32.const 0) (local.get 0x1e0)) (i64.store offset=0x1e1 align=1 (i32.const 0) (local.get 0x1e1)) (i64.store offset=0x1e2 align=1 (i32.const 0) (local.get 0x1e2)) (i64.store offset=0x1e3 align=1 (i32.const 0) (local.get 0x1e3)) (i64.store offset=0x1e4 align=1 (i32.const 0) (local.get 0x1e4)) (i64.store offset=0x1e5 align=1 (i32.const 0) (local.get 0x1e5)) (i64.store offset=0x1e6 align=1 (i32.const 0) (local.get 0x1e6)) (i64.store offset=0x1e7 align=1 (i32.const 0) (local.get 0x1e7)) (i64.store offset=0x1e8 align=1 (i32.const 0) (local.get 0x1e8)) (i64.store offset=0x1e9 align=1 (i32.const 0) (local.get 0x1e9)) (i64.store offset=0x1ea align=1 (i32.const 0) (local.get 0x1ea)) (i64.store offset=0x1eb align=1 (i32.const 0) (local.get 0x1eb)) (i64.store offset=0x1ec align=1 (i32.const 0) (local.get 0x1ec)) (i64.store offset=0x1ed align=1 (i32.const 0) (local.get 0x1ed)) (i64.store offset=0x1ee align=1 (i32.const 0) (local.get 0x1ee)) (i64.store offset=0x1ef align=1 (i32.const 0) (local.get 0x1ef)) (i64.store offset=0x1f0 align=1 (i32.const 0) (local.get 0x1f0)) (i64.store offset=0x1f1 align=1 (i32.const 0) (local.get 0x1f1)) (i64.store offset=0x1f2 align=1 (i32.const 0) (local.get 0x1f2)) (i64.store offset=0x1f3 align=1 (i32.const 0) (local.get 0x1f3)) (i64.store offset=0x1f4 align=1 (i32.const 0) (local.get 0x1f4)) (i64.store offset=0x1f5 align=1 (i32.const 0) (local.get 0x1f5)) (i64.store offset=0x1f6 align=1 (i32.const 0) (local.get 0x1f6)) (i64.store offset=0x1f7 align=1 (i32.const 0) (local.get 0x1f7)) (i64.store offset=0x1f8 align=1 (i32.const 0) (local.get 0x1f8)) (i64.store offset=0x1f9 align=1 (i32.const 0) (local.get 0x1f9)) (i64.store offset=0x1fa align=1 (i32.const 0) (local.get 0x1fa)) (i64.store offset=0x1fb align=1 (i32.const 0) (local.get 0x1fb)) (i64.store offset=0x1fc align=1 (i32.const 0) (local.get 0x1fc)) (i64.store offset=0x1fd align=1 (i32.const 0) (local.get 0x1fd)) (i64.store offset=0x1fe align=1 (i32.const 0) (local.get 0x1fe)) (i64.store offset=0x1ff align=1 (i32.const 0) (local.get 0x1ff)) (i64.store offset=0x200 align=1 (i32.const 0) (local.get 0x200)) (i64.store offset=0x201 align=1 (i32.const 0) (local.get 0x201)) (i64.store offset=0x202 align=1 (i32.const 0) (local.get 0x202)) (i64.store offset=0x203 align=1 (i32.const 0) (local.get 0x203)) (i64.store offset=0x204 align=1 (i32.const 0) (local.get 0x204)) (i64.store offset=0x205 align=1 (i32.const 0) (local.get 0x205)) (i64.store offset=0x206 align=1 (i32.const 0) (local.get 0x206)) (i64.store offset=0x207 align=1 (i32.const 0) (local.get 0x207)) (i64.store offset=0x208 align=1 (i32.const 0) (local.get 0x208)) (i64.store offset=0x209 align=1 (i32.const 0) (local.get 0x209)) (i64.store offset=0x20a align=1 (i32.const 0) (local.get 0x20a)) (i64.store offset=0x20b align=1 (i32.const 0) (local.get 0x20b)) (i64.store offset=0x20c align=1 (i32.const 0) (local.get 0x20c)) (i64.store offset=0x20d align=1 (i32.const 0) (local.get 0x20d)) (i64.store offset=0x20e align=1 (i32.const 0) (local.get 0x20e)) (i64.store offset=0x20f align=1 (i32.const 0) (local.get 0x20f)) (i64.store offset=0x210 align=1 (i32.const 0) (local.get 0x210)) (i64.store offset=0x211 align=1 (i32.const 0) (local.get 0x211)) (i64.store offset=0x212 align=1 (i32.const 0) (local.get 0x212)) (i64.store offset=0x213 align=1 (i32.const 0) (local.get 0x213)) (i64.store offset=0x214 align=1 (i32.const 0) (local.get 0x214)) (i64.store offset=0x215 align=1 (i32.const 0) (local.get 0x215)) (i64.store offset=0x216 align=1 (i32.const 0) (local.get 0x216)) (i64.store offset=0x217 align=1 (i32.const 0) (local.get 0x217)) (i64.store offset=0x218 align=1 (i32.const 0) (local.get 0x218)) (i64.store offset=0x219 align=1 (i32.const 0) (local.get 0x219)) (i64.store offset=0x21a align=1 (i32.const 0) (local.get 0x21a)) (i64.store offset=0x21b align=1 (i32.const 0) (local.get 0x21b)) (i64.store offset=0x21c align=1 (i32.const 0) (local.get 0x21c)) (i64.store offset=0x21d align=1 (i32.const 0) (local.get 0x21d)) (i64.store offset=0x21e align=1 (i32.const 0) (local.get 0x21e)) (i64.store offset=0x21f align=1 (i32.const 0) (local.get 0x21f)) (i64.store offset=0x220 align=1 (i32.const 0) (local.get 0x220)) (i64.store offset=0x221 align=1 (i32.const 0) (local.get 0x221)) (i64.store offset=0x222 align=1 (i32.const 0) (local.get 0x222)) (i64.store offset=0x223 align=1 (i32.const 0) (local.get 0x223)) (i64.store offset=0x224 align=1 (i32.const 0) (local.get 0x224)) (i64.store offset=0x225 align=1 (i32.const 0) (local.get 0x225)) (i64.store offset=0x226 align=1 (i32.const 0) (local.get 0x226)) (i64.store offset=0x227 align=1 (i32.const 0) (local.get 0x227)) (i64.store offset=0x228 align=1 (i32.const 0) (local.get 0x228)) (i64.store offset=0x229 align=1 (i32.const 0) (local.get 0x229)) (i64.store offset=0x22a align=1 (i32.const 0) (local.get 0x22a)) (i64.store offset=0x22b align=1 (i32.const 0) (local.get 0x22b)) (i64.store offset=0x22c align=1 (i32.const 0) (local.get 0x22c)) (i64.store offset=0x22d align=1 (i32.const 0) (local.get 0x22d)) (i64.store offset=0x22e align=1 (i32.const 0) (local.get 0x22e)) (i64.store offset=0x22f align=1 (i32.const 0) (local.get 0x22f)) (i64.store offset=0x230 align=1 (i32.const 0) (local.get 0x230)) (i64.store offset=0x231 align=1 (i32.const 0) (local.get 0x231)) (i64.store offset=0x232 align=1 (i32.const 0) (local.get 0x232)) (i64.store offset=0x233 align=1 (i32.const 0) (local.get 0x233)) (i64.store offset=0x234 align=1 (i32.const 0) (local.get 0x234)) (i64.store offset=0x235 align=1 (i32.const 0) (local.get 0x235)) (i64.store offset=0x236 align=1 (i32.const 0) (local.get 0x236)) (i64.store offset=0x237 align=1 (i32.const 0) (local.get 0x237)) (i64.store offset=0x238 align=1 (i32.const 0) (local.get 0x238)) (i64.store offset=0x239 align=1 (i32.const 0) (local.get 0x239)) (i64.store offset=0x23a align=1 (i32.const 0) (local.get 0x23a)) (i64.store offset=0x23b align=1 (i32.const 0) (local.get 0x23b)) (i64.store offset=0x23c align=1 (i32.const 0) (local.get 0x23c)) (i64.store offset=0x23d align=1 (i32.const 0) (local.get 0x23d)) (i64.store offset=0x23e align=1 (i32.const 0) (local.get 0x23e)) (i64.store offset=0x23f align=1 (i32.const 0) (local.get 0x23f)) (i64.store offset=0x240 align=1 (i32.const 0) (local.get 0x240)) (i64.store offset=0x241 align=1 (i32.const 0) (local.get 0x241)) (i64.store offset=0x242 align=1 (i32.const 0) (local.get 0x242)) (i64.store offset=0x243 align=1 (i32.const 0) (local.get 0x243)) (i64.store offset=0x244 align=1 (i32.const 0) (local.get 0x244)) (i64.store offset=0x245 align=1 (i32.const 0) (local.get 0x245)) (i64.store offset=0x246 align=1 (i32.const 0) (local.get 0x246)) (i64.store offset=0x247 align=1 (i32.const 0) (local.get 0x247)) (i64.store offset=0x248 align=1 (i32.const 0) (local.get 0x248)) (i64.store offset=0x249 align=1 (i32.const 0) (local.get 0x249)) (i64.store offset=0x24a align=1 (i32.const 0) (local.get 0x24a)) (i64.store offset=0x24b align=1 (i32.const 0) (local.get 0x24b)) (i64.store offset=0x24c align=1 (i32.const 0) (local.get 0x24c)) (i64.store offset=0x24d align=1 (i32.const 0) (local.get 0x24d)) (i64.store offset=0x24e align=1 (i32.const 0) (local.get 0x24e)) (i64.store offset=0x24f align=1 (i32.const 0) (local.get 0x24f)) (i64.store offset=0x250 align=1 (i32.const 0) (local.get 0x250)) (i64.store offset=0x251 align=1 (i32.const 0) (local.get 0x251)) (i64.store offset=0x252 align=1 (i32.const 0) (local.get 0x252)) (i64.store offset=0x253 align=1 (i32.const 0) (local.get 0x253)) (i64.store offset=0x254 align=1 (i32.const 0) (local.get 0x254)) (i64.store offset=0x255 align=1 (i32.const 0) (local.get 0x255)) (i64.store offset=0x256 align=1 (i32.const 0) (local.get 0x256)) (i64.store offset=0x257 align=1 (i32.const 0) (local.get 0x257)) (i64.store offset=0x258 align=1 (i32.const 0) (local.get 0x258)) (i64.store offset=0x259 align=1 (i32.const 0) (local.get 0x259)) (i64.store offset=0x25a align=1 (i32.const 0) (local.get 0x25a)) (i64.store offset=0x25b align=1 (i32.const 0) (local.get 0x25b)) (i64.store offset=0x25c align=1 (i32.const 0) (local.get 0x25c)) (i64.store offset=0x25d align=1 (i32.const 0) (local.get 0x25d)) (i64.store offset=0x25e align=1 (i32.const 0) (local.get 0x25e)) (i64.store offset=0x25f align=1 (i32.const 0) (local.get 0x25f)) (i64.store offset=0x260 align=1 (i32.const 0) (local.get 0x260)) (i64.store offset=0x261 align=1 (i32.const 0) (local.get 0x261)) (i64.store offset=0x262 align=1 (i32.const 0) (local.get 0x262)) (i64.store offset=0x263 align=1 (i32.const 0) (local.get 0x263)) (i64.store offset=0x264 align=1 (i32.const 0) (local.get 0x264)) (i64.store offset=0x265 align=1 (i32.const 0) (local.get 0x265)) (i64.store offset=0x266 align=1 (i32.const 0) (local.get 0x266)) (i64.store offset=0x267 align=1 (i32.const 0) (local.get 0x267)) (i64.store offset=0x268 align=1 (i32.const 0) (local.get 0x268)) (i64.store offset=0x269 align=1 (i32.const 0) (local.get 0x269)) (i64.store offset=0x26a align=1 (i32.const 0) (local.get 0x26a)) (i64.store offset=0x26b align=1 (i32.const 0) (local.get 0x26b)) (i64.store offset=0x26c align=1 (i32.const 0) (local.get 0x26c)) (i64.store offset=0x26d align=1 (i32.const 0) (local.get 0x26d)) (i64.store offset=0x26e align=1 (i32.const 0) (local.get 0x26e)) (i64.store offset=0x26f align=1 (i32.const 0) (local.get 0x26f)) (i64.store offset=0x270 align=1 (i32.const 0) (local.get 0x270)) (i64.store offset=0x271 align=1 (i32.const 0) (local.get 0x271)) (i64.store offset=0x272 align=1 (i32.const 0) (local.get 0x272)) (i64.store offset=0x273 align=1 (i32.const 0) (local.get 0x273)) (i64.store offset=0x274 align=1 (i32.const 0) (local.get 0x274)) (i64.store offset=0x275 align=1 (i32.const 0) (local.get 0x275)) (i64.store offset=0x276 align=1 (i32.const 0) (local.get 0x276)) (i64.store offset=0x277 align=1 (i32.const 0) (local.get 0x277)) (i64.store offset=0x278 align=1 (i32.const 0) (local.get 0x278)) (i64.store offset=0x279 align=1 (i32.const 0) (local.get 0x279)) (i64.store offset=0x27a align=1 (i32.const 0) (local.get 0x27a)) (i64.store offset=0x27b align=1 (i32.const 0) (local.get 0x27b)) (i64.store offset=0x27c align=1 (i32.const 0) (local.get 0x27c)) (i64.store offset=0x27d align=1 (i32.const 0) (local.get 0x27d)) (i64.store offset=0x27e align=1 (i32.const 0) (local.get 0x27e)) (i64.store offset=0x27f align=1 (i32.const 0) (local.get 0x27f)) (i64.store offset=0x280 align=1 (i32.const 0) (local.get 0x280)) (i64.store offset=0x281 align=1 (i32.const 0) (local.get 0x281)) (i64.store offset=0x282 align=1 (i32.const 0) (local.get 0x282)) (i64.store offset=0x283 align=1 (i32.const 0) (local.get 0x283)) (i64.store offset=0x284 align=1 (i32.const 0) (local.get 0x284)) (i64.store offset=0x285 align=1 (i32.const 0) (local.get 0x285)) (i64.store offset=0x286 align=1 (i32.const 0) (local.get 0x286)) (i64.store offset=0x287 align=1 (i32.const 0) (local.get 0x287)) (i64.store offset=0x288 align=1 (i32.const 0) (local.get 0x288)) (i64.store offset=0x289 align=1 (i32.const 0) (local.get 0x289)) (i64.store offset=0x28a align=1 (i32.const 0) (local.get 0x28a)) (i64.store offset=0x28b align=1 (i32.const 0) (local.get 0x28b)) (i64.store offset=0x28c align=1 (i32.const 0) (local.get 0x28c)) (i64.store offset=0x28d align=1 (i32.const 0) (local.get 0x28d)) (i64.store offset=0x28e align=1 (i32.const 0) (local.get 0x28e)) (i64.store offset=0x28f align=1 (i32.const 0) (local.get 0x28f)) (i64.store offset=0x290 align=1 (i32.const 0) (local.get 0x290)) (i64.store offset=0x291 align=1 (i32.const 0) (local.get 0x291)) (i64.store offset=0x292 align=1 (i32.const 0) (local.get 0x292)) (i64.store offset=0x293 align=1 (i32.const 0) (local.get 0x293)) (i64.store offset=0x294 align=1 (i32.const 0) (local.get 0x294)) (i64.store offset=0x295 align=1 (i32.const 0) (local.get 0x295)) (i64.store offset=0x296 align=1 (i32.const 0) (local.get 0x296)) (i64.store offset=0x297 align=1 (i32.const 0) (local.get 0x297)) (i64.store offset=0x298 align=1 (i32.const 0) (local.get 0x298)) (i64.store offset=0x299 align=1 (i32.const 0) (local.get 0x299)) (i64.store offset=0x29a align=1 (i32.const 0) (local.get 0x29a)) (i64.store offset=0x29b align=1 (i32.const 0) (local.get 0x29b)) (i64.store offset=0x29c align=1 (i32.const 0) (local.get 0x29c)) (i64.store offset=0x29d align=1 (i32.const 0) (local.get 0x29d)) (i64.store offset=0x29e align=1 (i32.const 0) (local.get 0x29e)) (i64.store offset=0x29f align=1 (i32.const 0) (local.get 0x29f)) (i64.store offset=0x2a0 align=1 (i32.const 0) (local.get 0x2a0)) (i64.store offset=0x2a1 align=1 (i32.const 0) (local.get 0x2a1)) (i64.store offset=0x2a2 align=1 (i32.const 0) (local.get 0x2a2)) (i64.store offset=0x2a3 align=1 (i32.const 0) (local.get 0x2a3)) (i64.store offset=0x2a4 align=1 (i32.const 0) (local.get 0x2a4)) (i64.store offset=0x2a5 align=1 (i32.const 0) (local.get 0x2a5)) (i64.store offset=0x2a6 align=1 (i32.const 0) (local.get 0x2a6)) (i64.store offset=0x2a7 align=1 (i32.const 0) (local.get 0x2a7)) (i64.store offset=0x2a8 align=1 (i32.const 0) (local.get 0x2a8)) (i64.store offset=0x2a9 align=1 (i32.const 0) (local.get 0x2a9)) (i64.store offset=0x2aa align=1 (i32.const 0) (local.get 0x2aa)) (i64.store offset=0x2ab align=1 (i32.const 0) (local.get 0x2ab)) (i64.store offset=0x2ac align=1 (i32.const 0) (local.get 0x2ac)) (i64.store offset=0x2ad align=1 (i32.const 0) (local.get 0x2ad)) (i64.store offset=0x2ae align=1 (i32.const 0) (local.get 0x2ae)) (i64.store offset=0x2af align=1 (i32.const 0) (local.get 0x2af)) (i64.store offset=0x2b0 align=1 (i32.const 0) (local.get 0x2b0)) (i64.store offset=0x2b1 align=1 (i32.const 0) (local.get 0x2b1)) (i64.store offset=0x2b2 align=1 (i32.const 0) (local.get 0x2b2)) (i64.store offset=0x2b3 align=1 (i32.const 0) (local.get 0x2b3)) (i64.store offset=0x2b4 align=1 (i32.const 0) (local.get 0x2b4)) (i64.store offset=0x2b5 align=1 (i32.const 0) (local.get 0x2b5)) (i64.store offset=0x2b6 align=1 (i32.const 0) (local.get 0x2b6)) (i64.store offset=0x2b7 align=1 (i32.const 0) (local.get 0x2b7)) (i64.store offset=0x2b8 align=1 (i32.const 0) (local.get 0x2b8)) (i64.store offset=0x2b9 align=1 (i32.const 0) (local.get 0x2b9)) (i64.store offset=0x2ba align=1 (i32.const 0) (local.get 0x2ba)) (i64.store offset=0x2bb align=1 (i32.const 0) (local.get 0x2bb)) (i64.store offset=0x2bc align=1 (i32.const 0) (local.get 0x2bc)) (i64.store offset=0x2bd align=1 (i32.const 0) (local.get 0x2bd)) (i64.store offset=0x2be align=1 (i32.const 0) (local.get 0x2be)) (i64.store offset=0x2bf align=1 (i32.const 0) (local.get 0x2bf)) (i64.store offset=0x2c0 align=1 (i32.const 0) (local.get 0x2c0)) (i64.store offset=0x2c1 align=1 (i32.const 0) (local.get 0x2c1)) (i64.store offset=0x2c2 align=1 (i32.const 0) (local.get 0x2c2)) (i64.store offset=0x2c3 align=1 (i32.const 0) (local.get 0x2c3)) (i64.store offset=0x2c4 align=1 (i32.const 0) (local.get 0x2c4)) (i64.store offset=0x2c5 align=1 (i32.const 0) (local.get 0x2c5)) (i64.store offset=0x2c6 align=1 (i32.const 0) (local.get 0x2c6)) (i64.store offset=0x2c7 align=1 (i32.const 0) (local.get 0x2c7)) (i64.store offset=0x2c8 align=1 (i32.const 0) (local.get 0x2c8)) (i64.store offset=0x2c9 align=1 (i32.const 0) (local.get 0x2c9)) (i64.store offset=0x2ca align=1 (i32.const 0) (local.get 0x2ca)) (i64.store offset=0x2cb align=1 (i32.const 0) (local.get 0x2cb)) (i64.store offset=0x2cc align=1 (i32.const 0) (local.get 0x2cc)) (i64.store offset=0x2cd align=1 (i32.const 0) (local.get 0x2cd)) (i64.store offset=0x2ce align=1 (i32.const 0) (local.get 0x2ce)) (i64.store offset=0x2cf align=1 (i32.const 0) (local.get 0x2cf)) (i64.store offset=0x2d0 align=1 (i32.const 0) (local.get 0x2d0)) (i64.store offset=0x2d1 align=1 (i32.const 0) (local.get 0x2d1)) (i64.store offset=0x2d2 align=1 (i32.const 0) (local.get 0x2d2)) (i64.store offset=0x2d3 align=1 (i32.const 0) (local.get 0x2d3)) (i64.store offset=0x2d4 align=1 (i32.const 0) (local.get 0x2d4)) (i64.store offset=0x2d5 align=1 (i32.const 0) (local.get 0x2d5)) (i64.store offset=0x2d6 align=1 (i32.const 0) (local.get 0x2d6)) (i64.store offset=0x2d7 align=1 (i32.const 0) (local.get 0x2d7)) (i64.store offset=0x2d8 align=1 (i32.const 0) (local.get 0x2d8)) (i64.store offset=0x2d9 align=1 (i32.const 0) (local.get 0x2d9)) (i64.store offset=0x2da align=1 (i32.const 0) (local.get 0x2da)) (i64.store offset=0x2db align=1 (i32.const 0) (local.get 0x2db)) (i64.store offset=0x2dc align=1 (i32.const 0) (local.get 0x2dc)) (i64.store offset=0x2dd align=1 (i32.const 0) (local.get 0x2dd)) (i64.store offset=0x2de align=1 (i32.const 0) (local.get 0x2de)) (i64.store offset=0x2df align=1 (i32.const 0) (local.get 0x2df)) (i64.store offset=0x2e0 align=1 (i32.const 0) (local.get 0x2e0)) (i64.store offset=0x2e1 align=1 (i32.const 0) (local.get 0x2e1)) (i64.store offset=0x2e2 align=1 (i32.const 0) (local.get 0x2e2)) (i64.store offset=0x2e3 align=1 (i32.const 0) (local.get 0x2e3)) (i64.store offset=0x2e4 align=1 (i32.const 0) (local.get 0x2e4)) (i64.store offset=0x2e5 align=1 (i32.const 0) (local.get 0x2e5)) (i64.store offset=0x2e6 align=1 (i32.const 0) (local.get 0x2e6)) (i64.store offset=0x2e7 align=1 (i32.const 0) (local.get 0x2e7)) (i64.store offset=0x2e8 align=1 (i32.const 0) (local.get 0x2e8)) (i64.store offset=0x2e9 align=1 (i32.const 0) (local.get 0x2e9)) (i64.store offset=0x2ea align=1 (i32.const 0) (local.get 0x2ea)) (i64.store offset=0x2eb align=1 (i32.const 0) (local.get 0x2eb)) (i64.store offset=0x2ec align=1 (i32.const 0) (local.get 0x2ec)) (i64.store offset=0x2ed align=1 (i32.const 0) (local.get 0x2ed)) (i64.store offset=0x2ee align=1 (i32.const 0) (local.get 0x2ee)) (i64.store offset=0x2ef align=1 (i32.const 0) (local.get 0x2ef)) (i64.store offset=0x2f0 align=1 (i32.const 0) (local.get 0x2f0)) (i64.store offset=0x2f1 align=1 (i32.const 0) (local.get 0x2f1)) (i64.store offset=0x2f2 align=1 (i32.const 0) (local.get 0x2f2)) (i64.store offset=0x2f3 align=1 (i32.const 0) (local.get 0x2f3)) (i64.store offset=0x2f4 align=1 (i32.const 0) (local.get 0x2f4)) (i64.store offset=0x2f5 align=1 (i32.const 0) (local.get 0x2f5)) (i64.store offset=0x2f6 align=1 (i32.const 0) (local.get 0x2f6)) (i64.store offset=0x2f7 align=1 (i32.const 0) (local.get 0x2f7)) (i64.store offset=0x2f8 align=1 (i32.const 0) (local.get 0x2f8)) (i64.store offset=0x2f9 align=1 (i32.const 0) (local.get 0x2f9)) (i64.store offset=0x2fa align=1 (i32.const 0) (local.get 0x2fa)) (i64.store offset=0x2fb align=1 (i32.const 0) (local.get 0x2fb)) (i64.store offset=0x2fc align=1 (i32.const 0) (local.get 0x2fc)) (i64.store offset=0x2fd align=1 (i32.const 0) (local.get 0x2fd)) (i64.store offset=0x2fe align=1 (i32.const 0) (local.get 0x2fe)) (i64.store offset=0x2ff align=1 (i32.const 0) (local.get 0x2ff)) (i64.store offset=0x300 align=1 (i32.const 0) (local.get 0x300)) (i64.store offset=0x301 align=1 (i32.const 0) (local.get 0x301)) (i64.store offset=0x302 align=1 (i32.const 0) (local.get 0x302)) (i64.store offset=0x303 align=1 (i32.const 0) (local.get 0x303)) (i64.store offset=0x304 align=1 (i32.const 0) (local.get 0x304)) (i64.store offset=0x305 align=1 (i32.const 0) (local.get 0x305)) (i64.store offset=0x306 align=1 (i32.const 0) (local.get 0x306)) (i64.store offset=0x307 align=1 (i32.const 0) (local.get 0x307)) (i64.store offset=0x308 align=1 (i32.const 0) (local.get 0x308)) (i64.store offset=0x309 align=1 (i32.const 0) (local.get 0x309)) (i64.store offset=0x30a align=1 (i32.const 0) (local.get 0x30a)) (i64.store offset=0x30b align=1 (i32.const 0) (local.get 0x30b)) (i64.store offset=0x30c align=1 (i32.const 0) (local.get 0x30c)) (i64.store offset=0x30d align=1 (i32.const 0) (local.get 0x30d)) (i64.store offset=0x30e align=1 (i32.const 0) (local.get 0x30e)) (i64.store offset=0x30f align=1 (i32.const 0) (local.get 0x30f)) (i64.store offset=0x310 align=1 (i32.const 0) (local.get 0x310)) (i64.store offset=0x311 align=1 (i32.const 0) (local.get 0x311)) (i64.store offset=0x312 align=1 (i32.const 0) (local.get 0x312)) (i64.store offset=0x313 align=1 (i32.const 0) (local.get 0x313)) (i64.store offset=0x314 align=1 (i32.const 0) (local.get 0x314)) (i64.store offset=0x315 align=1 (i32.const 0) (local.get 0x315)) (i64.store offset=0x316 align=1 (i32.const 0) (local.get 0x316)) (i64.store offset=0x317 align=1 (i32.const 0) (local.get 0x317)) (i64.store offset=0x318 align=1 (i32.const 0) (local.get 0x318)) (i64.store offset=0x319 align=1 (i32.const 0) (local.get 0x319)) (i64.store offset=0x31a align=1 (i32.const 0) (local.get 0x31a)) (i64.store offset=0x31b align=1 (i32.const 0) (local.get 0x31b)) (i64.store offset=0x31c align=1 (i32.const 0) (local.get 0x31c)) (i64.store offset=0x31d align=1 (i32.const 0) (local.get 0x31d)) (i64.store offset=0x31e align=1 (i32.const 0) (local.get 0x31e)) (i64.store offset=0x31f align=1 (i32.const 0) (local.get 0x31f)) (i64.store offset=0x320 align=1 (i32.const 0) (local.get 0x320)) (i64.store offset=0x321 align=1 (i32.const 0) (local.get 0x321)) (i64.store offset=0x322 align=1 (i32.const 0) (local.get 0x322)) (i64.store offset=0x323 align=1 (i32.const 0) (local.get 0x323)) (i64.store offset=0x324 align=1 (i32.const 0) (local.get 0x324)) (i64.store offset=0x325 align=1 (i32.const 0) (local.get 0x325)) (i64.store offset=0x326 align=1 (i32.const 0) (local.get 0x326)) (i64.store offset=0x327 align=1 (i32.const 0) (local.get 0x327)) (i64.store offset=0x328 align=1 (i32.const 0) (local.get 0x328)) (i64.store offset=0x329 align=1 (i32.const 0) (local.get 0x329)) (i64.store offset=0x32a align=1 (i32.const 0) (local.get 0x32a)) (i64.store offset=0x32b align=1 (i32.const 0) (local.get 0x32b)) (i64.store offset=0x32c align=1 (i32.const 0) (local.get 0x32c)) (i64.store offset=0x32d align=1 (i32.const 0) (local.get 0x32d)) (i64.store offset=0x32e align=1 (i32.const 0) (local.get 0x32e)) (i64.store offset=0x32f align=1 (i32.const 0) (local.get 0x32f)) (i64.store offset=0x330 align=1 (i32.const 0) (local.get 0x330)) (i64.store offset=0x331 align=1 (i32.const 0) (local.get 0x331)) (i64.store offset=0x332 align=1 (i32.const 0) (local.get 0x332)) (i64.store offset=0x333 align=1 (i32.const 0) (local.get 0x333)) (i64.store offset=0x334 align=1 (i32.const 0) (local.get 0x334)) (i64.store offset=0x335 align=1 (i32.const 0) (local.get 0x335)) (i64.store offset=0x336 align=1 (i32.const 0) (local.get 0x336)) (i64.store offset=0x337 align=1 (i32.const 0) (local.get 0x337)) (i64.store offset=0x338 align=1 (i32.const 0) (local.get 0x338)) (i64.store offset=0x339 align=1 (i32.const 0) (local.get 0x339)) (i64.store offset=0x33a align=1 (i32.const 0) (local.get 0x33a)) (i64.store offset=0x33b align=1 (i32.const 0) (local.get 0x33b)) (i64.store offset=0x33c align=1 (i32.const 0) (local.get 0x33c)) (i64.store offset=0x33d align=1 (i32.const 0) (local.get 0x33d)) (i64.store offset=0x33e align=1 (i32.const 0) (local.get 0x33e)) (i64.store offset=0x33f align=1 (i32.const 0) (local.get 0x33f)) (i64.store offset=0x340 align=1 (i32.const 0) (local.get 0x340)) (i64.store offset=0x341 align=1 (i32.const 0) (local.get 0x341)) (i64.store offset=0x342 align=1 (i32.const 0) (local.get 0x342)) (i64.store offset=0x343 align=1 (i32.const 0) (local.get 0x343)) (i64.store offset=0x344 align=1 (i32.const 0) (local.get 0x344)) (i64.store offset=0x345 align=1 (i32.const 0) (local.get 0x345)) (i64.store offset=0x346 align=1 (i32.const 0) (local.get 0x346)) (i64.store offset=0x347 align=1 (i32.const 0) (local.get 0x347)) (i64.store offset=0x348 align=1 (i32.const 0) (local.get 0x348)) (i64.store offset=0x349 align=1 (i32.const 0) (local.get 0x349)) (i64.store offset=0x34a align=1 (i32.const 0) (local.get 0x34a)) (i64.store offset=0x34b align=1 (i32.const 0) (local.get 0x34b)) (i64.store offset=0x34c align=1 (i32.const 0) (local.get 0x34c)) (i64.store offset=0x34d align=1 (i32.const 0) (local.get 0x34d)) (i64.store offset=0x34e align=1 (i32.const 0) (local.get 0x34e)) (i64.store offset=0x34f align=1 (i32.const 0) (local.get 0x34f)) (i64.store offset=0x350 align=1 (i32.const 0) (local.get 0x350)) (i64.store offset=0x351 align=1 (i32.const 0) (local.get 0x351)) (i64.store offset=0x352 align=1 (i32.const 0) (local.get 0x352)) (i64.store offset=0x353 align=1 (i32.const 0) (local.get 0x353)) (i64.store offset=0x354 align=1 (i32.const 0) (local.get 0x354)) (i64.store offset=0x355 align=1 (i32.const 0) (local.get 0x355)) (i64.store offset=0x356 align=1 (i32.const 0) (local.get 0x356)) (i64.store offset=0x357 align=1 (i32.const 0) (local.get 0x357)) (i64.store offset=0x358 align=1 (i32.const 0) (local.get 0x358)) (i64.store offset=0x359 align=1 (i32.const 0) (local.get 0x359)) (i64.store offset=0x35a align=1 (i32.const 0) (local.get 0x35a)) (i64.store offset=0x35b align=1 (i32.const 0) (local.get 0x35b)) (i64.store offset=0x35c align=1 (i32.const 0) (local.get 0x35c)) (i64.store offset=0x35d align=1 (i32.const 0) (local.get 0x35d)) (i64.store offset=0x35e align=1 (i32.const 0) (local.get 0x35e)) (i64.store offset=0x35f align=1 (i32.const 0) (local.get 0x35f)) (i64.store offset=0x360 align=1 (i32.const 0) (local.get 0x360)) (i64.store offset=0x361 align=1 (i32.const 0) (local.get 0x361)) (i64.store offset=0x362 align=1 (i32.const 0) (local.get 0x362)) (i64.store offset=0x363 align=1 (i32.const 0) (local.get 0x363)) (i64.store offset=0x364 align=1 (i32.const 0) (local.get 0x364)) (i64.store offset=0x365 align=1 (i32.const 0) (local.get 0x365)) (i64.store offset=0x366 align=1 (i32.const 0) (local.get 0x366)) (i64.store offset=0x367 align=1 (i32.const 0) (local.get 0x367)) (i64.store offset=0x368 align=1 (i32.const 0) (local.get 0x368)) (i64.store offset=0x369 align=1 (i32.const 0) (local.get 0x369)) (i64.store offset=0x36a align=1 (i32.const 0) (local.get 0x36a)) (i64.store offset=0x36b align=1 (i32.const 0) (local.get 0x36b)) (i64.store offset=0x36c align=1 (i32.const 0) (local.get 0x36c)) (i64.store offset=0x36d align=1 (i32.const 0) (local.get 0x36d)) (i64.store offset=0x36e align=1 (i32.const 0) (local.get 0x36e)) (i64.store offset=0x36f align=1 (i32.const 0) (local.get 0x36f)) (i64.store offset=0x370 align=1 (i32.const 0) (local.get 0x370)) (i64.store offset=0x371 align=1 (i32.const 0) (local.get 0x371)) (i64.store offset=0x372 align=1 (i32.const 0) (local.get 0x372)) (i64.store offset=0x373 align=1 (i32.const 0) (local.get 0x373)) (i64.store offset=0x374 align=1 (i32.const 0) (local.get 0x374)) (i64.store offset=0x375 align=1 (i32.const 0) (local.get 0x375)) (i64.store offset=0x376 align=1 (i32.const 0) (local.get 0x376)) (i64.store offset=0x377 align=1 (i32.const 0) (local.get 0x377)) (i64.store offset=0x378 align=1 (i32.const 0) (local.get 0x378)) (i64.store offset=0x379 align=1 (i32.const 0) (local.get 0x379)) (i64.store offset=0x37a align=1 (i32.const 0) (local.get 0x37a)) (i64.store offset=0x37b align=1 (i32.const 0) (local.get 0x37b)) (i64.store offset=0x37c align=1 (i32.const 0) (local.get 0x37c)) (i64.store offset=0x37d align=1 (i32.const 0) (local.get 0x37d)) (i64.store offset=0x37e align=1 (i32.const 0) (local.get 0x37e)) (i64.store offset=0x37f align=1 (i32.const 0) (local.get 0x37f)) (i64.store offset=0x380 align=1 (i32.const 0) (local.get 0x380)) (i64.store offset=0x381 align=1 (i32.const 0) (local.get 0x381)) (i64.store offset=0x382 align=1 (i32.const 0) (local.get 0x382)) (i64.store offset=0x383 align=1 (i32.const 0) (local.get 0x383)) (i64.store offset=0x384 align=1 (i32.const 0) (local.get 0x384)) (i64.store offset=0x385 align=1 (i32.const 0) (local.get 0x385)) (i64.store offset=0x386 align=1 (i32.const 0) (local.get 0x386)) (i64.store offset=0x387 align=1 (i32.const 0) (local.get 0x387)) (i64.store offset=0x388 align=1 (i32.const 0) (local.get 0x388)) (i64.store offset=0x389 align=1 (i32.const 0) (local.get 0x389)) (i64.store offset=0x38a align=1 (i32.const 0) (local.get 0x38a)) (i64.store offset=0x38b align=1 (i32.const 0) (local.get 0x38b)) (i64.store offset=0x38c align=1 (i32.const 0) (local.get 0x38c)) (i64.store offset=0x38d align=1 (i32.const 0) (local.get 0x38d)) (i64.store offset=0x38e align=1 (i32.const 0) (local.get 0x38e)) (i64.store offset=0x38f align=1 (i32.const 0) (local.get 0x38f)) (i64.store offset=0x390 align=1 (i32.const 0) (local.get 0x390)) (i64.store offset=0x391 align=1 (i32.const 0) (local.get 0x391)) (i64.store offset=0x392 align=1 (i32.const 0) (local.get 0x392)) (i64.store offset=0x393 align=1 (i32.const 0) (local.get 0x393)) (i64.store offset=0x394 align=1 (i32.const 0) (local.get 0x394)) (i64.store offset=0x395 align=1 (i32.const 0) (local.get 0x395)) (i64.store offset=0x396 align=1 (i32.const 0) (local.get 0x396)) (i64.store offset=0x397 align=1 (i32.const 0) (local.get 0x397)) (i64.store offset=0x398 align=1 (i32.const 0) (local.get 0x398)) (i64.store offset=0x399 align=1 (i32.const 0) (local.get 0x399)) (i64.store offset=0x39a align=1 (i32.const 0) (local.get 0x39a)) (i64.store offset=0x39b align=1 (i32.const 0) (local.get 0x39b)) (i64.store offset=0x39c align=1 (i32.const 0) (local.get 0x39c)) (i64.store offset=0x39d align=1 (i32.const 0) (local.get 0x39d)) (i64.store offset=0x39e align=1 (i32.const 0) (local.get 0x39e)) (i64.store offset=0x39f align=1 (i32.const 0) (local.get 0x39f)) (i64.store offset=0x3a0 align=1 (i32.const 0) (local.get 0x3a0)) (i64.store offset=0x3a1 align=1 (i32.const 0) (local.get 0x3a1)) (i64.store offset=0x3a2 align=1 (i32.const 0) (local.get 0x3a2)) (i64.store offset=0x3a3 align=1 (i32.const 0) (local.get 0x3a3)) (i64.store offset=0x3a4 align=1 (i32.const 0) (local.get 0x3a4)) (i64.store offset=0x3a5 align=1 (i32.const 0) (local.get 0x3a5)) (i64.store offset=0x3a6 align=1 (i32.const 0) (local.get 0x3a6)) (i64.store offset=0x3a7 align=1 (i32.const 0) (local.get 0x3a7)) (i64.store offset=0x3a8 align=1 (i32.const 0) (local.get 0x3a8)) (i64.store offset=0x3a9 align=1 (i32.const 0) (local.get 0x3a9)) (i64.store offset=0x3aa align=1 (i32.const 0) (local.get 0x3aa)) (i64.store offset=0x3ab align=1 (i32.const 0) (local.get 0x3ab)) (i64.store offset=0x3ac align=1 (i32.const 0) (local.get 0x3ac)) (i64.store offset=0x3ad align=1 (i32.const 0) (local.get 0x3ad)) (i64.store offset=0x3ae align=1 (i32.const 0) (local.get 0x3ae)) (i64.store offset=0x3af align=1 (i32.const 0) (local.get 0x3af)) (i64.store offset=0x3b0 align=1 (i32.const 0) (local.get 0x3b0)) (i64.store offset=0x3b1 align=1 (i32.const 0) (local.get 0x3b1)) (i64.store offset=0x3b2 align=1 (i32.const 0) (local.get 0x3b2)) (i64.store offset=0x3b3 align=1 (i32.const 0) (local.get 0x3b3)) (i64.store offset=0x3b4 align=1 (i32.const 0) (local.get 0x3b4)) (i64.store offset=0x3b5 align=1 (i32.const 0) (local.get 0x3b5)) (i64.store offset=0x3b6 align=1 (i32.const 0) (local.get 0x3b6)) (i64.store offset=0x3b7 align=1 (i32.const 0) (local.get 0x3b7)) (i64.store offset=0x3b8 align=1 (i32.const 0) (local.get 0x3b8)) (i64.store offset=0x3b9 align=1 (i32.const 0) (local.get 0x3b9)) (i64.store offset=0x3ba align=1 (i32.const 0) (local.get 0x3ba)) (i64.store offset=0x3bb align=1 (i32.const 0) (local.get 0x3bb)) (i64.store offset=0x3bc align=1 (i32.const 0) (local.get 0x3bc)) (i64.store offset=0x3bd align=1 (i32.const 0) (local.get 0x3bd)) (i64.store offset=0x3be align=1 (i32.const 0) (local.get 0x3be)) (i64.store offset=0x3bf align=1 (i32.const 0) (local.get 0x3bf)) (i64.store offset=0x3c0 align=1 (i32.const 0) (local.get 0x3c0)) (i64.store offset=0x3c1 align=1 (i32.const 0) (local.get 0x3c1)) (i64.store offset=0x3c2 align=1 (i32.const 0) (local.get 0x3c2)) (i64.store offset=0x3c3 align=1 (i32.const 0) (local.get 0x3c3)) (i64.store offset=0x3c4 align=1 (i32.const 0) (local.get 0x3c4)) (i64.store offset=0x3c5 align=1 (i32.const 0) (local.get 0x3c5)) (i64.store offset=0x3c6 align=1 (i32.const 0) (local.get 0x3c6)) (i64.store offset=0x3c7 align=1 (i32.const 0) (local.get 0x3c7)) (i64.store offset=0x3c8 align=1 (i32.const 0) (local.get 0x3c8)) (i64.store offset=0x3c9 align=1 (i32.const 0) (local.get 0x3c9)) (i64.store offset=0x3ca align=1 (i32.const 0) (local.get 0x3ca)) (i64.store offset=0x3cb align=1 (i32.const 0) (local.get 0x3cb)) (i64.store offset=0x3cc align=1 (i32.const 0) (local.get 0x3cc)) (i64.store offset=0x3cd align=1 (i32.const 0) (local.get 0x3cd)) (i64.store offset=0x3ce align=1 (i32.const 0) (local.get 0x3ce)) (i64.store offset=0x3cf align=1 (i32.const 0) (local.get 0x3cf)) (i64.store offset=0x3d0 align=1 (i32.const 0) (local.get 0x3d0)) (i64.store offset=0x3d1 align=1 (i32.const 0) (local.get 0x3d1)) (i64.store offset=0x3d2 align=1 (i32.const 0) (local.get 0x3d2)) (i64.store offset=0x3d3 align=1 (i32.const 0) (local.get 0x3d3)) (i64.store offset=0x3d4 align=1 (i32.const 0) (local.get 0x3d4)) (i64.store offset=0x3d5 align=1 (i32.const 0) (local.get 0x3d5)) (i64.store offset=0x3d6 align=1 (i32.const 0) (local.get 0x3d6)) (i64.store offset=0x3d7 align=1 (i32.const 0) (local.get 0x3d7)) (i64.store offset=0x3d8 align=1 (i32.const 0) (local.get 0x3d8)) (i64.store offset=0x3d9 align=1 (i32.const 0) (local.get 0x3d9)) (i64.store offset=0x3da align=1 (i32.const 0) (local.get 0x3da)) (i64.store offset=0x3db align=1 (i32.const 0) (local.get 0x3db)) (i64.store offset=0x3dc align=1 (i32.const 0) (local.get 0x3dc)) (i64.store offset=0x3dd align=1 (i32.const 0) (local.get 0x3dd)) (i64.store offset=0x3de align=1 (i32.const 0) (local.get 0x3de)) (i64.store offset=0x3df align=1 (i32.const 0) (local.get 0x3df)) (i64.store offset=0x3e0 align=1 (i32.const 0) (local.get 0x3e0)) (i64.store offset=0x3e1 align=1 (i32.const 0) (local.get 0x3e1)) (i64.store offset=0x3e2 align=1 (i32.const 0) (local.get 0x3e2)) (i64.store offset=0x3e3 align=1 (i32.const 0) (local.get 0x3e3)) (i64.store offset=0x3e4 align=1 (i32.const 0) (local.get 0x3e4)) (i64.store offset=0x3e5 align=1 (i32.const 0) (local.get 0x3e5)) (i64.store offset=0x3e6 align=1 (i32.const 0) (local.get 0x3e6)) (i64.store offset=0x3e7 align=1 (i32.const 0) (local.get 0x3e7)) (i64.store offset=0x3e8 align=1 (i32.const 0) (local.get 0x3e8)) (i64.store offset=0x3e9 align=1 (i32.const 0) (local.get 0x3e9)) (i64.store offset=0x3ea align=1 (i32.const 0) (local.get 0x3ea)) (i64.store offset=0x3eb align=1 (i32.const 0) (local.get 0x3eb)) (i64.store offset=0x3ec align=1 (i32.const 0) (local.get 0x3ec)) (i64.store offset=0x3ed align=1 (i32.const 0) (local.get 0x3ed)) (i64.store offset=0x3ee align=1 (i32.const 0) (local.get 0x3ee)) (i64.store offset=0x3ef align=1 (i32.const 0) (local.get 0x3ef)) (i64.store offset=0x3f0 align=1 (i32.const 0) (local.get 0x3f0)) (i64.store offset=0x3f1 align=1 (i32.const 0) (local.get 0x3f1)) (i64.store offset=0x3f2 align=1 (i32.const 0) (local.get 0x3f2)) (i64.store offset=0x3f3 align=1 (i32.const 0) (local.get 0x3f3)) (i64.store offset=0x3f4 align=1 (i32.const 0) (local.get 0x3f4)) (i64.store offset=0x3f5 align=1 (i32.const 0) (local.get 0x3f5)) (i64.store offset=0x3f6 align=1 (i32.const 0) (local.get 0x3f6)) (i64.store offset=0x3f7 align=1 (i32.const 0) (local.get 0x3f7)) (i64.store offset=0x3f8 align=1 (i32.const 0) (local.get 0x3f8)) (i64.store offset=0x3f9 align=1 (i32.const 0) (local.get 0x3f9)) (i64.store offset=0x3fa align=1 (i32.const 0) (local.get 0x3fa)) (i64.store offset=0x3fb align=1 (i32.const 0) (local.get 0x3fb)) (i64.store offset=0x3fc align=1 (i32.const 0) (local.get 0x3fc)) (i64.store offset=0x3fd align=1 (i32.const 0) (local.get 0x3fd)) (i64.store offset=0x3fe align=1 (i32.const 0) (local.get 0x3fe)) (i64.store offset=0x3ff align=1 (i32.const 0) (local.get 0x3ff)) (i64.store offset=0x400 align=1 (i32.const 0) (local.get 0x400)) (i64.store offset=0x401 align=1 (i32.const 0) (local.get 0x401)) (i64.store offset=0x402 align=1 (i32.const 0) (local.get 0x402)) (i64.store offset=0x403 align=1 (i32.const 0) (local.get 0x403)) (i64.store offset=0x404 align=1 (i32.const 0) (local.get 0x404)) (i64.store offset=0x405 align=1 (i32.const 0) (local.get 0x405)) (i64.store offset=0x406 align=1 (i32.const 0) (local.get 0x406)) (i64.store offset=0x407 align=1 (i32.const 0) (local.get 0x407)) (i64.store offset=0x408 align=1 (i32.const 0) (local.get 0x408)) (i64.store offset=0x409 align=1 (i32.const 0) (local.get 0x409)) (i64.store offset=0x40a align=1 (i32.const 0) (local.get 0x40a)) (i64.store offset=0x40b align=1 (i32.const 0) (local.get 0x40b)) (i64.store offset=0x40c align=1 (i32.const 0) (local.get 0x40c)) (i64.store offset=0x40d align=1 (i32.const 0) (local.get 0x40d)) (i64.store offset=0x40e align=1 (i32.const 0) (local.get 0x40e)) (i64.store offset=0x40f align=1 (i32.const 0) (local.get 0x40f)) (i64.store offset=0x410 align=1 (i32.const 0) (local.get 0x410)) (i64.store offset=0x411 align=1 (i32.const 0) (local.get 0x411)) (i64.store offset=0x412 align=1 (i32.const 0) (local.get 0x412)) (i64.store offset=0x413 align=1 (i32.const 0) (local.get 0x413)) (i64.store offset=0x414 align=1 (i32.const 0) (local.get 0x414)) (i64.store offset=0x415 align=1 (i32.const 0) (local.get 0x415)) (i64.store offset=0x416 align=1 (i32.const 0) (local.get 0x416)) (i64.store offset=0x417 align=1 (i32.const 0) (local.get 0x417)) (i64.store offset=0x418 align=1 (i32.const 0) (local.get 0x418)) (i64.store offset=0x419 align=1 (i32.const 0) (local.get 0x419)) (i64.store offset=0x41a align=1 (i32.const 0) (local.get 0x41a)) (i64.store offset=0x41b align=1 (i32.const 0) (local.get 0x41b)) (i64.store offset=0x41c align=1 (i32.const 0) (local.get 0x41c)) (i64.store offset=0x41d align=1 (i32.const 0) (local.get 0x41d)) (i64.store offset=0x41e align=1 (i32.const 0) (local.get 0x41e)) (i64.store offset=0x41f align=1 (i32.const 0) (local.get 0x41f)) ) ) (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/memory64/stack.wast ================================================ (module (func (export "fac-expr") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.get $n) (local.set $i) (i64.const 1) (local.set $res) (block $done (loop $loop (local.get $i) (i64.const 0) (i64.eq) (if (then (br $done)) (else (local.get $i) (local.get $res) (i64.mul) (local.set $res) (local.get $i) (i64.const 1) (i64.sub) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) local.get $n local.set $i i64.const 1 local.set $res block $done loop $loop local.get $i i64.const 0 i64.eq if $body br $done else $body local.get $i local.get $res i64.mul local.set $res local.get $i i64.const 1 i64.sub local.set $i end $body br $loop end $loop end $done local.get $res ) (func (export "fac-mixed") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (i64.eq (local.get $i) (i64.const 0)) (if (then (br $done)) (else (i64.mul (local.get $i) (local.get $res)) (local.set $res) (i64.sub (local.get $i) (i64.const 1)) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-mixed-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) block $done loop $loop (i64.eq (local.get $i) (i64.const 0)) if br $done else (i64.mul (local.get $i) (local.get $res)) local.set $res (i64.sub (local.get $i) (i64.const 1)) local.set $i end br $loop end end local.get $res ) (global $temp (mut i32) (i32.const 0)) (func $add_one_to_global (result i32) (local i32) (global.set $temp (i32.add (i32.const 1) (global.get $temp))) (global.get $temp) ) (func $add_one_to_global_and_drop (drop (call $add_one_to_global)) ) (func (export "not-quite-a-tree") (result i32) call $add_one_to_global call $add_one_to_global call $add_one_to_global_and_drop i32.add ) ) (assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "not-quite-a-tree") (i32.const 3)) (assert_return (invoke "not-quite-a-tree") (i32.const 9)) ;; Syntax of flat call_indirect (module (type $proc (func)) (table 1 funcref) (func (block i32.const 0 call_indirect) (loop i32.const 0 call_indirect) (if (i32.const 0) (then i32.const 0 call_indirect)) (if (i32.const 0) (then i32.const 0 call_indirect) (else i32.const 0 call_indirect) ) (block i32.const 0 call_indirect (type $proc)) (loop i32.const 0 call_indirect (type $proc)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc))) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)) (else i32.const 0 call_indirect (type $proc)) ) (block i32.const 0 i32.const 0 call_indirect (param i32)) (loop i32.const 0 i32.const 0 call_indirect (param i32)) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32))) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)) (else i32.const 0 i32.const 0 call_indirect (param i32)) ) (block (result i32) i32.const 0 call_indirect (result i32)) (drop) (loop (result i32) i32.const 0 call_indirect (result i32)) (drop) (if (result i32) (i32.const 0) (then i32.const 0 call_indirect (result i32)) (else i32.const 0 call_indirect (result i32)) ) (drop) (block i32.const 0 call_indirect (type $proc) (param) (result)) (loop i32.const 0 call_indirect (type $proc) (param) (result)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (result)) ) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (param) (result)) (else i32.const 0 call_indirect (type $proc) (param) (result) (result)) ) block i32.const 0 call_indirect end loop i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end block i32.const 0 call_indirect (type $proc) end loop i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) else i32.const 0 call_indirect (type $proc) end block i32.const 0 i32.const 0 call_indirect (param i32) end loop i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) else i32.const 0 i32.const 0 call_indirect (param i32) end block (result i32) i32.const 0 call_indirect (result i32) end drop loop (result i32) i32.const 0 call_indirect (result i32) end drop i32.const 0 if (result i32) i32.const 0 call_indirect (result i32) else i32.const 0 call_indirect (result i32) end drop block i32.const 0 call_indirect (type $proc) (param) (result) end loop i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) else i32.const 0 call_indirect (type $proc) (param) (param) (result) (result) end i32.const 0 call_indirect ) ) ================================================ FILE: Test/WebAssembly/memory64/start.wast ================================================ (assert_invalid (module (func) (start 1)) "unknown function" ) (assert_invalid (module (func $main (result i32) (return (i32.const 0))) (start $main) ) "start function" ) (assert_invalid (module (func $main (param $a i32)) (start $main) ) "start function" ) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start $main) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start 2) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 1))) (start 1) ) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 2))) (start $main) ) (module (func $print (import "spectest" "print")) (start $print) ) (assert_trap (module (func $main (unreachable)) (start $main)) "unreachable" ) (assert_malformed (module quote "(module (func $a (unreachable)) (func $b (unreachable)) (start $a) (start $b))") "multiple start sections" ) ================================================ FILE: Test/WebAssembly/memory64/store.wast ================================================ ;; Store operator as the argument of control constructs and instructions (module (memory 1) (func (export "as-block-value") (block (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-loop-value") (loop (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-br-value") (block (br 0 (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-br_if-value") (block (br_if 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-br_if-value-cond") (block (br_if 0 (i32.const 6) (i32.store (i32.const 0) (i32.const 1))) ) ) (func (export "as-br_table-value") (block (br_table 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-return-value") (return (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-if-then") (if (i32.const 1) (then (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-if-else") (if (i32.const 0) (then) (else (i32.store (i32.const 0) (i32.const 1)))) ) ) (assert_return (invoke "as-block-value")) (assert_return (invoke "as-loop-value")) (assert_return (invoke "as-br-value")) (assert_return (invoke "as-br_if-value")) (assert_return (invoke "as-br_if-value-cond")) (assert_return (invoke "as-br_table-value")) (assert_return (invoke "as-return-value")) (assert_return (invoke "as-if-then")) (assert_return (invoke "as-if-else")) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store32 (local.get 0) (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i64.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) ;; store should have no retval (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty (i32.const 0) (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-block (i32.const 0) (i32.const 0) (block (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-block (i32.const 0) (block (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-else (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-return (return (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-return (return (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-select (select (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-select (select (i32.const 0) (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-call (call 1 (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-call (call 1 (i32.const 0) (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-address-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/memory64/switch.wast ================================================ (module ;; Statement switch (func (export "stmt") (param $i i32) (result i32) (local $j i32) (local.set $j (i32.const 100)) (block $switch (block $7 (block $default (block $6 (block $5 (block $4 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (local.get $i) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (local.set $j (i32.sub (i32.const 0) (local.get $i))) (br $switch) ) ;; 4 (br $switch) ) ;; 5 (local.set $j (i32.const 101)) (br $switch) ) ;; 6 (local.set $j (i32.const 101)) ;; fallthrough ) ;; default (local.set $j (i32.const 102)) ) ;; 7 ;; fallthrough ) (return (local.get $j)) ) ;; Expression switch (func (export "expr") (param $i i64) (result i64) (local $j i64) (local.set $j (i64.const 100)) (return (block $switch (result i64) (block $7 (block $default (block $4 (block $5 (block $6 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (i32.wrap_i64 (local.get $i)) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (br $switch (i64.sub (i64.const 0) (local.get $i))) ) ;; 6 (local.set $j (i64.const 101)) ;; fallthrough ) ;; 4 ;; fallthrough ) ;; 5 ;; fallthrough ) ;; default (br $switch (local.get $j)) ) ;; 7 (i64.const -5) ) ) ) ;; Argument switch (func (export "arg") (param $i i32) (result i32) (return (block $2 (result i32) (i32.add (i32.const 10) (block $1 (result i32) (i32.add (i32.const 100) (block $0 (result i32) (i32.add (i32.const 1000) (block $default (result i32) (br_table $0 $1 $2 $default (i32.mul (i32.const 2) (local.get $i)) (i32.and (i32.const 3) (local.get $i)) ) ) ) ) ) ) ) ) ) ) ;; Corner cases (func (export "corner") (result i32) (block (br_table 0 (i32.const 0)) ) (i32.const 1) ) ) (assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) (assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) (assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) (assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) (assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) (assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) (assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) (assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) (assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) (assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) (assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) (assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) (assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) (assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) (assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) (assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) (assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) (assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) (assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) (assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) (assert_return (invoke "corner") (i32.const 1)) (assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") ================================================ FILE: Test/WebAssembly/memory64/table.wast ================================================ ;; Test table section structure (module (table 0 funcref)) (module (table 1 funcref)) (module (table 0 0 funcref)) (module (table 0 1 funcref)) (module (table 1 256 funcref)) (module (table 0 65536 funcref)) (module (table 0 0xffff_ffff funcref)) (assert_invalid (module (table 0 funcref) (table 0 funcref)) "multiple tables") (assert_invalid (module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) "multiple tables") (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table") (assert_invalid (module (table 1 0 funcref)) "size minimum must not be greater than maximum" ) (assert_invalid (module (table 0xffff_ffff 0 funcref)) "size minimum must not be greater than maximum" ) (assert_malformed (module quote "(table 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0x1_0000_0000 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0 0x1_0000_0000 funcref)") "i32 constant out of range" ) ;; Duplicate table identifiers (assert_malformed (module quote "(table $foo 1 funcref)" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(import \"\" \"\" (table $foo 1 funcref))") "duplicate table") ================================================ FILE: Test/WebAssembly/memory64/token.wast ================================================ ;; Test tokenization (assert_malformed (module quote "(func (drop (i32.const0)))") "unknown operator" ) (assert_malformed (module quote "(func br 0drop)") "unknown operator" ) ================================================ FILE: Test/WebAssembly/memory64/traps.wast ================================================ ;; Test that traps are preserved even in instructions which might otherwise ;; be dead-code-eliminated. These functions all perform an operation and ;; discard its return value. (module (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) (drop (i32.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) (drop (i32.div_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) (drop (i64.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) (drop (i64.div_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (module (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) (drop (i32.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) (drop (i32.rem_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) (drop (i64.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) (drop (i64.rem_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (module (func (export "no_dce.i32.trunc_f32_s") (param $x f32) (drop (i32.trunc_f32_s (local.get $x)))) (func (export "no_dce.i32.trunc_f32_u") (param $x f32) (drop (i32.trunc_f32_u (local.get $x)))) (func (export "no_dce.i32.trunc_f64_s") (param $x f64) (drop (i32.trunc_f64_s (local.get $x)))) (func (export "no_dce.i32.trunc_f64_u") (param $x f64) (drop (i32.trunc_f64_u (local.get $x)))) (func (export "no_dce.i64.trunc_f32_s") (param $x f32) (drop (i64.trunc_f32_s (local.get $x)))) (func (export "no_dce.i64.trunc_f32_u") (param $x f32) (drop (i64.trunc_f32_u (local.get $x)))) (func (export "no_dce.i64.trunc_f64_s") (param $x f64) (drop (i64.trunc_f64_s (local.get $x)))) (func (export "no_dce.i64.trunc_f64_u") (param $x f64) (drop (i64.trunc_f64_u (local.get $x)))) ) (assert_trap (invoke "no_dce.i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (module (memory 1) (func (export "no_dce.i32.load") (param $i i32) (drop (i32.load (local.get $i)))) (func (export "no_dce.i32.load16_s") (param $i i32) (drop (i32.load16_s (local.get $i)))) (func (export "no_dce.i32.load16_u") (param $i i32) (drop (i32.load16_u (local.get $i)))) (func (export "no_dce.i32.load8_s") (param $i i32) (drop (i32.load8_s (local.get $i)))) (func (export "no_dce.i32.load8_u") (param $i i32) (drop (i32.load8_u (local.get $i)))) (func (export "no_dce.i64.load") (param $i i32) (drop (i64.load (local.get $i)))) (func (export "no_dce.i64.load32_s") (param $i i32) (drop (i64.load32_s (local.get $i)))) (func (export "no_dce.i64.load32_u") (param $i i32) (drop (i64.load32_u (local.get $i)))) (func (export "no_dce.i64.load16_s") (param $i i32) (drop (i64.load16_s (local.get $i)))) (func (export "no_dce.i64.load16_u") (param $i i32) (drop (i64.load16_u (local.get $i)))) (func (export "no_dce.i64.load8_s") (param $i i32) (drop (i64.load8_s (local.get $i)))) (func (export "no_dce.i64.load8_u") (param $i i32) (drop (i64.load8_u (local.get $i)))) (func (export "no_dce.f32.load") (param $i i32) (drop (f32.load (local.get $i)))) (func (export "no_dce.f64.load") (param $i i32) (drop (f64.load (local.get $i)))) ) (assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/memory64/type.wast ================================================ ;; Test type definitions (module (type (func)) (type $t (func)) (type (func (param i32))) (type (func (param $x i32))) (type (func (result i32))) (type (func (param i32) (result i32))) (type (func (param $x i32) (result i32))) (type (func (param f32 f64))) (type (func (result i64 f32))) (type (func (param i32 i64) (result f32 f64))) (type (func (param f32) (param f64))) (type (func (param $x f32) (param f64))) (type (func (param f32) (param $y f64))) (type (func (param $x f32) (param $y f64))) (type (func (result i64) (result f32))) (type (func (param i32) (param i64) (result f32) (result f64))) (type (func (param $x i32) (param $y i64) (result f32) (result f64))) (type (func (param f32 f64) (param $x i32) (param f64 i32 i32))) (type (func (result i64 i64 f32) (result f32 i32))) (type (func (param i32 i32) (param i64 i32) (result f32 f64) (result f64 i32)) ) (type (func (param) (param $x f32) (param) (param) (param f64 i32) (param))) (type (func (result) (result) (result i64 i64) (result) (result f32) (result)) ) (type (func (param i32 i32) (param i64 i32) (param) (param $x i32) (param) (result) (result f32 f64) (result f64 i32) (result) ) ) ) (assert_malformed (module quote "(type (func (result i32) (param i32)))") "result before parameter" ) (assert_malformed (module quote "(type (func (result $x i32)))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/memory64/unreachable.wast ================================================ ;; Test `unreachable` operator (module ;; Auxiliary definitions (func $dummy) (func $dummy3 (param i32 i32 i32)) (func (export "type-i32") (result i32) (unreachable)) (func (export "type-i64") (result i32) (unreachable)) (func (export "type-f32") (result f64) (unreachable)) (func (export "type-f64") (result f64) (unreachable)) (func (export "as-func-first") (result i32) (unreachable) (i32.const -1) ) (func (export "as-func-mid") (result i32) (call $dummy) (unreachable) (i32.const -1) ) (func (export "as-func-last") (call $dummy) (unreachable) ) (func (export "as-func-value") (result i32) (call $dummy) (unreachable) ) (func (export "as-block-first") (result i32) (block (result i32) (unreachable) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-block-last") (block (nop) (call $dummy) (unreachable)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (unreachable)) ) (func (export "as-block-broke") (result i32) (block (result i32) (call $dummy) (br 0 (i32.const 1)) (unreachable)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (unreachable) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-loop-last") (loop (nop) (call $dummy) (unreachable)) ) (func (export "as-loop-broke") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 1)) (unreachable)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (unreachable))) ) (func (export "as-br_if-cond") (block (br_if 0 (unreachable))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (unreachable) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (unreachable))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-2") (result i32) (block (result i32) (block (result i32) (br_table 0 1 (unreachable) (i32.const 1))) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7) ) ) (func (export "as-br_table-value-and-index") (result i32) (block (result i32) (br_table 0 0 (unreachable)) (i32.const 8)) ) (func (export "as-return-value") (result i64) (return (unreachable)) ) (func (export "as-if-cond") (result i32) (if (result i32) (unreachable) (then (i32.const 0)) (else (i32.const 1))) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (unreachable)) (else (local.get 1))) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (unreachable))) ) (func (export "as-if-then-no-else") (param i32 i32) (result i32) (if (local.get 0) (then (unreachable))) (local.get 1) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (unreachable) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (unreachable)) ) (func (export "as-call-first") (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call-last") (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) ) (type $sig (func (param i32 i32 i32))) (table funcref (elem $dummy3)) (func (export "as-call_indirect-func") (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3) ) ) (func (export "as-call_indirect-last") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable) ) ) (func (export "as-local.set-value") (local f32) (local.set 0 (unreachable)) ) (func (export "as-local.tee-value") (result f32) (local f32) (local.tee 0 (unreachable)) ) (global $a (mut f32) (f32.const 0)) (func (export "as-global.set-value") (result f32) (global.set $a (unreachable)) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (unreachable)) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (unreachable)) ) (func (export "as-store-address") (f64.store (unreachable) (f64.const 7)) ) (func (export "as-store-value") (i64.store (i32.const 2) (unreachable)) ) (func (export "as-storeN-address") (i32.store8 (unreachable) (i32.const 7)) ) (func (export "as-storeN-value") (i64.store16 (i32.const 2) (unreachable)) ) (func (export "as-unary-operand") (result f32) (f32.neg (unreachable)) ) (func (export "as-binary-left") (result i32) (i32.add (unreachable) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (unreachable)) ) (func (export "as-test-operand") (result i32) (i32.eqz (unreachable)) ) (func (export "as-compare-left") (result i32) (f64.le (unreachable) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (unreachable)) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (unreachable)) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (unreachable)) ) ) (assert_trap (invoke "type-i32") "unreachable") (assert_trap (invoke "type-i64") "unreachable") (assert_trap (invoke "type-f32") "unreachable") (assert_trap (invoke "type-f64") "unreachable") (assert_trap (invoke "as-func-first") "unreachable") (assert_trap (invoke "as-func-mid") "unreachable") (assert_trap (invoke "as-func-last") "unreachable") (assert_trap (invoke "as-func-value") "unreachable") (assert_trap (invoke "as-block-first") "unreachable") (assert_trap (invoke "as-block-mid") "unreachable") (assert_trap (invoke "as-block-last") "unreachable") (assert_trap (invoke "as-block-value") "unreachable") (assert_return (invoke "as-block-broke") (i32.const 1)) (assert_trap (invoke "as-loop-first") "unreachable") (assert_trap (invoke "as-loop-mid") "unreachable") (assert_trap (invoke "as-loop-last") "unreachable") (assert_return (invoke "as-loop-broke") (i32.const 1)) (assert_trap (invoke "as-br-value") "unreachable") (assert_trap (invoke "as-br_if-cond") "unreachable") (assert_trap (invoke "as-br_if-value") "unreachable") (assert_trap (invoke "as-br_if-value-cond") "unreachable") (assert_trap (invoke "as-br_table-index") "unreachable") (assert_trap (invoke "as-br_table-value") "unreachable") (assert_trap (invoke "as-br_table-value-2") "unreachable") (assert_trap (invoke "as-br_table-value-index") "unreachable") (assert_trap (invoke "as-br_table-value-and-index") "unreachable") (assert_trap (invoke "as-return-value") "unreachable") (assert_trap (invoke "as-if-cond") "unreachable") (assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-then-no-else" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then-no-else" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-cond") "unreachable") (assert_trap (invoke "as-call-first") "unreachable") (assert_trap (invoke "as-call-mid") "unreachable") (assert_trap (invoke "as-call-last") "unreachable") (assert_trap (invoke "as-call_indirect-func") "unreachable") (assert_trap (invoke "as-call_indirect-first") "unreachable") (assert_trap (invoke "as-call_indirect-mid") "unreachable") (assert_trap (invoke "as-call_indirect-last") "unreachable") (assert_trap (invoke "as-local.set-value") "unreachable") (assert_trap (invoke "as-local.tee-value") "unreachable") (assert_trap (invoke "as-global.set-value") "unreachable") (assert_trap (invoke "as-load-address") "unreachable") (assert_trap (invoke "as-loadN-address") "unreachable") (assert_trap (invoke "as-store-address") "unreachable") (assert_trap (invoke "as-store-value") "unreachable") (assert_trap (invoke "as-storeN-address") "unreachable") (assert_trap (invoke "as-storeN-value") "unreachable") (assert_trap (invoke "as-unary-operand") "unreachable") (assert_trap (invoke "as-binary-left") "unreachable") (assert_trap (invoke "as-binary-right") "unreachable") (assert_trap (invoke "as-test-operand") "unreachable") (assert_trap (invoke "as-compare-left") "unreachable") (assert_trap (invoke "as-compare-right") "unreachable") (assert_trap (invoke "as-convert-operand") "unreachable") (assert_trap (invoke "as-memory.grow-size") "unreachable") ================================================ FILE: Test/WebAssembly/memory64/unreached-invalid.wast ================================================ ;; Failures in unreachable code. (assert_invalid (module (func $local-index (unreachable) (drop (local.get 0)))) "unknown local" ) (assert_invalid (module (func $global-index (unreachable) (drop (global.get 0)))) "unknown global" ) (assert_invalid (module (func $func-index (unreachable) (call 1))) "unknown function" ) (assert_invalid (module (func $label-index (unreachable) (br 1))) "unknown label" ) (assert_invalid (module (func $type-num-vs-num (unreachable) (drop (i64.eqz (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (func $type-poly-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-poly-transitive-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-const (unreachable) (i32.const 0))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result (unreachable) (i32.eqz))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result2 (unreachable) (i32.const 0) (i32.add) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly0 (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly2 (unreachable) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-break (block (br 0) (block (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-break (block (br 0) (drop (i32.eqz (f32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-break (block (br 0) (block (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-break (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-break (result i32) (block (result i32) (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-break (block (loop (br 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-break (result i32) (loop (result i32) (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-break (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-return (return) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-return (return) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-return (return) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-return (return) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-return (block (return) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-return (result i32) (block (result i32) (i32.const 1) (return (i32.const 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-return (block (loop (return) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-return (result i32) (loop (result i32) (return (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-return (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-unreachable (unreachable) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-loop-after-unreachable (unreachable) (loop (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-i32-loop-after-unreachable (unreachable) (loop (result i32) (i32.eqz (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-unreachable (unreachable) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-unreachable (unreachable) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-unreachable (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-unreachable (block (unreachable) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-unreachable (result i32) (block (result i32) (i32.const 1) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-unreachable (block (loop (unreachable) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) (loop (result i32) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-unreachable (unreachable) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-unreachable (result i32) (unreachable) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-if-after-unreachable (unreachable) (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable (unreachable) (if (i32.const 0) (then (nop)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable-if (if (i32.const 0) (then (unreachable)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-nested-unreachable (block (block (unreachable)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-nested-unreachable (result i32) (block (result i32) (i32.const 1) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-nested-unreachable (block (loop (block (unreachable)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-nested-unreachable (result i32) (loop (result i32) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-nested-unreachable (block (unreachable)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-nested-unreachable (result i32) (block (unreachable)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-infinite-loop (block (loop (br 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) (block (result i32) (i32.const 1) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-infinite-loop (block (loop (loop (br 0)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) (loop (result i32) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-infinite-loop (loop (br 0)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) (loop (br 0)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-void-in-dead-body (if (i32.const 0) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (block (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (block (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (loop (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (loop (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-br-second-num-vs-num (result i32) (block (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-cond-num-vs-num-after-unreachable (block (br_if 0 (unreachable) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-void-after-unreachable (result i32) (block (result i32) (block (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-num-after-unreachable (result i32) (block (result i32) (block (result f32) (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) (drop) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num2-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_if 0 (i32.const 0) (i32.const 0)) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-num-vs-num-after-unreachable (block (br_table 0 (unreachable) (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_table 0 (f32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-label-void-after-unreachable (block (block (result f32) (unreachable) (br_table 0 1 0 (i32.const 1)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-void (block (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) (block (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-void (block (i32.const 3) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-void-vs-num (result i32) (block (result i32) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-num (result i32) (block (result i32) (i64.const 0) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-void (block (block (i32.const 3) (block (br 2)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-void-vs-num (result i32) (block (result i32) (block (block (br 2 (i32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-num (result i32) (block (result i32) (block (result i64) (i64.const 0) (block (br 2 (i32.const 0)))) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-void (block (i32.const 3) (block (return))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-void-vs-num (result i32) (block (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-void (loop (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) (loop (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) (loop (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $tee-local-unreachable-value (local i32) (local.tee 0 (unreachable)) )) "type mismatch" ) (assert_invalid (module (func $br_if-unreachable (result i32) (block (result i32) (block (br_if 1 (unreachable) (i32.const 0)) ) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-after-unreachable (result i64) unreachable br_if 0 i64.extend_i32_u ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/memory64/unwind.wast ================================================ ;; Test that control-flow transfer unwinds stack and it can be anything after. (module (func (export "func-unwind-by-unreachable") (i32.const 3) (i64.const 1) (unreachable) ) (func (export "func-unwind-by-br") (i32.const 3) (i64.const 1) (br 0) ) (func (export "func-unwind-by-br-value") (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9)) ) (func (export "func-unwind-by-br_if") (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1)))) ) (func (export "func-unwind-by-br_if-value") (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) (func (export "func-unwind-by-br_table") (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0)) ) (func (export "func-unwind-by-br_table-value") (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) (func (export "func-unwind-by-return") (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9)) ) (func (export "block-unwind-by-unreachable") (block (i32.const 3) (i64.const 1) (unreachable)) ) (func (export "block-unwind-by-br") (result i32) (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) ) (func (export "block-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) ) (func (export "block-unwind-by-br_if") (result i32) (block (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1))))) (i32.const 9) ) (func (export "block-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) ) (func (export "block-unwind-by-br_table") (result i32) (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) ) (func (export "block-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9))) ) (func (export "block-nested-unwind-by-unreachable") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (unreachable))) ) (func (export "block-nested-unwind-by-br") (result i32) (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9))) ) ) (func (export "block-nested-unwind-by-br_if") (result i32) (block (i32.const 3) (block (i64.const 1) (drop (br_if 1 (i32.const 1)))) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (drop (drop (br_if 1 (i32.const 9) (i32.const 1))))) ) ) (func (export "block-nested-unwind-by-br_table") (result i32) (block (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) (drop) ) (i32.const 9) ) (func (export "block-nested-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) ) ) (func (export "block-nested-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (return (i32.const 9))) ) ) (func (export "unary-after-unreachable") (result i32) (f32.const 0) (unreachable) (i64.eqz) ) (func (export "unary-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) ) (func (export "unary-after-br_if") (result i32) (block (result i32) (i64.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eqz) ) ) (func (export "unary-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) ) ) (func (export "unary-after-return") (result i32) (f32.const 0) (return (i32.const 9)) (i64.eqz) ) (func (export "binary-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (unreachable) (i64.eq) ) (func (export "binary-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq) ) ) (func (export "binary-after-br_if") (result i32) (block (result i32) (i64.const 0) (i64.const 1) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eq) ) ) (func (export "binary-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) (i64.eq) ) ) (func (export "binary-after-return") (result i32) (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) ) (func (export "select-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) ) (func (export "select-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) ) ) (func (export "select-after-br_if") (result i32) (block (result i32) (i32.const 0) (i32.const 1) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (select) ) ) (func (export "select-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br_table 0 (i32.const 9) (i32.const 0)) (select) ) ) (func (export "select-after-return") (result i32) (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) ) (func (export "block-value-after-unreachable") (result i32) (block (result i32) (f32.const 0) (unreachable)) ) (func (export "block-value-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9))) ) (func (export "block-value-after-br_if") (result i32) (block (result i32) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) ) ) (func (export "block-value-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-value-after-return") (result i32) (block (result i32) (f32.const 0) (return (i32.const 9))) ) (func (export "loop-value-after-unreachable") (result i32) (loop (result i32) (f32.const 0) (unreachable)) ) (func (export "loop-value-after-br") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br 1 (i32.const 9)))) ) (func (export "loop-value-after-br_if") (result i32) (block (result i32) (loop (result i32) (i32.const 0) (drop (br_if 1 (i32.const 9) (i32.const 1))) ) ) ) (func (export "loop-value-after-br_table") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0)) ) ) ) (func (export "loop-value-after-return") (result i32) (loop (result i32) (f32.const 0) (return (i32.const 9))) ) ) (assert_trap (invoke "func-unwind-by-unreachable") "unreachable") (assert_return (invoke "func-unwind-by-br")) (assert_return (invoke "func-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_if")) (assert_return (invoke "func-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_table")) (assert_return (invoke "func-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) (assert_trap (invoke "unary-after-unreachable") "unreachable") (assert_return (invoke "unary-after-br") (i32.const 9)) (assert_return (invoke "unary-after-br_if") (i32.const 9)) (assert_return (invoke "unary-after-br_table") (i32.const 9)) (assert_return (invoke "unary-after-return") (i32.const 9)) (assert_trap (invoke "binary-after-unreachable") "unreachable") (assert_return (invoke "binary-after-br") (i32.const 9)) (assert_return (invoke "binary-after-br_if") (i32.const 9)) (assert_return (invoke "binary-after-br_table") (i32.const 9)) (assert_return (invoke "binary-after-return") (i32.const 9)) (assert_trap (invoke "select-after-unreachable") "unreachable") (assert_return (invoke "select-after-br") (i32.const 9)) (assert_return (invoke "select-after-br_if") (i32.const 9)) (assert_return (invoke "select-after-br_table") (i32.const 9)) (assert_return (invoke "select-after-return") (i32.const 9)) (assert_trap (invoke "block-value-after-unreachable") "unreachable") (assert_return (invoke "block-value-after-br") (i32.const 9)) (assert_return (invoke "block-value-after-br_if") (i32.const 9)) (assert_return (invoke "block-value-after-br_table") (i32.const 9)) (assert_return (invoke "block-value-after-return") (i32.const 9)) (assert_trap (invoke "loop-value-after-unreachable") "unreachable") (assert_return (invoke "loop-value-after-br") (i32.const 9)) (assert_return (invoke "loop-value-after-br_if") (i32.const 9)) (assert_return (invoke "loop-value-after-br_table") (i32.const 9)) (assert_return (invoke "loop-value-after-return") (i32.const 9)) ================================================ FILE: Test/WebAssembly/memory64/utf8-custom-section-id.wast ================================================ ;;;;;; Invalid UTF-8 custom section names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\80" ;; "\80" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\8f" ;; "\8f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\90" ;; "\90" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\9f" ;; "\9f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\a0" ;; "\a0" ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\bf" ;; "\bf" ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\c2\80\80" ;; "\c2\80\80" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\c2" ;; "\c2" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\2e" ;; "\c2." ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\80" ;; "\c0\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\bf" ;; "\c0\bf" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\80" ;; "\c1\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\bf" ;; "\c1\bf" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\00" ;; "\c2\00" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\7f" ;; "\c2\7f" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\c0" ;; "\c2\c0" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\fd" ;; "\c2\fd" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\00" ;; "\df\00" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\7f" ;; "\df\7f" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\c0" ;; "\df\c0" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\fd" ;; "\df\fd" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\e1\80\80\80" ;; "\e1\80\80\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\80" ;; "\e1\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\2e" ;; "\e1\80." ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\e1" ;; "\e1" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\2e" ;; "\e1." ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\00\a0" ;; "\e0\00\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\7f\a0" ;; "\e0\7f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\80" ;; "\e0\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\a0" ;; "\e0\80\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\a0" ;; "\e0\9f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\bf" ;; "\e0\9f\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\c0\a0" ;; "\e0\c0\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\fd\a0" ;; "\e0\fd\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\00\80" ;; "\e1\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\7f\80" ;; "\e1\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\c0\80" ;; "\e1\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\fd\80" ;; "\e1\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\00\80" ;; "\ec\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\7f\80" ;; "\ec\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\c0\80" ;; "\ec\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\fd\80" ;; "\ec\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\00\80" ;; "\ed\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\7f\80" ;; "\ed\7f\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\80" ;; "\ed\a0\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\bf" ;; "\ed\a0\bf" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\80" ;; "\ed\bf\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\bf" ;; "\ed\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\c0\80" ;; "\ed\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\fd\80" ;; "\ed\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\00\80" ;; "\ee\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\7f\80" ;; "\ee\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\c0\80" ;; "\ee\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\fd\80" ;; "\ee\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\00\80" ;; "\ef\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\7f\80" ;; "\ef\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\c0\80" ;; "\ef\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\fd\80" ;; "\ef\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\00" ;; "\e0\a0\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\7f" ;; "\e0\a0\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\c0" ;; "\e0\a0\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\fd" ;; "\e0\a0\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\00" ;; "\e1\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\7f" ;; "\e1\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\c0" ;; "\e1\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\fd" ;; "\e1\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\00" ;; "\ec\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\7f" ;; "\ec\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\c0" ;; "\ec\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\fd" ;; "\ec\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\00" ;; "\ed\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\7f" ;; "\ed\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\c0" ;; "\ed\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\fd" ;; "\ed\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\00" ;; "\ee\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\7f" ;; "\ee\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\c0" ;; "\ee\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\fd" ;; "\ee\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\00" ;; "\ef\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\7f" ;; "\ef\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\c0" ;; "\ef\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\fd" ;; "\ef\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\80" ;; "\f1\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\23" ;; "\f1\80\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\80" ;; "\f1\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\23" ;; "\f1\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f1" ;; "\f1" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\23" ;; "\f1#" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\00\90\90" ;; "\f0\00\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\7f\90\90" ;; "\f0\7f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\80\80" ;; "\f0\80\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\90\90" ;; "\f0\80\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\90\90" ;; "\f0\8f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\c0\90\90" ;; "\f0\c0\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\fd\90\90" ;; "\f0\fd\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\00\80\80" ;; "\f1\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\7f\80\80" ;; "\f1\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\c0\80\80" ;; "\f1\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\fd\80\80" ;; "\f1\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\00\80\80" ;; "\f3\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\7f\80\80" ;; "\f3\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\c0\80\80" ;; "\f3\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\fd\80\80" ;; "\f3\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\00\80\80" ;; "\f4\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\7f\80\80" ;; "\f4\7f\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\90\80\80" ;; "\f4\90\80\80" ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\bf\80\80" ;; "\f4\bf\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\c0\80\80" ;; "\f4\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\fd\80\80" ;; "\f4\fd\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f5\80\80\80" ;; "\f5\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\80\80\80" ;; "\f7\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\00\90" ;; "\f0\90\00\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\7f\90" ;; "\f0\90\7f\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\c0\90" ;; "\f0\90\c0\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\fd\90" ;; "\f0\90\fd\90" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\00\80" ;; "\f1\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\7f\80" ;; "\f1\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\c0\80" ;; "\f1\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\fd\80" ;; "\f1\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\00\80" ;; "\f3\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\7f\80" ;; "\f3\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\c0\80" ;; "\f3\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\fd\80" ;; "\f3\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\00\80" ;; "\f4\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\7f\80" ;; "\f4\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\c0\80" ;; "\f4\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\fd\80" ;; "\f4\80\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\00" ;; "\f0\90\90\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\7f" ;; "\f0\90\90\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\c0" ;; "\f0\90\90\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\fd" ;; "\f0\90\90\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\00" ;; "\f1\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\7f" ;; "\f1\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\c0" ;; "\f1\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\fd" ;; "\f1\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\00" ;; "\f3\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\7f" ;; "\f3\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\c0" ;; "\f3\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\fd" ;; "\f3\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\00" ;; "\f4\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\7f" ;; "\f4\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\c0" ;; "\f4\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\fd" ;; "\f4\80\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\80" ;; "\f8\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\80" ;; "\f8\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\23" ;; "\f8\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\80" ;; "\f8\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\23" ;; "\f8\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f8" ;; "\f8" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\23" ;; "\f8#" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\08" ;; custom section "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\80" ;; "\fc\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\80" ;; "\fc\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\23" ;; "\fc\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\80" ;; "\fc\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\23" ;; "\fc\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fc" ;; "\fc" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\23" ;; "\fc#" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fe" ;; "\fe" ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\ff" ;; "\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fe\ff" ;; "\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\00\00\fe\ff" ;; "\00\00\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\ff\fe" ;; "\ff\fe" ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\ff\fe\00\00" ;; "\ff\fe\00\00" ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/memory64/utf8-import-field.wast ================================================ ;;;;;; Invalid UTF-8 import field names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\80" ;; "\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\8f" ;; "\8f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\90" ;; "\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\9f" ;; "\9f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\a0" ;; "\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\bf" ;; "\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\c2\80\80" ;; "\c2\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\c2" ;; "\c2" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\2e" ;; "\c2." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\80" ;; "\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\bf" ;; "\c0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\80" ;; "\c1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\bf" ;; "\c1\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\00" ;; "\c2\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\7f" ;; "\c2\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\c0" ;; "\c2\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\fd" ;; "\c2\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\00" ;; "\df\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\7f" ;; "\df\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\c0" ;; "\df\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\fd" ;; "\df\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\e1\80\80\80" ;; "\e1\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\80" ;; "\e1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\2e" ;; "\e1\80." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\e1" ;; "\e1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\2e" ;; "\e1." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\00\a0" ;; "\e0\00\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\7f\a0" ;; "\e0\7f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\80" ;; "\e0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\a0" ;; "\e0\80\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\a0" ;; "\e0\9f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\bf" ;; "\e0\9f\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\c0\a0" ;; "\e0\c0\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\fd\a0" ;; "\e0\fd\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\00\80" ;; "\e1\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\7f\80" ;; "\e1\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\c0\80" ;; "\e1\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\fd\80" ;; "\e1\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\00\80" ;; "\ec\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\7f\80" ;; "\ec\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\c0\80" ;; "\ec\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\fd\80" ;; "\ec\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\00\80" ;; "\ed\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\7f\80" ;; "\ed\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\80" ;; "\ed\a0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\bf" ;; "\ed\a0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\80" ;; "\ed\bf\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\bf" ;; "\ed\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\c0\80" ;; "\ed\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\fd\80" ;; "\ed\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\00\80" ;; "\ee\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\7f\80" ;; "\ee\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\c0\80" ;; "\ee\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\fd\80" ;; "\ee\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\00\80" ;; "\ef\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\7f\80" ;; "\ef\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\c0\80" ;; "\ef\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\fd\80" ;; "\ef\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\00" ;; "\e0\a0\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\7f" ;; "\e0\a0\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\c0" ;; "\e0\a0\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\fd" ;; "\e0\a0\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\00" ;; "\e1\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\7f" ;; "\e1\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\c0" ;; "\e1\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\fd" ;; "\e1\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\00" ;; "\ec\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\7f" ;; "\ec\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\c0" ;; "\ec\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\fd" ;; "\ec\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\00" ;; "\ed\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\7f" ;; "\ed\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\c0" ;; "\ed\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\fd" ;; "\ed\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\00" ;; "\ee\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\7f" ;; "\ee\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\c0" ;; "\ee\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\fd" ;; "\ee\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\00" ;; "\ef\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\7f" ;; "\ef\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\c0" ;; "\ef\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\fd" ;; "\ef\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\80" ;; "\f1\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\23" ;; "\f1\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\80" ;; "\f1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\23" ;; "\f1\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f1" ;; "\f1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\23" ;; "\f1#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\00\90\90" ;; "\f0\00\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\80\80" ;; "\f0\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\90\90" ;; "\f0\80\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\00\80\80" ;; "\f1\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\00\80\80" ;; "\f3\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\00\80\80" ;; "\f4\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\90\80\80" ;; "\f4\90\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f5\80\80\80" ;; "\f5\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\80\80\80" ;; "\f7\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\00\90" ;; "\f0\90\00\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\00\80" ;; "\f1\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\00\80" ;; "\f3\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\00\80" ;; "\f4\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\00" ;; "\f0\90\90\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\00" ;; "\f1\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\00" ;; "\f3\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\00" ;; "\f4\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\80" ;; "\f8\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\80" ;; "\f8\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\23" ;; "\f8\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\80" ;; "\f8\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\23" ;; "\f8\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f8" ;; "\f8" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\23" ;; "\f8#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\80" ;; "\fc\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\80" ;; "\fc\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\23" ;; "\fc\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\80" ;; "\fc\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\23" ;; "\fc\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fc" ;; "\fc" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\23" ;; "\fc#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fe" ;; "\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\ff" ;; "\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fe\ff" ;; "\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\ff\fe" ;; "\ff\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/memory64/utf8-import-module.wast ================================================ ;;;;;; Invalid UTF-8 import module names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\80" ;; "\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\8f" ;; "\8f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\90" ;; "\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\9f" ;; "\9f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\a0" ;; "\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\bf" ;; "\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\c2\80\80" ;; "\c2\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\c2" ;; "\c2" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\2e" ;; "\c2." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\80" ;; "\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\bf" ;; "\c0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\80" ;; "\c1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\bf" ;; "\c1\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\00" ;; "\c2\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\7f" ;; "\c2\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\c0" ;; "\c2\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\fd" ;; "\c2\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\00" ;; "\df\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\7f" ;; "\df\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\c0" ;; "\df\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\fd" ;; "\df\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\e1\80\80\80" ;; "\e1\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\80" ;; "\e1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\2e" ;; "\e1\80." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\e1" ;; "\e1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\2e" ;; "\e1." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\00\a0" ;; "\e0\00\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\7f\a0" ;; "\e0\7f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\80" ;; "\e0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\a0" ;; "\e0\80\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\a0" ;; "\e0\9f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\bf" ;; "\e0\9f\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\c0\a0" ;; "\e0\c0\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\fd\a0" ;; "\e0\fd\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\00\80" ;; "\e1\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\7f\80" ;; "\e1\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\c0\80" ;; "\e1\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\fd\80" ;; "\e1\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\00\80" ;; "\ec\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\7f\80" ;; "\ec\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\c0\80" ;; "\ec\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\fd\80" ;; "\ec\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\00\80" ;; "\ed\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\7f\80" ;; "\ed\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\80" ;; "\ed\a0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\bf" ;; "\ed\a0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\80" ;; "\ed\bf\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\bf" ;; "\ed\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\c0\80" ;; "\ed\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\fd\80" ;; "\ed\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\00\80" ;; "\ee\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\7f\80" ;; "\ee\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\c0\80" ;; "\ee\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\fd\80" ;; "\ee\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\00\80" ;; "\ef\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\7f\80" ;; "\ef\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\c0\80" ;; "\ef\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\fd\80" ;; "\ef\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\00" ;; "\e0\a0\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\7f" ;; "\e0\a0\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\c0" ;; "\e0\a0\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\fd" ;; "\e0\a0\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\00" ;; "\e1\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\7f" ;; "\e1\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\c0" ;; "\e1\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\fd" ;; "\e1\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\00" ;; "\ec\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\7f" ;; "\ec\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\c0" ;; "\ec\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\fd" ;; "\ec\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\00" ;; "\ed\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\7f" ;; "\ed\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\c0" ;; "\ed\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\fd" ;; "\ed\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\00" ;; "\ee\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\7f" ;; "\ee\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\c0" ;; "\ee\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\fd" ;; "\ee\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\00" ;; "\ef\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\7f" ;; "\ef\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\c0" ;; "\ef\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\fd" ;; "\ef\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\80" ;; "\f1\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\23" ;; "\f1\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\80" ;; "\f1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\23" ;; "\f1\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f1" ;; "\f1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\23" ;; "\f1#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\00\90\90" ;; "\f0\00\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\80\80" ;; "\f0\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\90\90" ;; "\f0\80\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\00\80\80" ;; "\f1\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\00\80\80" ;; "\f3\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\00\80\80" ;; "\f4\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\90\80\80" ;; "\f4\90\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f5\80\80\80" ;; "\f5\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\80\80\80" ;; "\f7\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\00\90" ;; "\f0\90\00\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\00\80" ;; "\f1\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\00\80" ;; "\f3\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\00\80" ;; "\f4\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\00" ;; "\f0\90\90\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\00" ;; "\f1\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\00" ;; "\f3\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\00" ;; "\f4\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\80" ;; "\f8\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\80" ;; "\f8\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\23" ;; "\f8\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\80" ;; "\f8\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\23" ;; "\f8\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f8" ;; "\f8" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\23" ;; "\f8#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\80" ;; "\fc\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\80" ;; "\fc\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\23" ;; "\fc\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\80" ;; "\fc\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\23" ;; "\fc\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fc" ;; "\fc" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\23" ;; "\fc#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fe" ;; "\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\ff" ;; "\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fe\ff" ;; "\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\ff\fe" ;; "\ff\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/memory64/utf8-invalid-encoding.wast ================================================ (assert_malformed (module quote "(func (export \"\\00\\00\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\8f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\9f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\00\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\7f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\c0\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\fd\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\00\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\7f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\00\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\7f\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\c0\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\fd\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\c0\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\fd\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\90\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\bf\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f5\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fb\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fd\\bf\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\\00\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\"))") "malformed UTF-8 encoding") ================================================ FILE: Test/WebAssembly/multi-memory/address.wast ================================================ ;; Load i32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i32) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i32) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i32) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i32) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i32) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i32) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") (assert_malformed (module quote "(memory 1)" "(func (drop (i32.load offset=4294967296 (i32.const 0))))" ) "i32 constant" ) ;; Load i64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i32) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i32) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i32) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i32) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i32) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i32) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i32) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i32) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i32) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i32) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i32) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i32) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i32) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i32) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i32) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i32) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i32) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i32) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i32) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i32) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i32) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i32) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i32) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i32) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i32) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i32) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i32) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i32) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i32) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i32) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/multi-memory/align.wast ================================================ ;; Test alignment annotation rules (module (memory 0) (func (drop (i32.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_s align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_u align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load align=8 (i32.const 0))))) (module (memory 0) (func (drop (f32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (f64.load align=8 (i32.const 0))))) (module (memory 0) (func (i32.store8 align=1 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store16 align=2 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store align=4 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i64.store8 align=1 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store16 align=2 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store32 align=4 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store align=8 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (f32.store align=4 (i32.const 0) (f32.const 1.0)))) (module (memory 0) (func (f64.store align=8 (i32.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store8 align=2 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store16 align=4 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store align=8 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store8 align=2 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store16 align=4 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store32 align=8 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f32.store align=8 (i32.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f64.store align=16 (i32.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i32.const 0) (local.get 1)) (local.set 2 (f32.load (i32.const 0))) (br $4) ) ;; default (f32.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i32.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i32.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i32.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i32.const 0) (local.get 1)) (local.set 2 (f64.load (i32.const 0))) (br $8) ) ;; default (f64.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i32.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i32.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i32.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i32.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i32.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i32.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i32.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i32.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i32.const 0) (local.get 2)) (local.set 3 (i32.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i32.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i32.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i32.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i32.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i32.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i32.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i32.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i32.const 0) (local.get 2)) (local.set 3 (i64.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i32.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory 1) (func (export "store") (param i32 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i32) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i32.const 65532)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/multi-memory/binary-leb128.wast ================================================ ;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\06\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Memory index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\09\01" ;; Element section with 1 entry "\02" ;; Element with explicit table index "\80\00" ;; Table index 0, encoded with 2 bytes "\41\00\0b\00\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\8a\00" ;; section size 10, encoded with 2 bytes "\01" ;; name byte count "1" ;; name "23456789" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0b" ;; section size "\88\00" ;; name byte count 8, encoded with 2 bytes "12345678" ;; name "9" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\82\00" ;; num params 2, encoded with 2 bytes "\7f\7e" ;; param type "\01" ;; num results "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\00" ;; num results 1, encoded with 2 bytes "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\88\00" ;; module name length 8, encoded with 2 bytes "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\00" ;; entity name length 9, encoded with 2 bytes "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\00" ;; import signature index, encoded with 2 bytes ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\00" ;; function 0 signature index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\82\00" ;; string length 2, encoded with 2 bytes "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\00" ;; export func index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\00" ;; num functions, encoded with 2 bytes "\02\00\0b" ;; function body ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\0a\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\00" ;; max 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0b\01" ;; Data section with 1 entry "\80\80\80\80\80\00" ;; Memory index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0b\01" ;; Element section with 1 entry "\80\80\80\80\80\00" ;; Table index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\80\00" ;; section size 3 with one byte too many "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0A" ;; section size "\83\80\80\80\80\00" ;; name byte count 3 with one byte too many "123" ;; name "4" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0c\01" ;; type section "\60" ;; func type "\82\80\80\80\80\00" ;; num params 2 with one byte too many "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\80\00" ;; num result 1 with one byte too many "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\88\80\80\80\80\00" ;; module name length 8 with one byte too many "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\80\00" ;; entity name length 9 with one byte too many "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\80\00" ;; import signature index 0 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\80\80\80\80\00" ;; function 0 signature index with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\82\80\80\80\80\00" ;; string length 2 with one byte too many "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\80\00" ;; export func index 0 with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\80\80\80\80\00" ;; num functions 1 with one byte too many "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\10" ;; max 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\40" ;; max 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0a\01" ;; Data section with 1 entry "\80\80\80\80\10" ;; Memory index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0a\01" ;; Element section with 1 entry "\80\80\80\80\10" ;; Table index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\10" ;; section size 3 with unused bits set "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\09" ;; section size "\83\80\80\80\40" ;; name byte count 3 with unused bits set "123" ;; name "4" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\82\80\80\80\10" ;; num params 2 with unused bits set "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\40" ;; num result 1 with unused bits set "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\88\80\80\80\10" ;; module name length 8 with unused bits set "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\40" ;; entity name length 9 with unused bits set "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\10" ;; import signature index 0 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\06\01" ;; function section "\80\80\80\80\10" ;; function 0 signature index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\82\80\80\80\10" ;; string length 2 with unused bits set "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\10" ;; export func index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\08" ;; section size "\81\80\80\80\10" ;; num functions 1 with unused bits set "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\1b\01\19" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\80\00" ;; i32_trunc_sat_f32_s with 2 bytes "\00" ;; unreachable "\fc\81\80\00" ;; i32_trunc_sat_f32_u with 3 bytes "\00" ;; unreachable "\fc\86\80\80\00" ;; i64_trunc_sat_f64_s with 4 bytes "\00" ;; unreachable "\fc\87\80\80\80\00" ;; i64_trunc_sat_f64_u with 5 bytes "\00" ;; unreachable "\0b" ;; end ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\0d\01\0b" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\87\80\80\80\80\00" ;; i64_trunc_sat_f64_u with 6 bytes "\00" ;; unreachable "\0b" ;; end ) "integer representation too long" ) ================================================ FILE: Test/WebAssembly/multi-memory/binary.wast ================================================ (module binary "\00asm\01\00\00\00") (module binary "\00asm" "\01\00\00\00") (module $M1 binary "\00asm\01\00\00\00") (module $M2 binary "\00asm" "\01\00\00\00") (assert_malformed (module binary "") "unexpected end") (assert_malformed (module binary "\01") "unexpected end") (assert_malformed (module binary "\00as") "unexpected end") (assert_malformed (module binary "asm\00") "magic header not detected") (assert_malformed (module binary "msa\00") "magic header not detected") (assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") (assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") (assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") (assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") ;; 8-byte endian-reversed. (assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") ;; Middle-endian byte orderings. (assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") (assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") ;; Upper-cased. (assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") ;; EBCDIC-encoded magic. (assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") ;; Leading UTF-8 BOM. (assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") ;; Malformed binary version. (assert_malformed (module binary "\00asm") "unexpected end") (assert_malformed (module binary "\00asm\01") "unexpected end") (assert_malformed (module binary "\00asm\01\00\00") "unexpected end") (assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") ;; Invalid section id. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0d\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\7f\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\80\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\81\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\ff\00\01\00") "malformed section id") ;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\06\01" ;; Data section with 1 entry "\00" ;; Memory index 0 "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\06\01" ;; Element section with 1 entry "\00" ;; Table index 0 "\41\00\0b\00" ;; (i32.const 0) with no elements ) ;; Data segment memory index can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Memory index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) ;; Element segment table index can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\09\01" ;; Element section with 1 entry "\02\80\00" ;; Table index 0, encoded with 2 bytes "\41\00\0b\00\00" ;; (i32.const 0) with no elements ) ;; Type section with signed LEB128 encoded type (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01" ;; Type section id "\05" ;; Type section length "\01" ;; Types vector length "\e0\7f" ;; Malformed functype, -0x20 in signed LEB128 encoding "\00\00" ) "integer representation too long" ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) ;; Local number is unsigned 32 bit (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\80\80\80\80\10\7f" ;; 0x100000000 i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "integer too large" ) ;; Local number is unsigned 32 bit (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\80\80\80\80\10\7f" ;; 0x100000000 i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "integer too large" ) ;; No more than 2^32-1 locals. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\ff\ff\ff\ff\0f\7f" ;; 0xFFFFFFFF i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "too many locals" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\06\01\60\02\7f\7f\00" ;; Type section: (param i32 i32) "\03\02\01\00" ;; Function section "\0a\1c\01" ;; Code section ;; function 0 "\1a\04" "\80\80\80\80\04\7f" ;; 0x40000000 i32 "\80\80\80\80\04\7e" ;; 0x40000000 i64 "\80\80\80\80\04\7d" ;; 0x40000000 f32 "\80\80\80\80\04\7c" ;; 0x40000000 f64 "\0b" ;; end ) "too many locals" ) ;; Local count can be 0. (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0a\01" ;; Code section ;; function 0 "\08\03" "\00\7f" ;; 0 i32 "\00\7e" ;; 0 i64 "\02\7d" ;; 2 f32 "\0b" ;; end ) ;; Function section has non-zero count, but code section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions ) "function and code section have inconsistent lengths" ) ;; Code section has non-zero count, but function section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count > code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count < code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section with 1 function "\0a\07\02\02\00\0b\02\00\0b" ;; Code section with 2 empty functions ) "function and code section have inconsistent lengths" ) ;; Function section has zero count, and code section is absent. (module binary "\00asm" "\01\00\00\00" "\03\01\00" ;; Function section with 0 functions ) ;; Code section has zero count, and function section is absent. (module binary "\00asm" "\01\00\00\00" "\0a\01\00" ;; Code section with 0 functions ) ;; Fewer passive segments than datacount (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0c\01\03" ;; Datacount section with value "3" "\0b\05\02" ;; Data section with two entries "\01\00" ;; Passive data section "\01\00") ;; Passive data section "data count and data section have inconsistent lengths") ;; More passive segments than datacount (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0c\01\01" ;; Datacount section with value "1" "\0b\05\02" ;; Data section with two entries "\01\00" ;; Passive data section "\01\00") ;; Passive data section "data count and data section have inconsistent lengths") ;; memory.init requires a datacount section (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0e\01" ;; Code section ;; function 0 "\0c\00" "\41\00" ;; zero args "\41\00" "\41\00" "\fc\08\00\00" ;; memory.init "\0b" "\0b\03\01\01\00" ;; Data section ) ;; end "data count section required") ;; data.drop requires a datacount section (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\07\01" ;; Code section ;; function 0 "\05\00" "\fc\09\00" ;; data.drop "\0b" "\0b\03\01\01\00" ;; Data section ) ;; end "data count section required") ;; passive element segment containing opcode other than ref.func or ref.null (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\70" ;; Passive, funcref "\01" ;; 1 element "\d3\00\0b" ;; bad opcode, index 0, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end "illegal opcode") ;; passive element segment containing type other than funcref (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\7f" ;; Passive, i32 "\01" ;; 1 element "\d2\00\0b" ;; ref.func, index 0, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end "malformed reference type") ;; passive element segment containing opcode ref.func (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\70" ;; Passive, funcref "\01" ;; 1 element "\d2\00\0b" ;; ref.func, index 0, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end ;; passive element segment containing opcode ref.null (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\70" ;; Passive, funcref "\01" ;; 1 element "\d0\70\0b" ;; ref.null, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end ;; Type count can be zero (module binary "\00asm" "\01\00\00\00" "\01\01\00" ;; type count can be zero ) ;; 2 type declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\02" ;; type section with inconsistent count (2 declared, 1 given) "\60\00\00" ;; 1st type ;; "\60\00\00" ;; 2nd type (missed) ) "unexpected end of section or function" ) ;; 1 type declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01" ;; type section with inconsistent count (1 declared, 2 given) "\60\00\00" ;; 1st type "\60\00\00" ;; 2nd type (redundant) ) "section size mismatch" ) ;; Import count can be zero (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\01\00" ;; import count can be zero ) ;; Malformed import kind (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) ;; 2 import declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\16\02" ;; import section with inconsistent count (2 declared, 1 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (missed) ) "unexpected end of section or function" ) ;; 1 import declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\09\02" ;; type section "\60\01\7f\00" ;; type 0 "\60\01\7d\00" ;; type 1 "\02\2b\01" ;; import section with inconsistent count (1 declared, 2 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (redundant) "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\66\33\32" ;; print_f32 "\00\01" ;; import kind, import signature index ) "section size mismatch" ) ;; Table count can be zero (module binary "\00asm" "\01\00\00\00" "\04\01\00" ;; table count can be zero ) ;; 1 table declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\01\01" ;; table section with inconsistent count (1 declared, 0 given) ;; "\70\01\00\00" ;; table entity ) "unexpected end of section or function" ) ;; Malformed table limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\03\01" ;; table section with one entry "\70" ;; anyfunc "\02" ;; malformed table limits flag ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; table section with one entry "\70" ;; anyfunc "\02" ;; malformed table limits flag "\00" ;; dummy byte ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\06\01" ;; table section with one entry "\70" ;; anyfunc "\81\00" ;; malformed table limits flag as LEB128 "\00\00" ;; dummy bytes ) "integer representation too long" ) ;; Memory count can be zero (module binary "\00asm" "\01\00\00\00" "\05\01\00" ;; memory count can be zero ) ;; 1 memory declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\01\01" ;; memory section with inconsistent count (1 declared, 0 given) ;; "\00\00" ;; memory 0 (missed) ) "unexpected end of section or function" ) ;; Malformed memory limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\02\01" ;; memory section with one entry "\02" ;; malformed memory limits flag ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section with one entry "\02" ;; malformed memory limits flag "\00" ;; dummy byte ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\05\01" ;; memory section with one entry "\81\00" ;; malformed memory limits flag as LEB128 "\00\00" ;; dummy bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\05\01" ;; memory section with one entry "\81\01" ;; malformed memory limits flag as LEB128 "\00\00" ;; dummy bytes ) "integer representation too long" ) ;; Global count can be zero (module binary "\00asm" "\01\00\00\00" "\06\01\00" ;; global count can be zero ) ;; 2 global declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\06\02" ;; global section with inconsistent count (2 declared, 1 given) "\7f\00\41\00\0b" ;; global 0 ;; "\7f\00\41\00\0b" ;; global 1 (missed) ) "unexpected end of section or function" ) ;; 1 global declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; global section with inconsistent count (1 declared, 2 given) "\7f\00\41\00\0b" ;; global 0 "\7f\00\41\00\0b" ;; global 1 (redundant) ) "section size mismatch" ) ;; Export count can be 0 (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\01\00" ;; export count can be zero "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) ;; 2 export declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\06\02" ;; export section with inconsistent count (2 declared, 1 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index ;; "\02" ;; export 1 (missed) ;; "\66\32" ;; export name ;; "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "unexpected end of section or function" ) ;; 1 export declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\0b\01" ;; export section with inconsistent count (1 declared, 2 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index "\02" ;; export 1 (redundant) "\66\32" ;; export name "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "section size mismatch" ) ;; elem segment count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\01\00" ;; elem segment count can be zero "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) ;; 2 elem segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 ;; "\00\41\00\0b\01\00" ;; elem 1 (missed) ) "unexpected end" ) ;; 2 elem segment declared, 1.5 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00" ;; elem 1 (partial) ;; "\0b\01\00" ;; elem 1 (missing part) ) "unexpected end" ) ;; 1 elem segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\0d\01" ;; elem with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00\0b\01\00" ;; elem 1 (redundant) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "section size mismatch" ) ;; data segment count can be zero (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\01\00" ;; data segment count can be zero ) ;; 2 data segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\07\02" ;; data with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\61" ;; data 0 ;; "\00\41\01\0b\01\62" ;; data 1 (missed) ) "unexpected end of section or function" ) ;; 1 data segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0d\01" ;; data with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\61" ;; data 0 "\00\41\01\0b\01\62" ;; data 1 (redundant) ) "section size mismatch" ) ;; data segment has 7 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\03\0b" ;; data segment 0 "\07" ;; data segment size with inconsistent lengths (7 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "unexpected end of section or function" ) ;; data segment has 5 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\00\0b" ;; data segment 0 "\05" ;; data segment size with inconsistent lengths (5 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "section size mismatch" ) ;; br_table target count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\11\01" ;; code section "\0f\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\00" ;; br_table target count can be zero "\02" ;; break depth for default "\0b\0b\0b" ;; end ) ;; 1 br_table target declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\12\01" ;; code section "\11\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\01" ;; br_table with inconsistent target count (1 declared, 2 given) "\00" ;; break depth 0 "\01" ;; break depth 1 "\02" ;; break depth for default "\0b\0b\0b" ;; end ) "unexpected end" ) ;; Start section (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) ;; Multiple start sections (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) "unexpected content after last section" ) ================================================ FILE: Test/WebAssembly/multi-memory/block.wast ================================================ ;; Test `block` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (block) (block $l) ) (func (export "singular") (result i32) (block (nop)) (block (result i32) (i32.const 7)) ) (func (export "multi") (result i32) (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 7) (call $dummy) ) (drop) (block (result i32 i64 i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i64.const 7) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i32.const 9) (call $dummy) ) (drop) (drop) ) (func (export "nested") (result i32) (block (result i32) (block (call $dummy) (block) (nop)) (block (result i32) (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (call $dummy) (i32.const 150) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) ) (func (export "as-select-first") (result i32) (select (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (block (result i32) (i32.const 1))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (block (result i32) (i32.const 1)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (block (result i32) (i32.const 1)) (call $dummy)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (block (result i32) (i32.const 1))) ) (func (export "as-if-condition") (block (result i32) (i32.const 1)) (if (then (call $dummy))) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (block (result i32) (i32.const 1))) (else (i32.const 2))) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 1) (then (i32.const 2)) (else (block (result i32) (i32.const 1)))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (block (result i32) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (block (result i32) (i32.const 1)))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (block (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (block (result i32) (i32.const 1)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (block (result i32) (i32.const 0)) ) ) ) (func (export "as-store-first") (block (result i32) (i32.const 1)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (block (result i32) (i32.const 1)) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (block (result i32) (i32.const 1))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (block (result i32) (i32.const 1))) ) (func (export "as-return-value") (result i32) (block (result i32) (i32.const 1)) (return) ) (func (export "as-drop-operand") (drop (block (result i32) (i32.const 1))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (block (result i32) (i32.const 1)))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (block (result i32) (i32.const 1))) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (block (result i32) (i32.const 1))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (block (result i32) (i32.const 1))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (block (result i32) (i32.const 1))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (block (result i32) (call $dummy) (i32.const 3)) (block (result i32) (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (block (result f32) (call $dummy) (f32.const 3)) (block (result f32) (call $dummy) (f32.const 3)) ) ) (func (export "as-binary-operands") (result i32) (i32.mul (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) ) ) (func (export "as-compare-operands") (result i32) (f32.gt (block (result f32 f32) (call $dummy) (f32.const 3) (call $dummy) (f32.const 3) ) ) ) (func (export "as-mixed-operands") (result i32) (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (block (br 0) (unreachable)) (block (br_if 0 (i32.const 1)) (unreachable)) (block (br_table 0 (i32.const 0)) (unreachable)) (block (br_table 0 0 0 (i32.const 1)) (unreachable)) (i32.const 19) ) (func (export "break-value") (result i32) (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) ) (func (export "break-multi-value") (result i32 i32 i64) (block (result i32 i32 i64) (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) ) (func (export "break-repeated") (result i32) (block (result i32) (br 0 (i32.const 18)) (br 0 (i32.const 19)) (drop (br_if 0 (i32.const 20) (i32.const 0))) (drop (br_if 0 (i32.const 20) (i32.const 1))) (br 0 (i32.const 21)) (br_table 0 (i32.const 22) (i32.const 4)) (br_table 0 0 0 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) ) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) ) (local.get 0) ) (func (export "param") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) ) ) (func (export "params") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) ) ) (func (export "params-id") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32)) (i32.add) ) (func (export "param-break") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) (br 0) ) ) (func (export "params-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) (br 0) ) ) (func (export "params-id-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32) (br 0)) (i32.add) ) (func (export "effects") (result i32) (local i32) (block (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 0) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) (i32.eq (local.get 0) (i32.const -14)) ) (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (block (type $block-sig-1)) (block (type $block-sig-2) (i32.const 0)) (block (type $block-sig-3) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4)) (drop) (drop) (drop) (block (type $block-sig-2) (result i32) (i32.const 0)) (block (type $block-sig-3) (param i32) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-select-first") (i32.const 1)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 1)) (assert_return (invoke "as-loop-mid") (i32.const 1)) (assert_return (invoke "as-loop-last") (i32.const 1)) (assert_return (invoke "as-if-condition")) (assert_return (invoke "as-if-then") (i32.const 1)) (assert_return (invoke "as-if-else") (i32.const 2)) (assert_return (invoke "as-br_if-first") (i32.const 1)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 1)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-local.set-value") (i32.const 1)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "as-binary-operands") (i32.const 12)) (assert_return (invoke "as-compare-operands") (i32.const 0)) (assert_return (invoke "as-mixed-operands") (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-multi-value") (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0xf)) (assert_return (invoke "param") (i32.const 3)) (assert_return (invoke "params") (i32.const 3)) (assert_return (invoke "params-id") (i32.const 3)) (assert_return (invoke "param-break") (i32.const 3)) (assert_return (invoke "params-break") (i32.const 3)) (assert_return (invoke "params-id-break") (i32.const 3)) (assert_return (invoke "effects") (i32.const 1)) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (type $sig) (result i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (result i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (type $sig) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (param i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (param $x i32) (drop)))") "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (drop)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (result i32)) (unreachable))" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (block (type $sig) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (block))) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-void (block (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-void (block (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-void (block (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-void (block (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (block (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i32 (result i32) (block (result i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i64 (result i64) (block (result i64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f32 (result f32) (block (result f32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f64 (result f64) (block (result f64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-nums (result i32 i32) (block (result i32 i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-block (i32.const 0) (block (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-loop (i32.const 0) (loop (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (block (result i32)) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i32 (result i32) (block (result i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i64 (result i64) (block (result i64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f32 (result f32) (block (result f32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f64 (result f64) (block (result f64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (block (result i32 i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-i64 (result i32) (block (result i32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f32 (result i32) (block (result i32) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f64 (result i32) (block (result i32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-i32 (result i64) (block (result i64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f32 (result i64) (block (result i64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f64 (result i64) (block (result i64) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i32 (result f32) (block (result f32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i64 (result f32) (block (result f32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-f64 (result f32) (block (result f32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i32 (result f64) (block (result f64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i64 (result f64) (block (result f64) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-f32 (result f32) (block (result f64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result i32 i32) (block (result i32 i32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result i32) (block (result i32) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-i64 (result i32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f32 (result i32) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f64 (result i32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-i32 (result i64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f32 (result i64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f64 (result i64) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i32 (result f32) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i64 (result f32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-f64 (result f32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i32 (result f64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i64 (result f64) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-f32 (result f64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i32 (result i32) (block (result i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i64 (result i64) (block (result i64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f32 (result f32) (block (result f32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f64 (result f64) (block (result f64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i32 (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i64 (result i64) (block (result i64) (br 0) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f32 (result f32) (block (result f32) (br 0) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f64 (result f64) (block (result f64) (br 0) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-nums (result i32 i32) (block (result i32 i32) (br 0) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i32 (result f64) (block (result i64) (br 0 (i32.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (nop)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i32 (result f64) (block (result f64) (br 0 (i32.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-void (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-void (block (result i64) (block (result i64) (br 1 (i64.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-void (block (result f32) (block (result f32) (br 1 (f32.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-void (block (result f64) (block (result f64) (br 1 (f64.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-nums-vs-void (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 1) (i32.const 2))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i32 (result i32) (block (result i32) (block (br 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i64 (result i64) (block (result i64) (block (br 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f32 (result f32) (block (result f32) (block (br 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f64 (result f64) (block (result f64) (block (br 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i32 (result i32) (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i64 (result i64) (block (result i64) (block (result i64) (br 1 (nop))) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f32 (result f32) (block (result f32) (block (result f32) (br 1 (nop))) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f64 (result f64) (block (result f64) (block (result f64) (br 1 (nop))) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-i64 (result i32) (block (result i32) (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f32 (result i32) (block (result i32) (block (result i32) (br 1 (f32.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f64 (result i32) (block (result i32) (block (result i32) (br 1 (f64.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-i32 (result i64) (block (result i64) (block (result i64) (br 1 (i32.const 1))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f32 (result i64) (block (result i64) (block (result i64) (br 1 (f32.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f64 (result i64) (block (result i64) (block (result i64) (br 1 (f64.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i32 (result f32) (block (result f32) (block (result f32) (br 1 (i32.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i64 (result f32) (block (result f32) (block (result f32) (br 1 (i64.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-f64 (result f32) (block (result f32) (block (result f32) (br 1 (f64.const 1.0))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i32 (result f64) (block (result f64) (block (result f64) (br 1 (i32.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i64 (result f64) (block (result f64) (block (result f64) (br 1 (i64.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-f32 (result f64) (block (result f64) (block (result f64) (br 1 (f32.const 1.0))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 0))) (br 0 (i32.const 1) (i32.const 2)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i32 (result i32) (i32.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i64 (result i64) (i64.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f32 (result f32) (f32.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f64 (result f64) (f64.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-nums (result i32) (i32.add (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i32 (result i32) (i32.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i64 (result i64) (i64.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f32 (result f32) (f32.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f64 (result f64) (f64.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-nums (result i32) (i32.add (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-i64 (result i32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f32 (result i32) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f64 (result i32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-i32 (result i64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f32 (result i64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f64 (result i64) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i32 (result f32) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i64 (result f32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-f64 (result f32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i32 (result f64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i64 (result f64) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-f32 (result f64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-num-vs-nums (result i32) (i32.add (block (br 0 (i64.const 9) (i32.const 10)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (param i32 f64) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (block (param f32 i32) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (block (param i32 f64) (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (block (param f32 i32) (drop) (drop))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) block (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (block (param $x i32)))") "unexpected token" ) (assert_malformed (module quote "(func block end $l)") "mismatching label" ) (assert_malformed (module quote "(func block $a end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/multi-memory/br.wast ================================================ ;; Test `br` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br 0))))) (func (export "type-i64") (block (drop (i64.ctz (br 0))))) (func (export "type-f32") (block (drop (f32.neg (br 0))))) (func (export "type-f64") (block (drop (f64.neg (br 0))))) (func (export "type-i32-i32") (block (drop (i32.add (br 0))))) (func (export "type-i64-i64") (block (drop (i64.add (br 0))))) (func (export "type-f32-f32") (block (drop (f32.add (br 0))))) (func (export "type-f64-f64") (block (drop (f64.add (br 0))))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br 0 (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br 0 (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br 0 (f64.const 4)))) ) (func (export "type-f64-f64-value") (result f64 f64) (block (result f64 f64) (f64.add (br 0 (f64.const 4) (f64.const 5))) (f64.const 6) ) ) (func (export "as-block-first") (block (br 0) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br 0) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br 0)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br 0 (i32.const 2))) ) (func (export "as-loop-first") (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 3)) (i32.const 2))) ) (func (export "as-loop-mid") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 4)) (i32.const 2)) ) ) (func (export "as-loop-last") (result i32) (block (result i32) (loop (result i32) (nop) (call $dummy) (br 1 (i32.const 5))) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br 0 (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br 0))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br 0 (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br 0))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br 0 (i64.const 7)))) ) (func (export "as-return-values") (result i32 i64) (i32.const 2) (block (result i64) (return (br 0 (i32.const 1) (i64.const 7)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br 0 (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br 1 (i32.const 3))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br 1 (i32.const 4))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br 0 (i32.const 5)) (local.get 0) (local.get 1)) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br 0 (i32.const 6)) (local.get 1)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7))) ) ) (func (export "as-select-all") (result i32) (block (result i32) (select (br 0 (i32.const 8)))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3)) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3)) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14))) ) ) (func (export "as-call-all") (result i32) (block (result i32) (call $f (br 0 (i32.const 15)))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) ) ) ) (func (export "as-call_indirect-all") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 24)))) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br 0 (i32.const 17))) (i32.const -1)) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.tee 0 (br 0 (i32.const 1)))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br 0 (i32.const 1)))) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br 0 (f32.const 1.7)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br 0 (i64.const 30)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1) ) ) (func (export "as-store-both") (result i32) (block (result i32) (i64.store (br 0 (i32.const 32))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1) ) ) (func (export "as-storeN-both") (result i32) (block (result i32) (i64.store16 (br 0 (i32.const 34))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3.4)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br 0 (i32.const 3)) (i32.const 10))) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br 0 (i64.const 45)))) ) (func (export "as-binary-both") (result i32) (block (result i32) (i32.add (br 0 (i32.const 46)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br 0 (i32.const 44)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br 0 (i32.const 43)) (f64.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br 0 (i32.const 42)))) ) (func (export "as-compare-both") (result i32) (block (result i32) (f64.le (br 0 (i32.const 44)))) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br 0 (i32.const 41)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br 0 (i32.const 40)))) ) (func (export "nested-block-value") (result i32) (i32.add (i32.const 1) (block (result i32) (call $dummy) (i32.add (i32.const 4) (br 0 (i32.const 8))) ) ) ) (func (export "nested-br-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br 1 (i32.const 8))) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br 1 (i32.const 8)) (i32.const 1))) (i32.const 32) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) ) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br 0 (i32.const 8))) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-i32")) (assert_return (invoke "type-i64-i64")) (assert_return (invoke "type-f32-f32")) (assert_return (invoke "type-f64-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "type-f64-f64-value") (f64.const 4) (f64.const 5)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-return-values") (i32.const 2) (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-select-all") (i32.const 8)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call-all") (i32.const 15)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-call_indirect-all") (i32.const 24)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-store-both") (i32.const 32)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-storeN-both") (i32.const 34)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-binary-both") (i32.const 46)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-compare-both") (i32.const 44)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value") (i32.const 9)) (assert_return (invoke "nested-br-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) (assert_return (invoke "nested-br_table-value") (i32.const 9)) (assert_return (invoke "nested-br_table-value-index") (i32.const 9)) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br (i32.const 0) (block (result i32) (br 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_if (i32.const 0) (block (result i32) (br_if 0 (br 0) (i32.const 1))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_table (i32.const 0) (block (result i32) (br_table 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-return (block (result i32) (return (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-select (block (result i32) (select (br 0) (i32.const 1) (i32.const 2)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-call (block (result i32) (call 1 (br 0)) ) (i32.eqz) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-arg-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (br 0) (i32.const 0) ) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.set (local i32) (block (result i32) (local.set 0 (br 0)) (local.get 0) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.tee (local i32) (block (result i32) (local.tee 0 (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-arg-empty-in-global.set (block (result i32) (global.set $x (br 0)) (global.get $x) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-arg-empty-in-memory.grow (block (result i32) (memory.grow (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-load (block (result i32) (i32.load (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-store (block (result i32) (i32.store (br 0) (i32.const 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br 1))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br 5))))) "unknown label" ) (assert_invalid (module (func $large-label (br 0x10000001))) "unknown label" ) ================================================ FILE: Test/WebAssembly/multi-memory/br_if.wast ================================================ ;; Test `br_if` operator (module (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_if 0 (i32.const 0) (i32.const 1))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_if 0 (i64.const 0) (i32.const 1))))) ) (func (export "type-f32") (block (drop (f32.neg (br_if 0 (f32.const 0) (i32.const 1))))) ) (func (export "type-f64") (block (drop (f64.neg (br_if 0 (f64.const 0) (i32.const 1))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_if 0 (i64.const 2) (i32.const 1)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_if 0 (f32.const 3) (i32.const 1)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 4) (i32.const 1)))) ) (func (export "as-block-first") (param i32) (result i32) (block (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-mid") (param i32) (result i32) (block (call $dummy) (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-last") (param i32) (block (call $dummy) (call $dummy) (br_if 0 (local.get 0))) ) (func (export "as-block-first-value") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 10) (local.get 0))) (return (i32.const 11)) ) ) (func (export "as-block-mid-value") (param i32) (result i32) (block (result i32) (call $dummy) (drop (br_if 0 (i32.const 20) (local.get 0))) (return (i32.const 21)) ) ) (func (export "as-block-last-value") (param i32) (result i32) (block (result i32) (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (local.get 0)) ) ) (func (export "as-loop-first") (param i32) (result i32) (block (loop (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 3) ) (func (export "as-loop-mid") (param i32) (result i32) (block (loop (call $dummy) (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 4) ) (func (export "as-loop-last") (param i32) (loop (call $dummy) (br_if 1 (local.get 0))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3))) (i32.const 4) ) ) (func (export "as-br_if-value-cond") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 2) (br_if 0 (i32.const 1) (local.get 0)))) (i32.const 4) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3)) (i32.const 4) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 2) (br_if 0 (i32.const 1) (i32.const 3))) (i32.const 4) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_if 0 (i64.const 1) (i32.const 2)))) ) (func (export "as-if-cond") (param i32) (result i32) (block (result i32) (if (result i32) (br_if 0 (i32.const 1) (local.get 0)) (then (i32.const 2)) (else (i32.const 3)) ) ) ) (func (export "as-if-then") (param i32 i32) (block (if (local.get 0) (then (br_if 1 (local.get 1))) (else (call $dummy))) ) ) (func (export "as-if-else") (param i32 i32) (block (if (local.get 0) (then (call $dummy)) (else (br_if 1 (local.get 1)))) ) ) (func (export "as-select-first") (param i32) (result i32) (block (result i32) (select (br_if 0 (i32.const 3) (i32.const 10)) (i32.const 2) (local.get 0)) ) ) (func (export "as-select-second") (param i32) (result i32) (block (result i32) (select (i32.const 1) (br_if 0 (i32.const 3) (i32.const 10)) (local.get 0)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 1) (i32.const 2) (br_if 0 (i32.const 3) (i32.const 10))) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_if 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_if 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_if 0 (i32.const 14) (i32.const 1)) ) ) ) (func $func (param i32 i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $check) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 1) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (i32.const 3) (br_if 0 (i32.const 4) (i32.const 10)) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (block (result i32) (local.set 0 (br_if 0 (i32.const 17) (local.get 0))) (i32.const -1) ) ) (func (export "as-local.tee-value") (param i32) (result i32) (block (result i32) (local.tee 0 (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (block (result i32) (global.set $a (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (memory 1) (func (export "as-load-address") (result i32) (block (result i32) (i32.load (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-loadN-address") (result i32) (block (result i32) (i32.load8_s (br_if 0 (i32.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (i32.store (br_if 0 (i32.const 30) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i32.store (i32.const 2) (br_if 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_if 0 (i32.const 32) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i32.store16 (i32.const 2) (br_if 0 (i32.const 33) (i32.const 1))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 1.0) (i32.const 1)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_if 0 (i32.const 0) (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (br_if 0 (i32.const 1) (i32.const 42)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "nested-block-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (i32.add (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) )) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) )) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) ) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-last" (i32.const 0))) (assert_return (invoke "as-block-last" (i32.const 1))) (assert_return (invoke "as-block-first-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-first-value" (i32.const 1)) (i32.const 10)) (assert_return (invoke "as-block-mid-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "as-block-mid-value" (i32.const 1)) (i32.const 20)) (assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) (assert_return (invoke "as-loop-last" (i32.const 0))) (assert_return (invoke "as-loop-last" (i32.const 1))) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 1)) (assert_return (invoke "as-br_if-value-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-value-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 1)) (assert_return (invoke "as-br_table-value-index") (i32.const 1)) (assert_return (invoke "as-return-value") (i64.const 1)) (assert_return (invoke "as-if-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-if-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-cond") (i32.const 3)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 4)) (assert_return (invoke "as-call_indirect-first") (i32.const 4)) (assert_return (invoke "as-call_indirect-mid") (i32.const 4)) (assert_return (invoke "as-call_indirect-last") (i32.const 4)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-address") (i32.const 1)) (assert_return (invoke "as-loadN-address") (i32.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f64.const 1.0)) (assert_return (invoke "as-binary-left") (i32.const 1)) (assert_return (invoke "as-binary-right") (i32.const 1)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-memory.grow-size") (i32.const 1)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) (assert_invalid (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-cond-empty-vs-i32 (block (br_if 0)) )) "type mismatch" ) (assert_invalid (module (func $type-cond-void-vs-i32 (block (br_if 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cond-num-vs-i32 (block (br_if 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-void-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_if 1 (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-num-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-return (block (result i32) (return (br_if 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-return (block (result i32) (return (br_if 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br_if 1 (i32.const 1)))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) "unknown label" ) (assert_invalid (module (func $large-label (br_if 0x10000001 (i32.const 1)))) "unknown label" ) ================================================ FILE: Test/WebAssembly/multi-memory/br_table.wast ================================================ ;; Test `br_table` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-f32") (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-f64") (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) ) (func (export "empty") (param i32) (result i32) (block (br_table 0 (local.get 0)) (return (i32.const 21))) (i32.const 22) ) (func (export "empty-value") (param i32) (result i32) (block (result i32) (br_table 0 (i32.const 33) (local.get 0)) (i32.const 31) ) ) (func (export "singleton") (param i32) (result i32) (block (block (br_table 1 0 (local.get 0)) (return (i32.const 21)) ) (return (i32.const 20)) ) (i32.const 22) ) (func (export "singleton-value") (param i32) (result i32) (block (result i32) (drop (block (result i32) (br_table 0 1 (i32.const 33) (local.get 0)) (return (i32.const 31)) ) ) (i32.const 32) ) ) (func (export "multiple") (param i32) (result i32) (block (block (block (block (block (br_table 3 2 1 0 4 (local.get 0)) (return (i32.const 99)) ) (return (i32.const 100)) ) (return (i32.const 101)) ) (return (i32.const 102)) ) (return (i32.const 103)) ) (i32.const 104) ) (func (export "multiple-value") (param i32) (result i32) (local i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (br_table 3 2 1 0 4 (i32.const 200) (local.get 0)) (return (i32.add (local.get 1) (i32.const 99))) )) (return (i32.add (local.get 1) (i32.const 10))) )) (return (i32.add (local.get 1) (i32.const 11))) )) (return (i32.add (local.get 1) (i32.const 12))) )) (return (i32.add (local.get 1) (i32.const 13))) )) (i32.add (local.get 1) (i32.const 14)) ) (func (export "large") (param i32) (result i32) (block (block (br_table 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (local.get 0) ) (return (i32.const -1)) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (func (export "as-block-first") (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0)) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (br_table 1 1 1 (i32.const 4) (i32.const -1)) (i32.const 2) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_table 0 (i32.const 9) (i32.const 0)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_table 0 (i64.const 7) (i32.const 0)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br_table 0 (i32.const 2) (i32.const 0)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br_table 1 (i32.const 3) (i32.const 0))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br_table 1 0 (i32.const 4) (i32.const 0))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br_table 0 (i32.const 5) (i32.const 0)) (local.get 0) (local.get 1) ) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br_table 0 (i32.const 6) (i32.const 1)) (local.get 1) ) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) ) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br_table 0 (i32.const 23) (i32.const 1)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br_table 0 (i32.const 17) (i32.const 1))) (i32.const -1) ) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.set 0 (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) ) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) ) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br_table 0 (i32.const 41) (i32.const 0))) ) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_table 0 (i32.const 40) (i32.const 0)))) ) (func (export "nested-block-value") (param i32) (result i32) (block (result i32) (drop (i32.const -1)) (i32.add (i32.const 1) (block (result i32) (i32.add (i32.const 2) (block (result i32) (drop (i32.const 4)) (i32.add (i32.const 8) (br_table 0 1 2 (i32.const 16) (local.get 0)) ) ) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br_table 2 1 0 (i32.const 8) (local.get 0))) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1) ) ) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) (func (export "nested-br_table-loop-block") (param i32) (result i32) (local.set 0 (loop (result i32) (block (br_table 1 0 0 (local.get 0)) ) (i32.const 0) ) ) (loop (result i32) (block (br_table 0 1 1 (local.get 0)) ) (i32.const 3) ) ) (func (export "meet-externref") (param i32) (param externref) (result externref) (block $l1 (result externref) (block $l2 (result externref) (br_table $l1 $l2 $l1 (local.get 1) (local.get 0)) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) (assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) (assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) (assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) (assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) (assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) (assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) (assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) (assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) (assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) (assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) (assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) (assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) (assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) (assert_return (invoke "large" (i32.const 0)) (i32.const 0)) (assert_return (invoke "large" (i32.const 1)) (i32.const 1)) (assert_return (invoke "large" (i32.const 100)) (i32.const 0)) (assert_return (invoke "large" (i32.const 101)) (i32.const 1)) (assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) (assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-first") (i32.const 20)) (assert_return (invoke "as-call_indirect-mid") (i32.const 21)) (assert_return (invoke "as-call_indirect-last") (i32.const 22)) (assert_return (invoke "as-call_indirect-func") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-loop-block" (i32.const 1)) (i32.const 3)) (assert_return (invoke "meet-externref" (i32.const 0) (ref.extern 1)) (ref.extern 1)) (assert_return (invoke "meet-externref" (i32.const 1) (ref.extern 1)) (ref.extern 1)) (assert_return (invoke "meet-externref" (i32.const 2) (ref.extern 1)) (ref.extern 1)) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (br_table 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br_table 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-arg-num (block (block (result f32) (br_table 0 1 (f32.const 0) (i32.const 0)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func (block (result i32) (block (result i64) (br_table 0 1 (i32.const 0) (i32.const 0)) ) ) )) "type mismatch" ) (assert_invalid (module (func $type-index-void-vs-i32 (block (br_table 0 0 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-index-num-vs-i32 (block (br_table 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-void-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_table 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-num-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-return (block (result i32) (return (br_table 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-return (block (result i32) (return (br_table 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func (param i32) (result i32) (loop (result i32) (block (result i32) (br_table 0 1 (i32.const 1) (local.get 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func (param i32) (result i32) (block (result i32) (loop (result i32) (br_table 0 1 (i32.const 1) (local.get 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (block (br_table 2 1 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label (block (br_table 0 0x10000001 0 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-label-default (block (br_table 1 2 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label-default (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label-default (block (br_table 0 0 0x10000001 (i32.const 1))) )) "unknown label" ) ================================================ FILE: Test/WebAssembly/multi-memory/bulk.wast ================================================ ;; segment syntax (module (memory 1) (data "foo")) (module (table 3 funcref) (elem funcref (ref.func 0) (ref.null func) (ref.func 1)) (func) (func)) ;; memory.fill (module (memory 1) (func (export "fill") (param i32 i32 i32) (memory.fill (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) ;; Basic fill test. (invoke "fill" (i32.const 1) (i32.const 0xff) (i32.const 3)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 2)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 3)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "fill" (i32.const 0) (i32.const 0xbbaa) (i32.const 2)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "fill" (i32.const 0) (i32.const 0) (i32.const 0x10000)) ;; Out-of-bounds writes trap, and nothing is written (assert_trap (invoke "fill" (i32.const 0xff00) (i32.const 1) (i32.const 0x101)) "out of bounds memory access") (assert_return (invoke "load8_u" (i32.const 0xff00)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 0xffff)) (i32.const 0)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "fill" (i32.const 0x10000) (i32.const 0) (i32.const 0)) ;; Writing 0 bytes outside the memory traps. (assert_trap (invoke "fill" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") ;; memory.copy (module (memory (data "\aa\bb\cc\dd")) (func (export "copy") (param i32 i32 i32) (memory.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i32.const 10) (i32.const 0) (i32.const 4)) (assert_return (invoke "load8_u" (i32.const 9)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0)) ;; Overlap, source > dest (invoke "copy" (i32.const 8) (i32.const 10) (i32.const 4)) (assert_return (invoke "load8_u" (i32.const 8)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 9)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xdd)) ;; Overlap, source < dest (invoke "copy" (i32.const 10) (i32.const 7) (i32.const 6)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 16)) (i32.const 0)) ;; Copy ending at memory limit is ok. (invoke "copy" (i32.const 0xff00) (i32.const 0) (i32.const 0x100)) (invoke "copy" (i32.const 0xfe00) (i32.const 0xff00) (i32.const 0x100)) ;; Succeed when copying 0 bytes at the end of the region. (invoke "copy" (i32.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "copy" (i32.const 0) (i32.const 0x10000) (i32.const 0)) ;; Copying 0 bytes outside the memory traps. (assert_trap (invoke "copy" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "copy" (i32.const 0) (i32.const 0x10001) (i32.const 0)) "out of bounds memory access") ;; memory.init (module (memory 1) (data "\aa\bb\cc\dd") (func (export "init") (param i32 i32 i32) (memory.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) (invoke "init" (i32.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 2)) (i32.const 0)) ;; Init ending at memory limit and segment limit is ok. (invoke "init" (i32.const 0xfffc) (i32.const 0) (i32.const 4)) ;; Out-of-bounds writes trap, and nothing is written. (assert_trap (invoke "init" (i32.const 0xfffe) (i32.const 0) (i32.const 3)) "out of bounds memory access") (assert_return (invoke "load8_u" (i32.const 0xfffe)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 0xffff)) (i32.const 0xdd)) ;; Succeed when writing 0 bytes at the end of either region. (invoke "init" (i32.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "init" (i32.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 bytes outside the memory traps. (assert_trap (invoke "init" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0)) "out of bounds memory access") ;; data.drop (module (memory 1) (data $p "x") (data $a (memory 0) (i32.const 0) "x") (func (export "drop_passive") (data.drop $p)) (func (export "init_passive") (param $len i32) (memory.init $p (i32.const 0) (i32.const 0) (local.get $len))) (func (export "drop_active") (data.drop $a)) (func (export "init_active") (param $len i32) (memory.init $a (i32.const 0) (i32.const 0) (local.get $len))) ) (invoke "init_passive" (i32.const 1)) (invoke "drop_passive") (invoke "drop_passive") (assert_return (invoke "init_passive" (i32.const 0))) (assert_trap (invoke "init_passive" (i32.const 1)) "out of bounds memory access") (invoke "init_passive" (i32.const 0)) (invoke "drop_active") (assert_return (invoke "init_active" (i32.const 0))) (assert_trap (invoke "init_active" (i32.const 1)) "out of bounds memory access") (invoke "init_active" (i32.const 0)) ;; Test that the data segment index is properly encoded as an unsigned (not ;; signed) LEB. (module ;; 65 data segments. 64 is the smallest positive number that is encoded ;; differently as a signed LEB. (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (func (data.drop 64))) ;; No memory is required for the data.drop instruction. (module (data "goodbye") (func (data.drop 0))) ;; table.init (module (table 3 funcref) (elem funcref (ref.func $zero) (ref.func $one) (ref.func $zero) (ref.func $one)) (func $zero (result i32) (i32.const 0)) (func $one (result i32) (i32.const 1)) (func (export "init") (param i32 i32 i32) (table.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "call") (param i32) (result i32) (call_indirect (result i32) (local.get 0))) ) ;; Out-of-bounds stores trap, and nothing is written. (assert_trap (invoke "init" (i32.const 2) (i32.const 0) (i32.const 2)) "out of bounds table access") (assert_trap (invoke "call" (i32.const 2)) "uninitialized element 2") (invoke "init" (i32.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "call" (i32.const 0)) (i32.const 1)) (assert_return (invoke "call" (i32.const 1)) (i32.const 0)) (assert_trap (invoke "call" (i32.const 2)) "uninitialized element") ;; Init ending at table limit and segment limit is ok. (invoke "init" (i32.const 1) (i32.const 2) (i32.const 2)) ;; Succeed when storing 0 elements at the end of either region. (invoke "init" (i32.const 3) (i32.const 0) (i32.const 0)) (invoke "init" (i32.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 elements outside the table traps. (assert_trap (invoke "init" (i32.const 4) (i32.const 0) (i32.const 0)) "out of bounds table access") (assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0)) "out of bounds table access") ;; elem.drop (module (table 1 funcref) (func $f) (elem $p funcref (ref.func $f)) (elem $a (table 0) (i32.const 0) func $f) (func (export "drop_passive") (elem.drop $p)) (func (export "init_passive") (param $len i32) (table.init $p (i32.const 0) (i32.const 0) (local.get $len)) ) (func (export "drop_active") (elem.drop $a)) (func (export "init_active") (param $len i32) (table.init $a (i32.const 0) (i32.const 0) (local.get $len)) ) ) (invoke "init_passive" (i32.const 1)) (invoke "drop_passive") (invoke "drop_passive") (assert_return (invoke "init_passive" (i32.const 0))) (assert_trap (invoke "init_passive" (i32.const 1)) "out of bounds table access") (invoke "init_passive" (i32.const 0)) (invoke "drop_active") (assert_return (invoke "init_active" (i32.const 0))) (assert_trap (invoke "init_active" (i32.const 1)) "out of bounds table access") (invoke "init_active" (i32.const 0)) ;; Test that the elem segment index is properly encoded as an unsigned (not ;; signed) LEB. (module ;; 65 elem segments. 64 is the smallest positive number that is encoded ;; differently as a signed LEB. (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (func (elem.drop 64))) ;; No table is required for the elem.drop instruction. (module (elem funcref (ref.func 0)) (func (elem.drop 0))) ;; table.copy (module (table 10 funcref) (elem (i32.const 0) $zero $one $two) (func $zero (result i32) (i32.const 0)) (func $one (result i32) (i32.const 1)) (func $two (result i32) (i32.const 2)) (func (export "copy") (param i32 i32 i32) (table.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "call") (param i32) (result i32) (call_indirect (result i32) (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i32.const 3) (i32.const 0) (i32.const 3)) ;; Now [$zero, $one, $two, $zero, $one, $two, ...] (assert_return (invoke "call" (i32.const 3)) (i32.const 0)) (assert_return (invoke "call" (i32.const 4)) (i32.const 1)) (assert_return (invoke "call" (i32.const 5)) (i32.const 2)) ;; Overlap, source > dest (invoke "copy" (i32.const 0) (i32.const 1) (i32.const 3)) ;; Now [$one, $two, $zero, $zero, $one, $two, ...] (assert_return (invoke "call" (i32.const 0)) (i32.const 1)) (assert_return (invoke "call" (i32.const 1)) (i32.const 2)) (assert_return (invoke "call" (i32.const 2)) (i32.const 0)) ;; Overlap, source < dest (invoke "copy" (i32.const 2) (i32.const 0) (i32.const 3)) ;; Now [$one, $two, $one, $two, $zero, $two, ...] (assert_return (invoke "call" (i32.const 2)) (i32.const 1)) (assert_return (invoke "call" (i32.const 3)) (i32.const 2)) (assert_return (invoke "call" (i32.const 4)) (i32.const 0)) ;; Copy ending at table limit is ok. (invoke "copy" (i32.const 6) (i32.const 8) (i32.const 2)) (invoke "copy" (i32.const 8) (i32.const 6) (i32.const 2)) ;; Succeed when copying 0 elements at the end of the region. (invoke "copy" (i32.const 10) (i32.const 0) (i32.const 0)) (invoke "copy" (i32.const 0) (i32.const 10) (i32.const 0)) ;; Fail on out-of-bounds when copying 0 elements outside of table. (assert_trap (invoke "copy" (i32.const 11) (i32.const 0) (i32.const 0)) "out of bounds table access") (assert_trap (invoke "copy" (i32.const 0) (i32.const 11) (i32.const 0)) "out of bounds table access") ================================================ FILE: Test/WebAssembly/multi-memory/call.wast ================================================ ;; Test `call` operator (module ;; Auxiliary definitions (func $const-i32 (result i32) (i32.const 0x132)) (func $const-i64 (result i64) (i64.const 0x164)) (func $const-f32 (result f32) (f32.const 0xf32)) (func $const-f64 (result f64) (f64.const 0xf64)) (func $const-i32-i64 (result i32 i64) (i32.const 0x132) (i64.const 0x164)) (func $id-i32 (param i32) (result i32) (local.get 0)) (func $id-i64 (param i64) (result i64) (local.get 0)) (func $id-f32 (param f32) (result f32) (local.get 0)) (func $id-f64 (param f64) (result f64) (local.get 0)) (func $id-i32-f64 (param i32 f64) (result i32 f64) (local.get 0) (local.get 1) ) (func $swap-i32-i32 (param i32 i32) (result i32 i32) (local.get 1) (local.get 0) ) (func $swap-f32-f64 (param f32 f64) (result f64 f32) (local.get 1) (local.get 0) ) (func $swap-f64-i32 (param f64 i32) (result i32 f64) (local.get 1) (local.get 0) ) (func $f32-i32 (param f32 i32) (result i32) (local.get 1)) (func $i32-i64 (param i32 i64) (result i64) (local.get 1)) (func $f64-f32 (param f64 f32) (result f32) (local.get 1)) (func $i64-f64 (param i64 f64) (result f64) (local.get 1)) ;; Typing (func (export "type-i32") (result i32) (call $const-i32)) (func (export "type-i64") (result i64) (call $const-i64)) (func (export "type-f32") (result f32) (call $const-f32)) (func (export "type-f64") (result f64) (call $const-f64)) (func (export "type-i32-i64") (result i32 i64) (call $const-i32-i64)) (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) (func (export "type-second-i32") (result i32) (call $f32-i32 (f32.const 32.1) (i32.const 32)) ) (func (export "type-second-i64") (result i64) (call $i32-i64 (i32.const 32) (i64.const 64)) ) (func (export "type-second-f32") (result f32) (call $f64-f32 (f64.const 64) (f32.const 32)) ) (func (export "type-second-f64") (result f64) (call $i64-f64 (i64.const 64) (f64.const 64.1)) ) (func (export "type-all-i32-f64") (result i32 f64) (call $id-i32-f64 (i32.const 32) (f64.const 1.64)) ) (func (export "type-all-i32-i32") (result i32 i32) (call $swap-i32-i32 (i32.const 1) (i32.const 2)) ) (func (export "type-all-f32-f64") (result f64 f32) (call $swap-f32-f64 (f32.const 1) (f64.const 2)) ) (func (export "type-all-f64-i32") (result i32 f64) (call $swap-f64-i32 (f64.const 1) (i32.const 2)) ) ;; Composition (func (export "as-binary-all-operands") (result i32) (i32.add (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) (func (export "as-mixed-operands") (result i32) (call $swap-i32-i32 (i32.const 3) (i32.const 4)) (i32.const 5) (i32.add) (i32.mul) ) (func (export "as-call-all-operands") (result i32 i32) (call $swap-i32-i32 (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) ;; Recursion (func $fac (export "fac") (param i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (local.get 1)) (else (call $fac-acc (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) ) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call $fib (i64.sub (local.get 0) (i64.const 2))) (call $fib (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $even (export "even") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 44)) (else (call $odd (i64.sub (local.get 0) (i64.const 1)))) ) ) (func $odd (export "odd") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 99)) (else (call $even (i64.sub (local.get 0) (i64.const 1)))) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call $runaway)) (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) (func $mutual-runaway2 (call $mutual-runaway1)) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call $const-i32) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call $const-i32) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call $const-i32)) ) (func (export "as-if-condition") (result i32) (if (result i32) (call $const-i32) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (call $const-i32) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call $const-i32))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (call $const-i32) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call $const-i32) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (call $const-i32) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (call $const-i32) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (call $const-i32) ) ) ) (func (export "as-store-first") (call $const-i32) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call $const-i32) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call $const-i32)) ) (func (export "as-return-value") (result i32) (call $const-i32) (return) ) (func (export "as-drop-operand") (call $const-i32) (drop) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (call $const-i32))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (call $const-i32)) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (call $const-i32)) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (call $const-i32)) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call $const-i32)) ) (func $dummy (param i32) (result i32) (local.get 0)) (func $du (param f32) (result f32) (local.get 0)) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call $du (f32.const 0x0p+0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call $dummy (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call $dummy (i32.const 1)))) ) ;; Test correct argument passing (func $return-from-long-argument-list-helper (param f32 i32 i32 f64 f32 f32 f32 f64 f32 i32 i32 f32 f64 i64 i64 i32 i64 i64 f32 i64 i64 i64 i32 f32 f32 f32 f64 f32 i32 i64 f32 f64 f64 f32 i32 f32 f32 f64 i64 f64 i32 i64 f32 f64 i32 i32 i32 i64 f64 i32 i64 i64 f64 f64 f64 f64 f64 f64 i32 f32 f64 f64 i32 i64 f32 f32 f32 i32 f64 f64 f64 f64 f64 f32 i64 i64 i32 i32 i32 f32 f64 i32 i64 f32 f32 f32 i32 i32 f32 f64 i64 f32 f64 f32 f32 f32 i32 f32 i64 i32) (result i32) (local.get 99) ) (func (export "return-from-long-argument-list") (param i32) (result i32) (call $return-from-long-argument-list-helper (f32.const 0) (i32.const 0) (i32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (i64.const 0) (local.get 0)) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-i32-i64") (i32.const 0x132) (i64.const 0x164)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-i32-f64") (i32.const 32) (f64.const 1.64)) (assert_return (invoke "type-all-i32-i32") (i32.const 2) (i32.const 1)) (assert_return (invoke "type-all-f32-f64") (f64.const 2) (f32.const 1)) (assert_return (invoke "type-all-f64-i32") (i32.const 2) (f64.const 1)) (assert_return (invoke "as-binary-all-operands") (i32.const 7)) (assert_return (invoke "as-mixed-operands") (i32.const 32)) (assert_return (invoke "as-call-all-operands") (i32.const 3) (i32.const 4)) (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i32.const 44)) (assert_return (invoke "even" (i64.const 1)) (i32.const 99)) (assert_return (invoke "even" (i64.const 100)) (i32.const 44)) (assert_return (invoke "even" (i64.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i32.const 0x132)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 0x132)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 0x132)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 0x132)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 0x132)) (assert_return (invoke "as-local.set-value") (i32.const 0x132)) (assert_return (invoke "as-local.tee-value") (i32.const 0x132)) (assert_return (invoke "as-global.set-value") (i32.const 0x132)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) (assert_return (invoke "return-from-long-argument-list" (i32.const 42)) (i32.const 42)) ;; Invalid typing (assert_invalid (module (func $type-void-vs-num (i32.eqz (call 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (i32.eqz (call 1))) (func (result i64) (i64.const 1)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-1 (call 1)) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-2 (call 1)) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-1-vs-0 (call 1 (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) (func (param i32 f64)) ) "type mismatch" ) (assert_invalid (module (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-block (block (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-block (block (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-loop (loop (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-loop (loop (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-then (if (i32.const 0) (then (call 1))) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-then (if (i32.const 0) (then (call 1 (i32.const 0)))) ) (func (param i32 i32)) ) "type mismatch" ) ;; Unbound function (assert_invalid (module (func $unbound-func (call 1))) "unknown function" ) (assert_invalid (module (func $large-func (call 1012321300))) "unknown function" ) ================================================ FILE: Test/WebAssembly/multi-memory/call_indirect.wast ================================================ ;; Test `call_indirect` operator (module ;; Auxiliary definitions (type $proc (func)) (type $out-i32 (func (result i32))) (type $out-i64 (func (result i64))) (type $out-f32 (func (result f32))) (type $out-f64 (func (result f64))) (type $out-f64-i32 (func (result f64 i32))) (type $over-i32 (func (param i32) (result i32))) (type $over-i64 (func (param i64) (result i64))) (type $over-f32 (func (param f32) (result f32))) (type $over-f64 (func (param f64) (result f64))) (type $over-i32-f64 (func (param i32 f64) (result i32 f64))) (type $swap-i32-i64 (func (param i32 i64) (result i64 i32))) (type $f32-i32 (func (param f32 i32) (result i32))) (type $i32-i64 (func (param i32 i64) (result i64))) (type $f64-f32 (func (param f64 f32) (result f32))) (type $i64-f64 (func (param i64 f64) (result f64))) (type $over-i32-duplicate (func (param i32) (result i32))) (type $over-i64-duplicate (func (param i64) (result i64))) (type $over-f32-duplicate (func (param f32) (result f32))) (type $over-f64-duplicate (func (param f64) (result f64))) (func $const-i32 (type $out-i32) (i32.const 0x132)) (func $const-i64 (type $out-i64) (i64.const 0x164)) (func $const-f32 (type $out-f32) (f32.const 0xf32)) (func $const-f64 (type $out-f64) (f64.const 0xf64)) (func $const-f64-i32 (type $out-f64-i32) (f64.const 0xf64) (i32.const 32)) (func $id-i32 (type $over-i32) (local.get 0)) (func $id-i64 (type $over-i64) (local.get 0)) (func $id-f32 (type $over-f32) (local.get 0)) (func $id-f64 (type $over-f64) (local.get 0)) (func $id-i32-f64 (type $over-i32-f64) (local.get 0) (local.get 1)) (func $swap-i32-i64 (type $swap-i32-i64) (local.get 1) (local.get 0)) (func $i32-i64 (type $i32-i64) (local.get 1)) (func $i64-f64 (type $i64-f64) (local.get 1)) (func $f32-i32 (type $f32-i32) (local.get 1)) (func $f64-f32 (type $f64-f32) (local.get 1)) (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) (table funcref (elem $const-i32 $const-i64 $const-f32 $const-f64 ;; 0..3 $id-i32 $id-i64 $id-f32 $id-f64 ;; 4..7 $f32-i32 $i32-i64 $f64-f32 $i64-f64 ;; 9..11 $fac-i64 $fib-i64 $even $odd ;; 12..15 $runaway $mutual-runaway1 $mutual-runaway2 ;; 16..18 $over-i32-duplicate $over-i64-duplicate ;; 19..20 $over-f32-duplicate $over-f64-duplicate ;; 21..22 $fac-i32 $fac-f32 $fac-f64 ;; 23..25 $fib-i32 $fib-f32 $fib-f64 ;; 26..28 $const-f64-i32 $id-i32-f64 $swap-i32-i64 ;; 29..31 ) ) ;; Syntax (func (call_indirect (i32.const 0)) (call_indirect (param i64) (i64.const 0) (i32.const 0)) (call_indirect (param i64) (param) (param f64 i32 i64) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) (call_indirect (result) (i32.const 0)) (drop (i32.eqz (call_indirect (result i32) (i32.const 0)))) (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0)))) (drop (i32.eqz (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0)) )) (drop (i32.eqz (call_indirect (param) (param i64) (param) (param f64 i32 i64) (param) (param) (result) (result i32) (result) (result) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) )) (drop (i64.eqz (call_indirect (type $over-i64) (param i64) (result i64) (i64.const 0) (i32.const 0) ) )) ) ;; Typing (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0)) ) (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1)) ) (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2)) ) (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3)) ) (func (export "type-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-index") (result i64) (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) ) (func (export "type-first-i32") (result i32) (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) ) (func (export "type-first-i64") (result i64) (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) ) (func (export "type-first-f32") (result f32) (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) ) (func (export "type-first-f64") (result f64) (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) ) (func (export "type-second-i32") (result i32) (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) ) (func (export "type-second-i64") (result i64) (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) ) (func (export "type-second-f32") (result f32) (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) ) (func (export "type-second-f64") (result f64) (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) ) (func (export "type-all-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-all-i32-f64") (result i32 f64) (call_indirect (type $over-i32-f64) (i32.const 1) (f64.const 2) (i32.const 30) ) ) (func (export "type-all-i32-i64") (result i64 i32) (call_indirect (type $swap-i32-i64) (i32.const 1) (i64.const 2) (i32.const 31) ) ) ;; Dispatch (func (export "dispatch") (param i32 i64) (result i64) (call_indirect (type $over-i64) (local.get 1) (local.get 0)) ) (func (export "dispatch-structural-i64") (param i32) (result i64) (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) ) (func (export "dispatch-structural-i32") (param i32) (result i32) (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0)) ) (func (export "dispatch-structural-f32") (param i32) (result f32) (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0)) ) (func (export "dispatch-structural-f64") (param i32) (result f64) (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0)) ) ;; Recursion (func $fac-i64 (export "fac-i64") (type $over-i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 12) ) ) ) ) ) (func $fib-i64 (export "fib-i64") (type $over-i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 2)) (i32.const 13) ) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 13) ) ) ) ) ) (func $fac-i32 (export "fac-i32") (type $over-i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 1)) (else (i32.mul (local.get 0) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 23) ) ) ) ) ) (func $fac-f32 (export "fac-f32") (type $over-f32) (if (result f32) (f32.eq (local.get 0) (f32.const 0.0)) (then (f32.const 1.0)) (else (f32.mul (local.get 0) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 24) ) ) ) ) ) (func $fac-f64 (export "fac-f64") (type $over-f64) (if (result f64) (f64.eq (local.get 0) (f64.const 0.0)) (then (f64.const 1.0)) (else (f64.mul (local.get 0) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 25) ) ) ) ) ) (func $fib-i32 (export "fib-i32") (type $over-i32) (if (result i32) (i32.le_u (local.get 0) (i32.const 1)) (then (i32.const 1)) (else (i32.add (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 2)) (i32.const 26) ) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 26) ) ) ) ) ) (func $fib-f32 (export "fib-f32") (type $over-f32) (if (result f32) (f32.le (local.get 0) (f32.const 1.0)) (then (f32.const 1.0)) (else (f32.add (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 2.0)) (i32.const 27) ) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 27) ) ) ) ) ) (func $fib-f64 (export "fib-f64") (type $over-f64) (if (result f64) (f64.le (local.get 0) (f64.const 1.0)) (then (f64.const 1.0)) (else (f64.add (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 2.0)) (i32.const 28) ) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 28) ) ) ) ) ) (func $even (export "even") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 44)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 15) ) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 99)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 14) ) ) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-if-condition") (result i32) (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i64) (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)))) ) (func (export "as-br_table-first") (result f32) (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0)) ) (func (export "as-store-first") (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-return-value") (result i32) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return) ) (func (export "as-drop-operand") (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop) ) (func (export "as-br-value") (result f32) (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6)))) ) (func (export "as-local.set-value") (result f64) (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0) ) (func (export "as-local.tee-value") (result f64) (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) ) (global $a (mut f64) (f64.const 10.0)) (func (export "as-global.set-value") (result f64) (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6)) ) ) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-index") (i64.const 100)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-all-i32-f64") (i32.const 1) (f64.const 2)) (assert_return (invoke "type-all-i32-i64") (i64.const 2) (i32.const 1)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 32) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") (assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880)) (assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55)) (assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9)) (assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9)) (assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880)) (assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55)) (assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0)) (assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0)) (assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch") (assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120)) (assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800)) (assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0)) (assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0)) (assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0)) (assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0)) (assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2)) (assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8)) (assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946)) (assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0)) (assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0)) (assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0)) (assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0)) (assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0)) (assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0)) (assert_return (invoke "even" (i32.const 0)) (i32.const 44)) (assert_return (invoke "even" (i32.const 1)) (i32.const 99)) (assert_return (invoke "even" (i32.const 100)) (i32.const 44)) (assert_return (invoke "even" (i32.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i64.const 0x164)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (f32.const 0xf32)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (f32.const 1)) (assert_return (invoke "as-local.set-value") (f64.const 1)) (assert_return (invoke "as-local.tee-value") (f64.const 1)) (assert_return (invoke "as-global.set-value") (f64.const 1.0)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) ;; Multiple tables (module (type $ii-i (func (param i32 i32) (result i32))) (table $t1 funcref (elem $f $g)) (table $t2 funcref (elem $h $i $j)) (table $t3 4 funcref) (elem (table $t3) (i32.const 0) func $g $h) (elem (table $t3) (i32.const 3) func $z) (func $f (type $ii-i) (i32.add (local.get 0) (local.get 1))) (func $g (type $ii-i) (i32.sub (local.get 0) (local.get 1))) (func $h (type $ii-i) (i32.mul (local.get 0) (local.get 1))) (func $i (type $ii-i) (i32.div_u (local.get 0) (local.get 1))) (func $j (type $ii-i) (i32.rem_u (local.get 0) (local.get 1))) (func $z) (func (export "call-1") (param i32 i32 i32) (result i32) (call_indirect $t1 (type $ii-i) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "call-2") (param i32 i32 i32) (result i32) (call_indirect $t2 (type $ii-i) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "call-3") (param i32 i32 i32) (result i32) (call_indirect $t3 (type $ii-i) (local.get 0) (local.get 1) (local.get 2)) ) ) (assert_return (invoke "call-1" (i32.const 2) (i32.const 3) (i32.const 0)) (i32.const 5)) (assert_return (invoke "call-1" (i32.const 2) (i32.const 3) (i32.const 1)) (i32.const -1)) (assert_trap (invoke "call-1" (i32.const 2) (i32.const 3) (i32.const 2)) "undefined element") (assert_return (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 0)) (i32.const 6)) (assert_return (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 1)) (i32.const 0)) (assert_return (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 2)) (i32.const 2)) (assert_trap (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 3)) "undefined element") (assert_return (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 0)) (i32.const -1)) (assert_return (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 1)) (i32.const 6)) (assert_trap (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 2)) "uninitialized element") (assert_trap (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 3)) "indirect call type mismatch") (assert_trap (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 4)) "undefined element") ;; Invalid syntax (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (type $sig) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (result i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (type $sig) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func" " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (param i32) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "inline function type" ) ;; Invalid typing (assert_invalid (module (type (func)) (func $no-table (call_indirect (type 0) (i32.const 0))) ) "unknown table" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (result i64))) (table 0 funcref) (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-2-vs-0 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-first-void-vs-num (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-second-void-vs-num (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 f64))) (table 0 funcref) (func $type-first-num-vs-num (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $type-second-num-vs-num (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-block (block (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-block (block (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) ) "type mismatch" ) ;; Unbound type (assert_invalid (module (table 0 funcref) (func $unbound-type (call_indirect (type 1) (i32.const 0))) ) "unknown type" ) (assert_invalid (module (table 0 funcref) (func $large-type (call_indirect (type 1012321300) (i32.const 0))) ) "unknown type" ) ;; Unbound function in table (assert_invalid (module (table funcref (elem 0 0))) "unknown function" ) ================================================ FILE: Test/WebAssembly/multi-memory/const.wast ================================================ ;; Test t.const instructions ;; Syntax error (module (func (i32.const 0_123_456_789) drop)) (module (func (i32.const 0x0_9acf_fBDF) drop)) (assert_malformed (module quote "(func (i32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 0xg) drop)") "unknown operator" ) (module (func (i64.const 0_123_456_789) drop)) (module (func (i64.const 0x0125_6789_ADEF_bcef) drop)) (assert_malformed (module quote "(func (i64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 0xg) drop)") "unknown operator" ) (module (func (f32.const 0123456789) drop)) (module (func (f32.const 0123456789e019) drop)) (module (func (f32.const 0123456789e+019) drop)) (module (func (f32.const 0123456789e-019) drop)) (module (func (f32.const 0123456789.) drop)) (module (func (f32.const 0123456789.e019) drop)) (module (func (f32.const 0123456789.e+019) drop)) (module (func (f32.const 0123456789.e-019) drop)) (module (func (f32.const 0123456789.0123456789) drop)) (module (func (f32.const 0123456789.0123456789e019) drop)) (module (func (f32.const 0123456789.0123456789e+019) drop)) (module (func (f32.const 0123456789.0123456789e-019) drop)) (module (func (f32.const 0x0123456789ABCDEF) drop)) (module (func (f32.const 0x0123456789ABCDEFp019) drop)) (module (func (f32.const 0x0123456789ABCDEFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEFp-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.) drop)) (module (func (f32.const 0x0123456789ABCDEF.p019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aF) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp-019) drop)) (assert_malformed (module quote "(func (f32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f32.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0pA) drop)") "unknown operator" ) (module (func (f64.const 0123456789) drop)) (module (func (f64.const 0123456789e019) drop)) (module (func (f64.const 0123456789e+019) drop)) (module (func (f64.const 0123456789e-019) drop)) (module (func (f64.const 0123456789.) drop)) (module (func (f64.const 0123456789.e019) drop)) (module (func (f64.const 0123456789.e+019) drop)) (module (func (f64.const 0123456789.e-019) drop)) (module (func (f64.const 0123456789.0123456789) drop)) (module (func (f64.const 0123456789.0123456789e019) drop)) (module (func (f64.const 0123456789.0123456789e+019) drop)) (module (func (f64.const 0123456789.0123456789e-019) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9e0_1_9) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.p0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (assert_malformed (module quote "(func (f64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f64.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0pA) drop)") "unknown operator" ) ;; Range error (module (func (i32.const 0xffffffff) drop)) (module (func (i32.const -0x80000000) drop)) (assert_malformed (module quote "(func (i32.const 0x100000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -0x80000001) drop)") "constant out of range" ) (module (func (i32.const 4294967295) drop)) (module (func (i32.const -2147483648) drop)) (assert_malformed (module quote "(func (i32.const 4294967296) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -2147483649) drop)") "constant out of range" ) (module (func (i64.const 0xffffffffffffffff) drop)) (module (func (i64.const -0x8000000000000000) drop)) (assert_malformed (module quote "(func (i64.const 0x10000000000000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -0x8000000000000001) drop)") "constant out of range" ) (module (func (i64.const 18446744073709551615) drop)) (module (func (i64.const -9223372036854775808) drop)) (assert_malformed (module quote "(func (i64.const 18446744073709551616) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -9223372036854775809) drop)") "constant out of range" ) (module (func (f32.const 0x1p127) drop)) (module (func (f32.const -0x1p127) drop)) (module (func (f32.const 0x1.fffffep127) drop)) (module (func (f32.const -0x1.fffffep127) drop)) (module (func (f32.const 0x1.fffffe7p127) drop)) (module (func (f32.const -0x1.fffffe7p127) drop)) (module (func (f32.const 0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const -0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const 0x1.fffffefffffffffffffp127) drop)) (module (func (f32.const -0x1.fffffefffffffffffffp127) drop)) (assert_malformed (module quote "(func (f32.const 0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const 0x1.ffffffp127) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1.ffffffp127) drop)") "constant out of range" ) (module (func (f32.const 1e38) drop)) (module (func (f32.const -1e38) drop)) (assert_malformed (module quote "(func (f32.const 1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -1e39) drop)") "constant out of range" ) (module (func (f32.const 340282356779733623858607532500980858880) drop)) (module (func (f32.const -340282356779733623858607532500980858880) drop)) (assert_malformed (module quote "(func (f32.const 340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -340282356779733661637539395458142568448) drop)") "constant out of range" ) (module (func (f64.const 0x1p1023) drop)) (module (func (f64.const -0x1p1023) drop)) (module (func (f64.const 0x1.fffffffffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffffp1023) drop)) (module (func (f64.const 0x1.fffffffffffff7p1023) drop)) (module (func (f64.const -0x1.fffffffffffff7p1023) drop)) (module (func (f64.const 0x1.fffffffffffff7ffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffff7ffffffp1023) drop)) (assert_malformed (module quote "(func (f64.const 0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const 0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (module (func (f64.const 1e308) drop)) (module (func (f64.const -1e308) drop)) (assert_malformed (module quote "(func (f64.const 1e309) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -1e309) drop)") "constant out of range" ) (module (func (f64.const 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (f64.const -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (assert_malformed (module quote "(func (f64.const 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (module (func (f32.const nan:0x1) drop)) (module (func (f64.const nan:0x1) drop)) (module (func (f32.const nan:0x7f_ffff) drop)) (module (func (f64.const nan:0xf_ffff_ffff_ffff) drop)) (assert_malformed (module quote "(func (f32.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const nan:0x80_0000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x10_0000_0000_0000) drop)") "constant out of range" ) ;; Rounding behaviour ;; f32, small exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) ;; f32, large exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000000))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000000))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000007ffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000007ffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000000))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000000))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000bffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x400000bffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000c000000))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x400000c000000))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951488))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951488))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951489))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951489))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169215))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169215))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169216))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169216))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) ;; f32, subnormal (module (func (export "f") (result f32) (f32.const +0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000006p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000006p-126)) ;; f32, round down at limit to infinity (module (func (export "f") (result f32) (f32.const +0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) ;; f64, small exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+999)) ;; f64, large exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const +1152921504606847104))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847104))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847105))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847105))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847359))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847359))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847360))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847360))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+60)) ;; f64, subnormal (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-1022)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-1022)) ;; f64, round down at limit to infinity (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) ================================================ FILE: Test/WebAssembly/multi-memory/conversions.wast ================================================ (module (func (export "i64.extend_i32_s") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_i32_u") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_f32_s") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_f32_u") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) (func (export "i32.trunc_f64_s") (param $x f64) (result i32) (i32.trunc_f64_s (local.get $x))) (func (export "i32.trunc_f64_u") (param $x f64) (result i32) (i32.trunc_f64_u (local.get $x))) (func (export "i64.trunc_f32_s") (param $x f32) (result i64) (i64.trunc_f32_s (local.get $x))) (func (export "i64.trunc_f32_u") (param $x f32) (result i64) (i64.trunc_f32_u (local.get $x))) (func (export "i64.trunc_f64_s") (param $x f64) (result i64) (i64.trunc_f64_s (local.get $x))) (func (export "i64.trunc_f64_u") (param $x f64) (result i64) (i64.trunc_f64_u (local.get $x))) (func (export "i32.trunc_sat_f32_s") (param $x f32) (result i32) (i32.trunc_sat_f32_s (local.get $x))) (func (export "i32.trunc_sat_f32_u") (param $x f32) (result i32) (i32.trunc_sat_f32_u (local.get $x))) (func (export "i32.trunc_sat_f64_s") (param $x f64) (result i32) (i32.trunc_sat_f64_s (local.get $x))) (func (export "i32.trunc_sat_f64_u") (param $x f64) (result i32) (i32.trunc_sat_f64_u (local.get $x))) (func (export "i64.trunc_sat_f32_s") (param $x f32) (result i64) (i64.trunc_sat_f32_s (local.get $x))) (func (export "i64.trunc_sat_f32_u") (param $x f32) (result i64) (i64.trunc_sat_f32_u (local.get $x))) (func (export "i64.trunc_sat_f64_s") (param $x f64) (result i64) (i64.trunc_sat_f64_s (local.get $x))) (func (export "i64.trunc_sat_f64_u") (param $x f64) (result i64) (i64.trunc_sat_f64_u (local.get $x))) (func (export "f32.convert_i32_s") (param $x i32) (result f32) (f32.convert_i32_s (local.get $x))) (func (export "f32.convert_i64_s") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f64.convert_i32_s") (param $x i32) (result f64) (f64.convert_i32_s (local.get $x))) (func (export "f64.convert_i64_s") (param $x i64) (result f64) (f64.convert_i64_s (local.get $x))) (func (export "f32.convert_i32_u") (param $x i32) (result f32) (f32.convert_i32_u (local.get $x))) (func (export "f32.convert_i64_u") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) (func (export "f64.convert_i32_u") (param $x i32) (result f64) (f64.convert_i32_u (local.get $x))) (func (export "f64.convert_i64_u") (param $x i64) (result f64) (f64.convert_i64_u (local.get $x))) (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote_f32 (local.get $x))) (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote_f64 (local.get $x))) (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret_i32 (local.get $x))) (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret_i64 (local.get $x))) (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret_f32 (local.get $x))) (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret_f64 (local.get $x))) ) (assert_return (invoke "i64.extend_i32_s" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_s" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -10000)) (i64.const -10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -1)) (i64.const -1)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_u" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_u" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) (assert_return (invoke "i64.extend_i32_u" (i32.const -1)) (i64.const 0xffffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) (assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) (assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) (assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f32_s" (f32.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -2147483904.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_trap (invoke "i32.trunc_f32_u" (f32.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9)) (i32.const 2147483647)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483649.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.9)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9)) (i32.const 4294967295)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e16)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e30)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 9223372036854775808)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f32_s" (f32.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -9223373136366403584.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_trap (invoke "i64.trunc_f32_u" (f32.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_s" (f64.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -9223372036854777856.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_u" (f64.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "f32.convert_i32_s" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const -2147483648)) (f32.const -2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) ;; Saturating conversions: test all the same values as the non-saturating conversions. (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483904.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483649.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e16)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e30)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223373136366403584.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854777856.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i64.const 0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_s" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_s" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) (assert_return (invoke "f32.convert_i64_s" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_s" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53)) (assert_return (invoke "f64.convert_i32_s" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_s" (i32.const -2147483648)) (f64.const -2147483648)) (assert_return (invoke "f64.convert_i32_s" (i32.const 987654321)) (f64.const 987654321)) (assert_return (invoke "f64.convert_i64_s" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) (assert_return (invoke "f64.convert_i64_s" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740993)) (f64.const -9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740995)) (f64.const -9007199254740996)) (assert_return (invoke "f32.convert_i32_u" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const -2147483648)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xffffffff)) (f32.const 4294967296.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000080)) (f32.const 0x1.000000p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000081)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000082)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe80)) (f32.const 0x1.fffffcp+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe81)) (f32.const 0x1.fffffep+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe82)) (f32.const 0x1.fffffep+31)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_u" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_u" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_u" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x7fffffbfffffffff)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x8000008000000001)) (f32.const 0x1.000002p+63)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xfffffe8000000001)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "f64.convert_i32_u" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_u" (i32.const -2147483648)) (f64.const 2147483648)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0xffffffff)) (f64.const 4294967295.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_u" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000400)) (f64.const 0x1.0000000000000p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000401)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000402)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff400)) (f64.const 0x1.ffffffffffffep+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff401)) (f64.const 0x1.fffffffffffffp+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff402)) (f64.const 0x1.fffffffffffffp+63)) ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) (assert_return (invoke "f64.promote_f32" (f32.const inf)) (f64.const inf)) (assert_return (invoke "f64.promote_f32" (f32.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.promote_f32" (f32.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f64.promote_f32" (f32.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const -nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) (assert_return (invoke "f32.demote_f64" (f64.const inf)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) (assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const -nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) (assert_return (invoke "i32.reinterpret_f32" (f32.const inf)) (i32.const 0x7f800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -inf)) (i32.const 0xff800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) (assert_return (invoke "i64.reinterpret_f64" (f64.const inf)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -inf)) (i64.const 0xfff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) ;; Type check (assert_invalid (module (func (result i32) (i32.wrap_i64 (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.reinterpret_f32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.reinterpret_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.demote_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.reinterpret_i32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/multi-memory/custom.wast ================================================ (module binary "\00asm" "\01\00\00\00" "\00\24\10" "a custom section" "this is the payload" "\00\20\10" "a custom section" "this is payload" "\00\11\10" "a custom section" "" "\00\10\00" "" "this is payload" "\00\01\00" "" "" "\00\24\10" "\00\00custom sectio\00" "this is the payload" "\00\24\10" "\ef\bb\bfa custom sect" "this is the payload" "\00\24\10" "a custom sect\e2\8c\a3" "this is the payload" "\00\1f\16" "module within a module" "\00asm" "\01\00\00\00" ) (module binary "\00asm" "\01\00\00\00" "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\01\01\00" ;; type section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\02\01\00" ;; import section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\03\01\00" ;; function section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\04\01\00" ;; table section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\05\01\00" ;; memory section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\06\01\00" ;; global section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\07\01\00" ;; export section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\09\01\00" ;; element section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0a\01\00" ;; code section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0b\01\00" ;; data section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" ) (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\1a\06" "custom" "this is the payload" ;; custom section "\03\02\01\00" ;; function section "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00\00\05\01\00\07\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\26\10" "a custom section" "this is the payload" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\25\10" "a custom section" "this is the payload" "\00\24\10" "a custom section" "this is the payload" ) "malformed section id" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\25\10" "a custom section" "this is the payload" ;; wrong length! "\03\02\01\00" ;; function section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) "function and code section have inconsistent lengths" ) ;; Test concatenated modules. (assert_malformed (module binary "\00asm\01\00\00\00" "\00asm\01\00\00\00" ) "length out of bounds" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01\00\01" ;; memory section "\0c\01\02" ;; data count section (2 segments) "\0b\06\01\00\41\00\0b\00" ;; data section (1 segment) ) "data count and data section have inconsistent lengths" ) ================================================ FILE: Test/WebAssembly/multi-memory/data.wast ================================================ ;; Test the data section ;; Syntax (module (memory $m 1) (data (i32.const 0)) (data (i32.const 1) "a" "" "bcd") (data (offset (i32.const 0))) (data (offset (i32.const 0)) "" "a" "bc" "") (data (memory 0) (i32.const 0)) (data (memory 0x0) (i32.const 1) "a" "" "bcd") (data (memory 0x000) (offset (i32.const 0))) (data (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data (memory $m) (i32.const 0)) (data (memory $m) (i32.const 1) "a" "" "bcd") (data (memory $m) (offset (i32.const 0))) (data (memory $m) (offset (i32.const 0)) "" "a" "bc" "") (data $d1 (i32.const 0)) (data $d2 (i32.const 1) "a" "" "bcd") (data $d3 (offset (i32.const 0))) (data $d4 (offset (i32.const 0)) "" "a" "bc" "") (data $d5 (memory 0) (i32.const 0)) (data $d6 (memory 0x0) (i32.const 1) "a" "" "bcd") (data $d7 (memory 0x000) (offset (i32.const 0))) (data $d8 (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data $d9 (memory $m) (i32.const 0)) (data $d10 (memory $m) (i32.const 1) "a" "" "bcd") (data $d11 (memory $m) (offset (i32.const 0))) (data $d12 (memory $m) (offset (i32.const 0)) "" "a" "bc" "") ) ;; Basic use (module (memory 1) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") ) (module (memory 1) (data (i32.const 0) "a") (data (i32.const 3) "b") (data (i32.const 100) "cde") (data (i32.const 5) "x") (data (i32.const 3) "c") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 1) "b") (data (i32.const 2) "cde") (data (i32.const 3) "f") (data (i32.const 2) "g") (data (i32.const 1) "h") ) (module (global (import "spectest" "global_i32") i32) (memory 1) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get 0) "a") ) (module (global $g (import "spectest" "global_i32") i32) (memory 1) (data (global.get $g) "a") ) (module (global $g (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get $g) "a") ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (module (memory 1) (data (global.get 0) "a") (global i32 (i32.const 0))) ;; (module (memory 1) (data (global.get $g) "a") (global $g i32 (i32.const 0))) ;; Corner cases (module (memory 1) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (memory 2) (data (i32.const 0x1_ffff) "a") ) (module (memory 0) (data (i32.const 0)) ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0)) ) (module (memory 0 0) (data (i32.const 0)) ) (module (memory 1) (data (i32.const 0x1_0000) "") ) (module (memory 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "" "") ) (module (memory 0 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0)) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0 3)) (data (global.get 0) "a") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 1) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 1) "a") ) ;; Invalid bounds for data (assert_trap (module (memory 0) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0 0) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0 1) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0) (data (i32.const 1)) ) "out of bounds memory access" ) (assert_trap (module (memory 0 1) (data (i32.const 1)) ) "out of bounds memory access" ) ;; This seems to cause a time-out on Travis. (;assert_unlinkable (module (memory 0x10000) (data (i32.const 0xffffffff) "ab") ) "" ;; either out of memory or out of bounds ;) (assert_trap (module (global (import "spectest" "global_i32") i32) (memory 0) (data (global.get 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 1 2) (data (i32.const 0x1_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const 0x1_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2) (data (i32.const 0x2_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2 3) (data (i32.const 0x2_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 1) (data (i32.const -1) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const -1) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2) (data (i32.const -100) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const -100) "a") ) "out of bounds memory access" ) ;; Data without memory (assert_invalid (module (data (i32.const 0) "") ) "unknown memory" ) ;; Data segment with memory index 1 (only memory 0 available) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\07\01" ;; data section "\02\01\41\00\0b" ;; active data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 0 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\06\01" ;; data section "\00\41\00\0b" ;; active data segment 0 for memory 0 "\00" ;; empty vec(byte) ) "unknown memory 0" ) ;; Data segment with memory index 1 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\07\01" ;; data section "\02\01\41\00\0b" ;; active data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 1 and vec(byte) as above, ;; only memory 0 available. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Data segment with memory index 1 and specially crafted vec(byte) after. ;; This is to detect incorrect validation where memory index is interpreted ;; as a flag followed by "\41" interpreted as the size of vec(byte) ;; with the expected number of bytes following. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Invalid offsets (assert_invalid (module (memory 1) (data (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (ref.null func)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (offset (;empty instruction sequence;))) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (offset (global.get 0) (global.get 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (offset (global.get 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (nop)) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) (assert_invalid (module (memory 1) (data (global.get 0)) ) "unknown global 0" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (global.get 1)) ) "unknown global 1" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (memory 1) (data (global.get 0)) ) "constant expression required" ) ================================================ FILE: Test/WebAssembly/multi-memory/elem.wast ================================================ ;; Test the element section ;; Syntax (module (table $t 10 funcref) (func $f) (func $g) ;; Passive (elem funcref) (elem funcref (ref.func $f) (item ref.func $f) (item (ref.null func)) (ref.func $g)) (elem func) (elem func $f $f $g $g) (elem $p1 funcref) (elem $p2 funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem $p3 func) (elem $p4 func $f $f $g $g) ;; Active (elem (table $t) (i32.const 0) funcref) (elem (table $t) (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem (table $t) (i32.const 0) func) (elem (table $t) (i32.const 0) func $f $g) (elem (table $t) (offset (i32.const 0)) funcref) (elem (table $t) (offset (i32.const 0)) func $f $g) (elem (table 0) (i32.const 0) func) (elem (table 0x0) (i32.const 0) func $f $f) (elem (table 0x000) (offset (i32.const 0)) func) (elem (table 0) (offset (i32.const 0)) func $f $f) (elem (table $t) (i32.const 0) func) (elem (table $t) (i32.const 0) func $f $f) (elem (table $t) (offset (i32.const 0)) func) (elem (table $t) (offset (i32.const 0)) func $f $f) (elem (offset (i32.const 0))) (elem (offset (i32.const 0)) funcref (ref.func $f) (ref.null func)) (elem (offset (i32.const 0)) func $f $f) (elem (offset (i32.const 0)) $f $f) (elem (i32.const 0)) (elem (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem (i32.const 0) func $f $f) (elem (i32.const 0) $f $f) (elem (i32.const 0) funcref (item (ref.func $f)) (item (ref.null func))) (elem $a1 (table $t) (i32.const 0) funcref) (elem $a2 (table $t) (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem $a3 (table $t) (i32.const 0) func) (elem $a4 (table $t) (i32.const 0) func $f $g) (elem $a9 (table $t) (offset (i32.const 0)) funcref) (elem $a10 (table $t) (offset (i32.const 0)) func $f $g) (elem $a11 (table 0) (i32.const 0) func) (elem $a12 (table 0x0) (i32.const 0) func $f $f) (elem $a13 (table 0x000) (offset (i32.const 0)) func) (elem $a14 (table 0) (offset (i32.const 0)) func $f $f) (elem $a15 (table $t) (i32.const 0) func) (elem $a16 (table $t) (i32.const 0) func $f $f) (elem $a17 (table $t) (offset (i32.const 0)) func) (elem $a18 (table $t) (offset (i32.const 0)) func $f $f) (elem $a19 (offset (i32.const 0))) (elem $a20 (offset (i32.const 0)) funcref (ref.func $f) (ref.null func)) (elem $a21 (offset (i32.const 0)) func $f $f) (elem $a22 (offset (i32.const 0)) $f $f) (elem $a23 (i32.const 0)) (elem $a24 (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem $a25 (i32.const 0) func $f $f) (elem $a26 (i32.const 0) $f $f) ;; Declarative (elem declare funcref) (elem declare funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem declare func) (elem declare func $f $f $g $g) (elem $d1 declare funcref) (elem $d2 declare funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem $d3 declare func) (elem $d4 declare func $f $f $g $g) ) (module (func $f) (func $g) (table $t funcref (elem (ref.func $f) (ref.null func) (ref.func $g))) ) ;; Basic use (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 5) $f) (elem (i32.const 3) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 3) $f) (elem (i32.const 5) $f) ) (module (global (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get 0) $f) ) (module (global $g (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get $g) $f) ) (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 7) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-7") (i32.const 65)) (assert_return (invoke "call-9") (i32.const 66)) ;; Corner cases (module (table 10 funcref) (func $f) (elem (i32.const 9) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) ) (module (table 0 funcref) (elem (i32.const 0)) ) (module (import "spectest" "table" (table 0 funcref)) (elem (i32.const 0)) ) (module (table 0 0 funcref) (elem (i32.const 0)) ) (module (table 20 funcref) (elem (i32.const 20)) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 100 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 1) $f) ) (module (import "spectest" "table" (table 0 30 funcref)) (func $f) (elem (i32.const 1) $f) ) ;; Invalid bounds for elements (assert_trap (module (table 0 funcref) (func $f) (elem (i32.const 0) $f) ) "out of bounds table access" ) (assert_trap (module (table 0 0 funcref) (func $f) (elem (i32.const 0) $f) ) "out of bounds table access" ) (assert_trap (module (table 0 1 funcref) (func $f) (elem (i32.const 0) $f) ) "out of bounds table access" ) (assert_trap (module (table 0 funcref) (elem (i32.const 1)) ) "out of bounds table access" ) (assert_trap (module (table 10 funcref) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (table 10 20 funcref) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (table 10 funcref) (func $f) (elem (i32.const -1) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -1) $f) ) "out of bounds table access" ) (assert_trap (module (table 10 funcref) (func $f) (elem (i32.const -10) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -10) $f) ) "out of bounds table access" ) ;; Implicitly dropped elements (module (table 10 funcref) (elem $e (i32.const 0) func $f) (func $f) (func (export "init") (table.init $e (i32.const 0) (i32.const 0) (i32.const 1)) ) ) (assert_trap (invoke "init") "out of bounds table access") (module (table 10 funcref) (elem $e declare func $f) (func $f) (func (export "init") (table.init $e (i32.const 0) (i32.const 0) (i32.const 1)) ) ) (assert_trap (invoke "init") "out of bounds table access") ;; Element without table (assert_invalid (module (func $f) (elem (i32.const 0) $f) ) "unknown table" ) ;; Invalid offsets (assert_invalid (module (table 1 funcref) (elem (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (ref.null func)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (offset (;empty instruction sequence;))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (table 1 funcref) (elem (offset (global.get 0) (global.get 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (table 1 funcref) (elem (offset (global.get 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (table 1 funcref) (elem (global.get $g)) (global $g i32 (i32.const 0))) ;; "constant expression required" ;; ) (assert_invalid (module (table 1 funcref) (elem (global.get 0)) ) "unknown global 0" ) (assert_invalid (module (global (import "test" "global-i32") i32) (table 1 funcref) (elem (global.get 1)) ) "unknown global 1" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (table 1 funcref) (elem (global.get 0)) ) "constant expression required" ) ;; Invalid elements (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (ref.null extern)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (ref.null func) (ref.null func))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (i32.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (call $f))) (func $f (result funcref) (ref.null func)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (i32.add (i32.const 0) (i32.const 1)))) ) "constant expression required" ) ;; Two elements target the same slot (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten") (i32.const 66)) (module (type $out-i32 (func (result i32))) (import "spectest" "table" (table 10 funcref)) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten-element") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten-element") (i32.const 66)) ;; Element sections across multiple modules change the same table (module $module1 (type $out-i32 (func (result i32))) (table (export "shared-table") 10 funcref) (elem (i32.const 8) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-8") (type $out-i32) (call_indirect (type $out-i32) (i32.const 8)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (register "module1" $module1) (assert_trap (invoke $module1 "call-7") "uninitialized element") (assert_return (invoke $module1 "call-8") (i32.const 65)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module2 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 7) $const-i32-c) (elem (i32.const 8) $const-i32-d) (func $const-i32-c (type $out-i32) (i32.const 67)) (func $const-i32-d (type $out-i32) (i32.const 68)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 68)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module3 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 8) $const-i32-e) (elem (i32.const 9) $const-i32-f) (func $const-i32-e (type $out-i32) (i32.const 69)) (func $const-i32-f (type $out-i32) (i32.const 70)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 69)) (assert_return (invoke $module1 "call-9") (i32.const 70)) ================================================ FILE: Test/WebAssembly/multi-memory/endianness.wast ================================================ (module (memory 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i32) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i32.add (local.get $address) (i32.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i32) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i32.add (local.get $address) (i32.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i32) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i32.add (local.get $address) (i32.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i32) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i32.add (local.get $address) (i32.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i32) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i32.add (local.get $address) (i32.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i32) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i32.add (local.get $address) (i32.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_s (i32.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_u (i32.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i32.const 0) (local.get $value)) (i32.load (i32.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i32.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i32.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i32.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i32.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i32.const 0) (local.get $value)) (i64.load (i32.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i32.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i32.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i32.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i32.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i32.const 0) (local.get $value)) (call $i16_load_little (i32.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i32.const 0) (local.get $value)) (call $i32_load_little (i32.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i32.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i32.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i32.const 0) (local.get $value)) (call $i64_load_little (i32.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i32.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i32.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i32.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i32.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) ================================================ FILE: Test/WebAssembly/multi-memory/exports.wast ================================================ ;; Functions (module (func) (export "a" (func 0))) (module (func) (export "a" (func 0)) (export "b" (func 0))) (module (func) (func) (export "a" (func 0)) (export "b" (func 1))) (module (func (export "a"))) (module (func (export "a") (export "b") (export "c"))) (module (func (export "a") (export "b") (param i32))) (module (func) (export "a" (func 0))) (module (func $a (export "a"))) (module (func $a) (export "a" (func $a))) (module (export "a" (func 0)) (func)) (module (export "a" (func $a)) (func $a)) (module $Func (export "e" (func $f)) (func $f (param $n i32) (result i32) (return (i32.add (local.get $n) (i32.const 1))) ) ) (assert_return (invoke "e" (i32.const 42)) (i32.const 43)) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module) (module $Other1) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module (type (;0;) (func (result i32))) (func (;0;) (type 0) (result i32) i32.const 42) (export "a" (func 0)) (export "b" (func 0)) (export "c" (func 0))) (assert_return (invoke "a") (i32.const 42)) (assert_return (invoke "b") (i32.const 42)) (assert_return (invoke "c") (i32.const 42)) (assert_invalid (module (export "a" (func 0))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (import "spectest" "print_i32" (func (param i32))) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) "duplicate export name" ) (assert_invalid (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (func) (table 0 funcref) (export "a" (func 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Globals (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) (module (global (export "a") i32 (i32.const 0))) (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global $a (export "a") i32 (i32.const 0))) (module (global $a i32 (i32.const 0)) (export "a" (global $a))) (module (export "a" (global 0)) (global i32 (i32.const 0))) (module (export "a" (global $a)) (global $a i32 (i32.const 0))) (module $Global (export "e" (global $g)) (global $g i32 (i32.const 42)) ) (assert_return (get "e") (i32.const 42)) (assert_return (get $Global "e") (i32.const 42)) (module) (module $Other2) (assert_return (get $Global "e") (i32.const 42)) (assert_invalid (module (export "a" (global 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (table 0 funcref) (export "a" (global 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Tables (module (table 0 funcref) (export "a" (table 0))) (module (table 0 funcref) (export "a" (table 0)) (export "b" (table 0))) (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "b" (table 1))) (module (table (export "a") 0 funcref)) (module (table (export "a") 0 1 funcref)) (module (table 0 funcref) (export "a" (table 0))) (module (table 0 1 funcref) (export "a" (table 0))) (module (table $a (export "a") 0 funcref)) (module (table $a (export "a") 0 1 funcref)) (module (table $a 0 funcref) (export "a" (table $a))) (module (table $a 0 1 funcref) (export "a" (table $a))) (module (export "a" (table 0)) (table 0 funcref)) (module (export "a" (table 0)) (table 0 1 funcref)) (module (export "a" (table $a)) (table $a 0 funcref)) (module (export "a" (table $a)) (table $a 0 1 funcref)) (; TODO: access table ;) (assert_invalid (module (export "a" (table 0))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (import "spectest" "table" (table 10 20 funcref)) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "a" (table 1))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (func) (export "a" (table 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Memories (module (memory 0) (export "a" (memory 0))) (module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) ;; No multiple memories yet. ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) (module (memory (export "a") 0)) (module (memory (export "a") 0 1)) (module (memory 0) (export "a" (memory 0))) (module (memory 0 1) (export "a" (memory 0))) (module (memory $a (export "a") 0)) (module (memory $a (export "a") 0 1)) (module (memory $a 0) (export "a" (memory $a))) (module (memory $a 0 1) (export "a" (memory $a))) (module (export "a" (memory 0)) (memory 0)) (module (export "a" (memory 0)) (memory 0 1)) (module (export "a" (memory $a)) (memory $a 0)) (module (export "a" (memory $a)) (memory $a 0 1)) (; TODO: access memory ;) (assert_invalid (module (export "a" (memory 0))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (import "spectest" "memory" (memory 1 2)) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) "duplicate export name" ) ;; No multiple memories yet. ;; (assert_invalid ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (table 0 funcref) (export "a" (memory 0)) (export "a" (table 0))) "duplicate export name" ) ================================================ FILE: Test/WebAssembly/multi-memory/f32.wast ================================================ ;; Test all the f32 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f32_bitwise.wast and f32_cmp.wast). (module (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) ) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -inf)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -inf)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -inf)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -inf)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sqrt" (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) (assert_return (invoke "sqrt" (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) (assert_return (invoke "sqrt" (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) (assert_return (invoke "sqrt" (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sqrt" (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) (assert_return (invoke "sqrt" (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "sqrt" (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const inf)) (f32.const inf)) (assert_return (invoke "sqrt" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) (assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "floor" (f32.const inf)) (f32.const inf)) (assert_return (invoke "floor" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) (assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "ceil" (f32.const inf)) (f32.const inf)) (assert_return (invoke "ceil" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "trunc" (f32.const inf)) (f32.const inf)) (assert_return (invoke "trunc" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "nearest" (f32.const inf)) (f32.const inf)) (assert_return (invoke "nearest" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f32) (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.trunc (i64.const 0)))) "type mismatch") ;; These float literal patterns are only allowed in scripts, not in text format. (assert_malformed (module quote "(func (result f32) (f32.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result f32) (f32.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/multi-memory/f32_bitwise.wast ================================================ ;; Test all the f32 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "neg" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) ;; Type check (assert_invalid (module (func (result f32) (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/multi-memory/f32_cmp.wast ================================================ ;; Test all the f32 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f32) (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/multi-memory/f64.wast ================================================ ;; Test all the f64 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f64_bitwise.wast and f64_cmp.wast). (module (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) ) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -inf)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -inf)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sqrt" (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) (assert_return (invoke "sqrt" (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) (assert_return (invoke "sqrt" (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) (assert_return (invoke "sqrt" (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) (assert_return (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) (assert_return (invoke "sqrt" (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const inf)) (f64.const inf)) (assert_return (invoke "sqrt" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) (assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "floor" (f64.const inf)) (f64.const inf)) (assert_return (invoke "floor" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) (assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "ceil" (f64.const inf)) (f64.const inf)) (assert_return (invoke "ceil" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "trunc" (f64.const inf)) (f64.const inf)) (assert_return (invoke "trunc" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "nearest" (f64.const inf)) (f64.const inf)) (assert_return (invoke "nearest" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f64) (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.trunc (i64.const 0)))) "type mismatch") ;; These float literal patterns are only allowed in scripts, not in text format. (assert_malformed (module quote "(func (result f64) (f64.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result f64) (f64.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/multi-memory/f64_bitwise.wast ================================================ ;; Test all the f64 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "neg" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) ;; Type check (assert_invalid (module (func (result f64) (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/multi-memory/f64_cmp.wast ================================================ ;; Test all the f64 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f64) (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/multi-memory/fac.wast ================================================ (module ;; Recursive factorial (func (export "fac-rec") (param i64) (result i64) (if (result i64) (i64.eq (local.get 0) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call 0 (i64.sub (local.get 0) (i64.const 1)))) ) ) ) ;; Recursive factorial named (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) (if (result i64) (i64.eq (local.get $n) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get $n) (call $fac-rec-named (i64.sub (local.get $n) (i64.const 1))) ) ) ) ) ;; Iterative factorial (func (export "fac-iter") (param i64) (result i64) (local i64 i64) (local.set 1 (local.get 0)) (local.set 2 (i64.const 1)) (block (loop (if (i64.eq (local.get 1) (i64.const 0)) (then (br 2)) (else (local.set 2 (i64.mul (local.get 1) (local.get 2))) (local.set 1 (i64.sub (local.get 1) (i64.const 1))) ) ) (br 0) ) ) (local.get 2) ) ;; Iterative factorial named (func (export "fac-iter-named") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) ;; Optimized factorial. (func (export "fac-opt") (param i64) (result i64) (local i64) (local.set 1 (i64.const 1)) (block (br_if 0 (i64.lt_s (local.get 0) (i64.const 2))) (loop (local.set 1 (i64.mul (local.get 1) (local.get 0))) (local.set 0 (i64.add (local.get 0) (i64.const -1))) (br_if 0 (i64.gt_s (local.get 0) (i64.const 1))) ) ) (local.get 1) ) ;; Iterative factorial without locals. (func $pick0 (param i64) (result i64 i64) (local.get 0) (local.get 0) ) (func $pick1 (param i64 i64) (result i64 i64 i64) (local.get 0) (local.get 1) (local.get 0) ) (func (export "fac-ssa") (param i64) (result i64) (i64.const 1) (local.get 0) (loop $l (param i64 i64) (result i64) (call $pick1) (call $pick1) (i64.mul) (call $pick1) (i64.const 1) (i64.sub) (call $pick0) (i64.const 0) (i64.gt_u) (br_if $l) (drop) (return) ) ) ) (assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-ssa" (i64.const 25)) (i64.const 7034535277573963776)) (assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/multi-memory/float_exprs.wast ================================================ ;; Test interesting floating-point "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x*y+z is not done with x87-style intermediate precision. (module (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) ;; Test that x*y+z is not folded to fma. (module (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) (assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) ;; Test that x+0.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) (f32.add (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) (f64.add (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0 - x is not folded to -x. (module (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) (f32.sub (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) (f64.sub (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x - 0.0 is not folded to x. (module (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) (f32.sub (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) (f64.sub (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*0.0 is not folded to 0.0. (module (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*1.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0/x is not folded to 0.0. (module (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) (f32.div (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) (f64.div (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_div" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const -0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/1.0 is not folded to x. (module (func (export "f32.no_fold_div_one") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_div_one") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-1.0 is not folded to -x. (module (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -1.0))) (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -1.0))) ) (assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -0.0 - x is not folded to -x. (module (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) (f32.sub (f32.const -0.0) (local.get $x))) (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) (f64.sub (f64.const -0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -1.0 * x is not folded to -x. (module (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) (f32.mul (f32.const -1.0) (local.get $x))) (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) (f64.mul (f64.const -1.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x == x is not folded to true. (module (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) (f32.eq (local.get $x) (local.get $x))) (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) (f64.eq (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) ;; Test that x != x is not folded to false. (module (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) (f32.ne (local.get $x) (local.get $x))) (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) (f64.ne (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) ;; Test that x - x is not folded to 0.0. (module (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) (f32.sub (local.get $x) (local.get $x))) (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) (f64.sub (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_sub_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_sub_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const nan)) (f64.const nan:canonical)) ;; Test that x / x is not folded to 1.0. (module (func (export "f32.no_fold_div_self") (param $x f32) (result f32) (f32.div (local.get $x) (local.get $x))) (func (export "f64.no_fold_div_self") (param $x f64) (result f64) (f64.div (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_div_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const -0.0)) (f64.const nan:canonical)) ;; Test that x/3 is not folded to x*(1/3). (module (func (export "f32.no_fold_div_3") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 3.0))) (func (export "f64.no_fold_div_3") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 3.0))) ) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) ;; Test that (x*z)+(y*z) is not folded to (x+y)*z. (module (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $z)) (f32.mul (local.get $y) (local.get $z)))) (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $z)) (f64.mul (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) ;; Test that (x+y)*z is not folded to (x*z)+(y*z). (module (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (f32.add (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (f64.add (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) ;; Test that x*(y/z) is not folded to (x*y)/z. (module (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (local.get $x) (f32.div (local.get $y) (local.get $z)))) (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (local.get $x) (f64.div (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const inf)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) ;; Test that (x*y)/z is not folded to x*(y/z). (module (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) ;; Test that x+y+z+w is not reassociated. (module (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.add (f32.add (f32.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.add (f64.add (f64.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) (assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) ;; Test that x*y*z*w is not reassociated. (module (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.mul (f32.mul (f32.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.mul (f64.mul (f64.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) ;; Test that x/0 is not folded away. (module (func (export "f32.no_fold_div_0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_div_0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-0 is not folded away. (module (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -0.0))) (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -0.0))) ) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that sqrt(x*x+y*y) is not folded to hypot. (module (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.add (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.add (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) ;; Test that 1.0/x isn't approximated. (module (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) (f32.div (f32.const 1.0) (local.get $x))) ) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) ;; Test that 1.0/sqrt(x) isn't approximated or fused. (module (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) (f32.div (f32.const 1.0) (f32.sqrt (local.get $x)))) (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) (f64.div (f64.const 1.0) (f64.sqrt (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) ;; Test that sqrt(1.0/x) isn't approximated. (module (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) (f32.sqrt (f32.div (f32.const 1.0) (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) ;; Test that converting i32/i64 to f32/f64 and back isn't folded away. (module (func (export "i32.no_fold_f32_s") (param i32) (result i32) (i32.trunc_f32_s (f32.convert_i32_s (local.get 0)))) (func (export "i32.no_fold_f32_u") (param i32) (result i32) (i32.trunc_f32_u (f32.convert_i32_u (local.get 0)))) (func (export "i64.no_fold_f64_s") (param i64) (result i64) (i64.trunc_f64_s (f64.convert_i64_s (local.get 0)))) (func (export "i64.no_fold_f64_u") (param i64) (result i64) (i64.trunc_f64_u (f64.convert_i64_u (local.get 0)))) ) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) ;; Test that x+y-y is not folded to x. (module (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) (f32.sub (f32.add (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) (f64.sub (f64.add (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) ;; Test that x-y+y is not folded to x. (module (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) (f32.add (f32.sub (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) (f64.add (f64.sub (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) ;; Test that x*y/y is not folded to x. (module (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) ;; Test that x/y*y is not folded to x. (module (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) (f32.mul (f32.div (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) (f64.mul (f64.div (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) ;; Test that x/2*2 is not folded to x. (module (func (export "f32.no_fold_div2_mul2") (param $x f32) (result f32) (f32.mul (f32.div (local.get $x) (f32.const 2.0)) (f32.const 2.0))) (func (export "f64.no_fold_div2_mul2") (param $x f64) (result f64) (f64.mul (f64.div (local.get $x) (f64.const 2.0)) (f64.const 2.0))) ) (assert_return (invoke "f32.no_fold_div2_mul2" (f32.const 0x1.fffffep-126)) (f32.const 0x1p-125)) (assert_return (invoke "f64.no_fold_div2_mul2" (f64.const 0x1.fffffffffffffp-1022)) (f64.const 0x1p-1021)) ;; Test that promote(demote(x)) is not folded to x. (module (func (export "no_fold_demote_promote") (param $x f64) (result f64) (f64.promote_f32 (f32.demote_f64 (local.get $x)))) ) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) ;; Test that demote(promote(x)) is not folded to x, and aside from NaN is ;; bit-preserving. (module (func (export "no_fold_promote_demote") (param $x f32) (result f32) (f32.demote_f64 (f64.promote_f32 (local.get $x)))) ) (assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const inf)) (f32.const inf)) (assert_return (invoke "no_fold_promote_demote" (f32.const -inf)) (f32.const -inf)) ;; Test that demote(x+promote(y)) is not folded to demote(x)+y. (module (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.add (local.get $x) (f64.promote_f32 (local.get $y))))) (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $y)) (local.get $x)))) ) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) ;; Test that demote(x-promote(y)) is not folded to demote(x)-y. (module (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.sub (local.get $x) (f64.promote_f32 (local.get $y))))) ) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) ;; Test that converting between integer and float and back isn't folded away. (module (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_u (local.get $x)))) (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_u (local.get $x)))) ) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) ;; Test that dividing by a loop-invariant constant isn't optimized to be a ;; multiplication by a reciprocal, which would be particularly tempting since ;; the reciprocal computation could be hoisted. (module (memory 1 1) (func (export "init") (param $i i32) (param $x f32) (f32.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f32) (local $i i32) (block $exit (loop $cont (f32.store (local.get $i) (f32.div (f32.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f32) (f32.load (local.get $i))) ) (invoke "init" (i32.const 0) (f32.const 15.1)) (invoke "init" (i32.const 4) (f32.const 15.2)) (invoke "init" (i32.const 8) (f32.const 15.3)) (invoke "init" (i32.const 12) (f32.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) (assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) (assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) (invoke "run" (i32.const 16) (f32.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) (assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) (assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) (module (memory 1 1) (func (export "init") (param $i i32) (param $x f64) (f64.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f64) (local $i i32) (block $exit (loop $cont (f64.store (local.get $i) (f64.div (f64.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 8))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f64) (f64.load (local.get $i))) ) (invoke "init" (i32.const 0) (f64.const 15.1)) (invoke "init" (i32.const 8) (f64.const 15.2)) (invoke "init" (i32.const 16) (f64.const 15.3)) (invoke "init" (i32.const 24) (f64.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) (assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) (assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) (invoke "run" (i32.const 32) (f64.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) (assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) (assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) ;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. (module (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) ;; Test that x= y+z is not optimized to x >= y (monotonicity). ;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf (module (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.le (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.ge (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.le (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.ge (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const inf) (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const inf) (f64.const -inf) (f64.const inf)) (i32.const 0)) ;; Test that !(x < y) and friends are not optimized to x >= y and friends. (module (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) ;; Test that a method for approximating a "machine epsilon" produces the expected ;; approximation. ;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 (module (func (export "f32.epsilon") (result f32) (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) (func (export "f64.epsilon") (result f64) (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) ) (assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that a method for computing a "machine epsilon" produces the expected ;; result. ;; https://www.math.utah.edu/~beebe/software/ieee/ (module (func (export "f32.epsilon") (result f32) (local $x f32) (local $result f32) (local.set $x (f32.const 1)) (loop $loop (br_if $loop (f32.gt (f32.add (local.tee $x (f32.mul (local.tee $result (local.get $x)) (f32.const 0.5) ) ) (f32.const 1) ) (f32.const 1) ) ) ) (local.get $result) ) (func (export "f64.epsilon") (result f64) (local $x f64) (local $result f64) (local.set $x (f64.const 1)) (loop $loop (br_if $loop (f64.gt (f64.add (local.tee $x (f64.mul (local.tee $result (local.get $x)) (f64.const 0.5) ) ) (f64.const 1) ) (f64.const 1) ) ) ) (local.get $result) ) ) (assert_return (invoke "f32.epsilon") (f32.const 0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that floating-point numbers are not optimized as if they form a ;; trichotomy. (module (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.lt (local.get $x) (local.get $y)) (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) (i32.or (f32.le (local.get $x) (local.get $y)) (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.gt (local.get $x) (local.get $y)) (f32.le (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) (i32.or (f32.ge (local.get $x) (local.get $y)) (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.lt (local.get $x) (local.get $y)) (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) (i32.or (f64.le (local.get $x) (local.get $y)) (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.gt (local.get $x) (local.get $y)) (f64.le (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) (i32.or (f64.ge (local.get $x) (local.get $y)) (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) ;; Some test harnesses which can run this testsuite are unable to perform tests ;; of NaN bitpatterns. The following tests whether the underlying platform is ;; generally producing the kinds of NaNs expected. (module (func (export "f32.arithmetic_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fc00000))) (func (export "f32.canonical_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fffffff))) (func (export "f32.nonarithmetic_nan_bitpattern") (param $x i32) (result i32) (i32.reinterpret_f32 (f32.neg (f32.reinterpret_i32 (local.get $x))))) (func (export "f64.arithmetic_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7ff8000000000000))) (func (export "f64.canonical_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7fffffffffffffff))) (func (export "f64.nonarithmetic_nan_bitpattern") (param $x i64) (result i64) (i64.reinterpret_f64 (f64.neg (f64.reinterpret_i64 (local.get $x))))) ;; Versions of no_fold testcases that only care about NaN bitpatterns. (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (local.get $x)) (f32.const 0.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.const -0.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.const -1.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const -1.0))) (i32.const 0x7fc00000))) (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (local.get $x)) (f64.const 0.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.const -0.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.const -1.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const -1.0))) (i64.const 0x7ff8000000000000))) (func (export "no_fold_promote_demote") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.demote_f64 (f64.promote_f32 (f32.reinterpret_i32 (local.get $x))))) (i32.const 0x7fc00000))) ) (assert_return (invoke "f32.arithmetic_nan_bitpattern" (i32.const 0x7f803210) (i32.const 0x7f803210)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0) (i32.const 0)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7fc03210)) (i32.const 0xffc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xffc03210)) (i32.const 0x7fc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7f803210)) (i32.const 0xff803210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xff803210)) (i32.const 0x7f803210)) (assert_return (invoke "f64.arithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210) (i64.const 0x7ff0000000003210)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0) (i64.const 0)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff8000000003210)) (i64.const 0xfff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff8000000003210)) (i64.const 0x7ff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210)) (i64.const 0xfff0000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff0000000003210)) (i64.const 0x7ff0000000003210)) (assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) ;; Test that IEEE 754 double precision does, in fact, compute a certain dot ;; product correctly. (module (func (export "dot_product_example") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.mul (local.get $x2) (local.get $y2))) (f64.mul (local.get $x3) (local.get $y3))) ) (func (export "with_binary_sum_collapse") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.add (f64.mul (local.get $x2) (local.get $y2)) (f64.mul (local.get $x3) (local.get $y3)))) ) ) (assert_return (invoke "dot_product_example" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) (assert_return (invoke "with_binary_sum_collapse" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) ;; http://www.vinc17.org/research/fptest.en.html#contract2fma (module (func (export "f32.contract2fma") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.sub (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.contract2fma") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.sub (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.contract2fma" (f32.const 1.0) (f32.const 1.0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.19999ap+0) (f32.const 0x1.19999ap+0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.333332p+0) (f32.const 0x1.333332p+0)) (f32.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 1.0) (f64.const 1.0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.199999999999ap+0) (f64.const 0x1.199999999999ap+0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.3333333333333p+0) (f64.const 0x1.3333333333333p+0)) (f64.const 0.0)) ;; Test that floating-point isn't implemented with QuickBasic for MS-DOS. ;; https://support.microsoft.com/en-us/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors (module (func (export "f32.division_by_small_number") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.sub (local.get $a) (f32.div (local.get $b) (local.get $c)))) (func (export "f64.division_by_small_number") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.sub (local.get $a) (f64.div (local.get $b) (local.get $c)))) ) (assert_return (invoke "f32.division_by_small_number" (f32.const 112000000) (f32.const 100000) (f32.const 0.0009)) (f32.const 888888)) (assert_return (invoke "f64.division_by_small_number" (f64.const 112000000) (f64.const 100000) (f64.const 0.0009)) (f64.const 888888.8888888806)) ;; Test a simple golden ratio computation. ;; http://mathworld.wolfram.com/GoldenRatio.html (module (func (export "f32.golden_ratio") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.mul (local.get 0) (f32.add (local.get 1) (f32.sqrt (local.get 2))))) (func (export "f64.golden_ratio") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.mul (local.get 0) (f64.add (local.get 1) (f64.sqrt (local.get 2))))) ) (assert_return (invoke "f32.golden_ratio" (f32.const 0.5) (f32.const 1.0) (f32.const 5.0)) (f32.const 1.618034)) (assert_return (invoke "f64.golden_ratio" (f64.const 0.5) (f64.const 1.0) (f64.const 5.0)) (f64.const 1.618033988749895)) ;; Test some silver means computations. ;; http://mathworld.wolfram.com/SilverRatio.html (module (func (export "f32.silver_means") (param $n f32) (result f32) (f32.mul (f32.const 0.5) (f32.add (local.get $n) (f32.sqrt (f32.add (f32.mul (local.get $n) (local.get $n)) (f32.const 4.0)))))) (func (export "f64.silver_means") (param $n f64) (result f64) (f64.mul (f64.const 0.5) (f64.add (local.get $n) (f64.sqrt (f64.add (f64.mul (local.get $n) (local.get $n)) (f64.const 4.0)))))) ) (assert_return (invoke "f32.silver_means" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "f32.silver_means" (f32.const 1.0)) (f32.const 1.6180340)) (assert_return (invoke "f32.silver_means" (f32.const 2.0)) (f32.const 2.4142136)) (assert_return (invoke "f32.silver_means" (f32.const 3.0)) (f32.const 3.3027756)) (assert_return (invoke "f32.silver_means" (f32.const 4.0)) (f32.const 4.2360680)) (assert_return (invoke "f32.silver_means" (f32.const 5.0)) (f32.const 5.1925821)) (assert_return (invoke "f64.silver_means" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "f64.silver_means" (f64.const 1.0)) (f64.const 1.618033988749895)) (assert_return (invoke "f64.silver_means" (f64.const 2.0)) (f64.const 2.414213562373095)) (assert_return (invoke "f64.silver_means" (f64.const 3.0)) (f64.const 3.302775637731995)) (assert_return (invoke "f64.silver_means" (f64.const 4.0)) (f64.const 4.236067977499790)) (assert_return (invoke "f64.silver_means" (f64.const 5.0)) (f64.const 5.192582403567252)) ;; Test that an f64 0.4 isn't double-rounded as via extended precision. ;; https://bugs.llvm.org/show_bug.cgi?id=11200 (module (func (export "point_four") (param $four f64) (param $ten f64) (result i32) (f64.lt (f64.div (local.get $four) (local.get $ten)) (f64.const 0.4))) ) (assert_return (invoke "point_four" (f64.const 4.0) (f64.const 10.0)) (i32.const 0)) ;; Test an approximation function for tau; it should produces the correctly ;; rounded result after (and only after) the expected number of iterations. (module (func (export "tau") (param i32) (result f64) (local f64 f64 f64 f64) f64.const 0x0p+0 local.set 1 block local.get 0 i32.const 1 i32.lt_s br_if 0 f64.const 0x1p+0 local.set 2 f64.const 0x0p+0 local.set 3 loop local.get 1 local.get 2 f64.const 0x1p+3 local.get 3 f64.const 0x1p+3 f64.mul local.tee 4 f64.const 0x1p+0 f64.add f64.div f64.const 0x1p+2 local.get 4 f64.const 0x1p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.4p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.8p+2 f64.add f64.div f64.sub f64.mul f64.add local.set 1 local.get 3 f64.const 0x1p+0 f64.add local.set 3 local.get 2 f64.const 0x1p-4 f64.mul local.set 2 local.get 0 i32.const -1 i32.add local.tee 0 br_if 0 end end local.get 1 ) ) (assert_return (invoke "tau" (i32.const 10)) (f64.const 0x1.921fb54442d14p+2)) (assert_return (invoke "tau" (i32.const 11)) (f64.const 0x1.921fb54442d18p+2)) ;; Test that y < 0 ? x : (x + 1) is not folded to x + (y < 0). (module (func (export "f32.no_fold_conditional_inc") (param $x f32) (param $y f32) (result f32) (select (local.get $x) (f32.add (local.get $x) (f32.const 1.0)) (f32.lt (local.get $y) (f32.const 0.0)))) (func (export "f64.no_fold_conditional_inc") (param $x f64) (param $y f64) (result f64) (select (local.get $x) (f64.add (local.get $x) (f64.const 1.0)) (f64.lt (local.get $y) (f64.const 0.0)))) ) (assert_return (invoke "f32.no_fold_conditional_inc" (f32.const -0.0) (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f64.no_fold_conditional_inc" (f64.const -0.0) (f64.const -1.0)) (f64.const -0.0)) ================================================ FILE: Test/WebAssembly/multi-memory/float_literals.wast ================================================ ;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const inf))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +inf))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -inf))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f32_dec.root_beer_float") (result i32) (i32.reinterpret_f32 (f32.const 1.000000119))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const inf))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +inf))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -inf))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f64_dec.root_beer_float") (result i64) (i64.reinterpret_f64 (f64.const 1.000000119))) (func (export "f32-dec-sep1") (result f32) (f32.const 1_000_000)) (func (export "f32-dec-sep2") (result f32) (f32.const 1_0_0_0)) (func (export "f32-dec-sep3") (result f32) (f32.const 100_3.141_592)) (func (export "f32-dec-sep4") (result f32) (f32.const 99e+1_3)) (func (export "f32-dec-sep5") (result f32) (f32.const 122_000.11_3_54E0_2_3)) (func (export "f32-hex-sep1") (result f32) (f32.const 0xa_0f_00_99)) (func (export "f32-hex-sep2") (result f32) (f32.const 0x1_a_A_0_f)) (func (export "f32-hex-sep3") (result f32) (f32.const 0xa0_ff.f141_a59a)) (func (export "f32-hex-sep4") (result f32) (f32.const 0xf0P+1_3)) (func (export "f32-hex-sep5") (result f32) (f32.const 0x2a_f00a.1f_3_eep2_3)) (func (export "f64-dec-sep1") (result f64) (f64.const 1_000_000)) (func (export "f64-dec-sep2") (result f64) (f64.const 1_0_0_0)) (func (export "f64-dec-sep3") (result f64) (f64.const 100_3.141_592)) (func (export "f64-dec-sep4") (result f64) (f64.const 99e-1_23)) (func (export "f64-dec-sep5") (result f64) (f64.const 122_000.11_3_54e0_2_3)) (func (export "f64-hex-sep1") (result f64) (f64.const 0xa_f00f_0000_9999)) (func (export "f64-hex-sep2") (result f64) (f64.const 0x1_a_A_0_f)) (func (export "f64-hex-sep3") (result f64) (f64.const 0xa0_ff.f141_a59a)) (func (export "f64-hex-sep4") (result f64) (f64.const 0xf0P+1_3)) (func (export "f64-hex-sep5") (result f64) (f64.const 0x2a_f00a.1f_3_eep2_3)) ) (assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) (assert_return (invoke "f32_dec.root_beer_float") (i32.const 0x3f800001)) (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) (assert_return (invoke "f64_dec.root_beer_float") (i64.const 0x3ff000001ff19e24)) (assert_return (invoke "f32-dec-sep1") (f32.const 1000000)) (assert_return (invoke "f32-dec-sep2") (f32.const 1000)) (assert_return (invoke "f32-dec-sep3") (f32.const 1003.141592)) (assert_return (invoke "f32-dec-sep4") (f32.const 99e+13)) (assert_return (invoke "f32-dec-sep5") (f32.const 122000.11354e23)) (assert_return (invoke "f32-hex-sep1") (f32.const 0xa0f0099)) (assert_return (invoke "f32-hex-sep2") (f32.const 0x1aa0f)) (assert_return (invoke "f32-hex-sep3") (f32.const 0xa0ff.f141a59a)) (assert_return (invoke "f32-hex-sep4") (f32.const 0xf0P+13)) (assert_return (invoke "f32-hex-sep5") (f32.const 0x2af00a.1f3eep23)) (assert_return (invoke "f64-dec-sep1") (f64.const 1000000)) (assert_return (invoke "f64-dec-sep2") (f64.const 1000)) (assert_return (invoke "f64-dec-sep3") (f64.const 1003.141592)) (assert_return (invoke "f64-dec-sep4") (f64.const 99e-123)) (assert_return (invoke "f64-dec-sep5") (f64.const 122000.11354e23)) (assert_return (invoke "f64-hex-sep1") (f64.const 0xaf00f00009999)) (assert_return (invoke "f64-hex-sep2") (f64.const 0x1aa0f)) (assert_return (invoke "f64-hex-sep3") (f64.const 0xa0ff.f141a59a)) (assert_return (invoke "f64-hex-sep4") (f64.const 0xf0P+13)) (assert_return (invoke "f64-hex-sep5") (f64.const 0x2af00a.1f3eep23)) ;; Test parsing a float from binary (module binary ;; (func (export "4294967249") (result f64) (f64.const 4294967249)) "\00\61\73\6d\01\00\00\00\01\85\80\80\80\00\01\60" "\00\01\7c\03\82\80\80\80\00\01\00\07\8e\80\80\80" "\00\01\0a\34\32\39\34\39\36\37\32\34\39\00\00\0a" "\91\80\80\80\00\01\8b\80\80\80\00\00\44\00\00\20" "\fa\ff\ff\ef\41\0b" ) (assert_return (invoke "4294967249") (f64.const 4294967249)) (assert_malformed (module quote "(global f32 (f32.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_+1))") "unknown operator" ) ================================================ FILE: Test/WebAssembly/multi-memory/float_memory.wast ================================================ ;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory (data "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory (data "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 1))) (func (export "i32.load") (result i32) (i32.load (i32.const 1))) (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 1))) (func (export "i64.load") (result i64) (i64.load (i32.const 1))) (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory (data "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory (data "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) ================================================ FILE: Test/WebAssembly/multi-memory/float_misc.wast ================================================ ;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. ;; This testsuite is not currently sufficient for full IEEE 754 conformance ;; testing; platforms are currently expected to meet these requirements in ;; their own way (widely-used hardware platforms already do this). ;; ;; What this testsuite does test is that (a) the platform is basically IEEE 754 ;; rather than something else entirely, (b) it's configured correctly for ;; WebAssembly (rounding direction, exception masks, precision level, subnormal ;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common ;; value-changing optimizations, and (d) that the WebAssembly implementation ;; doesn't exhibit any known implementation bugs. ;; ;; This file supplements f32.wast, f64.wast, f32_bitwise.wast, f64_bitwise.wast, ;; f32_cmp.wast, and f64_cmp.wast with additional single-instruction tests ;; covering additional miscellaneous interesting cases. (module (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) ) ;; Miscellaneous values. (assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) (assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) ;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the ;; least that rounds to something greater. (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) ;; Max subnormal + min subnormal = min normal. (assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) (assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) (assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) ;; Test a case that was "tricky" on MMIX. ;; http://mmix.cs.hm.edu/bugs/bug_rounding.html (assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) ;; http://www.vinc17.org/software/tst-ieee754.xsl (assert_return (invoke "f64.add" (f64.const 9007199254740992) (f64.const 1.00001)) (f64.const 9007199254740994)) ;; http://www.vinc17.org/software/test.java (assert_return (invoke "f64.add" (f64.const 9007199254740994) (f64.const 0x1.fffep-1)) (f64.const 9007199254740994)) ;; Computations that round differently in ties-to-odd mode. (assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) (assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) (assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) (assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) (assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) (assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) (assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) (assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) (assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) (assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) (assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) (assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) (assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) (assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) (assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) (assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) (assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) (assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) (assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) (assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) (assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) (assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) (assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) (assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) (assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) (assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) (assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) (assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) (assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) (assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) ;; Computations that round differently on x87. (assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) (assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) (assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) (assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) (assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) (assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) (assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) (assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) (assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) ;; Computations that utilize the maximum exponent value to avoid overflow. (assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) (assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) (assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) (assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) (assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) (assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) ;; Computations that utilize the minimum exponent value. (assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) (assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) (assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) (assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) (assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) (assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) (assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) (assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) ;; Test an add of the second-greatest finite value with the distance to greatest ;; finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) ;; http://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/ (assert_return (invoke "f32.add" (f32.const 2.0) (f32.const 2.0)) (f32.const 4.0)) (assert_return (invoke "f64.add" (f64.const 2.0) (f64.const 2.0)) (f64.const 4.0)) ;; Test rounding above the greatest finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const inf)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const inf)) ;; Test for a historic spreadsheet bug. ;; https://blogs.office.com/2007/09/25/calculation-issue-update/ (assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) (assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) ;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the ;; least that rounds to something less. (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) (assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) (assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) (assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) (assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) (assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) (assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) (assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) (assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) (assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) (assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) (assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) (assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) (assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) (assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) (assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) (assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) (assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) (assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) (assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) (assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) (assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) (assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) (assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) (assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) (assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) (assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) (assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) (assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) (assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) (assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) (assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) (assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) (assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) ;; pow(e, π) - π ;; https://xkcd.com/217/ (assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) (assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) ;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ (assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) (assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) ;; Min normal - max subnormal = min subnormal. (assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) ;; Test subtraction of numbers very close to 1. (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.8p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.0p+0)) (f32.const 0x1p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p-24)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.8p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0p+0)) (f64.const 0x1p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p-53)) ;; Test the least value that can be subtracted from the max value to produce a ;; different value. (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const 0x1.ffffffffffffep+1023)) ;; Miscellaneous values. (assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) (assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) (assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) (assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) (assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) ;; Test for a historic spreadsheet bug. ;; http://www.joelonsoftware.com/items/2007/09/26b.html (assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) (assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) (assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) (assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) (assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) (assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) (assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) (assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) (assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) (assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) (assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) (assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) (assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) (assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) (assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) (assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) (assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) (assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) (assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) (assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) (assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) (assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) (assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) (assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) ;; Computations that round differently on x87. (assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) (assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) (assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) (assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) (assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) (assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) (assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) (assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) (assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) ;; Test the least positive value with a positive square. (assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) ;; Test the greatest positive value with a finite square. (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) (assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const inf)) ;; Test the squares of values very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep-1) (f32.const 0x1.fffffep-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test multiplication of numbers very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000004p+0) (f32.const 0x1.fffffcp-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000002p+0) (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.0000000000001p+0)) ;; Test MIN * EPSILON. ;; http://www.mpfr.org/mpfr-2.0.1/patch2 (assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) ;; http://opencores.org/bug,view,2454 (assert_return (invoke "f32.mul" (f32.const -0x1.0006p+4) (f32.const 0x1.ap-132)) (f32.const -0x1.a009cp-128)) ;; Miscellaneous values. (assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) (assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) (assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) (assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) (assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) (assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) (assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) (assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) (assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) (assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) ;; Test for a historic hardware bug. ;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug (assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) (assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) (assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) (assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) (assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) (assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) (assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) (assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) (assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) (assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) (assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) (assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) (assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) (assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) (assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) (assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) (assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) (assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) (assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) (assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) (assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) (assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) (assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) (assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) ;; Computations that round differently on x87. (assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) (assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) (assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) (assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) (assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) ;; Computations that round differently when div is mul by reciprocal. (assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) (assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) (assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) (assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) (assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) (assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) (assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) (assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) (assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) (assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) (assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) (assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) (assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) (assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) ;; Division involving the maximum subnormal value and the minimum normal value. (assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) ;; Test the least positive value with a positive quotient with the maximum value. (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) ;; Test the least positive value with a finite reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) ;; Test the least positive value that has a subnormal reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) ;; Test that the last binary digit of 1.0/3.0 is even in f32, ;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples ;; ;; and odd in f64, ;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples ;; ;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. ;; http://www.netlib.org/paranoia (assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) ;; Test division of numbers very close to 1. (assert_return (invoke "f32.div" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-1) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffap-1)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffdp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffep-1)) ;; Test for bugs found in an early RISC-V implementation. ;; https://github.com/riscv/riscv-tests/pull/8 (assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) ;; Test another sqrt case on x87. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 (assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963)) (f64.const nan:canonical)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) ;; Test the least value with a sqrt that rounds to one. (assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) ;; Test the greatest value less than one for which sqrt is not an identity. (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffcp-1)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffap-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test that the bitwise floating point operators are bitwise on NaN. (assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) ;; Test values close to 1.0. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) (assert_return (invoke "f32.ceil" (f32.const 0x1.000002p+0)) (f32.const 2.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.0000000000001p+0)) (f64.const 2.0)) ;; Test the maximum and minimum value for which ceil is not an identity operator. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) ;; Test that implementations don't do the x+0x1p52-0x1p52 trick outside the ;; range where it's safe. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+23)) (f32.const 0x1.fffffep+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+23)) (f32.const -0x1.fffffep+23)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+52)) (f64.const 0x1.fffffffffffffp+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+52)) (f64.const -0x1.fffffffffffffp+52)) ;; Test values close to -1.0. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) (assert_return (invoke "f32.floor" (f32.const -0x1.000002p+0)) (f32.const -2.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.0000000000001p+0)) (f64.const -2.0)) ;; Test the maximum and minimum value for which floor is not an identity operator. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that floor isn't implemented as XMVectorFloor. ;; http://dss.stephanierct.com/DevBlog/?p=8#comment-4 (assert_return (invoke "f32.floor" (f32.const 88607.0)) (f32.const 88607.0)) (assert_return (invoke "f64.floor" (f64.const 88607.0)) (f64.const 88607.0)) ;; Test the maximum and minimum value for which trunc is not an identity operator. (assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) (assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that nearest isn't implemented naively. ;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 ;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 (assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) ;; Nearest should not round halfway cases away from zero (as C's round(3) does) ;; or up (as JS's Math.round does). (assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) (assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) (assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) (assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) ;; Test the maximum and minimum value for which nearest is not an identity operator. (assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) ================================================ FILE: Test/WebAssembly/multi-memory/forward.wast ================================================ (module (func $even (export "even") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 1)) (else (call $odd (i32.sub (local.get $n) (i32.const 1)))) ) ) (func $odd (export "odd") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 0)) (else (call $even (i32.sub (local.get $n) (i32.const 1)))) ) ) ) (assert_return (invoke "even" (i32.const 13)) (i32.const 0)) (assert_return (invoke "even" (i32.const 20)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/multi-memory/func.wast ================================================ ;; Test `func` declarations, i.e. functions (module ;; Auxiliary definition (type $sig (func)) (func $dummy) ;; Syntax (func) (func (export "f")) (func $f) (func $h (export "g")) (func (local)) (func (local) (local)) (func (local i32)) (func (local $x i32)) (func (local i32 f64 i64)) (func (local i32) (local f64)) (func (local i32 f32) (local $x i64) (local) (local i32 f64)) (func (param)) (func (param) (param)) (func (param i32)) (func (param $x i32)) (func (param i32 f64 i64)) (func (param i32) (param f64)) (func (param i32 f32) (param $x i64) (param) (param i32 f64)) (func (result)) (func (result) (result)) (func (result i32) (unreachable)) (func (result i32 f64 f32) (unreachable)) (func (result i32) (result f64) (unreachable)) (func (result i32 f32) (result i64) (result) (result i32 f64) (unreachable)) (type $sig-1 (func)) (type $sig-2 (func (result i32))) (type $sig-3 (func (param $x i32))) (type $sig-4 (func (param i32 f64 i32) (result i32))) (func (export "type-use-1") (type $sig-1)) (func (export "type-use-2") (type $sig-2) (i32.const 0)) (func (export "type-use-3") (type $sig-3)) (func (export "type-use-4") (type $sig-4) (i32.const 0)) (func (export "type-use-5") (type $sig-2) (result i32) (i32.const 0)) (func (export "type-use-6") (type $sig-3) (param i32)) (func (export "type-use-7") (type $sig-4) (param i32) (param f64 i32) (result i32) (i32.const 0) ) (func (type $sig)) (func (type $forward)) ;; forward reference (func $complex (param i32 f32) (param $x i64) (param) (param i32) (result) (result i32) (result) (result i64 i32) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (func $complex-sig (type $sig) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (type $forward (func)) ;; Typing of locals (func (export "local-first-i32") (result i32) (local i32 i32) (local.get 0)) (func (export "local-first-i64") (result i64) (local i64 i64) (local.get 0)) (func (export "local-first-f32") (result f32) (local f32 f32) (local.get 0)) (func (export "local-first-f64") (result f64) (local f64 f64) (local.get 0)) (func (export "local-second-i32") (result i32) (local i32 i32) (local.get 1)) (func (export "local-second-i64") (result i64) (local i64 i64) (local.get 1)) (func (export "local-second-f32") (result f32) (local f32 f32) (local.get 1)) (func (export "local-second-f64") (result f64) (local f64 f64) (local.get 1)) (func (export "local-mixed") (result f64) (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of parameters (func (export "param-first-i32") (param i32 i32) (result i32) (local.get 0)) (func (export "param-first-i64") (param i64 i64) (result i64) (local.get 0)) (func (export "param-first-f32") (param f32 f32) (result f32) (local.get 0)) (func (export "param-first-f64") (param f64 f64) (result f64) (local.get 0)) (func (export "param-second-i32") (param i32 i32) (result i32) (local.get 1)) (func (export "param-second-i64") (param i64 i64) (result i64) (local.get 1)) (func (export "param-second-f32") (param f32 f32) (result f32) (local.get 1)) (func (export "param-second-f64") (param f64 f64) (result f64) (local.get 1)) (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) (result f64) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of results (func (export "empty")) (func (export "value-void") (call $dummy)) (func (export "value-i32") (result i32) (i32.const 77)) (func (export "value-i64") (result i64) (i64.const 7777)) (func (export "value-f32") (result f32) (f32.const 77.7)) (func (export "value-f64") (result f64) (f64.const 77.77)) (func (export "value-i32-f64") (result i32 f64) (i32.const 77) (f64.const 7)) (func (export "value-i32-i32-i32") (result i32 i32 i32) (i32.const 1) (i32.const 2) (i32.const 3) ) (func (export "value-block-void") (block (call $dummy) (call $dummy))) (func (export "value-block-i32") (result i32) (block (result i32) (call $dummy) (i32.const 77)) ) (func (export "value-block-i32-i64") (result i32 i64) (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2)) ) (func (export "return-empty") (return)) (func (export "return-i32") (result i32) (return (i32.const 78))) (func (export "return-i64") (result i64) (return (i64.const 7878))) (func (export "return-f32") (result f32) (return (f32.const 78.7))) (func (export "return-f64") (result f64) (return (f64.const 78.78))) (func (export "return-i32-f64") (result i32 f64) (return (i32.const 78) (f64.const 78.78)) ) (func (export "return-i32-i32-i32") (result i32 i32 i32) (return (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "return-block-i32") (result i32) (return (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "return-block-i32-i64") (result i32 i64) (return (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-empty") (br 0)) (func (export "break-i32") (result i32) (br 0 (i32.const 79))) (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) (func (export "break-i32-f64") (result i32 f64) (br 0 (i32.const 79) (f64.const 79.79)) ) (func (export "break-i32-i32-i32") (result i32 i32 i32) (br 0 (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "break-block-i32") (result i32) (br 0 (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "break-block-i32-i64") (result i32 i64) (br 0 (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-br_if-empty") (param i32) (br_if 0 (local.get 0)) ) (func (export "break-br_if-num") (param i32) (result i32) (drop (br_if 0 (i32.const 50) (local.get 0))) (i32.const 51) ) (func (export "break-br_if-num-num") (param i32) (result i32 i64) (drop (drop (br_if 0 (i32.const 50) (i64.const 51) (local.get 0)))) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-empty") (param i32) (br_table 0 0 0 (local.get 0)) ) (func (export "break-br_table-num") (param i32) (result i32) (br_table 0 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (func (export "break-br_table-num-num") (param i32) (result i32 i64) (br_table 0 0 (i32.const 50) (i64.const 51) (local.get 0)) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-nested-empty") (param i32) (block (br_table 0 1 0 (local.get 0))) ) (func (export "break-br_table-nested-num") (param i32) (result i32) (i32.add (block (result i32) (br_table 0 1 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (i32.const 2) ) ) (func (export "break-br_table-nested-num-num") (param i32) (result i32 i32) (i32.add (block (result i32 i32) (br_table 0 1 0 (i32.const 50) (i32.const 51) (local.get 0)) (i32.const 51) (i32.const -3) ) ) (i32.const 52) ) ;; Large signatures (func (export "large-sig") (param i32 i64 f32 f32 i32 f64 f32 i32 i32 i32 f32 f64 f64 f64 i32 i32 f32) (result f64 f32 i32 i32 i32 i64 f32 i32 i32 f32 f64 f64 i32 f32 i32 f64) (local.get 5) (local.get 2) (local.get 0) (local.get 8) (local.get 7) (local.get 1) (local.get 3) (local.get 9) (local.get 4) (local.get 6) (local.get 13) (local.get 11) (local.get 15) (local.get 16) (local.get 14) (local.get 12) ) ;; Default initialization of locals (func (export "init-local-i32") (result i32) (local i32) (local.get 0)) (func (export "init-local-i64") (result i64) (local i64) (local.get 0)) (func (export "init-local-f32") (result f32) (local f32) (local.get 0)) (func (export "init-local-f64") (result f64) (local f64) (local.get 0)) ) (assert_return (invoke "type-use-1")) (assert_return (invoke "type-use-2") (i32.const 0)) (assert_return (invoke "type-use-3" (i32.const 1))) (assert_return (invoke "type-use-4" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "type-use-5") (i32.const 0)) (assert_return (invoke "type-use-6" (i32.const 1))) (assert_return (invoke "type-use-7" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "local-first-i32") (i32.const 0)) (assert_return (invoke "local-first-i64") (i64.const 0)) (assert_return (invoke "local-first-f32") (f32.const 0)) (assert_return (invoke "local-first-f64") (f64.const 0)) (assert_return (invoke "local-second-i32") (i32.const 0)) (assert_return (invoke "local-second-i64") (i64.const 0)) (assert_return (invoke "local-second-f32") (f32.const 0)) (assert_return (invoke "local-second-f64") (f64.const 0)) (assert_return (invoke "local-mixed") (f64.const 0)) (assert_return (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) ) (assert_return (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) ) (assert_return (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) ) (assert_return (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) ) (assert_return (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) ) (assert_return (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) ) (assert_return (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) ) (assert_return (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) ) (assert_return (invoke "param-mixed" (f32.const 1) (i32.const 2) (i64.const 3) (i32.const 4) (f64.const 5.5) (i32.const 6) ) (f64.const 5.5) ) (assert_return (invoke "empty")) (assert_return (invoke "value-void")) (assert_return (invoke "value-i32") (i32.const 77)) (assert_return (invoke "value-i64") (i64.const 7777)) (assert_return (invoke "value-f32") (f32.const 77.7)) (assert_return (invoke "value-f64") (f64.const 77.77)) (assert_return (invoke "value-i32-f64") (i32.const 77) (f64.const 7)) (assert_return (invoke "value-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "value-block-void")) (assert_return (invoke "value-block-i32") (i32.const 77)) (assert_return (invoke "value-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "return-empty")) (assert_return (invoke "return-i32") (i32.const 78)) (assert_return (invoke "return-i64") (i64.const 7878)) (assert_return (invoke "return-f32") (f32.const 78.7)) (assert_return (invoke "return-f64") (f64.const 78.78)) (assert_return (invoke "return-i32-f64") (i32.const 78) (f64.const 78.78)) (assert_return (invoke "return-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "return-block-i32") (i32.const 77)) (assert_return (invoke "return-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-empty")) (assert_return (invoke "break-i32") (i32.const 79)) (assert_return (invoke "break-i64") (i64.const 7979)) (assert_return (invoke "break-f32") (f32.const 79.9)) (assert_return (invoke "break-f64") (f64.const 79.79)) (assert_return (invoke "break-i32-f64") (i32.const 79) (f64.const 79.79)) (assert_return (invoke "break-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "break-block-i32") (i32.const 77)) (assert_return (invoke "break-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-br_if-empty" (i32.const 0))) (assert_return (invoke "break-br_if-empty" (i32.const 2))) (assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) (assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_if-num-num" (i32.const 0)) (i32.const 51) (i64.const 52) ) (assert_return (invoke "break-br_if-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-empty" (i32.const 0))) (assert_return (invoke "break-br_table-empty" (i32.const 1))) (assert_return (invoke "break-br_table-empty" (i32.const 5))) (assert_return (invoke "break-br_table-empty" (i32.const -1))) (assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) (assert_return (invoke "break-br_table-num-num" (i32.const 0)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 10)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const -100)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) (assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) (assert_return (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 0)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 1)) (i32.const 50) (i32.const 51) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 2)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const -3)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "large-sig" (i32.const 0) (i64.const 1) (f32.const 2) (f32.const 3) (i32.const 4) (f64.const 5) (f32.const 6) (i32.const 7) (i32.const 8) (i32.const 9) (f32.const 10) (f64.const 11) (f64.const 12) (f64.const 13) (i32.const 14) (i32.const 15) (f32.const 16) ) (f64.const 5) (f32.const 2) (i32.const 0) (i32.const 8) (i32.const 7) (i64.const 1) (f32.const 3) (i32.const 9) (i32.const 4) (f32.const 6) (f64.const 13) (f64.const 11) (i32.const 15) (f32.const 16) (i32.const 14) (f64.const 12) ) (assert_return (invoke "init-local-i32") (i32.const 0)) (assert_return (invoke "init-local-i64") (i64.const 0)) (assert_return (invoke "init-local-f32") (f32.const 0)) (assert_return (invoke "init-local-f64") (f64.const 0)) ;; Expansion of inline function types (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (type $t (func (param i32))) (func $i32->void (type 0)) ;; (param i32) (func $void->f64 (type 1) (f64.const 0)) ;; (result f64) (func $check (call $i32->void (i32.const 0)) (drop (call $void->f64)) ) ) (assert_invalid (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (func $h (result f64) (f64.const 1)) ;; reuses implicit type definition (type $t (func (param i32))) (func (type 2)) ;; does not exist ) "unknown type" ) (assert_malformed (module quote "(func $f (result f64) (f64.const 0))" ;; adds implicit type definition "(func $g (param i32))" ;; reuses explicit type definition "(func $h (result f64) (f64.const 1))" ;; reuses implicit type definition "(type $t (func (param i32)))" "(func (type 2) (param i32))" ;; does not exist ) "unknown type" ) (module (type $proc (func (result i32))) (type $sig (func (param i32) (result i32))) (func (export "f") (type $sig) (local $var i32) (local.get $var) ) (func $g (type $sig) (local $var i32) (local.get $var) ) (func (export "g") (type $sig) (call $g (local.get 0)) ) (func (export "p") (type $proc) (local $var i32) (local.set 0 (i32.const 42)) (local.get $var) ) ) (assert_return (invoke "f" (i32.const 42)) (i32.const 0)) (assert_return (invoke "g" (i32.const 42)) (i32.const 0)) (assert_return (invoke "p") (i32.const 42)) (module (type $sig (func)) (func $empty-sig-1) ;; should be assigned type $sig (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $empty-sig-2) ;; should be assigned type $sig (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-4 (param i64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-5 (param i64 i64 f64 i64 f64 i64 f32 i32)) (type $empty-sig-duplicate (func)) (type $complex-sig-duplicate (func (param i64 i64 f64 i64 f64 i64 f32 i32))) (table funcref (elem $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 $complex-sig-4 $complex-sig-5 ) ) (func (export "signature-explicit-reused") (call_indirect (type $sig) (i32.const 1)) (call_indirect (type $sig) (i32.const 4)) ) (func (export "signature-implicit-reused") ;; The implicit index 3 in this test depends on the function and ;; type definitions, and may need adapting if they change. (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 2) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 3) ) ) (func (export "signature-explicit-duplicate") (call_indirect (type $empty-sig-duplicate) (i32.const 1)) ) (func (export "signature-implicit-duplicate") (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 5) ) (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 6) ) ) ) (assert_return (invoke "signature-explicit-reused")) (assert_return (invoke "signature-implicit-reused")) (assert_return (invoke "signature-explicit-duplicate")) (assert_return (invoke "signature-implicit-duplicate")) ;; Malformed type use (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (type $sig) (result i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (result i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (type $sig) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (param i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (param i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (type $sig) (param i32) (result i32) (unreachable))" ) "inline function type" ) ;; Invalid typing of locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of result (assert_invalid (module (func $type-empty-i32 (result i32))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64-i32 (result f64 i32))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (i32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (i32.const 0) (i64.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result f32 f32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result f32) (f32.const 0) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-num (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-nums (result i32 i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-num (result i32) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-nums (result i32 i64) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-num (result i32) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-nums (result i64 i64) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-num (result i32) (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-nums (result i32 i32) (return) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-partial-vs-nums (result i32 i32) (i32.const 1) (return) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-num (result i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-nums (result i32 i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-num (result i32) (return (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-nums (result i32 i32) (return (i64.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-num (result i32) (return (i64.const 1)) (return (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-nums (result i32 i32) (return (i32.const 1)) (return (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-num (result i32) (br 0 (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-nums (result i32 i32) (br 0 (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-nums (result i32 i32) (br 0) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (br 0 (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (br 0 (i32.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (br 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (br 1 (nop))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32) (br 1 (i32.const 1))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) ;; Syntax errors (assert_malformed (module quote "(func (nop) (local i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (result i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (result i32) (local.get 0))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (local.get 0))") "unexpected token" ) ;; Duplicate name errors (assert_malformed (module quote "(func $foo)" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(import \"\" \"\" (func $foo))") "duplicate func") (assert_malformed (module quote "(func (param $foo i32) (param $foo i32))") "duplicate local") (assert_malformed (module quote "(func (param $foo i32) (local $foo i32))") "duplicate local") (assert_malformed (module quote "(func (local $foo i32) (local $foo i32))") "duplicate local") ================================================ FILE: Test/WebAssembly/multi-memory/func_ptrs.wast ================================================ (module (type (func)) ;; 0: void -> void (type $S (func)) ;; 1: void -> void (type (func (param))) ;; 2: void -> void (type (func (result i32))) ;; 3: void -> i32 (type (func (param) (result i32))) ;; 4: void -> i32 (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 (type $U (func (param i32))) ;; 6: i32 -> void (func $print (import "spectest" "print_i32") (type 6)) (func (type 0)) (func (type $S)) (func (export "one") (type 4) (i32.const 13)) (func (export "two") (type $T) (i32.add (local.get 0) (i32.const 1))) ;; Both signature and parameters are allowed (and required to match) ;; since this allows the naming of parameters. (func (export "three") (type $T) (param $a i32) (result i32) (i32.sub (local.get 0) (i32.const 2)) ) (func (export "four") (type $U) (call $print (local.get 0))) ) (assert_return (invoke "one") (i32.const 13)) (assert_return (invoke "two" (i32.const 13)) (i32.const 14)) (assert_return (invoke "three" (i32.const 13)) (i32.const 11)) (invoke "four" (i32.const 83)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") (assert_invalid (module (table 1 funcref) (elem (i64.const 0))) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop))) "constant expression required" ) (assert_invalid (module (func (type 42))) "unknown type") (assert_invalid (module (import "spectest" "print_i32" (func (type 43)))) "unknown type") (module (type $T (func (param) (result i32))) (type $U (func (param) (result i32))) (table funcref (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func $t3 (type $T) (i32.const 3)) (func $u1 (type $U) (i32.const 4)) (func $u2 (type $U) (i32.const 5)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) (func (export "callu") (param $i i32) (result i32) (call_indirect (type $U) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callt" (i32.const 7)) "undefined element") (assert_trap (invoke "callt" (i32.const 100)) "undefined element") (assert_trap (invoke "callt" (i32.const -1)) "undefined element") (assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callu" (i32.const 7)) "undefined element") (assert_trap (invoke "callu" (i32.const 100)) "undefined element") (assert_trap (invoke "callu" (i32.const -1)) "undefined element") (module (type $T (func (result i32))) (table funcref (elem 0 1)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) ================================================ FILE: Test/WebAssembly/multi-memory/global.wast ================================================ ;; Test globals (module (global (import "spectest" "global_i32") i32) (global (import "spectest" "global_i64") i64) (global $a i32 (i32.const -2)) (global (;3;) f32 (f32.const -3)) (global (;4;) f64 (f64.const -4)) (global $b i64 (i64.const -5)) (global $x (mut i32) (i32.const -12)) (global (;7;) (mut f32) (f32.const -13)) (global (;8;) (mut f64) (f64.const -14)) (global $y (mut i64) (i64.const -15)) (global $z1 i32 (global.get 0)) (global $z2 i64 (global.get 1)) (global $r externref (ref.null extern)) (global $mr (mut externref) (ref.null extern)) (global funcref (ref.null func)) (func (export "get-a") (result i32) (global.get $a)) (func (export "get-b") (result i64) (global.get $b)) (func (export "get-r") (result externref) (global.get $r)) (func (export "get-mr") (result externref) (global.get $mr)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i64) (global.get $y)) (func (export "get-z1") (result i32) (global.get $z1)) (func (export "get-z2") (result i64) (global.get $z2)) (func (export "set-x") (param i32) (global.set $x (local.get 0))) (func (export "set-y") (param i64) (global.set $y (local.get 0))) (func (export "set-mr") (param externref) (global.set $mr (local.get 0))) (func (export "get-3") (result f32) (global.get 3)) (func (export "get-4") (result f64) (global.get 4)) (func (export "get-7") (result f32) (global.get 7)) (func (export "get-8") (result f64) (global.get 8)) (func (export "set-7") (param f32) (global.set 7 (local.get 0))) (func (export "set-8") (param f64) (global.set 8 (local.get 0))) ;; As the argument of control constructs and instructions (memory 1) (func $dummy) (func (export "as-select-first") (result i32) (select (global.get $x) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (global.get $x) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (global.get $x)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (global.get $x) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (global.get $x) (call $dummy) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (global.get $x) ) ) (func (export "as-if-condition") (result i32) (if (result i32) (global.get $x) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (global.get $x)) (else (i32.const 2)) ) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (global.get $x)) ) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (global.get $x) (i32.const 2)) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (global.get $x)) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (result i32) (block (result i32) (global.get $x) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (global.get $x) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (global.get $x) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (global.get $x) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (global.get $x) ) ) ) (func (export "as-store-first") (global.get $x) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 0) (global.get $x) (i32.store) ) (func (export "as-load-operand") (result i32) (i32.load (global.get $x)) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (global.get $x)) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (global.get $x)) ) (func (export "as-return-value") (result i32) (global.get $x) (return) ) (func (export "as-drop-operand") (drop (global.get $x)) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (global.get $x))) ) (func (export "as-local.set-value") (param i32) (result i32) (local.set 0 (global.get $x)) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (global.get $x)) ) (func (export "as-global.set-value") (result i32) (global.set $x (global.get $x)) (global.get $x) ) (func (export "as-unary-operand") (result i32) (i32.eqz (global.get $x)) ) (func (export "as-binary-operand") (result i32) (i32.mul (global.get $x) (global.get $x) ) ) (func (export "as-compare-operand") (result i32) (i32.gt_u (global.get 0) (i32.const 1) ) ) ) (assert_return (invoke "get-a") (i32.const -2)) (assert_return (invoke "get-b") (i64.const -5)) (assert_return (invoke "get-r") (ref.null extern)) (assert_return (invoke "get-mr") (ref.null extern)) (assert_return (invoke "get-x") (i32.const -12)) (assert_return (invoke "get-y") (i64.const -15)) (assert_return (invoke "get-z1") (i32.const 666)) (assert_return (invoke "get-z2") (i64.const 666)) (assert_return (invoke "get-3") (f32.const -3)) (assert_return (invoke "get-4") (f64.const -4)) (assert_return (invoke "get-7") (f32.const -13)) (assert_return (invoke "get-8") (f64.const -14)) (assert_return (invoke "set-x" (i32.const 6))) (assert_return (invoke "set-y" (i64.const 7))) (assert_return (invoke "set-7" (f32.const 8))) (assert_return (invoke "set-8" (f64.const 9))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-7") (f32.const 8)) (assert_return (invoke "get-8") (f64.const 9)) (assert_return (invoke "set-7" (f32.const 8))) (assert_return (invoke "set-8" (f64.const 9))) (assert_return (invoke "set-mr" (ref.extern 10))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-7") (f32.const 8)) (assert_return (invoke "get-8") (f64.const 9)) (assert_return (invoke "get-mr") (ref.extern 10)) (assert_return (invoke "as-select-first") (i32.const 6)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 6)) (assert_return (invoke "as-loop-mid") (i32.const 6)) (assert_return (invoke "as-loop-last") (i32.const 6)) (assert_return (invoke "as-if-condition") (i32.const 2)) (assert_return (invoke "as-if-then") (i32.const 6)) (assert_return (invoke "as-if-else") (i32.const 6)) (assert_return (invoke "as-br_if-first") (i32.const 6)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 6)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 6)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 6)) (assert_return (invoke "as-return-value") (i32.const 6)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 6)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-global.set-value") (i32.const 6)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 36)) (assert_return (invoke "as-compare-operand") (i32.const 1)) (assert_invalid (module (global f32 (f32.const 0)) (func (global.set 0 (f32.const 1)))) "global is immutable" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (global.set 0 (i32.const 1)))) "global is immutable" ) ;; mutable globals can be exported (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) (module (global (export "a") (mut f32) (f32.const 0))) (assert_invalid (module (global f32 (f32.neg (f32.const 0)))) "constant expression required" ) (assert_invalid (module (global f32 (local.get 0))) "constant expression required" ) (assert_invalid (module (global f32 (f32.neg (f32.const 1)))) "constant expression required" ) (assert_invalid (module (global i32 (i32.const 0) (nop))) "constant expression required" ) (assert_invalid (module (global i32 (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (global i32 (nop))) "constant expression required" ) (assert_invalid (module (global i32 (f32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (i32.const 0) (i32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (;empty instruction sequence;))) "type mismatch" ) (assert_invalid (module (global (import "" "") externref) (global funcref (global.get 0))) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (global i32 (global.get 0) (global.get 0))) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (global i32 (i32.const 0) (global.get 0))) "type mismatch" ) (assert_invalid (module (global i32 (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (global.get 1)) (global i32 (i32.const 0))) "unknown global" ) (assert_invalid (module (global (import "test" "global-i32") i32) (global i32 (global.get 2))) "unknown global" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (global i32 (global.get 0))) "constant expression required" ) (module (import "spectest" "global_i32" (global i32)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\02" ;; malformed mutability ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\ff" ;; malformed mutability ) "malformed mutability" ) (module (global i32 (i32.const 0)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\02" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\ff" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) ;; global.get with invalid index (assert_invalid (module (func (result i32) (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (func (result i32) (global.get 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (result i32) (global.get 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (global i32 (i32.const 0)) (func (result i32) (global.get 2)) ) "unknown global" ) ;; global.set with invalid index (assert_invalid (module (func (i32.const 0) (global.set 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (func (i32.const 0) (global.set 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (i32.const 0) (global.set 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (global i32 (i32.const 0)) (func (i32.const 0) (global.set 2)) ) "unknown global" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty (global.set $x) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-block (i32.const 0) (block (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-loop (i32.const 0) (loop (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br (i32.const 0) (block (br 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_if (i32.const 0) (block (br_if 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_table (i32.const 0) (block (br_table 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-return (return (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-select (select (global.set $x) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-call (call 1 (global.set $x)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-global.set-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (global.set $x) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Duplicate identifier errors (assert_malformed (module quote "(global $foo i32 (i32.const 0))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(import \"\" \"\" (global $foo i32))") "duplicate global") ================================================ FILE: Test/WebAssembly/multi-memory/i32.wast ================================================ ;; i32 operations (module (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (local.get $x) (local.get $y))) (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i32) (result i32) (i32.clz (local.get $x))) (func (export "ctz") (param $x i32) (result i32) (i32.ctz (local.get $x))) (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (local.get $x))) (func (export "extend8_s") (param $x i32) (result i32) (i32.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i32) (result i32) (i32.extend16_s (local.get $x))) (func (export "eqz") (param $x i32) (result i32) (i32.eqz (local.get $x))) (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) (assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) (assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) (assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) (assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) (assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) (assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) (assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) (assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) (assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) (assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) (assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) (assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) (assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) (assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) (assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00000400)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 31)) (i32.const 2)) (assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) (assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) (assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) (assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) (assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) (assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) (assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) (assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) (assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) (assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) (assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) (assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) (assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) (assert_return (invoke "extend8_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0x7f)) (i32.const 127)) (assert_return (invoke "extend8_s" (i32.const 0x80)) (i32.const -128)) (assert_return (invoke "extend8_s" (i32.const 0xff)) (i32.const -1)) (assert_return (invoke "extend8_s" (i32.const 0x012345_00)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0xfedcba_80)) (i32.const -0x80)) (assert_return (invoke "extend8_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0x7fff)) (i32.const 32767)) (assert_return (invoke "extend16_s" (i32.const 0x8000)) (i32.const -32768)) (assert_return (invoke "extend16_s" (i32.const 0xffff)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0x0123_0000)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0xfedc_8000)) (i32.const -0x8000)) (assert_return (invoke "extend16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_invalid (module (func $type-unary-operand-empty (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-block (i32.const 0) (block (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-loop (i32.const 0) (loop (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-if (i32.const 0) (i32.const 0) (if (then (i32.eqz) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.eqz))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br (i32.const 0) (block (br 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.eqz) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-return (return (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-select (select (i32.eqz) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-call (call 1 (i32.eqz)) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-unary-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.eqz) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.set (local i32) (local.set 0 (i32.eqz)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-unary-operand-empty-in-global.set (global.set $x (i32.eqz)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-memory.grow (memory.grow (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-load (i32.load (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-unary-operand-empty-in-store (i32.store (i32.eqz) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty (i32.const 0) (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-if (i32.const 0) (i32.const 0) (i32.const 0) (if (i32.add) (then (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-if (i32.const 0) (i32.const 0) (if (i32.const 0) (then (i32.add)) (else (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-else (i32.const 0) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add) (i32.const 0))) (drop) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-return (return (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-return (return (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-select (select (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-select (select (i32.const 0) (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-call (call 1 (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-call (call 1 (i32.const 0) (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-1st-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-2nd-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.set (local i32) (local.set 0 (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.set (local i32) (local.set 0 (i32.const 0) (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-1st-operand-empty-in-global.set (global.set $x (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-2nd-operand-empty-in-global.set (global.set $x (i32.const 0) (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-memory.grow (memory.grow (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-memory.grow (memory.grow (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-load (i32.load (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-load (i32.load (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-1st-operand-empty-in-store (i32.store (i32.add) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-2nd-operand-empty-in-store (i32.store (i32.const 1) (i32.add) (i32.const 0)) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (func (result i32) (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eqz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.clz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ctz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.popcnt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") (assert_malformed (module quote "(func (result i32) (i32.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (i32.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/multi-memory/i64.wast ================================================ ;; i64 operations (module (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (local.get $x) (local.get $y))) (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i64) (result i64) (i64.clz (local.get $x))) (func (export "ctz") (param $x i64) (result i64) (i64.ctz (local.get $x))) (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (local.get $x))) (func (export "extend8_s") (param $x i64) (result i64) (i64.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i64) (result i64) (i64.extend16_s (local.get $x))) (func (export "extend32_s") (param $x i64) (result i64) (i64.extend32_s (local.get $x))) (func (export "eqz") (param $x i64) (result i32) (i64.eqz (local.get $x))) (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) (assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) (assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) (assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) (assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) (assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) (assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) (assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) (assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) (assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) (assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) (assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) (assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) (assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) (assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) (assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x579b30ec048d159d)) (assert_return (invoke "rotl" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0xe000000dc000000f)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0xcf013579ae529dea)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x55e6cc3b01234567)) (assert_return (invoke "rotr" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0x0fe000000dc00000)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0x94a77ab3c04d5e6b)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 63)) (i64.const 2)) (assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) (assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) (assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) (assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) (assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) (assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) (assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) (assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) (assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) (assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) (assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) (assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) (assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) (assert_return (invoke "extend8_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0x7f)) (i64.const 127)) (assert_return (invoke "extend8_s" (i64.const 0x80)) (i64.const -128)) (assert_return (invoke "extend8_s" (i64.const 0xff)) (i64.const -1)) (assert_return (invoke "extend8_s" (i64.const 0x01234567_89abcd_00)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0xfedcba98_765432_80)) (i64.const -0x80)) (assert_return (invoke "extend8_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend16_s" (i64.const 0x8000)) (i64.const -32768)) (assert_return (invoke "extend16_s" (i64.const 0xffff)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0x12345678_9abc_0000)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0xfedcba98_7654_8000)) (i64.const -0x8000)) (assert_return (invoke "extend16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend32_s" (i64.const 0x8000)) (i64.const 32768)) (assert_return (invoke "extend32_s" (i64.const 0xffff)) (i64.const 65535)) (assert_return (invoke "extend32_s" (i64.const 0x7fffffff)) (i64.const 0x7fffffff)) (assert_return (invoke "extend32_s" (i64.const 0x80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const 0xffffffff)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0x01234567_00000000)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0xfedcba98_80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0xffffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result i64) (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eqz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.clz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ctz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.popcnt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") (assert_malformed (module quote "(func (result i64) (i64.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result i64) (i64.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/multi-memory/if.wast ================================================ ;; Test `if` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (param i32) (if (local.get 0) (then)) (if (local.get 0) (then) (else)) (if $l (local.get 0) (then)) (if $l (local.get 0) (then) (else)) ) (func (export "singular") (param i32) (result i32) (if (local.get 0) (then (nop))) (if (local.get 0) (then (nop)) (else (nop))) (if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8))) ) (func (export "multi") (param i32) (result i32 i32) (if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy))) (if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy))) (if (result i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 8) (call $dummy)) (else (call $dummy) (call $dummy) (i32.const 9) (call $dummy)) ) (if (result i32 i64 i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 1) (call $dummy) (call $dummy) (call $dummy) (i64.const 2) (call $dummy) (call $dummy) (call $dummy) (i32.const 3) (call $dummy) ) (else (call $dummy) (call $dummy) (i32.const -1) (call $dummy) (call $dummy) (call $dummy) (i64.const -2) (call $dummy) (call $dummy) (call $dummy) (i32.const -3) (call $dummy) ) ) (drop) (drop) ) (func (export "nested") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 9)) (else (call $dummy) (i32.const 10)) ) ) (else (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 10)) (else (call $dummy) (i32.const 11)) ) ) ) ) (func (export "as-select-first") (param i32) (result i32) (select (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 3) ) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 3) ) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) ) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-if-condition") (param i32) (result i32) (if (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) ) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) ) (func (export "as-store-first") (param i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-return-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0))) (return) ) (func (export "as-drop-operand") (param i32) (drop (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (if (result i32) (local.get 0) (then (i32.const 11)) (else (i32.const 10)) ) ) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.ctz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const -13)) ) ) ) (func (export "as-binary-operand") (param i32 i32) (result i32) (i32.mul (if (result i32) (local.get 0) (then (call $dummy) (i32.const 3)) (else (call $dummy) (i32.const -3)) ) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -5)) ) ) ) (func (export "as-test-operand") (param i32) (result i32) (i32.eqz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-compare-operand") (param i32 i32) (result i32) (f32.gt (if (result f32) (local.get 0) (then (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -3)) ) (if (result f32) (local.get 1) (then (call $dummy) (f32.const 4)) (else (call $dummy) (f32.const -4)) ) ) ) (func (export "as-binary-operands") (param i32) (result i32) (i32.mul (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const 3) (call $dummy) (i32.const -4)) ) ) ) (func (export "as-compare-operands") (param i32) (result i32) (f32.gt (if (result f32 f32) (local.get 0) (then (call $dummy) (f32.const 3) (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -2) (call $dummy) (f32.const -3)) ) ) ) (func (export "as-mixed-operands") (param i32) (result i32) (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -3) (call $dummy) (i32.const -4)) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (if (i32.const 1) (then (br 0) (unreachable))) (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable))) (i32.const 19) ) (func (export "break-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (br 0 (i32.const 18)) (i32.const 19)) (else (br 0 (i32.const 21)) (i32.const 20)) ) ) (func (export "break-multi-value") (param i32) (result i32 i32 i64) (if (result i32 i32 i64) (local.get 0) (then (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) (else (br 0 (i32.const -18) (i32.const 18) (i64.const -18)) (i32.const -19) (i32.const 19) (i64.const -19) ) ) ) (func (export "param") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add)) (else (i32.const -2) (i32.add)) ) ) (func (export "params") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add)) (else (i32.sub)) ) ) (func (export "params-id") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then)) (i32.add) ) (func (export "param-break") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add) (br 0)) (else (i32.const -2) (i32.add) (br 0)) ) ) (func (export "params-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add) (br 0)) (else (i32.sub) (br 0)) ) ) (func (export "params-id-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0))) (i32.add) ) (func (export "effects") (param i32) (result i32) (local i32) (if (block (result i32) (local.set 1 (i32.const 1)) (local.get 0)) (then (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (local.set 1 (i32.sub (local.get 1) (i32.const 5))) (local.set 1 (i32.mul (local.get 1) (i32.const 7))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 100))) ) (else (local.set 1 (i32.mul (local.get 1) (i32.const 5))) (local.set 1 (i32.sub (local.get 1) (i32.const 7))) (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 1000))) ) ) (local.get 1) ) ;; Examples (func $add64_u_with_carry (export "add64_u_with_carry") (param $i i64) (param $j i64) (param $c i32) (result i64 i32) (local $k i64) (local.set $k (i64.add (i64.add (local.get $i) (local.get $j)) (i64.extend_i32_u (local.get $c)) ) ) (return (local.get $k) (i64.lt_u (local.get $k) (local.get $i))) ) (func $add64_u_saturated (export "add64_u_saturated") (param i64 i64) (result i64) (call $add64_u_with_carry (local.get 0) (local.get 1) (i32.const 0)) (if (param i64) (result i64) (then (drop) (i64.const -1)) ) ) ;; Block signature syntax (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (if (type $block-sig-1) (i32.const 1) (then)) (if (type $block-sig-2) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (i32.const 1) (then (drop)) (else (drop))) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (i32.const 1) (then)) (drop) (drop) (drop) (if (type $block-sig-2) (result i32) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (param i32) (i32.const 1) (then (drop)) (else (drop)) ) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) (i32.const 1) (then) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty" (i32.const 0))) (assert_return (invoke "empty" (i32.const 1))) (assert_return (invoke "empty" (i32.const 100))) (assert_return (invoke "empty" (i32.const -2))) (assert_return (invoke "singular" (i32.const 0)) (i32.const 8)) (assert_return (invoke "singular" (i32.const 1)) (i32.const 7)) (assert_return (invoke "singular" (i32.const 10)) (i32.const 7)) (assert_return (invoke "singular" (i32.const -10)) (i32.const 7)) (assert_return (invoke "multi" (i32.const 0)) (i32.const 9) (i32.const -1)) (assert_return (invoke "multi" (i32.const 1)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const 13)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const -5)) (i32.const 8) (i32.const 1)) (assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11)) (assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-condition" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-condition" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-last" (i32.const 0)) (i32.const 2)) (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-binary-operands" (i32.const 0)) (i32.const -12)) (assert_return (invoke "as-binary-operands" (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-compare-operands" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operands" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-mixed-operands" (i32.const 0)) (i32.const -3)) (assert_return (invoke "as-mixed-operands" (i32.const 1)) (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value" (i32.const 1)) (i32.const 18)) (assert_return (invoke "break-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "break-multi-value" (i32.const 0)) (i32.const -18) (i32.const 18) (i64.const -18) ) (assert_return (invoke "break-multi-value" (i32.const 1)) (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "param" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 1)) (i32.const 3)) (assert_return (invoke "param-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "effects" (i32.const 1)) (i32.const -14)) (assert_return (invoke "effects" (i32.const 0)) (i32.const -6)) (assert_return (invoke "add64_u_with_carry" (i64.const 0) (i64.const 0) (i32.const 0)) (i64.const 0) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const 100) (i64.const 124) (i32.const 0)) (i64.const 224) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 0)) (i64.const -1) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const -1) (i32.const 0)) (i64.const -2) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 1)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 1)) (i64.const 1) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0) (i64.const 0)) (i64.const 0) ) (assert_return (invoke "add64_u_saturated" (i64.const 1230) (i64.const 23)) (i64.const 1253) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 0)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const -1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const -1) ) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (type $sig) (result i32) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (type $sig) (result i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (result i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (type $sig) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (param i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (if (result i32) (param i32) (i32.const 1) (then)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (i32.const 1)" " (if (param $x i32) (then (drop)) (else (drop)))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (then (drop)) (else (drop)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (result i32) (then)) (unreachable)" ")" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (i32.const 1) (if (type $sig) (i32.const 0) (then))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void (if (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void-else (if (i32.const 1) (then (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-void (if (i32.const 1) (then) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-void (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void-else (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-void (if (i32.const 1) (then) (else (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else (i32.const 2) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else (i32.const 0) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-nums-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-unreached-select (result i32) (if (result i64) (i32.const 0) (then (select (unreachable) (unreachable) (unreachable))) (else (i64.const 0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (i64.const 0)) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (select (unreachable) (unreachable) (unreachable))) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (nop)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (nop)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-condition-empty (if (then)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-block (i32.const 0) (block (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-loop (i32.const 0) (loop (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-then (i32.const 0) (i32.const 0) (if (then (if (then)))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br (i32.const 0) (block (br 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_if (i32.const 0) (block (br_if 0 (if(then)) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_table (i32.const 0) (block (br_table 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-return (return (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-select (select (if(then)) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-call (call 1 (if(then))) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-condition-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (if(then)) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.set (local i32) (local.set 0 (if(then))) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.tee (local i32) (local.tee 0 (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-condition-empty-in-global.set (global.set $x (if(then))) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-memory.grow (memory.grow (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-load (i32.load (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-condition-empty-in-store (i32.store (if(then)) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (if (param i32 f64) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (if (param i32 f64) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) if (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (if (param $x i32) (then)))") "unexpected token" ) (assert_malformed (module quote "(func i32.const 0 if end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l1 end $l2)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/multi-memory/imports.wast ================================================ ;; Auxiliary module to import from (module (func (export "func")) (func (export "func-i32") (param i32)) (func (export "func-f32") (param f32)) (func (export "func->i32") (result i32) (i32.const 22)) (func (export "func->f32") (result f32) (f32.const 11)) (func (export "func-i32->i32") (param i32) (result i32) (local.get 0)) (func (export "func-i64->i64") (param i64) (result i64) (local.get 0)) (global (export "global-i32") i32 (i32.const 55)) (global (export "global-f32") f32 (f32.const 44)) (global (export "global-mut-i64") (mut i64) (i64.const 66)) (table (export "table-10-inf") 10 funcref) (table (export "table-10-20") 10 20 funcref) (memory (export "memory-2-inf") 2) ;; Multiple memories are not yet supported ;; (memory (export "memory-2-4") 2 4) ) (register "test") ;; Functions (module (type $func_i32 (func (param i32))) (type $func_i64 (func (param i64))) (type $func_f32 (func (param f32))) (type $func_f64 (func (param f64))) (import "spectest" "print_i32" (func (param i32))) ;; JavaScript can't handle i64 yet. ;; (func (import "spectest" "print_i64") (param i64)) (import "spectest" "print_i32" (func $print_i32 (param i32))) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "print_i64" (func $print_i64 (param i64))) (import "spectest" "print_f32" (func $print_f32 (param f32))) (import "spectest" "print_f64" (func $print_f64 (param f64))) (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32))) (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64))) (func $print_i32-2 (import "spectest" "print_i32") (param i32)) (func $print_f64-2 (import "spectest" "print_f64") (param f64)) (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) (func (export "p1") (import "spectest" "print_i32") (param i32)) (func $p (export "p2") (import "spectest" "print_i32") (param i32)) (func (export "p3") (export "p4") (import "spectest" "print_i32") (param i32)) (func (export "p5") (import "spectest" "print_i32") (type 0)) (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result)) (import "spectest" "print_i32" (func (type $forward))) (func (import "spectest" "print_i32") (type $forward)) (type $forward (func (param i32))) (table funcref (elem $print_i32 $print_f64)) (func (export "print32") (param $i i32) (local $x f32) (local.set $x (f32.convert_i32_s (local.get $i))) (call 0 (local.get $i)) (call $print_i32_f32 (i32.add (local.get $i) (i32.const 1)) (f32.const 42) ) (call $print_i32 (local.get $i)) (call $print_i32-2 (local.get $i)) (call $print_f32 (local.get $x)) (call_indirect (type $func_i32) (local.get $i) (i32.const 0)) ) (func (export "print64") (param $i i64) (local $x f64) (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i)))) ;; JavaScript can't handle i64 yet. ;; (call 1 (local.get $i)) (call $print_f64_f64 (f64.add (local.get $x) (f64.const 1)) (f64.const 53) ) ;; JavaScript can't handle i64 yet. ;; (call $print_i64 (local.get $i)) (call $print_f64 (local.get $x)) (call $print_f64-2 (local.get $x)) (call_indirect (type $func_f64) (local.get $x) (i32.const 1)) ) ) (assert_return (invoke "print32" (i32.const 13))) (assert_return (invoke "print64" (i64.const 24))) (assert_invalid (module (type (func (result i32))) (import "test" "func" (func (type 1))) ) "unknown type" ) ;; Export sharing name with import (module (import "spectest" "print_i32" (func $imported_print (param i32))) (func (export "print_i32") (param $i i32) (call $imported_print (local.get $i)) ) ) (assert_return (invoke "print_i32" (i32.const 13))) ;; Export sharing name with import (module (import "spectest" "print_i32" (func $imported_print (param i32))) (func (export "print_i32") (param $i i32) (param $j i32) (result i32) (i32.add (local.get $i) (local.get $j)) ) ) (assert_return (invoke "print_i32" (i32.const 5) (i32.const 11)) (i32.const 16)) (module (import "test" "func" (func))) (module (import "test" "func-i32" (func (param i32)))) (module (import "test" "func-f32" (func (param f32)))) (module (import "test" "func->i32" (func (result i32)))) (module (import "test" "func->f32" (func (result f32)))) (module (import "test" "func-i32->i32" (func (param i32) (result i32)))) (module (import "test" "func-i64->i64" (func (param i64) (result i64)))) (assert_unlinkable (module (import "test" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (func))) "incompatible import type" ) ;; Globals (module (import "spectest" "global_i32" (global i32)) (global (import "spectest" "global_i32") i32) (import "spectest" "global_i32" (global $x i32)) (global $y (import "spectest" "global_i32") i32) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "global_i64" (global i64)) (import "spectest" "global_f32" (global f32)) (import "spectest" "global_f64" (global f64)) (func (export "get-0") (result i32) (global.get 0)) (func (export "get-1") (result i32) (global.get 1)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i32) (global.get $y)) ) (assert_return (invoke "get-0") (i32.const 666)) (assert_return (invoke "get-1") (i32.const 666)) (assert_return (invoke "get-x") (i32.const 666)) (assert_return (invoke "get-y") (i32.const 666)) (module (import "test" "global-i32" (global i32))) (module (import "test" "global-f32" (global f32))) (module (import "test" "global-mut-i64" (global (mut i64)))) (assert_unlinkable (module (import "test" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "test" "global-i32" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global f32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global f64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global (mut i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global f64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global (mut f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut f64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (global i32))) "incompatible import type" ) ;; Tables (module (type (func (result i32))) (import "spectest" "table" (table $tab 10 20 funcref)) (elem (table $tab) (i32.const 1) func $f $g) (func (export "call") (param i32) (result i32) (call_indirect $tab (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (type (func (result i32))) (table $tab (import "spectest" "table") 10 20 funcref) (elem (table $tab) (i32.const 1) func $f $g) (func (export "call") (param i32) (result i32) (call_indirect $tab (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (import "spectest" "table" (table 0 funcref)) (import "spectest" "table" (table 0 funcref)) (table 10 funcref) (table 10 funcref) ) (module (import "test" "table-10-inf" (table 10 funcref))) (module (import "test" "table-10-inf" (table 5 funcref))) (module (import "test" "table-10-inf" (table 0 funcref))) (module (import "test" "table-10-20" (table 10 funcref))) (module (import "test" "table-10-20" (table 5 funcref))) (module (import "test" "table-10-20" (table 0 funcref))) (module (import "test" "table-10-20" (table 10 20 funcref))) (module (import "test" "table-10-20" (table 5 20 funcref))) (module (import "test" "table-10-20" (table 0 20 funcref))) (module (import "test" "table-10-20" (table 10 25 funcref))) (module (import "test" "table-10-20" (table 5 25 funcref))) (module (import "test" "table-10-20" (table 0 25 funcref))) (module (import "spectest" "table" (table 10 funcref))) (module (import "spectest" "table" (table 5 funcref))) (module (import "spectest" "table" (table 0 funcref))) (module (import "spectest" "table" (table 10 20 funcref))) (module (import "spectest" "table" (table 5 20 funcref))) (module (import "spectest" "table" (table 0 20 funcref))) (module (import "spectest" "table" (table 10 25 funcref))) (module (import "spectest" "table" (table 5 25 funcref))) (assert_unlinkable (module (import "test" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 10 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-20" (table 12 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-20" (table 10 18 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 10 15 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (table 10 funcref))) "incompatible import type" ) ;; Memories (module (import "spectest" "memory" (memory 1 2)) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (memory (import "spectest" "memory") 1 2) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (import "test" "memory-2-inf" (memory 2))) (module (import "test" "memory-2-inf" (memory 1))) (module (import "test" "memory-2-inf" (memory 0))) (module (import "spectest" "memory" (memory 1))) (module (import "spectest" "memory" (memory 0))) (module (import "spectest" "memory" (memory 1 2))) (module (import "spectest" "memory" (memory 0 2))) (module (import "spectest" "memory" (memory 1 3))) (module (import "spectest" "memory" (memory 0 3))) (assert_unlinkable (module (import "test" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 3))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 2 3))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (module (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (module $Mgm (memory (export "memory") 1) ;; initial size is 1 (func (export "grow") (result i32) (memory.grow (i32.const 1))) ) (register "grown-memory" $Mgm) (assert_return (invoke $Mgm "grow") (i32.const 1)) ;; now size is 2 (module $Mgim1 ;; imported memory limits should match, because external memory size is 2 now (memory (export "memory") (import "grown-memory" "memory") 2) (func (export "grow") (result i32) (memory.grow (i32.const 1))) ) (register "grown-imported-memory" $Mgim1) (assert_return (invoke $Mgim1 "grow") (i32.const 2)) ;; now size is 3 (module $Mgim2 ;; imported memory limits should match, because external memory size is 3 now (import "grown-imported-memory" "memory" (memory 3)) (func (export "size") (result i32) (memory.size)) ) (assert_return (invoke $Mgim2 "size") (i32.const 3)) ;; Syntax errors (assert_malformed (module quote "(func) (import \"\" \"\" (func))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (global i64))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (table 0 funcref))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (memory 0))") "import after function" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") "import after global" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (func))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (global i32))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))") "import after table" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (func))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (global i32))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") "import after memory" ) ;; This module is required to validate, regardless of whether it can be ;; linked. Overloading is not possible in wasm itself, but it is possible ;; in modules from which wasm can import. (module) (register "not wasm") (assert_unlinkable (module (import "not wasm" "overloaded" (func)) (import "not wasm" "overloaded" (func (param i32))) (import "not wasm" "overloaded" (func (param i32 i32))) (import "not wasm" "overloaded" (func (param i64))) (import "not wasm" "overloaded" (func (param f32))) (import "not wasm" "overloaded" (func (param f64))) (import "not wasm" "overloaded" (func (result i32))) (import "not wasm" "overloaded" (func (result i64))) (import "not wasm" "overloaded" (func (result f32))) (import "not wasm" "overloaded" (func (result f64))) (import "not wasm" "overloaded" (global i32)) (import "not wasm" "overloaded" (global i64)) (import "not wasm" "overloaded" (global f32)) (import "not wasm" "overloaded" (global f64)) (import "not wasm" "overloaded" (table 0 funcref)) (import "not wasm" "overloaded" (memory 0)) ) "unknown import" ) ================================================ FILE: Test/WebAssembly/multi-memory/inline-module.wast ================================================ (func) (memory 0) (func (export "f")) ================================================ FILE: Test/WebAssembly/multi-memory/int_exprs.wast ================================================ ;; Test interesting integer "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x+1>n is not folded to x. (module (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) (i32.shr_s (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) (i32.shr_u (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) (i64.shr_s (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) (i64.shr_u (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) ) (assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) ;; Test that x>>n<?,./ ") (result i32) (i32.const 6)) ;; Test that we can use names that have special meaning in JS. (func (export "NaN") (result i32) (i32.const 7)) (func (export "Infinity") (result i32) (i32.const 8)) (func (export "if") (result i32) (i32.const 9)) ;; Test that we can use common libc names without conflict. (func (export "malloc") (result i32) (i32.const 10)) ;; Test that we can use some libc hidden names without conflict. (func (export "_malloc") (result i32) (i32.const 11)) (func (export "__malloc") (result i32) (i32.const 12)) ;; Test that names are case-sensitive. (func (export "a") (result i32) (i32.const 13)) (func (export "A") (result i32) (i32.const 14)) ;; Test that UTF-8 BOM code points can appear in identifiers. (func (export "") (result i32) (i32.const 15)) ;; Test that Unicode normalization is not applied. These function names ;; contain different codepoints which normalize to the same thing under ;; NFC or NFD. (func (export "Å") (result i32) (i32.const 16)) (func (export "Å") (result i32) (i32.const 17)) (func (export "Å") (result i32) (i32.const 18)) ;; Test that Unicode compatibility normalization is not applied. These ;; function names contain different codepoints which normalize to the ;; same thing under NFKC or NFKD. (func (export "ffi") (result i32) (i32.const 19)) (func (export "ffi") (result i32) (i32.const 20)) (func (export "ffi") (result i32) (i32.const 21)) ;; Test the C0 control codes. (func (export "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (result i32) (i32.const 22)) (func (export "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (result i32) (i32.const 23)) ;; Test miscellaneous control codes. (func (export " \7f") (result i32) (i32.const 24)) ;; Test the C1 control codes. (func (export "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (result i32) (i32.const 25)) (func (export "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (result i32) (i32.const 26)) ;; Test the Unicode Specials. (func (export "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (result i32) (i32.const 27)) (func (export "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (result i32) (i32.const 28)) ;; Test that the control pictures are distinct from the control codes they ;; depict. These correspond to the C0 and miscellaneous control code tests ;; above. (func (export "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (result i32) (i32.const 29)) (func (export "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (result i32) (i32.const 30)) (func (export "␠␡") (result i32) (i32.const 31)) ;; Test the Unicode Specials in non-escaped form (excluding U+FFFE and ;; U+FFFF, so that generic tools don't detect this file as non-UTF-8). (func (export "￰￱￲￳￴￵￶￷￸�") (result i32) (i32.const 32)) ;; Test a bare ZWJ code point. (func (export "‍") (result i32) (i32.const 33)) ;; Test a bare ZWNJ code point. (func (export "‌") (result i32) (i32.const 34)) ;; Test various bare joiner code points. (func (export "͏") (result i32) (i32.const 35)) (func (export "⁠") (result i32) (i32.const 36)) (func (export "⵿") (result i32) (i32.const 37)) (func (export "𑁿") (result i32) (i32.const 38)) (func (export "᠎") (result i32) (i32.const 39)) ;; Test various interesting code points: reverse BOM, zero-width space, ;; no-break space, soft hyphen, word joiner, ogham space mark, ;; right-to-left override, left-to-right override. (func (export "￯​ ­⁠ ‮‭") (result i32) (i32.const 40)) ;; Test more interesting code points: left-to-right mark, right-to-left mark, ;; non-breaking hyphen, line separator, paragraph separator, ;; left-to-right embedding, right-to-left embedding, ;; pop directional formatting, narrow no-break space, left-to-right isolate, ;; right-to-left isolate, first strong isolate, pop directional isolate. (func (export "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (result i32) (i32.const 41)) ;; Test some deprecated code points: inhibit symmetric swapping, ;; activate symmetric swapping, inhibit arabic form shaping, ;; activate arabic form shaping, national digit shapes, nominal digit shapes. (func (export "") (result i32) (i32.const 42)) ;; Test "invisible" operator code points. (func (export "⁡⁢⁣⁤") (result i32) (i32.const 43)) ;; Test that code points outside the BMP are supported. (func (export "𐀀󟿿􏿿") (result i32) (i32.const 44)) ;; Test that WebAssembly implementations cope in the presence of Zalgo. (func (export "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (result i32) (i32.const 45)) ;; Test Hangul filler code points. (func (export "ᅟᅠㅤᅠ") (result i32) (i32.const 46)) ;; Test variation selectors (which are also ID_Continue code points). (func (export "︀") (result i32) (i32.const 47)) (func (export "︄") (result i32) (i32.const 48)) (func (export "󠄀") (result i32) (i32.const 49)) (func (export "󠇯") (result i32) (i32.const 50)) ;; Test an uncombined combining code point. (func (export "̈") (result i32) (i32.const 51)) ;; Test that numerous different present and historical representations of the ;; "newline" concept are distinct. Tests largely inspired by: ;; https://en.wikipedia.org/wiki/Newline#Representations ;; https://en.wikipedia.org/wiki/Newline#Unicode and ;; https://en.wikipedia.org/wiki/Newline#Reverse_and_partial_line_feeds (func (export "\0a") (result i32) (i32.const 52)) (func (export "␤") (result i32) (i32.const 53)) (func (export "
") (result i32) (i32.const 54)) (func (export "\0d") (result i32) (i32.const 55)) (func (export "\0d\0a") (result i32) (i32.const 56)) (func (export "\0a\0d") (result i32) (i32.const 57)) (func (export "\1e") (result i32) (i32.const 58)) (func (export "\0b") (result i32) (i32.const 59)) (func (export "\0c") (result i32) (i32.const 60)) (func (export "\c2\85") (result i32) (i32.const 61)) (func (export "
") (result i32) (i32.const 62)) (func (export "…") (result i32) (i32.const 63)) (func (export "⏎") (result i32) (i32.const 64)) (func (export "\c2\8b") (result i32) (i32.const 65)) (func (export "\c2\8c") (result i32) (i32.const 66)) (func (export "\c2\8d") (result i32) (i32.const 67)) (func (export "↵") (result i32) (i32.const 68)) (func (export "↩") (result i32) (i32.const 69)) (func (export "⌤") (result i32) (i32.const 70)) (func (export "⤶") (result i32) (i32.const 71)) (func (export "↲") (result i32) (i32.const 72)) (func (export "⮨") (result i32) (i32.const 73)) (func (export "⮰") (result i32) (i32.const 74)) ;; Test that non-characters are not replaced by the replacement character. (func (export "�") (result i32) (i32.const 75)) (func (export "\ef\b7\90") (result i32) (i32.const 76)) (func (export "\ef\b7\91") (result i32) (i32.const 77)) (func (export "\ef\b7\92") (result i32) (i32.const 78)) (func (export "\ef\b7\93") (result i32) (i32.const 79)) (func (export "\ef\b7\94") (result i32) (i32.const 80)) (func (export "\ef\b7\95") (result i32) (i32.const 81)) (func (export "\ef\b7\96") (result i32) (i32.const 82)) (func (export "\ef\b7\97") (result i32) (i32.const 83)) (func (export "\ef\b7\98") (result i32) (i32.const 84)) (func (export "\ef\b7\99") (result i32) (i32.const 85)) (func (export "\ef\b7\9a") (result i32) (i32.const 86)) (func (export "\ef\b7\9b") (result i32) (i32.const 87)) (func (export "\ef\b7\9c") (result i32) (i32.const 88)) (func (export "\ef\b7\9d") (result i32) (i32.const 89)) (func (export "\ef\b7\9e") (result i32) (i32.const 90)) (func (export "\ef\b7\9f") (result i32) (i32.const 91)) (func (export "\ef\b7\a0") (result i32) (i32.const 92)) (func (export "\ef\b7\a1") (result i32) (i32.const 93)) (func (export "\ef\b7\a2") (result i32) (i32.const 94)) (func (export "\ef\b7\a3") (result i32) (i32.const 95)) (func (export "\ef\b7\a4") (result i32) (i32.const 96)) (func (export "\ef\b7\a5") (result i32) (i32.const 97)) (func (export "\ef\b7\a6") (result i32) (i32.const 98)) (func (export "\ef\b7\a7") (result i32) (i32.const 99)) (func (export "\ef\b7\a8") (result i32) (i32.const 100)) (func (export "\ef\b7\a9") (result i32) (i32.const 101)) (func (export "\ef\b7\aa") (result i32) (i32.const 102)) (func (export "\ef\b7\ab") (result i32) (i32.const 103)) (func (export "\ef\b7\ac") (result i32) (i32.const 104)) (func (export "\ef\b7\ad") (result i32) (i32.const 105)) (func (export "\ef\b7\ae") (result i32) (i32.const 106)) (func (export "\ef\b7\af") (result i32) (i32.const 107)) (func (export "\ef\bf\be") (result i32) (i32.const 108)) (func (export "\ef\bf\bf") (result i32) (i32.const 109)) (func (export "\f0\9f\bf\be") (result i32) (i32.const 110)) (func (export "\f0\9f\bf\bf") (result i32) (i32.const 111)) (func (export "\f0\af\bf\be") (result i32) (i32.const 112)) (func (export "\f0\af\bf\bf") (result i32) (i32.const 113)) (func (export "\f0\bf\bf\be") (result i32) (i32.const 114)) (func (export "\f0\bf\bf\bf") (result i32) (i32.const 115)) (func (export "\f1\8f\bf\be") (result i32) (i32.const 116)) (func (export "\f1\8f\bf\bf") (result i32) (i32.const 117)) (func (export "\f1\9f\bf\be") (result i32) (i32.const 118)) (func (export "\f1\9f\bf\bf") (result i32) (i32.const 119)) (func (export "\f1\af\bf\be") (result i32) (i32.const 120)) (func (export "\f1\af\bf\bf") (result i32) (i32.const 121)) (func (export "\f1\bf\bf\be") (result i32) (i32.const 122)) (func (export "\f1\bf\bf\bf") (result i32) (i32.const 123)) (func (export "\f2\8f\bf\be") (result i32) (i32.const 124)) (func (export "\f2\8f\bf\bf") (result i32) (i32.const 125)) (func (export "\f2\9f\bf\be") (result i32) (i32.const 126)) (func (export "\f2\9f\bf\bf") (result i32) (i32.const 127)) (func (export "\f2\af\bf\be") (result i32) (i32.const 128)) (func (export "\f2\af\bf\bf") (result i32) (i32.const 129)) (func (export "\f2\bf\bf\be") (result i32) (i32.const 130)) (func (export "\f2\bf\bf\bf") (result i32) (i32.const 131)) (func (export "\f3\8f\bf\be") (result i32) (i32.const 132)) (func (export "\f3\8f\bf\bf") (result i32) (i32.const 133)) (func (export "\f3\9f\bf\be") (result i32) (i32.const 134)) (func (export "\f3\9f\bf\bf") (result i32) (i32.const 135)) (func (export "\f3\af\bf\be") (result i32) (i32.const 136)) (func (export "\f3\af\bf\bf") (result i32) (i32.const 137)) (func (export "\f3\bf\bf\be") (result i32) (i32.const 138)) (func (export "\f3\bf\bf\bf") (result i32) (i32.const 139)) (func (export "\f4\8f\bf\be") (result i32) (i32.const 140)) (func (export "\f4\8f\bf\bf") (result i32) (i32.const 141)) ;; Test an interrobang with combining diacritical marks above. ;; https://xkcd.com/1209/ (func (export "̈‽̈̉") (result i32) (i32.const 142)) ;; Test that RLM/LRM don't change the logical byte order. (func (export "abc") (result i32) (i32.const 143)) (func (export "‭abc") (result i32) (i32.const 144)) (func (export "‮cba") (result i32) (i32.const 145)) (func (export "‭abc‮") (result i32) (i32.const 146)) (func (export "‮cba‭") (result i32) (i32.const 147)) ;; Test that Unicode font variations are preserved. (func (export "𝑨") (result i32) (i32.const 148)) (func (export "𝐴") (result i32) (i32.const 149)) (func (export "𝘈") (result i32) (i32.const 150)) (func (export "𝘼") (result i32) (i32.const 151)) (func (export "𝐀") (result i32) (i32.const 152)) (func (export "𝓐") (result i32) (i32.const 153)) (func (export "𝕬") (result i32) (i32.const 154)) (func (export "𝗔") (result i32) (i32.const 155)) (func (export "𝒜") (result i32) (i32.const 156)) (func (export "𝔄") (result i32) (i32.const 157)) (func (export "𝔸") (result i32) (i32.const 158)) (func (export "𝖠") (result i32) (i32.const 159)) (func (export "𝙰") (result i32) (i32.const 160)) (func (export "ᴀ") (result i32) (i32.const 161)) ;; Test that various additional letter variations are preserved. ;; (U+0040, U+0061, U+0041, U+00C5, U+0041 U+030A, U+212B, and the font ;; variations are covered above.) (func (export "ᴬ") (result i32) (i32.const 162)) (func (export "Ⓐ") (result i32) (i32.const 163)) (func (export "A") (result i32) (i32.const 164)) (func (export "🄐") (result i32) (i32.const 165)) (func (export "🄰") (result i32) (i32.const 166)) (func (export "󠁁") (result i32) (i32.const 167)) (func (export "U+0041") (result i32) (i32.const 168)) (func (export "A​") (result i32) (i32.const 169)) (func (export "А") (result i32) (i32.const 170)) (func (export "Ꙗ") (result i32) (i32.const 171)) (func (export "ⷼ") (result i32) (i32.const 172)) (func (export "ⷶ") (result i32) (i32.const 173)) (func (export "Ɐ") (result i32) (i32.const 174)) (func (export "🅐") (result i32) (i32.const 175)) (func (export "🅰") (result i32) (i32.const 176)) (func (export "Ⱝ") (result i32) (i32.const 177)) (func (export "𐐂") (result i32) (i32.const 178)) (func (export "𐐈") (result i32) (i32.const 179)) (func (export "𐒰") (result i32) (i32.const 180)) (func (export "À") (result i32) (i32.const 181)) (func (export "Á") (result i32) (i32.const 182)) (func (export "Â") (result i32) (i32.const 183)) (func (export "Ã") (result i32) (i32.const 184)) (func (export "Ä") (result i32) (i32.const 185)) (func (export "Ā") (result i32) (i32.const 186)) (func (export "Ă") (result i32) (i32.const 187)) (func (export "Ą") (result i32) (i32.const 188)) (func (export "Ǎ") (result i32) (i32.const 189)) (func (export "Ǟ") (result i32) (i32.const 190)) (func (export "Ǡ") (result i32) (i32.const 191)) (func (export "Ǻ") (result i32) (i32.const 192)) (func (export "Ȁ") (result i32) (i32.const 193)) (func (export "Ȃ") (result i32) (i32.const 194)) (func (export "Ȧ") (result i32) (i32.const 195)) (func (export "Ⱥ") (result i32) (i32.const 196)) (func (export "Ӑ") (result i32) (i32.const 197)) (func (export "Ӓ") (result i32) (i32.const 198)) (func (export "ߊ") (result i32) (i32.const 199)) (func (export "ࠡ") (result i32) (i32.const 200)) (func (export "ࠢ") (result i32) (i32.const 201)) (func (export "ࠣ") (result i32) (i32.const 202)) (func (export "ࠤ") (result i32) (i32.const 203)) (func (export "ࠥ") (result i32) (i32.const 204)) (func (export "ऄ") (result i32) (i32.const 205)) (func (export "अ") (result i32) (i32.const 206)) (func (export "ॲ") (result i32) (i32.const 207)) (func (export "অ") (result i32) (i32.const 208)) (func (export "ਅ") (result i32) (i32.const 209)) (func (export "અ") (result i32) (i32.const 210)) (func (export "ଅ") (result i32) (i32.const 211)) (func (export "அ") (result i32) (i32.const 212)) (func (export "అ") (result i32) (i32.const 213)) (func (export "ಅ") (result i32) (i32.const 214)) (func (export "അ") (result i32) (i32.const 215)) (func (export "ะ") (result i32) (i32.const 216)) (func (export "ະ") (result i32) (i32.const 217)) (func (export "༁") (result i32) (i32.const 218)) (func (export "ཨ") (result i32) (i32.const 219)) (func (export "ྸ") (result i32) (i32.const 220)) (func (export "အ") (result i32) (i32.const 221)) (func (export "ဢ") (result i32) (i32.const 222)) (func (export "ႜ") (result i32) (i32.const 223)) (func (export "ᅡ") (result i32) (i32.const 224)) (func (export "አ") (result i32) (i32.const 225)) (func (export "ዐ") (result i32) (i32.const 226)) (func (export "Ꭰ") (result i32) (i32.const 227)) (func (export "ᐊ") (result i32) (i32.const 228)) (func (export "ᖳ") (result i32) (i32.const 229)) (func (export "ᚨ") (result i32) (i32.const 230)) (func (export "ᚪ") (result i32) (i32.const 231)) (func (export "ᛆ") (result i32) (i32.const 232)) (func (export "ᜀ") (result i32) (i32.const 233)) (func (export "ᜠ") (result i32) (i32.const 234)) (func (export "ᝀ") (result i32) (i32.const 235)) (func (export "ᝠ") (result i32) (i32.const 236)) (func (export "ᠠ") (result i32) (i32.const 237)) (func (export "ᢇ") (result i32) (i32.const 238)) (func (export "ᤠ") (result i32) (i32.const 239)) (func (export "ᥣ") (result i32) (i32.const 240)) (func (export "ᨕ") (result i32) (i32.const 241)) (func (export "ᩋ") (result i32) (i32.const 242)) (func (export "ᩡ") (result i32) (i32.const 243)) (func (export "ᮃ") (result i32) (i32.const 244)) (func (export "ᯀ") (result i32) (i32.const 245)) (func (export "ᯁ") (result i32) (i32.const 246)) (func (export "ᰣ") (result i32) (i32.const 247)) (func (export "Ḁ") (result i32) (i32.const 248)) (func (export "Ạ") (result i32) (i32.const 249)) (func (export "Ả") (result i32) (i32.const 250)) (func (export "Ấ") (result i32) (i32.const 251)) (func (export "Ầ") (result i32) (i32.const 252)) (func (export "Ẩ") (result i32) (i32.const 253)) (func (export "Ẫ") (result i32) (i32.const 254)) (func (export "Ậ") (result i32) (i32.const 255)) (func (export "Ắ") (result i32) (i32.const 256)) (func (export "Ằ") (result i32) (i32.const 257)) (func (export "Ẳ") (result i32) (i32.const 258)) (func (export "Ẵ") (result i32) (i32.const 259)) (func (export "Ặ") (result i32) (i32.const 260)) (func (export "あ") (result i32) (i32.const 261)) (func (export "ア") (result i32) (i32.const 262)) (func (export "ㄚ") (result i32) (i32.const 263)) (func (export "ㅏ") (result i32) (i32.const 264)) (func (export "㈎") (result i32) (i32.const 265)) (func (export "㈏") (result i32) (i32.const 266)) (func (export "㈐") (result i32) (i32.const 267)) (func (export "㈑") (result i32) (i32.const 268)) (func (export "㈒") (result i32) (i32.const 269)) (func (export "㈓") (result i32) (i32.const 270)) (func (export "㈔") (result i32) (i32.const 271)) (func (export "㈕") (result i32) (i32.const 272)) (func (export "㈖") (result i32) (i32.const 273)) (func (export "㈗") (result i32) (i32.const 274)) (func (export "㈘") (result i32) (i32.const 275)) (func (export "㈙") (result i32) (i32.const 276)) (func (export "㈚") (result i32) (i32.const 277)) (func (export "㈛") (result i32) (i32.const 278)) (func (export "㉮") (result i32) (i32.const 279)) (func (export "㉯") (result i32) (i32.const 280)) (func (export "㉰") (result i32) (i32.const 281)) (func (export "㉱") (result i32) (i32.const 282)) (func (export "㉲") (result i32) (i32.const 283)) (func (export "㉳") (result i32) (i32.const 284)) (func (export "㉴") (result i32) (i32.const 285)) (func (export "㉵") (result i32) (i32.const 286)) (func (export "㉶") (result i32) (i32.const 287)) (func (export "㉷") (result i32) (i32.const 288)) (func (export "㉸") (result i32) (i32.const 289)) (func (export "㉹") (result i32) (i32.const 290)) (func (export "㉺") (result i32) (i32.const 291)) (func (export "㉻") (result i32) (i32.const 292)) (func (export "㋐") (result i32) (i32.const 293)) (func (export "ꀊ") (result i32) (i32.const 294)) (func (export "ꓮ") (result i32) (i32.const 295)) (func (export "ꕉ") (result i32) (i32.const 296)) (func (export "ꚠ") (result i32) (i32.const 297)) (func (export "ꠀ") (result i32) (i32.const 298)) (func (export "ꠣ") (result i32) (i32.const 299)) (func (export "ꡝ") (result i32) (i32.const 300)) (func (export "ꢂ") (result i32) (i32.const 301)) (func (export "꣪") (result i32) (i32.const 302)) (func (export "ꤢ") (result i32) (i32.const 303)) (func (export "ꥆ") (result i32) (i32.const 304)) (func (export "ꦄ") (result i32) (i32.const 305)) (func (export "ꨀ") (result i32) (i32.const 306)) (func (export "ア") (result i32) (i32.const 307)) (func (export "ᅡ") (result i32) (i32.const 308)) (func (export "𐀀") (result i32) (i32.const 309)) (func (export "𐊀") (result i32) (i32.const 310)) (func (export "𐊠") (result i32) (i32.const 311)) (func (export "𐌀") (result i32) (i32.const 312)) (func (export "𐎠") (result i32) (i32.const 313)) (func (export "𐒖") (result i32) (i32.const 314)) (func (export "𐔀") (result i32) (i32.const 315)) (func (export "𐝀") (result i32) (i32.const 316)) (func (export "𐠀") (result i32) (i32.const 317)) (func (export "𐤠") (result i32) (i32.const 318)) (func (export "𐦀") (result i32) (i32.const 319)) (func (export "𐦠") (result i32) (i32.const 320)) (func (export "𐨀") (result i32) (i32.const 321)) (func (export "𐬀") (result i32) (i32.const 322)) (func (export "𐰀") (result i32) (i32.const 323)) (func (export "𐰁") (result i32) (i32.const 324)) (func (export "𐲀") (result i32) (i32.const 325)) (func (export "𑀅") (result i32) (i32.const 326)) (func (export "𑂃") (result i32) (i32.const 327)) (func (export "𑄧") (result i32) (i32.const 328)) (func (export "𑅐") (result i32) (i32.const 329)) (func (export "𑆃") (result i32) (i32.const 330)) (func (export "𑈀") (result i32) (i32.const 331)) (func (export "𑊀") (result i32) (i32.const 332)) (func (export "𑊰") (result i32) (i32.const 333)) (func (export "𑌅") (result i32) (i32.const 334)) (func (export "𑍰") (result i32) (i32.const 335)) (func (export "𑐀") (result i32) (i32.const 336)) (func (export "𑒁") (result i32) (i32.const 337)) (func (export "𑖀") (result i32) (i32.const 338)) (func (export "𑘀") (result i32) (i32.const 339)) (func (export "𑚀") (result i32) (i32.const 340)) (func (export "𑜒") (result i32) (i32.const 341)) (func (export "𑜠") (result i32) (i32.const 342)) (func (export "𑢡") (result i32) (i32.const 343)) (func (export "𑫕") (result i32) (i32.const 344)) (func (export "𑰀") (result i32) (i32.const 345)) (func (export "𑲏") (result i32) (i32.const 346)) (func (export "𑲯") (result i32) (i32.const 347)) (func (export "𒀀") (result i32) (i32.const 348)) (func (export "𖧕") (result i32) (i32.const 349)) (func (export "𖩆") (result i32) (i32.const 350)) (func (export "𖫧") (result i32) (i32.const 351)) (func (export "𖽔") (result i32) (i32.const 352)) (func (export "𛱁") (result i32) (i32.const 353)) (func (export "𛱤") (result i32) (i32.const 354)) (func (export "𞠣") (result i32) (i32.const 355)) (func (export "🇦") (result i32) (i32.const 356)) (func (export "Ɑ") (result i32) (i32.const 357)) (func (export "Λ") (result i32) (i32.const 358)) (func (export "Ɒ") (result i32) (i32.const 359)) (func (export "ª") (result i32) (i32.const 360)) (func (export "∀") (result i32) (i32.const 361)) (func (export "₳") (result i32) (i32.const 362)) (func (export "𐤀") (result i32) (i32.const 363)) (func (export "Ⲁ") (result i32) (i32.const 364)) (func (export "𐌰") (result i32) (i32.const 365)) (func (export "Ά") (result i32) (i32.const 366)) (func (export "Α") (result i32) (i32.const 367)) (func (export "Ἀ") (result i32) (i32.const 368)) (func (export "Ἁ") (result i32) (i32.const 369)) (func (export "Ἂ") (result i32) (i32.const 370)) (func (export "Ἃ") (result i32) (i32.const 371)) (func (export "Ἄ") (result i32) (i32.const 372)) (func (export "Ἅ") (result i32) (i32.const 373)) (func (export "Ἆ") (result i32) (i32.const 374)) (func (export "Ἇ") (result i32) (i32.const 375)) (func (export "ᾈ") (result i32) (i32.const 376)) (func (export "ᾉ") (result i32) (i32.const 377)) (func (export "ᾊ") (result i32) (i32.const 378)) (func (export "ᾋ") (result i32) (i32.const 379)) (func (export "ᾌ") (result i32) (i32.const 380)) (func (export "ᾍ") (result i32) (i32.const 381)) (func (export "ᾎ") (result i32) (i32.const 382)) (func (export "ᾏ") (result i32) (i32.const 383)) (func (export "Ᾰ") (result i32) (i32.const 384)) (func (export "Ᾱ") (result i32) (i32.const 385)) (func (export "Ὰ") (result i32) (i32.const 386)) (func (export "Ά") (result i32) (i32.const 387)) (func (export "ᾼ") (result i32) (i32.const 388)) (func (export "𝚨") (result i32) (i32.const 389)) (func (export "𝛢") (result i32) (i32.const 390)) (func (export "𝜜") (result i32) (i32.const 391)) (func (export "𝝖") (result i32) (i32.const 392)) (func (export "𝞐") (result i32) (i32.const 393)) (func (export "⍶") (result i32) (i32.const 394)) (func (export "⍺") (result i32) (i32.const 395)) (func (export "⩜") (result i32) (i32.const 396)) (func (export "ᗅ") (result i32) (i32.const 397)) (func (export "Ꭺ") (result i32) (i32.const 398)) ;; Test unmatched "closing" and "opening" code points. (func (export ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (result i32) (i32.const 399)) (func (export "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (result i32) (i32.const 400)) (func (export "𝪋𝪤") (result i32) (i32.const 401)) (func (export "𝪋") (result i32) (i32.const 402)) ;; Test that Unicode fraction normalization is not applied. (func (export "½") (result i32) (i32.const 403)) (func (export "1⁄2") (result i32) (i32.const 404)) (func (export "1/2") (result i32) (i32.const 405)) (func (export "୳") (result i32) (i32.const 406)) (func (export "൴") (result i32) (i32.const 407)) (func (export "⳽") (result i32) (i32.const 408)) (func (export "꠱") (result i32) (i32.const 409)) (func (export "𐅁") (result i32) (i32.const 410)) (func (export "𐅵") (result i32) (i32.const 411)) (func (export "𐅶") (result i32) (i32.const 412)) (func (export "𐦽") (result i32) (i32.const 413)) (func (export "𐹻") (result i32) (i32.const 414)) ;; Test a full-width quote. (func (export """) (result i32) (i32.const 415)) ;; Test that different present and historical representations of the "delete" ;; concept are distinct. (func (export "\7f") (result i32) (i32.const 416)) (func (export "\08") (result i32) (i32.const 417)) (func (export "⌫") (result i32) (i32.const 418)) (func (export "⌦") (result i32) (i32.const 419)) (func (export "␈") (result i32) (i32.const 420)) (func (export "␡") (result i32) (i32.const 421)) (func (export "᷻") (result i32) (i32.const 422)) (func (export "\0f") (result i32) (i32.const 423)) (func (export "←") (result i32) (i32.const 424)) (func (export "⌧") (result i32) (i32.const 425)) (func (export "⍒") (result i32) (i32.const 426)) (func (export "⍔") (result i32) (i32.const 427)) (func (export "⍢") (result i32) (i32.const 428)) (func (export "⍫") (result i32) (i32.const 429)) ;; Test that different representations of the "substitute" concept are ;; distinct. (U+FFFD is covered above.) (func (export "\1a") (result i32) (i32.const 430)) (func (export "␦") (result i32) (i32.const 431)) (func (export "␚") (result i32) (i32.const 432)) (func (export "") (result i32) (i32.const 433)) (func (export "?") (result i32) (i32.const 434)) (func (export "¿") (result i32) (i32.const 435)) (func (export "᥅") (result i32) (i32.const 436)) (func (export ";") (result i32) (i32.const 437)) (func (export "՞") (result i32) (i32.const 438)) (func (export "؟") (result i32) (i32.const 439)) (func (export "፧") (result i32) (i32.const 440)) (func (export "⁇") (result i32) (i32.const 441)) (func (export "⍰") (result i32) (i32.const 442)) (func (export "❓") (result i32) (i32.const 443)) (func (export "❔") (result i32) (i32.const 444)) (func (export "⳺") (result i32) (i32.const 445)) (func (export "⳻") (result i32) (i32.const 446)) (func (export "⸮") (result i32) (i32.const 447)) (func (export "㉄") (result i32) (i32.const 448)) (func (export "꘏") (result i32) (i32.const 449)) (func (export "꛷") (result i32) (i32.const 450)) (func (export "︖") (result i32) (i32.const 451)) (func (export "﹖") (result i32) (i32.const 452)) (func (export "?") (result i32) (i32.const 453)) (func (export "𑅃") (result i32) (i32.const 454)) (func (export "𞥟") (result i32) (i32.const 455)) (func (export "󠀿") (result i32) (i32.const 456)) (func (export "𖡄") (result i32) (i32.const 457)) (func (export "⯑") (result i32) (i32.const 458)) ;; Test that different present and historical representations of the ;; "paragraph" concept are distinct. (U+2029 is covered above). (func (export "¶") (result i32) (i32.const 459)) (func (export "⁋") (result i32) (i32.const 460)) (func (export "܀") (result i32) (i32.const 461)) (func (export "჻") (result i32) (i32.const 462)) (func (export "፨") (result i32) (i32.const 463)) (func (export "〷") (result i32) (i32.const 464)) (func (export "❡") (result i32) (i32.const 465)) (func (export "⸏") (result i32) (i32.const 466)) (func (export "⸐") (result i32) (i32.const 467)) (func (export "⸑") (result i32) (i32.const 468)) (func (export "⸎") (result i32) (i32.const 469)) (func (export "\14") (result i32) (i32.const 470)) ;; ¶ in CP437 (func (export "☙") (result i32) (i32.const 471)) (func (export "⸿") (result i32) (i32.const 472)) (func (export "〇") (result i32) (i32.const 473)) (func (export "๛") (result i32) (i32.const 474)) ;; Test an unusual character. (func (export "ꙮ") (result i32) (i32.const 475)) ;; Test the three characters whose normalization forms under NFC, NFD, NFKC, ;; and NFKD are all different. ;; http://unicode.org/faq/normalization.html#6 (func (export "ϓ") (result i32) (i32.const 476)) (func (export "ϔ") (result i32) (i32.const 477)) (func (export "ẛ") (result i32) (i32.const 478)) ) (assert_return (invoke "") (i32.const 0)) (assert_return (invoke "0") (i32.const 1)) (assert_return (invoke "-0") (i32.const 2)) (assert_return (invoke "_") (i32.const 3)) (assert_return (invoke "$") (i32.const 4)) (assert_return (invoke "@") (i32.const 5)) (assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (i32.const 6)) (assert_return (invoke "NaN") (i32.const 7)) (assert_return (invoke "Infinity") (i32.const 8)) (assert_return (invoke "if") (i32.const 9)) (assert_return (invoke "malloc") (i32.const 10)) (assert_return (invoke "_malloc") (i32.const 11)) (assert_return (invoke "__malloc") (i32.const 12)) (assert_return (invoke "a") (i32.const 13)) (assert_return (invoke "A") (i32.const 14)) (assert_return (invoke "") (i32.const 15)) (assert_return (invoke "Å") (i32.const 16)) (assert_return (invoke "Å") (i32.const 17)) (assert_return (invoke "Å") (i32.const 18)) (assert_return (invoke "ffi") (i32.const 19)) (assert_return (invoke "ffi") (i32.const 20)) (assert_return (invoke "ffi") (i32.const 21)) (assert_return (invoke "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (i32.const 22)) (assert_return (invoke "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (i32.const 23)) (assert_return (invoke " \7f") (i32.const 24)) (assert_return (invoke "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (i32.const 25)) (assert_return (invoke "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (i32.const 26)) (assert_return (invoke "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (i32.const 27)) (assert_return (invoke "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (i32.const 28)) (assert_return (invoke "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (i32.const 29)) (assert_return (invoke "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (i32.const 30)) (assert_return (invoke "␠␡") (i32.const 31)) (assert_return (invoke "￰￱￲￳￴￵￶￷￸�") (i32.const 32)) (assert_return (invoke "‍") (i32.const 33)) (assert_return (invoke "‌") (i32.const 34)) (assert_return (invoke "͏") (i32.const 35)) (assert_return (invoke "⁠") (i32.const 36)) (assert_return (invoke "⵿") (i32.const 37)) (assert_return (invoke "𑁿") (i32.const 38)) (assert_return (invoke "᠎") (i32.const 39)) (assert_return (invoke "￯​ ­⁠ ‮‭") (i32.const 40)) (assert_return (invoke "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (i32.const 41)) (assert_return (invoke "") (i32.const 42)) (assert_return (invoke "⁡⁢⁣⁤") (i32.const 43)) (assert_return (invoke "𐀀󟿿􏿿") (i32.const 44)) (assert_return (invoke "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (i32.const 45)) (assert_return (invoke "ᅟᅠㅤᅠ") (i32.const 46)) (assert_return (invoke "︀") (i32.const 47)) (assert_return (invoke "︄") (i32.const 48)) (assert_return (invoke "󠄀") (i32.const 49)) (assert_return (invoke "󠇯") (i32.const 50)) (assert_return (invoke "̈") (i32.const 51)) (assert_return (invoke "\0a") (i32.const 52)) (assert_return (invoke "␤") (i32.const 53)) (assert_return (invoke "
") (i32.const 54)) (assert_return (invoke "\0d") (i32.const 55)) (assert_return (invoke "\0d\0a") (i32.const 56)) (assert_return (invoke "\0a\0d") (i32.const 57)) (assert_return (invoke "\1e") (i32.const 58)) (assert_return (invoke "\0b") (i32.const 59)) (assert_return (invoke "\0c") (i32.const 60)) (assert_return (invoke "\c2\85") (i32.const 61)) (assert_return (invoke "
") (i32.const 62)) (assert_return (invoke "…") (i32.const 63)) (assert_return (invoke "⏎") (i32.const 64)) (assert_return (invoke "\c2\8b") (i32.const 65)) (assert_return (invoke "\c2\8c") (i32.const 66)) (assert_return (invoke "\c2\8d") (i32.const 67)) (assert_return (invoke "↵") (i32.const 68)) (assert_return (invoke "↩") (i32.const 69)) (assert_return (invoke "⌤") (i32.const 70)) (assert_return (invoke "⤶") (i32.const 71)) (assert_return (invoke "↲") (i32.const 72)) (assert_return (invoke "⮨") (i32.const 73)) (assert_return (invoke "⮰") (i32.const 74)) (assert_return (invoke "�") (i32.const 75)) (assert_return (invoke "\ef\b7\90") (i32.const 76)) (assert_return (invoke "\ef\b7\91") (i32.const 77)) (assert_return (invoke "\ef\b7\92") (i32.const 78)) (assert_return (invoke "\ef\b7\93") (i32.const 79)) (assert_return (invoke "\ef\b7\94") (i32.const 80)) (assert_return (invoke "\ef\b7\95") (i32.const 81)) (assert_return (invoke "\ef\b7\96") (i32.const 82)) (assert_return (invoke "\ef\b7\97") (i32.const 83)) (assert_return (invoke "\ef\b7\98") (i32.const 84)) (assert_return (invoke "\ef\b7\99") (i32.const 85)) (assert_return (invoke "\ef\b7\9a") (i32.const 86)) (assert_return (invoke "\ef\b7\9b") (i32.const 87)) (assert_return (invoke "\ef\b7\9c") (i32.const 88)) (assert_return (invoke "\ef\b7\9d") (i32.const 89)) (assert_return (invoke "\ef\b7\9e") (i32.const 90)) (assert_return (invoke "\ef\b7\9f") (i32.const 91)) (assert_return (invoke "\ef\b7\a0") (i32.const 92)) (assert_return (invoke "\ef\b7\a1") (i32.const 93)) (assert_return (invoke "\ef\b7\a2") (i32.const 94)) (assert_return (invoke "\ef\b7\a3") (i32.const 95)) (assert_return (invoke "\ef\b7\a4") (i32.const 96)) (assert_return (invoke "\ef\b7\a5") (i32.const 97)) (assert_return (invoke "\ef\b7\a6") (i32.const 98)) (assert_return (invoke "\ef\b7\a7") (i32.const 99)) (assert_return (invoke "\ef\b7\a8") (i32.const 100)) (assert_return (invoke "\ef\b7\a9") (i32.const 101)) (assert_return (invoke "\ef\b7\aa") (i32.const 102)) (assert_return (invoke "\ef\b7\ab") (i32.const 103)) (assert_return (invoke "\ef\b7\ac") (i32.const 104)) (assert_return (invoke "\ef\b7\ad") (i32.const 105)) (assert_return (invoke "\ef\b7\ae") (i32.const 106)) (assert_return (invoke "\ef\b7\af") (i32.const 107)) (assert_return (invoke "\ef\bf\be") (i32.const 108)) (assert_return (invoke "\ef\bf\bf") (i32.const 109)) (assert_return (invoke "\f0\9f\bf\be") (i32.const 110)) (assert_return (invoke "\f0\9f\bf\bf") (i32.const 111)) (assert_return (invoke "\f0\af\bf\be") (i32.const 112)) (assert_return (invoke "\f0\af\bf\bf") (i32.const 113)) (assert_return (invoke "\f0\bf\bf\be") (i32.const 114)) (assert_return (invoke "\f0\bf\bf\bf") (i32.const 115)) (assert_return (invoke "\f1\8f\bf\be") (i32.const 116)) (assert_return (invoke "\f1\8f\bf\bf") (i32.const 117)) (assert_return (invoke "\f1\9f\bf\be") (i32.const 118)) (assert_return (invoke "\f1\9f\bf\bf") (i32.const 119)) (assert_return (invoke "\f1\af\bf\be") (i32.const 120)) (assert_return (invoke "\f1\af\bf\bf") (i32.const 121)) (assert_return (invoke "\f1\bf\bf\be") (i32.const 122)) (assert_return (invoke "\f1\bf\bf\bf") (i32.const 123)) (assert_return (invoke "\f2\8f\bf\be") (i32.const 124)) (assert_return (invoke "\f2\8f\bf\bf") (i32.const 125)) (assert_return (invoke "\f2\9f\bf\be") (i32.const 126)) (assert_return (invoke "\f2\9f\bf\bf") (i32.const 127)) (assert_return (invoke "\f2\af\bf\be") (i32.const 128)) (assert_return (invoke "\f2\af\bf\bf") (i32.const 129)) (assert_return (invoke "\f2\bf\bf\be") (i32.const 130)) (assert_return (invoke "\f2\bf\bf\bf") (i32.const 131)) (assert_return (invoke "\f3\8f\bf\be") (i32.const 132)) (assert_return (invoke "\f3\8f\bf\bf") (i32.const 133)) (assert_return (invoke "\f3\9f\bf\be") (i32.const 134)) (assert_return (invoke "\f3\9f\bf\bf") (i32.const 135)) (assert_return (invoke "\f3\af\bf\be") (i32.const 136)) (assert_return (invoke "\f3\af\bf\bf") (i32.const 137)) (assert_return (invoke "\f3\bf\bf\be") (i32.const 138)) (assert_return (invoke "\f3\bf\bf\bf") (i32.const 139)) (assert_return (invoke "\f4\8f\bf\be") (i32.const 140)) (assert_return (invoke "\f4\8f\bf\bf") (i32.const 141)) (assert_return (invoke "̈‽̈̉") (i32.const 142)) (assert_return (invoke "abc") (i32.const 143)) (assert_return (invoke "‭abc") (i32.const 144)) (assert_return (invoke "‮cba") (i32.const 145)) (assert_return (invoke "‭abc‮") (i32.const 146)) (assert_return (invoke "‮cba‭") (i32.const 147)) (assert_return (invoke "𝑨") (i32.const 148)) (assert_return (invoke "𝐴") (i32.const 149)) (assert_return (invoke "𝘈") (i32.const 150)) (assert_return (invoke "𝘼") (i32.const 151)) (assert_return (invoke "𝐀") (i32.const 152)) (assert_return (invoke "𝓐") (i32.const 153)) (assert_return (invoke "𝕬") (i32.const 154)) (assert_return (invoke "𝗔") (i32.const 155)) (assert_return (invoke "𝒜") (i32.const 156)) (assert_return (invoke "𝔄") (i32.const 157)) (assert_return (invoke "𝔸") (i32.const 158)) (assert_return (invoke "𝖠") (i32.const 159)) (assert_return (invoke "𝙰") (i32.const 160)) (assert_return (invoke "ᴀ") (i32.const 161)) (assert_return (invoke "ᴬ") (i32.const 162)) (assert_return (invoke "Ⓐ") (i32.const 163)) (assert_return (invoke "A") (i32.const 164)) (assert_return (invoke "🄐") (i32.const 165)) (assert_return (invoke "🄰") (i32.const 166)) (assert_return (invoke "󠁁") (i32.const 167)) (assert_return (invoke "U+0041") (i32.const 168)) (assert_return (invoke "A​") (i32.const 169)) (assert_return (invoke "А") (i32.const 170)) (assert_return (invoke "Ꙗ") (i32.const 171)) (assert_return (invoke "ⷼ") (i32.const 172)) (assert_return (invoke "ⷶ") (i32.const 173)) (assert_return (invoke "Ɐ") (i32.const 174)) (assert_return (invoke "🅐") (i32.const 175)) (assert_return (invoke "🅰") (i32.const 176)) (assert_return (invoke "Ⱝ") (i32.const 177)) (assert_return (invoke "𐐂") (i32.const 178)) (assert_return (invoke "𐐈") (i32.const 179)) (assert_return (invoke "𐒰") (i32.const 180)) (assert_return (invoke "À") (i32.const 181)) (assert_return (invoke "Á") (i32.const 182)) (assert_return (invoke "Â") (i32.const 183)) (assert_return (invoke "Ã") (i32.const 184)) (assert_return (invoke "Ä") (i32.const 185)) (assert_return (invoke "Ā") (i32.const 186)) (assert_return (invoke "Ă") (i32.const 187)) (assert_return (invoke "Ą") (i32.const 188)) (assert_return (invoke "Ǎ") (i32.const 189)) (assert_return (invoke "Ǟ") (i32.const 190)) (assert_return (invoke "Ǡ") (i32.const 191)) (assert_return (invoke "Ǻ") (i32.const 192)) (assert_return (invoke "Ȁ") (i32.const 193)) (assert_return (invoke "Ȃ") (i32.const 194)) (assert_return (invoke "Ȧ") (i32.const 195)) (assert_return (invoke "Ⱥ") (i32.const 196)) (assert_return (invoke "Ӑ") (i32.const 197)) (assert_return (invoke "Ӓ") (i32.const 198)) (assert_return (invoke "ߊ") (i32.const 199)) (assert_return (invoke "ࠡ") (i32.const 200)) (assert_return (invoke "ࠢ") (i32.const 201)) (assert_return (invoke "ࠣ") (i32.const 202)) (assert_return (invoke "ࠤ") (i32.const 203)) (assert_return (invoke "ࠥ") (i32.const 204)) (assert_return (invoke "ऄ") (i32.const 205)) (assert_return (invoke "अ") (i32.const 206)) (assert_return (invoke "ॲ") (i32.const 207)) (assert_return (invoke "অ") (i32.const 208)) (assert_return (invoke "ਅ") (i32.const 209)) (assert_return (invoke "અ") (i32.const 210)) (assert_return (invoke "ଅ") (i32.const 211)) (assert_return (invoke "அ") (i32.const 212)) (assert_return (invoke "అ") (i32.const 213)) (assert_return (invoke "ಅ") (i32.const 214)) (assert_return (invoke "അ") (i32.const 215)) (assert_return (invoke "ะ") (i32.const 216)) (assert_return (invoke "ະ") (i32.const 217)) (assert_return (invoke "༁") (i32.const 218)) (assert_return (invoke "ཨ") (i32.const 219)) (assert_return (invoke "ྸ") (i32.const 220)) (assert_return (invoke "အ") (i32.const 221)) (assert_return (invoke "ဢ") (i32.const 222)) (assert_return (invoke "ႜ") (i32.const 223)) (assert_return (invoke "ᅡ") (i32.const 224)) (assert_return (invoke "አ") (i32.const 225)) (assert_return (invoke "ዐ") (i32.const 226)) (assert_return (invoke "Ꭰ") (i32.const 227)) (assert_return (invoke "ᐊ") (i32.const 228)) (assert_return (invoke "ᖳ") (i32.const 229)) (assert_return (invoke "ᚨ") (i32.const 230)) (assert_return (invoke "ᚪ") (i32.const 231)) (assert_return (invoke "ᛆ") (i32.const 232)) (assert_return (invoke "ᜀ") (i32.const 233)) (assert_return (invoke "ᜠ") (i32.const 234)) (assert_return (invoke "ᝀ") (i32.const 235)) (assert_return (invoke "ᝠ") (i32.const 236)) (assert_return (invoke "ᠠ") (i32.const 237)) (assert_return (invoke "ᢇ") (i32.const 238)) (assert_return (invoke "ᤠ") (i32.const 239)) (assert_return (invoke "ᥣ") (i32.const 240)) (assert_return (invoke "ᨕ") (i32.const 241)) (assert_return (invoke "ᩋ") (i32.const 242)) (assert_return (invoke "ᩡ") (i32.const 243)) (assert_return (invoke "ᮃ") (i32.const 244)) (assert_return (invoke "ᯀ") (i32.const 245)) (assert_return (invoke "ᯁ") (i32.const 246)) (assert_return (invoke "ᰣ") (i32.const 247)) (assert_return (invoke "Ḁ") (i32.const 248)) (assert_return (invoke "Ạ") (i32.const 249)) (assert_return (invoke "Ả") (i32.const 250)) (assert_return (invoke "Ấ") (i32.const 251)) (assert_return (invoke "Ầ") (i32.const 252)) (assert_return (invoke "Ẩ") (i32.const 253)) (assert_return (invoke "Ẫ") (i32.const 254)) (assert_return (invoke "Ậ") (i32.const 255)) (assert_return (invoke "Ắ") (i32.const 256)) (assert_return (invoke "Ằ") (i32.const 257)) (assert_return (invoke "Ẳ") (i32.const 258)) (assert_return (invoke "Ẵ") (i32.const 259)) (assert_return (invoke "Ặ") (i32.const 260)) (assert_return (invoke "あ") (i32.const 261)) (assert_return (invoke "ア") (i32.const 262)) (assert_return (invoke "ㄚ") (i32.const 263)) (assert_return (invoke "ㅏ") (i32.const 264)) (assert_return (invoke "㈎") (i32.const 265)) (assert_return (invoke "㈏") (i32.const 266)) (assert_return (invoke "㈐") (i32.const 267)) (assert_return (invoke "㈑") (i32.const 268)) (assert_return (invoke "㈒") (i32.const 269)) (assert_return (invoke "㈓") (i32.const 270)) (assert_return (invoke "㈔") (i32.const 271)) (assert_return (invoke "㈕") (i32.const 272)) (assert_return (invoke "㈖") (i32.const 273)) (assert_return (invoke "㈗") (i32.const 274)) (assert_return (invoke "㈘") (i32.const 275)) (assert_return (invoke "㈙") (i32.const 276)) (assert_return (invoke "㈚") (i32.const 277)) (assert_return (invoke "㈛") (i32.const 278)) (assert_return (invoke "㉮") (i32.const 279)) (assert_return (invoke "㉯") (i32.const 280)) (assert_return (invoke "㉰") (i32.const 281)) (assert_return (invoke "㉱") (i32.const 282)) (assert_return (invoke "㉲") (i32.const 283)) (assert_return (invoke "㉳") (i32.const 284)) (assert_return (invoke "㉴") (i32.const 285)) (assert_return (invoke "㉵") (i32.const 286)) (assert_return (invoke "㉶") (i32.const 287)) (assert_return (invoke "㉷") (i32.const 288)) (assert_return (invoke "㉸") (i32.const 289)) (assert_return (invoke "㉹") (i32.const 290)) (assert_return (invoke "㉺") (i32.const 291)) (assert_return (invoke "㉻") (i32.const 292)) (assert_return (invoke "㋐") (i32.const 293)) (assert_return (invoke "ꀊ") (i32.const 294)) (assert_return (invoke "ꓮ") (i32.const 295)) (assert_return (invoke "ꕉ") (i32.const 296)) (assert_return (invoke "ꚠ") (i32.const 297)) (assert_return (invoke "ꠀ") (i32.const 298)) (assert_return (invoke "ꠣ") (i32.const 299)) (assert_return (invoke "ꡝ") (i32.const 300)) (assert_return (invoke "ꢂ") (i32.const 301)) (assert_return (invoke "꣪") (i32.const 302)) (assert_return (invoke "ꤢ") (i32.const 303)) (assert_return (invoke "ꥆ") (i32.const 304)) (assert_return (invoke "ꦄ") (i32.const 305)) (assert_return (invoke "ꨀ") (i32.const 306)) (assert_return (invoke "ア") (i32.const 307)) (assert_return (invoke "ᅡ") (i32.const 308)) (assert_return (invoke "𐀀") (i32.const 309)) (assert_return (invoke "𐊀") (i32.const 310)) (assert_return (invoke "𐊠") (i32.const 311)) (assert_return (invoke "𐌀") (i32.const 312)) (assert_return (invoke "𐎠") (i32.const 313)) (assert_return (invoke "𐒖") (i32.const 314)) (assert_return (invoke "𐔀") (i32.const 315)) (assert_return (invoke "𐝀") (i32.const 316)) (assert_return (invoke "𐠀") (i32.const 317)) (assert_return (invoke "𐤠") (i32.const 318)) (assert_return (invoke "𐦀") (i32.const 319)) (assert_return (invoke "𐦠") (i32.const 320)) (assert_return (invoke "𐨀") (i32.const 321)) (assert_return (invoke "𐬀") (i32.const 322)) (assert_return (invoke "𐰀") (i32.const 323)) (assert_return (invoke "𐰁") (i32.const 324)) (assert_return (invoke "𐲀") (i32.const 325)) (assert_return (invoke "𑀅") (i32.const 326)) (assert_return (invoke "𑂃") (i32.const 327)) (assert_return (invoke "𑄧") (i32.const 328)) (assert_return (invoke "𑅐") (i32.const 329)) (assert_return (invoke "𑆃") (i32.const 330)) (assert_return (invoke "𑈀") (i32.const 331)) (assert_return (invoke "𑊀") (i32.const 332)) (assert_return (invoke "𑊰") (i32.const 333)) (assert_return (invoke "𑌅") (i32.const 334)) (assert_return (invoke "𑍰") (i32.const 335)) (assert_return (invoke "𑐀") (i32.const 336)) (assert_return (invoke "𑒁") (i32.const 337)) (assert_return (invoke "𑖀") (i32.const 338)) (assert_return (invoke "𑘀") (i32.const 339)) (assert_return (invoke "𑚀") (i32.const 340)) (assert_return (invoke "𑜒") (i32.const 341)) (assert_return (invoke "𑜠") (i32.const 342)) (assert_return (invoke "𑢡") (i32.const 343)) (assert_return (invoke "𑫕") (i32.const 344)) (assert_return (invoke "𑰀") (i32.const 345)) (assert_return (invoke "𑲏") (i32.const 346)) (assert_return (invoke "𑲯") (i32.const 347)) (assert_return (invoke "𒀀") (i32.const 348)) (assert_return (invoke "𖧕") (i32.const 349)) (assert_return (invoke "𖩆") (i32.const 350)) (assert_return (invoke "𖫧") (i32.const 351)) (assert_return (invoke "𖽔") (i32.const 352)) (assert_return (invoke "𛱁") (i32.const 353)) (assert_return (invoke "𛱤") (i32.const 354)) (assert_return (invoke "𞠣") (i32.const 355)) (assert_return (invoke "🇦") (i32.const 356)) (assert_return (invoke "Ɑ") (i32.const 357)) (assert_return (invoke "Λ") (i32.const 358)) (assert_return (invoke "Ɒ") (i32.const 359)) (assert_return (invoke "ª") (i32.const 360)) (assert_return (invoke "∀") (i32.const 361)) (assert_return (invoke "₳") (i32.const 362)) (assert_return (invoke "𐤀") (i32.const 363)) (assert_return (invoke "Ⲁ") (i32.const 364)) (assert_return (invoke "𐌰") (i32.const 365)) (assert_return (invoke "Ά") (i32.const 366)) (assert_return (invoke "Α") (i32.const 367)) (assert_return (invoke "Ἀ") (i32.const 368)) (assert_return (invoke "Ἁ") (i32.const 369)) (assert_return (invoke "Ἂ") (i32.const 370)) (assert_return (invoke "Ἃ") (i32.const 371)) (assert_return (invoke "Ἄ") (i32.const 372)) (assert_return (invoke "Ἅ") (i32.const 373)) (assert_return (invoke "Ἆ") (i32.const 374)) (assert_return (invoke "Ἇ") (i32.const 375)) (assert_return (invoke "ᾈ") (i32.const 376)) (assert_return (invoke "ᾉ") (i32.const 377)) (assert_return (invoke "ᾊ") (i32.const 378)) (assert_return (invoke "ᾋ") (i32.const 379)) (assert_return (invoke "ᾌ") (i32.const 380)) (assert_return (invoke "ᾍ") (i32.const 381)) (assert_return (invoke "ᾎ") (i32.const 382)) (assert_return (invoke "ᾏ") (i32.const 383)) (assert_return (invoke "Ᾰ") (i32.const 384)) (assert_return (invoke "Ᾱ") (i32.const 385)) (assert_return (invoke "Ὰ") (i32.const 386)) (assert_return (invoke "Ά") (i32.const 387)) (assert_return (invoke "ᾼ") (i32.const 388)) (assert_return (invoke "𝚨") (i32.const 389)) (assert_return (invoke "𝛢") (i32.const 390)) (assert_return (invoke "𝜜") (i32.const 391)) (assert_return (invoke "𝝖") (i32.const 392)) (assert_return (invoke "𝞐") (i32.const 393)) (assert_return (invoke "⍶") (i32.const 394)) (assert_return (invoke "⍺") (i32.const 395)) (assert_return (invoke "⩜") (i32.const 396)) (assert_return (invoke "ᗅ") (i32.const 397)) (assert_return (invoke "Ꭺ") (i32.const 398)) (assert_return (invoke ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (i32.const 399)) (assert_return (invoke "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (i32.const 400)) (assert_return (invoke "𝪋𝪤") (i32.const 401)) (assert_return (invoke "𝪋") (i32.const 402)) (assert_return (invoke "½") (i32.const 403)) (assert_return (invoke "1⁄2") (i32.const 404)) (assert_return (invoke "1/2") (i32.const 405)) (assert_return (invoke "୳") (i32.const 406)) (assert_return (invoke "൴") (i32.const 407)) (assert_return (invoke "⳽") (i32.const 408)) (assert_return (invoke "꠱") (i32.const 409)) (assert_return (invoke "𐅁") (i32.const 410)) (assert_return (invoke "𐅵") (i32.const 411)) (assert_return (invoke "𐅶") (i32.const 412)) (assert_return (invoke "𐦽") (i32.const 413)) (assert_return (invoke "𐹻") (i32.const 414)) (assert_return (invoke """) (i32.const 415)) (assert_return (invoke "\7f") (i32.const 416)) (assert_return (invoke "\08") (i32.const 417)) (assert_return (invoke "⌫") (i32.const 418)) (assert_return (invoke "⌦") (i32.const 419)) (assert_return (invoke "␈") (i32.const 420)) (assert_return (invoke "␡") (i32.const 421)) (assert_return (invoke "᷻") (i32.const 422)) (assert_return (invoke "\0f") (i32.const 423)) (assert_return (invoke "←") (i32.const 424)) (assert_return (invoke "⌧") (i32.const 425)) (assert_return (invoke "⍒") (i32.const 426)) (assert_return (invoke "⍔") (i32.const 427)) (assert_return (invoke "⍢") (i32.const 428)) (assert_return (invoke "⍫") (i32.const 429)) (assert_return (invoke "\1a") (i32.const 430)) (assert_return (invoke "␦") (i32.const 431)) (assert_return (invoke "␚") (i32.const 432)) (assert_return (invoke "") (i32.const 433)) (assert_return (invoke "?") (i32.const 434)) (assert_return (invoke "¿") (i32.const 435)) (assert_return (invoke "᥅") (i32.const 436)) (assert_return (invoke ";") (i32.const 437)) (assert_return (invoke "՞") (i32.const 438)) (assert_return (invoke "؟") (i32.const 439)) (assert_return (invoke "፧") (i32.const 440)) (assert_return (invoke "⁇") (i32.const 441)) (assert_return (invoke "⍰") (i32.const 442)) (assert_return (invoke "❓") (i32.const 443)) (assert_return (invoke "❔") (i32.const 444)) (assert_return (invoke "⳺") (i32.const 445)) (assert_return (invoke "⳻") (i32.const 446)) (assert_return (invoke "⸮") (i32.const 447)) (assert_return (invoke "㉄") (i32.const 448)) (assert_return (invoke "꘏") (i32.const 449)) (assert_return (invoke "꛷") (i32.const 450)) (assert_return (invoke "︖") (i32.const 451)) (assert_return (invoke "﹖") (i32.const 452)) (assert_return (invoke "?") (i32.const 453)) (assert_return (invoke "𑅃") (i32.const 454)) (assert_return (invoke "𞥟") (i32.const 455)) (assert_return (invoke "󠀿") (i32.const 456)) (assert_return (invoke "𖡄") (i32.const 457)) (assert_return (invoke "⯑") (i32.const 458)) (assert_return (invoke "¶") (i32.const 459)) (assert_return (invoke "⁋") (i32.const 460)) (assert_return (invoke "܀") (i32.const 461)) (assert_return (invoke "჻") (i32.const 462)) (assert_return (invoke "፨") (i32.const 463)) (assert_return (invoke "〷") (i32.const 464)) (assert_return (invoke "❡") (i32.const 465)) (assert_return (invoke "⸏") (i32.const 466)) (assert_return (invoke "⸐") (i32.const 467)) (assert_return (invoke "⸑") (i32.const 468)) (assert_return (invoke "⸎") (i32.const 469)) (assert_return (invoke "\14") (i32.const 470)) (assert_return (invoke "☙") (i32.const 471)) (assert_return (invoke "⸿") (i32.const 472)) (assert_return (invoke "〇") (i32.const 473)) (assert_return (invoke "๛") (i32.const 474)) (assert_return (invoke "ꙮ") (i32.const 475)) (assert_return (invoke "ϓ") (i32.const 476)) (assert_return (invoke "ϔ") (i32.const 477)) (assert_return (invoke "ẛ") (i32.const 478)) (module ;; Test that we can use indices instead of names to reference imports, ;; exports, functions and parameters. (import "spectest" "print_i32" (func (param i32))) (func (import "spectest" "print_i32") (param i32)) (func (param i32) (param i32) (call 0 (local.get 0)) (call 1 (local.get 1)) ) (export "print32" (func 2)) ) (assert_return (invoke "print32" (i32.const 42) (i32.const 123))) ================================================ FILE: Test/WebAssembly/multi-memory/nop.wast ================================================ ;; Test `nop` operator. (module ;; Auxiliary definitions (func $dummy) (func $3-ary (param i32 i32 i32) (result i32) local.get 0 local.get 1 local.get 2 i32.sub i32.add ) (memory 1) (func (export "as-func-first") (result i32) (nop) (i32.const 1) ) (func (export "as-func-mid") (result i32) (call $dummy) (nop) (i32.const 2) ) (func (export "as-func-last") (result i32) (call $dummy) (i32.const 3) (nop) ) (func (export "as-func-everywhere") (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) (func (export "as-drop-first") (param i32) (nop) (local.get 0) (drop) ) (func (export "as-drop-last") (param i32) (local.get 0) (nop) (drop) ) (func (export "as-drop-everywhere") (param i32) (nop) (nop) (local.get 0) (nop) (nop) (drop) ) (func (export "as-select-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid1") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid2") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (local.get 0) (select) ) (func (export "as-select-last") (param i32) (result i32) (local.get 0) (local.get 0) (local.get 0) (nop) (select) ) (func (export "as-select-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (select) ) (func (export "as-block-first") (result i32) (block (result i32) (nop) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-block-last") (result i32) (block (result i32) (nop) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-block-everywhere") (result i32) (block (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (nop) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-loop-everywhere") (result i32) (loop (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-if-condition") (param i32) (local.get 0) (nop) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (if (local.get 0) (then (nop)) (else (call $dummy))) ) (func (export "as-if-else") (param i32) (if (local.get 0) (then (call $dummy)) (else (nop))) ) (func (export "as-br-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (br 0)) ) (func (export "as-br-last") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (br 0)) ) (func (export "as-br-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (br 0)) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_if 0)) ) (func (export "as-br_if-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_if 0)) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_if 0)) ) (func (export "as-br_if-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_if 0) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_table 0 0)) ) (func (export "as-br_table-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_table 0 0) ) ) (func (export "as-return-first") (param i32) (result i32) (nop) (local.get 0) (return) ) (func (export "as-return-last") (param i32) (result i32) (local.get 0) (nop) (return) ) (func (export "as-return-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (return) ) (func (export "as-call-first") (param i32 i32 i32) (result i32) (nop) (local.get 0) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid1") (param i32 i32 i32) (result i32) (local.get 0) (nop) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid2") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (nop) (local.get 2) (call $3-ary) ) (func (export "as-call-last") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (local.get 2) (nop) (call $3-ary) ) (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (local.get 2) (nop) (nop) (call $3-ary) ) (func (export "as-unary-first") (param i32) (result i32) (nop) (local.get 0) (i32.ctz) ) (func (export "as-unary-last") (param i32) (result i32) (local.get 0) (nop) (i32.ctz) ) (func (export "as-unary-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.ctz) ) (func (export "as-binary-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.add) ) (func (export "as-binary-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.add) ) (func (export "as-binary-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.add) ) (func (export "as-binary-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.add) ) (func (export "as-test-first") (param i32) (result i32) (nop) (local.get 0) (i32.eqz) ) (func (export "as-test-last") (param i32) (result i32) (local.get 0) (nop) (i32.eqz) ) (func (export "as-test-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) i32.eqz ) (func (export "as-compare-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.ne) ) (func (export "as-compare-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.ne) ) (func (export "as-compare-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.lt_u) ) (func (export "as-compare-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.le_s) ) (func (export "as-memory.grow-first") (param i32) (result i32) (nop) (local.get 0) (memory.grow) ) (func (export "as-memory.grow-last") (param i32) (result i32) (local.get 0) (nop) (memory.grow) ) (func (export "as-memory.grow-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (memory.grow) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (nop) (i32.const 1) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid1") (result i32) (block (result i32) (i32.const 1) (nop) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid2") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (nop) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (i32.const 0) (nop) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-everywhere") (result i32) (block (result i32) (nop) (nop) (i32.const 1) (nop) (nop) (i32.const 2) (nop) (nop) (i32.const 0) (nop) (nop) (call_indirect (type $check)) ) ) (func (export "as-local.set-first") (param i32) (result i32) (nop) (i32.const 2) (local.set 0) (local.get 0) ) (func (export "as-local.set-last") (param i32) (result i32) (i32.const 2) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.set-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.tee-first") (param i32) (result i32) (nop) (i32.const 2) (local.tee 0) ) (func (export "as-local.tee-last") (param i32) (result i32) (i32.const 2) (nop) (local.tee 0) ) (func (export "as-local.tee-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.tee 0) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-first") (result i32) (nop) (i32.const 2) (global.set $a) (global.get $a) ) (func (export "as-global.set-last") (result i32) (i32.const 2) (nop) (global.set $a) (global.get $a) ) (func (export "as-global.set-everywhere") (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (global.set 0) (global.get $a) ) (func (export "as-load-first") (param i32) (result i32) (nop) (local.get 0) (i32.load) ) (func (export "as-load-last") (param i32) (result i32) (local.get 0) (nop) (i32.load) ) (func (export "as-load-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.load) ) (func (export "as-store-first") (param i32 i32) (nop) (local.get 0) (local.get 1) (i32.store) ) (func (export "as-store-mid") (param i32 i32) (local.get 0) (nop) (local.get 1) (i32.store) ) (func (export "as-store-last") (param i32 i32) (local.get 0) (local.get 1) (nop) (i32.store) ) (func (export "as-store-everywhere") (param i32 i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (i32.store) ) ) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last") (i32.const 3)) (assert_return (invoke "as-func-everywhere") (i32.const 4)) (assert_return (invoke "as-drop-first" (i32.const 0))) (assert_return (invoke "as-drop-last" (i32.const 0))) (assert_return (invoke "as-drop-everywhere" (i32.const 0))) (assert_return (invoke "as-select-first" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-block-first") (i32.const 2)) (assert_return (invoke "as-block-mid") (i32.const 2)) (assert_return (invoke "as-block-last") (i32.const 3)) (assert_return (invoke "as-block-everywhere") (i32.const 4)) (assert_return (invoke "as-loop-first") (i32.const 2)) (assert_return (invoke "as-loop-mid") (i32.const 2)) (assert_return (invoke "as-loop-last") (i32.const 3)) (assert_return (invoke "as-loop-everywhere") (i32.const 4)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const -1))) (assert_return (invoke "as-if-then" (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4))) (assert_return (invoke "as-if-else" (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3))) (assert_return (invoke "as-br-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_if-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_table-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-return-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-call-first" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) (assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) (assert_return (invoke "as-unary-first" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) (assert_return (invoke "as-binary-first" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-test-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-first" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) (assert_return (invoke "as-memory.grow-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-last" (i32.const 2)) (i32.const 1)) (assert_return (invoke "as-memory.grow-everywhere" (i32.const 12)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid1") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid2") (i32.const 1)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-call_indirect-everywhere") (i32.const 1)) (assert_return (invoke "as-local.set-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-global.set-first") (i32.const 2)) (assert_return (invoke "as-global.set-last") (i32.const 2)) (assert_return (invoke "as-global.set-everywhere") (i32.const 2)) (assert_return (invoke "as-load-first" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-last" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-everywhere" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-store-first" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-store-mid" (i32.const 0) (i32.const 2))) (assert_return (invoke "as-store-last" (i32.const 0) (i32.const 3))) (assert_return (invoke "as-store-everywhere" (i32.const 0) (i32.const 4))) (assert_invalid (module (func $type-i32 (result i32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-i64 (result i64) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f32 (result f32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f64 (result f64) (nop))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/ref_func.wast ================================================ (module (func (export "f") (param $x i32) (result i32) (local.get $x)) ) (register "M") (module (func $f (import "M" "f") (param i32) (result i32)) (func $g (param $x i32) (result i32) (i32.add (local.get $x) (i32.const 1)) ) (global funcref (ref.func $f)) (global funcref (ref.func $g)) (global $v (mut funcref) (ref.func $f)) (global funcref (ref.func $gf1)) (global funcref (ref.func $gf2)) (func (drop (ref.func $ff1)) (drop (ref.func $ff2))) (elem declare func $gf1 $ff1) (elem declare funcref (ref.func $gf2) (ref.func $ff2)) (func $gf1) (func $gf2) (func $ff1) (func $ff2) (func (export "is_null-f") (result i32) (ref.is_null (ref.func $f)) ) (func (export "is_null-g") (result i32) (ref.is_null (ref.func $g)) ) (func (export "is_null-v") (result i32) (ref.is_null (global.get $v)) ) (func (export "set-f") (global.set $v (ref.func $f))) (func (export "set-g") (global.set $v (ref.func $g))) (table $t 1 funcref) (elem declare func $f $g) (func (export "call-f") (param $x i32) (result i32) (table.set $t (i32.const 0) (ref.func $f)) (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0)) ) (func (export "call-g") (param $x i32) (result i32) (table.set $t (i32.const 0) (ref.func $g)) (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0)) ) (func (export "call-v") (param $x i32) (result i32) (table.set $t (i32.const 0) (global.get $v)) (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0)) ) ) (assert_return (invoke "is_null-f") (i32.const 0)) (assert_return (invoke "is_null-g") (i32.const 0)) (assert_return (invoke "is_null-v") (i32.const 0)) (assert_return (invoke "call-f" (i32.const 4)) (i32.const 4)) (assert_return (invoke "call-g" (i32.const 4)) (i32.const 5)) (assert_return (invoke "call-v" (i32.const 4)) (i32.const 4)) (invoke "set-g") (assert_return (invoke "call-v" (i32.const 4)) (i32.const 5)) (invoke "set-f") (assert_return (invoke "call-v" (i32.const 4)) (i32.const 4)) (assert_invalid (module (func $f (import "M" "f") (param i32) (result i32)) (func $g (import "M" "g") (param i32) (result i32)) (global funcref (ref.func 7)) ) "unknown function 7" ) ;; Reference declaration (module (func $f1) (func $f2) (func $f3) (func $f4) (func $f5) (func $f6) (table $t 1 funcref) (global funcref (ref.func $f1)) (export "f" (func $f2)) (elem (table $t) (i32.const 0) func $f3) (elem (table $t) (i32.const 0) funcref (ref.func $f4)) (elem func $f5) (elem funcref (ref.func $f6)) (func (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (return) ) ) (assert_invalid (module (func $f (drop (ref.func $f)))) "undeclared function reference" ) (assert_invalid (module (start $f) (func $f (drop (ref.func $f)))) "undeclared function reference" ) ================================================ FILE: Test/WebAssembly/multi-memory/ref_is_null.wast ================================================ (module (func $f1 (export "funcref") (param $x funcref) (result i32) (ref.is_null (local.get $x)) ) (func $f2 (export "externref") (param $x externref) (result i32) (ref.is_null (local.get $x)) ) (table $t1 2 funcref) (table $t2 2 externref) (elem (table $t1) (i32.const 1) func $dummy) (func $dummy) (func (export "init") (param $r externref) (table.set $t2 (i32.const 1) (local.get $r)) ) (func (export "deinit") (table.set $t1 (i32.const 1) (ref.null func)) (table.set $t2 (i32.const 1) (ref.null extern)) ) (func (export "funcref-elem") (param $x i32) (result i32) (call $f1 (table.get $t1 (local.get $x))) ) (func (export "externref-elem") (param $x i32) (result i32) (call $f2 (table.get $t2 (local.get $x))) ) ) (assert_return (invoke "funcref" (ref.null func)) (i32.const 1)) (assert_return (invoke "externref" (ref.null extern)) (i32.const 1)) (assert_return (invoke "externref" (ref.extern 1)) (i32.const 0)) (invoke "init" (ref.extern 0)) (assert_return (invoke "funcref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "externref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "funcref-elem" (i32.const 1)) (i32.const 0)) (assert_return (invoke "externref-elem" (i32.const 1)) (i32.const 0)) (invoke "deinit") (assert_return (invoke "funcref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "externref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "funcref-elem" (i32.const 1)) (i32.const 1)) (assert_return (invoke "externref-elem" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $ref-vs-num (param i32) (ref.is_null (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $ref-vs-empty (ref.is_null))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/ref_null.wast ================================================ (module (func (export "externref") (result externref) (ref.null extern)) (func (export "funcref") (result funcref) (ref.null func)) (global externref (ref.null extern)) (global funcref (ref.null func)) ) (assert_return (invoke "externref") (ref.null extern)) (assert_return (invoke "funcref") (ref.null func)) ================================================ FILE: Test/WebAssembly/multi-memory/return.wast ================================================ ;; Test `return` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (drop (i32.ctz (return)))) (func (export "type-i64") (drop (i64.ctz (return)))) (func (export "type-f32") (drop (f32.neg (return)))) (func (export "type-f64") (drop (f64.neg (return)))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (return (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (return (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (return (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (return (f64.const 4)))) ) (func (export "nullary") (return)) (func (export "unary") (result f64) (return (f64.const 3))) (func (export "as-func-first") (result i32) (return (i32.const 1)) (i32.const 2) ) (func (export "as-func-mid") (result i32) (call $dummy) (return (i32.const 2)) (i32.const 3) ) (func (export "as-func-last") (nop) (call $dummy) (return) ) (func (export "as-func-value") (result i32) (nop) (call $dummy) (return (i32.const 3)) ) (func (export "as-block-first") (block (return) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (return) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (return)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (return (i32.const 2))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (return (i32.const 3)) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (return (i32.const 4)) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (return (i32.const 5))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (return (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (return))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (return (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (result i64) (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (return (return (i64.const 7))) ) (func (export "as-if-cond") (result i32) (if (result i32) (return (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (return (i32.const 3))) (else (local.get 1)) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (return (i32.const 4))) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (return (i32.const 5)) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (return (i32.const 6)) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (return (i32.const 7))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (result i32) (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) ) (func (export "as-call-last") (result i32) (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (result i32) (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3) ) ) (func (export "as-call_indirect-last") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23)) ) ) (func (export "as-local.set-value") (result i32) (local f32) (local.set 0 (return (i32.const 17))) (i32.const -1) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (return (i32.const 1))) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-value") (result i32) (global.set $a (return (i32.const 1))) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (return (f32.const 1.7))) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (return (i64.const 30))) ) (func (export "as-store-address") (result i32) (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) ) (func (export "as-store-value") (result i32) (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) ) (func (export "as-storeN-address") (result i32) (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) ) (func (export "as-storeN-value") (result i32) (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) ) (func (export "as-unary-operand") (result f32) (f32.neg (return (f32.const 3.4))) ) (func (export "as-binary-left") (result i32) (i32.add (return (i32.const 3)) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (return (i64.const 45))) ) (func (export "as-test-operand") (result i32) (i32.eqz (return (i32.const 44))) ) (func (export "as-compare-left") (result i32) (f64.le (return (i32.const 43)) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (return (i32.const 42))) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (return (i32.const 41))) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (return (i32.const 40))) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "nullary")) (assert_return (invoke "unary") (f64.const 3)) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last")) (assert_return (invoke "as-func-value") (i32.const 3)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index") (i64.const 9)) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_invalid (module (func $type-value-empty-vs-num (result i32) (return))) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-block (result i32) (i32.const 0) (block (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-loop (result i32) (i32.const 0) (loop (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-then (result i32) (i32.const 0) (i32.const 0) (if (then (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-else (result i32) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (return))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br (result i32) (i32.const 0) (block (br 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_if (result i32) (i32.const 0) (block (br_if 0 (return) (i32.const 1))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_table (result i32) (i32.const 0) (block (br_table 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-return (result i32) (return (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-select (result i32) (select (return) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-call (result i32) (call 1 (return)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-vs-num-in-call_indirect (result i32) (block (result i32) (call_indirect (type $sig) (return) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.set (result i32) (local i32) (local.set 0 (return)) (local.get 0) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.tee (result i32) (local i32) (local.tee 0 (return)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-value-empty-vs-num-in-global.set (result i32) (global.set $x (return)) (global.get $x) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-memory.grow (result i32) (memory.grow (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-load (result i32) (i32.load (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-vs-num-in-store (result i32) (i32.store (return) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result f64) (return (nop)))) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/select.wast ================================================ (module ;; Auxiliary (func $dummy) (table $tab funcref (elem $dummy)) (memory 1) (func (export "select-i32") (param i32 i32 i32) (result i32) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i64") (param i64 i64 i32) (result i64) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f32") (param f32 f32 i32) (result f32) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f64") (param f64 f64 i32) (result f64) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i32-t") (param i32 i32 i32) (result i32) (select (result i32) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i64-t") (param i64 i64 i32) (result i64) (select (result i64) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f32-t") (param f32 f32 i32) (result f32) (select (result f32) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f64-t") (param f64 f64 i32) (result f64) (select (result f64) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-funcref") (param funcref funcref i32) (result funcref) (select (result funcref) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-externref") (param externref externref i32) (result externref) (select (result externref) (local.get 0) (local.get 1) (local.get 2)) ) ;; As the argument of control constructs and instructions (func (export "as-select-first") (param i32) (result i32) (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3)) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy)) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0))) ) (func (export "as-if-condition") (param i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (result i32) (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4))) ) (func (export "as-if-else") (param i32) (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4))) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table $t funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect $t (type $check) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect $t (type $check) (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect $t (type $check) (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0)) ) ) ) (func (export "as-store-first") (param i32) (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-return-value") (param i32) (result i32) (select (i32.const 1) (i32.const 2) (local.get 0)) (return) ) (func (export "as-drop-operand") (param i32) (drop (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0)))) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0))) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (select (i32.const 0) (i32.const 4) (local.get 0))) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-binary-operand") (param i32) (result i32) (i32.mul (select (i32.const 1) (i32.const 2) (local.get 0)) (select (i32.const 1) (i32.const 2) (local.get 0)) ) ) (func (export "as-test-operand") (param i32) (result i32) (block (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-compare-left") (param i32) (result i32) (block (result i32) (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1)) ) ) (func (export "as-compare-right") (param i32) (result i32) (block (result i32) (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-convert-operand") (param i32) (result i32) (block (result i32) (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0))) ) ) ) (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select-f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select-f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select-i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select-f32-t" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select-f64-t" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select-funcref" (ref.null func) (ref.null func) (i32.const 1)) (ref.null func)) (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 1)) (ref.extern 1)) (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select-i32-t" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 0)) (ref.extern 2)) (assert_return (invoke "select-externref" (ref.extern 2) (ref.extern 1) (i32.const 0)) (ref.extern 1)) (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1)) (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element") (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4)) (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $arity-0-implicit (select (nop) (nop) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $arity-0 (select (result) (nop) (nop) (i32.const 1)))) "invalid result arity" ) (assert_invalid (module (func $arity-2 (result i32 i32) (select (result i32 i32) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) ) )) "invalid result arity" ) (assert_invalid (module (func $type-externref-implicit (param $r externref) (drop (select (local.get $r) (local.get $r) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (drop (select (i32.const 1) (i64.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (drop (select (i32.const 1) (f32.const 1.0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (drop (select (i32.const 1) (f64.const 1.0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty (i32.const 0) (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (i32.const 0) (block (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (i32.const 0) (loop (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-then (i32.const 0) (i32.const 0) (i32.const 0) (if (then (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.const 0) (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.const 0) (select) (drop))) ) ) "type mismatch" ) ;; Third operand must be i32 (assert_invalid (module (func (select (i32.const 1) (i32.const 1) (i64.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (select (i32.const 1) (i32.const 1) (f32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (select (i32.const 1) (i32.const 1) (f64.const 1)) (drop))) "type mismatch" ) ;; Result of select has type of first two operands (assert_invalid (module (func (result i32) (select (i64.const 1) (i64.const 1) (i32.const 1)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/skip-stack-guard-page.wast ================================================ ;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. (module (memory 1) (export "test-guard-page-skip" (func $test-guard-page-skip)) (func $test-guard-page-skip (param $depth i32) (if (i32.eq (local.get $depth) (i32.const 0)) (then (call $function-with-many-locals)) (else (call $test-guard-page-skip (i32.sub (local.get $depth) (i32.const 1)))) ) ) (func $function-with-many-locals ;; 1056 i64 = 8448 bytes of locals (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. (call $function-with-many-locals) ;; load from memory into the locals (local.set 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) (local.set 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) (local.set 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) (local.set 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) (local.set 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) (local.set 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) (local.set 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) (local.set 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) (local.set 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) (local.set 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) (local.set 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) (local.set 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) (local.set 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) (local.set 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) (local.set 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) (local.set 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) (local.set 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) (local.set 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) (local.set 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) (local.set 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) (local.set 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) (local.set 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) (local.set 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) (local.set 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) (local.set 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) (local.set 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) (local.set 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) (local.set 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) (local.set 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) (local.set 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) (local.set 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) (local.set 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) (local.set 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) (local.set 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) (local.set 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) (local.set 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) (local.set 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) (local.set 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) (local.set 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) (local.set 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) (local.set 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) (local.set 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) (local.set 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) (local.set 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) (local.set 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) (local.set 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) (local.set 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) (local.set 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) (local.set 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) (local.set 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) (local.set 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) (local.set 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) (local.set 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) (local.set 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) (local.set 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) (local.set 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) (local.set 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) (local.set 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) (local.set 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) (local.set 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) (local.set 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) (local.set 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) (local.set 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) (local.set 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) (local.set 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) (local.set 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) (local.set 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) (local.set 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) (local.set 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) (local.set 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) (local.set 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) (local.set 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) (local.set 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) (local.set 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) (local.set 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) (local.set 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) (local.set 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) (local.set 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) (local.set 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) (local.set 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) (local.set 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) (local.set 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) (local.set 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) (local.set 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) (local.set 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) (local.set 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) (local.set 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) (local.set 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) (local.set 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) (local.set 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) (local.set 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) (local.set 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) (local.set 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) (local.set 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) (local.set 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) (local.set 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) (local.set 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) (local.set 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) (local.set 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) (local.set 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) (local.set 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) (local.set 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) (local.set 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) (local.set 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) (local.set 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) (local.set 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) (local.set 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) (local.set 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) (local.set 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) (local.set 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) (local.set 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) (local.set 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) (local.set 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) (local.set 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) (local.set 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) (local.set 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) (local.set 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) (local.set 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) (local.set 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) (local.set 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) (local.set 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) (local.set 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) (local.set 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) (local.set 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) (local.set 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) (local.set 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) (local.set 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) (local.set 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) (local.set 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) (local.set 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) (local.set 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) (local.set 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) (local.set 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) (local.set 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) (local.set 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) (local.set 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) (local.set 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) (local.set 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) (local.set 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) (local.set 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) (local.set 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) (local.set 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) (local.set 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) (local.set 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) (local.set 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) (local.set 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) (local.set 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) (local.set 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) (local.set 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) (local.set 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) (local.set 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) (local.set 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) (local.set 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) (local.set 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) (local.set 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) (local.set 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) (local.set 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) (local.set 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) (local.set 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) (local.set 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) (local.set 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) (local.set 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) (local.set 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) (local.set 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) (local.set 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) (local.set 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) (local.set 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) (local.set 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) (local.set 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) (local.set 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) (local.set 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) (local.set 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) (local.set 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) (local.set 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) (local.set 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) (local.set 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) (local.set 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) (local.set 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) (local.set 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) (local.set 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) (local.set 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) (local.set 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) (local.set 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) (local.set 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) (local.set 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) (local.set 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) (local.set 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) (local.set 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) (local.set 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) (local.set 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) (local.set 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) (local.set 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) (local.set 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) (local.set 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) (local.set 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) (local.set 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) (local.set 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) (local.set 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) (local.set 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) (local.set 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) (local.set 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) (local.set 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) (local.set 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) (local.set 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) (local.set 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) (local.set 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) (local.set 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) (local.set 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) (local.set 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) (local.set 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) (local.set 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) (local.set 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) (local.set 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) (local.set 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) (local.set 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) (local.set 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) (local.set 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) (local.set 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) (local.set 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) (local.set 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) (local.set 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) (local.set 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) (local.set 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) (local.set 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) (local.set 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) (local.set 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) (local.set 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) (local.set 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) (local.set 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) (local.set 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) (local.set 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) (local.set 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) (local.set 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) (local.set 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) (local.set 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) (local.set 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) (local.set 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) (local.set 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) (local.set 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) (local.set 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) (local.set 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) (local.set 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) (local.set 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) (local.set 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) (local.set 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) (local.set 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) (local.set 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) (local.set 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) (local.set 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) (local.set 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) (local.set 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) (local.set 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) (local.set 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) (local.set 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) (local.set 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) (local.set 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) (local.set 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) (local.set 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) (local.set 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) (local.set 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) (local.set 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) (local.set 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) (local.set 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) (local.set 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) (local.set 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) (local.set 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) (local.set 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) (local.set 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) (local.set 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) (local.set 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) (local.set 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) (local.set 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) (local.set 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) (local.set 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) (local.set 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) (local.set 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) (local.set 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) (local.set 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) (local.set 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) (local.set 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) (local.set 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) (local.set 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) (local.set 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) (local.set 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) (local.set 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) (local.set 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) (local.set 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) (local.set 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) (local.set 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) (local.set 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) (local.set 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) (local.set 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) (local.set 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) (local.set 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) (local.set 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) (local.set 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) (local.set 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) (local.set 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) (local.set 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) (local.set 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) (local.set 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) (local.set 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) (local.set 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) (local.set 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) (local.set 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) (local.set 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) (local.set 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) (local.set 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) (local.set 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) (local.set 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) (local.set 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) (local.set 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) (local.set 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) (local.set 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) (local.set 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) (local.set 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) (local.set 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) (local.set 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) (local.set 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) (local.set 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) (local.set 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) (local.set 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) (local.set 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) (local.set 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) (local.set 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) (local.set 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) (local.set 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) (local.set 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) (local.set 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) (local.set 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) (local.set 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) (local.set 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) (local.set 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) (local.set 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) (local.set 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) (local.set 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) (local.set 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) (local.set 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) (local.set 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) (local.set 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) (local.set 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) (local.set 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) (local.set 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) (local.set 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) (local.set 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) (local.set 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) (local.set 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) (local.set 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) (local.set 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) (local.set 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) (local.set 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) (local.set 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) (local.set 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) (local.set 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) (local.set 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) (local.set 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) (local.set 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) (local.set 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) (local.set 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) (local.set 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) (local.set 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) (local.set 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) (local.set 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) (local.set 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) (local.set 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) (local.set 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) (local.set 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) (local.set 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) (local.set 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) (local.set 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) (local.set 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) (local.set 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) (local.set 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) (local.set 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) (local.set 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) (local.set 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) (local.set 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) (local.set 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) (local.set 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) (local.set 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) (local.set 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) (local.set 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) (local.set 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) (local.set 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) (local.set 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) (local.set 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) (local.set 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) (local.set 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) (local.set 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) (local.set 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) (local.set 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) (local.set 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) (local.set 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) (local.set 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) (local.set 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) (local.set 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) (local.set 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) (local.set 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) (local.set 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) (local.set 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) (local.set 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) (local.set 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) (local.set 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) (local.set 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) (local.set 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) (local.set 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) (local.set 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) (local.set 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) (local.set 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) (local.set 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) (local.set 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) (local.set 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) (local.set 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) (local.set 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) (local.set 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) (local.set 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) (local.set 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) (local.set 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) (local.set 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) (local.set 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) (local.set 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) (local.set 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) (local.set 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) (local.set 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) (local.set 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) (local.set 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) (local.set 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) (local.set 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) (local.set 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) (local.set 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) (local.set 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) (local.set 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) (local.set 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) (local.set 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) (local.set 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) (local.set 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) (local.set 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) (local.set 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) (local.set 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) (local.set 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) (local.set 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) (local.set 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) (local.set 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) (local.set 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) (local.set 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) (local.set 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) (local.set 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) (local.set 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) (local.set 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) (local.set 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) (local.set 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) (local.set 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) (local.set 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) (local.set 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) (local.set 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) (local.set 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) (local.set 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) (local.set 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) (local.set 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) (local.set 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) (local.set 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) (local.set 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) (local.set 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) (local.set 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) (local.set 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) (local.set 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) (local.set 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) (local.set 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) (local.set 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) (local.set 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) (local.set 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) (local.set 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) (local.set 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) (local.set 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) (local.set 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) (local.set 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) (local.set 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) (local.set 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) (local.set 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) (local.set 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) (local.set 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) (local.set 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) (local.set 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) (local.set 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) (local.set 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) (local.set 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) (local.set 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) (local.set 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) (local.set 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) (local.set 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) (local.set 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) (local.set 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) (local.set 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) (local.set 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) (local.set 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) (local.set 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) (local.set 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) (local.set 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) (local.set 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) (local.set 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) (local.set 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) (local.set 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) (local.set 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) (local.set 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) (local.set 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) (local.set 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) (local.set 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) (local.set 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) (local.set 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) (local.set 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) (local.set 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) (local.set 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) (local.set 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) (local.set 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) (local.set 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) (local.set 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) (local.set 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) (local.set 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) (local.set 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) (local.set 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) (local.set 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) (local.set 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) (local.set 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) (local.set 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) (local.set 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) (local.set 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) (local.set 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) (local.set 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) (local.set 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) (local.set 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) (local.set 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) (local.set 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) (local.set 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) (local.set 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) (local.set 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) (local.set 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) (local.set 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) (local.set 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) (local.set 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) (local.set 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) (local.set 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) (local.set 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) (local.set 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) (local.set 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) (local.set 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) (local.set 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) (local.set 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) (local.set 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) (local.set 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) (local.set 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) (local.set 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) (local.set 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) (local.set 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) (local.set 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) (local.set 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) (local.set 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) (local.set 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) (local.set 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) (local.set 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) (local.set 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) (local.set 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) (local.set 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) (local.set 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) (local.set 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) (local.set 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) (local.set 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) (local.set 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) (local.set 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) (local.set 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) (local.set 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) (local.set 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) (local.set 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) (local.set 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) (local.set 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) (local.set 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) (local.set 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) (local.set 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) (local.set 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) (local.set 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) (local.set 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) (local.set 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) (local.set 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) (local.set 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) (local.set 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) (local.set 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) (local.set 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) (local.set 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) (local.set 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) (local.set 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) (local.set 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) (local.set 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) (local.set 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) (local.set 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) (local.set 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) (local.set 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) (local.set 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) (local.set 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) (local.set 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) (local.set 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) (local.set 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) (local.set 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) (local.set 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) (local.set 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) (local.set 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) (local.set 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) (local.set 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) (local.set 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) (local.set 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) (local.set 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) (local.set 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) (local.set 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) (local.set 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) (local.set 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) (local.set 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) (local.set 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) (local.set 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) (local.set 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) (local.set 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) (local.set 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) (local.set 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) (local.set 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) (local.set 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) (local.set 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) (local.set 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) (local.set 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) (local.set 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) (local.set 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) (local.set 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) (local.set 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) (local.set 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) (local.set 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) (local.set 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) (local.set 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) (local.set 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) (local.set 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) (local.set 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) (local.set 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) (local.set 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) (local.set 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) (local.set 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) (local.set 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) (local.set 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) (local.set 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) (local.set 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) (local.set 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) (local.set 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) (local.set 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) (local.set 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) (local.set 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) (local.set 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) (local.set 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) (local.set 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) (local.set 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) (local.set 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) (local.set 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) (local.set 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) (local.set 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) (local.set 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) (local.set 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) (local.set 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) (local.set 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) (local.set 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) (local.set 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) (local.set 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) (local.set 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) (local.set 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) (local.set 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) (local.set 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) (local.set 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) (local.set 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) (local.set 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) (local.set 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) (local.set 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) (local.set 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) (local.set 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) (local.set 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) (local.set 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) (local.set 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) (local.set 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) (local.set 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) (local.set 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) (local.set 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) (local.set 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) (local.set 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) (local.set 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) (local.set 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) (local.set 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) (local.set 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) (local.set 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) (local.set 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) (local.set 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) (local.set 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) (local.set 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) (local.set 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) (local.set 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) (local.set 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) (local.set 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) (local.set 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) (local.set 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) (local.set 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) (local.set 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) (local.set 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) (local.set 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) (local.set 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) (local.set 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) (local.set 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) (local.set 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) (local.set 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) (local.set 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) (local.set 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) (local.set 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) (local.set 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) (local.set 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) (local.set 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) (local.set 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) (local.set 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) (local.set 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) (local.set 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) (local.set 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) (local.set 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) (local.set 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) (local.set 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) (local.set 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) (local.set 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) (local.set 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) (local.set 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) (local.set 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) (local.set 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) (local.set 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) (local.set 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) (local.set 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) (local.set 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) (local.set 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) (local.set 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) (local.set 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) (local.set 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) (local.set 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) (local.set 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) (local.set 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) (local.set 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) (local.set 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) (local.set 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) (local.set 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) (local.set 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) (local.set 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) (local.set 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) (local.set 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) (local.set 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) (local.set 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) (local.set 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) (local.set 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) (local.set 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) (local.set 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) (local.set 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) (local.set 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) (local.set 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) (local.set 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) (local.set 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) (local.set 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) (local.set 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) (local.set 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) (local.set 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) (local.set 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) (local.set 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) (local.set 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) (local.set 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) (local.set 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) (local.set 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) (local.set 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) (local.set 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) (local.set 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) (local.set 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) (local.set 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) (local.set 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) (local.set 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) (local.set 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) (local.set 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) (local.set 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) (local.set 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) (local.set 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) (local.set 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) (local.set 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) (local.set 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) (local.set 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) (local.set 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) (local.set 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) (local.set 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) (local.set 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) (local.set 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) (local.set 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) (local.set 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) (local.set 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) (local.set 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) (local.set 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) (local.set 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) (local.set 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) (local.set 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) (local.set 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) (local.set 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) (local.set 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) (local.set 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) (local.set 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) (local.set 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) (local.set 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) (local.set 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) (local.set 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) (local.set 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) (local.set 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) (local.set 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) (local.set 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) (local.set 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) (local.set 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) (local.set 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) (local.set 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) (local.set 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) (local.set 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) (local.set 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) (local.set 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) (local.set 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) (local.set 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) (local.set 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) (local.set 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) (local.set 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) (local.set 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) (local.set 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) (local.set 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) (local.set 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) (local.set 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) (local.set 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) (local.set 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) (local.set 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) (local.set 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) (local.set 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) (local.set 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) (local.set 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) (local.set 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) (local.set 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) (local.set 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) (local.set 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) (local.set 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) (local.set 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) (local.set 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) (local.set 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) (local.set 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) (local.set 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) (local.set 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) (local.set 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) (local.set 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) (local.set 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) (local.set 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) (local.set 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) (local.set 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) (local.set 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) (local.set 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) (local.set 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) (local.set 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) (local.set 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) (local.set 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) (local.set 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) (local.set 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) (local.set 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) (local.set 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) (local.set 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) (local.set 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) (local.set 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) (local.set 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) (local.set 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) (local.set 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) (local.set 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) (local.set 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) (local.set 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) (local.set 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) (local.set 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) (local.set 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) (local.set 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) (local.set 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) (local.set 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) (local.set 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) (local.set 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) (local.set 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) (local.set 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) (local.set 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) (local.set 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) (local.set 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) (local.set 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) (local.set 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) (local.set 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) (local.set 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) (local.set 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) (local.set 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) (local.set 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) (local.set 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) (local.set 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) (local.set 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) (local.set 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) (local.set 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) (local.set 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) (local.set 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) (local.set 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) (local.set 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) (local.set 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) (local.set 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) (local.set 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) (local.set 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) (local.set 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) (local.set 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) (local.set 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) (local.set 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) (local.set 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) (local.set 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) (local.set 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) (local.set 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) (local.set 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) (local.set 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) (local.set 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) (local.set 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) (local.set 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) (local.set 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) (local.set 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) (local.set 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) (local.set 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) (local.set 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) (local.set 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) (local.set 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) (local.set 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) (local.set 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) (local.set 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) (local.set 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) (local.set 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) (local.set 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) (local.set 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) (local.set 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) (local.set 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) (local.set 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) (local.set 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) (local.set 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) (local.set 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) (local.set 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) (local.set 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) (local.set 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) (local.set 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) (local.set 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) (local.set 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) (local.set 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) (local.set 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) (local.set 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) (local.set 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) (local.set 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) (local.set 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) (local.set 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) (local.set 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) (local.set 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) (local.set 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) (local.set 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) (local.set 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) (local.set 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) (local.set 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) (local.set 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) (local.set 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) (local.set 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) (local.set 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) (local.set 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) (local.set 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) (local.set 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) (local.set 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) (local.set 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) (local.set 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) (local.set 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) (local.set 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) (local.set 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) (local.set 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) (local.set 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) (local.set 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) (local.set 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) (local.set 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) (local.set 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) (local.set 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) (local.set 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) (local.set 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) (local.set 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) (local.set 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) (local.set 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) (local.set 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) (local.set 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) (local.set 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) (local.set 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) (local.set 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) (local.set 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) (local.set 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) (local.set 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) (local.set 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) (local.set 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) (local.set 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) (local.set 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) (local.set 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) (local.set 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) (local.set 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) (local.set 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) (local.set 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) (local.set 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) (local.set 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) (local.set 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) (local.set 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) (local.set 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) (local.set 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) (local.set 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) (local.set 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) (local.set 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) (local.set 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) (local.set 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) (local.set 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) (local.set 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) (local.set 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) (local.set 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) (local.set 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) (local.set 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) (local.set 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) (local.set 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) (local.set 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) (local.set 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) (local.set 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) (local.set 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) (local.set 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) (local.set 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) (local.set 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) (local.set 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) (local.set 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) (local.set 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) (local.set 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) (local.set 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) (local.set 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) (local.set 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) (local.set 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) (local.set 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) (local.set 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) (local.set 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) (local.set 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) (local.set 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) (local.set 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) (local.set 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) (local.set 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) (local.set 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) (local.set 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) (local.set 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) (local.set 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) (local.set 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) (local.set 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) (local.set 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) (local.set 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) (local.set 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) (local.set 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) (local.set 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) (local.set 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) (local.set 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) (local.set 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) (local.set 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) ;; store the locals back to memory (i64.store offset=0x000 align=1 (i32.const 0) (local.get 0x000)) (i64.store offset=0x001 align=1 (i32.const 0) (local.get 0x001)) (i64.store offset=0x002 align=1 (i32.const 0) (local.get 0x002)) (i64.store offset=0x003 align=1 (i32.const 0) (local.get 0x003)) (i64.store offset=0x004 align=1 (i32.const 0) (local.get 0x004)) (i64.store offset=0x005 align=1 (i32.const 0) (local.get 0x005)) (i64.store offset=0x006 align=1 (i32.const 0) (local.get 0x006)) (i64.store offset=0x007 align=1 (i32.const 0) (local.get 0x007)) (i64.store offset=0x008 align=1 (i32.const 0) (local.get 0x008)) (i64.store offset=0x009 align=1 (i32.const 0) (local.get 0x009)) (i64.store offset=0x00a align=1 (i32.const 0) (local.get 0x00a)) (i64.store offset=0x00b align=1 (i32.const 0) (local.get 0x00b)) (i64.store offset=0x00c align=1 (i32.const 0) (local.get 0x00c)) (i64.store offset=0x00d align=1 (i32.const 0) (local.get 0x00d)) (i64.store offset=0x00e align=1 (i32.const 0) (local.get 0x00e)) (i64.store offset=0x00f align=1 (i32.const 0) (local.get 0x00f)) (i64.store offset=0x010 align=1 (i32.const 0) (local.get 0x010)) (i64.store offset=0x011 align=1 (i32.const 0) (local.get 0x011)) (i64.store offset=0x012 align=1 (i32.const 0) (local.get 0x012)) (i64.store offset=0x013 align=1 (i32.const 0) (local.get 0x013)) (i64.store offset=0x014 align=1 (i32.const 0) (local.get 0x014)) (i64.store offset=0x015 align=1 (i32.const 0) (local.get 0x015)) (i64.store offset=0x016 align=1 (i32.const 0) (local.get 0x016)) (i64.store offset=0x017 align=1 (i32.const 0) (local.get 0x017)) (i64.store offset=0x018 align=1 (i32.const 0) (local.get 0x018)) (i64.store offset=0x019 align=1 (i32.const 0) (local.get 0x019)) (i64.store offset=0x01a align=1 (i32.const 0) (local.get 0x01a)) (i64.store offset=0x01b align=1 (i32.const 0) (local.get 0x01b)) (i64.store offset=0x01c align=1 (i32.const 0) (local.get 0x01c)) (i64.store offset=0x01d align=1 (i32.const 0) (local.get 0x01d)) (i64.store offset=0x01e align=1 (i32.const 0) (local.get 0x01e)) (i64.store offset=0x01f align=1 (i32.const 0) (local.get 0x01f)) (i64.store offset=0x020 align=1 (i32.const 0) (local.get 0x020)) (i64.store offset=0x021 align=1 (i32.const 0) (local.get 0x021)) (i64.store offset=0x022 align=1 (i32.const 0) (local.get 0x022)) (i64.store offset=0x023 align=1 (i32.const 0) (local.get 0x023)) (i64.store offset=0x024 align=1 (i32.const 0) (local.get 0x024)) (i64.store offset=0x025 align=1 (i32.const 0) (local.get 0x025)) (i64.store offset=0x026 align=1 (i32.const 0) (local.get 0x026)) (i64.store offset=0x027 align=1 (i32.const 0) (local.get 0x027)) (i64.store offset=0x028 align=1 (i32.const 0) (local.get 0x028)) (i64.store offset=0x029 align=1 (i32.const 0) (local.get 0x029)) (i64.store offset=0x02a align=1 (i32.const 0) (local.get 0x02a)) (i64.store offset=0x02b align=1 (i32.const 0) (local.get 0x02b)) (i64.store offset=0x02c align=1 (i32.const 0) (local.get 0x02c)) (i64.store offset=0x02d align=1 (i32.const 0) (local.get 0x02d)) (i64.store offset=0x02e align=1 (i32.const 0) (local.get 0x02e)) (i64.store offset=0x02f align=1 (i32.const 0) (local.get 0x02f)) (i64.store offset=0x030 align=1 (i32.const 0) (local.get 0x030)) (i64.store offset=0x031 align=1 (i32.const 0) (local.get 0x031)) (i64.store offset=0x032 align=1 (i32.const 0) (local.get 0x032)) (i64.store offset=0x033 align=1 (i32.const 0) (local.get 0x033)) (i64.store offset=0x034 align=1 (i32.const 0) (local.get 0x034)) (i64.store offset=0x035 align=1 (i32.const 0) (local.get 0x035)) (i64.store offset=0x036 align=1 (i32.const 0) (local.get 0x036)) (i64.store offset=0x037 align=1 (i32.const 0) (local.get 0x037)) (i64.store offset=0x038 align=1 (i32.const 0) (local.get 0x038)) (i64.store offset=0x039 align=1 (i32.const 0) (local.get 0x039)) (i64.store offset=0x03a align=1 (i32.const 0) (local.get 0x03a)) (i64.store offset=0x03b align=1 (i32.const 0) (local.get 0x03b)) (i64.store offset=0x03c align=1 (i32.const 0) (local.get 0x03c)) (i64.store offset=0x03d align=1 (i32.const 0) (local.get 0x03d)) (i64.store offset=0x03e align=1 (i32.const 0) (local.get 0x03e)) (i64.store offset=0x03f align=1 (i32.const 0) (local.get 0x03f)) (i64.store offset=0x040 align=1 (i32.const 0) (local.get 0x040)) (i64.store offset=0x041 align=1 (i32.const 0) (local.get 0x041)) (i64.store offset=0x042 align=1 (i32.const 0) (local.get 0x042)) (i64.store offset=0x043 align=1 (i32.const 0) (local.get 0x043)) (i64.store offset=0x044 align=1 (i32.const 0) (local.get 0x044)) (i64.store offset=0x045 align=1 (i32.const 0) (local.get 0x045)) (i64.store offset=0x046 align=1 (i32.const 0) (local.get 0x046)) (i64.store offset=0x047 align=1 (i32.const 0) (local.get 0x047)) (i64.store offset=0x048 align=1 (i32.const 0) (local.get 0x048)) (i64.store offset=0x049 align=1 (i32.const 0) (local.get 0x049)) (i64.store offset=0x04a align=1 (i32.const 0) (local.get 0x04a)) (i64.store offset=0x04b align=1 (i32.const 0) (local.get 0x04b)) (i64.store offset=0x04c align=1 (i32.const 0) (local.get 0x04c)) (i64.store offset=0x04d align=1 (i32.const 0) (local.get 0x04d)) (i64.store offset=0x04e align=1 (i32.const 0) (local.get 0x04e)) (i64.store offset=0x04f align=1 (i32.const 0) (local.get 0x04f)) (i64.store offset=0x050 align=1 (i32.const 0) (local.get 0x050)) (i64.store offset=0x051 align=1 (i32.const 0) (local.get 0x051)) (i64.store offset=0x052 align=1 (i32.const 0) (local.get 0x052)) (i64.store offset=0x053 align=1 (i32.const 0) (local.get 0x053)) (i64.store offset=0x054 align=1 (i32.const 0) (local.get 0x054)) (i64.store offset=0x055 align=1 (i32.const 0) (local.get 0x055)) (i64.store offset=0x056 align=1 (i32.const 0) (local.get 0x056)) (i64.store offset=0x057 align=1 (i32.const 0) (local.get 0x057)) (i64.store offset=0x058 align=1 (i32.const 0) (local.get 0x058)) (i64.store offset=0x059 align=1 (i32.const 0) (local.get 0x059)) (i64.store offset=0x05a align=1 (i32.const 0) (local.get 0x05a)) (i64.store offset=0x05b align=1 (i32.const 0) (local.get 0x05b)) (i64.store offset=0x05c align=1 (i32.const 0) (local.get 0x05c)) (i64.store offset=0x05d align=1 (i32.const 0) (local.get 0x05d)) (i64.store offset=0x05e align=1 (i32.const 0) (local.get 0x05e)) (i64.store offset=0x05f align=1 (i32.const 0) (local.get 0x05f)) (i64.store offset=0x060 align=1 (i32.const 0) (local.get 0x060)) (i64.store offset=0x061 align=1 (i32.const 0) (local.get 0x061)) (i64.store offset=0x062 align=1 (i32.const 0) (local.get 0x062)) (i64.store offset=0x063 align=1 (i32.const 0) (local.get 0x063)) (i64.store offset=0x064 align=1 (i32.const 0) (local.get 0x064)) (i64.store offset=0x065 align=1 (i32.const 0) (local.get 0x065)) (i64.store offset=0x066 align=1 (i32.const 0) (local.get 0x066)) (i64.store offset=0x067 align=1 (i32.const 0) (local.get 0x067)) (i64.store offset=0x068 align=1 (i32.const 0) (local.get 0x068)) (i64.store offset=0x069 align=1 (i32.const 0) (local.get 0x069)) (i64.store offset=0x06a align=1 (i32.const 0) (local.get 0x06a)) (i64.store offset=0x06b align=1 (i32.const 0) (local.get 0x06b)) (i64.store offset=0x06c align=1 (i32.const 0) (local.get 0x06c)) (i64.store offset=0x06d align=1 (i32.const 0) (local.get 0x06d)) (i64.store offset=0x06e align=1 (i32.const 0) (local.get 0x06e)) (i64.store offset=0x06f align=1 (i32.const 0) (local.get 0x06f)) (i64.store offset=0x070 align=1 (i32.const 0) (local.get 0x070)) (i64.store offset=0x071 align=1 (i32.const 0) (local.get 0x071)) (i64.store offset=0x072 align=1 (i32.const 0) (local.get 0x072)) (i64.store offset=0x073 align=1 (i32.const 0) (local.get 0x073)) (i64.store offset=0x074 align=1 (i32.const 0) (local.get 0x074)) (i64.store offset=0x075 align=1 (i32.const 0) (local.get 0x075)) (i64.store offset=0x076 align=1 (i32.const 0) (local.get 0x076)) (i64.store offset=0x077 align=1 (i32.const 0) (local.get 0x077)) (i64.store offset=0x078 align=1 (i32.const 0) (local.get 0x078)) (i64.store offset=0x079 align=1 (i32.const 0) (local.get 0x079)) (i64.store offset=0x07a align=1 (i32.const 0) (local.get 0x07a)) (i64.store offset=0x07b align=1 (i32.const 0) (local.get 0x07b)) (i64.store offset=0x07c align=1 (i32.const 0) (local.get 0x07c)) (i64.store offset=0x07d align=1 (i32.const 0) (local.get 0x07d)) (i64.store offset=0x07e align=1 (i32.const 0) (local.get 0x07e)) (i64.store offset=0x07f align=1 (i32.const 0) (local.get 0x07f)) (i64.store offset=0x080 align=1 (i32.const 0) (local.get 0x080)) (i64.store offset=0x081 align=1 (i32.const 0) (local.get 0x081)) (i64.store offset=0x082 align=1 (i32.const 0) (local.get 0x082)) (i64.store offset=0x083 align=1 (i32.const 0) (local.get 0x083)) (i64.store offset=0x084 align=1 (i32.const 0) (local.get 0x084)) (i64.store offset=0x085 align=1 (i32.const 0) (local.get 0x085)) (i64.store offset=0x086 align=1 (i32.const 0) (local.get 0x086)) (i64.store offset=0x087 align=1 (i32.const 0) (local.get 0x087)) (i64.store offset=0x088 align=1 (i32.const 0) (local.get 0x088)) (i64.store offset=0x089 align=1 (i32.const 0) (local.get 0x089)) (i64.store offset=0x08a align=1 (i32.const 0) (local.get 0x08a)) (i64.store offset=0x08b align=1 (i32.const 0) (local.get 0x08b)) (i64.store offset=0x08c align=1 (i32.const 0) (local.get 0x08c)) (i64.store offset=0x08d align=1 (i32.const 0) (local.get 0x08d)) (i64.store offset=0x08e align=1 (i32.const 0) (local.get 0x08e)) (i64.store offset=0x08f align=1 (i32.const 0) (local.get 0x08f)) (i64.store offset=0x090 align=1 (i32.const 0) (local.get 0x090)) (i64.store offset=0x091 align=1 (i32.const 0) (local.get 0x091)) (i64.store offset=0x092 align=1 (i32.const 0) (local.get 0x092)) (i64.store offset=0x093 align=1 (i32.const 0) (local.get 0x093)) (i64.store offset=0x094 align=1 (i32.const 0) (local.get 0x094)) (i64.store offset=0x095 align=1 (i32.const 0) (local.get 0x095)) (i64.store offset=0x096 align=1 (i32.const 0) (local.get 0x096)) (i64.store offset=0x097 align=1 (i32.const 0) (local.get 0x097)) (i64.store offset=0x098 align=1 (i32.const 0) (local.get 0x098)) (i64.store offset=0x099 align=1 (i32.const 0) (local.get 0x099)) (i64.store offset=0x09a align=1 (i32.const 0) (local.get 0x09a)) (i64.store offset=0x09b align=1 (i32.const 0) (local.get 0x09b)) (i64.store offset=0x09c align=1 (i32.const 0) (local.get 0x09c)) (i64.store offset=0x09d align=1 (i32.const 0) (local.get 0x09d)) (i64.store offset=0x09e align=1 (i32.const 0) (local.get 0x09e)) (i64.store offset=0x09f align=1 (i32.const 0) (local.get 0x09f)) (i64.store offset=0x0a0 align=1 (i32.const 0) (local.get 0x0a0)) (i64.store offset=0x0a1 align=1 (i32.const 0) (local.get 0x0a1)) (i64.store offset=0x0a2 align=1 (i32.const 0) (local.get 0x0a2)) (i64.store offset=0x0a3 align=1 (i32.const 0) (local.get 0x0a3)) (i64.store offset=0x0a4 align=1 (i32.const 0) (local.get 0x0a4)) (i64.store offset=0x0a5 align=1 (i32.const 0) (local.get 0x0a5)) (i64.store offset=0x0a6 align=1 (i32.const 0) (local.get 0x0a6)) (i64.store offset=0x0a7 align=1 (i32.const 0) (local.get 0x0a7)) (i64.store offset=0x0a8 align=1 (i32.const 0) (local.get 0x0a8)) (i64.store offset=0x0a9 align=1 (i32.const 0) (local.get 0x0a9)) (i64.store offset=0x0aa align=1 (i32.const 0) (local.get 0x0aa)) (i64.store offset=0x0ab align=1 (i32.const 0) (local.get 0x0ab)) (i64.store offset=0x0ac align=1 (i32.const 0) (local.get 0x0ac)) (i64.store offset=0x0ad align=1 (i32.const 0) (local.get 0x0ad)) (i64.store offset=0x0ae align=1 (i32.const 0) (local.get 0x0ae)) (i64.store offset=0x0af align=1 (i32.const 0) (local.get 0x0af)) (i64.store offset=0x0b0 align=1 (i32.const 0) (local.get 0x0b0)) (i64.store offset=0x0b1 align=1 (i32.const 0) (local.get 0x0b1)) (i64.store offset=0x0b2 align=1 (i32.const 0) (local.get 0x0b2)) (i64.store offset=0x0b3 align=1 (i32.const 0) (local.get 0x0b3)) (i64.store offset=0x0b4 align=1 (i32.const 0) (local.get 0x0b4)) (i64.store offset=0x0b5 align=1 (i32.const 0) (local.get 0x0b5)) (i64.store offset=0x0b6 align=1 (i32.const 0) (local.get 0x0b6)) (i64.store offset=0x0b7 align=1 (i32.const 0) (local.get 0x0b7)) (i64.store offset=0x0b8 align=1 (i32.const 0) (local.get 0x0b8)) (i64.store offset=0x0b9 align=1 (i32.const 0) (local.get 0x0b9)) (i64.store offset=0x0ba align=1 (i32.const 0) (local.get 0x0ba)) (i64.store offset=0x0bb align=1 (i32.const 0) (local.get 0x0bb)) (i64.store offset=0x0bc align=1 (i32.const 0) (local.get 0x0bc)) (i64.store offset=0x0bd align=1 (i32.const 0) (local.get 0x0bd)) (i64.store offset=0x0be align=1 (i32.const 0) (local.get 0x0be)) (i64.store offset=0x0bf align=1 (i32.const 0) (local.get 0x0bf)) (i64.store offset=0x0c0 align=1 (i32.const 0) (local.get 0x0c0)) (i64.store offset=0x0c1 align=1 (i32.const 0) (local.get 0x0c1)) (i64.store offset=0x0c2 align=1 (i32.const 0) (local.get 0x0c2)) (i64.store offset=0x0c3 align=1 (i32.const 0) (local.get 0x0c3)) (i64.store offset=0x0c4 align=1 (i32.const 0) (local.get 0x0c4)) (i64.store offset=0x0c5 align=1 (i32.const 0) (local.get 0x0c5)) (i64.store offset=0x0c6 align=1 (i32.const 0) (local.get 0x0c6)) (i64.store offset=0x0c7 align=1 (i32.const 0) (local.get 0x0c7)) (i64.store offset=0x0c8 align=1 (i32.const 0) (local.get 0x0c8)) (i64.store offset=0x0c9 align=1 (i32.const 0) (local.get 0x0c9)) (i64.store offset=0x0ca align=1 (i32.const 0) (local.get 0x0ca)) (i64.store offset=0x0cb align=1 (i32.const 0) (local.get 0x0cb)) (i64.store offset=0x0cc align=1 (i32.const 0) (local.get 0x0cc)) (i64.store offset=0x0cd align=1 (i32.const 0) (local.get 0x0cd)) (i64.store offset=0x0ce align=1 (i32.const 0) (local.get 0x0ce)) (i64.store offset=0x0cf align=1 (i32.const 0) (local.get 0x0cf)) (i64.store offset=0x0d0 align=1 (i32.const 0) (local.get 0x0d0)) (i64.store offset=0x0d1 align=1 (i32.const 0) (local.get 0x0d1)) (i64.store offset=0x0d2 align=1 (i32.const 0) (local.get 0x0d2)) (i64.store offset=0x0d3 align=1 (i32.const 0) (local.get 0x0d3)) (i64.store offset=0x0d4 align=1 (i32.const 0) (local.get 0x0d4)) (i64.store offset=0x0d5 align=1 (i32.const 0) (local.get 0x0d5)) (i64.store offset=0x0d6 align=1 (i32.const 0) (local.get 0x0d6)) (i64.store offset=0x0d7 align=1 (i32.const 0) (local.get 0x0d7)) (i64.store offset=0x0d8 align=1 (i32.const 0) (local.get 0x0d8)) (i64.store offset=0x0d9 align=1 (i32.const 0) (local.get 0x0d9)) (i64.store offset=0x0da align=1 (i32.const 0) (local.get 0x0da)) (i64.store offset=0x0db align=1 (i32.const 0) (local.get 0x0db)) (i64.store offset=0x0dc align=1 (i32.const 0) (local.get 0x0dc)) (i64.store offset=0x0dd align=1 (i32.const 0) (local.get 0x0dd)) (i64.store offset=0x0de align=1 (i32.const 0) (local.get 0x0de)) (i64.store offset=0x0df align=1 (i32.const 0) (local.get 0x0df)) (i64.store offset=0x0e0 align=1 (i32.const 0) (local.get 0x0e0)) (i64.store offset=0x0e1 align=1 (i32.const 0) (local.get 0x0e1)) (i64.store offset=0x0e2 align=1 (i32.const 0) (local.get 0x0e2)) (i64.store offset=0x0e3 align=1 (i32.const 0) (local.get 0x0e3)) (i64.store offset=0x0e4 align=1 (i32.const 0) (local.get 0x0e4)) (i64.store offset=0x0e5 align=1 (i32.const 0) (local.get 0x0e5)) (i64.store offset=0x0e6 align=1 (i32.const 0) (local.get 0x0e6)) (i64.store offset=0x0e7 align=1 (i32.const 0) (local.get 0x0e7)) (i64.store offset=0x0e8 align=1 (i32.const 0) (local.get 0x0e8)) (i64.store offset=0x0e9 align=1 (i32.const 0) (local.get 0x0e9)) (i64.store offset=0x0ea align=1 (i32.const 0) (local.get 0x0ea)) (i64.store offset=0x0eb align=1 (i32.const 0) (local.get 0x0eb)) (i64.store offset=0x0ec align=1 (i32.const 0) (local.get 0x0ec)) (i64.store offset=0x0ed align=1 (i32.const 0) (local.get 0x0ed)) (i64.store offset=0x0ee align=1 (i32.const 0) (local.get 0x0ee)) (i64.store offset=0x0ef align=1 (i32.const 0) (local.get 0x0ef)) (i64.store offset=0x0f0 align=1 (i32.const 0) (local.get 0x0f0)) (i64.store offset=0x0f1 align=1 (i32.const 0) (local.get 0x0f1)) (i64.store offset=0x0f2 align=1 (i32.const 0) (local.get 0x0f2)) (i64.store offset=0x0f3 align=1 (i32.const 0) (local.get 0x0f3)) (i64.store offset=0x0f4 align=1 (i32.const 0) (local.get 0x0f4)) (i64.store offset=0x0f5 align=1 (i32.const 0) (local.get 0x0f5)) (i64.store offset=0x0f6 align=1 (i32.const 0) (local.get 0x0f6)) (i64.store offset=0x0f7 align=1 (i32.const 0) (local.get 0x0f7)) (i64.store offset=0x0f8 align=1 (i32.const 0) (local.get 0x0f8)) (i64.store offset=0x0f9 align=1 (i32.const 0) (local.get 0x0f9)) (i64.store offset=0x0fa align=1 (i32.const 0) (local.get 0x0fa)) (i64.store offset=0x0fb align=1 (i32.const 0) (local.get 0x0fb)) (i64.store offset=0x0fc align=1 (i32.const 0) (local.get 0x0fc)) (i64.store offset=0x0fd align=1 (i32.const 0) (local.get 0x0fd)) (i64.store offset=0x0fe align=1 (i32.const 0) (local.get 0x0fe)) (i64.store offset=0x0ff align=1 (i32.const 0) (local.get 0x0ff)) (i64.store offset=0x100 align=1 (i32.const 0) (local.get 0x100)) (i64.store offset=0x101 align=1 (i32.const 0) (local.get 0x101)) (i64.store offset=0x102 align=1 (i32.const 0) (local.get 0x102)) (i64.store offset=0x103 align=1 (i32.const 0) (local.get 0x103)) (i64.store offset=0x104 align=1 (i32.const 0) (local.get 0x104)) (i64.store offset=0x105 align=1 (i32.const 0) (local.get 0x105)) (i64.store offset=0x106 align=1 (i32.const 0) (local.get 0x106)) (i64.store offset=0x107 align=1 (i32.const 0) (local.get 0x107)) (i64.store offset=0x108 align=1 (i32.const 0) (local.get 0x108)) (i64.store offset=0x109 align=1 (i32.const 0) (local.get 0x109)) (i64.store offset=0x10a align=1 (i32.const 0) (local.get 0x10a)) (i64.store offset=0x10b align=1 (i32.const 0) (local.get 0x10b)) (i64.store offset=0x10c align=1 (i32.const 0) (local.get 0x10c)) (i64.store offset=0x10d align=1 (i32.const 0) (local.get 0x10d)) (i64.store offset=0x10e align=1 (i32.const 0) (local.get 0x10e)) (i64.store offset=0x10f align=1 (i32.const 0) (local.get 0x10f)) (i64.store offset=0x110 align=1 (i32.const 0) (local.get 0x110)) (i64.store offset=0x111 align=1 (i32.const 0) (local.get 0x111)) (i64.store offset=0x112 align=1 (i32.const 0) (local.get 0x112)) (i64.store offset=0x113 align=1 (i32.const 0) (local.get 0x113)) (i64.store offset=0x114 align=1 (i32.const 0) (local.get 0x114)) (i64.store offset=0x115 align=1 (i32.const 0) (local.get 0x115)) (i64.store offset=0x116 align=1 (i32.const 0) (local.get 0x116)) (i64.store offset=0x117 align=1 (i32.const 0) (local.get 0x117)) (i64.store offset=0x118 align=1 (i32.const 0) (local.get 0x118)) (i64.store offset=0x119 align=1 (i32.const 0) (local.get 0x119)) (i64.store offset=0x11a align=1 (i32.const 0) (local.get 0x11a)) (i64.store offset=0x11b align=1 (i32.const 0) (local.get 0x11b)) (i64.store offset=0x11c align=1 (i32.const 0) (local.get 0x11c)) (i64.store offset=0x11d align=1 (i32.const 0) (local.get 0x11d)) (i64.store offset=0x11e align=1 (i32.const 0) (local.get 0x11e)) (i64.store offset=0x11f align=1 (i32.const 0) (local.get 0x11f)) (i64.store offset=0x120 align=1 (i32.const 0) (local.get 0x120)) (i64.store offset=0x121 align=1 (i32.const 0) (local.get 0x121)) (i64.store offset=0x122 align=1 (i32.const 0) (local.get 0x122)) (i64.store offset=0x123 align=1 (i32.const 0) (local.get 0x123)) (i64.store offset=0x124 align=1 (i32.const 0) (local.get 0x124)) (i64.store offset=0x125 align=1 (i32.const 0) (local.get 0x125)) (i64.store offset=0x126 align=1 (i32.const 0) (local.get 0x126)) (i64.store offset=0x127 align=1 (i32.const 0) (local.get 0x127)) (i64.store offset=0x128 align=1 (i32.const 0) (local.get 0x128)) (i64.store offset=0x129 align=1 (i32.const 0) (local.get 0x129)) (i64.store offset=0x12a align=1 (i32.const 0) (local.get 0x12a)) (i64.store offset=0x12b align=1 (i32.const 0) (local.get 0x12b)) (i64.store offset=0x12c align=1 (i32.const 0) (local.get 0x12c)) (i64.store offset=0x12d align=1 (i32.const 0) (local.get 0x12d)) (i64.store offset=0x12e align=1 (i32.const 0) (local.get 0x12e)) (i64.store offset=0x12f align=1 (i32.const 0) (local.get 0x12f)) (i64.store offset=0x130 align=1 (i32.const 0) (local.get 0x130)) (i64.store offset=0x131 align=1 (i32.const 0) (local.get 0x131)) (i64.store offset=0x132 align=1 (i32.const 0) (local.get 0x132)) (i64.store offset=0x133 align=1 (i32.const 0) (local.get 0x133)) (i64.store offset=0x134 align=1 (i32.const 0) (local.get 0x134)) (i64.store offset=0x135 align=1 (i32.const 0) (local.get 0x135)) (i64.store offset=0x136 align=1 (i32.const 0) (local.get 0x136)) (i64.store offset=0x137 align=1 (i32.const 0) (local.get 0x137)) (i64.store offset=0x138 align=1 (i32.const 0) (local.get 0x138)) (i64.store offset=0x139 align=1 (i32.const 0) (local.get 0x139)) (i64.store offset=0x13a align=1 (i32.const 0) (local.get 0x13a)) (i64.store offset=0x13b align=1 (i32.const 0) (local.get 0x13b)) (i64.store offset=0x13c align=1 (i32.const 0) (local.get 0x13c)) (i64.store offset=0x13d align=1 (i32.const 0) (local.get 0x13d)) (i64.store offset=0x13e align=1 (i32.const 0) (local.get 0x13e)) (i64.store offset=0x13f align=1 (i32.const 0) (local.get 0x13f)) (i64.store offset=0x140 align=1 (i32.const 0) (local.get 0x140)) (i64.store offset=0x141 align=1 (i32.const 0) (local.get 0x141)) (i64.store offset=0x142 align=1 (i32.const 0) (local.get 0x142)) (i64.store offset=0x143 align=1 (i32.const 0) (local.get 0x143)) (i64.store offset=0x144 align=1 (i32.const 0) (local.get 0x144)) (i64.store offset=0x145 align=1 (i32.const 0) (local.get 0x145)) (i64.store offset=0x146 align=1 (i32.const 0) (local.get 0x146)) (i64.store offset=0x147 align=1 (i32.const 0) (local.get 0x147)) (i64.store offset=0x148 align=1 (i32.const 0) (local.get 0x148)) (i64.store offset=0x149 align=1 (i32.const 0) (local.get 0x149)) (i64.store offset=0x14a align=1 (i32.const 0) (local.get 0x14a)) (i64.store offset=0x14b align=1 (i32.const 0) (local.get 0x14b)) (i64.store offset=0x14c align=1 (i32.const 0) (local.get 0x14c)) (i64.store offset=0x14d align=1 (i32.const 0) (local.get 0x14d)) (i64.store offset=0x14e align=1 (i32.const 0) (local.get 0x14e)) (i64.store offset=0x14f align=1 (i32.const 0) (local.get 0x14f)) (i64.store offset=0x150 align=1 (i32.const 0) (local.get 0x150)) (i64.store offset=0x151 align=1 (i32.const 0) (local.get 0x151)) (i64.store offset=0x152 align=1 (i32.const 0) (local.get 0x152)) (i64.store offset=0x153 align=1 (i32.const 0) (local.get 0x153)) (i64.store offset=0x154 align=1 (i32.const 0) (local.get 0x154)) (i64.store offset=0x155 align=1 (i32.const 0) (local.get 0x155)) (i64.store offset=0x156 align=1 (i32.const 0) (local.get 0x156)) (i64.store offset=0x157 align=1 (i32.const 0) (local.get 0x157)) (i64.store offset=0x158 align=1 (i32.const 0) (local.get 0x158)) (i64.store offset=0x159 align=1 (i32.const 0) (local.get 0x159)) (i64.store offset=0x15a align=1 (i32.const 0) (local.get 0x15a)) (i64.store offset=0x15b align=1 (i32.const 0) (local.get 0x15b)) (i64.store offset=0x15c align=1 (i32.const 0) (local.get 0x15c)) (i64.store offset=0x15d align=1 (i32.const 0) (local.get 0x15d)) (i64.store offset=0x15e align=1 (i32.const 0) (local.get 0x15e)) (i64.store offset=0x15f align=1 (i32.const 0) (local.get 0x15f)) (i64.store offset=0x160 align=1 (i32.const 0) (local.get 0x160)) (i64.store offset=0x161 align=1 (i32.const 0) (local.get 0x161)) (i64.store offset=0x162 align=1 (i32.const 0) (local.get 0x162)) (i64.store offset=0x163 align=1 (i32.const 0) (local.get 0x163)) (i64.store offset=0x164 align=1 (i32.const 0) (local.get 0x164)) (i64.store offset=0x165 align=1 (i32.const 0) (local.get 0x165)) (i64.store offset=0x166 align=1 (i32.const 0) (local.get 0x166)) (i64.store offset=0x167 align=1 (i32.const 0) (local.get 0x167)) (i64.store offset=0x168 align=1 (i32.const 0) (local.get 0x168)) (i64.store offset=0x169 align=1 (i32.const 0) (local.get 0x169)) (i64.store offset=0x16a align=1 (i32.const 0) (local.get 0x16a)) (i64.store offset=0x16b align=1 (i32.const 0) (local.get 0x16b)) (i64.store offset=0x16c align=1 (i32.const 0) (local.get 0x16c)) (i64.store offset=0x16d align=1 (i32.const 0) (local.get 0x16d)) (i64.store offset=0x16e align=1 (i32.const 0) (local.get 0x16e)) (i64.store offset=0x16f align=1 (i32.const 0) (local.get 0x16f)) (i64.store offset=0x170 align=1 (i32.const 0) (local.get 0x170)) (i64.store offset=0x171 align=1 (i32.const 0) (local.get 0x171)) (i64.store offset=0x172 align=1 (i32.const 0) (local.get 0x172)) (i64.store offset=0x173 align=1 (i32.const 0) (local.get 0x173)) (i64.store offset=0x174 align=1 (i32.const 0) (local.get 0x174)) (i64.store offset=0x175 align=1 (i32.const 0) (local.get 0x175)) (i64.store offset=0x176 align=1 (i32.const 0) (local.get 0x176)) (i64.store offset=0x177 align=1 (i32.const 0) (local.get 0x177)) (i64.store offset=0x178 align=1 (i32.const 0) (local.get 0x178)) (i64.store offset=0x179 align=1 (i32.const 0) (local.get 0x179)) (i64.store offset=0x17a align=1 (i32.const 0) (local.get 0x17a)) (i64.store offset=0x17b align=1 (i32.const 0) (local.get 0x17b)) (i64.store offset=0x17c align=1 (i32.const 0) (local.get 0x17c)) (i64.store offset=0x17d align=1 (i32.const 0) (local.get 0x17d)) (i64.store offset=0x17e align=1 (i32.const 0) (local.get 0x17e)) (i64.store offset=0x17f align=1 (i32.const 0) (local.get 0x17f)) (i64.store offset=0x180 align=1 (i32.const 0) (local.get 0x180)) (i64.store offset=0x181 align=1 (i32.const 0) (local.get 0x181)) (i64.store offset=0x182 align=1 (i32.const 0) (local.get 0x182)) (i64.store offset=0x183 align=1 (i32.const 0) (local.get 0x183)) (i64.store offset=0x184 align=1 (i32.const 0) (local.get 0x184)) (i64.store offset=0x185 align=1 (i32.const 0) (local.get 0x185)) (i64.store offset=0x186 align=1 (i32.const 0) (local.get 0x186)) (i64.store offset=0x187 align=1 (i32.const 0) (local.get 0x187)) (i64.store offset=0x188 align=1 (i32.const 0) (local.get 0x188)) (i64.store offset=0x189 align=1 (i32.const 0) (local.get 0x189)) (i64.store offset=0x18a align=1 (i32.const 0) (local.get 0x18a)) (i64.store offset=0x18b align=1 (i32.const 0) (local.get 0x18b)) (i64.store offset=0x18c align=1 (i32.const 0) (local.get 0x18c)) (i64.store offset=0x18d align=1 (i32.const 0) (local.get 0x18d)) (i64.store offset=0x18e align=1 (i32.const 0) (local.get 0x18e)) (i64.store offset=0x18f align=1 (i32.const 0) (local.get 0x18f)) (i64.store offset=0x190 align=1 (i32.const 0) (local.get 0x190)) (i64.store offset=0x191 align=1 (i32.const 0) (local.get 0x191)) (i64.store offset=0x192 align=1 (i32.const 0) (local.get 0x192)) (i64.store offset=0x193 align=1 (i32.const 0) (local.get 0x193)) (i64.store offset=0x194 align=1 (i32.const 0) (local.get 0x194)) (i64.store offset=0x195 align=1 (i32.const 0) (local.get 0x195)) (i64.store offset=0x196 align=1 (i32.const 0) (local.get 0x196)) (i64.store offset=0x197 align=1 (i32.const 0) (local.get 0x197)) (i64.store offset=0x198 align=1 (i32.const 0) (local.get 0x198)) (i64.store offset=0x199 align=1 (i32.const 0) (local.get 0x199)) (i64.store offset=0x19a align=1 (i32.const 0) (local.get 0x19a)) (i64.store offset=0x19b align=1 (i32.const 0) (local.get 0x19b)) (i64.store offset=0x19c align=1 (i32.const 0) (local.get 0x19c)) (i64.store offset=0x19d align=1 (i32.const 0) (local.get 0x19d)) (i64.store offset=0x19e align=1 (i32.const 0) (local.get 0x19e)) (i64.store offset=0x19f align=1 (i32.const 0) (local.get 0x19f)) (i64.store offset=0x1a0 align=1 (i32.const 0) (local.get 0x1a0)) (i64.store offset=0x1a1 align=1 (i32.const 0) (local.get 0x1a1)) (i64.store offset=0x1a2 align=1 (i32.const 0) (local.get 0x1a2)) (i64.store offset=0x1a3 align=1 (i32.const 0) (local.get 0x1a3)) (i64.store offset=0x1a4 align=1 (i32.const 0) (local.get 0x1a4)) (i64.store offset=0x1a5 align=1 (i32.const 0) (local.get 0x1a5)) (i64.store offset=0x1a6 align=1 (i32.const 0) (local.get 0x1a6)) (i64.store offset=0x1a7 align=1 (i32.const 0) (local.get 0x1a7)) (i64.store offset=0x1a8 align=1 (i32.const 0) (local.get 0x1a8)) (i64.store offset=0x1a9 align=1 (i32.const 0) (local.get 0x1a9)) (i64.store offset=0x1aa align=1 (i32.const 0) (local.get 0x1aa)) (i64.store offset=0x1ab align=1 (i32.const 0) (local.get 0x1ab)) (i64.store offset=0x1ac align=1 (i32.const 0) (local.get 0x1ac)) (i64.store offset=0x1ad align=1 (i32.const 0) (local.get 0x1ad)) (i64.store offset=0x1ae align=1 (i32.const 0) (local.get 0x1ae)) (i64.store offset=0x1af align=1 (i32.const 0) (local.get 0x1af)) (i64.store offset=0x1b0 align=1 (i32.const 0) (local.get 0x1b0)) (i64.store offset=0x1b1 align=1 (i32.const 0) (local.get 0x1b1)) (i64.store offset=0x1b2 align=1 (i32.const 0) (local.get 0x1b2)) (i64.store offset=0x1b3 align=1 (i32.const 0) (local.get 0x1b3)) (i64.store offset=0x1b4 align=1 (i32.const 0) (local.get 0x1b4)) (i64.store offset=0x1b5 align=1 (i32.const 0) (local.get 0x1b5)) (i64.store offset=0x1b6 align=1 (i32.const 0) (local.get 0x1b6)) (i64.store offset=0x1b7 align=1 (i32.const 0) (local.get 0x1b7)) (i64.store offset=0x1b8 align=1 (i32.const 0) (local.get 0x1b8)) (i64.store offset=0x1b9 align=1 (i32.const 0) (local.get 0x1b9)) (i64.store offset=0x1ba align=1 (i32.const 0) (local.get 0x1ba)) (i64.store offset=0x1bb align=1 (i32.const 0) (local.get 0x1bb)) (i64.store offset=0x1bc align=1 (i32.const 0) (local.get 0x1bc)) (i64.store offset=0x1bd align=1 (i32.const 0) (local.get 0x1bd)) (i64.store offset=0x1be align=1 (i32.const 0) (local.get 0x1be)) (i64.store offset=0x1bf align=1 (i32.const 0) (local.get 0x1bf)) (i64.store offset=0x1c0 align=1 (i32.const 0) (local.get 0x1c0)) (i64.store offset=0x1c1 align=1 (i32.const 0) (local.get 0x1c1)) (i64.store offset=0x1c2 align=1 (i32.const 0) (local.get 0x1c2)) (i64.store offset=0x1c3 align=1 (i32.const 0) (local.get 0x1c3)) (i64.store offset=0x1c4 align=1 (i32.const 0) (local.get 0x1c4)) (i64.store offset=0x1c5 align=1 (i32.const 0) (local.get 0x1c5)) (i64.store offset=0x1c6 align=1 (i32.const 0) (local.get 0x1c6)) (i64.store offset=0x1c7 align=1 (i32.const 0) (local.get 0x1c7)) (i64.store offset=0x1c8 align=1 (i32.const 0) (local.get 0x1c8)) (i64.store offset=0x1c9 align=1 (i32.const 0) (local.get 0x1c9)) (i64.store offset=0x1ca align=1 (i32.const 0) (local.get 0x1ca)) (i64.store offset=0x1cb align=1 (i32.const 0) (local.get 0x1cb)) (i64.store offset=0x1cc align=1 (i32.const 0) (local.get 0x1cc)) (i64.store offset=0x1cd align=1 (i32.const 0) (local.get 0x1cd)) (i64.store offset=0x1ce align=1 (i32.const 0) (local.get 0x1ce)) (i64.store offset=0x1cf align=1 (i32.const 0) (local.get 0x1cf)) (i64.store offset=0x1d0 align=1 (i32.const 0) (local.get 0x1d0)) (i64.store offset=0x1d1 align=1 (i32.const 0) (local.get 0x1d1)) (i64.store offset=0x1d2 align=1 (i32.const 0) (local.get 0x1d2)) (i64.store offset=0x1d3 align=1 (i32.const 0) (local.get 0x1d3)) (i64.store offset=0x1d4 align=1 (i32.const 0) (local.get 0x1d4)) (i64.store offset=0x1d5 align=1 (i32.const 0) (local.get 0x1d5)) (i64.store offset=0x1d6 align=1 (i32.const 0) (local.get 0x1d6)) (i64.store offset=0x1d7 align=1 (i32.const 0) (local.get 0x1d7)) (i64.store offset=0x1d8 align=1 (i32.const 0) (local.get 0x1d8)) (i64.store offset=0x1d9 align=1 (i32.const 0) (local.get 0x1d9)) (i64.store offset=0x1da align=1 (i32.const 0) (local.get 0x1da)) (i64.store offset=0x1db align=1 (i32.const 0) (local.get 0x1db)) (i64.store offset=0x1dc align=1 (i32.const 0) (local.get 0x1dc)) (i64.store offset=0x1dd align=1 (i32.const 0) (local.get 0x1dd)) (i64.store offset=0x1de align=1 (i32.const 0) (local.get 0x1de)) (i64.store offset=0x1df align=1 (i32.const 0) (local.get 0x1df)) (i64.store offset=0x1e0 align=1 (i32.const 0) (local.get 0x1e0)) (i64.store offset=0x1e1 align=1 (i32.const 0) (local.get 0x1e1)) (i64.store offset=0x1e2 align=1 (i32.const 0) (local.get 0x1e2)) (i64.store offset=0x1e3 align=1 (i32.const 0) (local.get 0x1e3)) (i64.store offset=0x1e4 align=1 (i32.const 0) (local.get 0x1e4)) (i64.store offset=0x1e5 align=1 (i32.const 0) (local.get 0x1e5)) (i64.store offset=0x1e6 align=1 (i32.const 0) (local.get 0x1e6)) (i64.store offset=0x1e7 align=1 (i32.const 0) (local.get 0x1e7)) (i64.store offset=0x1e8 align=1 (i32.const 0) (local.get 0x1e8)) (i64.store offset=0x1e9 align=1 (i32.const 0) (local.get 0x1e9)) (i64.store offset=0x1ea align=1 (i32.const 0) (local.get 0x1ea)) (i64.store offset=0x1eb align=1 (i32.const 0) (local.get 0x1eb)) (i64.store offset=0x1ec align=1 (i32.const 0) (local.get 0x1ec)) (i64.store offset=0x1ed align=1 (i32.const 0) (local.get 0x1ed)) (i64.store offset=0x1ee align=1 (i32.const 0) (local.get 0x1ee)) (i64.store offset=0x1ef align=1 (i32.const 0) (local.get 0x1ef)) (i64.store offset=0x1f0 align=1 (i32.const 0) (local.get 0x1f0)) (i64.store offset=0x1f1 align=1 (i32.const 0) (local.get 0x1f1)) (i64.store offset=0x1f2 align=1 (i32.const 0) (local.get 0x1f2)) (i64.store offset=0x1f3 align=1 (i32.const 0) (local.get 0x1f3)) (i64.store offset=0x1f4 align=1 (i32.const 0) (local.get 0x1f4)) (i64.store offset=0x1f5 align=1 (i32.const 0) (local.get 0x1f5)) (i64.store offset=0x1f6 align=1 (i32.const 0) (local.get 0x1f6)) (i64.store offset=0x1f7 align=1 (i32.const 0) (local.get 0x1f7)) (i64.store offset=0x1f8 align=1 (i32.const 0) (local.get 0x1f8)) (i64.store offset=0x1f9 align=1 (i32.const 0) (local.get 0x1f9)) (i64.store offset=0x1fa align=1 (i32.const 0) (local.get 0x1fa)) (i64.store offset=0x1fb align=1 (i32.const 0) (local.get 0x1fb)) (i64.store offset=0x1fc align=1 (i32.const 0) (local.get 0x1fc)) (i64.store offset=0x1fd align=1 (i32.const 0) (local.get 0x1fd)) (i64.store offset=0x1fe align=1 (i32.const 0) (local.get 0x1fe)) (i64.store offset=0x1ff align=1 (i32.const 0) (local.get 0x1ff)) (i64.store offset=0x200 align=1 (i32.const 0) (local.get 0x200)) (i64.store offset=0x201 align=1 (i32.const 0) (local.get 0x201)) (i64.store offset=0x202 align=1 (i32.const 0) (local.get 0x202)) (i64.store offset=0x203 align=1 (i32.const 0) (local.get 0x203)) (i64.store offset=0x204 align=1 (i32.const 0) (local.get 0x204)) (i64.store offset=0x205 align=1 (i32.const 0) (local.get 0x205)) (i64.store offset=0x206 align=1 (i32.const 0) (local.get 0x206)) (i64.store offset=0x207 align=1 (i32.const 0) (local.get 0x207)) (i64.store offset=0x208 align=1 (i32.const 0) (local.get 0x208)) (i64.store offset=0x209 align=1 (i32.const 0) (local.get 0x209)) (i64.store offset=0x20a align=1 (i32.const 0) (local.get 0x20a)) (i64.store offset=0x20b align=1 (i32.const 0) (local.get 0x20b)) (i64.store offset=0x20c align=1 (i32.const 0) (local.get 0x20c)) (i64.store offset=0x20d align=1 (i32.const 0) (local.get 0x20d)) (i64.store offset=0x20e align=1 (i32.const 0) (local.get 0x20e)) (i64.store offset=0x20f align=1 (i32.const 0) (local.get 0x20f)) (i64.store offset=0x210 align=1 (i32.const 0) (local.get 0x210)) (i64.store offset=0x211 align=1 (i32.const 0) (local.get 0x211)) (i64.store offset=0x212 align=1 (i32.const 0) (local.get 0x212)) (i64.store offset=0x213 align=1 (i32.const 0) (local.get 0x213)) (i64.store offset=0x214 align=1 (i32.const 0) (local.get 0x214)) (i64.store offset=0x215 align=1 (i32.const 0) (local.get 0x215)) (i64.store offset=0x216 align=1 (i32.const 0) (local.get 0x216)) (i64.store offset=0x217 align=1 (i32.const 0) (local.get 0x217)) (i64.store offset=0x218 align=1 (i32.const 0) (local.get 0x218)) (i64.store offset=0x219 align=1 (i32.const 0) (local.get 0x219)) (i64.store offset=0x21a align=1 (i32.const 0) (local.get 0x21a)) (i64.store offset=0x21b align=1 (i32.const 0) (local.get 0x21b)) (i64.store offset=0x21c align=1 (i32.const 0) (local.get 0x21c)) (i64.store offset=0x21d align=1 (i32.const 0) (local.get 0x21d)) (i64.store offset=0x21e align=1 (i32.const 0) (local.get 0x21e)) (i64.store offset=0x21f align=1 (i32.const 0) (local.get 0x21f)) (i64.store offset=0x220 align=1 (i32.const 0) (local.get 0x220)) (i64.store offset=0x221 align=1 (i32.const 0) (local.get 0x221)) (i64.store offset=0x222 align=1 (i32.const 0) (local.get 0x222)) (i64.store offset=0x223 align=1 (i32.const 0) (local.get 0x223)) (i64.store offset=0x224 align=1 (i32.const 0) (local.get 0x224)) (i64.store offset=0x225 align=1 (i32.const 0) (local.get 0x225)) (i64.store offset=0x226 align=1 (i32.const 0) (local.get 0x226)) (i64.store offset=0x227 align=1 (i32.const 0) (local.get 0x227)) (i64.store offset=0x228 align=1 (i32.const 0) (local.get 0x228)) (i64.store offset=0x229 align=1 (i32.const 0) (local.get 0x229)) (i64.store offset=0x22a align=1 (i32.const 0) (local.get 0x22a)) (i64.store offset=0x22b align=1 (i32.const 0) (local.get 0x22b)) (i64.store offset=0x22c align=1 (i32.const 0) (local.get 0x22c)) (i64.store offset=0x22d align=1 (i32.const 0) (local.get 0x22d)) (i64.store offset=0x22e align=1 (i32.const 0) (local.get 0x22e)) (i64.store offset=0x22f align=1 (i32.const 0) (local.get 0x22f)) (i64.store offset=0x230 align=1 (i32.const 0) (local.get 0x230)) (i64.store offset=0x231 align=1 (i32.const 0) (local.get 0x231)) (i64.store offset=0x232 align=1 (i32.const 0) (local.get 0x232)) (i64.store offset=0x233 align=1 (i32.const 0) (local.get 0x233)) (i64.store offset=0x234 align=1 (i32.const 0) (local.get 0x234)) (i64.store offset=0x235 align=1 (i32.const 0) (local.get 0x235)) (i64.store offset=0x236 align=1 (i32.const 0) (local.get 0x236)) (i64.store offset=0x237 align=1 (i32.const 0) (local.get 0x237)) (i64.store offset=0x238 align=1 (i32.const 0) (local.get 0x238)) (i64.store offset=0x239 align=1 (i32.const 0) (local.get 0x239)) (i64.store offset=0x23a align=1 (i32.const 0) (local.get 0x23a)) (i64.store offset=0x23b align=1 (i32.const 0) (local.get 0x23b)) (i64.store offset=0x23c align=1 (i32.const 0) (local.get 0x23c)) (i64.store offset=0x23d align=1 (i32.const 0) (local.get 0x23d)) (i64.store offset=0x23e align=1 (i32.const 0) (local.get 0x23e)) (i64.store offset=0x23f align=1 (i32.const 0) (local.get 0x23f)) (i64.store offset=0x240 align=1 (i32.const 0) (local.get 0x240)) (i64.store offset=0x241 align=1 (i32.const 0) (local.get 0x241)) (i64.store offset=0x242 align=1 (i32.const 0) (local.get 0x242)) (i64.store offset=0x243 align=1 (i32.const 0) (local.get 0x243)) (i64.store offset=0x244 align=1 (i32.const 0) (local.get 0x244)) (i64.store offset=0x245 align=1 (i32.const 0) (local.get 0x245)) (i64.store offset=0x246 align=1 (i32.const 0) (local.get 0x246)) (i64.store offset=0x247 align=1 (i32.const 0) (local.get 0x247)) (i64.store offset=0x248 align=1 (i32.const 0) (local.get 0x248)) (i64.store offset=0x249 align=1 (i32.const 0) (local.get 0x249)) (i64.store offset=0x24a align=1 (i32.const 0) (local.get 0x24a)) (i64.store offset=0x24b align=1 (i32.const 0) (local.get 0x24b)) (i64.store offset=0x24c align=1 (i32.const 0) (local.get 0x24c)) (i64.store offset=0x24d align=1 (i32.const 0) (local.get 0x24d)) (i64.store offset=0x24e align=1 (i32.const 0) (local.get 0x24e)) (i64.store offset=0x24f align=1 (i32.const 0) (local.get 0x24f)) (i64.store offset=0x250 align=1 (i32.const 0) (local.get 0x250)) (i64.store offset=0x251 align=1 (i32.const 0) (local.get 0x251)) (i64.store offset=0x252 align=1 (i32.const 0) (local.get 0x252)) (i64.store offset=0x253 align=1 (i32.const 0) (local.get 0x253)) (i64.store offset=0x254 align=1 (i32.const 0) (local.get 0x254)) (i64.store offset=0x255 align=1 (i32.const 0) (local.get 0x255)) (i64.store offset=0x256 align=1 (i32.const 0) (local.get 0x256)) (i64.store offset=0x257 align=1 (i32.const 0) (local.get 0x257)) (i64.store offset=0x258 align=1 (i32.const 0) (local.get 0x258)) (i64.store offset=0x259 align=1 (i32.const 0) (local.get 0x259)) (i64.store offset=0x25a align=1 (i32.const 0) (local.get 0x25a)) (i64.store offset=0x25b align=1 (i32.const 0) (local.get 0x25b)) (i64.store offset=0x25c align=1 (i32.const 0) (local.get 0x25c)) (i64.store offset=0x25d align=1 (i32.const 0) (local.get 0x25d)) (i64.store offset=0x25e align=1 (i32.const 0) (local.get 0x25e)) (i64.store offset=0x25f align=1 (i32.const 0) (local.get 0x25f)) (i64.store offset=0x260 align=1 (i32.const 0) (local.get 0x260)) (i64.store offset=0x261 align=1 (i32.const 0) (local.get 0x261)) (i64.store offset=0x262 align=1 (i32.const 0) (local.get 0x262)) (i64.store offset=0x263 align=1 (i32.const 0) (local.get 0x263)) (i64.store offset=0x264 align=1 (i32.const 0) (local.get 0x264)) (i64.store offset=0x265 align=1 (i32.const 0) (local.get 0x265)) (i64.store offset=0x266 align=1 (i32.const 0) (local.get 0x266)) (i64.store offset=0x267 align=1 (i32.const 0) (local.get 0x267)) (i64.store offset=0x268 align=1 (i32.const 0) (local.get 0x268)) (i64.store offset=0x269 align=1 (i32.const 0) (local.get 0x269)) (i64.store offset=0x26a align=1 (i32.const 0) (local.get 0x26a)) (i64.store offset=0x26b align=1 (i32.const 0) (local.get 0x26b)) (i64.store offset=0x26c align=1 (i32.const 0) (local.get 0x26c)) (i64.store offset=0x26d align=1 (i32.const 0) (local.get 0x26d)) (i64.store offset=0x26e align=1 (i32.const 0) (local.get 0x26e)) (i64.store offset=0x26f align=1 (i32.const 0) (local.get 0x26f)) (i64.store offset=0x270 align=1 (i32.const 0) (local.get 0x270)) (i64.store offset=0x271 align=1 (i32.const 0) (local.get 0x271)) (i64.store offset=0x272 align=1 (i32.const 0) (local.get 0x272)) (i64.store offset=0x273 align=1 (i32.const 0) (local.get 0x273)) (i64.store offset=0x274 align=1 (i32.const 0) (local.get 0x274)) (i64.store offset=0x275 align=1 (i32.const 0) (local.get 0x275)) (i64.store offset=0x276 align=1 (i32.const 0) (local.get 0x276)) (i64.store offset=0x277 align=1 (i32.const 0) (local.get 0x277)) (i64.store offset=0x278 align=1 (i32.const 0) (local.get 0x278)) (i64.store offset=0x279 align=1 (i32.const 0) (local.get 0x279)) (i64.store offset=0x27a align=1 (i32.const 0) (local.get 0x27a)) (i64.store offset=0x27b align=1 (i32.const 0) (local.get 0x27b)) (i64.store offset=0x27c align=1 (i32.const 0) (local.get 0x27c)) (i64.store offset=0x27d align=1 (i32.const 0) (local.get 0x27d)) (i64.store offset=0x27e align=1 (i32.const 0) (local.get 0x27e)) (i64.store offset=0x27f align=1 (i32.const 0) (local.get 0x27f)) (i64.store offset=0x280 align=1 (i32.const 0) (local.get 0x280)) (i64.store offset=0x281 align=1 (i32.const 0) (local.get 0x281)) (i64.store offset=0x282 align=1 (i32.const 0) (local.get 0x282)) (i64.store offset=0x283 align=1 (i32.const 0) (local.get 0x283)) (i64.store offset=0x284 align=1 (i32.const 0) (local.get 0x284)) (i64.store offset=0x285 align=1 (i32.const 0) (local.get 0x285)) (i64.store offset=0x286 align=1 (i32.const 0) (local.get 0x286)) (i64.store offset=0x287 align=1 (i32.const 0) (local.get 0x287)) (i64.store offset=0x288 align=1 (i32.const 0) (local.get 0x288)) (i64.store offset=0x289 align=1 (i32.const 0) (local.get 0x289)) (i64.store offset=0x28a align=1 (i32.const 0) (local.get 0x28a)) (i64.store offset=0x28b align=1 (i32.const 0) (local.get 0x28b)) (i64.store offset=0x28c align=1 (i32.const 0) (local.get 0x28c)) (i64.store offset=0x28d align=1 (i32.const 0) (local.get 0x28d)) (i64.store offset=0x28e align=1 (i32.const 0) (local.get 0x28e)) (i64.store offset=0x28f align=1 (i32.const 0) (local.get 0x28f)) (i64.store offset=0x290 align=1 (i32.const 0) (local.get 0x290)) (i64.store offset=0x291 align=1 (i32.const 0) (local.get 0x291)) (i64.store offset=0x292 align=1 (i32.const 0) (local.get 0x292)) (i64.store offset=0x293 align=1 (i32.const 0) (local.get 0x293)) (i64.store offset=0x294 align=1 (i32.const 0) (local.get 0x294)) (i64.store offset=0x295 align=1 (i32.const 0) (local.get 0x295)) (i64.store offset=0x296 align=1 (i32.const 0) (local.get 0x296)) (i64.store offset=0x297 align=1 (i32.const 0) (local.get 0x297)) (i64.store offset=0x298 align=1 (i32.const 0) (local.get 0x298)) (i64.store offset=0x299 align=1 (i32.const 0) (local.get 0x299)) (i64.store offset=0x29a align=1 (i32.const 0) (local.get 0x29a)) (i64.store offset=0x29b align=1 (i32.const 0) (local.get 0x29b)) (i64.store offset=0x29c align=1 (i32.const 0) (local.get 0x29c)) (i64.store offset=0x29d align=1 (i32.const 0) (local.get 0x29d)) (i64.store offset=0x29e align=1 (i32.const 0) (local.get 0x29e)) (i64.store offset=0x29f align=1 (i32.const 0) (local.get 0x29f)) (i64.store offset=0x2a0 align=1 (i32.const 0) (local.get 0x2a0)) (i64.store offset=0x2a1 align=1 (i32.const 0) (local.get 0x2a1)) (i64.store offset=0x2a2 align=1 (i32.const 0) (local.get 0x2a2)) (i64.store offset=0x2a3 align=1 (i32.const 0) (local.get 0x2a3)) (i64.store offset=0x2a4 align=1 (i32.const 0) (local.get 0x2a4)) (i64.store offset=0x2a5 align=1 (i32.const 0) (local.get 0x2a5)) (i64.store offset=0x2a6 align=1 (i32.const 0) (local.get 0x2a6)) (i64.store offset=0x2a7 align=1 (i32.const 0) (local.get 0x2a7)) (i64.store offset=0x2a8 align=1 (i32.const 0) (local.get 0x2a8)) (i64.store offset=0x2a9 align=1 (i32.const 0) (local.get 0x2a9)) (i64.store offset=0x2aa align=1 (i32.const 0) (local.get 0x2aa)) (i64.store offset=0x2ab align=1 (i32.const 0) (local.get 0x2ab)) (i64.store offset=0x2ac align=1 (i32.const 0) (local.get 0x2ac)) (i64.store offset=0x2ad align=1 (i32.const 0) (local.get 0x2ad)) (i64.store offset=0x2ae align=1 (i32.const 0) (local.get 0x2ae)) (i64.store offset=0x2af align=1 (i32.const 0) (local.get 0x2af)) (i64.store offset=0x2b0 align=1 (i32.const 0) (local.get 0x2b0)) (i64.store offset=0x2b1 align=1 (i32.const 0) (local.get 0x2b1)) (i64.store offset=0x2b2 align=1 (i32.const 0) (local.get 0x2b2)) (i64.store offset=0x2b3 align=1 (i32.const 0) (local.get 0x2b3)) (i64.store offset=0x2b4 align=1 (i32.const 0) (local.get 0x2b4)) (i64.store offset=0x2b5 align=1 (i32.const 0) (local.get 0x2b5)) (i64.store offset=0x2b6 align=1 (i32.const 0) (local.get 0x2b6)) (i64.store offset=0x2b7 align=1 (i32.const 0) (local.get 0x2b7)) (i64.store offset=0x2b8 align=1 (i32.const 0) (local.get 0x2b8)) (i64.store offset=0x2b9 align=1 (i32.const 0) (local.get 0x2b9)) (i64.store offset=0x2ba align=1 (i32.const 0) (local.get 0x2ba)) (i64.store offset=0x2bb align=1 (i32.const 0) (local.get 0x2bb)) (i64.store offset=0x2bc align=1 (i32.const 0) (local.get 0x2bc)) (i64.store offset=0x2bd align=1 (i32.const 0) (local.get 0x2bd)) (i64.store offset=0x2be align=1 (i32.const 0) (local.get 0x2be)) (i64.store offset=0x2bf align=1 (i32.const 0) (local.get 0x2bf)) (i64.store offset=0x2c0 align=1 (i32.const 0) (local.get 0x2c0)) (i64.store offset=0x2c1 align=1 (i32.const 0) (local.get 0x2c1)) (i64.store offset=0x2c2 align=1 (i32.const 0) (local.get 0x2c2)) (i64.store offset=0x2c3 align=1 (i32.const 0) (local.get 0x2c3)) (i64.store offset=0x2c4 align=1 (i32.const 0) (local.get 0x2c4)) (i64.store offset=0x2c5 align=1 (i32.const 0) (local.get 0x2c5)) (i64.store offset=0x2c6 align=1 (i32.const 0) (local.get 0x2c6)) (i64.store offset=0x2c7 align=1 (i32.const 0) (local.get 0x2c7)) (i64.store offset=0x2c8 align=1 (i32.const 0) (local.get 0x2c8)) (i64.store offset=0x2c9 align=1 (i32.const 0) (local.get 0x2c9)) (i64.store offset=0x2ca align=1 (i32.const 0) (local.get 0x2ca)) (i64.store offset=0x2cb align=1 (i32.const 0) (local.get 0x2cb)) (i64.store offset=0x2cc align=1 (i32.const 0) (local.get 0x2cc)) (i64.store offset=0x2cd align=1 (i32.const 0) (local.get 0x2cd)) (i64.store offset=0x2ce align=1 (i32.const 0) (local.get 0x2ce)) (i64.store offset=0x2cf align=1 (i32.const 0) (local.get 0x2cf)) (i64.store offset=0x2d0 align=1 (i32.const 0) (local.get 0x2d0)) (i64.store offset=0x2d1 align=1 (i32.const 0) (local.get 0x2d1)) (i64.store offset=0x2d2 align=1 (i32.const 0) (local.get 0x2d2)) (i64.store offset=0x2d3 align=1 (i32.const 0) (local.get 0x2d3)) (i64.store offset=0x2d4 align=1 (i32.const 0) (local.get 0x2d4)) (i64.store offset=0x2d5 align=1 (i32.const 0) (local.get 0x2d5)) (i64.store offset=0x2d6 align=1 (i32.const 0) (local.get 0x2d6)) (i64.store offset=0x2d7 align=1 (i32.const 0) (local.get 0x2d7)) (i64.store offset=0x2d8 align=1 (i32.const 0) (local.get 0x2d8)) (i64.store offset=0x2d9 align=1 (i32.const 0) (local.get 0x2d9)) (i64.store offset=0x2da align=1 (i32.const 0) (local.get 0x2da)) (i64.store offset=0x2db align=1 (i32.const 0) (local.get 0x2db)) (i64.store offset=0x2dc align=1 (i32.const 0) (local.get 0x2dc)) (i64.store offset=0x2dd align=1 (i32.const 0) (local.get 0x2dd)) (i64.store offset=0x2de align=1 (i32.const 0) (local.get 0x2de)) (i64.store offset=0x2df align=1 (i32.const 0) (local.get 0x2df)) (i64.store offset=0x2e0 align=1 (i32.const 0) (local.get 0x2e0)) (i64.store offset=0x2e1 align=1 (i32.const 0) (local.get 0x2e1)) (i64.store offset=0x2e2 align=1 (i32.const 0) (local.get 0x2e2)) (i64.store offset=0x2e3 align=1 (i32.const 0) (local.get 0x2e3)) (i64.store offset=0x2e4 align=1 (i32.const 0) (local.get 0x2e4)) (i64.store offset=0x2e5 align=1 (i32.const 0) (local.get 0x2e5)) (i64.store offset=0x2e6 align=1 (i32.const 0) (local.get 0x2e6)) (i64.store offset=0x2e7 align=1 (i32.const 0) (local.get 0x2e7)) (i64.store offset=0x2e8 align=1 (i32.const 0) (local.get 0x2e8)) (i64.store offset=0x2e9 align=1 (i32.const 0) (local.get 0x2e9)) (i64.store offset=0x2ea align=1 (i32.const 0) (local.get 0x2ea)) (i64.store offset=0x2eb align=1 (i32.const 0) (local.get 0x2eb)) (i64.store offset=0x2ec align=1 (i32.const 0) (local.get 0x2ec)) (i64.store offset=0x2ed align=1 (i32.const 0) (local.get 0x2ed)) (i64.store offset=0x2ee align=1 (i32.const 0) (local.get 0x2ee)) (i64.store offset=0x2ef align=1 (i32.const 0) (local.get 0x2ef)) (i64.store offset=0x2f0 align=1 (i32.const 0) (local.get 0x2f0)) (i64.store offset=0x2f1 align=1 (i32.const 0) (local.get 0x2f1)) (i64.store offset=0x2f2 align=1 (i32.const 0) (local.get 0x2f2)) (i64.store offset=0x2f3 align=1 (i32.const 0) (local.get 0x2f3)) (i64.store offset=0x2f4 align=1 (i32.const 0) (local.get 0x2f4)) (i64.store offset=0x2f5 align=1 (i32.const 0) (local.get 0x2f5)) (i64.store offset=0x2f6 align=1 (i32.const 0) (local.get 0x2f6)) (i64.store offset=0x2f7 align=1 (i32.const 0) (local.get 0x2f7)) (i64.store offset=0x2f8 align=1 (i32.const 0) (local.get 0x2f8)) (i64.store offset=0x2f9 align=1 (i32.const 0) (local.get 0x2f9)) (i64.store offset=0x2fa align=1 (i32.const 0) (local.get 0x2fa)) (i64.store offset=0x2fb align=1 (i32.const 0) (local.get 0x2fb)) (i64.store offset=0x2fc align=1 (i32.const 0) (local.get 0x2fc)) (i64.store offset=0x2fd align=1 (i32.const 0) (local.get 0x2fd)) (i64.store offset=0x2fe align=1 (i32.const 0) (local.get 0x2fe)) (i64.store offset=0x2ff align=1 (i32.const 0) (local.get 0x2ff)) (i64.store offset=0x300 align=1 (i32.const 0) (local.get 0x300)) (i64.store offset=0x301 align=1 (i32.const 0) (local.get 0x301)) (i64.store offset=0x302 align=1 (i32.const 0) (local.get 0x302)) (i64.store offset=0x303 align=1 (i32.const 0) (local.get 0x303)) (i64.store offset=0x304 align=1 (i32.const 0) (local.get 0x304)) (i64.store offset=0x305 align=1 (i32.const 0) (local.get 0x305)) (i64.store offset=0x306 align=1 (i32.const 0) (local.get 0x306)) (i64.store offset=0x307 align=1 (i32.const 0) (local.get 0x307)) (i64.store offset=0x308 align=1 (i32.const 0) (local.get 0x308)) (i64.store offset=0x309 align=1 (i32.const 0) (local.get 0x309)) (i64.store offset=0x30a align=1 (i32.const 0) (local.get 0x30a)) (i64.store offset=0x30b align=1 (i32.const 0) (local.get 0x30b)) (i64.store offset=0x30c align=1 (i32.const 0) (local.get 0x30c)) (i64.store offset=0x30d align=1 (i32.const 0) (local.get 0x30d)) (i64.store offset=0x30e align=1 (i32.const 0) (local.get 0x30e)) (i64.store offset=0x30f align=1 (i32.const 0) (local.get 0x30f)) (i64.store offset=0x310 align=1 (i32.const 0) (local.get 0x310)) (i64.store offset=0x311 align=1 (i32.const 0) (local.get 0x311)) (i64.store offset=0x312 align=1 (i32.const 0) (local.get 0x312)) (i64.store offset=0x313 align=1 (i32.const 0) (local.get 0x313)) (i64.store offset=0x314 align=1 (i32.const 0) (local.get 0x314)) (i64.store offset=0x315 align=1 (i32.const 0) (local.get 0x315)) (i64.store offset=0x316 align=1 (i32.const 0) (local.get 0x316)) (i64.store offset=0x317 align=1 (i32.const 0) (local.get 0x317)) (i64.store offset=0x318 align=1 (i32.const 0) (local.get 0x318)) (i64.store offset=0x319 align=1 (i32.const 0) (local.get 0x319)) (i64.store offset=0x31a align=1 (i32.const 0) (local.get 0x31a)) (i64.store offset=0x31b align=1 (i32.const 0) (local.get 0x31b)) (i64.store offset=0x31c align=1 (i32.const 0) (local.get 0x31c)) (i64.store offset=0x31d align=1 (i32.const 0) (local.get 0x31d)) (i64.store offset=0x31e align=1 (i32.const 0) (local.get 0x31e)) (i64.store offset=0x31f align=1 (i32.const 0) (local.get 0x31f)) (i64.store offset=0x320 align=1 (i32.const 0) (local.get 0x320)) (i64.store offset=0x321 align=1 (i32.const 0) (local.get 0x321)) (i64.store offset=0x322 align=1 (i32.const 0) (local.get 0x322)) (i64.store offset=0x323 align=1 (i32.const 0) (local.get 0x323)) (i64.store offset=0x324 align=1 (i32.const 0) (local.get 0x324)) (i64.store offset=0x325 align=1 (i32.const 0) (local.get 0x325)) (i64.store offset=0x326 align=1 (i32.const 0) (local.get 0x326)) (i64.store offset=0x327 align=1 (i32.const 0) (local.get 0x327)) (i64.store offset=0x328 align=1 (i32.const 0) (local.get 0x328)) (i64.store offset=0x329 align=1 (i32.const 0) (local.get 0x329)) (i64.store offset=0x32a align=1 (i32.const 0) (local.get 0x32a)) (i64.store offset=0x32b align=1 (i32.const 0) (local.get 0x32b)) (i64.store offset=0x32c align=1 (i32.const 0) (local.get 0x32c)) (i64.store offset=0x32d align=1 (i32.const 0) (local.get 0x32d)) (i64.store offset=0x32e align=1 (i32.const 0) (local.get 0x32e)) (i64.store offset=0x32f align=1 (i32.const 0) (local.get 0x32f)) (i64.store offset=0x330 align=1 (i32.const 0) (local.get 0x330)) (i64.store offset=0x331 align=1 (i32.const 0) (local.get 0x331)) (i64.store offset=0x332 align=1 (i32.const 0) (local.get 0x332)) (i64.store offset=0x333 align=1 (i32.const 0) (local.get 0x333)) (i64.store offset=0x334 align=1 (i32.const 0) (local.get 0x334)) (i64.store offset=0x335 align=1 (i32.const 0) (local.get 0x335)) (i64.store offset=0x336 align=1 (i32.const 0) (local.get 0x336)) (i64.store offset=0x337 align=1 (i32.const 0) (local.get 0x337)) (i64.store offset=0x338 align=1 (i32.const 0) (local.get 0x338)) (i64.store offset=0x339 align=1 (i32.const 0) (local.get 0x339)) (i64.store offset=0x33a align=1 (i32.const 0) (local.get 0x33a)) (i64.store offset=0x33b align=1 (i32.const 0) (local.get 0x33b)) (i64.store offset=0x33c align=1 (i32.const 0) (local.get 0x33c)) (i64.store offset=0x33d align=1 (i32.const 0) (local.get 0x33d)) (i64.store offset=0x33e align=1 (i32.const 0) (local.get 0x33e)) (i64.store offset=0x33f align=1 (i32.const 0) (local.get 0x33f)) (i64.store offset=0x340 align=1 (i32.const 0) (local.get 0x340)) (i64.store offset=0x341 align=1 (i32.const 0) (local.get 0x341)) (i64.store offset=0x342 align=1 (i32.const 0) (local.get 0x342)) (i64.store offset=0x343 align=1 (i32.const 0) (local.get 0x343)) (i64.store offset=0x344 align=1 (i32.const 0) (local.get 0x344)) (i64.store offset=0x345 align=1 (i32.const 0) (local.get 0x345)) (i64.store offset=0x346 align=1 (i32.const 0) (local.get 0x346)) (i64.store offset=0x347 align=1 (i32.const 0) (local.get 0x347)) (i64.store offset=0x348 align=1 (i32.const 0) (local.get 0x348)) (i64.store offset=0x349 align=1 (i32.const 0) (local.get 0x349)) (i64.store offset=0x34a align=1 (i32.const 0) (local.get 0x34a)) (i64.store offset=0x34b align=1 (i32.const 0) (local.get 0x34b)) (i64.store offset=0x34c align=1 (i32.const 0) (local.get 0x34c)) (i64.store offset=0x34d align=1 (i32.const 0) (local.get 0x34d)) (i64.store offset=0x34e align=1 (i32.const 0) (local.get 0x34e)) (i64.store offset=0x34f align=1 (i32.const 0) (local.get 0x34f)) (i64.store offset=0x350 align=1 (i32.const 0) (local.get 0x350)) (i64.store offset=0x351 align=1 (i32.const 0) (local.get 0x351)) (i64.store offset=0x352 align=1 (i32.const 0) (local.get 0x352)) (i64.store offset=0x353 align=1 (i32.const 0) (local.get 0x353)) (i64.store offset=0x354 align=1 (i32.const 0) (local.get 0x354)) (i64.store offset=0x355 align=1 (i32.const 0) (local.get 0x355)) (i64.store offset=0x356 align=1 (i32.const 0) (local.get 0x356)) (i64.store offset=0x357 align=1 (i32.const 0) (local.get 0x357)) (i64.store offset=0x358 align=1 (i32.const 0) (local.get 0x358)) (i64.store offset=0x359 align=1 (i32.const 0) (local.get 0x359)) (i64.store offset=0x35a align=1 (i32.const 0) (local.get 0x35a)) (i64.store offset=0x35b align=1 (i32.const 0) (local.get 0x35b)) (i64.store offset=0x35c align=1 (i32.const 0) (local.get 0x35c)) (i64.store offset=0x35d align=1 (i32.const 0) (local.get 0x35d)) (i64.store offset=0x35e align=1 (i32.const 0) (local.get 0x35e)) (i64.store offset=0x35f align=1 (i32.const 0) (local.get 0x35f)) (i64.store offset=0x360 align=1 (i32.const 0) (local.get 0x360)) (i64.store offset=0x361 align=1 (i32.const 0) (local.get 0x361)) (i64.store offset=0x362 align=1 (i32.const 0) (local.get 0x362)) (i64.store offset=0x363 align=1 (i32.const 0) (local.get 0x363)) (i64.store offset=0x364 align=1 (i32.const 0) (local.get 0x364)) (i64.store offset=0x365 align=1 (i32.const 0) (local.get 0x365)) (i64.store offset=0x366 align=1 (i32.const 0) (local.get 0x366)) (i64.store offset=0x367 align=1 (i32.const 0) (local.get 0x367)) (i64.store offset=0x368 align=1 (i32.const 0) (local.get 0x368)) (i64.store offset=0x369 align=1 (i32.const 0) (local.get 0x369)) (i64.store offset=0x36a align=1 (i32.const 0) (local.get 0x36a)) (i64.store offset=0x36b align=1 (i32.const 0) (local.get 0x36b)) (i64.store offset=0x36c align=1 (i32.const 0) (local.get 0x36c)) (i64.store offset=0x36d align=1 (i32.const 0) (local.get 0x36d)) (i64.store offset=0x36e align=1 (i32.const 0) (local.get 0x36e)) (i64.store offset=0x36f align=1 (i32.const 0) (local.get 0x36f)) (i64.store offset=0x370 align=1 (i32.const 0) (local.get 0x370)) (i64.store offset=0x371 align=1 (i32.const 0) (local.get 0x371)) (i64.store offset=0x372 align=1 (i32.const 0) (local.get 0x372)) (i64.store offset=0x373 align=1 (i32.const 0) (local.get 0x373)) (i64.store offset=0x374 align=1 (i32.const 0) (local.get 0x374)) (i64.store offset=0x375 align=1 (i32.const 0) (local.get 0x375)) (i64.store offset=0x376 align=1 (i32.const 0) (local.get 0x376)) (i64.store offset=0x377 align=1 (i32.const 0) (local.get 0x377)) (i64.store offset=0x378 align=1 (i32.const 0) (local.get 0x378)) (i64.store offset=0x379 align=1 (i32.const 0) (local.get 0x379)) (i64.store offset=0x37a align=1 (i32.const 0) (local.get 0x37a)) (i64.store offset=0x37b align=1 (i32.const 0) (local.get 0x37b)) (i64.store offset=0x37c align=1 (i32.const 0) (local.get 0x37c)) (i64.store offset=0x37d align=1 (i32.const 0) (local.get 0x37d)) (i64.store offset=0x37e align=1 (i32.const 0) (local.get 0x37e)) (i64.store offset=0x37f align=1 (i32.const 0) (local.get 0x37f)) (i64.store offset=0x380 align=1 (i32.const 0) (local.get 0x380)) (i64.store offset=0x381 align=1 (i32.const 0) (local.get 0x381)) (i64.store offset=0x382 align=1 (i32.const 0) (local.get 0x382)) (i64.store offset=0x383 align=1 (i32.const 0) (local.get 0x383)) (i64.store offset=0x384 align=1 (i32.const 0) (local.get 0x384)) (i64.store offset=0x385 align=1 (i32.const 0) (local.get 0x385)) (i64.store offset=0x386 align=1 (i32.const 0) (local.get 0x386)) (i64.store offset=0x387 align=1 (i32.const 0) (local.get 0x387)) (i64.store offset=0x388 align=1 (i32.const 0) (local.get 0x388)) (i64.store offset=0x389 align=1 (i32.const 0) (local.get 0x389)) (i64.store offset=0x38a align=1 (i32.const 0) (local.get 0x38a)) (i64.store offset=0x38b align=1 (i32.const 0) (local.get 0x38b)) (i64.store offset=0x38c align=1 (i32.const 0) (local.get 0x38c)) (i64.store offset=0x38d align=1 (i32.const 0) (local.get 0x38d)) (i64.store offset=0x38e align=1 (i32.const 0) (local.get 0x38e)) (i64.store offset=0x38f align=1 (i32.const 0) (local.get 0x38f)) (i64.store offset=0x390 align=1 (i32.const 0) (local.get 0x390)) (i64.store offset=0x391 align=1 (i32.const 0) (local.get 0x391)) (i64.store offset=0x392 align=1 (i32.const 0) (local.get 0x392)) (i64.store offset=0x393 align=1 (i32.const 0) (local.get 0x393)) (i64.store offset=0x394 align=1 (i32.const 0) (local.get 0x394)) (i64.store offset=0x395 align=1 (i32.const 0) (local.get 0x395)) (i64.store offset=0x396 align=1 (i32.const 0) (local.get 0x396)) (i64.store offset=0x397 align=1 (i32.const 0) (local.get 0x397)) (i64.store offset=0x398 align=1 (i32.const 0) (local.get 0x398)) (i64.store offset=0x399 align=1 (i32.const 0) (local.get 0x399)) (i64.store offset=0x39a align=1 (i32.const 0) (local.get 0x39a)) (i64.store offset=0x39b align=1 (i32.const 0) (local.get 0x39b)) (i64.store offset=0x39c align=1 (i32.const 0) (local.get 0x39c)) (i64.store offset=0x39d align=1 (i32.const 0) (local.get 0x39d)) (i64.store offset=0x39e align=1 (i32.const 0) (local.get 0x39e)) (i64.store offset=0x39f align=1 (i32.const 0) (local.get 0x39f)) (i64.store offset=0x3a0 align=1 (i32.const 0) (local.get 0x3a0)) (i64.store offset=0x3a1 align=1 (i32.const 0) (local.get 0x3a1)) (i64.store offset=0x3a2 align=1 (i32.const 0) (local.get 0x3a2)) (i64.store offset=0x3a3 align=1 (i32.const 0) (local.get 0x3a3)) (i64.store offset=0x3a4 align=1 (i32.const 0) (local.get 0x3a4)) (i64.store offset=0x3a5 align=1 (i32.const 0) (local.get 0x3a5)) (i64.store offset=0x3a6 align=1 (i32.const 0) (local.get 0x3a6)) (i64.store offset=0x3a7 align=1 (i32.const 0) (local.get 0x3a7)) (i64.store offset=0x3a8 align=1 (i32.const 0) (local.get 0x3a8)) (i64.store offset=0x3a9 align=1 (i32.const 0) (local.get 0x3a9)) (i64.store offset=0x3aa align=1 (i32.const 0) (local.get 0x3aa)) (i64.store offset=0x3ab align=1 (i32.const 0) (local.get 0x3ab)) (i64.store offset=0x3ac align=1 (i32.const 0) (local.get 0x3ac)) (i64.store offset=0x3ad align=1 (i32.const 0) (local.get 0x3ad)) (i64.store offset=0x3ae align=1 (i32.const 0) (local.get 0x3ae)) (i64.store offset=0x3af align=1 (i32.const 0) (local.get 0x3af)) (i64.store offset=0x3b0 align=1 (i32.const 0) (local.get 0x3b0)) (i64.store offset=0x3b1 align=1 (i32.const 0) (local.get 0x3b1)) (i64.store offset=0x3b2 align=1 (i32.const 0) (local.get 0x3b2)) (i64.store offset=0x3b3 align=1 (i32.const 0) (local.get 0x3b3)) (i64.store offset=0x3b4 align=1 (i32.const 0) (local.get 0x3b4)) (i64.store offset=0x3b5 align=1 (i32.const 0) (local.get 0x3b5)) (i64.store offset=0x3b6 align=1 (i32.const 0) (local.get 0x3b6)) (i64.store offset=0x3b7 align=1 (i32.const 0) (local.get 0x3b7)) (i64.store offset=0x3b8 align=1 (i32.const 0) (local.get 0x3b8)) (i64.store offset=0x3b9 align=1 (i32.const 0) (local.get 0x3b9)) (i64.store offset=0x3ba align=1 (i32.const 0) (local.get 0x3ba)) (i64.store offset=0x3bb align=1 (i32.const 0) (local.get 0x3bb)) (i64.store offset=0x3bc align=1 (i32.const 0) (local.get 0x3bc)) (i64.store offset=0x3bd align=1 (i32.const 0) (local.get 0x3bd)) (i64.store offset=0x3be align=1 (i32.const 0) (local.get 0x3be)) (i64.store offset=0x3bf align=1 (i32.const 0) (local.get 0x3bf)) (i64.store offset=0x3c0 align=1 (i32.const 0) (local.get 0x3c0)) (i64.store offset=0x3c1 align=1 (i32.const 0) (local.get 0x3c1)) (i64.store offset=0x3c2 align=1 (i32.const 0) (local.get 0x3c2)) (i64.store offset=0x3c3 align=1 (i32.const 0) (local.get 0x3c3)) (i64.store offset=0x3c4 align=1 (i32.const 0) (local.get 0x3c4)) (i64.store offset=0x3c5 align=1 (i32.const 0) (local.get 0x3c5)) (i64.store offset=0x3c6 align=1 (i32.const 0) (local.get 0x3c6)) (i64.store offset=0x3c7 align=1 (i32.const 0) (local.get 0x3c7)) (i64.store offset=0x3c8 align=1 (i32.const 0) (local.get 0x3c8)) (i64.store offset=0x3c9 align=1 (i32.const 0) (local.get 0x3c9)) (i64.store offset=0x3ca align=1 (i32.const 0) (local.get 0x3ca)) (i64.store offset=0x3cb align=1 (i32.const 0) (local.get 0x3cb)) (i64.store offset=0x3cc align=1 (i32.const 0) (local.get 0x3cc)) (i64.store offset=0x3cd align=1 (i32.const 0) (local.get 0x3cd)) (i64.store offset=0x3ce align=1 (i32.const 0) (local.get 0x3ce)) (i64.store offset=0x3cf align=1 (i32.const 0) (local.get 0x3cf)) (i64.store offset=0x3d0 align=1 (i32.const 0) (local.get 0x3d0)) (i64.store offset=0x3d1 align=1 (i32.const 0) (local.get 0x3d1)) (i64.store offset=0x3d2 align=1 (i32.const 0) (local.get 0x3d2)) (i64.store offset=0x3d3 align=1 (i32.const 0) (local.get 0x3d3)) (i64.store offset=0x3d4 align=1 (i32.const 0) (local.get 0x3d4)) (i64.store offset=0x3d5 align=1 (i32.const 0) (local.get 0x3d5)) (i64.store offset=0x3d6 align=1 (i32.const 0) (local.get 0x3d6)) (i64.store offset=0x3d7 align=1 (i32.const 0) (local.get 0x3d7)) (i64.store offset=0x3d8 align=1 (i32.const 0) (local.get 0x3d8)) (i64.store offset=0x3d9 align=1 (i32.const 0) (local.get 0x3d9)) (i64.store offset=0x3da align=1 (i32.const 0) (local.get 0x3da)) (i64.store offset=0x3db align=1 (i32.const 0) (local.get 0x3db)) (i64.store offset=0x3dc align=1 (i32.const 0) (local.get 0x3dc)) (i64.store offset=0x3dd align=1 (i32.const 0) (local.get 0x3dd)) (i64.store offset=0x3de align=1 (i32.const 0) (local.get 0x3de)) (i64.store offset=0x3df align=1 (i32.const 0) (local.get 0x3df)) (i64.store offset=0x3e0 align=1 (i32.const 0) (local.get 0x3e0)) (i64.store offset=0x3e1 align=1 (i32.const 0) (local.get 0x3e1)) (i64.store offset=0x3e2 align=1 (i32.const 0) (local.get 0x3e2)) (i64.store offset=0x3e3 align=1 (i32.const 0) (local.get 0x3e3)) (i64.store offset=0x3e4 align=1 (i32.const 0) (local.get 0x3e4)) (i64.store offset=0x3e5 align=1 (i32.const 0) (local.get 0x3e5)) (i64.store offset=0x3e6 align=1 (i32.const 0) (local.get 0x3e6)) (i64.store offset=0x3e7 align=1 (i32.const 0) (local.get 0x3e7)) (i64.store offset=0x3e8 align=1 (i32.const 0) (local.get 0x3e8)) (i64.store offset=0x3e9 align=1 (i32.const 0) (local.get 0x3e9)) (i64.store offset=0x3ea align=1 (i32.const 0) (local.get 0x3ea)) (i64.store offset=0x3eb align=1 (i32.const 0) (local.get 0x3eb)) (i64.store offset=0x3ec align=1 (i32.const 0) (local.get 0x3ec)) (i64.store offset=0x3ed align=1 (i32.const 0) (local.get 0x3ed)) (i64.store offset=0x3ee align=1 (i32.const 0) (local.get 0x3ee)) (i64.store offset=0x3ef align=1 (i32.const 0) (local.get 0x3ef)) (i64.store offset=0x3f0 align=1 (i32.const 0) (local.get 0x3f0)) (i64.store offset=0x3f1 align=1 (i32.const 0) (local.get 0x3f1)) (i64.store offset=0x3f2 align=1 (i32.const 0) (local.get 0x3f2)) (i64.store offset=0x3f3 align=1 (i32.const 0) (local.get 0x3f3)) (i64.store offset=0x3f4 align=1 (i32.const 0) (local.get 0x3f4)) (i64.store offset=0x3f5 align=1 (i32.const 0) (local.get 0x3f5)) (i64.store offset=0x3f6 align=1 (i32.const 0) (local.get 0x3f6)) (i64.store offset=0x3f7 align=1 (i32.const 0) (local.get 0x3f7)) (i64.store offset=0x3f8 align=1 (i32.const 0) (local.get 0x3f8)) (i64.store offset=0x3f9 align=1 (i32.const 0) (local.get 0x3f9)) (i64.store offset=0x3fa align=1 (i32.const 0) (local.get 0x3fa)) (i64.store offset=0x3fb align=1 (i32.const 0) (local.get 0x3fb)) (i64.store offset=0x3fc align=1 (i32.const 0) (local.get 0x3fc)) (i64.store offset=0x3fd align=1 (i32.const 0) (local.get 0x3fd)) (i64.store offset=0x3fe align=1 (i32.const 0) (local.get 0x3fe)) (i64.store offset=0x3ff align=1 (i32.const 0) (local.get 0x3ff)) (i64.store offset=0x400 align=1 (i32.const 0) (local.get 0x400)) (i64.store offset=0x401 align=1 (i32.const 0) (local.get 0x401)) (i64.store offset=0x402 align=1 (i32.const 0) (local.get 0x402)) (i64.store offset=0x403 align=1 (i32.const 0) (local.get 0x403)) (i64.store offset=0x404 align=1 (i32.const 0) (local.get 0x404)) (i64.store offset=0x405 align=1 (i32.const 0) (local.get 0x405)) (i64.store offset=0x406 align=1 (i32.const 0) (local.get 0x406)) (i64.store offset=0x407 align=1 (i32.const 0) (local.get 0x407)) (i64.store offset=0x408 align=1 (i32.const 0) (local.get 0x408)) (i64.store offset=0x409 align=1 (i32.const 0) (local.get 0x409)) (i64.store offset=0x40a align=1 (i32.const 0) (local.get 0x40a)) (i64.store offset=0x40b align=1 (i32.const 0) (local.get 0x40b)) (i64.store offset=0x40c align=1 (i32.const 0) (local.get 0x40c)) (i64.store offset=0x40d align=1 (i32.const 0) (local.get 0x40d)) (i64.store offset=0x40e align=1 (i32.const 0) (local.get 0x40e)) (i64.store offset=0x40f align=1 (i32.const 0) (local.get 0x40f)) (i64.store offset=0x410 align=1 (i32.const 0) (local.get 0x410)) (i64.store offset=0x411 align=1 (i32.const 0) (local.get 0x411)) (i64.store offset=0x412 align=1 (i32.const 0) (local.get 0x412)) (i64.store offset=0x413 align=1 (i32.const 0) (local.get 0x413)) (i64.store offset=0x414 align=1 (i32.const 0) (local.get 0x414)) (i64.store offset=0x415 align=1 (i32.const 0) (local.get 0x415)) (i64.store offset=0x416 align=1 (i32.const 0) (local.get 0x416)) (i64.store offset=0x417 align=1 (i32.const 0) (local.get 0x417)) (i64.store offset=0x418 align=1 (i32.const 0) (local.get 0x418)) (i64.store offset=0x419 align=1 (i32.const 0) (local.get 0x419)) (i64.store offset=0x41a align=1 (i32.const 0) (local.get 0x41a)) (i64.store offset=0x41b align=1 (i32.const 0) (local.get 0x41b)) (i64.store offset=0x41c align=1 (i32.const 0) (local.get 0x41c)) (i64.store offset=0x41d align=1 (i32.const 0) (local.get 0x41d)) (i64.store offset=0x41e align=1 (i32.const 0) (local.get 0x41e)) (i64.store offset=0x41f align=1 (i32.const 0) (local.get 0x41f)) ) ) (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/multi-memory/stack.wast ================================================ (module (func (export "fac-expr") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.get $n) (local.set $i) (i64.const 1) (local.set $res) (block $done (loop $loop (local.get $i) (i64.const 0) (i64.eq) (if (then (br $done)) (else (local.get $i) (local.get $res) (i64.mul) (local.set $res) (local.get $i) (i64.const 1) (i64.sub) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) local.get $n local.set $i i64.const 1 local.set $res block $done loop $loop local.get $i i64.const 0 i64.eq if $body br $done else $body local.get $i local.get $res i64.mul local.set $res local.get $i i64.const 1 i64.sub local.set $i end $body br $loop end $loop end $done local.get $res ) (func (export "fac-mixed") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (i64.eq (local.get $i) (i64.const 0)) (if (then (br $done)) (else (i64.mul (local.get $i) (local.get $res)) (local.set $res) (i64.sub (local.get $i) (i64.const 1)) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-mixed-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) block $done loop $loop (i64.eq (local.get $i) (i64.const 0)) if br $done else (i64.mul (local.get $i) (local.get $res)) local.set $res (i64.sub (local.get $i) (i64.const 1)) local.set $i end br $loop end end local.get $res ) (global $temp (mut i32) (i32.const 0)) (func $add_one_to_global (result i32) (local i32) (global.set $temp (i32.add (i32.const 1) (global.get $temp))) (global.get $temp) ) (func $add_one_to_global_and_drop (drop (call $add_one_to_global)) ) (func (export "not-quite-a-tree") (result i32) call $add_one_to_global call $add_one_to_global call $add_one_to_global_and_drop i32.add ) ) (assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "not-quite-a-tree") (i32.const 3)) (assert_return (invoke "not-quite-a-tree") (i32.const 9)) ;; Syntax of flat call_indirect (module (type $proc (func)) (table 1 funcref) (func (block i32.const 0 call_indirect) (loop i32.const 0 call_indirect) (if (i32.const 0) (then i32.const 0 call_indirect)) (if (i32.const 0) (then i32.const 0 call_indirect) (else i32.const 0 call_indirect) ) (block i32.const 0 call_indirect (type $proc)) (loop i32.const 0 call_indirect (type $proc)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc))) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)) (else i32.const 0 call_indirect (type $proc)) ) (block i32.const 0 i32.const 0 call_indirect (param i32)) (loop i32.const 0 i32.const 0 call_indirect (param i32)) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32))) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)) (else i32.const 0 i32.const 0 call_indirect (param i32)) ) (block (result i32) i32.const 0 call_indirect (result i32)) (drop) (loop (result i32) i32.const 0 call_indirect (result i32)) (drop) (if (result i32) (i32.const 0) (then i32.const 0 call_indirect (result i32)) (else i32.const 0 call_indirect (result i32)) ) (drop) (block i32.const 0 call_indirect (type $proc) (param) (result)) (loop i32.const 0 call_indirect (type $proc) (param) (result)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (result)) ) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (param) (result)) (else i32.const 0 call_indirect (type $proc) (param) (result) (result)) ) block i32.const 0 call_indirect end loop i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end block i32.const 0 call_indirect (type $proc) end loop i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) else i32.const 0 call_indirect (type $proc) end block i32.const 0 i32.const 0 call_indirect (param i32) end loop i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) else i32.const 0 i32.const 0 call_indirect (param i32) end block (result i32) i32.const 0 call_indirect (result i32) end drop loop (result i32) i32.const 0 call_indirect (result i32) end drop i32.const 0 if (result i32) i32.const 0 call_indirect (result i32) else i32.const 0 call_indirect (result i32) end drop block i32.const 0 call_indirect (type $proc) (param) (result) end loop i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) else i32.const 0 call_indirect (type $proc) (param) (param) (result) (result) end i32.const 0 call_indirect ) ) ================================================ FILE: Test/WebAssembly/multi-memory/start.wast ================================================ (assert_invalid (module (func) (start 1)) "unknown function" ) (assert_invalid (module (func $main (result i32) (return (i32.const 0))) (start $main) ) "start function" ) (assert_invalid (module (func $main (param $a i32)) (start $main) ) "start function" ) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start $main) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start 2) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 1))) (start 1) ) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 2))) (start $main) ) (module (func $print (import "spectest" "print")) (start $print) ) (assert_trap (module (func $main (unreachable)) (start $main)) "unreachable" ) (assert_malformed (module quote "(module (func $a (unreachable)) (func $b (unreachable)) (start $a) (start $b))") "multiple start sections" ) ================================================ FILE: Test/WebAssembly/multi-memory/store.wast ================================================ ;; Multiple memories (module (memory $mem1 1) (memory $mem2 1) (func (export "load1") (param i32) (result i64) (i64.load $mem1 (local.get 0)) ) (func (export "load2") (param i32) (result i64) (i64.load $mem2 (local.get 0)) ) (func (export "store1") (param i32 i64) (i64.store $mem1 (local.get 0) (local.get 1)) ) (func (export "store2") (param i32 i64) (i64.store $mem2 (local.get 0) (local.get 1)) ) ) (invoke "store1" (i32.const 0) (i64.const 1)) (invoke "store2" (i32.const 0) (i64.const 2)) (assert_return (invoke "load1" (i32.const 0)) (i64.const 1)) (assert_return (invoke "load2" (i32.const 0)) (i64.const 2)) (module $M1 (memory (export "mem") 1) (func (export "load") (param i32) (result i64) (i64.load (local.get 0)) ) (func (export "store") (param i32 i64) (i64.store (local.get 0) (local.get 1)) ) ) (register "M1") (module $M2 (memory (export "mem") 1) (func (export "load") (param i32) (result i64) (i64.load (local.get 0)) ) (func (export "store") (param i32 i64) (i64.store (local.get 0) (local.get 1)) ) ) (register "M2") (invoke $M1 "store" (i32.const 0) (i64.const 1)) (invoke $M2 "store" (i32.const 0) (i64.const 2)) (assert_return (invoke $M1 "load" (i32.const 0)) (i64.const 1)) (assert_return (invoke $M2 "load" (i32.const 0)) (i64.const 2)) (module (memory $mem1 (import "M1" "mem") 1) (memory $mem2 (import "M2" "mem") 1) (func (export "load1") (param i32) (result i64) (i64.load $mem1 (local.get 0)) ) (func (export "load2") (param i32) (result i64) (i64.load $mem2 (local.get 0)) ) (func (export "store1") (param i32 i64) (i64.store $mem1 (local.get 0) (local.get 1)) ) (func (export "store2") (param i32 i64) (i64.store $mem2 (local.get 0) (local.get 1)) ) ) (invoke "store1" (i32.const 0) (i64.const 1)) (invoke "store2" (i32.const 0) (i64.const 2)) (assert_return (invoke "load1" (i32.const 0)) (i64.const 1)) (assert_return (invoke "load2" (i32.const 0)) (i64.const 2)) (module (memory (export "mem") 2) ) (register "M") (module (memory $mem1 (import "M" "mem") 2) (memory $mem2 3) (data (memory $mem1) (i32.const 20) "\01\02\03\04\05") (data (memory $mem2) (i32.const 50) "\0A\0B\0C\0D\0E") (func (export "read1") (param i32) (result i32) (i32.load8_u $mem1 (local.get 0)) ) (func (export "read2") (param i32) (result i32) (i32.load8_u $mem2 (local.get 0)) ) (func (export "copy-1-to-2") (local $i i32) (local.set $i (i32.const 20)) (loop $cont (br_if 1 (i32.eq (local.get $i) (i32.const 23))) (i32.store8 $mem2 (local.get $i) (i32.load8_u $mem1 (local.get $i))) (local.set $i (i32.add (local.get $i) (i32.const 1))) (br $cont) ) ) (func (export "copy-2-to-1") (local $i i32) (local.set $i (i32.const 50)) (loop $cont (br_if 1 (i32.eq (local.get $i) (i32.const 54))) (i32.store8 $mem1 (local.get $i) (i32.load8_u $mem2 (local.get $i))) (local.set $i (i32.add (local.get $i) (i32.const 1))) (br $cont) ) ) ) (assert_return (invoke "read2" (i32.const 20)) (i32.const 0)) (assert_return (invoke "read2" (i32.const 21)) (i32.const 0)) (assert_return (invoke "read2" (i32.const 22)) (i32.const 0)) (assert_return (invoke "read2" (i32.const 23)) (i32.const 0)) (assert_return (invoke "read2" (i32.const 24)) (i32.const 0)) (invoke "copy-1-to-2") (assert_return (invoke "read2" (i32.const 20)) (i32.const 1)) (assert_return (invoke "read2" (i32.const 21)) (i32.const 2)) (assert_return (invoke "read2" (i32.const 22)) (i32.const 3)) (assert_return (invoke "read2" (i32.const 23)) (i32.const 0)) (assert_return (invoke "read2" (i32.const 24)) (i32.const 0)) (assert_return (invoke "read1" (i32.const 50)) (i32.const 0)) (assert_return (invoke "read1" (i32.const 51)) (i32.const 0)) (assert_return (invoke "read1" (i32.const 52)) (i32.const 0)) (assert_return (invoke "read1" (i32.const 53)) (i32.const 0)) (assert_return (invoke "read1" (i32.const 54)) (i32.const 0)) (invoke "copy-2-to-1") (assert_return (invoke "read1" (i32.const 50)) (i32.const 10)) (assert_return (invoke "read1" (i32.const 51)) (i32.const 11)) (assert_return (invoke "read1" (i32.const 52)) (i32.const 12)) (assert_return (invoke "read1" (i32.const 53)) (i32.const 13)) (assert_return (invoke "read1" (i32.const 54)) (i32.const 0)) ;; Store operator as the argument of control constructs and instructions (module (memory 1) (func (export "as-block-value") (block (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-loop-value") (loop (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-br-value") (block (br 0 (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-br_if-value") (block (br_if 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-br_if-value-cond") (block (br_if 0 (i32.const 6) (i32.store (i32.const 0) (i32.const 1))) ) ) (func (export "as-br_table-value") (block (br_table 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-return-value") (return (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-if-then") (if (i32.const 1) (then (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-if-else") (if (i32.const 0) (then) (else (i32.store (i32.const 0) (i32.const 1)))) ) ) (assert_return (invoke "as-block-value")) (assert_return (invoke "as-loop-value")) (assert_return (invoke "as-br-value")) (assert_return (invoke "as-br_if-value")) (assert_return (invoke "as-br_if-value-cond")) (assert_return (invoke "as-br_table-value")) (assert_return (invoke "as-return-value")) (assert_return (invoke "as-if-then")) (assert_return (invoke "as-if-else")) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store32 (local.get 0) (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i64.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) ;; store should have no retval (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty (i32.const 0) (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-block (i32.const 0) (i32.const 0) (block (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-block (i32.const 0) (block (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-else (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-return (return (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-return (return (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-select (select (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-select (select (i32.const 0) (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-call (call 1 (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-call (call 1 (i32.const 0) (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-address-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/multi-memory/switch.wast ================================================ (module ;; Statement switch (func (export "stmt") (param $i i32) (result i32) (local $j i32) (local.set $j (i32.const 100)) (block $switch (block $7 (block $default (block $6 (block $5 (block $4 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (local.get $i) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (local.set $j (i32.sub (i32.const 0) (local.get $i))) (br $switch) ) ;; 4 (br $switch) ) ;; 5 (local.set $j (i32.const 101)) (br $switch) ) ;; 6 (local.set $j (i32.const 101)) ;; fallthrough ) ;; default (local.set $j (i32.const 102)) ) ;; 7 ;; fallthrough ) (return (local.get $j)) ) ;; Expression switch (func (export "expr") (param $i i64) (result i64) (local $j i64) (local.set $j (i64.const 100)) (return (block $switch (result i64) (block $7 (block $default (block $4 (block $5 (block $6 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (i32.wrap_i64 (local.get $i)) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (br $switch (i64.sub (i64.const 0) (local.get $i))) ) ;; 6 (local.set $j (i64.const 101)) ;; fallthrough ) ;; 4 ;; fallthrough ) ;; 5 ;; fallthrough ) ;; default (br $switch (local.get $j)) ) ;; 7 (i64.const -5) ) ) ) ;; Argument switch (func (export "arg") (param $i i32) (result i32) (return (block $2 (result i32) (i32.add (i32.const 10) (block $1 (result i32) (i32.add (i32.const 100) (block $0 (result i32) (i32.add (i32.const 1000) (block $default (result i32) (br_table $0 $1 $2 $default (i32.mul (i32.const 2) (local.get $i)) (i32.and (i32.const 3) (local.get $i)) ) ) ) ) ) ) ) ) ) ) ;; Corner cases (func (export "corner") (result i32) (block (br_table 0 (i32.const 0)) ) (i32.const 1) ) ) (assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) (assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) (assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) (assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) (assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) (assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) (assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) (assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) (assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) (assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) (assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) (assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) (assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) (assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) (assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) (assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) (assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) (assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) (assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) (assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) (assert_return (invoke "corner") (i32.const 1)) (assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") ================================================ FILE: Test/WebAssembly/multi-memory/table-sub.wast ================================================ (assert_invalid (module (table $t1 10 funcref) (table $t2 10 externref) (func $f (table.copy $t1 $t2 (i32.const 0) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 funcref) (elem $el externref) (func $f (table.init $t $el (i32.const 0) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/table.wast ================================================ ;; Test table section structure (module (table 0 funcref)) (module (table 1 funcref)) (module (table 0 0 funcref)) (module (table 0 1 funcref)) (module (table 1 256 funcref)) (module (table 0 65536 funcref)) (module (table 0 0xffff_ffff funcref)) (module (table 0 funcref) (table 0 funcref)) (module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table") (assert_invalid (module (table 1 0 funcref)) "size minimum must not be greater than maximum" ) (assert_invalid (module (table 0xffff_ffff 0 funcref)) "size minimum must not be greater than maximum" ) (assert_malformed (module quote "(table 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0x1_0000_0000 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0 0x1_0000_0000 funcref)") "i32 constant out of range" ) ;; Duplicate table identifiers (assert_malformed (module quote "(table $foo 1 funcref)" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(import \"\" \"\" (table $foo 1 funcref))") "duplicate table") ================================================ FILE: Test/WebAssembly/multi-memory/table_copy.wast ================================================ ;; ;; Generated by ../meta/generate_table_copy.js ;; DO NOT EDIT THIS FILE. CHANGE THE SOURCE AND REGENERATE. ;; (module (func (export "ef0") (result i32) (i32.const 0)) (func (export "ef1") (result i32) (i32.const 1)) (func (export "ef2") (result i32) (i32.const 2)) (func (export "ef3") (result i32) (i32.const 3)) (func (export "ef4") (result i32) (i32.const 4)) ) (register "a") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (nop)) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 13) (i32.const 2) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 25) (i32.const 15) (i32.const 2))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 13) (i32.const 25) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 14)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 20) (i32.const 22) (i32.const 4))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 25) (i32.const 1) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 27)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 10) (i32.const 12) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 10)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 11)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 12) (i32.const 10) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 12)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 17)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 18)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t0 (i32.const 10) (i32.const 0) (i32.const 20))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 4)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 1)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 22)) (i32.const 7)) (assert_return (invoke "check_t1" (i32.const 23)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 24)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (nop)) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 13) (i32.const 2) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 25) (i32.const 15) (i32.const 2))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 13) (i32.const 25) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 14)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 20) (i32.const 22) (i32.const 4))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 25) (i32.const 1) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 27)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 10) (i32.const 12) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 10)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 11)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 12) (i32.const 10) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 12)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 17)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 18)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t1 (i32.const 10) (i32.const 0) (i32.const 20))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 4)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 1)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 22)) (i32.const 7)) (assert_return (invoke "check_t1" (i32.const 23)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 24)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 28) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 25) (i32.const 6)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 25) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 30) (i32.const 15) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 31) (i32.const 15) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 30) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 31) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 28) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 25) (i32.const 6)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 25) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 30) (i32.const 15) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 31) (i32.const 15) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 30) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 31) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 0) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 0) (i32.const 16)) "out of bounds table access") (assert_return (invoke "test" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test" (i32.const 2)) (i32.const 2)) (assert_return (invoke "test" (i32.const 3)) (i32.const 3)) (assert_return (invoke "test" (i32.const 4)) (i32.const 4)) (assert_return (invoke "test" (i32.const 5)) (i32.const 5)) (assert_return (invoke "test" (i32.const 6)) (i32.const 6)) (assert_return (invoke "test" (i32.const 7)) (i32.const 7)) (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 0) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 23) (i32.const 0) (i32.const 15)) "out of bounds table access") (assert_return (invoke "test" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test" (i32.const 2)) (i32.const 2)) (assert_return (invoke "test" (i32.const 3)) (i32.const 3)) (assert_return (invoke "test" (i32.const 4)) (i32.const 4)) (assert_return (invoke "test" (i32.const 5)) (i32.const 5)) (assert_return (invoke "test" (i32.const 6)) (i32.const 6)) (assert_return (invoke "test" (i32.const 7)) (i32.const 7)) (assert_return (invoke "test" (i32.const 8)) (i32.const 8)) (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 24) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_return (invoke "test" (i32.const 24)) (i32.const 0)) (assert_return (invoke "test" (i32.const 25)) (i32.const 1)) (assert_return (invoke "test" (i32.const 26)) (i32.const 2)) (assert_return (invoke "test" (i32.const 27)) (i32.const 3)) (assert_return (invoke "test" (i32.const 28)) (i32.const 4)) (assert_return (invoke "test" (i32.const 29)) (i32.const 5)) (assert_return (invoke "test" (i32.const 30)) (i32.const 6)) (assert_return (invoke "test" (i32.const 31)) (i32.const 7)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 23) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 23) (i32.const 15)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_return (invoke "test" (i32.const 23)) (i32.const 0)) (assert_return (invoke "test" (i32.const 24)) (i32.const 1)) (assert_return (invoke "test" (i32.const 25)) (i32.const 2)) (assert_return (invoke "test" (i32.const 26)) (i32.const 3)) (assert_return (invoke "test" (i32.const 27)) (i32.const 4)) (assert_return (invoke "test" (i32.const 28)) (i32.const 5)) (assert_return (invoke "test" (i32.const 29)) (i32.const 6)) (assert_return (invoke "test" (i32.const 30)) (i32.const 7)) (assert_return (invoke "test" (i32.const 31)) (i32.const 8)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 11) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 11) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_return (invoke "test" (i32.const 11)) (i32.const 0)) (assert_return (invoke "test" (i32.const 12)) (i32.const 1)) (assert_return (invoke "test" (i32.const 13)) (i32.const 2)) (assert_return (invoke "test" (i32.const 14)) (i32.const 3)) (assert_return (invoke "test" (i32.const 15)) (i32.const 4)) (assert_return (invoke "test" (i32.const 16)) (i32.const 5)) (assert_return (invoke "test" (i32.const 17)) (i32.const 6)) (assert_return (invoke "test" (i32.const 18)) (i32.const 7)) (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 24) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 11) (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_return (invoke "test" (i32.const 24)) (i32.const 0)) (assert_return (invoke "test" (i32.const 25)) (i32.const 1)) (assert_return (invoke "test" (i32.const 26)) (i32.const 2)) (assert_return (invoke "test" (i32.const 27)) (i32.const 3)) (assert_return (invoke "test" (i32.const 28)) (i32.const 4)) (assert_return (invoke "test" (i32.const 29)) (i32.const 5)) (assert_return (invoke "test" (i32.const 30)) (i32.const 6)) (assert_return (invoke "test" (i32.const 31)) (i32.const 7)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 21) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 21) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_return (invoke "test" (i32.const 21)) (i32.const 0)) (assert_return (invoke "test" (i32.const 22)) (i32.const 1)) (assert_return (invoke "test" (i32.const 23)) (i32.const 2)) (assert_return (invoke "test" (i32.const 24)) (i32.const 3)) (assert_return (invoke "test" (i32.const 25)) (i32.const 4)) (assert_return (invoke "test" (i32.const 26)) (i32.const 5)) (assert_return (invoke "test" (i32.const 27)) (i32.const 6)) (assert_return (invoke "test" (i32.const 28)) (i32.const 7)) (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 24) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 21) (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_return (invoke "test" (i32.const 24)) (i32.const 0)) (assert_return (invoke "test" (i32.const 25)) (i32.const 1)) (assert_return (invoke "test" (i32.const 26)) (i32.const 2)) (assert_return (invoke "test" (i32.const 27)) (i32.const 3)) (assert_return (invoke "test" (i32.const 28)) (i32.const 4)) (assert_return (invoke "test" (i32.const 29)) (i32.const 5)) (assert_return (invoke "test" (i32.const 30)) (i32.const 6)) (assert_return (invoke "test" (i32.const 31)) (i32.const 7)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 21) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 21) (i32.const 21) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_return (invoke "test" (i32.const 21)) (i32.const 0)) (assert_return (invoke "test" (i32.const 22)) (i32.const 1)) (assert_return (invoke "test" (i32.const 23)) (i32.const 2)) (assert_return (invoke "test" (i32.const 24)) (i32.const 3)) (assert_return (invoke "test" (i32.const 25)) (i32.const 4)) (assert_return (invoke "test" (i32.const 26)) (i32.const 5)) (assert_return (invoke "test" (i32.const 27)) (i32.const 6)) (assert_return (invoke "test" (i32.const 28)) (i32.const 7)) (assert_return (invoke "test" (i32.const 29)) (i32.const 8)) (assert_return (invoke "test" (i32.const 30)) (i32.const 9)) (assert_return (invoke "test" (i32.const 31)) (i32.const 10)) (module (type (func (result i32))) (table 128 128 funcref) (elem (i32.const 112) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 112) (i32.const 4294967264)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_return (invoke "test" (i32.const 112)) (i32.const 0)) (assert_return (invoke "test" (i32.const 113)) (i32.const 1)) (assert_return (invoke "test" (i32.const 114)) (i32.const 2)) (assert_return (invoke "test" (i32.const 115)) (i32.const 3)) (assert_return (invoke "test" (i32.const 116)) (i32.const 4)) (assert_return (invoke "test" (i32.const 117)) (i32.const 5)) (assert_return (invoke "test" (i32.const 118)) (i32.const 6)) (assert_return (invoke "test" (i32.const 119)) (i32.const 7)) (assert_return (invoke "test" (i32.const 120)) (i32.const 8)) (assert_return (invoke "test" (i32.const 121)) (i32.const 9)) (assert_return (invoke "test" (i32.const 122)) (i32.const 10)) (assert_return (invoke "test" (i32.const 123)) (i32.const 11)) (assert_return (invoke "test" (i32.const 124)) (i32.const 12)) (assert_return (invoke "test" (i32.const 125)) (i32.const 13)) (assert_return (invoke "test" (i32.const 126)) (i32.const 14)) (assert_return (invoke "test" (i32.const 127)) (i32.const 15)) (module (type (func (result i32))) (table 128 128 funcref) (elem (i32.const 0) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 112) (i32.const 0) (i32.const 4294967264)) "out of bounds table access") (assert_return (invoke "test" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test" (i32.const 2)) (i32.const 2)) (assert_return (invoke "test" (i32.const 3)) (i32.const 3)) (assert_return (invoke "test" (i32.const 4)) (i32.const 4)) (assert_return (invoke "test" (i32.const 5)) (i32.const 5)) (assert_return (invoke "test" (i32.const 6)) (i32.const 6)) (assert_return (invoke "test" (i32.const 7)) (i32.const 7)) (assert_return (invoke "test" (i32.const 8)) (i32.const 8)) (assert_return (invoke "test" (i32.const 9)) (i32.const 9)) (assert_return (invoke "test" (i32.const 10)) (i32.const 10)) (assert_return (invoke "test" (i32.const 11)) (i32.const 11)) (assert_return (invoke "test" (i32.const 12)) (i32.const 12)) (assert_return (invoke "test" (i32.const 13)) (i32.const 13)) (assert_return (invoke "test" (i32.const 14)) (i32.const 14)) (assert_return (invoke "test" (i32.const 15)) (i32.const 15)) (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_trap (invoke "test" (i32.const 112)) "uninitialized element") (assert_trap (invoke "test" (i32.const 113)) "uninitialized element") (assert_trap (invoke "test" (i32.const 114)) "uninitialized element") (assert_trap (invoke "test" (i32.const 115)) "uninitialized element") (assert_trap (invoke "test" (i32.const 116)) "uninitialized element") (assert_trap (invoke "test" (i32.const 117)) "uninitialized element") (assert_trap (invoke "test" (i32.const 118)) "uninitialized element") (assert_trap (invoke "test" (i32.const 119)) "uninitialized element") (assert_trap (invoke "test" (i32.const 120)) "uninitialized element") (assert_trap (invoke "test" (i32.const 121)) "uninitialized element") (assert_trap (invoke "test" (i32.const 122)) "uninitialized element") (assert_trap (invoke "test" (i32.const 123)) "uninitialized element") (assert_trap (invoke "test" (i32.const 124)) "uninitialized element") (assert_trap (invoke "test" (i32.const 125)) "uninitialized element") (assert_trap (invoke "test" (i32.const 126)) "uninitialized element") (assert_trap (invoke "test" (i32.const 127)) "uninitialized element") ================================================ FILE: Test/WebAssembly/multi-memory/table_fill.wast ================================================ (module (table $t 10 externref) (func (export "fill") (param $i i32) (param $r externref) (param $n i32) (table.fill $t (local.get $i) (local.get $r) (local.get $n)) ) (func (export "get") (param $i i32) (result externref) (table.get $t (local.get $i)) ) ) (assert_return (invoke "get" (i32.const 1)) (ref.null extern)) (assert_return (invoke "get" (i32.const 2)) (ref.null extern)) (assert_return (invoke "get" (i32.const 3)) (ref.null extern)) (assert_return (invoke "get" (i32.const 4)) (ref.null extern)) (assert_return (invoke "get" (i32.const 5)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 2) (ref.extern 1) (i32.const 3))) (assert_return (invoke "get" (i32.const 1)) (ref.null extern)) (assert_return (invoke "get" (i32.const 2)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 3)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 5)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 4) (ref.extern 2) (i32.const 2))) (assert_return (invoke "get" (i32.const 3)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 5)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 6)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 4) (ref.extern 3) (i32.const 0))) (assert_return (invoke "get" (i32.const 3)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 5)) (ref.extern 2)) (assert_return (invoke "fill" (i32.const 8) (ref.extern 4) (i32.const 2))) (assert_return (invoke "get" (i32.const 7)) (ref.null extern)) (assert_return (invoke "get" (i32.const 8)) (ref.extern 4)) (assert_return (invoke "get" (i32.const 9)) (ref.extern 4)) (assert_return (invoke "fill" (i32.const 9) (ref.null extern) (i32.const 1))) (assert_return (invoke "get" (i32.const 8)) (ref.extern 4)) (assert_return (invoke "get" (i32.const 9)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 10) (ref.extern 5) (i32.const 0))) (assert_return (invoke "get" (i32.const 9)) (ref.null extern)) (assert_trap (invoke "fill" (i32.const 8) (ref.extern 6) (i32.const 3)) "out of bounds table access" ) (assert_return (invoke "get" (i32.const 7)) (ref.null extern)) (assert_return (invoke "get" (i32.const 8)) (ref.extern 4)) (assert_return (invoke "get" (i32.const 9)) (ref.null extern)) (assert_trap (invoke "fill" (i32.const 11) (ref.null extern) (i32.const 0)) "out of bounds table access" ) (assert_trap (invoke "fill" (i32.const 11) (ref.null extern) (i32.const 10)) "out of bounds table access" ) ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-value-length-empty-vs-i32-i32 (table.fill $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (table.fill $t (ref.null extern) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-value-empty-vs (table.fill $t (i32.const 1) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-length-empty-vs-i32 (table.fill $t (i32.const 1) (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-index-f32-vs-i32 (table.fill $t (f32.const 1) (ref.null extern) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 funcref) (func $type-value-vs-funcref (param $r externref) (table.fill $t (i32.const 1) (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-length-f32-vs-i32 (table.fill $t (i32.const 1) (ref.null extern) (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 externref) (table $t2 1 funcref) (func $type-value-externref-vs-funcref-multi (param $r externref) (table.fill $t2 (i32.const 0) (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-empty-vs-num (result i32) (table.fill $t (i32.const 0) (ref.null extern) (i32.const 1)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/table_get.wast ================================================ (module (table $t2 2 externref) (table $t3 3 funcref) (elem (table $t3) (i32.const 1) func $dummy) (func $dummy) (func (export "init") (param $r externref) (table.set $t2 (i32.const 1) (local.get $r)) (table.set $t3 (i32.const 2) (table.get $t3 (i32.const 1))) ) (func (export "get-externref") (param $i i32) (result externref) (table.get $t2 (local.get $i)) ) (func $f3 (export "get-funcref") (param $i i32) (result funcref) (table.get $t3 (local.get $i)) ) (func (export "is_null-funcref") (param $i i32) (result i32) (ref.is_null (call $f3 (local.get $i))) ) ) (invoke "init" (ref.extern 1)) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "get-externref" (i32.const 1)) (ref.extern 1)) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_return (invoke "is_null-funcref" (i32.const 1)) (i32.const 0)) (assert_return (invoke "is_null-funcref" (i32.const 2)) (i32.const 0)) (assert_trap (invoke "get-externref" (i32.const 2)) "out of bounds table access") (assert_trap (invoke "get-funcref" (i32.const 3)) "out of bounds table access") (assert_trap (invoke "get-externref" (i32.const -1)) "out of bounds table access") (assert_trap (invoke "get-funcref" (i32.const -1)) "out of bounds table access") ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (result externref) (table.get $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-f32-vs-i32 (result externref) (table.get $t (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-externref-vs-empty (table.get $t (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-externref-vs-funcref (result funcref) (table.get $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 funcref) (table $t2 1 externref) (func $type-result-externref-vs-funcref-multi (result funcref) (table.get $t2 (i32.const 0)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/table_grow.wast ================================================ (module (table $t 0 externref) (func (export "get") (param $i i32) (result externref) (table.get $t (local.get $i))) (func (export "set") (param $i i32) (param $r externref) (table.set $t (local.get $i) (local.get $r))) (func (export "grow") (param $sz i32) (param $init externref) (result i32) (table.grow $t (local.get $init) (local.get $sz)) ) (func (export "size") (result i32) (table.size $t)) ) (assert_return (invoke "size") (i32.const 0)) (assert_trap (invoke "set" (i32.const 0) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 0)) "out of bounds table access") (assert_return (invoke "grow" (i32.const 1) (ref.null extern)) (i32.const 0)) (assert_return (invoke "size") (i32.const 1)) (assert_return (invoke "get" (i32.const 0)) (ref.null extern)) (assert_return (invoke "set" (i32.const 0) (ref.extern 2))) (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) (assert_trap (invoke "set" (i32.const 1) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 1)) "out of bounds table access") (assert_return (invoke "grow" (i32.const 4) (ref.extern 3)) (i32.const 1)) (assert_return (invoke "size") (i32.const 5)) (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) (assert_return (invoke "set" (i32.const 0) (ref.extern 2))) (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 1)) (ref.extern 3)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 3)) (assert_return (invoke "set" (i32.const 4) (ref.extern 4))) (assert_return (invoke "get" (i32.const 4)) (ref.extern 4)) (assert_trap (invoke "set" (i32.const 5) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 5)) "out of bounds table access") ;; Reject growing to size outside i32 value range (module (table $t 0x10 funcref) (elem declare func $f) (func $f (export "grow") (result i32) (table.grow $t (ref.func $f) (i32.const 0xffff_fff0)) ) ) (assert_return (invoke "grow") (i32.const -1)) (module (table $t 0 externref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null extern) (local.get 0)) ) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 800)) (i32.const 3)) (module (table $t 0 10 externref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null extern) (local.get 0)) ) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) (module (table $t 10 funcref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null func) (local.get 0)) ) (elem declare func 1) (func (export "check-table-null") (param i32 i32) (result funcref) (local funcref) (local.set 2 (ref.func 1)) (block (loop (local.set 2 (table.get $t (local.get 0))) (br_if 1 (i32.eqz (ref.is_null (local.get 2)))) (br_if 1 (i32.ge_u (local.get 0) (local.get 1))) (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br_if 0 (i32.le_u (local.get 0) (local.get 1))) ) ) (local.get 2) ) ) (assert_return (invoke "check-table-null" (i32.const 0) (i32.const 9)) (ref.null func)) (assert_return (invoke "grow" (i32.const 10)) (i32.const 10)) (assert_return (invoke "check-table-null" (i32.const 0) (i32.const 19)) (ref.null func)) ;; Type errors (assert_invalid (module (table $t 0 externref) (func $type-init-size-empty-vs-i32-externref (result i32) (table.grow $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-size-empty-vs-i32 (result i32) (table.grow $t (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-init-empty-vs-externref (result i32) (table.grow $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-size-f32-vs-i32 (result i32) (table.grow $t (ref.null extern) (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 funcref) (func $type-init-externref-vs-funcref (param $r externref) (result i32) (table.grow $t (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-empty (table.grow $t (ref.null extern) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-f32 (result f32) (table.grow $t (ref.null extern) (i32.const 0)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/table_init.wast ================================================ ;; ;; Generated by ../meta/generate_table_init.js ;; DO NOT EDIT THIS FILE. CHANGE THE SOURCE AND REGENERATE. ;; (module (func (export "ef0") (result i32) (i32.const 0)) (func (export "ef1") (result i32) (i32.const 1)) (func (export "ef2") (result i32) (i32.const 2)) (func (export "ef3") (result i32) (i32.const 3)) (func (export "ef4") (result i32) (i32.const 4)) ) (register "a") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t0 1 (i32.const 7) (i32.const 0) (i32.const 4))) (func (export "check") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t0 3 (i32.const 15) (i32.const 1) (i32.const 3))) (func (export "check") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 9)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t0 1 (i32.const 7) (i32.const 0) (i32.const 4)) (elem.drop 1) (table.init $t0 3 (i32.const 15) (i32.const 1) (i32.const 3)) (elem.drop 3) (table.copy $t0 0 (i32.const 20) (i32.const 15) (i32.const 5)) (table.copy $t0 0 (i32.const 21) (i32.const 29) (i32.const 1)) (table.copy $t0 0 (i32.const 24) (i32.const 10) (i32.const 1)) (table.copy $t0 0 (i32.const 13) (i32.const 11) (i32.const 4)) (table.copy $t0 0 (i32.const 19) (i32.const 20) (i32.const 5))) (func (export "check") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 13)) "uninitialized element") (assert_return (invoke "check" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_return (invoke "check" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_return (invoke "check" (i32.const 21)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_return (invoke "check" (i32.const 23)) (i32.const 8)) (assert_return (invoke "check" (i32.const 24)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t1 1 (i32.const 7) (i32.const 0) (i32.const 4))) (func (export "check") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t1 3 (i32.const 15) (i32.const 1) (i32.const 3))) (func (export "check") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 9)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t1 1 (i32.const 7) (i32.const 0) (i32.const 4)) (elem.drop 1) (table.init $t1 3 (i32.const 15) (i32.const 1) (i32.const 3)) (elem.drop 3) (table.copy $t1 1 (i32.const 20) (i32.const 15) (i32.const 5)) (table.copy $t1 1 (i32.const 21) (i32.const 29) (i32.const 1)) (table.copy $t1 1 (i32.const 24) (i32.const 10) (i32.const 1)) (table.copy $t1 1 (i32.const 13) (i32.const 11) (i32.const 4)) (table.copy $t1 1 (i32.const 19) (i32.const 20) (i32.const 5))) (func (export "check") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 13)) "uninitialized element") (assert_return (invoke "check" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_return (invoke "check" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_return (invoke "check" (i32.const 21)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_return (invoke "check" (i32.const 23)) (i32.const 8)) (assert_return (invoke "check" (i32.const 24)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (assert_invalid (module (func (export "test") (elem.drop 0))) "unknown elem segment 0") (assert_invalid (module (func (export "test") (table.init 0 (i32.const 12) (i32.const 1) (i32.const 1)))) "unknown table 0") (assert_invalid (module (elem funcref (ref.func 0)) (func (result i32) (i32.const 0)) (func (export "test") (elem.drop 4))) "unknown elem segment 4") (assert_invalid (module (elem funcref (ref.func 0)) (func (result i32) (i32.const 0)) (func (export "test") (table.init 4 (i32.const 12) (i32.const 1) (i32.const 1)))) "unknown table 0") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (elem.drop 2) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 2 (i32.const 12) (i32.const 1) (i32.const 1)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 1 (i32.const 12) (i32.const 1) (i32.const 1)) (table.init 1 (i32.const 21) (i32.const 1) (i32.const 1)))) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (elem.drop 1) (elem.drop 1))) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (elem.drop 1) (table.init 1 (i32.const 12) (i32.const 1) (i32.const 1)))) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 1 (i32.const 12) (i32.const 0) (i32.const 5)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 1 (i32.const 12) (i32.const 2) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 28) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 12) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 12) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 30) (i32.const 2) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 31) (i32.const 2) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 30) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 31) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 26) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 12) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 12) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 28) (i32.const 2) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 29) (i32.const 2) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 28) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 29) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (module (type (func (result i32))) (table 32 64 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 25) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 160 320 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 96) (i32.const 32)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_trap (invoke "test" (i32.const 112)) "uninitialized element") (assert_trap (invoke "test" (i32.const 113)) "uninitialized element") (assert_trap (invoke "test" (i32.const 114)) "uninitialized element") (assert_trap (invoke "test" (i32.const 115)) "uninitialized element") (assert_trap (invoke "test" (i32.const 116)) "uninitialized element") (assert_trap (invoke "test" (i32.const 117)) "uninitialized element") (assert_trap (invoke "test" (i32.const 118)) "uninitialized element") (assert_trap (invoke "test" (i32.const 119)) "uninitialized element") (assert_trap (invoke "test" (i32.const 120)) "uninitialized element") (assert_trap (invoke "test" (i32.const 121)) "uninitialized element") (assert_trap (invoke "test" (i32.const 122)) "uninitialized element") (assert_trap (invoke "test" (i32.const 123)) "uninitialized element") (assert_trap (invoke "test" (i32.const 124)) "uninitialized element") (assert_trap (invoke "test" (i32.const 125)) "uninitialized element") (assert_trap (invoke "test" (i32.const 126)) "uninitialized element") (assert_trap (invoke "test" (i32.const 127)) "uninitialized element") (assert_trap (invoke "test" (i32.const 128)) "uninitialized element") (assert_trap (invoke "test" (i32.const 129)) "uninitialized element") (assert_trap (invoke "test" (i32.const 130)) "uninitialized element") (assert_trap (invoke "test" (i32.const 131)) "uninitialized element") (assert_trap (invoke "test" (i32.const 132)) "uninitialized element") (assert_trap (invoke "test" (i32.const 133)) "uninitialized element") (assert_trap (invoke "test" (i32.const 134)) "uninitialized element") (assert_trap (invoke "test" (i32.const 135)) "uninitialized element") (assert_trap (invoke "test" (i32.const 136)) "uninitialized element") (assert_trap (invoke "test" (i32.const 137)) "uninitialized element") (assert_trap (invoke "test" (i32.const 138)) "uninitialized element") (assert_trap (invoke "test" (i32.const 139)) "uninitialized element") (assert_trap (invoke "test" (i32.const 140)) "uninitialized element") (assert_trap (invoke "test" (i32.const 141)) "uninitialized element") (assert_trap (invoke "test" (i32.const 142)) "uninitialized element") (assert_trap (invoke "test" (i32.const 143)) "uninitialized element") (assert_trap (invoke "test" (i32.const 144)) "uninitialized element") (assert_trap (invoke "test" (i32.const 145)) "uninitialized element") (assert_trap (invoke "test" (i32.const 146)) "uninitialized element") (assert_trap (invoke "test" (i32.const 147)) "uninitialized element") (assert_trap (invoke "test" (i32.const 148)) "uninitialized element") (assert_trap (invoke "test" (i32.const 149)) "uninitialized element") (assert_trap (invoke "test" (i32.const 150)) "uninitialized element") (assert_trap (invoke "test" (i32.const 151)) "uninitialized element") (assert_trap (invoke "test" (i32.const 152)) "uninitialized element") (assert_trap (invoke "test" (i32.const 153)) "uninitialized element") (assert_trap (invoke "test" (i32.const 154)) "uninitialized element") (assert_trap (invoke "test" (i32.const 155)) "uninitialized element") (assert_trap (invoke "test" (i32.const 156)) "uninitialized element") (assert_trap (invoke "test" (i32.const 157)) "uninitialized element") (assert_trap (invoke "test" (i32.const 158)) "uninitialized element") (assert_trap (invoke "test" (i32.const 159)) "uninitialized element") (module (type (func (result i32))) (table 160 320 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 97) (i32.const 31)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_trap (invoke "test" (i32.const 112)) "uninitialized element") (assert_trap (invoke "test" (i32.const 113)) "uninitialized element") (assert_trap (invoke "test" (i32.const 114)) "uninitialized element") (assert_trap (invoke "test" (i32.const 115)) "uninitialized element") (assert_trap (invoke "test" (i32.const 116)) "uninitialized element") (assert_trap (invoke "test" (i32.const 117)) "uninitialized element") (assert_trap (invoke "test" (i32.const 118)) "uninitialized element") (assert_trap (invoke "test" (i32.const 119)) "uninitialized element") (assert_trap (invoke "test" (i32.const 120)) "uninitialized element") (assert_trap (invoke "test" (i32.const 121)) "uninitialized element") (assert_trap (invoke "test" (i32.const 122)) "uninitialized element") (assert_trap (invoke "test" (i32.const 123)) "uninitialized element") (assert_trap (invoke "test" (i32.const 124)) "uninitialized element") (assert_trap (invoke "test" (i32.const 125)) "uninitialized element") (assert_trap (invoke "test" (i32.const 126)) "uninitialized element") (assert_trap (invoke "test" (i32.const 127)) "uninitialized element") (assert_trap (invoke "test" (i32.const 128)) "uninitialized element") (assert_trap (invoke "test" (i32.const 129)) "uninitialized element") (assert_trap (invoke "test" (i32.const 130)) "uninitialized element") (assert_trap (invoke "test" (i32.const 131)) "uninitialized element") (assert_trap (invoke "test" (i32.const 132)) "uninitialized element") (assert_trap (invoke "test" (i32.const 133)) "uninitialized element") (assert_trap (invoke "test" (i32.const 134)) "uninitialized element") (assert_trap (invoke "test" (i32.const 135)) "uninitialized element") (assert_trap (invoke "test" (i32.const 136)) "uninitialized element") (assert_trap (invoke "test" (i32.const 137)) "uninitialized element") (assert_trap (invoke "test" (i32.const 138)) "uninitialized element") (assert_trap (invoke "test" (i32.const 139)) "uninitialized element") (assert_trap (invoke "test" (i32.const 140)) "uninitialized element") (assert_trap (invoke "test" (i32.const 141)) "uninitialized element") (assert_trap (invoke "test" (i32.const 142)) "uninitialized element") (assert_trap (invoke "test" (i32.const 143)) "uninitialized element") (assert_trap (invoke "test" (i32.const 144)) "uninitialized element") (assert_trap (invoke "test" (i32.const 145)) "uninitialized element") (assert_trap (invoke "test" (i32.const 146)) "uninitialized element") (assert_trap (invoke "test" (i32.const 147)) "uninitialized element") (assert_trap (invoke "test" (i32.const 148)) "uninitialized element") (assert_trap (invoke "test" (i32.const 149)) "uninitialized element") (assert_trap (invoke "test" (i32.const 150)) "uninitialized element") (assert_trap (invoke "test" (i32.const 151)) "uninitialized element") (assert_trap (invoke "test" (i32.const 152)) "uninitialized element") (assert_trap (invoke "test" (i32.const 153)) "uninitialized element") (assert_trap (invoke "test" (i32.const 154)) "uninitialized element") (assert_trap (invoke "test" (i32.const 155)) "uninitialized element") (assert_trap (invoke "test" (i32.const 156)) "uninitialized element") (assert_trap (invoke "test" (i32.const 157)) "uninitialized element") (assert_trap (invoke "test" (i32.const 158)) "uninitialized element") (assert_trap (invoke "test" (i32.const 159)) "uninitialized element") (module (type (func (result i32))) (table 64 64 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 48) (i32.const 4294967280)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (module (type (func (result i32))) (table 16 16 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 8) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 4294967292)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (module (table 1 funcref) ;; 65 elem segments. 64 is the smallest positive number that is encoded ;; differently as a signed LEB. (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (func (table.init 64 (i32.const 0) (i32.const 0) (i32.const 0)))) ================================================ FILE: Test/WebAssembly/multi-memory/table_set.wast ================================================ (module (table $t2 1 externref) (table $t3 2 funcref) (elem (table $t3) (i32.const 1) func $dummy) (func $dummy) (func (export "get-externref") (param $i i32) (result externref) (table.get $t2 (local.get $i)) ) (func $f3 (export "get-funcref") (param $i i32) (result funcref) (table.get $t3 (local.get $i)) ) (func (export "set-externref") (param $i i32) (param $r externref) (table.set $t2 (local.get $i) (local.get $r)) ) (func (export "set-funcref") (param $i i32) (param $r funcref) (table.set $t3 (local.get $i) (local.get $r)) ) (func (export "set-funcref-from") (param $i i32) (param $j i32) (table.set $t3 (local.get $i) (table.get $t3 (local.get $j))) ) (func (export "is_null-funcref") (param $i i32) (result i32) (ref.is_null (call $f3 (local.get $i))) ) ) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "set-externref" (i32.const 0) (ref.extern 1))) (assert_return (invoke "get-externref" (i32.const 0)) (ref.extern 1)) (assert_return (invoke "set-externref" (i32.const 0) (ref.null extern))) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_return (invoke "set-funcref-from" (i32.const 0) (i32.const 1))) (assert_return (invoke "is_null-funcref" (i32.const 0)) (i32.const 0)) (assert_return (invoke "set-funcref" (i32.const 0) (ref.null func))) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_trap (invoke "set-externref" (i32.const 2) (ref.null extern)) "out of bounds table access") (assert_trap (invoke "set-funcref" (i32.const 3) (ref.null func)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const -1) (ref.null extern)) "out of bounds table access") (assert_trap (invoke "set-funcref" (i32.const -1) (ref.null func)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const 2) (ref.extern 0)) "out of bounds table access") (assert_trap (invoke "set-funcref-from" (i32.const 3) (i32.const 1)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const -1) (ref.extern 0)) "out of bounds table access") (assert_trap (invoke "set-funcref-from" (i32.const -1) (i32.const 1)) "out of bounds table access") ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-value-empty-vs-i32-externref (table.set $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (table.set $t (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-value-empty-vs-externref (table.set $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-size-f32-vs-i32 (table.set $t (f32.const 1) (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 funcref) (func $type-value-externref-vs-funcref (param $r externref) (table.set $t (i32.const 1) (local.get $r)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 externref) (table $t2 1 funcref) (func $type-value-externref-vs-funcref-multi (param $r externref) (table.set $t2 (i32.const 0) (local.get $r)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-empty-vs-num (result i32) (table.set $t (i32.const 0) (ref.null extern)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/table_size.wast ================================================ (module (table $t0 0 externref) (table $t1 1 externref) (table $t2 0 2 externref) (table $t3 3 8 externref) (func (export "size-t0") (result i32) (table.size $t0)) (func (export "size-t1") (result i32) (table.size $t1)) (func (export "size-t2") (result i32) (table.size $t2)) (func (export "size-t3") (result i32) (table.size $t3)) (func (export "grow-t0") (param $sz i32) (drop (table.grow $t0 (ref.null extern) (local.get $sz))) ) (func (export "grow-t1") (param $sz i32) (drop (table.grow $t1 (ref.null extern) (local.get $sz))) ) (func (export "grow-t2") (param $sz i32) (drop (table.grow $t2 (ref.null extern) (local.get $sz))) ) (func (export "grow-t3") (param $sz i32) (drop (table.grow $t3 (ref.null extern) (local.get $sz))) ) ) (assert_return (invoke "size-t0") (i32.const 0)) (assert_return (invoke "grow-t0" (i32.const 1))) (assert_return (invoke "size-t0") (i32.const 1)) (assert_return (invoke "grow-t0" (i32.const 4))) (assert_return (invoke "size-t0") (i32.const 5)) (assert_return (invoke "grow-t0" (i32.const 0))) (assert_return (invoke "size-t0") (i32.const 5)) (assert_return (invoke "size-t1") (i32.const 1)) (assert_return (invoke "grow-t1" (i32.const 1))) (assert_return (invoke "size-t1") (i32.const 2)) (assert_return (invoke "grow-t1" (i32.const 4))) (assert_return (invoke "size-t1") (i32.const 6)) (assert_return (invoke "grow-t1" (i32.const 0))) (assert_return (invoke "size-t1") (i32.const 6)) (assert_return (invoke "size-t2") (i32.const 0)) (assert_return (invoke "grow-t2" (i32.const 3))) (assert_return (invoke "size-t2") (i32.const 0)) (assert_return (invoke "grow-t2" (i32.const 1))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 0))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 4))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 1))) (assert_return (invoke "size-t2") (i32.const 2)) (assert_return (invoke "size-t3") (i32.const 3)) (assert_return (invoke "grow-t3" (i32.const 1))) (assert_return (invoke "size-t3") (i32.const 4)) (assert_return (invoke "grow-t3" (i32.const 3))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 0))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 2))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 1))) (assert_return (invoke "size-t3") (i32.const 8)) ;; Type errors (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-empty (table.size $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-f32 (result f32) (table.size $t) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/token.wast ================================================ ;; Test tokenization (assert_malformed (module quote "(func (drop (i32.const0)))") "unknown operator" ) (assert_malformed (module quote "(func br 0drop)") "unknown operator" ) ================================================ FILE: Test/WebAssembly/multi-memory/traps.wast ================================================ ;; Test that traps are preserved even in instructions which might otherwise ;; be dead-code-eliminated. These functions all perform an operation and ;; discard its return value. (module (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) (drop (i32.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) (drop (i32.div_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) (drop (i64.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) (drop (i64.div_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (module (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) (drop (i32.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) (drop (i32.rem_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) (drop (i64.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) (drop (i64.rem_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (module (func (export "no_dce.i32.trunc_f32_s") (param $x f32) (drop (i32.trunc_f32_s (local.get $x)))) (func (export "no_dce.i32.trunc_f32_u") (param $x f32) (drop (i32.trunc_f32_u (local.get $x)))) (func (export "no_dce.i32.trunc_f64_s") (param $x f64) (drop (i32.trunc_f64_s (local.get $x)))) (func (export "no_dce.i32.trunc_f64_u") (param $x f64) (drop (i32.trunc_f64_u (local.get $x)))) (func (export "no_dce.i64.trunc_f32_s") (param $x f32) (drop (i64.trunc_f32_s (local.get $x)))) (func (export "no_dce.i64.trunc_f32_u") (param $x f32) (drop (i64.trunc_f32_u (local.get $x)))) (func (export "no_dce.i64.trunc_f64_s") (param $x f64) (drop (i64.trunc_f64_s (local.get $x)))) (func (export "no_dce.i64.trunc_f64_u") (param $x f64) (drop (i64.trunc_f64_u (local.get $x)))) ) (assert_trap (invoke "no_dce.i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (module (memory 1) (func (export "no_dce.i32.load") (param $i i32) (drop (i32.load (local.get $i)))) (func (export "no_dce.i32.load16_s") (param $i i32) (drop (i32.load16_s (local.get $i)))) (func (export "no_dce.i32.load16_u") (param $i i32) (drop (i32.load16_u (local.get $i)))) (func (export "no_dce.i32.load8_s") (param $i i32) (drop (i32.load8_s (local.get $i)))) (func (export "no_dce.i32.load8_u") (param $i i32) (drop (i32.load8_u (local.get $i)))) (func (export "no_dce.i64.load") (param $i i32) (drop (i64.load (local.get $i)))) (func (export "no_dce.i64.load32_s") (param $i i32) (drop (i64.load32_s (local.get $i)))) (func (export "no_dce.i64.load32_u") (param $i i32) (drop (i64.load32_u (local.get $i)))) (func (export "no_dce.i64.load16_s") (param $i i32) (drop (i64.load16_s (local.get $i)))) (func (export "no_dce.i64.load16_u") (param $i i32) (drop (i64.load16_u (local.get $i)))) (func (export "no_dce.i64.load8_s") (param $i i32) (drop (i64.load8_s (local.get $i)))) (func (export "no_dce.i64.load8_u") (param $i i32) (drop (i64.load8_u (local.get $i)))) (func (export "no_dce.f32.load") (param $i i32) (drop (f32.load (local.get $i)))) (func (export "no_dce.f64.load") (param $i i32) (drop (f64.load (local.get $i)))) ) (assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/multi-memory/type.wast ================================================ ;; Test type definitions (module (type (func)) (type $t (func)) (type (func (param i32))) (type (func (param $x i32))) (type (func (result i32))) (type (func (param i32) (result i32))) (type (func (param $x i32) (result i32))) (type (func (param f32 f64))) (type (func (result i64 f32))) (type (func (param i32 i64) (result f32 f64))) (type (func (param f32) (param f64))) (type (func (param $x f32) (param f64))) (type (func (param f32) (param $y f64))) (type (func (param $x f32) (param $y f64))) (type (func (result i64) (result f32))) (type (func (param i32) (param i64) (result f32) (result f64))) (type (func (param $x i32) (param $y i64) (result f32) (result f64))) (type (func (param f32 f64) (param $x i32) (param f64 i32 i32))) (type (func (result i64 i64 f32) (result f32 i32))) (type (func (param i32 i32) (param i64 i32) (result f32 f64) (result f64 i32)) ) (type (func (param) (param $x f32) (param) (param) (param f64 i32) (param))) (type (func (result) (result) (result i64 i64) (result) (result f32) (result)) ) (type (func (param i32 i32) (param i64 i32) (param) (param $x i32) (param) (result) (result f32 f64) (result f64 i32) (result) ) ) ) (assert_malformed (module quote "(type (func (result i32) (param i32)))") "unexpected token" ) (assert_malformed (module quote "(type (func (result $x i32)))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/multi-memory/unreachable.wast ================================================ ;; Test `unreachable` operator (module ;; Auxiliary definitions (func $dummy) (func $dummy3 (param i32 i32 i32)) (func (export "type-i32") (result i32) (unreachable)) (func (export "type-i64") (result i32) (unreachable)) (func (export "type-f32") (result f64) (unreachable)) (func (export "type-f64") (result f64) (unreachable)) (func (export "as-func-first") (result i32) (unreachable) (i32.const -1) ) (func (export "as-func-mid") (result i32) (call $dummy) (unreachable) (i32.const -1) ) (func (export "as-func-last") (call $dummy) (unreachable) ) (func (export "as-func-value") (result i32) (call $dummy) (unreachable) ) (func (export "as-block-first") (result i32) (block (result i32) (unreachable) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-block-last") (block (nop) (call $dummy) (unreachable)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (unreachable)) ) (func (export "as-block-broke") (result i32) (block (result i32) (call $dummy) (br 0 (i32.const 1)) (unreachable)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (unreachable) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-loop-last") (loop (nop) (call $dummy) (unreachable)) ) (func (export "as-loop-broke") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 1)) (unreachable)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (unreachable))) ) (func (export "as-br_if-cond") (block (br_if 0 (unreachable))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (unreachable) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (unreachable))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-2") (result i32) (block (result i32) (block (result i32) (br_table 0 1 (unreachable) (i32.const 1))) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7) ) ) (func (export "as-br_table-value-and-index") (result i32) (block (result i32) (br_table 0 0 (unreachable)) (i32.const 8)) ) (func (export "as-return-value") (result i64) (return (unreachable)) ) (func (export "as-if-cond") (result i32) (if (result i32) (unreachable) (then (i32.const 0)) (else (i32.const 1))) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (unreachable)) (else (local.get 1))) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (unreachable))) ) (func (export "as-if-then-no-else") (param i32 i32) (result i32) (if (local.get 0) (then (unreachable))) (local.get 1) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (unreachable) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (unreachable)) ) (func (export "as-call-first") (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call-last") (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) ) (type $sig (func (param i32 i32 i32))) (table funcref (elem $dummy3)) (func (export "as-call_indirect-func") (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3) ) ) (func (export "as-call_indirect-last") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable) ) ) (func (export "as-local.set-value") (local f32) (local.set 0 (unreachable)) ) (func (export "as-local.tee-value") (result f32) (local f32) (local.tee 0 (unreachable)) ) (global $a (mut f32) (f32.const 0)) (func (export "as-global.set-value") (result f32) (global.set $a (unreachable)) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (unreachable)) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (unreachable)) ) (func (export "as-store-address") (f64.store (unreachable) (f64.const 7)) ) (func (export "as-store-value") (i64.store (i32.const 2) (unreachable)) ) (func (export "as-storeN-address") (i32.store8 (unreachable) (i32.const 7)) ) (func (export "as-storeN-value") (i64.store16 (i32.const 2) (unreachable)) ) (func (export "as-unary-operand") (result f32) (f32.neg (unreachable)) ) (func (export "as-binary-left") (result i32) (i32.add (unreachable) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (unreachable)) ) (func (export "as-test-operand") (result i32) (i32.eqz (unreachable)) ) (func (export "as-compare-left") (result i32) (f64.le (unreachable) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (unreachable)) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (unreachable)) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (unreachable)) ) ) (assert_trap (invoke "type-i32") "unreachable") (assert_trap (invoke "type-i64") "unreachable") (assert_trap (invoke "type-f32") "unreachable") (assert_trap (invoke "type-f64") "unreachable") (assert_trap (invoke "as-func-first") "unreachable") (assert_trap (invoke "as-func-mid") "unreachable") (assert_trap (invoke "as-func-last") "unreachable") (assert_trap (invoke "as-func-value") "unreachable") (assert_trap (invoke "as-block-first") "unreachable") (assert_trap (invoke "as-block-mid") "unreachable") (assert_trap (invoke "as-block-last") "unreachable") (assert_trap (invoke "as-block-value") "unreachable") (assert_return (invoke "as-block-broke") (i32.const 1)) (assert_trap (invoke "as-loop-first") "unreachable") (assert_trap (invoke "as-loop-mid") "unreachable") (assert_trap (invoke "as-loop-last") "unreachable") (assert_return (invoke "as-loop-broke") (i32.const 1)) (assert_trap (invoke "as-br-value") "unreachable") (assert_trap (invoke "as-br_if-cond") "unreachable") (assert_trap (invoke "as-br_if-value") "unreachable") (assert_trap (invoke "as-br_if-value-cond") "unreachable") (assert_trap (invoke "as-br_table-index") "unreachable") (assert_trap (invoke "as-br_table-value") "unreachable") (assert_trap (invoke "as-br_table-value-2") "unreachable") (assert_trap (invoke "as-br_table-value-index") "unreachable") (assert_trap (invoke "as-br_table-value-and-index") "unreachable") (assert_trap (invoke "as-return-value") "unreachable") (assert_trap (invoke "as-if-cond") "unreachable") (assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-then-no-else" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then-no-else" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-cond") "unreachable") (assert_trap (invoke "as-call-first") "unreachable") (assert_trap (invoke "as-call-mid") "unreachable") (assert_trap (invoke "as-call-last") "unreachable") (assert_trap (invoke "as-call_indirect-func") "unreachable") (assert_trap (invoke "as-call_indirect-first") "unreachable") (assert_trap (invoke "as-call_indirect-mid") "unreachable") (assert_trap (invoke "as-call_indirect-last") "unreachable") (assert_trap (invoke "as-local.set-value") "unreachable") (assert_trap (invoke "as-local.tee-value") "unreachable") (assert_trap (invoke "as-global.set-value") "unreachable") (assert_trap (invoke "as-load-address") "unreachable") (assert_trap (invoke "as-loadN-address") "unreachable") (assert_trap (invoke "as-store-address") "unreachable") (assert_trap (invoke "as-store-value") "unreachable") (assert_trap (invoke "as-storeN-address") "unreachable") (assert_trap (invoke "as-storeN-value") "unreachable") (assert_trap (invoke "as-unary-operand") "unreachable") (assert_trap (invoke "as-binary-left") "unreachable") (assert_trap (invoke "as-binary-right") "unreachable") (assert_trap (invoke "as-test-operand") "unreachable") (assert_trap (invoke "as-compare-left") "unreachable") (assert_trap (invoke "as-compare-right") "unreachable") (assert_trap (invoke "as-convert-operand") "unreachable") (assert_trap (invoke "as-memory.grow-size") "unreachable") ================================================ FILE: Test/WebAssembly/multi-memory/unreached-invalid.wast ================================================ ;; Failures in unreachable code. (assert_invalid (module (func $local-index (unreachable) (drop (local.get 0)))) "unknown local" ) (assert_invalid (module (func $global-index (unreachable) (drop (global.get 0)))) "unknown global" ) (assert_invalid (module (func $func-index (unreachable) (call 1))) "unknown function" ) (assert_invalid (module (func $label-index (unreachable) (br 1))) "unknown label" ) (assert_invalid (module (func $type-num-vs-num (unreachable) (drop (i64.eqz (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (func $type-poly-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-poly-transitive-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-const (unreachable) (i32.const 0))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result (unreachable) (i32.eqz))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result2 (unreachable) (i32.const 0) (i32.add) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly0 (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly2 (unreachable) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-break (block (br 0) (block (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-break (block (br 0) (drop (i32.eqz (f32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-break (block (br 0) (block (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-break (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-break (result i32) (block (result i32) (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-break (block (loop (br 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-break (result i32) (loop (result i32) (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-break (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-return (return) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-return (return) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-return (return) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-return (return) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-return (block (return) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-return (result i32) (block (result i32) (i32.const 1) (return (i32.const 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-return (block (loop (return) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-return (result i32) (loop (result i32) (return (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-return (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-unreachable (unreachable) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-loop-after-unreachable (unreachable) (loop (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-i32-loop-after-unreachable (unreachable) (loop (result i32) (i32.eqz (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-unreachable (unreachable) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-unreachable (unreachable) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-unreachable (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-unreachable (block (unreachable) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-unreachable (result i32) (block (result i32) (i32.const 1) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-unreachable (block (loop (unreachable) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) (loop (result i32) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-unreachable (unreachable) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-unreachable (result i32) (unreachable) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-if-after-unreachable (unreachable) (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable (unreachable) (if (i32.const 0) (then (nop)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable-if (if (i32.const 0) (then (unreachable)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-nested-unreachable (block (block (unreachable)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-nested-unreachable (result i32) (block (result i32) (i32.const 1) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-nested-unreachable (block (loop (block (unreachable)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-nested-unreachable (result i32) (loop (result i32) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-nested-unreachable (block (unreachable)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-nested-unreachable (result i32) (block (unreachable)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-infinite-loop (block (loop (br 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) (block (result i32) (i32.const 1) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-infinite-loop (block (loop (loop (br 0)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) (loop (result i32) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-infinite-loop (loop (br 0)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) (loop (br 0)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-void-in-dead-body (if (i32.const 0) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (block (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (block (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (loop (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (loop (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-br-second-num-vs-num (result i32) (block (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-cond-num-vs-num-after-unreachable (block (br_if 0 (unreachable) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-void-after-unreachable (result i32) (block (result i32) (block (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-num-after-unreachable (result i32) (block (result i32) (block (result f32) (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) (drop) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num2-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_if 0 (i32.const 0) (i32.const 0)) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-num-vs-num-after-unreachable (block (br_table 0 (unreachable) (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_table 0 (f32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-label-void-after-unreachable (block (block (result f32) (unreachable) (br_table 0 1 0 (i32.const 1)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-void (block (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) (block (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-void (block (i32.const 3) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-void-vs-num (result i32) (block (result i32) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-num (result i32) (block (result i32) (i64.const 0) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-void (block (block (i32.const 3) (block (br 2)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-void-vs-num (result i32) (block (result i32) (block (block (br 2 (i32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-num (result i32) (block (result i32) (block (result i64) (i64.const 0) (block (br 2 (i32.const 0)))) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-void (block (i32.const 3) (block (return))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-void-vs-num (result i32) (block (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-void (loop (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) (loop (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) (loop (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $tee-local-unreachable-value (local i32) (local.tee 0 (unreachable)) )) "type mismatch" ) (assert_invalid (module (func $br_if-unreachable (result i32) (block (result i32) (block (br_if 1 (unreachable) (i32.const 0)) ) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-after-unreachable (result i64) unreachable br_if 0 i64.extend_i32_u ) ) "type mismatch" ) ;; The first two operands should have the same type as each other (assert_invalid (module (func (unreachable) (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (unreachable) (select (i64.const 1) (i32.const 1) (i32.const 1)) (drop))) "type mismatch" ) ;; Third operand must be i32 (assert_invalid (module (func (unreachable) (select (i32.const 1) (i32.const 1) (i64.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (unreachable) (select (i32.const 1) (i64.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (unreachable) (select (i64.const 1)) (drop))) "type mismatch" ) ;; Result of select has type of first two operands (type of second operand when first one is omitted) (assert_invalid (module (func (result i32) (unreachable) (select (i64.const 1) (i32.const 1)))) "type mismatch" ) ;; select always has non-empty result (assert_invalid (module (func (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $meet-bottom (param i32) (result externref) (block $l1 (result externref) (drop (block $l2 (result i32) (br_table $l2 $l1 $l2 (ref.null extern) (local.get 0)) ) ) (ref.null extern) ) )) "type mismatch" ) ================================================ FILE: Test/WebAssembly/multi-memory/unreached-valid.wast ================================================ (module ;; Check that both sides of the select are evaluated (func (export "select-trap-left") (param $cond i32) (result i32) (select (unreachable) (i32.const 0) (local.get $cond)) ) (func (export "select-trap-right") (param $cond i32) (result i32) (select (i32.const 0) (unreachable) (local.get $cond)) ) (func (export "select-unreached") (unreachable) (select) (unreachable) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (i32.const 0) (select) (unreachable) (f32.const 0) (i32.const 0) (select) (unreachable) ) (func (export "select_unreached_result_1") (result i32) (unreachable) (i32.add (select)) ) (func (export "select_unreached_result_2") (result i64) (unreachable) (i64.add (select (i64.const 0) (i32.const 0))) ) (func (export "unreachable-num") (unreachable) (select) (i32.eqz) (drop) ) (func (export "unreachable-ref") (unreachable) (select) (ref.is_null) (drop) ) ) (assert_trap (invoke "select-trap-left" (i32.const 1)) "unreachable") (assert_trap (invoke "select-trap-left" (i32.const 0)) "unreachable") (assert_trap (invoke "select-trap-right" (i32.const 1)) "unreachable") (assert_trap (invoke "select-trap-right" (i32.const 0)) "unreachable") ;; Validation after unreachable (module (func (export "meet-bottom") (block (result f64) (block (result f32) (unreachable) (br_table 0 1 1 (i32.const 1)) ) (drop) (f64.const 0) ) (drop) ) ) ================================================ FILE: Test/WebAssembly/multi-memory/unwind.wast ================================================ ;; Test that control-flow transfer unwinds stack and it can be anything after. (module (func (export "func-unwind-by-unreachable") (i32.const 3) (i64.const 1) (unreachable) ) (func (export "func-unwind-by-br") (i32.const 3) (i64.const 1) (br 0) ) (func (export "func-unwind-by-br-value") (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9)) ) (func (export "func-unwind-by-br_if") (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1)))) ) (func (export "func-unwind-by-br_if-value") (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) (func (export "func-unwind-by-br_table") (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0)) ) (func (export "func-unwind-by-br_table-value") (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) (func (export "func-unwind-by-return") (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9)) ) (func (export "block-unwind-by-unreachable") (block (i32.const 3) (i64.const 1) (unreachable)) ) (func (export "block-unwind-by-br") (result i32) (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) ) (func (export "block-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) ) (func (export "block-unwind-by-br_if") (result i32) (block (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1))))) (i32.const 9) ) (func (export "block-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) ) (func (export "block-unwind-by-br_table") (result i32) (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) ) (func (export "block-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9))) ) (func (export "block-nested-unwind-by-unreachable") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (unreachable))) ) (func (export "block-nested-unwind-by-br") (result i32) (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9))) ) ) (func (export "block-nested-unwind-by-br_if") (result i32) (block (i32.const 3) (block (i64.const 1) (drop (br_if 1 (i32.const 1)))) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (drop (drop (br_if 1 (i32.const 9) (i32.const 1))))) ) ) (func (export "block-nested-unwind-by-br_table") (result i32) (block (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) (drop) ) (i32.const 9) ) (func (export "block-nested-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) ) ) (func (export "block-nested-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (return (i32.const 9))) ) ) (func (export "unary-after-unreachable") (result i32) (f32.const 0) (unreachable) (i64.eqz) ) (func (export "unary-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) ) (func (export "unary-after-br_if") (result i32) (block (result i32) (i64.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eqz) ) ) (func (export "unary-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) ) ) (func (export "unary-after-return") (result i32) (f32.const 0) (return (i32.const 9)) (i64.eqz) ) (func (export "binary-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (unreachable) (i64.eq) ) (func (export "binary-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq) ) ) (func (export "binary-after-br_if") (result i32) (block (result i32) (i64.const 0) (i64.const 1) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eq) ) ) (func (export "binary-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) (i64.eq) ) ) (func (export "binary-after-return") (result i32) (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) ) (func (export "select-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) ) (func (export "select-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) ) ) (func (export "select-after-br_if") (result i32) (block (result i32) (i32.const 0) (i32.const 1) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (select) ) ) (func (export "select-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br_table 0 (i32.const 9) (i32.const 0)) (select) ) ) (func (export "select-after-return") (result i32) (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) ) (func (export "block-value-after-unreachable") (result i32) (block (result i32) (f32.const 0) (unreachable)) ) (func (export "block-value-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9))) ) (func (export "block-value-after-br_if") (result i32) (block (result i32) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) ) ) (func (export "block-value-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-value-after-return") (result i32) (block (result i32) (f32.const 0) (return (i32.const 9))) ) (func (export "loop-value-after-unreachable") (result i32) (loop (result i32) (f32.const 0) (unreachable)) ) (func (export "loop-value-after-br") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br 1 (i32.const 9)))) ) (func (export "loop-value-after-br_if") (result i32) (block (result i32) (loop (result i32) (i32.const 0) (drop (br_if 1 (i32.const 9) (i32.const 1))) ) ) ) (func (export "loop-value-after-br_table") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0)) ) ) ) (func (export "loop-value-after-return") (result i32) (loop (result i32) (f32.const 0) (return (i32.const 9))) ) ) (assert_trap (invoke "func-unwind-by-unreachable") "unreachable") (assert_return (invoke "func-unwind-by-br")) (assert_return (invoke "func-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_if")) (assert_return (invoke "func-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_table")) (assert_return (invoke "func-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) (assert_trap (invoke "unary-after-unreachable") "unreachable") (assert_return (invoke "unary-after-br") (i32.const 9)) (assert_return (invoke "unary-after-br_if") (i32.const 9)) (assert_return (invoke "unary-after-br_table") (i32.const 9)) (assert_return (invoke "unary-after-return") (i32.const 9)) (assert_trap (invoke "binary-after-unreachable") "unreachable") (assert_return (invoke "binary-after-br") (i32.const 9)) (assert_return (invoke "binary-after-br_if") (i32.const 9)) (assert_return (invoke "binary-after-br_table") (i32.const 9)) (assert_return (invoke "binary-after-return") (i32.const 9)) (assert_trap (invoke "select-after-unreachable") "unreachable") (assert_return (invoke "select-after-br") (i32.const 9)) (assert_return (invoke "select-after-br_if") (i32.const 9)) (assert_return (invoke "select-after-br_table") (i32.const 9)) (assert_return (invoke "select-after-return") (i32.const 9)) (assert_trap (invoke "block-value-after-unreachable") "unreachable") (assert_return (invoke "block-value-after-br") (i32.const 9)) (assert_return (invoke "block-value-after-br_if") (i32.const 9)) (assert_return (invoke "block-value-after-br_table") (i32.const 9)) (assert_return (invoke "block-value-after-return") (i32.const 9)) (assert_trap (invoke "loop-value-after-unreachable") "unreachable") (assert_return (invoke "loop-value-after-br") (i32.const 9)) (assert_return (invoke "loop-value-after-br_if") (i32.const 9)) (assert_return (invoke "loop-value-after-br_table") (i32.const 9)) (assert_return (invoke "loop-value-after-return") (i32.const 9)) ================================================ FILE: Test/WebAssembly/multi-memory/utf8-custom-section-id.wast ================================================ ;;;;;; Invalid UTF-8 custom section names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\80" ;; "\80" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\8f" ;; "\8f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\90" ;; "\90" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\9f" ;; "\9f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\a0" ;; "\a0" ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\bf" ;; "\bf" ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\c2\80\80" ;; "\c2\80\80" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\c2" ;; "\c2" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\2e" ;; "\c2." ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\80" ;; "\c0\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\bf" ;; "\c0\bf" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\80" ;; "\c1\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\bf" ;; "\c1\bf" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\00" ;; "\c2\00" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\7f" ;; "\c2\7f" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\c0" ;; "\c2\c0" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\fd" ;; "\c2\fd" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\00" ;; "\df\00" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\7f" ;; "\df\7f" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\c0" ;; "\df\c0" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\fd" ;; "\df\fd" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\e1\80\80\80" ;; "\e1\80\80\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\80" ;; "\e1\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\2e" ;; "\e1\80." ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\e1" ;; "\e1" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\2e" ;; "\e1." ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\00\a0" ;; "\e0\00\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\7f\a0" ;; "\e0\7f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\80" ;; "\e0\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\a0" ;; "\e0\80\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\a0" ;; "\e0\9f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\bf" ;; "\e0\9f\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\c0\a0" ;; "\e0\c0\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\fd\a0" ;; "\e0\fd\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\00\80" ;; "\e1\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\7f\80" ;; "\e1\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\c0\80" ;; "\e1\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\fd\80" ;; "\e1\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\00\80" ;; "\ec\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\7f\80" ;; "\ec\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\c0\80" ;; "\ec\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\fd\80" ;; "\ec\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\00\80" ;; "\ed\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\7f\80" ;; "\ed\7f\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\80" ;; "\ed\a0\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\bf" ;; "\ed\a0\bf" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\80" ;; "\ed\bf\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\bf" ;; "\ed\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\c0\80" ;; "\ed\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\fd\80" ;; "\ed\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\00\80" ;; "\ee\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\7f\80" ;; "\ee\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\c0\80" ;; "\ee\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\fd\80" ;; "\ee\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\00\80" ;; "\ef\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\7f\80" ;; "\ef\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\c0\80" ;; "\ef\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\fd\80" ;; "\ef\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\00" ;; "\e0\a0\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\7f" ;; "\e0\a0\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\c0" ;; "\e0\a0\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\fd" ;; "\e0\a0\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\00" ;; "\e1\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\7f" ;; "\e1\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\c0" ;; "\e1\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\fd" ;; "\e1\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\00" ;; "\ec\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\7f" ;; "\ec\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\c0" ;; "\ec\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\fd" ;; "\ec\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\00" ;; "\ed\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\7f" ;; "\ed\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\c0" ;; "\ed\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\fd" ;; "\ed\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\00" ;; "\ee\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\7f" ;; "\ee\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\c0" ;; "\ee\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\fd" ;; "\ee\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\00" ;; "\ef\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\7f" ;; "\ef\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\c0" ;; "\ef\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\fd" ;; "\ef\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\80" ;; "\f1\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\23" ;; "\f1\80\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\80" ;; "\f1\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\23" ;; "\f1\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f1" ;; "\f1" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\23" ;; "\f1#" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\00\90\90" ;; "\f0\00\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\7f\90\90" ;; "\f0\7f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\80\80" ;; "\f0\80\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\90\90" ;; "\f0\80\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\90\90" ;; "\f0\8f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\c0\90\90" ;; "\f0\c0\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\fd\90\90" ;; "\f0\fd\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\00\80\80" ;; "\f1\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\7f\80\80" ;; "\f1\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\c0\80\80" ;; "\f1\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\fd\80\80" ;; "\f1\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\00\80\80" ;; "\f3\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\7f\80\80" ;; "\f3\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\c0\80\80" ;; "\f3\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\fd\80\80" ;; "\f3\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\00\80\80" ;; "\f4\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\7f\80\80" ;; "\f4\7f\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\90\80\80" ;; "\f4\90\80\80" ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\bf\80\80" ;; "\f4\bf\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\c0\80\80" ;; "\f4\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\fd\80\80" ;; "\f4\fd\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f5\80\80\80" ;; "\f5\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\80\80\80" ;; "\f7\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\00\90" ;; "\f0\90\00\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\7f\90" ;; "\f0\90\7f\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\c0\90" ;; "\f0\90\c0\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\fd\90" ;; "\f0\90\fd\90" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\00\80" ;; "\f1\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\7f\80" ;; "\f1\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\c0\80" ;; "\f1\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\fd\80" ;; "\f1\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\00\80" ;; "\f3\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\7f\80" ;; "\f3\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\c0\80" ;; "\f3\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\fd\80" ;; "\f3\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\00\80" ;; "\f4\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\7f\80" ;; "\f4\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\c0\80" ;; "\f4\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\fd\80" ;; "\f4\80\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\00" ;; "\f0\90\90\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\7f" ;; "\f0\90\90\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\c0" ;; "\f0\90\90\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\fd" ;; "\f0\90\90\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\00" ;; "\f1\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\7f" ;; "\f1\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\c0" ;; "\f1\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\fd" ;; "\f1\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\00" ;; "\f3\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\7f" ;; "\f3\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\c0" ;; "\f3\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\fd" ;; "\f3\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\00" ;; "\f4\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\7f" ;; "\f4\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\c0" ;; "\f4\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\fd" ;; "\f4\80\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\80" ;; "\f8\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\80" ;; "\f8\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\23" ;; "\f8\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\80" ;; "\f8\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\23" ;; "\f8\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f8" ;; "\f8" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\23" ;; "\f8#" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\08" ;; custom section "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\80" ;; "\fc\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\80" ;; "\fc\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\23" ;; "\fc\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\80" ;; "\fc\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\23" ;; "\fc\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fc" ;; "\fc" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\23" ;; "\fc#" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fe" ;; "\fe" ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\ff" ;; "\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fe\ff" ;; "\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\00\00\fe\ff" ;; "\00\00\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\ff\fe" ;; "\ff\fe" ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\ff\fe\00\00" ;; "\ff\fe\00\00" ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/multi-memory/utf8-import-field.wast ================================================ ;;;;;; Invalid UTF-8 import field names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\80" ;; "\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\8f" ;; "\8f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\90" ;; "\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\9f" ;; "\9f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\a0" ;; "\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\bf" ;; "\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\c2\80\80" ;; "\c2\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\c2" ;; "\c2" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\2e" ;; "\c2." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\80" ;; "\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\bf" ;; "\c0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\80" ;; "\c1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\bf" ;; "\c1\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\00" ;; "\c2\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\7f" ;; "\c2\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\c0" ;; "\c2\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\fd" ;; "\c2\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\00" ;; "\df\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\7f" ;; "\df\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\c0" ;; "\df\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\fd" ;; "\df\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\e1\80\80\80" ;; "\e1\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\80" ;; "\e1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\2e" ;; "\e1\80." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\e1" ;; "\e1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\2e" ;; "\e1." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\00\a0" ;; "\e0\00\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\7f\a0" ;; "\e0\7f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\80" ;; "\e0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\a0" ;; "\e0\80\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\a0" ;; "\e0\9f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\bf" ;; "\e0\9f\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\c0\a0" ;; "\e0\c0\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\fd\a0" ;; "\e0\fd\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\00\80" ;; "\e1\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\7f\80" ;; "\e1\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\c0\80" ;; "\e1\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\fd\80" ;; "\e1\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\00\80" ;; "\ec\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\7f\80" ;; "\ec\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\c0\80" ;; "\ec\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\fd\80" ;; "\ec\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\00\80" ;; "\ed\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\7f\80" ;; "\ed\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\80" ;; "\ed\a0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\bf" ;; "\ed\a0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\80" ;; "\ed\bf\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\bf" ;; "\ed\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\c0\80" ;; "\ed\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\fd\80" ;; "\ed\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\00\80" ;; "\ee\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\7f\80" ;; "\ee\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\c0\80" ;; "\ee\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\fd\80" ;; "\ee\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\00\80" ;; "\ef\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\7f\80" ;; "\ef\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\c0\80" ;; "\ef\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\fd\80" ;; "\ef\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\00" ;; "\e0\a0\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\7f" ;; "\e0\a0\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\c0" ;; "\e0\a0\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\fd" ;; "\e0\a0\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\00" ;; "\e1\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\7f" ;; "\e1\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\c0" ;; "\e1\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\fd" ;; "\e1\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\00" ;; "\ec\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\7f" ;; "\ec\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\c0" ;; "\ec\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\fd" ;; "\ec\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\00" ;; "\ed\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\7f" ;; "\ed\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\c0" ;; "\ed\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\fd" ;; "\ed\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\00" ;; "\ee\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\7f" ;; "\ee\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\c0" ;; "\ee\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\fd" ;; "\ee\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\00" ;; "\ef\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\7f" ;; "\ef\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\c0" ;; "\ef\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\fd" ;; "\ef\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\80" ;; "\f1\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\23" ;; "\f1\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\80" ;; "\f1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\23" ;; "\f1\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f1" ;; "\f1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\23" ;; "\f1#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\00\90\90" ;; "\f0\00\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\80\80" ;; "\f0\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\90\90" ;; "\f0\80\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\00\80\80" ;; "\f1\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\00\80\80" ;; "\f3\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\00\80\80" ;; "\f4\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\90\80\80" ;; "\f4\90\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f5\80\80\80" ;; "\f5\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\80\80\80" ;; "\f7\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\00\90" ;; "\f0\90\00\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\00\80" ;; "\f1\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\00\80" ;; "\f3\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\00\80" ;; "\f4\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\00" ;; "\f0\90\90\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\00" ;; "\f1\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\00" ;; "\f3\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\00" ;; "\f4\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\80" ;; "\f8\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\80" ;; "\f8\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\23" ;; "\f8\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\80" ;; "\f8\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\23" ;; "\f8\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f8" ;; "\f8" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\23" ;; "\f8#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\80" ;; "\fc\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\80" ;; "\fc\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\23" ;; "\fc\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\80" ;; "\fc\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\23" ;; "\fc\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fc" ;; "\fc" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\23" ;; "\fc#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fe" ;; "\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\ff" ;; "\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fe\ff" ;; "\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\ff\fe" ;; "\ff\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/multi-memory/utf8-import-module.wast ================================================ ;;;;;; Invalid UTF-8 import module names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\80" ;; "\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\8f" ;; "\8f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\90" ;; "\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\9f" ;; "\9f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\a0" ;; "\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\bf" ;; "\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\c2\80\80" ;; "\c2\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\c2" ;; "\c2" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\2e" ;; "\c2." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\80" ;; "\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\bf" ;; "\c0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\80" ;; "\c1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\bf" ;; "\c1\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\00" ;; "\c2\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\7f" ;; "\c2\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\c0" ;; "\c2\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\fd" ;; "\c2\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\00" ;; "\df\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\7f" ;; "\df\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\c0" ;; "\df\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\fd" ;; "\df\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\e1\80\80\80" ;; "\e1\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\80" ;; "\e1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\2e" ;; "\e1\80." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\e1" ;; "\e1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\2e" ;; "\e1." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\00\a0" ;; "\e0\00\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\7f\a0" ;; "\e0\7f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\80" ;; "\e0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\a0" ;; "\e0\80\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\a0" ;; "\e0\9f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\bf" ;; "\e0\9f\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\c0\a0" ;; "\e0\c0\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\fd\a0" ;; "\e0\fd\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\00\80" ;; "\e1\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\7f\80" ;; "\e1\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\c0\80" ;; "\e1\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\fd\80" ;; "\e1\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\00\80" ;; "\ec\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\7f\80" ;; "\ec\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\c0\80" ;; "\ec\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\fd\80" ;; "\ec\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\00\80" ;; "\ed\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\7f\80" ;; "\ed\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\80" ;; "\ed\a0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\bf" ;; "\ed\a0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\80" ;; "\ed\bf\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\bf" ;; "\ed\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\c0\80" ;; "\ed\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\fd\80" ;; "\ed\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\00\80" ;; "\ee\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\7f\80" ;; "\ee\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\c0\80" ;; "\ee\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\fd\80" ;; "\ee\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\00\80" ;; "\ef\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\7f\80" ;; "\ef\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\c0\80" ;; "\ef\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\fd\80" ;; "\ef\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\00" ;; "\e0\a0\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\7f" ;; "\e0\a0\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\c0" ;; "\e0\a0\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\fd" ;; "\e0\a0\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\00" ;; "\e1\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\7f" ;; "\e1\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\c0" ;; "\e1\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\fd" ;; "\e1\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\00" ;; "\ec\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\7f" ;; "\ec\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\c0" ;; "\ec\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\fd" ;; "\ec\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\00" ;; "\ed\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\7f" ;; "\ed\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\c0" ;; "\ed\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\fd" ;; "\ed\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\00" ;; "\ee\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\7f" ;; "\ee\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\c0" ;; "\ee\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\fd" ;; "\ee\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\00" ;; "\ef\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\7f" ;; "\ef\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\c0" ;; "\ef\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\fd" ;; "\ef\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\80" ;; "\f1\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\23" ;; "\f1\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\80" ;; "\f1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\23" ;; "\f1\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f1" ;; "\f1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\23" ;; "\f1#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\00\90\90" ;; "\f0\00\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\80\80" ;; "\f0\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\90\90" ;; "\f0\80\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\00\80\80" ;; "\f1\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\00\80\80" ;; "\f3\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\00\80\80" ;; "\f4\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\90\80\80" ;; "\f4\90\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f5\80\80\80" ;; "\f5\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\80\80\80" ;; "\f7\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\00\90" ;; "\f0\90\00\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\00\80" ;; "\f1\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\00\80" ;; "\f3\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\00\80" ;; "\f4\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\00" ;; "\f0\90\90\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\00" ;; "\f1\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\00" ;; "\f3\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\00" ;; "\f4\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\80" ;; "\f8\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\80" ;; "\f8\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\23" ;; "\f8\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\80" ;; "\f8\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\23" ;; "\f8\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f8" ;; "\f8" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\23" ;; "\f8#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\80" ;; "\fc\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\80" ;; "\fc\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\23" ;; "\fc\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\80" ;; "\fc\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\23" ;; "\fc\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fc" ;; "\fc" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\23" ;; "\fc#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fe" ;; "\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\ff" ;; "\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fe\ff" ;; "\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\ff\fe" ;; "\ff\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/multi-memory/utf8-invalid-encoding.wast ================================================ (assert_malformed (module quote "(func (export \"\\00\\00\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\8f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\9f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\00\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\7f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\c0\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\fd\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\00\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\7f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\00\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\7f\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\c0\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\fd\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\c0\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\fd\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\90\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\bf\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f5\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fb\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fd\\bf\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\\00\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\"))") "malformed UTF-8 encoding") ================================================ FILE: Test/WebAssembly/spec/address.wast ================================================ ;; Load i32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i32) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i32) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i32) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i32) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i32) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i32) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") (assert_malformed (module quote "(memory 1)" "(func (drop (i32.load offset=4294967296 (i32.const 0))))" ) "i32 constant" ) ;; Load i64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i32) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i32) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i32) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i32) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i32) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i32) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i32) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i32) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i32) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i32) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i32) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i32) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i32) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i32) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i32) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i32) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i32) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i32) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i32) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i32) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i32) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i32) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i32) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i32) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i32) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i32) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i32) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i32) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i32) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i32) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/spec/align.wast ================================================ ;; Test alignment annotation rules (module (memory 0) (func (drop (i32.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_s align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_u align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load align=8 (i32.const 0))))) (module (memory 0) (func (drop (f32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (f64.load align=8 (i32.const 0))))) (module (memory 0) (func (i32.store8 align=1 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store16 align=2 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store align=4 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i64.store8 align=1 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store16 align=2 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store32 align=4 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store align=8 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (f32.store align=4 (i32.const 0) (f32.const 1.0)))) (module (memory 0) (func (f64.store align=8 (i32.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store8 align=2 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store16 align=4 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store align=8 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store8 align=2 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store16 align=4 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store32 align=8 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f32.store align=8 (i32.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f64.store align=16 (i32.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i32.const 0) (local.get 1)) (local.set 2 (f32.load (i32.const 0))) (br $4) ) ;; default (f32.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i32.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i32.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i32.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i32.const 0) (local.get 1)) (local.set 2 (f64.load (i32.const 0))) (br $8) ) ;; default (f64.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i32.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i32.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i32.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i32.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i32.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i32.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i32.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i32.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i32.const 0) (local.get 2)) (local.set 3 (i32.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i32.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i32.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i32.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i32.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i32.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i32.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i32.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i32.const 0) (local.get 2)) (local.set 3 (i64.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i32.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory 1) (func (export "store") (param i32 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i32) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i32.const 65532)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/spec/binary-leb128.wast ================================================ ;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\06\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Memory index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\09\01" ;; Element section with 1 entry "\02" ;; Element with explicit table index "\80\00" ;; Table index 0, encoded with 2 bytes "\41\00\0b\00\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\8a\00" ;; section size 10, encoded with 2 bytes "\01" ;; name byte count "1" ;; name "23456789" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0b" ;; section size "\88\00" ;; name byte count 8, encoded with 2 bytes "12345678" ;; name "9" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\82\00" ;; num params 2, encoded with 2 bytes "\7f\7e" ;; param type "\01" ;; num results "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\00" ;; num results 1, encoded with 2 bytes "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\88\00" ;; module name length 8, encoded with 2 bytes "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\00" ;; entity name length 9, encoded with 2 bytes "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\00" ;; import signature index, encoded with 2 bytes ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\00" ;; function 0 signature index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\82\00" ;; string length 2, encoded with 2 bytes "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\00" ;; export func index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\00" ;; num functions, encoded with 2 bytes "\02\00\0b" ;; function body ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\0a\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\00" ;; max 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0b\01" ;; Data section with 1 entry "\80\80\80\80\80\00" ;; Memory index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0b\01" ;; Element section with 1 entry "\80\80\80\80\80\00" ;; Table index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\80\00" ;; section size 3 with one byte too many "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0A" ;; section size "\83\80\80\80\80\00" ;; name byte count 3 with one byte too many "123" ;; name "4" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0c\01" ;; type section "\60" ;; func type "\82\80\80\80\80\00" ;; num params 2 with one byte too many "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\80\00" ;; num result 1 with one byte too many "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\88\80\80\80\80\00" ;; module name length 8 with one byte too many "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\80\00" ;; entity name length 9 with one byte too many "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\80\00" ;; import signature index 0 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\80\80\80\80\00" ;; function 0 signature index with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\82\80\80\80\80\00" ;; string length 2 with one byte too many "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\80\00" ;; export func index 0 with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\80\80\80\80\00" ;; num functions 1 with one byte too many "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\10" ;; max 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\40" ;; max 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0a\01" ;; Data section with 1 entry "\80\80\80\80\10" ;; Memory index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0a\01" ;; Element section with 1 entry "\80\80\80\80\10" ;; Table index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\10" ;; section size 3 with unused bits set "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\09" ;; section size "\83\80\80\80\40" ;; name byte count 3 with unused bits set "123" ;; name "4" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\82\80\80\80\10" ;; num params 2 with unused bits set "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\40" ;; num result 1 with unused bits set "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\88\80\80\80\10" ;; module name length 8 with unused bits set "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\40" ;; entity name length 9 with unused bits set "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\10" ;; import signature index 0 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\06\01" ;; function section "\80\80\80\80\10" ;; function 0 signature index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\82\80\80\80\10" ;; string length 2 with unused bits set "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\10" ;; export func index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\08" ;; section size "\81\80\80\80\10" ;; num functions 1 with unused bits set "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\1b\01\19" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\80\00" ;; i32_trunc_sat_f32_s with 2 bytes "\00" ;; unreachable "\fc\81\80\00" ;; i32_trunc_sat_f32_u with 3 bytes "\00" ;; unreachable "\fc\86\80\80\00" ;; i64_trunc_sat_f64_s with 4 bytes "\00" ;; unreachable "\fc\87\80\80\80\00" ;; i64_trunc_sat_f64_u with 5 bytes "\00" ;; unreachable "\0b" ;; end ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\0d\01\0b" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\87\80\80\80\80\00" ;; i64_trunc_sat_f64_u with 6 bytes "\00" ;; unreachable "\0b" ;; end ) "integer representation too long" ) ================================================ FILE: Test/WebAssembly/spec/binary.wast ================================================ (module binary "\00asm\01\00\00\00") (module binary "\00asm" "\01\00\00\00") (module $M1 binary "\00asm\01\00\00\00") (module $M2 binary "\00asm" "\01\00\00\00") (assert_malformed (module binary "") "unexpected end") (assert_malformed (module binary "\01") "unexpected end") (assert_malformed (module binary "\00as") "unexpected end") (assert_malformed (module binary "asm\00") "magic header not detected") (assert_malformed (module binary "msa\00") "magic header not detected") (assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") (assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") (assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") (assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") ;; 8-byte endian-reversed. (assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") ;; Middle-endian byte orderings. (assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") (assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") ;; Upper-cased. (assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") ;; EBCDIC-encoded magic. (assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") ;; Leading UTF-8 BOM. (assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") ;; Malformed binary version. (assert_malformed (module binary "\00asm") "unexpected end") (assert_malformed (module binary "\00asm\01") "unexpected end") (assert_malformed (module binary "\00asm\01\00\00") "unexpected end") (assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") ;; Invalid section id. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0d\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\7f\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\80\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\81\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\ff\00\01\00") "malformed section id") ;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\06\01" ;; Data section with 1 entry "\00" ;; Memory index 0 "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\06\01" ;; Element section with 1 entry "\00" ;; Table index 0 "\41\00\0b\00" ;; (i32.const 0) with no elements ) ;; Data segment tags and memory index can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Active segment, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\08\01" ;; Data section with 1 entry "\82\00" ;; Active segment, encoded with 2 bytes "\00" ;; explicit memory index "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\09\01" ;; Data section with 1 entry "\82\00" ;; Active segment, encoded with 2 bytes "\80\00" ;; explicit memory index, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) ;; Element segment tags and table index can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\07\01" ;; Element section with 1 entry "\80\00" ;; Active segment "\41\00\0b\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\09\01" ;; Element section with 1 entry "\02" ;; Active segment "\80\00" ;; explicit table index, encoded with 2 bytes "\41\00\0b\00\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\09\01" ;; Element section with 1 entry "\82\00" ;; Active segment, encoded with 2 bytes "\00" ;; explicit table index "\41\00\0b\00\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0a\01" ;; Element section with 1 entry "\82\00" ;; Active segment, encoded with 2 bytes "\80\00" ;; explicit table index, encoded with 2 bytes "\41\00\0b\00\00" ;; (i32.const 0) with no elements ) ;; Type section with signed LEB128 encoded type (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01" ;; Type section id "\05" ;; Type section length "\01" ;; Types vector length "\e0\7f" ;; Malformed functype, -0x20 in signed LEB128 encoding "\00\00" ) "integer representation too long" ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) ;; Function with missing end marker (between two functions) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section: 1 type "\03\03\02\00\00" ;; Function section: 2 functions "\0a\0c\02" ;; Code section: 2 functions ;; function 0 "\04\00" ;; Function size and local type count "\41\01" ;; i32.const 1 "\1a" ;; drop ;; Missing end marker here ;; function 1 "\05\00" ;; Function size and local type count "\41\01" ;; i32.const 1 "\1a" ;; drop "\0b" ;; end ) "END opcode expected" ) ;; Function with missing end marker (at EOF) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section: 1 type "\03\02\01\00" ;; Function section: 1 function "\0a\06\01" ;; Code section: 1 function ;; function 0 "\04\00" ;; Function size and local type count "\41\01" ;; i32.const 1 "\1a" ;; drop ;; Missing end marker here ) "unexpected end of section or function" ) ;; Function with missing end marker (at end of code sections) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section: 1 type "\03\02\01\00" ;; Function section: 1 function "\0a\06\01" ;; Code section: 1 function ;; function 0 "\04\00" ;; Function size and local type count "\41\01" ;; i32.const 1 "\1a" ;; drop ;; Missing end marker here "\0b\03\01\01\00" ;; Data section ) ;; The spec interpreter consumes the `\0b` (data section start) as an ;; END instruction (also happens to be `\0b`) and reports the code section as ;; being larger than declared. "section size mismatch" ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) ;; memory.grow reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\01" ;; memory.grow reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) ;; memory.grow reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0c\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0d\01" ;; Code section ;; function 0 "\0b\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) ;; memory.size reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\07\01" ;; Code section ;; function 0 "\05\00" "\3f" ;; memory.size "\01" ;; memory.size reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) ;; memory.size reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\08\01" ;; Code section ;; function 0 "\06\00" "\3f" ;; memory.size "\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\3f" ;; memory.size "\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\3f" ;; memory.size "\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\3f" ;; memory.size "\80\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero byte expected" ) ;; Local number is unsigned 32 bit (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\80\80\80\80\10\7f" ;; 0x100000000 i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "integer too large" ) ;; Local number is unsigned 32 bit (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\80\80\80\80\10\7f" ;; 0x100000000 i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "integer too large" ) ;; No more than 2^32-1 locals. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\ff\ff\ff\ff\0f\7f" ;; 0xFFFFFFFF i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "too many locals" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\06\01\60\02\7f\7f\00" ;; Type section: (param i32 i32) "\03\02\01\00" ;; Function section "\0a\1c\01" ;; Code section ;; function 0 "\1a\04" "\80\80\80\80\04\7f" ;; 0x40000000 i32 "\80\80\80\80\04\7e" ;; 0x40000000 i64 "\80\80\80\80\04\7d" ;; 0x40000000 f32 "\80\80\80\80\04\7c" ;; 0x40000000 f64 "\0b" ;; end ) "too many locals" ) ;; Local count can be 0. (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0a\01" ;; Code section ;; function 0 "\08\03" "\00\7f" ;; 0 i32 "\00\7e" ;; 0 i64 "\02\7d" ;; 2 f32 "\0b" ;; end ) ;; Function section has non-zero count, but code section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions ) "function and code section have inconsistent lengths" ) ;; Code section has non-zero count, but function section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count > code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count < code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section with 1 function "\0a\07\02\02\00\0b\02\00\0b" ;; Code section with 2 empty functions ) "function and code section have inconsistent lengths" ) ;; Function section has zero count, and code section is absent. (module binary "\00asm" "\01\00\00\00" "\03\01\00" ;; Function section with 0 functions ) ;; Code section has zero count, and function section is absent. (module binary "\00asm" "\01\00\00\00" "\0a\01\00" ;; Code section with 0 functions ) ;; Fewer passive segments than datacount (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0c\01\03" ;; Datacount section with value "3" "\0b\05\02" ;; Data section with two entries "\01\00" ;; Passive data section "\01\00") ;; Passive data section "data count and data section have inconsistent lengths") ;; More passive segments than datacount (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0c\01\01" ;; Datacount section with value "1" "\0b\05\02" ;; Data section with two entries "\01\00" ;; Passive data section "\01\00") ;; Passive data section "data count and data section have inconsistent lengths") ;; memory.init requires a datacount section (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0e\01" ;; Code section ;; function 0 "\0c\00" "\41\00" ;; zero args "\41\00" "\41\00" "\fc\08\00\00" ;; memory.init "\0b" "\0b\03\01\01\00" ;; Data section ) ;; end "data count section required") ;; data.drop requires a datacount section (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\07\01" ;; Code section ;; function 0 "\05\00" "\fc\09\00" ;; data.drop "\0b" "\0b\03\01\01\00" ;; Data section ) ;; end "data count section required") ;; passive element segment containing opcode other than ref.func or ref.null (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\70" ;; Passive, funcref "\01" ;; 1 element "\d3\00\0b" ;; bad opcode, index 0, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end "illegal opcode") ;; passive element segment containing type other than funcref (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\7f" ;; Passive, i32 "\01" ;; 1 element "\d2\00\0b" ;; ref.func, index 0, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end "malformed reference type") ;; passive element segment containing opcode ref.func (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\70" ;; Passive, funcref "\01" ;; 1 element "\d2\00\0b" ;; ref.func, index 0, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end ;; passive element segment containing opcode ref.null (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\05\03\01\00\00" ;; Memory section "\09\07\01" ;; Element section with one segment "\05\70" ;; Passive, funcref "\01" ;; 1 element "\d0\70\0b" ;; ref.null, end "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b") ;; end ;; Type count can be zero (module binary "\00asm" "\01\00\00\00" "\01\01\00" ;; type count can be zero ) ;; 2 type declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\02" ;; type section with inconsistent count (2 declared, 1 given) "\60\00\00" ;; 1st type ;; "\60\00\00" ;; 2nd type (missed) ) "length out of bounds" ) ;; 1 type declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01" ;; type section with inconsistent count (1 declared, 2 given) "\60\00\00" ;; 1st type "\60\00\00" ;; 2nd type (redundant) ) "section size mismatch" ) ;; Import count can be zero (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\01\00" ;; import count can be zero ) ;; Malformed import kind (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) ;; 2 import declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\16\02" ;; import section with inconsistent count (2 declared, 1 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (missed) ) "unexpected end of section or function" ) ;; 1 import declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\09\02" ;; type section "\60\01\7f\00" ;; type 0 "\60\01\7d\00" ;; type 1 "\02\2b\01" ;; import section with inconsistent count (1 declared, 2 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (redundant) "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\66\33\32" ;; print_f32 "\00\01" ;; import kind, import signature index ) "section size mismatch" ) ;; Table count can be zero (module binary "\00asm" "\01\00\00\00" "\04\01\00" ;; table count can be zero ) ;; 1 table declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\01\01" ;; table section with inconsistent count (1 declared, 0 given) ;; "\70\01\00\00" ;; table entity ) "unexpected end of section or function" ) ;; Malformed table limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\03\01" ;; table section with one entry "\70" ;; anyfunc "\02" ;; malformed table limits flag ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; table section with one entry "\70" ;; anyfunc "\02" ;; malformed table limits flag "\00" ;; dummy byte ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\06\01" ;; table section with one entry "\70" ;; anyfunc "\81\00" ;; malformed table limits flag as LEB128 "\00\00" ;; dummy bytes ) "integer representation too long" ) ;; Memory count can be zero (module binary "\00asm" "\01\00\00\00" "\05\01\00" ;; memory count can be zero ) ;; 1 memory declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\01\01" ;; memory section with inconsistent count (1 declared, 0 given) ;; "\00\00" ;; memory 0 (missed) ) "unexpected end of section or function" ) ;; Malformed memory limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\02\01" ;; memory section with one entry "\02" ;; malformed memory limits flag ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section with one entry "\02" ;; malformed memory limits flag "\00" ;; dummy byte ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\05\01" ;; memory section with one entry "\81\00" ;; malformed memory limits flag as LEB128 "\00\00" ;; dummy bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\05\01" ;; memory section with one entry "\81\01" ;; malformed memory limits flag as LEB128 "\00\00" ;; dummy bytes ) "integer representation too long" ) ;; Global count can be zero (module binary "\00asm" "\01\00\00\00" "\06\01\00" ;; global count can be zero ) ;; 2 global declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\06\02" ;; global section with inconsistent count (2 declared, 1 given) "\7f\00\41\00\0b" ;; global 0 ;; "\7f\00\41\00\0b" ;; global 1 (missed) ) "unexpected end of section or function" ) ;; 1 global declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; global section with inconsistent count (1 declared, 2 given) "\7f\00\41\00\0b" ;; global 0 "\7f\00\41\00\0b" ;; global 1 (redundant) ) "section size mismatch" ) ;; Export count can be 0 (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\01\00" ;; export count can be zero "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) ;; 2 export declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\06\02" ;; export section with inconsistent count (2 declared, 1 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index ;; "\02" ;; export 1 (missed) ;; "\66\32" ;; export name ;; "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "length out of bounds" ) ;; 1 export declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\0b\01" ;; export section with inconsistent count (1 declared, 2 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index "\02" ;; export 1 (redundant) "\66\32" ;; export name "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "section size mismatch" ) ;; elem segment count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\01\00" ;; elem segment count can be zero "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) ;; 2 elem segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 ;; "\00\41\00\0b\01\00" ;; elem 1 (missed) ) "unexpected end" ) ;; 2 elem segment declared, 1.5 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\0a\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00" ;; elem 1 (partial) ;; "\0b\01\00" ;; elem 1 (missing part) ) "unexpected end" ) ;; 1 elem segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\0d\01" ;; elem with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00\0b\01\00" ;; elem 1 (redundant) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "section size mismatch" ) ;; data segment count can be zero (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\01\00" ;; data segment count can be zero ) ;; 2 data segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\07\02" ;; data with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\61" ;; data 0 ;; "\00\41\01\0b\01\62" ;; data 1 (missed) ) "unexpected end of section or function" ) ;; 1 data segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0d\01" ;; data with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\61" ;; data 0 "\00\41\01\0b\01\62" ;; data 1 (redundant) ) "section size mismatch" ) ;; data segment has 7 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\03\0b" ;; data segment 0 "\07" ;; data segment size with inconsistent lengths (7 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "unexpected end of section or function" ) ;; data segment has 5 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\00\0b" ;; data segment 0 "\05" ;; data segment size with inconsistent lengths (5 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "section size mismatch" ) ;; br_table target count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\11\01" ;; code section "\0f\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\00" ;; br_table target count can be zero "\02" ;; break depth for default "\0b\0b\0b" ;; end ) ;; 1 br_table target declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\13\01" ;; code section "\11\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\01" ;; br_table with inconsistent target count (1 declared, 2 given) "\00" ;; break depth 0 "\01" ;; break depth 1 "\02" ;; break depth for default "\0b\0b\0b" ;; end ) "unexpected end" ) ;; Start section (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) ;; Multiple start sections (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) "unexpected content after last section" ) ================================================ FILE: Test/WebAssembly/spec/block.wast ================================================ ;; Test `block` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (block) (block $l) ) (func (export "singular") (result i32) (block (nop)) (block (result i32) (i32.const 7)) ) (func (export "multi") (result i32) (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 7) (call $dummy) ) (drop) (block (result i32 i64 i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i64.const 7) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i32.const 9) (call $dummy) ) (drop) (drop) ) (func (export "nested") (result i32) (block (result i32) (block (call $dummy) (block) (nop)) (block (result i32) (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (call $dummy) (i32.const 150) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) ) (func (export "as-select-first") (result i32) (select (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (block (result i32) (i32.const 1))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (block (result i32) (i32.const 1)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (block (result i32) (i32.const 1)) (call $dummy)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (block (result i32) (i32.const 1))) ) (func (export "as-if-condition") (block (result i32) (i32.const 1)) (if (then (call $dummy))) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (block (result i32) (i32.const 1))) (else (i32.const 2))) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 1) (then (i32.const 2)) (else (block (result i32) (i32.const 1)))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (block (result i32) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (block (result i32) (i32.const 1)))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (block (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (block (result i32) (i32.const 1)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (block (result i32) (i32.const 0)) ) ) ) (func (export "as-store-first") (block (result i32) (i32.const 1)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (block (result i32) (i32.const 1)) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (block (result i32) (i32.const 1))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (block (result i32) (i32.const 1))) ) (func (export "as-return-value") (result i32) (block (result i32) (i32.const 1)) (return) ) (func (export "as-drop-operand") (drop (block (result i32) (i32.const 1))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (block (result i32) (i32.const 1)))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (block (result i32) (i32.const 1))) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (block (result i32) (i32.const 1))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (block (result i32) (i32.const 1))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (block (result i32) (i32.const 1))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (block (result i32) (call $dummy) (i32.const 3)) (block (result i32) (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (block (result f32) (call $dummy) (f32.const 3)) (block (result f32) (call $dummy) (f32.const 3)) ) ) (func (export "as-binary-operands") (result i32) (i32.mul (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) ) ) (func (export "as-compare-operands") (result i32) (f32.gt (block (result f32 f32) (call $dummy) (f32.const 3) (call $dummy) (f32.const 3) ) ) ) (func (export "as-mixed-operands") (result i32) (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (block (br 0) (unreachable)) (block (br_if 0 (i32.const 1)) (unreachable)) (block (br_table 0 (i32.const 0)) (unreachable)) (block (br_table 0 0 0 (i32.const 1)) (unreachable)) (i32.const 19) ) (func (export "break-value") (result i32) (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) ) (func (export "break-multi-value") (result i32 i32 i64) (block (result i32 i32 i64) (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) ) (func (export "break-repeated") (result i32) (block (result i32) (br 0 (i32.const 18)) (br 0 (i32.const 19)) (drop (br_if 0 (i32.const 20) (i32.const 0))) (drop (br_if 0 (i32.const 20) (i32.const 1))) (br 0 (i32.const 21)) (br_table 0 (i32.const 22) (i32.const 4)) (br_table 0 0 0 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) ) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) ) (local.get 0) ) (func (export "param") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) ) ) (func (export "params") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) ) ) (func (export "params-id") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32)) (i32.add) ) (func (export "param-break") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) (br 0) ) ) (func (export "params-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) (br 0) ) ) (func (export "params-id-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32) (br 0)) (i32.add) ) (func (export "effects") (result i32) (local i32) (block (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 0) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) (i32.eq (local.get 0) (i32.const -14)) ) (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (block (type $block-sig-1)) (block (type $block-sig-2) (i32.const 0)) (block (type $block-sig-3) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4)) (drop) (drop) (drop) (block (type $block-sig-2) (result i32) (i32.const 0)) (block (type $block-sig-3) (param i32) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-select-first") (i32.const 1)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 1)) (assert_return (invoke "as-loop-mid") (i32.const 1)) (assert_return (invoke "as-loop-last") (i32.const 1)) (assert_return (invoke "as-if-condition")) (assert_return (invoke "as-if-then") (i32.const 1)) (assert_return (invoke "as-if-else") (i32.const 2)) (assert_return (invoke "as-br_if-first") (i32.const 1)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 1)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-local.set-value") (i32.const 1)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "as-binary-operands") (i32.const 12)) (assert_return (invoke "as-compare-operands") (i32.const 0)) (assert_return (invoke "as-mixed-operands") (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-multi-value") (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0xf)) (assert_return (invoke "param") (i32.const 3)) (assert_return (invoke "params") (i32.const 3)) (assert_return (invoke "params-id") (i32.const 3)) (assert_return (invoke "param-break") (i32.const 3)) (assert_return (invoke "params-break") (i32.const 3)) (assert_return (invoke "params-id-break") (i32.const 3)) (assert_return (invoke "effects") (i32.const 1)) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (type $sig) (result i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (result i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (type $sig) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (param i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (param $x i32) (drop)))") "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (drop)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (result i32)) (unreachable))" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (block (type $sig) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (block))) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-void (block (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-void (block (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-void (block (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-void (block (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (block (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i32 (result i32) (block (result i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i64 (result i64) (block (result i64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f32 (result f32) (block (result f32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f64 (result f64) (block (result f64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-nums (result i32 i32) (block (result i32 i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-block (i32.const 0) (block (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-loop (i32.const 0) (loop (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (block (result i32)) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i32 (result i32) (block (result i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i64 (result i64) (block (result i64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f32 (result f32) (block (result f32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f64 (result f64) (block (result f64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (block (result i32 i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-i64 (result i32) (block (result i32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f32 (result i32) (block (result i32) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f64 (result i32) (block (result i32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-i32 (result i64) (block (result i64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f32 (result i64) (block (result i64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f64 (result i64) (block (result i64) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i32 (result f32) (block (result f32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i64 (result f32) (block (result f32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-f64 (result f32) (block (result f32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i32 (result f64) (block (result f64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i64 (result f64) (block (result f64) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-f32 (result f32) (block (result f64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result i32 i32) (block (result i32 i32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result i32) (block (result i32) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-i64 (result i32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f32 (result i32) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f64 (result i32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-i32 (result i64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f32 (result i64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f64 (result i64) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i32 (result f32) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i64 (result f32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-f64 (result f32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i32 (result f64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i64 (result f64) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-f32 (result f64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i32 (result i32) (block (result i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i64 (result i64) (block (result i64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f32 (result f32) (block (result f32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f64 (result f64) (block (result f64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i32 (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i64 (result i64) (block (result i64) (br 0) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f32 (result f32) (block (result f32) (br 0) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f64 (result f64) (block (result f64) (br 0) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-nums (result i32 i32) (block (result i32 i32) (br 0) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i32 (result f64) (block (result i64) (br 0 (i32.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (nop)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i32 (result f64) (block (result f64) (br 0 (i32.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-void (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-void (block (result i64) (block (result i64) (br 1 (i64.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-void (block (result f32) (block (result f32) (br 1 (f32.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-void (block (result f64) (block (result f64) (br 1 (f64.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-nums-vs-void (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 1) (i32.const 2))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i32 (result i32) (block (result i32) (block (br 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i64 (result i64) (block (result i64) (block (br 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f32 (result f32) (block (result f32) (block (br 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f64 (result f64) (block (result f64) (block (br 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i32 (result i32) (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i64 (result i64) (block (result i64) (block (result i64) (br 1 (nop))) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f32 (result f32) (block (result f32) (block (result f32) (br 1 (nop))) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f64 (result f64) (block (result f64) (block (result f64) (br 1 (nop))) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-i64 (result i32) (block (result i32) (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f32 (result i32) (block (result i32) (block (result i32) (br 1 (f32.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f64 (result i32) (block (result i32) (block (result i32) (br 1 (f64.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-i32 (result i64) (block (result i64) (block (result i64) (br 1 (i32.const 1))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f32 (result i64) (block (result i64) (block (result i64) (br 1 (f32.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f64 (result i64) (block (result i64) (block (result i64) (br 1 (f64.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i32 (result f32) (block (result f32) (block (result f32) (br 1 (i32.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i64 (result f32) (block (result f32) (block (result f32) (br 1 (i64.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-f64 (result f32) (block (result f32) (block (result f32) (br 1 (f64.const 1.0))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i32 (result f64) (block (result f64) (block (result f64) (br 1 (i32.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i64 (result f64) (block (result f64) (block (result f64) (br 1 (i64.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-f32 (result f64) (block (result f64) (block (result f64) (br 1 (f32.const 1.0))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 0))) (br 0 (i32.const 1) (i32.const 2)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i32 (result i32) (i32.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i64 (result i64) (i64.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f32 (result f32) (f32.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f64 (result f64) (f64.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-nums (result i32) (i32.add (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i32 (result i32) (i32.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i64 (result i64) (i64.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f32 (result f32) (f32.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f64 (result f64) (f64.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-nums (result i32) (i32.add (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-i64 (result i32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f32 (result i32) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f64 (result i32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-i32 (result i64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f32 (result i64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f64 (result i64) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i32 (result f32) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i64 (result f32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-f64 (result f32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i32 (result f64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i64 (result f64) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-f32 (result f64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-num-vs-nums (result i32) (i32.add (block (br 0 (i64.const 9) (i32.const 10)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (param i32 f64) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (block (param f32 i32) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (block (param i32 f64) (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (block (param f32 i32) (drop) (drop))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) block (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (block (param $x i32)))") "unexpected token" ) (assert_malformed (module quote "(func block end $l)") "mismatching label" ) (assert_malformed (module quote "(func block $a end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/spec/br.wast ================================================ ;; Test `br` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br 0))))) (func (export "type-i64") (block (drop (i64.ctz (br 0))))) (func (export "type-f32") (block (drop (f32.neg (br 0))))) (func (export "type-f64") (block (drop (f64.neg (br 0))))) (func (export "type-i32-i32") (block (drop (i32.add (br 0))))) (func (export "type-i64-i64") (block (drop (i64.add (br 0))))) (func (export "type-f32-f32") (block (drop (f32.add (br 0))))) (func (export "type-f64-f64") (block (drop (f64.add (br 0))))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br 0 (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br 0 (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br 0 (f64.const 4)))) ) (func (export "type-f64-f64-value") (result f64 f64) (block (result f64 f64) (f64.add (br 0 (f64.const 4) (f64.const 5))) (f64.const 6) ) ) (func (export "as-block-first") (block (br 0) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br 0) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br 0)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br 0 (i32.const 2))) ) (func (export "as-loop-first") (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 3)) (i32.const 2))) ) (func (export "as-loop-mid") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 4)) (i32.const 2)) ) ) (func (export "as-loop-last") (result i32) (block (result i32) (loop (result i32) (nop) (call $dummy) (br 1 (i32.const 5))) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br 0 (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br 0))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br 0 (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br 0))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br 0 (i64.const 7)))) ) (func (export "as-return-values") (result i32 i64) (i32.const 2) (block (result i64) (return (br 0 (i32.const 1) (i64.const 7)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br 0 (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br 1 (i32.const 3))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br 1 (i32.const 4))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br 0 (i32.const 5)) (local.get 0) (local.get 1)) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br 0 (i32.const 6)) (local.get 1)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7))) ) ) (func (export "as-select-all") (result i32) (block (result i32) (select (br 0 (i32.const 8)))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3)) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3)) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14))) ) ) (func (export "as-call-all") (result i32) (block (result i32) (call $f (br 0 (i32.const 15)))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) ) ) ) (func (export "as-call_indirect-all") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 24)))) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br 0 (i32.const 17))) (i32.const -1)) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.tee 0 (br 0 (i32.const 1)))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br 0 (i32.const 1)))) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br 0 (f32.const 1.7)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br 0 (i64.const 30)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1) ) ) (func (export "as-store-both") (result i32) (block (result i32) (i64.store (br 0 (i32.const 32))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1) ) ) (func (export "as-storeN-both") (result i32) (block (result i32) (i64.store16 (br 0 (i32.const 34))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3.4)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br 0 (i32.const 3)) (i32.const 10))) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br 0 (i64.const 45)))) ) (func (export "as-binary-both") (result i32) (block (result i32) (i32.add (br 0 (i32.const 46)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br 0 (i32.const 44)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br 0 (i32.const 43)) (f64.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br 0 (i32.const 42)))) ) (func (export "as-compare-both") (result i32) (block (result i32) (f64.le (br 0 (i32.const 44)))) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br 0 (i32.const 41)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br 0 (i32.const 40)))) ) (func (export "nested-block-value") (result i32) (i32.add (i32.const 1) (block (result i32) (call $dummy) (i32.add (i32.const 4) (br 0 (i32.const 8))) ) ) ) (func (export "nested-br-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br 1 (i32.const 8))) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br 1 (i32.const 8)) (i32.const 1))) (i32.const 32) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) ) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br 0 (i32.const 8))) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-i32")) (assert_return (invoke "type-i64-i64")) (assert_return (invoke "type-f32-f32")) (assert_return (invoke "type-f64-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "type-f64-f64-value") (f64.const 4) (f64.const 5)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-return-values") (i32.const 2) (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-select-all") (i32.const 8)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call-all") (i32.const 15)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-call_indirect-all") (i32.const 24)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-store-both") (i32.const 32)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-storeN-both") (i32.const 34)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-binary-both") (i32.const 46)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-compare-both") (i32.const 44)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value") (i32.const 9)) (assert_return (invoke "nested-br-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) (assert_return (invoke "nested-br_table-value") (i32.const 9)) (assert_return (invoke "nested-br_table-value-index") (i32.const 9)) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br (i32.const 0) (block (result i32) (br 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_if (i32.const 0) (block (result i32) (br_if 0 (br 0) (i32.const 1))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_table (i32.const 0) (block (result i32) (br_table 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-return (block (result i32) (return (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-select (block (result i32) (select (br 0) (i32.const 1) (i32.const 2)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-call (block (result i32) (call 1 (br 0)) ) (i32.eqz) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-arg-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (br 0) (i32.const 0) ) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.set (local i32) (block (result i32) (local.set 0 (br 0)) (local.get 0) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.tee (local i32) (block (result i32) (local.tee 0 (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-arg-empty-in-global.set (block (result i32) (global.set $x (br 0)) (global.get $x) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-arg-empty-in-memory.grow (block (result i32) (memory.grow (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-load (block (result i32) (i32.load (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-store (block (result i32) (i32.store (br 0) (i32.const 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br 1))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br 5))))) "unknown label" ) (assert_invalid (module (func $large-label (br 0x10000001))) "unknown label" ) ================================================ FILE: Test/WebAssembly/spec/br_if.wast ================================================ ;; Test `br_if` operator (module (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_if 0 (i32.const 0) (i32.const 1))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_if 0 (i64.const 0) (i32.const 1))))) ) (func (export "type-f32") (block (drop (f32.neg (br_if 0 (f32.const 0) (i32.const 1))))) ) (func (export "type-f64") (block (drop (f64.neg (br_if 0 (f64.const 0) (i32.const 1))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_if 0 (i64.const 2) (i32.const 1)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_if 0 (f32.const 3) (i32.const 1)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 4) (i32.const 1)))) ) (func (export "as-block-first") (param i32) (result i32) (block (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-mid") (param i32) (result i32) (block (call $dummy) (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-last") (param i32) (block (call $dummy) (call $dummy) (br_if 0 (local.get 0))) ) (func (export "as-block-first-value") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 10) (local.get 0))) (return (i32.const 11)) ) ) (func (export "as-block-mid-value") (param i32) (result i32) (block (result i32) (call $dummy) (drop (br_if 0 (i32.const 20) (local.get 0))) (return (i32.const 21)) ) ) (func (export "as-block-last-value") (param i32) (result i32) (block (result i32) (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (local.get 0)) ) ) (func (export "as-loop-first") (param i32) (result i32) (block (loop (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 3) ) (func (export "as-loop-mid") (param i32) (result i32) (block (loop (call $dummy) (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 4) ) (func (export "as-loop-last") (param i32) (loop (call $dummy) (br_if 1 (local.get 0))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3))) (i32.const 4) ) ) (func (export "as-br_if-value-cond") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 2) (br_if 0 (i32.const 1) (local.get 0)))) (i32.const 4) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3)) (i32.const 4) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 2) (br_if 0 (i32.const 1) (i32.const 3))) (i32.const 4) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_if 0 (i64.const 1) (i32.const 2)))) ) (func (export "as-if-cond") (param i32) (result i32) (block (result i32) (if (result i32) (br_if 0 (i32.const 1) (local.get 0)) (then (i32.const 2)) (else (i32.const 3)) ) ) ) (func (export "as-if-then") (param i32 i32) (block (if (local.get 0) (then (br_if 1 (local.get 1))) (else (call $dummy))) ) ) (func (export "as-if-else") (param i32 i32) (block (if (local.get 0) (then (call $dummy)) (else (br_if 1 (local.get 1)))) ) ) (func (export "as-select-first") (param i32) (result i32) (block (result i32) (select (br_if 0 (i32.const 3) (i32.const 10)) (i32.const 2) (local.get 0)) ) ) (func (export "as-select-second") (param i32) (result i32) (block (result i32) (select (i32.const 1) (br_if 0 (i32.const 3) (i32.const 10)) (local.get 0)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 1) (i32.const 2) (br_if 0 (i32.const 3) (i32.const 10))) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_if 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_if 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_if 0 (i32.const 14) (i32.const 1)) ) ) ) (func $func (param i32 i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $check) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 1) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (i32.const 3) (br_if 0 (i32.const 4) (i32.const 10)) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (block (result i32) (local.set 0 (br_if 0 (i32.const 17) (local.get 0))) (i32.const -1) ) ) (func (export "as-local.tee-value") (param i32) (result i32) (block (result i32) (local.tee 0 (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (block (result i32) (global.set $a (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (memory 1) (func (export "as-load-address") (result i32) (block (result i32) (i32.load (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-loadN-address") (result i32) (block (result i32) (i32.load8_s (br_if 0 (i32.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (i32.store (br_if 0 (i32.const 30) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i32.store (i32.const 2) (br_if 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_if 0 (i32.const 32) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i32.store16 (i32.const 2) (br_if 0 (i32.const 33) (i32.const 1))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 1.0) (i32.const 1)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_if 0 (i32.const 0) (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (br_if 0 (i32.const 1) (i32.const 42)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "nested-block-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (i32.add (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) )) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) )) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) ) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-last" (i32.const 0))) (assert_return (invoke "as-block-last" (i32.const 1))) (assert_return (invoke "as-block-first-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-first-value" (i32.const 1)) (i32.const 10)) (assert_return (invoke "as-block-mid-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "as-block-mid-value" (i32.const 1)) (i32.const 20)) (assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) (assert_return (invoke "as-loop-last" (i32.const 0))) (assert_return (invoke "as-loop-last" (i32.const 1))) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 1)) (assert_return (invoke "as-br_if-value-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-value-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 1)) (assert_return (invoke "as-br_table-value-index") (i32.const 1)) (assert_return (invoke "as-return-value") (i64.const 1)) (assert_return (invoke "as-if-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-if-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-cond") (i32.const 3)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 4)) (assert_return (invoke "as-call_indirect-first") (i32.const 4)) (assert_return (invoke "as-call_indirect-mid") (i32.const 4)) (assert_return (invoke "as-call_indirect-last") (i32.const 4)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-address") (i32.const 1)) (assert_return (invoke "as-loadN-address") (i32.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f64.const 1.0)) (assert_return (invoke "as-binary-left") (i32.const 1)) (assert_return (invoke "as-binary-right") (i32.const 1)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-memory.grow-size") (i32.const 1)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) (assert_invalid (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-cond-empty-vs-i32 (block (br_if 0)) )) "type mismatch" ) (assert_invalid (module (func $type-cond-void-vs-i32 (block (br_if 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cond-num-vs-i32 (block (br_if 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-void-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_if 1 (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-num-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-return (block (result i32) (return (br_if 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-return (block (result i32) (return (br_if 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br_if 1 (i32.const 1)))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) "unknown label" ) (assert_invalid (module (func $large-label (br_if 0x10000001 (i32.const 1)))) "unknown label" ) ================================================ FILE: Test/WebAssembly/spec/br_table.wast ================================================ ;; Test `br_table` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-f32") (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-f64") (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) ) (func (export "empty") (param i32) (result i32) (block (br_table 0 (local.get 0)) (return (i32.const 21))) (i32.const 22) ) (func (export "empty-value") (param i32) (result i32) (block (result i32) (br_table 0 (i32.const 33) (local.get 0)) (i32.const 31) ) ) (func (export "singleton") (param i32) (result i32) (block (block (br_table 1 0 (local.get 0)) (return (i32.const 21)) ) (return (i32.const 20)) ) (i32.const 22) ) (func (export "singleton-value") (param i32) (result i32) (block (result i32) (drop (block (result i32) (br_table 0 1 (i32.const 33) (local.get 0)) (return (i32.const 31)) ) ) (i32.const 32) ) ) (func (export "multiple") (param i32) (result i32) (block (block (block (block (block (br_table 3 2 1 0 4 (local.get 0)) (return (i32.const 99)) ) (return (i32.const 100)) ) (return (i32.const 101)) ) (return (i32.const 102)) ) (return (i32.const 103)) ) (i32.const 104) ) (func (export "multiple-value") (param i32) (result i32) (local i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (br_table 3 2 1 0 4 (i32.const 200) (local.get 0)) (return (i32.add (local.get 1) (i32.const 99))) )) (return (i32.add (local.get 1) (i32.const 10))) )) (return (i32.add (local.get 1) (i32.const 11))) )) (return (i32.add (local.get 1) (i32.const 12))) )) (return (i32.add (local.get 1) (i32.const 13))) )) (i32.add (local.get 1) (i32.const 14)) ) (func (export "large") (param i32) (result i32) (block (block (br_table 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (local.get 0) ) (return (i32.const -1)) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (func (export "as-block-first") (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0)) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (br_table 1 1 1 (i32.const 4) (i32.const -1)) (i32.const 2) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_table 0 (i32.const 9) (i32.const 0)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_table 0 (i64.const 7) (i32.const 0)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br_table 0 (i32.const 2) (i32.const 0)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br_table 1 (i32.const 3) (i32.const 0))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br_table 1 0 (i32.const 4) (i32.const 0))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br_table 0 (i32.const 5) (i32.const 0)) (local.get 0) (local.get 1) ) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br_table 0 (i32.const 6) (i32.const 1)) (local.get 1) ) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) ) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br_table 0 (i32.const 23) (i32.const 1)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br_table 0 (i32.const 17) (i32.const 1))) (i32.const -1) ) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.set 0 (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) ) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) ) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br_table 0 (i32.const 41) (i32.const 0))) ) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_table 0 (i32.const 40) (i32.const 0)))) ) (func (export "nested-block-value") (param i32) (result i32) (block (result i32) (drop (i32.const -1)) (i32.add (i32.const 1) (block (result i32) (i32.add (i32.const 2) (block (result i32) (drop (i32.const 4)) (i32.add (i32.const 8) (br_table 0 1 2 (i32.const 16) (local.get 0)) ) ) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br_table 2 1 0 (i32.const 8) (local.get 0))) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1) ) ) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) (func (export "nested-br_table-loop-block") (param i32) (result i32) (local.set 0 (loop (result i32) (block (br_table 1 0 0 (local.get 0)) ) (i32.const 0) ) ) (loop (result i32) (block (br_table 0 1 1 (local.get 0)) ) (i32.const 3) ) ) (func (export "meet-externref") (param i32) (param externref) (result externref) (block $l1 (result externref) (block $l2 (result externref) (br_table $l1 $l2 $l1 (local.get 1) (local.get 0)) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) (assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) (assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) (assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) (assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) (assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) (assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) (assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) (assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) (assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) (assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) (assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) (assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) (assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) (assert_return (invoke "large" (i32.const 0)) (i32.const 0)) (assert_return (invoke "large" (i32.const 1)) (i32.const 1)) (assert_return (invoke "large" (i32.const 100)) (i32.const 0)) (assert_return (invoke "large" (i32.const 101)) (i32.const 1)) (assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) (assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-first") (i32.const 20)) (assert_return (invoke "as-call_indirect-mid") (i32.const 21)) (assert_return (invoke "as-call_indirect-last") (i32.const 22)) (assert_return (invoke "as-call_indirect-func") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-loop-block" (i32.const 1)) (i32.const 3)) (assert_return (invoke "meet-externref" (i32.const 0) (ref.extern 1)) (ref.extern 1)) (assert_return (invoke "meet-externref" (i32.const 1) (ref.extern 1)) (ref.extern 1)) (assert_return (invoke "meet-externref" (i32.const 2) (ref.extern 1)) (ref.extern 1)) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (br_table 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br_table 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-arg-num (block (block (result f32) (br_table 0 1 (f32.const 0) (i32.const 0)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func (block (result i32) (block (result i64) (br_table 0 1 (i32.const 0) (i32.const 0)) ) ) )) "type mismatch" ) (assert_invalid (module (func $type-index-void-vs-i32 (block (br_table 0 0 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-index-num-vs-i32 (block (br_table 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-void-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_table 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-num-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-return (block (result i32) (return (br_table 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-return (block (result i32) (return (br_table 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func (param i32) (result i32) (loop (result i32) (block (result i32) (br_table 0 1 (i32.const 1) (local.get 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func (param i32) (result i32) (block (result i32) (loop (result i32) (br_table 0 1 (i32.const 1) (local.get 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (block (br_table 2 1 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label (block (br_table 0 0x10000001 0 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-label-default (block (br_table 1 2 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label-default (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label-default (block (br_table 0 0 0x10000001 (i32.const 1))) )) "unknown label" ) ================================================ FILE: Test/WebAssembly/spec/bulk.wast ================================================ ;; segment syntax (module (memory 1) (data "foo")) (module (table 3 funcref) (elem funcref (ref.func 0) (ref.null func) (ref.func 1)) (func) (func)) ;; memory.fill (module (memory 1) (func (export "fill") (param i32 i32 i32) (memory.fill (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) ;; Basic fill test. (invoke "fill" (i32.const 1) (i32.const 0xff) (i32.const 3)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 2)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 3)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "fill" (i32.const 0) (i32.const 0xbbaa) (i32.const 2)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "fill" (i32.const 0) (i32.const 0) (i32.const 0x10000)) ;; Out-of-bounds writes trap, and nothing is written (assert_trap (invoke "fill" (i32.const 0xff00) (i32.const 1) (i32.const 0x101)) "out of bounds memory access") (assert_return (invoke "load8_u" (i32.const 0xff00)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 0xffff)) (i32.const 0)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "fill" (i32.const 0x10000) (i32.const 0) (i32.const 0)) ;; Writing 0 bytes outside the memory traps. (assert_trap (invoke "fill" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") ;; memory.copy (module (memory (data "\aa\bb\cc\dd")) (func (export "copy") (param i32 i32 i32) (memory.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i32.const 10) (i32.const 0) (i32.const 4)) (assert_return (invoke "load8_u" (i32.const 9)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0)) ;; Overlap, source > dest (invoke "copy" (i32.const 8) (i32.const 10) (i32.const 4)) (assert_return (invoke "load8_u" (i32.const 8)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 9)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xdd)) ;; Overlap, source < dest (invoke "copy" (i32.const 10) (i32.const 7) (i32.const 6)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 16)) (i32.const 0)) ;; Copy ending at memory limit is ok. (invoke "copy" (i32.const 0xff00) (i32.const 0) (i32.const 0x100)) (invoke "copy" (i32.const 0xfe00) (i32.const 0xff00) (i32.const 0x100)) ;; Succeed when copying 0 bytes at the end of the region. (invoke "copy" (i32.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "copy" (i32.const 0) (i32.const 0x10000) (i32.const 0)) ;; Copying 0 bytes outside the memory traps. (assert_trap (invoke "copy" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "copy" (i32.const 0) (i32.const 0x10001) (i32.const 0)) "out of bounds memory access") ;; memory.init (module (memory 1) (data "\aa\bb\cc\dd") (func (export "init") (param i32 i32 i32) (memory.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) (invoke "init" (i32.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 2)) (i32.const 0)) ;; Init ending at memory limit and segment limit is ok. (invoke "init" (i32.const 0xfffc) (i32.const 0) (i32.const 4)) ;; Out-of-bounds writes trap, and nothing is written. (assert_trap (invoke "init" (i32.const 0xfffe) (i32.const 0) (i32.const 3)) "out of bounds memory access") (assert_return (invoke "load8_u" (i32.const 0xfffe)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 0xffff)) (i32.const 0xdd)) ;; Succeed when writing 0 bytes at the end of either region. (invoke "init" (i32.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "init" (i32.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 bytes outside the memory traps. (assert_trap (invoke "init" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0)) "out of bounds memory access") ;; data.drop (module (memory 1) (data $p "x") (data $a (memory 0) (i32.const 0) "x") (func (export "drop_passive") (data.drop $p)) (func (export "init_passive") (param $len i32) (memory.init $p (i32.const 0) (i32.const 0) (local.get $len))) (func (export "drop_active") (data.drop $a)) (func (export "init_active") (param $len i32) (memory.init $a (i32.const 0) (i32.const 0) (local.get $len))) ) (invoke "init_passive" (i32.const 1)) (invoke "drop_passive") (invoke "drop_passive") (assert_return (invoke "init_passive" (i32.const 0))) (assert_trap (invoke "init_passive" (i32.const 1)) "out of bounds memory access") (invoke "init_passive" (i32.const 0)) (invoke "drop_active") (assert_return (invoke "init_active" (i32.const 0))) (assert_trap (invoke "init_active" (i32.const 1)) "out of bounds memory access") (invoke "init_active" (i32.const 0)) ;; Test that the data segment index is properly encoded as an unsigned (not ;; signed) LEB. (module ;; 65 data segments. 64 is the smallest positive number that is encoded ;; differently as a signed LEB. (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") (func (data.drop 64))) ;; No memory is required for the data.drop instruction. (module (data "goodbye") (func (data.drop 0))) ;; table.init (module (table 3 funcref) (elem funcref (ref.func $zero) (ref.func $one) (ref.func $zero) (ref.func $one)) (func $zero (result i32) (i32.const 0)) (func $one (result i32) (i32.const 1)) (func (export "init") (param i32 i32 i32) (table.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "call") (param i32) (result i32) (call_indirect (result i32) (local.get 0))) ) ;; Out-of-bounds stores trap, and nothing is written. (assert_trap (invoke "init" (i32.const 2) (i32.const 0) (i32.const 2)) "out of bounds table access") (assert_trap (invoke "call" (i32.const 2)) "uninitialized element 2") (invoke "init" (i32.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "call" (i32.const 0)) (i32.const 1)) (assert_return (invoke "call" (i32.const 1)) (i32.const 0)) (assert_trap (invoke "call" (i32.const 2)) "uninitialized element") ;; Init ending at table limit and segment limit is ok. (invoke "init" (i32.const 1) (i32.const 2) (i32.const 2)) ;; Succeed when storing 0 elements at the end of either region. (invoke "init" (i32.const 3) (i32.const 0) (i32.const 0)) (invoke "init" (i32.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 elements outside the table traps. (assert_trap (invoke "init" (i32.const 4) (i32.const 0) (i32.const 0)) "out of bounds table access") (assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0)) "out of bounds table access") ;; elem.drop (module (table 1 funcref) (func $f) (elem $p funcref (ref.func $f)) (elem $a (table 0) (i32.const 0) func $f) (func (export "drop_passive") (elem.drop $p)) (func (export "init_passive") (param $len i32) (table.init $p (i32.const 0) (i32.const 0) (local.get $len)) ) (func (export "drop_active") (elem.drop $a)) (func (export "init_active") (param $len i32) (table.init $a (i32.const 0) (i32.const 0) (local.get $len)) ) ) (invoke "init_passive" (i32.const 1)) (invoke "drop_passive") (invoke "drop_passive") (assert_return (invoke "init_passive" (i32.const 0))) (assert_trap (invoke "init_passive" (i32.const 1)) "out of bounds table access") (invoke "init_passive" (i32.const 0)) (invoke "drop_active") (assert_return (invoke "init_active" (i32.const 0))) (assert_trap (invoke "init_active" (i32.const 1)) "out of bounds table access") (invoke "init_active" (i32.const 0)) ;; Test that the elem segment index is properly encoded as an unsigned (not ;; signed) LEB. (module ;; 65 elem segments. 64 is the smallest positive number that is encoded ;; differently as a signed LEB. (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (func (elem.drop 64))) ;; No table is required for the elem.drop instruction. (module (elem funcref (ref.func 0)) (func (elem.drop 0))) ;; table.copy (module (table 10 funcref) (elem (i32.const 0) $zero $one $two) (func $zero (result i32) (i32.const 0)) (func $one (result i32) (i32.const 1)) (func $two (result i32) (i32.const 2)) (func (export "copy") (param i32 i32 i32) (table.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "call") (param i32) (result i32) (call_indirect (result i32) (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i32.const 3) (i32.const 0) (i32.const 3)) ;; Now [$zero, $one, $two, $zero, $one, $two, ...] (assert_return (invoke "call" (i32.const 3)) (i32.const 0)) (assert_return (invoke "call" (i32.const 4)) (i32.const 1)) (assert_return (invoke "call" (i32.const 5)) (i32.const 2)) ;; Overlap, source > dest (invoke "copy" (i32.const 0) (i32.const 1) (i32.const 3)) ;; Now [$one, $two, $zero, $zero, $one, $two, ...] (assert_return (invoke "call" (i32.const 0)) (i32.const 1)) (assert_return (invoke "call" (i32.const 1)) (i32.const 2)) (assert_return (invoke "call" (i32.const 2)) (i32.const 0)) ;; Overlap, source < dest (invoke "copy" (i32.const 2) (i32.const 0) (i32.const 3)) ;; Now [$one, $two, $one, $two, $zero, $two, ...] (assert_return (invoke "call" (i32.const 2)) (i32.const 1)) (assert_return (invoke "call" (i32.const 3)) (i32.const 2)) (assert_return (invoke "call" (i32.const 4)) (i32.const 0)) ;; Copy ending at table limit is ok. (invoke "copy" (i32.const 6) (i32.const 8) (i32.const 2)) (invoke "copy" (i32.const 8) (i32.const 6) (i32.const 2)) ;; Succeed when copying 0 elements at the end of the region. (invoke "copy" (i32.const 10) (i32.const 0) (i32.const 0)) (invoke "copy" (i32.const 0) (i32.const 10) (i32.const 0)) ;; Fail on out-of-bounds when copying 0 elements outside of table. (assert_trap (invoke "copy" (i32.const 11) (i32.const 0) (i32.const 0)) "out of bounds table access") (assert_trap (invoke "copy" (i32.const 0) (i32.const 11) (i32.const 0)) "out of bounds table access") ================================================ FILE: Test/WebAssembly/spec/call.wast ================================================ ;; Test `call` operator (module ;; Auxiliary definitions (func $const-i32 (result i32) (i32.const 0x132)) (func $const-i64 (result i64) (i64.const 0x164)) (func $const-f32 (result f32) (f32.const 0xf32)) (func $const-f64 (result f64) (f64.const 0xf64)) (func $const-i32-i64 (result i32 i64) (i32.const 0x132) (i64.const 0x164)) (func $id-i32 (param i32) (result i32) (local.get 0)) (func $id-i64 (param i64) (result i64) (local.get 0)) (func $id-f32 (param f32) (result f32) (local.get 0)) (func $id-f64 (param f64) (result f64) (local.get 0)) (func $id-i32-f64 (param i32 f64) (result i32 f64) (local.get 0) (local.get 1) ) (func $swap-i32-i32 (param i32 i32) (result i32 i32) (local.get 1) (local.get 0) ) (func $swap-f32-f64 (param f32 f64) (result f64 f32) (local.get 1) (local.get 0) ) (func $swap-f64-i32 (param f64 i32) (result i32 f64) (local.get 1) (local.get 0) ) (func $f32-i32 (param f32 i32) (result i32) (local.get 1)) (func $i32-i64 (param i32 i64) (result i64) (local.get 1)) (func $f64-f32 (param f64 f32) (result f32) (local.get 1)) (func $i64-f64 (param i64 f64) (result f64) (local.get 1)) ;; Typing (func (export "type-i32") (result i32) (call $const-i32)) (func (export "type-i64") (result i64) (call $const-i64)) (func (export "type-f32") (result f32) (call $const-f32)) (func (export "type-f64") (result f64) (call $const-f64)) (func (export "type-i32-i64") (result i32 i64) (call $const-i32-i64)) (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) (func (export "type-second-i32") (result i32) (call $f32-i32 (f32.const 32.1) (i32.const 32)) ) (func (export "type-second-i64") (result i64) (call $i32-i64 (i32.const 32) (i64.const 64)) ) (func (export "type-second-f32") (result f32) (call $f64-f32 (f64.const 64) (f32.const 32)) ) (func (export "type-second-f64") (result f64) (call $i64-f64 (i64.const 64) (f64.const 64.1)) ) (func (export "type-all-i32-f64") (result i32 f64) (call $id-i32-f64 (i32.const 32) (f64.const 1.64)) ) (func (export "type-all-i32-i32") (result i32 i32) (call $swap-i32-i32 (i32.const 1) (i32.const 2)) ) (func (export "type-all-f32-f64") (result f64 f32) (call $swap-f32-f64 (f32.const 1) (f64.const 2)) ) (func (export "type-all-f64-i32") (result i32 f64) (call $swap-f64-i32 (f64.const 1) (i32.const 2)) ) ;; Composition (func (export "as-binary-all-operands") (result i32) (i32.add (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) (func (export "as-mixed-operands") (result i32) (call $swap-i32-i32 (i32.const 3) (i32.const 4)) (i32.const 5) (i32.add) (i32.mul) ) (func (export "as-call-all-operands") (result i32 i32) (call $swap-i32-i32 (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) ;; Recursion (func $fac (export "fac") (param i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (local.get 1)) (else (call $fac-acc (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) ) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call $fib (i64.sub (local.get 0) (i64.const 2))) (call $fib (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $even (export "even") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 44)) (else (call $odd (i64.sub (local.get 0) (i64.const 1)))) ) ) (func $odd (export "odd") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 99)) (else (call $even (i64.sub (local.get 0) (i64.const 1)))) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call $runaway)) (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) (func $mutual-runaway2 (call $mutual-runaway1)) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call $const-i32) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call $const-i32) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call $const-i32)) ) (func (export "as-if-condition") (result i32) (if (result i32) (call $const-i32) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (call $const-i32) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call $const-i32))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (call $const-i32) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call $const-i32) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (call $const-i32) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (call $const-i32) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (call $const-i32) ) ) ) (func (export "as-store-first") (call $const-i32) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call $const-i32) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call $const-i32)) ) (func (export "as-return-value") (result i32) (call $const-i32) (return) ) (func (export "as-drop-operand") (call $const-i32) (drop) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (call $const-i32))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (call $const-i32)) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (call $const-i32)) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (call $const-i32)) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call $const-i32)) ) (func $dummy (param i32) (result i32) (local.get 0)) (func $du (param f32) (result f32) (local.get 0)) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call $du (f32.const 0x0p+0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call $dummy (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call $dummy (i32.const 1)))) ) ;; Test correct argument passing (func $return-from-long-argument-list-helper (param f32 i32 i32 f64 f32 f32 f32 f64 f32 i32 i32 f32 f64 i64 i64 i32 i64 i64 f32 i64 i64 i64 i32 f32 f32 f32 f64 f32 i32 i64 f32 f64 f64 f32 i32 f32 f32 f64 i64 f64 i32 i64 f32 f64 i32 i32 i32 i64 f64 i32 i64 i64 f64 f64 f64 f64 f64 f64 i32 f32 f64 f64 i32 i64 f32 f32 f32 i32 f64 f64 f64 f64 f64 f32 i64 i64 i32 i32 i32 f32 f64 i32 i64 f32 f32 f32 i32 i32 f32 f64 i64 f32 f64 f32 f32 f32 i32 f32 i64 i32) (result i32) (local.get 99) ) (func (export "return-from-long-argument-list") (param i32) (result i32) (call $return-from-long-argument-list-helper (f32.const 0) (i32.const 0) (i32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (i64.const 0) (local.get 0)) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-i32-i64") (i32.const 0x132) (i64.const 0x164)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-i32-f64") (i32.const 32) (f64.const 1.64)) (assert_return (invoke "type-all-i32-i32") (i32.const 2) (i32.const 1)) (assert_return (invoke "type-all-f32-f64") (f64.const 2) (f32.const 1)) (assert_return (invoke "type-all-f64-i32") (i32.const 2) (f64.const 1)) (assert_return (invoke "as-binary-all-operands") (i32.const 7)) (assert_return (invoke "as-mixed-operands") (i32.const 32)) (assert_return (invoke "as-call-all-operands") (i32.const 3) (i32.const 4)) (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i32.const 44)) (assert_return (invoke "even" (i64.const 1)) (i32.const 99)) (assert_return (invoke "even" (i64.const 100)) (i32.const 44)) (assert_return (invoke "even" (i64.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i32.const 0x132)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 0x132)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 0x132)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 0x132)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 0x132)) (assert_return (invoke "as-local.set-value") (i32.const 0x132)) (assert_return (invoke "as-local.tee-value") (i32.const 0x132)) (assert_return (invoke "as-global.set-value") (i32.const 0x132)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) (assert_return (invoke "return-from-long-argument-list" (i32.const 42)) (i32.const 42)) ;; Invalid typing (assert_invalid (module (func $type-void-vs-num (i32.eqz (call 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (i32.eqz (call 1))) (func (result i64) (i64.const 1)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-1 (call 1)) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-2 (call 1)) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-1-vs-0 (call 1 (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) (func (param i32 f64)) ) "type mismatch" ) (assert_invalid (module (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-block (block (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-block (block (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-loop (loop (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-loop (loop (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-then (if (i32.const 0) (then (call 1))) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-then (if (i32.const 0) (then (call 1 (i32.const 0)))) ) (func (param i32 i32)) ) "type mismatch" ) ;; Unbound function (assert_invalid (module (func $unbound-func (call 1))) "unknown function" ) (assert_invalid (module (func $large-func (call 1012321300))) "unknown function" ) ================================================ FILE: Test/WebAssembly/spec/call_indirect.wast ================================================ ;; Test `call_indirect` operator (module ;; Auxiliary definitions (type $proc (func)) (type $out-i32 (func (result i32))) (type $out-i64 (func (result i64))) (type $out-f32 (func (result f32))) (type $out-f64 (func (result f64))) (type $out-f64-i32 (func (result f64 i32))) (type $over-i32 (func (param i32) (result i32))) (type $over-i64 (func (param i64) (result i64))) (type $over-f32 (func (param f32) (result f32))) (type $over-f64 (func (param f64) (result f64))) (type $over-i32-f64 (func (param i32 f64) (result i32 f64))) (type $swap-i32-i64 (func (param i32 i64) (result i64 i32))) (type $f32-i32 (func (param f32 i32) (result i32))) (type $i32-i64 (func (param i32 i64) (result i64))) (type $f64-f32 (func (param f64 f32) (result f32))) (type $i64-f64 (func (param i64 f64) (result f64))) (type $over-i32-duplicate (func (param i32) (result i32))) (type $over-i64-duplicate (func (param i64) (result i64))) (type $over-f32-duplicate (func (param f32) (result f32))) (type $over-f64-duplicate (func (param f64) (result f64))) (func $const-i32 (type $out-i32) (i32.const 0x132)) (func $const-i64 (type $out-i64) (i64.const 0x164)) (func $const-f32 (type $out-f32) (f32.const 0xf32)) (func $const-f64 (type $out-f64) (f64.const 0xf64)) (func $const-f64-i32 (type $out-f64-i32) (f64.const 0xf64) (i32.const 32)) (func $id-i32 (type $over-i32) (local.get 0)) (func $id-i64 (type $over-i64) (local.get 0)) (func $id-f32 (type $over-f32) (local.get 0)) (func $id-f64 (type $over-f64) (local.get 0)) (func $id-i32-f64 (type $over-i32-f64) (local.get 0) (local.get 1)) (func $swap-i32-i64 (type $swap-i32-i64) (local.get 1) (local.get 0)) (func $i32-i64 (type $i32-i64) (local.get 1)) (func $i64-f64 (type $i64-f64) (local.get 1)) (func $f32-i32 (type $f32-i32) (local.get 1)) (func $f64-f32 (type $f64-f32) (local.get 1)) (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) (table funcref (elem $const-i32 $const-i64 $const-f32 $const-f64 ;; 0..3 $id-i32 $id-i64 $id-f32 $id-f64 ;; 4..7 $f32-i32 $i32-i64 $f64-f32 $i64-f64 ;; 9..11 $fac-i64 $fib-i64 $even $odd ;; 12..15 $runaway $mutual-runaway1 $mutual-runaway2 ;; 16..18 $over-i32-duplicate $over-i64-duplicate ;; 19..20 $over-f32-duplicate $over-f64-duplicate ;; 21..22 $fac-i32 $fac-f32 $fac-f64 ;; 23..25 $fib-i32 $fib-f32 $fib-f64 ;; 26..28 $const-f64-i32 $id-i32-f64 $swap-i32-i64 ;; 29..31 ) ) ;; Syntax (func (call_indirect (i32.const 0)) (call_indirect (param i64) (i64.const 0) (i32.const 0)) (call_indirect (param i64) (param) (param f64 i32 i64) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) (call_indirect (result) (i32.const 0)) (drop (i32.eqz (call_indirect (result i32) (i32.const 0)))) (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0)))) (drop (i32.eqz (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0)) )) (drop (i32.eqz (call_indirect (param) (param i64) (param) (param f64 i32 i64) (param) (param) (result) (result i32) (result) (result) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) )) (drop (i64.eqz (call_indirect (type $over-i64) (param i64) (result i64) (i64.const 0) (i32.const 0) ) )) ) ;; Typing (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0)) ) (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1)) ) (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2)) ) (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3)) ) (func (export "type-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-index") (result i64) (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) ) (func (export "type-first-i32") (result i32) (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) ) (func (export "type-first-i64") (result i64) (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) ) (func (export "type-first-f32") (result f32) (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) ) (func (export "type-first-f64") (result f64) (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) ) (func (export "type-second-i32") (result i32) (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) ) (func (export "type-second-i64") (result i64) (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) ) (func (export "type-second-f32") (result f32) (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) ) (func (export "type-second-f64") (result f64) (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) ) (func (export "type-all-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-all-i32-f64") (result i32 f64) (call_indirect (type $over-i32-f64) (i32.const 1) (f64.const 2) (i32.const 30) ) ) (func (export "type-all-i32-i64") (result i64 i32) (call_indirect (type $swap-i32-i64) (i32.const 1) (i64.const 2) (i32.const 31) ) ) ;; Dispatch (func (export "dispatch") (param i32 i64) (result i64) (call_indirect (type $over-i64) (local.get 1) (local.get 0)) ) (func (export "dispatch-structural-i64") (param i32) (result i64) (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) ) (func (export "dispatch-structural-i32") (param i32) (result i32) (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0)) ) (func (export "dispatch-structural-f32") (param i32) (result f32) (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0)) ) (func (export "dispatch-structural-f64") (param i32) (result f64) (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0)) ) ;; Recursion (func $fac-i64 (export "fac-i64") (type $over-i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 12) ) ) ) ) ) (func $fib-i64 (export "fib-i64") (type $over-i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 2)) (i32.const 13) ) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 13) ) ) ) ) ) (func $fac-i32 (export "fac-i32") (type $over-i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 1)) (else (i32.mul (local.get 0) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 23) ) ) ) ) ) (func $fac-f32 (export "fac-f32") (type $over-f32) (if (result f32) (f32.eq (local.get 0) (f32.const 0.0)) (then (f32.const 1.0)) (else (f32.mul (local.get 0) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 24) ) ) ) ) ) (func $fac-f64 (export "fac-f64") (type $over-f64) (if (result f64) (f64.eq (local.get 0) (f64.const 0.0)) (then (f64.const 1.0)) (else (f64.mul (local.get 0) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 25) ) ) ) ) ) (func $fib-i32 (export "fib-i32") (type $over-i32) (if (result i32) (i32.le_u (local.get 0) (i32.const 1)) (then (i32.const 1)) (else (i32.add (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 2)) (i32.const 26) ) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 26) ) ) ) ) ) (func $fib-f32 (export "fib-f32") (type $over-f32) (if (result f32) (f32.le (local.get 0) (f32.const 1.0)) (then (f32.const 1.0)) (else (f32.add (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 2.0)) (i32.const 27) ) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 27) ) ) ) ) ) (func $fib-f64 (export "fib-f64") (type $over-f64) (if (result f64) (f64.le (local.get 0) (f64.const 1.0)) (then (f64.const 1.0)) (else (f64.add (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 2.0)) (i32.const 28) ) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 28) ) ) ) ) ) (func $even (export "even") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 44)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 15) ) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 99)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 14) ) ) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-if-condition") (result i32) (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i64) (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)))) ) (func (export "as-br_table-first") (result f32) (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0)) ) (func (export "as-store-first") (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-return-value") (result i32) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return) ) (func (export "as-drop-operand") (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop) ) (func (export "as-br-value") (result f32) (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6)))) ) (func (export "as-local.set-value") (result f64) (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0) ) (func (export "as-local.tee-value") (result f64) (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) ) (global $a (mut f64) (f64.const 10.0)) (func (export "as-global.set-value") (result f64) (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6)) ) ) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-index") (i64.const 100)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-all-i32-f64") (i32.const 1) (f64.const 2)) (assert_return (invoke "type-all-i32-i64") (i64.const 2) (i32.const 1)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 32) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") (assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880)) (assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55)) (assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9)) (assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9)) (assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880)) (assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55)) (assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0)) (assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0)) (assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch") (assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120)) (assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800)) (assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0)) (assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0)) (assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0)) (assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0)) (assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2)) (assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8)) (assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946)) (assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0)) (assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0)) (assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0)) (assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0)) (assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0)) (assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0)) (assert_return (invoke "even" (i32.const 0)) (i32.const 44)) (assert_return (invoke "even" (i32.const 1)) (i32.const 99)) (assert_return (invoke "even" (i32.const 100)) (i32.const 44)) (assert_return (invoke "even" (i32.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i64.const 0x164)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (f32.const 0xf32)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (f32.const 1)) (assert_return (invoke "as-local.set-value") (f64.const 1)) (assert_return (invoke "as-local.tee-value") (f64.const 1)) (assert_return (invoke "as-global.set-value") (f64.const 1.0)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) ;; Multiple tables (module (type $ii-i (func (param i32 i32) (result i32))) (table $t1 funcref (elem $f $g)) (table $t2 funcref (elem $h $i $j)) (table $t3 4 funcref) (elem (table $t3) (i32.const 0) func $g $h) (elem (table $t3) (i32.const 3) func $z) (func $f (type $ii-i) (i32.add (local.get 0) (local.get 1))) (func $g (type $ii-i) (i32.sub (local.get 0) (local.get 1))) (func $h (type $ii-i) (i32.mul (local.get 0) (local.get 1))) (func $i (type $ii-i) (i32.div_u (local.get 0) (local.get 1))) (func $j (type $ii-i) (i32.rem_u (local.get 0) (local.get 1))) (func $z) (func (export "call-1") (param i32 i32 i32) (result i32) (call_indirect $t1 (type $ii-i) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "call-2") (param i32 i32 i32) (result i32) (call_indirect $t2 (type $ii-i) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "call-3") (param i32 i32 i32) (result i32) (call_indirect $t3 (type $ii-i) (local.get 0) (local.get 1) (local.get 2)) ) ) (assert_return (invoke "call-1" (i32.const 2) (i32.const 3) (i32.const 0)) (i32.const 5)) (assert_return (invoke "call-1" (i32.const 2) (i32.const 3) (i32.const 1)) (i32.const -1)) (assert_trap (invoke "call-1" (i32.const 2) (i32.const 3) (i32.const 2)) "undefined element") (assert_return (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 0)) (i32.const 6)) (assert_return (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 1)) (i32.const 0)) (assert_return (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 2)) (i32.const 2)) (assert_trap (invoke "call-2" (i32.const 2) (i32.const 3) (i32.const 3)) "undefined element") (assert_return (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 0)) (i32.const -1)) (assert_return (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 1)) (i32.const 6)) (assert_trap (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 2)) "uninitialized element") (assert_trap (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 3)) "indirect call type mismatch") (assert_trap (invoke "call-3" (i32.const 2) (i32.const 3) (i32.const 4)) "undefined element") ;; Invalid syntax (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (type $sig) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (result i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (type $sig) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func" " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (param i32) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "inline function type" ) ;; Invalid typing (assert_invalid (module (type (func)) (func $no-table (call_indirect (type 0) (i32.const 0))) ) "unknown table" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (result i64))) (table 0 funcref) (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-2-vs-0 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-first-void-vs-num (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-second-void-vs-num (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 f64))) (table 0 funcref) (func $type-first-num-vs-num (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $type-second-num-vs-num (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-block (block (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-block (block (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) ) "type mismatch" ) ;; Unbound type (assert_invalid (module (table 0 funcref) (func $unbound-type (call_indirect (type 1) (i32.const 0))) ) "unknown type" ) (assert_invalid (module (table 0 funcref) (func $large-type (call_indirect (type 1012321300) (i32.const 0))) ) "unknown type" ) ;; Unbound function in table (assert_invalid (module (table funcref (elem 0 0))) "unknown function" ) ================================================ FILE: Test/WebAssembly/spec/const.wast ================================================ ;; Test t.const instructions ;; Syntax error (module (func (i32.const 0_123_456_789) drop)) (module (func (i32.const 0x0_9acf_fBDF) drop)) (assert_malformed (module quote "(func (i32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 0xg) drop)") "unknown operator" ) (module (func (i64.const 0_123_456_789) drop)) (module (func (i64.const 0x0125_6789_ADEF_bcef) drop)) (assert_malformed (module quote "(func (i64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 0xg) drop)") "unknown operator" ) (module (func (f32.const 0123456789) drop)) (module (func (f32.const 0123456789e019) drop)) (module (func (f32.const 0123456789e+019) drop)) (module (func (f32.const 0123456789e-019) drop)) (module (func (f32.const 0123456789.) drop)) (module (func (f32.const 0123456789.e019) drop)) (module (func (f32.const 0123456789.e+019) drop)) (module (func (f32.const 0123456789.e-019) drop)) (module (func (f32.const 0123456789.0123456789) drop)) (module (func (f32.const 0123456789.0123456789e019) drop)) (module (func (f32.const 0123456789.0123456789e+019) drop)) (module (func (f32.const 0123456789.0123456789e-019) drop)) (module (func (f32.const 0x0123456789ABCDEF) drop)) (module (func (f32.const 0x0123456789ABCDEFp019) drop)) (module (func (f32.const 0x0123456789ABCDEFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEFp-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.) drop)) (module (func (f32.const 0x0123456789ABCDEF.p019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aF) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp-019) drop)) (assert_malformed (module quote "(func (f32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f32.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0pA) drop)") "unknown operator" ) (module (func (f64.const 0123456789) drop)) (module (func (f64.const 0123456789e019) drop)) (module (func (f64.const 0123456789e+019) drop)) (module (func (f64.const 0123456789e-019) drop)) (module (func (f64.const 0123456789.) drop)) (module (func (f64.const 0123456789.e019) drop)) (module (func (f64.const 0123456789.e+019) drop)) (module (func (f64.const 0123456789.e-019) drop)) (module (func (f64.const 0123456789.0123456789) drop)) (module (func (f64.const 0123456789.0123456789e019) drop)) (module (func (f64.const 0123456789.0123456789e+019) drop)) (module (func (f64.const 0123456789.0123456789e-019) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9e0_1_9) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.p0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (assert_malformed (module quote "(func (f64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f64.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0pA) drop)") "unknown operator" ) ;; Range error (module (func (i32.const 0xffffffff) drop)) (module (func (i32.const -0x80000000) drop)) (assert_malformed (module quote "(func (i32.const 0x100000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -0x80000001) drop)") "constant out of range" ) (module (func (i32.const 4294967295) drop)) (module (func (i32.const -2147483648) drop)) (assert_malformed (module quote "(func (i32.const 4294967296) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -2147483649) drop)") "constant out of range" ) (module (func (i64.const 0xffffffffffffffff) drop)) (module (func (i64.const -0x8000000000000000) drop)) (assert_malformed (module quote "(func (i64.const 0x10000000000000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -0x8000000000000001) drop)") "constant out of range" ) (module (func (i64.const 18446744073709551615) drop)) (module (func (i64.const -9223372036854775808) drop)) (assert_malformed (module quote "(func (i64.const 18446744073709551616) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -9223372036854775809) drop)") "constant out of range" ) (module (func (f32.const 0x1p127) drop)) (module (func (f32.const -0x1p127) drop)) (module (func (f32.const 0x1.fffffep127) drop)) (module (func (f32.const -0x1.fffffep127) drop)) (module (func (f32.const 0x1.fffffe7p127) drop)) (module (func (f32.const -0x1.fffffe7p127) drop)) (module (func (f32.const 0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const -0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const 0x1.fffffefffffffffffffp127) drop)) (module (func (f32.const -0x1.fffffefffffffffffffp127) drop)) (assert_malformed (module quote "(func (f32.const 0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const 0x1.ffffffp127) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1.ffffffp127) drop)") "constant out of range" ) (module (func (f32.const 1e38) drop)) (module (func (f32.const -1e38) drop)) (assert_malformed (module quote "(func (f32.const 1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -1e39) drop)") "constant out of range" ) (module (func (f32.const 340282356779733623858607532500980858880) drop)) (module (func (f32.const -340282356779733623858607532500980858880) drop)) (assert_malformed (module quote "(func (f32.const 340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -340282356779733661637539395458142568448) drop)") "constant out of range" ) (module (func (f64.const 0x1p1023) drop)) (module (func (f64.const -0x1p1023) drop)) (module (func (f64.const 0x1.fffffffffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffffp1023) drop)) (module (func (f64.const 0x1.fffffffffffff7p1023) drop)) (module (func (f64.const -0x1.fffffffffffff7p1023) drop)) (module (func (f64.const 0x1.fffffffffffff7ffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffff7ffffffp1023) drop)) (assert_malformed (module quote "(func (f64.const 0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const 0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (module (func (f64.const 1e308) drop)) (module (func (f64.const -1e308) drop)) (assert_malformed (module quote "(func (f64.const 1e309) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -1e309) drop)") "constant out of range" ) (module (func (f64.const 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (f64.const -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (assert_malformed (module quote "(func (f64.const 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (module (func (f32.const nan:0x1) drop)) (module (func (f64.const nan:0x1) drop)) (module (func (f32.const nan:0x7f_ffff) drop)) (module (func (f64.const nan:0xf_ffff_ffff_ffff) drop)) (assert_malformed (module quote "(func (f32.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const nan:0x80_0000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x10_0000_0000_0000) drop)") "constant out of range" ) ;; Rounding behaviour ;; f32, small exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) ;; f32, large exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000000))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000000))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000007ffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000007ffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000000))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000000))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000bffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x400000bffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000c000000))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x400000c000000))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951488))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951488))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951489))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951489))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169215))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169215))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169216))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169216))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) ;; f32, subnormal (module (func (export "f") (result f32) (f32.const +0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000006p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000006p-126)) ;; f32, round down at limit to infinity (module (func (export "f") (result f32) (f32.const +0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) ;; f64, small exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+999)) ;; f64, large exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const +1152921504606847104))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847104))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847105))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847105))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847359))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847359))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847360))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847360))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+60)) ;; f64, subnormal (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-1022)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-1022)) ;; f64, round down at limit to infinity (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) ================================================ FILE: Test/WebAssembly/spec/conversions.wast ================================================ (module (func (export "i64.extend_i32_s") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_i32_u") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_f32_s") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_f32_u") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) (func (export "i32.trunc_f64_s") (param $x f64) (result i32) (i32.trunc_f64_s (local.get $x))) (func (export "i32.trunc_f64_u") (param $x f64) (result i32) (i32.trunc_f64_u (local.get $x))) (func (export "i64.trunc_f32_s") (param $x f32) (result i64) (i64.trunc_f32_s (local.get $x))) (func (export "i64.trunc_f32_u") (param $x f32) (result i64) (i64.trunc_f32_u (local.get $x))) (func (export "i64.trunc_f64_s") (param $x f64) (result i64) (i64.trunc_f64_s (local.get $x))) (func (export "i64.trunc_f64_u") (param $x f64) (result i64) (i64.trunc_f64_u (local.get $x))) (func (export "i32.trunc_sat_f32_s") (param $x f32) (result i32) (i32.trunc_sat_f32_s (local.get $x))) (func (export "i32.trunc_sat_f32_u") (param $x f32) (result i32) (i32.trunc_sat_f32_u (local.get $x))) (func (export "i32.trunc_sat_f64_s") (param $x f64) (result i32) (i32.trunc_sat_f64_s (local.get $x))) (func (export "i32.trunc_sat_f64_u") (param $x f64) (result i32) (i32.trunc_sat_f64_u (local.get $x))) (func (export "i64.trunc_sat_f32_s") (param $x f32) (result i64) (i64.trunc_sat_f32_s (local.get $x))) (func (export "i64.trunc_sat_f32_u") (param $x f32) (result i64) (i64.trunc_sat_f32_u (local.get $x))) (func (export "i64.trunc_sat_f64_s") (param $x f64) (result i64) (i64.trunc_sat_f64_s (local.get $x))) (func (export "i64.trunc_sat_f64_u") (param $x f64) (result i64) (i64.trunc_sat_f64_u (local.get $x))) (func (export "f32.convert_i32_s") (param $x i32) (result f32) (f32.convert_i32_s (local.get $x))) (func (export "f32.convert_i64_s") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f64.convert_i32_s") (param $x i32) (result f64) (f64.convert_i32_s (local.get $x))) (func (export "f64.convert_i64_s") (param $x i64) (result f64) (f64.convert_i64_s (local.get $x))) (func (export "f32.convert_i32_u") (param $x i32) (result f32) (f32.convert_i32_u (local.get $x))) (func (export "f32.convert_i64_u") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) (func (export "f64.convert_i32_u") (param $x i32) (result f64) (f64.convert_i32_u (local.get $x))) (func (export "f64.convert_i64_u") (param $x i64) (result f64) (f64.convert_i64_u (local.get $x))) (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote_f32 (local.get $x))) (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote_f64 (local.get $x))) (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret_i32 (local.get $x))) (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret_i64 (local.get $x))) (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret_f32 (local.get $x))) (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret_f64 (local.get $x))) ) (assert_return (invoke "i64.extend_i32_s" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_s" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -10000)) (i64.const -10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -1)) (i64.const -1)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_u" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_u" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) (assert_return (invoke "i64.extend_i32_u" (i32.const -1)) (i64.const 0xffffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) (assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) (assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) (assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f32_s" (f32.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -2147483904.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_trap (invoke "i32.trunc_f32_u" (f32.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9)) (i32.const 2147483647)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483649.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.9)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9)) (i32.const 4294967295)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e16)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e30)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 9223372036854775808)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f32_s" (f32.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -9223373136366403584.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_trap (invoke "i64.trunc_f32_u" (f32.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_s" (f64.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -9223372036854777856.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_u" (f64.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "f32.convert_i32_s" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const -2147483648)) (f32.const -2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) ;; Saturating conversions: test all the same values as the non-saturating conversions. (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483904.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483649.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e16)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e30)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223373136366403584.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854777856.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i64.const 0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_s" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_s" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) (assert_return (invoke "f32.convert_i64_s" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_s" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53)) (assert_return (invoke "f64.convert_i32_s" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_s" (i32.const -2147483648)) (f64.const -2147483648)) (assert_return (invoke "f64.convert_i32_s" (i32.const 987654321)) (f64.const 987654321)) (assert_return (invoke "f64.convert_i64_s" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) (assert_return (invoke "f64.convert_i64_s" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740993)) (f64.const -9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740995)) (f64.const -9007199254740996)) (assert_return (invoke "f32.convert_i32_u" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const -2147483648)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xffffffff)) (f32.const 4294967296.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000080)) (f32.const 0x1.000000p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000081)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000082)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe80)) (f32.const 0x1.fffffcp+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe81)) (f32.const 0x1.fffffep+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe82)) (f32.const 0x1.fffffep+31)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_u" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_u" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_u" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x7fffffbfffffffff)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x8000008000000001)) (f32.const 0x1.000002p+63)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xfffffe8000000001)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "f64.convert_i32_u" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_u" (i32.const -2147483648)) (f64.const 2147483648)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0xffffffff)) (f64.const 4294967295.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_u" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000400)) (f64.const 0x1.0000000000000p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000401)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000402)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff400)) (f64.const 0x1.ffffffffffffep+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff401)) (f64.const 0x1.fffffffffffffp+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff402)) (f64.const 0x1.fffffffffffffp+63)) ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) (assert_return (invoke "f64.promote_f32" (f32.const inf)) (f64.const inf)) (assert_return (invoke "f64.promote_f32" (f32.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.promote_f32" (f32.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f64.promote_f32" (f32.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const -nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) (assert_return (invoke "f32.demote_f64" (f64.const inf)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) (assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const -nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) (assert_return (invoke "i32.reinterpret_f32" (f32.const inf)) (i32.const 0x7f800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -inf)) (i32.const 0xff800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) (assert_return (invoke "i64.reinterpret_f64" (f64.const inf)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -inf)) (i64.const 0xfff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) ;; Type check (assert_invalid (module (func (result i32) (i32.wrap_i64 (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.reinterpret_f32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.reinterpret_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.demote_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.reinterpret_i32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/spec/custom.wast ================================================ (module binary "\00asm" "\01\00\00\00" "\00\24\10" "a custom section" "this is the payload" "\00\20\10" "a custom section" "this is payload" "\00\11\10" "a custom section" "" "\00\10\00" "" "this is payload" "\00\01\00" "" "" "\00\24\10" "\00\00custom sectio\00" "this is the payload" "\00\24\10" "\ef\bb\bfa custom sect" "this is the payload" "\00\24\10" "a custom sect\e2\8c\a3" "this is the payload" "\00\1f\16" "module within a module" "\00asm" "\01\00\00\00" ) (module binary "\00asm" "\01\00\00\00" "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\01\01\00" ;; type section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\02\01\00" ;; import section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\03\01\00" ;; function section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\04\01\00" ;; table section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\05\01\00" ;; memory section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\06\01\00" ;; global section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\07\01\00" ;; export section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\09\01\00" ;; element section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0a\01\00" ;; code section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0b\01\00" ;; data section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" ) (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\1a\06" "custom" "this is the payload" ;; custom section "\03\02\01\00" ;; function section "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00\00\05\01\00\07\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\26\10" "a custom section" "this is the payload" ) "length out of bounds" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\25\10" "a custom section" "this is the payload" "\00\24\10" "a custom section" "this is the payload" ) "malformed section id" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\25\10" "a custom section" "this is the payload" ;; wrong length! "\03\02\01\00" ;; function section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) "function and code section have inconsistent lengths" ) ;; Test concatenated modules. (assert_malformed (module binary "\00asm\01\00\00\00" "\00asm\01\00\00\00" ) "length out of bounds" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01\00\01" ;; memory section "\0c\01\02" ;; data count section (2 segments) "\0b\06\01\00\41\00\0b\00" ;; data section (1 segment) ) "data count and data section have inconsistent lengths" ) ================================================ FILE: Test/WebAssembly/spec/data.wast ================================================ ;; Test the data section ;; Syntax (module (memory $m 1) (data (i32.const 0)) (data (i32.const 1) "a" "" "bcd") (data (offset (i32.const 0))) (data (offset (i32.const 0)) "" "a" "bc" "") (data (memory 0) (i32.const 0)) (data (memory 0x0) (i32.const 1) "a" "" "bcd") (data (memory 0x000) (offset (i32.const 0))) (data (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data (memory $m) (i32.const 0)) (data (memory $m) (i32.const 1) "a" "" "bcd") (data (memory $m) (offset (i32.const 0))) (data (memory $m) (offset (i32.const 0)) "" "a" "bc" "") (data $d1 (i32.const 0)) (data $d2 (i32.const 1) "a" "" "bcd") (data $d3 (offset (i32.const 0))) (data $d4 (offset (i32.const 0)) "" "a" "bc" "") (data $d5 (memory 0) (i32.const 0)) (data $d6 (memory 0x0) (i32.const 1) "a" "" "bcd") (data $d7 (memory 0x000) (offset (i32.const 0))) (data $d8 (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data $d9 (memory $m) (i32.const 0)) (data $d10 (memory $m) (i32.const 1) "a" "" "bcd") (data $d11 (memory $m) (offset (i32.const 0))) (data $d12 (memory $m) (offset (i32.const 0)) "" "a" "bc" "") ) ;; Basic use (module (memory 1) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") ) (module (memory 1) (data (i32.const 0) "a") (data (i32.const 3) "b") (data (i32.const 100) "cde") (data (i32.const 5) "x") (data (i32.const 3) "c") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 1) "b") (data (i32.const 2) "cde") (data (i32.const 3) "f") (data (i32.const 2) "g") (data (i32.const 1) "h") ) (module (global (import "spectest" "global_i32") i32) (memory 1) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get 0) "a") ) (module (global $g (import "spectest" "global_i32") i32) (memory 1) (data (global.get $g) "a") ) (module (global $g (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get $g) "a") ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (module (memory 1) (data (global.get 0) "a") (global i32 (i32.const 0))) ;; (module (memory 1) (data (global.get $g) "a") (global $g i32 (i32.const 0))) ;; Corner cases (module (memory 1) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (memory 2) (data (i32.const 0x1_ffff) "a") ) (module (memory 0) (data (i32.const 0)) ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0)) ) (module (memory 0 0) (data (i32.const 0)) ) (module (memory 1) (data (i32.const 0x1_0000) "") ) (module (memory 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "" "") ) (module (memory 0 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0)) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0 3)) (data (global.get 0) "a") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 1) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 1) "a") ) ;; Invalid bounds for data (assert_trap (module (memory 0) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0 0) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0 1) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0) (data (i32.const 1)) ) "out of bounds memory access" ) (assert_trap (module (memory 0 1) (data (i32.const 1)) ) "out of bounds memory access" ) ;; This seems to cause a time-out on Travis. (;assert_unlinkable (module (memory 0x10000) (data (i32.const 0xffffffff) "ab") ) "" ;; either out of memory or out of bounds ;) (assert_trap (module (global (import "spectest" "global_i32") i32) (memory 0) (data (global.get 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 1 2) (data (i32.const 0x1_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const 0x1_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2) (data (i32.const 0x2_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2 3) (data (i32.const 0x2_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 1) (data (i32.const -1) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const -1) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2) (data (i32.const -100) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const -100) "a") ) "out of bounds memory access" ) ;; Data without memory (assert_invalid (module (data (i32.const 0) "") ) "unknown memory" ) ;; Data segment with memory index 1 (only memory 0 available) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\07\01" ;; data section "\02\01\41\00\0b" ;; active data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 0 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\06\01" ;; data section "\00\41\00\0b" ;; active data segment 0 for memory 0 "\00" ;; empty vec(byte) ) "unknown memory 0" ) ;; Data segment with memory index 1 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\07\01" ;; data section "\02\01\41\00\0b" ;; active data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 1 and vec(byte) as above, ;; only memory 0 available. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Data segment with memory index 1 and specially crafted vec(byte) after. ;; This is to detect incorrect validation where memory index is interpreted ;; as a flag followed by "\41" interpreted as the size of vec(byte) ;; with the expected number of bytes following. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Invalid offsets (assert_invalid (module (memory 1) (data (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (ref.null func)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (offset (;empty instruction sequence;))) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (offset (global.get 0) (global.get 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (offset (global.get 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (nop)) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) (assert_invalid (module (memory 1) (data (global.get 0)) ) "unknown global 0" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (global.get 1)) ) "unknown global 1" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (memory 1) (data (global.get 0)) ) "constant expression required" ) ================================================ FILE: Test/WebAssembly/spec/elem.wast ================================================ ;; Test the element section ;; Syntax (module (table $t 10 funcref) (func $f) (func $g) ;; Passive (elem funcref) (elem funcref (ref.func $f) (item ref.func $f) (item (ref.null func)) (ref.func $g)) (elem func) (elem func $f $f $g $g) (elem $p1 funcref) (elem $p2 funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem $p3 func) (elem $p4 func $f $f $g $g) ;; Active (elem (table $t) (i32.const 0) funcref) (elem (table $t) (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem (table $t) (i32.const 0) func) (elem (table $t) (i32.const 0) func $f $g) (elem (table $t) (offset (i32.const 0)) funcref) (elem (table $t) (offset (i32.const 0)) func $f $g) (elem (table 0) (i32.const 0) func) (elem (table 0x0) (i32.const 0) func $f $f) (elem (table 0x000) (offset (i32.const 0)) func) (elem (table 0) (offset (i32.const 0)) func $f $f) (elem (table $t) (i32.const 0) func) (elem (table $t) (i32.const 0) func $f $f) (elem (table $t) (offset (i32.const 0)) func) (elem (table $t) (offset (i32.const 0)) func $f $f) (elem (offset (i32.const 0))) (elem (offset (i32.const 0)) funcref (ref.func $f) (ref.null func)) (elem (offset (i32.const 0)) func $f $f) (elem (offset (i32.const 0)) $f $f) (elem (i32.const 0)) (elem (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem (i32.const 0) func $f $f) (elem (i32.const 0) $f $f) (elem (i32.const 0) funcref (item (ref.func $f)) (item (ref.null func))) (elem $a1 (table $t) (i32.const 0) funcref) (elem $a2 (table $t) (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem $a3 (table $t) (i32.const 0) func) (elem $a4 (table $t) (i32.const 0) func $f $g) (elem $a9 (table $t) (offset (i32.const 0)) funcref) (elem $a10 (table $t) (offset (i32.const 0)) func $f $g) (elem $a11 (table 0) (i32.const 0) func) (elem $a12 (table 0x0) (i32.const 0) func $f $f) (elem $a13 (table 0x000) (offset (i32.const 0)) func) (elem $a14 (table 0) (offset (i32.const 0)) func $f $f) (elem $a15 (table $t) (i32.const 0) func) (elem $a16 (table $t) (i32.const 0) func $f $f) (elem $a17 (table $t) (offset (i32.const 0)) func) (elem $a18 (table $t) (offset (i32.const 0)) func $f $f) (elem $a19 (offset (i32.const 0))) (elem $a20 (offset (i32.const 0)) funcref (ref.func $f) (ref.null func)) (elem $a21 (offset (i32.const 0)) func $f $f) (elem $a22 (offset (i32.const 0)) $f $f) (elem $a23 (i32.const 0)) (elem $a24 (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem $a25 (i32.const 0) func $f $f) (elem $a26 (i32.const 0) $f $f) ;; Declarative (elem declare funcref) (elem declare funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem declare func) (elem declare func $f $f $g $g) (elem $d1 declare funcref) (elem $d2 declare funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem $d3 declare func) (elem $d4 declare func $f $f $g $g) ) (module (func $f) (func $g) (table $t funcref (elem (ref.func $f) (ref.null func) (ref.func $g))) ) ;; Basic use (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 5) $f) (elem (i32.const 3) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 3) $f) (elem (i32.const 5) $f) ) (module (global (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get 0) $f) ) (module (global $g (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get $g) $f) ) (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 7) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-7") (i32.const 65)) (assert_return (invoke "call-9") (i32.const 66)) ;; Corner cases (module (table 10 funcref) (func $f) (elem (i32.const 9) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) ) (module (table 0 funcref) (elem (i32.const 0)) ) (module (import "spectest" "table" (table 0 funcref)) (elem (i32.const 0)) ) (module (table 0 0 funcref) (elem (i32.const 0)) ) (module (table 20 funcref) (elem (i32.const 20)) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 100 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 1) $f) ) (module (import "spectest" "table" (table 0 30 funcref)) (func $f) (elem (i32.const 1) $f) ) ;; Invalid bounds for elements (assert_trap (module (table 0 funcref) (func $f) (elem (i32.const 0) $f) ) "out of bounds table access" ) (assert_trap (module (table 0 0 funcref) (func $f) (elem (i32.const 0) $f) ) "out of bounds table access" ) (assert_trap (module (table 0 1 funcref) (func $f) (elem (i32.const 0) $f) ) "out of bounds table access" ) (assert_trap (module (table 0 funcref) (elem (i32.const 1)) ) "out of bounds table access" ) (assert_trap (module (table 10 funcref) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (table 10 20 funcref) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "out of bounds table access" ) (assert_trap (module (table 10 funcref) (func $f) (elem (i32.const -1) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -1) $f) ) "out of bounds table access" ) (assert_trap (module (table 10 funcref) (func $f) (elem (i32.const -10) $f) ) "out of bounds table access" ) (assert_trap (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -10) $f) ) "out of bounds table access" ) ;; Implicitly dropped elements (module (table 10 funcref) (elem $e (i32.const 0) func $f) (func $f) (func (export "init") (table.init $e (i32.const 0) (i32.const 0) (i32.const 1)) ) ) (assert_trap (invoke "init") "out of bounds table access") (module (table 10 funcref) (elem $e declare func $f) (func $f) (func (export "init") (table.init $e (i32.const 0) (i32.const 0) (i32.const 1)) ) ) (assert_trap (invoke "init") "out of bounds table access") ;; Element without table (assert_invalid (module (func $f) (elem (i32.const 0) $f) ) "unknown table" ) ;; Invalid offsets (assert_invalid (module (table 1 funcref) (elem (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (ref.null func)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (offset (;empty instruction sequence;))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (table 1 funcref) (elem (offset (global.get 0) (global.get 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (table 1 funcref) (elem (offset (global.get 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (table 1 funcref) (elem (global.get $g)) (global $g i32 (i32.const 0))) ;; "constant expression required" ;; ) (assert_invalid (module (table 1 funcref) (elem (global.get 0)) ) "unknown global 0" ) (assert_invalid (module (global (import "test" "global-i32") i32) (table 1 funcref) (elem (global.get 1)) ) "unknown global 1" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (table 1 funcref) (elem (global.get 0)) ) "constant expression required" ) ;; Invalid elements (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (ref.null extern)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (ref.null func) (ref.null func))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (i32.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (call $f))) (func $f (result funcref) (ref.null func)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (i32.const 0) funcref (item (i32.add (i32.const 0) (i32.const 1)))) ) "constant expression required" ) ;; Two elements target the same slot (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten") (i32.const 66)) (module (type $out-i32 (func (result i32))) (import "spectest" "table" (table 10 funcref)) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten-element") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten-element") (i32.const 66)) ;; Element sections across multiple modules change the same table (module $module1 (type $out-i32 (func (result i32))) (table (export "shared-table") 10 funcref) (elem (i32.const 8) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-8") (type $out-i32) (call_indirect (type $out-i32) (i32.const 8)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (register "module1" $module1) (assert_trap (invoke $module1 "call-7") "uninitialized element") (assert_return (invoke $module1 "call-8") (i32.const 65)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module2 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 7) $const-i32-c) (elem (i32.const 8) $const-i32-d) (func $const-i32-c (type $out-i32) (i32.const 67)) (func $const-i32-d (type $out-i32) (i32.const 68)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 68)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module3 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 8) $const-i32-e) (elem (i32.const 9) $const-i32-f) (func $const-i32-e (type $out-i32) (i32.const 69)) (func $const-i32-f (type $out-i32) (i32.const 70)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 69)) (assert_return (invoke $module1 "call-9") (i32.const 70)) ================================================ FILE: Test/WebAssembly/spec/endianness.wast ================================================ (module (memory 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i32) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i32.add (local.get $address) (i32.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i32) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i32.add (local.get $address) (i32.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i32) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i32.add (local.get $address) (i32.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i32) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i32.add (local.get $address) (i32.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i32) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i32.add (local.get $address) (i32.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i32) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i32.add (local.get $address) (i32.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_s (i32.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_u (i32.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i32.const 0) (local.get $value)) (i32.load (i32.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i32.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i32.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i32.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i32.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i32.const 0) (local.get $value)) (i64.load (i32.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i32.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i32.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i32.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i32.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i32.const 0) (local.get $value)) (call $i16_load_little (i32.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i32.const 0) (local.get $value)) (call $i32_load_little (i32.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i32.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i32.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i32.const 0) (local.get $value)) (call $i64_load_little (i32.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i32.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i32.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i32.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i32.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) ================================================ FILE: Test/WebAssembly/spec/exports.wast ================================================ ;; Functions (module (func) (export "a" (func 0))) (module (func) (export "a" (func 0)) (export "b" (func 0))) (module (func) (func) (export "a" (func 0)) (export "b" (func 1))) (module (func (export "a"))) (module (func (export "a") (export "b") (export "c"))) (module (func (export "a") (export "b") (param i32))) (module (func) (export "a" (func 0))) (module (func $a (export "a"))) (module (func $a) (export "a" (func $a))) (module (export "a" (func 0)) (func)) (module (export "a" (func $a)) (func $a)) (module $Func (export "e" (func $f)) (func $f (param $n i32) (result i32) (return (i32.add (local.get $n) (i32.const 1))) ) ) (assert_return (invoke "e" (i32.const 42)) (i32.const 43)) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module) (module $Other1) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module (type (;0;) (func (result i32))) (func (;0;) (type 0) (result i32) i32.const 42) (export "a" (func 0)) (export "b" (func 0)) (export "c" (func 0))) (assert_return (invoke "a") (i32.const 42)) (assert_return (invoke "b") (i32.const 42)) (assert_return (invoke "c") (i32.const 42)) (assert_invalid (module (export "a" (func 0))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (import "spectest" "print_i32" (func (param i32))) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) "duplicate export name" ) (assert_invalid (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (func) (table 0 funcref) (export "a" (func 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Globals (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) (module (global (export "a") i32 (i32.const 0))) (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global $a (export "a") i32 (i32.const 0))) (module (global $a i32 (i32.const 0)) (export "a" (global $a))) (module (export "a" (global 0)) (global i32 (i32.const 0))) (module (export "a" (global $a)) (global $a i32 (i32.const 0))) (module $Global (export "e" (global $g)) (global $g i32 (i32.const 42)) ) (assert_return (get "e") (i32.const 42)) (assert_return (get $Global "e") (i32.const 42)) (module) (module $Other2) (assert_return (get $Global "e") (i32.const 42)) (assert_invalid (module (export "a" (global 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (table 0 funcref) (export "a" (global 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Tables (module (table 0 funcref) (export "a" (table 0))) (module (table 0 funcref) (export "a" (table 0)) (export "b" (table 0))) (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "b" (table 1))) (module (table (export "a") 0 funcref)) (module (table (export "a") 0 1 funcref)) (module (table 0 funcref) (export "a" (table 0))) (module (table 0 1 funcref) (export "a" (table 0))) (module (table $a (export "a") 0 funcref)) (module (table $a (export "a") 0 1 funcref)) (module (table $a 0 funcref) (export "a" (table $a))) (module (table $a 0 1 funcref) (export "a" (table $a))) (module (export "a" (table 0)) (table 0 funcref)) (module (export "a" (table 0)) (table 0 1 funcref)) (module (export "a" (table $a)) (table $a 0 funcref)) (module (export "a" (table $a)) (table $a 0 1 funcref)) (; TODO: access table ;) (assert_invalid (module (export "a" (table 0))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (import "spectest" "table" (table 10 20 funcref)) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "a" (table 1))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (func) (export "a" (table 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Memories (module (memory 0) (export "a" (memory 0))) (module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) ;; No multiple memories yet. ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) (module (memory (export "a") 0)) (module (memory (export "a") 0 1)) (module (memory 0) (export "a" (memory 0))) (module (memory 0 1) (export "a" (memory 0))) (module (memory $a (export "a") 0)) (module (memory $a (export "a") 0 1)) (module (memory $a 0) (export "a" (memory $a))) (module (memory $a 0 1) (export "a" (memory $a))) (module (export "a" (memory 0)) (memory 0)) (module (export "a" (memory 0)) (memory 0 1)) (module (export "a" (memory $a)) (memory $a 0)) (module (export "a" (memory $a)) (memory $a 0 1)) (; TODO: access memory ;) (assert_invalid (module (export "a" (memory 0))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (import "spectest" "memory" (memory 1 2)) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) "duplicate export name" ) ;; No multiple memories yet. ;; (assert_invalid ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (table 0 funcref) (export "a" (memory 0)) (export "a" (table 0))) "duplicate export name" ) ================================================ FILE: Test/WebAssembly/spec/f32.wast ================================================ ;; Test all the f32 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f32_bitwise.wast and f32_cmp.wast). (module (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) ) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -inf)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -inf)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -inf)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -inf)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sqrt" (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) (assert_return (invoke "sqrt" (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) (assert_return (invoke "sqrt" (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) (assert_return (invoke "sqrt" (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sqrt" (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) (assert_return (invoke "sqrt" (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "sqrt" (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const inf)) (f32.const inf)) (assert_return (invoke "sqrt" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) (assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "floor" (f32.const inf)) (f32.const inf)) (assert_return (invoke "floor" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) (assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "ceil" (f32.const inf)) (f32.const inf)) (assert_return (invoke "ceil" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "trunc" (f32.const inf)) (f32.const inf)) (assert_return (invoke "trunc" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "nearest" (f32.const inf)) (f32.const inf)) (assert_return (invoke "nearest" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f32) (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.trunc (i64.const 0)))) "type mismatch") ;; These float literal patterns are only allowed in scripts, not in text format. (assert_malformed (module quote "(func (result f32) (f32.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result f32) (f32.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/spec/f32_bitwise.wast ================================================ ;; Test all the f32 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "neg" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) ;; Type check (assert_invalid (module (func (result f32) (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/spec/f32_cmp.wast ================================================ ;; Test all the f32 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f32) (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/spec/f64.wast ================================================ ;; Test all the f64 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f64_bitwise.wast and f64_cmp.wast). (module (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) ) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -inf)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -inf)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sqrt" (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) (assert_return (invoke "sqrt" (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) (assert_return (invoke "sqrt" (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) (assert_return (invoke "sqrt" (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) (assert_return (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) (assert_return (invoke "sqrt" (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const inf)) (f64.const inf)) (assert_return (invoke "sqrt" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) (assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "floor" (f64.const inf)) (f64.const inf)) (assert_return (invoke "floor" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) (assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "ceil" (f64.const inf)) (f64.const inf)) (assert_return (invoke "ceil" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "trunc" (f64.const inf)) (f64.const inf)) (assert_return (invoke "trunc" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "nearest" (f64.const inf)) (f64.const inf)) (assert_return (invoke "nearest" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f64) (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.trunc (i64.const 0)))) "type mismatch") ;; These float literal patterns are only allowed in scripts, not in text format. (assert_malformed (module quote "(func (result f64) (f64.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result f64) (f64.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/spec/f64_bitwise.wast ================================================ ;; Test all the f64 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "neg" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) ;; Type check (assert_invalid (module (func (result f64) (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/spec/f64_cmp.wast ================================================ ;; Test all the f64 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f64) (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/spec/fac.wast ================================================ (module ;; Recursive factorial (func (export "fac-rec") (param i64) (result i64) (if (result i64) (i64.eq (local.get 0) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call 0 (i64.sub (local.get 0) (i64.const 1)))) ) ) ) ;; Recursive factorial named (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) (if (result i64) (i64.eq (local.get $n) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get $n) (call $fac-rec-named (i64.sub (local.get $n) (i64.const 1))) ) ) ) ) ;; Iterative factorial (func (export "fac-iter") (param i64) (result i64) (local i64 i64) (local.set 1 (local.get 0)) (local.set 2 (i64.const 1)) (block (loop (if (i64.eq (local.get 1) (i64.const 0)) (then (br 2)) (else (local.set 2 (i64.mul (local.get 1) (local.get 2))) (local.set 1 (i64.sub (local.get 1) (i64.const 1))) ) ) (br 0) ) ) (local.get 2) ) ;; Iterative factorial named (func (export "fac-iter-named") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) ;; Optimized factorial. (func (export "fac-opt") (param i64) (result i64) (local i64) (local.set 1 (i64.const 1)) (block (br_if 0 (i64.lt_s (local.get 0) (i64.const 2))) (loop (local.set 1 (i64.mul (local.get 1) (local.get 0))) (local.set 0 (i64.add (local.get 0) (i64.const -1))) (br_if 0 (i64.gt_s (local.get 0) (i64.const 1))) ) ) (local.get 1) ) ;; Iterative factorial without locals. (func $pick0 (param i64) (result i64 i64) (local.get 0) (local.get 0) ) (func $pick1 (param i64 i64) (result i64 i64 i64) (local.get 0) (local.get 1) (local.get 0) ) (func (export "fac-ssa") (param i64) (result i64) (i64.const 1) (local.get 0) (loop $l (param i64 i64) (result i64) (call $pick1) (call $pick1) (i64.mul) (call $pick1) (i64.const 1) (i64.sub) (call $pick0) (i64.const 0) (i64.gt_u) (br_if $l) (drop) (return) ) ) ) (assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-ssa" (i64.const 25)) (i64.const 7034535277573963776)) (assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/spec/float_exprs.wast ================================================ ;; Test interesting floating-point "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x*y+z is not done with x87-style intermediate precision. (module (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) ;; Test that x*y+z is not folded to fma. (module (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) (assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) ;; Test that x+0.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) (f32.add (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) (f64.add (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0 - x is not folded to -x. (module (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) (f32.sub (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) (f64.sub (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x - 0.0 is not folded to x. (module (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) (f32.sub (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) (f64.sub (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*0.0 is not folded to 0.0. (module (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*1.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0/x is not folded to 0.0. (module (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) (f32.div (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) (f64.div (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_div" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const -0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/1.0 is not folded to x. (module (func (export "f32.no_fold_div_one") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_div_one") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-1.0 is not folded to -x. (module (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -1.0))) (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -1.0))) ) (assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -0.0 - x is not folded to -x. (module (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) (f32.sub (f32.const -0.0) (local.get $x))) (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) (f64.sub (f64.const -0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -1.0 * x is not folded to -x. (module (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) (f32.mul (f32.const -1.0) (local.get $x))) (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) (f64.mul (f64.const -1.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x == x is not folded to true. (module (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) (f32.eq (local.get $x) (local.get $x))) (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) (f64.eq (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) ;; Test that x != x is not folded to false. (module (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) (f32.ne (local.get $x) (local.get $x))) (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) (f64.ne (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) ;; Test that x - x is not folded to 0.0. (module (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) (f32.sub (local.get $x) (local.get $x))) (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) (f64.sub (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_sub_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_sub_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const nan)) (f64.const nan:canonical)) ;; Test that x / x is not folded to 1.0. (module (func (export "f32.no_fold_div_self") (param $x f32) (result f32) (f32.div (local.get $x) (local.get $x))) (func (export "f64.no_fold_div_self") (param $x f64) (result f64) (f64.div (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_div_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const -0.0)) (f64.const nan:canonical)) ;; Test that x/3 is not folded to x*(1/3). (module (func (export "f32.no_fold_div_3") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 3.0))) (func (export "f64.no_fold_div_3") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 3.0))) ) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) ;; Test that (x*z)+(y*z) is not folded to (x+y)*z. (module (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $z)) (f32.mul (local.get $y) (local.get $z)))) (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $z)) (f64.mul (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) ;; Test that (x+y)*z is not folded to (x*z)+(y*z). (module (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (f32.add (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (f64.add (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) ;; Test that x*(y/z) is not folded to (x*y)/z. (module (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (local.get $x) (f32.div (local.get $y) (local.get $z)))) (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (local.get $x) (f64.div (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const inf)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) ;; Test that (x*y)/z is not folded to x*(y/z). (module (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) ;; Test that x+y+z+w is not reassociated. (module (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.add (f32.add (f32.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.add (f64.add (f64.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) (assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) ;; Test that x*y*z*w is not reassociated. (module (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.mul (f32.mul (f32.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.mul (f64.mul (f64.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) ;; Test that x/0 is not folded away. (module (func (export "f32.no_fold_div_0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_div_0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-0 is not folded away. (module (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -0.0))) (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -0.0))) ) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that sqrt(x*x+y*y) is not folded to hypot. (module (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.add (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.add (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) ;; Test that 1.0/x isn't approximated. (module (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) (f32.div (f32.const 1.0) (local.get $x))) ) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) ;; Test that 1.0/sqrt(x) isn't approximated or fused. (module (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) (f32.div (f32.const 1.0) (f32.sqrt (local.get $x)))) (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) (f64.div (f64.const 1.0) (f64.sqrt (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) ;; Test that sqrt(1.0/x) isn't approximated. (module (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) (f32.sqrt (f32.div (f32.const 1.0) (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) ;; Test that converting i32/i64 to f32/f64 and back isn't folded away. (module (func (export "i32.no_fold_f32_s") (param i32) (result i32) (i32.trunc_f32_s (f32.convert_i32_s (local.get 0)))) (func (export "i32.no_fold_f32_u") (param i32) (result i32) (i32.trunc_f32_u (f32.convert_i32_u (local.get 0)))) (func (export "i64.no_fold_f64_s") (param i64) (result i64) (i64.trunc_f64_s (f64.convert_i64_s (local.get 0)))) (func (export "i64.no_fold_f64_u") (param i64) (result i64) (i64.trunc_f64_u (f64.convert_i64_u (local.get 0)))) ) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) ;; Test that x+y-y is not folded to x. (module (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) (f32.sub (f32.add (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) (f64.sub (f64.add (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) ;; Test that x-y+y is not folded to x. (module (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) (f32.add (f32.sub (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) (f64.add (f64.sub (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) ;; Test that x*y/y is not folded to x. (module (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) ;; Test that x/y*y is not folded to x. (module (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) (f32.mul (f32.div (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) (f64.mul (f64.div (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) ;; Test that x/2*2 is not folded to x. (module (func (export "f32.no_fold_div2_mul2") (param $x f32) (result f32) (f32.mul (f32.div (local.get $x) (f32.const 2.0)) (f32.const 2.0))) (func (export "f64.no_fold_div2_mul2") (param $x f64) (result f64) (f64.mul (f64.div (local.get $x) (f64.const 2.0)) (f64.const 2.0))) ) (assert_return (invoke "f32.no_fold_div2_mul2" (f32.const 0x1.fffffep-126)) (f32.const 0x1p-125)) (assert_return (invoke "f64.no_fold_div2_mul2" (f64.const 0x1.fffffffffffffp-1022)) (f64.const 0x1p-1021)) ;; Test that promote(demote(x)) is not folded to x. (module (func (export "no_fold_demote_promote") (param $x f64) (result f64) (f64.promote_f32 (f32.demote_f64 (local.get $x)))) ) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) ;; Test that demote(promote(x)) is not folded to x, and aside from NaN is ;; bit-preserving. (module (func (export "no_fold_promote_demote") (param $x f32) (result f32) (f32.demote_f64 (f64.promote_f32 (local.get $x)))) ) (assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const inf)) (f32.const inf)) (assert_return (invoke "no_fold_promote_demote" (f32.const -inf)) (f32.const -inf)) ;; Test that demote(x+promote(y)) is not folded to demote(x)+y. (module (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.add (local.get $x) (f64.promote_f32 (local.get $y))))) (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $y)) (local.get $x)))) ) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) ;; Test that demote(x-promote(y)) is not folded to demote(x)-y. (module (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.sub (local.get $x) (f64.promote_f32 (local.get $y))))) ) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) ;; Test that converting between integer and float and back isn't folded away. (module (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_u (local.get $x)))) (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_u (local.get $x)))) ) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) ;; Test that dividing by a loop-invariant constant isn't optimized to be a ;; multiplication by a reciprocal, which would be particularly tempting since ;; the reciprocal computation could be hoisted. (module (memory 1 1) (func (export "init") (param $i i32) (param $x f32) (f32.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f32) (local $i i32) (block $exit (loop $cont (f32.store (local.get $i) (f32.div (f32.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f32) (f32.load (local.get $i))) ) (invoke "init" (i32.const 0) (f32.const 15.1)) (invoke "init" (i32.const 4) (f32.const 15.2)) (invoke "init" (i32.const 8) (f32.const 15.3)) (invoke "init" (i32.const 12) (f32.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) (assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) (assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) (invoke "run" (i32.const 16) (f32.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) (assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) (assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) (module (memory 1 1) (func (export "init") (param $i i32) (param $x f64) (f64.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f64) (local $i i32) (block $exit (loop $cont (f64.store (local.get $i) (f64.div (f64.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 8))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f64) (f64.load (local.get $i))) ) (invoke "init" (i32.const 0) (f64.const 15.1)) (invoke "init" (i32.const 8) (f64.const 15.2)) (invoke "init" (i32.const 16) (f64.const 15.3)) (invoke "init" (i32.const 24) (f64.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) (assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) (assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) (invoke "run" (i32.const 32) (f64.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) (assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) (assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) ;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. (module (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) ;; Test that x= y+z is not optimized to x >= y (monotonicity). ;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf (module (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.le (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.ge (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.le (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.ge (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const inf) (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const inf) (f64.const -inf) (f64.const inf)) (i32.const 0)) ;; Test that !(x < y) and friends are not optimized to x >= y and friends. (module (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) ;; Test that a method for approximating a "machine epsilon" produces the expected ;; approximation. ;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 (module (func (export "f32.epsilon") (result f32) (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) (func (export "f64.epsilon") (result f64) (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) ) (assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that a method for computing a "machine epsilon" produces the expected ;; result. ;; https://www.math.utah.edu/~beebe/software/ieee/ (module (func (export "f32.epsilon") (result f32) (local $x f32) (local $result f32) (local.set $x (f32.const 1)) (loop $loop (br_if $loop (f32.gt (f32.add (local.tee $x (f32.mul (local.tee $result (local.get $x)) (f32.const 0.5) ) ) (f32.const 1) ) (f32.const 1) ) ) ) (local.get $result) ) (func (export "f64.epsilon") (result f64) (local $x f64) (local $result f64) (local.set $x (f64.const 1)) (loop $loop (br_if $loop (f64.gt (f64.add (local.tee $x (f64.mul (local.tee $result (local.get $x)) (f64.const 0.5) ) ) (f64.const 1) ) (f64.const 1) ) ) ) (local.get $result) ) ) (assert_return (invoke "f32.epsilon") (f32.const 0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that floating-point numbers are not optimized as if they form a ;; trichotomy. (module (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.lt (local.get $x) (local.get $y)) (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) (i32.or (f32.le (local.get $x) (local.get $y)) (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.gt (local.get $x) (local.get $y)) (f32.le (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) (i32.or (f32.ge (local.get $x) (local.get $y)) (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.lt (local.get $x) (local.get $y)) (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) (i32.or (f64.le (local.get $x) (local.get $y)) (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.gt (local.get $x) (local.get $y)) (f64.le (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) (i32.or (f64.ge (local.get $x) (local.get $y)) (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) ;; Some test harnesses which can run this testsuite are unable to perform tests ;; of NaN bitpatterns. The following tests whether the underlying platform is ;; generally producing the kinds of NaNs expected. (module (func (export "f32.arithmetic_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fc00000))) (func (export "f32.canonical_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fffffff))) (func (export "f32.nonarithmetic_nan_bitpattern") (param $x i32) (result i32) (i32.reinterpret_f32 (f32.neg (f32.reinterpret_i32 (local.get $x))))) (func (export "f64.arithmetic_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7ff8000000000000))) (func (export "f64.canonical_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7fffffffffffffff))) (func (export "f64.nonarithmetic_nan_bitpattern") (param $x i64) (result i64) (i64.reinterpret_f64 (f64.neg (f64.reinterpret_i64 (local.get $x))))) ;; Versions of no_fold testcases that only care about NaN bitpatterns. (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (local.get $x)) (f32.const 0.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.const -0.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.const -1.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const -1.0))) (i32.const 0x7fc00000))) (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (local.get $x)) (f64.const 0.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.const -0.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.const -1.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const -1.0))) (i64.const 0x7ff8000000000000))) (func (export "no_fold_promote_demote") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.demote_f64 (f64.promote_f32 (f32.reinterpret_i32 (local.get $x))))) (i32.const 0x7fc00000))) ) (assert_return (invoke "f32.arithmetic_nan_bitpattern" (i32.const 0x7f803210) (i32.const 0x7f803210)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0) (i32.const 0)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7fc03210)) (i32.const 0xffc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xffc03210)) (i32.const 0x7fc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7f803210)) (i32.const 0xff803210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xff803210)) (i32.const 0x7f803210)) (assert_return (invoke "f64.arithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210) (i64.const 0x7ff0000000003210)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0) (i64.const 0)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff8000000003210)) (i64.const 0xfff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff8000000003210)) (i64.const 0x7ff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210)) (i64.const 0xfff0000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff0000000003210)) (i64.const 0x7ff0000000003210)) (assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) ;; Test that IEEE 754 double precision does, in fact, compute a certain dot ;; product correctly. (module (func (export "dot_product_example") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.mul (local.get $x2) (local.get $y2))) (f64.mul (local.get $x3) (local.get $y3))) ) (func (export "with_binary_sum_collapse") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.add (f64.mul (local.get $x2) (local.get $y2)) (f64.mul (local.get $x3) (local.get $y3)))) ) ) (assert_return (invoke "dot_product_example" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) (assert_return (invoke "with_binary_sum_collapse" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) ;; http://www.vinc17.org/research/fptest.en.html#contract2fma (module (func (export "f32.contract2fma") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.sub (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.contract2fma") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.sub (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.contract2fma" (f32.const 1.0) (f32.const 1.0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.19999ap+0) (f32.const 0x1.19999ap+0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.333332p+0) (f32.const 0x1.333332p+0)) (f32.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 1.0) (f64.const 1.0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.199999999999ap+0) (f64.const 0x1.199999999999ap+0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.3333333333333p+0) (f64.const 0x1.3333333333333p+0)) (f64.const 0.0)) ;; Test that floating-point isn't implemented with QuickBasic for MS-DOS. ;; https://support.microsoft.com/en-us/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors (module (func (export "f32.division_by_small_number") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.sub (local.get $a) (f32.div (local.get $b) (local.get $c)))) (func (export "f64.division_by_small_number") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.sub (local.get $a) (f64.div (local.get $b) (local.get $c)))) ) (assert_return (invoke "f32.division_by_small_number" (f32.const 112000000) (f32.const 100000) (f32.const 0.0009)) (f32.const 888888)) (assert_return (invoke "f64.division_by_small_number" (f64.const 112000000) (f64.const 100000) (f64.const 0.0009)) (f64.const 888888.8888888806)) ;; Test a simple golden ratio computation. ;; http://mathworld.wolfram.com/GoldenRatio.html (module (func (export "f32.golden_ratio") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.mul (local.get 0) (f32.add (local.get 1) (f32.sqrt (local.get 2))))) (func (export "f64.golden_ratio") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.mul (local.get 0) (f64.add (local.get 1) (f64.sqrt (local.get 2))))) ) (assert_return (invoke "f32.golden_ratio" (f32.const 0.5) (f32.const 1.0) (f32.const 5.0)) (f32.const 1.618034)) (assert_return (invoke "f64.golden_ratio" (f64.const 0.5) (f64.const 1.0) (f64.const 5.0)) (f64.const 1.618033988749895)) ;; Test some silver means computations. ;; http://mathworld.wolfram.com/SilverRatio.html (module (func (export "f32.silver_means") (param $n f32) (result f32) (f32.mul (f32.const 0.5) (f32.add (local.get $n) (f32.sqrt (f32.add (f32.mul (local.get $n) (local.get $n)) (f32.const 4.0)))))) (func (export "f64.silver_means") (param $n f64) (result f64) (f64.mul (f64.const 0.5) (f64.add (local.get $n) (f64.sqrt (f64.add (f64.mul (local.get $n) (local.get $n)) (f64.const 4.0)))))) ) (assert_return (invoke "f32.silver_means" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "f32.silver_means" (f32.const 1.0)) (f32.const 1.6180340)) (assert_return (invoke "f32.silver_means" (f32.const 2.0)) (f32.const 2.4142136)) (assert_return (invoke "f32.silver_means" (f32.const 3.0)) (f32.const 3.3027756)) (assert_return (invoke "f32.silver_means" (f32.const 4.0)) (f32.const 4.2360680)) (assert_return (invoke "f32.silver_means" (f32.const 5.0)) (f32.const 5.1925821)) (assert_return (invoke "f64.silver_means" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "f64.silver_means" (f64.const 1.0)) (f64.const 1.618033988749895)) (assert_return (invoke "f64.silver_means" (f64.const 2.0)) (f64.const 2.414213562373095)) (assert_return (invoke "f64.silver_means" (f64.const 3.0)) (f64.const 3.302775637731995)) (assert_return (invoke "f64.silver_means" (f64.const 4.0)) (f64.const 4.236067977499790)) (assert_return (invoke "f64.silver_means" (f64.const 5.0)) (f64.const 5.192582403567252)) ;; Test that an f64 0.4 isn't double-rounded as via extended precision. ;; https://bugs.llvm.org/show_bug.cgi?id=11200 (module (func (export "point_four") (param $four f64) (param $ten f64) (result i32) (f64.lt (f64.div (local.get $four) (local.get $ten)) (f64.const 0.4))) ) (assert_return (invoke "point_four" (f64.const 4.0) (f64.const 10.0)) (i32.const 0)) ;; Test an approximation function for tau; it should produces the correctly ;; rounded result after (and only after) the expected number of iterations. (module (func (export "tau") (param i32) (result f64) (local f64 f64 f64 f64) f64.const 0x0p+0 local.set 1 block local.get 0 i32.const 1 i32.lt_s br_if 0 f64.const 0x1p+0 local.set 2 f64.const 0x0p+0 local.set 3 loop local.get 1 local.get 2 f64.const 0x1p+3 local.get 3 f64.const 0x1p+3 f64.mul local.tee 4 f64.const 0x1p+0 f64.add f64.div f64.const 0x1p+2 local.get 4 f64.const 0x1p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.4p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.8p+2 f64.add f64.div f64.sub f64.mul f64.add local.set 1 local.get 3 f64.const 0x1p+0 f64.add local.set 3 local.get 2 f64.const 0x1p-4 f64.mul local.set 2 local.get 0 i32.const -1 i32.add local.tee 0 br_if 0 end end local.get 1 ) ) (assert_return (invoke "tau" (i32.const 10)) (f64.const 0x1.921fb54442d14p+2)) (assert_return (invoke "tau" (i32.const 11)) (f64.const 0x1.921fb54442d18p+2)) ;; Test that y < 0 ? x : (x + 1) is not folded to x + (y < 0). (module (func (export "f32.no_fold_conditional_inc") (param $x f32) (param $y f32) (result f32) (select (local.get $x) (f32.add (local.get $x) (f32.const 1.0)) (f32.lt (local.get $y) (f32.const 0.0)))) (func (export "f64.no_fold_conditional_inc") (param $x f64) (param $y f64) (result f64) (select (local.get $x) (f64.add (local.get $x) (f64.const 1.0)) (f64.lt (local.get $y) (f64.const 0.0)))) ) (assert_return (invoke "f32.no_fold_conditional_inc" (f32.const -0.0) (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f64.no_fold_conditional_inc" (f64.const -0.0) (f64.const -1.0)) (f64.const -0.0)) ================================================ FILE: Test/WebAssembly/spec/float_literals.wast ================================================ ;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const inf))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +inf))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -inf))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f32_dec.root_beer_float") (result i32) (i32.reinterpret_f32 (f32.const 1.000000119))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const inf))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +inf))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -inf))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f64_dec.root_beer_float") (result i64) (i64.reinterpret_f64 (f64.const 1.000000119))) (func (export "f32-dec-sep1") (result f32) (f32.const 1_000_000)) (func (export "f32-dec-sep2") (result f32) (f32.const 1_0_0_0)) (func (export "f32-dec-sep3") (result f32) (f32.const 100_3.141_592)) (func (export "f32-dec-sep4") (result f32) (f32.const 99e+1_3)) (func (export "f32-dec-sep5") (result f32) (f32.const 122_000.11_3_54E0_2_3)) (func (export "f32-hex-sep1") (result f32) (f32.const 0xa_0f_00_99)) (func (export "f32-hex-sep2") (result f32) (f32.const 0x1_a_A_0_f)) (func (export "f32-hex-sep3") (result f32) (f32.const 0xa0_ff.f141_a59a)) (func (export "f32-hex-sep4") (result f32) (f32.const 0xf0P+1_3)) (func (export "f32-hex-sep5") (result f32) (f32.const 0x2a_f00a.1f_3_eep2_3)) (func (export "f64-dec-sep1") (result f64) (f64.const 1_000_000)) (func (export "f64-dec-sep2") (result f64) (f64.const 1_0_0_0)) (func (export "f64-dec-sep3") (result f64) (f64.const 100_3.141_592)) (func (export "f64-dec-sep4") (result f64) (f64.const 99e-1_23)) (func (export "f64-dec-sep5") (result f64) (f64.const 122_000.11_3_54e0_2_3)) (func (export "f64-hex-sep1") (result f64) (f64.const 0xa_f00f_0000_9999)) (func (export "f64-hex-sep2") (result f64) (f64.const 0x1_a_A_0_f)) (func (export "f64-hex-sep3") (result f64) (f64.const 0xa0_ff.f141_a59a)) (func (export "f64-hex-sep4") (result f64) (f64.const 0xf0P+1_3)) (func (export "f64-hex-sep5") (result f64) (f64.const 0x2a_f00a.1f_3_eep2_3)) ) (assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) (assert_return (invoke "f32_dec.root_beer_float") (i32.const 0x3f800001)) (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) (assert_return (invoke "f64_dec.root_beer_float") (i64.const 0x3ff000001ff19e24)) (assert_return (invoke "f32-dec-sep1") (f32.const 1000000)) (assert_return (invoke "f32-dec-sep2") (f32.const 1000)) (assert_return (invoke "f32-dec-sep3") (f32.const 1003.141592)) (assert_return (invoke "f32-dec-sep4") (f32.const 99e+13)) (assert_return (invoke "f32-dec-sep5") (f32.const 122000.11354e23)) (assert_return (invoke "f32-hex-sep1") (f32.const 0xa0f0099)) (assert_return (invoke "f32-hex-sep2") (f32.const 0x1aa0f)) (assert_return (invoke "f32-hex-sep3") (f32.const 0xa0ff.f141a59a)) (assert_return (invoke "f32-hex-sep4") (f32.const 0xf0P+13)) (assert_return (invoke "f32-hex-sep5") (f32.const 0x2af00a.1f3eep23)) (assert_return (invoke "f64-dec-sep1") (f64.const 1000000)) (assert_return (invoke "f64-dec-sep2") (f64.const 1000)) (assert_return (invoke "f64-dec-sep3") (f64.const 1003.141592)) (assert_return (invoke "f64-dec-sep4") (f64.const 99e-123)) (assert_return (invoke "f64-dec-sep5") (f64.const 122000.11354e23)) (assert_return (invoke "f64-hex-sep1") (f64.const 0xaf00f00009999)) (assert_return (invoke "f64-hex-sep2") (f64.const 0x1aa0f)) (assert_return (invoke "f64-hex-sep3") (f64.const 0xa0ff.f141a59a)) (assert_return (invoke "f64-hex-sep4") (f64.const 0xf0P+13)) (assert_return (invoke "f64-hex-sep5") (f64.const 0x2af00a.1f3eep23)) ;; Test parsing a float from binary (module binary ;; (func (export "4294967249") (result f64) (f64.const 4294967249)) "\00\61\73\6d\01\00\00\00\01\85\80\80\80\00\01\60" "\00\01\7c\03\82\80\80\80\00\01\00\07\8e\80\80\80" "\00\01\0a\34\32\39\34\39\36\37\32\34\39\00\00\0a" "\91\80\80\80\00\01\8b\80\80\80\00\00\44\00\00\20" "\fa\ff\ff\ef\41\0b" ) (assert_return (invoke "4294967249") (f64.const 4294967249)) (assert_malformed (module quote "(global f32 (f32.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_+1))") "unknown operator" ) ================================================ FILE: Test/WebAssembly/spec/float_memory.wast ================================================ ;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory (data "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory (data "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 1))) (func (export "i32.load") (result i32) (i32.load (i32.const 1))) (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 1))) (func (export "i64.load") (result i64) (i64.load (i32.const 1))) (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory (data "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory (data "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) ================================================ FILE: Test/WebAssembly/spec/float_misc.wast ================================================ ;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. ;; This testsuite is not currently sufficient for full IEEE 754 conformance ;; testing; platforms are currently expected to meet these requirements in ;; their own way (widely-used hardware platforms already do this). ;; ;; What this testsuite does test is that (a) the platform is basically IEEE 754 ;; rather than something else entirely, (b) it's configured correctly for ;; WebAssembly (rounding direction, exception masks, precision level, subnormal ;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common ;; value-changing optimizations, and (d) that the WebAssembly implementation ;; doesn't exhibit any known implementation bugs. ;; ;; This file supplements f32.wast, f64.wast, f32_bitwise.wast, f64_bitwise.wast, ;; f32_cmp.wast, and f64_cmp.wast with additional single-instruction tests ;; covering additional miscellaneous interesting cases. (module (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) ) ;; Miscellaneous values. (assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) (assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) ;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the ;; least that rounds to something greater. (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) ;; Max subnormal + min subnormal = min normal. (assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) (assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) (assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) ;; Test a case that was "tricky" on MMIX. ;; http://mmix.cs.hm.edu/bugs/bug_rounding.html (assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) ;; http://www.vinc17.org/software/tst-ieee754.xsl (assert_return (invoke "f64.add" (f64.const 9007199254740992) (f64.const 1.00001)) (f64.const 9007199254740994)) ;; http://www.vinc17.org/software/test.java (assert_return (invoke "f64.add" (f64.const 9007199254740994) (f64.const 0x1.fffep-1)) (f64.const 9007199254740994)) ;; Computations that round differently in ties-to-odd mode. (assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) (assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) (assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) (assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) (assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) (assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) (assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) (assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) (assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) (assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) (assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) (assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) (assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) (assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) (assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) (assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) (assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) (assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) (assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) (assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) (assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) (assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) (assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) (assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) (assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) (assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) (assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) (assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) (assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) (assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) ;; Computations that round differently on x87. (assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) (assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) (assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) (assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) (assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) (assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) (assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) (assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) (assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) ;; Computations that utilize the maximum exponent value to avoid overflow. (assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) (assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) (assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) (assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) (assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) (assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) ;; Computations that utilize the minimum exponent value. (assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) (assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) (assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) (assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) (assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) (assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) (assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) (assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) ;; Test an add of the second-greatest finite value with the distance to greatest ;; finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) ;; http://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/ (assert_return (invoke "f32.add" (f32.const 2.0) (f32.const 2.0)) (f32.const 4.0)) (assert_return (invoke "f64.add" (f64.const 2.0) (f64.const 2.0)) (f64.const 4.0)) ;; Test rounding above the greatest finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const inf)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const inf)) ;; Test for a historic spreadsheet bug. ;; https://blogs.office.com/2007/09/25/calculation-issue-update/ (assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) (assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) ;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the ;; least that rounds to something less. (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) (assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) (assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) (assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) (assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) (assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) (assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) (assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) (assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) (assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) (assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) (assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) (assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) (assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) (assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) (assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) (assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) (assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) (assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) (assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) (assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) (assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) (assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) (assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) (assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) (assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) (assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) (assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) (assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) (assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) (assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) (assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) (assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) (assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) ;; pow(e, π) - π ;; https://xkcd.com/217/ (assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) (assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) ;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ (assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) (assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) ;; Min normal - max subnormal = min subnormal. (assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) ;; Test subtraction of numbers very close to 1. (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.8p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.0p+0)) (f32.const 0x1p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p-24)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.8p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0p+0)) (f64.const 0x1p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p-53)) ;; Test the least value that can be subtracted from the max value to produce a ;; different value. (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const 0x1.ffffffffffffep+1023)) ;; Miscellaneous values. (assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) (assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) (assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) (assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) (assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) ;; Test for a historic spreadsheet bug. ;; http://www.joelonsoftware.com/items/2007/09/26b.html (assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) (assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) (assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) (assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) (assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) (assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) (assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) (assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) (assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) (assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) (assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) (assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) (assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) (assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) (assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) (assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) (assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) (assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) (assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) (assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) (assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) (assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) (assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) (assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) ;; Computations that round differently on x87. (assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) (assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) (assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) (assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) (assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) (assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) (assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) (assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) (assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) ;; Test the least positive value with a positive square. (assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) ;; Test the greatest positive value with a finite square. (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) (assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const inf)) ;; Test the squares of values very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep-1) (f32.const 0x1.fffffep-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test multiplication of numbers very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000004p+0) (f32.const 0x1.fffffcp-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000002p+0) (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.0000000000001p+0)) ;; Test MIN * EPSILON. ;; http://www.mpfr.org/mpfr-2.0.1/patch2 (assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) ;; http://opencores.org/bug,view,2454 (assert_return (invoke "f32.mul" (f32.const -0x1.0006p+4) (f32.const 0x1.ap-132)) (f32.const -0x1.a009cp-128)) ;; Miscellaneous values. (assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) (assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) (assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) (assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) (assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) (assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) (assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) (assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) (assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) (assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) ;; Test for a historic hardware bug. ;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug (assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) (assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) (assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) (assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) (assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) (assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) (assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) (assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) (assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) (assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) (assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) (assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) (assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) (assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) (assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) (assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) (assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) (assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) (assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) (assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) (assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) (assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) (assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) (assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) ;; Computations that round differently on x87. (assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) (assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) (assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) (assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) (assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) ;; Computations that round differently when div is mul by reciprocal. (assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) (assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) (assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) (assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) (assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) (assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) (assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) (assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) (assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) (assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) (assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) (assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) (assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) (assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) ;; Division involving the maximum subnormal value and the minimum normal value. (assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) ;; Test the least positive value with a positive quotient with the maximum value. (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) ;; Test the least positive value with a finite reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) ;; Test the least positive value that has a subnormal reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) ;; Test that the last binary digit of 1.0/3.0 is even in f32, ;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples ;; ;; and odd in f64, ;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples ;; ;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. ;; http://www.netlib.org/paranoia (assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) ;; Test division of numbers very close to 1. (assert_return (invoke "f32.div" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-1) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffap-1)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffdp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffep-1)) ;; Test for bugs found in an early RISC-V implementation. ;; https://github.com/riscv/riscv-tests/pull/8 (assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) ;; Test another sqrt case on x87. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 (assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963)) (f64.const nan:canonical)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) ;; Test the least value with a sqrt that rounds to one. (assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) ;; Test the greatest value less than one for which sqrt is not an identity. (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffcp-1)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffap-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test that the bitwise floating point operators are bitwise on NaN. (assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) ;; Test values close to 1.0. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) (assert_return (invoke "f32.ceil" (f32.const 0x1.000002p+0)) (f32.const 2.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.0000000000001p+0)) (f64.const 2.0)) ;; Test the maximum and minimum value for which ceil is not an identity operator. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) ;; Test that implementations don't do the x+0x1p52-0x1p52 trick outside the ;; range where it's safe. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+23)) (f32.const 0x1.fffffep+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+23)) (f32.const -0x1.fffffep+23)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+52)) (f64.const 0x1.fffffffffffffp+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+52)) (f64.const -0x1.fffffffffffffp+52)) ;; Test values close to -1.0. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) (assert_return (invoke "f32.floor" (f32.const -0x1.000002p+0)) (f32.const -2.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.0000000000001p+0)) (f64.const -2.0)) ;; Test the maximum and minimum value for which floor is not an identity operator. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that floor isn't implemented as XMVectorFloor. ;; http://dss.stephanierct.com/DevBlog/?p=8#comment-4 (assert_return (invoke "f32.floor" (f32.const 88607.0)) (f32.const 88607.0)) (assert_return (invoke "f64.floor" (f64.const 88607.0)) (f64.const 88607.0)) ;; Test the maximum and minimum value for which trunc is not an identity operator. (assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) (assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that nearest isn't implemented naively. ;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 ;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 (assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) ;; Nearest should not round halfway cases away from zero (as C's round(3) does) ;; or up (as JS's Math.round does). (assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) (assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) (assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) (assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) ;; Test the maximum and minimum value for which nearest is not an identity operator. (assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) ================================================ FILE: Test/WebAssembly/spec/forward.wast ================================================ (module (func $even (export "even") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 1)) (else (call $odd (i32.sub (local.get $n) (i32.const 1)))) ) ) (func $odd (export "odd") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 0)) (else (call $even (i32.sub (local.get $n) (i32.const 1)))) ) ) ) (assert_return (invoke "even" (i32.const 13)) (i32.const 0)) (assert_return (invoke "even" (i32.const 20)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/spec/func.wast ================================================ ;; Test `func` declarations, i.e. functions (module ;; Auxiliary definition (type $sig (func)) (func $dummy) ;; Syntax (func) (func (export "f")) (func $f) (func $h (export "g")) (func (local)) (func (local) (local)) (func (local i32)) (func (local $x i32)) (func (local i32 f64 i64)) (func (local i32) (local f64)) (func (local i32 f32) (local $x i64) (local) (local i32 f64)) (func (param)) (func (param) (param)) (func (param i32)) (func (param $x i32)) (func (param i32 f64 i64)) (func (param i32) (param f64)) (func (param i32 f32) (param $x i64) (param) (param i32 f64)) (func (result)) (func (result) (result)) (func (result i32) (unreachable)) (func (result i32 f64 f32) (unreachable)) (func (result i32) (result f64) (unreachable)) (func (result i32 f32) (result i64) (result) (result i32 f64) (unreachable)) (type $sig-1 (func)) (type $sig-2 (func (result i32))) (type $sig-3 (func (param $x i32))) (type $sig-4 (func (param i32 f64 i32) (result i32))) (func (export "type-use-1") (type $sig-1)) (func (export "type-use-2") (type $sig-2) (i32.const 0)) (func (export "type-use-3") (type $sig-3)) (func (export "type-use-4") (type $sig-4) (i32.const 0)) (func (export "type-use-5") (type $sig-2) (result i32) (i32.const 0)) (func (export "type-use-6") (type $sig-3) (param i32)) (func (export "type-use-7") (type $sig-4) (param i32) (param f64 i32) (result i32) (i32.const 0) ) (func (type $sig)) (func (type $forward)) ;; forward reference (func $complex (param i32 f32) (param $x i64) (param) (param i32) (result) (result i32) (result) (result i64 i32) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (func $complex-sig (type $sig) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (type $forward (func)) ;; Typing of locals (func (export "local-first-i32") (result i32) (local i32 i32) (local.get 0)) (func (export "local-first-i64") (result i64) (local i64 i64) (local.get 0)) (func (export "local-first-f32") (result f32) (local f32 f32) (local.get 0)) (func (export "local-first-f64") (result f64) (local f64 f64) (local.get 0)) (func (export "local-second-i32") (result i32) (local i32 i32) (local.get 1)) (func (export "local-second-i64") (result i64) (local i64 i64) (local.get 1)) (func (export "local-second-f32") (result f32) (local f32 f32) (local.get 1)) (func (export "local-second-f64") (result f64) (local f64 f64) (local.get 1)) (func (export "local-mixed") (result f64) (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of parameters (func (export "param-first-i32") (param i32 i32) (result i32) (local.get 0)) (func (export "param-first-i64") (param i64 i64) (result i64) (local.get 0)) (func (export "param-first-f32") (param f32 f32) (result f32) (local.get 0)) (func (export "param-first-f64") (param f64 f64) (result f64) (local.get 0)) (func (export "param-second-i32") (param i32 i32) (result i32) (local.get 1)) (func (export "param-second-i64") (param i64 i64) (result i64) (local.get 1)) (func (export "param-second-f32") (param f32 f32) (result f32) (local.get 1)) (func (export "param-second-f64") (param f64 f64) (result f64) (local.get 1)) (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) (result f64) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of results (func (export "empty")) (func (export "value-void") (call $dummy)) (func (export "value-i32") (result i32) (i32.const 77)) (func (export "value-i64") (result i64) (i64.const 7777)) (func (export "value-f32") (result f32) (f32.const 77.7)) (func (export "value-f64") (result f64) (f64.const 77.77)) (func (export "value-i32-f64") (result i32 f64) (i32.const 77) (f64.const 7)) (func (export "value-i32-i32-i32") (result i32 i32 i32) (i32.const 1) (i32.const 2) (i32.const 3) ) (func (export "value-block-void") (block (call $dummy) (call $dummy))) (func (export "value-block-i32") (result i32) (block (result i32) (call $dummy) (i32.const 77)) ) (func (export "value-block-i32-i64") (result i32 i64) (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2)) ) (func (export "return-empty") (return)) (func (export "return-i32") (result i32) (return (i32.const 78))) (func (export "return-i64") (result i64) (return (i64.const 7878))) (func (export "return-f32") (result f32) (return (f32.const 78.7))) (func (export "return-f64") (result f64) (return (f64.const 78.78))) (func (export "return-i32-f64") (result i32 f64) (return (i32.const 78) (f64.const 78.78)) ) (func (export "return-i32-i32-i32") (result i32 i32 i32) (return (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "return-block-i32") (result i32) (return (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "return-block-i32-i64") (result i32 i64) (return (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-empty") (br 0)) (func (export "break-i32") (result i32) (br 0 (i32.const 79))) (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) (func (export "break-i32-f64") (result i32 f64) (br 0 (i32.const 79) (f64.const 79.79)) ) (func (export "break-i32-i32-i32") (result i32 i32 i32) (br 0 (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "break-block-i32") (result i32) (br 0 (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "break-block-i32-i64") (result i32 i64) (br 0 (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-br_if-empty") (param i32) (br_if 0 (local.get 0)) ) (func (export "break-br_if-num") (param i32) (result i32) (drop (br_if 0 (i32.const 50) (local.get 0))) (i32.const 51) ) (func (export "break-br_if-num-num") (param i32) (result i32 i64) (drop (drop (br_if 0 (i32.const 50) (i64.const 51) (local.get 0)))) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-empty") (param i32) (br_table 0 0 0 (local.get 0)) ) (func (export "break-br_table-num") (param i32) (result i32) (br_table 0 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (func (export "break-br_table-num-num") (param i32) (result i32 i64) (br_table 0 0 (i32.const 50) (i64.const 51) (local.get 0)) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-nested-empty") (param i32) (block (br_table 0 1 0 (local.get 0))) ) (func (export "break-br_table-nested-num") (param i32) (result i32) (i32.add (block (result i32) (br_table 0 1 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (i32.const 2) ) ) (func (export "break-br_table-nested-num-num") (param i32) (result i32 i32) (i32.add (block (result i32 i32) (br_table 0 1 0 (i32.const 50) (i32.const 51) (local.get 0)) (i32.const 51) (i32.const -3) ) ) (i32.const 52) ) ;; Large signatures (func (export "large-sig") (param i32 i64 f32 f32 i32 f64 f32 i32 i32 i32 f32 f64 f64 f64 i32 i32 f32) (result f64 f32 i32 i32 i32 i64 f32 i32 i32 f32 f64 f64 i32 f32 i32 f64) (local.get 5) (local.get 2) (local.get 0) (local.get 8) (local.get 7) (local.get 1) (local.get 3) (local.get 9) (local.get 4) (local.get 6) (local.get 13) (local.get 11) (local.get 15) (local.get 16) (local.get 14) (local.get 12) ) ;; Default initialization of locals (func (export "init-local-i32") (result i32) (local i32) (local.get 0)) (func (export "init-local-i64") (result i64) (local i64) (local.get 0)) (func (export "init-local-f32") (result f32) (local f32) (local.get 0)) (func (export "init-local-f64") (result f64) (local f64) (local.get 0)) ) (assert_return (invoke "type-use-1")) (assert_return (invoke "type-use-2") (i32.const 0)) (assert_return (invoke "type-use-3" (i32.const 1))) (assert_return (invoke "type-use-4" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "type-use-5") (i32.const 0)) (assert_return (invoke "type-use-6" (i32.const 1))) (assert_return (invoke "type-use-7" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "local-first-i32") (i32.const 0)) (assert_return (invoke "local-first-i64") (i64.const 0)) (assert_return (invoke "local-first-f32") (f32.const 0)) (assert_return (invoke "local-first-f64") (f64.const 0)) (assert_return (invoke "local-second-i32") (i32.const 0)) (assert_return (invoke "local-second-i64") (i64.const 0)) (assert_return (invoke "local-second-f32") (f32.const 0)) (assert_return (invoke "local-second-f64") (f64.const 0)) (assert_return (invoke "local-mixed") (f64.const 0)) (assert_return (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) ) (assert_return (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) ) (assert_return (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) ) (assert_return (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) ) (assert_return (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) ) (assert_return (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) ) (assert_return (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) ) (assert_return (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) ) (assert_return (invoke "param-mixed" (f32.const 1) (i32.const 2) (i64.const 3) (i32.const 4) (f64.const 5.5) (i32.const 6) ) (f64.const 5.5) ) (assert_return (invoke "empty")) (assert_return (invoke "value-void")) (assert_return (invoke "value-i32") (i32.const 77)) (assert_return (invoke "value-i64") (i64.const 7777)) (assert_return (invoke "value-f32") (f32.const 77.7)) (assert_return (invoke "value-f64") (f64.const 77.77)) (assert_return (invoke "value-i32-f64") (i32.const 77) (f64.const 7)) (assert_return (invoke "value-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "value-block-void")) (assert_return (invoke "value-block-i32") (i32.const 77)) (assert_return (invoke "value-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "return-empty")) (assert_return (invoke "return-i32") (i32.const 78)) (assert_return (invoke "return-i64") (i64.const 7878)) (assert_return (invoke "return-f32") (f32.const 78.7)) (assert_return (invoke "return-f64") (f64.const 78.78)) (assert_return (invoke "return-i32-f64") (i32.const 78) (f64.const 78.78)) (assert_return (invoke "return-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "return-block-i32") (i32.const 77)) (assert_return (invoke "return-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-empty")) (assert_return (invoke "break-i32") (i32.const 79)) (assert_return (invoke "break-i64") (i64.const 7979)) (assert_return (invoke "break-f32") (f32.const 79.9)) (assert_return (invoke "break-f64") (f64.const 79.79)) (assert_return (invoke "break-i32-f64") (i32.const 79) (f64.const 79.79)) (assert_return (invoke "break-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "break-block-i32") (i32.const 77)) (assert_return (invoke "break-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-br_if-empty" (i32.const 0))) (assert_return (invoke "break-br_if-empty" (i32.const 2))) (assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) (assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_if-num-num" (i32.const 0)) (i32.const 51) (i64.const 52) ) (assert_return (invoke "break-br_if-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-empty" (i32.const 0))) (assert_return (invoke "break-br_table-empty" (i32.const 1))) (assert_return (invoke "break-br_table-empty" (i32.const 5))) (assert_return (invoke "break-br_table-empty" (i32.const -1))) (assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) (assert_return (invoke "break-br_table-num-num" (i32.const 0)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 10)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const -100)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) (assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) (assert_return (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 0)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 1)) (i32.const 50) (i32.const 51) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 2)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const -3)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "large-sig" (i32.const 0) (i64.const 1) (f32.const 2) (f32.const 3) (i32.const 4) (f64.const 5) (f32.const 6) (i32.const 7) (i32.const 8) (i32.const 9) (f32.const 10) (f64.const 11) (f64.const 12) (f64.const 13) (i32.const 14) (i32.const 15) (f32.const 16) ) (f64.const 5) (f32.const 2) (i32.const 0) (i32.const 8) (i32.const 7) (i64.const 1) (f32.const 3) (i32.const 9) (i32.const 4) (f32.const 6) (f64.const 13) (f64.const 11) (i32.const 15) (f32.const 16) (i32.const 14) (f64.const 12) ) (assert_return (invoke "init-local-i32") (i32.const 0)) (assert_return (invoke "init-local-i64") (i64.const 0)) (assert_return (invoke "init-local-f32") (f32.const 0)) (assert_return (invoke "init-local-f64") (f64.const 0)) ;; Expansion of inline function types (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (type $t (func (param i32))) (func $i32->void (type 0)) ;; (param i32) (func $void->f64 (type 1) (f64.const 0)) ;; (result f64) (func $check (call $i32->void (i32.const 0)) (drop (call $void->f64)) ) ) (assert_invalid (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (func $h (result f64) (f64.const 1)) ;; reuses implicit type definition (type $t (func (param i32))) (func (type 2)) ;; does not exist ) "unknown type" ) (assert_malformed (module quote "(func $f (result f64) (f64.const 0))" ;; adds implicit type definition "(func $g (param i32))" ;; reuses explicit type definition "(func $h (result f64) (f64.const 1))" ;; reuses implicit type definition "(type $t (func (param i32)))" "(func (type 2) (param i32))" ;; does not exist ) "unknown type" ) (module (type $proc (func (result i32))) (type $sig (func (param i32) (result i32))) (func (export "f") (type $sig) (local $var i32) (local.get $var) ) (func $g (type $sig) (local $var i32) (local.get $var) ) (func (export "g") (type $sig) (call $g (local.get 0)) ) (func (export "p") (type $proc) (local $var i32) (local.set 0 (i32.const 42)) (local.get $var) ) ) (assert_return (invoke "f" (i32.const 42)) (i32.const 0)) (assert_return (invoke "g" (i32.const 42)) (i32.const 0)) (assert_return (invoke "p") (i32.const 42)) (module (type $sig (func)) (func $empty-sig-1) ;; should be assigned type $sig (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $empty-sig-2) ;; should be assigned type $sig (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-4 (param i64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-5 (param i64 i64 f64 i64 f64 i64 f32 i32)) (type $empty-sig-duplicate (func)) (type $complex-sig-duplicate (func (param i64 i64 f64 i64 f64 i64 f32 i32))) (table funcref (elem $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 $complex-sig-4 $complex-sig-5 ) ) (func (export "signature-explicit-reused") (call_indirect (type $sig) (i32.const 1)) (call_indirect (type $sig) (i32.const 4)) ) (func (export "signature-implicit-reused") ;; The implicit index 3 in this test depends on the function and ;; type definitions, and may need adapting if they change. (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 2) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 3) ) ) (func (export "signature-explicit-duplicate") (call_indirect (type $empty-sig-duplicate) (i32.const 1)) ) (func (export "signature-implicit-duplicate") (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 5) ) (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 6) ) ) ) (assert_return (invoke "signature-explicit-reused")) (assert_return (invoke "signature-implicit-reused")) (assert_return (invoke "signature-explicit-duplicate")) (assert_return (invoke "signature-implicit-duplicate")) ;; Malformed type use (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (type $sig) (result i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (result i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (type $sig) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (param i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (param i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (type $sig) (param i32) (result i32) (unreachable))" ) "inline function type" ) ;; Invalid typing of locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of result (assert_invalid (module (func $type-empty-i32 (result i32))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64-i32 (result f64 i32))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (i32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (i32.const 0) (i64.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result f32 f32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result f32) (f32.const 0) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-num (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-nums (result i32 i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-num (result i32) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-nums (result i32 i64) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-num (result i32) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-nums (result i64 i64) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-num (result i32) (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-nums (result i32 i32) (return) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-partial-vs-nums (result i32 i32) (i32.const 1) (return) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-num (result i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-nums (result i32 i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-num (result i32) (return (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-nums (result i32 i32) (return (i64.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-num (result i32) (return (i64.const 1)) (return (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-nums (result i32 i32) (return (i32.const 1)) (return (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-num (result i32) (br 0 (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-nums (result i32 i32) (br 0 (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-nums (result i32 i32) (br 0) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (br 0 (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (br 0 (i32.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (br 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (br 1 (nop))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32) (br 1 (i32.const 1))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) ;; Syntax errors (assert_malformed (module quote "(func (nop) (local i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (result i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (result i32) (local.get 0))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (local.get 0))") "unexpected token" ) ;; Duplicate name errors (assert_malformed (module quote "(func $foo)" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(import \"\" \"\" (func $foo))") "duplicate func") (assert_malformed (module quote "(func (param $foo i32) (param $foo i32))") "duplicate local") (assert_malformed (module quote "(func (param $foo i32) (local $foo i32))") "duplicate local") (assert_malformed (module quote "(func (local $foo i32) (local $foo i32))") "duplicate local") ================================================ FILE: Test/WebAssembly/spec/func_ptrs.wast ================================================ (module (type (func)) ;; 0: void -> void (type $S (func)) ;; 1: void -> void (type (func (param))) ;; 2: void -> void (type (func (result i32))) ;; 3: void -> i32 (type (func (param) (result i32))) ;; 4: void -> i32 (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 (type $U (func (param i32))) ;; 6: i32 -> void (func $print (import "spectest" "print_i32") (type 6)) (func (type 0)) (func (type $S)) (func (export "one") (type 4) (i32.const 13)) (func (export "two") (type $T) (i32.add (local.get 0) (i32.const 1))) ;; Both signature and parameters are allowed (and required to match) ;; since this allows the naming of parameters. (func (export "three") (type $T) (param $a i32) (result i32) (i32.sub (local.get 0) (i32.const 2)) ) (func (export "four") (type $U) (call $print (local.get 0))) ) (assert_return (invoke "one") (i32.const 13)) (assert_return (invoke "two" (i32.const 13)) (i32.const 14)) (assert_return (invoke "three" (i32.const 13)) (i32.const 11)) (invoke "four" (i32.const 83)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") (assert_invalid (module (table 1 funcref) (elem (i64.const 0))) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop))) "constant expression required" ) (assert_invalid (module (func (type 42))) "unknown type") (assert_invalid (module (import "spectest" "print_i32" (func (type 43)))) "unknown type") (module (type $T (func (param) (result i32))) (type $U (func (param) (result i32))) (table funcref (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func $t3 (type $T) (i32.const 3)) (func $u1 (type $U) (i32.const 4)) (func $u2 (type $U) (i32.const 5)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) (func (export "callu") (param $i i32) (result i32) (call_indirect (type $U) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callt" (i32.const 7)) "undefined element") (assert_trap (invoke "callt" (i32.const 100)) "undefined element") (assert_trap (invoke "callt" (i32.const -1)) "undefined element") (assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callu" (i32.const 7)) "undefined element") (assert_trap (invoke "callu" (i32.const 100)) "undefined element") (assert_trap (invoke "callu" (i32.const -1)) "undefined element") (module (type $T (func (result i32))) (table funcref (elem 0 1)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) ================================================ FILE: Test/WebAssembly/spec/global.wast ================================================ ;; Test globals (module (global (import "spectest" "global_i32") i32) (global (import "spectest" "global_i64") i64) (global $a i32 (i32.const -2)) (global (;3;) f32 (f32.const -3)) (global (;4;) f64 (f64.const -4)) (global $b i64 (i64.const -5)) (global $x (mut i32) (i32.const -12)) (global (;7;) (mut f32) (f32.const -13)) (global (;8;) (mut f64) (f64.const -14)) (global $y (mut i64) (i64.const -15)) (global $z1 i32 (global.get 0)) (global $z2 i64 (global.get 1)) (global $r externref (ref.null extern)) (global $mr (mut externref) (ref.null extern)) (global funcref (ref.null func)) (func (export "get-a") (result i32) (global.get $a)) (func (export "get-b") (result i64) (global.get $b)) (func (export "get-r") (result externref) (global.get $r)) (func (export "get-mr") (result externref) (global.get $mr)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i64) (global.get $y)) (func (export "get-z1") (result i32) (global.get $z1)) (func (export "get-z2") (result i64) (global.get $z2)) (func (export "set-x") (param i32) (global.set $x (local.get 0))) (func (export "set-y") (param i64) (global.set $y (local.get 0))) (func (export "set-mr") (param externref) (global.set $mr (local.get 0))) (func (export "get-3") (result f32) (global.get 3)) (func (export "get-4") (result f64) (global.get 4)) (func (export "get-7") (result f32) (global.get 7)) (func (export "get-8") (result f64) (global.get 8)) (func (export "set-7") (param f32) (global.set 7 (local.get 0))) (func (export "set-8") (param f64) (global.set 8 (local.get 0))) ;; As the argument of control constructs and instructions (memory 1) (func $dummy) (func (export "as-select-first") (result i32) (select (global.get $x) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (global.get $x) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (global.get $x)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (global.get $x) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (global.get $x) (call $dummy) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (global.get $x) ) ) (func (export "as-if-condition") (result i32) (if (result i32) (global.get $x) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (global.get $x)) (else (i32.const 2)) ) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (global.get $x)) ) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (global.get $x) (i32.const 2)) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (global.get $x)) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (result i32) (block (result i32) (global.get $x) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (global.get $x) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (global.get $x) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (global.get $x) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (global.get $x) ) ) ) (func (export "as-store-first") (global.get $x) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 0) (global.get $x) (i32.store) ) (func (export "as-load-operand") (result i32) (i32.load (global.get $x)) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (global.get $x)) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (global.get $x)) ) (func (export "as-return-value") (result i32) (global.get $x) (return) ) (func (export "as-drop-operand") (drop (global.get $x)) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (global.get $x))) ) (func (export "as-local.set-value") (param i32) (result i32) (local.set 0 (global.get $x)) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (global.get $x)) ) (func (export "as-global.set-value") (result i32) (global.set $x (global.get $x)) (global.get $x) ) (func (export "as-unary-operand") (result i32) (i32.eqz (global.get $x)) ) (func (export "as-binary-operand") (result i32) (i32.mul (global.get $x) (global.get $x) ) ) (func (export "as-compare-operand") (result i32) (i32.gt_u (global.get 0) (i32.const 1) ) ) ) (assert_return (invoke "get-a") (i32.const -2)) (assert_return (invoke "get-b") (i64.const -5)) (assert_return (invoke "get-r") (ref.null extern)) (assert_return (invoke "get-mr") (ref.null extern)) (assert_return (invoke "get-x") (i32.const -12)) (assert_return (invoke "get-y") (i64.const -15)) (assert_return (invoke "get-z1") (i32.const 666)) (assert_return (invoke "get-z2") (i64.const 666)) (assert_return (invoke "get-3") (f32.const -3)) (assert_return (invoke "get-4") (f64.const -4)) (assert_return (invoke "get-7") (f32.const -13)) (assert_return (invoke "get-8") (f64.const -14)) (assert_return (invoke "set-x" (i32.const 6))) (assert_return (invoke "set-y" (i64.const 7))) (assert_return (invoke "set-7" (f32.const 8))) (assert_return (invoke "set-8" (f64.const 9))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-7") (f32.const 8)) (assert_return (invoke "get-8") (f64.const 9)) (assert_return (invoke "set-7" (f32.const 8))) (assert_return (invoke "set-8" (f64.const 9))) (assert_return (invoke "set-mr" (ref.extern 10))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-7") (f32.const 8)) (assert_return (invoke "get-8") (f64.const 9)) (assert_return (invoke "get-mr") (ref.extern 10)) (assert_return (invoke "as-select-first") (i32.const 6)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 6)) (assert_return (invoke "as-loop-mid") (i32.const 6)) (assert_return (invoke "as-loop-last") (i32.const 6)) (assert_return (invoke "as-if-condition") (i32.const 2)) (assert_return (invoke "as-if-then") (i32.const 6)) (assert_return (invoke "as-if-else") (i32.const 6)) (assert_return (invoke "as-br_if-first") (i32.const 6)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 6)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 6)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 6)) (assert_return (invoke "as-return-value") (i32.const 6)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 6)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-global.set-value") (i32.const 6)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 36)) (assert_return (invoke "as-compare-operand") (i32.const 1)) (assert_invalid (module (global f32 (f32.const 0)) (func (global.set 0 (f32.const 1)))) "global is immutable" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (global.set 0 (i32.const 1)))) "global is immutable" ) ;; mutable globals can be exported (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) (module (global (export "a") (mut f32) (f32.const 0))) (assert_invalid (module (global f32 (f32.neg (f32.const 0)))) "constant expression required" ) (assert_invalid (module (global f32 (local.get 0))) "constant expression required" ) (assert_invalid (module (global f32 (f32.neg (f32.const 1)))) "constant expression required" ) (assert_invalid (module (global i32 (i32.const 0) (nop))) "constant expression required" ) (assert_invalid (module (global i32 (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (global i32 (nop))) "constant expression required" ) (assert_invalid (module (global i32 (f32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (i32.const 0) (i32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (;empty instruction sequence;))) "type mismatch" ) (assert_invalid (module (global (import "" "") externref) (global funcref (global.get 0))) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (global i32 (global.get 0) (global.get 0))) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (global i32 (i32.const 0) (global.get 0))) "type mismatch" ) (assert_invalid (module (global i32 (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (global.get 1)) (global i32 (i32.const 0))) "unknown global" ) (assert_invalid (module (global (import "test" "global-i32") i32) (global i32 (global.get 2))) "unknown global" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (global i32 (global.get 0))) "constant expression required" ) (module (import "spectest" "global_i32" (global i32)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\02" ;; malformed mutability ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\ff" ;; malformed mutability ) "malformed mutability" ) (module (global i32 (i32.const 0)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\02" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\ff" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) ;; global.get with invalid index (assert_invalid (module (func (result i32) (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (func (result i32) (global.get 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (result i32) (global.get 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (global i32 (i32.const 0)) (func (result i32) (global.get 2)) ) "unknown global" ) ;; global.set with invalid index (assert_invalid (module (func (i32.const 0) (global.set 0))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (func (i32.const 0) (global.set 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (func (i32.const 0) (global.set 1)) ) "unknown global" ) (assert_invalid (module (import "spectest" "global_i32" (global i32)) (global i32 (i32.const 0)) (func (i32.const 0) (global.set 2)) ) "unknown global" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty (global.set $x) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-block (i32.const 0) (block (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-loop (i32.const 0) (loop (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br (i32.const 0) (block (br 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_if (i32.const 0) (block (br_if 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_table (i32.const 0) (block (br_table 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-return (return (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-select (select (global.set $x) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-call (call 1 (global.set $x)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-global.set-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (global.set $x) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Duplicate identifier errors (assert_malformed (module quote "(global $foo i32 (i32.const 0))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(import \"\" \"\" (global $foo i32))") "duplicate global") ================================================ FILE: Test/WebAssembly/spec/i32.wast ================================================ ;; i32 operations (module (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (local.get $x) (local.get $y))) (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i32) (result i32) (i32.clz (local.get $x))) (func (export "ctz") (param $x i32) (result i32) (i32.ctz (local.get $x))) (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (local.get $x))) (func (export "extend8_s") (param $x i32) (result i32) (i32.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i32) (result i32) (i32.extend16_s (local.get $x))) (func (export "eqz") (param $x i32) (result i32) (i32.eqz (local.get $x))) (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) (assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) (assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) (assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) (assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) (assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) (assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) (assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) (assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) (assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) (assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) (assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) (assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) (assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) (assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) (assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00000400)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 31)) (i32.const 2)) (assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) (assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) (assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) (assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) (assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) (assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) (assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) (assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) (assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) (assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) (assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) (assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) (assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) (assert_return (invoke "extend8_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0x7f)) (i32.const 127)) (assert_return (invoke "extend8_s" (i32.const 0x80)) (i32.const -128)) (assert_return (invoke "extend8_s" (i32.const 0xff)) (i32.const -1)) (assert_return (invoke "extend8_s" (i32.const 0x012345_00)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0xfedcba_80)) (i32.const -0x80)) (assert_return (invoke "extend8_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0x7fff)) (i32.const 32767)) (assert_return (invoke "extend16_s" (i32.const 0x8000)) (i32.const -32768)) (assert_return (invoke "extend16_s" (i32.const 0xffff)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0x0123_0000)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0xfedc_8000)) (i32.const -0x8000)) (assert_return (invoke "extend16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_invalid (module (func $type-unary-operand-empty (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-block (i32.const 0) (block (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-loop (i32.const 0) (loop (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-if (i32.const 0) (i32.const 0) (if (then (i32.eqz) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.eqz))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br (i32.const 0) (block (br 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.eqz) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-return (return (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-select (select (i32.eqz) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-call (call 1 (i32.eqz)) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-unary-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.eqz) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.set (local i32) (local.set 0 (i32.eqz)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-unary-operand-empty-in-global.set (global.set $x (i32.eqz)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-memory.grow (memory.grow (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-load (i32.load (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-unary-operand-empty-in-store (i32.store (i32.eqz) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty (i32.const 0) (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-if (i32.const 0) (i32.const 0) (i32.const 0) (if (i32.add) (then (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-if (i32.const 0) (i32.const 0) (if (i32.const 0) (then (i32.add)) (else (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-else (i32.const 0) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add) (i32.const 0))) (drop) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-return (return (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-return (return (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-select (select (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-select (select (i32.const 0) (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-call (call 1 (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-call (call 1 (i32.const 0) (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-1st-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-2nd-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.set (local i32) (local.set 0 (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.set (local i32) (local.set 0 (i32.const 0) (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-1st-operand-empty-in-global.set (global.set $x (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-2nd-operand-empty-in-global.set (global.set $x (i32.const 0) (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-memory.grow (memory.grow (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-memory.grow (memory.grow (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-load (i32.load (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-load (i32.load (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-1st-operand-empty-in-store (i32.store (i32.add) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-2nd-operand-empty-in-store (i32.store (i32.const 1) (i32.add) (i32.const 0)) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (func (result i32) (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eqz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.clz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ctz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.popcnt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") (assert_malformed (module quote "(func (result i32) (i32.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (i32.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/spec/i64.wast ================================================ ;; i64 operations (module (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (local.get $x) (local.get $y))) (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i64) (result i64) (i64.clz (local.get $x))) (func (export "ctz") (param $x i64) (result i64) (i64.ctz (local.get $x))) (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (local.get $x))) (func (export "extend8_s") (param $x i64) (result i64) (i64.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i64) (result i64) (i64.extend16_s (local.get $x))) (func (export "extend32_s") (param $x i64) (result i64) (i64.extend32_s (local.get $x))) (func (export "eqz") (param $x i64) (result i32) (i64.eqz (local.get $x))) (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) (assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) (assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) (assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) (assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) (assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) (assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) (assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) (assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) (assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) (assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) (assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) (assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) (assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) (assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) (assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x579b30ec048d159d)) (assert_return (invoke "rotl" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0xe000000dc000000f)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0xcf013579ae529dea)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x55e6cc3b01234567)) (assert_return (invoke "rotr" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0x0fe000000dc00000)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0x94a77ab3c04d5e6b)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 63)) (i64.const 2)) (assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) (assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) (assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) (assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) (assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) (assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) (assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) (assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) (assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) (assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) (assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) (assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) (assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) (assert_return (invoke "extend8_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0x7f)) (i64.const 127)) (assert_return (invoke "extend8_s" (i64.const 0x80)) (i64.const -128)) (assert_return (invoke "extend8_s" (i64.const 0xff)) (i64.const -1)) (assert_return (invoke "extend8_s" (i64.const 0x01234567_89abcd_00)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0xfedcba98_765432_80)) (i64.const -0x80)) (assert_return (invoke "extend8_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend16_s" (i64.const 0x8000)) (i64.const -32768)) (assert_return (invoke "extend16_s" (i64.const 0xffff)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0x12345678_9abc_0000)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0xfedcba98_7654_8000)) (i64.const -0x8000)) (assert_return (invoke "extend16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend32_s" (i64.const 0x8000)) (i64.const 32768)) (assert_return (invoke "extend32_s" (i64.const 0xffff)) (i64.const 65535)) (assert_return (invoke "extend32_s" (i64.const 0x7fffffff)) (i64.const 0x7fffffff)) (assert_return (invoke "extend32_s" (i64.const 0x80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const 0xffffffff)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0x01234567_00000000)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0xfedcba98_80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0xffffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result i64) (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eqz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.clz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ctz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.popcnt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") (assert_malformed (module quote "(func (result i64) (i64.const nan:arithmetic))") "unexpected token" ) (assert_malformed (module quote "(func (result i64) (i64.const nan:canonical))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/spec/if.wast ================================================ ;; Test `if` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (param i32) (if (local.get 0) (then)) (if (local.get 0) (then) (else)) (if $l (local.get 0) (then)) (if $l (local.get 0) (then) (else)) ) (func (export "singular") (param i32) (result i32) (if (local.get 0) (then (nop))) (if (local.get 0) (then (nop)) (else (nop))) (if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8))) ) (func (export "multi") (param i32) (result i32 i32) (if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy))) (if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy))) (if (result i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 8) (call $dummy)) (else (call $dummy) (call $dummy) (i32.const 9) (call $dummy)) ) (if (result i32 i64 i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 1) (call $dummy) (call $dummy) (call $dummy) (i64.const 2) (call $dummy) (call $dummy) (call $dummy) (i32.const 3) (call $dummy) ) (else (call $dummy) (call $dummy) (i32.const -1) (call $dummy) (call $dummy) (call $dummy) (i64.const -2) (call $dummy) (call $dummy) (call $dummy) (i32.const -3) (call $dummy) ) ) (drop) (drop) ) (func (export "nested") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 9)) (else (call $dummy) (i32.const 10)) ) ) (else (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 10)) (else (call $dummy) (i32.const 11)) ) ) ) ) (func (export "as-select-first") (param i32) (result i32) (select (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 3) ) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 3) ) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) ) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-if-condition") (param i32) (result i32) (if (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) ) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) ) (func (export "as-store-first") (param i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-return-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0))) (return) ) (func (export "as-drop-operand") (param i32) (drop (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (if (result i32) (local.get 0) (then (i32.const 11)) (else (i32.const 10)) ) ) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.ctz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const -13)) ) ) ) (func (export "as-binary-operand") (param i32 i32) (result i32) (i32.mul (if (result i32) (local.get 0) (then (call $dummy) (i32.const 3)) (else (call $dummy) (i32.const -3)) ) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -5)) ) ) ) (func (export "as-test-operand") (param i32) (result i32) (i32.eqz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-compare-operand") (param i32 i32) (result i32) (f32.gt (if (result f32) (local.get 0) (then (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -3)) ) (if (result f32) (local.get 1) (then (call $dummy) (f32.const 4)) (else (call $dummy) (f32.const -4)) ) ) ) (func (export "as-binary-operands") (param i32) (result i32) (i32.mul (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const 3) (call $dummy) (i32.const -4)) ) ) ) (func (export "as-compare-operands") (param i32) (result i32) (f32.gt (if (result f32 f32) (local.get 0) (then (call $dummy) (f32.const 3) (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -2) (call $dummy) (f32.const -3)) ) ) ) (func (export "as-mixed-operands") (param i32) (result i32) (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -3) (call $dummy) (i32.const -4)) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (if (i32.const 1) (then (br 0) (unreachable))) (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable))) (i32.const 19) ) (func (export "break-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (br 0 (i32.const 18)) (i32.const 19)) (else (br 0 (i32.const 21)) (i32.const 20)) ) ) (func (export "break-multi-value") (param i32) (result i32 i32 i64) (if (result i32 i32 i64) (local.get 0) (then (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) (else (br 0 (i32.const -18) (i32.const 18) (i64.const -18)) (i32.const -19) (i32.const 19) (i64.const -19) ) ) ) (func (export "param") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add)) (else (i32.const -2) (i32.add)) ) ) (func (export "params") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add)) (else (i32.sub)) ) ) (func (export "params-id") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then)) (i32.add) ) (func (export "param-break") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add) (br 0)) (else (i32.const -2) (i32.add) (br 0)) ) ) (func (export "params-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add) (br 0)) (else (i32.sub) (br 0)) ) ) (func (export "params-id-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0))) (i32.add) ) (func (export "effects") (param i32) (result i32) (local i32) (if (block (result i32) (local.set 1 (i32.const 1)) (local.get 0)) (then (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (local.set 1 (i32.sub (local.get 1) (i32.const 5))) (local.set 1 (i32.mul (local.get 1) (i32.const 7))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 100))) ) (else (local.set 1 (i32.mul (local.get 1) (i32.const 5))) (local.set 1 (i32.sub (local.get 1) (i32.const 7))) (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 1000))) ) ) (local.get 1) ) ;; Examples (func $add64_u_with_carry (export "add64_u_with_carry") (param $i i64) (param $j i64) (param $c i32) (result i64 i32) (local $k i64) (local.set $k (i64.add (i64.add (local.get $i) (local.get $j)) (i64.extend_i32_u (local.get $c)) ) ) (return (local.get $k) (i64.lt_u (local.get $k) (local.get $i))) ) (func $add64_u_saturated (export "add64_u_saturated") (param i64 i64) (result i64) (call $add64_u_with_carry (local.get 0) (local.get 1) (i32.const 0)) (if (param i64) (result i64) (then (drop) (i64.const -1)) ) ) ;; Block signature syntax (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (if (type $block-sig-1) (i32.const 1) (then)) (if (type $block-sig-2) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (i32.const 1) (then (drop)) (else (drop))) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (i32.const 1) (then)) (drop) (drop) (drop) (if (type $block-sig-2) (result i32) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (param i32) (i32.const 1) (then (drop)) (else (drop)) ) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) (i32.const 1) (then) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty" (i32.const 0))) (assert_return (invoke "empty" (i32.const 1))) (assert_return (invoke "empty" (i32.const 100))) (assert_return (invoke "empty" (i32.const -2))) (assert_return (invoke "singular" (i32.const 0)) (i32.const 8)) (assert_return (invoke "singular" (i32.const 1)) (i32.const 7)) (assert_return (invoke "singular" (i32.const 10)) (i32.const 7)) (assert_return (invoke "singular" (i32.const -10)) (i32.const 7)) (assert_return (invoke "multi" (i32.const 0)) (i32.const 9) (i32.const -1)) (assert_return (invoke "multi" (i32.const 1)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const 13)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const -5)) (i32.const 8) (i32.const 1)) (assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11)) (assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-condition" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-condition" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-last" (i32.const 0)) (i32.const 2)) (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-binary-operands" (i32.const 0)) (i32.const -12)) (assert_return (invoke "as-binary-operands" (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-compare-operands" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operands" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-mixed-operands" (i32.const 0)) (i32.const -3)) (assert_return (invoke "as-mixed-operands" (i32.const 1)) (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value" (i32.const 1)) (i32.const 18)) (assert_return (invoke "break-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "break-multi-value" (i32.const 0)) (i32.const -18) (i32.const 18) (i64.const -18) ) (assert_return (invoke "break-multi-value" (i32.const 1)) (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "param" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 1)) (i32.const 3)) (assert_return (invoke "param-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "effects" (i32.const 1)) (i32.const -14)) (assert_return (invoke "effects" (i32.const 0)) (i32.const -6)) (assert_return (invoke "add64_u_with_carry" (i64.const 0) (i64.const 0) (i32.const 0)) (i64.const 0) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const 100) (i64.const 124) (i32.const 0)) (i64.const 224) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 0)) (i64.const -1) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const -1) (i32.const 0)) (i64.const -2) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 1)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 1)) (i64.const 1) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0) (i64.const 0)) (i64.const 0) ) (assert_return (invoke "add64_u_saturated" (i64.const 1230) (i64.const 23)) (i64.const 1253) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 0)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const -1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const -1) ) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (type $sig) (result i32) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (type $sig) (result i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (result i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (type $sig) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (param i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (if (result i32) (param i32) (i32.const 1) (then)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (i32.const 1)" " (if (param $x i32) (then (drop)) (else (drop)))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (then (drop)) (else (drop)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (result i32) (then)) (unreachable)" ")" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (i32.const 1) (if (type $sig) (i32.const 0) (then))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void (if (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void-else (if (i32.const 1) (then (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-void (if (i32.const 1) (then) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-void (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void-else (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-void (if (i32.const 1) (then) (else (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else (i32.const 2) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else (i32.const 0) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-nums-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-unreached-select (result i32) (if (result i64) (i32.const 0) (then (select (unreachable) (unreachable) (unreachable))) (else (i64.const 0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (i64.const 0)) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (select (unreachable) (unreachable) (unreachable))) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (nop)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (nop)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-condition-empty (if (then)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-block (i32.const 0) (block (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-loop (i32.const 0) (loop (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-then (i32.const 0) (i32.const 0) (if (then (if (then)))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br (i32.const 0) (block (br 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_if (i32.const 0) (block (br_if 0 (if(then)) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_table (i32.const 0) (block (br_table 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-return (return (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-select (select (if(then)) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-call (call 1 (if(then))) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-condition-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (if(then)) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.set (local i32) (local.set 0 (if(then))) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.tee (local i32) (local.tee 0 (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-condition-empty-in-global.set (global.set $x (if(then))) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-memory.grow (memory.grow (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-load (i32.load (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-condition-empty-in-store (i32.store (if(then)) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (if (param i32 f64) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (if (param i32 f64) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) if (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (if (param $x i32) (then)))") "unexpected token" ) (assert_malformed (module quote "(func i32.const 0 if end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l1 end $l2)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/spec/imports.wast ================================================ ;; Auxiliary module to import from (module (func (export "func")) (func (export "func-i32") (param i32)) (func (export "func-f32") (param f32)) (func (export "func->i32") (result i32) (i32.const 22)) (func (export "func->f32") (result f32) (f32.const 11)) (func (export "func-i32->i32") (param i32) (result i32) (local.get 0)) (func (export "func-i64->i64") (param i64) (result i64) (local.get 0)) (global (export "global-i32") i32 (i32.const 55)) (global (export "global-f32") f32 (f32.const 44)) (global (export "global-mut-i64") (mut i64) (i64.const 66)) (table (export "table-10-inf") 10 funcref) (table (export "table-10-20") 10 20 funcref) (memory (export "memory-2-inf") 2) ;; Multiple memories are not yet supported ;; (memory (export "memory-2-4") 2 4) ) (register "test") ;; Functions (module (type $func_i32 (func (param i32))) (type $func_i64 (func (param i64))) (type $func_f32 (func (param f32))) (type $func_f64 (func (param f64))) (import "spectest" "print_i32" (func (param i32))) ;; JavaScript can't handle i64 yet. ;; (func (import "spectest" "print_i64") (param i64)) (import "spectest" "print_i32" (func $print_i32 (param i32))) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "print_i64" (func $print_i64 (param i64))) (import "spectest" "print_f32" (func $print_f32 (param f32))) (import "spectest" "print_f64" (func $print_f64 (param f64))) (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32))) (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64))) (func $print_i32-2 (import "spectest" "print_i32") (param i32)) (func $print_f64-2 (import "spectest" "print_f64") (param f64)) (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) (func (export "p1") (import "spectest" "print_i32") (param i32)) (func $p (export "p2") (import "spectest" "print_i32") (param i32)) (func (export "p3") (export "p4") (import "spectest" "print_i32") (param i32)) (func (export "p5") (import "spectest" "print_i32") (type 0)) (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result)) (import "spectest" "print_i32" (func (type $forward))) (func (import "spectest" "print_i32") (type $forward)) (type $forward (func (param i32))) (table funcref (elem $print_i32 $print_f64)) (func (export "print32") (param $i i32) (local $x f32) (local.set $x (f32.convert_i32_s (local.get $i))) (call 0 (local.get $i)) (call $print_i32_f32 (i32.add (local.get $i) (i32.const 1)) (f32.const 42) ) (call $print_i32 (local.get $i)) (call $print_i32-2 (local.get $i)) (call $print_f32 (local.get $x)) (call_indirect (type $func_i32) (local.get $i) (i32.const 0)) ) (func (export "print64") (param $i i64) (local $x f64) (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i)))) ;; JavaScript can't handle i64 yet. ;; (call 1 (local.get $i)) (call $print_f64_f64 (f64.add (local.get $x) (f64.const 1)) (f64.const 53) ) ;; JavaScript can't handle i64 yet. ;; (call $print_i64 (local.get $i)) (call $print_f64 (local.get $x)) (call $print_f64-2 (local.get $x)) (call_indirect (type $func_f64) (local.get $x) (i32.const 1)) ) ) (assert_return (invoke "print32" (i32.const 13))) (assert_return (invoke "print64" (i64.const 24))) (assert_invalid (module (type (func (result i32))) (import "test" "func" (func (type 1))) ) "unknown type" ) ;; Export sharing name with import (module (import "spectest" "print_i32" (func $imported_print (param i32))) (func (export "print_i32") (param $i i32) (call $imported_print (local.get $i)) ) ) (assert_return (invoke "print_i32" (i32.const 13))) ;; Export sharing name with import (module (import "spectest" "print_i32" (func $imported_print (param i32))) (func (export "print_i32") (param $i i32) (param $j i32) (result i32) (i32.add (local.get $i) (local.get $j)) ) ) (assert_return (invoke "print_i32" (i32.const 5) (i32.const 11)) (i32.const 16)) (module (import "test" "func" (func))) (module (import "test" "func-i32" (func (param i32)))) (module (import "test" "func-f32" (func (param f32)))) (module (import "test" "func->i32" (func (result i32)))) (module (import "test" "func->f32" (func (result f32)))) (module (import "test" "func-i32->i32" (func (param i32) (result i32)))) (module (import "test" "func-i64->i64" (func (param i64) (result i64)))) (assert_unlinkable (module (import "test" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (func))) "incompatible import type" ) ;; Globals (module (import "spectest" "global_i32" (global i32)) (global (import "spectest" "global_i32") i32) (import "spectest" "global_i32" (global $x i32)) (global $y (import "spectest" "global_i32") i32) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "global_i64" (global i64)) (import "spectest" "global_f32" (global f32)) (import "spectest" "global_f64" (global f64)) (func (export "get-0") (result i32) (global.get 0)) (func (export "get-1") (result i32) (global.get 1)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i32) (global.get $y)) ) (assert_return (invoke "get-0") (i32.const 666)) (assert_return (invoke "get-1") (i32.const 666)) (assert_return (invoke "get-x") (i32.const 666)) (assert_return (invoke "get-y") (i32.const 666)) (module (import "test" "global-i32" (global i32))) (module (import "test" "global-f32" (global f32))) (module (import "test" "global-mut-i64" (global (mut i64)))) (assert_unlinkable (module (import "test" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "test" "global-i32" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global f32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global f64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global (mut i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global f64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global (mut f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut f64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (global i32))) "incompatible import type" ) ;; Tables (module (type (func (result i32))) (import "spectest" "table" (table $tab 10 20 funcref)) (elem (table $tab) (i32.const 1) func $f $g) (func (export "call") (param i32) (result i32) (call_indirect $tab (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (type (func (result i32))) (table $tab (import "spectest" "table") 10 20 funcref) (elem (table $tab) (i32.const 1) func $f $g) (func (export "call") (param i32) (result i32) (call_indirect $tab (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (import "spectest" "table" (table 0 funcref)) (import "spectest" "table" (table 0 funcref)) (table 10 funcref) (table 10 funcref) ) (module (import "test" "table-10-inf" (table 10 funcref))) (module (import "test" "table-10-inf" (table 5 funcref))) (module (import "test" "table-10-inf" (table 0 funcref))) (module (import "test" "table-10-20" (table 10 funcref))) (module (import "test" "table-10-20" (table 5 funcref))) (module (import "test" "table-10-20" (table 0 funcref))) (module (import "test" "table-10-20" (table 10 20 funcref))) (module (import "test" "table-10-20" (table 5 20 funcref))) (module (import "test" "table-10-20" (table 0 20 funcref))) (module (import "test" "table-10-20" (table 10 25 funcref))) (module (import "test" "table-10-20" (table 5 25 funcref))) (module (import "test" "table-10-20" (table 0 25 funcref))) (module (import "spectest" "table" (table 10 funcref))) (module (import "spectest" "table" (table 5 funcref))) (module (import "spectest" "table" (table 0 funcref))) (module (import "spectest" "table" (table 10 20 funcref))) (module (import "spectest" "table" (table 5 20 funcref))) (module (import "spectest" "table" (table 0 20 funcref))) (module (import "spectest" "table" (table 10 25 funcref))) (module (import "spectest" "table" (table 5 25 funcref))) (assert_unlinkable (module (import "test" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 10 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-20" (table 12 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-20" (table 10 18 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 10 15 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (table 10 funcref))) "incompatible import type" ) ;; Memories (module (import "spectest" "memory" (memory 1 2)) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (memory (import "spectest" "memory") 1 2) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (assert_invalid (module (import "" "" (memory 1)) (import "" "" (memory 1))) "multiple memories" ) (assert_invalid (module (import "" "" (memory 1)) (memory 0)) "multiple memories" ) (assert_invalid (module (memory 0) (memory 0)) "multiple memories" ) (module (import "test" "memory-2-inf" (memory 2))) (module (import "test" "memory-2-inf" (memory 1))) (module (import "test" "memory-2-inf" (memory 0))) (module (import "spectest" "memory" (memory 1))) (module (import "spectest" "memory" (memory 0))) (module (import "spectest" "memory" (memory 1 2))) (module (import "spectest" "memory" (memory 0 2))) (module (import "spectest" "memory" (memory 1 3))) (module (import "spectest" "memory" (memory 0 3))) (assert_unlinkable (module (import "test" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 3))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 2 3))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (module (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (module $Mgm (memory (export "memory") 1) ;; initial size is 1 (func (export "grow") (result i32) (memory.grow (i32.const 1))) ) (register "grown-memory" $Mgm) (assert_return (invoke $Mgm "grow") (i32.const 1)) ;; now size is 2 (module $Mgim1 ;; imported memory limits should match, because external memory size is 2 now (memory (export "memory") (import "grown-memory" "memory") 2) (func (export "grow") (result i32) (memory.grow (i32.const 1))) ) (register "grown-imported-memory" $Mgim1) (assert_return (invoke $Mgim1 "grow") (i32.const 2)) ;; now size is 3 (module $Mgim2 ;; imported memory limits should match, because external memory size is 3 now (import "grown-imported-memory" "memory" (memory 3)) (func (export "size") (result i32) (memory.size)) ) (assert_return (invoke $Mgim2 "size") (i32.const 3)) ;; Syntax errors (assert_malformed (module quote "(func) (import \"\" \"\" (func))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (global i64))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (table 0 funcref))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (memory 0))") "import after function" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") "import after global" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (func))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (global i32))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))") "import after table" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (func))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (global i32))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") "import after memory" ) ;; This module is required to validate, regardless of whether it can be ;; linked. Overloading is not possible in wasm itself, but it is possible ;; in modules from which wasm can import. (module) (register "not wasm") (assert_unlinkable (module (import "not wasm" "overloaded" (func)) (import "not wasm" "overloaded" (func (param i32))) (import "not wasm" "overloaded" (func (param i32 i32))) (import "not wasm" "overloaded" (func (param i64))) (import "not wasm" "overloaded" (func (param f32))) (import "not wasm" "overloaded" (func (param f64))) (import "not wasm" "overloaded" (func (result i32))) (import "not wasm" "overloaded" (func (result i64))) (import "not wasm" "overloaded" (func (result f32))) (import "not wasm" "overloaded" (func (result f64))) (import "not wasm" "overloaded" (global i32)) (import "not wasm" "overloaded" (global i64)) (import "not wasm" "overloaded" (global f32)) (import "not wasm" "overloaded" (global f64)) (import "not wasm" "overloaded" (table 0 funcref)) (import "not wasm" "overloaded" (memory 0)) ) "unknown import" ) ================================================ FILE: Test/WebAssembly/spec/inline-module.wast ================================================ (func) (memory 0) (func (export "f")) ================================================ FILE: Test/WebAssembly/spec/int_exprs.wast ================================================ ;; Test interesting integer "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x+1>n is not folded to x. (module (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) (i32.shr_s (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) (i32.shr_u (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) (i64.shr_s (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) (i64.shr_u (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) ) (assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) ;; Test that x>>n<?,./ ") (result i32) (i32.const 6)) ;; Test that we can use names that have special meaning in JS. (func (export "NaN") (result i32) (i32.const 7)) (func (export "Infinity") (result i32) (i32.const 8)) (func (export "if") (result i32) (i32.const 9)) ;; Test that we can use common libc names without conflict. (func (export "malloc") (result i32) (i32.const 10)) ;; Test that we can use some libc hidden names without conflict. (func (export "_malloc") (result i32) (i32.const 11)) (func (export "__malloc") (result i32) (i32.const 12)) ;; Test that names are case-sensitive. (func (export "a") (result i32) (i32.const 13)) (func (export "A") (result i32) (i32.const 14)) ;; Test that UTF-8 BOM code points can appear in identifiers. (func (export "") (result i32) (i32.const 15)) ;; Test that Unicode normalization is not applied. These function names ;; contain different codepoints which normalize to the same thing under ;; NFC or NFD. (func (export "Å") (result i32) (i32.const 16)) (func (export "Å") (result i32) (i32.const 17)) (func (export "Å") (result i32) (i32.const 18)) ;; Test that Unicode compatibility normalization is not applied. These ;; function names contain different codepoints which normalize to the ;; same thing under NFKC or NFKD. (func (export "ffi") (result i32) (i32.const 19)) (func (export "ffi") (result i32) (i32.const 20)) (func (export "ffi") (result i32) (i32.const 21)) ;; Test the C0 control codes. (func (export "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (result i32) (i32.const 22)) (func (export "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (result i32) (i32.const 23)) ;; Test miscellaneous control codes. (func (export " \7f") (result i32) (i32.const 24)) ;; Test the C1 control codes. (func (export "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (result i32) (i32.const 25)) (func (export "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (result i32) (i32.const 26)) ;; Test the Unicode Specials. (func (export "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (result i32) (i32.const 27)) (func (export "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (result i32) (i32.const 28)) ;; Test that the control pictures are distinct from the control codes they ;; depict. These correspond to the C0 and miscellaneous control code tests ;; above. (func (export "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (result i32) (i32.const 29)) (func (export "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (result i32) (i32.const 30)) (func (export "␠␡") (result i32) (i32.const 31)) ;; Test the Unicode Specials in non-escaped form (excluding U+FFFE and ;; U+FFFF, so that generic tools don't detect this file as non-UTF-8). (func (export "￰￱￲￳￴￵￶￷￸�") (result i32) (i32.const 32)) ;; Test a bare ZWJ code point. (func (export "‍") (result i32) (i32.const 33)) ;; Test a bare ZWNJ code point. (func (export "‌") (result i32) (i32.const 34)) ;; Test various bare joiner code points. (func (export "͏") (result i32) (i32.const 35)) (func (export "⁠") (result i32) (i32.const 36)) (func (export "⵿") (result i32) (i32.const 37)) (func (export "𑁿") (result i32) (i32.const 38)) (func (export "᠎") (result i32) (i32.const 39)) ;; Test various interesting code points: reverse BOM, zero-width space, ;; no-break space, soft hyphen, word joiner, ogham space mark, ;; right-to-left override, left-to-right override. (func (export "￯​ ­⁠ ‮‭") (result i32) (i32.const 40)) ;; Test more interesting code points: left-to-right mark, right-to-left mark, ;; non-breaking hyphen, line separator, paragraph separator, ;; left-to-right embedding, right-to-left embedding, ;; pop directional formatting, narrow no-break space, left-to-right isolate, ;; right-to-left isolate, first strong isolate, pop directional isolate. (func (export "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (result i32) (i32.const 41)) ;; Test some deprecated code points: inhibit symmetric swapping, ;; activate symmetric swapping, inhibit arabic form shaping, ;; activate arabic form shaping, national digit shapes, nominal digit shapes. (func (export "") (result i32) (i32.const 42)) ;; Test "invisible" operator code points. (func (export "⁡⁢⁣⁤") (result i32) (i32.const 43)) ;; Test that code points outside the BMP are supported. (func (export "𐀀󟿿􏿿") (result i32) (i32.const 44)) ;; Test that WebAssembly implementations cope in the presence of Zalgo. (func (export "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (result i32) (i32.const 45)) ;; Test Hangul filler code points. (func (export "ᅟᅠㅤᅠ") (result i32) (i32.const 46)) ;; Test variation selectors (which are also ID_Continue code points). (func (export "︀") (result i32) (i32.const 47)) (func (export "︄") (result i32) (i32.const 48)) (func (export "󠄀") (result i32) (i32.const 49)) (func (export "󠇯") (result i32) (i32.const 50)) ;; Test an uncombined combining code point. (func (export "̈") (result i32) (i32.const 51)) ;; Test that numerous different present and historical representations of the ;; "newline" concept are distinct. Tests largely inspired by: ;; https://en.wikipedia.org/wiki/Newline#Representations ;; https://en.wikipedia.org/wiki/Newline#Unicode and ;; https://en.wikipedia.org/wiki/Newline#Reverse_and_partial_line_feeds (func (export "\0a") (result i32) (i32.const 52)) (func (export "␤") (result i32) (i32.const 53)) (func (export "
") (result i32) (i32.const 54)) (func (export "\0d") (result i32) (i32.const 55)) (func (export "\0d\0a") (result i32) (i32.const 56)) (func (export "\0a\0d") (result i32) (i32.const 57)) (func (export "\1e") (result i32) (i32.const 58)) (func (export "\0b") (result i32) (i32.const 59)) (func (export "\0c") (result i32) (i32.const 60)) (func (export "\c2\85") (result i32) (i32.const 61)) (func (export "
") (result i32) (i32.const 62)) (func (export "…") (result i32) (i32.const 63)) (func (export "⏎") (result i32) (i32.const 64)) (func (export "\c2\8b") (result i32) (i32.const 65)) (func (export "\c2\8c") (result i32) (i32.const 66)) (func (export "\c2\8d") (result i32) (i32.const 67)) (func (export "↵") (result i32) (i32.const 68)) (func (export "↩") (result i32) (i32.const 69)) (func (export "⌤") (result i32) (i32.const 70)) (func (export "⤶") (result i32) (i32.const 71)) (func (export "↲") (result i32) (i32.const 72)) (func (export "⮨") (result i32) (i32.const 73)) (func (export "⮰") (result i32) (i32.const 74)) ;; Test that non-characters are not replaced by the replacement character. (func (export "�") (result i32) (i32.const 75)) (func (export "\ef\b7\90") (result i32) (i32.const 76)) (func (export "\ef\b7\91") (result i32) (i32.const 77)) (func (export "\ef\b7\92") (result i32) (i32.const 78)) (func (export "\ef\b7\93") (result i32) (i32.const 79)) (func (export "\ef\b7\94") (result i32) (i32.const 80)) (func (export "\ef\b7\95") (result i32) (i32.const 81)) (func (export "\ef\b7\96") (result i32) (i32.const 82)) (func (export "\ef\b7\97") (result i32) (i32.const 83)) (func (export "\ef\b7\98") (result i32) (i32.const 84)) (func (export "\ef\b7\99") (result i32) (i32.const 85)) (func (export "\ef\b7\9a") (result i32) (i32.const 86)) (func (export "\ef\b7\9b") (result i32) (i32.const 87)) (func (export "\ef\b7\9c") (result i32) (i32.const 88)) (func (export "\ef\b7\9d") (result i32) (i32.const 89)) (func (export "\ef\b7\9e") (result i32) (i32.const 90)) (func (export "\ef\b7\9f") (result i32) (i32.const 91)) (func (export "\ef\b7\a0") (result i32) (i32.const 92)) (func (export "\ef\b7\a1") (result i32) (i32.const 93)) (func (export "\ef\b7\a2") (result i32) (i32.const 94)) (func (export "\ef\b7\a3") (result i32) (i32.const 95)) (func (export "\ef\b7\a4") (result i32) (i32.const 96)) (func (export "\ef\b7\a5") (result i32) (i32.const 97)) (func (export "\ef\b7\a6") (result i32) (i32.const 98)) (func (export "\ef\b7\a7") (result i32) (i32.const 99)) (func (export "\ef\b7\a8") (result i32) (i32.const 100)) (func (export "\ef\b7\a9") (result i32) (i32.const 101)) (func (export "\ef\b7\aa") (result i32) (i32.const 102)) (func (export "\ef\b7\ab") (result i32) (i32.const 103)) (func (export "\ef\b7\ac") (result i32) (i32.const 104)) (func (export "\ef\b7\ad") (result i32) (i32.const 105)) (func (export "\ef\b7\ae") (result i32) (i32.const 106)) (func (export "\ef\b7\af") (result i32) (i32.const 107)) (func (export "\ef\bf\be") (result i32) (i32.const 108)) (func (export "\ef\bf\bf") (result i32) (i32.const 109)) (func (export "\f0\9f\bf\be") (result i32) (i32.const 110)) (func (export "\f0\9f\bf\bf") (result i32) (i32.const 111)) (func (export "\f0\af\bf\be") (result i32) (i32.const 112)) (func (export "\f0\af\bf\bf") (result i32) (i32.const 113)) (func (export "\f0\bf\bf\be") (result i32) (i32.const 114)) (func (export "\f0\bf\bf\bf") (result i32) (i32.const 115)) (func (export "\f1\8f\bf\be") (result i32) (i32.const 116)) (func (export "\f1\8f\bf\bf") (result i32) (i32.const 117)) (func (export "\f1\9f\bf\be") (result i32) (i32.const 118)) (func (export "\f1\9f\bf\bf") (result i32) (i32.const 119)) (func (export "\f1\af\bf\be") (result i32) (i32.const 120)) (func (export "\f1\af\bf\bf") (result i32) (i32.const 121)) (func (export "\f1\bf\bf\be") (result i32) (i32.const 122)) (func (export "\f1\bf\bf\bf") (result i32) (i32.const 123)) (func (export "\f2\8f\bf\be") (result i32) (i32.const 124)) (func (export "\f2\8f\bf\bf") (result i32) (i32.const 125)) (func (export "\f2\9f\bf\be") (result i32) (i32.const 126)) (func (export "\f2\9f\bf\bf") (result i32) (i32.const 127)) (func (export "\f2\af\bf\be") (result i32) (i32.const 128)) (func (export "\f2\af\bf\bf") (result i32) (i32.const 129)) (func (export "\f2\bf\bf\be") (result i32) (i32.const 130)) (func (export "\f2\bf\bf\bf") (result i32) (i32.const 131)) (func (export "\f3\8f\bf\be") (result i32) (i32.const 132)) (func (export "\f3\8f\bf\bf") (result i32) (i32.const 133)) (func (export "\f3\9f\bf\be") (result i32) (i32.const 134)) (func (export "\f3\9f\bf\bf") (result i32) (i32.const 135)) (func (export "\f3\af\bf\be") (result i32) (i32.const 136)) (func (export "\f3\af\bf\bf") (result i32) (i32.const 137)) (func (export "\f3\bf\bf\be") (result i32) (i32.const 138)) (func (export "\f3\bf\bf\bf") (result i32) (i32.const 139)) (func (export "\f4\8f\bf\be") (result i32) (i32.const 140)) (func (export "\f4\8f\bf\bf") (result i32) (i32.const 141)) ;; Test an interrobang with combining diacritical marks above. ;; https://xkcd.com/1209/ (func (export "̈‽̈̉") (result i32) (i32.const 142)) ;; Test that RLM/LRM don't change the logical byte order. (func (export "abc") (result i32) (i32.const 143)) (func (export "‭abc") (result i32) (i32.const 144)) (func (export "‮cba") (result i32) (i32.const 145)) (func (export "‭abc‮") (result i32) (i32.const 146)) (func (export "‮cba‭") (result i32) (i32.const 147)) ;; Test that Unicode font variations are preserved. (func (export "𝑨") (result i32) (i32.const 148)) (func (export "𝐴") (result i32) (i32.const 149)) (func (export "𝘈") (result i32) (i32.const 150)) (func (export "𝘼") (result i32) (i32.const 151)) (func (export "𝐀") (result i32) (i32.const 152)) (func (export "𝓐") (result i32) (i32.const 153)) (func (export "𝕬") (result i32) (i32.const 154)) (func (export "𝗔") (result i32) (i32.const 155)) (func (export "𝒜") (result i32) (i32.const 156)) (func (export "𝔄") (result i32) (i32.const 157)) (func (export "𝔸") (result i32) (i32.const 158)) (func (export "𝖠") (result i32) (i32.const 159)) (func (export "𝙰") (result i32) (i32.const 160)) (func (export "ᴀ") (result i32) (i32.const 161)) ;; Test that various additional letter variations are preserved. ;; (U+0040, U+0061, U+0041, U+00C5, U+0041 U+030A, U+212B, and the font ;; variations are covered above.) (func (export "ᴬ") (result i32) (i32.const 162)) (func (export "Ⓐ") (result i32) (i32.const 163)) (func (export "A") (result i32) (i32.const 164)) (func (export "🄐") (result i32) (i32.const 165)) (func (export "🄰") (result i32) (i32.const 166)) (func (export "󠁁") (result i32) (i32.const 167)) (func (export "U+0041") (result i32) (i32.const 168)) (func (export "A​") (result i32) (i32.const 169)) (func (export "А") (result i32) (i32.const 170)) (func (export "Ꙗ") (result i32) (i32.const 171)) (func (export "ⷼ") (result i32) (i32.const 172)) (func (export "ⷶ") (result i32) (i32.const 173)) (func (export "Ɐ") (result i32) (i32.const 174)) (func (export "🅐") (result i32) (i32.const 175)) (func (export "🅰") (result i32) (i32.const 176)) (func (export "Ⱝ") (result i32) (i32.const 177)) (func (export "𐐂") (result i32) (i32.const 178)) (func (export "𐐈") (result i32) (i32.const 179)) (func (export "𐒰") (result i32) (i32.const 180)) (func (export "À") (result i32) (i32.const 181)) (func (export "Á") (result i32) (i32.const 182)) (func (export "Â") (result i32) (i32.const 183)) (func (export "Ã") (result i32) (i32.const 184)) (func (export "Ä") (result i32) (i32.const 185)) (func (export "Ā") (result i32) (i32.const 186)) (func (export "Ă") (result i32) (i32.const 187)) (func (export "Ą") (result i32) (i32.const 188)) (func (export "Ǎ") (result i32) (i32.const 189)) (func (export "Ǟ") (result i32) (i32.const 190)) (func (export "Ǡ") (result i32) (i32.const 191)) (func (export "Ǻ") (result i32) (i32.const 192)) (func (export "Ȁ") (result i32) (i32.const 193)) (func (export "Ȃ") (result i32) (i32.const 194)) (func (export "Ȧ") (result i32) (i32.const 195)) (func (export "Ⱥ") (result i32) (i32.const 196)) (func (export "Ӑ") (result i32) (i32.const 197)) (func (export "Ӓ") (result i32) (i32.const 198)) (func (export "ߊ") (result i32) (i32.const 199)) (func (export "ࠡ") (result i32) (i32.const 200)) (func (export "ࠢ") (result i32) (i32.const 201)) (func (export "ࠣ") (result i32) (i32.const 202)) (func (export "ࠤ") (result i32) (i32.const 203)) (func (export "ࠥ") (result i32) (i32.const 204)) (func (export "ऄ") (result i32) (i32.const 205)) (func (export "अ") (result i32) (i32.const 206)) (func (export "ॲ") (result i32) (i32.const 207)) (func (export "অ") (result i32) (i32.const 208)) (func (export "ਅ") (result i32) (i32.const 209)) (func (export "અ") (result i32) (i32.const 210)) (func (export "ଅ") (result i32) (i32.const 211)) (func (export "அ") (result i32) (i32.const 212)) (func (export "అ") (result i32) (i32.const 213)) (func (export "ಅ") (result i32) (i32.const 214)) (func (export "അ") (result i32) (i32.const 215)) (func (export "ะ") (result i32) (i32.const 216)) (func (export "ະ") (result i32) (i32.const 217)) (func (export "༁") (result i32) (i32.const 218)) (func (export "ཨ") (result i32) (i32.const 219)) (func (export "ྸ") (result i32) (i32.const 220)) (func (export "အ") (result i32) (i32.const 221)) (func (export "ဢ") (result i32) (i32.const 222)) (func (export "ႜ") (result i32) (i32.const 223)) (func (export "ᅡ") (result i32) (i32.const 224)) (func (export "አ") (result i32) (i32.const 225)) (func (export "ዐ") (result i32) (i32.const 226)) (func (export "Ꭰ") (result i32) (i32.const 227)) (func (export "ᐊ") (result i32) (i32.const 228)) (func (export "ᖳ") (result i32) (i32.const 229)) (func (export "ᚨ") (result i32) (i32.const 230)) (func (export "ᚪ") (result i32) (i32.const 231)) (func (export "ᛆ") (result i32) (i32.const 232)) (func (export "ᜀ") (result i32) (i32.const 233)) (func (export "ᜠ") (result i32) (i32.const 234)) (func (export "ᝀ") (result i32) (i32.const 235)) (func (export "ᝠ") (result i32) (i32.const 236)) (func (export "ᠠ") (result i32) (i32.const 237)) (func (export "ᢇ") (result i32) (i32.const 238)) (func (export "ᤠ") (result i32) (i32.const 239)) (func (export "ᥣ") (result i32) (i32.const 240)) (func (export "ᨕ") (result i32) (i32.const 241)) (func (export "ᩋ") (result i32) (i32.const 242)) (func (export "ᩡ") (result i32) (i32.const 243)) (func (export "ᮃ") (result i32) (i32.const 244)) (func (export "ᯀ") (result i32) (i32.const 245)) (func (export "ᯁ") (result i32) (i32.const 246)) (func (export "ᰣ") (result i32) (i32.const 247)) (func (export "Ḁ") (result i32) (i32.const 248)) (func (export "Ạ") (result i32) (i32.const 249)) (func (export "Ả") (result i32) (i32.const 250)) (func (export "Ấ") (result i32) (i32.const 251)) (func (export "Ầ") (result i32) (i32.const 252)) (func (export "Ẩ") (result i32) (i32.const 253)) (func (export "Ẫ") (result i32) (i32.const 254)) (func (export "Ậ") (result i32) (i32.const 255)) (func (export "Ắ") (result i32) (i32.const 256)) (func (export "Ằ") (result i32) (i32.const 257)) (func (export "Ẳ") (result i32) (i32.const 258)) (func (export "Ẵ") (result i32) (i32.const 259)) (func (export "Ặ") (result i32) (i32.const 260)) (func (export "あ") (result i32) (i32.const 261)) (func (export "ア") (result i32) (i32.const 262)) (func (export "ㄚ") (result i32) (i32.const 263)) (func (export "ㅏ") (result i32) (i32.const 264)) (func (export "㈎") (result i32) (i32.const 265)) (func (export "㈏") (result i32) (i32.const 266)) (func (export "㈐") (result i32) (i32.const 267)) (func (export "㈑") (result i32) (i32.const 268)) (func (export "㈒") (result i32) (i32.const 269)) (func (export "㈓") (result i32) (i32.const 270)) (func (export "㈔") (result i32) (i32.const 271)) (func (export "㈕") (result i32) (i32.const 272)) (func (export "㈖") (result i32) (i32.const 273)) (func (export "㈗") (result i32) (i32.const 274)) (func (export "㈘") (result i32) (i32.const 275)) (func (export "㈙") (result i32) (i32.const 276)) (func (export "㈚") (result i32) (i32.const 277)) (func (export "㈛") (result i32) (i32.const 278)) (func (export "㉮") (result i32) (i32.const 279)) (func (export "㉯") (result i32) (i32.const 280)) (func (export "㉰") (result i32) (i32.const 281)) (func (export "㉱") (result i32) (i32.const 282)) (func (export "㉲") (result i32) (i32.const 283)) (func (export "㉳") (result i32) (i32.const 284)) (func (export "㉴") (result i32) (i32.const 285)) (func (export "㉵") (result i32) (i32.const 286)) (func (export "㉶") (result i32) (i32.const 287)) (func (export "㉷") (result i32) (i32.const 288)) (func (export "㉸") (result i32) (i32.const 289)) (func (export "㉹") (result i32) (i32.const 290)) (func (export "㉺") (result i32) (i32.const 291)) (func (export "㉻") (result i32) (i32.const 292)) (func (export "㋐") (result i32) (i32.const 293)) (func (export "ꀊ") (result i32) (i32.const 294)) (func (export "ꓮ") (result i32) (i32.const 295)) (func (export "ꕉ") (result i32) (i32.const 296)) (func (export "ꚠ") (result i32) (i32.const 297)) (func (export "ꠀ") (result i32) (i32.const 298)) (func (export "ꠣ") (result i32) (i32.const 299)) (func (export "ꡝ") (result i32) (i32.const 300)) (func (export "ꢂ") (result i32) (i32.const 301)) (func (export "꣪") (result i32) (i32.const 302)) (func (export "ꤢ") (result i32) (i32.const 303)) (func (export "ꥆ") (result i32) (i32.const 304)) (func (export "ꦄ") (result i32) (i32.const 305)) (func (export "ꨀ") (result i32) (i32.const 306)) (func (export "ア") (result i32) (i32.const 307)) (func (export "ᅡ") (result i32) (i32.const 308)) (func (export "𐀀") (result i32) (i32.const 309)) (func (export "𐊀") (result i32) (i32.const 310)) (func (export "𐊠") (result i32) (i32.const 311)) (func (export "𐌀") (result i32) (i32.const 312)) (func (export "𐎠") (result i32) (i32.const 313)) (func (export "𐒖") (result i32) (i32.const 314)) (func (export "𐔀") (result i32) (i32.const 315)) (func (export "𐝀") (result i32) (i32.const 316)) (func (export "𐠀") (result i32) (i32.const 317)) (func (export "𐤠") (result i32) (i32.const 318)) (func (export "𐦀") (result i32) (i32.const 319)) (func (export "𐦠") (result i32) (i32.const 320)) (func (export "𐨀") (result i32) (i32.const 321)) (func (export "𐬀") (result i32) (i32.const 322)) (func (export "𐰀") (result i32) (i32.const 323)) (func (export "𐰁") (result i32) (i32.const 324)) (func (export "𐲀") (result i32) (i32.const 325)) (func (export "𑀅") (result i32) (i32.const 326)) (func (export "𑂃") (result i32) (i32.const 327)) (func (export "𑄧") (result i32) (i32.const 328)) (func (export "𑅐") (result i32) (i32.const 329)) (func (export "𑆃") (result i32) (i32.const 330)) (func (export "𑈀") (result i32) (i32.const 331)) (func (export "𑊀") (result i32) (i32.const 332)) (func (export "𑊰") (result i32) (i32.const 333)) (func (export "𑌅") (result i32) (i32.const 334)) (func (export "𑍰") (result i32) (i32.const 335)) (func (export "𑐀") (result i32) (i32.const 336)) (func (export "𑒁") (result i32) (i32.const 337)) (func (export "𑖀") (result i32) (i32.const 338)) (func (export "𑘀") (result i32) (i32.const 339)) (func (export "𑚀") (result i32) (i32.const 340)) (func (export "𑜒") (result i32) (i32.const 341)) (func (export "𑜠") (result i32) (i32.const 342)) (func (export "𑢡") (result i32) (i32.const 343)) (func (export "𑫕") (result i32) (i32.const 344)) (func (export "𑰀") (result i32) (i32.const 345)) (func (export "𑲏") (result i32) (i32.const 346)) (func (export "𑲯") (result i32) (i32.const 347)) (func (export "𒀀") (result i32) (i32.const 348)) (func (export "𖧕") (result i32) (i32.const 349)) (func (export "𖩆") (result i32) (i32.const 350)) (func (export "𖫧") (result i32) (i32.const 351)) (func (export "𖽔") (result i32) (i32.const 352)) (func (export "𛱁") (result i32) (i32.const 353)) (func (export "𛱤") (result i32) (i32.const 354)) (func (export "𞠣") (result i32) (i32.const 355)) (func (export "🇦") (result i32) (i32.const 356)) (func (export "Ɑ") (result i32) (i32.const 357)) (func (export "Λ") (result i32) (i32.const 358)) (func (export "Ɒ") (result i32) (i32.const 359)) (func (export "ª") (result i32) (i32.const 360)) (func (export "∀") (result i32) (i32.const 361)) (func (export "₳") (result i32) (i32.const 362)) (func (export "𐤀") (result i32) (i32.const 363)) (func (export "Ⲁ") (result i32) (i32.const 364)) (func (export "𐌰") (result i32) (i32.const 365)) (func (export "Ά") (result i32) (i32.const 366)) (func (export "Α") (result i32) (i32.const 367)) (func (export "Ἀ") (result i32) (i32.const 368)) (func (export "Ἁ") (result i32) (i32.const 369)) (func (export "Ἂ") (result i32) (i32.const 370)) (func (export "Ἃ") (result i32) (i32.const 371)) (func (export "Ἄ") (result i32) (i32.const 372)) (func (export "Ἅ") (result i32) (i32.const 373)) (func (export "Ἆ") (result i32) (i32.const 374)) (func (export "Ἇ") (result i32) (i32.const 375)) (func (export "ᾈ") (result i32) (i32.const 376)) (func (export "ᾉ") (result i32) (i32.const 377)) (func (export "ᾊ") (result i32) (i32.const 378)) (func (export "ᾋ") (result i32) (i32.const 379)) (func (export "ᾌ") (result i32) (i32.const 380)) (func (export "ᾍ") (result i32) (i32.const 381)) (func (export "ᾎ") (result i32) (i32.const 382)) (func (export "ᾏ") (result i32) (i32.const 383)) (func (export "Ᾰ") (result i32) (i32.const 384)) (func (export "Ᾱ") (result i32) (i32.const 385)) (func (export "Ὰ") (result i32) (i32.const 386)) (func (export "Ά") (result i32) (i32.const 387)) (func (export "ᾼ") (result i32) (i32.const 388)) (func (export "𝚨") (result i32) (i32.const 389)) (func (export "𝛢") (result i32) (i32.const 390)) (func (export "𝜜") (result i32) (i32.const 391)) (func (export "𝝖") (result i32) (i32.const 392)) (func (export "𝞐") (result i32) (i32.const 393)) (func (export "⍶") (result i32) (i32.const 394)) (func (export "⍺") (result i32) (i32.const 395)) (func (export "⩜") (result i32) (i32.const 396)) (func (export "ᗅ") (result i32) (i32.const 397)) (func (export "Ꭺ") (result i32) (i32.const 398)) ;; Test unmatched "closing" and "opening" code points. (func (export ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (result i32) (i32.const 399)) (func (export "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (result i32) (i32.const 400)) (func (export "𝪋𝪤") (result i32) (i32.const 401)) (func (export "𝪋") (result i32) (i32.const 402)) ;; Test that Unicode fraction normalization is not applied. (func (export "½") (result i32) (i32.const 403)) (func (export "1⁄2") (result i32) (i32.const 404)) (func (export "1/2") (result i32) (i32.const 405)) (func (export "୳") (result i32) (i32.const 406)) (func (export "൴") (result i32) (i32.const 407)) (func (export "⳽") (result i32) (i32.const 408)) (func (export "꠱") (result i32) (i32.const 409)) (func (export "𐅁") (result i32) (i32.const 410)) (func (export "𐅵") (result i32) (i32.const 411)) (func (export "𐅶") (result i32) (i32.const 412)) (func (export "𐦽") (result i32) (i32.const 413)) (func (export "𐹻") (result i32) (i32.const 414)) ;; Test a full-width quote. (func (export """) (result i32) (i32.const 415)) ;; Test that different present and historical representations of the "delete" ;; concept are distinct. (func (export "\7f") (result i32) (i32.const 416)) (func (export "\08") (result i32) (i32.const 417)) (func (export "⌫") (result i32) (i32.const 418)) (func (export "⌦") (result i32) (i32.const 419)) (func (export "␈") (result i32) (i32.const 420)) (func (export "␡") (result i32) (i32.const 421)) (func (export "᷻") (result i32) (i32.const 422)) (func (export "\0f") (result i32) (i32.const 423)) (func (export "←") (result i32) (i32.const 424)) (func (export "⌧") (result i32) (i32.const 425)) (func (export "⍒") (result i32) (i32.const 426)) (func (export "⍔") (result i32) (i32.const 427)) (func (export "⍢") (result i32) (i32.const 428)) (func (export "⍫") (result i32) (i32.const 429)) ;; Test that different representations of the "substitute" concept are ;; distinct. (U+FFFD is covered above.) (func (export "\1a") (result i32) (i32.const 430)) (func (export "␦") (result i32) (i32.const 431)) (func (export "␚") (result i32) (i32.const 432)) (func (export "") (result i32) (i32.const 433)) (func (export "?") (result i32) (i32.const 434)) (func (export "¿") (result i32) (i32.const 435)) (func (export "᥅") (result i32) (i32.const 436)) (func (export ";") (result i32) (i32.const 437)) (func (export "՞") (result i32) (i32.const 438)) (func (export "؟") (result i32) (i32.const 439)) (func (export "፧") (result i32) (i32.const 440)) (func (export "⁇") (result i32) (i32.const 441)) (func (export "⍰") (result i32) (i32.const 442)) (func (export "❓") (result i32) (i32.const 443)) (func (export "❔") (result i32) (i32.const 444)) (func (export "⳺") (result i32) (i32.const 445)) (func (export "⳻") (result i32) (i32.const 446)) (func (export "⸮") (result i32) (i32.const 447)) (func (export "㉄") (result i32) (i32.const 448)) (func (export "꘏") (result i32) (i32.const 449)) (func (export "꛷") (result i32) (i32.const 450)) (func (export "︖") (result i32) (i32.const 451)) (func (export "﹖") (result i32) (i32.const 452)) (func (export "?") (result i32) (i32.const 453)) (func (export "𑅃") (result i32) (i32.const 454)) (func (export "𞥟") (result i32) (i32.const 455)) (func (export "󠀿") (result i32) (i32.const 456)) (func (export "𖡄") (result i32) (i32.const 457)) (func (export "⯑") (result i32) (i32.const 458)) ;; Test that different present and historical representations of the ;; "paragraph" concept are distinct. (U+2029 is covered above). (func (export "¶") (result i32) (i32.const 459)) (func (export "⁋") (result i32) (i32.const 460)) (func (export "܀") (result i32) (i32.const 461)) (func (export "჻") (result i32) (i32.const 462)) (func (export "፨") (result i32) (i32.const 463)) (func (export "〷") (result i32) (i32.const 464)) (func (export "❡") (result i32) (i32.const 465)) (func (export "⸏") (result i32) (i32.const 466)) (func (export "⸐") (result i32) (i32.const 467)) (func (export "⸑") (result i32) (i32.const 468)) (func (export "⸎") (result i32) (i32.const 469)) (func (export "\14") (result i32) (i32.const 470)) ;; ¶ in CP437 (func (export "☙") (result i32) (i32.const 471)) (func (export "⸿") (result i32) (i32.const 472)) (func (export "〇") (result i32) (i32.const 473)) (func (export "๛") (result i32) (i32.const 474)) ;; Test an unusual character. (func (export "ꙮ") (result i32) (i32.const 475)) ;; Test the three characters whose normalization forms under NFC, NFD, NFKC, ;; and NFKD are all different. ;; http://unicode.org/faq/normalization.html#6 (func (export "ϓ") (result i32) (i32.const 476)) (func (export "ϔ") (result i32) (i32.const 477)) (func (export "ẛ") (result i32) (i32.const 478)) ) (assert_return (invoke "") (i32.const 0)) (assert_return (invoke "0") (i32.const 1)) (assert_return (invoke "-0") (i32.const 2)) (assert_return (invoke "_") (i32.const 3)) (assert_return (invoke "$") (i32.const 4)) (assert_return (invoke "@") (i32.const 5)) (assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (i32.const 6)) (assert_return (invoke "NaN") (i32.const 7)) (assert_return (invoke "Infinity") (i32.const 8)) (assert_return (invoke "if") (i32.const 9)) (assert_return (invoke "malloc") (i32.const 10)) (assert_return (invoke "_malloc") (i32.const 11)) (assert_return (invoke "__malloc") (i32.const 12)) (assert_return (invoke "a") (i32.const 13)) (assert_return (invoke "A") (i32.const 14)) (assert_return (invoke "") (i32.const 15)) (assert_return (invoke "Å") (i32.const 16)) (assert_return (invoke "Å") (i32.const 17)) (assert_return (invoke "Å") (i32.const 18)) (assert_return (invoke "ffi") (i32.const 19)) (assert_return (invoke "ffi") (i32.const 20)) (assert_return (invoke "ffi") (i32.const 21)) (assert_return (invoke "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (i32.const 22)) (assert_return (invoke "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (i32.const 23)) (assert_return (invoke " \7f") (i32.const 24)) (assert_return (invoke "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (i32.const 25)) (assert_return (invoke "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (i32.const 26)) (assert_return (invoke "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (i32.const 27)) (assert_return (invoke "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (i32.const 28)) (assert_return (invoke "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (i32.const 29)) (assert_return (invoke "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (i32.const 30)) (assert_return (invoke "␠␡") (i32.const 31)) (assert_return (invoke "￰￱￲￳￴￵￶￷￸�") (i32.const 32)) (assert_return (invoke "‍") (i32.const 33)) (assert_return (invoke "‌") (i32.const 34)) (assert_return (invoke "͏") (i32.const 35)) (assert_return (invoke "⁠") (i32.const 36)) (assert_return (invoke "⵿") (i32.const 37)) (assert_return (invoke "𑁿") (i32.const 38)) (assert_return (invoke "᠎") (i32.const 39)) (assert_return (invoke "￯​ ­⁠ ‮‭") (i32.const 40)) (assert_return (invoke "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (i32.const 41)) (assert_return (invoke "") (i32.const 42)) (assert_return (invoke "⁡⁢⁣⁤") (i32.const 43)) (assert_return (invoke "𐀀󟿿􏿿") (i32.const 44)) (assert_return (invoke "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (i32.const 45)) (assert_return (invoke "ᅟᅠㅤᅠ") (i32.const 46)) (assert_return (invoke "︀") (i32.const 47)) (assert_return (invoke "︄") (i32.const 48)) (assert_return (invoke "󠄀") (i32.const 49)) (assert_return (invoke "󠇯") (i32.const 50)) (assert_return (invoke "̈") (i32.const 51)) (assert_return (invoke "\0a") (i32.const 52)) (assert_return (invoke "␤") (i32.const 53)) (assert_return (invoke "
") (i32.const 54)) (assert_return (invoke "\0d") (i32.const 55)) (assert_return (invoke "\0d\0a") (i32.const 56)) (assert_return (invoke "\0a\0d") (i32.const 57)) (assert_return (invoke "\1e") (i32.const 58)) (assert_return (invoke "\0b") (i32.const 59)) (assert_return (invoke "\0c") (i32.const 60)) (assert_return (invoke "\c2\85") (i32.const 61)) (assert_return (invoke "
") (i32.const 62)) (assert_return (invoke "…") (i32.const 63)) (assert_return (invoke "⏎") (i32.const 64)) (assert_return (invoke "\c2\8b") (i32.const 65)) (assert_return (invoke "\c2\8c") (i32.const 66)) (assert_return (invoke "\c2\8d") (i32.const 67)) (assert_return (invoke "↵") (i32.const 68)) (assert_return (invoke "↩") (i32.const 69)) (assert_return (invoke "⌤") (i32.const 70)) (assert_return (invoke "⤶") (i32.const 71)) (assert_return (invoke "↲") (i32.const 72)) (assert_return (invoke "⮨") (i32.const 73)) (assert_return (invoke "⮰") (i32.const 74)) (assert_return (invoke "�") (i32.const 75)) (assert_return (invoke "\ef\b7\90") (i32.const 76)) (assert_return (invoke "\ef\b7\91") (i32.const 77)) (assert_return (invoke "\ef\b7\92") (i32.const 78)) (assert_return (invoke "\ef\b7\93") (i32.const 79)) (assert_return (invoke "\ef\b7\94") (i32.const 80)) (assert_return (invoke "\ef\b7\95") (i32.const 81)) (assert_return (invoke "\ef\b7\96") (i32.const 82)) (assert_return (invoke "\ef\b7\97") (i32.const 83)) (assert_return (invoke "\ef\b7\98") (i32.const 84)) (assert_return (invoke "\ef\b7\99") (i32.const 85)) (assert_return (invoke "\ef\b7\9a") (i32.const 86)) (assert_return (invoke "\ef\b7\9b") (i32.const 87)) (assert_return (invoke "\ef\b7\9c") (i32.const 88)) (assert_return (invoke "\ef\b7\9d") (i32.const 89)) (assert_return (invoke "\ef\b7\9e") (i32.const 90)) (assert_return (invoke "\ef\b7\9f") (i32.const 91)) (assert_return (invoke "\ef\b7\a0") (i32.const 92)) (assert_return (invoke "\ef\b7\a1") (i32.const 93)) (assert_return (invoke "\ef\b7\a2") (i32.const 94)) (assert_return (invoke "\ef\b7\a3") (i32.const 95)) (assert_return (invoke "\ef\b7\a4") (i32.const 96)) (assert_return (invoke "\ef\b7\a5") (i32.const 97)) (assert_return (invoke "\ef\b7\a6") (i32.const 98)) (assert_return (invoke "\ef\b7\a7") (i32.const 99)) (assert_return (invoke "\ef\b7\a8") (i32.const 100)) (assert_return (invoke "\ef\b7\a9") (i32.const 101)) (assert_return (invoke "\ef\b7\aa") (i32.const 102)) (assert_return (invoke "\ef\b7\ab") (i32.const 103)) (assert_return (invoke "\ef\b7\ac") (i32.const 104)) (assert_return (invoke "\ef\b7\ad") (i32.const 105)) (assert_return (invoke "\ef\b7\ae") (i32.const 106)) (assert_return (invoke "\ef\b7\af") (i32.const 107)) (assert_return (invoke "\ef\bf\be") (i32.const 108)) (assert_return (invoke "\ef\bf\bf") (i32.const 109)) (assert_return (invoke "\f0\9f\bf\be") (i32.const 110)) (assert_return (invoke "\f0\9f\bf\bf") (i32.const 111)) (assert_return (invoke "\f0\af\bf\be") (i32.const 112)) (assert_return (invoke "\f0\af\bf\bf") (i32.const 113)) (assert_return (invoke "\f0\bf\bf\be") (i32.const 114)) (assert_return (invoke "\f0\bf\bf\bf") (i32.const 115)) (assert_return (invoke "\f1\8f\bf\be") (i32.const 116)) (assert_return (invoke "\f1\8f\bf\bf") (i32.const 117)) (assert_return (invoke "\f1\9f\bf\be") (i32.const 118)) (assert_return (invoke "\f1\9f\bf\bf") (i32.const 119)) (assert_return (invoke "\f1\af\bf\be") (i32.const 120)) (assert_return (invoke "\f1\af\bf\bf") (i32.const 121)) (assert_return (invoke "\f1\bf\bf\be") (i32.const 122)) (assert_return (invoke "\f1\bf\bf\bf") (i32.const 123)) (assert_return (invoke "\f2\8f\bf\be") (i32.const 124)) (assert_return (invoke "\f2\8f\bf\bf") (i32.const 125)) (assert_return (invoke "\f2\9f\bf\be") (i32.const 126)) (assert_return (invoke "\f2\9f\bf\bf") (i32.const 127)) (assert_return (invoke "\f2\af\bf\be") (i32.const 128)) (assert_return (invoke "\f2\af\bf\bf") (i32.const 129)) (assert_return (invoke "\f2\bf\bf\be") (i32.const 130)) (assert_return (invoke "\f2\bf\bf\bf") (i32.const 131)) (assert_return (invoke "\f3\8f\bf\be") (i32.const 132)) (assert_return (invoke "\f3\8f\bf\bf") (i32.const 133)) (assert_return (invoke "\f3\9f\bf\be") (i32.const 134)) (assert_return (invoke "\f3\9f\bf\bf") (i32.const 135)) (assert_return (invoke "\f3\af\bf\be") (i32.const 136)) (assert_return (invoke "\f3\af\bf\bf") (i32.const 137)) (assert_return (invoke "\f3\bf\bf\be") (i32.const 138)) (assert_return (invoke "\f3\bf\bf\bf") (i32.const 139)) (assert_return (invoke "\f4\8f\bf\be") (i32.const 140)) (assert_return (invoke "\f4\8f\bf\bf") (i32.const 141)) (assert_return (invoke "̈‽̈̉") (i32.const 142)) (assert_return (invoke "abc") (i32.const 143)) (assert_return (invoke "‭abc") (i32.const 144)) (assert_return (invoke "‮cba") (i32.const 145)) (assert_return (invoke "‭abc‮") (i32.const 146)) (assert_return (invoke "‮cba‭") (i32.const 147)) (assert_return (invoke "𝑨") (i32.const 148)) (assert_return (invoke "𝐴") (i32.const 149)) (assert_return (invoke "𝘈") (i32.const 150)) (assert_return (invoke "𝘼") (i32.const 151)) (assert_return (invoke "𝐀") (i32.const 152)) (assert_return (invoke "𝓐") (i32.const 153)) (assert_return (invoke "𝕬") (i32.const 154)) (assert_return (invoke "𝗔") (i32.const 155)) (assert_return (invoke "𝒜") (i32.const 156)) (assert_return (invoke "𝔄") (i32.const 157)) (assert_return (invoke "𝔸") (i32.const 158)) (assert_return (invoke "𝖠") (i32.const 159)) (assert_return (invoke "𝙰") (i32.const 160)) (assert_return (invoke "ᴀ") (i32.const 161)) (assert_return (invoke "ᴬ") (i32.const 162)) (assert_return (invoke "Ⓐ") (i32.const 163)) (assert_return (invoke "A") (i32.const 164)) (assert_return (invoke "🄐") (i32.const 165)) (assert_return (invoke "🄰") (i32.const 166)) (assert_return (invoke "󠁁") (i32.const 167)) (assert_return (invoke "U+0041") (i32.const 168)) (assert_return (invoke "A​") (i32.const 169)) (assert_return (invoke "А") (i32.const 170)) (assert_return (invoke "Ꙗ") (i32.const 171)) (assert_return (invoke "ⷼ") (i32.const 172)) (assert_return (invoke "ⷶ") (i32.const 173)) (assert_return (invoke "Ɐ") (i32.const 174)) (assert_return (invoke "🅐") (i32.const 175)) (assert_return (invoke "🅰") (i32.const 176)) (assert_return (invoke "Ⱝ") (i32.const 177)) (assert_return (invoke "𐐂") (i32.const 178)) (assert_return (invoke "𐐈") (i32.const 179)) (assert_return (invoke "𐒰") (i32.const 180)) (assert_return (invoke "À") (i32.const 181)) (assert_return (invoke "Á") (i32.const 182)) (assert_return (invoke "Â") (i32.const 183)) (assert_return (invoke "Ã") (i32.const 184)) (assert_return (invoke "Ä") (i32.const 185)) (assert_return (invoke "Ā") (i32.const 186)) (assert_return (invoke "Ă") (i32.const 187)) (assert_return (invoke "Ą") (i32.const 188)) (assert_return (invoke "Ǎ") (i32.const 189)) (assert_return (invoke "Ǟ") (i32.const 190)) (assert_return (invoke "Ǡ") (i32.const 191)) (assert_return (invoke "Ǻ") (i32.const 192)) (assert_return (invoke "Ȁ") (i32.const 193)) (assert_return (invoke "Ȃ") (i32.const 194)) (assert_return (invoke "Ȧ") (i32.const 195)) (assert_return (invoke "Ⱥ") (i32.const 196)) (assert_return (invoke "Ӑ") (i32.const 197)) (assert_return (invoke "Ӓ") (i32.const 198)) (assert_return (invoke "ߊ") (i32.const 199)) (assert_return (invoke "ࠡ") (i32.const 200)) (assert_return (invoke "ࠢ") (i32.const 201)) (assert_return (invoke "ࠣ") (i32.const 202)) (assert_return (invoke "ࠤ") (i32.const 203)) (assert_return (invoke "ࠥ") (i32.const 204)) (assert_return (invoke "ऄ") (i32.const 205)) (assert_return (invoke "अ") (i32.const 206)) (assert_return (invoke "ॲ") (i32.const 207)) (assert_return (invoke "অ") (i32.const 208)) (assert_return (invoke "ਅ") (i32.const 209)) (assert_return (invoke "અ") (i32.const 210)) (assert_return (invoke "ଅ") (i32.const 211)) (assert_return (invoke "அ") (i32.const 212)) (assert_return (invoke "అ") (i32.const 213)) (assert_return (invoke "ಅ") (i32.const 214)) (assert_return (invoke "അ") (i32.const 215)) (assert_return (invoke "ะ") (i32.const 216)) (assert_return (invoke "ະ") (i32.const 217)) (assert_return (invoke "༁") (i32.const 218)) (assert_return (invoke "ཨ") (i32.const 219)) (assert_return (invoke "ྸ") (i32.const 220)) (assert_return (invoke "အ") (i32.const 221)) (assert_return (invoke "ဢ") (i32.const 222)) (assert_return (invoke "ႜ") (i32.const 223)) (assert_return (invoke "ᅡ") (i32.const 224)) (assert_return (invoke "አ") (i32.const 225)) (assert_return (invoke "ዐ") (i32.const 226)) (assert_return (invoke "Ꭰ") (i32.const 227)) (assert_return (invoke "ᐊ") (i32.const 228)) (assert_return (invoke "ᖳ") (i32.const 229)) (assert_return (invoke "ᚨ") (i32.const 230)) (assert_return (invoke "ᚪ") (i32.const 231)) (assert_return (invoke "ᛆ") (i32.const 232)) (assert_return (invoke "ᜀ") (i32.const 233)) (assert_return (invoke "ᜠ") (i32.const 234)) (assert_return (invoke "ᝀ") (i32.const 235)) (assert_return (invoke "ᝠ") (i32.const 236)) (assert_return (invoke "ᠠ") (i32.const 237)) (assert_return (invoke "ᢇ") (i32.const 238)) (assert_return (invoke "ᤠ") (i32.const 239)) (assert_return (invoke "ᥣ") (i32.const 240)) (assert_return (invoke "ᨕ") (i32.const 241)) (assert_return (invoke "ᩋ") (i32.const 242)) (assert_return (invoke "ᩡ") (i32.const 243)) (assert_return (invoke "ᮃ") (i32.const 244)) (assert_return (invoke "ᯀ") (i32.const 245)) (assert_return (invoke "ᯁ") (i32.const 246)) (assert_return (invoke "ᰣ") (i32.const 247)) (assert_return (invoke "Ḁ") (i32.const 248)) (assert_return (invoke "Ạ") (i32.const 249)) (assert_return (invoke "Ả") (i32.const 250)) (assert_return (invoke "Ấ") (i32.const 251)) (assert_return (invoke "Ầ") (i32.const 252)) (assert_return (invoke "Ẩ") (i32.const 253)) (assert_return (invoke "Ẫ") (i32.const 254)) (assert_return (invoke "Ậ") (i32.const 255)) (assert_return (invoke "Ắ") (i32.const 256)) (assert_return (invoke "Ằ") (i32.const 257)) (assert_return (invoke "Ẳ") (i32.const 258)) (assert_return (invoke "Ẵ") (i32.const 259)) (assert_return (invoke "Ặ") (i32.const 260)) (assert_return (invoke "あ") (i32.const 261)) (assert_return (invoke "ア") (i32.const 262)) (assert_return (invoke "ㄚ") (i32.const 263)) (assert_return (invoke "ㅏ") (i32.const 264)) (assert_return (invoke "㈎") (i32.const 265)) (assert_return (invoke "㈏") (i32.const 266)) (assert_return (invoke "㈐") (i32.const 267)) (assert_return (invoke "㈑") (i32.const 268)) (assert_return (invoke "㈒") (i32.const 269)) (assert_return (invoke "㈓") (i32.const 270)) (assert_return (invoke "㈔") (i32.const 271)) (assert_return (invoke "㈕") (i32.const 272)) (assert_return (invoke "㈖") (i32.const 273)) (assert_return (invoke "㈗") (i32.const 274)) (assert_return (invoke "㈘") (i32.const 275)) (assert_return (invoke "㈙") (i32.const 276)) (assert_return (invoke "㈚") (i32.const 277)) (assert_return (invoke "㈛") (i32.const 278)) (assert_return (invoke "㉮") (i32.const 279)) (assert_return (invoke "㉯") (i32.const 280)) (assert_return (invoke "㉰") (i32.const 281)) (assert_return (invoke "㉱") (i32.const 282)) (assert_return (invoke "㉲") (i32.const 283)) (assert_return (invoke "㉳") (i32.const 284)) (assert_return (invoke "㉴") (i32.const 285)) (assert_return (invoke "㉵") (i32.const 286)) (assert_return (invoke "㉶") (i32.const 287)) (assert_return (invoke "㉷") (i32.const 288)) (assert_return (invoke "㉸") (i32.const 289)) (assert_return (invoke "㉹") (i32.const 290)) (assert_return (invoke "㉺") (i32.const 291)) (assert_return (invoke "㉻") (i32.const 292)) (assert_return (invoke "㋐") (i32.const 293)) (assert_return (invoke "ꀊ") (i32.const 294)) (assert_return (invoke "ꓮ") (i32.const 295)) (assert_return (invoke "ꕉ") (i32.const 296)) (assert_return (invoke "ꚠ") (i32.const 297)) (assert_return (invoke "ꠀ") (i32.const 298)) (assert_return (invoke "ꠣ") (i32.const 299)) (assert_return (invoke "ꡝ") (i32.const 300)) (assert_return (invoke "ꢂ") (i32.const 301)) (assert_return (invoke "꣪") (i32.const 302)) (assert_return (invoke "ꤢ") (i32.const 303)) (assert_return (invoke "ꥆ") (i32.const 304)) (assert_return (invoke "ꦄ") (i32.const 305)) (assert_return (invoke "ꨀ") (i32.const 306)) (assert_return (invoke "ア") (i32.const 307)) (assert_return (invoke "ᅡ") (i32.const 308)) (assert_return (invoke "𐀀") (i32.const 309)) (assert_return (invoke "𐊀") (i32.const 310)) (assert_return (invoke "𐊠") (i32.const 311)) (assert_return (invoke "𐌀") (i32.const 312)) (assert_return (invoke "𐎠") (i32.const 313)) (assert_return (invoke "𐒖") (i32.const 314)) (assert_return (invoke "𐔀") (i32.const 315)) (assert_return (invoke "𐝀") (i32.const 316)) (assert_return (invoke "𐠀") (i32.const 317)) (assert_return (invoke "𐤠") (i32.const 318)) (assert_return (invoke "𐦀") (i32.const 319)) (assert_return (invoke "𐦠") (i32.const 320)) (assert_return (invoke "𐨀") (i32.const 321)) (assert_return (invoke "𐬀") (i32.const 322)) (assert_return (invoke "𐰀") (i32.const 323)) (assert_return (invoke "𐰁") (i32.const 324)) (assert_return (invoke "𐲀") (i32.const 325)) (assert_return (invoke "𑀅") (i32.const 326)) (assert_return (invoke "𑂃") (i32.const 327)) (assert_return (invoke "𑄧") (i32.const 328)) (assert_return (invoke "𑅐") (i32.const 329)) (assert_return (invoke "𑆃") (i32.const 330)) (assert_return (invoke "𑈀") (i32.const 331)) (assert_return (invoke "𑊀") (i32.const 332)) (assert_return (invoke "𑊰") (i32.const 333)) (assert_return (invoke "𑌅") (i32.const 334)) (assert_return (invoke "𑍰") (i32.const 335)) (assert_return (invoke "𑐀") (i32.const 336)) (assert_return (invoke "𑒁") (i32.const 337)) (assert_return (invoke "𑖀") (i32.const 338)) (assert_return (invoke "𑘀") (i32.const 339)) (assert_return (invoke "𑚀") (i32.const 340)) (assert_return (invoke "𑜒") (i32.const 341)) (assert_return (invoke "𑜠") (i32.const 342)) (assert_return (invoke "𑢡") (i32.const 343)) (assert_return (invoke "𑫕") (i32.const 344)) (assert_return (invoke "𑰀") (i32.const 345)) (assert_return (invoke "𑲏") (i32.const 346)) (assert_return (invoke "𑲯") (i32.const 347)) (assert_return (invoke "𒀀") (i32.const 348)) (assert_return (invoke "𖧕") (i32.const 349)) (assert_return (invoke "𖩆") (i32.const 350)) (assert_return (invoke "𖫧") (i32.const 351)) (assert_return (invoke "𖽔") (i32.const 352)) (assert_return (invoke "𛱁") (i32.const 353)) (assert_return (invoke "𛱤") (i32.const 354)) (assert_return (invoke "𞠣") (i32.const 355)) (assert_return (invoke "🇦") (i32.const 356)) (assert_return (invoke "Ɑ") (i32.const 357)) (assert_return (invoke "Λ") (i32.const 358)) (assert_return (invoke "Ɒ") (i32.const 359)) (assert_return (invoke "ª") (i32.const 360)) (assert_return (invoke "∀") (i32.const 361)) (assert_return (invoke "₳") (i32.const 362)) (assert_return (invoke "𐤀") (i32.const 363)) (assert_return (invoke "Ⲁ") (i32.const 364)) (assert_return (invoke "𐌰") (i32.const 365)) (assert_return (invoke "Ά") (i32.const 366)) (assert_return (invoke "Α") (i32.const 367)) (assert_return (invoke "Ἀ") (i32.const 368)) (assert_return (invoke "Ἁ") (i32.const 369)) (assert_return (invoke "Ἂ") (i32.const 370)) (assert_return (invoke "Ἃ") (i32.const 371)) (assert_return (invoke "Ἄ") (i32.const 372)) (assert_return (invoke "Ἅ") (i32.const 373)) (assert_return (invoke "Ἆ") (i32.const 374)) (assert_return (invoke "Ἇ") (i32.const 375)) (assert_return (invoke "ᾈ") (i32.const 376)) (assert_return (invoke "ᾉ") (i32.const 377)) (assert_return (invoke "ᾊ") (i32.const 378)) (assert_return (invoke "ᾋ") (i32.const 379)) (assert_return (invoke "ᾌ") (i32.const 380)) (assert_return (invoke "ᾍ") (i32.const 381)) (assert_return (invoke "ᾎ") (i32.const 382)) (assert_return (invoke "ᾏ") (i32.const 383)) (assert_return (invoke "Ᾰ") (i32.const 384)) (assert_return (invoke "Ᾱ") (i32.const 385)) (assert_return (invoke "Ὰ") (i32.const 386)) (assert_return (invoke "Ά") (i32.const 387)) (assert_return (invoke "ᾼ") (i32.const 388)) (assert_return (invoke "𝚨") (i32.const 389)) (assert_return (invoke "𝛢") (i32.const 390)) (assert_return (invoke "𝜜") (i32.const 391)) (assert_return (invoke "𝝖") (i32.const 392)) (assert_return (invoke "𝞐") (i32.const 393)) (assert_return (invoke "⍶") (i32.const 394)) (assert_return (invoke "⍺") (i32.const 395)) (assert_return (invoke "⩜") (i32.const 396)) (assert_return (invoke "ᗅ") (i32.const 397)) (assert_return (invoke "Ꭺ") (i32.const 398)) (assert_return (invoke ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (i32.const 399)) (assert_return (invoke "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (i32.const 400)) (assert_return (invoke "𝪋𝪤") (i32.const 401)) (assert_return (invoke "𝪋") (i32.const 402)) (assert_return (invoke "½") (i32.const 403)) (assert_return (invoke "1⁄2") (i32.const 404)) (assert_return (invoke "1/2") (i32.const 405)) (assert_return (invoke "୳") (i32.const 406)) (assert_return (invoke "൴") (i32.const 407)) (assert_return (invoke "⳽") (i32.const 408)) (assert_return (invoke "꠱") (i32.const 409)) (assert_return (invoke "𐅁") (i32.const 410)) (assert_return (invoke "𐅵") (i32.const 411)) (assert_return (invoke "𐅶") (i32.const 412)) (assert_return (invoke "𐦽") (i32.const 413)) (assert_return (invoke "𐹻") (i32.const 414)) (assert_return (invoke """) (i32.const 415)) (assert_return (invoke "\7f") (i32.const 416)) (assert_return (invoke "\08") (i32.const 417)) (assert_return (invoke "⌫") (i32.const 418)) (assert_return (invoke "⌦") (i32.const 419)) (assert_return (invoke "␈") (i32.const 420)) (assert_return (invoke "␡") (i32.const 421)) (assert_return (invoke "᷻") (i32.const 422)) (assert_return (invoke "\0f") (i32.const 423)) (assert_return (invoke "←") (i32.const 424)) (assert_return (invoke "⌧") (i32.const 425)) (assert_return (invoke "⍒") (i32.const 426)) (assert_return (invoke "⍔") (i32.const 427)) (assert_return (invoke "⍢") (i32.const 428)) (assert_return (invoke "⍫") (i32.const 429)) (assert_return (invoke "\1a") (i32.const 430)) (assert_return (invoke "␦") (i32.const 431)) (assert_return (invoke "␚") (i32.const 432)) (assert_return (invoke "") (i32.const 433)) (assert_return (invoke "?") (i32.const 434)) (assert_return (invoke "¿") (i32.const 435)) (assert_return (invoke "᥅") (i32.const 436)) (assert_return (invoke ";") (i32.const 437)) (assert_return (invoke "՞") (i32.const 438)) (assert_return (invoke "؟") (i32.const 439)) (assert_return (invoke "፧") (i32.const 440)) (assert_return (invoke "⁇") (i32.const 441)) (assert_return (invoke "⍰") (i32.const 442)) (assert_return (invoke "❓") (i32.const 443)) (assert_return (invoke "❔") (i32.const 444)) (assert_return (invoke "⳺") (i32.const 445)) (assert_return (invoke "⳻") (i32.const 446)) (assert_return (invoke "⸮") (i32.const 447)) (assert_return (invoke "㉄") (i32.const 448)) (assert_return (invoke "꘏") (i32.const 449)) (assert_return (invoke "꛷") (i32.const 450)) (assert_return (invoke "︖") (i32.const 451)) (assert_return (invoke "﹖") (i32.const 452)) (assert_return (invoke "?") (i32.const 453)) (assert_return (invoke "𑅃") (i32.const 454)) (assert_return (invoke "𞥟") (i32.const 455)) (assert_return (invoke "󠀿") (i32.const 456)) (assert_return (invoke "𖡄") (i32.const 457)) (assert_return (invoke "⯑") (i32.const 458)) (assert_return (invoke "¶") (i32.const 459)) (assert_return (invoke "⁋") (i32.const 460)) (assert_return (invoke "܀") (i32.const 461)) (assert_return (invoke "჻") (i32.const 462)) (assert_return (invoke "፨") (i32.const 463)) (assert_return (invoke "〷") (i32.const 464)) (assert_return (invoke "❡") (i32.const 465)) (assert_return (invoke "⸏") (i32.const 466)) (assert_return (invoke "⸐") (i32.const 467)) (assert_return (invoke "⸑") (i32.const 468)) (assert_return (invoke "⸎") (i32.const 469)) (assert_return (invoke "\14") (i32.const 470)) (assert_return (invoke "☙") (i32.const 471)) (assert_return (invoke "⸿") (i32.const 472)) (assert_return (invoke "〇") (i32.const 473)) (assert_return (invoke "๛") (i32.const 474)) (assert_return (invoke "ꙮ") (i32.const 475)) (assert_return (invoke "ϓ") (i32.const 476)) (assert_return (invoke "ϔ") (i32.const 477)) (assert_return (invoke "ẛ") (i32.const 478)) (module ;; Test that we can use indices instead of names to reference imports, ;; exports, functions and parameters. (import "spectest" "print_i32" (func (param i32))) (func (import "spectest" "print_i32") (param i32)) (func (param i32) (param i32) (call 0 (local.get 0)) (call 1 (local.get 1)) ) (export "print32" (func 2)) ) (assert_return (invoke "print32" (i32.const 42) (i32.const 123))) ================================================ FILE: Test/WebAssembly/spec/nop.wast ================================================ ;; Test `nop` operator. (module ;; Auxiliary definitions (func $dummy) (func $3-ary (param i32 i32 i32) (result i32) local.get 0 local.get 1 local.get 2 i32.sub i32.add ) (memory 1) (func (export "as-func-first") (result i32) (nop) (i32.const 1) ) (func (export "as-func-mid") (result i32) (call $dummy) (nop) (i32.const 2) ) (func (export "as-func-last") (result i32) (call $dummy) (i32.const 3) (nop) ) (func (export "as-func-everywhere") (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) (func (export "as-drop-first") (param i32) (nop) (local.get 0) (drop) ) (func (export "as-drop-last") (param i32) (local.get 0) (nop) (drop) ) (func (export "as-drop-everywhere") (param i32) (nop) (nop) (local.get 0) (nop) (nop) (drop) ) (func (export "as-select-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid1") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid2") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (local.get 0) (select) ) (func (export "as-select-last") (param i32) (result i32) (local.get 0) (local.get 0) (local.get 0) (nop) (select) ) (func (export "as-select-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (select) ) (func (export "as-block-first") (result i32) (block (result i32) (nop) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-block-last") (result i32) (block (result i32) (nop) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-block-everywhere") (result i32) (block (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (nop) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-loop-everywhere") (result i32) (loop (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-if-condition") (param i32) (local.get 0) (nop) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (if (local.get 0) (then (nop)) (else (call $dummy))) ) (func (export "as-if-else") (param i32) (if (local.get 0) (then (call $dummy)) (else (nop))) ) (func (export "as-br-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (br 0)) ) (func (export "as-br-last") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (br 0)) ) (func (export "as-br-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (br 0)) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_if 0)) ) (func (export "as-br_if-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_if 0)) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_if 0)) ) (func (export "as-br_if-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_if 0) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_table 0 0)) ) (func (export "as-br_table-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_table 0 0) ) ) (func (export "as-return-first") (param i32) (result i32) (nop) (local.get 0) (return) ) (func (export "as-return-last") (param i32) (result i32) (local.get 0) (nop) (return) ) (func (export "as-return-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (return) ) (func (export "as-call-first") (param i32 i32 i32) (result i32) (nop) (local.get 0) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid1") (param i32 i32 i32) (result i32) (local.get 0) (nop) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid2") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (nop) (local.get 2) (call $3-ary) ) (func (export "as-call-last") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (local.get 2) (nop) (call $3-ary) ) (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (local.get 2) (nop) (nop) (call $3-ary) ) (func (export "as-unary-first") (param i32) (result i32) (nop) (local.get 0) (i32.ctz) ) (func (export "as-unary-last") (param i32) (result i32) (local.get 0) (nop) (i32.ctz) ) (func (export "as-unary-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.ctz) ) (func (export "as-binary-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.add) ) (func (export "as-binary-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.add) ) (func (export "as-binary-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.add) ) (func (export "as-binary-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.add) ) (func (export "as-test-first") (param i32) (result i32) (nop) (local.get 0) (i32.eqz) ) (func (export "as-test-last") (param i32) (result i32) (local.get 0) (nop) (i32.eqz) ) (func (export "as-test-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) i32.eqz ) (func (export "as-compare-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.ne) ) (func (export "as-compare-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.ne) ) (func (export "as-compare-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.lt_u) ) (func (export "as-compare-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.le_s) ) (func (export "as-memory.grow-first") (param i32) (result i32) (nop) (local.get 0) (memory.grow) ) (func (export "as-memory.grow-last") (param i32) (result i32) (local.get 0) (nop) (memory.grow) ) (func (export "as-memory.grow-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (memory.grow) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (nop) (i32.const 1) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid1") (result i32) (block (result i32) (i32.const 1) (nop) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid2") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (nop) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (i32.const 0) (nop) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-everywhere") (result i32) (block (result i32) (nop) (nop) (i32.const 1) (nop) (nop) (i32.const 2) (nop) (nop) (i32.const 0) (nop) (nop) (call_indirect (type $check)) ) ) (func (export "as-local.set-first") (param i32) (result i32) (nop) (i32.const 2) (local.set 0) (local.get 0) ) (func (export "as-local.set-last") (param i32) (result i32) (i32.const 2) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.set-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.tee-first") (param i32) (result i32) (nop) (i32.const 2) (local.tee 0) ) (func (export "as-local.tee-last") (param i32) (result i32) (i32.const 2) (nop) (local.tee 0) ) (func (export "as-local.tee-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.tee 0) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-first") (result i32) (nop) (i32.const 2) (global.set $a) (global.get $a) ) (func (export "as-global.set-last") (result i32) (i32.const 2) (nop) (global.set $a) (global.get $a) ) (func (export "as-global.set-everywhere") (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (global.set 0) (global.get $a) ) (func (export "as-load-first") (param i32) (result i32) (nop) (local.get 0) (i32.load) ) (func (export "as-load-last") (param i32) (result i32) (local.get 0) (nop) (i32.load) ) (func (export "as-load-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.load) ) (func (export "as-store-first") (param i32 i32) (nop) (local.get 0) (local.get 1) (i32.store) ) (func (export "as-store-mid") (param i32 i32) (local.get 0) (nop) (local.get 1) (i32.store) ) (func (export "as-store-last") (param i32 i32) (local.get 0) (local.get 1) (nop) (i32.store) ) (func (export "as-store-everywhere") (param i32 i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (i32.store) ) ) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last") (i32.const 3)) (assert_return (invoke "as-func-everywhere") (i32.const 4)) (assert_return (invoke "as-drop-first" (i32.const 0))) (assert_return (invoke "as-drop-last" (i32.const 0))) (assert_return (invoke "as-drop-everywhere" (i32.const 0))) (assert_return (invoke "as-select-first" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-block-first") (i32.const 2)) (assert_return (invoke "as-block-mid") (i32.const 2)) (assert_return (invoke "as-block-last") (i32.const 3)) (assert_return (invoke "as-block-everywhere") (i32.const 4)) (assert_return (invoke "as-loop-first") (i32.const 2)) (assert_return (invoke "as-loop-mid") (i32.const 2)) (assert_return (invoke "as-loop-last") (i32.const 3)) (assert_return (invoke "as-loop-everywhere") (i32.const 4)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const -1))) (assert_return (invoke "as-if-then" (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4))) (assert_return (invoke "as-if-else" (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3))) (assert_return (invoke "as-br-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_if-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_table-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-return-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-call-first" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) (assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) (assert_return (invoke "as-unary-first" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) (assert_return (invoke "as-binary-first" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-test-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-first" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) (assert_return (invoke "as-memory.grow-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-last" (i32.const 2)) (i32.const 1)) (assert_return (invoke "as-memory.grow-everywhere" (i32.const 12)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid1") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid2") (i32.const 1)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-call_indirect-everywhere") (i32.const 1)) (assert_return (invoke "as-local.set-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-global.set-first") (i32.const 2)) (assert_return (invoke "as-global.set-last") (i32.const 2)) (assert_return (invoke "as-global.set-everywhere") (i32.const 2)) (assert_return (invoke "as-load-first" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-last" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-everywhere" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-store-first" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-store-mid" (i32.const 0) (i32.const 2))) (assert_return (invoke "as-store-last" (i32.const 0) (i32.const 3))) (assert_return (invoke "as-store-everywhere" (i32.const 0) (i32.const 4))) (assert_invalid (module (func $type-i32 (result i32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-i64 (result i64) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f32 (result f32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f64 (result f64) (nop))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/ref_func.wast ================================================ (module (func (export "f") (param $x i32) (result i32) (local.get $x)) ) (register "M") (module (func $f (import "M" "f") (param i32) (result i32)) (func $g (param $x i32) (result i32) (i32.add (local.get $x) (i32.const 1)) ) (global funcref (ref.func $f)) (global funcref (ref.func $g)) (global $v (mut funcref) (ref.func $f)) (global funcref (ref.func $gf1)) (global funcref (ref.func $gf2)) (func (drop (ref.func $ff1)) (drop (ref.func $ff2))) (elem declare func $gf1 $ff1) (elem declare funcref (ref.func $gf2) (ref.func $ff2)) (func $gf1) (func $gf2) (func $ff1) (func $ff2) (func (export "is_null-f") (result i32) (ref.is_null (ref.func $f)) ) (func (export "is_null-g") (result i32) (ref.is_null (ref.func $g)) ) (func (export "is_null-v") (result i32) (ref.is_null (global.get $v)) ) (func (export "set-f") (global.set $v (ref.func $f))) (func (export "set-g") (global.set $v (ref.func $g))) (table $t 1 funcref) (elem declare func $f $g) (func (export "call-f") (param $x i32) (result i32) (table.set $t (i32.const 0) (ref.func $f)) (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0)) ) (func (export "call-g") (param $x i32) (result i32) (table.set $t (i32.const 0) (ref.func $g)) (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0)) ) (func (export "call-v") (param $x i32) (result i32) (table.set $t (i32.const 0) (global.get $v)) (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0)) ) ) (assert_return (invoke "is_null-f") (i32.const 0)) (assert_return (invoke "is_null-g") (i32.const 0)) (assert_return (invoke "is_null-v") (i32.const 0)) (assert_return (invoke "call-f" (i32.const 4)) (i32.const 4)) (assert_return (invoke "call-g" (i32.const 4)) (i32.const 5)) (assert_return (invoke "call-v" (i32.const 4)) (i32.const 4)) (invoke "set-g") (assert_return (invoke "call-v" (i32.const 4)) (i32.const 5)) (invoke "set-f") (assert_return (invoke "call-v" (i32.const 4)) (i32.const 4)) (assert_invalid (module (func $f (import "M" "f") (param i32) (result i32)) (func $g (import "M" "g") (param i32) (result i32)) (global funcref (ref.func 7)) ) "unknown function 7" ) ;; Reference declaration (module (func $f1) (func $f2) (func $f3) (func $f4) (func $f5) (func $f6) (table $t 1 funcref) (global funcref (ref.func $f1)) (export "f" (func $f2)) (elem (table $t) (i32.const 0) func $f3) (elem (table $t) (i32.const 0) funcref (ref.func $f4)) (elem func $f5) (elem funcref (ref.func $f6)) (func (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (return) ) ) (assert_invalid (module (func $f (drop (ref.func $f)))) "undeclared function reference" ) (assert_invalid (module (start $f) (func $f (drop (ref.func $f)))) "undeclared function reference" ) ================================================ FILE: Test/WebAssembly/spec/ref_is_null.wast ================================================ (module (func $f1 (export "funcref") (param $x funcref) (result i32) (ref.is_null (local.get $x)) ) (func $f2 (export "externref") (param $x externref) (result i32) (ref.is_null (local.get $x)) ) (table $t1 2 funcref) (table $t2 2 externref) (elem (table $t1) (i32.const 1) func $dummy) (func $dummy) (func (export "init") (param $r externref) (table.set $t2 (i32.const 1) (local.get $r)) ) (func (export "deinit") (table.set $t1 (i32.const 1) (ref.null func)) (table.set $t2 (i32.const 1) (ref.null extern)) ) (func (export "funcref-elem") (param $x i32) (result i32) (call $f1 (table.get $t1 (local.get $x))) ) (func (export "externref-elem") (param $x i32) (result i32) (call $f2 (table.get $t2 (local.get $x))) ) ) (assert_return (invoke "funcref" (ref.null func)) (i32.const 1)) (assert_return (invoke "externref" (ref.null extern)) (i32.const 1)) (assert_return (invoke "externref" (ref.extern 1)) (i32.const 0)) (invoke "init" (ref.extern 0)) (assert_return (invoke "funcref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "externref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "funcref-elem" (i32.const 1)) (i32.const 0)) (assert_return (invoke "externref-elem" (i32.const 1)) (i32.const 0)) (invoke "deinit") (assert_return (invoke "funcref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "externref-elem" (i32.const 0)) (i32.const 1)) (assert_return (invoke "funcref-elem" (i32.const 1)) (i32.const 1)) (assert_return (invoke "externref-elem" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $ref-vs-num (param i32) (ref.is_null (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $ref-vs-empty (ref.is_null))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/ref_null.wast ================================================ (module (func (export "externref") (result externref) (ref.null extern)) (func (export "funcref") (result funcref) (ref.null func)) (global externref (ref.null extern)) (global funcref (ref.null func)) ) (assert_return (invoke "externref") (ref.null extern)) (assert_return (invoke "funcref") (ref.null func)) ================================================ FILE: Test/WebAssembly/spec/return.wast ================================================ ;; Test `return` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (drop (i32.ctz (return)))) (func (export "type-i64") (drop (i64.ctz (return)))) (func (export "type-f32") (drop (f32.neg (return)))) (func (export "type-f64") (drop (f64.neg (return)))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (return (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (return (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (return (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (return (f64.const 4)))) ) (func (export "nullary") (return)) (func (export "unary") (result f64) (return (f64.const 3))) (func (export "as-func-first") (result i32) (return (i32.const 1)) (i32.const 2) ) (func (export "as-func-mid") (result i32) (call $dummy) (return (i32.const 2)) (i32.const 3) ) (func (export "as-func-last") (nop) (call $dummy) (return) ) (func (export "as-func-value") (result i32) (nop) (call $dummy) (return (i32.const 3)) ) (func (export "as-block-first") (block (return) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (return) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (return)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (return (i32.const 2))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (return (i32.const 3)) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (return (i32.const 4)) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (return (i32.const 5))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (return (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (return))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (return (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (result i64) (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (return (return (i64.const 7))) ) (func (export "as-if-cond") (result i32) (if (result i32) (return (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (return (i32.const 3))) (else (local.get 1)) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (return (i32.const 4))) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (return (i32.const 5)) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (return (i32.const 6)) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (return (i32.const 7))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (result i32) (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) ) (func (export "as-call-last") (result i32) (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (result i32) (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3) ) ) (func (export "as-call_indirect-last") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23)) ) ) (func (export "as-local.set-value") (result i32) (local f32) (local.set 0 (return (i32.const 17))) (i32.const -1) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (return (i32.const 1))) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-value") (result i32) (global.set $a (return (i32.const 1))) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (return (f32.const 1.7))) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (return (i64.const 30))) ) (func (export "as-store-address") (result i32) (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) ) (func (export "as-store-value") (result i32) (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) ) (func (export "as-storeN-address") (result i32) (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) ) (func (export "as-storeN-value") (result i32) (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) ) (func (export "as-unary-operand") (result f32) (f32.neg (return (f32.const 3.4))) ) (func (export "as-binary-left") (result i32) (i32.add (return (i32.const 3)) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (return (i64.const 45))) ) (func (export "as-test-operand") (result i32) (i32.eqz (return (i32.const 44))) ) (func (export "as-compare-left") (result i32) (f64.le (return (i32.const 43)) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (return (i32.const 42))) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (return (i32.const 41))) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (return (i32.const 40))) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "nullary")) (assert_return (invoke "unary") (f64.const 3)) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last")) (assert_return (invoke "as-func-value") (i32.const 3)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index") (i64.const 9)) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_invalid (module (func $type-value-empty-vs-num (result i32) (return))) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-block (result i32) (i32.const 0) (block (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-loop (result i32) (i32.const 0) (loop (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-then (result i32) (i32.const 0) (i32.const 0) (if (then (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-else (result i32) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (return))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br (result i32) (i32.const 0) (block (br 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_if (result i32) (i32.const 0) (block (br_if 0 (return) (i32.const 1))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_table (result i32) (i32.const 0) (block (br_table 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-return (result i32) (return (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-select (result i32) (select (return) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-call (result i32) (call 1 (return)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-vs-num-in-call_indirect (result i32) (block (result i32) (call_indirect (type $sig) (return) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.set (result i32) (local i32) (local.set 0 (return)) (local.get 0) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.tee (result i32) (local i32) (local.tee 0 (return)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-value-empty-vs-num-in-global.set (result i32) (global.set $x (return)) (global.get $x) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-memory.grow (result i32) (memory.grow (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-load (result i32) (i32.load (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-vs-num-in-store (result i32) (i32.store (return) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result f64) (return (nop)))) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/select.wast ================================================ (module ;; Auxiliary (func $dummy) (table $tab funcref (elem $dummy)) (memory 1) (func (export "select-i32") (param i32 i32 i32) (result i32) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i64") (param i64 i64 i32) (result i64) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f32") (param f32 f32 i32) (result f32) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f64") (param f64 f64 i32) (result f64) (select (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i32-t") (param i32 i32 i32) (result i32) (select (result i32) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i64-t") (param i64 i64 i32) (result i64) (select (result i64) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f32-t") (param f32 f32 i32) (result f32) (select (result f32) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f64-t") (param f64 f64 i32) (result f64) (select (result f64) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-funcref") (param funcref funcref i32) (result funcref) (select (result funcref) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-externref") (param externref externref i32) (result externref) (select (result externref) (local.get 0) (local.get 1) (local.get 2)) ) ;; As the argument of control constructs and instructions (func (export "as-select-first") (param i32) (result i32) (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3)) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy)) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0))) ) (func (export "as-if-condition") (param i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (result i32) (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4))) ) (func (export "as-if-else") (param i32) (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4))) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table $t funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect $t (type $check) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect $t (type $check) (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect $t (type $check) (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0)) ) ) ) (func (export "as-store-first") (param i32) (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-return-value") (param i32) (result i32) (select (i32.const 1) (i32.const 2) (local.get 0)) (return) ) (func (export "as-drop-operand") (param i32) (drop (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0)))) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0))) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (select (i32.const 0) (i32.const 4) (local.get 0))) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-binary-operand") (param i32) (result i32) (i32.mul (select (i32.const 1) (i32.const 2) (local.get 0)) (select (i32.const 1) (i32.const 2) (local.get 0)) ) ) (func (export "as-test-operand") (param i32) (result i32) (block (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-compare-left") (param i32) (result i32) (block (result i32) (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1)) ) ) (func (export "as-compare-right") (param i32) (result i32) (block (result i32) (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-convert-operand") (param i32) (result i32) (block (result i32) (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0))) ) ) ) (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select-f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select-f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select-i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select-f32-t" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select-f64-t" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select-funcref" (ref.null func) (ref.null func) (i32.const 1)) (ref.null func)) (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 1)) (ref.extern 1)) (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select-i32-t" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 0)) (ref.extern 2)) (assert_return (invoke "select-externref" (ref.extern 2) (ref.extern 1) (i32.const 0)) (ref.extern 1)) (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1)) (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element") (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4)) (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $arity-0-implicit (select (nop) (nop) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $arity-0 (select (result) (nop) (nop) (i32.const 1)))) "invalid result arity" ) (assert_invalid (module (func $arity-2 (result i32 i32) (select (result i32 i32) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) ) )) "invalid result arity" ) (assert_invalid (module (func $type-externref-implicit (param $r externref) (drop (select (local.get $r) (local.get $r) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (drop (select (i32.const 1) (i64.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (drop (select (i32.const 1) (f32.const 1.0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (drop (select (i32.const 1) (f64.const 1.0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty (i32.const 0) (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (i32.const 0) (block (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (i32.const 0) (loop (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-then (i32.const 0) (i32.const 0) (i32.const 0) (if (then (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.const 0) (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.const 0) (select) (drop))) ) ) "type mismatch" ) ;; Third operand must be i32 (assert_invalid (module (func (select (i32.const 1) (i32.const 1) (i64.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (select (i32.const 1) (i32.const 1) (f32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (select (i32.const 1) (i32.const 1) (f64.const 1)) (drop))) "type mismatch" ) ;; Result of select has type of first two operands (assert_invalid (module (func (result i32) (select (i64.const 1) (i64.const 1) (i32.const 1)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/meta/README.md ================================================ # Generated SIMD Spec Tests from gen_tests.py `gen_tests.py` builds partial SIMD spec tests using templates in `simd_*.py`. Currently it only support following simd test files generation. - 'simd_i8x16_cmp.wast' - 'simd_i16x8_cmp.wast' - 'simd_i32x4_cmp.wast' - 'simd_f32x4_cmp.wast' - 'simd_f64x2_cmp.wast' - 'simd_i8x16_arith.wast' - 'simd_i8x16_arith2.wast' - 'simd_i16x8_arith.wast' - 'simd_i16x8_arith2.wast' - 'simd_i32x4_arith.wast' - 'simd_i32x4_arith2.wast' - 'simd_f32x4_arith.wast' - 'simd_i64x2_arith.wast' - 'simd_f64x2_arith.wast' - 'simd_bitwise.wast' - 'simd_i8x16_sat_arith.wast' - 'simd_i16x8_sat_arith.wast' - 'simd_f32x4.wast' - 'simd_f64x2.wast' - 'simd_f32x4_rounding.wast' - 'simd_f64x2_rounding.wast' - 'simd_f32x4_pmin_pmax.wast' - 'simd_f64x2_pmin_pmax.wast' - 'simd_i32x4_dot_i16x8.wast' - 'simd_load8_lane.wast' - 'simd_load16_lane.wast' - 'simd_load32_lane.wast' - 'simd_load64_lane.wast, - 'simd_store8_lane.wast' - 'simd_store16_lane.wast' - 'simd_store32_lane.wast' - 'simd_store64_lane.wast, - 'simd_i16x8_extmul_i8x16.wast' - 'simd_i32x4_extmul_i16x8.wast' - 'simd_i64x2_extmul_i32x4.wast' - 'simd_int_to_int_widen.wast' - 'simd_i32x4_trunc_sat_f32x4.wast' - 'simd_i32x4_trunc_sat_f64x2.wast' - 'simd_i16x8_q15mulr_sat_s.wast', - 'simd_i16x8_extadd_pairwise_i8x16.wast', - 'simd_i32x4_extadd_pairwise_i16x8.wast', Usage: ``` $ python gen_tests.py -a ``` This script requires Python 3.6+, more details are documented in `gen_tests.py`. ================================================ FILE: Test/WebAssembly/spec/simd/meta/gen_tests.py ================================================ #!/usr/bin/env python3 """ This script is used for generating WebAssembly SIMD test cases. It requires Python 3.6+. """ import sys import argparse import importlib SUBMODULES = ( 'simd_i8x16_cmp', 'simd_i16x8_cmp', 'simd_i32x4_cmp', 'simd_i64x2_cmp', 'simd_f32x4_cmp', 'simd_f64x2_cmp', 'simd_i8x16_arith', 'simd_i16x8_arith', 'simd_i32x4_arith', 'simd_f32x4_arith', 'simd_i64x2_arith', 'simd_f64x2_arith', 'simd_sat_arith', 'simd_bitwise', 'simd_f32x4', 'simd_f64x2', 'simd_int_arith2', 'simd_f32x4_rounding', 'simd_f64x2_rounding', 'simd_f32x4_pmin_pmax', 'simd_f64x2_pmin_pmax', 'simd_i32x4_dot_i16x8', 'simd_load_lane', 'simd_store_lane', 'simd_ext_mul', 'simd_int_to_int_extend', 'simd_int_trunc_sat_float', 'simd_i16x8_q15mulr_sat_s', 'simd_extadd_pairwise', ) def gen_group_tests(mod_name): """mod_name is the back-end script name without the.py extension. There must be a gen_test_cases() function in each module.""" mod = importlib.import_module(mod_name) mod.gen_test_cases() def main(): """ Default program entry """ parser = argparse.ArgumentParser( description='Front-end script to call other modules to generate SIMD tests') parser.add_argument('-a', '--all', dest='gen_all', action='store_true', default=False, help='Generate all the tests') parser.add_argument('-i', '--inst', dest='inst_group', choices=SUBMODULES, help='Back-end scripts that generate the SIMD tests') args = parser.parse_args() if len(sys.argv) < 2: parser.print_help() if args.inst_group: gen_group_tests(args.inst_group) if args.gen_all: for mod_name in SUBMODULES: gen_group_tests(mod_name) if __name__ == '__main__': main() print('Done.') ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd.py ================================================ #!/usr/bin/env python3 """ This python file is a tool class for SIMD and currently only supports generating v128 const constant data. """ class SIMD: # Constant template CONST = '({value_type}.const {value})' # v128 Constant template V128_CONST = '(v128.const {lane_type} {value})' @staticmethod def const(value, value_type): """ generation constant data, [e.g. i32, i64, f32, f64] Params: value: constant data, string or list, lane_type: lane type, [i32, i64, f32, f64] """ return SIMD.CONST.format(value_type=value_type, value=''.join(str(value))) @staticmethod def v128_const(value, lane_type): """ generation v128 constant data, [e.g. i8x16, i16x8, i32x4, f32x4] Params: value: constant data, string or list, lane_type: lane type, [e.g. i8x16, i16x8, i32x4, f32x4] """ if lane_type.lower().find('x') == -1: return SIMD.const(value, lane_type) lane_cnt = int(lane_type[1:].split('x')[1]) # value is a string type, generating constant data # of value according to the number of lanes if isinstance(value, str): data_elem = [value] * lane_cnt # If value is type of list, generate constant data # according to combination of list contents and number of lanes elif isinstance(value, list): # If it is an empty list, generate all constant data with 0x00 if len(value) == 0: return SIMD.v128_const('0x00', lane_type) data_elem = [] # Calculate the number of times each element in value is copied times = lane_cnt // len(value) # Calculate whether the data needs to be filled according to # the number of elements in the value list and the number of lanes. complement = lane_cnt % len(value) complement_item = '' # If the number of elements in the value list is greater than the number of lanes, # paste data with the number of lanes from the value list. if times == 0: times = 1 complement = 0 value = value[0:lane_cnt] # Copy data for item in value: data_elem.extend([item] * times) complement_item = item # Fill in the data if complement > 0: data_elem.extend([complement_item] * complement) # Get string data_elem = ' '.join(data_elem) # Returns v128 constant text return SIMD.V128_CONST.format(lane_type=lane_type, value=data_elem) ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_arithmetic.py ================================================ #!/usr/bin/env python3 """Base class for generating cases integer and floating-point numbers arithmetic and saturate arithmetic operations. Class SimdArithmeticCase is the base class of all kinds of arithmetic operation cases. It provides a skeleton to generate the normal, invalid and combined cases. Subclasses only provide the test data sets. In some special cases, you may need to override the methods in base class to fulfill your case generation. """ from simd import SIMD from test_assert import AssertReturn, AssertInvalid from simd_lane_value import LaneValue from simd_integer_op import ArithmeticOp i8 = LaneValue(8) i16 = LaneValue(16) i32 = LaneValue(32) i64 = LaneValue(64) class SimdArithmeticCase: UNARY_OPS = ('neg',) BINARY_OPS = ('add', 'sub', 'mul') LANE_VALUE = {'i8x16': i8, 'i16x8': i16, 'i32x4': i32, 'i64x2': i64} TEST_FUNC_TEMPLATE_HEADER = ( ';; Tests for {} arithmetic operations on major boundary values and all special values.\n\n') def op_name(self, op): """ Full instruction name. Subclasses can overwrite to provide custom instruction names that don't fit the default of {shape}.{op}. """ return '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op) def __str__(self): return self.get_all_cases() @property def lane(self): return self.LANE_VALUE.get(self.LANE_TYPE) @property def dst_lane(self): return self.lane @property def src_lane(self): # Used for arithmetic that extends the lane, e.g. i16x8 lanes, which # are extended multiply to i32x4. if hasattr(self, 'SRC_LANE_TYPE'): return self.LANE_VALUE.get(self.SRC_LANE_TYPE) else: return self.lane @property def normal_unary_op_test_data(self): lane = self.src_lane return [0, 1, -1, lane.max - 1, lane.min + 1, lane.min, lane.max, lane.mask] @property def normal_binary_op_test_data(self): lane = self.src_lane return [ (0, 0), (0, 1), (1, 1), (0, -1), (1, -1), (-1, -1), (lane.quarter - 1, lane.quarter), (lane.quarter, lane.quarter), (-lane.quarter + 1, -lane.quarter), (-lane.quarter, -lane.quarter), (-lane.quarter - 1, -lane.quarter), (lane.max - 2, 1), (lane.max - 1, 1), (-lane.min, 1), (lane.min + 2, -1), (lane.min + 1, -1), (lane.min, -1), (lane.max, lane.max), (lane.min, lane.min), (lane.min, lane.min + 1), (lane.mask, 0), (lane.mask, 1), (lane.mask, -1), (lane.mask, lane.max), (lane.mask, lane.min), (lane.mask, lane.mask) ] @property def bin_test_data(self): return [ (self.normal_binary_op_test_data, [self.LANE_TYPE] * 3), (self.hex_binary_op_test_data, [self.LANE_TYPE] * 3) ] @property def unary_test_data(self): return [ (self.normal_unary_op_test_data, [self.LANE_TYPE] * 2), (self.hex_unary_op_test_data, [self.LANE_TYPE] * 2) ] @property def combine_ternary_arith_test_data(self): return { 'add-sub': [ [str(i) for i in range(self.LANE_LEN)], [str(i * 2) for i in range(self.LANE_LEN)], [str(i * 2) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)] ], 'sub-add': [ [str(i) for i in range(self.LANE_LEN)], [str(i * 2) for i in range(self.LANE_LEN)], [str(i * 2) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)] ], 'mul-add': [ [str(i) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)], ['2'] * self.LANE_LEN, [str(i * 4) for i in range(self.LANE_LEN)] ], 'mul-sub': [ [str(i * 2) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)], [str(pow(i, 2)) for i in range(self.LANE_LEN)] ] } @property def combine_binary_arith_test_data(self): return { 'add-neg': [ [str(i) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)], ['0'] * self.LANE_LEN ], 'sub-neg': [ [str(i) for i in range(self.LANE_LEN)], [str(i) for i in range(self.LANE_LEN)], [str(-i * 2) for i in range(self.LANE_LEN)] ], 'mul-neg': [ [str(i) for i in range(self.LANE_LEN)], ['2'] * self.LANE_LEN, [str(-i * 2) for i in range(self.LANE_LEN)] ] } def gen_test_func_template(self): template = [ self.TEST_FUNC_TEMPLATE_HEADER.format(self.LANE_TYPE), '(module'] for op in self.BINARY_OPS: template.append(' (func (export "{op}") (param v128 v128) (result v128) ' '({op} (local.get 0) (local.get 1)))'.format(op=self.op_name(op))) for op in self.UNARY_OPS: template.append(' (func (export "{op}") (param v128) (result v128) ' '({op} (local.get 0)))'.format(op=self.op_name(op))) template.append(')\n') return template def gen_test_template(self): template = self.gen_test_func_template() template.append('{normal_cases}') template.append('\n{invalid_cases}') template.append('\n{combine_cases}') return '\n'.join(template) def get_case_data(self): case_data = [] # i8x16.op (i8x16) (i8x16) for op in self.BINARY_OPS: o = ArithmeticOp(op) op_name = self.LANE_TYPE + '.' + op case_data.append(['#', op_name]) for data_group, v128_forms in self.bin_test_data: for data in data_group: case_data.append([op_name, [str(data[0]), str(data[1])], str(o.binary_op(data[0], data[1], self.src_lane, self.dst_lane)), v128_forms]) for data_group in self.full_bin_test_data: for data in data_group.get(op_name): case_data.append([op_name, *data]) for op in self.UNARY_OPS: o = ArithmeticOp(op) op_name = self.LANE_TYPE + '.' + op case_data.append(['#', op_name]) for data_group, v128_forms in self.unary_test_data: for data in data_group: case_data.append([op_name, [str(data)], str(o.unary_op(data, self.dst_lane)), v128_forms]) return case_data def get_invalid_cases(self): invalid_cases = [';; type check'] unary_template = '(assert_invalid (module (func (result v128) '\ '({name} ({operand})))) "type mismatch")' binary_template = '(assert_invalid (module (func (result v128) '\ '({name} ({operand_1}) ({operand_2})))) "type mismatch")' for op in self.UNARY_OPS: invalid_cases.append(unary_template.format(name=self.op_name(op), operand='i32.const 0')) for op in self.BINARY_OPS: invalid_cases.append(binary_template.format(name=self.op_name(op), operand_1='i32.const 0', operand_2='f32.const 0.0')) return '\n'.join(invalid_cases) + self.argument_empty_test() def argument_empty_test(self): """Test cases with empty argument. """ cases = [] cases.append('\n\n;; Test operation with empty argument\n') case_data = { 'op': '', 'extended_name': 'arg-empty', 'param_type': '', 'result_type': '(result v128)', 'params': '', } for op in self.UNARY_OPS: case_data['op'] = self.op_name(op) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) for op in self.BINARY_OPS: case_data['op'] = self.op_name(op) case_data['extended_name'] = '1st-arg-empty' case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE) cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) return '\n'.join(cases) def get_combine_cases(self): combine_cases = [';; combination\n(module'] ternary_func_template = ' (func (export "{func}") (param v128 v128 v128) (result v128)\n' \ ' ({lane}.{op1} ({lane}.{op2} (local.get 0) (local.get 1))'\ '(local.get 2)))' for func in sorted(self.combine_ternary_arith_test_data): func_parts = func.split('-') combine_cases.append(ternary_func_template.format(func=func, lane=self.LANE_TYPE, op1=func_parts[0], op2=func_parts[1])) binary_func_template = ' (func (export "{func}") (param v128 v128) (result v128)\n'\ ' ({lane}.{op1} ({lane}.{op2} (local.get 0)) (local.get 1)))' for func in sorted(self.combine_binary_arith_test_data): func_parts = func.split('-') combine_cases.append(binary_func_template.format(func=func, lane=self.LANE_TYPE, op1=func_parts[0], op2=func_parts[1])) combine_cases.append(')\n') for func, test in sorted(self.combine_ternary_arith_test_data.items()): combine_cases.append(str(AssertReturn(func, [SIMD.v128_const(elem, self.LANE_TYPE) for elem in test[:-1]], SIMD.v128_const(test[-1], self.LANE_TYPE)))) for func, test in sorted(self.combine_binary_arith_test_data.items()): combine_cases.append(str(AssertReturn(func, [SIMD.v128_const(elem, self.LANE_TYPE) for elem in test[:-1]], SIMD.v128_const(test[-1], self.LANE_TYPE)))) return '\n'.join(combine_cases) def get_normal_case(self): s = SIMD() case_data = self.get_case_data() cases = [] for item in case_data: # Recognize '#' as a commentary if item[0] == '#': cases.append('\n;; {}'.format(item[1])) continue instruction, param, ret, lane_type = item v128_result = s.v128_const(ret, lane_type[-1]) v128_params = [] for i, p in enumerate(param): v128_params.append(s.v128_const(p, lane_type[i])) cases.append(str(AssertReturn(instruction, v128_params, v128_result))) return '\n'.join(cases) def get_all_cases(self): case_data = {'lane_type': self.LANE_TYPE, 'normal_cases': self.get_normal_case(), 'invalid_cases': self.get_invalid_cases(), 'combine_cases': self.get_combine_cases() } return self.gen_test_template().format(**case_data) def gen_test_cases(self): wast_filename = '../simd_{lane_type}_arith.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_bitwise.py ================================================ #!/usr/bin/env python3 """ This file is used for generating bitwise test cases """ from simd import SIMD from test_assert import AssertReturn, AssertInvalid class SimdBitWise(SIMD): """ Generate common tests """ UNARY_OPS = ('not',) BINARY_OPS = ('and', 'or', 'xor', 'andnot',) TERNARY_OPS = ('bitselect',) # Test case template CASE_TXT = """;; Test all the bitwise operators on major boundary values and all special values. (module (func (export "not") (param $0 v128) (result v128) (v128.not (local.get $0))) (func (export "and") (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1))) (func (export "or") (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1))) (func (export "xor") (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1))) (func (export "bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2)) ) (func (export "andnot") (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1))) ) {normal_case}""" @staticmethod def init_case_data(case_data): """ Rearrange const data into standard format e.g. [0][i32x4] => (v128.const i32x4 0 0 0 0) [0][i32] => (i32.const 0) """ s_i = SIMD() lst_i_p_r = [] for item in case_data: # Recognize '#' as a commentary if item[0] == '#': comment = '\n' if len(item[1]) == 0 else '\n;; {}'.format(item[1]) lst_i_p_r.append(['#', comment]) continue # Params: instruction: instruction name; # params: param for instruction; # rets: excepted result; # lane_type: lane type for param and ret instruction, params, rets, lane_type = item p_const_list = [] for idx, param in enumerate(params): p_const_list.append(s_i.v128_const(param, lane_type[idx])) r_const_list = [] for idx, ret in enumerate(rets): r_const_list.append(s_i.v128_const(ret, lane_type[idx + len(params)])) lst_i_p_r.append([instruction, p_const_list, r_const_list]) return lst_i_p_r # Generate normal case with test datas def get_normal_case(self): """ Generate normal case with test data """ lst_i_p_r = self.init_case_data(self.get_case_data()) cases = [] for ipr in lst_i_p_r: if ipr[0] == '#': cases.append(ipr[1]) continue cases.append(str(AssertReturn(ipr[0], ipr[1], ipr[2]))) return '\n'.join(cases) def get_invalid_case(self): """ Generate invalid case with test data """ case_data = [ # i8x16 ['#', 'Type check'], ['#', ''], ['#', 'not'], ["v128.not", ['0'], [], ['i32']], ['#', 'and'], ["v128.and", ['0', '0'], [], ['i32', 'i32x4']], ["v128.and", ['0', '0'], [], ['i32x4', 'i32']], ["v128.and", ['0', '0'], [], ['i32', 'i32']], ['#', 'or'], ["v128.or", ['0', '0'], [], ['i32', 'i32x4']], ["v128.or", ['0', '0'], [], ['i32x4', 'i32']], ["v128.or", ['0', '0'], [], ['i32', 'i32']], ['#', 'xor'], ["v128.xor", ['0', '0'], [], ['i32', 'i32x4']], ["v128.xor", ['0', '0'], [], ['i32x4', 'i32']], ["v128.xor", ['0', '0'], [], ['i32', 'i32']], ['#', 'bitselect'], ["v128.bitselect", ['0', '0', '0'], [], ['i32', 'i32x4', 'i32x4']], ["v128.bitselect", ['0', '0', '0'], [], ['i32x4', 'i32x4', 'i32']], ["v128.bitselect", ['0', '0', '0'], [], ['i32', 'i32', 'i32']], ['#', 'andnot'], ["v128.andnot", ['0', '0'], [], ['i32', 'i32x4']], ["v128.andnot", ['0', '0'], [], ['i32x4', 'i32']], ["v128.andnot", ['0', '0'], [], ['i32', 'i32']] ] lst_ipr = self.init_case_data(case_data) str_invalid_case_func_tpl = '\n(assert_invalid (module (func (result v128)' \ ' ({op} {operand}))) "type mismatch")' lst_invalid_case_func = [] for ipr in lst_ipr: if ipr[0] == '#': lst_invalid_case_func.append(ipr[1]) continue else: lst_invalid_case_func.append( str_invalid_case_func_tpl.format(op=ipr[0], operand=' '.join(ipr[1])) ) return '\n{}\n'.format(''.join(lst_invalid_case_func)) def get_combination_case(self): """ Generate combination case with test data """ str_in_block_case_func_tpl = '\n (func (export "{op}-in-block")' \ '\n (block' \ '\n (drop' \ '\n (block (result v128)' \ '\n ({op}' \ '{block_with_result}' \ '\n )' \ '\n )' \ '\n )' \ '\n )' \ '\n )' str_nested_case_func_tpl = '\n (func (export "nested-{op}")' \ '\n (drop' \ '\n ({op}' \ '{block_with_result}' \ '\n )' \ '\n )' \ '\n )' case_data = [ ["v128.not", ['0'], [], ['i32']], ["v128.and", ['0', '1'], [], ['i32', 'i32']], ["v128.or", ['0', '1'], [], ['i32', 'i32']], ["v128.xor", ['0', '1'], [], ['i32', 'i32']], ["v128.bitselect", ['0', '1', '2'], [], ['i32', 'i32', 'i32']], ["v128.andnot", ['0', '1'], [], ['i32', 'i32']], ] lst_ipr = self.init_case_data(case_data) lst_in_block_case_func = [] lst_nested_case_func = [] lst_in_block_case_assert = [] lst_nested_case_assert = [] lst_argument_empty_case = [] for ipr in lst_ipr: lst_block = ['\n (block (result v128) (v128.load {}))'.format(x) for x in ipr[1]] lst_in_block_case_func.append( str_in_block_case_func_tpl.format(op=ipr[0], block_with_result=''.join(lst_block)) ) tpl_1 = '\n ({op}' \ '{combined_operation}' \ '\n )' tpl_2 = '\n ({op}' \ '{combined_operation}' \ '\n )' tpl_3 = '\n (v128.load {value})' lst_tpl_3 = [tpl_3.format(value=x) for x in ipr[1]] lst_tpl_2 = [tpl_2.format(op=ipr[0], combined_operation=''.join(lst_tpl_3))] * len(ipr[1]) lst_tpl_1 = [tpl_1.format(op=ipr[0], combined_operation=''.join(lst_tpl_2))] * len(ipr[1]) lst_nested_case_func.append( str_nested_case_func_tpl.format(op=ipr[0], block_with_result=''.join(lst_tpl_1)) ) lst_in_block_case_assert.append('\n(assert_return (invoke "{}-in-block"))'.format(ipr[0])) lst_nested_case_assert.append('\n(assert_return (invoke "nested-{}"))'.format(ipr[0])) return '\n;; Combination\n' \ '\n(module (memory 1)' \ '{in_block_cases}' \ '{nested_cases}' \ '\n (func (export "as-param")' \ '\n (drop' \ '\n (v128.or' \ '\n (v128.and' \ '\n (v128.not' \ '\n (v128.load (i32.const 0))' \ '\n )' \ '\n (v128.not' \ '\n (v128.load (i32.const 1))' \ '\n )' \ '\n )' \ '\n (v128.xor' \ '\n (v128.bitselect' \ '\n (v128.load (i32.const 0))' \ '\n (v128.load (i32.const 1))' \ '\n (v128.load (i32.const 2))' \ '\n )' \ '\n (v128.andnot' \ '\n (v128.load (i32.const 0))' \ '\n (v128.load (i32.const 1))' \ '\n )' \ '\n )' \ '\n )' \ '\n )' \ '\n )' \ '\n)' \ '{assert_in_block_cases}' \ '{assert_of_nested_cases}' \ '\n(assert_return (invoke "as-param"))\n'.format(in_block_cases=''.join(lst_in_block_case_func), nested_cases=''.join(lst_nested_case_func), assert_in_block_cases=''.join(lst_in_block_case_assert), assert_of_nested_cases=''.join(lst_nested_case_assert)) def get_argument_empty_case(self): """ Generate argument empty cases """ cases = [] param_1 = SIMD.v128_const('0', 'i32x4') cases.append('\n\n;; Test operation with empty argument\n') case_data = { 'op': '', 'extended_name': 'arg-empty', 'param_type': '', 'result_type': '(result v128)', 'params': '', } for op in self.UNARY_OPS: case_data['op'] = 'v128.' + op cases.append(AssertInvalid.get_arg_empty_test(**case_data)) for op in self.BINARY_OPS: case_data['op'] = 'v128.' + op case_data['extended_name'] = '1st-arg-empty' case_data['params'] = param_1 cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) for op in self.TERNARY_OPS: case_data['op'] = 'v128.' + op case_data['extended_name'] = '1st-arg-empty' case_data['params'] = param_1 + ' ' + param_1 cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'two-args-empty' case_data['params'] = param_1 cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) return '\n'.join(cases) + '\n' def get_all_cases(self): """ generate all test cases """ case_data = {'normal_case': self.get_normal_case()} # Add tests for unkonow operators for i32x4 return self.CASE_TXT.format(**case_data) + self.get_invalid_case() + self.get_combination_case() + self.get_argument_empty_case() def get_case_data(self): """ Overload base class method and set test data for bitwise. """ return [ # i32x4 ['#', 'i32x4'], ["not", ['0'], ['-1'], ['i32x4', 'i32x4']], ["not", ['-1'], ['0'], ['i32x4', 'i32x4']], ["not", [['-1', '0', '-1', '0']], [['0', '-1', '0', '-1']], ['i32x4', 'i32x4']], ["not", [['0', '-1', '0', '-1']], [['-1', '0', '-1', '0']], ['i32x4', 'i32x4']], ["not", ['0x55555555'], ['0xAAAAAAAA'], ['i32x4', 'i32x4']], ["not", ['3435973836'], ['858993459'], ['i32x4', 'i32x4']], ['not', ['01_234_567_890'], ['3060399405'], ['i32x4', 'i32x4']], ['not', ['0x0_1234_5678'], ['0xedcba987'], ['i32x4', 'i32x4']], ["and", [['0', '-1'], ['0', '-1', '0', '-1']], [['0', '0', '0', '-1']], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0', '0'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0', '-1'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0', '0xFFFFFFFF'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['1', '1'], ['1'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['255', '85'], ['85'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['255', '128'], ['128'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['2863311530', ['10', '128', '5', '165']], [['10', '128', '0', '160']], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0xFFFFFFFF', '0x55555555'], ['0x55555555'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0xFFFFFFFF', '0xAAAAAAAA'], ['0xAAAAAAAA'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0xFFFFFFFF', '0x0'], ['0x0'], ['i32x4', 'i32x4', 'i32x4']], ["and", ['0x55555555', ['0x5555', '0xFFFF', '0x55FF', '0x5FFF']], ['0x5555'], ['i32x4', 'i32x4', 'i32x4']], ['and', ['01_234_567_890', '01_234_567_890'], ['1234567890'], ['i32x4', 'i32x4', 'i32x4']], ['and', ['0x0_1234_5678', '0x0_90AB_cdef'], ['0x10204468'], ['i32x4', 'i32x4', 'i32x4']], ["or", [['0', '0', '-1', '-1'], ['0', '-1', '0', '-1']], [['0', '-1', '-1', '-1']], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0', '0'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0', '-1'], ['-1'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0', '0xFFFFFFFF'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['1', '1'], ['1'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['255', '85'], ['255'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['255', '128'], ['255'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['2863311530', ['10', '128', '5', '165']], [['2863311530', '2863311535']], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0xFFFFFFFF', '0x55555555'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0xFFFFFFFF', '0xAAAAAAAA'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0xFFFFFFFF', '0x0'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["or", ['0x55555555', ['0x5555', '0xFFFF', '0x55FF', '0x5FFF']], [['0x55555555', '0x5555ffff', '0x555555ff', '0x55555fff']], ['i32x4', 'i32x4', 'i32x4']], ['or', ['01_234_567_890', '01_234_567_890'], ['1234567890'], ['i32x4', 'i32x4', 'i32x4']], ['or', ['0x0_1234_5678', '0x0_90AB_cdef'], ['0x92bfdfff'], ['i32x4', 'i32x4', 'i32x4']], ["xor", [['0', '0', '-1', '-1'], ['0', '-1', '0', '-1']], [['0', '-1', '-1', '0']], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0', '0'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0', '-1'], ['-1'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0', '0xFFFFFFFF'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['1', '1'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['255', '85'], ['170'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['255', '128'], ['127'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['2863311530', ['10', '128', '5', '165']], [['2863311520', '2863311402', '2863311535', '2863311375']], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0xFFFFFFFF', '0x55555555'], ['0xAAAAAAAA'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0xFFFFFFFF', '0xAAAAAAAA'], ['0x55555555'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0xFFFFFFFF', '0x0'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["xor", ['0x55555555', ['0x5555', '0xFFFF', '0x55FF', '0x5FFF']], [['0x55550000', '0x5555AAAA', '0x555500AA', '0x55550AAA']], ['i32x4', 'i32x4', 'i32x4']], ['xor', ['01_234_567_890', '01_234_567_890'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ['xor', ['0x0_1234_5678', '0x0_90AB_cdef'], ['0x829f9b97'], ['i32x4', 'i32x4', 'i32x4']], ["bitselect", ['0xAAAAAAAA', '0xBBBBBBBB', ['0x00112345', '0xF00FFFFF', '0x10112021', '0xBBAABBAA']], [['0xBBAABABA', '0xABBAAAAA', '0xABAABBBA', '0xAABBAABB']], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ["bitselect", ['0xAAAAAAAA', '0xBBBBBBBB', '0x00000000'], ['0xBBBBBBBB'], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ["bitselect", ['0xAAAAAAAA', '0xBBBBBBBB', '0x11111111'], ['0xAAAAAAAA'], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ["bitselect", ['0xAAAAAAAA', '0xBBBBBBBB', ['0x01234567', '0x89ABCDEF', '0xFEDCBA98', '0x76543210']], [['0xBABABABA', '0xABABABAB']], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ["bitselect", ['0xAAAAAAAA', '0x55555555', ['0x01234567', '0x89ABCDEF', '0xFEDCBA98', '0x76543210']], [['0x54761032', '0xDCFE98BA', '0xAB89EFCD', '0x23016745']], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ["bitselect", ['0xAAAAAAAA', '0x55555555', ['0x55555555', '0xAAAAAAAA', '0x00000000', '0xFFFFFFFF']], [['0x00000000', '0xFFFFFFFF', '0x55555555', '0xAAAAAAAA']], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ['bitselect', ['01_234_567_890', '03_060_399_406', '0xcdefcdef'], ['2072391874'], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ['bitselect', ['0x0_1234_5678', '0x0_90AB_cdef', '0xcdefcdef'], ['0x10244468'], ['i32x4', 'i32x4', 'i32x4', 'i32x4']], ["andnot", [['0', '-1'], ['0', '-1', '0', '-1']], [['0', '0', '-1', '0']], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0', '0'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0', '-1'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0', '0xFFFFFFFF'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['1', '1'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['255', '85'], ['170'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['255', '128'], ['127'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['2863311530', ['10', '128', '5', '165']], [['2863311520', '2863311402', '2863311530', '2863311370']], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0xFFFFFFFF', '0x55555555'], ['0xAAAAAAAA'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0xFFFFFFFF', '0xAAAAAAAA'], ['0x55555555'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0xFFFFFFFF', '0x0'], ['0xFFFFFFFF'], ['i32x4', 'i32x4', 'i32x4']], ["andnot", ['0x55555555', ['0x5555', '0xFFFF', '0x55FF', '0x5FFF']], ['0x55550000'], ['i32x4', 'i32x4', 'i32x4']], ['andnot', ['01_234_567_890', '01_234_567_890'], ['0'], ['i32x4', 'i32x4', 'i32x4']], ['andnot', ['0x0_1234_5678', '0x0_90AB_cdef'], ['0x02141210'], ['i32x4', 'i32x4', 'i32x4']], ['#', 'for float special data [e.g. -nan nan -inf inf]'], ["not", ['-nan'], ['5.87747e-39'], ['f32x4', 'f32x4']], ["not", ['nan'], ['-5.87747e-39'], ['f32x4', 'f32x4']], ["not", ['-inf'], ['0x007fffff'], ['f32x4', 'i32x4']], ["not", ['inf'], ['0x807fffff'], ['f32x4', 'i32x4']], ["and", ['-nan', '-nan'], ['0xffc00000'], ['f32x4', 'f32x4', 'i32x4']], ["and", ['-nan', 'nan'], ['nan'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['-nan', '-inf'], ['-inf'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['-nan', 'inf'], ['inf'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['nan', 'nan'], ['nan'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['nan', '-inf'], ['inf'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['nan', 'inf'], ['inf'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['-inf', '-inf'], ['-inf'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['-inf', 'inf'], ['inf'], ['f32x4', 'f32x4', 'f32x4']], ["and", ['inf', 'inf'], ['inf'], ['f32x4', 'f32x4', 'f32x4']], ["or", ['-nan', '-nan'], ['0xffc00000'], ['f32x4', 'f32x4', 'i32x4']], ["or", ['-nan', 'nan'], ['0xffc00000'], ['f32x4', 'f32x4', 'i32x4']], ["or", ['-nan', '-inf'], ['0xffc00000'], ['f32x4', 'f32x4', 'i32x4']], ["or", ['-nan', 'inf'], ['0xffc00000'], ['f32x4', 'f32x4', 'i32x4']], ["or", ['nan', 'nan'], ['nan'], ['f32x4', 'f32x4', 'f32x4']], ["or", ['nan', '-inf'], ['0xffc00000'], ['f32x4', 'f32x4', 'i32x4']], ["or", ['nan', 'inf'], ['nan'], ['f32x4', 'f32x4', 'f32x4']], ["or", ['-inf', '-inf'], ['-inf'], ['f32x4', 'f32x4', 'f32x4']], ["or", ['-inf', 'inf'], ['-inf'], ['f32x4', 'f32x4', 'f32x4']], ["or", ['inf', 'inf'], ['inf'], ['f32x4', 'f32x4', 'f32x4']], ["xor", ['-nan', '-nan'], ['0'], ['f32x4', 'f32x4', 'f32x4']], ["xor", ['-nan', 'nan'], ['-0'], ['f32x4', 'f32x4', 'f32x4']], ["xor", ['-nan', '-inf'], ['0x00400000'], ['f32x4', 'f32x4', 'i32x4']], ["xor", ['-nan', 'inf'], ['0x80400000'], ['f32x4', 'f32x4', 'i32x4']], ["xor", ['nan', 'nan'], ['0'], ['f32x4', 'f32x4', 'f32x4']], ["xor", ['nan', '-inf'], ['0x80400000'], ['f32x4', 'f32x4', 'i32x4']], ["xor", ['nan', 'inf'], ['0x00400000'], ['f32x4', 'f32x4', 'i32x4']], ["xor", ['-inf', '-inf'], ['0'], ['f32x4', 'f32x4', 'f32x4']], ["xor", ['-inf', 'inf'], ['0x80000000'], ['f32x4', 'f32x4', 'i32x4']], ["xor", ['inf', 'inf'], ['0'], ['f32x4', 'f32x4', 'f32x4']], ["bitselect", ['-nan', '-nan','0xA5A5A5A5'], ['0xffc00000'], ['f32x4', 'f32x4', 'f32x4', 'i32x4']], ["bitselect", ['-nan', 'nan','0xA5A5A5A5'], ['nan'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['-nan', '-inf','0xA5A5A5A5'], ['-inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['-nan', 'inf','0xA5A5A5A5'], ['inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['nan', 'nan','0xA5A5A5A5'], ['nan'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['nan', '-inf','0xA5A5A5A5'], ['-inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['nan', 'inf','0xA5A5A5A5'], ['inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['-inf', '-inf','0xA5A5A5A5'], ['-inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['-inf', 'inf','0xA5A5A5A5'], ['inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["bitselect", ['inf', 'inf','0xA5A5A5A5'], ['inf'], ['f32x4', 'f32x4', 'f32x4', 'f32x4']], ["andnot", ['-nan', '-nan'], ['0x00000000'], ['f32x4', 'f32x4', 'i32x4']], ["andnot", ['-nan', 'nan'], ['-0'], ['f32x4', 'f32x4', 'f32x4']], ["andnot", ['-nan', '-inf'], ['0x00400000'], ['f32x4', 'f32x4', 'i32x4']], ["andnot", ['-nan', 'inf'], ['0x80400000'], ['f32x4', 'f32x4', 'i32x4']], ["andnot", ['nan', 'nan'], ['0x00000000'], ['f32x4', 'f32x4', 'f32x4']], ["andnot", ['nan', '-inf'], ['0x00400000'], ['f32x4', 'f32x4', 'i32x4']], ["andnot", ['nan', 'inf'], ['0x00400000'], ['f32x4', 'f32x4', 'i32x4']], ["andnot", ['-inf', '-inf'], ['0x00000000'], ['f32x4', 'f32x4', 'f32x4']], ["andnot", ['-inf', 'inf'], ['0x80000000'], ['f32x4', 'f32x4', 'i32x4']], ["andnot", ['inf', 'inf'], ['0x00000000'], ['f32x4', 'f32x4', 'i32x4']] ] def gen_test_cases(self): """ Generate test case file """ with open('../simd_bitwise.wast', 'w+') as f_out: f_out.write(self.get_all_cases()) def gen_test_cases(): """ Generate test case file """ bit_wise = SimdBitWise() bit_wise.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_compare.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ This class is used to generate common tests for SIMD comparison instructions. Defines the test template to generate corresponding test file(simd_*_cmp.wast) via using variable test data set and subclass from sub test template """ import abc from simd import SIMD from test_assert import AssertReturn, AssertInvalid # Generate common comparison tests class SimdCmpCase(object): __metaclass__ = abc.ABCMeta # Test case template CASE_TXT = """ ;; Test all the {lane_type} comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) ({lane_type}.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) ({lane_type}.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x v128) (param $y v128) (result v128) ({lane_type}.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x v128) (param $y v128) (result v128) ({lane_type}.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x v128) (param $y v128) (result v128) ({lane_type}.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x v128) (param $y v128) (result v128) ({lane_type}.ge_u (local.get $x) (local.get $y))) ) {normal_case} ;; Type check (assert_invalid (module (func (result v128) ({lane_type}.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.ne (i32.const 0) (f32.const 0)))) "type mismatch") ;; combination (module (memory 1) (func (export "eq-in-block") (block (drop (block (result v128) ({lane_type}.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ne-in-block") (block (drop (block (result v128) ({lane_type}.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "lt_s-in-block") (block (drop (block (result v128) ({lane_type}.lt_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "le_u-in-block") (block (drop (block (result v128) ({lane_type}.le_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "gt_u-in-block") (block (drop (block (result v128) ({lane_type}.gt_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ge_s-in-block") (block (drop (block (result v128) ({lane_type}.ge_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-eq") (drop ({lane_type}.eq ({lane_type}.eq ({lane_type}.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.eq ({lane_type}.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ne") (drop ({lane_type}.ne ({lane_type}.ne ({lane_type}.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.ne ({lane_type}.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-lt_s") (drop ({lane_type}.lt_s ({lane_type}.lt_s ({lane_type}.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.lt_s ({lane_type}.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-le_u") (drop ({lane_type}.le_u ({lane_type}.le_u ({lane_type}.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.le_u ({lane_type}.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-gt_u") (drop ({lane_type}.gt_u ({lane_type}.gt_u ({lane_type}.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.gt_u ({lane_type}.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ge_s") (drop ({lane_type}.ge_s ({lane_type}.ge_s ({lane_type}.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.ge_s ({lane_type}.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop ({lane_type}.ge_u ({lane_type}.eq ({lane_type}.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ({lane_type}.ne ({lane_type}.gt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ({lane_type}.lt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "eq-in-block")) (assert_return (invoke "ne-in-block")) (assert_return (invoke "lt_s-in-block")) (assert_return (invoke "le_u-in-block")) (assert_return (invoke "gt_u-in-block")) (assert_return (invoke "ge_s-in-block")) (assert_return (invoke "nested-eq")) (assert_return (invoke "nested-ne")) (assert_return (invoke "nested-lt_s")) (assert_return (invoke "nested-le_u")) (assert_return (invoke "nested-gt_u")) (assert_return (invoke "nested-ge_s")) (assert_return (invoke "as-param")) """ # lane type [e.g. i8x16, i16x8, i32x4, f32x4] LANE_TYPE = 'i8x16' def __init__(self): super(SimdCmpCase, self).__init__() def __str__(self): return self.get_all_cases() # This method requires subclass overloading with its own type of test data. @abc.abstractmethod def get_case_data(self): pass # Generate normal case with test datas def get_normal_case(self): s = SIMD() case_data = self.get_case_data() cases = [] for item in case_data: # Recognize '#' as a commentary if item[0] == '#': cases.append('\n;; {}'.format(item[1])) continue """ Generate assert_return Params: instruction: instruction name; param: param for instruction; ret: excepted result; lane_type: lane type """ instruction, param, ret, lane_type = item cases.append(str(AssertReturn(instruction, [s.v128_const(param[0], lane_type[0]), s.v128_const(param[1], lane_type[1])], s.v128_const(ret, lane_type[2])))) return '\n'.join(cases) def argument_empty_test(self): """Test cases with empty argument. """ cases = [] cases.append('\n;; Test operation with empty argument\n') case_data = { 'op': '', 'extended_name': 'arg-empty', 'param_type': '', 'result_type': '(result v128)', 'params': '', } for op in self.BINARY_OPS: case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op) case_data['extended_name'] = '1st-arg-empty' case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE) cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) return '\n'.join(cases) # Generate all test cases def get_all_cases(self): case_data = {'normal_case': self.get_normal_case(), 'lane_type': self.LANE_TYPE} # Generate tests using the test template return self.CASE_TXT.format(**case_data) + self.argument_empty_test() # Generate test case file def gen_test_cases(self): with open('../simd_{}_cmp.wast'.format(self.LANE_TYPE), 'w+') as f_out: f_out.write(self.get_all_cases()) f_out.close() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_ext_mul.py ================================================ #!/usr/bin/env python3 """ Base class for generating extended multiply instructions. These instructions 2 inputs of the same (narrower) lane shape, multiplies corresponding lanes with extension (no overflow/wraparound), producing 1 output of a (wider) shape. These instructions can choose to work on the low or high halves of the inputs, and perform signed or unsigned multiply. Subclasses need to define 3 attributes: - LANE_TYPE (this is the output shape) - SRC_LANE_TYPE (this is the input (narrower) shape) - BINARY_OPS (list of operations) """ from simd_arithmetic import SimdArithmeticCase class SimdExtMulCase(SimdArithmeticCase): UNARY_OPS = () @property def full_bin_test_data(self): return [] def get_combine_cases(self): return '' @property def bin_test_data(self): lane_forms = [self.SRC_LANE_TYPE, self.SRC_LANE_TYPE, self.LANE_TYPE] return [(self.normal_binary_op_test_data, lane_forms)] @property def hex_binary_op_test_data(self): return [] def gen_test_cases(self): wast_filename = '../simd_{wide}_extmul_{narrow}.wast'.format( wide=self.LANE_TYPE, narrow=self.SRC_LANE_TYPE) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) class SimdI16x8ExtMulCase(SimdExtMulCase): LANE_TYPE = 'i16x8' SRC_LANE_TYPE = 'i8x16' BINARY_OPS = ('extmul_low_i8x16_s', 'extmul_high_i8x16_s', 'extmul_low_i8x16_u', 'extmul_high_i8x16_u') class SimdI32x4ExtMulCase(SimdExtMulCase): LANE_TYPE = 'i32x4' SRC_LANE_TYPE = 'i16x8' BINARY_OPS = ('extmul_low_i16x8_s', 'extmul_high_i16x8_s', 'extmul_low_i16x8_u', 'extmul_high_i16x8_u') class SimdI64x2ExtMulCase(SimdExtMulCase): LANE_TYPE = 'i64x2' SRC_LANE_TYPE = 'i32x4' BINARY_OPS = ('extmul_low_i32x4_s', 'extmul_high_i32x4_s', 'extmul_low_i32x4_u', 'extmul_high_i32x4_u') def gen_test_cases(): simd_i16x8_ext_mul_case = SimdI16x8ExtMulCase() simd_i16x8_ext_mul_case.gen_test_cases() simd_i32x4_ext_mul_case = SimdI32x4ExtMulCase() simd_i32x4_ext_mul_case.gen_test_cases() simd_i64x2_ext_mul_case = SimdI64x2ExtMulCase() simd_i64x2_ext_mul_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_extadd_pairwise.py ================================================ #!/usr/bin/env python3 from simd_arithmetic import SimdArithmeticCase, i16 from simd_integer_op import ArithmeticOp class SimdExtAddPairwise(SimdArithmeticCase): BINARY_OPS = () def unary_op(self, x, signed): # For test data we always splat a single value to the # entire v128, so doubling the input works. return ArithmeticOp.get_valid_value(x, self.src_lane, signed=signed) * 2 @property def hex_unary_op_test_data(self): return [] @property def unary_test_data(self): return [ (self.normal_unary_op_test_data, [self.SRC_LANE_TYPE,self.LANE_TYPE]), ] def get_case_data(self): case_data = [] for op in self.UNARY_OPS: op_name = self.op_name(op) case_data.append(['#', op_name]) for data_group, v128_forms in self.unary_test_data: for data in data_group: case_data.append([op_name, [str(data)], str(self.unary_op(data, op.endswith('s'))), v128_forms]) return case_data def get_combine_cases(self): return '' def gen_test_cases(self): wast_filename = '../simd_{}_extadd_pairwise_{}.wast'.format(self.LANE_TYPE, self.SRC_LANE_TYPE) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) class SimdI16x8ExtAddPairwise(SimdExtAddPairwise): UNARY_OPS = ('extadd_pairwise_i8x16_s','extadd_pairwise_i8x16_u') LANE_TYPE = 'i16x8' SRC_LANE_TYPE = 'i8x16' class SimdI32x4ExtAddPairwise(SimdExtAddPairwise): UNARY_OPS = ('extadd_pairwise_i16x8_s','extadd_pairwise_i16x8_u') LANE_TYPE = 'i32x4' SRC_LANE_TYPE = 'i16x8' def gen_test_cases(): simd_i16x8_arith = SimdI16x8ExtAddPairwise() simd_i32x4_arith = SimdI32x4ExtAddPairwise() simd_i16x8_arith.gen_test_cases() simd_i32x4_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f32x4.py ================================================ #!/usr/bin/env python3 """ Generate f32x4 [abs, min, max] cases. """ from simd_f32x4_arith import Simdf32x4ArithmeticCase from simd_float_op import FloatingPointSimpleOp from simd import SIMD from test_assert import AssertReturn class Simdf32x4Case(Simdf32x4ArithmeticCase): UNARY_OPS = ('abs',) BINARY_OPS = ('min', 'max',) floatOp = FloatingPointSimpleOp() FLOAT_NUMBERS = ( '0x0p+0', '-0x0p+0', '0x1p-149', '-0x1p-149', '0x1p-126', '-0x1p-126', '0x1p-1', '-0x1p-1', '0x1p+0', '-0x1p+0', '0x1.921fb6p+2', '-0x1.921fb6p+2', '0x1.fffffep+127', '-0x1.fffffep+127', 'inf', '-inf' ) LITERAL_NUMBERS = ( '0123456789e019', '0123456789e-019', '0123456789.e019', '0123456789.e+019', '-0123456789.0123456789' ) NAN_NUMBERS = ('nan', '-nan', 'nan:0x200000', '-nan:0x200000') binary_params_template = ('({assert_type} (invoke "{func}" ', '{operand_1}', '{operand_2})', '{expected_result})') unary_param_template = ('({assert_type} (invoke "{func}" ', '{operand})', '{expected_result})') binary_nan_template = ('({assert_type} (invoke "{func}" ', '{operand_1}', '{operand_2}))') unary_nan_template = ('({assert_type} (invoke "{func}" ', '{operand}))') def full_op_name(self, op_name): return self.LANE_TYPE + '.' + op_name @staticmethod def v128_const(lane, value): return SIMD().v128_const(value, lane) def gen_test_func_template(self): # Get function code template = Simdf32x4ArithmeticCase.gen_test_func_template(self) # Function template tpl_func = ' (func (export "{func}"){params} (result v128) ({op} {operand_1}{operand_2}))' # Const data for min and max lst_instr_with_const = [ [ [['0', '1', '2', '-3'], ['0', '2', '1', '3']], [['0', '1', '1', '-3'], ['0', '2', '2', '3']] ], [ [['0', '1', '2', '3'], ['0', '1', '2', '3']], [['0', '1', '2', '3'], ['0', '1', '2', '3']] ], [ [['0x00', '0x01', '0x02', '0x80000000'], ['0x00', '0x02', '0x01', '2147483648']], [['0x00', '0x01', '0x01', '0x80000000'], ['0x00', '0x02', '0x02', '2147483648']] ], [ [['0x00', '0x01', '0x02', '0x80000000'], ['0x00', '0x01', '0x02', '0x80000000']], [['0x00', '0x01', '0x02', '0x80000000'], ['0x00', '0x01', '0x02', '0x80000000']] ] ] # Assert data lst_oprt_with_const_assert = {} # Generate func and assert for op in self.BINARY_OPS: op_name = self.full_op_name(op) # Add comment for the case script " ;; [f32x4.min, f32x4.max] const vs const" template.insert(len(template)-1, ' ;; {} const vs const'.format(op_name)) # Add const vs const cases for case_data in lst_instr_with_const: func = "{op}_with_const_{index}".format(op=op_name, index=len(template)-7) template.insert(len(template)-1, tpl_func.format(func=func, params='', op=op_name, operand_1=self.v128_const('f32x4', case_data[0][0]), operand_2=' ' + self.v128_const('f32x4', case_data[0][1]))) ret_idx = 0 if op == 'min' else 1 if op not in lst_oprt_with_const_assert: lst_oprt_with_const_assert[op] = [] lst_oprt_with_const_assert[op].append([func, case_data[1][ret_idx]]) # Add comment for the case script " ;; [f32x4.min, f32x4.max] param vs const" template.insert(len(template)-1, ' ;; {} param vs const'.format(op_name)) case_cnt = 0 # Add param vs const cases for case_data in lst_instr_with_const: func = "{}_with_const_{}".format(op_name, len(template)-7) # Cross parameters and constants if case_cnt in (0, 3): operand_1 = '(local.get 0)' operand_2 = self.v128_const('f32x4', case_data[0][0]) else: operand_1 = self.v128_const('f32x4', case_data[0][0]) operand_2 = '(local.get 0)' template.insert(len(template)-1, tpl_func.format(func=func, params='(param v128)', op=op_name, operand_1=operand_1, operand_2=' ' + operand_2)) ret_idx = 0 if op == 'min' else 1 if op not in lst_oprt_with_const_assert: lst_oprt_with_const_assert[op] = [] lst_oprt_with_const_assert[op].append([func, case_data[0][1], case_data[1][ret_idx]]) case_cnt += 1 # Generate func for abs op_name = self.full_op_name('abs') func = "{}_with_const".format(op_name) template.insert(len(template)-1, '') template.insert(len(template)-1, tpl_func.format(func=func, params='', op=op_name, operand_1=self.v128_const('f32x4', ['-0', '-1', '-2', '-3']), operand_2='')) # Test different lanes go through different if-then clauses lst_diff_lane_vs_clause = [ [ 'f32x4.min', [['nan', '0', '0', '1'], ['0', '-nan', '1', '0']], [['nan:canonical', 'nan:canonical', '0', '0']], ['f32x4', 'f32x4', 'f32x4'] ], [ 'f32x4.min', [['nan', '0', '0', '0'], ['0', '-nan', '1', '0']], [['nan:canonical', 'nan:canonical', '0', '0']], ['f32x4', 'f32x4', 'f32x4'] ], [ 'f32x4.max', [['nan', '0', '0', '1'], ['0', '-nan', '1', '0']], [['nan:canonical', 'nan:canonical', '1', '1']], ['f32x4', 'f32x4', 'f32x4'] ], [ 'f32x4.max', [['nan', '0', '0', '0'], ['0', '-nan', '1', '0']], [['nan:canonical', 'nan:canonical', '1', '0']], ['f32x4', 'f32x4', 'f32x4'] ] ] # Template for assert tpl_assert = '(assert_return\n' \ ' (invoke "{func}"\n' \ ' {operand_1}\n' \ ' {operand_2}\n' \ ' )\n' \ ' {expected_result}\n' \ ')' lst_diff_lane_vs_clause_assert = [] # Add comment in wast script lst_diff_lane_vs_clause_assert.append('') lst_diff_lane_vs_clause_assert.append(';; Test different lanes go through different if-then clauses') for case_data in lst_diff_lane_vs_clause: lst_diff_lane_vs_clause_assert.append(';; {lane_type}'.format(lane_type=case_data[0])) lst_diff_lane_vs_clause_assert.append(tpl_assert.format( func=case_data[0], operand_1=self.v128_const(case_data[3][0], case_data[1][0]), operand_2=self.v128_const(case_data[3][1], case_data[1][1]), expected_result=self.v128_const(case_data[3][2], case_data[2][0]) )) lst_diff_lane_vs_clause_assert.append('') # Add test for operations with constant operands for key in lst_oprt_with_const_assert: op_name = self.full_op_name(key) case_cnt = 0 for case_data in lst_oprt_with_const_assert[key]: # Add comment for the param combination if case_cnt == 0: template.append(';; {} const vs const'.format(op_name)) if case_cnt == 4: template.append(';; {} param vs const'.format(op_name)) # Cross parameters and constants if case_cnt < 4: template.append(str(AssertReturn(case_data[0], [], self.v128_const('f32x4', case_data[1])))) else: template.append(str(AssertReturn(case_data[0], [self.v128_const('f32x4', case_data[1])], self.v128_const('f32x4', case_data[2])))) case_cnt += 1 # Generate and append f32x4.abs assert op_name = self.full_op_name('abs') func = "{}_with_const".format(op_name) template.append('') template.append(str(AssertReturn(func, [], self.v128_const('f32x4', ['0', '1', '2', '3'])))) template.extend(lst_diff_lane_vs_clause_assert) return template @property def combine_ternary_arith_test_data(self): return { 'min-max': [ ['1.125'] * 4, ['0.25'] * 4, ['0.125'] * 4, ['0.125'] * 4 ], 'max-min': [ ['1.125'] * 4, ['0.25'] * 4, ['0.125'] * 4, ['0.25'] * 4 ] } @property def combine_binary_arith_test_data(self): return { 'min-abs': [ ['-1.125'] * 4, ['0.125'] * 4, ['0.125'] * 4 ], 'max-abs': [ ['-1.125'] * 4, ['0.125'] * 4, ['1.125'] * 4 ] } def get_normal_case(self): """Normal test cases from WebAssembly core tests. """ cases = [] binary_test_data = [] unary_test_data = [] for op in self.BINARY_OPS: op_name = self.full_op_name(op) for operand1 in self.FLOAT_NUMBERS: for operand2 in self.FLOAT_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) if 'nan' not in result: # Normal floating point numbers as the results binary_test_data.append([op_name, operand1, operand2, result]) else: # Since the results contain the 'nan' string, the result literals would be # nan:canonical binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand1 in self.LITERAL_NUMBERS: for operand2 in self.LITERAL_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2, hex_form=False) binary_test_data.append([op_name, operand1, operand2, result]) for operand1 in self.NAN_NUMBERS: for operand2 in self.FLOAT_NUMBERS: if 'nan:' in operand1 or 'nan:' in operand2: # When the arguments contain 'nan:', the result literal is nan:arithmetic binary_test_data.append([op_name, operand1, operand2, 'nan:arithmetic']) else: # No 'nan' string found, then the result literal is nan:canonical binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand2 in self.NAN_NUMBERS: if 'nan:' in operand1 or 'nan:' in operand2: binary_test_data.append([op_name, operand1, operand2, 'nan:arithmetic']) else: binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for case in binary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(c, self.LANE_TYPE) for c in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) # Test opposite signs of zero lst_oppo_signs_0 = [ '\n;; Test opposite signs of zero', [ 'f32x4.min', [['0', '0', '-0', '+0'], ['+0', '-0', '+0', '-0']], [['0', '-0', '-0', '-0']], ['f32x4', 'f32x4', 'f32x4'] ], [ 'f32x4.min', [['-0', '-0', '-0', '-0'], ['+0', '+0', '+0', '+0']], [['-0', '-0', '-0', '-0']], ['f32x4', 'f32x4', 'f32x4'] ], [ 'f32x4.max', [['0', '0', '-0', '+0'], ['+0', '-0', '+0', '-0']], [['0', '0', '0', '0']], ['f32x4', 'f32x4', 'f32x4'] ], [ 'f32x4.max', [['-0', '-0', '-0', '-0'], ['+0', '+0', '+0', '+0']], [['+0', '+0', '+0', '+0']], ['f32x4', 'f32x4', 'f32x4'] ], '\n' ] # Generate test case for opposite signs of zero for case_data in lst_oppo_signs_0: if isinstance(case_data, str): cases.append(case_data) continue cases.append(str(AssertReturn(case_data[0], [self.v128_const(case_data[3][0], case_data[1][0]), self.v128_const(case_data[3][1], case_data[1][1])], self.v128_const(case_data[3][2], case_data[2][0])))) for operand in self.FLOAT_NUMBERS + self.LITERAL_NUMBERS: op_name = self.full_op_name('abs') hex_literal = True if operand in self.LITERAL_NUMBERS: hex_literal = False result = self.floatOp.unary_op('abs', operand, hex_form=hex_literal) # Abs operation is valid for all the floating point numbers unary_test_data.append([op_name, operand, result]) for case in unary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) self.get_unknown_operator_case(cases) return '\n'.join(cases) def get_unknown_operator_case(self, cases): """Unknown operator cases. """ tpl_assert = "(assert_malformed (module quote \"(memory 1) (func (result v128) " \ "({lane_type}.{op} {value}))\") \"unknown operator\")" unknown_op_cases = ['\n\n;; Unknown operators\n'] cases.extend(unknown_op_cases) for lane_type in ['i8x16', 'i16x8', 'i32x4', 'i64x2']: for op in self.BINARY_OPS: cases.append(tpl_assert.format(lane_type=lane_type, op=op, value=' '.join([self.v128_const('i32x4', '0')]*2))) def gen_test_cases(self): wast_filename = '../simd_{lane_type}.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: txt_test_case = self.get_all_cases() txt_test_case = txt_test_case.replace('f32x4 arithmetic', 'f32x4 [abs, min, max]') fp.write(txt_test_case) def gen_test_cases(): simd_f32x4_case = Simdf32x4Case() simd_f32x4_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f32x4_arith.py ================================================ #!/usr/bin/env python3 """ Generate f32x4 floating-point arithmetic operation cases. """ from simd_arithmetic import SimdArithmeticCase from simd_float_op import FloatingPointArithOp from test_assert import AssertReturn from simd import SIMD class F32ArithOp(FloatingPointArithOp): maximum = '0x1.fffffep+127' class Simdf32x4ArithmeticCase(SimdArithmeticCase): LANE_LEN = 4 LANE_TYPE = 'f32x4' floatOp = F32ArithOp() UNARY_OPS = ('neg', 'sqrt') BINARY_OPS = ('add', 'sub', 'mul', 'div') FLOAT_NUMBERS = ( '0x0p+0', '-0x0p+0', '0x1p-149', '-0x1p-149', '0x1p-126', '-0x1p-126', '0x1p-1', '-0x1p-1', '0x1p+0', '-0x1p+0', '0x1.921fb6p+2', '-0x1.921fb6p+2', '0x1.fffffep+127', '-0x1.fffffep+127', 'inf', '-inf' ) LITERAL_NUMBERS = ('0123456789', '0123456789e019', '0123456789e+019', '0123456789e-019', '0123456789.', '0123456789.e019', '0123456789.e+019', '0123456789.e-019', '0123456789.0123456789', '0123456789.0123456789e019', '0123456789.0123456789e+019', '0123456789.0123456789e-019', '0x0123456789ABCDEF', '0x0123456789ABCDEFp019', '0x0123456789ABCDEFp+019', '0x0123456789ABCDEFp-019', '0x0123456789ABCDEF.', '0x0123456789ABCDEF.p019', '0x0123456789ABCDEF.p+019', '0x0123456789ABCDEF.p-019', '0x0123456789ABCDEF.019aF', '0x0123456789ABCDEF.019aFp019', '0x0123456789ABCDEF.019aFp+019', '0x0123456789ABCDEF.019aFp-019' ) NAN_NUMBERS = ('nan', '-nan', 'nan:0x200000', '-nan:0x200000') def full_op_name(self, op_name): return self.LANE_TYPE + '.' + op_name @staticmethod def v128_const(lane, value): return '(v128.const {lane_type} {value})'.format(lane_type=lane, value=' '.join([str(value)] * 4)) @property def combine_ternary_arith_test_data(self): return { 'add-sub': [ ['1.125'] * 4, ['0.25'] * 4, ['0.125'] * 4, ['1.0'] * 4 ], 'sub-add': [ ['1.125'] * 4, ['0.25'] * 4, ['0.125'] * 4, ['1.25'] * 4 ], 'mul-add': [ ['1.25'] * 4, ['0.25'] * 4, ['0.25'] * 4, ['0.375'] * 4 ], 'mul-sub': [ ['1.125'] * 4, ['0.125'] * 4, ['0.25'] * 4, ['0.25'] * 4 ], 'div-add': [ ['1.125'] * 4, ['0.125'] * 4, ['0.25'] * 4, ['5.0'] * 4 ], 'div-sub': [ ['1.125'] * 4, ['0.125'] * 4, ['0.25'] * 4, ['4.0'] * 4 ], 'mul-div': [ ['1.125'] * 4, ['0.125'] * 4, ['0.25'] * 4, ['2.25'] * 4 ], 'div-mul': [ ['1.125'] * 4, ['4'] * 4, ['0.25'] * 4, ['18.0'] * 4 ] } @property def combine_binary_arith_test_data(self): return { 'add-neg': [ ['1.125'] * 4, ['0.125'] * 4, ['-1.0'] * 4 ], 'sub-neg': [ ['1.125'] * 4, ['0.125'] * 4, ['-1.25'] * 4 ], 'mul-neg': [ ['1.5'] * 4, ['0.25'] * 4, ['-0.375'] * 4 ], 'div-neg': [ ['1.5'] * 4, ['0.25'] * 4, ['-6'] * 4 ], 'add-sqrt': [ ['2.25'] * 4, ['0.25'] * 4, ['1.75'] * 4 ], 'sub-sqrt': [ ['2.25'] * 4, ['0.25'] * 4, ['1.25'] * 4 ], 'mul-sqrt': [ ['2.25'] * 4, ['0.25'] * 4, ['0.375'] * 4 ], 'div-sqrt': [ ['2.25'] * 4, ['0.25'] * 4, ['6'] * 4 ] } def get_normal_case(self): """Normal test cases from WebAssembly core tests """ cases = [] binary_test_data = [] unary_test_data = [] for op in self.BINARY_OPS: op_name = self.full_op_name(op) for operand1 in self.FLOAT_NUMBERS: for operand2 in self.FLOAT_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) if 'nan' not in result: # Normal floating point numbers as the results binary_test_data.append([op_name, operand1, operand2, result]) else: # Since the results contain the 'nan' string, the result literals would be # nan:canonical binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand1 in self.NAN_NUMBERS: for operand2 in self.FLOAT_NUMBERS: if 'nan:' in operand1 or 'nan:' in operand2: # When the arguments contain 'nan:', the result literal is nan:arithmetic # Consider the different order of arguments as different cases. binary_test_data.append([op_name, operand1, operand2, 'nan:arithmetic']) binary_test_data.append([op_name, operand2, operand1, 'nan:arithmetic']) else: # No 'nan' string found, then the result literal is nan:canonical. binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) binary_test_data.append([op_name, operand2, operand1, 'nan:canonical']) for operand2 in self.NAN_NUMBERS: if 'nan:' in operand1 or 'nan:' in operand2: binary_test_data.append([op_name, operand1, operand2, 'nan:arithmetic']) else: binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand in self.LITERAL_NUMBERS: if self.LANE_TYPE == 'f32x4': single_precision = True else: single_precision = False result = self.floatOp.binary_op(op, operand, operand, single_prec=single_precision) binary_test_data.append([op_name, operand, operand, result]) for case in binary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) for operand in self.FLOAT_NUMBERS + self.NAN_NUMBERS + self.LITERAL_NUMBERS: if 'nan:' in operand: unary_test_data.append([op_name, operand, 'nan:arithmetic']) elif 'nan' in operand: unary_test_data.append([op_name, operand, 'nan:canonical']) else: # Normal floating point numbers for sqrt operation op_name = self.full_op_name('sqrt') result = self.floatOp.float_sqrt(operand) if 'nan' not in result: # Get the sqrt value correctly unary_test_data.append([op_name, operand, result]) else: # unary_test_data.append([op_name, operand, 'nan:canonical']) for operand in self.FLOAT_NUMBERS + self.NAN_NUMBERS + self.LITERAL_NUMBERS: op_name = self.full_op_name('neg') result = self.floatOp.float_neg(operand) # Neg operation is valid for all the floating point numbers unary_test_data.append([op_name, operand, result]) for case in unary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) self.mixed_nan_test(cases) return '\n'.join(cases) @property def mixed_sqrt_nan_test_data(self): return { "sqrt_canon": [ ('-1.0', 'nan', '4.0', '9.0'), ('nan:canonical', 'nan:canonical', '2.0', '3.0') ], 'sqrt_arith': [ ('nan:0x200000', '-nan:0x200000', '16.0', '25.0'), ('nan:arithmetic', 'nan:arithmetic', '4.0', '5.0') ], 'sqrt_mixed': [ ('-inf', 'nan:0x200000', '36.0', '49.0'), ('nan:canonical', 'nan:arithmetic', '6.0', '7.0') ] } def mixed_nan_test(self, cases): """Mixed f32x4 tests when only expects NaNs in a subset of lanes. """ mixed_cases = ['\n\n;; Mixed f32x4 tests when some lanes are NaNs', '(module\n'] cases.extend(mixed_cases) for test_type, test_data in sorted(self.mixed_sqrt_nan_test_data.items()): func = [' (func (export "{lane}_{t}") (result v128)'.format( lane=self.LANE_TYPE, t=test_type), ' ({lane}.{op} (v128.const {lane} {value})))'.format( lane=self.LANE_TYPE, op=test_type.split('_')[0], value=' '.join(test_data[0]))] cases.extend(func) cases.append(')\n') for test_type, test_data in sorted(self.mixed_sqrt_nan_test_data.items()): cases.append('(assert_return (invoke "{lane}_{t}") (v128.const {lane} {result}))'.format( lane=self.LANE_TYPE, t=test_type, result=' '.join(test_data[1]))) def gen_test_cases(): simd_f32x4_arith = Simdf32x4ArithmeticCase() simd_f32x4_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f32x4_cmp.py ================================================ #!/usr/bin/env python3 """ This file is used for generating simd_f32x4_cmp.wast file. Which inherites from `SimdCmpCase` class, overloads the `get_test_cases` method, and reset the Test Case template. The reason why this is different from other cmp files is that f32x4 only has 6 comparison instructions but with amounts of test datas. """ import struct from simd_compare import SimdCmpCase # Generate f32x4 test case class Simdf32x4CmpCase(SimdCmpCase): LANE_TYPE = 'f32x4' BINARY_OPS = ['eq', 'ne', 'lt', 'le', 'gt', 'ge'] # Test template, using this template to generate tests with variable test datas. CASE_TXT = """;; Test all the {lane_type} comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) (f32x4.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) (f32x4.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x v128) (param $y v128) (result v128) (f32x4.lt (local.get $x) (local.get $y))) (func (export "le") (param $x v128) (param $y v128) (result v128) (f32x4.le (local.get $x) (local.get $y))) (func (export "gt") (param $x v128) (param $y v128) (result v128) (f32x4.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x v128) (param $y v128) (result v128) (f32x4.ge (local.get $x) (local.get $y))) ) {normal_case} ;; Type check (assert_invalid (module (func (result v128) (f32x4.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.ne (i64.const 0) (f64.const 0)))) "type mismatch") ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.eq (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.ge (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.gt (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.le (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.lt (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.ne (local.get $x) (local.get $y)))") "unknown operator") ;; Combination (module (memory 1) (func (export "eq-in-block") (block (drop (block (result v128) (f32x4.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ne-in-block") (block (drop (block (result v128) (f32x4.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "lt-in-block") (block (drop (block (result v128) (f32x4.lt (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "le-in-block") (block (drop (block (result v128) (f32x4.le (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "gt-in-block") (block (drop (block (result v128) (f32x4.gt (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ge-in-block") (block (drop (block (result v128) (f32x4.ge (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-eq") (drop (f32x4.eq (f32x4.eq (f32x4.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.eq (f32x4.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ne") (drop (f32x4.ne (f32x4.ne (f32x4.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.ne (f32x4.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-lt") (drop (f32x4.lt (f32x4.lt (f32x4.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.lt (f32x4.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-le") (drop (f32x4.le (f32x4.le (f32x4.le (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.le (f32x4.le (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-gt") (drop (f32x4.gt (f32x4.gt (f32x4.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.gt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.gt (f32x4.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.gt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ge") (drop (f32x4.ge (f32x4.ge (f32x4.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ge (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.ge (f32x4.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ge (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop (f32x4.ge (f32x4.eq (f32x4.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.ne (f32x4.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "eq-in-block")) (assert_return (invoke "ne-in-block")) (assert_return (invoke "lt-in-block")) (assert_return (invoke "le-in-block")) (assert_return (invoke "gt-in-block")) (assert_return (invoke "ge-in-block")) (assert_return (invoke "nested-eq")) (assert_return (invoke "nested-ne")) (assert_return (invoke "nested-lt")) (assert_return (invoke "nested-le")) (assert_return (invoke "nested-gt")) (assert_return (invoke "nested-ge")) (assert_return (invoke "as-param")) """ # Overloads base class method and sets test data for f32x4. def get_case_data(self): case_data = [] operand1 = ('nan', '0x1p-149', '-nan:0x200000', '-inf', '0x1.921fb6p+2', '0x1p+0', '-0x1.fffffep+127', '-0x0p+0', '-0x1p-1', '0x1.fffffep+127', '-nan', '-0x1p-149', '-0x1p-126', '0x1p-1', '-0x1.921fb6p+2', 'nan:0x200000', '0x0p+0', 'inf', '-0x1p+0', '0x1p-126') operand2 = ('nan', '0x1p-149', '-nan:0x200000', '-inf', '0x1.921fb6p+2', '0x1p+0', '-0x1.fffffep+127', '-0x0p+0', '-0x1p-1', '0x1.fffffep+127', '-nan', '-0x1p-149', '-0x1p-126', '0x1p-1', '-0x1.921fb6p+2', 'nan:0x200000', '0x0p+0', 'inf', '-0x1p+0', '0x1p-126') LITERAL_NUMBERS = ( '0123456789e019', '0123456789e-019', '0123456789.e019', '0123456789.e+019', '0123456789.0123456789') Ops = ('eq', 'ne', 'lt', 'le', 'gt', 'ge') # Combinations between operand1 and operand2 for op in Ops: case_data.append(['#', op]) for param1 in operand1: for param2 in operand2: case_data.append([op, [param1, param2], self.operate(op, param1, param2), ['f32x4', 'f32x4', 'i32x4']]) for param1 in LITERAL_NUMBERS: for param2 in LITERAL_NUMBERS: case_data.append([op, [param1, param2], self.operate(op, param1, param2), ['f32x4', 'f32x4', 'i32x4']]) # eq case_data.append(['#', 'eq']) # f32x4.eq (f32x4) (i8x16) case_data.append(['#', 'f32x4.eq (f32x4) (i8x16)']) case_data.append(['eq', [['-1', '0', '1', '2.0'], ['-1', '-1', '-1', '-1', '0', '0', '0', '0', '1', '1', '1', '1', '2', '2', '2']], ['0', '-1', '0', '0'], ['f32x4', 'i8x16', 'i32x4']]) # f32x4.eq (f32x4) (i16x8) case_data.append(['#', 'f32x4.eq (f32x4) (i16x8)']) case_data.append(['eq', [['-1', '0', '1', '2.0'], ['-1', '-1', '0', '0', '1', '1', '2']], ['0', '-1', '0', '0'], ['f32x4', 'i16x8', 'i32x4']]) # f32x4.eq (f32x4) (i32x4) case_data.append(['#', 'f32x4.eq (f32x4) (i32x4)']) case_data.append(['eq', [['-1', '0', '1', '2.0'], ['3212836864', '0', '1', '2']], ['-1 -1', '0', '0', ''], ['f32x4', 'i32x4', 'i32x4']]) # ne case_data.append(['#', 'ne']) # f32x4.ne (f32x4) (i8x16) case_data.append(['#', 'f32x4.ne (f32x4) (i8x16)']) case_data.append(['ne', [['-1', '0', '1', '2.0'], ['-1', '-1', '-1', '-1', '0', '0', '0', '0', '1', '1', '1', '1', '2', '2', '2']], ['-1', '0', '-1', '-1'], ['f32x4', 'i8x16', 'i32x4']]) # f32x4.ne (f32x4) (i16x8) case_data.append(['#', 'f32x4.ne (f32x4) (i16x8)']) case_data.append(['ne', [['-1', '0', '1', '2.0'], ['-1', '-1', '0', '0', '1', '1', '2']], ['-1', '0', '-1', '-1'], ['f32x4', 'i16x8', 'i32x4']]) # f32x4.ne (f32x4) (i32x4) case_data.append(['#', 'f32x4.ne (f32x4) (i32x4)']) case_data.append(['ne', [['-1', '0', '1', '2.0'], ['3212836864', '0', '1', '2']], ['0', '0', '-1', '-1'], ['f32x4', 'i32x4', 'i32x4']]) # lt case_data.append(['#', 'lt']) # f32x4.lt (f32x4) (i8x16) case_data.append(['#', 'f32x4.lt (f32x4) (i8x16)']) case_data.append(['lt', [['-1', '0', '1', '2.0'], ['-1', '-1', '-1', '-1', '0', '0', '0', '0', '1', '1', '1', '1', '2', '2', '2']], ['0', '0', '0', '0'], ['f32x4', 'i8x16', 'i32x4']]) # f32x4.lt (f32x4) (i16x8) case_data.append(['#', 'f32x4.lt (f32x4) (i16x8)']) case_data.append(['lt', [['-1', '0', '1', '2.0'], ['-1', '-1', '0', '0', '1', '1', '2']], ['0', '0', '0', '0'], ['f32x4', 'i16x8', 'i32x4']]) # f32x4.lt (f32x4) (i32x4) case_data.append(['#', 'f32x4.lt (f32x4) (i32x4)']) case_data.append(['lt', [['-1', '0', '1', '2.0'], ['3212836864', '0', '1', '2']], ['0', '0', '0', '0'], ['f32x4', 'i32x4', 'i32x4']]) # le case_data.append(['#', 'le']) # f32x4.le (f32x4) (i8x16) case_data.append(['#', 'f32x4.le (f32x4) (i8x16)']) case_data.append(['le', [['-1', '0', '1', '2.0'], ['-1', '-1', '-1', '-1', '0', '0', '0', '0', '1', '1', '1', '1', '2', '2', '2']], ['0', '-1', '0', '0'], ['f32x4', 'i8x16', 'i32x4']]) # f32x4.le (f32x4) (i16x8) case_data.append(['#', 'f32x4.le (f32x4) (i16x8)']) case_data.append(['le', [['-1', '0', '1', '2.0'], ['-1', '-1', '0', '0', '1', '1', '2']], ['0', '-1', '0', '0'], ['f32x4', 'i16x8', 'i32x4']]) # f32x4.le (f32x4) (i32x4) case_data.append(['#', 'f32x4.le (f32x4) (i32x4)']) case_data.append(['le', [['-1', '0', '1', '2.0'], ['3212836864', '0', '1', '2']], ['-1', '-1', '0', '0'], ['f32x4', 'i32x4', 'i32x4']]) # gt case_data.append(['#', 'gt']) # f32x4.gt (f32x4) (i8x16) case_data.append(['#', 'f32x4.gt (f32x4) (i8x16)']) case_data.append(['gt', [['-1', '0', '1', '2.0'], ['-1', '-1', '-1', '-1', '0', '0', '0', '0', '1', '1', '1', '1', '2', '2', '2']], ['0', '0', '-1', '-1'], ['f32x4', 'i8x16', 'i32x4']]) # f32x4.gt (f32x4) (i16x8) case_data.append(['#', 'f32x4.gt (f32x4) (i16x8)']) case_data.append(['gt', [['-1', '0', '1', '2.0'], ['-1', '-1', '0', '0', '1', '1', '2']], ['0', '0', '-1', '-1'], ['f32x4', 'i16x8', 'i32x4']]) # f32x4.gt (f32x4) (i32x4) case_data.append(['#', 'f32x4.gt (f32x4) (i32x4)']) case_data.append(['gt', [['-1', '0', '1', '2.0'], ['3212836864', '0', '1', '2']], ['0', '0', '-1', '-1'], ['f32x4', 'i32x4', 'i32x4']]) # ge case_data.append(['#', 'ge']) # f32x4.ge (f32x4) (i8x16) case_data.append(['#', 'f32x4.ge (f32x4) (i8x16)']) case_data.append(['ge', [['-1', '0', '1', '2.0'], ['-1', '-1', '-1', '-1', '0', '0', '0', '0', '1', '1', '1', '1', '2', '2', '2']], ['0', '-1', '-1', '-1'], ['f32x4', 'i8x16', 'i32x4']]) # f32x4.ge (f32x4) (i16x8) case_data.append(['#', 'f32x4.ge (f32x4) (i16x8)']) case_data.append(['ge', [['-1', '0', '1', '2.0'], ['-1', '-1', '0', '0', '1', '1', '2']], ['0', '-1', '-1', '-1'], ['f32x4', 'i16x8', 'i32x4']]) # f32x4.ge (f32x4) (i32x4) case_data.append(['#', 'f32x4.ge (f32x4) (i32x4)']) case_data.append(['ge', [['-1', '0', '1', '2.0'], ['3212836864', '0', '1', '2']], ['-1', '-1', '-1', '-1'], ['f32x4', 'i32x4', 'i32x4']]) return case_data def special_float2dec(self, p): if p in ('0x0p+0', '-0x0p+0'): return 0.0 if p == 'inf': return float(340282366920938463463374607431768211456) if p == '-inf': return -float(340282366920938463463374607431768211456) if '0x' in p: f = float.fromhex(p) else: f = float(p) return struct.unpack('f', struct.pack('f', f))[0] def operate(self, op, p1, p2): for p in (p1, p2): if 'nan' in p: if op == 'ne': return '-1' else: return '0' num1 = self.special_float2dec(p1) num2 = self.special_float2dec(p2) if op == 'eq': if num1 == num2: return '-1' if op == 'ne': if num1 != num2: return '-1' if op == 'lt': if num1 < num2: return '-1' if op == 'le': if num1 <= num2: return '-1' if op == 'gt': if num1 > num2: return '-1' if op == 'ge': if num1 >= num2: return '-1' return '0' def gen_test_cases(): f32x4 = Simdf32x4CmpCase() f32x4.gen_test_cases() if __name__ == '__main__': f32x4 = Simdf32x4CmpCase() f32x4.gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f32x4_pmin_pmax.py ================================================ #!/usr/bin/env python3 """ Generate f32x4 [pmin, pmax] cases. """ from simd_f32x4_arith import Simdf32x4ArithmeticCase from simd_float_op import FloatingPointSimpleOp from simd import SIMD from test_assert import AssertReturn class Simdf32x4PminPmaxCase(Simdf32x4ArithmeticCase): UNARY_OPS = () BINARY_OPS = ('pmin', 'pmax',) floatOp = FloatingPointSimpleOp() def get_combine_cases(self): return '' def get_normal_case(self): """Normal test cases from WebAssembly core tests. """ cases = [] binary_test_data = [] unary_test_data = [] for op in self.BINARY_OPS: op_name = self.full_op_name(op) for operand1 in self.FLOAT_NUMBERS + self.LITERAL_NUMBERS: for operand2 in self.FLOAT_NUMBERS + self.LITERAL_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) binary_test_data.append([op_name, operand1, operand2, result]) # pmin and pmax always return operand1 if either operand is a nan for operand1 in self.NAN_NUMBERS: for operand2 in self.FLOAT_NUMBERS + self.LITERAL_NUMBERS + self.NAN_NUMBERS: binary_test_data.append([op_name, operand1, operand2, operand1]) for operand2 in self.NAN_NUMBERS: for operand1 in self.FLOAT_NUMBERS + self.LITERAL_NUMBERS: binary_test_data.append([op_name, operand1, operand2, operand1]) for case in binary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(c, self.LANE_TYPE) for c in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) self.get_unknown_operator_case(cases) return '\n'.join(cases) def get_unknown_operator_case(self, cases): """Unknown operator cases. """ tpl_assert = "(assert_malformed (module quote \"(memory 1) (func (result v128) " \ "({lane_type}.{op} {value}))\") \"unknown operator\")" unknown_op_cases = ['\n\n;; Unknown operators\n'] cases.extend(unknown_op_cases) for lane_type in ['i8x16', 'i16x8', 'i32x4', 'i64x2']: for op in self.BINARY_OPS: cases.append(tpl_assert.format(lane_type=lane_type, op=op, value=' '.join([self.v128_const('i32x4', '0')]*2))) def gen_test_cases(self): wast_filename = '../simd_{lane_type}_pmin_pmax.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: txt_test_case = self.get_all_cases() txt_test_case = txt_test_case.replace( self.LANE_TYPE + ' arithmetic', self.LANE_TYPE + ' [pmin, pmax]') fp.write(txt_test_case) def gen_test_cases(): simd_f32x4_pmin_pmax_case = Simdf32x4PminPmaxCase() simd_f32x4_pmin_pmax_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f32x4_rounding.py ================================================ #!/usr/bin/env python3 """ Generate f32x4 [ceil, floor, trunc, nearest] cases. """ from simd_f32x4_arith import Simdf32x4ArithmeticCase from simd_float_op import FloatingPointRoundingOp from simd import SIMD from test_assert import AssertReturn class Simdf32x4RoundingCase(Simdf32x4ArithmeticCase): UNARY_OPS = ('ceil', 'floor', 'trunc', 'nearest') BINARY_OPS = () floatOp = FloatingPointRoundingOp() def get_combine_cases(self): return '' def get_normal_case(self): """Normal test cases from WebAssembly core tests. """ cases = [] unary_test_data = [] for op in self.UNARY_OPS: op_name = self.full_op_name(op) for operand in self.FLOAT_NUMBERS: result = self.floatOp.unary_op(op, operand) if 'nan' in result: unary_test_data.append([op_name, operand, 'nan:canonical']) else: unary_test_data.append([op_name, operand, result]) for operand in self.LITERAL_NUMBERS: result = self.floatOp.unary_op(op, operand, hex_form=False) unary_test_data.append([op_name, operand, result]) for operand in self.NAN_NUMBERS: if 'nan:' in operand: unary_test_data.append([op_name, operand, 'nan:arithmetic']) else: unary_test_data.append([op_name, operand, 'nan:canonical']) for case in unary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) self.get_unknown_operator_case(cases) return '\n'.join(cases) def get_unknown_operator_case(self, cases): """Unknown operator cases. """ tpl_assert = "(assert_malformed (module quote \"(memory 1) (func (result v128) " \ "({lane_type}.{op} {value}))\") \"unknown operator\")" unknown_op_cases = ['\n\n;; Unknown operators\n'] cases.extend(unknown_op_cases) for lane_type in ['i8x16', 'i16x8', 'i32x4', 'i64x2']: for op in self.UNARY_OPS: cases.append(tpl_assert.format(lane_type=lane_type, op=op, value=self.v128_const('i32x4', '0'))) def gen_test_cases(self): wast_filename = '../simd_{lane_type}_rounding.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: txt_test_case = self.get_all_cases() txt_test_case = txt_test_case.replace( self.LANE_TYPE + ' arithmetic', self.LANE_TYPE + ' [ceil, floor, trunc, nearest]') fp.write(txt_test_case) def gen_test_cases(): simd_f32x4_case = Simdf32x4RoundingCase() simd_f32x4_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f64x2.py ================================================ #!/usr/bin/env python3 """ Generate f64x2 [abs, min, max] cases. """ from simd_f32x4 import Simdf32x4Case from simd_f32x4_arith import Simdf32x4ArithmeticCase from test_assert import AssertReturn from simd import SIMD class Simdf64x2Case(Simdf32x4Case): LANE_TYPE = 'f64x2' FLOAT_NUMBERS = ( '0x0p+0', '-0x0p+0', '0x1p-1074', '-0x1p-1074', '0x1p-1022', '-0x1p-1022', '0x1p-1', '-0x1p-1', '0x1p+0', '-0x1p+0', '0x1.921fb54442d18p+2', '-0x1.921fb54442d18p+2', '0x1.fffffffffffffp+1023', '-0x1.fffffffffffffp+1023', 'inf', '-inf' ) LITERAL_NUMBERS = ('01234567890123456789e038', '01234567890123456789e-038', '0123456789.e038', '0123456789.e+038', '-01234567890123456789.01234567890123456789' ) NAN_NUMBERS = ('nan', '-nan', 'nan:0x4000000000000', '-nan:0x4000000000000') def gen_test_func_template(self): # Get function code template = Simdf32x4ArithmeticCase.gen_test_func_template(self) # Function template tpl_func = ' (func (export "{func}"){params} (result v128) ({op} {operand_1}{operand_2}))' # Raw data list specific for "const vs const" and "param vs const" tests" const_test_raw_data = [ [ [['0', '1'], ['0', '2']], [['0', '1'], ['0', '2']] ], [ [['2', '-3'], ['1', '3']], [['1', '-3'], ['2', '3']] ], [ [['0', '1'], ['0', '1']], [['0', '1'], ['0', '1']] ], [ [['2', '3'], ['2', '3']], [['2', '3'], ['2', '3']] ], [ [['0x00', '0x01'], ['0x00', '0x02']], [['0x00', '0x01'], ['0x00', '0x02']] ], [ [['0x02', '0x80000000'], ['0x01', '2147483648']], [['0x01', '0x80000000'], ['0x02', '2147483648']] ], [ [['0x00', '0x01'], ['0x00', '0x01']], [['0x00', '0x01'], ['0x00', '0x01']] ], [ [['0x02', '0x80000000'], ['0x02', '0x80000000']], [['0x02', '0x80000000'], ['0x02', '0x80000000']] ] ] # Test data list combined with `const_test_raw_data` and corresponding ops and function names # specific for "const vs const" and "param vs const" tests const_test_data = {} # Generate func and assert for op in self.BINARY_OPS: op_name = self.full_op_name(op) # Add comment for the case script " ;; [f64x2.min, f64x2.max] const vs const" template.insert(len(template)-1, ' ;; {} const vs const'.format(op_name)) # Add const vs const cases for case_data in const_test_raw_data: func = "{op}_with_const_{index}".format(op=op_name, index=len(template)-7) template.insert(len(template)-1, tpl_func.format(func=func, params='', op=op_name, operand_1=self.v128_const('f64x2', case_data[0][0]), operand_2=' ' + self.v128_const('f64x2', case_data[0][1]))) ret_idx = 0 if op == 'min' else 1 if op not in const_test_data: const_test_data[op] = [] const_test_data[op].append([func, case_data[1][ret_idx]]) # Add comment for the case script " ;; [f64x2.min, f64x2.max] param vs const" template.insert(len(template)-1, ' ;; {} param vs const'.format(op_name)) case_cnt = 0 # Add param vs const cases for case_data in const_test_raw_data: func = "{op}_with_const_{index}".format(op=op_name, index=len(template)-7) # Cross parameters and constants if case_cnt in (0, 3): operand_1 = '(local.get 0)' operand_2 = self.v128_const('f64x2', case_data[0][0]) else: operand_1 = self.v128_const('f64x2', case_data[0][0]) operand_2 = '(local.get 0)' template.insert(len(template)-1, tpl_func.format(func=func, params=' (param v128)', op=op_name, operand_1=operand_1, operand_2=' ' + operand_2)) ret_idx = 0 if op == 'min' else 1 if op not in const_test_data: const_test_data[op] = [] const_test_data[op].append([func, case_data[0][1], case_data[1][ret_idx]]) case_cnt += 1 # Generate func for abs op_name = self.full_op_name('abs') template.insert(len(template)-1, '') func = "{op}_with_const_{index}".format(op=op_name, index=35) template.insert(len(template)-1, tpl_func.format(func=func, params='', op=op_name, operand_1=self.v128_const('f64x2', ['-0', '-1']), operand_2='')) func = "{op}_with_const_{index}".format(op=op_name, index=36) template.insert(len(template)-1, tpl_func.format(func=func, params='', op=op_name, operand_1=self.v128_const('f64x2', ['-2', '-3']), operand_2='')) # Test different lanes go through different if-then clauses lst_diff_lane_vs_clause = [ [ 'f64x2.min', [['nan', '0'], ['0', '1']], [['nan:canonical', '0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.min', [['0', '1'], ['-nan', '0']], [['nan:canonical', '0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.min', [['0', '1'], ['-nan', '1']], [['nan:canonical', '1']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.max', [['nan', '0'], ['0', '1']], [['nan:canonical', '1']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.max', [['0', '1'], ['-nan', '0']], [['nan:canonical', '1']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.max', [['0', '1'], ['-nan', '1']], [['nan:canonical', '1']], ['f64x2', 'f64x2', 'f64x2'] ] ] # Template for assert tpl_assert = '(assert_return\n' \ ' (invoke "{func}"\n' \ ' {operand_1}\n' \ ' {operand_2}\n' \ ' )\n' \ ' {expected_result}\n' \ ')' lst_diff_lane_vs_clause_assert = [] # Add comment in wast script lst_diff_lane_vs_clause_assert.append('') lst_diff_lane_vs_clause_assert.append(';; Test different lanes go through different if-then clauses') for case_data in lst_diff_lane_vs_clause: lst_diff_lane_vs_clause_assert.append(';; {lane_type}'.format(lane_type=case_data[0])) lst_diff_lane_vs_clause_assert.append(tpl_assert.format( func=case_data[0], operand_1=self.v128_const(case_data[3][0], case_data[1][0]), operand_2=self.v128_const(case_data[3][1], case_data[1][1]), expected_result=self.v128_const(case_data[3][2], case_data[2][0]) )) lst_diff_lane_vs_clause_assert.append('') # Add test for operations with constant operands for key in const_test_data: op_name = self.full_op_name(key) case_cnt = 0 for case_data in const_test_data[key]: # Add comment for the param combination if case_cnt == 0: template.append(';; {} const vs const'.format(op_name)) if case_cnt == 4: template.append(';; {} param vs const'.format(op_name)) # Cross parameters and constants if case_cnt < 8: template.append(str(AssertReturn(case_data[0], [], self.v128_const('f64x2', case_data[1])))) else: template.append(str(AssertReturn(case_data[0], [self.v128_const('f64x2', case_data[1])], self.v128_const('f64x2', case_data[2])))) case_cnt += 1 # Generate and append f64x2.abs assert op_name = self.full_op_name('abs') template.append('') func = "{op}_with_const_{index}".format(op=op_name, index=35) template.append(str(AssertReturn(func, [], self.v128_const('f64x2', ['0', '1'])))) func = "{op}_with_const_{index}".format(op=op_name, index=36) template.append(str(AssertReturn(func, [], self.v128_const('f64x2', ['2', '3'])))) template.extend(lst_diff_lane_vs_clause_assert) return template @property def combine_ternary_arith_test_data(self): # This method overrides the base class method from SimdArithmeticCase # used for generating test data for min and max combination tests. return { 'min-max': [ ['1.125'] * 2, ['0.25'] * 2, ['0.125'] * 2, ['0.125'] * 2 ], 'max-min': [ ['1.125'] * 2, ['0.25'] * 2, ['0.125'] * 2, ['0.25'] * 2 ] } @property def combine_binary_arith_test_data(self): # This method overrides the base class method from SimdArithmeticCase # used for generating test data for min, max and abs combination tests. return { 'min-abs': [ ['-1.125'] * 2, ['0.125'] * 2, ['0.125'] * 2 ], 'max-abs': [ ['-1.125'] * 2, ['0.125'] * 2, ['1.125'] * 2 ] } def get_normal_case(self): """Normal test cases from WebAssembly core tests """ cases = [] binary_test_data = [] unary_test_data = [] for op in self.BINARY_OPS: op_name = self.full_op_name(op) for operand1 in self.FLOAT_NUMBERS: for operand2 in self.FLOAT_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) if 'nan' not in result: # Normal floating point numbers as the results binary_test_data.append([op_name, operand1, operand2, result]) else: # Since the results contain the 'nan' string, the result literals would be # nan:canonical binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand1 in self.NAN_NUMBERS: for operand2 in self.FLOAT_NUMBERS: if 'nan:' in operand1 or 'nan:' in operand2: # When the arguments contain 'nan:', the result literal is nan:arithmetic binary_test_data.append([op_name, operand1, operand2, 'nan:arithmetic']) else: # No 'nan' string found, then the result literal is nan:canonical binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand2 in self.NAN_NUMBERS: if 'nan:' in operand1 or 'nan:' in operand2: binary_test_data.append([op_name, operand1, operand2, 'nan:arithmetic']) else: binary_test_data.append([op_name, operand1, operand2, 'nan:canonical']) for operand1 in self.LITERAL_NUMBERS: for operand2 in self.LITERAL_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2, hex_form=False) binary_test_data.append([op_name, operand1, operand2, result]) for case in binary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) # Test opposite signs of zero lst_oppo_signs_0 = [ '\n;; Test opposite signs of zero', [ 'f64x2.min', [['0', '0'], ['+0', '-0']], [['0', '-0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.min', [['-0', '+0'], ['+0', '-0']], [['-0', '-0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.min', [['-0', '-0'], ['+0', '+0']], [['-0', '-0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.max', [['0', '0'], ['+0', '-0']], [['0', '0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.max', [['-0', '+0'], ['+0', '-0']], [['0', '0']], ['f64x2', 'f64x2', 'f64x2'] ], [ 'f64x2.max', [['-0', '-0'], ['+0', '+0']], [['+0', '+0']], ['f64x2', 'f64x2', 'f64x2'] ], '\n' ] # Generate test case for opposite signs of zero for case_data in lst_oppo_signs_0: if isinstance(case_data, str): cases.append(case_data) continue cases.append(str(AssertReturn(case_data[0], [self.v128_const(case_data[3][0], case_data[1][0]), self.v128_const(case_data[3][1], case_data[1][1])], self.v128_const(case_data[3][2], case_data[2][0])))) for p in self.FLOAT_NUMBERS + self.LITERAL_NUMBERS: op_name = self.full_op_name('abs') hex_literal = True if p in self.LITERAL_NUMBERS: hex_literal = False result = self.floatOp.unary_op('abs', p, hex_form=hex_literal) # Abs operation is valid for all the floating point numbers unary_test_data.append([ op_name, p, result]) for case in unary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(c, self.LANE_TYPE) for c in case[1:-1]], SIMD.v128_const(case[-1], self.LANE_TYPE)))) return '\n'.join(cases) def gen_test_cases(self): wast_filename = '../simd_{lane_type}.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: txt_test_case = self.get_all_cases() txt_test_case = txt_test_case.replace('f64x2 arithmetic', 'f64x2 [abs, min, max]') fp.write(txt_test_case) def gen_test_cases(): simd_f64x2_case = Simdf64x2Case() simd_f64x2_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f64x2_arith.py ================================================ #!/usr/bin/env python3 """ Generate f32x4 floating-point arithmetic operation cases. """ from simd_f32x4_arith import Simdf32x4ArithmeticCase from simd_float_op import FloatingPointArithOp class F64ArithOp(FloatingPointArithOp): maximum = '0x1.fffffffffffffp+1023' class Simdf64x2ArithmeticCase(Simdf32x4ArithmeticCase): LANE_LEN = 2 LANE_TYPE = 'f64x2' floatOp = F64ArithOp() FLOAT_NUMBERS = ( '0x0p+0', '-0x0p+0', '0x1p-1022', '-0x1p-1022', '0x1p-1', '-0x1p-1', '0x1p+0', '-0x1p+0', '0x1.921fb54442d18p+2', '-0x1.921fb54442d18p+2', '0x1.fffffffffffffp+1023', '-0x1.fffffffffffffp+1023', '0x0.0000000000001p-1022', '0x0.0000000000001p-1022', 'inf', '-inf' ) LITERAL_NUMBERS = ('0123456789', '0123456789e019', '0123456789e+019', '0123456789e-019', '0123456789.', '0123456789.e019', '0123456789.e+019', '0123456789.e-019', '0123456789.0123456789', '0123456789.0123456789e019', '0123456789.0123456789e+019', '0123456789.0123456789e-019', '0x0123456789ABCDEFabcdef', '0x0123456789ABCDEFabcdefp019', '0x0123456789ABCDEFabcdefp+019', '0x0123456789ABCDEFabcdefp-019', '0x0123456789ABCDEFabcdef.', '0x0123456789ABCDEFabcdef.p019', '0x0123456789ABCDEFabcdef.p+019', '0x0123456789ABCDEFabcdef.p-019', '0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef', '0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019', '0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019', '0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019' ) NAN_NUMBERS = ('nan', '-nan', 'nan:0x4000000000000', '-nan:0x4000000000000') @staticmethod def v128_const(lane, value): return '(v128.const {lane_type} {value})'.format(lane_type=lane, value=' '.join([str(value)] * 2)) @property def combine_ternary_arith_test_data(self): return { 'add-sub': [ ['1.125'] * 2, ['0.25'] * 2, ['0.125'] * 2, ['1.0'] * 2 ], 'sub-add': [ ['1.125'] * 2, ['0.25'] * 2, ['0.125'] * 2, ['1.25'] * 2 ], 'mul-add': [ ['1.25'] * 2, ['0.25'] * 2, ['0.25'] * 2, ['0.375'] * 2 ], 'mul-sub': [ ['1.125'] * 2, ['0.125'] * 2, ['0.25'] * 2, ['0.25'] * 2 ], 'div-add': [ ['1.125'] * 2, ['0.125'] * 2, ['0.25'] * 2, ['5.0'] * 2 ], 'div-sub': [ ['1.125'] * 2, ['0.125'] * 2, ['0.25'] * 2, ['4.0'] * 2 ], 'mul-div': [ ['1.125'] * 2, ['0.125'] * 2, ['0.25'] * 2, ['2.25'] * 2 ], 'div-mul': [ ['1.125'] * 2, ['4'] * 2, ['0.25'] * 2, ['18.0'] * 2 ] } @property def combine_binary_arith_test_data(self): return { 'add-neg': [ ['1.125'] * 2, ['0.125'] * 2, ['-1.0'] * 2 ], 'sub-neg': [ ['1.125'] * 2, ['0.125'] * 2, ['-1.25'] * 2 ], 'mul-neg': [ ['1.5'] * 2, ['0.25'] * 2, ['-0.375'] * 2 ], 'div-neg': [ ['1.5'] * 2, ['0.25'] * 2, ['-6'] * 2 ], 'add-sqrt': [ ['2.25'] * 2, ['0.25'] * 2, ['1.75'] * 2 ], 'sub-sqrt': [ ['2.25'] * 2, ['0.25'] * 2, ['1.25'] * 2 ], 'mul-sqrt': [ ['2.25'] * 2, ['0.25'] * 2, ['0.375'] * 2 ], 'div-sqrt': [ ['2.25'] * 2, ['0.25'] * 2, ['6'] * 2 ] } def get_invalid_cases(self): return super().get_invalid_cases().replace('32', '64') @property def mixed_nan_test_data(self): return { 'neg_canon': [ ('nan', '1.0'), ('nan:canonical', '-1.0'), ], 'sqrt_canon': [ ('4.0', '-nan'), ('2.0', 'nan:canonical'), ], 'add_arith': [ ('nan:0x8000000000000', '1.0'), ('nan', '1.0'), ('nan:arithmetic', '2.0'), ], 'sub_arith': [ ('1.0', '-1.0'), ('-nan', '1.0'), ('nan:canonical', '-2.0'), ], 'mul_mixed': [ ('nan:0x8000000000000', '1.0'), ('2.0', 'nan'), ('nan:arithmetic', 'nan:canonical') ], 'div_mixed': [ ('nan', '1.0'), ('2.0', '-nan:0x8000000000000'), ('nan:canonical', 'nan:arithmetic') ] } def mixed_nan_test(self, cases): """Mixed f64x2 tests when only expects NaNs in a subset of lanes.""" mixed_cases = [ '\n;; Mixed f64x2 tests when some lanes are NaNs', '(module'] for test_type, test_data in sorted(self.mixed_nan_test_data.items()): op = test_type.split('_')[0] if op in self.UNARY_OPS: mixed_cases.extend([ ' (func (export "{lane}_{t}") (result v128)'.format(lane=self.LANE_TYPE, t=test_type), ' ({lane}.{op} (v128.const {lane} {param})))'.format( lane=self.LANE_TYPE, op=op, param=' '.join(test_data[0]))]) if op in self.BINARY_OPS: mixed_cases.extend([ ' (func (export "{lane}_{t}") (result v128)'.format(lane=self.LANE_TYPE, t=test_type), ' ({lane}.{op} (v128.const {lane} {param1}) (v128.const {lane} {param2})))'.format( lane=self.LANE_TYPE, op=op, param1=' '.join(test_data[0]), param2=' '.join(test_data[1]))]) mixed_cases.append(')\n') for test_type, test_data in sorted(self.mixed_nan_test_data.items()): mixed_cases.append('(assert_return (invoke "{lane}_{t}") (v128.const {lane} {result}))'.format( lane=self.LANE_TYPE, t=test_type, result=' '.join(test_data[-1]) )) cases.extend(mixed_cases) def gen_test_cases(): simd_f64x2_arith = Simdf64x2ArithmeticCase() simd_f64x2_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f64x2_cmp.py ================================================ #!/usr/bin/env python3 """ This file is used for generating simd_f64x2_cmp.wast file. Which inherites from `SimdArithmeticCase` class, overloads the `get_test_cases` method, and reset the Test Case template. The reason why this is different from other cmp files is that f64x2 only has 6 comparison instructions but with amounts of test datas. """ from simd_arithmetic import SimdArithmeticCase from simd_float_op import FloatingPointCmpOp from test_assert import AssertReturn from simd import SIMD class Simdf64x2CmpCase(SimdArithmeticCase): LANE_LEN = 4 LANE_TYPE = 'f64x2' UNARY_OPS = () BINARY_OPS = ('eq', 'ne', 'lt', 'le', 'gt', 'ge',) floatOp = FloatingPointCmpOp() FLOAT_NUMBERS_SPECIAL = ('0x1p-1074', '-inf', '0x1.921fb54442d18p+2', '0x1p+0', '-0x1.fffffffffffffp+1023', '-0x0p+0', '-0x1p-1', '0x1.fffffffffffffp+1023', '-0x1p-1074', '-0x1p-1022', '0x1p-1', '-0x1.921fb54442d18p+2', '0x0p+0', 'inf', '-0x1p+0', '0x1p-1022' ) LITERAL_NUMBERS = ('01234567890123456789e038', '01234567890123456789e-038', '0123456789.e038', '0123456789.e+038', '01234567890123456789.01234567890123456789' ) FLOAT_NUMBERS_NORMAL = ('-1', '0', '1', '2.0') NAN_NUMBERS = ('nan', '-nan', 'nan:0x4000000000000', '-nan:0x4000000000000') def full_op_name(self, op_name): return self.LANE_TYPE + '.' + op_name @staticmethod def v128_const(lane, value): lane_cnt = 2 if lane in ['f64x2', 'i64x2'] else 4 return '(v128.const {lane_type} {value})'.format(lane_type=lane, value=' '.join([str(value)] * lane_cnt)) @property def combine_ternary_arith_test_data(self): return {} @property def combine_binary_arith_test_data(self): return ['f64x2.eq', 'f64x2.ne', 'f64x2.lt', 'f64x2.le', 'f64x2.gt', 'f64x2.ge'] def get_combine_cases(self): combine_cases = [';; combination\n(module (memory 1)'] # append funcs binary_func_template = ' (func (export "{op}-in-block")\n' \ ' (block\n' \ ' (drop\n' \ ' (block (result v128)\n' \ ' ({op}\n' \ ' (block (result v128) (v128.load (i32.const 0)))\n' \ ' (block (result v128) (v128.load (i32.const 1)))\n' \ ' )\n' \ ' )\n' \ ' )\n' \ ' )\n' \ ' )' for func in self.combine_binary_arith_test_data: combine_cases.append(binary_func_template.format(op=func)) binary_func_template = ' (func (export "nested-{func}")\n' \ ' (drop\n' \ ' ({func}\n' \ ' ({func}\n' \ ' ({func}\n' \ ' (v128.load (i32.const 0))\n' \ ' (v128.load (i32.const 1))\n' \ ' )\n' \ ' ({func}\n' \ ' (v128.load (i32.const 2))\n' \ ' (v128.load (i32.const 3))\n' \ ' )\n' \ ' )\n' \ ' ({func}\n' \ ' ({func}\n' \ ' (v128.load (i32.const 0))\n' \ ' (v128.load (i32.const 1))\n' \ ' )\n' \ ' ({func}\n' \ ' (v128.load (i32.const 2))\n' \ ' (v128.load (i32.const 3))\n' \ ' )\n' \ ' )\n' \ ' )\n' \ ' )\n' \ ' )' \ for func in self.combine_binary_arith_test_data: combine_cases.append(binary_func_template.format(func=func)) combine_cases.append(' (func (export "as-param")\n' ' (drop\n' ' (f64x2.eq\n' ' (f64x2.ne\n' ' (f64x2.lt\n' ' (v128.load (i32.const 0))\n' ' (v128.load (i32.const 1))\n' ' )\n' ' (f64x2.le\n' ' (v128.load (i32.const 2))\n' ' (v128.load (i32.const 3))\n' ' )\n' ' )\n' ' (f64x2.gt\n' ' (f64x2.ge\n' ' (v128.load (i32.const 0))\n' ' (v128.load (i32.const 1))\n' ' )\n' ' (f64x2.eq\n' ' (v128.load (i32.const 2))\n' ' (v128.load (i32.const 3))\n' ' )\n' ' )\n' ' )\n' ' )\n' ' )') combine_cases.append(')') # append assert binary_case_template = ('(assert_return (invoke "{func}-in-block"))') for func in self.combine_binary_arith_test_data: combine_cases.append(binary_case_template.format(func=func)) binary_case_template = ('(assert_return (invoke "nested-{func}"))') for func in self.combine_binary_arith_test_data: combine_cases.append(binary_case_template.format(func=func)) combine_cases.append('(assert_return (invoke "as-param"))\n') return '\n'.join(combine_cases) def get_normal_case(self): """Normal test cases from WebAssembly core tests """ cases = [] binary_test_data = [] unary_test_data = [] for op in self.BINARY_OPS: op_name = self.full_op_name(op) for operand1 in self.FLOAT_NUMBERS_SPECIAL: for operand2 in self.FLOAT_NUMBERS_SPECIAL + self.NAN_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) binary_test_data.append([op_name, operand1, operand2, result]) for operand1 in self.LITERAL_NUMBERS: for operand2 in self.LITERAL_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) binary_test_data.append([op_name, operand1, operand2, result]) for operand1 in self.NAN_NUMBERS: for operand2 in self.FLOAT_NUMBERS_SPECIAL + self.NAN_NUMBERS: result = self.floatOp.binary_op(op, operand1, operand2) binary_test_data.append([op_name, operand1, operand2, result]) for op in self.BINARY_OPS: op_name = self.full_op_name(op) for operand1 in self.FLOAT_NUMBERS_NORMAL: for operand2 in self.FLOAT_NUMBERS_NORMAL: result = self.floatOp.binary_op(op, operand1, operand2) binary_test_data.append([op_name, operand1, operand2, result]) for case in binary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], 'i64x2')))) for case in unary_test_data: cases.append(str(AssertReturn(case[0], [SIMD.v128_const(elem, self.LANE_TYPE) for elem in case[1:-1]], SIMD.v128_const(case[-1], 'i64x2')))) self.get_unknown_operator_case(cases) return '\n'.join(cases) def get_unknown_operator_case(self, cases): """Unknown operator cases. """ tpl_assert = "(assert_malformed (module quote \"(memory 1) (func " \ " (param $x v128) (param $y v128) (result v128) " \ "({lane_type}.{op} (local.get $x) (local.get $y)))\") \"unknown operator\")" cases.append('\n\n;; unknown operators') for lane_type in ['f2x64']: for op in self.BINARY_OPS: cases.append(tpl_assert.format(lane_type=lane_type, op=op)) def gen_test_cases(self): wast_filename = '../simd_{lane_type}_cmp.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: txt_test_case = self.get_all_cases() txt_test_case = txt_test_case.replace('f64x2 arithmetic', 'f64x2 comparison') fp.write(txt_test_case) def gen_test_cases(): simd_f64x2_cmp = Simdf64x2CmpCase() simd_f64x2_cmp.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f64x2_pmin_pmax.py ================================================ #!/usr/bin/env python3 """ Generate f64x2 [pmin, pmax] cases. """ from simd_f32x4_pmin_pmax import Simdf32x4PminPmaxCase from simd_f64x2_arith import Simdf64x2ArithmeticCase from simd_float_op import FloatingPointSimpleOp from simd import SIMD from test_assert import AssertReturn class Simdf64x2PminPmaxCase(Simdf32x4PminPmaxCase): LANE_TYPE = 'f64x2' FLOAT_NUMBERS = Simdf64x2ArithmeticCase.FLOAT_NUMBERS LITERAL_NUMBERS = Simdf64x2ArithmeticCase.LITERAL_NUMBERS NAN_NUMBERS = Simdf64x2ArithmeticCase.NAN_NUMBERS def gen_test_cases(): simd_f64x2_pmin_pmax_case = Simdf64x2PminPmaxCase() simd_f64x2_pmin_pmax_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_f64x2_rounding.py ================================================ #!/usr/bin/env python3 """ Generate f64x2 [ceil, floor, trunc, nearest] cases. """ from simd_f32x4_rounding import Simdf32x4RoundingCase from simd_f64x2 import Simdf64x2Case from simd_f64x2_arith import Simdf64x2ArithmeticCase from simd_float_op import FloatingPointRoundingOp from simd import SIMD from test_assert import AssertReturn class Simdf64x2RoundingCase(Simdf32x4RoundingCase): LANE_TYPE = 'f64x2' FLOAT_NUMBERS = Simdf64x2ArithmeticCase.FLOAT_NUMBERS LITERAL_NUMBERS = Simdf64x2ArithmeticCase.LITERAL_NUMBERS NAN_NUMBERS = Simdf64x2ArithmeticCase.NAN_NUMBERS def gen_test_cases(): simd_f64x2_case = Simdf64x2RoundingCase() simd_f64x2_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_float_op.py ================================================ #!/usr/bin/env python3 """Common floating-point number operations for f32x4 and f64x2""" from abc import abstractmethod import math import struct class FloatingPointOp: maximum = None @abstractmethod def binary_op(self, op: str, p1: str, p2: str) -> str: pass def of_string(self, value: str) -> float: if '0x' in value: return float.fromhex(value) else: return float(value) def is_hex(self, value:str) -> bool: return '0x' in value def to_single_precision(self, value: float) -> str: # Python only has doubles, when reading in float, we need to convert to # single-precision first. return struct.unpack('f', struct.pack('f', value))[0] class FloatingPointArithOp(FloatingPointOp): """Common arithmetic ops for both f32x4 and f64x2: neg, sqrt, add, sub, mul, div """ def binary_op(self, op: str, p1: str, p2: str, single_prec=False) -> str: """Binary operation on p1 and p2 with the operation specified by op :param op: add, sub, mul, div :param p1: float number in hex :param p2: float number in hex :return: """ hex_form = self.is_hex(p1) or self.is_hex(p2) f1 = self.of_string(p1) f2 = self.of_string(p2) if op == 'add': if 'inf' in p1 and 'inf' in p2 and p1 != p2: return '-nan' result = f1 + f2 elif op == 'sub': if 'inf' in p1 and 'inf' in p2 and p1 == p2: return '-nan' result = f1 - f2 elif op == 'mul': if '0x0p+0' in p1 and 'inf' in p2 or 'inf' in p1 and '0x0p+0' in p2: return '-nan' if single_prec: # For some literals, f32x4.mul operation may cause precision lost. # Use struct.unpack('f', struct.pack('f', literal)) to compensate # single precision lost of f32 f1 = struct.unpack('f', struct.pack('f', f1))[0] f2 = struct.unpack('f', struct.pack('f', f2))[0] result = struct.unpack('f', struct.pack('f', f1 * f2))[0] else: result = f1 * f2 elif op == 'div': if '0x0p+0' in p1 and '0x0p+0' in p2: return '-nan' if 'inf' in p1 and 'inf' in p2: return '-nan' try: result = f1 / f2 return self.get_valid_float(result, self.maximum, hex_form) except ZeroDivisionError: if p1[0] == p2[0]: return 'inf' elif p1 == 'inf' and p2 == '0x0p+0': return 'inf' else: return '-inf' else: raise Exception('Unknown binary operation') return self.get_valid_float(result, self.maximum, hex_form) def get_valid_float(self, value, maximum_literals, hex_form=False): if value > float.fromhex(maximum_literals): return 'inf' if value < float.fromhex('-' + maximum_literals): return '-inf' if hex_form: return value.hex() else: return str(value) def float_sqrt(self, p): if p == '-0x0p+0': return '-0x0p+0' try: if '0x' in p: f = float.fromhex(p) result = float.hex(math.sqrt(f)) else: f = float(p) result = str(math.sqrt(f)) except ValueError: result = '-nan' return result def float_neg(self, p): if p == 'nan': return '-nan' try: if '0x' in p: f = float.fromhex(p) result = float.hex(-f) else: f = float(p) result = str(-f) except ValueError: if p.startswith('nan:'): return '-' + p if p.startswith('-nan:'): return p[1:] return result class FloatingPointSimpleOp(FloatingPointOp): """Common simple ops for both f32x4 and f64x2: abs, min, max, pmin, pmax""" def binary_op(self, op: str, p1: str, p2: str, hex_form=True) -> str: """Binary operation on p1 and p2 with the operation specified by op :param op: min, max, :param p1: float number in hex :param p2: float number in hex :return: """ f1 = self.of_string(p1) f2 = self.of_string(p2) if '-nan' in [p1, p2] and 'nan' in [p1, p2]: return p1 if 'nan' in [p1, p2]: return 'nan' if '-nan' in [p1, p2]: return '-nan' # pmin and pmax semantics follow C++'s std::min std::max if op == 'pmin': r = f2 if f2 < f1 else f1 if hex_form: return r.hex() else: return str(r) if op == 'pmax': r = f2 if f1 < f2 else f1 if hex_form: return r.hex() else: return str(r) if op == 'min': if '-0x0p+0' in [p1, p2] and '0x0p+0' in [p1, p2]: return '-0x0p+0' if hex_form: return min(f1, f2).hex() else: return p1 if f1 <= f2 else p2 elif op == 'max': if '-0x0p+0' in [p1, p2] and '0x0p+0' in [p1, p2]: return '0x0p+0' if hex_form: return max(f1, f2).hex() else: return p1 if f1 > f2 else p2 else: raise Exception('Unknown binary operation: {}'.format(op)) def unary_op(self, op: str, p1: str, hex_form=True) -> str: """Unnary operation on p1 with the operation specified by op :param op: abs, :param p1: float number in hex :return: """ f1 = self.of_string(p1) if op == 'abs': if hex_form: return abs(f1).hex() else: return p1 if not p1.startswith('-') else p1[1:] raise Exception('Unknown unary operation: {}'.format(op)) class FloatingPointCmpOp(FloatingPointOp): def binary_op(self, op: str, p1: str, p2: str) -> str: """Binary operation on p1 and p2 with the operation specified by op :param op: eq, ne, lt, le, gt, ge :param p1: float number in hex :param p2: float number in hex :return: """ # ne # if either p1 or p2 is a NaN, then return True if op == 'ne' and ('nan' in p1.lower() or 'nan' in p2.lower()): return '-1' # other instructions # if either p1 or p2 is a NaN, then return False if 'nan' in p1.lower() or 'nan' in p2.lower(): return '0' f1 = self.of_string(p1) f2 = self.of_string(p2) if op == 'eq': return '-1' if f1 == f2 else '0' elif op == 'ne': return '-1' if f1 != f2 else '0' elif op == 'lt': return '-1' if f1 < f2 else '0' elif op == 'le': return '-1' if f1 <= f2 else '0' elif op == 'gt': return '-1' if f1 > f2 else '0' elif op == 'ge': return '-1' if f1 >= f2 else '0' else: raise Exception('Unknown binary operation') class FloatingPointRoundingOp(FloatingPointOp): def unary_op(self, op: str, p1: str, hex_form=True) -> str: """Unnary operation on p1 with the operation specified by op :param op: ceil, floor, trunc, nearest :param p1: float number in hex :return: """ f1 = self.of_string(p1) if 'nan' in p1: return 'nan' if 'inf' in p1: return p1 # The rounding ops don't treat -0.0 correctly, e.g.: # math.ceil(-0.4) returns +0.0, so copy the sign. elif op == 'ceil': r = math.copysign(math.ceil(f1), f1) if hex_form: return r.hex() else: return str(r) elif op == 'floor': r = math.copysign(math.floor(f1), f1) if hex_form: return r.hex() else: return str(r) elif op == 'trunc': r = math.copysign(math.trunc(f1), f1) if hex_form: return r.hex() else: return str(r) elif op == 'nearest': r = math.copysign(round(f1), f1) if hex_form: return r.hex() else: return str(r) else: raise Exception('Unknown binary operation') ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i16x8_arith.py ================================================ #!/usr/bin/env python3 """ Generate i16x8 integer arithmetic operation cases. """ from simd_arithmetic import SimdArithmeticCase class SimdI16x8ArithmeticCase(SimdArithmeticCase): LANE_LEN = 8 LANE_TYPE = 'i16x8' @property def hex_binary_op_test_data(self): return [ ('0x3fff', '0x4000'), ('0x4000', '0x4000'), ('-0x3fff', '-0x4000'), ('-0x4000', '-0x4000'), ('-0x4000', '-0x4001'), ('0x7fff', '0x7fff'), ('0x7fff', '0x01'), ('0x8000', '-0x01'), ('0x7fff', '0x8000'), ('0x8000', '0x8000'), ('0xffff', '0x01'), ('0xffff', '0xffff') ] @property def hex_unary_op_test_data(self): return ['0x01', '-0x01', '-0x8000', '-0x7fff', '0x7fff', '0x8000', '0xffff'] @property def underscore_literal_test_data(self): return { 'i16x8.add': [ [['012_345', '056_789'], '03_598', ['i16x8'] * 3], [['0x0_1234', '0x0_5678'], '0x0_68ac', ['i16x8'] * 3] ], 'i16x8.sub': [ [['056_789', '012_345'], '044_444', ['i16x8'] * 3], [['0x0_5678', '0x0_1234'], '0x0_4444', ['i16x8'] * 3] ], 'i16x8.mul': [ [['012_345', '056_789'], '021_613', ['i16x8'] * 3], [['0x0_1234', '0x0_cdef'], '0x0_a28c', ['i16x8'] * 3] ] } @property def i16x8_i8x16_test_data(self): return { 'i16x8.add': [ [['0x7fff', ['0', '0x80'] * 8], '-1', ['i16x8', 'i8x16', 'i16x8']], [['1', '255'], '0', ['i16x8', 'i8x16', 'i16x8']] ], 'i16x8.sub': [ [['0x7fff', ['0', '0x80'] * 8], '-1', ['i16x8', 'i8x16', 'i16x8']], [['1', '255'], '0x02', ['i16x8', 'i8x16', 'i16x8']] ], 'i16x8.mul': [ [['0x1000', '0x10'], '0', ['i16x8', 'i8x16', 'i16x8']], [['65535', '255'], '0x01', ['i16x8', 'i8x16', 'i16x8']] ] } @property def i16x8_i32x4_test_data(self): return { 'i16x8.add': [ [['0x7fff', '0x80008000'], '-1', ['i16x8', 'i32x4', 'i16x8']], [['1', '0xffffffff'], '0', ['i16x8', 'i32x4', 'i16x8']] ], 'i16x8.sub': [ [['0x7fff', '0x80008000'], '-1', ['i16x8', 'i32x4', 'i16x8']], [['1', '0xffffffff'], '0x02', ['i16x8', 'i32x4', 'i16x8']] ], 'i16x8.mul': [ [['0x8000', '0x00020002'], '0', ['i16x8', 'i32x4', 'i16x8']], [['65535', '0xffffffff'], '0x01', ['i16x8', 'i32x4', 'i16x8']] ] } @property def i16x8_f32x4_test_data(self): return { 'i16x8.add': [ [['0x8000', '+0.0'], '0x8000', ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '-0.0'], ['0x8000', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '1.0'], ['0x8000', '0xbf80'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '-1.0'], ['0x8000', '0x3f80'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0x01', '0x7f81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0x01', '0xff81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0x7fc1'] * 4, ['i16x8', 'f32x4', 'i16x8']] ], 'i16x8.sub': [ [['0x8000', '+0.0'], '0x8000', ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '-0.0'], ['0x8000', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '1.0'], ['0x8000', '0x4080'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '-1.0'], ['0x8000', '0xc080'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0x01', '0x8081'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0x01', '0x81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0x8041'] * 4, ['i16x8', 'f32x4', 'i16x8']] ], 'i16x8.mul': [ [['0x8000', '+0.0'], '0', ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '-0.0'], '0', ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '1.0'], '0', ['i16x8', 'f32x4', 'i16x8']], [['0x8000', '-1.0'], '0', ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0', '0x7f80'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0', '0xff80'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0', '0x7fc0'] * 4, ['i16x8', 'f32x4', 'i16x8']] ] } @property def combine_dec_hex_test_data(self): return { 'i16x8.add': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0'] * 8, ['i16x8'] * 3] ], 'i16x8.sub': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0', '0x02', '0x04', '0x06', '0x08', '0x0a', '0x0c', '0x0e'], ['i16x8'] * 3] ], 'i16x8.mul': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0', '0xffff', '0xfffc', '0xfff7', '0xfff0', '0xffe7', '0xffdc', '0xffcf'], ['i16x8'] * 3] ] } @property def range_test_data(self): return { 'i16x8.add': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], [str(i * 3) for i in range(8)], ['i16x8'] * 3] ], 'i16x8.sub': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], [str(-i) for i in range(8)], ['i16x8'] * 3] ], 'i16x8.mul': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], ['0', '0x02', '0x08', '0x12', '0x20', '0x32', '0x48', '0x62'], ['i16x8'] * 3] ] } @property def full_bin_test_data(self): return [ self.i16x8_i8x16_test_data, self.i16x8_i32x4_test_data, self.i16x8_f32x4_test_data, self.combine_dec_hex_test_data, self.range_test_data, self.underscore_literal_test_data ] def gen_test_cases(): simd_i16x8_arith = SimdI16x8ArithmeticCase() simd_i16x8_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i16x8_cmp.py ================================================ #!/usr/bin/env python3 """ This file is used for generating i16x8 related test cases which inherites from the 'SimdCmpCase' class and overloads with the 'get_test_cases' method. """ from simd_compare import SimdCmpCase # Generate i16x8 test case class Simdi16x8CmpCase(SimdCmpCase): LANE_TYPE = 'i16x8' BINARY_OPS = ['eq', 'ne', 'lt_s', 'lt_u', 'le_s', 'le_u', 'gt_s', 'gt_u', 'ge_s', 'ge_u'] # Overloads base class method and sets test data for i16x8. def get_case_data(self): case_data = [] # eq # i16x8.eq (i16x8) (i16x8) case_data.append(['#', 'eq']) case_data.append(['#', 'i16x8.eq (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['eq', ['0xFFFF', '0xFFFF'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0x0000', '0x0000'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0xF0F0', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0x0F0F', '0x0F0F'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['eq', ['0xFFFF', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0xFFFF', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0x8080', '32896'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0x8080', '-32640'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['eq', ['-1', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0', '0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['65535', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['65535', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['65535', '0'], ['65535', '0']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0', '65535'], ['0', '65535']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['eq', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['eq', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['eq', ['0x0F0F', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['-1', '-1', '0', '0', '0', '0', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.eq (i16x8) (i8x16) case_data.append(['#', 'i16x8.eq (i16x8) (i8x16)']) case_data.append(['eq', ['0xFFFF', '0xFF'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['eq', ['65535', '255'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['eq', ['0', '0'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['eq', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['eq', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['eq', [['-128', '-128', '0', '0', '1', '1', '255', '255'], ['-128', '0', '1', '255']], ['0', '0', '-1', '-1', '0', '0', '0', '0'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['eq', ['0x5555', '0xAA'], '0', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.eq (i16x8) (i32x4) case_data.append(['#', 'i16x8.eq (i16x8) (i32x4)']) case_data.append(['eq', ['0xFFFF', '0xFFFFFFFF'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', ['65535', '4294967295'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', ['0', '0'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', [['65535', '0', '1', '32768'], ['65535', '0', '1', '32768']], ['-1', '0', '-1', '-1', '-1', '0', '-1', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', ['0x5555', '0xAAAAAAAA'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['eq', ['012_345', '12345'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0x0_1234', '0x1234'], '-1', ['i16x8', 'i16x8', 'i16x8']]) # ne # i16x8.ne (i16x8) (i16x8) case_data.append(['#', 'ne']) case_data.append(['#', 'i16x8.ne (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ne', ['0xFFFF', '0xFFFF'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0x0000', '0x0000'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0xF0F0', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0x0F0F', '0x0F0F'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ne', ['0xFFFF', '65535'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0xFFFF', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0x8080', '32896'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0x8080', '-32640'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ne', ['-1', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0', '0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['255', '255'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['65535', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['255', '0'], ['255', '0']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0', '255'], ['0', '255']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['255', '32767', '-0', '0', '1', '2', '65534', '65535'], ['255', '32767', '0', '0', '1', '2', '-2', '-1']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ne', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['ne', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ne', ['0x0F0F', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['0x8081', '0x8283', '0xFDFE', '0xFF00', '0x0001', '0x027F', '0x80FD', '0xFEFF'], ['65279', '33021', '639', '1', '65280', '65022', '33411', '32897']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', [['128', '129', '130', '131', '-0', '255', '32766', '32767'], ['32767', '32766', '255', '-0', '131', '130', '129', '28']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # i16x8.ne (i16x8) (i8x16) case_data.append(['#', 'i16x8.ne (i16x8) (i8x16)']) case_data.append(['ne', ['0xFFFF', '0xFF'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ne', ['65535', '255'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ne', ['0', '0'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ne', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ne', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ne', [['-128', '-128', '0', '0', '1', '1', '255', '255'], ['-128', '0', '1', '255']], ['-1', '-1', '0', '0', '-1', '-1', '-1', '-1'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ne', ['0x5555', '0xAA'], '-1', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.ne (i16x8) (i32x4) case_data.append(['#', 'i16x8.ne (i16x8) (i32x4)']) case_data.append(['ne', ['0xFFFF', '0xFFFFFFFF'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', ['65535', '4294967295'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', ['0', '0'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '-1', '0', '0', '0', '-1', '0', '-1'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', ['0x5555', '0xAAAAAAAA'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ne', ['012_345', '12345'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ne', ['0x0_1234', '0x1234'], '0', ['i16x8', 'i16x8', 'i16x8']]) # lt_s # i16x8.lt_s (i16x8) (i16x8) case_data.append(['#', 'lt_s']) case_data.append(['#', 'i16x8.lt_s (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_s', ['0xFFFF', '0xFFFF'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0x0000', '0x0000'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0xF0F0', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0x0F0F', '0x0F0F'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0xFFFF', '65535'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0xFFFF', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0x8080', '32896'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0x8080', '-32640'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['-1', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0', '0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['255', '255'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['65535', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['255', '0'], ['255', '0']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0', '255'], ['0', '255']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['255', '32767', '-0', '0', '1', '2', '65534', '65535'], ['255', '32767', '0', '0', '1', '2', '-2', '-1']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['lt_s', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['lt_s', ['0x0F0F', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['0', '0', '-1', '0', '0', '0', '0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['0x8081', '0x8283', '0xFDFE', '0xFF00', '0x0001', '0x027F', '0x80FD', '0xFEFF'], ['65279', '33021', '639', '1', '65280', '65022', '33411', '32897']], ['-1', '0', '-1', '-1', '0', '0', '-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', [['128', '129', '130', '131', '-0', '255', '32766', '32767'], ['32767', '32766', '255', '-0', '131', '130', '129', '28']], ['-1', '-1', '-1', '0', '-1', '0', '0', '0'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.lt_s (i16x8) (i8x16) case_data.append(['#', 'i16x8.lt_s (i16x8) (i8x16)']) case_data.append(['lt_s', ['0xFFFF', '0xFF'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_s', ['65535', '255'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_s', ['0', '0'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_s', [['-128', '-128', '0', '0', '1', '1', '255', '255'], ['-128', '0', '1', '255']], ['0', '0', '0', '0', '-1', '-1', '0', '0'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_s', ['0x5555', '0xAA'], '0', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.lt_s (i16x8) (i32x4) case_data.append(['#', 'i16x8.lt_s (i16x8) (i32x4)']) case_data.append(['lt_s', ['0xFFFF', '0xFFFFFFFF'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', ['65535', '4294967295'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', ['0', '0'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '-1', '0', '0', '0', '0', '0', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', ['0x5555', '0xAAAAAAAA'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_s', ['012_345', '12345'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_s', ['0x0_1234', '0x1234'], '0', ['i16x8', 'i16x8', 'i16x8']]) # lt_u # i16x8.lt_u (i16x8) (i16x8) case_data.append(['#', 'lt_u']) case_data.append(['#', 'i16x8.lt_u (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_u', ['0xFFFF', '0xFFFF'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0x0000', '0x0000'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0xF0F0', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0x0F0F', '0x0F0F'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['lt_u', ['0xFFFF', '65535'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0xFFFF', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0x8080', '32896'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0x8080', '-32640'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['lt_u', ['-1', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0', '0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['255', '255'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['65535', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['255', '0'], ['255', '0']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0', '255'], ['0', '255']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['255', '32767', '-0', '0', '1', '2', '65534', '65535'], ['255', '32767', '0', '0', '1', '2', '-2', '-1']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['lt_u', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['lt_u', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['lt_u', ['0x0F0F', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['-1', '-1', '-1', '0', '0', '0', '0', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['0x8081', '0x8283', '0xFDFE', '0xFF00', '0x0001', '0x027F', '0x80FD', '0xFEFF'], ['65279', '33021', '639', '1', '65280', '65022', '33411', '32897']], ['-1', '0', '0', '0', '-1', '-1', '-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', [['128', '129', '130', '131', '-0', '255', '32766', '32767'], ['32767', '32766', '255', '-0', '131', '130', '129', '28']], ['-1', '-1', '-1', '0', '-1', '0', '0', '0'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.lt_u (i16x8) (i8x16) case_data.append(['#', 'i16x8.lt_u (i16x8) (i8x16)']) case_data.append(['lt_u', ['0xFFFF', '0xFF'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_u', ['65535', '255'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_u', ['0', '0'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_u', [['-128', '-128', '0', '0', '1', '1', '255', '255'], ['-128', '0', '1', '255']], ['0', '-1'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['lt_u', ['0x5555', '0xAA'], '-1', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.lt_u (i16x8) (i32x4) case_data.append(['#', 'i16x8.lt_u (i16x8) (i32x4)']) case_data.append(['lt_u', ['0xFFFF', '0xFFFFFFFF'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', ['65535', '4294967295'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', ['0', '0'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '-1', '0', '0', '0', '0', '0', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', ['0x5555', '0xAAAAAAAA'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['lt_u', ['012_345', '12345'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['lt_u', ['0x0_1234', '0x1234'], '0', ['i16x8', 'i16x8', 'i16x8']]) # le_s # i16x8.le_s (i16x8) (i16x8) case_data.append(['#', 'le_s']) case_data.append(['#', 'i16x8.le_s (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_s', ['0xFFFF', '0xFFFF'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0x0000', '0x0000'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0xF0F0', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0x0F0F', '0x0F0F'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_s', ['0xFFFF', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0xFFFF', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0x8080', '32896'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0x8080', '-32640'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_s', ['-1', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0', '0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['65535', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['65535', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['65535', '0'], ['65535', '0']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0', '65535'], ['0', '65535']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_s', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['le_s', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['le_s', ['0x0F0F', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['0', '0', '-1', '0', '0', '0', '0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], ['-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['-1', '-1', '-1', '-1', '0', '0', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.le_s (i16x8) (i8x16) case_data.append(['#', 'i16x8.le_s (i16x8) (i8x16)']) case_data.append(['le_s', ['0xFFFF', '0xFF'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_s', ['65535', '255'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_s', ['0', '0'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_s', [['-128', '-128', '0', '0', '1', '1', '255', '255'], ['-128', '0', '1', '255']], ['0', '0', '-1', '-1', '-1', '-1', '0', '0'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_s', ['0x5555', '0xAA'], '0', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.le_s (i16x8) (i32x4) case_data.append(['#', 'i16x8.le_s (i16x8) (i32x4)']) case_data.append(['le_s', ['0xFFFF', '0xFFFFFFFF'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', ['65535', '4294967295'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', ['0', '0'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '-1', '-1', '-1', '-1', '0', '-1', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', ['0x5555', '0xAAAAAAAA'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_s', ['012_345', '12345'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_s', ['0x0_1234', '0x1234'], '-1', ['i16x8', 'i16x8', 'i16x8']]) # le_u # i16x8.le_u (i16x8) (i16x8) case_data.append(['#', 'le_u']) case_data.append(['#', 'i16x8.le_u (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_u', ['0xFFFF', '0xFFFF'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0x0000', '0x0000'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0xF0F0', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0x0F0F', '0x0F0F'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_u', ['0xFFFF', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0xFFFF', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0x8080', '32896'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0x8080', '-32640'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_u', ['-1', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0', '0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['65535', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['65535', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['65535', '0'], ['65535', '0']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0', '65535'], ['0', '65535']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_u', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['le_u', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['le_u', ['0x0F0F', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['-1', '-1', '-1', '0', '0', '0', '0', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], ['-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['-1', '-1', '-1', '0', '-1', '0', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.le_u (i16x8) (i8x16) case_data.append(['#', 'i16x8.le_u (i16x8) (i8x16)']) case_data.append(['le_u', ['0xFFFF', '0xFF'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_u', ['65535', '255'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_u', ['0', '0'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '0', '-1', '-1', '-1', '-1', '-1', '-1'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['le_u', ['0x5555', '0xAA'], '-1', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.le_u (i16x8) (i32x4) case_data.append(['#', 'i16x8.le_u (i16x8) (i32x4)']) case_data.append(['le_u', ['0xFFFF', '0xFFFFFFFF'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', ['65535', '4294967295'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', ['0', '0'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '-1', '-1', '-1', '-1', '0', '-1', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', ['0x5555', '0xAAAAAAAA'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['le_u', ['012_345', '12345'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['le_u', ['0x0_edcb', '-0x1234'], '-1', ['i16x8', 'i16x8', 'i16x8']]) # gt_s # i16x8.gt_s (i16x8) (i16x8) case_data.append(['#', 'gt_s']) case_data.append(['#', 'i16x8.gt_s (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_s', ['0xFFFF', '0xFFFF'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0x0000', '0x0000'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0xF0F0', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0x0F0F', '0x0F0F'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_s', ['0xFFFF', '65535'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0xFFFF', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0x8080', '32896'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0x8080', '-32640'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['gt_s', ['-1', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0', '0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['65535', '65535'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['65535', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['65535', '0'], ['65535', '0']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0', '65535'], ['0', '65535']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_s', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['gt_s', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['gt_s', ['0x0F0F', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['-1', '-1', '0', '-1', '-1', '-1', '-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['0', '0', '0', '0', '-1', '-1', '0', '0'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.gt_s (i16x8) (i8x16) case_data.append(['#', 'i16x8.gt_s (i16x8) (i8x16)']) case_data.append(['gt_s', ['0xFFFF', '0xFF'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_s', ['65535', '255'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_s', ['0', '0'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_s', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '0', '0', '-1'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_s', ['0x5555', '0xAA'], '-1', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.gt_s (i16x8) (i32x4) case_data.append(['#', 'i16x8.gt_s (i16x8) (i32x4)']) case_data.append(['gt_s', ['0xFFFF', '0xFFFFFFFF'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', ['65535', '4294967295'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', ['0', '0'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', [['65535', '0', '1', '32768'], ['65535', '0', '1', '32768']], ['0', '0', '0', '0', '0', '-1', '0', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', ['0x5555', '0xAAAAAAAA'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_s', ['012_345', '12345'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_s', ['0x0_1234', '0x1234'], '0', ['i16x8', 'i16x8', 'i16x8']]) # gt_u # i16x8.gt_u (i16x8) (i16x8) case_data.append(['#', 'gt_u']) case_data.append(['#', 'i16x8.gt_u (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_u', ['0xFFFF', '0xFFFF'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0x0000', '0x0000'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0xF0F0', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0x0F0F', '0x0F0F'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '0', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_u', ['0xFFFF', '65535'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0xFFFF', '-1'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0x8080', '32896'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0x8080', '-32640'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['eq', ['-1', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['0', '0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['65535', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', ['65535', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['65535', '0'], ['65535', '0']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['0', '65535'], ['0', '65535']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['eq', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_u', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['gt_u', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['gt_u', ['0x0F0F', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['0', '0', '0', '-1', '-1', '-1', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['0', '0', '0', '-1', '0', '-1', '0', '0'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.gt_u (i16x8) (i8x16) case_data.append(['#', 'i16x8.gt_u (i16x8) (i8x16)']) case_data.append(['gt_u', ['0xFFFF', '0xFF'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_u', ['65535', '255'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_u', ['0', '0'], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['gt_u', ['0x5555', '0xAA'], '0', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.gt_u (i16x8) (i32x4) case_data.append(['#', 'i16x8.gt_u (i16x8) (i32x4)']) case_data.append(['gt_u', ['0xFFFF', '0xFFFFFFFF'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', ['65535', '4294967295'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', ['0', '0'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '0', '0', '0', '0', '-1', '0', '-1'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', ['0x5555', '0xAAAAAAAA'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['gt_u', ['012_345', '12345'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['gt_u', ['0x0_1234', '0x1234'], '0', ['i16x8', 'i16x8', 'i16x8']]) # ge_s # i16x8.ge_s (i16x8) (i16x8) case_data.append(['#', 'ge_s']) case_data.append(['#', 'i16x8.ge_s (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_s', ['0xFFFF', '0xFFFF'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0x0000', '0x0000'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0xF0F0', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0x0F0F', '0x0F0F'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_s', ['0xFFFF', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0xFFFF', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0x8080', '32896'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0x8080', '-32640'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_s', ['-1', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['65535', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['65535', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['65535', '0'], ['65535', '0']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0', '65535'], ['0', '65535']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_s', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['ge_s', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ge_s', ['0x0F0F', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['-1', '-1', '0', '-1', '-1', '-1', '-1', '0'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['-1', '-1', '0', '0', '-1', '-1', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.ge_s (i16x8) (i8x16) case_data.append(['#', 'i16x8.ge_s (i16x8) (i8x16)']) case_data.append(['ge_s', ['0xFFFF', '0xFF'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_s', ['65535', '255'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_s', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '-1', '-1', '-1', '0', '0', '-1', '-1'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_s', ['0xAAAA', '0x55'], '0', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.ge_s (i16x8) (i32x4) case_data.append(['#', 'i16x8.ge_s (i16x8) (i32x4)']) case_data.append(['ge_s', ['0xFFFF', '0xFFFFFFFF'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', ['65535', '4294967295'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', [['65535', '0', '1', '32768'], ['65535', '0', '1', '32768']], ['-1', '0', '-1', '-1', '-1', '-1', '-1', '0'], ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', ['0x5555', '0xAAAAAAAA'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_s', ['012_345', '12345'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_s', ['0x0_1234', '0x1234'], '-1', ['i16x8', 'i16x8', 'i16x8']]) # ge_u # i16x8.ge_u (i16x8) (i16x8) case_data.append(['#', 'ge_u']) case_data.append(['#', 'i16x8.ge_u (i16x8) (i16x8)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_u', ['0xFFFF', '0xFFFF'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0x0000', '0x0000'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0xF0F0', '0xF0F0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0x0F0F', '0x0F0F'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0xFFFF', '0x0000'], ['0xFFFF', '0x0000']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0x0000', '0xFFFF'], ['0x0000', '0xFFFF']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB'], ['0x0100', '0x0302', '0x0904', '0x1110', '0x0A12', '0x1A0B', '0xAA1B', '0xFFAB']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_u', ['0xFFFF', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0xFFFF', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0x8080', '32896'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0x8080', '-32640'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0x8180', '0x8382', '0xFEFD', '0x00FF', '0x0100', '0x7F02', '0xFD80', '0xFFFE'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_u', ['-1', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['65535', '65535'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['65535', '-1'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['65535', '0'], ['65535', '0']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0', '65535'], ['0', '65535']], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['-32768', '65534', '-1', '-0', '0', '1', '2', '65535'], ['32768', '-2', '-1', '-0', '0', '1', '2', '-1']], '-1', ['i16x8', 'i16x8', 'i16x8']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_u', [['0x0000', '0xc300', '0x0000', '0xc2fe', '0x0000', '0xbf80', '0x0000', '0x0000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) case_data.append(['ge_u', [['0x0000', '0x3f80', '0x0000', '0x42fe', '0x0000', '0x4300', '0x0000', '0x437f'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i16x8', 'f32x4', 'i16x8']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ge_u', ['0x0F0F', '0xF0F0'], '0', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0x0000', '0xFFFF'], ['0xFFFF', '0x0000']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0x0001', '0x0203', '0x0409', '0x1011', '0x120A', '0x0B1A', '0x1BAA', '0xABFF'], ['0xFFAB', '0xAA1B', '0x1A0B', '0x0A12', '0x1110', '0x0904', '0x0302', '0x0100']], ['0', '0', '0', '-1', '-1', '-1', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['0x8000', '0x8001', '0x8002', '0x8003', '0x8004', '0x8005', '0x8006', '0x8007'], ['32775', '32774', '32773', '32772', '32771', '32770', '32769', '32768']], ['0', '-1'], ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', [['32768', '32769', '65534', '65535', '0', '-1', '-32767', '-32768'], ['-32768', '-32767', '-1', '0', '65535', '65534', '32769', '32768']], ['-1', '-1', '0', '-1', '0', '-1', '-1', '-1'], ['i16x8', 'i16x8', 'i16x8']]) # i16x8.ge_u (i16x8) (i8x16) case_data.append(['#', 'i16x8.ge_u (i16x8) (i8x16)']) case_data.append(['ge_u', ['0xFFFF', '0xFF'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_u', ['65535', '255'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_u', [['-128', '-128', '0', '0', '1', '1', '255', '255'], ['-128', '0', '1', '255']], ['-1', '0'], ['i16x8', 'i8x16', 'i16x8']]) case_data.append(['ge_u', ['0xAAAA', '0x55'], '-1', ['i16x8', 'i8x16', 'i16x8']]) # i16x8.ge_u (i16x8) (i32x4) case_data.append(['#', 'i16x8.ge_u (i16x8) (i32x4)']) case_data.append(['ge_u', ['0xFFFF', '0xFFFFFFFF'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', ['65535', '4294967295'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', [['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', [['33152', '33666', '65277', '255', '256', '32514', '64896', '65534'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', [['65535', '0', '1', '32768'], ['-128', '0', '1', '255']], '-1', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', ['0x5555', '0xAAAAAAAA'], '0', ['i16x8', 'i32x4', 'i16x8']]) case_data.append(['ge_u', ['012_345', '12345'], '-1', ['i16x8', 'i16x8', 'i16x8']]) case_data.append(['ge_u', ['0x0_1234', '0x1234'], '-1', ['i16x8', 'i16x8', 'i16x8']]) return case_data def gen_test_cases(): i16x8 = Simdi16x8CmpCase() i16x8.gen_test_cases() if __name__ == '__main__': i16x8 = Simdi16x8CmpCase() i16x8.gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i16x8_q15mulr_sat_s.py ================================================ #!/usr/bin/env python3 from simd_arithmetic import SimdArithmeticCase """Generate test cases for i16x8.mulr_sat_s """ class SimdI16x8Q15MulRSatS(SimdArithmeticCase): LANE_TYPE = 'i16x8' UNARY_OPS = () BINARY_OPS = ('q15mulr_sat_s',) @property def full_bin_test_data(self): return [] @property def hex_binary_op_test_data(self): return [] def get_combine_cases(self): return '' def gen_test_cases(self): wast_filename = '../simd_i16x8_q15mulr_sat_s.wast' with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) def gen_test_cases(): simd_i16x8_q16mulr_sat_s = SimdI16x8Q15MulRSatS() simd_i16x8_q16mulr_sat_s.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i32x4_arith.py ================================================ #!/usr/bin/env python3 """ Generate i32x4 integer arithmetic operation cases. """ from simd_arithmetic import SimdArithmeticCase class SimdI32x4ArithmeticCase(SimdArithmeticCase): LANE_LEN = 4 LANE_TYPE = 'i32x4' @property def hex_binary_op_test_data(self): return [ ('0x3fffffff', '0x40000000'), ('0x40000000', '0x40000000'), ('-0x3fffffff', '-0x40000000'), ('-0x40000000', '-0x40000000'), ('-0x40000000', '-0x40000001'), ('0x7fffffff', '0x7fffffff'), ('0x7fffffff', '0x01'), ('0x80000000', '-0x01'), ('0x7fffffff', '0x80000000'), ('0x80000000', '0x80000000'), ('0xffffffff', '0x01'), ('0xffffffff', '0xffffffff') ] @property def hex_unary_op_test_data(self): return ['0x01', '-0x01', '-0x80000000', '-0x7fffffff', '0x7fffffff', '0x80000000', '0xffffffff'] @property def underscore_literal_test_data(self): return { 'i32x4.add': [ [['01_234_567_890', '01_234_567_890'], '02_469_135_780', ['i32x4'] * 3], [['0x0_1234_5678', '0x0_90AB_cdef'], '0x0_a2e0_2467', ['i32x4'] * 3] ], 'i32x4.sub': [ [['03_214_567_890 ', '01_234_567_890 '], '01_980_000_000', ['i32x4'] * 3], [['0x0_90AB_cdef', '0x0_1234_5678'], '0x0_7e77_7777', ['i32x4'] * 3] ], 'i32x4.mul': [ [['0_123_456_789', '0_987_654_321'], '04_227_814_277', ['i32x4'] * 3], [['0x0_1234_5678', '0x0_90AB_cdef'], '0x0_2a42_d208', ['i32x4'] * 3] ] } @property def i32x4_i8x16_test_data(self): return { 'i32x4.add': [ [['0x7fffffff', ['0', '0', '0', '0x80'] * 4], '-1', ['i32x4', 'i8x16', 'i32x4']], [['1', '255'], '0', ['i32x4', 'i8x16', 'i32x4']] ], 'i32x4.sub': [ [['0x7fffffff', ['0', '0', '0', '0x80'] * 4], '-1', ['i32x4', 'i8x16', 'i32x4']], [['1', '255'], '2', ['i32x4', 'i8x16', 'i32x4']] ], 'i32x4.mul': [ [['0x10000000', '0x10'], '0', ['i32x4', 'i8x16', 'i32x4']], [['0xffffffff', '255'], '1', ['i32x4', 'i8x16', 'i32x4']] ] } @property def i32x4_i16x8_test_data(self): return { 'i32x4.add': [ [['0x7fffffff', ['0', '0x8000'] * 4], '-1', ['i32x4', 'i16x8', 'i32x4']], [['1', '0xffff'], '0', ['i32x4', 'i16x8', 'i32x4']] ], 'i32x4.sub': [ [['0x7fffffff', ['0', '0x8000'] * 4], '-1', ['i32x4', 'i16x8', 'i32x4']], [['1', '0xffff'], '0x02', ['i32x4', 'i16x8', 'i32x4']] ], 'i32x4.mul': [ [['0x80000000', ['0', '0x02'] * 4], '0', ['i32x4', 'i16x8', 'i32x4']], [['0xffffffff', '0xffff'], '1', ['i32x4', 'i16x8', 'i32x4']] ] } @property def i32x4_f32x4_test_data(self): return { 'i32x4.add': [ [['0x80000000', '+0.0'], '0x80000000', ['i32x4', 'f32x4', 'i32x4']], [['0x80000000', '-0.0'], '0', ['i32x4', 'f32x4', 'i32x4']], [['0x80000000', '1.0'], '0xbf800000', ['i32x4', 'f32x4', 'i32x4']], [['0x80000000', '-1.0'], '0x3f800000', ['i32x4', 'f32x4', 'i32x4']], [['1', '+inf'], '0x7f800001', ['i32x4', 'f32x4', 'i32x4']], [['1', '-inf'], '0xff800001', ['i32x4', 'f32x4', 'i32x4']], [['1', 'nan'], '0x7fc00001', ['i32x4', 'f32x4', 'i32x4']] ], 'i32x4.sub': [ [['0x80000000', '+0.0'], '0x80000000', ['i32x4', 'f32x4', 'i32x4']], [['0x80000000', '-0.0'], '0', ['i32x4', 'f32x4', 'i32x4']], [['0x80000000', '1.0'], '0x40800000', ['i32x4', 'f32x4', 'i32x4']], [['0x80000000', '-1.0'], '0xc0800000', ['i32x4', 'f32x4', 'i32x4']], [['0x1', '+inf'], '0x80800001', ['i32x4', 'f32x4', 'i32x4']], [['0x1', '-inf'], '0x00800001', ['i32x4', 'f32x4', 'i32x4']], [['0x1', 'nan'], '0x80400001', ['i32x4', 'f32x4', 'i32x4']] ], 'i32x4.mul': [ [['0x8000', '+0.0'], '0', ['i32x4', 'f32x4', 'i32x4']], [['0x8000', '-0.0'], '0', ['i32x4', 'f32x4', 'i32x4']], [['0x8000', '1.0'], '0', ['i32x4', 'f32x4', 'i32x4']], [['0x8000', '-1.0'], '0', ['i32x4', 'f32x4', 'i32x4']], [['0x1', '+inf'], '0x7f800000', ['i32x4', 'f32x4', 'i32x4']], [['0x1', '-inf'], '0xff800000', ['i32x4', 'f32x4', 'i32x4']], [['0x1', 'nan'], '0x7fc00000', ['i32x4', 'f32x4', 'i32x4']] ] } @property def combine_dec_hex_test_data(self): return { 'i32x4.add': [ [[['0', '1', '2', '3'], ['0', '0xffffffff', '0xfffffffe', '0xfffffffd']], ['0'] * 16, ['i32x4'] * 3] ], 'i32x4.sub': [ [[['0', '1', '2', '3'], ['0', '0xffffffff', '0xfffffffe', '0xfffffffd']], ['0', '0x02', '0x04', '0x06'], ['i32x4'] * 3] ], 'i32x4.mul': [ [[['0', '1', '2', '3'], ['0', '0xffffffff', '0xfffffffe', '0xfffffffd']], ['0', '0xffffffff', '0xfffffffc', '0xfffffff7'], ['i32x4'] * 3] ] } @property def range_test_data(self): return { 'i32x4.add': [ [[[str(i) for i in range(4)], [str(i * 2) for i in range(4)]], [str(i * 3) for i in range(4)], ['i32x4'] * 3] ], 'i32x4.sub': [ [[[str(i) for i in range(4)], [str(i * 2) for i in range(4)]], [str(-i) for i in range(4)], ['i32x4'] * 3] ], 'i32x4.mul': [ [[[str(i) for i in range(4)], [str(i * 2) for i in range(4)]], ['0', '0x02', '0x08', '0x12'], ['i32x4'] * 3] ] } @property def full_bin_test_data(self): return [ self.i32x4_i8x16_test_data, self.i32x4_i16x8_test_data, self.i32x4_f32x4_test_data, self.combine_dec_hex_test_data, self.range_test_data, self.underscore_literal_test_data ] def gen_test_cases(): simd_i32x4_arith = SimdI32x4ArithmeticCase() simd_i32x4_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i32x4_cmp.py ================================================ #!/usr/bin/env python3 """ This file is used for generating i32x4 related test cases which inherites from the 'SimdCmpCase' class and overloads with the 'get_test_cases' method. """ from simd_compare import SimdCmpCase # Generate i32x4 test case class Simdi32x4CmpCase(SimdCmpCase): LANE_TYPE = 'i32x4' BINARY_OPS = ['eq', 'ne', 'lt_s', 'lt_u', 'le_s', 'le_u', 'gt_s', 'gt_u', 'ge_s', 'ge_u'] # Overload base class method and set test data for i32x4. def get_case_data(self): case_data = [] # eq # i32x4.eq (i32x4) (i32x4) case_data.append(['#', 'eq']) case_data.append(['#', 'i32x4.eq (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['eq', ['0xFFFFFFFF', '0xFFFFFFFF'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0x00000000', '0x00000000'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0xF0F0F0F0', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0x0F0F0F0F', '0x0F0F0F0F'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['eq', ['0xFFFFFFFF', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0xFFFFFFFF', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0x80808080', '2155905152'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0x80808080', '-2139062144'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['eq', ['-1', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0', '0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['4294967295', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['4294967295', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['4294967295', '0'], ['4294967295', '0']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0', '4294967295'], ['0', '4294967295']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['eq', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['eq', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['eq', ['0x0F0F0F0F', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['-1', '0', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.eq (i32x4) (i8x16) case_data.append(['#', 'i32x4.eq (i32x4) (i8x16)']) case_data.append(['eq', ['0xFFFFFFFF', '0xFF'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['eq', ['4294967295', '255'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['eq', ['0', '0'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['eq', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['eq', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['eq', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['0', '-1', '0', '-1'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['eq', ['0x55555555', '0xAA'], '0', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.eq (i32x4) (i16x8) case_data.append(['#', 'i32x4.eq (i32x4) (i16x8)']) case_data.append(['eq', ['0xFFFFFFFF', '0xFFFF'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', ['4294967295', '65535'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', ['0', '0'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', [['4294967295', '0', '1', '65535'], ['65535', '65535', '0', '0', '1', '0', '65535', '65535']], ['-1', '-1', '-1', '0'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', ['0x55555555', '0xAAAA'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['eq', ['0_123_456_789', '123456789'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['eq', ['0x0_1234_5678', '0x12345678'], '-1', ['i32x4', 'i32x4', 'i32x4']]) # ne # i32x4.ne (i32x4) (i32x4) case_data.append(['#', 'ne']) case_data.append(['#', 'i32x4.ne (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ne', ['0xFFFFFFFF', '0xFFFFFFFF'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0x00000000', '0x00000000'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0xF0F0F0F0', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0x0F0F0F0F', '0x0F0F0F0F'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ne', ['0xFFFFFFFF', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0xFFFFFFFF', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0x80808080', '2155905152'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0x80808080', '-2139062144'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ne', ['-1', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0', '0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['4294967295', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['4294967295', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['4294967295', '0'], ['4294967295', '0']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0', '4294967295'], ['0', '4294967295']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ne', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['ne', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ne', ['0x0F0F0F0F', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['0', '-1', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.ne (i32x4) (i8x16) case_data.append(['#', 'i32x4.ne (i32x4) (i8x16)']) case_data.append(['ne', ['0xFFFFFFFF', '0xFF'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ne', ['4294967295', '255'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ne', ['0', '0'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ne', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ne', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ne', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['-1', '0', '-1', '0'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ne', ['0x55555555', '0xAA'], '-1', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.ne (i32x4) (i16x8) case_data.append(['#', 'i32x4.ne (i32x4) (i16x8)']) case_data.append(['ne', ['0xFFFFFFFF', '0xFFFF'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', ['4294967295', '65535'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', ['0', '0'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '0', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', ['0xAAAAAAAA', '0x5555'], ['-1', '-1', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ne', ['0_123_456_789', '123456789'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ne', ['0x0_1234_5678', '0x12345678'], '0', ['i32x4', 'i32x4', 'i32x4']]) # lt_s # i32x4.lt_s (i32x4) (i32x4) case_data.append(['#', 'lt_s']) case_data.append(['#', 'i32x4.lt_s (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_s', ['0xFFFFFFFF', '0xFFFFFFFF'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0x00000000', '0x00000000'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0xF0F0F0F0', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0x0F0F0F0F', '0x0F0F0F0F'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['lt_s', ['0xFFFFFFFF', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0xFFFFFFFF', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0x80808080', '2155905152'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0x80808080', '-2139062144'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['lt_s', ['-1', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0', '0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['4294967295', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['4294967295', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['4294967295', '0'], ['4294967295', '0']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0', '4294967295'], ['0', '4294967295']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['lt_s', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['lt_s', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['lt_s', ['0x0F0F0F0F', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['0', '0', '0', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['0', '0', '0', '-1'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.lt_s (i32x4) (i8x16) case_data.append(['#', 'i32x4.lt_s (i32x4) (i8x16)']) case_data.append(['lt_s', ['0xFFFFFFFF', '0xFF'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_s', ['4294967295', '255'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_s', ['0', '0'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_s', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['0', '0', '-1', '0'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_s', ['0x55555555', '0xAA'], '0', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.lt_s (i32x4) (i16x8) case_data.append(['#', 'i32x4.lt_s (i32x4) (i16x8)']) case_data.append(['lt_s', ['0xFFFFFFFF', '0xFFFF'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', ['4294967295', '65535'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', ['0', '0'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '0', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', ['0xAAAAAAAA', '0x5555'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_s', ['0_123_456_789', '123456789'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_s', ['0x0_90AB_cdef', '-0x6f543210'], '-1', ['i32x4', 'i32x4', 'i32x4']]) # lt_u # i32x4.lt_u (i32x4) (i32x4) case_data.append(['#', 'lt_u']) case_data.append(['#', 'i32x4.lt_u (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_u', ['0xFFFFFFFF', '0xFFFFFFFF'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0x00000000', '0x00000000'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0xF0F0F0F0', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0x0F0F0F0F', '0x0F0F0F0F'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['lt_u', ['0xFFFFFFFF', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0xFFFFFFFF', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0x80808080', '2155905152'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0x80808080', '-2139062144'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['lt_u', ['-1', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0', '0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['4294967295', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['4294967295', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['4294967295', '0'], ['4294967295', '0']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0', '4294967295'], ['0', '4294967295']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['lt_u', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['lt_u', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['lt_u', ['0x0F0F0F0F', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['-1', '0', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['0', '-1', '-1', '0'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.lt_u (i32x4) (i8x16) case_data.append(['#', 'i32x4.lt_u (i32x4) (i8x16)']) case_data.append(['lt_u', ['0xFFFFFFFF', '0xFF'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_u', ['4294967295', '255'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_u', ['0', '0'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_u', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['0', '0', '-1', '0'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['lt_u', ['0x55555555', '0xAA'], '-1', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.lt_u (i32x4) (i16x8) case_data.append(['#', 'i32x4.lt_u (i32x4) (i16x8)']) case_data.append(['lt_u', ['0xFFFFFFFF', '0xFFFF'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', ['4294967295', '65535'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', ['0', '0'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '0', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', ['0xAAAAAAAA', '0x5555'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['lt_u', ['0_123_456_789', '123456789'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['lt_u', ['0x0_90AB_cdef', '-0x6f543210'], '-1', ['i32x4', 'i32x4', 'i32x4']]) # le_s # i32x4.le_s (i32x4) (i32x4) case_data.append(['#', 'le_s']) case_data.append(['#', 'i32x4.le_s (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_s', ['0xFFFFFFFF', '0xFFFFFFFF'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0x00000000', '0x00000000'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0xF0F0F0F0', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0x0F0F0F0F', '0x0F0F0F0F'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_s', ['0xFFFFFFFF', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0xFFFFFFFF', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0x80808080', '2155905152'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0x80808080', '-2139062144'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_s', ['-1', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0', '0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['4294967295', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['4294967295', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['4294967295', '0'], ['4294967295', '0']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0', '4294967295'], ['0', '4294967295']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_s', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['le_s', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['le_s', ['0x0F0F0F0F', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['0', '0', '0', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['-1', '0', '0', '-1'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.le_s (i32x4)(i8x16) case_data.append(['#', 'i32x4.le_s (i32x4)(i8x16)']) case_data.append(['le_s', ['0xFFFFFFFF', '0xFF'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_s', ['4294967295', '255'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_s', ['0', '0'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_s', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_s', ['0x55555555', '0xAA'], '0', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.le_s (i32x4) (i16x8) case_data.append(['#', 'i32x4.le_s (i32x4) (i16x8)']) case_data.append(['le_s', ['0xFFFFFFFF', '0xFFFF'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', ['4294967295', '65535'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', ['0', '0'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', ['0xAAAAAAAA', '0x5555'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_s', ['0_123_456_789', '123456789'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_s', ['0x0_1234_5678', '0x12345678'], '-1', ['i32x4', 'i32x4', 'i32x4']]) # le_u # i32x4.le_u (i32x4) (i32x4) case_data.append(['#', 'le_u']) case_data.append(['#', 'i32x4.le_u (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_u', ['0xFFFFFFFF', '0xFFFFFFFF'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0x00000000', '0x00000000'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0xF0F0F0F0', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0x0F0F0F0F', '0x0F0F0F0F'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_u', ['0xFFFFFFFF', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0xFFFFFFFF', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0x80808080', '2155905152'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0x80808080', '-2139062144'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_u', ['-1', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0', '0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['4294967295', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['4294967295', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['4294967295', '0'], ['4294967295', '0']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0', '4294967295'], ['0', '4294967295']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_u', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['le_u', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['le_u', ['0x0F0F0F0F', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['-1', '0', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['-1', '-1', '-1', '0'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.le_u (i32x4) (i8x16) case_data.append(['#', 'i32x4.le_u (i32x4) (i8x16)']) case_data.append(['le_u', ['0xFFFFFFFF', '0xFF'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_u', ['4294967295', '255'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_u', ['0', '0'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_u', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['le_u', ['0x55555555', '0xAA'], '-1', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.le_u (i32x4) (i16x8) case_data.append(['#', 'i32x4.le_u (i32x4) (i16x8)']) case_data.append(['le_u', ['0xFFFFFFFF', '0xFFFF'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', ['4294967295', '65535'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', ['0', '0'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', ['0xAAAAAAAA', '0x5555'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['le_u', ['0_123_456_789', '123456789'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['le_u', ['0x0_90AB_cdef', '0x90ABcdef'], '-1', ['i32x4', 'i32x4', 'i32x4']]) # gt_s # i32x4.gt_s (i32x4) (i32x4) case_data.append(['#', 'gt_s']) case_data.append(['#', 'i32x4.gt_s (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_s', ['0xFFFFFFFF', '0xFFFFFFFF'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0x00000000', '0x00000000'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0xF0F0F0F0', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0x0F0F0F0F', '0x0F0F0F0F'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_s', ['0xFFFFFFFF', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0xFFFFFFFF', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0x80808080', '2155905152'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0x80808080', '-2139062144'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['gt_s', ['-1', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0', '0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['4294967295', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['4294967295', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['4294967295', '0'], ['4294967295', '0']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0', '4294967295'], ['0', '4294967295']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_s', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['gt_s', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['gt_s', ['0x0F0F0F0F', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['-1', '-1', '-1', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['0', '-1', '-1', '0'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.gt_s (i32x4) (i8x16) case_data.append(['#', 'i32x4.gt_s (i32x4) (i8x16)']) case_data.append(['gt_s', ['0xFFFFFFFF', '0xFF'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_s', ['4294967295', '255'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_s', ['0', '0'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_s', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_s', ['0x55555555', '0xAA'], '-1', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.gt_s (i32x4) (i16x8) case_data.append(['#', 'i32x4.gt_s (i32x4) (i16x8)']) case_data.append(['gt_s', ['0xFFFFFFFF', '0xFFFF'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', ['4294967295', '65535'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', ['0', '0'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', [['65535', '0', '1', '32768'], ['65535', '65535', '0', '0', '1', '1', '32768', '32768']], ['-1', '0', '0', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', ['0xAAAAAAAA', '0x5555'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_s', ['0_123_456_789', '123456789'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_s', ['0x0_90AB_cdef', '-0x6f543211'], '0', ['i32x4', 'i32x4', 'i32x4']]) # gt_u # i32x4.gt_u (i32x4) (i32x4) case_data.append(['#', 'gt_u']) case_data.append(['#', 'i32x4.gt_u (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_u', ['0xFFFFFFFF', '0xFFFFFFFF'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0x00000000', '0x00000000'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0xF0F0F0F0', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0x0F0F0F0F', '0x0F0F0F0F'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_u', ['0xFFFFFFFF', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0xFFFFFFFF', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0x80808080', '2155905152'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0x80808080', '-2139062144'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['gt_u', ['-1', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0', '0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['4294967295', '4294967295'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['4294967295', '-1'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['4294967295', '0'], ['4294967295', '0']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0', '4294967295'], ['0', '4294967295']], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '0', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_u', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['gt_u', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['gt_u', ['0x0F0F0F0F', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['0', '-1', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['0', '0', '0', '-1'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.gt_u (i32x4) (i8x16) case_data.append(['#', 'i32x4.gt_u (i32x4) (i8x16)']) case_data.append(['gt_u', ['0xFFFFFFFF', '0xFF'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_u', ['4294967295', '255'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_u', ['0', '0'], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_u', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['gt_u', ['0x55555555', '0xAA'], '0', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.gt_u (i32x4) (i16x8) case_data.append(['#', 'i32x4.gt_u (i32x4) (i16x8)']) case_data.append(['gt_u', ['0xFFFFFFFF', '0xFFFF'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', ['4294967295', '65535'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', ['0', '0'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], ['0', '0', '0', '0'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', [['-128', '0', '1', '255'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', ['0xAAAAAAAA', '0x5555'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['gt_u', ['0_123_456_789', '123456789'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['gt_u', ['0x0_1234_5678', '0x12345678'], '0', ['i32x4', 'i32x4', 'i32x4']]) # ge_s # i32x4.ge_s (i32x4) (i32x4) case_data.append(['#', 'ge_s']) case_data.append(['#', 'i32x4.ge_s (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_s', ['0xFFFFFFFF', '0xFFFFFFFF'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0x00000000', '0x00000000'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0xF0F0F0F0', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0x0F0F0F0F', '0x0F0F0F0F'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_s', ['0xFFFFFFFF', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0xFFFFFFFF', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0x80808080', '2155905152'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0x80808080', '-2139062144'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_s', ['-1', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['4294967295', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['4294967295', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['4294967295', '0'], ['4294967295', '0']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0', '4294967295'], ['0', '4294967295']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_s', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['ge_s', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ge_s', ['0x0F0F0F0F', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['-1', '-1', '0', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['-1', '-1', '-1', '0'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['-1', '-1', '-1', '0'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.ge_s (i32x4) (i8x16) case_data.append(['#', 'i32x4.ge_s (i32x4) (i8x16)']) case_data.append(['ge_s', ['0xFFFFFFFF', '0xFF'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_s', ['4294967295', '255'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_s', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['-1', '-1', '0', '-1'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_s', ['0x55555555', '0x55'], '-1', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.ge_s (i32x4) (i16x8) case_data.append(['#', 'i32x4.ge_s (i32x4) (i16x8)']) case_data.append(['ge_s', ['0xFFFFFFFF', '0xFFFF'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', ['4294967295', '65535'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', [['65535', '0', '1', '32768'], ['65535', '65535', '0', '0', '1', '1', '32768', '32768']], ['-1', '-1', '0', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', ['0xAAAAAAAA', '0x5555'], '0', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_s', ['0_123_456_789', '123456789'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_s', ['0x0_1234_5678', '0x12345678'], '-1', ['i32x4', 'i32x4', 'i32x4']]) # ge_u # i32x4.ge_u (i32x4) (i32x4) case_data.append(['#', 'ge_u']) case_data.append(['#', 'i32x4.ge_u (i32x4) (i32x4)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_u', ['0xFFFFFFFF', '0xFFFFFFFF'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0x00000000', '0x00000000'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0xF0F0F0F0', '0xF0F0F0F0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0x0F0F0F0F', '0x0F0F0F0F'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0xFFFFFFFF', '0x00000000'], ['0xFFFFFFFF', '0x00000000']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0x00000000', '0xFFFFFFFF'], ['0x00000000', '0xFFFFFFFF']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_u', ['0xFFFFFFFF', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0xFFFFFFFF', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0x80808080', '2155905152'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0x80808080', '-2139062144'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0x83828180', '0x00FFFEFD', '0x7F020100', '0xFFFEFD80'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_u', ['-1', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['4294967295', '4294967295'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['4294967295', '-1'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['4294967295', '0'], ['4294967295', '0']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0', '4294967295'], ['0', '4294967295']], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['-2147483647', '4294967295', '0', '-1'], ['2147483649', '-1', '0', '-1']], '-1', ['i32x4', 'i32x4', 'i32x4']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_u', [['0xc3000000', '0xc2fe0000', '0xbf800000', '0x00000000'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) case_data.append(['ge_u', [['0x3f800000', '0x42fe0000', '0x43000000', '0x437f0000'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i32x4', 'f32x4', 'i32x4']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ge_u', ['0x0F0F0F0F', '0xF0F0F0F0'], '0', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0x00000000', '0xFFFFFFFF'], ['0xFFFFFFFF', '0x00000000']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0x02030001', '0x10110409', '0x0B1A120A', '0xABFF1BAA'], ['0xAA1BFFAB', '0x0A121A0B', '0x09041110', '0x01000302']], ['0', '-1', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['0x80018000', '0x80038002', '0x80058004', '0x80078006'], ['2147975174', '2147844100', '2147713026', '2147581952']], ['0', '0', '-1', '-1'], ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', [['2147483648', '2147483647', '0', '-1'], ['-2147483648', '-2147483647', '-1', '0']], ['-1', '0', '0', '-1'], ['i32x4', 'i32x4', 'i32x4']]) # i32x4.ge_u (i32x4) (i8x16) case_data.append(['#', 'i32x4.ge_u (i32x4) (i8x16)']) case_data.append(['ge_u', ['0xFFFFFFFF', '0xFF'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_u', ['4294967295', '255'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_u', [['-8323200', '0', '1', '4294967295'], ['-128', '0', '1', '255']], ['-1', '-1', '0', '-1'], ['i32x4', 'i8x16', 'i32x4']]) case_data.append(['ge_u', ['0xAAAAAAAA', '0x55'], '-1', ['i32x4', 'i8x16', 'i32x4']]) # i32x4.ge_u (i32x4) (i16x8) case_data.append(['#', 'i32x4.ge_u (i32x4) (i16x8)']) case_data.append(['ge_u', ['0xFFFFFFFF', '0xFFFF'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', ['4294967295', '65535'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', [['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', [['2206368128', '16776957', '2130837760', '4294901120'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', [['-128', '0', '1', '255'], ['65535', '65535', '0', '0', '1', '1', '32768', '32768']], ['0', '-1', '0', '0'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', ['0xAAAAAAAA', '0x5555'], ['-1', '-1', '-1', '-1'], ['i32x4', 'i16x8', 'i32x4']]) case_data.append(['ge_u', ['0_123_456_789', '123456789'], '-1', ['i32x4', 'i32x4', 'i32x4']]) case_data.append(['ge_u', ['0x0_1234_5678', '0x12345678'], '-1', ['i32x4', 'i32x4', 'i32x4']]) return case_data # generate all test cases def get_all_cases(self): # Add tests for unkonow operators for i32x4 return SimdCmpCase.get_all_cases(self) + """ ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.eq (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.ne (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.lt_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.lt_u (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.le_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.le_u (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.gt_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.gt_u (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.ge_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.ge_u (local.get $x) (local.get $y)))") "unknown operator") """ def gen_test_cases(): i32x4 = Simdi32x4CmpCase() i32x4.gen_test_cases() if __name__ == '__main__': i32x4 = Simdi32x4CmpCase() i32x4.gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i32x4_dot_i16x8.py ================================================ #!/usr/bin/env python3 from simd_arithmetic import SimdArithmeticCase, i16 from simd_integer_op import ArithmeticOp class SimdI32x4DotI16x8TestCase(SimdArithmeticCase): LANE_TYPE = 'i32x4' UNARY_OPS = () BINARY_OPS = ('dot_i16x8_s',) @property def lane(self): return i16 def binary_op(self, x, y, lane): # For test data we always splat a single value to the # entire v128, so '* 2' will work here. return ArithmeticOp.get_valid_value(x, i16) * ArithmeticOp.get_valid_value(y, i16) * 2 @property def hex_binary_op_test_data(self): return [] @property def bin_test_data(self): return [ (self.normal_binary_op_test_data, ['i16x8', 'i16x8', 'i32x4']), (self.hex_binary_op_test_data, ['i16x8', 'i16x8', 'i32x4']) ] def get_case_data(self): case_data = [] op_name = 'i32x4.dot_i16x8_s' case_data.append(['#', op_name]) for data_group, v128_forms in self.bin_test_data: for data in data_group: case_data.append([op_name, [str(data[0]), str(data[1])], str(self.binary_op(data[0], data[1], self.lane)), v128_forms]) return case_data def get_combine_cases(self): return '' def gen_test_cases(self): wast_filename = '../simd_i32x4_dot_i16x8.wast' with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) def gen_test_cases(): simd_i16x8_arith = SimdI32x4DotI16x8TestCase() simd_i16x8_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i64x2_arith.py ================================================ #!/usr/bin/env python3 """ Generate i64x2 integer arithmetic operation cases. """ from simd_arithmetic import SimdArithmeticCase class SimdI64x2ArithmeticCase(SimdArithmeticCase): LANE_LEN = 2 LANE_TYPE = 'i64x2' @property def hex_binary_op_test_data(self): return [ ('0x3fffffffffffffff', '0x4000000000000000'), ('0x4000000000000000', '0x4000000000000000'), ('-0x3fffffffffffffff', '-0x40000000fffffff'), ('-0x4000000000000000', '-0x400000000000000'), ('-0x4000000000000000', '-0x400000000000001'), ('0x7fffffffffffffff', '0x7ffffffffffffff'), ('0x7fffffffffffffff', '0x01'), ('0x8000000000000000', '-0x01'), ('0x7fffffffffffffff', '0x8000000000000000'), ('0x8000000000000000', '0x8000000000000000'), ('0xffffffffffffffff', '0x01'), ('0xffffffffffffffff', '0xffffffffffffffff') ] @property def hex_unary_op_test_data(self): return ['0x01', '-0x01', '-0x8000000000000000', '-0x7fffffffffffffff', '0x7fffffffffffffff', '0x8000000000000000', '0xffffffffffffffff'] @property def underscore_literal_test_data(self): return { 'i64x2.add': [ [['01_234_567_890_123_456_789', '01_234_567_890_123_456_789'], '02_469_135_780_246_913_578', ['i64x2'] * 3], [['0x0_1234_5678_90AB_cdef', '0x0_90AB_cdef_1234_5678'], '0x0_a2e0_2467_a2e0_2467', ['i64x2'] * 3] ], 'i64x2.sub': [ [['03_214_567_890_123_456_789', '01_234_567_890_123_456_789'], '01_980_000_000_000_000_000', ['i64x2'] * 3], [['0x0_90AB_cdef_8765_4321', '0x0_1234_5678_90AB_cdef'], '0x0_7e77_7776_f6b9_7532', ['i64x2'] * 3] ], 'i64x2.mul': [ [['01_234_567_890_123_456_789', '01_234_567_890_123_456_789'], '09_710_478_858_155_731_897', ['i64x2'] * 3], [['0x0_1234_5678_90AB_cdef', '0x0_90AB_cdef_8765_4321'], '0x0_602f_05e9_e556_18cf', ['i64x2'] * 3] ] } @property def i64x2_i8x16_test_data(self): """This test data will be intepreted by the SIMD.v128_const() method in simd.py.""" return { 'i64x2.add': [ [['0x7fffffffffffffff', ['0', '0', '0', '0', '0', '0', '0', '0x80'] * 2], '-1', ['i64x2', 'i8x16', 'i64x2']], [['1', '255'], '0', ['i64x2', 'i8x16', 'i64x2']] ], 'i64x2.sub': [ [['0x7fffffffffffffff', ['0', '0', '0', '0', '0', '0', '0', '0x80'] * 2], '-1', ['i64x2', 'i8x16', 'i64x2']], [['1', '255'], '2', ['i64x2', 'i8x16', 'i64x2']] ], 'i64x2.mul': [ [['0x8000000000000000', '0x2'], '0', ['i64x2', 'i8x16', 'i64x2']], [['0xffffffffffffffff', '255'], '1', ['i64x2', 'i8x16', 'i64x2']] ] } @property def i64x2_i16x8_test_data(self): """This test data will be intepreted by the SIMD.v128_const() method in simd.py.""" return { 'i64x2.add': [ [['0x7fffffffffffffff', ['0', '0', '0', '0x8000'] * 2], '-1', ['i64x2', 'i16x8', 'i64x2']], [['1', '0xffff'], '0', ['i64x2', 'i16x8', 'i64x2']] ], 'i64x2.sub': [ [['0x7fffffffffffffff', ['0', '0', '0', '0x8000'] * 2], '-1', ['i64x2', 'i16x8', 'i64x2']], [['1', '0xffff'], '2', ['i64x2', 'i16x8', 'i64x2']] ], 'i64x2.mul': [ [['0x8000000000000000', ['0', '0', '0', '0x02'] * 4], '0', ['i64x2', 'i16x8', 'i64x2']], [['0xffffffffffffffff', '0xffff'], '1', ['i64x2', 'i16x8', 'i64x2']] ] } @property def i64x2_i32x4_test_data(self): """This test data will be intepreted by the SIMD.v128_const() method in simd.py.""" return { 'i64x2.add': [ [['0x7fffffffffffffff', ['0', '0x80000000'] * 2], '-1', ['i64x2', 'i32x4', 'i64x2']], [['1', '0xffffffff'], '0', ['i64x2', 'i32x4', 'i64x2']] ], 'i64x2.sub': [ [['0x7fffffffffffffff', ['0', '0x80000000'] * 2], '-1', ['i64x2', 'i32x4', 'i64x2']], [['1', '0xffffffff'], '2', ['i64x2', 'i32x4', 'i64x2']] ], 'i64x2.mul': [ [['0x8000000000000000', ['0', '0x02'] * 2], '0', ['i64x2', 'i32x4', 'i64x2']], [['0xffffffffffffffff', '0xffffffff'], '1', ['i64x2', 'i32x4', 'i64x2']] ] } @property def i64x2_f64x2_test_data(self): """This test data will be intepreted by the SIMD.v128_const() method in simd.py.""" return { 'i64x2.add': [ [['0x8000000000000000', '+0.0'], '0x8000000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x8000000000000000', '-0.0'], '0', ['i64x2', 'f64x2', 'i64x2']], [['0x8000000000000000', '1.0'], '0xbff0000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x8000000000000000', '-1.0'], '0x3ff0000000000000', ['i64x2', 'f64x2', 'i64x2']], [['1', '+inf'], '0x7ff0000000000001', ['i64x2', 'f64x2', 'i64x2']], [['1', '-inf'], '0xfff0000000000001', ['i64x2', 'f64x2', 'i64x2']], [['1', 'nan'], '0x7ff8000000000001', ['i64x2', 'f64x2', 'i64x2']] ], 'i64x2.sub': [ [['0x8000000000000000', '+0.0'], '0x8000000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x8000000000000000', '-0.0'], '0', ['i64x2', 'f64x2', 'i64x2']], [['0x8000000000000000', '1.0'], '0x4010000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x8000000000000000', '-1.0'], '0xc010000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x1', '+inf'], '0x8010000000000001', ['i64x2', 'f64x2', 'i64x2']], [['0x1', '-inf'], '0x0010000000000001', ['i64x2', 'f64x2', 'i64x2']], [['0x1', 'nan'], '0x8008000000000001', ['i64x2', 'f64x2', 'i64x2']] ], 'i64x2.mul': [ [['0x80000000', '+0.0'], '0', ['i64x2', 'f64x2', 'i64x2']], [['0x80000000', '-0.0'], '0', ['i64x2', 'f64x2', 'i64x2']], [['0x80000000', '1.0'], '0', ['i64x2', 'f64x2', 'i64x2']], [['0x80000000', '-1.0'], '0', ['i64x2', 'f64x2', 'i64x2']], [['0x1', '+inf'], '0x7ff0000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x1', '-inf'], '0xfff0000000000000', ['i64x2', 'f64x2', 'i64x2']], [['0x1', 'nan'], '0x7ff8000000000000', ['i64x2', 'f64x2', 'i64x2']] ] } @property def combine_dec_hex_test_data(self): """This test data will be intepreted by the SIMD.v128_const() method in simd.py.""" return { 'i64x2.add': [ [[['0', '1'], ['0', '0xffffffffffffffff']], ['0'] * 2, ['i64x2'] * 3] ], 'i64x2.sub': [ [[['0', '1'], ['0', '0xffffffffffffffff']], ['0', '0x02'], ['i64x2'] * 3] ], 'i64x2.mul': [ [[['0', '1'], ['0', '0xffffffffffffffff']], ['0', '0xffffffffffffffff'], ['i64x2'] * 3] ] } @property def range_test_data(self): """This test data will be intepreted by the SIMD.v128_const() method in simd.py.""" return { 'i64x2.add': [ [[[str(i) for i in range(2)], [str(i * 2) for i in range(2)]], [str(i * 3) for i in range(2)], ['i64x2'] * 3] ], 'i64x2.sub': [ [[[str(i) for i in range(2)], [str(i * 2) for i in range(2)]], [str(-i) for i in range(2)], ['i64x2'] * 3] ], 'i64x2.mul': [ [[[str(i) for i in range(2)], [str(i * 2) for i in range(4)]], ['0', '0x02'], ['i64x2'] * 3] ] } @property def full_bin_test_data(self): return [ self.i64x2_i8x16_test_data, self.i64x2_i16x8_test_data, self.i64x2_i32x4_test_data, self.i64x2_f64x2_test_data, self.combine_dec_hex_test_data, self.range_test_data, self.underscore_literal_test_data ] def gen_test_cases(): simd_i64x2_arith = SimdI64x2ArithmeticCase() simd_i64x2_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i64x2_cmp.py ================================================ #!/usr/bin/env python3 from simd_compare import SimdCmpCase # Generate i64x2 test case class Simdi64x2CmpCase(SimdCmpCase): LANE_TYPE = 'i64x2' BINARY_OPS = ['eq', 'ne'] # Override this since i64x2 does not support as many comparison instructions. CASE_TXT = """ ;; Test all the {lane_type} comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) ({lane_type}.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) ({lane_type}.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.lt_s (local.get $x) (local.get $y))) (func (export "le_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.le_s (local.get $x) (local.get $y))) (func (export "gt_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.gt_s (local.get $x) (local.get $y))) (func (export "ge_s") (param $x v128) (param $y v128) (result v128) ({lane_type}.ge_s (local.get $x) (local.get $y))) ) {normal_case} ;; Type check (assert_invalid (module (func (result v128) ({lane_type}.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.ne (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) ({lane_type}.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") """ def get_case_data(self): forms = ['i64x2'] * 3 case_data = [] case_data.append(['#', 'eq']) case_data.append(['#', 'i64x2.eq (i64x2) (i64x2)']) case_data.append(['eq', ['0xFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFF'], '-1', forms]) case_data.append(['eq', ['0x0000000000000000', '0x0000000000000000'], '-1', forms]) case_data.append(['eq', ['0xF0F0F0F0F0F0F0F0', '0xF0F0F0F0F0F0F0F0'], '-1', forms]) case_data.append(['eq', ['0x0F0F0F0F0F0F0F0F', '0x0F0F0F0F0F0F0F0F'], '-1', forms]) case_data.append(['eq', [['0xFFFFFFFFFFFFFFFF', '0x0000000000000000'], ['0xFFFFFFFFFFFFFFFF', '0x0000000000000000']], '-1', forms]) case_data.append(['eq', [['0x0000000000000000', '0xFFFFFFFFFFFFFFFF'], ['0x0000000000000000', '0xFFFFFFFFFFFFFFFF']], '-1', forms]) case_data.append(['eq', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '-1', forms]) case_data.append(['eq', ['0xFFFFFFFFFFFFFFFF', '0x0FFFFFFFFFFFFFFF'], '0', forms]) case_data.append(['eq', ['0x1', '0x2'], '0', forms]) case_data.append(['#', 'ne']) case_data.append(['#', 'i64x2.ne (i64x2) (i64x2)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ne', ['0xFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFF'], '0', forms]) case_data.append(['ne', ['0x0000000000000000', '0x0000000000000000'], '0', forms]) case_data.append(['ne', ['0xF0F0F0F0F0F0F0F0', '0xF0F0F0F0F0F0F0F0'], '0', forms]) case_data.append(['ne', ['0x0F0F0F0F0F0F0F0F', '0x0F0F0F0F0F0F0F0F'], '0', forms]) case_data.append(['ne', [['0xFFFFFFFFFFFFFFFF', '0x0000000000000000'], ['0xFFFFFFFFFFFFFFFF', '0x0000000000000000']], '0', forms]) case_data.append(['ne', [['0x0000000000000000', '0xFFFFFFFFFFFFFFFF'], ['0x0000000000000000', '0xFFFFFFFFFFFFFFFF']], '0', forms]) case_data.append(['ne', [['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B'], ['0x03020100', '0x11100904', '0x1A0B0A12', '0xFFABAA1B']], '0', forms]) # lt_s # i64x2.lt_s (i64x2) (i64x2) case_data.append(['#', 'lt_s']) case_data.append(['#', 'i64x2.lt_s (i64x2) (i64x2)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_s', ['0xFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFF'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0x0000000000000000', '0x0000000000000000'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0xF0F0F0F0F0F0F0F0', '0xF0F0F0F0F0F0F0F0'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0x0F0F0F0F0F0F0F0F', '0x0F0F0F0F0F0F0F0F'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['0xFFFFFFFFFFFFFFFF', '0x0000000000000000'], ['0xFFFFFFFFFFFFFFFF', '0x0000000000000000']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['0x0000000000000000', '0xFFFFFFFFFFFFFFFF'], ['0x0000000000000000', '0xFFFFFFFFFFFFFFFF']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['0x0302010011100904', '0x1A0B0A12FFABAA1B'], ['0x0302010011100904', '0x1A0B0A12FFABAA1B']], '0', ['i64x2', 'i64x2', 'i64x2']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['lt_s', ['0xFFFFFFFFFFFFFFFF', '18446744073709551615'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0xFFFFFFFFFFFFFFFF', '-1'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0x8080808080808080', '9259542123273814144'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0x8080808080808080', '-9187201950435737472'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['0x8382818000FFFEFD', '0x7F020100FFFEFD80'], ['-8970465120996032771', '9151878496576798080']], '0', ['i64x2', 'i64x2', 'i64x2']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['lt_s', ['-1', '-1'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['0', '0'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['18446744073709551615', '18446744073709551615'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', ['18446744073709551615', '-1'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['18446744073709551615', '0'], ['18446744073709551615', '0']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['0', '18446744073709551615'], ['0', '18446744073709551615']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['lt_s', [['-9223372036854775807', '18446744073709551615'], ['9223372036854775809', '-1']], '0', ['i64x2', 'i64x2', 'i64x2']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['lt_s', [['0xc060000000000000', '0xc05fc00000000000'], ['-128.0', '-127.0']], '0', ['i64x2', 'f64x2', 'i64x2']]) case_data.append(['lt_s', [['0x3ff0000000000000', '0x405fc00000000000'], ['1.0', '127.0']], '0', ['i64x2', 'f64x2', 'i64x2']]) # le_s # i64x2.le_s (i64x2) (i64x2) case_data.append(['#', 'le_s']) case_data.append(['#', 'i64x2.le_s (i64x2) (i64x2)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_s', ['0xFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFF'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0x0000000000000000', '0x0000000000000000'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0xF0F0F0F0F0F0F0F0', '0xF0F0F0F0F0F0F0F0'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0x0F0F0F0F0F0F0F0F', '0x0F0F0F0F0F0F0F0F'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['0xFFFFFFFFFFFFFFFF', '0x0000000000000000'], ['0xFFFFFFFFFFFFFFFF', '0x0000000000000000']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['0x0000000000000000', '0xFFFFFFFFFFFFFFFF'], ['0x0000000000000000', '0xFFFFFFFFFFFFFFFF']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['0x0302010011100904', '0x1A0B0A12FFABAA1B'], ['0x0302010011100904', '0x1A0B0A12FFABAA1B']], '-1', ['i64x2', 'i64x2', 'i64x2']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_s', ['0xFFFFFFFFFFFFFFFF', '18446744073709551615'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0xFFFFFFFFFFFFFFFF', '-1'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0x8080808080808080', '9259542123273814144'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0x8080808080808080', '-9187201950435737472'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['0x8382818000FFFEFD', '0x7F020100FFFEFD80'], ['-8970465120996032771', '9151878496576798080']], '-1', ['i64x2', 'i64x2', 'i64x2']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_s', ['-1', '-1'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['0', '0'], ['0', '-1']], ['-1', '0'], ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['0', '0'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['18446744073709551615', '18446744073709551615'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', ['18446744073709551615', '-1'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['18446744073709551615', '0'], ['18446744073709551615', '0']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['0', '18446744073709551615'], ['0', '18446744073709551615']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['le_s', [['-9223372036854775807', '18446744073709551615'], ['9223372036854775809', '-1']], '-1', ['i64x2', 'i64x2', 'i64x2']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_s', [['0xc060000000000000', '0xc05fc00000000000'], ['-128.0', '-127.0']], '-1', ['i64x2', 'f64x2', 'i64x2']]) case_data.append(['le_s', [['0x3ff0000000000000', '0x405fc00000000000'], ['1.0', '127.0']], '-1', ['i64x2', 'f64x2', 'i64x2']]) # gt_s # i64x2.gt_s (i64x2) (i64x2) case_data.append(['#', 'gt_s']) case_data.append(['#', 'i64x2.gt_s (i64x2) (i64x2)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_s', ['0xFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFF'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0x0000000000000000', '0x0000000000000000'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0xF0F0F0F0F0F0F0F0', '0xF0F0F0F0F0F0F0F0'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0x0F0F0F0F0F0F0F0F', '0x0F0F0F0F0F0F0F0F'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['0xFFFFFFFFFFFFFFFF', '0x0000000000000000'], ['0xFFFFFFFFFFFFFFFF', '0x0000000000000000']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['0x0000000000000000', '0xFFFFFFFFFFFFFFFF'], ['0x0000000000000000', '0xFFFFFFFFFFFFFFFF']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['0x0302010011100904', '0x1A0B0A12FFABAA1B'], ['0x0302010011100904', '0x1A0B0A12FFABAA1B']], '0', ['i64x2', 'i64x2', 'i64x2']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_s', ['0xFFFFFFFFFFFFFFFF', '18446744073709551615'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0xFFFFFFFFFFFFFFFF', '-1'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0x8080808080808080', '9259542123273814144'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0x8080808080808080', '-9187201950435737472'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['0x8382818000FFFEFD', '0x7F020100FFFEFD80'], ['-8970465120996032771', '9151878496576798080']], '0', ['i64x2', 'i64x2', 'i64x2']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['gt_s', ['-1', '-1'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['0', '0'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['18446744073709551615', '18446744073709551615'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', ['18446744073709551615', '-1'], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['18446744073709551615', '0'], ['18446744073709551615', '0']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['0', '18446744073709551615'], ['0', '18446744073709551615']], '0', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['gt_s', [['-9223372036854775807', '18446744073709551615'], ['9223372036854775809', '-1']], '0', ['i64x2', 'i64x2', 'i64x2']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_s', [['0xc060000000000000', '0xc05fc00000000000'], ['-128.0', '-127.0']], '0', ['i64x2', 'f64x2', 'i64x2']]) case_data.append(['gt_s', [['0x3ff0000000000000', '0x405fc00000000000'], ['1.0', '127.0']], '0', ['i64x2', 'f64x2', 'i64x2']]) # ge_s # i64x2.ge_s (i64x2) (i64x2) case_data.append(['#', 'ge_s']) case_data.append(['#', 'i64x2.ge_s (i64x2) (i64x2)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_s', ['0xFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFF'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0x0000000000000000', '0x0000000000000000'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0xF0F0F0F0F0F0F0F0', '0xF0F0F0F0F0F0F0F0'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0x0F0F0F0F0F0F0F0F', '0x0F0F0F0F0F0F0F0F'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['0xFFFFFFFFFFFFFFFF', '0x0000000000000000'], ['0xFFFFFFFFFFFFFFFF', '0x0000000000000000']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['0x0000000000000000', '0xFFFFFFFFFFFFFFFF'], ['0x0000000000000000', '0xFFFFFFFFFFFFFFFF']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['0x0302010011100904', '0x1A0B0A12FFABAA1B'], ['0x0302010011100904', '0x1A0B0A12FFABAA1B']], '-1', ['i64x2', 'i64x2', 'i64x2']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_s', ['0xFFFFFFFFFFFFFFFF', '18446744073709551615'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0xFFFFFFFFFFFFFFFF', '-1'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0x8080808080808080', '9259542123273814144'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0x8080808080808080', '-9187201950435737472'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['0x8382818000FFFEFD', '0x7F020100FFFEFD80'], ['-8970465120996032771', '9151878496576798080']], '-1', ['i64x2', 'i64x2', 'i64x2']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_s', ['-1', '-1'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['-1', '-1'], ['0', '-1']], ['0', '-1'], ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['18446744073709551615', '18446744073709551615'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', ['18446744073709551615', '-1'], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['18446744073709551615', '0'], ['18446744073709551615', '0']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['0', '18446744073709551615'], ['0', '18446744073709551615']], '-1', ['i64x2', 'i64x2', 'i64x2']]) case_data.append(['ge_s', [['-9223372036854775807', '18446744073709551615'], ['9223372036854775809', '-1']], '-1', ['i64x2', 'i64x2', 'i64x2']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_s', [['0xc060000000000000', '0xc05fc00000000000'], ['-128.0', '-127.0']], '-1', ['i64x2', 'f64x2', 'i64x2']]) case_data.append(['ge_s', [['0x3ff0000000000000', '0x405fc00000000000'], ['1.0', '127.0']], '-1', ['i64x2', 'f64x2', 'i64x2']]) return case_data def gen_test_cases(): i64x2 = Simdi64x2CmpCase() i64x2.gen_test_cases() if __name__ == '__main__': i64x2 = Simdi64x2CmpCase() i64x2.gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i8x16_arith.py ================================================ #!/usr/bin/env python3 """ Generate i8x16 integer arithmetic operation cases. """ from simd_arithmetic import SimdArithmeticCase class SimdI8x16ArithmeticCase(SimdArithmeticCase): LANE_LEN = 16 LANE_TYPE = 'i8x16' BINARY_OPS = ('add', 'sub') @property def hex_binary_op_test_data(self): return [ ('0x3f', '0x40'), ('0x40', '0x40'), ('-0x3f', '-0x40'), ('-0x40', '-0x40'), ('-0x40', '-0x41'), ('0x7f', '0x7f'), ('0x7f', '0x01'), ('0x80', '-0x01'), ('0x7f', '0x80'), ('0x80', '0x80'), ('0xff', '0x01'), ('0xff', '0xff') ] @property def hex_unary_op_test_data(self): return ['0x01', '-0x01', '-0x80', '-0x7f', '0x7f', '0x80', '0xff'] @property def i8x16_i16x8_test_data(self): return { 'i8x16.add': [ [['0x7f', '0x8080'], '-1', ['i8x16', 'i16x8', 'i8x16']], [['1', '65535'], '0', ['i8x16', 'i16x8', 'i8x16']] ], 'i8x16.sub': [ [['0x7f', '0x8080'], '-1', ['i8x16', 'i16x8', 'i8x16']], [['1', '65535'], '2', ['i8x16', 'i16x8', 'i8x16']] ] } @property def i8x16_i32x4_test_data(self): return { 'i8x16.add': [ [['0x7f', '0x80808080'], '-1', ['i8x16', 'i32x4', 'i8x16']], [['1', '0xffffffff'], '0', ['i8x16', 'i32x4', 'i8x16']] ], 'i8x16.sub': [ [['0x7f', '0x80808080'], '-1', ['i8x16', 'i32x4', 'i8x16']], [['1', '0xffffffff'], '2', ['i8x16', 'i32x4', 'i8x16']] ] } @property def i8x16_f32x4_test_data(self): return { 'i8x16.add': [ [['0x80', '+0.0'], '0x80', ['i8x16', 'f32x4', 'i8x16']], [['0x80', '-0.0'], ['0x80', '0x80', '0x80', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['0x80', '1.0'], ['0x80', '0x80', '0', '0xbf'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['0x80', '-1.0'], ['0x80', '0x80', '0', '0x3f'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '+inf'], ['0x01', '0x01', '0x81', '0x80'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-inf'], ['0x01', '0x01', '0x81', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', 'nan'], ['0x01', '0x01', '0xc1', '0x80'] * 4, ['i8x16', 'f32x4', 'i8x16']] ], 'i8x16.sub': [ [['0x80', '+0.0'], '0x80', ['i8x16', 'f32x4', 'i8x16']], [['0x80', '-0.0'], ['0x80', '0x80', '0x80', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['0x80', '1.0'], ['0x80', '0x80', '0', '0x41'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['0x80', '-1.0'], ['0x80', '0x80', '0', '0xc1'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '+inf'], ['0x01', '0x01', '0x81', '0x82'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-inf'], ['0x01', '0x01', '0x81', '0x02'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', 'nan'], ['0x01', '0x01', '0x41', '0x82'] * 4, ['i8x16', 'f32x4', 'i8x16']] ] } @property def combine_dec_hex_test_data(self): return { 'i8x16.add': [ [[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'], ['0', '0xff', '0xfe', '0xfd', '0xfc', '0xfb', '0xfa', '0xf9', '0xf8', '0xf7', '0xf6', '0xf5', '0xf4', '0xf3', '0xf2', '0xf1']], ['0'] * 16, ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.sub': [ [[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'], ['0', '0xff', '0xfe', '0xfd', '0xfc', '0xfb', '0xfa', '0xf9', '0xf8', '0xf7', '0xf6', '0xf5', '0xf4', '0xf3', '0xf2', '0xf1']], ['0', '0x02', '0x04', '0x06', '0x08', '0x0a', '0x0c', '0x0e', '0x10', '0x12', '0x14', '0x16', '0x18', '0x1a', '0x1c', '0x1e'], ['i8x16', 'i8x16', 'i8x16']] ] } @property def range_test_data(self): return { 'i8x16.add': [ [[[str(i) for i in range(16)], [str(i * 2) for i in range(16)]], [str(i * 3) for i in range(16)], ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.sub': [ [[[str(i) for i in range(16)], [str(i * 2) for i in range(16)]], [str(-i) for i in range(16)], ['i8x16', 'i8x16', 'i8x16']] ] } @property def combine_ternary_arith_test_data(self): test_data = super().combine_ternary_arith_test_data test_data.pop('mul-add') test_data.pop('mul-sub') return test_data @property def combine_binary_arith_test_data(self): test_data = super().combine_binary_arith_test_data test_data.pop('mul-neg') return test_data @property def full_bin_test_data(self): return [ self.i8x16_i16x8_test_data, self.i8x16_i32x4_test_data, self.i8x16_f32x4_test_data, self.combine_dec_hex_test_data, self.range_test_data ] def gen_test_cases(): simd_i8x16_arith = SimdI8x16ArithmeticCase() simd_i8x16_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_i8x16_cmp.py ================================================ #!/usr/bin/env python3 """ This file is used for generating i8x16 related test cases which inherites from the 'SimdCmpCase' class and overloads with the 'get_test_cases' method. """ from simd_compare import SimdCmpCase # Generate i8x16 test case class Simdi8x16CmpCase(SimdCmpCase): # set lane type LANE_TYPE = 'i8x16' BINARY_OPS = ['eq', 'ne', 'lt_s', 'lt_u', 'le_s', 'le_u', 'gt_s', 'gt_u', 'ge_s', 'ge_u'] # Overload base class method and set test data for i32x4. def get_case_data(self): case_data = [] # i8x16.eq (i8x16) (i8x16) # hex vs hex case_data.append(['#', 'eq']) case_data.append(['#', 'i8x16.eq (i8x16) (i8x16)']) case_data.append(['#', 'hex vs hex']) case_data.append(['eq', ['0xFF', '0xFF'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0x00', '0x00'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0xF0', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0x0F', '0x0F'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0xFF', '0x00'], ['0xFF', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0x00', '0xFF'], ['0x00', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['eq', ['0xFF', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0xFF', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0x80', '128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0x80', '-128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['eq', ['-1', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['0', '0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['255', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', ['255', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['255', '0'], ['255', '0']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0', '255'], ['0', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['eq', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['eq', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['eq', ['0x0F', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0x00', '0xFF'], ['0xFF', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '0', '0', '0', '0', '-1', '-1', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['eq', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '0', '0', '0', '0', '-1', '-1', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) # i8x16.eq (i8x16) (i16x8) case_data.append(['#', 'i8x16.eq (i8x16) (i16x8)']) case_data.append(['eq', ['0xFF', '0xFFFF'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['eq', ['255', '65535'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['eq', ['0', '0'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['eq', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['eq', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['eq', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['-1', '0', '-1', '0', '-1', '-1', '-1', '-1', '-1', '0', '-1', '0', '-1', '0', '-1', '0'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['eq', ['0x55', '0xAAAA'], '0', ['i8x16', 'i16x8', 'i8x16']]) # i8x16.eq (i8x16) (i32x4) case_data.append(['#', 'i8x16.eq (i8x16) (i32x4)']) case_data.append(['eq', ['0xFF', '0xFFFFFFFF'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['eq', ['255', '4294967295'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['eq', ['0', '0'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['eq', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['eq', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['eq', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '-1', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['eq', ['0x55', '0xAAAAAAAA'], '0', ['i8x16', 'i32x4', 'i8x16']]) # ne # i8x16.ne (i8x16) (i8x16) case_data.append(['#', 'ne']) case_data.append(['#', 'i8x16.ne (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ne', ['0xFF', '0xFF'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0x00', '0x00'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0xF0', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0x0F', '0x0F'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0xFF', '0x00'], ['0xFF', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0x00', '0xFF'], ['0x00', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ne', ['0xFF', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0xFF', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0x80', '128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0x80', '-128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ne', ['-1', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['0', '0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['255', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', ['255', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['255', '0'], ['255', '0']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0', '255'], ['0', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ne', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['ne', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ne', ['0x0F', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0x00', '0xFF'], ['0xFF', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ne', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) # i8x16.ne (i8x16) (i16x8) case_data.append(['#', 'i8x16.ne (i8x16) (i16x8)']) case_data.append(['ne', ['0xFF', '0xFFFF'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ne', ['255', '65535'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ne', ['0', '0'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ne', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ne', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ne', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['0', '-1', '0', '-1', '0', '0', '0', '0', '0', '-1', '0', '-1', '0', '-1', '0', '-1'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ne', ['0x55', '0xAAAA'], '-1', ['i8x16', 'i16x8', 'i8x16']]) # i8x16.ne (i8x16) (i32x4) case_data.append(['#', 'i8x16.ne (i8x16) (i32x4)']) case_data.append(['ne', ['0xFF', '0xFFFFFFFF'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ne', ['255', '4294967295'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ne', ['0', '0'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ne', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ne', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ne', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1', '0', '0', '0', '0', '0', '-1', '-1', '-1', '0', '-1', '-1', '-1'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ne', ['0x55', '0xAAAAAAAA'], '-1', ['i8x16', 'i32x4', 'i8x16']]) # lt_s case_data.append(['#', 'lt_s']) case_data.append(['#', 'i8x16.lt_s (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_s', ['0xFF', '0xFF'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0x00', '0x00'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0xF0', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0x0F', '0x0F'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0xFF', '0x00'], ['0xFF', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0xFF'], ['0x00', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['lt_s', ['0xFF', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0xFF', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0x80', '128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0x80', '-128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['lt_s', ['-1', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['0', '0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['255', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', ['255', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['255', '0'], ['255', '0']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0', '255'], ['0', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['lt_s', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['lt_s', ['0x0F', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0xFF'], ['0xFF', '0x00']], ['0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['0', '0', '0', '-1', '-1', '-1', '0', '-1', '0', '-1', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '-1', '-1', '-1', '0', '0', '0', '0', '0', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '-1', '-1', '-1', '0', '0', '0', '0', '0', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.lt_s (i8x16) (i16x8)']) case_data.append(['lt_s', ['0xFF', '0xFFFF'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_s', ['255', '65535'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_s', ['0', '0'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['0', '-1', '0', '-1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '0', '-1'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_s', ['0x55', '0xAAAA'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.lt_s (i8x16) (i32x4)']) case_data.append(['lt_s', ['0xFF', '0xFFFFFFFF'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_s', ['255', '4294967295'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_s', ['0', '0'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_s', ['0x55', '0xAAAAAAAA'], '0', ['i8x16', 'i32x4', 'i8x16']]) # lt_u case_data.append(['#', 'lt_u']) case_data.append(['#', 'i8x16.lt_u (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['lt_u', ['0xFF', '0xFF'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0x00', '0x00'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0xF0', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0x0F', '0x0F'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0xFF', '0x00'], ['0xFF', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0xFF'], ['0x00', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['lt_u', ['0xFF', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0xFF', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0x80', '128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0x80', '-128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['lt_u', ['-1', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['0', '0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['255', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', ['255', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['255', '0'], ['255', '0']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0', '255'], ['0', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['lt_u', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['lt_u', ['0x0F', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0xFF'], ['0xFF', '0x00']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['-1', '-1', '-1', '-1', '-1', '-1', '0', '-1', '0', '-1', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['lt_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.lt_u (i8x16) (i16x8)']) case_data.append(['lt_u', ['0xFF', '0xFFFF'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_u', ['255', '65535'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_u', ['0', '0'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['0', '-1', '0', '-1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['lt_u', ['0x55', '0xAAAA'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.lt_u (i8x16) (i32x4)']) case_data.append(['lt_u', ['0xFF', '0xFFFFFFFF'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_u', ['255', '4294967295'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_u', ['0', '0'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['0', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['lt_u', ['0x55', '0xAAAAAAAA'], '-1', ['i8x16', 'i32x4', 'i8x16']]) # le_s case_data.append(['#', 'le_s']) case_data.append(['#', 'i8x16.le_s (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_s', ['0xFF', '0xFF'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0x00', '0x00'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0xF0', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0x0F', '0x0F'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0xFF', '0x00'], ['0xFF', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0x00', '0xFF'], ['0x00', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_s', ['0xFF', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0xFF', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0x80', '128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0x80', '-128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_s', ['-1', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['0', '0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['255', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', ['255', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['255', '0'], ['255', '0']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0', '255'], ['0', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_s', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['le_s', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['le_s', ['0x0F', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0x00', '0xFF'], ['0xFF', '0x00']], ['0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['0', '0', '0', '-1', '-1', '-1', '0', '-1', '0', '-1', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.le_s (i8x16) (i16x8)']) case_data.append(['le_s', ['0xFF', '0xFFFF'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_s', ['255', '65535'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_s', ['0', '0'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '-1', '0', '-1', '-1', '-1', '-1'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_s', ['0x55', '0xAAAA'], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.le_s (i8x16) (i32x4)']) case_data.append(['le_s', ['0xFF', '0xFFFFFFFF'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_s', ['255', '4294967295'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_s', ['0', '0'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '-1', '-1', '-1', '-1'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_s', ['0x55', '0xAAAAAAAA'], '0', ['i8x16', 'i32x4', 'i8x16']]) # le_u case_data.append(['#', 'le_u']) case_data.append(['#', 'i8x16.le_u (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['le_u', ['0xFF', '0xFF'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0x00', '0x00'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0xF0', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0x0F', '0x0F'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0xFF', '0x00'], ['0xFF', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0x00', '0xFF'], ['0x00', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['le_u', ['0xFF', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0xFF', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0x80', '128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0x80', '-128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['le_u', ['-1', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['0', '0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['255', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', ['255', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['255', '0'], ['255', '0']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0', '255'], ['0', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['le_u', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['le_u', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['le_u', ['0x0F', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0x00', '0xFF'], ['0xFF', '0x00']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['-1', '-1', '-1', '-1', '-1', '-1', '0', '-1', '0', '-1', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['le_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['-1', '-1', '-1', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.le_u (i8x16) (i16x8)']) case_data.append(['le_u', ['0xFF', '0xFFFF'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_u', ['255', '65535'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_u', ['0', '0'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '-1', '0', '-1', '0', '-1', '0'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['le_u', ['0x55', '0xAAAA'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.le_u (i8x16) (i32x4)']) case_data.append(['le_u', ['0xFF', '0xFFFFFFFF'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_u', ['255', '4294967295'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_u', ['0', '0'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '-1', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['le_u', ['0x55', '0xAAAAAAAA'], '-1', ['i8x16', 'i32x4', 'i8x16']]) # gt_s case_data.append(['#', 'gt_s']) case_data.append(['#', 'i8x16.gt_s (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_s', ['0xFF', '0xFF'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0x00', '0x00'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0xF0', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0x0F', '0x0F'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0xFF', '0x00'], ['0xFF', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0xFF'], ['0x00', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_s', ['0xFF', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0xFF', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0x80', '128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0x80', '-128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['gt_s', ['-1', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['0', '0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['255', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', ['255', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['255', '0'], ['255', '0']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0', '255'], ['0', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_s', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['gt_s', ['0x0F', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0xFF'], ['0xFF', '0x00']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['-1', '-1', '-1', '0', '0', '0', '-1', '0', '-1', '0', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '0', '0', '0', '0', '0', '-1', '-1', '-1', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '0', '0', '0', '0', '0', '-1', '-1', '-1', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.gt_s (i8x16) (i16x8)']) case_data.append(['gt_s', ['0xFF', '0xFFFF'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_s', ['255', '65535'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_s', ['0', '0'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '0', '-1', '0', '0', '0', '0'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_s', ['0x55', '0xAAAA'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.gt_s (i8x16) (i32x4)']) case_data.append(['gt_s', ['0xFF', '0xFFFFFFFF'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_s', ['255', '4294967295'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_s', ['0', '0'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '0', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_s', ['0x55', '0xAAAAAAAA'], '-1', ['i8x16', 'i32x4', 'i8x16']]) # gt_u case_data.append(['#', 'gt_u']) case_data.append(['#', 'i8x16.gt_u (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['gt_u', ['0xFF', '0xFF'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0x00', '0x00'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0xF0', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0x0F', '0x0F'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0xFF', '0x00'], ['0xFF', '0x00']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0xFF'], ['0x00', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['gt_u', ['0xFF', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0xFF', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0x80', '128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0x80', '-128'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['gt_u', ['-1', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['0', '0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['255', '255'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', ['255', '-1'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['255', '0'], ['255', '0']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0', '255'], ['0', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '0', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['gt_u', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '0', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['gt_u', ['0x0F', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0xFF'], ['0xFF', '0x00']], ['0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['0', '0', '0', '0', '0', '0', '-1', '0', '-1', '0', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['gt_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.gt_u (i8x16) (i16x8)']) case_data.append(['gt_u', ['0xFF', '0xFFFF'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_u', ['255', '65535'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_u', ['0', '0'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '0', '-1', '0', '-1', '0', '-1'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['gt_u', ['0x55', '0xAAAA'], '0', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.gt_u (i8x16) (i32x4)']) case_data.append(['gt_u', ['0xFF', '0xFFFFFFFF'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_u', ['255', '4294967295'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_u', ['0', '0'], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '0', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '0', '-1', '-1', '-1'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['gt_u', ['0x55', '0xAAAAAAAA'], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) # ge_s case_data.append(['#', 'ge_s']) case_data.append(['#', 'i8x16.ge_s (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_s', ['0xFF', '0xFF'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0x00', '0x00'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0xF0', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0x0F', '0x0F'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0xFF', '0x00'], ['0xFF', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0xFF'], ['0x00', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_s', ['0xFF', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0xFF', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0x80', '128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0x80', '-128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_s', ['-1', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['255', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', ['255', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['255', '0'], ['255', '0']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0', '255'], ['0', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_s', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ge_s', ['0x0F', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0xFF'], ['0xFF', '0x00']], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['-1', '-1', '-1', '0', '0', '0', '-1', '0', '-1', '0', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_s', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['#', 'i8x16.ge_s (i8x16) (i16x8)']) case_data.append(['ge_s', ['0xFF', '0xFFFF'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_s', ['255', '65535'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['-1', '0', '-1', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '-1', '0'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_s', ['0x55', '0xAAAA'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['#', 'i8x16.ge_s (i8x16) (i32x4)']) case_data.append(['ge_s', ['0xFF', '0xFFFFFFFF'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_s', ['255', '4294967295'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_s', ['0', '0'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_s', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_s', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_s', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_s', ['0x55', '0xAAAAAAAA'], '-1', ['i8x16', 'i32x4', 'i8x16']]) # ge_u # i8x16.ge_u (i8x16) (i8x16) case_data.append(['#', 'ge_u']) case_data.append(['#', 'i8x16.ge_u (i8x16) (i8x16)']) # hex vs hex case_data.append(['#', 'hex vs hex']) case_data.append(['ge_u', ['0xFF', '0xFF'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0x00', '0x00'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0xF0', '0xF0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0x0F', '0x0F'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0xFF', '0x00'], ['0xFF', '0x00']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0xFF'], ['0x00', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs dec case_data.append(['#', 'hex vs dec']) case_data.append(['ge_u', ['0xFF', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0xFF', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0x80', '128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0x80', '-128'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # dec vs dec case_data.append(['#', 'dec vs dec']) case_data.append(['ge_u', ['-1', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['255', '255'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', ['255', '-1'], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['255', '0'], ['255', '0']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0', '255'], ['0', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['-128', '-127', '-126', '-125', '-3', '-2', '-1', '-0', '0', '1', '2', '127', '128', '253', '254', '255']], '-1', ['i8x16', 'i8x16', 'i8x16']]) # hex vs float case_data.append(['#', 'hex vs float']) case_data.append(['ge_u', [['0x00', '0x00', '0x00', '0xc3', '0x00', '0x00', '0xfe', '0xc2', '0x00', '0x00', '0x80', '0xbf', '0x00', '0x00', '0x00', '0x00'], ['-128.0', '-127.0', '-1.0', '0.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0x00', '0x80', '0x3f', '0x00', '0x00', '0xfe', '0x42', '0x00', '0x00', '0x00', '0x43', '0x00', '0x00', '0x7f', '0x43'], ['1.0', '127.0', '128.0', '255.0']], '-1', ['i8x16', 'f32x4', 'i8x16']]) # not equal case_data.append(['#', 'not equal']) case_data.append(['ge_u', ['0x0F', '0xF0'], '0', ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0xFF'], ['0xFF', '0x00']], ['0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x09', '0x10', '0x11', '0x12', '0x0A', '0x0B', '0x1A', '0x1B', '0xAA', '0xAB', '0xFF'], ['0xFF', '0xAB', '0xAA', '0x1B', '0x1A', '0x0B', '0x0A', '0x12', '0x11', '0x10', '0x09', '0x04', '0x03', '0x02', '0x01', '0x00']], ['0', '0', '0', '0', '0', '0', '-1', '0', '-1', '0', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['0x80', '0x81', '0x82', '0x83', '0xFD', '0xFE', '0xFF', '0x00', '0x00', '0x01', '0x02', '0x7F', '0x80', '0xFD', '0xFE', '0xFF'], ['255', '254', '253', '128', '127', '2', '1', '0', '0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) case_data.append(['ge_u', [['128', '129', '130', '131', '253', '254', '255', '-0', '0', '1', '2', '127', '128', '253', '254', '255'], ['255', '254', '253', '128', '127', '2', '1', '0', '-0', '-1', '-2', '-3', '-125', '-126', '-127', '-128']], ['0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0', '-1', '-1', '-1'], ['i8x16', 'i8x16', 'i8x16']]) # i8x16.ge_u (i8x16) (i16x8) case_data.append(['#', 'i8x16.ge_u (i8x16) (i16x8)']) case_data.append(['ge_u', ['0xFF', '0xFFFF'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_u', ['255', '65535'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x0100', '0x0302', '0x0504', '0x0706', '0x0908', '0x0B0A', '0x0D0C', '0x0F0E']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['33152', '33666', '65277', '255', '256', '32514', '64896', '65534']], '-1', ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '-128', '0', '0', '1', '1', '255', '255']], ['-1', '0', '-1', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i16x8', 'i8x16']]) case_data.append(['ge_u', ['0x55', '0xAAAA'], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i16x8', 'i8x16']]) # i8x16.ge_u (i8x16) (i32x4) case_data.append(['#', 'i8x16.ge_u (i8x16) (i32x4)']) case_data.append(['ge_u', ['0xFF', '0xFFFFFFFF'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_u', ['255', '4294967295'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_u', ['0', '0'], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_u', [['0x00', '0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0A', '0x0B', '0x0C', '0x0D', '0x0E', '0x0F'], ['0x03020100', '0x07060504', '0x0B0A0908', '0x0F0E0D0C']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_u', [['-128', '-127', '-126', '-125', '-3', '-2', '-1', '0', '0', '1', '2', '127', '128', '253', '254', '255'], ['2206368128', '16776957', '2130837760', '4294901120']], '-1', ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_u', [['-128', '-128', '-128', '-128', '0', '0', '0', '0', '1', '1', '1', '1', '255', '255', '255', '255'], ['-128', '0', '1', '255']], ['-1', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['i8x16', 'i32x4', 'i8x16']]) case_data.append(['ge_u', ['0x55', '0xAAAAAAAA'], ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['i8x16', 'i32x4', 'i8x16']]) return case_data def gen_test_cases(): i8x16 = Simdi8x16CmpCase() i8x16.gen_test_cases() if __name__ == '__main__': i8x16 = Simdi8x16CmpCase() i8x16.gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_int_arith2.py ================================================ #!/usr/bin/env python3 """ Generate [min_s, min_u, max_s, max_u] cases for i32x4, i16x8 and i8x16. """ from simd import SIMD from test_assert import AssertReturn, AssertInvalid, AssertMalformed from simd_lane_value import LaneValue from simd_integer_op import ArithmeticOp class SimdLaneWiseInteger: LANE_TYPE = None LANE_VALUE = None BINARY_OPS = ('min_s', 'min_u', 'max_s', 'max_u',) UNARY_OPS = ('abs',) class_summary = """;; Tests for {lane_type} [min_s, min_u, max_s, max_u, avgr_u, abs] operations.""" def __init__(self): self.LANE_VALUE = LaneValue(self.lane_width) @property def lane_count(self): """count of lanes""" return int(self.LANE_TYPE.split('x')[1]) @property def lane_width(self): """width of a single lane""" return int(self.LANE_TYPE.replace('i', '').split('x')[0]) @property def get_unary_complex_test_data(self): """test const vs const and different lanes go through different if-then clauses for unary ops""" case_data = [ [self.LANE_VALUE.min, self.LANE_VALUE.max, self.LANE_VALUE.quarter, self.LANE_VALUE.mask] ] case_data = [list(map(str, param)) for param in case_data] return case_data @property def get_binary_test_data_with_const(self): """test const vs const and param vs const for binary ops""" case_data = [ [ [self.LANE_VALUE.min, self.LANE_VALUE.max, self.LANE_VALUE.quarter, self.LANE_VALUE.mask], [self.LANE_VALUE.mask, self.LANE_VALUE.quarter, self.LANE_VALUE.max, self.LANE_VALUE.min] ], [ [0, 1, 2, 3], [3, 2, 1, 0], ] ] case_data = [[list(map(str, param_1)), list(map(str, param_2))] for param_1, param_2 in case_data] return case_data @property def get_binary_test_data_go_through_if(self): """test different lanes go through different if-then clauses""" case_data = [ [ [self.LANE_VALUE.min, self.LANE_VALUE.max, self.LANE_VALUE.quarter, self.LANE_VALUE.mask], [self.LANE_VALUE.mask, self.LANE_VALUE.quarter, self.LANE_VALUE.max, self.LANE_VALUE.min] ], [ [0, 1, 2, 128], [0, 2, 1, 0x80], ] ] case_data = [[list(map(str, param_1)), list(map(str, param_2))] for param_1, param_2 in case_data] return case_data @property def get_unary_test_data_opposite_sign_zero(self): """test opposite signs of zero for unary ops""" case_data = [ ['-0', '-0', '+0', '+0'], ['+0', '0', '-0', '0'], ['-0', '-0', '-0', '-0'], ['+0', '+0', '+0', '+0'], ] return case_data @property def get_binary_test_data_opposite_sign_zero(self): """test opposite signs of zero for binary ops""" case_data = [ [ ['-0', '-0', '+0', '+0'], ['+0', '0', '-0', '0'], ], [ ['-0', '-0', '-0', '-0'], ['+0', '+0', '+0', '+0'], ] ] return case_data @property def get_unary_test_data(self): """general unary case data""" case_data = [ ['1'] * self.lane_count, ['-1'] * self.lane_count, [str(self.LANE_VALUE.mask)] * self.lane_count, [hex(self.LANE_VALUE.mask)] * self.lane_count, [str(-self.LANE_VALUE.min)] * self.lane_count, [str(self.LANE_VALUE.min)] * self.lane_count, [hex(self.LANE_VALUE.min)] * self.lane_count, [hex(-self.LANE_VALUE.min)] * self.lane_count, ['01_2_3'] * self.lane_count, ['-01_2_3'] * self.lane_count, ['0x80'] * self.lane_count, ['-0x80'] * self.lane_count, ['0x0_8_0'] * self.lane_count, ['-0x0_8_0'] * self.lane_count ] return case_data @property def get_binary_test_data(self): """general binary case data""" case_data = [ [ ['0'] * self.lane_count, ['0'] * self.lane_count, ], [ ['0'] * self.lane_count, ['-1'] * self.lane_count, ], [ ['0', '0', '-1', '-1'], ['0', '-1', '0', '-1'], ], [ ['0'] * self.lane_count, [hex(self.LANE_VALUE.mask)] * self.lane_count, ], [ ['1'] * self.lane_count, ['1'] * self.lane_count, ], [ [str(self.LANE_VALUE.mask)] * self.lane_count, ['1'] * self.lane_count, ], [ [str(self.LANE_VALUE.mask)] * self.lane_count, ['128'] * self.lane_count, ], [ [str(-self.LANE_VALUE.min)] * self.lane_count, [str(self.LANE_VALUE.min)] * self.lane_count, ], [ [hex(-self.LANE_VALUE.min)] * self.lane_count, [str(self.LANE_VALUE.min)] * self.lane_count, ], [ ['123'] * self.lane_count, ['01_2_3'] * self.lane_count, ], [ ['0x80'] * self.lane_count, ['0x0_8_0'] * self.lane_count, ], ] return case_data @property def gen_funcs_normal(self): """generate normal functions""" binary_func_template = '\n (func (export "{lane_type}.{op}") (param v128 v128) (result v128) ({lane_type}.{op} (local.get 0) (local.get 1)))' unary_func_template = '\n (func (export "{lane_type}.{op}") (param v128) (result v128) ({lane_type}.{op} (local.get 0)))' funcs = '' for op in self.BINARY_OPS: funcs += binary_func_template.format(lane_type=self.LANE_TYPE, op=op) for op in self.UNARY_OPS: funcs += unary_func_template.format(lane_type=self.LANE_TYPE, op=op) return funcs @property def gen_funcs_with_const(self): """generate functions with const arguments""" binary_func_with_const = '\n (func (export "{lane_type}.{op}_with_const_{cnt}") (result v128) ({lane_type}.{op} {param_1} {param_2}))' unary_func_with_const = '\n (func (export "{lane_type}.{op}_with_const_{cnt}") (result v128) ({lane_type}.{op} {param}))' binary_func_with_param_and_const = '\n (func (export "{lane_type}.{op}_with_const_{cnt}") (param v128) (result v128) ({lane_type}.{op} (local.get 0) {param_1}))' funcs = '' cnt = 0 for op in self.BINARY_OPS: for param_1, param_2 in self.get_binary_test_data_with_const: funcs += binary_func_with_const.format(lane_type=self.LANE_TYPE, op=op, param_1=SIMD.v128_const(param_1, self.LANE_TYPE), param_2=SIMD.v128_const(param_2, self.LANE_TYPE), cnt=cnt) cnt += 1 for op in self.UNARY_OPS: for param in self.get_unary_complex_test_data: funcs += unary_func_with_const.format(lane_type=self.LANE_TYPE, op=op, param=SIMD.v128_const(param, self.LANE_TYPE), cnt=cnt) cnt += 1 for op in self.BINARY_OPS: for param_1, param_2 in self.get_binary_test_data_with_const: funcs += binary_func_with_param_and_const.format(lane_type=self.LANE_TYPE, op=op, param_1=SIMD.v128_const(param_1, self.LANE_TYPE), cnt=cnt) cnt += 1 return funcs @property def gen_test_case_with_const(self): """generate tests calling function with const""" cnt = 0 cases = '\n\n;; Const vs const' for op in self.BINARY_OPS: o = ArithmeticOp(op) for param_1, param_2 in self.get_binary_test_data_with_const: result = [] for idx in range(0, len(param_1)): result.append(o.binary_op(param_1[idx], param_2[idx], self.LANE_VALUE)) cases += '\n' + str(AssertReturn('{lane_type}.{op}_with_const_{cnt}'.format(lane_type=self.LANE_TYPE, op=op, cnt=cnt), [], SIMD.v128_const(result, self.LANE_TYPE))) cnt += 1 for op in self.UNARY_OPS: o = ArithmeticOp(op) for param in self.get_unary_complex_test_data: result = [] for idx in range(0, len(param)): result.append(o.unary_op(param[idx], self.LANE_VALUE)) cases += '\n' + str(AssertReturn('{lane_type}.{op}_with_const_{cnt}'.format(lane_type=self.LANE_TYPE, op=op, cnt=cnt), [], SIMD.v128_const(result, self.LANE_TYPE))) cnt += 1 cases += '\n\n;; Param vs const' for op in self.BINARY_OPS: o = ArithmeticOp(op) for param_1, param_2 in self.get_binary_test_data_with_const: result = [] for idx in range(0, len(param_1)): result.append(o.binary_op(param_1[idx], param_2[idx], self.LANE_VALUE)) cases += '\n' + str(AssertReturn('{lane_type}.{op}_with_const_{cnt}'.format(lane_type=self.LANE_TYPE, op=op, cnt=cnt), [SIMD.v128_const(param_2, self.LANE_TYPE)], SIMD.v128_const(result, self.LANE_TYPE))) cnt += 1 return cases @property def gen_test_case(self): """generate binary test cases""" cases = '' def gen_binary(case_data): cases = '' for op in self.BINARY_OPS: o = ArithmeticOp(op) for param_1, param_2 in case_data: result = [] for idx in range(0, len(param_1)): result.append(o.binary_op(param_1[idx], param_2[idx], self.LANE_VALUE)) cases += '\n' + str(AssertReturn('{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op), [SIMD.v128_const(param_1, self.LANE_TYPE), SIMD.v128_const(param_2, self.LANE_TYPE)], SIMD.v128_const(result, self.LANE_TYPE))) return cases def gen_unary(case_data): cases = '' for op in self.UNARY_OPS: o = ArithmeticOp(op) for param in case_data: result = [] for idx in range(0, len(param)): result.append(o.unary_op(param[idx], self.LANE_VALUE)) cases += '\n' + str(AssertReturn('{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op), [SIMD.v128_const(param, self.LANE_TYPE)], SIMD.v128_const(result, self.LANE_TYPE))) return cases cases += gen_binary(self.get_binary_test_data) cases += gen_unary(self.get_unary_test_data) cases += self.gen_test_case_with_const # test different lanes go through different if-then clauses cases += '\n\n;; Test different lanes go through different if-then clauses' cases += gen_binary(self.get_binary_test_data_go_through_if) cases += gen_unary(self.get_unary_complex_test_data) # test opposite signs of zero cases += '\n\n;; Test opposite signs of zero' cases += gen_binary(self.get_binary_test_data_opposite_sign_zero) cases += gen_unary(self.get_unary_test_data_opposite_sign_zero) # unknown operators test cases cases += self.gen_test_case_unknown_operators # type check test cases cases += self.gen_test_case_type_check # empty argument test cases cases += self.gen_test_case_empty_argument return cases @property def gen_test_case_unknown_operators(self): """generate unknown operators test cases""" cases = ['\n\n;; Unknown operators'] for op in self.UNKNOWN_BINARY_OPS: cases.append(AssertMalformed.get_unknown_op_test( op, 'v128', SIMD.v128_const('0', self.LANE_TYPE), SIMD.v128_const('1', self.LANE_TYPE) )) if hasattr(self, 'UNKNOWN_UNARY_OPS'): for op in self.UNKNOWN_UNARY_OPS: cases.append(AssertMalformed.get_unknown_op_test( op, 'v128', SIMD.v128_const('-1', self.LANE_TYPE) )) return '\n'.join(cases) @property def gen_test_case_type_check(self): """generate type check test cases""" cases = '\n\n;; Type check' binary_assert_template = '(assert_invalid (module (func (result v128) ({lane_type}.{op} (i32.const 0) (f32.const 0.0)))) "type mismatch")' unary_assert_template = '(assert_invalid (module (func (result v128) ({lane_type}.{op} (f32.const 0.0)))) "type mismatch")' for op in self.BINARY_OPS: cases += '\n' + binary_assert_template.format(lane_type=self.LANE_TYPE, op=op) for op in self.UNARY_OPS: cases += '\n' + unary_assert_template.format(lane_type=self.LANE_TYPE, op=op) return cases @property def gen_funcs_combination(self): """generate functions for combination test cases""" funcs = '\n\n;; Combination' funcs += '\n(module' binary_vs_binary_assert_template = ' (func (export "{lane_type}.{op1}-{lane_type}.{op2}") (param v128 v128 v128) (result v128) ' \ '({lane_type}.{op1} ({lane_type}.{op2} (local.get 0) (local.get 1))(local.get 2))' \ ')' binary_vs_unary_assert_template = ' (func (export "{lane_type}.{op1}-{lane_type}.{op2}") (param v128 v128) (result v128) ' \ '({lane_type}.{op1} ({lane_type}.{op2} (local.get 0))(local.get 1))' \ ')' unary_vs_binary_assert_template = ' (func (export "{lane_type}.{op1}-{lane_type}.{op2}") (param v128 v128) (result v128) ' \ '({lane_type}.{op1} ({lane_type}.{op2} (local.get 0) (local.get 1)))' \ ')' unary_vs_unary_assert_template = ' (func (export "{lane_type}.{op1}-{lane_type}.{op2}") (param v128) (result v128) ' \ '({lane_type}.{op1} ({lane_type}.{op2} (local.get 0)))' \ ')' binary_ops = list(self.BINARY_OPS) binary_ops.reverse() unary_ops = list(self.UNARY_OPS) unary_ops.reverse() for op1 in self.BINARY_OPS: for op2 in binary_ops: funcs += '\n' + binary_vs_binary_assert_template.format(lane_type=self.LANE_TYPE, op1=op1, op2=op2) for op2 in self.UNARY_OPS: funcs += '\n' + binary_vs_unary_assert_template.format(lane_type=self.LANE_TYPE, op1=op1, op2=op2) funcs += '\n' + unary_vs_binary_assert_template.format(lane_type=self.LANE_TYPE, op1=op2, op2=op1) for op1 in self.UNARY_OPS: for op2 in unary_ops: funcs += '\n' + unary_vs_unary_assert_template.format(lane_type=self.LANE_TYPE, op1=op1, op2=op2) funcs += '\n)' return funcs @property def gen_test_case_combination(self): """generate combination test cases""" cases = '\n' binary_ops = list(self.BINARY_OPS) binary_ops.reverse() unary_ops = list(self.UNARY_OPS) unary_ops.reverse() for op1 in self.BINARY_OPS: """binary vs binary""" o1 = ArithmeticOp(op1) for op2 in binary_ops: o2 = ArithmeticOp(op2) result = [] ret = o2.binary_op('0', '1', self.LANE_VALUE) ret = o1.binary_op(ret, '2', self.LANE_VALUE) result.append(ret) cases += '\n' + str(AssertReturn('{lane_type}.{op1}-{lane_type}.{op2}'.format(lane_type=self.LANE_TYPE, op1=op1, op2=op2), [SIMD.v128_const('0', self.LANE_TYPE), SIMD.v128_const('1', self.LANE_TYPE), SIMD.v128_const('2', self.LANE_TYPE)], SIMD.v128_const(result, self.LANE_TYPE))) for op2 in self.UNARY_OPS: """binary vs unary""" o2 = ArithmeticOp(op2) result1 = [] ret1 = o2.unary_op('-1', self.LANE_VALUE) ret1 = o1.binary_op(ret1, '0', self.LANE_VALUE) result1.append(ret1) cases += '\n' + str(AssertReturn('{lane_type}.{op1}-{lane_type}.{op2}'.format(lane_type=self.LANE_TYPE, op1=op1, op2=op2), [SIMD.v128_const('-1', self.LANE_TYPE), SIMD.v128_const('0', self.LANE_TYPE)], SIMD.v128_const(result1, self.LANE_TYPE))) """unary vs binary""" result2 = [] ret2 = o1.binary_op('0', '-1', self.LANE_VALUE) ret2 = o2.unary_op(ret2, self.LANE_VALUE) result2.append(ret2) cases += '\n' + str(AssertReturn('{lane_type}.{op1}-{lane_type}.{op2}'.format(lane_type=self.LANE_TYPE, op1=op2, op2=op1), [SIMD.v128_const('0', self.LANE_TYPE), SIMD.v128_const('-1', self.LANE_TYPE)], SIMD.v128_const(result2, self.LANE_TYPE))) for op1 in self.UNARY_OPS: """unary vs unary""" o1 = ArithmeticOp(op1) for op2 in unary_ops: o2 = ArithmeticOp(op2) result3 = [] ret3 = o2.unary_op('-1', self.LANE_VALUE) ret3 = o1.unary_op(ret3, self.LANE_VALUE) result3.append(ret3) cases += '\n' + str(AssertReturn('{lane_type}.{op1}-{lane_type}.{op2}'.format(lane_type=self.LANE_TYPE, op1=op1, op2=op2), [SIMD.v128_const('-1', self.LANE_TYPE)], SIMD.v128_const(result3, self.LANE_TYPE))) cases += '\n' return cases @property def gen_test_case_empty_argument(self): """generate empty argument test cases""" cases = [] cases.append('\n\n;; Test operation with empty argument\n') case_data = { 'op': '', 'extended_name': 'arg-empty', 'param_type': '', 'result_type': '(result v128)', 'params': '', } for op in self.BINARY_OPS: case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op) case_data['extended_name'] = '1st-arg-empty' case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE) cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) for op in self.UNARY_OPS: case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) return '\n'.join(cases) @property def gen_funcs(self): """generate functions""" funcs = '' funcs += '\n\n(module' funcs += self.gen_funcs_normal funcs += self.gen_funcs_with_const funcs += '\n)\n' return funcs def get_all_cases(self): """generate all test cases""" cases = self.class_summary.format(lane_type=self.LANE_TYPE) \ + self.gen_funcs \ + self.gen_test_case \ + self.gen_funcs_combination \ + self.gen_test_case_combination return cases def gen_test_cases(self): """generate case file""" wast_filename = '../simd_{lane_type}_arith2.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) class Simdi64x2Case(SimdLaneWiseInteger): LANE_TYPE = 'i64x2' class_summary = """;; Tests for {lane_type} [abs] operations.""" BINARY_OPS = () UNKNOWN_BINARY_OPS = () class Simdi32x4Case(SimdLaneWiseInteger): LANE_TYPE = 'i32x4' class_summary = """;; Tests for {lane_type} [min_s, min_u, max_s, max_u, abs] operations.""" UNKNOWN_BINARY_OPS = ('f32x4.min_s', 'f32x4.min_u', 'f32x4.max_s', 'f32x4.max_u', 'i64x2.min_s', 'i64x2.min_u', 'i64x2.max_s', 'i64x2.max_u', 'f64x2.min_s', 'f64x2.min_u', 'f64x2.max_s', 'f64x2.max_u') class Simdi16x8Case(SimdLaneWiseInteger): LANE_TYPE = 'i16x8' BINARY_OPS = ('min_s', 'min_u', 'max_s', 'max_u', 'avgr_u') UNKNOWN_BINARY_OPS = ('i16x8.avgr', 'i16x8.avgr_s') class Simdi8x16Case(SimdLaneWiseInteger): LANE_TYPE = 'i8x16' UNARY_OPS = ('abs','popcnt') BINARY_OPS = ('min_s', 'min_u', 'max_s', 'max_u', 'avgr_u') UNKNOWN_BINARY_OPS = ('i32x4.avgr_u', 'f32x4.avgr_u', 'i64x2.avgr_u', 'f64x2.avgr_u', 'i8x16.avgr', 'i8x16.avgr_s') def gen_test_cases(): simd_i64x2_case = Simdi64x2Case() simd_i64x2_case.gen_test_cases() simd_i32x4_case = Simdi32x4Case() simd_i32x4_case.gen_test_cases() simd_i16x8_case = Simdi16x8Case() simd_i16x8_case.gen_test_cases() simd_i8x16_case = Simdi8x16Case() simd_i8x16_case.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_int_to_int_extend.py ================================================ #!/usr/bin/env python3 """ Generates all integer-to-integer extension test cases. """ from simd import SIMD from simd_arithmetic import SimdArithmeticCase from test_assert import AssertReturn, AssertInvalid class SimdIntToIntExtend(SimdArithmeticCase): LANE_TYPE = "" # unused, can be anything BINARY_OPS = () UNARY_OPS = ( "i16x8.extend_high_i8x16_s", "i16x8.extend_high_i8x16_u", "i16x8.extend_low_i8x16_s", "i16x8.extend_low_i8x16_u", "i32x4.extend_high_i16x8_s", "i32x4.extend_high_i16x8_u", "i32x4.extend_low_i16x8_s", "i32x4.extend_low_i16x8_u", "i64x2.extend_high_i32x4_s", "i64x2.extend_high_i32x4_u", "i64x2.extend_low_i32x4_s", "i64x2.extend_low_i32x4_u", ) TEST_FUNC_TEMPLATE_HEADER = ";; Tests for int-to-int extension operations.\n" def op_name(self, op): # Override base class implementation, since the lane type is already # part of the op name. return "{op}".format(lane_type=self.LANE_TYPE, op=op) def is_unsigned(self, op): return op.endswith("_u") def src_lane_type(self, op): return op[-7:-2] def dst_lane_type(self, op): return op[0:5] def get_test_cases(self, src_value): return [ (0, 0), (0, 1), (0, -1), (1, 0), (-1, 0), (1, -1), ((-1, 1)), ((src_value.max - 1), (src_value.max)), ((src_value.max), (src_value.max - 1)), ((src_value.max), (src_value.max)), ((src_value.min), (src_value.min)), ((src_value.max), (src_value.min)), ((src_value.min), (src_value.max)), ((src_value.max), -1), (-1, (src_value.max)), (((src_value.min + 1), (src_value.min))), ((src_value.min), (src_value.min + 1)), ((src_value.min), (-1)), ((-1), (src_value.min)), ] def get_normal_case(self): cases = [] for op in self.UNARY_OPS: src_lane_type = self.src_lane_type(op) src_value = self.LANE_VALUE[src_lane_type] operands = self.get_test_cases(src_value) for (low, high) in operands: result = low if "low" in op else high if self.is_unsigned(op): # Unsign-extend, mask top bits. result = result & src_value.mask cases.append( str( AssertReturn( op, [SIMD.v128_const([str(low), str(high)], src_lane_type)], SIMD.v128_const(str(result), self.dst_lane_type(op)), ) ) ) cases.append("") return "\n".join(cases) def gen_test_cases(self): wast_filename = "../simd_int_to_int_extend.wast" with open(wast_filename, "w") as fp: fp.write(self.get_all_cases()) def get_combine_cases(self): return "" def gen_test_cases(): simd_int_to_int_extend = SimdIntToIntExtend() simd_int_to_int_extend.gen_test_cases() if __name__ == "__main__": gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_int_trunc_sat_float.py ================================================ #!/usr/bin/env python3 """Base class for generating SIMD .trun_sat_ test cases. Subclasses should set: - LANE_TYPE - SRC_LANE_TYPE - UNARY_OPS """ from abc import abstractmethod import struct from math import trunc from simd import SIMD from simd_arithmetic import SimdArithmeticCase from test_assert import AssertReturn from simd_float_op import FloatingPointOp, FloatingPointRoundingOp from simd_integer_op import ArithmeticOp class SimdConversionCase(SimdArithmeticCase): BINARY_OPS = () TEST_FUNC_TEMPLATE_HEADER = ";; Tests for {} trunc sat conversions from float.\n" def is_signed(self, op): return op.endswith("_s") or op.endswith("_s_zero") def get_test_data(self, lane): return [ "0.0", "-0.0", "1.5", "-1.5", "1.9", "2.0", "-1.9", "-2.0", str(float(lane.max - 127)), str(float(-(lane.max - 127))), str(float(lane.max + 1)), str(float(-(lane.max + 1))), str(float(lane.max * 2)), str(float(-(lane.max * 2))), str(float(lane.max)), str(float(-lane.max)), str(float(lane.mask - 1)), str(float(lane.mask)), str(float(lane.mask + 1)), "0x1p-149", "-0x1p-149", "0x1p-126", "-0x1p-126", "0x1p-1", "-0x1p-1", "0x1p+0", "-0x1p+0", "0x1.19999ap+0", "-0x1.19999ap+0", "0x1.921fb6p+2", "-0x1.921fb6p+2", "0x1.fffffep+127", "-0x1.fffffep+127", "0x1.ccccccp-1", "-0x1.ccccccp-1", "0x1.fffffep-1", "-0x1.fffffep-1", "0x1.921fb6p+2", "-0x1.921fb6p+2", "0x1.fffffep+127", "-0x1.fffffep+127", "+inf", "-inf", "+nan", "-nan", "nan:0x444444", "-nan:0x444444", "42", "-42", "0123456792.0", "01234567890.0", ] def to_float_precision(self, value): # Python supports double precision, so given an an input that cannot be # precisely represented in f32, we need to round it. return value @abstractmethod def to_results(self, result: str): # Subclasses can override this to set the shape of the results. This is # useful if instructions zero top lanes. pass def conversion_op(self, op, operand): fop = FloatingPointRoundingOp() signed = self.is_signed(op) sat_op = ArithmeticOp("sat_s") if signed else ArithmeticOp("sat_u") result = fop.unary_op("trunc", operand, hex_form=False) if result == "nan": return "0" elif result == "+inf": return str(str(self.lane.max) if signed else str(self.lane.mask)) elif result == "-inf": return str(self.lane.min if signed else 0) else: float_result = self.to_float_precision(float(result)) trunced = int(trunc(float_result)) saturated = sat_op.unary_op(trunced, self.lane) return str(saturated) def get_case_data(self): test_data = [] for op in self.UNARY_OPS: op_name = "{}.{}".format(self.LANE_TYPE, op) test_data.append(["#", op_name]) for operand in self.get_test_data(self.lane): operand = str(operand) if "nan" in operand: test_data.append( [op_name, [operand], "0", [self.SRC_LANE_TYPE, self.LANE_TYPE]] ) else: result = self.conversion_op(op_name, operand) results = self.to_results(result) assert "nan" not in result test_data.append( [ op_name, [operand], results, [self.SRC_LANE_TYPE, self.LANE_TYPE], ] ) return test_data def gen_test_cases(self): wast_filename = "../simd_{}_trunc_sat_{}.wast".format( self.LANE_TYPE, self.SRC_LANE_TYPE ) with open(wast_filename, "w") as fp: fp.write(self.get_all_cases()) def get_combine_cases(self): return "" class SimdI32x4TruncSatF32x4Case(SimdConversionCase): LANE_TYPE = "i32x4" SRC_LANE_TYPE = "f32x4" UNARY_OPS = ("trunc_sat_f32x4_s", "trunc_sat_f32x4_u") def to_float_precision(self, value): fop = FloatingPointOp() return fop.to_single_precision(value) def to_results(self, value: str): return [value] class SimdI32x4TruncSatF64x2Case(SimdConversionCase): LANE_TYPE = "i32x4" SRC_LANE_TYPE = "f64x2" UNARY_OPS = ("trunc_sat_f64x2_s_zero", "trunc_sat_f64x2_u_zero") def to_results(self, value: str): return [value, "0"] def gen_test_cases(): i32x4_trunc_sat = SimdI32x4TruncSatF32x4Case() i32x4_trunc_sat.gen_test_cases() i32x4_trunc_sat = SimdI32x4TruncSatF64x2Case() i32x4_trunc_sat.gen_test_cases() if __name__ == "__main__": gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_integer_op.py ================================================ #!/usr/bin/env python3 """Common integer value operations""" from simd_lane_value import LaneValue class ArithmeticOp: """This class provides methods to simulate integer arithmetic and saturating integer arithmetic operations for the purpose of getting corresponding expected results. One or more operands may be required for the operations. The following operators are covered: add, sub, mul, neg, add_sat_s, add_sat_u, sub_sat_s, sub_sat_u, min_s, min_u, max_s, max_u, avgr_u, abs ext_mul_s, ext_mul_u """ def __init__(self, op: str): self.op = op @staticmethod def get_valid_value(value: int, lane: LaneValue, signed=True) -> int: """Get the valid integer value in the scope of the specified lane size. For a integer value, convert it to the valid value with the same bits of the lane width. The value can be signed or unsigned, with the scope of -0x80... to 0x7f... or 0 to 0xff... :param value: the value of the integer :param lane: the LaneValue instance of a lane in v128 :param signed: specify if the lane is interpreted as a signed or an unsigned number. :return : the valid value in either signed or unsigned number """ value &= lane.mask if signed: if value > lane.max: return value - lane.mod if value < lane.min: return value + lane.mod return value def _saturate(self, operand1: int, operand2: int, lane: LaneValue) -> int: """Get the result of saturating arithmetic operation on 2 operands. The operands can be both signed or unsigned. The following ops are covered: add_sat_s, sub_sat_s, add_sat_u, sub_sat_u, Saturating arithmetic can make sure: When the operation result is less than the minimum, return the minimum. When the operation result is greater than the maximum, return the maximum. For other operation results, simply return themselves. :param operand1: the integer operand 1 :param operand2: the integer operand 2 :param lane: the LaneValue instance of a lane in v128 :return: the result of the saturating arithmetic operation """ if self.op.endswith('sat_s'): if operand1 > lane.max: operand1 -= lane.mod if operand2 > lane.max: operand2 -= lane.mod if self.op.startswith('add'): value = operand1 + operand2 if self.op.startswith('sub'): value = operand1 - operand2 return lane.sat_s(value) if self.op.endswith('sat_u'): if operand1 < 0: operand1 += lane.mod if operand2 < 0: operand2 += lane.mod if self.op.startswith('add'): value = operand1 + operand2 if self.op.startswith('sub'): value = operand1 - operand2 return lane.sat_u(value) return value def unary_op(self, operand, lane): """General integer arithmetic and saturating arithmetic operations with only one operand. Supported ops: neg, abs :param operand: the operand, integer or literal string in hex or decimal format :param lane: the LaneValue instance of a lane in v128 :return: the string of the result of in hex or decimal format """ v = operand base = 10 if isinstance(operand, str): if '0x' in operand: base = 16 v = int(operand, base) if self.op == 'neg': result = self.get_valid_value(-v, lane) elif self.op == 'abs': result = self.get_valid_value(v, lane) if result >= 0: return operand else: result = -result if base == 16: return hex(result) elif self.op == 'popcnt': result = self.get_valid_value(v, lane) return str(bin(result % lane.mod).count('1')) elif self.op == 'sat_s': # Don't call get_valid_value, it will truncate results. return lane.sat_s(v) elif self.op == 'sat_u': # Don't call get_valid_value, it will truncate results. return lane.sat_u(v) else: raise Exception('Unknown unary operation') return str(result) def binary_op(self, operand1, operand2, src_lane, dst_lane=None): """General integer arithmetic and saturating arithmetic operations with 2 operands. Supported ops: add, sub, mul, add_sat_s, add_sat_u, sub_sat_s, sub_sat_u, min_s, min_u, max_s, max_u, avgr_u, ext_mul_s, ext_mul_u (same as mul), q15mulr_sat_s :param operand1: the operand 1, integer or literal string in hex or decimal format :param operand2: the operand 2, integer or literal string in hex or decimal format :param src_lane: the LaneValue instance of a lane in v128 :return: the string of the result of in hex or decimal format """ if not dst_lane: dst_lane = src_lane v1 = operand1 v2 = operand2 base1 = base2 = 10 if isinstance(operand1, str): if '0x' in operand1: base1 = 16 v1 = int(operand1, base1) if isinstance(operand2, str): if '0x' in operand2: base2 = 16 v2 = int(operand2, base2) result_signed = True if self.op == 'add': value = v1 + v2 elif self.op == 'sub': value = v1 - v2 elif self.op == 'mul': value = v1 * v2 elif self.op.startswith('extmul_'): if self.op.endswith('s'): i1 = self.get_valid_value(v1, src_lane) i2 = self.get_valid_value(v2, src_lane) else: i1 = self.get_valid_value(v1, src_lane, signed=False) i2 = self.get_valid_value(v2, src_lane, signed=False) value = i1 * i2 elif self.op == 'q15mulr_sat_s': # This should be before 'sat' case. i1 = ArithmeticOp.get_valid_value(v1, src_lane) i2 = ArithmeticOp.get_valid_value(v2, src_lane) return src_lane.sat_s((i1 * i2 + 0x4000) >> 15) elif 'sat' in self.op: value = self._saturate(v1, v2, src_lane) if self.op.endswith('_u'): result_signed = False elif self.op in ['min_s', 'max_s']: i1 = self.get_valid_value(v1, src_lane) i2 = self.get_valid_value(v2, src_lane) if self.op == 'min_s': return operand1 if i1 <= i2 else operand2 else: return operand1 if i1 >= i2 else operand2 elif self.op in ['min_u', 'max_u']: i1 = self.get_valid_value(v1, src_lane, signed=False) i2 = self.get_valid_value(v2, src_lane, signed=False) if self.op == 'min_u': return operand1 if i1 <= i2 else operand2 else: return operand1 if i1 >= i2 else operand2 elif self.op == 'avgr_u': i1 = self.get_valid_value(v1, src_lane, signed=False) i2 = self.get_valid_value(v2, src_lane, signed=False) result = (i1 + i2 + 1) // 2 if base1 == 16 or base2 == 16: return hex(result) else: return str(result) else: raise Exception('Unknown binary operation') result = self.get_valid_value(value, dst_lane, signed=result_signed) return str(result) ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_lane_value.py ================================================ #!/usr/bin/env python3 class LaneValue: """This class stands for the value of signed integer represented by a lane in v128. Suppose a bit number of the lane is n, then: For signed integer: minimum = -pow(2, n - 1), maximum = pow(2, n - 1) - 1 The bit number of the lane can be 8, 16, 32, 64""" def __init__(self, lane_width): """lane_width: bit number of each lane in SIMD v128""" self.lane_width = lane_width @property def min(self): return -pow(2, self.lane_width - 1) @property def max(self): return pow(2, self.lane_width - 1) - 1 @property def mask(self): return pow(2, self.lane_width) - 1 @property def mod(self): return pow(2, self.lane_width) @property def quarter(self): return pow(2, self.lane_width - 2) def sat_s(self, v): return max(self.min, min(v, self.max)) def sat_u(self, v): return max(0, min(v, self.mask)) ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_load_lane.py ================================================ #!/usr/bin/env python3 from simd import SIMD from test_assert import AssertReturn, AssertInvalid def list_stringify(l): return list(map(lambda x: str(x), l)) """Base class for generating SIMD load lane tests. Subclasses only to: - define self.LANE_LEN, self.LANE_TYPE, self.NUM_LANES, self.MAX_ALIGN - override get_normal_case to provide test data (consult comments for details) It generates test cases that: - load to all valid lane indices - load using memarg offset - load with memarg alignment - load with invalid lane index - load with invalid memarg alignment - fails typecheck """ class SimdLoadLane: def valid_alignments(self): return [a for a in range(1, self.MAX_ALIGN+1) if a & (a-1) == 0] def get_case_data(self): # return value should be a list of tuples: # (address to load from : i32, initial value : v128, return value : v128) # e.g. [(0, [0], [0x0100, 0, 0, 0, 0, 0, 0, 0]), ... ] raise Exception("Subclasses should override this to provide test data") def get_normal_case(self): s = SIMD() cases = [] # load using arg for (addr, val, ret) in self.get_case_data(): i32_addr = s.const(addr, "i32") v128_val = s.v128_const(list_stringify(val), self.LANE_TYPE) v128_result = s.v128_const(list_stringify(ret), self.LANE_TYPE) instr = "v128.load{lane_len}_lane_{idx}".format(lane_len=self.LANE_LEN, idx=addr) cases.append(str(AssertReturn(instr, [i32_addr, v128_val], v128_result))) # load using offset for (addr, val, ret) in self.get_case_data(): v128_val = s.v128_const(list_stringify(val), self.LANE_TYPE) v128_result = s.v128_const(list_stringify(ret), self.LANE_TYPE) instr = "v128.load{lane_len}_lane_{idx}_offset_{idx}".format(lane_len=self.LANE_LEN, idx=addr) cases.append(str(AssertReturn(instr, [v128_val], v128_result))) # load using offset with alignment for (addr, val, ret) in self.get_case_data(): for align in self.valid_alignments(): i32_addr = s.const(addr, "i32") v128_val = s.v128_const(list_stringify(val), self.LANE_TYPE) v128_result = s.v128_const(list_stringify(ret), self.LANE_TYPE) instr = "v128.load{lane_len}_lane_{idx}_align_{align}".format(lane_len=self.LANE_LEN, idx=addr, align=align) cases.append(str(AssertReturn(instr, [i32_addr, v128_val], v128_result))) return '\n'.join(cases) def gen_test_func_template(self): template = [ ';; Tests for load lane operations.\n\n', '(module', ' (memory 1)', ' (data (i32.const 0) "\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09\\0A\\0B\\0C\\0D\\0E\\0F")', ] lane_indices = list(range(self.NUM_LANES)) # load using i32.const arg for idx in lane_indices: template.append( ' (func (export "v128.load{lane_len}_lane_{idx}")\n' ' (param $address i32) (param $x v128) (result v128)\n' ' (v128.load{lane_len}_lane {idx} (local.get $address) (local.get $x)))' .format(idx=idx, lane_len=self.LANE_LEN)) # load using memarg offset for idx in lane_indices: template.append( ' (func (export "v128.load{lane_len}_lane_{idx}_offset_{idx}")\n' ' (param $x v128) (result v128)\n' ' (v128.load{lane_len}_lane offset={idx} {idx} (i32.const 0) (local.get $x)))' .format(idx=idx, lane_len=self.LANE_LEN)) # with memarg aligment for idx in lane_indices: for align in self.valid_alignments(): template.append( ' (func (export "v128.load{lane_len}_lane_{idx}_align_{align}")\n' ' (param $address i32) (param $x v128) (result v128)\n' ' (v128.load{lane_len}_lane align={align} {idx} (local.get $address) (local.get $x)))' .format(idx=idx, lane_len=self.LANE_LEN, align=align)) template.append(')\n') return template def gen_test_template(self): template = self.gen_test_func_template() template.append('{normal_cases}') template.append('\n{invalid_cases}') return '\n'.join(template) def get_invalid_cases(self): invalid_cases = [';; type check'] invalid_cases.append( '(assert_invalid' ' (module (memory 1)\n' ' (func (param $x v128) (result v128)\n' ' (v128.load{lane_len}_lane 0 (local.get $x) (i32.const 0))))\n' ' "type mismatch")'.format(lane_len=self.LANE_LEN)) invalid_cases.append('') invalid_cases.append(';; invalid lane index') invalid_cases.append( '(assert_invalid' ' (module (memory 1)\n' ' (func (param $x v128) (result v128)\n' ' (v128.load{lane_len}_lane {idx} (i32.const 0) (local.get $x))))\n' ' "invalid lane index")'.format(idx=self.NUM_LANES, lane_len=self.LANE_LEN)) invalid_cases.append('') invalid_cases.append(';; invalid memarg alignment') invalid_cases.append( '(assert_invalid\n' ' (module (memory 1)\n' ' (func (param $x v128) (result v128)\n' ' (v128.load{lane_len}_lane align={align} 0 (i32.const 0) (local.get $x))))\n' ' "alignment must not be larger than natural")' .format(lane_len=self.LANE_LEN, align=self.MAX_ALIGN*2)) return '\n'.join(invalid_cases) def get_all_cases(self): case_data = {'lane_len': self.LANE_LEN, 'normal_cases': self.get_normal_case(), 'invalid_cases': self.get_invalid_cases(), } return self.gen_test_template().format(**case_data) def gen_test_cases(self): wast_filename = '../simd_load{lane_type}_lane.wast'.format(lane_type=self.LANE_LEN) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) class SimdLoad8Lane(SimdLoadLane): LANE_LEN = '8' LANE_TYPE = 'i8x16' NUM_LANES = 16 MAX_ALIGN = 1 def get_case_data(self): return [ (0, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (1, [0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (2, [0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (3, [0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (4, [0], [0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (5, [0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (6, [0], [0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (7, [0], [0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0]), (8, [0], [0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0]), (9, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0]), (10, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0]), (11, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0]), (12, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0]), (13, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0]), (14, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0]), (15, [0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15])] class SimdLoad16Lane(SimdLoadLane): LANE_LEN = '16' LANE_TYPE = 'i16x8' NUM_LANES = 8 MAX_ALIGN = 2 def get_case_data(self): return [ (0, [0], [0x0100, 0, 0, 0, 0, 0, 0, 0]), (1, [0], [0, 0x0201, 0, 0, 0, 0, 0, 0]), (2, [0], [0, 0, 0x0302, 0, 0, 0, 0, 0]), (3, [0], [0, 0, 0, 0x0403, 0, 0, 0, 0]), (4, [0], [0, 0, 0, 0, 0x0504, 0, 0, 0]), (5, [0], [0, 0, 0, 0, 0, 0x0605, 0, 0]), (6, [0], [0, 0, 0, 0, 0, 0, 0x0706, 0]), (7, [0], [0, 0, 0, 0, 0, 0, 0, 0x0807])] class SimdLoad32Lane(SimdLoadLane): LANE_LEN = '32' LANE_TYPE = 'i32x4' NUM_LANES = 4 MAX_ALIGN = 4 def get_case_data(self): return [ (0, [0], [0x03020100, 0, 0, 0,]), (1, [0], [0, 0x04030201, 0, 0,]), (2, [0], [0, 0, 0x05040302, 0,]), (3, [0], [0, 0, 0, 0x06050403,])] class SimdLoad64Lane(SimdLoadLane): LANE_LEN = '64' LANE_TYPE = 'i64x2' NUM_LANES = 2 MAX_ALIGN = 8 def get_case_data(self): return [ (0, [0], [0x0706050403020100, 0]), (1, [0], [0, 0x0807060504030201])] def gen_test_cases(): simd_load8_lane = SimdLoad8Lane() simd_load8_lane.gen_test_cases() simd_load16_lane = SimdLoad16Lane() simd_load16_lane.gen_test_cases() simd_load32_lane = SimdLoad32Lane() simd_load32_lane.gen_test_cases() simd_load64_lane = SimdLoad64Lane() simd_load64_lane.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_sat_arith.py ================================================ #!/usr/bin/env python3 """ Generate saturating integer arithmetic operation cases. """ from simd_arithmetic import SimdArithmeticCase from test_assert import AssertReturn from simd import SIMD class SimdSaturateArithmeticCases(SimdArithmeticCase): UNARY_OPS = () BINARY_OPS = ('add_sat_s', 'add_sat_u', 'sub_sat_s', 'sub_sat_u') malformed_template = '(assert_malformed (module quote\n "(func (result v128) ' \ '({lane_type}.{op} ({operand_1}) ({operand_2})))")\n "unknown operator")' def gen_test_cases(self): wast_filename = '../simd_{lane_type}_sat_arith.wast'.format(lane_type=self.LANE_TYPE) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) def gen_test_template(self): return super().gen_test_template().replace('{invalid_cases}', '{malformed_cases}\n\n{invalid_cases}') def v128_const(self, lane, value, lane_len=None): if not lane_len: lane_len = self.LANE_LEN return 'v128.const {lane_type} {value}'.format(lane_type=lane, value=' '.join([str(value)] * lane_len)) def get_malformed_cases(self): malformed_cases = [';; Malformed cases: non-existent op names'] inst_ops = ['add', 'sub', 'mul', 'div'] # The op names should contain _s or _u suffixes, there is no mul or div # for saturating integer arithmetic operation for op in inst_ops: malformed_cases.append(self.malformed_template.format( lane_type=self.LANE_TYPE, op='_'.join([op, 'sat']), operand_1=self.v128_const(self.LANE_TYPE, '1'), operand_2=self.v128_const(self.LANE_TYPE, '2'))) return '\n'.join(malformed_cases) def argument_empty_cases(self): """Test cases with empty argument. """ cases = [] case_data = { 'op': '', 'extended_name': 'arg-empty', 'param_type': '', 'result_type': '(result v128)', 'params': '', } for op in self.BINARY_OPS: case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op) case_data['extended_name'] = '1st-arg-empty' case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE) cases.append(AssertInvalid.get_arg_empty_test(**case_data)) case_data['extended_name'] = 'arg-empty' case_data['params'] = '' cases.append(AssertInvalid.get_arg_empty_test(**case_data)) return '\n'.join(cases) def get_all_cases(self): case_data = {'lane_type': self.LANE_TYPE, 'normal_cases': self.get_normal_case(), 'malformed_cases': self.get_malformed_cases(), 'invalid_cases': self.get_invalid_cases(), 'combine_cases': self.get_combine_cases() } return self.gen_test_template().format(**case_data) @property def combine_ternary_arith_test_data(self): return { 'sat-add_s-sub_s': [ [str(self.lane.quarter)] * self.LANE_LEN, [str(self.lane.max)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN ], 'sat-add_s-sub_u': [ [str(self.lane.mask)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN, ['-1'] * self.LANE_LEN ], 'sat-add_u-sub_s': [ [str(self.lane.max)] * self.LANE_LEN, ['-1'] * self.LANE_LEN, [str(self.lane.max)] * self.LANE_LEN, [str(self.lane.mask - 1)] * self.LANE_LEN ], 'sat-add_u-sub_u': [ [str(self.lane.mask)] * self.LANE_LEN, ['0'] * self.LANE_LEN, ['1'] * self.LANE_LEN, [str(self.lane.mask)] * self.LANE_LEN ] } @property def combine_binary_arith_test_data(self): return { 'sat-add_s-neg': [ [str(self.lane.min)] * self.LANE_LEN, [str(self.lane.max)] * self.LANE_LEN, ['-1'] * self.LANE_LEN ], 'sat-add_u-neg': [ [str(self.lane.max)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN, [str(self.lane.mask)] * self.LANE_LEN ], 'sat-sub_s-neg': [ [str(self.lane.min)] * self.LANE_LEN, [str(self.lane.max)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN ], 'sat-sub_u-neg': [ [str(self.lane.max)] * self.LANE_LEN, [str(self.lane.min)] * self.LANE_LEN, ['1'] * self.LANE_LEN ] } def get_combine_cases(self): combine_cases = [';; combination\n(module'] ternary_func_template = ' (func (export "{func}") (param v128 v128 v128) (result v128)\n' \ ' ({lane}.{op1} ({lane}.{op2} (local.get 0) (local.get 1))'\ '(local.get 2)))' for func in sorted(self.combine_ternary_arith_test_data): func_parts = func.split('-') op1 = func_parts[1].replace('_', '_sat_') op2 = func_parts[2].replace('_', '_sat_') combine_cases.append(ternary_func_template.format(func=func, lane=self.LANE_TYPE, op1=op1, op2=op2)) binary_func_template = ' (func (export "{func}") (param v128 v128) (result v128)\n'\ ' ({lane}.{op1} ({lane}.{op2} (local.get 0)) (local.get 1)))' for func in sorted(self.combine_binary_arith_test_data): func_parts = func.split('-') op1 = func_parts[1].replace('_', '_sat_') combine_cases.append(binary_func_template.format(func=func, lane=self.LANE_TYPE, op1=op1, op2=func_parts[2])) combine_cases.append(')\n') for func, test in sorted(self.combine_ternary_arith_test_data.items()): combine_cases.append(str(AssertReturn(func, [SIMD.v128_const(elem, self.LANE_TYPE) for elem in test[:-1]], SIMD.v128_const(test[-1], self.LANE_TYPE)))) for func, test in sorted(self.combine_binary_arith_test_data.items()): combine_cases.append(str(AssertReturn(func, [SIMD.v128_const(elem, self.LANE_TYPE) for elem in test[:-1]], SIMD.v128_const(test[-1], self.LANE_TYPE)))) return '\n'.join(combine_cases) class SimdI8x16SaturateArithmeticCases(SimdSaturateArithmeticCases): LANE_LEN = 16 LANE_TYPE = 'i8x16' @property def hex_binary_op_test_data(self): return [ ('0x3f', '0x40'), ('0x40', '0x40'), ('-0x3f', '-0x40'), ('-0x40', '-0x40'), ('-0x40', '-0x41'), ('0x7f', '0x7f'), ('0x7f', '0x01'), ('0x80', '-0x01'), ('0x7f', '0x80'), ('0x80', '0x80'), ('0xff', '0x01'), ('0xff', '0xff') ] @property def hex_unary_op_test_data(self): return ['0x01', '-0x01', '-0x80', '-0x7f', '0x7f', '0x80', '0xff'] @property def i8x16_f32x4_test_data(self): return { 'i8x16.add_sat_s': [ [['0x80', '-0.0'], '0x80', ['i8x16', 'f32x4', 'i8x16']], [['1', '+inf'], ['0x01', '0x01', '0x81', '0x7f'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-inf'], ['0x01', '0x01', '0x81', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', 'nan'], ['0x01', '0x01', '0xc1', '0x7f'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-nan'], ['0x01', '0x01', '0xc1', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']] ], 'i8x16.add_sat_u': [ [['0x80', '-0.0'], ['0x80', '0x80', '0x80', '0xff'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '+inf'], ['0x01', '0x01', '0x81', '0x80'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-inf'], ['0x01', '0x01', '0x81', '0xff'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', 'nan'], ['0x01', '0x01', '0xc1', '0x80'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-nan'], ['0x01', '0x01', '0xc1', '0xff'] * 4, ['i8x16', 'f32x4', 'i8x16']], ], 'i8x16.sub_sat_s': [ [['0x80', '-0.0'], ['0x80', '0x80', '0x80', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '+inf'], ['0x01', '0x01', '0x7f', '0x82'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-inf'], ['0x01', '0x01', '0x7f', '0x02'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', 'nan'], ['0x01', '0x01', '0x41', '0x82'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-nan'], ['0x01', '0x01', '0x41', '0x02'] * 4, ['i8x16', 'f32x4', 'i8x16']], ], 'i8x16.sub_sat_u': [ [['0x80', '-0.0'], ['0x80', '0x80', '0x80', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '+inf'], ['0x01', '0x01', '0', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-inf'], ['0x01', '0x01', '0', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', 'nan'], ['0x01', '0x01', '0', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], [['1', '-nan'], ['0x01', '0x01', '0', '0'] * 4, ['i8x16', 'f32x4', 'i8x16']], ] } @property def combine_dec_hex_test_data(self): return { 'i8x16.add_sat_s': [ [[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'], ['0', '0xff', '0xfe', '0xfd', '0xfc', '0xfb', '0xfa', '0xf9', '0xf8', '0xf7', '0xf6', '0xf5', '0xf4', '0xf3', '0xf2', '0xf1']], ['0'] * 16, ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.add_sat_u': [ [[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'], ['0', '0xff', '0xfe', '0xfd', '0xfc', '0xfb', '0xfa', '0xf9', '0xf8', '0xf7', '0xf6', '0xf5', '0xf4', '0xf3', '0xf2', '0xf1']], ['0'] + ['0xff'] * 15, ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.sub_sat_s': [ [[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'], ['0', '0xff', '0xfe', '0xfd', '0xfc', '0xfb', '0xfa', '0xf9', '0xf8', '0xf7', '0xf6', '0xf5', '0xf4', '0xf3', '0xf2', '0xf1']], ['0', '0x02', '0x04', '0x06', '0x08', '0x0a', '0x0c', '0x0e', '0x10', '0x12', '0x14', '0x16', '0x18', '0x1a', '0x1c', '0x1e'], ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.sub_sat_u': [ [[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'], ['0', '0xff', '0xfe', '0xfd', '0xfc', '0xfb', '0xfa', '0xf9', '0xf8', '0xf7', '0xf6', '0xf5', '0xf4', '0xf3', '0xf2', '0xf1']], ['0'] * 16, ['i8x16', 'i8x16', 'i8x16']] ], } @property def range_test_data(self): return { 'i8x16.add_sat_s': [ [[[str(i) for i in range(16)], [str(i * 2) for i in range(16)]], [str(i * 3) for i in range(16)], ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.add_sat_u': [ [[[str(i) for i in range(16)], [str(i * 2) for i in range(16)]], [str(i * 3) for i in range(16)], ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.sub_sat_s': [ [[[str(i) for i in range(16)], [str(i * 2) for i in range(16)]], [str(-i) for i in range(16)], ['i8x16', 'i8x16', 'i8x16']] ], 'i8x16.sub_sat_u': [ [[[str(i) for i in range(16)], [str(i * 2) for i in range(16)]], ['0'] * 16, ['i8x16', 'i8x16', 'i8x16']] ], } @property def full_bin_test_data(self): return [ self.i8x16_f32x4_test_data, self.combine_dec_hex_test_data, self.range_test_data ] def get_malformed_cases(self): malformed_cases = [] # There is no saturating integer arithmetic operation for i32x4 or f32x4. for prefix in ['i32x4', 'f32x4']: for op in ['add', 'sub']: for suffix in ['s', 'u']: malformed_cases.append(self.malformed_template.format( lane_type=prefix, op='_'.join([op, 'sat', suffix]), operand_1=self.v128_const(prefix, '0', lane_len=4), operand_2=self.v128_const(prefix, '0', lane_len=4) )) return super().get_malformed_cases() + '\n' + '\n'.join(malformed_cases) class SimdI16x8SaturateArithmeticCases(SimdSaturateArithmeticCases): LANE_LEN = 8 LANE_TYPE = 'i16x8' @property def hex_binary_op_test_data(self): return [ ('0x3fff', '0x4000'), ('0x4000', '0x4000'), ('-0x3fff', '-0x4000'), ('-0x4000', '-0x4000'), ('-0x4000', '-0x4001'), ('0x7fff', '0x7fff'), ('0x7fff', '0x01'), ('0x8000', '-0x01'), ('0x7fff', '0x8000'), ('0x8000', '0x8000'), ('0xffff', '0x01'), ('0xffff', '0xffff') ] @property def hex_unary_op_test_data(self): return ['0x01', '-0x01', '-0x8000', '-0x7fff', '0x7fff', '0x8000', '0xffff'] @property def underscore_literal_test_data(self): return { 'i16x8.add_sat_s': [ [['012_345', '032_123'], '032_767', ['i16x8'] * 3], [['012_345', '056_789'], '03_598', ['i16x8'] * 3], [['0x0_1234', '0x0_5678'], '0x0_68ac', ['i16x8'] * 3], [['0x0_90AB', '0x0_cdef'], '-0x0_8000', ['i16x8'] * 3] ], 'i16x8.add_sat_u': [ [['012_345', '056_789'], '065_535', ['i16x8'] * 3], [['012_345', '-012_345'], '065_535', ['i16x8'] * 3], [['0x0_1234', '0x0_5678'], '0x0_68ac', ['i16x8'] * 3], [['0x0_90AB', '0x0_cdef'], '0x0_ffff', ['i16x8'] * 3] ], 'i16x8.sub_sat_s': [ [['012_345', '056_789'], '021_092', ['i16x8'] * 3], [['012_345', '-012_345'], '024_690', ['i16x8'] * 3], [['0x0_1234', '0x0_5678'], '0x0_bbbc', ['i16x8'] * 3], [['0x0_90AB', '-0x1234'], '0xa2df', ['i16x8'] * 3] ], 'i16x8.sub_sat_u': [ [['012_345', '056_789'], '0', ['i16x8'] * 3], [['056_789', '-12_345'], '03_598', ['i16x8'] * 3], [['0x0_1234', '-0x0_5678'], '0', ['i16x8'] * 3], [['0x0_cdef', '0x0_90AB'], '0x0_3d44', ['i16x8'] * 3] ] } @property def i16x8_f32x4_test_data(self): return { 'i16x8.add_sat_s': [ [['0x8000', '-0.0'], '0x8000', ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0x01', '0x7f81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0x01', '0xff81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0x7fc1'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-nan'], ['0x01', '0xffc1'] * 4, ['i16x8', 'f32x4', 'i16x8']] ], 'i16x8.add_sat_u': [ [['0x8000', '-0.0'], ['0x8000', '0xffff'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0x01', '0x7f81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0x01', '0xff81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0x7fc1'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0x7fc1'] * 4, ['i16x8', 'f32x4', 'i16x8']] ], 'i16x8.sub_sat_s': [ [['0x8000', '-0.0'], ['0x8000', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0x01', '0x8081'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0x01', '0x81'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0x8041'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-nan'], ['0x01', '0x41'] * 4, ['i16x8', 'f32x4', 'i16x8']] ], 'i16x8.sub_sat_u': [ [['0x8000', '-0.0'], ['0x8000', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '+inf'], ['0x01', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-inf'], ['0x01', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', 'nan'], ['0x01', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']], [['1', '-nan'], ['0x01', '0'] * 4, ['i16x8', 'f32x4', 'i16x8']] ], } @property def combine_dec_hex_test_data(self): return { 'i16x8.add_sat_s': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0'] * 8, ['i16x8'] * 3] ], 'i16x8.add_sat_u': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0'] + ['0xffff'] * 7, ['i16x8'] * 3] ], 'i16x8.sub_sat_s': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0', '2', '4', '6', '8', '10', '12', '14'], ['i16x8'] * 3] ], 'i16x8.sub_sat_u': [ [[['0', '1', '2', '3', '4', '5', '6', '7'], ['0', '0xffff', '0xfffe', '0xfffd', '0xfffc', '0xfffb', '0xfffa', '0xfff9']], ['0'] * 8, ['i16x8'] * 3] ] } @property def range_test_data(self): return { 'i16x8.add_sat_s': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], [str(i * 3) for i in range(8)], ['i16x8'] * 3] ], 'i16x8.add_sat_u': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], [str(i * 3) for i in range(8)], ['i16x8'] * 3] ], 'i16x8.sub_sat_s': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], [str(-i) for i in range(8)], ['i16x8'] * 3] ], 'i16x8.sub_sat_u': [ [[[str(i) for i in range(8)], [str(i * 2) for i in range(8)]], ['0'] * 8, ['i16x8'] * 3] ] } @property def full_bin_test_data(self): return [ self.i16x8_f32x4_test_data, self.combine_dec_hex_test_data, self.range_test_data, self.underscore_literal_test_data ] def gen_test_cases(): simd_i8x16_sat_arith = SimdI8x16SaturateArithmeticCases() simd_i8x16_sat_arith.gen_test_cases() simd_i16x8_sat_arith = SimdI16x8SaturateArithmeticCases() simd_i16x8_sat_arith.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/simd_store_lane.py ================================================ #!/usr/bin/env python3 from simd import SIMD from test_assert import AssertReturn, AssertInvalid def list_stringify(l): return list(map(lambda x: str(x), l)) """Base class for generating SIMD store lane tests. Subclasses only to: - define self.LANE_LEN, self.LANE_TYPE, self.NUM_LANES, self.MAX_ALIGN - override get_normal_case to provide test data (consult comments for details) It generates test cases that: - store to all valid lane indices - store using memarg offset - store with memarg alignment - store with invalid lane index - store with invalid memarg alignment - fails typecheck """ class SimdStoreLane: def valid_alignments(self): return [a for a in range(1, self.MAX_ALIGN+1) if a & (a-1) == 0] def get_case_data(self): # return value should be a list of tuples: # (address to store to : i32, v128, return value : v128) # e.g. [(0, [0x0100, 0, 0, 0, 0, 0, 0, 0]), ... ] # the expected result is return_value[address]. raise Exception("Subclasses should override this to provide test data") def get_normal_case(self): s = SIMD() cases = [] # store using arg for (addr, ret) in self.get_case_data(): i32_addr = s.const(addr, "i32") v128_val = s.v128_const(list_stringify(ret), self.LANE_TYPE) result = s.const(ret[addr], "i64") instr = "v128.store{lane_len}_lane_{idx}".format(lane_len=self.LANE_LEN, idx=addr) cases.append(str(AssertReturn(instr, [i32_addr, v128_val], result))) # store using offset for (addr, ret) in self.get_case_data(): v128_val = s.v128_const(list_stringify(ret), self.LANE_TYPE) result = s.const(ret[addr], "i64") instr = "v128.store{lane_len}_lane_{idx}_offset_{idx}".format(lane_len=self.LANE_LEN, idx=addr) cases.append(str(AssertReturn(instr, [v128_val], result))) # store using offset with alignment for (addr, ret) in self.get_case_data(): for align in self.valid_alignments(): i32_addr = s.const(addr, "i32") v128_val = s.v128_const(list_stringify(ret), self.LANE_TYPE) result = s.const(ret[addr], "i64") instr = "v128.store{lane_len}_lane_{idx}_align_{align}".format(lane_len=self.LANE_LEN, idx=addr, align=align) cases.append(str(AssertReturn(instr, [i32_addr, v128_val], result))) return '\n'.join(cases) def gen_test_func_template(self): template = [ ';; Tests for store lane operations.\n\n', '(module', ' (memory 1)', ' (global $zero (mut v128) (v128.const i32x4 0 0 0 0))', ] lane_indices = list(range(self.NUM_LANES)) # store using i32.const arg for idx in lane_indices: template.append( ' (func (export "v128.store{lane_len}_lane_{idx}")\n' ' (param $address i32) (param $x v128) (result i64) (local $ret i64)\n' ' (v128.store{lane_len}_lane {idx} (local.get $address) (local.get $x))\n' ' (local.set $ret (i64.load (local.get $address)))\n' ' (v128.store (local.get $address) (global.get $zero))' ' (local.get $ret))' .format(idx=idx, lane_len=self.LANE_LEN)) # store using memarg offset for idx in lane_indices: template.append( ' (func (export "v128.store{lane_len}_lane_{idx}_offset_{idx}")\n' ' (param $x v128) (result i64) (local $ret i64)\n' ' (v128.store{lane_len}_lane offset={idx} {idx} (i32.const 0) (local.get $x))\n' ' (local.set $ret (i64.load offset={idx} (i32.const 0)))\n' ' (v128.store offset={idx} (i32.const 0) (global.get $zero))\n' ' (local.get $ret))' .format(idx=idx, lane_len=self.LANE_LEN)) # with memarg aligment for idx in lane_indices: for align in self.valid_alignments(): template.append( ' (func (export "v128.store{lane_len}_lane_{idx}_align_{align}")\n' ' (param $address i32) (param $x v128) (result i64) (local $ret i64)\n' ' (v128.store{lane_len}_lane align={align} {idx} (local.get $address) (local.get $x))\n' ' (local.set $ret (i64.load (local.get $address)))\n' ' (v128.store offset={idx} (i32.const 0) (global.get $zero))\n' ' (local.get $ret))' .format(idx=idx, lane_len=self.LANE_LEN, align=align)) template.append(')\n') return template def gen_test_template(self): template = self.gen_test_func_template() template.append('{normal_cases}') template.append('\n{invalid_cases}') return '\n'.join(template) def get_invalid_cases(self): invalid_cases = [';; type check'] invalid_cases.append( '(assert_invalid' ' (module (memory 1)\n' ' (func (param $x v128) (result v128)\n' ' (v128.store{lane_len}_lane 0 (local.get $x) (i32.const 0))))\n' ' "type mismatch")'.format(lane_len=self.LANE_LEN)) invalid_cases.append('') invalid_cases.append(';; invalid lane index') invalid_cases.append( '(assert_invalid' ' (module (memory 1)\n' ' (func (param $x v128) (result v128)\n' ' (v128.store{lane_len}_lane {idx} (i32.const 0) (local.get $x))))\n' ' "invalid lane index")'.format(idx=self.NUM_LANES, lane_len=self.LANE_LEN)) invalid_cases.append('') invalid_cases.append(';; invalid memarg alignment') invalid_cases.append( '(assert_invalid\n' ' (module (memory 1)\n' ' (func (param $x v128) (result v128)\n' ' (v128.store{lane_len}_lane align={align} 0 (i32.const 0) (local.get $x))))\n' ' "alignment must not be larger than natural")' .format(lane_len=self.LANE_LEN, align=self.MAX_ALIGN*2)) return '\n'.join(invalid_cases) def get_all_cases(self): case_data = {'lane_len': self.LANE_LEN, 'normal_cases': self.get_normal_case(), 'invalid_cases': self.get_invalid_cases(), } return self.gen_test_template().format(**case_data) def gen_test_cases(self): wast_filename = '../simd_store{lane_type}_lane.wast'.format(lane_type=self.LANE_LEN) with open(wast_filename, 'w') as fp: fp.write(self.get_all_cases()) class SimdStore8Lane(SimdStoreLane): LANE_LEN = '8' LANE_TYPE = 'i8x16' NUM_LANES = 16 MAX_ALIGN = 1 def get_case_data(self): return [ (0, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (1, [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (2, [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (3, [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (4, [0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (5, [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (6, [0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0]), (7, [0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0]), (8, [0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0]), (9, [0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0]), (10, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0]), (11, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0]), (12, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0]), (13, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0]), (14, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0]), (15, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15])] class SimdStore16Lane(SimdStoreLane): LANE_LEN = '16' LANE_TYPE = 'i16x8' NUM_LANES = 8 MAX_ALIGN = 2 def get_case_data(self): return [ (0, [0x0100, 0, 0, 0, 0, 0, 0, 0]), (1, [0, 0x0201, 0, 0, 0, 0, 0, 0]), (2, [0, 0, 0x0302, 0, 0, 0, 0, 0]), (3, [0, 0, 0, 0x0403, 0, 0, 0, 0]), (4, [0, 0, 0, 0, 0x0504, 0, 0, 0]), (5, [0, 0, 0, 0, 0, 0x0605, 0, 0]), (6, [0, 0, 0, 0, 0, 0, 0x0706, 0]), (7, [0, 0, 0, 0, 0, 0, 0, 0x0807])] class SimdStore32Lane(SimdStoreLane): LANE_LEN = '32' LANE_TYPE = 'i32x4' NUM_LANES = 4 MAX_ALIGN = 4 def get_case_data(self): return [ (0, [0x03020100, 0, 0, 0,]), (1, [0, 0x04030201, 0, 0,]), (2, [0, 0, 0x05040302, 0,]), (3, [0, 0, 0, 0x06050403,])] class SimdStore64Lane(SimdStoreLane): LANE_LEN = '64' LANE_TYPE = 'i64x2' NUM_LANES = 2 MAX_ALIGN = 8 def get_case_data(self): return [ (0, [0x0706050403020100, 0]), (1, [0, 0x0807060504030201])] def gen_test_cases(): simd_store8_lane = SimdStore8Lane() simd_store8_lane.gen_test_cases() simd_store16_lane = SimdStore16Lane() simd_store16_lane.gen_test_cases() simd_store32_lane = SimdStore32Lane() simd_store32_lane.gen_test_cases() simd_store64_lane = SimdStore64Lane() simd_store64_lane.gen_test_cases() if __name__ == '__main__': gen_test_cases() ================================================ FILE: Test/WebAssembly/spec/simd/meta/test_assert.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ This python file is a tool class for test generation. Currently only the 'AssertReturn' class that is used to generate the 'assert_return' assertion. TODO: Add more assertions """ # Generate assert_return to test class AssertReturn: op = '' params = '' expected_result = '' def __init__(self, op, params, expected_result): # Convert to list if got str if isinstance(params, str): params = [params] if isinstance(expected_result, str): expected_result = [expected_result] self.op = op self.params = params self.expected_result = expected_result def __str__(self): assert_return = '(assert_return (invoke "{}"'.format(self.op) head_len = len(assert_return) # Add write space to make the test case easier to read params = [] for param in self.params: white_space = ' ' if len(params) != 0: white_space = '\n ' + ' ' * head_len params.append(white_space + param) results = [] for result in self.expected_result: white_space = ' ' if len(params) != 0 or len(results) != 0: white_space = '\n ' + ' ' * head_len results.append(white_space + result) return '{assert_head}{params}){expected_result})'.format(assert_head=assert_return, params=''.join(params), expected_result=''.join(results)) # Generate assert_invalid to test class AssertInvalid: @staticmethod def get_arg_empty_test(op, extended_name, param_type, result_type, params): arg_empty_test = '(assert_invalid' \ '\n (module' \ '\n (func ${op}-{extended_name}{param_type}{result_type}' \ '\n ({op}{params})' \ '\n )' \ '\n )' \ '\n "type mismatch"' \ '\n)' def str_with_space(input_str): return (' ' if input_str else '') + input_str param_map = { 'op': op, 'extended_name': extended_name, 'param_type': str_with_space(param_type), 'result_type': str_with_space(result_type), 'params': str_with_space(params), } return arg_empty_test.format(**param_map) class AssertMalformed: """Generate an assert_malformed test""" @staticmethod def get_unknown_op_test(op, result_type, *params): malformed_template = '(assert_malformed (module quote "(memory 1) (func (result {result_type}) ({operator} {param}))") "unknown operator")' return malformed_template.format( operator=op, result_type=result_type, param=' '.join(params) ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_address.wast ================================================ ;; Load/Store v128 data with different valid offset/alignment (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\10\11\12\13\14\15") (data (offset (i32.const 65505)) "\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31") (func (export "load_data_1") (param $i i32) (result v128) (v128.load offset=0 (local.get $i)) ;; 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 ) (func (export "load_data_2") (param $i i32) (result v128) (v128.load align=1 (local.get $i)) ;; 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 ) (func (export "load_data_3") (param $i i32) (result v128) (v128.load offset=1 align=1 (local.get $i)) ;; 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00 ) (func (export "load_data_4") (param $i i32) (result v128) (v128.load offset=2 align=1 (local.get $i)) ;; 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00 0x00 ) (func (export "load_data_5") (param $i i32) (result v128) (v128.load offset=15 align=1 (local.get $i)) ;; 0x15 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ) (func (export "store_data_0") (result v128) (v128.store offset=0 (i32.const 0) (v128.const f32x4 0 1 2 3)) (v128.load offset=0 (i32.const 0)) ) (func (export "store_data_1") (result v128) (v128.store align=1 (i32.const 0) (v128.const i32x4 0 1 2 3)) (v128.load align=1 (i32.const 0)) ) (func (export "store_data_2") (result v128) (v128.store offset=1 align=1 (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.load offset=1 align=1 (i32.const 0)) ) (func (export "store_data_3") (result v128) (v128.store offset=2 align=1 (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.load offset=2 align=1 (i32.const 0)) ) (func (export "store_data_4") (result v128) (v128.store offset=15 align=1 (i32.const 0) (v128.const i32x4 0 1 2 3)) (v128.load offset=15 (i32.const 0)) ) (func (export "store_data_5") (result v128) (v128.store offset=65520 align=1 (i32.const 0) (v128.const i32x4 0 1 2 3)) (v128.load offset=65520 (i32.const 0)) ) (func (export "store_data_6") (param $i i32) (v128.store offset=1 align=1 (local.get $i) (v128.const i32x4 0 1 2 3)) ) ) (assert_return (invoke "load_data_1" (i32.const 0)) (v128.const i32x4 0x03020100 0x07060504 0x11100908 0x15141312)) (assert_return (invoke "load_data_2" (i32.const 0)) (v128.const i32x4 0x03020100 0x07060504 0x11100908 0x15141312)) (assert_return (invoke "load_data_3" (i32.const 0)) (v128.const i32x4 0x04030201 0x08070605 0x12111009 0x00151413)) (assert_return (invoke "load_data_4" (i32.const 0)) (v128.const i32x4 0x05040302 0x09080706 0x13121110 0x00001514)) (assert_return (invoke "load_data_5" (i32.const 0)) (v128.const i32x4 0x00000015 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "load_data_1" (i32.const 0)) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x1110 0x1312 0x1514)) (assert_return (invoke "load_data_2" (i32.const 0)) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x1110 0x1312 0x1514)) (assert_return (invoke "load_data_3" (i32.const 0)) (v128.const i16x8 0x0201 0x0403 0x0605 0x0807 0x1009 0x1211 0x1413 0x0015)) (assert_return (invoke "load_data_4" (i32.const 0)) (v128.const i16x8 0x0302 0x0504 0x0706 0x0908 0x1110 0x1312 0x1514 0x0000)) (assert_return (invoke "load_data_5" (i32.const 0)) (v128.const i16x8 0x0015 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (assert_return (invoke "load_data_1" (i32.const 0)) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15)) (assert_return (invoke "load_data_2" (i32.const 0)) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15)) (assert_return (invoke "load_data_3" (i32.const 0)) (v128.const i8x16 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00)) (assert_return (invoke "load_data_4" (i32.const 0)) (v128.const i8x16 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00 0x00)) (assert_return (invoke "load_data_5" (i32.const 0)) (v128.const i8x16 0x15 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (assert_return (invoke "load_data_1" (i32.const 65505)) (v128.const i32x4 0x19181716 0x23222120 0x27262524 0x31302928)) (assert_return (invoke "load_data_2" (i32.const 65505)) (v128.const i32x4 0x19181716 0x23222120 0x27262524 0x31302928)) (assert_return (invoke "load_data_3" (i32.const 65505)) (v128.const i32x4 0x20191817 0x24232221 0x28272625 0x00313029)) (assert_return (invoke "load_data_4" (i32.const 65505)) (v128.const i32x4 0x21201918 0x25242322 0x29282726 0x00003130)) (assert_return (invoke "load_data_5" (i32.const 65505)) (v128.const i32x4 0x00000031 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "load_data_1" (i32.const 65505)) (v128.const i16x8 0x1716 0x1918 0x2120 0x2322 0x2524 0x2726 0x2928 0x3130)) (assert_return (invoke "load_data_2" (i32.const 65505)) (v128.const i16x8 0x1716 0x1918 0x2120 0x2322 0x2524 0x2726 0x2928 0x3130)) (assert_return (invoke "load_data_3" (i32.const 65505)) (v128.const i16x8 0x1817 0x2019 0x2221 0x2423 0x2625 0x2827 0x3029 0x0031)) (assert_return (invoke "load_data_4" (i32.const 65505)) (v128.const i16x8 0x1918 0x2120 0x2322 0x2524 0x2726 0x2928 0x3130 0x0000)) (assert_return (invoke "load_data_5" (i32.const 65505)) (v128.const i16x8 0x0031 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (assert_return (invoke "load_data_1" (i32.const 65505)) (v128.const i8x16 0x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31)) (assert_return (invoke "load_data_2" (i32.const 65505)) (v128.const i8x16 0x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31)) (assert_return (invoke "load_data_3" (i32.const 65505)) (v128.const i8x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31 0x00)) (assert_return (invoke "load_data_4" (i32.const 65505)) (v128.const i8x16 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31 0x00 0x00)) (assert_return (invoke "load_data_5" (i32.const 65505)) (v128.const i8x16 0x31 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (assert_trap (invoke "load_data_3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "load_data_5" (i32.const 65506)) "out of bounds memory access") (assert_return (invoke "store_data_0") (v128.const f32x4 0 1 2 3)) (assert_return (invoke "store_data_1") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "store_data_2") (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "store_data_3") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_return (invoke "store_data_4") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "store_data_5") (v128.const i32x4 0 1 2 3)) (assert_trap (invoke "store_data_6" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "store_data_6" (i32.const 65535)) "out of bounds memory access") ;; Load/Store v128 data with invalid offset (module (memory 1) (func (export "v128.load_offset_65521") (drop (v128.load offset=65521 (i32.const 0))) ) ) (assert_trap (invoke "v128.load_offset_65521") "out of bounds memory access") (assert_malformed (module quote "(memory 1)" "(func" " (drop (v128.load offset=-1 (i32.const 0)))" ")" ) "unknown operator" ) (module (memory 1) (func (export "v128.store_offset_65521") (v128.store offset=65521 (i32.const 0) (v128.const i32x4 0 0 0 0)) ) ) (assert_trap (invoke "v128.store_offset_65521") "out of bounds memory access") (assert_malformed (module quote "(memory 1)" "(func" " (v128.store offset=-1 (i32.const 0) (v128.const i32x4 0 0 0 0))" ")" ) "unknown operator" ) ;; Offset constant out of range (assert_malformed (module quote "(memory 1)" "(func (drop (v128.load offset=4294967296 (i32.const 0))))" ) "i32 constant" ) (assert_malformed (module quote "(memory 1)" "(func (v128.store offset=4294967296 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "i32 constant" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_align.wast ================================================ ;; Valid alignment (module (memory 1) (func (drop (v128.load align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load align=16 (i32.const 0))))) (module (memory 1) (func (v128.store align=1 (i32.const 0) (v128.const i32x4 0 1 2 3)))) (module (memory 1) (func (v128.store align=2 (i32.const 0) (v128.const i32x4 0 1 2 3)))) (module (memory 1) (func (v128.store align=4 (i32.const 0) (v128.const i32x4 0 1 2 3)))) (module (memory 1) (func (v128.store align=8 (i32.const 0) (v128.const i32x4 0 1 2 3)))) (module (memory 1) (func (v128.store align=16 (i32.const 0) (v128.const i32x4 0 1 2 3)))) (module (memory 1) (func (drop (v128.load8x8_s align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_s align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_s align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_s align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_u align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_u align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_u align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8x8_u align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_s align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_s align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_s align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_s align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_u align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_u align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_u align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16x4_u align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_s align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_s align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_s align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_s align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_u align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_u align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_u align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32x2_u align=8 (i32.const 0))))) (module (memory 1) (func (drop (v128.load8_splat align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16_splat align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load16_splat align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32_splat align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32_splat align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load32_splat align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load64_splat align=1 (i32.const 0))))) (module (memory 1) (func (drop (v128.load64_splat align=2 (i32.const 0))))) (module (memory 1) (func (drop (v128.load64_splat align=4 (i32.const 0))))) (module (memory 1) (func (drop (v128.load64_splat align=8 (i32.const 0))))) ;; Invalid alignment (assert_invalid (module (memory 1) (func (drop (v128.load align=32 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func(v128.store align=32 (i32.const 0) (v128.const i32x4 0 0 0 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load8x8_s align=16 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load8x8_u align=16 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load16x4_s align=16 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load16x4_u align=16 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load32x2_s align=16 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load32x2_u align=16 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load8_splat align=2 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load16_splat align=4 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load32_splat align=8 (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 1) (func (result v128) (v128.load64_splat align=16 (i32.const 0)))) "alignment must not be larger than natural" ) ;; Malformed alignment (assert_malformed (module quote "(memory 1) (func (drop (v128.load align=-1 (i32.const 0))))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (drop (v128.load align=0 (i32.const 0))))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (drop (v128.load align=7 (i32.const 0))))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (v128.store align=-1 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 0) (func (v128.store align=0 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 0) (func (v128.store align=7 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8x8_s align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8x8_s align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8x8_s align=7 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8x8_u align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8x8_u align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8x8_u align=7 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16x4_s align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16x4_s align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16x4_s align=7 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16x4_u align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16x4_u align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16x4_u align=7 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32x2_s align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32x2_s align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32x2_s align=7 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32x2_u align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32x2_u align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32x2_u align=7 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8_splat align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load8_splat align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16_splat align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load16_splat align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32_splat align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32_splat align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load32_splat align=3 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load64_splat align=-1 (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load64_splat align=0 (i32.const 0)))" ) "alignment must be a power of two" ) (assert_malformed (module quote "(memory 1) (func (result v128) (v128.load64_splat align=7 (i32.const 0)))" ) "alignment must be a power of two" ) ;; Test that misaligned SIMD loads/stores don't trap (module (memory 1 1) (func (export "v128.load align=16") (param $address i32) (result v128) (v128.load align=16 (local.get $address)) ) (func (export "v128.store align=16") (param $address i32) (param $value v128) (v128.store align=16 (local.get $address) (local.get $value)) ) ) (assert_return (invoke "v128.load align=16" (i32.const 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "v128.load align=16" (i32.const 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "v128.store align=16" (i32.const 1) (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) (assert_return (invoke "v128.load align=16" (i32.const 0)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) ;; Test aligned and unaligned read/write (module (memory 1) (func (export "v128_unaligned_read_and_write") (result v128) (local v128) (v128.store (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.load (i32.const 0)) ) (func (export "v128_aligned_read_and_write") (result v128) (local v128) (v128.store align=2 (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.load align=2 (i32.const 0)) ) (func (export "v128_aligned_read_and_unaligned_write") (result v128) (local v128) (v128.store (i32.const 0) (v128.const i32x4 0 1 2 3)) (v128.load align=2 (i32.const 0)) ) (func (export "v128_unaligned_read_and_aligned_write") (result v128) (local v128) (v128.store align=2 (i32.const 0) (v128.const i32x4 0 1 2 3)) (v128.load (i32.const 0)) ) ) (assert_return (invoke "v128_unaligned_read_and_write") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_return (invoke "v128_aligned_read_and_write") (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "v128_aligned_read_and_unaligned_write") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "v128_unaligned_read_and_aligned_write") (v128.const i32x4 0 1 2 3)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_bit_shift.wast ================================================ ;; Test all the bit shift operators on major boundary values and all special values. (module (func (export "i8x16.shl") (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (local.get $0) (local.get $1))) (func (export "i8x16.shr_s") (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (local.get $0) (local.get $1))) (func (export "i8x16.shr_u") (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (local.get $0) (local.get $1))) (func (export "i16x8.shl") (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (local.get $0) (local.get $1))) (func (export "i16x8.shr_s") (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (local.get $0) (local.get $1))) (func (export "i16x8.shr_u") (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (local.get $0) (local.get $1))) (func (export "i32x4.shl") (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (local.get $0) (local.get $1))) (func (export "i32x4.shr_s") (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (local.get $0) (local.get $1))) (func (export "i32x4.shr_u") (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (local.get $0) (local.get $1))) (func (export "i64x2.shl") (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1))) (func (export "i64x2.shr_s") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1))) (func (export "i64x2.shr_u") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1))) ;; shifting by a constant amount ;; i8x16 (func (export "i8x16.shl_1") (param $0 v128) (result v128) (i8x16.shl (local.get $0) (i32.const 1))) (func (export "i8x16.shr_u_8") (param $0 v128) (result v128) (i8x16.shr_u (local.get $0) (i32.const 8))) (func (export "i8x16.shr_s_9") (param $0 v128) (result v128) (i8x16.shr_s (local.get $0) (i32.const 9))) ;; i16x8 (func (export "i16x8.shl_1") (param $0 v128) (result v128) (i16x8.shl (local.get $0) (i32.const 1))) (func (export "i16x8.shr_u_16") (param $0 v128) (result v128) (i16x8.shr_u (local.get $0) (i32.const 16))) (func (export "i16x8.shr_s_17") (param $0 v128) (result v128) (i16x8.shr_s (local.get $0) (i32.const 17))) ;; i32x4 (func (export "i32x4.shl_1") (param $0 v128) (result v128) (i32x4.shl (local.get $0) (i32.const 1))) (func (export "i32x4.shr_u_32") (param $0 v128) (result v128) (i32x4.shr_u (local.get $0) (i32.const 32))) (func (export "i32x4.shr_s_33") (param $0 v128) (result v128) (i32x4.shr_s (local.get $0) (i32.const 33))) ;; i64x2 (func (export "i64x2.shl_1") (param $0 v128) (result v128) (i64x2.shl (local.get $0) (i32.const 1))) (func (export "i64x2.shr_u_64") (param $0 v128) (result v128) (i64x2.shr_u (local.get $0) (i32.const 64))) (func (export "i64x2.shr_s_65") (param $0 v128) (result v128) (i64x2.shr_s (local.get $0) (i32.const 65))) ) ;; i8x16 shl ;; amount less than lane width (assert_return (invoke "i8x16.shl" (v128.const i8x16 -128 -64 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D) (i32.const 1)) (v128.const i8x16 0 -128 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0xAA 0xBB 0xCC 0xDD 0xEE 0xFF 0xA0 0xB0 0xC0 0xD0 0xE0 0xF0 0x0A 0x0B 0x0C 0x0D) (i32.const 4)) (v128.const i8x16 0xA0 0xB0 0xC0 0xD0 0xE0 0xF0 0x00 0x00 0x00 0x00 0x00 0x00 0xA0 0xB0 0xC0 0xD0)) ;; amount is multiple of lane width (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 8)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 32)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 128)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 256)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i8x16.shl" (v128.const i8x16 -128 -64 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D) (i32.const 9)) (v128.const i8x16 0 -128 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 9)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 17)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 33)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 129)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 257)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 513)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shl" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 514)) (v128.const i8x16 0 4 8 12 16 20 24 28 32 36 0x28 0x2C 0x30 0x34 0x38 0x3C)) ;; i8x16 shr_u ;; amount less than lane width (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 -128 -64 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D) (i32.const 1)) (v128.const i8x16 64 96 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0xAA 0xBB 0xCC 0xDD 0xEE 0xFF 0xA0 0xB0 0xC0 0xD0 0xE0 0xF0 0x0A 0x0B 0x0C 0x0D) (i32.const 4)) (v128.const i8x16 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x00 0x00 0x00 0x00)) ;; amount is multiple of lane width (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 8)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 32)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 128)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 256)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 -128 -64 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D) (i32.const 9)) (v128.const i8x16 64 96 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 9)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 17)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 33)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 129)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 257)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 513)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 514)) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 0x02 0x02 0x03 0x03 0x03 0x03)) ;; i8x16 shr_s ;; amount less than lane width (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 -128 -64 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D) (i32.const 1)) (v128.const i8x16 192 224 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0xAA 0xBB 0xCC 0xDD 0xEE 0xFF 0xA0 0xB0 0xC0 0xD0 0xE0 0xF0 0x0A 0x0B 0x0C 0x0D) (i32.const 4)) (v128.const i8x16 0xFA 0xFB 0xFC 0xFD 0xFE 0xFF 0xFA 0xFB 0xFC 0xFD 0xFE 0xFF 0x00 0x00 0x00 0x00)) ;; amount is multiple of lane width (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 8)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 32)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 128)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 256)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 -128 -64 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D) (i32.const 9)) (v128.const i8x16 192 224 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 9)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 17)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 33)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 129)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 257)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 513)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) (assert_return (invoke "i8x16.shr_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F) (i32.const 514)) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 0x02 0x02 0x03 0x03 0x03 0x03)) ;; shifting by a constant amount (assert_return (invoke "i8x16.shl_1" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 0x14 0x16 0x18 0x1A 0x1C 0x1E)) (assert_return (invoke "i8x16.shr_u_8" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (assert_return (invoke "i8x16.shr_s_9" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 0x0A 0x0B 0x0C 0x0D 0x0e 0x0F)) (v128.const i8x16 0 0 1 1 2 2 3 3 4 4 0x05 0x05 0x06 0x06 0x07 0x07)) ;; i16x8 shl ;; amount less than lane width (assert_return (invoke "i16x8.shl" (v128.const i16x8 -128 -64 0 1 2 3 4 5) (i32.const 1)) (v128.const i16x8 65280 65408 0 2 4 6 8 10)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (i32.const 2)) (v128.const i16x8 49380 49380 49380 49380 49380 49380 49380 49380)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (i32.const 2)) (v128.const i16x8 0x48d0 0x48d0 0x48d0 0x48d0 0x48d0 0x48d0 0x48d0 0x48d0)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0xAABB 0xCCDD 0xEEFF 0xA0B0 0xC0D0 0xE0F0 0x0A0B 0x0C0D) (i32.const 4)) (v128.const i16x8 0xABB0 0xCDD0 0xEFF0 0xB00 0xD00 0xF00 0xA0B0 0xC0D0)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 8)) (v128.const i16x8 0 256 512 768 1024 1280 1536 1792)) ;; amount is multiple of lane width (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 32)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 128)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 256)) (v128.const i16x8 0 1 2 3 4 5 6 7)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i16x8.shl" (v128.const i16x8 -128 -64 0 1 2 3 4 5) (i32.const 17)) (v128.const i16x8 65280 65408 0 2 4 6 8 10)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 17)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 33)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 129)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 257)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 513)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.shl" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 514)) (v128.const i16x8 0 4 8 12 16 20 24 28)) ;; i16x8 shr_u ;; amount less than lane width (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 -128 -64 0 1 2 3 4 5) (i32.const 1)) (v128.const i16x8 32704 32736 0 0 1 1 2 2)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (i32.const 2)) (v128.const i16x8 3086 3086 3086 3086 3086 3086 3086 3086)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB) (i32.const 2)) (v128.const i16x8 0x242a 0x242a 0x242a 0x242a 0x242a 0x242a 0x242a 0x242a)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0xAABB 0xCCDD 0xEEFF 0xA0B0 0xC0D0 0xE0F0 0x0A0B 0x0C0D) (i32.const 4)) (v128.const i16x8 0xAAB 0xCCD 0xEEF 0xA0B 0xC0D 0xE0F 0x0A0 0x0C0)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 8)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; amount is multiple of lane width (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 32)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 128)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 256)) (v128.const i16x8 0 1 2 3 4 5 6 7)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 -128 -64 0 1 2 3 4 5) (i32.const 17)) (v128.const i16x8 32704 32736 0 0 1 1 2 2)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 17)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 33)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 129)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 257)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 513)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 514)) (v128.const i16x8 0 0 0 0 1 1 1 1)) ;; i16x8 shr_s ;; amount less than lane width (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 -128 -64 0 1 2 3 4 5) (i32.const 1)) (v128.const i16x8 65472 65504 0 0 1 1 2 2)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (i32.const 2)) (v128.const i16x8 3086 3086 3086 3086 3086 3086 3086 3086)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB) (i32.const 2)) (v128.const i16x8 0xe42a 0xe42a 0xe42a 0xe42a 0xe42a 0xe42a 0xe42a 0xe42a)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0xAABB 0xCCDD 0xEEFF 0xA0B0 0xC0D0 0xE0F0 0x0A0B 0x0C0D) (i32.const 4)) (v128.const i16x8 0xFAAB 0xFCCD 0xFEEF 0xFA0B 0xFC0D 0xFE0F 0x00A0 0x00C0)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 8)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; amount is multiple of lane width (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 32)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 128)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 256)) (v128.const i16x8 0 1 2 3 4 5 6 7)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 -128 -64 0 1 2 3 4 5) (i32.const 17)) (v128.const i16x8 65472 65504 0 0 1 1 2 2)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 17)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 33)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 129)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 257)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 513)) (v128.const i16x8 0 0 1 1 2 2 3 3)) (assert_return (invoke "i16x8.shr_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (i32.const 514)) (v128.const i16x8 0 0 0 0 1 1 1 1)) ;; shifting by a constant amount (assert_return (invoke "i16x8.shl_1" (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.shr_u_16" (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "i16x8.shr_s_17" (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.const i16x8 0 0 1 1 2 2 3 3)) ;; i32x4 shl ;; amount less than lane width (assert_return (invoke "i32x4.shl" (v128.const i32x4 -2147483648 -32768 0 0x0A0B0C0D) (i32.const 1)) (v128.const i32x4 0 4294901760 0 0x1416181A)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (i32.const 2)) (v128.const i32x4 643304264 643304264 643304264 643304264)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (i32.const 2)) (v128.const i32x4 0x48d159e0 0x48d159e0 0x48d159e0 0x48d159e0)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0xAABBCCDD 0xEEFFA0B0 0xC0D0E0F0 0x0A0B0C0D) (i32.const 4)) (v128.const i32x4 0xABBCCDD0 0xEFFA0B00 0x0D0E0F00 0xA0B0C0D0)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 8)) (v128.const i32x4 0 256 0x00000E00 0x00000F00)) ;; amount is multiple of lane width (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 32)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 128)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 256)) (v128.const i32x4 0 1 0x0E 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i32x4.shl" (v128.const i32x4 -2147483648 -32768 0 0x0A0B0C0D) (i32.const 33)) (v128.const i32x4 0 4294901760 0 0x1416181A)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 33)) (v128.const i32x4 0 2 0x1C 0x1E)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 65)) (v128.const i32x4 0 2 0x1C 0x1E)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 129)) (v128.const i32x4 0 2 0x1C 0x1E)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 257)) (v128.const i32x4 0 2 0x1C 0x1E)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 513)) (v128.const i32x4 0 2 0x1C 0x1E)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 514)) (v128.const i32x4 0 4 0x38 0x3C)) ;; i32x4 shr_u ;; amount less than lane width (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 -2147483648 -32768 0x0000000C 0x0000000D) (i32.const 1)) (v128.const i32x4 1073741824 2147467264 0x00000006 0x00000006)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (i32.const 2)) (v128.const i32x4 308641972 308641972 308641972 308641972)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (i32.const 2)) (v128.const i32x4 0x242af37b 0x242af37b 0x242af37b 0x242af37b)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0xAABBCCDD 0xEEFFA0B0 0xC0D0E0F0 0x0A0B0C0D) (i32.const 4)) (v128.const i32x4 0x0AABBCCD 0x0EEFFA0B 0x0C0D0E0F 0x00A0B0C0)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 8)) (v128.const i32x4 0 0 0x00000000 0x00000000)) ;; amount is multiple of lane width (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 32)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 128)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 256)) (v128.const i32x4 0 1 0x0E 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 -2147483648 -32768 0x0000000C 0x0000000D) (i32.const 33)) (v128.const i32x4 1073741824 2147467264 0x00000006 0x00000006)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 33)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 65)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 129)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 257)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 513)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 514)) (v128.const i32x4 0 0 0x03 0x03)) ;; i32x4 shr_s ;; amount less than lane width (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 -2147483648 -32768 0x0C 0x0D) (i32.const 1)) (v128.const i32x4 3221225472 4294950912 0x06 0x06)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (i32.const 2)) (v128.const i32x4 308641972 308641972 308641972 308641972)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (i32.const 2)) (v128.const i32x4 0xe42af37b 0xe42af37b 0xe42af37b 0xe42af37b)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0xAABBCCDD 0xEEFFA0B0 0xC0D0E0F0 0x0A0B0C0D) (i32.const 4)) (v128.const i32x4 0xfaabbccd 0xFEEFFA0B 0xFC0D0E0F 0x00A0B0C0)) ;; amount is multiple of lane width (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 8)) (v128.const i32x4 0 0 0x00000000 0x00000000)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 32)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 128)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 256)) (v128.const i32x4 0 1 0x0E 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 -2147483648 -32768 0x0C 0x0D) (i32.const 33)) (v128.const i32x4 3221225472 4294950912 0x06 0x06)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 33)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 65)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 129)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 257)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 513)) (v128.const i32x4 0 0 0x07 0x07)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 0 1 0x0E 0x0F) (i32.const 514)) (v128.const i32x4 0 0 0x03 0x03)) ;; shifting by a constant amount (assert_return (invoke "i32x4.shl_1" (v128.const i32x4 0 1 0x0E 0x0F)) (v128.const i32x4 0 2 28 30)) (assert_return (invoke "i32x4.shr_u_32" (v128.const i32x4 0 1 0x0E 0x0F)) (v128.const i32x4 0 1 0x0E 0x0F)) (assert_return (invoke "i32x4.shr_s_33" (v128.const i32x4 0 1 0x0E 0x0F)) (v128.const i32x4 0 0 7 7)) ;; i64x2 shl ;; amount less than lane width (assert_return (invoke "i64x2.shl" (v128.const i64x2 -9223372036854775808 -2147483648) (i32.const 1)) (v128.const i64x2 0 18446744069414584320)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789) (i32.const 2)) (v128.const i64x2 4938271560493827156 4938271560493827156)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef) (i32.const 2)) (v128.const i64x2 0x48d159e242af37bc 0x48d159e242af37bc)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 0xAABBCCDDEEFFA0B0 0xC0D0E0F00A0B0C0D) (i32.const 4)) (v128.const i64x2 0xABBCCDDEEFFA0B00 0xD0E0F00A0B0C0D0)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 0xAABBCCDDEEFFA0B0 0xC0D0E0F00A0B0C0D) (i32.const 8)) (v128.const i64x2 0xBBCCDDEEFFA0B000 0xD0E0F00A0B0C0D00)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 16)) (v128.const i64x2 65536 0xF0000)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 32)) (v128.const i64x2 4294967296 0xF00000000)) ;; amount is multiple of lane width (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 128)) (v128.const i64x2 1 0x0F)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 256)) (v128.const i64x2 1 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 65)) (v128.const i64x2 2 0x1E)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 129)) (v128.const i64x2 2 0x1E)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 257)) (v128.const i64x2 2 0x1E)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 513)) (v128.const i64x2 2 0x1E)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x0F) (i32.const 514)) (v128.const i64x2 4 0x3C)) ;; i64x2 shr_u ;; amount less than lane width (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 -9223372036854775808 -2147483648) (i32.const 1)) (v128.const i64x2 4611686018427387904 9223372035781033984)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789) (i32.const 2)) (v128.const i64x2 308641972530864197 308641972530864197)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 0x0_90AB_cdef_8765_4321 0x0_90AB_cdef_8765_4321) (i32.const 2)) (v128.const i64x2 0x242af37be1d950c8 0x242af37be1d950c8)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 0xAABBCCDDEEFFA0B0 0xC0D0E0F00A0B0C0D) (i32.const 4)) (v128.const i64x2 0xAABBCCDDEEFFA0B 0xC0D0E0F00A0B0C0)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 0xAABBCCDDEEFFA0B0 0xC0D0E0F00A0B0C0D) (i32.const 8)) (v128.const i64x2 0xAABBCCDDEEFFA0 0xC0D0E0F00A0B0C)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 16)) (v128.const i64x2 0 0x00)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 32)) (v128.const i64x2 0 0x00)) ;; amount is multiple of lane width (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 128)) (v128.const i64x2 1 0x0F)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 256)) (v128.const i64x2 1 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 65)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 129)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 257)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x0F) (i32.const 513)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 0 0x0F) (i32.const 514)) (v128.const i64x2 0 0x03)) ;; i64x2 shr_s ;; amount less than lane width (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 -9223372036854775808 -2147483648) (i32.const 1)) (v128.const i64x2 13835058055282163712 18446744072635809792)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789) (i32.const 2)) (v128.const i64x2 308641972530864197 308641972530864197)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 0x0_90AB_cdef_8765_4321 0x0_90AB_cdef_8765_4321) (i32.const 2)) (v128.const i64x2 0xe42af37be1d950c8 0xe42af37be1d950c8)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 0xAABBCCDDEEFFA0B0 0xC0D0E0F00A0B0C0D) (i32.const 4)) (v128.const i64x2 0xFAABBCCDDEEFFA0B 0xFC0D0E0F00A0B0C0)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 0xFFAABBCCDDEEFFA0 0xC0D0E0F00A0B0C0D) (i32.const 8)) (v128.const i64x2 0xFFFFAABBCCDDEEFF 0xFFC0D0E0F00A0B0C)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 16)) (v128.const i64x2 0 0x00)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 32)) (v128.const i64x2 0 0x00)) ;; amount is multiple of lane width (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 128)) (v128.const i64x2 1 0x0F)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 256)) (v128.const i64x2 1 0x0F)) ;; amount greater than but not a multiple of lane width (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 -9223372036854775808 -2147483648) (i32.const 65)) (v128.const i64x2 13835058055282163712 18446744072635809792)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 0x0C 0x0D) (i32.const 65)) (v128.const i64x2 0x06 0x06)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 129)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 257)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 513)) (v128.const i64x2 0 0x07)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x0F) (i32.const 514)) (v128.const i64x2 0 0x03)) ;; shifting by a constant amount (assert_return (invoke "i64x2.shl_1" (v128.const i64x2 1 0x0F)) (v128.const i64x2 2 0x1E)) (assert_return (invoke "i64x2.shr_u_64" (v128.const i64x2 1 0x0F)) (v128.const i64x2 1 0x0F)) (assert_return (invoke "i64x2.shr_s_65" (v128.const i64x2 1 0x0F)) (v128.const i64x2 0 0x07)) ;; Combination (module (memory 1) (func (export "i8x16.shl-in-block") (block (drop (block (result v128) (i8x16.shl (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i8x16.shr_s-in-block") (block (drop (block (result v128) (i8x16.shr_s (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i8x16.shr_u-in-block") (block (drop (block (result v128) (i8x16.shr_u (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i16x8.shl-in-block") (block (drop (block (result v128) (i16x8.shl (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i16x8.shr_s-in-block") (block (drop (block (result v128) (i16x8.shr_s (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i16x8.shr_u-in-block") (block (drop (block (result v128) (i16x8.shr_u (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i32x4.shl-in-block") (block (drop (block (result v128) (i32x4.shl (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i32x4.shr_s-in-block") (block (drop (block (result v128) (i32x4.shr_s (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i32x4.shr_u-in-block") (block (drop (block (result v128) (i32x4.shr_u (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i64x2.shl-in-block") (block (drop (block (result v128) (i64x2.shl (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i64x2.shr_s-in-block") (block (drop (block (result v128) (i64x2.shr_s (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "i64x2.shr_u-in-block") (block (drop (block (result v128) (i64x2.shr_u (block (result v128) (v128.load (i32.const 0))) (i32.const 1) ) ) ) ) ) (func (export "nested-i8x16.shl") (drop (i8x16.shl (i8x16.shl (i8x16.shl (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i8x16.shr_s") (drop (i8x16.shr_s (i8x16.shr_s (i8x16.shr_s (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i8x16.shr_u") (drop (i8x16.shr_u (i8x16.shr_u (i8x16.shr_u (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i16x8.shl") (drop (i16x8.shl (i16x8.shl (i16x8.shl (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i16x8.shr_s") (drop (i16x8.shr_s (i16x8.shr_s (i16x8.shr_s (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i16x8.shr_u") (drop (i16x8.shr_u (i16x8.shr_u (i16x8.shr_u (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i32x4.shl") (drop (i32x4.shl (i32x4.shl (i32x4.shl (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i32x4.shr_s") (drop (i32x4.shr_s (i32x4.shr_s (i32x4.shr_s (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i32x4.shr_u") (drop (i32x4.shr_u (i32x4.shr_u (i32x4.shr_u (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i64x2.shl") (drop (i64x2.shl (i64x2.shl (i64x2.shl (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i64x2.shr_s") (drop (i64x2.shr_s (i64x2.shr_s (i64x2.shr_s (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) (func (export "nested-i64x2.shr_u") (drop (i64x2.shr_u (i64x2.shr_u (i64x2.shr_u (v128.load (i32.const 0)) (i32.const 1) ) (i32.const 1) ) (i32.const 1) ) ) ) ) (assert_return (invoke "i8x16.shl-in-block")) (assert_return (invoke "i8x16.shr_s-in-block")) (assert_return (invoke "i8x16.shr_u-in-block")) (assert_return (invoke "i16x8.shl-in-block")) (assert_return (invoke "i16x8.shr_s-in-block")) (assert_return (invoke "i16x8.shr_u-in-block")) (assert_return (invoke "i32x4.shl-in-block")) (assert_return (invoke "i32x4.shr_s-in-block")) (assert_return (invoke "i32x4.shr_u-in-block")) (assert_return (invoke "i64x2.shl-in-block")) (assert_return (invoke "i64x2.shr_s-in-block")) (assert_return (invoke "i64x2.shr_u-in-block")) (assert_return (invoke "nested-i8x16.shl")) (assert_return (invoke "nested-i8x16.shr_s")) (assert_return (invoke "nested-i8x16.shr_u")) (assert_return (invoke "nested-i16x8.shl")) (assert_return (invoke "nested-i16x8.shr_s")) (assert_return (invoke "nested-i16x8.shr_u")) (assert_return (invoke "nested-i32x4.shl")) (assert_return (invoke "nested-i32x4.shr_s")) (assert_return (invoke "nested-i32x4.shr_u")) (assert_return (invoke "nested-i64x2.shl")) (assert_return (invoke "nested-i64x2.shr_s")) (assert_return (invoke "nested-i64x2.shr_u")) ;; Type check (assert_invalid (module (func (result v128) (i8x16.shl (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.shr_s (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.shr_u (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.shl (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.shr_s (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.shr_u (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.shl (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.shr_s (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.shr_u (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.shl (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.shr_s (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.shr_u (i32.const 0) (i32.const 0)))) "type mismatch") ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.shl_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.shl_r (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.shr (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.shl_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.shl_r (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.shr (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.shl_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.shl_r (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.shr (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.shl_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.shl_r (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.shr (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.shl (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.shr_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.shr_u (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; Test operation with empty argument (assert_invalid (module (func $i8x16.shl-1st-arg-empty (result v128) (i8x16.shl (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.shl-last-arg-empty (result v128) (i8x16.shl (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.shl-arg-empty (result v128) (i8x16.shl) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.shr_u-1st-arg-empty (result v128) (i16x8.shr_u (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.shr_u-last-arg-empty (result v128) (i16x8.shr_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.shr_u-arg-empty (result v128) (i16x8.shr_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.shr_s-1st-arg-empty (result v128) (i32x4.shr_s (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.shr_s-last-arg-empty (result v128) (i32x4.shr_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.shr_s-arg-empty (result v128) (i32x4.shr_s) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.shl-1st-arg-empty (result v128) (i64x2.shl (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.shr_u-last-arg-empty (result v128) (i64x2.shr_u (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.shr_s-arg-empty (result v128) (i64x2.shr_s) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_bitwise.wast ================================================ ;; Test all the bitwise operators on major boundary values and all special values. (module (func (export "not") (param $0 v128) (result v128) (v128.not (local.get $0))) (func (export "and") (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1))) (func (export "or") (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1))) (func (export "xor") (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1))) (func (export "bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2)) ) (func (export "andnot") (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1))) ) ;; i32x4 (assert_return (invoke "not" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "not" (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "not" (v128.const i32x4 -1 0 -1 0)) (v128.const i32x4 0 -1 0 -1)) (assert_return (invoke "not" (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 -1 0 -1 0)) (assert_return (invoke "not" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (assert_return (invoke "not" (v128.const i32x4 3435973836 3435973836 3435973836 3435973836)) (v128.const i32x4 858993459 858993459 858993459 858993459)) (assert_return (invoke "not" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i32x4 3060399405 3060399405 3060399405 3060399405)) (assert_return (invoke "not" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (v128.const i32x4 0xedcba987 0xedcba987 0xedcba987 0xedcba987)) (assert_return (invoke "and" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "and" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "and" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "and" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "and" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "and" (v128.const i32x4 255 255 255 255) (v128.const i32x4 85 85 85 85)) (v128.const i32x4 85 85 85 85)) (assert_return (invoke "and" (v128.const i32x4 255 255 255 255) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 128 128 128 128)) (assert_return (invoke "and" (v128.const i32x4 2863311530 2863311530 2863311530 2863311530) (v128.const i32x4 10 128 5 165)) (v128.const i32x4 10 128 0 160)) (assert_return (invoke "and" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (assert_return (invoke "and" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (assert_return (invoke "and" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x0 0x0 0x0 0x0)) (v128.const i32x4 0x0 0x0 0x0 0x0)) (assert_return (invoke "and" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i32x4 0x5555 0xFFFF 0x55FF 0x5FFF)) (v128.const i32x4 0x5555 0x5555 0x5555 0x5555)) (assert_return (invoke "and" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i32x4 1234567890 1234567890 1234567890 1234567890)) (assert_return (invoke "and" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const i32x4 0x10204468 0x10204468 0x10204468 0x10204468)) (assert_return (invoke "or" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "or" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "or" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "or" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "or" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "or" (v128.const i32x4 255 255 255 255) (v128.const i32x4 85 85 85 85)) (v128.const i32x4 255 255 255 255)) (assert_return (invoke "or" (v128.const i32x4 255 255 255 255) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 255 255 255 255)) (assert_return (invoke "or" (v128.const i32x4 2863311530 2863311530 2863311530 2863311530) (v128.const i32x4 10 128 5 165)) (v128.const i32x4 2863311530 2863311530 2863311535 2863311535)) (assert_return (invoke "or" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "or" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "or" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x0 0x0 0x0 0x0)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "or" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i32x4 0x5555 0xFFFF 0x55FF 0x5FFF)) (v128.const i32x4 0x55555555 0x5555ffff 0x555555ff 0x55555fff)) (assert_return (invoke "or" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i32x4 1234567890 1234567890 1234567890 1234567890)) (assert_return (invoke "or" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const i32x4 0x92bfdfff 0x92bfdfff 0x92bfdfff 0x92bfdfff)) (assert_return (invoke "xor" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 -1 -1 0)) (assert_return (invoke "xor" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "xor" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "xor" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "xor" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "xor" (v128.const i32x4 255 255 255 255) (v128.const i32x4 85 85 85 85)) (v128.const i32x4 170 170 170 170)) (assert_return (invoke "xor" (v128.const i32x4 255 255 255 255) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 127 127 127 127)) (assert_return (invoke "xor" (v128.const i32x4 2863311530 2863311530 2863311530 2863311530) (v128.const i32x4 10 128 5 165)) (v128.const i32x4 2863311520 2863311402 2863311535 2863311375)) (assert_return (invoke "xor" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (assert_return (invoke "xor" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (assert_return (invoke "xor" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x0 0x0 0x0 0x0)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "xor" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i32x4 0x5555 0xFFFF 0x55FF 0x5FFF)) (v128.const i32x4 0x55550000 0x5555AAAA 0x555500AA 0x55550AAA)) (assert_return (invoke "xor" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "xor" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const i32x4 0x829f9b97 0x829f9b97 0x829f9b97 0x829f9b97)) (assert_return (invoke "bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB) (v128.const i32x4 0x00112345 0xF00FFFFF 0x10112021 0xBBAABBAA)) (v128.const i32x4 0xBBAABABA 0xABBAAAAA 0xABAABBBA 0xAABBAABB)) (assert_return (invoke "bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB)) (assert_return (invoke "bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB) (v128.const i32x4 0x11111111 0x11111111 0x11111111 0x11111111)) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (assert_return (invoke "bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB) (v128.const i32x4 0x01234567 0x89ABCDEF 0xFEDCBA98 0x76543210)) (v128.const i32x4 0xBABABABA 0xBABABABA 0xABABABAB 0xABABABAB)) (assert_return (invoke "bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i32x4 0x01234567 0x89ABCDEF 0xFEDCBA98 0x76543210)) (v128.const i32x4 0x54761032 0xDCFE98BA 0xAB89EFCD 0x23016745)) (assert_return (invoke "bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i32x4 0x55555555 0xAAAAAAAA 0x00000000 0xFFFFFFFF)) (v128.const i32x4 0x00000000 0xFFFFFFFF 0x55555555 0xAAAAAAAA)) (assert_return (invoke "bitselect" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (v128.const i32x4 03_060_399_406 03_060_399_406 03_060_399_406 03_060_399_406) (v128.const i32x4 0xcdefcdef 0xcdefcdef 0xcdefcdef 0xcdefcdef)) (v128.const i32x4 2072391874 2072391874 2072391874 2072391874)) (assert_return (invoke "bitselect" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 0xcdefcdef 0xcdefcdef 0xcdefcdef 0xcdefcdef)) (v128.const i32x4 0x10244468 0x10244468 0x10244468 0x10244468)) (assert_return (invoke "andnot" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 0 -1 0)) (assert_return (invoke "andnot" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "andnot" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "andnot" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "andnot" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "andnot" (v128.const i32x4 255 255 255 255) (v128.const i32x4 85 85 85 85)) (v128.const i32x4 170 170 170 170)) (assert_return (invoke "andnot" (v128.const i32x4 255 255 255 255) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 127 127 127 127)) (assert_return (invoke "andnot" (v128.const i32x4 2863311530 2863311530 2863311530 2863311530) (v128.const i32x4 10 128 5 165)) (v128.const i32x4 2863311520 2863311402 2863311530 2863311370)) (assert_return (invoke "andnot" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (assert_return (invoke "andnot" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555)) (assert_return (invoke "andnot" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x0 0x0 0x0 0x0)) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (assert_return (invoke "andnot" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i32x4 0x5555 0xFFFF 0x55FF 0x5FFF)) (v128.const i32x4 0x55550000 0x55550000 0x55550000 0x55550000)) (assert_return (invoke "andnot" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "andnot" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const i32x4 0x02141210 0x02141210 0x02141210 0x02141210)) ;; for float special data [e.g. -nan nan -inf inf] (assert_return (invoke "not" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 5.87747e-39 5.87747e-39 5.87747e-39 5.87747e-39)) (assert_return (invoke "not" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -5.87747e-39 -5.87747e-39 -5.87747e-39 -5.87747e-39)) (assert_return (invoke "not" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0x007fffff 0x007fffff 0x007fffff 0x007fffff)) (assert_return (invoke "not" (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x807fffff 0x807fffff 0x807fffff 0x807fffff)) (assert_return (invoke "and" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "and" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "and" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "and" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "and" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "and" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "and" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "and" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "and" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "and" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "or" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "or" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "or" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "or" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "or" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "or" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "or" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "or" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "or" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "or" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "xor" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0 0 0 0)) (assert_return (invoke "xor" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0 -0 -0 -0)) (assert_return (invoke "xor" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0x00400000 0x00400000 0x00400000 0x00400000)) (assert_return (invoke "xor" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x80400000 0x80400000 0x80400000 0x80400000)) (assert_return (invoke "xor" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0 0 0 0)) (assert_return (invoke "xor" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0x80400000 0x80400000 0x80400000 0x80400000)) (assert_return (invoke "xor" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x00400000 0x00400000 0x00400000 0x00400000)) (assert_return (invoke "xor" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0 0 0 0)) (assert_return (invoke "xor" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "xor" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0 0 0 0)) (assert_return (invoke "bitselect" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const i32x4 0xffc00000 0xffc00000 0xffc00000 0xffc00000)) (assert_return (invoke "bitselect" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "bitselect" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "bitselect" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "bitselect" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "bitselect" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "bitselect" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "bitselect" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "bitselect" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "bitselect" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "andnot" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "andnot" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0 -0 -0 -0)) (assert_return (invoke "andnot" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0x00400000 0x00400000 0x00400000 0x00400000)) (assert_return (invoke "andnot" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x80400000 0x80400000 0x80400000 0x80400000)) (assert_return (invoke "andnot" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "andnot" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0x00400000 0x00400000 0x00400000 0x00400000)) (assert_return (invoke "andnot" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x00400000 0x00400000 0x00400000 0x00400000)) (assert_return (invoke "andnot" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "andnot" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "andnot" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) ;; Type check ;; not (assert_invalid (module (func (result v128) (v128.not (i32.const 0)))) "type mismatch") ;; and (assert_invalid (module (func (result v128) (v128.and (i32.const 0) (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.and (v128.const i32x4 0 0 0 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.and (i32.const 0) (i32.const 0)))) "type mismatch") ;; or (assert_invalid (module (func (result v128) (v128.or (i32.const 0) (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.or (v128.const i32x4 0 0 0 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.or (i32.const 0) (i32.const 0)))) "type mismatch") ;; xor (assert_invalid (module (func (result v128) (v128.xor (i32.const 0) (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.xor (v128.const i32x4 0 0 0 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.xor (i32.const 0) (i32.const 0)))) "type mismatch") ;; bitselect (assert_invalid (module (func (result v128) (v128.bitselect (i32.const 0) (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.bitselect (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.bitselect (i32.const 0) (i32.const 0) (i32.const 0)))) "type mismatch") ;; andnot (assert_invalid (module (func (result v128) (v128.andnot (i32.const 0) (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.andnot (v128.const i32x4 0 0 0 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (v128.andnot (i32.const 0) (i32.const 0)))) "type mismatch") ;; Combination (module (memory 1) (func (export "v128.not-in-block") (block (drop (block (result v128) (v128.not (block (result v128) (v128.load (i32.const 0))) ) ) ) ) ) (func (export "v128.and-in-block") (block (drop (block (result v128) (v128.and (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "v128.or-in-block") (block (drop (block (result v128) (v128.or (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "v128.xor-in-block") (block (drop (block (result v128) (v128.xor (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "v128.bitselect-in-block") (block (drop (block (result v128) (v128.bitselect (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) (block (result v128) (v128.load (i32.const 2))) ) ) ) ) ) (func (export "v128.andnot-in-block") (block (drop (block (result v128) (v128.andnot (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-v128.not") (drop (v128.not (v128.not (v128.not (v128.load (i32.const 0)) ) ) ) ) ) (func (export "nested-v128.and") (drop (v128.and (v128.and (v128.and (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.and (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) (v128.and (v128.and (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.and (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) ) ) ) (func (export "nested-v128.or") (drop (v128.or (v128.or (v128.or (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.or (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) (v128.or (v128.or (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.or (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) ) ) ) (func (export "nested-v128.xor") (drop (v128.xor (v128.xor (v128.xor (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.xor (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) (v128.xor (v128.xor (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.xor (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) ) ) ) (func (export "nested-v128.bitselect") (drop (v128.bitselect (v128.bitselect (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) ) (v128.bitselect (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) ) (v128.bitselect (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) ) ) ) ) (func (export "nested-v128.andnot") (drop (v128.andnot (v128.andnot (v128.andnot (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.andnot (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) (v128.andnot (v128.andnot (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (v128.andnot (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) ) ) ) (func (export "as-param") (drop (v128.or (v128.and (v128.not (v128.load (i32.const 0)) ) (v128.not (v128.load (i32.const 1)) ) ) (v128.xor (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 1)) (v128.load (i32.const 2)) ) (v128.andnot (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) ) ) ) ) ) (assert_return (invoke "v128.not-in-block")) (assert_return (invoke "v128.and-in-block")) (assert_return (invoke "v128.or-in-block")) (assert_return (invoke "v128.xor-in-block")) (assert_return (invoke "v128.bitselect-in-block")) (assert_return (invoke "v128.andnot-in-block")) (assert_return (invoke "nested-v128.not")) (assert_return (invoke "nested-v128.and")) (assert_return (invoke "nested-v128.or")) (assert_return (invoke "nested-v128.xor")) (assert_return (invoke "nested-v128.bitselect")) (assert_return (invoke "nested-v128.andnot")) (assert_return (invoke "as-param")) ;; Test operation with empty argument (assert_invalid (module (func $v128.not-arg-empty (result v128) (v128.not) ) ) "type mismatch" ) (assert_invalid (module (func $v128.and-1st-arg-empty (result v128) (v128.and (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $v128.and-arg-empty (result v128) (v128.and) ) ) "type mismatch" ) (assert_invalid (module (func $v128.or-1st-arg-empty (result v128) (v128.or (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $v128.or-arg-empty (result v128) (v128.or) ) ) "type mismatch" ) (assert_invalid (module (func $v128.xor-1st-arg-empty (result v128) (v128.xor (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $v128.xor-arg-empty (result v128) (v128.xor) ) ) "type mismatch" ) (assert_invalid (module (func $v128.andnot-1st-arg-empty (result v128) (v128.andnot (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $v128.andnot-arg-empty (result v128) (v128.andnot) ) ) "type mismatch" ) (assert_invalid (module (func $v128.bitselect-1st-arg-empty (result v128) (v128.bitselect (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $v128.bitselect-two-args-empty (result v128) (v128.bitselect (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $v128.bitselect-arg-empty (result v128) (v128.bitselect) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_boolean.wast ================================================ ;; Test all the boolean operators on major boundary values and all special values. (module (func (export "i8x16.any_true") (param $0 v128) (result i32) (v128.any_true (local.get $0))) (func (export "i8x16.all_true") (param $0 v128) (result i32) (i8x16.all_true (local.get $0))) (func (export "i8x16.bitmask") (param $0 v128) (result i32) (i8x16.bitmask (local.get $0))) (func (export "i16x8.any_true") (param $0 v128) (result i32) (v128.any_true (local.get $0))) (func (export "i16x8.all_true") (param $0 v128) (result i32) (i16x8.all_true (local.get $0))) (func (export "i16x8.bitmask") (param $0 v128) (result i32) (i16x8.bitmask (local.get $0))) (func (export "i32x4.any_true") (param $0 v128) (result i32) (v128.any_true (local.get $0))) (func (export "i32x4.all_true") (param $0 v128) (result i32) (i32x4.all_true (local.get $0))) (func (export "i32x4.bitmask") (param $0 v128) (result i32) (i32x4.bitmask (local.get $0))) (func (export "i64x2.all_true") (param $0 v128) (result i32) (i64x2.all_true (local.get $0))) (func (export "i64x2.bitmask") (param $0 v128) (result i32) (i64x2.bitmask (local.get $0))) ) ;; i8x16 (assert_return (invoke "i8x16.any_true" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 -1 0 1 2 3 4 5 6 7 8 9 0xA 0xB 0xC 0xD 0xF)) (i32.const 1)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i8x16.any_true" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 -1 0 1 2 3 4 5 6 7 8 9 0xA 0xB 0xC 0xD 0xF)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i8x16.all_true" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (i32.const 0x0000FFFF)) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 -1 0 1 2 3 4 5 6 7 8 9 0xA 0xB 0xC 0xD 0xF)) (i32.const 0x00000001)) ;; i16x8 (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 -1 0 1 2 0xB 0xC 0xD 0xF)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345)) (i32.const 1)) (assert_return (invoke "i16x8.any_true" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234)) (i32.const 1)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 -1 0 1 2 0xB 0xC 0xD 0xF)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345)) (i32.const 1)) (assert_return (invoke "i16x8.all_true" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234)) (i32.const 1)) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (i32.const 0x000000FF)) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 -1 0 1 2 0xB 0xC 0xD 0xF)) (i32.const 0x00000001)) ;; i32x4 (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 -1 0 1 0xF)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0x00 0x00 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0xFF 0xFF 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0xAB 0xAB 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0x55 0x55 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (i32.const 1)) (assert_return (invoke "i32x4.any_true" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (i32.const 1)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 -1 0 1 0xF)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0x00 0x00 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0xFF 0xFF 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0xAB 0xAB 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0x55 0x55 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (i32.const 1)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (i32.const 1)) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (i32.const 0x0000000F)) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 -1 0 1 0xF)) (i32.const 0x00000001)) ;; i64x2 (assert_return (invoke "i64x2.all_true" (v128.const i64x2 0 0)) (i32.const 0)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 0 1)) (i32.const 0)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 1 0)) (i32.const 0)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 1 1)) (i32.const 1)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 -1 0)) (i32.const 0)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 0x00 0x00)) (i32.const 0)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 0xFF 0xFF)) (i32.const 1)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 0xAB 0xAB)) (i32.const 1)) (assert_return (invoke "i64x2.all_true" (v128.const i64x2 0x55 0x55)) (i32.const 1)) (assert_return (invoke "i64x2.bitmask" (v128.const i64x2 0xFFFFFFFF_FFFFFFFF 0xFFFFFFFF_FFFFFFFF)) (i32.const 0x00000003)) (assert_return (invoke "i64x2.bitmask" (v128.const i64x2 -1 0xF)) (i32.const 0x00000001)) ;; Combination (module (memory 1) ;; as if condition (func (export "i8x16_any_true_as_if_cond") (param v128) (result i32) (if (result i32) (v128.any_true (local.get 0)) (then (i32.const 1)) (else (i32.const 0)) ) ) (func (export "i16x8_any_true_as_if_cond") (param v128) (result i32) (if (result i32) (v128.any_true (local.get 0)) (then (i32.const 1)) (else (i32.const 0)) ) ) (func (export "i32x4_any_true_as_if_cond") (param v128) (result i32) (if (result i32) (v128.any_true (local.get 0)) (then (i32.const 1)) (else (i32.const 0)) ) ) (func (export "i8x16_all_true_as_if_cond") (param v128) (result i32) (if (result i32) (i8x16.all_true (local.get 0)) (then (i32.const 1)) (else (i32.const 0)) ) ) (func (export "i16x8_all_true_as_if_cond") (param v128) (result i32) (if (result i32) (i16x8.all_true (local.get 0)) (then (i32.const 1)) (else (i32.const 0)) ) ) (func (export "i32x4_all_true_as_if_cond") (param v128) (result i32) (if (result i32) (i32x4.all_true (local.get 0)) (then (i32.const 1)) (else (i32.const 0)) ) ) ;; any_true as select condition (func (export "i8x16_any_true_as_select_cond") (param v128) (result i32) (select (i32.const 1) (i32.const 0) (v128.any_true (local.get 0))) ) (func (export "i16x8_any_true_as_select_cond") (param v128) (result i32) (select (i32.const 1) (i32.const 0) (v128.any_true (local.get 0))) ) (func (export "i32x4_any_true_as_select_cond") (param v128) (result i32) (select (i32.const 1) (i32.const 0) (v128.any_true (local.get 0))) ) ;; all_true as select condition (func (export "i8x16_all_true_as_select_cond") (param v128) (result i32) (select (i32.const 1) (i32.const 0) (i8x16.all_true (local.get 0))) ) (func (export "i16x8_all_true_as_select_cond") (param v128) (result i32) (select (i32.const 1) (i32.const 0) (i16x8.all_true (local.get 0))) ) (func (export "i32x4_all_true_as_select_cond") (param v128) (result i32) (select (i32.const 1) (i32.const 0) (i32x4.all_true (local.get 0))) ) ;; any_true as br_if condition (func (export "i8x16_any_true_as_br_if_cond") (param $0 v128) (result i32) (local $1 i32) (local.set $1 (i32.const 2)) (block (local.set $1 (i32.const 1)) (br_if 0 (v128.any_true (local.get $0))) (local.set $1 (i32.const 0)) ) (local.get $1) ) (func (export "i16x8_any_true_as_br_if_cond") (param $0 v128) (result i32) (local $1 i32) (local.set $1 (i32.const 2)) (block (local.set $1 (i32.const 1)) (br_if 0 (v128.any_true (local.get $0))) (local.set $1 (i32.const 0)) ) (local.get $1) ) (func (export "i32x4_any_true_as_br_if_cond") (param $0 v128) (result i32) (local $1 i32) (local.set $1 (i32.const 2)) (block (local.set $1 (i32.const 1)) (br_if 0 (v128.any_true (local.get $0))) (local.set $1 (i32.const 0)) ) (local.get $1) ) ;; all_true as br_if condition (func (export "i8x16_all_true_as_br_if_cond") (param $0 v128) (result i32) (local $1 i32) (local.set $1 (i32.const 2)) (block (local.set $1 (i32.const 1)) (br_if 0 (i8x16.all_true (local.get $0))) (local.set $1 (i32.const 0)) ) (local.get $1) ) (func (export "i16x8_all_true_as_br_if_cond") (param $0 v128) (result i32) (local $1 i32) (local.set $1 (i32.const 2)) (block (local.set $1 (i32.const 1)) (br_if 0 (i16x8.all_true (local.get $0))) (local.set $1 (i32.const 0)) ) (local.get $1) ) (func (export "i32x4_all_true_as_br_if_cond") (param $0 v128) (result i32) (local $1 i32) (local.set $1 (i32.const 2)) (block (local.set $1 (i32.const 1)) (br_if 0 (i32x4.all_true (local.get $0))) (local.set $1 (i32.const 0)) ) (local.get $1) ) ;; any_true as i32.and operand (func (export "i8x16_any_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32) (i32.and (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) (func (export "i16x8_any_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32) (i32.and (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) (func (export "i32x4_any_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32) (i32.and (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) ;; any_true as i32.or operand (func (export "i8x16_any_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32) (i32.or (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) (func (export "i16x8_any_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32) (i32.or (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) (func (export "i32x4_any_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32) (i32.or (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) ;; any_true as i32.xor operand (func (export "i8x16_any_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32) (i32.xor (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) (func (export "i16x8_any_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32) (i32.xor (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) (func (export "i32x4_any_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32) (i32.xor (v128.any_true (local.get $0)) (v128.any_true (local.get $1))) ) ;; all_true as i32.and operand (func (export "i8x16_all_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32) (i32.and (i8x16.all_true (local.get $0)) (i8x16.all_true (local.get $1))) ) (func (export "i16x8_all_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32) (i32.and (i16x8.all_true (local.get $0)) (i16x8.all_true (local.get $1))) ) (func (export "i32x4_all_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32) (i32.and (i32x4.all_true (local.get $0)) (i32x4.all_true (local.get $1))) ) ;; all_true as i32.or operand (func (export "i8x16_all_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32) (i32.or (i8x16.all_true (local.get $0)) (i8x16.all_true (local.get $1))) ) (func (export "i16x8_all_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32) (i32.or (i16x8.all_true (local.get $0)) (i16x8.all_true (local.get $1))) ) (func (export "i32x4_all_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32) (i32.or (i32x4.all_true (local.get $0)) (i32x4.all_true (local.get $1))) ) ;; all_true as i32.xor operand (func (export "i8x16_all_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32) (i32.xor (i8x16.all_true (local.get $0)) (i8x16.all_true (local.get $1))) ) (func (export "i16x8_all_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32) (i32.xor (i16x8.all_true (local.get $0)) (i16x8.all_true (local.get $1))) ) (func (export "i32x4_all_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32) (i32.xor (i32x4.all_true (local.get $0)) (i32x4.all_true (local.get $1))) ) ;; any_true with v128.not (func (export "i8x16_any_true_with_v128.not") (param $0 v128) (result i32) (v128.any_true (v128.not (local.get $0))) ) (func (export "i16x8_any_true_with_v128.not") (param $0 v128) (result i32) (v128.any_true (v128.not (local.get $0))) ) (func (export "i32x4_any_true_with_v128.not") (param $0 v128) (result i32) (v128.any_true (v128.not (local.get $0))) ) ;; any_true with v128.and (func (export "i8x16_any_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.and (local.get $0) (local.get $1))) ) (func (export "i16x8_any_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.and (local.get $0) (local.get $1))) ) (func (export "i32x4_any_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.and (local.get $0) (local.get $1))) ) ;; any_true with v128.or (func (export "i8x16_any_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.or (local.get $0) (local.get $1))) ) (func (export "i16x8_any_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.or (local.get $0) (local.get $1))) ) (func (export "i32x4_any_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.or (local.get $0) (local.get $1))) ) ;; any_true with v128.xor (func (export "i8x16_any_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.xor (local.get $0) (local.get $1))) ) (func (export "i16x8_any_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.xor (local.get $0) (local.get $1))) ) (func (export "i32x4_any_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32) (v128.any_true (v128.xor (local.get $0) (local.get $1))) ) ;; any_true with v128.bitselect (func (export "i8x16_any_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32) (v128.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2))) ) (func (export "i16x8_any_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32) (v128.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2))) ) (func (export "i32x4_any_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32) (v128.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2))) ) ;; all_true with v128.not (func (export "i8x16_all_true_with_v128.not") (param $0 v128) (result i32) (i8x16.all_true (v128.not (local.get $0))) ) (func (export "i16x8_all_true_with_v128.not") (param $0 v128) (result i32) (i16x8.all_true (v128.not (local.get $0))) ) (func (export "i32x4_all_true_with_v128.not") (param $0 v128) (result i32) (i32x4.all_true (v128.not (local.get $0))) ) ;; all_true with v128.and (func (export "i8x16_all_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32) (i8x16.all_true (v128.and (local.get $0) (local.get $1))) ) (func (export "i16x8_all_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32) (i16x8.all_true (v128.and (local.get $0) (local.get $1))) ) (func (export "i32x4_all_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32) (i32x4.all_true (v128.and (local.get $0) (local.get $1))) ) ;; all_true with v128.or (func (export "i8x16_all_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32) (i8x16.all_true (v128.or (local.get $0) (local.get $1))) ) (func (export "i16x8_all_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32) (i16x8.all_true (v128.or (local.get $0) (local.get $1))) ) (func (export "i32x4_all_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32) (i32x4.all_true (v128.or (local.get $0) (local.get $1))) ) ;; all_true with v128.xor (func (export "i8x16_all_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32) (i8x16.all_true (v128.xor (local.get $0) (local.get $1))) ) (func (export "i16x8_all_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32) (i16x8.all_true (v128.xor (local.get $0) (local.get $1))) ) (func (export "i32x4_all_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32) (i32x4.all_true (v128.xor (local.get $0) (local.get $1))) ) ;; all_true with v128.bitselect (func (export "i8x16_all_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32) (i8x16.all_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2))) ) (func (export "i16x8_all_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32) (i16x8.all_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2))) ) (func (export "i32x4_all_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32) (i32x4.all_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2))) ) ) ;; 'any_true' as 'if' condition ;; i8x16 (assert_return (invoke "i8x16_any_true_as_if_cond" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_if_cond" (v128.const i8x16 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i8x16_any_true_as_if_cond" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) ;; i16x8 (assert_return (invoke "i16x8_any_true_as_if_cond" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_if_cond" (v128.const i16x8 0 0 1 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_if_cond" (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) ;; i32x4 (assert_return (invoke "i32x4_any_true_as_if_cond" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_if_cond" (v128.const i32x4 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_if_cond" (v128.const i32x4 1 1 1 1)) (i32.const 1)) ;; 'all_true' as 'if' condition ;; i8x16 (assert_return (invoke "i8x16_all_true_as_if_cond" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_as_if_cond" (v128.const i8x16 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_as_if_cond" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) ;; i16x8 (assert_return (invoke "i16x8_all_true_as_if_cond" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_if_cond" (v128.const i16x8 1 1 1 0 1 1 1 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_if_cond" (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) ;; i32x4 (assert_return (invoke "i32x4_all_true_as_if_cond" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_if_cond" (v128.const i32x4 1 1 1 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_if_cond" (v128.const i32x4 1 1 1 1)) (i32.const 1)) ;; any_true as select condition (assert_return (invoke "i8x16_any_true_as_select_cond" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_select_cond" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_select_cond" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_select_cond" (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_select_cond" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_select_cond" (v128.const i32x4 0 0 1 0)) (i32.const 1)) ;; all_true as select condition (assert_return (invoke "i8x16_all_true_as_select_cond" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_as_select_cond" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_select_cond" (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_as_select_cond" (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_select_cond" (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_as_select_cond" (v128.const i32x4 1 1 0 1)) (i32.const 0)) ;; any_true as br_if condition (assert_return (invoke "i8x16_any_true_as_br_if_cond" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_br_if_cond" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_br_if_cond" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_br_if_cond" (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_br_if_cond" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_br_if_cond" (v128.const i32x4 0 0 1 0)) (i32.const 1)) ;; all_true as br_if condition (assert_return (invoke "i8x16_all_true_as_br_if_cond" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_as_br_if_cond" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_br_if_cond" (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_as_br_if_cond" (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_br_if_cond" (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_as_br_if_cond" (v128.const i32x4 1 1 0 1)) (i32.const 0)) ;; any_true as and operand (assert_return (invoke "i8x16_any_true_as_i32.and_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_i32.and_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_i32.and_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_i32.and_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_i32.and_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_i32.and_operand" (v128.const i16x8 0 0 0 0 0 0 1 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_i32.and_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_i32.and_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_i32.and_operand" (v128.const i32x4 0 0 1 0) (v128.const i32x4 0 0 1 0)) (i32.const 1)) ;; any_true as or operand (assert_return (invoke "i8x16_any_true_as_i32.or_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_i32.or_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i8x16_any_true_as_i32.or_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_i32.or_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_i32.or_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_i32.or_operand" (v128.const i16x8 0 0 0 0 0 0 1 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_i32.or_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_i32.or_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_i32.or_operand" (v128.const i32x4 0 0 1 0) (v128.const i32x4 0 0 1 0)) (i32.const 1)) ;; any_true as xor operand (assert_return (invoke "i8x16_any_true_as_i32.xor_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_as_i32.xor_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i8x16_any_true_as_i32.xor_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_i32.xor_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_as_i32.xor_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_as_i32.xor_operand" (v128.const i16x8 0 0 0 0 0 0 1 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_i32.xor_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_as_i32.xor_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_as_i32.xor_operand" (v128.const i32x4 0 0 1 0) (v128.const i32x4 0 0 1 0)) (i32.const 0)) ;; all_true as and operand (assert_return (invoke "i8x16_all_true_as_i32.and_operand" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_as_i32.and_operand" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_as_i32.and_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_i32.and_operand" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_as_i32.and_operand" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_i32.and_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_i32.and_operand" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_as_i32.and_operand" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 0 1)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_i32.and_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 1 0)) (i32.const 0)) ;; all_true as or operand (assert_return (invoke "i8x16_all_true_as_i32.or_operand" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_as_i32.or_operand" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_as_i32.or_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_i32.or_operand" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_as_i32.or_operand" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_as_i32.or_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_i32.or_operand" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_as_i32.or_operand" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_as_i32.or_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) ;; all_true as xor operand (assert_return (invoke "i8x16_all_true_as_i32.xor_operand" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_as_i32.xor_operand" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_as_i32.xor_operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_i32.xor_operand" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_as_i32.xor_operand" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_as_i32.xor_operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_i32.xor_operand" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_as_i32.xor_operand" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 0 1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_as_i32.xor_operand" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) ;; any_true with v128.not (assert_return (invoke "i8x16_any_true_with_v128.not" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 1)) (assert_return (invoke "i8x16_any_true_with_v128.not" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_with_v128.not" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.not" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.not" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_with_v128.not" (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.not" (v128.const i32x4 0 0 0 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.not" (v128.const i32x4 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_with_v128.not" (v128.const i32x4 0 0 -1 0)) (i32.const 1)) ;; any_true with v128.and (assert_return (invoke "i8x16_any_true_with_v128.and" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_with_v128.and" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i8x16_any_true_with_v128.and" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.and" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_with_v128.and" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.and" (v128.const i16x8 0 0 0 0 0 0 -1 0) (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.and" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_with_v128.and" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.and" (v128.const i32x4 0 0 -1 0) (v128.const i32x4 0 0 -1 0)) (i32.const 1)) ;; any_true with v128.or (assert_return (invoke "i8x16_any_true_with_v128.or" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_with_v128.or" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i8x16_any_true_with_v128.or" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.or" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_with_v128.or" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.or" (v128.const i16x8 0 0 0 0 0 0 -1 0) (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.or" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_with_v128.or" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.or" (v128.const i32x4 0 0 -1 0) (v128.const i32x4 0 0 -1 0)) (i32.const 1)) ;; any_true with v128.xor (assert_return (invoke "i8x16_any_true_with_v128.xor" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_with_v128.xor" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_with_v128.xor" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.xor" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_with_v128.xor" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_with_v128.xor" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.xor" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_with_v128.xor" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_with_v128.xor" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 -1 0)) (i32.const 1)) ;; any_true with v128.bitselect (assert_return (invoke "i8x16_any_true_with_v128.bitselect" (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 0)) (assert_return (invoke "i8x16_any_true_with_v128.bitselect" (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xFF 0x55)) (i32.const 1)) (assert_return (invoke "i16x8_any_true_with_v128.bitselect" (v128.const i16x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 0)) (assert_return (invoke "i16x8_any_true_with_v128.bitselect" (v128.const i16x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0xFF 0x55)) (i32.const 1)) (assert_return (invoke "i32x4_any_true_with_v128.bitselect" (v128.const i32x4 0xAA 0xAA 0xAA 0xAA) (v128.const i32x4 0x55 0x55 0x55 0x55) (v128.const i32x4 0x55 0x55 0x55 0x55)) (i32.const 0)) (assert_return (invoke "i32x4_any_true_with_v128.bitselect" (v128.const i32x4 0xAA 0xAA 0xAA 0xAA) (v128.const i32x4 0x55 0x55 0x55 0x55) (v128.const i32x4 0x55 0x55 0xFF 0x55)) (i32.const 1)) ;; all_true with v128.not (assert_return (invoke "i8x16_all_true_with_v128.not" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_with_v128.not" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_with_v128.not" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.not" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_with_v128.not" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.not" (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.not" (v128.const i32x4 0 0 0 0)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_with_v128.not" (v128.const i32x4 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.not" (v128.const i32x4 0 0 -1 0)) (i32.const 0)) ;; all_true with v128.and (assert_return (invoke "i8x16_all_true_with_v128.and" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_with_v128.and" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_with_v128.and" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.and" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.and" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_with_v128.and" (v128.const i16x8 0 0 0 0 0 0 -1 0) (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.and" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.and" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_with_v128.and" (v128.const i32x4 0 0 -1 0) (v128.const i32x4 0 0 -1 0)) (i32.const 0)) ;; all_true with v128.or (assert_return (invoke "i8x16_all_true_with_v128.or" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_with_v128.or" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i8x16_all_true_with_v128.or" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.or" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.or" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_with_v128.or" (v128.const i16x8 0 0 0 0 0 0 -1 0) (v128.const i16x8 0 0 0 0 0 0 -1 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.or" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.or" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_with_v128.or" (v128.const i32x4 0 0 -1 0) (v128.const i32x4 0 0 -1 0)) (i32.const 0)) ;; all_true with v128.xor (assert_return (invoke "i8x16_all_true_with_v128.xor" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_with_v128.xor" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_with_v128.xor" (v128.const i8x16 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1) (v128.const i8x16 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_with_v128.xor" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.xor" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.xor" (v128.const i16x8 0 -1 0 -1 0 -1 0 -1) (v128.const i16x8 -1 0 -1 0 -1 0 -1 0)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_with_v128.xor" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.xor" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.xor" (v128.const i32x4 0 -1 0 -1) (v128.const i32x4 -1 0 -1 0)) (i32.const 1)) ;; all_true with v128.bitselect (assert_return (invoke "i8x16_all_true_with_v128.bitselect" (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 0)) (assert_return (invoke "i8x16_all_true_with_v128.bitselect" (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (i32.const 1)) (assert_return (invoke "i16x8_all_true_with_v128.bitselect" (v128.const i16x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (i32.const 0)) (assert_return (invoke "i16x8_all_true_with_v128.bitselect" (v128.const i16x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA) (v128.const i16x8 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (i32.const 1)) (assert_return (invoke "i32x4_all_true_with_v128.bitselect" (v128.const i32x4 0xAA 0xAA 0xAA 0xAA) (v128.const i32x4 0x55 0x55 0x55 0x55) (v128.const i32x4 0x55 0x55 0x55 0x55)) (i32.const 0)) (assert_return (invoke "i32x4_all_true_with_v128.bitselect" (v128.const i32x4 0xAA 0xAA 0xAA 0xAA) (v128.const i32x4 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAA 0xAA 0xAA 0xAA)) (i32.const 1)) ;; Type check (assert_invalid (module (func (result i32) (v128.any_true (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i8x16.all_true (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (v128.any_true (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i16x8.all_true (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (v128.any_true (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32x4.all_true (i32.const 0)))) "type mismatch") ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result i32) (f32x4.any_true (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result i32) (f32x4.all_true (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result i32) (f64x2.any_true (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result i32) (f64x2.all_true (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; Test operation with empty argument (assert_invalid (module (func $v128.any_true-arg-empty (result v128) (v128.any_true) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.all_true-arg-empty (result v128) (i8x16.all_true) ) ) "type mismatch" ) (assert_invalid (module (func $v128.any_true-arg-empty (result v128) (v128.any_true) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.all_true-arg-empty (result v128) (i16x8.all_true) ) ) "type mismatch" ) (assert_invalid (module (func $v128.any_true-arg-empty (result v128) (v128.any_true) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.all_true-arg-empty (result v128) (i32x4.all_true) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_const.wast ================================================ ;; v128.const normal parameter (e.g. (i8x16, i16x8 i32x4, f32x4)) (module (func (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) drop)) (module (func (v128.const i8x16 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) drop)) (module (func (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) drop)) (module (func (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) drop)) (module (func (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) drop)) (module (func (v128.const i16x8 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000) drop)) (module (func (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) drop)) (module (func (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) drop)) (module (func (v128.const i16x8 65_535 65_535 65_535 65_535 65_535 65_535 65_535 65_535) drop)) (module (func (v128.const i16x8 -32_768 -32_768 -32_768 -32_768 -32_768 -32_768 -32_768 -32_768) drop)) (module (func (v128.const i16x8 0_123_45 0_123_45 0_123_45 0_123_45 0_123_45 0_123_45 0_123_45 0_123_45) drop)) (module (func (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) drop)) (module (func (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) drop)) (module (func (v128.const i32x4 -0x80000000 -0x80000000 -0x80000000 -0x80000000) drop)) (module (func (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) drop)) (module (func (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) drop)) (module (func (v128.const i32x4 0xffff_ffff 0xffff_ffff 0xffff_ffff 0xffff_ffff) drop)) (module (func (v128.const i32x4 -0x8000_0000 -0x8000_0000 -0x8000_0000 -0x8000_0000) drop)) (module (func (v128.const i32x4 4_294_967_295 4_294_967_295 4_294_967_295 4_294_967_295) drop)) (module (func (v128.const i32x4 -2_147_483_648 -2_147_483_648 -2_147_483_648 -2_147_483_648) drop)) (module (func (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) drop)) (module (func (v128.const i32x4 0x0_9acf_fBDF 0x0_9acf_fBDF 0x0_9acf_fBDF 0x0_9acf_fBDF) drop)) (module (func (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) drop)) (module (func (v128.const i64x2 -0x8000000000000000 -0x8000000000000000) drop)) (module (func (v128.const i64x2 18446744073709551615 18446744073709551615) drop)) (module (func (v128.const i64x2 -9223372036854775808 -9223372036854775808) drop)) (module (func (v128.const i64x2 0xffff_ffff_ffff_ffff 0xffff_ffff_ffff_ffff) drop)) (module (func (v128.const i64x2 -0x8000_0000_0000_0000 -0x8000_0000_0000_0000) drop)) (module (func (v128.const i64x2 18_446_744_073_709_551_615 18_446_744_073_709_551_615) drop)) (module (func (v128.const i64x2 -9_223_372_036_854_775_808 -9_223_372_036_854_775_808) drop)) (module (func (v128.const i64x2 0_123_456_789 0_123_456_789) drop)) (module (func (v128.const i64x2 0x0125_6789_ADEF_bcef 0x0125_6789_ADEF_bcef) drop)) (module (func (v128.const f32x4 0x1p127 0x1p127 0x1p127 0x1p127) drop)) (module (func (v128.const f32x4 -0x1p127 -0x1p127 -0x1p127 -0x1p127) drop)) (module (func (v128.const f32x4 1e38 1e38 1e38 1e38) drop)) (module (func (v128.const f32x4 -1e38 -1e38 -1e38 -1e38) drop)) (module (func (v128.const f32x4 340282356779733623858607532500980858880 340282356779733623858607532500980858880 340282356779733623858607532500980858880 340282356779733623858607532500980858880) drop)) (module (func (v128.const f32x4 -340282356779733623858607532500980858880 -340282356779733623858607532500980858880 -340282356779733623858607532500980858880 -340282356779733623858607532500980858880) drop)) (module (func (v128.const f32x4 nan:0x1 nan:0x1 nan:0x1 nan:0x1) drop)) (module (func (v128.const f32x4 nan:0x7f_ffff nan:0x7f_ffff nan:0x7f_ffff nan:0x7f_ffff) drop)) (module (func (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) drop)) (module (func (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) drop)) (module (func (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) drop)) (module (func (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) drop)) (module (func (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) drop)) (module (func (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) drop)) (module (func (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) drop)) (module (func (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) drop)) (module (func (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) drop)) (module (func (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) drop)) (module (func (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) drop)) (module (func (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) drop)) (module (func (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) drop)) (module (func (v128.const f64x2 0x1p1023 0x1p1023) drop)) (module (func (v128.const f64x2 -0x1p1023 -0x1p1023) drop)) (module (func (v128.const f64x2 1e308 1e308) drop)) (module (func (v128.const f64x2 -1e308 -1e308) drop)) (module (func (v128.const f64x2 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (v128.const f64x2 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (v128.const f64x2 nan:0x1 nan:0x1) drop)) (module (func (v128.const f64x2 nan:0xf_ffff_ffff_ffff nan:0xf_ffff_ffff_ffff) drop)) (module (func (v128.const f64x2 0123456789 0123456789) drop)) (module (func (v128.const f64x2 0123456789e019 0123456789e019) drop)) (module (func (v128.const f64x2 0123456789e+019 0123456789e+019) drop)) (module (func (v128.const f64x2 0123456789e-019 0123456789e-019) drop)) (module (func (v128.const f64x2 0123456789. 0123456789.) drop)) (module (func (v128.const f64x2 0123456789.e019 0123456789.e019) drop)) (module (func (v128.const f64x2 0123456789.e+019 0123456789.e+019) drop)) (module (func (v128.const f64x2 0123456789.e-019 0123456789.e-019) drop)) (module (func (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) drop)) (module (func (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) drop)) (module (func (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) drop)) (module (func (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) drop)) (module (func (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) drop)) ;; Non-splat cases (module (func (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) drop)) (module (func (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 255 255 255 255 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) drop)) (module (func (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 255 255 255 255 -0x80 -0x80 -0x80 -0x80 -128 -128 -128 -128) drop)) (module (func (v128.const i16x8 0xFF 0xFF 0xFF 0xFF -0x8000 -0x8000 -0x8000 -0x8000) drop)) (module (func (v128.const i16x8 0xFF 0xFF 65535 65535 -0x8000 -0x8000 -0x8000 -0x8000) drop)) (module (func (v128.const i16x8 0xFF 0xFF 65535 65535 -0x8000 -0x8000 -32768 -32768) drop)) (module (func (v128.const i32x4 0xffffffff 0xffffffff -0x80000000 -0x80000000) drop)) (module (func (v128.const i32x4 0xffffffff 4294967295 -0x80000000 -0x80000000) drop)) (module (func (v128.const i32x4 0xffffffff 4294967295 -0x80000000 -2147483648) drop)) (module (func (v128.const f32x4 0x1p127 0x1p127 -0x1p127 -1e38) drop)) (module (func (v128.const f32x4 0x1p127 340282356779733623858607532500980858880 -1e38 -340282356779733623858607532500980858880) drop)) (module (func (v128.const f32x4 nan -nan inf -inf) drop)) (module (func (v128.const i64x2 0xffffffffffffffff 0x8000000000000000) drop)) (module (func (v128.const i64x2 0xffffffffffffffff -9223372036854775808) drop)) (module (func (v128.const f64x2 0x1p1023 -1e308) drop)) (module (func (v128.const f64x2 nan -inf) drop)) ;; Constant out of range (int literal is too large) (module (memory 1)) (assert_malformed (module quote "(func (v128.const i8x16 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i8x16 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i8x16 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i8x16 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129 -129) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i16x8 0x10000 0x10000 0x10000 0x10000 0x10000 0x10000 0x10000 0x10000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i16x8 -0x8001 -0x8001 -0x8001 -0x8001 -0x8001 -0x8001 -0x8001 -0x8001) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i16x8 65536 65536 65536 65536 65536 65536 65536 65536) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i16x8 -32769 -32769 -32769 -32769 -32769 -32769 -32769 -32769) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i32x4 0x100000000 0x100000000 0x100000000 0x100000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i32x4 -0x80000001 -0x80000001 -0x80000001 -0x80000001) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i32x4 4294967296 4294967296 4294967296 4294967296) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const i32x4 -2147483649 -2147483649 -2147483649 -2147483649) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 0x1p128 0x1p128 0x1p128 0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 -0x1p128 -0x1p128 -0x1p128 -0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 1e39 1e39 1e39 1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 -1e39 -1e39 -1e39 -1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 340282356779733661637539395458142568448 340282356779733661637539395458142568448" " 340282356779733661637539395458142568448 340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 -340282356779733661637539395458142568448 -340282356779733661637539395458142568448" " -340282356779733661637539395458142568448 -340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f32x4 nan:0x80_0000 nan:0x80_0000 nan:0x80_0000 nan:0x80_0000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f64x2 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552" " 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f64x2 -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552" " -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f64x2 nan:0x10_0000_0000_0000 nan:0x10_0000_0000_0000) drop)") "constant out of range" ) ;; More malformed v128.const forms (assert_malformed (module quote "(func (v128.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (v128.const 0 0 0 0) drop)") "unexpected token" ) (assert_malformed (module quote "(func (v128.const i8x16) drop)") "wrong number of lane literals" ) (assert_malformed (module quote "(func (v128.const i8x16 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i8x16 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i8x16 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i16x8) drop)") "wrong number of lane literals" ) (assert_malformed (module quote "(func (v128.const i16x8 0x 0x 0x 0x 0x 0x 0x 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i16x8 1x 1x 1x 1x 1x 1x 1x 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i16x8 0xg 0xg 0xg 0xg 0xg 0xg 0xg 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i32x4) drop)") "wrong number of lane literals" ) (assert_malformed (module quote "(func (v128.const i32x4 0x 0x 0x 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i32x4 1x 1x 1x 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i32x4 0xg 0xg 0xg 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const i64x2) drop)") "wrong number of lane literals" ) (assert_malformed (module quote "(func (v128.const i64x2 0x 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 1x 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0xg 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4) drop)") "wrong number of lane literals" ) (assert_malformed (module quote "(func (v128.const f32x4 .0 .0 .0 .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 .0e0 .0e0 .0e0 .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0e 0e 0e 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0e+ 0e+ 0e+ 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0.0e 0.0e 0.0e 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0.0e- 0.0e- 0.0e- 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x 0x 0x 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 1x 1x 1x 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0xg 0xg 0xg 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x. 0x. 0x. 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0.g 0x0.g 0x0.g 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0p 0x0p 0x0p 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0p+ 0x0p+ 0x0p+ 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0p- 0x0p- 0x0p- 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0.0p 0x0.0p 0x0.0p 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0.0p+ 0x0.0p+ 0x0.0p+ 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0.0p- 0x0.0p- 0x0.0p- 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 0x0pA 0x0pA 0x0pA 0x0pA) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 nan:1 nan:1 nan:1 nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f32x4 nan:0x0 nan:0x0 nan:0x0 nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (v128.const f64x2) drop)") "wrong number of lane literals" ) (assert_malformed (module quote "(func (v128.const f64x2 .0 .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 .0e0 .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0e 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0e+ 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0.0e+ 0.0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0.0e- 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 1x 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0xg 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x. 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0.g 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0p 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0p+ 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0p- 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0.0p 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0.0p+ 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0.0p- 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 0x0pA 0x0pA) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 nan:1 nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (v128.const f64x2 nan:0x0 nan:0x0) drop)") "constant out of range" ) ;; too little arguments (assert_malformed (module quote "(func (v128.const i32x4 0x10000000000000000 0x10000000000000000) drop)") "wrong number of lane literals" ) ;; too many arguments (assert_malformed (module quote "(func (v128.const i32x4 0x1 0x1 0x1 0x1 0x1) drop)") "wrong number of lane literals" ) ;; Rounding behaviour ;; f32x4, small exponent (module (func (export "f") (result v128) (v128.const f32x4 +0x1.00000100000000000p-50 +0x1.00000100000000000p-50 +0x1.00000100000000000p-50 +0x1.00000100000000000p-50))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000000p-50 +0x1.000000p-50 +0x1.000000p-50 +0x1.000000p-50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x1.00000100000000000p-50 -0x1.00000100000000000p-50 -0x1.00000100000000000p-50 -0x1.00000100000000000p-50))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000000p-50 -0x1.000000p-50 -0x1.000000p-50 -0x1.000000p-50)) (module (func (export "f") (result v128) (v128.const f32x4 +0x1.00000500000000001p-50 +0x1.00000500000000001p-50 +0x1.00000500000000001p-50 +0x1.00000500000000001p-50))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000006p-50 +0x1.000006p-50 +0x1.000006p-50 +0x1.000006p-50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x1.00000500000000001p-50 -0x1.00000500000000001p-50 -0x1.00000500000000001p-50 -0x1.00000500000000001p-50))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000006p-50 -0x1.000006p-50 -0x1.000006p-50 -0x1.000006p-50)) (module (func (export "f") (result v128) (v128.const f32x4 +0x4000.004000000p-64 +0x4000.004000000p-64 +0x4000.004000000p-64 +0x4000.004000000p-64))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000000p-50 +0x1.000000p-50 +0x1.000000p-50 +0x1.000000p-50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x4000.004000000p-64 -0x4000.004000000p-64 -0x4000.004000000p-64 -0x4000.004000000p-64))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000000p-50 -0x1.000000p-50 -0x1.000000p-50 -0x1.000000p-50)) (module (func (export "f") (result v128) (v128.const f32x4 +0x4000.014000001p-64 +0x4000.014000001p-64 +0x4000.014000001p-64 +0x4000.014000001p-64))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000006p-50 +0x1.000006p-50 +0x1.000006p-50 +0x1.000006p-50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x4000.014000001p-64 -0x4000.014000001p-64 -0x4000.014000001p-64 -0x4000.014000001p-64))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000006p-50 -0x1.000006p-50 -0x1.000006p-50 -0x1.000006p-50)) (module (func (export "f") (result v128) (v128.const f32x4 +8.8817847263968443573e-16 +8.8817847263968443573e-16 +8.8817847263968443573e-16 +8.8817847263968443573e-16))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000000p-50 +0x1.000000p-50 +0x1.000000p-50 +0x1.000000p-50)) (module (func (export "f") (result v128) (v128.const f32x4 -8.8817847263968443573e-16 -8.8817847263968443573e-16 -8.8817847263968443573e-16 -8.8817847263968443573e-16))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000000p-50 -0x1.000000p-50 -0x1.000000p-50 -0x1.000000p-50)) (module (func (export "f") (result v128) (v128.const f32x4 +8.8817857851880284253e-16 +8.8817857851880284253e-16 +8.8817857851880284253e-16 +8.8817857851880284253e-16))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000004p-50 +0x1.000004p-50 +0x1.000004p-50 +0x1.000004p-50)) (module (func (export "f") (result v128) (v128.const f32x4 -8.8817857851880284253e-16 -8.8817857851880284253e-16 -8.8817857851880284253e-16 -8.8817857851880284253e-16))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000004p-50 -0x1.000004p-50 -0x1.000004p-50 -0x1.000004p-50)) ;; f32x4, large exponent (module (func (export "f") (result v128) (v128.const f32x4 +0x1.00000100000000000p+50 +0x1.00000100000000000p+50 +0x1.00000100000000000p+50 +0x1.00000100000000000p+50))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000000p+50 +0x1.000000p+50 +0x1.000000p+50 +0x1.000000p+50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x1.00000100000000000p+50 -0x1.00000100000000000p+50 -0x1.00000100000000000p+50 -0x1.00000100000000000p+50))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000000p+50 -0x1.000000p+50 -0x1.000000p+50 -0x1.000000p+50)) (module (func (export "f") (result v128) (v128.const f32x4 +0x1.00000500000000001p+50 +0x1.00000500000000001p+50 +0x1.00000500000000001p+50 +0x1.00000500000000001p+50))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000006p+50 +0x1.000006p+50 +0x1.000006p+50 +0x1.000006p+50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x1.00000500000000001p+50 -0x1.00000500000000001p+50 -0x1.00000500000000001p+50 -0x1.00000500000000001p+50))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000006p+50 -0x1.000006p+50 -0x1.000006p+50 -0x1.000006p+50)) (module (func (export "f") (result v128) (v128.const f32x4 +0x4000004000000 +0x4000004000000 +0x4000004000000 +0x4000004000000))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000000p+50 +0x1.000000p+50 +0x1.000000p+50 +0x1.000000p+50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x4000004000000 -0x4000004000000 -0x4000004000000 -0x4000004000000))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000000p+50 -0x1.000000p+50 -0x1.000000p+50 -0x1.000000p+50)) (module (func (export "f") (result v128) (v128.const f32x4 +0x400000c000000 +0x400000c000000 +0x400000c000000 +0x400000c000000))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000004p+50 +0x1.000004p+50 +0x1.000004p+50 +0x1.000004p+50)) (module (func (export "f") (result v128) (v128.const f32x4 -0x400000c000000 -0x400000c000000 -0x400000c000000 -0x400000c000000))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000004p+50 -0x1.000004p+50 -0x1.000004p+50 -0x1.000004p+50)) (module (func (export "f") (result v128) (v128.const f32x4 +1125899973951488 +1125899973951488 +1125899973951488 +1125899973951488))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000000p+50 +0x1.000000p+50 +0x1.000000p+50 +0x1.000000p+50)) (module (func (export "f") (result v128) (v128.const f32x4 -1125899973951488 -1125899973951488 -1125899973951488 -1125899973951488))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000000p+50 -0x1.000000p+50 -0x1.000000p+50 -0x1.000000p+50)) (module (func (export "f") (result v128) (v128.const f32x4 +1125900108169216 +1125900108169216 +1125900108169216 +1125900108169216))) (assert_return (invoke "f") (v128.const f32x4 +0x1.000004p+50 +0x1.000004p+50 +0x1.000004p+50 +0x1.000004p+50)) (module (func (export "f") (result v128) (v128.const f32x4 -1125900108169216 -1125900108169216 -1125900108169216 -1125900108169216))) (assert_return (invoke "f") (v128.const f32x4 -0x1.000004p+50 -0x1.000004p+50 -0x1.000004p+50 -0x1.000004p+50)) ;; f32x4, subnormal (module (func (export "f") (result v128) (v128.const f32x4 +0x0.00000100000000000p-126 +0x0.00000100000000000p-126 +0x0.00000100000000000p-126 +0x0.00000100000000000p-126))) (assert_return (invoke "f") (v128.const f32x4 +0x0.000000p-126 +0x0.000000p-126 +0x0.000000p-126 +0x0.000000p-126)) (module (func (export "f") (result v128) (v128.const f32x4 -0x0.00000100000000000p-126 -0x0.00000100000000000p-126 -0x0.00000100000000000p-126 -0x0.00000100000000000p-126))) (assert_return (invoke "f") (v128.const f32x4 -0x0.000000p-126 -0x0.000000p-126 -0x0.000000p-126 -0x0.000000p-126)) (module (func (export "f") (result v128) (v128.const f32x4 +0x0.00000500000000001p-126 +0x0.00000500000000001p-126 +0x0.00000500000000001p-126 +0x0.00000500000000001p-126))) (assert_return (invoke "f") (v128.const f32x4 +0x0.000006p-126 +0x0.000006p-126 +0x0.000006p-126 +0x0.000006p-126)) (module (func (export "f") (result v128) (v128.const f32x4 -0x0.00000500000000001p-126 -0x0.00000500000000001p-126 -0x0.00000500000000001p-126 -0x0.00000500000000001p-126))) (assert_return (invoke "f") (v128.const f32x4 -0x0.000006p-126 -0x0.000006p-126 -0x0.000006p-126 -0x0.000006p-126)) ;; f32x4, round down at limit to infinity (module (func (export "f") (result v128) (v128.const f32x4 +0x1.fffffe8p127 +0x1.fffffe8p127 +0x1.fffffe8p127 +0x1.fffffe8p127))) (assert_return (invoke "f") (v128.const f32x4 +0x1.fffffep127 +0x1.fffffep127 +0x1.fffffep127 +0x1.fffffep127)) (module (func (export "f") (result v128) (v128.const f32x4 -0x1.fffffe8p127 -0x1.fffffe8p127 -0x1.fffffe8p127 -0x1.fffffe8p127))) (assert_return (invoke "f") (v128.const f32x4 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127)) (module (func (export "f") (result v128) (v128.const f32x4 +0x1.fffffefffffffffffp127 +0x1.fffffefffffffffffp127 +0x1.fffffefffffffffffp127 +0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (v128.const f32x4 +0x1.fffffep127 +0x1.fffffep127 +0x1.fffffep127 +0x1.fffffep127)) (module (func (export "f") (result v128) (v128.const f32x4 -0x1.fffffefffffffffffp127 -0x1.fffffefffffffffffp127 -0x1.fffffefffffffffffp127 -0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (v128.const f32x4 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127)) ;; f64x2, small exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+999)) ;; f64, large exponent (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000080000000000p+600 +0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000000p+600 +0x1.0000000000000p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000080000000000p+600 -0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000000p+600 -0x1.0000000000000p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000080000000001p+600 +0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+600 +0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000080000000001p+600 -0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+600 -0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.0000000000000fffffffffffp+600 +0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+600 +0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.0000000000000fffffffffffp+600 -0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+600 -0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000100000000000p+600 +0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+600 +0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000100000000000p+600 -0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+600 -0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000100000000001p+600 +0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+600 +0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000100000000001p+600 -0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+600 -0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.00000000000017ffffffffffp+600 +0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+600 +0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.00000000000017ffffffffffp+600 -0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+600 -0x1.0000000000001p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000180000000000p+600 +0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000180000000000p+600 -0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000180000000001p+600 +0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000180000000001p+600 -0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.0000000000001fffffffffffp+600 +0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.0000000000001fffffffffffp+600 -0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000200000000000p+600 +0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000200000000000p+600 -0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000200000000001p+600 +0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000200000000001p+600 -0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.00000000000027ffffffffffp+600 +0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.00000000000027ffffffffffp+600 -0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000280000000000p+600 +0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+600 +0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000280000000000p+600 -0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+600 -0x1.0000000000002p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000280000000001p+600 +0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000003p+600 +0x1.0000000000003p+600)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000280000000001p+600 -0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000003p+600 -0x1.0000000000003p+600)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000100000000000 +0x2000000000000100000000000))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000000p+97 +0x1.0000000000000p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000100000000000 -0x2000000000000100000000000))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000000p+97 -0x1.0000000000000p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000100000000001 +0x2000000000000100000000001))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+97 +0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000100000000001 -0x2000000000000100000000001))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+97 -0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x20000000000001fffffffffff +0x20000000000001fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+97 +0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x20000000000001fffffffffff -0x20000000000001fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+97 -0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000200000000000 +0x2000000000000200000000000))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+97 +0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000200000000000 -0x2000000000000200000000000))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+97 -0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000200000000001 +0x2000000000000200000000001))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+97 +0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000200000000001 -0x2000000000000200000000001))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+97 -0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x20000000000002fffffffffff +0x20000000000002fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+97 +0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x20000000000002fffffffffff -0x20000000000002fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+97 -0x1.0000000000001p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000300000000000 +0x2000000000000300000000000))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000300000000000 -0x2000000000000300000000000))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000300000000001 +0x2000000000000300000000001))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000300000000001 -0x2000000000000300000000001))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x20000000000003fffffffffff +0x20000000000003fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x20000000000003fffffffffff -0x20000000000003fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000400000000000 +0x2000000000000400000000000))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000400000000000 -0x2000000000000400000000000))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000400000000001 +0x2000000000000400000000001))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000400000000001 -0x2000000000000400000000001))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x20000000000004fffffffffff +0x20000000000004fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x20000000000004fffffffffff -0x20000000000004fffffffffff))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000500000000000 +0x2000000000000500000000000))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+97 +0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000500000000000 -0x2000000000000500000000000))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+97 -0x1.0000000000002p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +0x2000000000000500000000001 +0x2000000000000500000000001))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000003p+97 +0x1.0000000000003p+97)) (module (func (export "f") (result v128) (v128.const f64x2 -0x2000000000000500000000001 -0x2000000000000500000000001))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000003p+97 -0x1.0000000000003p+97)) (module (func (export "f") (result v128) (v128.const f64x2 +1152921504606847104 +1152921504606847104))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000000p+60 +0x1.0000000000000p+60)) (module (func (export "f") (result v128) (v128.const f64x2 -1152921504606847104 -1152921504606847104))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000000p+60 -0x1.0000000000000p+60)) (module (func (export "f") (result v128) (v128.const f64x2 +1152921504606847105 +1152921504606847105))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+60 +0x1.0000000000001p+60)) (module (func (export "f") (result v128) (v128.const f64x2 -1152921504606847105 -1152921504606847105))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+60 -0x1.0000000000001p+60)) (module (func (export "f") (result v128) (v128.const f64x2 +1152921504606847359 +1152921504606847359))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000001p+60 +0x1.0000000000001p+60)) (module (func (export "f") (result v128) (v128.const f64x2 -1152921504606847359 -1152921504606847359))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000001p+60 -0x1.0000000000001p+60)) (module (func (export "f") (result v128) (v128.const f64x2 +1152921504606847360 +1152921504606847360))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000002p+60 +0x1.0000000000002p+60)) (module (func (export "f") (result v128) (v128.const f64x2 -1152921504606847360 -1152921504606847360))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000002p+60 -0x1.0000000000002p+60)) ;; f64x2, subnormal (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000080000000000p-1022 +0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000000p-1022 +0x0.0000000000000p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000080000000000p-1022 -0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000000p-1022 -0x0.0000000000000p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000080000000001p-1022 +0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000001p-1022 +0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000080000000001p-1022 -0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.0000000000000fffffffffffp-1022 +0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000001p-1022 +0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.0000000000000fffffffffffp-1022 -0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000100000000000p-1022 +0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000001p-1022 +0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000100000000000p-1022 -0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000100000000001p-1022 +0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000001p-1022 +0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000100000000001p-1022 -0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.00000000000017ffffffffffp-1022 +0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000001p-1022 +0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.00000000000017ffffffffffp-1022 -0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000180000000000p-1022 +0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000180000000000p-1022 -0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000180000000001p-1022 +0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000180000000001p-1022 -0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.0000000000001fffffffffffp-1022 +0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.0000000000001fffffffffffp-1022 -0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000200000000000p-1022 +0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000200000000000p-1022 -0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000200000000001p-1022 +0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000200000000001p-1022 -0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.00000000000027ffffffffffp-1022 +0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.00000000000027ffffffffffp-1022 -0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x0.000000000000280000000000p-1022 +0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x0.0000000000002p-1022 +0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x0.000000000000280000000000p-1022 -0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.000000000000280000000001p-1022 +0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 +0x1.0000000000003p-1022 +0x1.0000000000003p-1022)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.000000000000280000000001p-1022 -0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (v128.const f64x2 -0x1.0000000000003p-1022 -0x1.0000000000003p-1022)) ;; f64x2, round down at limit to infinity (module (func (export "f") (result v128) (v128.const f64x2 +0x1.fffffffffffff4p1023 +0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (v128.const f64x2 +0x1.fffffffffffffp1023 +0x1.fffffffffffffp1023)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.fffffffffffff4p1023 -0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (v128.const f64x2 -0x1.fffffffffffffp1023 -0x1.fffffffffffffp1023)) (module (func (export "f") (result v128) (v128.const f64x2 +0x1.fffffffffffff7ffffffp1023 +0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (v128.const f64x2 +0x1.fffffffffffffp1023 +0x1.fffffffffffffp1023)) (module (func (export "f") (result v128) (v128.const f64x2 -0x1.fffffffffffff7ffffffp1023 -0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (v128.const f64x2 -0x1.fffffffffffffp1023 -0x1.fffffffffffffp1023)) ;; As parameters of control constructs (module (memory 1) (func (export "as-br-retval") (result v128) (block (result v128) (br 0 (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c))) ) (func (export "as-br_if-retval") (result v128) (block (result v128) (br_if 0 (v128.const i32x4 0 1 2 3) (i32.const 1)) ) ) (func (export "as-return-retval") (result v128) (return (v128.const i32x4 0 1 2 3)) ) (func (export "as-if-then-retval") (result v128) (if (result v128) (i32.const 1) (then (v128.const i32x4 0 1 2 3)) (else (v128.const i32x4 3 2 1 0)) ) ) (func (export "as-if-else-retval") (result v128) (if (result v128) (i32.const 0) (then (v128.const i32x4 0 1 2 3)) (else (v128.const i32x4 3 2 1 0)) ) ) (func $f (param v128 v128 v128) (result v128) (v128.const i32x4 0 1 2 3)) (func (export "as-call-param") (result v128) (call $f (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3)) ) (func (export "as-block-retval") (result v128) (block (result v128) (v128.const i32x4 0 1 2 3)) ) (func (export "as-loop-retval") (result v128) (loop (result v128) (v128.const i32x4 0 1 2 3)) ) (func (export "as-drop-operand") (drop (v128.const i32x4 0 1 2 3)) ) (func (export "as-br-retval2") (result v128) (block (result v128) (br 0 (v128.const i64x2 0x0302010007060504 0x0b0a09080f0e0d0c))) ) (func (export "as-br_if-retval2") (result v128) (block (result v128) (br_if 0 (v128.const i64x2 0 1) (i32.const 1)) ) ) (func (export "as-return-retval2") (result v128) (return (v128.const i64x2 0 1)) ) (func (export "as-if-then-retval2") (result v128) (if (result v128) (i32.const 1) (then (v128.const i64x2 0 1)) (else (v128.const i64x2 1 0)) ) ) (func (export "as-if-else-retval2") (result v128) (if (result v128) (i32.const 0) (then (v128.const i64x2 0 1)) (else (v128.const i64x2 1 0)) ) ) (func $f2 (param v128 v128 v128) (result v128) (v128.const i64x2 0 1)) (func (export "as-call-param2") (result v128) (call $f2 (v128.const i64x2 0 1) (v128.const i64x2 0 1) (v128.const i64x2 0 1)) ) (type $sig (func (param v128 v128 v128) (result v128))) (table funcref (elem $f $f2)) (func (export "as-call_indirect-param") (result v128) (call_indirect (type $sig) (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3) (i32.const 0) ) ) (func (export "as-call_indirect-param2") (result v128) (call_indirect (type $sig) (v128.const i64x2 0 1) (v128.const i64x2 0 1) (v128.const i64x2 0 1) (i32.const 1) ) ) (func (export "as-block-retval2") (result v128) (block (result v128) (v128.const i64x2 0 1)) ) (func (export "as-loop-retval2") (result v128) (loop (result v128) (v128.const i64x2 0 1)) ) (func (export "as-drop-operand2") (drop (v128.const i64x2 0 1)) ) ) (assert_return (invoke "as-br-retval") (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c)) (assert_return (invoke "as-br_if-retval") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-return-retval") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-if-then-retval") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-if-else-retval") (v128.const i32x4 3 2 1 0)) (assert_return (invoke "as-call-param") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-call_indirect-param") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-block-retval") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-loop-retval") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-retval2") (v128.const i64x2 0x0302010007060504 0x0b0a09080f0e0d0c)) (assert_return (invoke "as-br_if-retval2") (v128.const i64x2 0 1)) (assert_return (invoke "as-return-retval2") (v128.const i64x2 0 1)) (assert_return (invoke "as-if-then-retval2") (v128.const i64x2 0 1)) (assert_return (invoke "as-if-else-retval2") (v128.const i64x2 1 0)) (assert_return (invoke "as-call-param2") (v128.const i64x2 0 1)) (assert_return (invoke "as-call_indirect-param2") (v128.const i64x2 0 1)) (assert_return (invoke "as-block-retval2") (v128.const i64x2 0 1)) (assert_return (invoke "as-loop-retval2") (v128.const i64x2 0 1)) (assert_return (invoke "as-drop-operand2")) ;; v128 locals (module (memory 1) (func (export "as-local.set/get-value_0_0") (param $0 v128) (result v128) (local v128 v128 v128 v128) (local.set 0 (local.get $0)) (local.get 0) ) (func (export "as-local.set/get-value_0_1") (param $0 v128) (result v128) (local v128 v128 v128 v128) (local.set 0 (local.get $0)) (local.set 1 (local.get 0)) (local.set 2 (local.get 1)) (local.set 3 (local.get 2)) (local.get 0) ) (func (export "as-local.set/get-value_3_0") (param $0 v128) (result v128) (local v128 v128 v128 v128) (local.set 0 (local.get $0)) (local.set 1 (local.get 0)) (local.set 2 (local.get 1)) (local.set 3 (local.get 2)) (local.get 3) ) (func (export "as-local.tee-value") (result v128) (local v128) (local.tee 0 (v128.const i32x4 0 1 2 3)) ) ) (assert_return (invoke "as-local.set/get-value_0_0" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "as-local.set/get-value_0_1" (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "as-local.set/get-value_3_0" (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "as-local.tee-value") (v128.const i32x4 0 1 2 3)) ;; v128 globals (module (memory 1) (global $g0 (mut v128) (v128.const i32x4 0 1 2 3)) (global $g1 (mut v128) (v128.const i32x4 4 5 6 7)) (global $g2 (mut v128) (v128.const i32x4 8 9 10 11)) (global $g3 (mut v128) (v128.const i32x4 12 13 14 15)) (global $g4 (mut v128) (v128.const i32x4 16 17 18 19)) (func $set_g0 (export "as-global.set_value_$g0") (param $0 v128) (global.set $g0 (local.get $0)) ) (func $set_g1_g2 (export "as-global.set_value_$g1_$g2") (param $0 v128) (param $1 v128) (global.set $g1 (local.get $0)) (global.set $g2 (local.get $1)) ) (func $set_g0_g1_g2_g3 (export "as-global.set_value_$g0_$g1_$g2_$g3") (param $0 v128) (param $1 v128) (param $2 v128) (param $3 v128) (call $set_g0 (local.get $0)) (call $set_g1_g2 (local.get $1) (local.get $2)) (global.set $g3 (local.get $3)) ) (func (export "global.get_g0") (result v128) (global.get $g0) ) (func (export "global.get_g1") (result v128) (global.get $g1) ) (func (export "global.get_g2") (result v128) (global.get $g2) ) (func (export "global.get_g3") (result v128) (global.get $g3) ) ) (assert_return (invoke "as-global.set_value_$g0_$g1_$g2_$g3" (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2) (v128.const i32x4 3 3 3 3) (v128.const i32x4 4 4 4 4))) (assert_return (invoke "global.get_g0") (v128.const i32x4 1 1 1 1)) (assert_return (invoke "global.get_g1") (v128.const i32x4 2 2 2 2)) (assert_return (invoke "global.get_g2") (v128.const i32x4 3 3 3 3)) (assert_return (invoke "global.get_g3") (v128.const i32x4 4 4 4 4)) ;; Test integer literal parsing. (module (func (export "i32x4.test") (result v128) (return (v128.const i32x4 0x0bAdD00D 0x0bAdD00D 0x0bAdD00D 0x0bAdD00D))) (func (export "i32x4.smax") (result v128) (return (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff))) (func (export "i32x4.neg_smax") (result v128) (return (v128.const i32x4 -0x7fffffff -0x7fffffff -0x7fffffff -0x7fffffff))) (func (export "i32x4.inc_smin") (result v128) (return (i32x4.add (v128.const i32x4 -0x80000000 -0x80000000 -0x80000000 -0x80000000) (v128.const i32x4 1 1 1 1)))) (func (export "i32x4.neg_zero") (result v128) (return (v128.const i32x4 -0x0 -0x0 -0x0 -0x0))) (func (export "i32x4.not_octal") (result v128) (return (v128.const i32x4 010 010 010 010))) (func (export "i32x4.plus_sign") (result v128) (return (v128.const i32x4 +42 +42 +42 +42))) (func (export "i32x4-dec-sep1") (result v128) (v128.const i32x4 1_000_000 1_000_000 1_000_000 1_000_000)) (func (export "i32x4-dec-sep2") (result v128) (v128.const i32x4 1_0_0_0 1_0_0_0 1_0_0_0 1_0_0_0)) (func (export "i32x4-hex-sep1") (result v128) (v128.const i32x4 0xa_0f_00_99 0xa_0f_00_99 0xa_0f_00_99 0xa_0f_00_99)) (func (export "i32x4-hex-sep2") (result v128) (v128.const i32x4 0x1_a_A_0_f 0x1_a_A_0_f 0x1_a_A_0_f 0x1_a_A_0_f)) (func (export "i64x2.test") (result v128) (return (v128.const i64x2 0x0bAdD00D0bAdD00D 0x0bAdD00D0bAdD00D))) (func (export "i64x2.smax") (result v128) (return (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff))) (func (export "i64x2.neg_smax") (result v128) (return (v128.const i64x2 -0x7fffffffffffffff -0x7fffffffffffffff))) (func (export "i64x2.inc_smin") (result v128) (return (i64x2.add (v128.const i64x2 -0x8000000000000000 -0x8000000000000000) (v128.const i64x2 1 1)))) (func (export "i64x2.neg_zero") (result v128) (return (v128.const i64x2 -0x0 -0x0))) (func (export "i64x2.not_octal") (result v128) (return (v128.const i64x2 010010 010010))) (func (export "i64x2.plus_sign") (result v128) (return (v128.const i64x2 +42 +42))) (func (export "i64x2-dec-sep1") (result v128) (v128.const i64x2 10_000_000_000_000 10_000_000_000_000)) (func (export "i64x2-dec-sep2") (result v128) (v128.const i64x2 1_0_0_0_0_0_0_0 1_0_0_0_0_0_0_0)) (func (export "i64x2-hex-sep1") (result v128) (v128.const i64x2 0xa_0f_00_99_0a_0f_00_99 0xa_0f_00_99_0a_0f_00_99)) (func (export "i64x2-hex-sep2") (result v128) (v128.const i64x2 0x1_a_A_0_f_1_a_A_0_f 0x1_a_A_0_f_1_a_A_0_f)) ) (assert_return (invoke "i32x4.test") (v128.const i32x4 195940365 195940365 195940365 195940365)) (assert_return (invoke "i32x4.smax") (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.neg_smax") (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.inc_smin") (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.neg_zero") (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.not_octal") (v128.const i32x4 10 10 10 10)) (assert_return (invoke "i32x4.plus_sign") (v128.const i32x4 42 42 42 42)) (assert_return (invoke "i32x4-dec-sep1") (v128.const i32x4 1000000 1000000 1000000 1000000)) (assert_return (invoke "i32x4-dec-sep2") (v128.const i32x4 1000 1000 1000 1000)) (assert_return (invoke "i32x4-hex-sep1") (v128.const i32x4 0xa0f0099 0xa0f0099 0xa0f0099 0xa0f0099)) (assert_return (invoke "i32x4-hex-sep2") (v128.const i32x4 0x1aa0f 0x1aa0f 0x1aa0f 0x1aa0f)) (assert_return (invoke "i64x2.test") (v128.const i64x2 841557459837243405 841557459837243405)) (assert_return (invoke "i64x2.smax") (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.neg_smax") (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.inc_smin") (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.neg_zero") (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.not_octal") (v128.const i64x2 10010 10010)) (assert_return (invoke "i64x2.plus_sign") (v128.const i64x2 42 42)) (assert_return (invoke "i64x2-dec-sep1") (v128.const i64x2 10000000000000 10000000000000)) (assert_return (invoke "i64x2-dec-sep2") (v128.const i64x2 10000000 10000000)) (assert_return (invoke "i64x2-hex-sep1") (v128.const i64x2 0xa0f00990a0f0099 0xa0f00990a0f0099)) (assert_return (invoke "i64x2-hex-sep2") (v128.const i64x2 0x1aa0f1aa0f 0x1aa0f1aa0f)) (assert_malformed (module quote "(global v128 (v128.const i32x4 _100 _100 _100 _100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 +_100 +_100 +_100 +_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 -_100 -_100 -_100 -_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 99_ 99_ 99_ 99_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 1__000 1__000 1__000 1__000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 _0x100 _0x100 _0x100 _0x100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 0_x100 0_x100 0_x100 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 0x_100 0x_100 0x_100 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 0x00_ 0x00_ 0x00_ 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i32x4 0xff__ffff 0xff__ffff 0xff__ffff 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 _100_100 _100_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 +_100_100 +_100_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 -_100_100 -_100_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 99_99_ 99_99_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 1__000_000 1__000_000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 _0x100000 _0x100000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 0_x100000 0_x100000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 0x_100000 0x_100000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 0x00_ 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const i64x2 0xff__ffff_ffff_ffff 0xff__ffff_ffff_ffff))") "unknown operator" ) ;; Test floating-point literal parsing. (module (func (export "f32-dec-sep1") (result v128) (v128.const f32x4 1_000_000 1_000_000 1_000_000 1_000_000)) (func (export "f32-dec-sep2") (result v128) (v128.const f32x4 1_0_0_0 1_0_0_0 1_0_0_0 1_0_0_0)) (func (export "f32-dec-sep3") (result v128) (v128.const f32x4 100_3.141_592 100_3.141_592 100_3.141_592 100_3.141_592)) (func (export "f32-dec-sep4") (result v128) (v128.const f32x4 99e+1_3 99e+1_3 99e+1_3 99e+1_3)) (func (export "f32-dec-sep5") (result v128) (v128.const f32x4 122_000.11_3_54E0_2_3 122_000.11_3_54E0_2_3 122_000.11_3_54E0_2_3 122_000.11_3_54E0_2_3)) (func (export "f32-hex-sep1") (result v128) (v128.const f32x4 0xa_0f_00_99 0xa_0f_00_99 0xa_0f_00_99 0xa_0f_00_99)) (func (export "f32-hex-sep2") (result v128) (v128.const f32x4 0x1_a_A_0_f 0x1_a_A_0_f 0x1_a_A_0_f 0x1_a_A_0_f)) (func (export "f32-hex-sep3") (result v128) (v128.const f32x4 0xa0_ff.f141_a59a 0xa0_ff.f141_a59a 0xa0_ff.f141_a59a 0xa0_ff.f141_a59a)) (func (export "f32-hex-sep4") (result v128) (v128.const f32x4 0xf0P+1_3 0xf0P+1_3 0xf0P+1_3 0xf0P+1_3)) (func (export "f32-hex-sep5") (result v128) (v128.const f32x4 0x2a_f00a.1f_3_eep2_3 0x2a_f00a.1f_3_eep2_3 0x2a_f00a.1f_3_eep2_3 0x2a_f00a.1f_3_eep2_3)) (func (export "f64-dec-sep1") (result v128) (v128.const f64x2 1_000_000 1_000_000)) (func (export "f64-dec-sep2") (result v128) (v128.const f64x2 1_0_0_0 1_0_0_0)) (func (export "f64-dec-sep3") (result v128) (v128.const f64x2 100_3.141_592 100_3.141_592)) (func (export "f64-dec-sep4") (result v128) (v128.const f64x2 99e+1_3 99e+1_3)) (func (export "f64-dec-sep5") (result v128) (v128.const f64x2 122_000.11_3_54E0_2_3 122_000.11_3_54E0_2_3)) (func (export "f64-hex-sep1") (result v128) (v128.const f64x2 0xa_0f_00_99 0xa_0f_00_99)) (func (export "f64-hex-sep2") (result v128) (v128.const f64x2 0x1_a_A_0_f 0x1_a_A_0_f)) (func (export "f64-hex-sep3") (result v128) (v128.const f64x2 0xa0_ff.f141_a59a 0xa0_ff.f141_a59a)) (func (export "f64-hex-sep4") (result v128) (v128.const f64x2 0xf0P+1_3 0xf0P+1_3)) (func (export "f64-hex-sep5") (result v128) (v128.const f64x2 0x2a_f00a.1f_3_eep2_3 0x2a_f00a.1f_3_eep2_3)) ) (assert_return (invoke "f32-dec-sep1") (v128.const f32x4 1000000 1000000 1000000 1000000)) (assert_return (invoke "f32-dec-sep2") (v128.const f32x4 1000 1000 1000 1000)) (assert_return (invoke "f32-dec-sep3") (v128.const f32x4 1003.141592 1003.141592 1003.141592 1003.141592)) (assert_return (invoke "f32-dec-sep4") (v128.const f32x4 99e+13 99e+13 99e+13 99e+13)) (assert_return (invoke "f32-dec-sep5") (v128.const f32x4 122000.11354e23 122000.11354e23 122000.11354e23 122000.11354e23)) (assert_return (invoke "f32-hex-sep1") (v128.const f32x4 0xa0f0099 0xa0f0099 0xa0f0099 0xa0f0099)) (assert_return (invoke "f32-hex-sep2") (v128.const f32x4 0x1aa0f 0x1aa0f 0x1aa0f 0x1aa0f)) (assert_return (invoke "f32-hex-sep3") (v128.const f32x4 0xa0ff.f141a59a 0xa0ff.f141a59a 0xa0ff.f141a59a 0xa0ff.f141a59a)) (assert_return (invoke "f32-hex-sep4") (v128.const f32x4 0xf0P+13 0xf0P+13 0xf0P+13 0xf0P+13)) (assert_return (invoke "f32-hex-sep5") (v128.const f32x4 0x2af00a.1f3eep23 0x2af00a.1f3eep23 0x2af00a.1f3eep23 0x2af00a.1f3eep23)) (assert_return (invoke "f64-dec-sep1") (v128.const f64x2 1000000 1000000)) (assert_return (invoke "f64-dec-sep2") (v128.const f64x2 1000 1000)) (assert_return (invoke "f64-dec-sep3") (v128.const f64x2 1003.141592 1003.141592)) (assert_return (invoke "f64-dec-sep4") (v128.const f64x2 99e+13 99e+13)) (assert_return (invoke "f64-dec-sep5") (v128.const f64x2 122000.11354e23 122000.11354e23)) (assert_return (invoke "f64-hex-sep1") (v128.const f64x2 0xa0f0099 0xa0f0099)) (assert_return (invoke "f64-hex-sep2") (v128.const f64x2 0x1aa0f 0x1aa0f)) (assert_return (invoke "f64-hex-sep3") (v128.const f64x2 0xa0ff.f141a59a 0xa0ff.f141a59a)) (assert_return (invoke "f64-hex-sep4") (v128.const f64x2 0xf0P+13 0xf0P+13)) (assert_return (invoke "f64-hex-sep5") (v128.const f64x2 0x2af00a.1f3eep23 0x2af00a.1f3eep23)) (assert_malformed (module quote "(global v128 (v128.const f32x4 _100 _100 _100 _100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 +_100 +_100 +_100 +_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 -_100 -_100 -_100 -_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 99_ 99_ 99_ 99_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1__000 1__000 1__000 1__000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 _1.0 _1.0 _1.0 _1.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1.0_ 1.0_ 1.0_ 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1_.0 1_.0 1_.0 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1._0 1._0 1._0 1._0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 _1e1 _1e1 _1e1 _1e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1e1_ 1e1_ 1e1_ 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1_e1 1_e1 1_e1 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1e_1 1e_1 1e_1 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 _1.0e1 _1.0e1 _1.0e1 _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1.0e1_ 1.0e1_ 1.0e1_ 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1.0_e1 1.0_e1 1.0_e1 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1.0e_1 1.0e_1 1.0e_1 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1.0e+_1 1.0e+_1 1.0e+_1 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 1.0e_+1 1.0e_+1 1.0e_+1 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 _0x100 _0x100 _0x100 _0x100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0_x100 0_x100 0_x100 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x_100 0x_100 0x_100 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x00_ 0x00_ 0x00_ 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0xff__ffff 0xff__ffff 0xff__ffff 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x_1.0 0x_1.0 0x_1.0 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1.0_ 0x1.0_ 0x1.0_ 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1_.0 0x1_.0 0x1_.0 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1._0 0x1._0 0x1._0 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x_1p1 0x_1p1 0x_1p1 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1p1_ 0x1p1_ 0x1p1_ 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1_p1 0x1_p1 0x1_p1 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1p_1 0x1p_1 0x1p_1 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x_1.0p1 0x_1.0p1 0x_1.0p1 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1.0p1_ 0x1.0p1_ 0x1.0p1_ 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1.0_p1 0x1.0_p1 0x1.0_p1 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1.0p_1 0x1.0p_1 0x1.0p_1 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1.0p+_1 0x1.0p+_1 0x1.0p+_1 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f32x4 0x1.0p_+1 0x1.0p_+1 0x1.0p_+1 0x1.0p_+1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 _100 _100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 +_100 +_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 -_100 -_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 99_ 99_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1__000 1__000))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 _1.0 _1.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1.0_ 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1_.0 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1._0 1._0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 _1e1 _1e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1e1_ 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1_e1 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1e_1 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 _1.0e1 _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1.0e1_ 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1.0_e1 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1.0e_1 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1.0e+_1 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 1.0e_+1 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 _0x100 _0x100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0_x100 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x_100 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x00_ 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0xff__ffff 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x_1.0 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1.0_ 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1_.0 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1._0 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x_1p1 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1p1_ 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1_p1 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1p_1 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x_1.0p1 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1.0p1_ 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1.0_p1 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1.0p_1 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1.0p+_1 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global v128 (v128.const f64x2 0x1.0p_+1 0x1.0p_+1))") "unknown operator" ) ;; Test parsing an integer from binary (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\00\01\7b" ;; type 0 (func) "\03\02\01\00" ;; func section "\07\0f\01\0b" ;; export section "\70\61\72\73\65\5f\69\38\78\31\36\00\00" ;; export name (parse_i8x16) "\0a\16\01" ;; code section "\14\00\fd\0c" ;; func body "\00\00\00\00" ;; data lane 0~3 (0, 0, 0, 0) "\80\80\80\80" ;; data lane 4~7 (-128, -128, -128, -128) "\ff\ff\ff\ff" ;; data lane 8~11 (0xff, 0xff, 0xff, 0xff) "\ff\ff\ff\ff" ;; data lane 12~15 (255, 255, 255, 255) "\0b" ;; end ) (assert_return (invoke "parse_i8x16") (v128.const i8x16 0 0 0 0 -128 -128 -128 -128 0xff 0xff 0xff 0xff 255 255 255 255)) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\00\01\7b" ;; type 0 (func) "\03\02\01\00" ;; func section "\07\0f\01\0b" ;; export section "\70\61\72\73\65\5f\69\31\36\78\38\00\00" ;; export name (parse_i16x8) "\0a\16\01" ;; code section "\14\00\fd\0c" ;; func body "\00\00\00\00" ;; data lane 0, 1 (0, 0) "\00\80\00\80" ;; data lane 2, 3 (-32768, -32768) "\ff\ff\ff\ff" ;; data lane 4, 5 (65535, 65535) "\ff\ff\ff\ff" ;; data lane 6, 7 (0xffff, 0xffff) "\0b" ;; end ) (assert_return (invoke "parse_i16x8") (v128.const i16x8 0 0 -32768 -32768 65535 65535 0xffff 0xffff)) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\00\01\7b" ;; type 0 (func) "\03\02\01\00" ;; func section "\07\0f\01\0b" ;; export section "\70\61\72\73\65\5f\69\33\32\78\34\00\00" ;; export name (parse_i32x4) "\0a\16\01" ;; code section "\14\00\fd\0c" ;; func body "\d1\ff\ff\ff" ;; data lane 0 (4294967249) "\d1\ff\ff\ff" ;; data lane 1 (4294967249) "\d1\ff\ff\ff" ;; data lane 2 (4294967249) "\d1\ff\ff\ff" ;; data lane 3 (4294967249) "\0b" ;; end ) (assert_return (invoke "parse_i32x4") (v128.const i32x4 4294967249 4294967249 4294967249 4294967249)) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\00\01\7b" ;; type 0 (func) "\03\02\01\00" ;; func section "\07\0f\01\0b" ;; export section "\70\61\72\73\65\5f\69\36\34\78\32\00\00" ;; export name (parse_i64x2) "\0a\16\01" ;; code section "\14\00\fd\0c" ;; func body "\ff\ff\ff\ff\ff\ff\ff\7f" ;; data lane 0 (9223372036854775807) "\ff\ff\ff\ff\ff\ff\ff\7f" ;; data lane 1 (9223372036854775807) "\0b" ;; end ) (assert_return (invoke "parse_i64x2") (v128.const i64x2 9223372036854775807 9223372036854775807)) ;; Test parsing a float from binary (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\00\01\7b" ;; type 0 (func) "\03\02\01\00" ;; func section "\07\0f\01\0b" ;; export section "\70\61\72\73\65\5f\66\33\32\78\34\00\00" ;; export name (parse_f32x4) "\0a\16\01" ;; code section "\14\00\fd\0c" ;; func body "\00\00\80\4f" ;; data lane 0 (4294967249) "\00\00\80\4f" ;; data lane 1 (4294967249) "\00\00\80\4f" ;; data lane 2 (4294967249) "\00\00\80\4f" ;; data lane 3 (4294967249) "\0b" ;; end ) (assert_return (invoke "parse_f32x4") (v128.const f32x4 4294967249 4294967249 4294967249 4294967249)) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\00\01\7b" ;; type 0 (func) "\03\02\01\00" ;; func section "\07\0f\01\0b" ;; export section "\70\61\72\73\65\5f\66\36\34\78\32\00\00" ;; export name (parse_f64x2) "\0a\16\01" ;; code section "\14\00\fd\0c" ;; func body "\ff\ff\ff\ff\ff\ff\ef\7f" ;; data lane 0 (0x1.fffffffffffffp+1023) "\ff\ff\ff\ff\ff\ff\ef\7f" ;; data lane 1 (0x1.fffffffffffffp+1023) "\0b" ;; end ) (assert_return (invoke "parse_f64x2") (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_conversions.wast ================================================ ;; Web Assembly SIMD-related type conversion tests (module ;; Integer to floating point (func (export "f32x4.convert_i32x4_s") (param v128) (result v128) (f32x4.convert_i32x4_s (local.get 0))) (func (export "f32x4.convert_i32x4_u") (param v128) (result v128) (f32x4.convert_i32x4_u (local.get 0))) (func (export "f64x2.convert_low_i32x4_s") (param v128) (result v128) (f64x2.convert_low_i32x4_s (local.get 0))) (func (export "f64x2.convert_low_i32x4_u") (param v128) (result v128) (f64x2.convert_low_i32x4_u (local.get 0))) ;; Integer to integer narrowing (func (export "i8x16.narrow_i16x8_s") (param v128 v128) (result v128) (i8x16.narrow_i16x8_s (local.get 0) (local.get 1))) (func (export "i8x16.narrow_i16x8_u") (param v128 v128) (result v128) (i8x16.narrow_i16x8_u (local.get 0) (local.get 1))) (func (export "i16x8.narrow_i32x4_s") (param v128 v128) (result v128) (i16x8.narrow_i32x4_s (local.get 0) (local.get 1))) (func (export "i16x8.narrow_i32x4_u") (param v128 v128) (result v128) (i16x8.narrow_i32x4_u (local.get 0)(local.get 1))) ;; Float to float promote/demote (func (export "f64x2.promote_low_f32x4") (param v128) (result v128) (f64x2.promote_low_f32x4 (local.get 0))) (func (export "f32x4.demote_f64x2_zero") (param v128) (result v128) (f32x4.demote_f64x2_zero (local.get 0))) ) ;; f64x2.promote_low_f32x4 ;; Float constants copied from test/core/conversions.wast. (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 0.0 0.0 0.0 0.0)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const f64x2 -0.0 -0.0)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f64x2 0x1p-149 0x1p-149)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f64x2 -0x1p-149 -0x1p-149)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const f64x2 -1.0 -1.0)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f64x2 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f64x2 0x1.fffffep+127 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 0x1p-119 0x1p-119 0x1p-119 0x1p-119)) (v128.const f64x2 0x1p-119 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 0x1.8f867ep+125 0x1.8f867ep+125 0x1.8f867ep+125 0x1.8f867ep+125)) (v128.const f64x2 6.6382536710104395e+37 6.6382536710104395e+37)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 inf inf inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 nan nan nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) ;; f32x4.demote_f64x2_zero ;; Float constants copied from test/core/conversions.wast. (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0.0 0.0)) (v128.const f32x4 0.0 0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0.0 -0.0)) (v128.const f32x4 -0.0 -0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f32x4 0.0 0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (v128.const f32x4 -0.0 -0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 1.0 1.0)) (v128.const f32x4 1.0 1.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -1.0 -1.0)) (v128.const f32x4 -1.0 -1.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffe0000000p-127 0x1.fffffe0000000p-127)) (v128.const f32x4 0x1p-126 0x1p-126 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.fffffe0000000p-127 -0x1.fffffe0000000p-127)) (v128.const f32x4 -0x1p-126 -0x1p-126 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffdfffffffp-127 0x1.fffffdfffffffp-127)) (v128.const f32x4 0x1.fffffcp-127 0x1.fffffcp-127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.fffffdfffffffp-127 -0x1.fffffdfffffffp-127)) (v128.const f32x4 -0x1.fffffcp-127 -0x1.fffffcp-127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1p-149 0x1p-149)) (v128.const f32x4 0x1p-149 0x1p-149 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1p-149 -0x1p-149 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffd0000000p+127 0x1.fffffd0000000p+127)) (v128.const f32x4 0x1.fffffcp+127 0x1.fffffcp+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.fffffd0000000p+127 -0x1.fffffd0000000p+127)) (v128.const f32x4 -0x1.fffffcp+127 -0x1.fffffcp+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffd0000001p+127 0x1.fffffd0000001p+127)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.fffffd0000001p+127 -0x1.fffffd0000001p+127)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffefffffffp+127 0x1.fffffefffffffp+127)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.fffffefffffffp+127 -0x1.fffffefffffffp+127)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.ffffffp+127 0x1.ffffffp+127)) (v128.const f32x4 inf inf 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.ffffffp+127 -0x1.ffffffp+127)) (v128.const f32x4 -inf -inf 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1p-119 0x1p-119)) (v128.const f32x4 0x1p-119 0x1p-119 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.8f867ep+125 0x1.8f867ep+125)) (v128.const f32x4 0x1.8f867ep+125 0x1.8f867ep+125 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 inf inf)) (v128.const f32x4 inf inf 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -inf -inf)) (v128.const f32x4 -inf -inf 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000000000001p+0 0x1.0000000000001p+0)) (v128.const f32x4 1.0 1.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffffffffffp-1 0x1.fffffffffffffp-1)) (v128.const f32x4 1.0 1.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000010000000p+0 0x1.0000010000000p+0)) (v128.const f32x4 0x1.000000p+0 0x1.000000p+0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000010000001p+0 0x1.0000010000001p+0)) (v128.const f32x4 0x1.000002p+0 0x1.000002p+0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.000002fffffffp+0 0x1.000002fffffffp+0)) (v128.const f32x4 0x1.000002p+0 0x1.000002p+0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000030000000p+0 0x1.0000030000000p+0)) (v128.const f32x4 0x1.000004p+0 0x1.000004p+0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000050000000p+0 0x1.0000050000000p+0)) (v128.const f32x4 0x1.000004p+0 0x1.000004p+0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000010000000p+24 0x1.0000010000000p+24)) (v128.const f32x4 0x1.0p+24 0x1.0p+24 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000010000001p+24 0x1.0000010000001p+24)) (v128.const f32x4 0x1.000002p+24 0x1.000002p+24 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.000002fffffffp+24 0x1.000002fffffffp+24)) (v128.const f32x4 0x1.000002p+24 0x1.000002p+24 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000030000000p+24 0x1.0000030000000p+24)) (v128.const f32x4 0x1.000004p+24 0x1.000004p+24 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.4eae4f7024c7p+108 0x1.4eae4f7024c7p+108)) (v128.const f32x4 0x1.4eae5p+108 0x1.4eae5p+108 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.a12e71e358685p-113 0x1.a12e71e358685p-113)) (v128.const f32x4 0x1.a12e72p-113 0x1.a12e72p-113 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.cb98354d521ffp-127 0x1.cb98354d521ffp-127)) (v128.const f32x4 0x1.cb9834p-127 0x1.cb9834p-127 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.6972b30cfb562p+1 -0x1.6972b30cfb562p+1)) (v128.const f32x4 -0x1.6972b4p+1 -0x1.6972b4p+1 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.bedbe4819d4c4p+112 -0x1.bedbe4819d4c4p+112)) (v128.const f32x4 -0x1.bedbe4p+112 -0x1.bedbe4p+112 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 nan nan)) (v128.const f32x4 nan:canonical nan:canonical 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f32x4 nan:arithmetic nan:arithmetic 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f32x4 nan:arithmetic nan:arithmetic 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f32x4 0.0 0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f32x4 -0.0 -0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0p-150 0x1.0p-150)) (v128.const f32x4 0.0 0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.0p-150 -0x1.0p-150)) (v128.const f32x4 -0.0 -0.0 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.0000000000001p-150 0x1.0000000000001p-150)) (v128.const f32x4 0x1p-149 0x1p-149 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 -0x1.0000000000001p-150 -0x1.0000000000001p-150)) (v128.const f32x4 -0x1p-149 -0x1p-149 0 0)) ;; Integer to floating point ;; f32x4.convert_i32x4_s (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 0 0 0 0)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 1 1 1 1)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 -1 -1 -1 -1)) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const f32x4 2147483647.0 2147483647.0 2147483647.0 2147483647.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const f32x4 -2147483648.0 -2147483648.0 -2147483648.0 -2147483648.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 1234567890 1234567890 1234567890 1234567890)) (v128.const f32x4 0x1.26580cp+30 0x1.26580cp+30 0x1.26580cp+30 0x1.26580cp+30)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 0_123_456_792 0_123_456_792 0_123_456_792 0_123_456_792)) (v128.const f32x4 123456792.0 123456792.0 123456792.0 123456792.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 0x0_1234_5680 0x0_1234_5680 0x0_1234_5680 0x0_1234_5680)) (v128.const f32x4 305419904.0 305419904.0 305419904.0 305419904.0)) ;; Test rounding directions. (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 16777217 16777217 16777217 16777217)) (v128.const f32x4 16777216.0 16777216.0 16777216.0 16777216.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 -16777217 -16777217 -16777217 -16777217)) (v128.const f32x4 -16777216.0 -16777216.0 -16777216.0 -16777216.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 16777219 16777219 16777219 16777219)) (v128.const f32x4 16777220.0 16777220.0 16777220.0 16777220.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 -16777219 -16777219 -16777219 -16777219)) (v128.const f32x4 -16777220.0 -16777220.0 -16777220.0 -16777220.0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 0 -1 0x7fffffff 0x80000000)) (v128.const f32x4 0.0 -1.0 2147483647.0 -2147483648.0)) ;; f32x4.convert_i32x4_u (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0 0 0 0)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 1 1 1 1)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 -1 -1 -1 -1)) (v128.const f32x4 4294967295.0 4294967295.0 4294967295.0 4294967295.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const f32x4 2147483648.0 2147483648.0 2147483648.0 2147483648.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const f32x4 2147483648.0 2147483648.0 2147483648.0 2147483648.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const f32x4 0x1.234568p+28 0x1.234568p+28 0x1.234568p+28 0x1.234568p+28)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0x80000080 0x80000080 0x80000080 0x80000080)) (v128.const f32x4 0x1.000000p+31 0x1.000000p+31 0x1.000000p+31 0x1.000000p+31)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0x80000081 0x80000081 0x80000081 0x80000081)) (v128.const f32x4 0x1.000002p+31 0x1.000002p+31 0x1.000002p+31 0x1.000002p+31)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0x80000082 0x80000082 0x80000082 0x80000082)) (v128.const f32x4 0x1.000002p+31 0x1.000002p+31 0x1.000002p+31 0x1.000002p+31)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0xfffffe80 0xfffffe80 0xfffffe80 0xfffffe80)) (v128.const f32x4 0x1.fffffcp+31 0x1.fffffcp+31 0x1.fffffcp+31 0x1.fffffcp+31)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0xfffffe81 0xfffffe81 0xfffffe81 0xfffffe81)) (v128.const f32x4 0x1.fffffep+31 0x1.fffffep+31 0x1.fffffep+31 0x1.fffffep+31)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0xfffffe82 0xfffffe82 0xfffffe82 0xfffffe82)) (v128.const f32x4 0x1.fffffep+31 0x1.fffffep+31 0x1.fffffep+31 0x1.fffffep+31)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0_123_456_792 0_123_456_792 0_123_456_792 0_123_456_792)) (v128.const f32x4 123456792.0 123456792.0 123456792.0 123456792.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const f32x4 2427178496.0 2427178496.0 2427178496.0 2427178496.0)) ;; Test rounding directions. (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 16777217 16777217 16777217 16777217)) (v128.const f32x4 16777216.0 16777216.0 16777216.0 16777216.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 16777219 16777219 16777219 16777219)) (v128.const f32x4 16777220.0 16777220.0 16777220.0 16777220.0)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0 -1 0x7fffffff 0x80000000)) (v128.const f32x4 0.0 4294967295.0 2147483647.0 2147483648.0)) ;; f64x2.convert_i32x4_s ;; constants copied from test/core/conversions.wast. (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 1 1 0 0)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 -1 -1 0 0)) (v128.const f64x2 -1.0 -1.0)) (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 0 0 0 0)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 2147483647 2147483647 0 0)) (v128.const f64x2 2147483647 2147483647)) (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 0 0)) (v128.const f64x2 -2147483648 -2147483648)) (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 987654321 987654321 0 0)) (v128.const f64x2 987654321 987654321)) ;; f64x2.convert_i32x4_u ;; constants copied from test/core/conversions.wast. (assert_return (invoke "f64x2.convert_low_i32x4_u" (v128.const i32x4 1 1 0 0)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.convert_low_i32x4_u" (v128.const i32x4 0 0 0 0)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.convert_low_i32x4_u" (v128.const i32x4 2147483647 2147483647 0 0)) (v128.const f64x2 2147483647 2147483647)) (assert_return (invoke "f64x2.convert_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 0 0)) (v128.const f64x2 2147483648 2147483648)) (assert_return (invoke "f64x2.convert_low_i32x4_u" (v128.const i32x4 0xffffffff 0xffffffff 0 0)) (v128.const f64x2 4294967295.0 4294967295.0)) ;; Integer to integer narrowing ;; i8x16.narrow_i16x8_s (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f) (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 0x81 0x81 0x81 0x81 0x81 0x81 0x81 0x81 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) (v128.const i16x8 -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x81 0x81 0x81 0x81 0x81 0x81 0x81 0x81)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81) (v128.const i16x8 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81) (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) (v128.const i16x8 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81 -0x81) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) ;; i8x16.narrow_i16x8_u (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i16x8 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100)) (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100)) (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789) (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345)) (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB) (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234)) (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) ;; i16x8.narrow_i32x4_s (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i16x8 0 0 0 0 1 1 1 1)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 1 1 1 1 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 1 1 1 1)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x7ffe 0x7ffe 0x7ffe 0x7ffe) (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0x7ffe 0x7ffe 0x7ffe 0x7ffe 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i32x4 0x7ffe 0x7ffe 0x7ffe 0x7ffe)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7ffe 0x7ffe 0x7ffe 0x7ffe)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x8000 0x8000 0x8000 0x8000) (v128.const i32x4 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i32x4 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x8000 0x8000 0x8000 0x8000) (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0xffff 0xffff 0xffff 0xffff) (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x7fff -0x7fff -0x7fff -0x7fff) (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000)) (v128.const i16x8 0x8001 0x8001 0x8001 0x8001 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i32x4 -0x7fff -0x7fff -0x7fff -0x7fff)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8001 0x8001 0x8001 0x8001)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8001 -0x8001 -0x8001 -0x8001) (v128.const i32x4 -0x8001 -0x8001 -0x8001 -0x8001)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8001 -0x8001 -0x8001 -0x8001) (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i32x4 -0x8001 -0x8001 -0x8001 -0x8001)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i32x4 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8001 -0x8001 -0x8001 -0x8001) (v128.const i32x4 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000 -0x8000 -0x8000 -0x8000) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8001 -0x8001 -0x8001 -0x8001) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 -0x8000000 -0x8000000 -0x8000000 -0x8000000) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x7fff 0x7fff 0x7fff 0x7fff)) ;; i16x8.narrow_i32x4_u (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i16x8 0 0 0 0 1 1 1 1)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 1 1 1 1 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 1 1 1 1)) (v128.const i16x8 0 0 0 0 1 1 1 1)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0xfffe 0xfffe 0xfffe 0xfffe) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0xfffe 0xfffe 0xfffe 0xfffe 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0xffff 0xffff 0xffff 0xffff) (v128.const i32x4 0xfffe 0xfffe 0xfffe 0xfffe)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xfffe 0xfffe 0xfffe 0xfffe)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0xffff 0xffff 0xffff 0xffff) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0x10000 0x10000 0x10000 0x10000) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0xffff 0xffff 0xffff 0xffff) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0x10000 0x10000 0x10000 0x10000) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (v128.const i16x8 0 0 0 0 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (v128.const i16x8 0 0 0 0 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 -0x80000000 -0x80000000 -0x80000000 -0x80000000) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (v128.const i16x8 0 0 0 0 0xffff 0xffff 0xffff 0xffff)) ;; Unknown operator (assert_malformed (module quote "(func (result v128) (i32x4.trunc_sat_f32x4 (v128.const f32x4 0.0 0.0 0.0 0.0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.trunc_s_sat_f32x4 (v128.const f32x4 -2.0 -1.0 1.0 2.0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.trunc_u_sat_f32x4 (v128.const f32x4 -2.0 -1.0 1.0 2.0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.convert_f32x4 (v128.const f32x4 -1 0 1 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.convert_s_f32x4 (v128.const f32x4 -1 0 1 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.convert_u_f32x4 (v128.const f32x4 -1 0 1 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i64x2.trunc_sat_f64x2_s (v128.const f64x2 0.0 0.0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i64x2.trunc_sat_f64x2_u (v128.const f64x2 -2.0 -1.0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (f64x2.convert_i64x2_s (v128.const i64x2 1 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (f64x2.convert_i64x2_u (v128.const i64x2 1 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.narrow_i16x8 (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.narrow_i8x16 (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.narrow_i8x16_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.narrow_i8x16_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.narrow_i32x4 (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.narrow_i16x8 (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.narrow_i16x8_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.narrow_i16x8_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.extend_low_i8x16 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.extend_low_i16x8_s (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.extend_low_i16x8_u (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.extend_high_i8x16 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.extend_high_i16x8_s (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.extend_high_i16x8_u (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.extend_low_i16x8 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.extend_low_i32x4_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.extend_low_i32x4_u (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.extend_high_i16x8 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.extend_high_i32x4_s (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.extend_high_i32x4_u (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; Type mismatch (assert_invalid (module (func (result v128) (f32x4.convert_i32x4_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.convert_i32x4_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.convert_i32x4_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.convert_i32x4_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.narrow_i16x8_s (i32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.narrow_i16x8_u (i32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.narrow_i32x4_s (f32.const 0.0) (f64.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.narrow_i32x4_s (f32.const 0.0) (f64.const 0.0)))) "type mismatch") ;; Combinations (module (func (export "f32x4_convert_i32x4_s_add") (param v128 v128) (result v128) (f32x4.convert_i32x4_s (i32x4.add (local.get 0) (local.get 1)))) (func (export "f32x4_convert_i32x4_s_sub") (param v128 v128) (result v128) (f32x4.convert_i32x4_s (i32x4.sub (local.get 0) (local.get 1)))) (func (export "f32x4_convert_i32x4_u_mul") (param v128 v128) (result v128) (f32x4.convert_i32x4_u (i32x4.mul (local.get 0) (local.get 1)))) (func (export "i16x8_low_extend_narrow_ss") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_s (i8x16.narrow_i16x8_s (local.get 0) (local.get 1)))) (func (export "i16x8_low_extend_narrow_su") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_s (i8x16.narrow_i16x8_u (local.get 0) (local.get 1)))) (func (export "i16x8_high_extend_narrow_ss") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_s (i8x16.narrow_i16x8_s (local.get 0) (local.get 1)))) (func (export "i16x8_high_extend_narrow_su") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_s (i8x16.narrow_i16x8_u (local.get 0) (local.get 1)))) (func (export "i16x8_low_extend_narrow_uu") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_u (i8x16.narrow_i16x8_u (local.get 0) (local.get 1)))) (func (export "i16x8_low_extend_narrow_us") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_u (i8x16.narrow_i16x8_s (local.get 0) (local.get 1)))) (func (export "i16x8_high_extend_narrow_uu") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_u (i8x16.narrow_i16x8_u (local.get 0) (local.get 1)))) (func (export "i16x8_high_extend_narrow_us") (param v128 v128) (result v128) (i16x8.extend_low_i8x16_u (i8x16.narrow_i16x8_s (local.get 0) (local.get 1)))) (func (export "i32x4_low_extend_narrow_ss") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_s (i16x8.narrow_i32x4_s (local.get 0) (local.get 1)))) (func (export "i32x4_low_extend_narrow_su") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_s (i16x8.narrow_i32x4_u (local.get 0) (local.get 1)))) (func (export "i32x4_high_extend_narrow_ss") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_s (i16x8.narrow_i32x4_s (local.get 0) (local.get 1)))) (func (export "i32x4_high_extend_narrow_su") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_s (i16x8.narrow_i32x4_u (local.get 0) (local.get 1)))) (func (export "i32x4_low_extend_narrow_uu") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_u (i16x8.narrow_i32x4_u (local.get 0) (local.get 1)))) (func (export "i32x4_low_extend_narrow_us") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_u (i16x8.narrow_i32x4_s (local.get 0) (local.get 1)))) (func (export "i32x4_high_extend_narrow_uu") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_u (i16x8.narrow_i32x4_u (local.get 0) (local.get 1)))) (func (export "i32x4_high_extend_narrow_us") (param v128 v128) (result v128) (i32x4.extend_low_i16x8_u (i16x8.narrow_i32x4_s (local.get 0) (local.get 1)))) ) (assert_return (invoke "f32x4_convert_i32x4_s_add" (v128.const i32x4 1 2 3 4) (v128.const i32x4 2 3 4 5)) (v128.const f32x4 3.0 5.0 7.0 9.0)) (assert_return (invoke "f32x4_convert_i32x4_s_sub" (v128.const i32x4 0 1 2 3) (v128.const i32x4 1 1 1 1)) (v128.const f32x4 -1.0 0.0 1.0 2.0)) (assert_return (invoke "f32x4_convert_i32x4_u_mul" (v128.const i32x4 1 2 3 4) (v128.const i32x4 1 2 3 4)) (v128.const f32x4 1.0 4.0 9.0 16.0)) (assert_return (invoke "i16x8_low_extend_narrow_ss" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000)) (v128.const i16x8 0xff80 0xff80 0x7f 0xff80 0xff80 0xff80 0x7f 0xff80)) (assert_return (invoke "i16x8_low_extend_narrow_su" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0xffff -0x8000 -0x7fff 0x7fff 0xffff) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0xffff -0x8000 -0x7fff 0x7fff 0xffff)) (v128.const i16x8 0 0 0xffff 0 0 0 0xffff 0)) (assert_return (invoke "i16x8_high_extend_narrow_ss" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000)) (v128.const i16x8 0xff80 0xff80 0x7f 0xff80 0xff80 0xff80 0x7f 0xff80)) (assert_return (invoke "i16x8_high_extend_narrow_su" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0xffff -0x8000 -0x7fff 0x7fff 0xffff) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0xffff -0x8000 -0x7fff 0x7fff 0xffff)) (v128.const i16x8 0 0 0xffff 0 0 0 0xffff 0)) (assert_return (invoke "i16x8_low_extend_narrow_uu" (v128.const i16x8 -0x8000 -0x7fff 0x8000 0xffff -0x8000 -0x7fff 0x8000 0xffff) (v128.const i16x8 -0x8000 -0x7fff 0x8000 0xffff -0x8000 -0x7fff 0x8000 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_low_extend_narrow_us" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000)) (v128.const i16x8 0x80 0x80 0x7f 0x80 0x80 0x80 0x7f 0x80)) (assert_return (invoke "i16x8_high_extend_narrow_uu" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0xffff -0x8000 -0x7fff 0x7fff 0xffff) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0xffff -0x8000 -0x7fff 0x7fff 0xffff)) (v128.const i16x8 0 0 0xff 0 0 0 0xff 0)) (assert_return (invoke "i16x8_high_extend_narrow_us" (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000) (v128.const i16x8 -0x8000 -0x7fff 0x7fff 0x8000 -0x8000 -0x7fff 0x7fff 0x8000)) (v128.const i16x8 0x80 0x80 0x7f 0x80 0x80 0x80 0x7f 0x80)) (assert_return (invoke "i32x4_low_extend_narrow_ss" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000)) (v128.const i32x4 0xffff8000 0xffff8000 0x7fff 0x7fff)) (assert_return (invoke "i32x4_low_extend_narrow_su" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff)) (v128.const i32x4 0 0 0xffffffff 0)) (assert_return (invoke "i32x4_high_extend_narrow_ss" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000)) (v128.const i32x4 0xffff8000 0xffff8000 0x7fff 0x7fff)) (assert_return (invoke "i32x4_high_extend_narrow_su" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff)) (v128.const i32x4 0 0 0xffffffff 0)) (assert_return (invoke "i32x4_low_extend_narrow_uu" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff)) (v128.const i32x4 0 0 0xffff 0)) (assert_return (invoke "i32x4_low_extend_narrow_us" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000)) (v128.const i32x4 0x8000 0x8000 0x7fff 0x7fff)) (assert_return (invoke "i32x4_high_extend_narrow_uu" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0xffffffff)) (v128.const i32x4 0 0 0xffff 0)) (assert_return (invoke "i32x4_high_extend_narrow_us" (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000) (v128.const i32x4 -0x80000000 -0x7fffffff 0x7fffffff 0x8000000)) (v128.const i32x4 0x8000 0x8000 0x7fff 0x7fff)) ;; Test operation with empty argument (assert_invalid (module (func $f32x4.convert_i32x4_s-arg-empty (result v128) (f32x4.convert_i32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.convert_i32x4_u-arg-empty (result v128) (f32x4.convert_i32x4_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.narrow_i16x8_s-1st-arg-empty (result v128) (i8x16.narrow_i16x8_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.narrow_i16x8_s-arg-empty (result v128) (i8x16.narrow_i16x8_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.narrow_i16x8_u-1st-arg-empty (result v128) (i8x16.narrow_i16x8_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.narrow_i16x8_u-arg-empty (result v128) (i8x16.narrow_i16x8_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.narrow_i32x4_s-1st-arg-empty (result v128) (i16x8.narrow_i32x4_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.narrow_i32x4_s-arg-empty (result v128) (i16x8.narrow_i32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.narrow_i32x4_u-1st-arg-empty (result v128) (i16x8.narrow_i32x4_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.narrow_i32x4_u-arg-empty (result v128) (i16x8.narrow_i32x4_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f32x4.wast ================================================ ;; Tests for f32x4 [abs, min, max] operations on major boundary values and all special values. (module (func (export "f32x4.min") (param v128 v128) (result v128) (f32x4.min (local.get 0) (local.get 1))) (func (export "f32x4.max") (param v128 v128) (result v128) (f32x4.max (local.get 0) (local.get 1))) (func (export "f32x4.abs") (param v128) (result v128) (f32x4.abs (local.get 0))) ;; f32x4.min const vs const (func (export "f32x4.min_with_const_0") (result v128) (f32x4.min (v128.const f32x4 0 1 2 -3) (v128.const f32x4 0 2 1 3))) (func (export "f32x4.min_with_const_1") (result v128) (f32x4.min (v128.const f32x4 0 1 2 3) (v128.const f32x4 0 1 2 3))) (func (export "f32x4.min_with_const_2") (result v128) (f32x4.min (v128.const f32x4 0x00 0x01 0x02 0x80000000) (v128.const f32x4 0x00 0x02 0x01 2147483648))) (func (export "f32x4.min_with_const_3") (result v128) (f32x4.min (v128.const f32x4 0x00 0x01 0x02 0x80000000) (v128.const f32x4 0x00 0x01 0x02 0x80000000))) ;; f32x4.min param vs const (func (export "f32x4.min_with_const_5")(param v128) (result v128) (f32x4.min (local.get 0) (v128.const f32x4 0 1 2 -3))) (func (export "f32x4.min_with_const_6")(param v128) (result v128) (f32x4.min (v128.const f32x4 0 1 2 3) (local.get 0))) (func (export "f32x4.min_with_const_7")(param v128) (result v128) (f32x4.min (v128.const f32x4 0x00 0x01 0x02 0x80000000) (local.get 0))) (func (export "f32x4.min_with_const_8")(param v128) (result v128) (f32x4.min (local.get 0) (v128.const f32x4 0x00 0x01 0x02 0x80000000))) ;; f32x4.max const vs const (func (export "f32x4.max_with_const_10") (result v128) (f32x4.max (v128.const f32x4 0 1 2 -3) (v128.const f32x4 0 2 1 3))) (func (export "f32x4.max_with_const_11") (result v128) (f32x4.max (v128.const f32x4 0 1 2 3) (v128.const f32x4 0 1 2 3))) (func (export "f32x4.max_with_const_12") (result v128) (f32x4.max (v128.const f32x4 0x00 0x01 0x02 0x80000000) (v128.const f32x4 0x00 0x02 0x01 2147483648))) (func (export "f32x4.max_with_const_13") (result v128) (f32x4.max (v128.const f32x4 0x00 0x01 0x02 0x80000000) (v128.const f32x4 0x00 0x01 0x02 0x80000000))) ;; f32x4.max param vs const (func (export "f32x4.max_with_const_15")(param v128) (result v128) (f32x4.max (local.get 0) (v128.const f32x4 0 1 2 -3))) (func (export "f32x4.max_with_const_16")(param v128) (result v128) (f32x4.max (v128.const f32x4 0 1 2 3) (local.get 0))) (func (export "f32x4.max_with_const_17")(param v128) (result v128) (f32x4.max (v128.const f32x4 0x00 0x01 0x02 0x80000000) (local.get 0))) (func (export "f32x4.max_with_const_18")(param v128) (result v128) (f32x4.max (local.get 0) (v128.const f32x4 0x00 0x01 0x02 0x80000000))) (func (export "f32x4.abs_with_const") (result v128) (f32x4.abs (v128.const f32x4 -0 -1 -2 -3))) ) ;; f32x4.min const vs const (assert_return (invoke "f32x4.min_with_const_0") (v128.const f32x4 0 1 1 -3)) (assert_return (invoke "f32x4.min_with_const_1") (v128.const f32x4 0 1 2 3)) (assert_return (invoke "f32x4.min_with_const_2") (v128.const f32x4 0x00 0x01 0x01 0x80000000)) (assert_return (invoke "f32x4.min_with_const_3") (v128.const f32x4 0x00 0x01 0x02 0x80000000)) ;; f32x4.min param vs const (assert_return (invoke "f32x4.min_with_const_5" (v128.const f32x4 0 2 1 3)) (v128.const f32x4 0 1 1 -3)) (assert_return (invoke "f32x4.min_with_const_6" (v128.const f32x4 0 1 2 3)) (v128.const f32x4 0 1 2 3)) (assert_return (invoke "f32x4.min_with_const_7" (v128.const f32x4 0x00 0x02 0x01 2147483648)) (v128.const f32x4 0x00 0x01 0x01 0x80000000)) (assert_return (invoke "f32x4.min_with_const_8" (v128.const f32x4 0x00 0x01 0x02 0x80000000)) (v128.const f32x4 0x00 0x01 0x02 0x80000000)) ;; f32x4.max const vs const (assert_return (invoke "f32x4.max_with_const_10") (v128.const f32x4 0 2 2 3)) (assert_return (invoke "f32x4.max_with_const_11") (v128.const f32x4 0 1 2 3)) (assert_return (invoke "f32x4.max_with_const_12") (v128.const f32x4 0x00 0x02 0x02 2147483648)) (assert_return (invoke "f32x4.max_with_const_13") (v128.const f32x4 0x00 0x01 0x02 0x80000000)) ;; f32x4.max param vs const (assert_return (invoke "f32x4.max_with_const_15" (v128.const f32x4 0 2 1 3)) (v128.const f32x4 0 2 2 3)) (assert_return (invoke "f32x4.max_with_const_16" (v128.const f32x4 0 1 2 3)) (v128.const f32x4 0 1 2 3)) (assert_return (invoke "f32x4.max_with_const_17" (v128.const f32x4 0x00 0x02 0x01 2147483648)) (v128.const f32x4 0x00 0x02 0x02 2147483648)) (assert_return (invoke "f32x4.max_with_const_18" (v128.const f32x4 0x00 0x01 0x02 0x80000000)) (v128.const f32x4 0x00 0x01 0x02 0x80000000)) (assert_return (invoke "f32x4.abs_with_const") (v128.const f32x4 0 1 2 3)) ;; Test different lanes go through different if-then clauses ;; f32x4.min (assert_return (invoke "f32x4.min" (v128.const f32x4 nan 0 0 1) (v128.const f32x4 0 -nan 1 0) ) (v128.const f32x4 nan:canonical nan:canonical 0 0) ) ;; f32x4.min (assert_return (invoke "f32x4.min" (v128.const f32x4 nan 0 0 0) (v128.const f32x4 0 -nan 1 0) ) (v128.const f32x4 nan:canonical nan:canonical 0 0) ) ;; f32x4.max (assert_return (invoke "f32x4.max" (v128.const f32x4 nan 0 0 1) (v128.const f32x4 0 -nan 1 0) ) (v128.const f32x4 nan:canonical nan:canonical 1 1) ) ;; f32x4.max (assert_return (invoke "f32x4.max" (v128.const f32x4 nan 0 0 0) (v128.const f32x4 0 -nan 1 0) ) (v128.const f32x4 nan:canonical nan:canonical 1 0) ) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.min" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) ;; Test opposite signs of zero (assert_return (invoke "f32x4.min" (v128.const f32x4 0 0 -0 +0) (v128.const f32x4 +0 -0 +0 -0)) (v128.const f32x4 0 -0 -0 -0)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0 -0 -0 -0) (v128.const f32x4 +0 +0 +0 +0)) (v128.const f32x4 -0 -0 -0 -0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 0 0 -0 +0) (v128.const f32x4 +0 -0 +0 -0)) (v128.const f32x4 0 0 0 0)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0 -0 -0 -0) (v128.const f32x4 +0 +0 +0 +0)) (v128.const f32x4 +0 +0 +0 +0)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789 -0123456789.0123456789)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.min (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.max (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.min (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.max (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.min (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.max (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.min (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.max (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (f32x4.abs (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.min (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.max (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f32x4.abs-arg-empty (result v128) (f32x4.abs) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.min-1st-arg-empty (result v128) (f32x4.min (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.min-arg-empty (result v128) (f32x4.min) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.max-1st-arg-empty (result v128) (f32x4.max (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.max-arg-empty (result v128) (f32x4.max) ) ) "type mismatch" ) ;; combination (module (func (export "max-min") (param v128 v128 v128) (result v128) (f32x4.max (f32x4.min (local.get 0) (local.get 1))(local.get 2))) (func (export "min-max") (param v128 v128 v128) (result v128) (f32x4.min (f32x4.max (local.get 0) (local.get 1))(local.get 2))) (func (export "max-abs") (param v128 v128) (result v128) (f32x4.max (f32x4.abs (local.get 0)) (local.get 1))) (func (export "min-abs") (param v128 v128) (result v128) (f32x4.min (f32x4.abs (local.get 0)) (local.get 1))) ) (assert_return (invoke "max-min" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.25 0.25 0.25 0.25) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 0.25 0.25 0.25 0.25)) (assert_return (invoke "min-max" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.25 0.25 0.25 0.25) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 0.125 0.125 0.125 0.125)) (assert_return (invoke "max-abs" (v128.const f32x4 -1.125 -1.125 -1.125 -1.125) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 1.125 1.125 1.125 1.125)) (assert_return (invoke "min-abs" (v128.const f32x4 -1.125 -1.125 -1.125 -1.125) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 0.125 0.125 0.125 0.125)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f32x4_arith.wast ================================================ ;; Tests for f32x4 arithmetic operations on major boundary values and all special values. (module (func (export "f32x4.add") (param v128 v128) (result v128) (f32x4.add (local.get 0) (local.get 1))) (func (export "f32x4.sub") (param v128 v128) (result v128) (f32x4.sub (local.get 0) (local.get 1))) (func (export "f32x4.mul") (param v128 v128) (result v128) (f32x4.mul (local.get 0) (local.get 1))) (func (export "f32x4.div") (param v128 v128) (result v128) (f32x4.div (local.get 0) (local.get 1))) (func (export "f32x4.neg") (param v128) (result v128) (f32x4.neg (local.get 0))) (func (export "f32x4.sqrt") (param v128) (result v128) (f32x4.sqrt (local.get 0))) ) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 246913578.0 246913578.0 246913578.0 246913578.0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 2.46913578e+27 2.46913578e+27 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 2.46913578e+27 2.46913578e+27 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 2.46913578e-11 2.46913578e-11 2.46913578e-11 2.46913578e-11)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 246913578.0 246913578.0 246913578.0 246913578.0)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 2.46913578e+27 2.46913578e+27 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 2.46913578e+27 2.46913578e+27 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 2.46913578e-11 2.46913578e-11 2.46913578e-11 2.46913578e-11)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 246913578.02469134 246913578.02469134 246913578.02469134 246913578.02469134)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 2.4691357802469137e+27 2.4691357802469137e+27 2.4691357802469137e+27 2.4691357802469137e+27)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 2.4691357802469137e+27 2.4691357802469137e+27 2.4691357802469137e+27 2.4691357802469137e+27)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 2.4691357802469137e-11 2.4691357802469137e-11 2.4691357802469137e-11 2.4691357802469137e-11)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57 0x1.23456789abcdfp+57)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76 0x1.23456789abcdfp+76)) (assert_return (invoke "f32x4.add" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38 0x1.23456789abcdfp+38)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127 0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126 0x1.0000020000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126 -0x1.0000020000000p-126)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127 -0x1.fffffc0000000p-127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2 0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2 0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2 0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2 0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2 -0x1.b21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2 -0x1.721fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2 -0x1.d21fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2 -0x1.521fb60000000p+2)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-298 0x1.0000000000000p-298 0x1.0000000000000p-298 0x1.0000000000000p-298)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-298 -0x1.0000000000000p-298 -0x1.0000000000000p-298 -0x1.0000000000000p-298)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-298 -0x1.0000000000000p-298 -0x1.0000000000000p-298 -0x1.0000000000000p-298)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-298 0x1.0000000000000p-298 0x1.0000000000000p-298 0x1.0000000000000p-298)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-252 0x1.0000000000000p-252 0x1.0000000000000p-252 0x1.0000000000000p-252)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-252 -0x1.0000000000000p-252 -0x1.0000000000000p-252 -0x1.0000000000000p-252)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275 -0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275 0x1.0000000000000p-275)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-252 -0x1.0000000000000p-252 -0x1.0000000000000p-252 -0x1.0000000000000p-252)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-252 0x1.0000000000000p-252 0x1.0000000000000p-252 0x1.0000000000000p-252)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-2 0x1.0000000000000p-2 0x1.0000000000000p-2 0x1.0000000000000p-2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-2 -0x1.0000000000000p-2 -0x1.0000000000000p-2 -0x1.0000000000000p-2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150 -0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150 0x1.0000000000000p-150)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127 -0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127 0x1.0000000000000p-127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-2 -0x1.0000000000000p-2 -0x1.0000000000000p-2 -0x1.0000000000000p-2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-2 0x1.0000000000000p-2 0x1.0000000000000p-2 0x1.0000000000000p-2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.3bd3cdc2cab20p+5 0x1.3bd3cdc2cab20p+5 0x1.3bd3cdc2cab20p+5 0x1.3bd3cdc2cab20p+5)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.3bd3cdc2cab20p+5 -0x1.3bd3cdc2cab20p+5 -0x1.3bd3cdc2cab20p+5 -0x1.3bd3cdc2cab20p+5)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147 -0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147 0x1.921fb60000000p-147)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124 -0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124 0x1.921fb60000000p-124)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1 -0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1 0x1.921fb60000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.3bd3cdc2cab20p+5 -0x1.3bd3cdc2cab20p+5 -0x1.3bd3cdc2cab20p+5 -0x1.3bd3cdc2cab20p+5)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.3bd3cdc2cab20p+5 0x1.3bd3cdc2cab20p+5 0x1.3bd3cdc2cab20p+5 0x1.3bd3cdc2cab20p+5)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22 -0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22 0x1.fffffe0000000p-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1 -0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1 0x1.fffffe0000000p+1)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126 -0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126 0x1.fffffe0000000p+126)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 1.5241579434344448e+16 1.5241579434344448e+16 1.5241579434344448e+16 1.5241579434344448e+16)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 1.5241579025420272e-22 1.5241579025420272e-22 1.5241579025420272e-22 1.5241579025420272e-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 1.5241579434344448e+16 1.5241579434344448e+16 1.5241579434344448e+16 1.5241579434344448e+16)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 1.5241579025420272e-22 1.5241579025420272e-22 1.5241579025420272e-22 1.5241579025420272e-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 1.5241579434344448e+16 1.5241579434344448e+16 1.5241579434344448e+16 1.5241579434344448e+16)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 1.5241579025420272e-22 1.5241579025420272e-22 1.5241579025420272e-22 1.5241579025420272e-22)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112 0x1.4b66de0000000p+112)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74 0x1.4b66de0000000p+74)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-23 0x1.0000000000000p-23 0x1.0000000000000p-23 0x1.0000000000000p-23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-23 -0x1.0000000000000p-23 -0x1.0000000000000p-23 -0x1.0000000000000p-23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-152 0x1.45f306446f9b4p-152 0x1.45f306446f9b4p-152 0x1.45f306446f9b4p-152)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-152 -0x1.45f306446f9b4p-152 -0x1.45f306446f9b4p-152 -0x1.45f306446f9b4p-152)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-277 0x1.0000010000010p-277 0x1.0000010000010p-277 0x1.0000010000010p-277)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-277 -0x1.0000010000010p-277 -0x1.0000010000010p-277 -0x1.0000010000010p-277)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-23 -0x1.0000000000000p-23 -0x1.0000000000000p-23 -0x1.0000000000000p-23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-23 0x1.0000000000000p-23 0x1.0000000000000p-23 0x1.0000000000000p-23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148 -0x1.0000000000000p-148)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148 0x1.0000000000000p-148)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-152 -0x1.45f306446f9b4p-152 -0x1.45f306446f9b4p-152 -0x1.45f306446f9b4p-152)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-152 0x1.45f306446f9b4p-152 0x1.45f306446f9b4p-152 0x1.45f306446f9b4p-152)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-277 -0x1.0000010000010p-277 -0x1.0000010000010p-277 -0x1.0000010000010p-277)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-277 0x1.0000010000010p-277 0x1.0000010000010p-277 0x1.0000010000010p-277)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+23 0x1.0000000000000p+23 0x1.0000000000000p+23 0x1.0000000000000p+23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+23 -0x1.0000000000000p+23 -0x1.0000000000000p+23 -0x1.0000000000000p+23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-129 0x1.45f306446f9b4p-129 0x1.45f306446f9b4p-129 0x1.45f306446f9b4p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-129 -0x1.45f306446f9b4p-129 -0x1.45f306446f9b4p-129 -0x1.45f306446f9b4p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-254 0x1.0000010000010p-254 0x1.0000010000010p-254 0x1.0000010000010p-254)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-254 -0x1.0000010000010p-254 -0x1.0000010000010p-254 -0x1.0000010000010p-254)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+23 -0x1.0000000000000p+23 -0x1.0000000000000p+23 -0x1.0000000000000p+23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p+23 0x1.0000000000000p+23 0x1.0000000000000p+23 0x1.0000000000000p+23)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125 -0x1.0000000000000p-125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125 0x1.0000000000000p-125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-129 -0x1.45f306446f9b4p-129 -0x1.45f306446f9b4p-129 -0x1.45f306446f9b4p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-129 0x1.45f306446f9b4p-129 0x1.45f306446f9b4p-129 0x1.45f306446f9b4p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-254 -0x1.0000010000010p-254 -0x1.0000010000010p-254 -0x1.0000010000010p-254)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-254 0x1.0000010000010p-254 0x1.0000010000010p-254 0x1.0000010000010p-254)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+125 0x1.0000000000000p+125 0x1.0000000000000p+125 0x1.0000000000000p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+125 -0x1.0000000000000p+125 -0x1.0000000000000p+125 -0x1.0000000000000p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-4 0x1.45f306446f9b4p-4 0x1.45f306446f9b4p-4 0x1.45f306446f9b4p-4)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-4 -0x1.45f306446f9b4p-4 -0x1.45f306446f9b4p-4 -0x1.45f306446f9b4p-4)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-129 0x1.0000010000010p-129 0x1.0000010000010p-129 0x1.0000010000010p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-129 -0x1.0000010000010p-129 -0x1.0000010000010p-129 -0x1.0000010000010p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+125 -0x1.0000000000000p+125 -0x1.0000000000000p+125 -0x1.0000000000000p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+125 0x1.0000000000000p+125 0x1.0000000000000p+125 0x1.0000000000000p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-4 -0x1.45f306446f9b4p-4 -0x1.45f306446f9b4p-4 -0x1.45f306446f9b4p-4)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-4 0x1.45f306446f9b4p-4 0x1.45f306446f9b4p-4 0x1.45f306446f9b4p-4)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-129 -0x1.0000010000010p-129 -0x1.0000010000010p-129 -0x1.0000010000010p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-129 0x1.0000010000010p-129 0x1.0000010000010p-129 0x1.0000010000010p-129)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+126 0x1.0000000000000p+126 0x1.0000000000000p+126 0x1.0000000000000p+126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+126 -0x1.0000000000000p+126 -0x1.0000000000000p+126 -0x1.0000000000000p+126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-3 0x1.45f306446f9b4p-3 0x1.45f306446f9b4p-3 0x1.45f306446f9b4p-3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-3 -0x1.45f306446f9b4p-3 -0x1.45f306446f9b4p-3 -0x1.45f306446f9b4p-3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-128 0x1.0000010000010p-128 0x1.0000010000010p-128 0x1.0000010000010p-128)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-128 -0x1.0000010000010p-128 -0x1.0000010000010p-128 -0x1.0000010000010p-128)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+126 -0x1.0000000000000p+126 -0x1.0000000000000p+126 -0x1.0000000000000p+126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+126 0x1.0000000000000p+126 0x1.0000000000000p+126 0x1.0000000000000p+126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f306446f9b4p-3 -0x1.45f306446f9b4p-3 -0x1.45f306446f9b4p-3 -0x1.45f306446f9b4p-3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.45f306446f9b4p-3 0x1.45f306446f9b4p-3 0x1.45f306446f9b4p-3 0x1.45f306446f9b4p-3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000010000010p-128 -0x1.0000010000010p-128 -0x1.0000010000010p-128 -0x1.0000010000010p-128)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000010000010p-128 0x1.0000010000010p-128 0x1.0000010000010p-128 0x1.0000010000010p-128)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.921fb7921fb79p-126 0x1.921fb7921fb79p-126 0x1.921fb7921fb79p-126 0x1.921fb7921fb79p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.921fb7921fb79p-126 -0x1.921fb7921fb79p-126 -0x1.921fb7921fb79p-126 -0x1.921fb7921fb79p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3 -0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3 0x1.921fb60000000p+3)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.921fb7921fb79p-126 -0x1.921fb7921fb79p-126 -0x1.921fb7921fb79p-126 -0x1.921fb7921fb79p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.921fb7921fb79p-126 0x1.921fb7921fb79p-126 0x1.921fb7921fb79p-126 0x1.921fb7921fb79p-126)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.45f304fe7c950p+125 0x1.45f304fe7c950p+125 0x1.45f304fe7c950p+125 0x1.45f304fe7c950p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f304fe7c950p+125 -0x1.45f304fe7c950p+125 -0x1.45f304fe7c950p+125 -0x1.45f304fe7c950p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.45f304fe7c950p+125 -0x1.45f304fe7c950p+125 -0x1.45f304fe7c950p+125 -0x1.45f304fe7c950p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.45f304fe7c950p+125 0x1.45f304fe7c950p+125 0x1.45f304fe7c950p+125 0x1.45f304fe7c950p+125)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.div" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.6a09e667f3bcdp-75 0x1.6a09e667f3bcdp-75 0x1.6a09e667f3bcdp-75 0x1.6a09e667f3bcdp-75)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-63 0x1.0000000000000p-63 0x1.0000000000000p-63 0x1.0000000000000p-63)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.6a09e667f3bcdp-1 0x1.6a09e667f3bcdp-1 0x1.6a09e667f3bcdp-1 0x1.6a09e667f3bcdp-1)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.40d9324a48138p+1 0x1.40d9324a48138p+1 0x1.40d9324a48138p+1 0x1.40d9324a48138p+1)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffeffffffcp+63 0x1.fffffeffffffcp+63 0x1.fffffeffffffcp+63 0x1.fffffeffffffcp+63)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 11111.111060555555 11111.111060555555 11111.111060555555 11111.111060555555)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 35136418286444.62 35136418286444.62 35136418286444.62 35136418286444.62)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 35136418286444.62 35136418286444.62 35136418286444.62 35136418286444.62)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 3.5136418286444623e-06 3.5136418286444623e-06 3.5136418286444623e-06 3.5136418286444623e-06)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 11111.111060555555 11111.111060555555 11111.111060555555 11111.111060555555)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 35136418286444.62 35136418286444.62 35136418286444.62 35136418286444.62)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 35136418286444.62 35136418286444.62 35136418286444.62 35136418286444.62)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 3.5136418286444623e-06 3.5136418286444623e-06 3.5136418286444623e-06 3.5136418286444623e-06)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 11111.11106111111 11111.11106111111 11111.11106111111 11111.11106111111)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 35136418288201.445 35136418288201.445 35136418288201.445 35136418288201.445)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 35136418288201.445 35136418288201.445 35136418288201.445 35136418288201.445)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 3.513641828820144e-06 3.513641828820144e-06 3.513641828820144e-06 3.513641828820144e-06)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.1111111111111p+28 0x1.1111111111111p+28 0x1.1111111111111p+28 0x1.1111111111111p+28)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.1111111111111p+28 0x1.1111111111111p+28 0x1.1111111111111p+28 0x1.1111111111111p+28)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.1111111111111p+28 0x1.1111111111111p+28 0x1.1111111111111p+28 0x1.1111111111111p+28)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37 0x1.822cb17ff2eb8p+37)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18 0x1.822cb17ff2eb8p+18)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -123456789.0 -123456789.0 -123456789.0 -123456789.0)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -1.23456789e-11 -1.23456789e-11 -1.23456789e-11 -1.23456789e-11)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -123456789.0 -123456789.0 -123456789.0 -123456789.0)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -1.23456789e-11 -1.23456789e-11 -1.23456789e-11 -1.23456789e-11)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -123456789.01234567 -123456789.01234567 -123456789.01234567 -123456789.01234567)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -1.2345678901234569e+27 -1.2345678901234569e+27 -1.2345678901234569e+27 -1.2345678901234569e+27)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -1.2345678901234569e+27 -1.2345678901234569e+27 -1.2345678901234569e+27 -1.2345678901234569e+27)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -1.2345678901234568e-11 -1.2345678901234568e-11 -1.2345678901234568e-11 -1.2345678901234568e-11)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56 -0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75 -0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37 -0x1.23456789abcdfp+37)) ;; Mixed f32x4 tests when some lanes are NaNs (module (func (export "f32x4_sqrt_arith") (result v128) (f32x4.sqrt (v128.const f32x4 nan:0x200000 -nan:0x200000 16.0 25.0))) (func (export "f32x4_sqrt_canon") (result v128) (f32x4.sqrt (v128.const f32x4 -1.0 nan 4.0 9.0))) (func (export "f32x4_sqrt_mixed") (result v128) (f32x4.sqrt (v128.const f32x4 -inf nan:0x200000 36.0 49.0))) ) (assert_return (invoke "f32x4_sqrt_arith") (v128.const f32x4 nan:arithmetic nan:arithmetic 4.0 5.0)) (assert_return (invoke "f32x4_sqrt_canon") (v128.const f32x4 nan:canonical nan:canonical 2.0 3.0)) (assert_return (invoke "f32x4_sqrt_mixed") (v128.const f32x4 nan:canonical nan:arithmetic 6.0 7.0)) ;; type check (assert_invalid (module (func (result v128) (f32x4.neg (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.sqrt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.add (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.sub (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.mul (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.div (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f32x4.neg-arg-empty (result v128) (f32x4.neg) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.sqrt-arg-empty (result v128) (f32x4.sqrt) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.add-1st-arg-empty (result v128) (f32x4.add (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.add-arg-empty (result v128) (f32x4.add) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.sub-1st-arg-empty (result v128) (f32x4.sub (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.sub-arg-empty (result v128) (f32x4.sub) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.mul-1st-arg-empty (result v128) (f32x4.mul (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.mul-arg-empty (result v128) (f32x4.mul) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.div-1st-arg-empty (result v128) (f32x4.div (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.div-arg-empty (result v128) (f32x4.div) ) ) "type mismatch" ) ;; combination (module (func (export "add-sub") (param v128 v128 v128) (result v128) (f32x4.add (f32x4.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "div-add") (param v128 v128 v128) (result v128) (f32x4.div (f32x4.add (local.get 0) (local.get 1))(local.get 2))) (func (export "div-mul") (param v128 v128 v128) (result v128) (f32x4.div (f32x4.mul (local.get 0) (local.get 1))(local.get 2))) (func (export "div-sub") (param v128 v128 v128) (result v128) (f32x4.div (f32x4.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-add") (param v128 v128 v128) (result v128) (f32x4.mul (f32x4.add (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-div") (param v128 v128 v128) (result v128) (f32x4.mul (f32x4.div (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-sub") (param v128 v128 v128) (result v128) (f32x4.mul (f32x4.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "sub-add") (param v128 v128 v128) (result v128) (f32x4.sub (f32x4.add (local.get 0) (local.get 1))(local.get 2))) (func (export "add-neg") (param v128 v128) (result v128) (f32x4.add (f32x4.neg (local.get 0)) (local.get 1))) (func (export "add-sqrt") (param v128 v128) (result v128) (f32x4.add (f32x4.sqrt (local.get 0)) (local.get 1))) (func (export "div-neg") (param v128 v128) (result v128) (f32x4.div (f32x4.neg (local.get 0)) (local.get 1))) (func (export "div-sqrt") (param v128 v128) (result v128) (f32x4.div (f32x4.sqrt (local.get 0)) (local.get 1))) (func (export "mul-neg") (param v128 v128) (result v128) (f32x4.mul (f32x4.neg (local.get 0)) (local.get 1))) (func (export "mul-sqrt") (param v128 v128) (result v128) (f32x4.mul (f32x4.sqrt (local.get 0)) (local.get 1))) (func (export "sub-neg") (param v128 v128) (result v128) (f32x4.sub (f32x4.neg (local.get 0)) (local.get 1))) (func (export "sub-sqrt") (param v128 v128) (result v128) (f32x4.sub (f32x4.sqrt (local.get 0)) (local.get 1))) ) (assert_return (invoke "add-sub" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.25 0.25 0.25 0.25) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "div-add" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.125 0.125 0.125 0.125) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 5.0 5.0 5.0 5.0)) (assert_return (invoke "div-mul" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 4 4 4 4) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 18.0 18.0 18.0 18.0)) (assert_return (invoke "div-sub" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.125 0.125 0.125 0.125) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 4.0 4.0 4.0 4.0)) (assert_return (invoke "mul-add" (v128.const f32x4 1.25 1.25 1.25 1.25) (v128.const f32x4 0.25 0.25 0.25 0.25) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 0.375 0.375 0.375 0.375)) (assert_return (invoke "mul-div" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.125 0.125 0.125 0.125) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 2.25 2.25 2.25 2.25)) (assert_return (invoke "mul-sub" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.125 0.125 0.125 0.125) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 0.25 0.25 0.25 0.25)) (assert_return (invoke "sub-add" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.25 0.25 0.25 0.25) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 1.25 1.25 1.25 1.25)) (assert_return (invoke "add-neg" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (assert_return (invoke "add-sqrt" (v128.const f32x4 2.25 2.25 2.25 2.25) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 1.75 1.75 1.75 1.75)) (assert_return (invoke "div-neg" (v128.const f32x4 1.5 1.5 1.5 1.5) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 -6 -6 -6 -6)) (assert_return (invoke "div-sqrt" (v128.const f32x4 2.25 2.25 2.25 2.25) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 6 6 6 6)) (assert_return (invoke "mul-neg" (v128.const f32x4 1.5 1.5 1.5 1.5) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 -0.375 -0.375 -0.375 -0.375)) (assert_return (invoke "mul-sqrt" (v128.const f32x4 2.25 2.25 2.25 2.25) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 0.375 0.375 0.375 0.375)) (assert_return (invoke "sub-neg" (v128.const f32x4 1.125 1.125 1.125 1.125) (v128.const f32x4 0.125 0.125 0.125 0.125)) (v128.const f32x4 -1.25 -1.25 -1.25 -1.25)) (assert_return (invoke "sub-sqrt" (v128.const f32x4 2.25 2.25 2.25 2.25) (v128.const f32x4 0.25 0.25 0.25 0.25)) (v128.const f32x4 1.25 1.25 1.25 1.25)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f32x4_cmp.wast ================================================ ;; Test all the f32x4 comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) (f32x4.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) (f32x4.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x v128) (param $y v128) (result v128) (f32x4.lt (local.get $x) (local.get $y))) (func (export "le") (param $x v128) (param $y v128) (result v128) (f32x4.le (local.get $x) (local.get $y))) (func (export "gt") (param $x v128) (param $y v128) (result v128) (f32x4.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x v128) (param $y v128) (result v128) (f32x4.ge (local.get $x) (local.get $y))) ) ;; eq (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) ;; ne (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) ;; lt (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) ;; le (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) ;; gt (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) ;; ge (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const i32x4 -1 -1 -1 -1)) ;; eq ;; f32x4.eq (f32x4) (i8x16) (assert_return (invoke "eq" (v128.const f32x4 -1 0 1 2.0) (v128.const i8x16 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2)) (v128.const i32x4 0 -1 0 0)) ;; f32x4.eq (f32x4) (i16x8) (assert_return (invoke "eq" (v128.const f32x4 -1 0 1 2.0) (v128.const i16x8 -1 -1 0 0 1 1 2 2)) (v128.const i32x4 0 -1 0 0)) ;; f32x4.eq (f32x4) (i32x4) (assert_return (invoke "eq" (v128.const f32x4 -1 0 1 2.0) (v128.const i32x4 3212836864 0 1 2)) (v128.const i32x4 -1 -1 0 0 )) ;; ne ;; f32x4.ne (f32x4) (i8x16) (assert_return (invoke "ne" (v128.const f32x4 -1 0 1 2.0) (v128.const i8x16 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2)) (v128.const i32x4 -1 0 -1 -1)) ;; f32x4.ne (f32x4) (i16x8) (assert_return (invoke "ne" (v128.const f32x4 -1 0 1 2.0) (v128.const i16x8 -1 -1 0 0 1 1 2 2)) (v128.const i32x4 -1 0 -1 -1)) ;; f32x4.ne (f32x4) (i32x4) (assert_return (invoke "ne" (v128.const f32x4 -1 0 1 2.0) (v128.const i32x4 3212836864 0 1 2)) (v128.const i32x4 0 0 -1 -1)) ;; lt ;; f32x4.lt (f32x4) (i8x16) (assert_return (invoke "lt" (v128.const f32x4 -1 0 1 2.0) (v128.const i8x16 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2)) (v128.const i32x4 0 0 0 0)) ;; f32x4.lt (f32x4) (i16x8) (assert_return (invoke "lt" (v128.const f32x4 -1 0 1 2.0) (v128.const i16x8 -1 -1 0 0 1 1 2 2)) (v128.const i32x4 0 0 0 0)) ;; f32x4.lt (f32x4) (i32x4) (assert_return (invoke "lt" (v128.const f32x4 -1 0 1 2.0) (v128.const i32x4 3212836864 0 1 2)) (v128.const i32x4 0 0 0 0)) ;; le ;; f32x4.le (f32x4) (i8x16) (assert_return (invoke "le" (v128.const f32x4 -1 0 1 2.0) (v128.const i8x16 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2)) (v128.const i32x4 0 -1 0 0)) ;; f32x4.le (f32x4) (i16x8) (assert_return (invoke "le" (v128.const f32x4 -1 0 1 2.0) (v128.const i16x8 -1 -1 0 0 1 1 2 2)) (v128.const i32x4 0 -1 0 0)) ;; f32x4.le (f32x4) (i32x4) (assert_return (invoke "le" (v128.const f32x4 -1 0 1 2.0) (v128.const i32x4 3212836864 0 1 2)) (v128.const i32x4 -1 -1 0 0)) ;; gt ;; f32x4.gt (f32x4) (i8x16) (assert_return (invoke "gt" (v128.const f32x4 -1 0 1 2.0) (v128.const i8x16 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2)) (v128.const i32x4 0 0 -1 -1)) ;; f32x4.gt (f32x4) (i16x8) (assert_return (invoke "gt" (v128.const f32x4 -1 0 1 2.0) (v128.const i16x8 -1 -1 0 0 1 1 2 2)) (v128.const i32x4 0 0 -1 -1)) ;; f32x4.gt (f32x4) (i32x4) (assert_return (invoke "gt" (v128.const f32x4 -1 0 1 2.0) (v128.const i32x4 3212836864 0 1 2)) (v128.const i32x4 0 0 -1 -1)) ;; ge ;; f32x4.ge (f32x4) (i8x16) (assert_return (invoke "ge" (v128.const f32x4 -1 0 1 2.0) (v128.const i8x16 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2)) (v128.const i32x4 0 -1 -1 -1)) ;; f32x4.ge (f32x4) (i16x8) (assert_return (invoke "ge" (v128.const f32x4 -1 0 1 2.0) (v128.const i16x8 -1 -1 0 0 1 1 2 2)) (v128.const i32x4 0 -1 -1 -1)) ;; f32x4.ge (f32x4) (i32x4) (assert_return (invoke "ge" (v128.const f32x4 -1 0 1 2.0) (v128.const i32x4 3212836864 0 1 2)) (v128.const i32x4 -1 -1 -1 -1)) ;; Type check (assert_invalid (module (func (result v128) (f32x4.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.ne (i64.const 0) (f64.const 0)))) "type mismatch") ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.eq (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.ge (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.gt (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.le (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.lt (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f4x32.ne (local.get $x) (local.get $y)))") "unknown operator") ;; Combination (module (memory 1) (func (export "eq-in-block") (block (drop (block (result v128) (f32x4.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ne-in-block") (block (drop (block (result v128) (f32x4.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "lt-in-block") (block (drop (block (result v128) (f32x4.lt (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "le-in-block") (block (drop (block (result v128) (f32x4.le (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "gt-in-block") (block (drop (block (result v128) (f32x4.gt (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ge-in-block") (block (drop (block (result v128) (f32x4.ge (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-eq") (drop (f32x4.eq (f32x4.eq (f32x4.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.eq (f32x4.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ne") (drop (f32x4.ne (f32x4.ne (f32x4.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.ne (f32x4.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-lt") (drop (f32x4.lt (f32x4.lt (f32x4.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.lt (f32x4.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-le") (drop (f32x4.le (f32x4.le (f32x4.le (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.le (f32x4.le (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-gt") (drop (f32x4.gt (f32x4.gt (f32x4.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.gt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.gt (f32x4.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.gt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ge") (drop (f32x4.ge (f32x4.ge (f32x4.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ge (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.ge (f32x4.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.ge (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop (f32x4.ge (f32x4.eq (f32x4.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f32x4.ne (f32x4.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f32x4.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "eq-in-block")) (assert_return (invoke "ne-in-block")) (assert_return (invoke "lt-in-block")) (assert_return (invoke "le-in-block")) (assert_return (invoke "gt-in-block")) (assert_return (invoke "ge-in-block")) (assert_return (invoke "nested-eq")) (assert_return (invoke "nested-ne")) (assert_return (invoke "nested-lt")) (assert_return (invoke "nested-le")) (assert_return (invoke "nested-gt")) (assert_return (invoke "nested-ge")) (assert_return (invoke "as-param")) ;; Test operation with empty argument (assert_invalid (module (func $f32x4.eq-1st-arg-empty (result v128) (f32x4.eq (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.eq-arg-empty (result v128) (f32x4.eq) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.ne-1st-arg-empty (result v128) (f32x4.ne (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.ne-arg-empty (result v128) (f32x4.ne) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.lt-1st-arg-empty (result v128) (f32x4.lt (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.lt-arg-empty (result v128) (f32x4.lt) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.le-1st-arg-empty (result v128) (f32x4.le (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.le-arg-empty (result v128) (f32x4.le) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.gt-1st-arg-empty (result v128) (f32x4.gt (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.gt-arg-empty (result v128) (f32x4.gt) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.ge-1st-arg-empty (result v128) (f32x4.ge (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.ge-arg-empty (result v128) (f32x4.ge) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f32x4_pmin_pmax.wast ================================================ ;; Tests for f32x4 [pmin, pmax] operations on major boundary values and all special values. (module (func (export "f32x4.pmin") (param v128 v128) (result v128) (f32x4.pmin (local.get 0) (local.get 1))) (func (export "f32x4.pmax") (param v128 v128) (result v128) (f32x4.pmax (local.get 0) (local.get 1))) ) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149 0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149 -0x1.0000000000000p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126 0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126 -0x1.0000000000000p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2 -0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2 0x1.921fb60000000p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56 0x1.23456789abcdfp+56)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75 0x1.23456789abcdfp+75)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37 0x1.23456789abcdfp+37)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan nan nan nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan -nan -nan -nan) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -nan -nan -nan -nan)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 inf inf inf inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -inf -inf -inf -inf) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019) (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (f32x4.pmin (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.pmax (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f32x4.pmin-1st-arg-empty (result v128) (f32x4.pmin (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.pmin-arg-empty (result v128) (f32x4.pmin) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.pmax-1st-arg-empty (result v128) (f32x4.pmax (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.pmax-arg-empty (result v128) (f32x4.pmax) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f32x4_rounding.wast ================================================ ;; Tests for f32x4 [ceil, floor, trunc, nearest] operations on major boundary values and all special values. (module (func (export "f32x4.ceil") (param v128) (result v128) (f32x4.ceil (local.get 0))) (func (export "f32x4.floor") (param v128) (result v128) (f32x4.floor (local.get 0))) (func (export "f32x4.trunc") (param v128) (result v128) (f32x4.trunc (local.get 0))) (func (export "f32x4.nearest") (param v128) (result v128) (f32x4.nearest (local.get 0))) ) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.c000000000000p+2 0x1.c000000000000p+2 0x1.c000000000000p+2 0x1.c000000000000p+2)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.8000000000000p+2 -0x1.8000000000000p+2 -0x1.8000000000000p+2 -0x1.8000000000000p+2)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 123456790.0 123456790.0 123456790.0 123456790.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 156374987062.0 156374987062.0 156374987062.0 156374987062.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 156374987062.0 156374987062.0 156374987062.0 156374987062.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 156374987062.0 156374987062.0 156374987062.0 156374987062.0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.8000000000000p+2 0x1.8000000000000p+2 0x1.8000000000000p+2 0x1.8000000000000p+2)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.c000000000000p+2 -0x1.c000000000000p+2 -0x1.c000000000000p+2 -0x1.c000000000000p+2)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.8000000000000p+2 0x1.8000000000000p+2 0x1.8000000000000p+2 0x1.8000000000000p+2)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.8000000000000p+2 -0x1.8000000000000p+2 -0x1.8000000000000p+2 -0x1.8000000000000p+2)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0p+0 0x0p+0 0x0p+0 0x0p+0)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x0p+0 -0x0p+0 -0x0p+0 -0x0p+0)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const f32x4 0x0.0p+0 0x0.0p+0 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const f32x4 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const f32x4 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const f32x4 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const f32x4 0x1.8000000000000p+2 0x1.8000000000000p+2 0x1.8000000000000p+2 0x1.8000000000000p+2)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const f32x4 -0x1.8000000000000p+2 -0x1.8000000000000p+2 -0x1.8000000000000p+2 -0x1.8000000000000p+2)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const f32x4 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127 0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const f32x4 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127 -0x1.fffffe0000000p+127)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 inf inf inf inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789e+019 0123456789e+019 0123456789e+019 0123456789e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789e-019 0123456789e-019 0123456789e-019 0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.e019 0123456789.e019 0123456789.e019 0123456789.e019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (v128.const f32x4 1.23456789e+27 1.23456789e+27 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.e-019 0123456789.e-019 0123456789.e-019 0123456789.e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789 0123456789.0123456789)) (v128.const f32x4 123456789.0 123456789.0 123456789.0 123456789.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f32x4 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019 0x0123456789ABCDEFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019 0x0123456789ABCDEFp-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019 0x0123456789ABCDEF.p019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019 0x0123456789ABCDEF.p+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF 0x0123456789ABCDEF.019aF)) (v128.const f32x4 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16 8.19855292164869e+16)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019 0x0123456789ABCDEF.019aFp019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019 0x0123456789ABCDEF.019aFp+019)) (v128.const f32x4 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22 4.298402914185348e+22)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019 0x0123456789ABCDEF.019aFp-019)) (v128.const f32x4 156374987061.0 156374987061.0 156374987061.0 156374987061.0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 nan nan nan nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 nan:0x200000 nan:0x200000 nan:0x200000 nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -nan:0x200000 -nan:0x200000 -nan:0x200000 -nan:0x200000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (f32x4.ceil (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.floor (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.trunc (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.nearest (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f32x4.ceil-arg-empty (result v128) (f32x4.ceil) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.floor-arg-empty (result v128) (f32x4.floor) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.trunc-arg-empty (result v128) (f32x4.trunc) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.nearest-arg-empty (result v128) (f32x4.nearest) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f64x2.wast ================================================ ;; Tests for f64x2 [abs, min, max] operations on major boundary values and all special values. (module (func (export "f64x2.min") (param v128 v128) (result v128) (f64x2.min (local.get 0) (local.get 1))) (func (export "f64x2.max") (param v128 v128) (result v128) (f64x2.max (local.get 0) (local.get 1))) (func (export "f64x2.abs") (param v128) (result v128) (f64x2.abs (local.get 0))) ;; f64x2.min const vs const (func (export "f64x2.min_with_const_0") (result v128) (f64x2.min (v128.const f64x2 0 1) (v128.const f64x2 0 2))) (func (export "f64x2.min_with_const_1") (result v128) (f64x2.min (v128.const f64x2 2 -3) (v128.const f64x2 1 3))) (func (export "f64x2.min_with_const_2") (result v128) (f64x2.min (v128.const f64x2 0 1) (v128.const f64x2 0 1))) (func (export "f64x2.min_with_const_3") (result v128) (f64x2.min (v128.const f64x2 2 3) (v128.const f64x2 2 3))) (func (export "f64x2.min_with_const_4") (result v128) (f64x2.min (v128.const f64x2 0x00 0x01) (v128.const f64x2 0x00 0x02))) (func (export "f64x2.min_with_const_5") (result v128) (f64x2.min (v128.const f64x2 0x02 0x80000000) (v128.const f64x2 0x01 2147483648))) (func (export "f64x2.min_with_const_6") (result v128) (f64x2.min (v128.const f64x2 0x00 0x01) (v128.const f64x2 0x00 0x01))) (func (export "f64x2.min_with_const_7") (result v128) (f64x2.min (v128.const f64x2 0x02 0x80000000) (v128.const f64x2 0x02 0x80000000))) ;; f64x2.min param vs const (func (export "f64x2.min_with_const_9") (param v128) (result v128) (f64x2.min (local.get 0) (v128.const f64x2 0 1))) (func (export "f64x2.min_with_const_10") (param v128) (result v128) (f64x2.min (v128.const f64x2 2 -3) (local.get 0))) (func (export "f64x2.min_with_const_11") (param v128) (result v128) (f64x2.min (v128.const f64x2 0 1) (local.get 0))) (func (export "f64x2.min_with_const_12") (param v128) (result v128) (f64x2.min (local.get 0) (v128.const f64x2 2 3))) (func (export "f64x2.min_with_const_13") (param v128) (result v128) (f64x2.min (v128.const f64x2 0x00 0x01) (local.get 0))) (func (export "f64x2.min_with_const_14") (param v128) (result v128) (f64x2.min (v128.const f64x2 0x02 0x80000000) (local.get 0))) (func (export "f64x2.min_with_const_15") (param v128) (result v128) (f64x2.min (v128.const f64x2 0x00 0x01) (local.get 0))) (func (export "f64x2.min_with_const_16") (param v128) (result v128) (f64x2.min (v128.const f64x2 0x02 0x80000000) (local.get 0))) ;; f64x2.max const vs const (func (export "f64x2.max_with_const_18") (result v128) (f64x2.max (v128.const f64x2 0 1) (v128.const f64x2 0 2))) (func (export "f64x2.max_with_const_19") (result v128) (f64x2.max (v128.const f64x2 2 -3) (v128.const f64x2 1 3))) (func (export "f64x2.max_with_const_20") (result v128) (f64x2.max (v128.const f64x2 0 1) (v128.const f64x2 0 1))) (func (export "f64x2.max_with_const_21") (result v128) (f64x2.max (v128.const f64x2 2 3) (v128.const f64x2 2 3))) (func (export "f64x2.max_with_const_22") (result v128) (f64x2.max (v128.const f64x2 0x00 0x01) (v128.const f64x2 0x00 0x02))) (func (export "f64x2.max_with_const_23") (result v128) (f64x2.max (v128.const f64x2 0x02 0x80000000) (v128.const f64x2 0x01 2147483648))) (func (export "f64x2.max_with_const_24") (result v128) (f64x2.max (v128.const f64x2 0x00 0x01) (v128.const f64x2 0x00 0x01))) (func (export "f64x2.max_with_const_25") (result v128) (f64x2.max (v128.const f64x2 0x02 0x80000000) (v128.const f64x2 0x02 0x80000000))) ;; f64x2.max param vs const (func (export "f64x2.max_with_const_27") (param v128) (result v128) (f64x2.max (local.get 0) (v128.const f64x2 0 1))) (func (export "f64x2.max_with_const_28") (param v128) (result v128) (f64x2.max (v128.const f64x2 2 -3) (local.get 0))) (func (export "f64x2.max_with_const_29") (param v128) (result v128) (f64x2.max (v128.const f64x2 0 1) (local.get 0))) (func (export "f64x2.max_with_const_30") (param v128) (result v128) (f64x2.max (local.get 0) (v128.const f64x2 2 3))) (func (export "f64x2.max_with_const_31") (param v128) (result v128) (f64x2.max (v128.const f64x2 0x00 0x01) (local.get 0))) (func (export "f64x2.max_with_const_32") (param v128) (result v128) (f64x2.max (v128.const f64x2 0x02 0x80000000) (local.get 0))) (func (export "f64x2.max_with_const_33") (param v128) (result v128) (f64x2.max (v128.const f64x2 0x00 0x01) (local.get 0))) (func (export "f64x2.max_with_const_34") (param v128) (result v128) (f64x2.max (v128.const f64x2 0x02 0x80000000) (local.get 0))) (func (export "f64x2.abs_with_const_35") (result v128) (f64x2.abs (v128.const f64x2 -0 -1))) (func (export "f64x2.abs_with_const_36") (result v128) (f64x2.abs (v128.const f64x2 -2 -3))) ) ;; f64x2.min const vs const (assert_return (invoke "f64x2.min_with_const_0") (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.min_with_const_1") (v128.const f64x2 1 -3)) (assert_return (invoke "f64x2.min_with_const_2") (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.min_with_const_3") (v128.const f64x2 2 3)) ;; f64x2.min param vs const (assert_return (invoke "f64x2.min_with_const_4") (v128.const f64x2 0x00 0x01)) (assert_return (invoke "f64x2.min_with_const_5") (v128.const f64x2 0x01 0x80000000)) (assert_return (invoke "f64x2.min_with_const_6") (v128.const f64x2 0x00 0x01)) (assert_return (invoke "f64x2.min_with_const_7") (v128.const f64x2 0x02 0x80000000)) (assert_return (invoke "f64x2.min_with_const_9" (v128.const f64x2 0 2)) (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.min_with_const_10" (v128.const f64x2 1 3)) (v128.const f64x2 1 -3)) (assert_return (invoke "f64x2.min_with_const_11" (v128.const f64x2 0 1)) (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.min_with_const_12" (v128.const f64x2 2 3)) (v128.const f64x2 2 3)) (assert_return (invoke "f64x2.min_with_const_13" (v128.const f64x2 0x00 0x02)) (v128.const f64x2 0x00 0x01)) (assert_return (invoke "f64x2.min_with_const_14" (v128.const f64x2 0x01 2147483648)) (v128.const f64x2 0x01 0x80000000)) (assert_return (invoke "f64x2.min_with_const_15" (v128.const f64x2 0x00 0x01)) (v128.const f64x2 0x00 0x01)) (assert_return (invoke "f64x2.min_with_const_16" (v128.const f64x2 0x02 0x80000000)) (v128.const f64x2 0x02 0x80000000)) ;; f64x2.max const vs const (assert_return (invoke "f64x2.max_with_const_18") (v128.const f64x2 0 2)) (assert_return (invoke "f64x2.max_with_const_19") (v128.const f64x2 2 3)) (assert_return (invoke "f64x2.max_with_const_20") (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.max_with_const_21") (v128.const f64x2 2 3)) ;; f64x2.max param vs const (assert_return (invoke "f64x2.max_with_const_22") (v128.const f64x2 0x00 0x02)) (assert_return (invoke "f64x2.max_with_const_23") (v128.const f64x2 0x02 2147483648)) (assert_return (invoke "f64x2.max_with_const_24") (v128.const f64x2 0x00 0x01)) (assert_return (invoke "f64x2.max_with_const_25") (v128.const f64x2 0x02 0x80000000)) (assert_return (invoke "f64x2.max_with_const_27" (v128.const f64x2 0 2)) (v128.const f64x2 0 2)) (assert_return (invoke "f64x2.max_with_const_28" (v128.const f64x2 1 3)) (v128.const f64x2 2 3)) (assert_return (invoke "f64x2.max_with_const_29" (v128.const f64x2 0 1)) (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.max_with_const_30" (v128.const f64x2 2 3)) (v128.const f64x2 2 3)) (assert_return (invoke "f64x2.max_with_const_31" (v128.const f64x2 0x00 0x02)) (v128.const f64x2 0x00 0x02)) (assert_return (invoke "f64x2.max_with_const_32" (v128.const f64x2 0x01 2147483648)) (v128.const f64x2 0x02 2147483648)) (assert_return (invoke "f64x2.max_with_const_33" (v128.const f64x2 0x00 0x01)) (v128.const f64x2 0x00 0x01)) (assert_return (invoke "f64x2.max_with_const_34" (v128.const f64x2 0x02 0x80000000)) (v128.const f64x2 0x02 0x80000000)) (assert_return (invoke "f64x2.abs_with_const_35") (v128.const f64x2 0 1)) (assert_return (invoke "f64x2.abs_with_const_36") (v128.const f64x2 2 3)) ;; Test different lanes go through different if-then clauses ;; f64x2.min (assert_return (invoke "f64x2.min" (v128.const f64x2 nan 0) (v128.const f64x2 0 1) ) (v128.const f64x2 nan:canonical 0) ) ;; f64x2.min (assert_return (invoke "f64x2.min" (v128.const f64x2 0 1) (v128.const f64x2 -nan 0) ) (v128.const f64x2 nan:canonical 0) ) ;; f64x2.min (assert_return (invoke "f64x2.min" (v128.const f64x2 0 1) (v128.const f64x2 -nan 1) ) (v128.const f64x2 nan:canonical 1) ) ;; f64x2.max (assert_return (invoke "f64x2.max" (v128.const f64x2 nan 0) (v128.const f64x2 0 1) ) (v128.const f64x2 nan:canonical 1) ) ;; f64x2.max (assert_return (invoke "f64x2.max" (v128.const f64x2 0 1) (v128.const f64x2 -nan 0) ) (v128.const f64x2 nan:canonical 1) ) ;; f64x2.max (assert_return (invoke "f64x2.max" (v128.const f64x2 0 1) (v128.const f64x2 -nan 1) ) (v128.const f64x2 nan:canonical 1) ) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.min" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) ;; Test opposite signs of zero (assert_return (invoke "f64x2.min" (v128.const f64x2 0 0) (v128.const f64x2 +0 -0)) (v128.const f64x2 0 -0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0 +0) (v128.const f64x2 +0 -0)) (v128.const f64x2 -0 -0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0 -0) (v128.const f64x2 +0 +0)) (v128.const f64x2 -0 -0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 0 0) (v128.const f64x2 +0 -0)) (v128.const f64x2 0 0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0 +0) (v128.const f64x2 +0 -0)) (v128.const f64x2 0 0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0 -0) (v128.const f64x2 +0 +0)) (v128.const f64x2 +0 +0)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const f64x2 0123456789.e038 0123456789.e038)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -01234567890123456789.01234567890123456789 -01234567890123456789.01234567890123456789)) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) ;; type check (assert_invalid (module (func (result v128) (f64x2.abs (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.min (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.max (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f64x2.abs-arg-empty (result v128) (f64x2.abs) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.min-1st-arg-empty (result v128) (f64x2.min (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.min-arg-empty (result v128) (f64x2.min) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.max-1st-arg-empty (result v128) (f64x2.max (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.max-arg-empty (result v128) (f64x2.max) ) ) "type mismatch" ) ;; combination (module (func (export "max-min") (param v128 v128 v128) (result v128) (f64x2.max (f64x2.min (local.get 0) (local.get 1))(local.get 2))) (func (export "min-max") (param v128 v128 v128) (result v128) (f64x2.min (f64x2.max (local.get 0) (local.get 1))(local.get 2))) (func (export "max-abs") (param v128 v128) (result v128) (f64x2.max (f64x2.abs (local.get 0)) (local.get 1))) (func (export "min-abs") (param v128 v128) (result v128) (f64x2.min (f64x2.abs (local.get 0)) (local.get 1))) ) (assert_return (invoke "max-min" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.25 0.25) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 0.25 0.25)) (assert_return (invoke "min-max" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.25 0.25) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 0.125 0.125)) (assert_return (invoke "max-abs" (v128.const f64x2 -1.125 -1.125) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 1.125 1.125)) (assert_return (invoke "min-abs" (v128.const f64x2 -1.125 -1.125) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 0.125 0.125)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f64x2_arith.wast ================================================ ;; Tests for f64x2 arithmetic operations on major boundary values and all special values. (module (func (export "f64x2.add") (param v128 v128) (result v128) (f64x2.add (local.get 0) (local.get 1))) (func (export "f64x2.sub") (param v128 v128) (result v128) (f64x2.sub (local.get 0) (local.get 1))) (func (export "f64x2.mul") (param v128 v128) (result v128) (f64x2.mul (local.get 0) (local.get 1))) (func (export "f64x2.div") (param v128 v128) (result v128) (f64x2.div (local.get 0) (local.get 1))) (func (export "f64x2.neg") (param v128) (result v128) (f64x2.neg (local.get 0))) (func (export "f64x2.sqrt") (param v128) (result v128) (f64x2.sqrt (local.get 0))) ) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1021 0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000001p-1022 0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000001p-1022 0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1021 -0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.fffffffffffffp-1022 -0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.fffffffffffffp-1022 -0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b21fb54442d18p+2 0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.721fb54442d18p+2 -0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.721fb54442d18p+2 0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.b21fb54442d18p+2 -0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d21fb54442d18p+2 0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.521fb54442d18p+2 -0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.521fb54442d18p+2 0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.d21fb54442d18p+2 -0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.b21fb54442d18p+2 0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.721fb54442d18p+2 0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.d21fb54442d18p+2 0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.521fb54442d18p+2 0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+3 0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.721fb54442d18p+2 -0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.b21fb54442d18p+2 -0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.521fb54442d18p+2 -0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.d21fb54442d18p+2 -0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+3 -0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000001p-1022 0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.fffffffffffffp-1022 -0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000002p-1022 0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000002p-1022 0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000001p-1022 0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.fffffffffffffp-1022 -0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000002p-1022 0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000002p-1022 0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 246913578.0 246913578.0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 2.46913578e-11 2.46913578e-11)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 246913578.0 246913578.0)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 2.46913578e+27 2.46913578e+27)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 2.46913578e-11 2.46913578e-11)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 246913578.02469134 246913578.02469134)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 2.4691357802469137e+27 2.4691357802469137e+27)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 2.4691357802469137e+27 2.4691357802469137e+27)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 2.4691357802469137e-11 2.4691357802469137e-11)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+81 0x1.23456789abcdfp+81)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+100 0x1.23456789abcdfp+100)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+100 0x1.23456789abcdfp+100)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+62 0x1.23456789abcdfp+62)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+81 0x1.23456789abcdfp+81)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+100 0x1.23456789abcdfp+100)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+100 0x1.23456789abcdfp+100)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+62 0x1.23456789abcdfp+62)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+81 0x1.23456789abcdfp+81)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+100 0x1.23456789abcdfp+100)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+100 0x1.23456789abcdfp+100)) (assert_return (invoke "f64x2.add" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+62 0x1.23456789abcdfp+62)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1021 0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.fffffffffffffp-1022 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.fffffffffffffp-1022 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1021 -0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000001p-1022 -0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000001p-1022 -0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.721fb54442d18p+2 -0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b21fb54442d18p+2 0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.b21fb54442d18p+2 -0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.721fb54442d18p+2 0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.8000000000000p+0 0x1.8000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.521fb54442d18p+2 -0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d21fb54442d18p+2 0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.8000000000000p+0 -0x1.8000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.d21fb54442d18p+2 -0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.521fb54442d18p+2 0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.721fb54442d18p+2 0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.b21fb54442d18p+2 0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.521fb54442d18p+2 0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.d21fb54442d18p+2 0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+3 0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.b21fb54442d18p+2 -0x1.b21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.721fb54442d18p+2 -0x1.721fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.d21fb54442d18p+2 -0x1.d21fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.521fb54442d18p+2 -0x1.521fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+3 -0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.fffffffffffffp-1022 -0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000001p-1022 0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.fffffffffffffp-1022 -0x0.fffffffffffffp-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000001p-1022 0x1.0000000000001p-1022)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.8000000000000p-1022 0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.8000000000000p-1022 -0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p-1020 0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p-1020 -0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1 0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1 -0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x0.8000000000000p-1022 -0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.8000000000000p-1022 0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p-1020 -0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p-1020 0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1 -0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1 0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.8000000000000p-1022 0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.8000000000000p-1022 -0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-2 0x1.0000000000000p-2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-2 -0x1.0000000000000p-2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+1 0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+1 -0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1022 0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1022 -0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.8000000000000p-1022 -0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.8000000000000p-1022 0x0.8000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-2 -0x1.0000000000000p-2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-2 0x1.0000000000000p-2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+1 -0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+1 0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1022 -0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1022 0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p-1020 0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p-1020 -0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+1 0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+1 -0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.3bd3cc9be45dep+5 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.3bd3cc9be45dep+5 -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000006p-1022 0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000006p-1022 0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p-1020 -0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p-1020 0x1.921fb54442d18p-1020)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+1 -0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+1 0x1.921fb54442d18p+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.3bd3cc9be45dep+5 -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.3bd3cc9be45dep+5 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000006p-1022 -0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000006p-1022 -0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1 0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1 -0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1022 0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1022 -0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp-51 0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp-51 0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1 -0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1 0x1.fffffffffffffp+1)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1022 -0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1022 0x1.fffffffffffffp+1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp-51 -0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp-51 -0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000006p-1022 0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0000000000006p-1022 -0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp-51 0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp-51 -0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000006p-1022 0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0000000000006p-1022 -0x0.0000000000006p-1022)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp-51 0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp-51 -0x1.fffffffffffffp-51)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 1.524157875019052e+16 1.524157875019052e+16)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 1.524157875019052e+54 1.524157875019052e+54)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 1.524157875019052e+54 1.524157875019052e+54)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 1.524157875019052e-22 1.524157875019052e-22)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 1.524157875019052e+16 1.524157875019052e+16)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 1.524157875019052e+54 1.524157875019052e+54)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 1.524157875019052e+54 1.524157875019052e+54)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 1.524157875019052e-22 1.524157875019052e-22)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 1.5241578753238834e+16 1.5241578753238834e+16)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 1.5241578753238838e+54 1.5241578753238838e+54)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 1.5241578753238838e+54 1.5241578753238838e+54)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 1.524157875323884e-22 1.524157875323884e-22)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.4b66dc33f6acep+160 0x1.4b66dc33f6acep+160)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.4b66dc33f6acep+198 0x1.4b66dc33f6acep+198)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.4b66dc33f6acep+198 0x1.4b66dc33f6acep+198)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.4b66dc33f6acep+122 0x1.4b66dc33f6acep+122)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.4b66dc33f6acep+160 0x1.4b66dc33f6acep+160)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.4b66dc33f6acep+198 0x1.4b66dc33f6acep+198)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.4b66dc33f6acep+198 0x1.4b66dc33f6acep+198)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.4b66dc33f6acep+122 0x1.4b66dc33f6acep+122)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.4b66dc33f6acep+160 0x1.4b66dc33f6acep+160)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.4b66dc33f6acep+198 0x1.4b66dc33f6acep+198)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.4b66dc33f6acep+198 0x1.4b66dc33f6acep+198)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.4b66dc33f6acep+122 0x1.4b66dc33f6acep+122)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1021 0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1021 -0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.28be60db93910p-1022 0x0.28be60db93910p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.28be60db93910p-1022 -0x0.28be60db93910p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+52 0x1.0000000000000p+52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+52 0x1.0000000000000p+52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1021 -0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1021 0x1.0000000000000p-1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.28be60db93910p-1022 -0x0.28be60db93910p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.28be60db93910p-1022 0x0.28be60db93910p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+52 -0x1.0000000000000p+52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+52 -0x1.0000000000000p+52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+1021 0x1.0000000000000p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+1021 -0x1.0000000000000p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.45f306dc9c883p-4 0x1.45f306dc9c883p-4)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.45f306dc9c883p-4 -0x1.45f306dc9c883p-4)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.2000000000000p-1022 0x0.2000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.2000000000000p-1022 -0x0.2000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+1021 -0x1.0000000000000p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+1021 0x1.0000000000000p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.45f306dc9c883p-4 -0x1.45f306dc9c883p-4)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.45f306dc9c883p-4 0x1.45f306dc9c883p-4)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.2000000000000p-1022 -0x0.2000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.2000000000000p-1022 0x0.2000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+1022 0x1.0000000000000p+1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+1022 -0x1.0000000000000p+1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.45f306dc9c883p-3 0x1.45f306dc9c883p-3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.45f306dc9c883p-3 -0x1.45f306dc9c883p-3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.4000000000000p-1022 0x0.4000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.4000000000000p-1022 -0x0.4000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+1022 -0x1.0000000000000p+1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+1022 0x1.0000000000000p+1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+1 -0x1.0000000000000p+1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p+1 0x1.0000000000000p+1)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.45f306dc9c883p-3 -0x1.45f306dc9c883p-3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.45f306dc9c883p-3 0x1.45f306dc9c883p-3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.4000000000000p-1022 -0x0.4000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.4000000000000p-1022 0x0.4000000000000p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+3 0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+3 -0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.921fb54442d19p-1022 0x1.921fb54442d19p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.921fb54442d19p-1022 -0x1.921fb54442d19p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+3 -0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+3 0x1.921fb54442d18p+3)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.921fb54442d19p-1022 -0x1.921fb54442d19p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.921fb54442d19p-1022 0x1.921fb54442d19p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.45f306dc9c882p+1021 0x1.45f306dc9c882p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.45f306dc9c882p+1021 -0x1.45f306dc9c882p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.45f306dc9c882p+1021 -0x1.45f306dc9c882p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.45f306dc9c882p+1021 0x1.45f306dc9c882p+1021)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-52 0x1.0000000000000p-52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-52 -0x1.0000000000000p-52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0000000000002p-1022 0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-52 0x1.0000000000000p-52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-52 -0x1.0000000000000p-52)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0000000000002p-1022 0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0000000000002p-1022 -0x0.0000000000002p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.div" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-511 0x1.0000000000000p-511)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.6a09e667f3bcdp-1 0x1.6a09e667f3bcdp-1)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.40d931ff62705p+1 0x1.40d931ff62705p+1)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+511 0x1.fffffffffffffp+511)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-537 0x1.0000000000000p-537)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-537 0x1.0000000000000p-537)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 11111.111060555555 11111.111060555555)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 35136418286444.62 35136418286444.62)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 35136418286444.62 35136418286444.62)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 3.5136418286444623e-06 3.5136418286444623e-06)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 11111.111060555555 11111.111060555555)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 35136418286444.62 35136418286444.62)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 35136418286444.62 35136418286444.62)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 3.5136418286444623e-06 3.5136418286444623e-06)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 11111.11106111111 11111.11106111111)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 35136418288201.445 35136418288201.445)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 35136418288201.445 35136418288201.445)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 3.513641828820144e-06 3.513641828820144e-06)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.1111111111111p+40 0x1.1111111111111p+40)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.822cb17ff2eb8p+49 0x1.822cb17ff2eb8p+49)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.822cb17ff2eb8p+49 0x1.822cb17ff2eb8p+49)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.822cb17ff2eb8p+30 0x1.822cb17ff2eb8p+30)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.1111111111111p+40 0x1.1111111111111p+40)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.822cb17ff2eb8p+49 0x1.822cb17ff2eb8p+49)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.822cb17ff2eb8p+49 0x1.822cb17ff2eb8p+49)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.822cb17ff2eb8p+30 0x1.822cb17ff2eb8p+30)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.1111111111111p+40 0x1.1111111111111p+40)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.822cb17ff2eb8p+49 0x1.822cb17ff2eb8p+49)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.822cb17ff2eb8p+49 0x1.822cb17ff2eb8p+49)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.822cb17ff2eb8p+30 0x1.822cb17ff2eb8p+30)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 nan nan)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -123456789.0 -123456789.0)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -1.23456789e-11 -1.23456789e-11)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -123456789.0 -123456789.0)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -1.23456789e+27 -1.23456789e+27)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -1.23456789e-11 -1.23456789e-11)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -123456789.01234567 -123456789.01234567)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -1.2345678901234569e+27 -1.2345678901234569e+27)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -1.2345678901234569e+27 -1.2345678901234569e+27)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -1.2345678901234568e-11 -1.2345678901234568e-11)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.23456789abcdfp+80 -0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.23456789abcdfp+99 -0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.23456789abcdfp+99 -0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.23456789abcdfp+61 -0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x1.23456789abcdfp+80 -0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x1.23456789abcdfp+99 -0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x1.23456789abcdfp+99 -0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x1.23456789abcdfp+61 -0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.23456789abcdfp+80 -0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.23456789abcdfp+99 -0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.23456789abcdfp+99 -0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.23456789abcdfp+61 -0x1.23456789abcdfp+61)) ;; Mixed f64x2 tests when some lanes are NaNs (module (func (export "f64x2_add_arith") (result v128) (f64x2.add (v128.const f64x2 nan:0x8000000000000 1.0) (v128.const f64x2 nan 1.0))) (func (export "f64x2_div_mixed") (result v128) (f64x2.div (v128.const f64x2 nan 1.0) (v128.const f64x2 2.0 -nan:0x8000000000000))) (func (export "f64x2_mul_mixed") (result v128) (f64x2.mul (v128.const f64x2 nan:0x8000000000000 1.0) (v128.const f64x2 2.0 nan))) (func (export "f64x2_neg_canon") (result v128) (f64x2.neg (v128.const f64x2 nan 1.0))) (func (export "f64x2_sqrt_canon") (result v128) (f64x2.sqrt (v128.const f64x2 4.0 -nan))) (func (export "f64x2_sub_arith") (result v128) (f64x2.sub (v128.const f64x2 1.0 -1.0) (v128.const f64x2 -nan 1.0))) ) (assert_return (invoke "f64x2_add_arith") (v128.const f64x2 nan:arithmetic 2.0)) (assert_return (invoke "f64x2_div_mixed") (v128.const f64x2 nan:canonical nan:arithmetic)) (assert_return (invoke "f64x2_mul_mixed") (v128.const f64x2 nan:arithmetic nan:canonical)) (assert_return (invoke "f64x2_neg_canon") (v128.const f64x2 nan:canonical -1.0)) (assert_return (invoke "f64x2_sqrt_canon") (v128.const f64x2 2.0 nan:canonical)) (assert_return (invoke "f64x2_sub_arith") (v128.const f64x2 nan:canonical -2.0)) ;; type check (assert_invalid (module (func (result v128) (f64x2.neg (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.add (i64.const 0) (f64.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.sub (i64.const 0) (f64.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.mul (i64.const 0) (f64.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.div (i64.const 0) (f64.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f64x2.neg-arg-empty (result v128) (f64x2.neg) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.sqrt-arg-empty (result v128) (f64x2.sqrt) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.add-1st-arg-empty (result v128) (f64x2.add (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.add-arg-empty (result v128) (f64x2.add) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.sub-1st-arg-empty (result v128) (f64x2.sub (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.sub-arg-empty (result v128) (f64x2.sub) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.mul-1st-arg-empty (result v128) (f64x2.mul (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.mul-arg-empty (result v128) (f64x2.mul) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.div-1st-arg-empty (result v128) (f64x2.div (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.div-arg-empty (result v128) (f64x2.div) ) ) "type mismatch" ) ;; combination (module (func (export "add-sub") (param v128 v128 v128) (result v128) (f64x2.add (f64x2.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "div-add") (param v128 v128 v128) (result v128) (f64x2.div (f64x2.add (local.get 0) (local.get 1))(local.get 2))) (func (export "div-mul") (param v128 v128 v128) (result v128) (f64x2.div (f64x2.mul (local.get 0) (local.get 1))(local.get 2))) (func (export "div-sub") (param v128 v128 v128) (result v128) (f64x2.div (f64x2.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-add") (param v128 v128 v128) (result v128) (f64x2.mul (f64x2.add (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-div") (param v128 v128 v128) (result v128) (f64x2.mul (f64x2.div (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-sub") (param v128 v128 v128) (result v128) (f64x2.mul (f64x2.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "sub-add") (param v128 v128 v128) (result v128) (f64x2.sub (f64x2.add (local.get 0) (local.get 1))(local.get 2))) (func (export "add-neg") (param v128 v128) (result v128) (f64x2.add (f64x2.neg (local.get 0)) (local.get 1))) (func (export "add-sqrt") (param v128 v128) (result v128) (f64x2.add (f64x2.sqrt (local.get 0)) (local.get 1))) (func (export "div-neg") (param v128 v128) (result v128) (f64x2.div (f64x2.neg (local.get 0)) (local.get 1))) (func (export "div-sqrt") (param v128 v128) (result v128) (f64x2.div (f64x2.sqrt (local.get 0)) (local.get 1))) (func (export "mul-neg") (param v128 v128) (result v128) (f64x2.mul (f64x2.neg (local.get 0)) (local.get 1))) (func (export "mul-sqrt") (param v128 v128) (result v128) (f64x2.mul (f64x2.sqrt (local.get 0)) (local.get 1))) (func (export "sub-neg") (param v128 v128) (result v128) (f64x2.sub (f64x2.neg (local.get 0)) (local.get 1))) (func (export "sub-sqrt") (param v128 v128) (result v128) (f64x2.sub (f64x2.sqrt (local.get 0)) (local.get 1))) ) (assert_return (invoke "add-sub" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.25 0.25) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "div-add" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.125 0.125) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 5.0 5.0)) (assert_return (invoke "div-mul" (v128.const f64x2 1.125 1.125) (v128.const f64x2 4 4) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 18.0 18.0)) (assert_return (invoke "div-sub" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.125 0.125) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 4.0 4.0)) (assert_return (invoke "mul-add" (v128.const f64x2 1.25 1.25) (v128.const f64x2 0.25 0.25) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 0.375 0.375)) (assert_return (invoke "mul-div" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.125 0.125) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 2.25 2.25)) (assert_return (invoke "mul-sub" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.125 0.125) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 0.25 0.25)) (assert_return (invoke "sub-add" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.25 0.25) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 1.25 1.25)) (assert_return (invoke "add-neg" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 -1.0 -1.0)) (assert_return (invoke "add-sqrt" (v128.const f64x2 2.25 2.25) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 1.75 1.75)) (assert_return (invoke "div-neg" (v128.const f64x2 1.5 1.5) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 -6 -6)) (assert_return (invoke "div-sqrt" (v128.const f64x2 2.25 2.25) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 6 6)) (assert_return (invoke "mul-neg" (v128.const f64x2 1.5 1.5) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 -0.375 -0.375)) (assert_return (invoke "mul-sqrt" (v128.const f64x2 2.25 2.25) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 0.375 0.375)) (assert_return (invoke "sub-neg" (v128.const f64x2 1.125 1.125) (v128.const f64x2 0.125 0.125)) (v128.const f64x2 -1.25 -1.25)) (assert_return (invoke "sub-sqrt" (v128.const f64x2 2.25 2.25) (v128.const f64x2 0.25 0.25)) (v128.const f64x2 1.25 1.25)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f64x2_cmp.wast ================================================ ;; Tests for f64x2 comparison operations on major boundary values and all special values. (module (func (export "f64x2.eq") (param v128 v128) (result v128) (f64x2.eq (local.get 0) (local.get 1))) (func (export "f64x2.ne") (param v128 v128) (result v128) (f64x2.ne (local.get 0) (local.get 1))) (func (export "f64x2.lt") (param v128 v128) (result v128) (f64x2.lt (local.get 0) (local.get 1))) (func (export "f64x2.le") (param v128 v128) (result v128) (f64x2.le (local.get 0) (local.get 1))) (func (export "f64x2.gt") (param v128 v128) (result v128) (f64x2.gt (local.get 0) (local.get 1))) (func (export "f64x2.ge") (param v128 v128) (result v128) (f64x2.ge (local.get 0) (local.get 1))) ) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1074 0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1074 -0x1p-1074) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e038 01234567890123456789e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e038 0123456789.e038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0123456789.e+038 0123456789.e+038) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e038 01234567890123456789e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789e-038 01234567890123456789e-038)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e038 0123456789.e038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 0123456789.e+038 0123456789.e+038)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789) (v128.const f64x2 01234567890123456789.01234567890123456789 01234567890123456789.01234567890123456789)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1074 0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1074 -0x1p-1074)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -1 -1) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -1 -1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -1 -1) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 -1 -1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0 0) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0 0) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0 0) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 0 0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 1 1) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 1 1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 1 1) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 1 1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 2.0 2.0) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 2.0 2.0) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 2.0 2.0) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 2.0 2.0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -1 -1) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -1 -1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -1 -1) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 -1 -1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0 0) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0 0) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0 0) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0 0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 1 1) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 1 1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 1 1) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 1 1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 2.0 2.0) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 2.0 2.0) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 2.0 2.0) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 2.0 2.0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -1 -1) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -1 -1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -1 -1) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 -1 -1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0 0) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0 0) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0 0) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0 0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 1 1) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 1 1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 1 1) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 1 1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -1 -1) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -1 -1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -1 -1) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 -1 -1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0 0) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0 0) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0 0) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0 0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 1 1) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 1 1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 1 1) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 1 1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 2.0 2.0) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 2.0 2.0) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 2.0 2.0) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 2.0 2.0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -1 -1) (v128.const f64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -1 -1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -1 -1) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 -1 -1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0 0) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0 0) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0 0) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0 0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 1 1) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 1 1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 1 1) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 1 1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 2.0 2.0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -1 -1) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -1 -1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -1 -1) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 -1 -1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0 0) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0 0) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0 0) (v128.const f64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0 0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 1 1) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 1 1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 1 1) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 1 1) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 2.0 2.0) (v128.const f64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 2.0 2.0) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 2.0 2.0) (v128.const f64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 2.0 2.0) (v128.const f64x2 2.0 2.0)) (v128.const i64x2 -1 -1)) ;; unknown operators (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f2x64.eq (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f2x64.ne (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f2x64.lt (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f2x64.le (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f2x64.gt (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (f2x64.ge (local.get $x) (local.get $y)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (f64x2.eq (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.ne (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.lt (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.le (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.gt (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.ge (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f64x2.eq-1st-arg-empty (result v128) (f64x2.eq (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.eq-arg-empty (result v128) (f64x2.eq) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.ne-1st-arg-empty (result v128) (f64x2.ne (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.ne-arg-empty (result v128) (f64x2.ne) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.lt-1st-arg-empty (result v128) (f64x2.lt (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.lt-arg-empty (result v128) (f64x2.lt) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.le-1st-arg-empty (result v128) (f64x2.le (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.le-arg-empty (result v128) (f64x2.le) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.gt-1st-arg-empty (result v128) (f64x2.gt (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.gt-arg-empty (result v128) (f64x2.gt) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.ge-1st-arg-empty (result v128) (f64x2.ge (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.ge-arg-empty (result v128) (f64x2.ge) ) ) "type mismatch" ) ;; combination (module (memory 1) (func (export "f64x2.eq-in-block") (block (drop (block (result v128) (f64x2.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "f64x2.ne-in-block") (block (drop (block (result v128) (f64x2.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "f64x2.lt-in-block") (block (drop (block (result v128) (f64x2.lt (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "f64x2.le-in-block") (block (drop (block (result v128) (f64x2.le (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "f64x2.gt-in-block") (block (drop (block (result v128) (f64x2.gt (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "f64x2.ge-in-block") (block (drop (block (result v128) (f64x2.ge (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-f64x2.eq") (drop (f64x2.eq (f64x2.eq (f64x2.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.eq (f64x2.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-f64x2.ne") (drop (f64x2.ne (f64x2.ne (f64x2.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.ne (f64x2.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-f64x2.lt") (drop (f64x2.lt (f64x2.lt (f64x2.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.lt (f64x2.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.lt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-f64x2.le") (drop (f64x2.le (f64x2.le (f64x2.le (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.le (f64x2.le (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-f64x2.gt") (drop (f64x2.gt (f64x2.gt (f64x2.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.gt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.gt (f64x2.gt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.gt (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-f64x2.ge") (drop (f64x2.ge (f64x2.ge (f64x2.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.ge (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.ge (f64x2.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.ge (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop (f64x2.eq (f64x2.ne (f64x2.lt (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.le (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (f64x2.gt (f64x2.ge (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (f64x2.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "f64x2.eq-in-block")) (assert_return (invoke "f64x2.ne-in-block")) (assert_return (invoke "f64x2.lt-in-block")) (assert_return (invoke "f64x2.le-in-block")) (assert_return (invoke "f64x2.gt-in-block")) (assert_return (invoke "f64x2.ge-in-block")) (assert_return (invoke "nested-f64x2.eq")) (assert_return (invoke "nested-f64x2.ne")) (assert_return (invoke "nested-f64x2.lt")) (assert_return (invoke "nested-f64x2.le")) (assert_return (invoke "nested-f64x2.gt")) (assert_return (invoke "nested-f64x2.ge")) (assert_return (invoke "as-param")) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f64x2_pmin_pmax.wast ================================================ ;; Tests for f64x2 [pmin, pmax] operations on major boundary values and all special values. (module (func (export "f64x2.pmin") (param v128 v128) (result v128) (f64x2.pmin (local.get 0) (local.get 1))) (func (export "f64x2.pmax") (param v128 v128) (result v128) (f64x2.pmax (local.get 0) (local.get 1))) ) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 inf inf)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p-1022 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p-1022 -0x1.0000000000000p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p-1 -0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd62b4311p-37 0x1.b25ffd62b4311p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p-1 0x1.0000000000000p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.d6f3454000000p+26 0x1.d6f3454000000p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.d6f34540ca458p+26 0x1.d6f34540ca458p+26)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.b25ffd636ec12p-37 0x1.b25ffd636ec12p-37)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -inf -inf)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 0x1.fe9af5b5e16fap+89 0x1.fe9af5b5e16fap+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 0x1.fe9af5b6bcbd5p+89 0x1.fe9af5b6bcbd5p+89)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 0x1.23456789abcdfp+80 0x1.23456789abcdfp+80)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 0x1.23456789abcdfp+99 0x1.23456789abcdfp+99)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 0x1.23456789abcdfp+61 0x1.23456789abcdfp+61)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 inf inf)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 nan nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 inf inf)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan nan)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan -nan) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 inf inf)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -inf -inf)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan nan)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan nan)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 nan nan)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan nan)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan -nan)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan -nan)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0p+0 0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0p+0 0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x0p+0 -0x0p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x0p+0 -0x0p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1022 0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1022 -0x1p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p-1 0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p-1 -0x1p-1) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1p+0 0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1p+0 -0x1p+0) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 inf inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -inf -inf) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789 0123456789) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e019 0123456789e019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e+019 0123456789e+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789e-019 0123456789e-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789e-019 0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789. 0123456789.) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e019 0123456789.e019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.e019 0123456789.e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e+019 0123456789.e+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.e-019 0123456789.e-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.pmin (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.pmax (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (f64x2.pmin (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.pmax (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f64x2.pmin-1st-arg-empty (result v128) (f64x2.pmin (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.pmin-arg-empty (result v128) (f64x2.pmin) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.pmax-1st-arg-empty (result v128) (f64x2.pmax (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.pmax-arg-empty (result v128) (f64x2.pmax) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_f64x2_rounding.wast ================================================ ;; Tests for f64x2 [ceil, floor, trunc, nearest] operations on major boundary values and all special values. (module (func (export "f64x2.ceil") (param v128) (result v128) (f64x2.ceil (local.get 0))) (func (export "f64x2.floor") (param v128) (result v128) (f64x2.floor (local.get 0))) (func (export "f64x2.trunc") (param v128) (result v128) (f64x2.trunc (local.get 0))) (func (export "f64x2.nearest") (param v128) (result v128) (f64x2.nearest (local.get 0))) ) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.c000000000000p+2 0x1.c000000000000p+2)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.8000000000000p+2 -0x1.8000000000000p+2)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 123456790.0 123456790.0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 1.0 1.0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.8000000000000p+2 0x1.8000000000000p+2)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.c000000000000p+2 -0x1.c000000000000p+2)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.8000000000000p+2 0x1.8000000000000p+2)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.8000000000000p+2 -0x1.8000000000000p+2)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0p+0 0x0p+0)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0x0p+0 -0x0p+0)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x1p-1022 0x1p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const f64x2 -0x0.0p+0 -0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const f64x2 0x1.0000000000000p+0 0x1.0000000000000p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const f64x2 -0x1.0000000000000p+0 -0x1.0000000000000p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.8000000000000p+2 0x1.8000000000000p+2)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.8000000000000p+2 -0x1.8000000000000p+2)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0p+0 0x0.0p+0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 inf inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -inf -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789 0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789e019 0123456789e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789e+019 0123456789e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789e-019 0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789. 0123456789.)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.e019 0123456789.e019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.e+019 0123456789.e+019)) (v128.const f64x2 1.23456789e+27 1.23456789e+27)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.e-019 0123456789.e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.0123456789 0123456789.0123456789)) (v128.const f64x2 123456789.0 123456789.0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.0123456789e019 0123456789.0123456789e019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.0123456789e+019 0123456789.0123456789e+019)) (v128.const f64x2 1.2345678901234569e+27 1.2345678901234569e+27)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0123456789.0123456789e-019 0123456789.0123456789e-019)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.p+019 0x0123456789ABCDEFabcdef.p+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef)) (v128.const f64x2 1.3754889325393114e+24 1.3754889325393114e+24)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019)) (v128.const f64x2 7.211523414631705e+29 7.211523414631705e+29)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (v128.const f64x2 2.6235369349275807e+18 2.6235369349275807e+18)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 nan nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -nan -nan)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.ceil (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.floor (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.trunc (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.nearest (v128.const i32x4 0 0 0 0)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (f64x2.ceil (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.floor (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.trunc (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.nearest (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $f64x2.ceil-arg-empty (result v128) (f64x2.ceil) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.floor-arg-empty (result v128) (f64x2.floor) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.trunc-arg-empty (result v128) (f64x2.trunc) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.nearest-arg-empty (result v128) (f64x2.nearest) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_arith.wast ================================================ ;; Tests for i16x8 arithmetic operations on major boundary values and all special values. (module (func (export "i16x8.add") (param v128 v128) (result v128) (i16x8.add (local.get 0) (local.get 1))) (func (export "i16x8.sub") (param v128 v128) (result v128) (i16x8.sub (local.get 0) (local.get 1))) (func (export "i16x8.mul") (param v128 v128) (result v128) (i16x8.mul (local.get 0) (local.get 1))) (func (export "i16x8.neg") (param v128) (result v128) (i16x8.neg (local.get 0))) ) ;; i16x8.add (assert_return (invoke "i16x8.add" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.add" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.add" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i8x16 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i32x4 0x80008000 0x80008000 0x80008000 0x80008000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0x8000 0 0x8000 0 0x8000 0 0x8000 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i16x8 0x8000 0xbf80 0x8000 0xbf80 0x8000 0xbf80 0x8000 0xbf80)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i16x8 0x8000 0x3f80 0x8000 0x3f80 0x8000 0x3f80 0x8000 0x3f80)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0x01 0x7f81 0x01 0x7f81 0x01 0x7f81 0x01 0x7f81)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0x01 0xff81 0x01 0xff81 0x01 0xff81 0x01 0xff81)) (assert_return (invoke "i16x8.add" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 3 6 9 12 15 18 21)) (assert_return (invoke "i16x8.add" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i16x8 03_598 03_598 03_598 03_598 03_598 03_598 03_598 03_598)) (assert_return (invoke "i16x8.add" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678)) (v128.const i16x8 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac)) ;; i16x8.sub (assert_return (invoke "i16x8.sub" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32764 32764 32764 32764 32764 32764 32764 32764)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32765 -32765 -32765 -32765 -32765 -32765 -32765 -32765)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i8x16 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80 0 0x80)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i32x4 0x80008000 0x80008000 0x80008000 0x80008000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i16x8 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0x8000 0 0x8000 0 0x8000 0 0x8000 0)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i16x8 0x8000 0x4080 0x8000 0x4080 0x8000 0x4080 0x8000 0x4080)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i16x8 0x8000 0xc080 0x8000 0xc080 0x8000 0xc080 0x8000 0xc080)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0x01 0x8081 0x01 0x8081 0x01 0x8081 0x01 0x8081)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0x01 0x81 0x01 0x81 0x01 0x81 0x01 0x81)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0x8041 0x01 0x8041 0x01 0x8041 0x01 0x8041)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 0x02 0x04 0x06 0x08 0x0a 0x0c 0x0e)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 -1 -2 -3 -4 -5 -6 -7)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789) (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345)) (v128.const i16x8 044_444 044_444 044_444 044_444 044_444 044_444 044_444 044_444)) (assert_return (invoke "i16x8.sub" (v128.const i16x8 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678) (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234)) (v128.const i16x8 0x0_4444 0x0_4444 0x0_4444 0x0_4444 0x0_4444 0x0_4444 0x0_4444 0x0_4444)) ;; i16x8.mul (assert_return (invoke "i16x8.mul" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x1000 0x1000 0x1000 0x1000 0x1000 0x1000 0x1000 0x1000) (v128.const i8x16 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i32x4 0x00020002 0x00020002 0x00020002 0x00020002)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0 0x7f80 0 0x7f80 0 0x7f80 0 0x7f80)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0 0xff80 0 0xff80 0 0xff80 0 0xff80)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0 0x7fc0 0 0x7fc0 0 0x7fc0 0 0x7fc0)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 0xffff 0xfffc 0xfff7 0xfff0 0xffe7 0xffdc 0xffcf)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 0x02 0x08 0x12 0x20 0x32 0x48 0x62)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i16x8 021_613 021_613 021_613 021_613 021_613 021_613 021_613 021_613)) (assert_return (invoke "i16x8.mul" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef)) (v128.const i16x8 0x0_a28c 0x0_a28c 0x0_a28c 0x0_a28c 0x0_a28c 0x0_a28c 0x0_a28c 0x0_a28c)) ;; i16x8.neg (assert_return (invoke "i16x8.neg" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 -0x7fff -0x7fff -0x7fff -0x7fff -0x7fff -0x7fff -0x7fff -0x7fff)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.neg" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 1 1 1 1 1 1 1 1)) ;; type check (assert_invalid (module (func (result v128) (i16x8.neg (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.add (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.sub (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.mul (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.neg-arg-empty (result v128) (i16x8.neg) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.add-1st-arg-empty (result v128) (i16x8.add (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.add-arg-empty (result v128) (i16x8.add) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.sub-1st-arg-empty (result v128) (i16x8.sub (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.sub-arg-empty (result v128) (i16x8.sub) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.mul-1st-arg-empty (result v128) (i16x8.mul (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.mul-arg-empty (result v128) (i16x8.mul) ) ) "type mismatch" ) ;; combination (module (func (export "add-sub") (param v128 v128 v128) (result v128) (i16x8.add (i16x8.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-add") (param v128 v128 v128) (result v128) (i16x8.mul (i16x8.add (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-sub") (param v128 v128 v128) (result v128) (i16x8.mul (i16x8.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "sub-add") (param v128 v128 v128) (result v128) (i16x8.sub (i16x8.add (local.get 0) (local.get 1))(local.get 2))) (func (export "add-neg") (param v128 v128) (result v128) (i16x8.add (i16x8.neg (local.get 0)) (local.get 1))) (func (export "mul-neg") (param v128 v128) (result v128) (i16x8.mul (i16x8.neg (local.get 0)) (local.get 1))) (func (export "sub-neg") (param v128 v128) (result v128) (i16x8.sub (i16x8.neg (local.get 0)) (local.get 1))) ) (assert_return (invoke "add-sub" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "mul-add" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 0 4 8 12 16 20 24 28)) (assert_return (invoke "mul-sub" (v128.const i16x8 0 2 4 6 8 10 12 14) (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.const i16x8 0 1 4 9 16 25 36 49)) (assert_return (invoke "sub-add" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "add-neg" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "mul-neg" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 0 -2 -4 -6 -8 -10 -12 -14)) (assert_return (invoke "sub-neg" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.const i16x8 0 -2 -4 -6 -8 -10 -12 -14)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_arith2.wast ================================================ ;; Tests for i16x8 [min_s, min_u, max_s, max_u, avgr_u, abs] operations. (module (func (export "i16x8.min_s") (param v128 v128) (result v128) (i16x8.min_s (local.get 0) (local.get 1))) (func (export "i16x8.min_u") (param v128 v128) (result v128) (i16x8.min_u (local.get 0) (local.get 1))) (func (export "i16x8.max_s") (param v128 v128) (result v128) (i16x8.max_s (local.get 0) (local.get 1))) (func (export "i16x8.max_u") (param v128 v128) (result v128) (i16x8.max_u (local.get 0) (local.get 1))) (func (export "i16x8.avgr_u") (param v128 v128) (result v128) (i16x8.avgr_u (local.get 0) (local.get 1))) (func (export "i16x8.abs") (param v128) (result v128) (i16x8.abs (local.get 0))) (func (export "i16x8.min_s_with_const_0") (result v128) (i16x8.min_s (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768))) (func (export "i16x8.min_s_with_const_1") (result v128) (i16x8.min_s (v128.const i16x8 0 0 1 1 2 2 3 3) (v128.const i16x8 3 3 2 2 1 1 0 0))) (func (export "i16x8.min_u_with_const_2") (result v128) (i16x8.min_u (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768))) (func (export "i16x8.min_u_with_const_3") (result v128) (i16x8.min_u (v128.const i16x8 0 0 1 1 2 2 3 3) (v128.const i16x8 3 3 2 2 1 1 0 0))) (func (export "i16x8.max_s_with_const_4") (result v128) (i16x8.max_s (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768))) (func (export "i16x8.max_s_with_const_5") (result v128) (i16x8.max_s (v128.const i16x8 0 0 1 1 2 2 3 3) (v128.const i16x8 3 3 2 2 1 1 0 0))) (func (export "i16x8.max_u_with_const_6") (result v128) (i16x8.max_u (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768))) (func (export "i16x8.max_u_with_const_7") (result v128) (i16x8.max_u (v128.const i16x8 0 0 1 1 2 2 3 3) (v128.const i16x8 3 3 2 2 1 1 0 0))) (func (export "i16x8.avgr_u_with_const_8") (result v128) (i16x8.avgr_u (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768))) (func (export "i16x8.avgr_u_with_const_9") (result v128) (i16x8.avgr_u (v128.const i16x8 0 0 1 1 2 2 3 3) (v128.const i16x8 3 3 2 2 1 1 0 0))) (func (export "i16x8.abs_with_const_10") (result v128) (i16x8.abs (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535))) (func (export "i16x8.min_s_with_const_11") (param v128) (result v128) (i16x8.min_s (local.get 0) (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535))) (func (export "i16x8.min_s_with_const_12") (param v128) (result v128) (i16x8.min_s (local.get 0) (v128.const i16x8 0 0 1 1 2 2 3 3))) (func (export "i16x8.min_u_with_const_13") (param v128) (result v128) (i16x8.min_u (local.get 0) (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535))) (func (export "i16x8.min_u_with_const_14") (param v128) (result v128) (i16x8.min_u (local.get 0) (v128.const i16x8 0 0 1 1 2 2 3 3))) (func (export "i16x8.max_s_with_const_15") (param v128) (result v128) (i16x8.max_s (local.get 0) (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535))) (func (export "i16x8.max_s_with_const_16") (param v128) (result v128) (i16x8.max_s (local.get 0) (v128.const i16x8 0 0 1 1 2 2 3 3))) (func (export "i16x8.max_u_with_const_17") (param v128) (result v128) (i16x8.max_u (local.get 0) (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535))) (func (export "i16x8.max_u_with_const_18") (param v128) (result v128) (i16x8.max_u (local.get 0) (v128.const i16x8 0 0 1 1 2 2 3 3))) (func (export "i16x8.avgr_u_with_const_19") (param v128) (result v128) (i16x8.avgr_u (local.get 0) (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535))) (func (export "i16x8.avgr_u_with_const_20") (param v128) (result v128) (i16x8.avgr_u (local.get 0) (v128.const i16x8 0 0 1 1 2 2 3 3))) ) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1) (v128.const i16x8 0 0 -1 -1 0 0 -1 -1)) (v128.const i16x8 0 0 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 128 128 128 128 128 128 128 128)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 123 123 123 123 123 123 123 123) (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i16x8 123 123 123 123 123 123 123 123)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1) (v128.const i16x8 0 0 -1 -1 0 0 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 -1 -1)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 128 128 128 128 128 128 128 128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 123 123 123 123 123 123 123 123) (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i16x8 123 123 123 123 123 123 123 123)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1) (v128.const i16x8 0 0 -1 -1 0 0 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 -1 -1)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 128 128 128 128 128 128 128 128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 123 123 123 123 123 123 123 123) (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i16x8 123 123 123 123 123 123 123 123)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1) (v128.const i16x8 0 0 -1 -1 0 0 -1 -1)) (v128.const i16x8 0 0 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 128 128 128 128 128 128 128 128)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 123 123 123 123 123 123 123 123) (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i16x8 123 123 123 123 123 123 123 123)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1) (v128.const i16x8 0 0 -1 -1 0 0 -1 -1)) (v128.const i16x8 0 0 32768 32768 32768 32768 65535 65535)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 128 128 128 128 128 128 128 128)) (v128.const i16x8 32832 32832 32832 32832 32832 32832 32832 32832)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 123 123 123 123 123 123 123 123) (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i16x8 123 123 123 123 123 123 123 123)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000 -0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i16x8 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3)) (v128.const i16x8 123 123 123 123 123 123 123 123)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i16x8 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0)) (v128.const i16x8 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) ;; Const vs const (assert_return (invoke "i16x8.min_s_with_const_0") (v128.const i16x8 -32768 -32768 16384 16384 16384 16384 -32768 -32768)) (assert_return (invoke "i16x8.min_s_with_const_1") (v128.const i16x8 0 0 1 1 1 1 0 0)) (assert_return (invoke "i16x8.min_u_with_const_2") (v128.const i16x8 -32768 -32768 16384 16384 16384 16384 -32768 -32768)) (assert_return (invoke "i16x8.min_u_with_const_3") (v128.const i16x8 0 0 1 1 1 1 0 0)) (assert_return (invoke "i16x8.max_s_with_const_4") (v128.const i16x8 65535 65535 32767 32767 32767 32767 65535 65535)) (assert_return (invoke "i16x8.max_s_with_const_5") (v128.const i16x8 3 3 2 2 2 2 3 3)) (assert_return (invoke "i16x8.max_u_with_const_6") (v128.const i16x8 65535 65535 32767 32767 32767 32767 65535 65535)) (assert_return (invoke "i16x8.max_u_with_const_7") (v128.const i16x8 3 3 2 2 2 2 3 3)) (assert_return (invoke "i16x8.avgr_u_with_const_8") (v128.const i16x8 49152 49152 24576 24576 24576 24576 49152 49152)) (assert_return (invoke "i16x8.avgr_u_with_const_9") (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.abs_with_const_10") (v128.const i16x8 32768 32768 32767 32767 16384 16384 1 1)) ;; Param vs const (assert_return (invoke "i16x8.min_s_with_const_11" (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 -32768 -32768 16384 16384 16384 16384 -32768 -32768)) (assert_return (invoke "i16x8.min_s_with_const_12" (v128.const i16x8 3 3 2 2 1 1 0 0)) (v128.const i16x8 0 0 1 1 1 1 0 0)) (assert_return (invoke "i16x8.min_u_with_const_13" (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 -32768 -32768 16384 16384 16384 16384 -32768 -32768)) (assert_return (invoke "i16x8.min_u_with_const_14" (v128.const i16x8 3 3 2 2 1 1 0 0)) (v128.const i16x8 0 0 1 1 1 1 0 0)) (assert_return (invoke "i16x8.max_s_with_const_15" (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 65535 65535 32767 32767 32767 32767 65535 65535)) (assert_return (invoke "i16x8.max_s_with_const_16" (v128.const i16x8 3 3 2 2 1 1 0 0)) (v128.const i16x8 3 3 2 2 2 2 3 3)) (assert_return (invoke "i16x8.max_u_with_const_17" (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 65535 65535 32767 32767 32767 32767 65535 65535)) (assert_return (invoke "i16x8.max_u_with_const_18" (v128.const i16x8 3 3 2 2 1 1 0 0)) (v128.const i16x8 3 3 2 2 2 2 3 3)) (assert_return (invoke "i16x8.avgr_u_with_const_19" (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 49152 49152 24576 24576 24576 24576 49152 49152)) (assert_return (invoke "i16x8.avgr_u_with_const_20" (v128.const i16x8 3 3 2 2 1 1 0 0)) (v128.const i16x8 2 2 2 2 2 2 2 2)) ;; Test different lanes go through different if-then clauses (assert_return (invoke "i16x8.min_s" (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 -32768 -32768 16384 16384 16384 16384 -32768 -32768)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 0 0 1 1 2 2 128 128) (v128.const i16x8 0 0 2 2 1 1 128 128)) (v128.const i16x8 0 0 1 1 1 1 128 128)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 -32768 -32768 16384 16384 16384 16384 -32768 -32768)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0 0 1 1 2 2 128 128) (v128.const i16x8 0 0 2 2 1 1 128 128)) (v128.const i16x8 0 0 1 1 1 1 128 128)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 65535 65535 32767 32767 32767 32767 65535 65535)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 0 0 1 1 2 2 128 128) (v128.const i16x8 0 0 2 2 1 1 128 128)) (v128.const i16x8 0 0 2 2 2 2 128 128)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 65535 65535 32767 32767 32767 32767 65535 65535)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0 0 1 1 2 2 128 128) (v128.const i16x8 0 0 2 2 1 1 128 128)) (v128.const i16x8 0 0 2 2 2 2 128 128)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535) (v128.const i16x8 65535 65535 16384 16384 32767 32767 -32768 -32768)) (v128.const i16x8 49152 49152 24576 24576 24576 24576 49152 49152)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0 0 1 1 2 2 128 128) (v128.const i16x8 0 0 2 2 1 1 128 128)) (v128.const i16x8 0 0 2 2 2 2 128 128)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -32768 -32768 32767 32767 16384 16384 65535 65535)) (v128.const i16x8 32768 32768 32767 32767 16384 16384 1 1)) ;; Test opposite signs of zero (assert_return (invoke "i16x8.min_s" (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0) (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0)) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0) (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0)) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0) (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0)) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0) (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0)) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0) (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0)) (v128.const i16x8 -0 -0 -0 -0 +0 +0 +0 +0)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (v128.const i16x8 +0 +0 0 0 -0 -0 0 0)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0)) (v128.const i16x8 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i16x8.abs" (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i16x8 +0 +0 +0 +0 +0 +0 +0 +0)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.avgr (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i16x8.avgr_s (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)))") "unknown operator") ;; Type check (assert_invalid (module (func (result v128) (i16x8.min_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.min_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.max_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.max_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.avgr_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.abs (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.min_s-1st-arg-empty (result v128) (i16x8.min_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.min_s-arg-empty (result v128) (i16x8.min_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.min_u-1st-arg-empty (result v128) (i16x8.min_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.min_u-arg-empty (result v128) (i16x8.min_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.max_s-1st-arg-empty (result v128) (i16x8.max_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.max_s-arg-empty (result v128) (i16x8.max_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.max_u-1st-arg-empty (result v128) (i16x8.max_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.max_u-arg-empty (result v128) (i16x8.max_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.avgr_u-1st-arg-empty (result v128) (i16x8.avgr_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.avgr_u-arg-empty (result v128) (i16x8.avgr_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.abs-arg-empty (result v128) (i16x8.abs) ) ) "type mismatch" ) ;; Combination (module (func (export "i16x8.min_s-i16x8.avgr_u") (param v128 v128 v128) (result v128) (i16x8.min_s (i16x8.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_s-i16x8.max_u") (param v128 v128 v128) (result v128) (i16x8.min_s (i16x8.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_s-i16x8.max_s") (param v128 v128 v128) (result v128) (i16x8.min_s (i16x8.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_s-i16x8.min_u") (param v128 v128 v128) (result v128) (i16x8.min_s (i16x8.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_s-i16x8.min_s") (param v128 v128 v128) (result v128) (i16x8.min_s (i16x8.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_s-i16x8.abs") (param v128 v128) (result v128) (i16x8.min_s (i16x8.abs (local.get 0))(local.get 1))) (func (export "i16x8.abs-i16x8.min_s") (param v128 v128) (result v128) (i16x8.abs (i16x8.min_s (local.get 0) (local.get 1)))) (func (export "i16x8.min_u-i16x8.avgr_u") (param v128 v128 v128) (result v128) (i16x8.min_u (i16x8.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_u-i16x8.max_u") (param v128 v128 v128) (result v128) (i16x8.min_u (i16x8.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_u-i16x8.max_s") (param v128 v128 v128) (result v128) (i16x8.min_u (i16x8.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_u-i16x8.min_u") (param v128 v128 v128) (result v128) (i16x8.min_u (i16x8.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_u-i16x8.min_s") (param v128 v128 v128) (result v128) (i16x8.min_u (i16x8.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.min_u-i16x8.abs") (param v128 v128) (result v128) (i16x8.min_u (i16x8.abs (local.get 0))(local.get 1))) (func (export "i16x8.abs-i16x8.min_u") (param v128 v128) (result v128) (i16x8.abs (i16x8.min_u (local.get 0) (local.get 1)))) (func (export "i16x8.max_s-i16x8.avgr_u") (param v128 v128 v128) (result v128) (i16x8.max_s (i16x8.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_s-i16x8.max_u") (param v128 v128 v128) (result v128) (i16x8.max_s (i16x8.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_s-i16x8.max_s") (param v128 v128 v128) (result v128) (i16x8.max_s (i16x8.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_s-i16x8.min_u") (param v128 v128 v128) (result v128) (i16x8.max_s (i16x8.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_s-i16x8.min_s") (param v128 v128 v128) (result v128) (i16x8.max_s (i16x8.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_s-i16x8.abs") (param v128 v128) (result v128) (i16x8.max_s (i16x8.abs (local.get 0))(local.get 1))) (func (export "i16x8.abs-i16x8.max_s") (param v128 v128) (result v128) (i16x8.abs (i16x8.max_s (local.get 0) (local.get 1)))) (func (export "i16x8.max_u-i16x8.avgr_u") (param v128 v128 v128) (result v128) (i16x8.max_u (i16x8.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_u-i16x8.max_u") (param v128 v128 v128) (result v128) (i16x8.max_u (i16x8.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_u-i16x8.max_s") (param v128 v128 v128) (result v128) (i16x8.max_u (i16x8.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_u-i16x8.min_u") (param v128 v128 v128) (result v128) (i16x8.max_u (i16x8.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_u-i16x8.min_s") (param v128 v128 v128) (result v128) (i16x8.max_u (i16x8.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.max_u-i16x8.abs") (param v128 v128) (result v128) (i16x8.max_u (i16x8.abs (local.get 0))(local.get 1))) (func (export "i16x8.abs-i16x8.max_u") (param v128 v128) (result v128) (i16x8.abs (i16x8.max_u (local.get 0) (local.get 1)))) (func (export "i16x8.avgr_u-i16x8.avgr_u") (param v128 v128 v128) (result v128) (i16x8.avgr_u (i16x8.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.avgr_u-i16x8.max_u") (param v128 v128 v128) (result v128) (i16x8.avgr_u (i16x8.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.avgr_u-i16x8.max_s") (param v128 v128 v128) (result v128) (i16x8.avgr_u (i16x8.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.avgr_u-i16x8.min_u") (param v128 v128 v128) (result v128) (i16x8.avgr_u (i16x8.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.avgr_u-i16x8.min_s") (param v128 v128 v128) (result v128) (i16x8.avgr_u (i16x8.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i16x8.avgr_u-i16x8.abs") (param v128 v128) (result v128) (i16x8.avgr_u (i16x8.abs (local.get 0))(local.get 1))) (func (export "i16x8.abs-i16x8.avgr_u") (param v128 v128) (result v128) (i16x8.abs (i16x8.avgr_u (local.get 0) (local.get 1)))) (func (export "i16x8.abs-i16x8.abs") (param v128) (result v128) (i16x8.abs (i16x8.abs (local.get 0)))) ) (assert_return (invoke "i16x8.min_s-i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_s-i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_s-i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_s-i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_s-i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_s-i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.abs-i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_u-i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_u-i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_u-i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.min_u-i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_u-i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.min_u-i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.abs-i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.max_s-i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_s-i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_s-i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_s-i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_s-i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_s-i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.abs-i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.max_u-i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_u-i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_u-i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_u-i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_u-i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.max_u-i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.abs-i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.avgr_u-i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.avgr_u-i16x8.max_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.avgr_u-i16x8.max_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.avgr_u-i16x8.min_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.avgr_u-i16x8.min_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.avgr_u-i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.abs-i16x8.avgr_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.abs-i16x8.abs" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_cmp.wast ================================================ ;; Test all the i16x8 comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) (i16x8.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) (i16x8.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x v128) (param $y v128) (result v128) (i16x8.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x v128) (param $y v128) (result v128) (i16x8.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x v128) (param $y v128) (result v128) (i16x8.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x v128) (param $y v128) (result v128) (i16x8.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x v128) (param $y v128) (result v128) (i16x8.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x v128) (param $y v128) (result v128) (i16x8.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x v128) (param $y v128) (result v128) (i16x8.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x v128) (param $y v128) (result v128) (i16x8.ge_u (local.get $x) (local.get $y))) ) ;; eq ;; i16x8.eq (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "eq" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "eq" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "eq" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "eq" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "eq" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 -1 -1 0 0 0 0 -1 -1)) ;; i16x8.eq (i16x8) (i8x16) (assert_return (invoke "eq" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 0 0 -1 -1 0 0 0 0)) (assert_return (invoke "eq" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; i16x8.eq (i16x8) (i32x4) (assert_return (invoke "eq" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 0 0 1 1 32768 32768) (v128.const i32x4 65535 0 1 32768)) (v128.const i16x8 -1 0 -1 -1 -1 0 -1 0)) (assert_return (invoke "eq" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; ne ;; i16x8.ne (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "ne" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "ne" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "ne" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 255 255 255 255 255 255 255 255) (v128.const i16x8 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 255 255 255 255 0 0 0 0) (v128.const i16x8 255 255 255 255 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0 0 0 0 255 255 255 255) (v128.const i16x8 0 0 0 0 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 255 32767 -0 0 1 2 65534 65535) (v128.const i16x8 255 32767 0 0 1 2 -2 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "ne" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "ne" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i16x8 0x8081 0x8283 0xFDFE 0xFF00 0x0001 0x027F 0x80FD 0xFEFF) (v128.const i16x8 65279 33021 639 1 65280 65022 33411 32897)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i16x8 128 129 130 131 -0 255 32766 32767) (v128.const i16x8 32767 32766 255 -0 131 130 129 28)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i16x8.ne (i16x8) (i8x16) (assert_return (invoke "ne" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 -1 -1 0 0 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i16x8.ne (i16x8) (i32x4) (assert_return (invoke "ne" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 0 -1 0 0 0 -1 0 -1)) (assert_return (invoke "ne" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; lt_s ;; i16x8.lt_s (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "lt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 255 255 255 255 255 255 255 255) (v128.const i16x8 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 255 255 255 255 0 0 0 0) (v128.const i16x8 255 255 255 255 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0 0 0 0 255 255 255 255) (v128.const i16x8 0 0 0 0 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 255 32767 -0 0 1 2 65534 65535) (v128.const i16x8 255 32767 0 0 1 2 -2 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "lt_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 0 0 -1 0 0 0 0 -1)) (assert_return (invoke "lt_s" (v128.const i16x8 0x8081 0x8283 0xFDFE 0xFF00 0x0001 0x027F 0x80FD 0xFEFF) (v128.const i16x8 65279 33021 639 1 65280 65022 33411 32897)) (v128.const i16x8 -1 0 -1 -1 0 0 -1 0)) (assert_return (invoke "lt_s" (v128.const i16x8 128 129 130 131 -0 255 32766 32767) (v128.const i16x8 32767 32766 255 -0 131 130 129 28)) (v128.const i16x8 -1 -1 -1 0 -1 0 0 0)) ;; i16x8.lt_s (i16x8) (i8x16) (assert_return (invoke "lt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 0 0 0 0 -1 -1 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; i16x8.lt_s (i16x8) (i32x4) (assert_return (invoke "lt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 0 -1 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; lt_u ;; i16x8.lt_u (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "lt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "lt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "lt_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 255 255 255 255 255 255 255 255) (v128.const i16x8 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 255 255 255 255 0 0 0 0) (v128.const i16x8 255 255 255 255 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0 0 0 0 255 255 255 255) (v128.const i16x8 0 0 0 0 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 255 32767 -0 0 1 2 65534 65535) (v128.const i16x8 255 32767 0 0 1 2 -2 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "lt_u" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "lt_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 -1 -1 -1 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x8081 0x8283 0xFDFE 0xFF00 0x0001 0x027F 0x80FD 0xFEFF) (v128.const i16x8 65279 33021 639 1 65280 65022 33411 32897)) (v128.const i16x8 -1 0 0 0 -1 -1 -1 0)) (assert_return (invoke "lt_u" (v128.const i16x8 128 129 130 131 -0 255 32766 32767) (v128.const i16x8 32767 32766 255 -0 131 130 129 28)) (v128.const i16x8 -1 -1 -1 0 -1 0 0 0)) ;; i16x8.lt_u (i16x8) (i8x16) (assert_return (invoke "lt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "lt_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i16x8.lt_u (i16x8) (i32x4) (assert_return (invoke "lt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 0 -1 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "lt_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; le_s ;; i16x8.le_s (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "le_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "le_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "le_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "le_s" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "le_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "le_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 0 0 -1 0 0 0 0 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "le_s" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 -1 -1 -1 -1 0 0 -1 -1)) ;; i16x8.le_s (i16x8) (i8x16) (assert_return (invoke "le_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 0 0 -1 -1 -1 -1 0 0)) (assert_return (invoke "le_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; i16x8.le_s (i16x8) (i32x4) (assert_return (invoke "le_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 -1 -1 -1 -1 -1 0 -1 0)) (assert_return (invoke "le_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "le_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; le_u ;; i16x8.le_u (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "le_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "le_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "le_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "le_u" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "le_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "le_u" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 -1 -1 -1 0 0 0 0 0)) (assert_return (invoke "le_u" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "le_u" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 -1 -1 -1 0 -1 0 -1 -1)) ;; i16x8.le_u (i16x8) (i8x16) (assert_return (invoke "le_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 0 0 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i16x8.le_u (i16x8) (i32x4) (assert_return (invoke "le_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 -1 -1 -1 -1 -1 0 -1 0)) (assert_return (invoke "le_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i16x8 0x0_edcb 0x0_edcb 0x0_edcb 0x0_edcb 0x0_edcb 0x0_edcb 0x0_edcb 0x0_edcb) (v128.const i16x8 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; gt_s ;; i16x8.gt_s (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "gt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "gt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "gt_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "gt_s" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "gt_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 -1 -1 0 -1 -1 -1 -1 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "gt_s" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 0 0 0 0 -1 -1 0 0)) ;; i16x8.gt_s (i16x8) (i8x16) (assert_return (invoke "gt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 -1 -1 0 0 0 0 -1 -1)) (assert_return (invoke "gt_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i16x8.gt_s (i16x8) (i32x4) (assert_return (invoke "gt_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 65535 65535 0 0 1 1 32768 32768) (v128.const i32x4 65535 0 1 32768)) (v128.const i16x8 0 0 0 0 0 -1 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "gt_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; gt_u ;; i16x8.gt_u (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "gt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "gt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "eq" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "gt_u" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "gt_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 0 0 0 -1 -1 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 0 0 0 -1 0 -1 0 0)) ;; i16x8.gt_u (i16x8) (i8x16) (assert_return (invoke "gt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 -1 -1 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; i16x8.gt_u (i16x8) (i32x4) (assert_return (invoke "gt_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 0 0 0 0 0 -1 0 -1)) (assert_return (invoke "gt_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; ge_s ;; i16x8.ge_s (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "ge_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "ge_s" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "ge_s" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 -1 -1 0 -1 -1 -1 -1 0)) (assert_return (invoke "ge_s" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 -1 -1 0 0 -1 -1 -1 -1)) ;; i16x8.ge_s (i16x8) (i8x16) (assert_return (invoke "ge_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 0 0 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; i16x8.ge_s (i16x8) (i32x4) (assert_return (invoke "ge_s" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 65535 65535 0 0 1 1 32768 32768) (v128.const i32x4 65535 0 1 32768)) (v128.const i16x8 -1 0 -1 -1 -1 -1 -1 0)) (assert_return (invoke "ge_s" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; ge_u ;; i16x8.ge_u (i16x8) (i16x8) ;; hex vs hex (assert_return (invoke "ge_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB) (v128.const i16x8 0x0100 0x0302 0x0904 0x1110 0x0A12 0x1A0B 0xAA1B 0xFFAB)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 32896 32896 32896 32896 32896 32896 32896 32896)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080) (v128.const i16x8 -32640 -32640 -32640 -32640 -32640 -32640 -32640 -32640)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x8180 0x8382 0xFEFD 0x00FF 0x0100 0x7F02 0xFD80 0xFFFE) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 65535 65535 65535 65535 0 0 0 0) (v128.const i16x8 65535 65535 65535 65535 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0 0 0 0 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 65535 65535 65535 65535)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 -32768 65534 -1 -0 0 1 2 65535) (v128.const i16x8 32768 -2 -1 -0 0 1 2 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "ge_u" (v128.const i16x8 0x0000 0xc300 0x0000 0xc2fe 0x0000 0xbf80 0x0000 0x0000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0000 0x3f80 0x0000 0x42fe 0x0000 0x4300 0x0000 0x437f) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "ge_u" (v128.const i16x8 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F 0x0F0F) (v128.const i16x8 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0 0xF0F0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0x0000 0x0000 0x0000 0x0000)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0001 0x0203 0x0409 0x1011 0x120A 0x0B1A 0x1BAA 0xABFF) (v128.const i16x8 0xFFAB 0xAA1B 0x1A0B 0x0A12 0x1110 0x0904 0x0302 0x0100)) (v128.const i16x8 0 0 0 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x8000 0x8001 0x8002 0x8003 0x8004 0x8005 0x8006 0x8007) (v128.const i16x8 32775 32774 32773 32772 32771 32770 32769 32768)) (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 32768 32769 65534 65535 0 -1 -32767 -32768) (v128.const i16x8 -32768 -32767 -1 0 65535 65534 32769 32768)) (v128.const i16x8 -1 -1 0 -1 0 -1 -1 -1)) ;; i16x8.ge_u (i16x8) (i8x16) (assert_return (invoke "ge_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 -128 -128 0 0 1 1 255 255) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (assert_return (invoke "ge_u" (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i16x8.ge_u (i16x8) (i32x4) (assert_return (invoke "ge_u" (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 65535 65535 0 0 1 1 32768 32768) (v128.const i32x4 -128 0 1 255)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "ge_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) ;; Type check (assert_invalid (module (func (result v128) (i16x8.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.ne (i32.const 0) (f32.const 0)))) "type mismatch") ;; combination (module (memory 1) (func (export "eq-in-block") (block (drop (block (result v128) (i16x8.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ne-in-block") (block (drop (block (result v128) (i16x8.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "lt_s-in-block") (block (drop (block (result v128) (i16x8.lt_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "le_u-in-block") (block (drop (block (result v128) (i16x8.le_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "gt_u-in-block") (block (drop (block (result v128) (i16x8.gt_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ge_s-in-block") (block (drop (block (result v128) (i16x8.ge_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-eq") (drop (i16x8.eq (i16x8.eq (i16x8.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.eq (i16x8.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ne") (drop (i16x8.ne (i16x8.ne (i16x8.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.ne (i16x8.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-lt_s") (drop (i16x8.lt_s (i16x8.lt_s (i16x8.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.lt_s (i16x8.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-le_u") (drop (i16x8.le_u (i16x8.le_u (i16x8.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.le_u (i16x8.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-gt_u") (drop (i16x8.gt_u (i16x8.gt_u (i16x8.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.gt_u (i16x8.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ge_s") (drop (i16x8.ge_s (i16x8.ge_s (i16x8.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.ge_s (i16x8.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop (i16x8.ge_u (i16x8.eq (i16x8.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i16x8.ne (i16x8.gt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i16x8.lt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "eq-in-block")) (assert_return (invoke "ne-in-block")) (assert_return (invoke "lt_s-in-block")) (assert_return (invoke "le_u-in-block")) (assert_return (invoke "gt_u-in-block")) (assert_return (invoke "ge_s-in-block")) (assert_return (invoke "nested-eq")) (assert_return (invoke "nested-ne")) (assert_return (invoke "nested-lt_s")) (assert_return (invoke "nested-le_u")) (assert_return (invoke "nested-gt_u")) (assert_return (invoke "nested-ge_s")) (assert_return (invoke "as-param")) ;; Test operation with empty argument (assert_invalid (module (func $i16x8.eq-1st-arg-empty (result v128) (i16x8.eq (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.eq-arg-empty (result v128) (i16x8.eq) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.ne-1st-arg-empty (result v128) (i16x8.ne (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.ne-arg-empty (result v128) (i16x8.ne) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.lt_s-1st-arg-empty (result v128) (i16x8.lt_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.lt_s-arg-empty (result v128) (i16x8.lt_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.lt_u-1st-arg-empty (result v128) (i16x8.lt_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.lt_u-arg-empty (result v128) (i16x8.lt_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.le_s-1st-arg-empty (result v128) (i16x8.le_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.le_s-arg-empty (result v128) (i16x8.le_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.le_u-1st-arg-empty (result v128) (i16x8.le_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.le_u-arg-empty (result v128) (i16x8.le_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.gt_s-1st-arg-empty (result v128) (i16x8.gt_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.gt_s-arg-empty (result v128) (i16x8.gt_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.gt_u-1st-arg-empty (result v128) (i16x8.gt_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.gt_u-arg-empty (result v128) (i16x8.gt_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.ge_s-1st-arg-empty (result v128) (i16x8.ge_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.ge_s-arg-empty (result v128) (i16x8.ge_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.ge_u-1st-arg-empty (result v128) (i16x8.ge_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.ge_u-arg-empty (result v128) (i16x8.ge_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_extadd_pairwise_i8x16.wast ================================================ ;; Tests for i16x8 arithmetic operations on major boundary values and all special values. (module (func (export "i16x8.extadd_pairwise_i8x16_s") (param v128) (result v128) (i16x8.extadd_pairwise_i8x16_s (local.get 0))) (func (export "i16x8.extadd_pairwise_i8x16_u") (param v128) (result v128) (i16x8.extadd_pairwise_i8x16_u (local.get 0))) ) ;; i16x8.extadd_pairwise_i8x16_s (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (v128.const i16x8 252 252 252 252 252 252 252 252)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 -254 -254 -254 -254 -254 -254 -254 -254)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -256 -256 -256 -256 -256 -256 -256 -256)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 254 254 254 254 254 254 254 254)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) ;; i16x8.extadd_pairwise_i8x16_u (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 510 510 510 510 510 510 510 510)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (v128.const i16x8 252 252 252 252 252 252 252 252)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 258 258 258 258 258 258 258 258)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 256 256 256 256 256 256 256 256)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 254 254 254 254 254 254 254 254)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 510 510 510 510 510 510 510 510)) ;; type check (assert_invalid (module (func (result v128) (i16x8.extadd_pairwise_i8x16_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extadd_pairwise_i8x16_u (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.extadd_pairwise_i8x16_s-arg-empty (result v128) (i16x8.extadd_pairwise_i8x16_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extadd_pairwise_i8x16_u-arg-empty (result v128) (i16x8.extadd_pairwise_i8x16_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_extmul_i8x16.wast ================================================ ;; Tests for i16x8 arithmetic operations on major boundary values and all special values. (module (func (export "i16x8.extmul_low_i8x16_s") (param v128 v128) (result v128) (i16x8.extmul_low_i8x16_s (local.get 0) (local.get 1))) (func (export "i16x8.extmul_high_i8x16_s") (param v128 v128) (result v128) (i16x8.extmul_high_i8x16_s (local.get 0) (local.get 1))) (func (export "i16x8.extmul_low_i8x16_u") (param v128 v128) (result v128) (i16x8.extmul_low_i8x16_u (local.get 0) (local.get 1))) (func (export "i16x8.extmul_high_i8x16_u") (param v128 v128) (result v128) (i16x8.extmul_high_i8x16_u (local.get 0) (local.get 1))) ) ;; i16x8.extmul_low_i8x16_s (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4032 4032 4032 4032 4032 4032 4032 4032)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4096 4096 4096 4096 4096 4096 4096 4096)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 4032 4032 4032 4032 4032 4032 4032 4032)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 4096 4096 4096 4096 4096 4096 4096 4096)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 4160 4160 4160 4160 4160 4160 4160 4160)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 125 125 125 125 125 125 125 125)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 16129 16129 16129 16129 16129 16129 16129 16129)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 16256 16256 16256 16256 16256 16256 16256 16256)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 1 1 1 1 1 1 1 1)) ;; i16x8.extmul_high_i8x16_s (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4032 4032 4032 4032 4032 4032 4032 4032)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4096 4096 4096 4096 4096 4096 4096 4096)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 4032 4032 4032 4032 4032 4032 4032 4032)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 4096 4096 4096 4096 4096 4096 4096 4096)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 4160 4160 4160 4160 4160 4160 4160 4160)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 125 125 125 125 125 125 125 125)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 16129 16129 16129 16129 16129 16129 16129 16129)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 16256 16256 16256 16256 16256 16256 16256 16256)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 1 1 1 1 1 1 1 1)) ;; i16x8.extmul_low_i8x16_u (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -511 -511 -511 -511 -511 -511 -511 -511)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4032 4032 4032 4032 4032 4032 4032 4032)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4096 4096 4096 4096 4096 4096 4096 4096)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 -28480 -28480 -28480 -28480 -28480 -28480 -28480 -28480)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 -28672 -28672 -28672 -28672 -28672 -28672 -28672 -28672)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 -28864 -28864 -28864 -28864 -28864 -28864 -28864 -28864)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 125 125 125 125 125 125 125 125)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32386 -32386 -32386 -32386 -32386 -32386 -32386 -32386)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32641 -32641 -32641 -32641 -32641 -32641 -32641 -32641)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32640 32640 32640 32640 32640 32640 32640 32640)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 16129 16129 16129 16129 16129 16129 16129 16129)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 16512 16512 16512 16512 16512 16512 16512 16512)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -511 -511 -511 -511 -511 -511 -511 -511)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 32385 32385 32385 32385 32385 32385 32385 32385)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 32640 32640 32640 32640 32640 32640 32640 32640)) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -511 -511 -511 -511 -511 -511 -511 -511)) ;; i16x8.extmul_high_i8x16_u (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -511 -511 -511 -511 -511 -511 -511 -511)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4032 4032 4032 4032 4032 4032 4032 4032)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i16x8 4096 4096 4096 4096 4096 4096 4096 4096)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 -28480 -28480 -28480 -28480 -28480 -28480 -28480 -28480)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 -28672 -28672 -28672 -28672 -28672 -28672 -28672 -28672)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i16x8 -28864 -28864 -28864 -28864 -28864 -28864 -28864 -28864)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 125 125 125 125 125 125 125 125)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32386 -32386 -32386 -32386 -32386 -32386 -32386 -32386)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32641 -32641 -32641 -32641 -32641 -32641 -32641 -32641)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 32640 32640 32640 32640 32640 32640 32640 32640)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 16129 16129 16129 16129 16129 16129 16129 16129)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 16512 16512 16512 16512 16512 16512 16512 16512)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -511 -511 -511 -511 -511 -511 -511 -511)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 32385 32385 32385 32385 32385 32385 32385 32385)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 32640 32640 32640 32640 32640 32640 32640 32640)) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i16x8 -511 -511 -511 -511 -511 -511 -511 -511)) ;; type check (assert_invalid (module (func (result v128) (i16x8.extmul_low_i8x16_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extmul_high_i8x16_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extmul_low_i8x16_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extmul_high_i8x16_u (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.extmul_low_i8x16_s-1st-arg-empty (result v128) (i16x8.extmul_low_i8x16_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_low_i8x16_s-arg-empty (result v128) (i16x8.extmul_low_i8x16_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_high_i8x16_s-1st-arg-empty (result v128) (i16x8.extmul_high_i8x16_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_high_i8x16_s-arg-empty (result v128) (i16x8.extmul_high_i8x16_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_low_i8x16_u-1st-arg-empty (result v128) (i16x8.extmul_low_i8x16_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_low_i8x16_u-arg-empty (result v128) (i16x8.extmul_low_i8x16_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_high_i8x16_u-1st-arg-empty (result v128) (i16x8.extmul_high_i8x16_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extmul_high_i8x16_u-arg-empty (result v128) (i16x8.extmul_high_i8x16_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_q15mulr_sat_s.wast ================================================ ;; Tests for i16x8 arithmetic operations on major boundary values and all special values. (module (func (export "i16x8.q15mulr_sat_s") (param v128 v128) (result v128) (i16x8.q15mulr_sat_s (local.get 0) (local.get 1))) ) ;; i16x8.q15mulr_sat_s (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 8192 8192 8192 8192 8192 8192 8192 8192)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 8192 8192 8192 8192 8192 8192 8192 8192)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 8192 8192 8192 8192 8192 8192 8192 8192)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 8192 8192 8192 8192 8192 8192 8192 8192)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 8193 8193 8193 8193 8193 8193 8193 8193)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ;; type check (assert_invalid (module (func (result v128) (i16x8.q15mulr_sat_s (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.q15mulr_sat_s-1st-arg-empty (result v128) (i16x8.q15mulr_sat_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.q15mulr_sat_s-arg-empty (result v128) (i16x8.q15mulr_sat_s) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i16x8_sat_arith.wast ================================================ ;; Tests for i16x8 arithmetic operations on major boundary values and all special values. (module (func (export "i16x8.add_sat_s") (param v128 v128) (result v128) (i16x8.add_sat_s (local.get 0) (local.get 1))) (func (export "i16x8.add_sat_u") (param v128 v128) (result v128) (i16x8.add_sat_u (local.get 0) (local.get 1))) (func (export "i16x8.sub_sat_s") (param v128 v128) (result v128) (i16x8.sub_sat_s (local.get 0) (local.get 1))) (func (export "i16x8.sub_sat_u") (param v128 v128) (result v128) (i16x8.sub_sat_u (local.get 0) (local.get 1))) ) ;; i16x8.add_sat_s (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0x01 0x7f81 0x01 0x7f81 0x01 0x7f81 0x01 0x7f81)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0x01 0xff81 0x01 0xff81 0x01 0xff81 0x01 0xff81)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i16x8 0x01 0xffc1 0x01 0xffc1 0x01 0xffc1 0x01 0xffc1)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 3 6 9 12 15 18 21)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 032_123 032_123 032_123 032_123 032_123 032_123 032_123 032_123)) (v128.const i16x8 032_767 032_767 032_767 032_767 032_767 032_767 032_767 032_767)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i16x8 03_598 03_598 03_598 03_598 03_598 03_598 03_598 03_598)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678)) (v128.const i16x8 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac)) (assert_return (invoke "i16x8.add_sat_s" (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB) (v128.const i16x8 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef)) (v128.const i16x8 -0x0_8000 -0x0_8000 -0x0_8000 -0x0_8000 -0x0_8000 -0x0_8000 -0x0_8000 -0x0_8000)) ;; i16x8.add_sat_u (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32769 32769 32769 32769 32769 32769 32769 32769)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 65534 65534 65534 65534 65534 65534 65534 65534)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 65534 65534 65534 65534 65534 65534 65534 65534)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0x8000 0xffff 0x8000 0xffff 0x8000 0xffff 0x8000 0xffff)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0x01 0x7f81 0x01 0x7f81 0x01 0x7f81 0x01 0x7f81)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0x01 0xff81 0x01 0xff81 0x01 0xff81 0x01 0xff81)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1 0x01 0x7fc1)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 3 6 9 12 15 18 21)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i16x8 065_535 065_535 065_535 065_535 065_535 065_535 065_535 065_535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 -012_345 -012_345 -012_345 -012_345 -012_345 -012_345 -012_345 -012_345)) (v128.const i16x8 065_535 065_535 065_535 065_535 065_535 065_535 065_535 065_535)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678)) (v128.const i16x8 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac 0x0_68ac)) (assert_return (invoke "i16x8.add_sat_u" (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB) (v128.const i16x8 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef)) (v128.const i16x8 0x0_ffff 0x0_ffff 0x0_ffff 0x0_ffff 0x0_ffff 0x0_ffff 0x0_ffff 0x0_ffff)) ;; i16x8.sub_sat_s (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 2 2 2 2 2 2 2 2)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32764 32764 32764 32764 32764 32764 32764 32764)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32765 -32765 -32765 -32765 -32765 -32765 -32765 -32765)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0x8000 0 0x8000 0 0x8000 0 0x8000 0)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0x01 0x8081 0x01 0x8081 0x01 0x8081 0x01 0x8081)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0x01 0x81 0x01 0x81 0x01 0x81 0x01 0x81)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0x8041 0x01 0x8041 0x01 0x8041 0x01 0x8041)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i16x8 0x01 0x41 0x01 0x41 0x01 0x41 0x01 0x41)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 2 4 6 8 10 12 14)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 -1 -2 -3 -4 -5 -6 -7)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i16x8 021_092 021_092 021_092 021_092 021_092 021_092 021_092 021_092)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 -012_345 -012_345 -012_345 -012_345 -012_345 -012_345 -012_345 -012_345)) (v128.const i16x8 024_690 024_690 024_690 024_690 024_690 024_690 024_690 024_690)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678 0x0_5678)) (v128.const i16x8 0x0_bbbc 0x0_bbbc 0x0_bbbc 0x0_bbbc 0x0_bbbc 0x0_bbbc 0x0_bbbc 0x0_bbbc)) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB) (v128.const i16x8 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234 -0x1234)) (v128.const i16x8 0xa2df 0xa2df 0xa2df 0xa2df 0xa2df 0xa2df 0xa2df 0xa2df)) ;; i16x8.sub_sat_u (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32764 32764 32764 32764 32764 32764 32764 32764)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 65534 65534 65534 65534 65534 65534 65534 65534)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff 0x3fff) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000) (v128.const i16x8 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000 0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff -0x3fff) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000 -0x4000) (v128.const i16x8 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001 -0x4001)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i16x8 65534 65534 65534 65534 65534 65534 65534 65534)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i16x8 0x8000 0 0x8000 0 0x8000 0 0x8000 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i16x8 0x01 0 0x01 0 0x01 0 0x01 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i16x8 0x01 0 0x01 0 0x01 0 0x01 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i16x8 0x01 0 0x01 0 0x01 0 0x01 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i16x8 0x01 0 0x01 0 0x01 0 0x01 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 0 2 4 6 8 10 12 14)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345) (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 056_789 056_789 056_789 056_789 056_789 056_789 056_789 056_789) (v128.const i16x8 -12_345 -12_345 -12_345 -12_345 -12_345 -12_345 -12_345 -12_345)) (v128.const i16x8 03_598 03_598 03_598 03_598 03_598 03_598 03_598 03_598)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234) (v128.const i16x8 -0x0_5678 -0x0_5678 -0x0_5678 -0x0_5678 -0x0_5678 -0x0_5678 -0x0_5678 -0x0_5678)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i16x8 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef 0x0_cdef) (v128.const i16x8 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB 0x0_90AB)) (v128.const i16x8 0x0_3d44 0x0_3d44 0x0_3d44 0x0_3d44 0x0_3d44 0x0_3d44 0x0_3d44 0x0_3d44)) ;; Malformed cases: non-existent op names (assert_malformed (module quote "(func (result v128) (i16x8.add_sat (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.sub_sat (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.mul_sat (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i16x8.div_sat (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 2 2 2 2 2 2 2 2)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (i16x8.add_sat_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.add_sat_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.sub_sat_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.sub_sat_u (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.add_sat_s-1st-arg-empty (result v128) (i16x8.add_sat_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.add_sat_s-arg-empty (result v128) (i16x8.add_sat_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.add_sat_u-1st-arg-empty (result v128) (i16x8.add_sat_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.add_sat_u-arg-empty (result v128) (i16x8.add_sat_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.sub_sat_s-1st-arg-empty (result v128) (i16x8.sub_sat_s (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.sub_sat_s-arg-empty (result v128) (i16x8.sub_sat_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.sub_sat_u-1st-arg-empty (result v128) (i16x8.sub_sat_u (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.sub_sat_u-arg-empty (result v128) (i16x8.sub_sat_u) ) ) "type mismatch" ) ;; combination (module (func (export "sat-add_s-sub_s") (param v128 v128 v128) (result v128) (i16x8.add_sat_s (i16x8.sub_sat_s (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_s-sub_u") (param v128 v128 v128) (result v128) (i16x8.add_sat_s (i16x8.sub_sat_u (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_u-sub_s") (param v128 v128 v128) (result v128) (i16x8.add_sat_u (i16x8.sub_sat_s (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_u-sub_u") (param v128 v128 v128) (result v128) (i16x8.add_sat_u (i16x8.sub_sat_u (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_s-neg") (param v128 v128) (result v128) (i16x8.add_sat_s (i16x8.neg (local.get 0)) (local.get 1))) (func (export "sat-add_u-neg") (param v128 v128) (result v128) (i16x8.add_sat_u (i16x8.neg (local.get 0)) (local.get 1))) (func (export "sat-sub_s-neg") (param v128 v128) (result v128) (i16x8.sub_sat_s (i16x8.neg (local.get 0)) (local.get 1))) (func (export "sat-sub_u-neg") (param v128 v128) (result v128) (i16x8.sub_sat_u (i16x8.neg (local.get 0)) (local.get 1))) ) (assert_return (invoke "sat-add_s-sub_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "sat-add_s-sub_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "sat-add_u-sub_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 65534 65534 65534 65534 65534 65534 65534 65534)) (assert_return (invoke "sat-add_u-sub_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "sat-add_s-neg" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "sat-add_u-neg" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (assert_return (invoke "sat-sub_s-neg" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "sat-sub_u-neg" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i16x8 1 1 1 1 1 1 1 1)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_arith.wast ================================================ ;; Tests for i32x4 arithmetic operations on major boundary values and all special values. (module (func (export "i32x4.add") (param v128 v128) (result v128) (i32x4.add (local.get 0) (local.get 1))) (func (export "i32x4.sub") (param v128 v128) (result v128) (i32x4.sub (local.get 0) (local.get 1))) (func (export "i32x4.mul") (param v128 v128) (result v128) (i32x4.mul (local.get 0) (local.get 1))) (func (export "i32x4.neg") (param v128) (result v128) (i32x4.neg (local.get 0))) ) ;; i32x4.add (assert_return (invoke "i32x4.add" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483646 2147483646 2147483646 2147483646)) (assert_return (invoke "i32x4.add" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 2147483646 2147483646 2147483646 2147483646)) (assert_return (invoke "i32x4.add" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x3fffffff 0x3fffffff 0x3fffffff 0x3fffffff) (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000) (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -0x3fffffff -0x3fffffff -0x3fffffff -0x3fffffff) (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000) (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.add" (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000) (v128.const i32x4 -0x40000001 -0x40000001 -0x40000001 -0x40000001)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -0x01 -0x01 -0x01 -0x01)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i8x16 0 0 0 0x80 0 0 0 0x80 0 0 0 0x80 0 0 0 0x80)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i16x8 0 0x8000 0 0x8000 0 0x8000 0 0x8000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i32x4 0xbf800000 0xbf800000 0xbf800000 0xbf800000)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i32x4 0x3f800000 0x3f800000 0x3f800000 0x3f800000)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i32x4 0x7f800001 0x7f800001 0x7f800001 0x7f800001)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0xff800001 0xff800001 0xff800001 0xff800001)) (assert_return (invoke "i32x4.add" (v128.const i32x4 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0x7fc00001 0x7fc00001 0x7fc00001 0x7fc00001)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 0xffffffff 0xfffffffe 0xfffffffd)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 2 4 6)) (v128.const i32x4 0 3 6 9)) (assert_return (invoke "i32x4.add" (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890)) (v128.const i32x4 02_469_135_780 02_469_135_780 02_469_135_780 02_469_135_780)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const i32x4 0x0_a2e0_2467 0x0_a2e0_2467 0x0_a2e0_2467 0x0_a2e0_2467)) ;; i32x4.sub (assert_return (invoke "i32x4.sub" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483644 2147483644 2147483644 2147483644)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483645 2147483645 2147483645 2147483645)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2147483645 -2147483645 -2147483645 -2147483645)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x3fffffff 0x3fffffff 0x3fffffff 0x3fffffff) (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000) (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -0x3fffffff -0x3fffffff -0x3fffffff -0x3fffffff) (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000) (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000) (v128.const i32x4 -0x40000001 -0x40000001 -0x40000001 -0x40000001)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 2147483646 2147483646 2147483646 2147483646)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -0x01 -0x01 -0x01 -0x01)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i8x16 0 0 0 0x80 0 0 0 0x80 0 0 0 0x80 0 0 0 0x80)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 1 1 1 1) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i16x8 0 0x8000 0 0x8000 0 0x8000 0 0x8000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 1 1 1 1) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i32x4 0x02 0x02 0x02 0x02)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i32x4 0x40800000 0x40800000 0x40800000 0x40800000)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i32x4 0xc0800000 0xc0800000 0xc0800000 0xc0800000)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x1 0x1 0x1 0x1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i32x4 0x80800001 0x80800001 0x80800001 0x80800001)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x1 0x1 0x1 0x1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0x00800001 0x00800001 0x00800001 0x00800001)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x1 0x1 0x1 0x1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0x80400001 0x80400001 0x80400001 0x80400001)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 0xffffffff 0xfffffffe 0xfffffffd)) (v128.const i32x4 0 0x02 0x04 0x06)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 2 4 6)) (v128.const i32x4 0 -1 -2 -3)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 03_214_567_890 03_214_567_890 03_214_567_890 03_214_567_890 ) (v128.const i32x4 01_234_567_890 01_234_567_890 01_234_567_890 01_234_567_890 )) (v128.const i32x4 01_980_000_000 01_980_000_000 01_980_000_000 01_980_000_000)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (v128.const i32x4 0x0_7e77_7777 0x0_7e77_7777 0x0_7e77_7777 0x0_7e77_7777)) ;; i32x4.mul (assert_return (invoke "i32x4.mul" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483645 2147483645 2147483645 2147483645)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 2147483646 2147483646 2147483646 2147483646)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 2147483646 2147483646 2147483646 2147483646)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x3fffffff 0x3fffffff 0x3fffffff 0x3fffffff) (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000)) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000) (v128.const i32x4 0x40000000 0x40000000 0x40000000 0x40000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -0x3fffffff -0x3fffffff -0x3fffffff -0x3fffffff) (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000)) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000) (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 -0x40000000 -0x40000000 -0x40000000 -0x40000000) (v128.const i32x4 -0x40000001 -0x40000001 -0x40000001 -0x40000001)) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -0x01 -0x01 -0x01 -0x01)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x10000000 0x10000000 0x10000000 0x10000000) (v128.const i8x16 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i16x8 0 0x02 0 0x02 0 0x02 0 0x02)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x8000 0x8000 0x8000 0x8000) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x1 0x1 0x1 0x1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i32x4 0x7f800000 0x7f800000 0x7f800000 0x7f800000)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x1 0x1 0x1 0x1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0xff800000 0xff800000 0xff800000 0xff800000)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x1 0x1 0x1 0x1) (v128.const f32x4 nan nan nan nan)) (v128.const i32x4 0x7fc00000 0x7fc00000 0x7fc00000 0x7fc00000)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 0xffffffff 0xfffffffe 0xfffffffd)) (v128.const i32x4 0 0xffffffff 0xfffffffc 0xfffffff7)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 2 4 6)) (v128.const i32x4 0 0x02 0x08 0x12)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 0_987_654_321 0_987_654_321 0_987_654_321 0_987_654_321)) (v128.const i32x4 04_227_814_277 04_227_814_277 04_227_814_277 04_227_814_277)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef)) (v128.const i32x4 0x0_2a42_d208 0x0_2a42_d208 0x0_2a42_d208 0x0_2a42_d208)) ;; i32x4.neg (assert_return (invoke "i32x4.neg" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 1 1 1 1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646)) (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 0x01 0x01 0x01 0x01)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 -0x01 -0x01 -0x01 -0x01)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 -0x80000000 -0x80000000 -0x80000000 -0x80000000)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 -0x7fffffff -0x7fffffff -0x7fffffff -0x7fffffff)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 1 1 1 1)) ;; type check (assert_invalid (module (func (result v128) (i32x4.neg (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.add (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.sub (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.mul (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.neg-arg-empty (result v128) (i32x4.neg) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.add-1st-arg-empty (result v128) (i32x4.add (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.add-arg-empty (result v128) (i32x4.add) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.sub-1st-arg-empty (result v128) (i32x4.sub (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.sub-arg-empty (result v128) (i32x4.sub) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.mul-1st-arg-empty (result v128) (i32x4.mul (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.mul-arg-empty (result v128) (i32x4.mul) ) ) "type mismatch" ) ;; combination (module (func (export "add-sub") (param v128 v128 v128) (result v128) (i32x4.add (i32x4.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-add") (param v128 v128 v128) (result v128) (i32x4.mul (i32x4.add (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-sub") (param v128 v128 v128) (result v128) (i32x4.mul (i32x4.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "sub-add") (param v128 v128 v128) (result v128) (i32x4.sub (i32x4.add (local.get 0) (local.get 1))(local.get 2))) (func (export "add-neg") (param v128 v128) (result v128) (i32x4.add (i32x4.neg (local.get 0)) (local.get 1))) (func (export "mul-neg") (param v128 v128) (result v128) (i32x4.mul (i32x4.neg (local.get 0)) (local.get 1))) (func (export "sub-neg") (param v128 v128) (result v128) (i32x4.sub (i32x4.neg (local.get 0)) (local.get 1))) ) (assert_return (invoke "add-sub" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 2 4 6) (v128.const i32x4 0 2 4 6)) (v128.const i32x4 0 1 2 3)) (assert_return (invoke "mul-add" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 0 4 8 12)) (assert_return (invoke "mul-sub" (v128.const i32x4 0 2 4 6) (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3)) (v128.const i32x4 0 1 4 9)) (assert_return (invoke "sub-add" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 2 4 6) (v128.const i32x4 0 2 4 6)) (v128.const i32x4 0 1 2 3)) (assert_return (invoke "add-neg" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "mul-neg" (v128.const i32x4 0 1 2 3) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 0 -2 -4 -6)) (assert_return (invoke "sub-neg" (v128.const i32x4 0 1 2 3) (v128.const i32x4 0 1 2 3)) (v128.const i32x4 0 -2 -4 -6)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_arith2.wast ================================================ ;; Tests for i32x4 [min_s, min_u, max_s, max_u, abs] operations. (module (func (export "i32x4.min_s") (param v128 v128) (result v128) (i32x4.min_s (local.get 0) (local.get 1))) (func (export "i32x4.min_u") (param v128 v128) (result v128) (i32x4.min_u (local.get 0) (local.get 1))) (func (export "i32x4.max_s") (param v128 v128) (result v128) (i32x4.max_s (local.get 0) (local.get 1))) (func (export "i32x4.max_u") (param v128 v128) (result v128) (i32x4.max_u (local.get 0) (local.get 1))) (func (export "i32x4.abs") (param v128) (result v128) (i32x4.abs (local.get 0))) (func (export "i32x4.min_s_with_const_0") (result v128) (i32x4.min_s (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))) (func (export "i32x4.min_s_with_const_1") (result v128) (i32x4.min_s (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0))) (func (export "i32x4.min_u_with_const_2") (result v128) (i32x4.min_u (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))) (func (export "i32x4.min_u_with_const_3") (result v128) (i32x4.min_u (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0))) (func (export "i32x4.max_s_with_const_4") (result v128) (i32x4.max_s (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))) (func (export "i32x4.max_s_with_const_5") (result v128) (i32x4.max_s (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0))) (func (export "i32x4.max_u_with_const_6") (result v128) (i32x4.max_u (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))) (func (export "i32x4.max_u_with_const_7") (result v128) (i32x4.max_u (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0))) (func (export "i32x4.abs_with_const_8") (result v128) (i32x4.abs (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295))) (func (export "i32x4.min_s_with_const_9") (param v128) (result v128) (i32x4.min_s (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295))) (func (export "i32x4.min_s_with_const_10") (param v128) (result v128) (i32x4.min_s (local.get 0) (v128.const i32x4 0 1 2 3))) (func (export "i32x4.min_u_with_const_11") (param v128) (result v128) (i32x4.min_u (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295))) (func (export "i32x4.min_u_with_const_12") (param v128) (result v128) (i32x4.min_u (local.get 0) (v128.const i32x4 0 1 2 3))) (func (export "i32x4.max_s_with_const_13") (param v128) (result v128) (i32x4.max_s (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295))) (func (export "i32x4.max_s_with_const_14") (param v128) (result v128) (i32x4.max_s (local.get 0) (v128.const i32x4 0 1 2 3))) (func (export "i32x4.max_u_with_const_15") (param v128) (result v128) (i32x4.max_u (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295))) (func (export "i32x4.max_u_with_const_16") (param v128) (result v128) (i32x4.max_u (local.get 0) (v128.const i32x4 0 1 2 3))) ) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 123 123 123 123) (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i32x4 123 123 123 123)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0x80 0x80 0x80 0x80) (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i32x4 0x80 0x80 0x80 0x80)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 128 128 128 128)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 123 123 123 123) (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i32x4 123 123 123 123)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0x80 0x80 0x80 0x80) (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i32x4 0x80 0x80 0x80 0x80)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 128 128 128 128)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 123 123 123 123) (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i32x4 123 123 123 123)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0x80 0x80 0x80 0x80) (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i32x4 0x80 0x80 0x80 0x80)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 128 128 128 128)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 123 123 123 123) (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i32x4 123 123 123 123)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0x80 0x80 0x80 0x80) (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i32x4 0x80 0x80 0x80 0x80)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i32x4 0x1 0x1 0x1 0x1)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0x80000000 -0x80000000 -0x80000000 -0x80000000)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -01_2_3 -01_2_3 -01_2_3 -01_2_3)) (v128.const i32x4 123 123 123 123)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 0x80 0x80 0x80 0x80)) (v128.const i32x4 0x80 0x80 0x80 0x80)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0x80 -0x80 -0x80 -0x80)) (v128.const i32x4 0x80 0x80 0x80 0x80)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0)) (v128.const i32x4 0x80 0x80 0x80 0x80)) ;; Const vs const (assert_return (invoke "i32x4.min_s_with_const_0") (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648)) (assert_return (invoke "i32x4.min_s_with_const_1") (v128.const i32x4 0 1 1 0)) (assert_return (invoke "i32x4.min_u_with_const_2") (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648)) (assert_return (invoke "i32x4.min_u_with_const_3") (v128.const i32x4 0 1 1 0)) (assert_return (invoke "i32x4.max_s_with_const_4") (v128.const i32x4 4294967295 2147483647 2147483647 4294967295)) (assert_return (invoke "i32x4.max_s_with_const_5") (v128.const i32x4 3 2 2 3)) (assert_return (invoke "i32x4.max_u_with_const_6") (v128.const i32x4 4294967295 2147483647 2147483647 4294967295)) (assert_return (invoke "i32x4.max_u_with_const_7") (v128.const i32x4 3 2 2 3)) (assert_return (invoke "i32x4.abs_with_const_8") (v128.const i32x4 2147483648 2147483647 1073741824 1)) ;; Param vs const (assert_return (invoke "i32x4.min_s_with_const_9" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648)) (assert_return (invoke "i32x4.min_s_with_const_10" (v128.const i32x4 3 2 1 0)) (v128.const i32x4 0 1 1 0)) (assert_return (invoke "i32x4.min_u_with_const_11" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648)) (assert_return (invoke "i32x4.min_u_with_const_12" (v128.const i32x4 3 2 1 0)) (v128.const i32x4 0 1 1 0)) (assert_return (invoke "i32x4.max_s_with_const_13" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 4294967295 2147483647 2147483647 4294967295)) (assert_return (invoke "i32x4.max_s_with_const_14" (v128.const i32x4 3 2 1 0)) (v128.const i32x4 3 2 2 3)) (assert_return (invoke "i32x4.max_u_with_const_15" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 4294967295 2147483647 2147483647 4294967295)) (assert_return (invoke "i32x4.max_u_with_const_16" (v128.const i32x4 3 2 1 0)) (v128.const i32x4 3 2 2 3)) ;; Test different lanes go through different if-then clauses (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 1 2 128) (v128.const i32x4 0 2 1 128)) (v128.const i32x4 0 1 1 128)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 1 2 128) (v128.const i32x4 0 2 1 128)) (v128.const i32x4 0 1 1 128)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 4294967295 2147483647 2147483647 4294967295)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 1 2 128) (v128.const i32x4 0 2 1 128)) (v128.const i32x4 0 2 2 128)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)) (v128.const i32x4 4294967295 2147483647 2147483647 4294967295)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 1 2 128) (v128.const i32x4 0 2 1 128)) (v128.const i32x4 0 2 2 128)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)) (v128.const i32x4 2147483648 2147483647 1073741824 1)) ;; Test opposite signs of zero (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -0 -0 +0 +0) (v128.const i32x4 +0 0 -0 0)) (v128.const i32x4 -0 -0 +0 +0)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -0 -0 -0 -0) (v128.const i32x4 +0 +0 +0 +0)) (v128.const i32x4 -0 -0 -0 -0)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 -0 -0 +0 +0) (v128.const i32x4 +0 0 -0 0)) (v128.const i32x4 -0 -0 +0 +0)) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 -0 -0 -0 -0) (v128.const i32x4 +0 +0 +0 +0)) (v128.const i32x4 -0 -0 -0 -0)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -0 -0 +0 +0) (v128.const i32x4 +0 0 -0 0)) (v128.const i32x4 -0 -0 +0 +0)) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -0 -0 -0 -0) (v128.const i32x4 +0 +0 +0 +0)) (v128.const i32x4 -0 -0 -0 -0)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 -0 -0 +0 +0) (v128.const i32x4 +0 0 -0 0)) (v128.const i32x4 -0 -0 +0 +0)) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 -0 -0 -0 -0) (v128.const i32x4 +0 +0 +0 +0)) (v128.const i32x4 -0 -0 -0 -0)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0 -0 +0 +0)) (v128.const i32x4 -0 -0 +0 +0)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 +0 0 -0 0)) (v128.const i32x4 +0 0 -0 0)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0 -0 -0 -0)) (v128.const i32x4 -0 -0 -0 -0)) (assert_return (invoke "i32x4.abs" (v128.const i32x4 +0 +0 +0 +0)) (v128.const i32x4 +0 +0 +0 +0)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.min_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.min_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.max_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.max_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.min_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.min_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.max_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.max_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.min_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.min_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.max_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.max_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator") ;; Type check (assert_invalid (module (func (result v128) (i32x4.min_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.min_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.max_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.max_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.abs (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.min_s-1st-arg-empty (result v128) (i32x4.min_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.min_s-arg-empty (result v128) (i32x4.min_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.min_u-1st-arg-empty (result v128) (i32x4.min_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.min_u-arg-empty (result v128) (i32x4.min_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.max_s-1st-arg-empty (result v128) (i32x4.max_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.max_s-arg-empty (result v128) (i32x4.max_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.max_u-1st-arg-empty (result v128) (i32x4.max_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.max_u-arg-empty (result v128) (i32x4.max_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.abs-arg-empty (result v128) (i32x4.abs) ) ) "type mismatch" ) ;; Combination (module (func (export "i32x4.min_s-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_s-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_s-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_s-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_s-i32x4.abs") (param v128 v128) (result v128) (i32x4.min_s (i32x4.abs (local.get 0))(local.get 1))) (func (export "i32x4.abs-i32x4.min_s") (param v128 v128) (result v128) (i32x4.abs (i32x4.min_s (local.get 0) (local.get 1)))) (func (export "i32x4.min_u-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_u-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_u-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_u-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.min_u-i32x4.abs") (param v128 v128) (result v128) (i32x4.min_u (i32x4.abs (local.get 0))(local.get 1))) (func (export "i32x4.abs-i32x4.min_u") (param v128 v128) (result v128) (i32x4.abs (i32x4.min_u (local.get 0) (local.get 1)))) (func (export "i32x4.max_s-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_s-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_s-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_s-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_s-i32x4.abs") (param v128 v128) (result v128) (i32x4.max_s (i32x4.abs (local.get 0))(local.get 1))) (func (export "i32x4.abs-i32x4.max_s") (param v128 v128) (result v128) (i32x4.abs (i32x4.max_s (local.get 0) (local.get 1)))) (func (export "i32x4.max_u-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_u-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_u-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_u-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i32x4.max_u-i32x4.abs") (param v128 v128) (result v128) (i32x4.max_u (i32x4.abs (local.get 0))(local.get 1))) (func (export "i32x4.abs-i32x4.max_u") (param v128 v128) (result v128) (i32x4.abs (i32x4.max_u (local.get 0) (local.get 1)))) (func (export "i32x4.abs-i32x4.abs") (param v128) (result v128) (i32x4.abs (i32x4.abs (local.get 0)))) ) (assert_return (invoke "i32x4.min_s-i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_s-i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_s-i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_s-i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_s-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.abs-i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_u-i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_u-i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.min_u-i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_u-i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.min_u-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.abs-i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.max_s-i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_s-i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_s-i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_s-i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_s-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.abs-i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.max_u-i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_u-i32x4.max_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_u-i32x4.min_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_u-i32x4.min_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1) (v128.const i32x4 2 2 2 2)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.max_u-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.abs-i32x4.max_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.abs-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_cmp.wast ================================================ ;; Test all the i32x4 comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) (i32x4.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) (i32x4.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x v128) (param $y v128) (result v128) (i32x4.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x v128) (param $y v128) (result v128) (i32x4.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x v128) (param $y v128) (result v128) (i32x4.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x v128) (param $y v128) (result v128) (i32x4.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x v128) (param $y v128) (result v128) (i32x4.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x v128) (param $y v128) (result v128) (i32x4.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x v128) (param $y v128) (result v128) (i32x4.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x v128) (param $y v128) (result v128) (i32x4.ge_u (local.get $x) (local.get $y))) ) ;; eq ;; i32x4.eq (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "eq" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "eq" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "eq" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "eq" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "eq" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 -1 0 0 0)) ;; i32x4.eq (i32x4) (i8x16) (assert_return (invoke "eq" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 0 -1 0 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 0 0 0 0)) ;; i32x4.eq (i32x4) (i16x8) (assert_return (invoke "eq" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 4294967295 0 1 65535) (v128.const i16x8 65535 65535 0 0 1 0 65535 65535)) (v128.const i32x4 -1 -1 -1 0)) (assert_return (invoke "eq" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "eq" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const i32x4 -1 -1 -1 -1)) ;; ne ;; i32x4.ne (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "ne" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 0 0 0 0)) ;; hex vs dec (assert_return (invoke "ne" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 0 0 0 0)) ;; dec vs dec (assert_return (invoke "ne" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 0 0 0 0)) ;; hex vs float (assert_return (invoke "ne" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 0 0 0 0)) ;; not equal (assert_return (invoke "ne" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 0 -1 -1 -1)) ;; i32x4.ne (i32x4) (i8x16) (assert_return (invoke "ne" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 -1 0 -1 0)) (assert_return (invoke "ne" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 -1 -1 -1 -1)) ;; i32x4.ne (i32x4) (i16x8) (assert_return (invoke "ne" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i32x4 -1 0 -1 -1)) (assert_return (invoke "ne" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ne" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const i32x4 0 0 0 0)) ;; lt_s ;; i32x4.lt_s (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "lt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 0 0 0 0)) ;; hex vs dec (assert_return (invoke "lt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 0 0 0 0)) ;; dec vs dec (assert_return (invoke "lt_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 0 0 0 0)) ;; hex vs float (assert_return (invoke "lt_s" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 0 0 0 0)) ;; not equal (assert_return (invoke "lt_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "lt_s" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "lt_s" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 0 0 0 -1)) ;; i32x4.lt_s (i32x4) (i8x16) (assert_return (invoke "lt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 0 0 -1 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 0 0 0 0)) ;; i32x4.lt_s (i32x4) (i16x8) (assert_return (invoke "lt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "lt_s" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt_s" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 -0x6f543210 -0x6f543210 -0x6f543210 -0x6f543210)) (v128.const i32x4 -1 -1 -1 -1)) ;; lt_u ;; i32x4.lt_u (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "lt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 0 0 0 0)) ;; hex vs dec (assert_return (invoke "lt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 0 0 0 0)) ;; dec vs dec (assert_return (invoke "lt_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 0 0 0 0)) ;; hex vs float (assert_return (invoke "lt_u" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 0 0 0 0)) ;; not equal (assert_return (invoke "lt_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "lt_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 0 -1 -1 0)) ;; i32x4.lt_u (i32x4) (i8x16) (assert_return (invoke "lt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 0 0 -1 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 -1 -1 -1 -1)) ;; i32x4.lt_u (i32x4) (i16x8) (assert_return (invoke "lt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "lt_u" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 -0x6f543210 -0x6f543210 -0x6f543210 -0x6f543210)) (v128.const i32x4 -1 -1 -1 -1)) ;; le_s ;; i32x4.le_s (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "le_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "le_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "le_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "le_s" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "le_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "le_s" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 -1 0 0 -1)) ;; i32x4.le_s (i32x4)(i8x16) (assert_return (invoke "le_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 0 0 0 0)) ;; i32x4.le_s (i32x4) (i16x8) (assert_return (invoke "le_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const i32x4 -1 -1 -1 -1)) ;; le_u ;; i32x4.le_u (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "le_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "le_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "le_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "le_u" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "le_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "le_u" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "le_u" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "le_u" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 -1 -1 -1 0)) ;; i32x4.le_u (i32x4) (i8x16) (assert_return (invoke "le_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 -1 -1 -1 -1)) ;; i32x4.le_u (i32x4) (i16x8) (assert_return (invoke "le_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "le_u" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 0x90ABcdef 0x90ABcdef 0x90ABcdef 0x90ABcdef)) (v128.const i32x4 -1 -1 -1 -1)) ;; gt_s ;; i32x4.gt_s (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "gt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 0 0 0 0)) ;; hex vs dec (assert_return (invoke "gt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 0 0 0 0)) ;; dec vs dec (assert_return (invoke "gt_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 0 0 0 0)) ;; hex vs float (assert_return (invoke "gt_s" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 0 0 0 0)) ;; not equal (assert_return (invoke "gt_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 -1 -1 -1 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "gt_s" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 0 -1 -1 0)) ;; i32x4.gt_s (i32x4) (i8x16) (assert_return (invoke "gt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 -1 -1 -1 -1)) ;; i32x4.gt_s (i32x4) (i16x8) (assert_return (invoke "gt_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 65535 0 1 32768) (v128.const i16x8 65535 65535 0 0 1 1 32768 32768)) (v128.const i32x4 -1 0 0 -1)) (assert_return (invoke "gt_s" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i32x4 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef 0x0_90AB_cdef) (v128.const i32x4 -0x6f543211 -0x6f543211 -0x6f543211 -0x6f543211)) (v128.const i32x4 0 0 0 0)) ;; gt_u ;; i32x4.gt_u (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "gt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 0 0 0 0)) ;; hex vs dec (assert_return (invoke "gt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 0 0 0 0)) ;; dec vs dec (assert_return (invoke "gt_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 0 0 0 0)) ;; hex vs float (assert_return (invoke "gt_u" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 0 0 0 0)) ;; not equal (assert_return (invoke "gt_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "gt_u" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "gt_u" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 0 0 0 -1)) ;; i32x4.gt_u (i32x4) (i8x16) (assert_return (invoke "gt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA)) (v128.const i32x4 0 0 0 0)) ;; i32x4.gt_u (i32x4) (i16x8) (assert_return (invoke "gt_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const i32x4 0 0 0 0)) ;; ge_s ;; i32x4.ge_s (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "ge_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "ge_s" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "ge_s" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "ge_s" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 -1 -1 -1 0)) (assert_return (invoke "ge_s" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 -1 -1 -1 0)) ;; i32x4.ge_s (i32x4) (i8x16) (assert_return (invoke "ge_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 -1 -1 0 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x55555555 0x55555555 0x55555555 0x55555555) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (v128.const i32x4 -1 -1 -1 -1)) ;; i32x4.ge_s (i32x4) (i16x8) (assert_return (invoke "ge_s" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 65535 0 1 32768) (v128.const i16x8 65535 65535 0 0 1 1 32768 32768)) (v128.const i32x4 -1 -1 0 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge_s" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const i32x4 -1 -1 -1 -1)) ;; ge_u ;; i32x4.ge_u (i32x4) (i32x4) ;; hex vs hex (assert_return (invoke "ge_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B) (v128.const i32x4 0x03020100 0x11100904 0x1A0B0A12 0xFFABAA1B)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 2155905152 2155905152 2155905152 2155905152)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) (v128.const i32x4 -2139062144 -2139062144 -2139062144 -2139062144)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x83828180 0x00FFFEFD 0x7F020100 0xFFFEFD80) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i32x4 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 4294967295 4294967295 0 0) (v128.const i32x4 4294967295 4294967295 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0 0 4294967295 4294967295) (v128.const i32x4 0 0 4294967295 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 -2147483647 4294967295 0 -1) (v128.const i32x4 2147483649 -1 0 -1)) (v128.const i32x4 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "ge_u" (v128.const i32x4 0xc3000000 0xc2fe0000 0xbf800000 0x00000000) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x3f800000 0x42fe0000 0x43000000 0x437f0000) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i32x4 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "ge_u" (v128.const i32x4 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F) (v128.const i32x4 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0 0xF0F0F0F0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "ge_u" (v128.const i32x4 0x00000000 0x00000000 0xFFFFFFFF 0xFFFFFFFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x00000000)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x02030001 0x10110409 0x0B1A120A 0xABFF1BAA) (v128.const i32x4 0xAA1BFFAB 0x0A121A0B 0x09041110 0x01000302)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x80018000 0x80038002 0x80058004 0x80078006) (v128.const i32x4 2147975174 2147844100 2147713026 2147581952)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 2147483648 2147483647 0 -1) (v128.const i32x4 -2147483648 -2147483647 -1 0)) (v128.const i32x4 -1 0 0 -1)) ;; i32x4.ge_u (i32x4) (i8x16) (assert_return (invoke "ge_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 -8323200 0 1 4294967295) (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255)) (v128.const i32x4 -1 -1 0 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55)) (v128.const i32x4 -1 -1 -1 -1)) ;; i32x4.ge_u (i32x4) (i16x8) (assert_return (invoke "ge_u" (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 2206368128 16776957 2130837760 4294901120) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 -128 0 1 255) (v128.const i16x8 65535 65535 0 0 1 1 32768 32768)) (v128.const i32x4 0 -1 0 0)) (assert_return (invoke "ge_u" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i16x8 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555 0x5555)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789) (v128.const i32x4 123456789 123456789 123456789 123456789)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678) (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (v128.const i32x4 -1 -1 -1 -1)) ;; Type check (assert_invalid (module (func (result v128) (i32x4.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.ne (i32.const 0) (f32.const 0)))) "type mismatch") ;; combination (module (memory 1) (func (export "eq-in-block") (block (drop (block (result v128) (i32x4.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ne-in-block") (block (drop (block (result v128) (i32x4.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "lt_s-in-block") (block (drop (block (result v128) (i32x4.lt_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "le_u-in-block") (block (drop (block (result v128) (i32x4.le_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "gt_u-in-block") (block (drop (block (result v128) (i32x4.gt_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ge_s-in-block") (block (drop (block (result v128) (i32x4.ge_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-eq") (drop (i32x4.eq (i32x4.eq (i32x4.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.eq (i32x4.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ne") (drop (i32x4.ne (i32x4.ne (i32x4.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.ne (i32x4.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-lt_s") (drop (i32x4.lt_s (i32x4.lt_s (i32x4.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.lt_s (i32x4.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-le_u") (drop (i32x4.le_u (i32x4.le_u (i32x4.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.le_u (i32x4.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-gt_u") (drop (i32x4.gt_u (i32x4.gt_u (i32x4.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.gt_u (i32x4.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ge_s") (drop (i32x4.ge_s (i32x4.ge_s (i32x4.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.ge_s (i32x4.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop (i32x4.ge_u (i32x4.eq (i32x4.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i32x4.ne (i32x4.gt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i32x4.lt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "eq-in-block")) (assert_return (invoke "ne-in-block")) (assert_return (invoke "lt_s-in-block")) (assert_return (invoke "le_u-in-block")) (assert_return (invoke "gt_u-in-block")) (assert_return (invoke "ge_s-in-block")) (assert_return (invoke "nested-eq")) (assert_return (invoke "nested-ne")) (assert_return (invoke "nested-lt_s")) (assert_return (invoke "nested-le_u")) (assert_return (invoke "nested-gt_u")) (assert_return (invoke "nested-ge_s")) (assert_return (invoke "as-param")) ;; Test operation with empty argument (assert_invalid (module (func $i32x4.eq-1st-arg-empty (result v128) (i32x4.eq (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.eq-arg-empty (result v128) (i32x4.eq) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.ne-1st-arg-empty (result v128) (i32x4.ne (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.ne-arg-empty (result v128) (i32x4.ne) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.lt_s-1st-arg-empty (result v128) (i32x4.lt_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.lt_s-arg-empty (result v128) (i32x4.lt_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.lt_u-1st-arg-empty (result v128) (i32x4.lt_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.lt_u-arg-empty (result v128) (i32x4.lt_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.le_s-1st-arg-empty (result v128) (i32x4.le_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.le_s-arg-empty (result v128) (i32x4.le_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.le_u-1st-arg-empty (result v128) (i32x4.le_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.le_u-arg-empty (result v128) (i32x4.le_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.gt_s-1st-arg-empty (result v128) (i32x4.gt_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.gt_s-arg-empty (result v128) (i32x4.gt_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.gt_u-1st-arg-empty (result v128) (i32x4.gt_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.gt_u-arg-empty (result v128) (i32x4.gt_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.ge_s-1st-arg-empty (result v128) (i32x4.ge_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.ge_s-arg-empty (result v128) (i32x4.ge_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.ge_u-1st-arg-empty (result v128) (i32x4.ge_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.ge_u-arg-empty (result v128) (i32x4.ge_u) ) ) "type mismatch" ) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.eq (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.ne (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.lt_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.lt_u (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.le_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.le_u (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.gt_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.gt_u (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.ge_s (local.get $x) (local.get $y)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (param $x v128) (param $y v128) (result v128) (i4x32.ge_u (local.get $x) (local.get $y)))") "unknown operator") ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_dot_i16x8.wast ================================================ ;; Tests for i32x4 arithmetic operations on major boundary values and all special values. (module (func (export "i32x4.dot_i16x8_s") (param v128 v128) (result v128) (i32x4.dot_i16x8_s (local.get 0) (local.get 1))) ) ;; i32x4.dot_i16x8_s (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 536838144 536838144 536838144 536838144)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 536870912 536870912 536870912 536870912)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 536838144 536838144 536838144 536838144)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 536870912 536870912 536870912 536870912)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 536903680 536903680 536903680 536903680)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 65530 65530 65530 65530)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 65532 65532 65532 65532)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 -65536 -65536 -65536 -65536)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 65532 65532 65532 65532)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 65534 65534 65534 65534)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 65536 65536 65536 65536)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 2147352578 2147352578 2147352578 2147352578)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 2147418112 2147418112 2147418112 2147418112)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 -65534 -65534 -65534 -65534)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 65536 65536 65536 65536)) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 2 2 2 2)) ;; type check (assert_invalid (module (func (result v128) (i32x4.dot_i16x8_s (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.dot_i16x8_s-1st-arg-empty (result v128) (i32x4.dot_i16x8_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.dot_i16x8_s-arg-empty (result v128) (i32x4.dot_i16x8_s) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_extadd_pairwise_i16x8.wast ================================================ ;; Tests for i32x4 arithmetic operations on major boundary values and all special values. (module (func (export "i32x4.extadd_pairwise_i16x8_s") (param v128) (result v128) (i32x4.extadd_pairwise_i16x8_s (local.get 0))) (func (export "i32x4.extadd_pairwise_i16x8_u") (param v128) (result v128) (i32x4.extadd_pairwise_i16x8_u (local.get 0))) ) ;; i32x4.extadd_pairwise_i16x8_s (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (v128.const i32x4 65532 65532 65532 65532)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 -65534 -65534 -65534 -65534)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 -65536 -65536 -65536 -65536)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 65534 65534 65534 65534)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -2 -2 -2 -2)) ;; i32x4.extadd_pairwise_i16x8_u (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 131070 131070 131070 131070)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766)) (v128.const i32x4 65532 65532 65532 65532)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 65538 65538 65538 65538)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 65536 65536 65536 65536)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 65534 65534 65534 65534)) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 131070 131070 131070 131070)) ;; type check (assert_invalid (module (func (result v128) (i32x4.extadd_pairwise_i16x8_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extadd_pairwise_i16x8_u (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.extadd_pairwise_i16x8_s-arg-empty (result v128) (i32x4.extadd_pairwise_i16x8_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extadd_pairwise_i16x8_u-arg-empty (result v128) (i32x4.extadd_pairwise_i16x8_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_extmul_i16x8.wast ================================================ ;; Tests for i32x4 arithmetic operations on major boundary values and all special values. (module (func (export "i32x4.extmul_low_i16x8_s") (param v128 v128) (result v128) (i32x4.extmul_low_i16x8_s (local.get 0) (local.get 1))) (func (export "i32x4.extmul_high_i16x8_s") (param v128 v128) (result v128) (i32x4.extmul_high_i16x8_s (local.get 0) (local.get 1))) (func (export "i32x4.extmul_low_i16x8_u") (param v128 v128) (result v128) (i32x4.extmul_low_i16x8_u (local.get 0) (local.get 1))) (func (export "i32x4.extmul_high_i16x8_u") (param v128 v128) (result v128) (i32x4.extmul_high_i16x8_u (local.get 0) (local.get 1))) ) ;; i32x4.extmul_low_i16x8_s (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268419072 268419072 268419072 268419072)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268435456 268435456 268435456 268435456)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 268419072 268419072 268419072 268419072)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 268435456 268435456 268435456 268435456)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 268451840 268451840 268451840 268451840)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32765 32765 32765 32765)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 1073676289 1073676289 1073676289 1073676289)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 1073709056 1073709056 1073709056 1073709056)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 -32767 -32767 -32767 -32767)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 1 1 1 1)) ;; i32x4.extmul_high_i16x8_s (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268419072 268419072 268419072 268419072)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268435456 268435456 268435456 268435456)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 268419072 268419072 268419072 268419072)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 268435456 268435456 268435456 268435456)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 268451840 268451840 268451840 268451840)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32765 32765 32765 32765)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 1073676289 1073676289 1073676289 1073676289)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 1073709056 1073709056 1073709056 1073709056)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 -32767 -32767 -32767 -32767)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 1 1 1 1)) ;; i32x4.extmul_low_i16x8_u (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -131071 -131071 -131071 -131071)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268419072 268419072 268419072 268419072)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268435456 268435456 268435456 268435456)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 -1878999040 -1878999040 -1878999040 -1878999040)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 -1879048192 -1879048192 -1879048192 -1879048192)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 -1879097344 -1879097344 -1879097344 -1879097344)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32765 32765 32765 32765)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -2147385346 -2147385346 -2147385346 -2147385346)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -2147450881 -2147450881 -2147450881 -2147450881)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 2147450880 2147450880 2147450880 2147450880)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 1073676289 1073676289 1073676289 1073676289)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 1073774592 1073774592 1073774592 1073774592)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -131071 -131071 -131071 -131071)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 2147385345 2147385345 2147385345 2147385345)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 2147450880 2147450880 2147450880 2147450880)) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -131071 -131071 -131071 -131071)) ;; i32x4.extmul_high_i16x8_u (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 1 1 1 1 1 1 1 1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -131071 -131071 -131071 -131071)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 16383 16383 16383 16383 16383 16383 16383 16383) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268419072 268419072 268419072 268419072)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384) (v128.const i16x8 16384 16384 16384 16384 16384 16384 16384 16384)) (v128.const i32x4 268435456 268435456 268435456 268435456)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -16383 -16383 -16383 -16383 -16383 -16383 -16383 -16383) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 -1878999040 -1878999040 -1878999040 -1878999040)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 -1879048192 -1879048192 -1879048192 -1879048192)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -16385 -16385 -16385 -16385 -16385 -16385 -16385 -16385) (v128.const i16x8 -16384 -16384 -16384 -16384 -16384 -16384 -16384 -16384)) (v128.const i32x4 -1879097344 -1879097344 -1879097344 -1879097344)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 32765 32765 32765 32765 32765 32765 32765 32765) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32765 32765 32765 32765)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 32766 32766 32766 32766 32766 32766 32766 32766) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 32768 32768 32768 32768 32768 32768 32768 32768) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -32766 -32766 -32766 -32766 -32766 -32766 -32766 -32766) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -2147385346 -2147385346 -2147385346 -2147385346)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -2147450881 -2147450881 -2147450881 -2147450881)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 2147450880 2147450880 2147450880 2147450880)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 1073676289 1073676289 1073676289 1073676289)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768) (v128.const i16x8 -32767 -32767 -32767 -32767 -32767 -32767 -32767 -32767)) (v128.const i32x4 1073774592 1073774592 1073774592 1073774592)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 1 1 1 1 1 1 1 1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i32x4 -131071 -131071 -131071 -131071)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 2147385345 2147385345 2147385345 2147385345)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 2147450880 2147450880 2147450880 2147450880)) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i32x4 -131071 -131071 -131071 -131071)) ;; type check (assert_invalid (module (func (result v128) (i32x4.extmul_low_i16x8_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extmul_high_i16x8_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extmul_low_i16x8_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extmul_high_i16x8_u (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.extmul_low_i16x8_s-1st-arg-empty (result v128) (i32x4.extmul_low_i16x8_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_low_i16x8_s-arg-empty (result v128) (i32x4.extmul_low_i16x8_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_high_i16x8_s-1st-arg-empty (result v128) (i32x4.extmul_high_i16x8_s (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_high_i16x8_s-arg-empty (result v128) (i32x4.extmul_high_i16x8_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_low_i16x8_u-1st-arg-empty (result v128) (i32x4.extmul_low_i16x8_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_low_i16x8_u-arg-empty (result v128) (i32x4.extmul_low_i16x8_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_high_i16x8_u-1st-arg-empty (result v128) (i32x4.extmul_high_i16x8_u (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extmul_high_i16x8_u-arg-empty (result v128) (i32x4.extmul_high_i16x8_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_trunc_sat_f32x4.wast ================================================ ;; Tests for i32x4 trunc sat conversions from float. (module (func (export "i32x4.trunc_sat_f32x4_s") (param v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get 0))) (func (export "i32x4.trunc_sat_f32x4_u") (param v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get 0))) ) ;; i32x4.trunc_sat_f32x4_s (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0.0 0.0 0.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 1.5 1.5 1.5 1.5)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -1.5 -1.5 -1.5 -1.5)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 1.9 1.9 1.9 1.9)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 2.0 2.0 2.0 2.0)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -1.9 -1.9 -1.9 -1.9)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -2.0 -2.0 -2.0 -2.0)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 2147483520.0 2147483520.0 2147483520.0 2147483520.0)) (v128.const i32x4 2147483520 2147483520 2147483520 2147483520)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -2147483520.0 -2147483520.0 -2147483520.0 -2147483520.0)) (v128.const i32x4 -2147483520 -2147483520 -2147483520 -2147483520)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 2147483648.0 2147483648.0 2147483648.0 2147483648.0)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -2147483648.0 -2147483648.0 -2147483648.0 -2147483648.0)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 4294967294.0 4294967294.0 4294967294.0 4294967294.0)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -4294967294.0 -4294967294.0 -4294967294.0 -4294967294.0)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 2147483647.0 2147483647.0 2147483647.0 2147483647.0)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -2147483647.0 -2147483647.0 -2147483647.0 -2147483647.0)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 4294967294.0 4294967294.0 4294967294.0 4294967294.0)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 4294967295.0 4294967295.0 4294967295.0 4294967295.0)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 4294967296.0 4294967296.0 4294967296.0 4294967296.0)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.19999ap+0 0x1.19999ap+0 0x1.19999ap+0 0x1.19999ap+0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.19999ap+0 -0x1.19999ap+0 -0x1.19999ap+0 -0x1.19999ap+0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 6 6)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -6 -6 -6 -6)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.ccccccp-1 0x1.ccccccp-1 0x1.ccccccp-1 0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.ccccccp-1 -0x1.ccccccp-1 -0x1.ccccccp-1 -0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.fffffep-1 0x1.fffffep-1 0x1.fffffep-1 0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.fffffep-1 -0x1.fffffep-1 -0x1.fffffep-1 -0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 6 6)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -6 -6 -6 -6)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 +nan +nan +nan +nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 nan:0x444444 nan:0x444444 nan:0x444444 nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -nan:0x444444 -nan:0x444444 -nan:0x444444 -nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 42 42 42 42)) (v128.const i32x4 42 42 42 42)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 -42 -42 -42 -42)) (v128.const i32x4 -42 -42 -42 -42)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 0123456792.0 0123456792.0 0123456792.0 0123456792.0)) (v128.const i32x4 123456792 123456792 123456792 123456792)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 01234567890.0 01234567890.0 01234567890.0 01234567890.0)) (v128.const i32x4 1234567936 1234567936 1234567936 1234567936)) ;; i32x4.trunc_sat_f32x4_u (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0.0 0.0 0.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 1.5 1.5 1.5 1.5)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -1.5 -1.5 -1.5 -1.5)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 1.9 1.9 1.9 1.9)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 2.0 2.0 2.0 2.0)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -1.9 -1.9 -1.9 -1.9)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -2.0 -2.0 -2.0 -2.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 2147483520.0 2147483520.0 2147483520.0 2147483520.0)) (v128.const i32x4 2147483520 2147483520 2147483520 2147483520)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -2147483520.0 -2147483520.0 -2147483520.0 -2147483520.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 2147483648.0 2147483648.0 2147483648.0 2147483648.0)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -2147483648.0 -2147483648.0 -2147483648.0 -2147483648.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 4294967294.0 4294967294.0 4294967294.0 4294967294.0)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -4294967294.0 -4294967294.0 -4294967294.0 -4294967294.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 2147483647.0 2147483647.0 2147483647.0 2147483647.0)) (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -2147483647.0 -2147483647.0 -2147483647.0 -2147483647.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 4294967294.0 4294967294.0 4294967294.0 4294967294.0)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 4294967295.0 4294967295.0 4294967295.0 4294967295.0)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 4294967296.0 4294967296.0 4294967296.0 4294967296.0)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1p-149 0x1p-149 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1p-149 -0x1p-149 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1p-126 0x1p-126 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1p-126 -0x1p-126 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1p-1 0x1p-1 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1p-1 -0x1p-1 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1p+0 0x1p+0 0x1p+0 0x1p+0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1p+0 -0x1p+0 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.19999ap+0 0x1.19999ap+0 0x1.19999ap+0 0x1.19999ap+0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.19999ap+0 -0x1.19999ap+0 -0x1.19999ap+0 -0x1.19999ap+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 6 6)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.ccccccp-1 0x1.ccccccp-1 0x1.ccccccp-1 0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.ccccccp-1 -0x1.ccccccp-1 -0x1.ccccccp-1 -0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.fffffep-1 0x1.fffffep-1 0x1.fffffep-1 0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.fffffep-1 -0x1.fffffep-1 -0x1.fffffep-1 -0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 6 6)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 +nan +nan +nan +nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 nan:0x444444 nan:0x444444 nan:0x444444 nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -nan:0x444444 -nan:0x444444 -nan:0x444444 -nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 42 42 42 42)) (v128.const i32x4 42 42 42 42)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 -42 -42 -42 -42)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 0123456792.0 0123456792.0 0123456792.0 0123456792.0)) (v128.const i32x4 123456792 123456792 123456792 123456792)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 01234567890.0 01234567890.0 01234567890.0 01234567890.0)) (v128.const i32x4 1234567936 1234567936 1234567936 1234567936)) ;; type check (assert_invalid (module (func (result v128) (i32x4.trunc_sat_f32x4_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.trunc_sat_f32x4_u (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.trunc_sat_f32x4_s-arg-empty (result v128) (i32x4.trunc_sat_f32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.trunc_sat_f32x4_u-arg-empty (result v128) (i32x4.trunc_sat_f32x4_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i32x4_trunc_sat_f64x2.wast ================================================ ;; Tests for i32x4 trunc sat conversions from float. (module (func (export "i32x4.trunc_sat_f64x2_s_zero") (param v128) (result v128) (i32x4.trunc_sat_f64x2_s_zero (local.get 0))) (func (export "i32x4.trunc_sat_f64x2_u_zero") (param v128) (result v128) (i32x4.trunc_sat_f64x2_u_zero (local.get 0))) ) ;; i32x4.trunc_sat_f64x2_s_zero (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 1.5 1.5)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -1.5 -1.5)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 1.9 1.9)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 2.0 2.0)) (v128.const i32x4 2 2 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -1.9 -1.9)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -2.0 -2.0)) (v128.const i32x4 -2 -2 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 2147483520.0 2147483520.0)) (v128.const i32x4 2147483520 2147483520 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -2147483520.0 -2147483520.0)) (v128.const i32x4 -2147483520 -2147483520 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 2147483648.0 2147483648.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -2147483648.0 -2147483648.0)) (v128.const i32x4 -2147483648 -2147483648 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 4294967294.0 4294967294.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -4294967294.0 -4294967294.0)) (v128.const i32x4 -2147483648 -2147483648 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 2147483647.0 2147483647.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -2147483647.0 -2147483647.0)) (v128.const i32x4 -2147483647 -2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 4294967294.0 4294967294.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 4294967295.0 4294967295.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 4294967296.0 4294967296.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.19999ap+0 0x1.19999ap+0)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.19999ap+0 -0x1.19999ap+0)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -6 -6 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -2147483648 -2147483648 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.ccccccp-1 0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.ccccccp-1 -0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.fffffep-1 0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.fffffep-1 -0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 -6 -6 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 -2147483648 -2147483648 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 +inf +inf)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -inf -inf)) (v128.const i32x4 -2147483648 -2147483648 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 +nan +nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 nan:0x444444 nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -nan:0x444444 -nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 42 42)) (v128.const i32x4 42 42 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -42 -42)) (v128.const i32x4 -42 -42 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 0123456792.0 0123456792.0)) (v128.const i32x4 123456792 123456792 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 01234567890.0 01234567890.0)) (v128.const i32x4 1234567890 1234567890 0 0)) ;; i32x4.trunc_sat_f64x2_u_zero (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0.0 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0.0 -0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 1.5 1.5)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -1.5 -1.5)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 1.9 1.9)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 2.0 2.0)) (v128.const i32x4 2 2 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -1.9 -1.9)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -2.0 -2.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 2147483520.0 2147483520.0)) (v128.const i32x4 2147483520 2147483520 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -2147483520.0 -2147483520.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 2147483648.0 2147483648.0)) (v128.const i32x4 2147483648 2147483648 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -2147483648.0 -2147483648.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 4294967294.0 4294967294.0)) (v128.const i32x4 4294967294 4294967294 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -4294967294.0 -4294967294.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 2147483647.0 2147483647.0)) (v128.const i32x4 2147483647 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -2147483647.0 -2147483647.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 4294967294.0 4294967294.0)) (v128.const i32x4 4294967294 4294967294 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 4294967295.0 4294967295.0)) (v128.const i32x4 4294967295 4294967295 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 4294967296.0 4294967296.0)) (v128.const i32x4 4294967295 4294967295 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1p-149 0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1p-149 -0x1p-149)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1p-126 0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1p-126 -0x1p-126)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1p-1 0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1p-1 -0x1p-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1p+0 0x1p+0)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1p+0 -0x1p+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.19999ap+0 0x1.19999ap+0)) (v128.const i32x4 1 1 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.19999ap+0 -0x1.19999ap+0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 4294967295 4294967295 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.ccccccp-1 0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.ccccccp-1 -0x1.ccccccp-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.fffffep-1 0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.fffffep-1 -0x1.fffffep-1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.921fb6p+2 0x1.921fb6p+2)) (v128.const i32x4 6 6 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.921fb6p+2 -0x1.921fb6p+2)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0x1.fffffep+127 0x1.fffffep+127)) (v128.const i32x4 4294967295 4294967295 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -0x1.fffffep+127 -0x1.fffffep+127)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 +inf +inf)) (v128.const i32x4 4294967295 4294967295 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -inf -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 +nan +nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -nan -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 nan:0x444444 nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -nan:0x444444 -nan:0x444444)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 42 42)) (v128.const i32x4 42 42 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -42 -42)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 0123456792.0 0123456792.0)) (v128.const i32x4 123456792 123456792 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 01234567890.0 01234567890.0)) (v128.const i32x4 1234567890 1234567890 0 0)) ;; type check (assert_invalid (module (func (result v128) (i32x4.trunc_sat_f64x2_s_zero (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.trunc_sat_f64x2_u_zero (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i32x4.trunc_sat_f64x2_s_zero-arg-empty (result v128) (i32x4.trunc_sat_f64x2_s_zero) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.trunc_sat_f64x2_u_zero-arg-empty (result v128) (i32x4.trunc_sat_f64x2_u_zero) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i64x2_arith.wast ================================================ ;; Tests for i64x2 arithmetic operations on major boundary values and all special values. (module (func (export "i64x2.add") (param v128 v128) (result v128) (i64x2.add (local.get 0) (local.get 1))) (func (export "i64x2.sub") (param v128 v128) (result v128) (i64x2.sub (local.get 0) (local.get 1))) (func (export "i64x2.mul") (param v128 v128) (result v128) (i64x2.mul (local.get 0) (local.get 1))) (func (export "i64x2.neg") (param v128) (result v128) (i64x2.neg (local.get 0))) ) ;; i64x2.add (assert_return (invoke "i64x2.add" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0 0) (v128.const i64x2 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const i64x2 1 1)) (v128.const i64x2 2 2)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0 0) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.add" (v128.const i64x2 4611686018427387903 4611686018427387903) (v128.const i64x2 4611686018427387904 4611686018427387904)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 4611686018427387904 4611686018427387904) (v128.const i64x2 4611686018427387904 4611686018427387904)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -4611686018427387903 -4611686018427387903) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -4611686018427387904 -4611686018427387904) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -4611686018427387905 -4611686018427387905) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775805 9223372036854775805) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775806 9223372036854775806)) (assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775806 9223372036854775806) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775808 9223372036854775808) (v128.const i64x2 1 1)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775806 -9223372036854775806) (v128.const i64x2 -1 -1)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775807 -9223372036854775807) (v128.const i64x2 -1 -1)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -1 -1)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775807 9223372036854775807) (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 9223372036854775806 9223372036854775806)) (assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x3fffffffffffffff 0x3fffffffffffffff) (v128.const i64x2 0x4000000000000000 0x4000000000000000)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x4000000000000000 0x4000000000000000) (v128.const i64x2 0x4000000000000000 0x4000000000000000)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -0x3fffffffffffffff -0x3fffffffffffffff) (v128.const i64x2 -0x40000000fffffff -0x40000000fffffff)) (v128.const i64x2 -4899916394847535102 -4899916394847535102)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000) (v128.const i64x2 -0x400000000000000 -0x400000000000000)) (v128.const i64x2 -4899916394579099648 -4899916394579099648)) (assert_return (invoke "i64x2.add" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000) (v128.const i64x2 -0x400000000000001 -0x400000000000001)) (v128.const i64x2 -4899916394579099649 -4899916394579099649)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x7ffffffffffffff 0x7ffffffffffffff)) (v128.const i64x2 -8646911284551352322 -8646911284551352322)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x01 0x01)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i64x2 -0x01 -0x01)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i64x2 0x01 0x01)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i8x16 0 0 0 0 0 0 0 0x80 0 0 0 0 0 0 0 0x80)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i16x8 0 0 0 0x8000 0 0 0 0x8000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i32x4 0 0x80000000 0 0x80000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 +0.0 +0.0)) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 -0.0 -0.0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 1.0 1.0)) (v128.const i64x2 0xbff0000000000000 0xbff0000000000000)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 -1.0 -1.0)) (v128.const i64x2 0x3ff0000000000000 0x3ff0000000000000)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const f64x2 +inf +inf)) (v128.const i64x2 0x7ff0000000000001 0x7ff0000000000001)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0xfff0000000000001 0xfff0000000000001)) (assert_return (invoke "i64x2.add" (v128.const i64x2 1 1) (v128.const f64x2 nan nan)) (v128.const i64x2 0x7ff8000000000001 0x7ff8000000000001)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0 1) (v128.const i64x2 0 0xffffffffffffffff)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0 1) (v128.const i64x2 0 2)) (v128.const i64x2 0 3)) (assert_return (invoke "i64x2.add" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789) (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789)) (v128.const i64x2 02_469_135_780_246_913_578 02_469_135_780_246_913_578)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef) (v128.const i64x2 0x0_90AB_cdef_1234_5678 0x0_90AB_cdef_1234_5678)) (v128.const i64x2 0x0_a2e0_2467_a2e0_2467 0x0_a2e0_2467_a2e0_2467)) ;; i64x2.sub (assert_return (invoke "i64x2.sub" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0 0) (v128.const i64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1) (v128.const i64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0 0) (v128.const i64x2 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1) (v128.const i64x2 -1 -1)) (v128.const i64x2 2 2)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 4611686018427387903 4611686018427387903) (v128.const i64x2 4611686018427387904 4611686018427387904)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 4611686018427387904 4611686018427387904) (v128.const i64x2 4611686018427387904 4611686018427387904)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -4611686018427387903 -4611686018427387903) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -4611686018427387904 -4611686018427387904) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -4611686018427387905 -4611686018427387905) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775805 9223372036854775805) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775804 9223372036854775804)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775806 9223372036854775806) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775805 9223372036854775805)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775808 9223372036854775808) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775806 -9223372036854775806) (v128.const i64x2 -1 -1)) (v128.const i64x2 -9223372036854775805 -9223372036854775805)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775807 -9223372036854775807) (v128.const i64x2 -1 -1)) (v128.const i64x2 -9223372036854775806 -9223372036854775806)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -1 -1)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775807 9223372036854775807) (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 1 1)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x3fffffffffffffff 0x3fffffffffffffff) (v128.const i64x2 0x4000000000000000 0x4000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x4000000000000000 0x4000000000000000) (v128.const i64x2 0x4000000000000000 0x4000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -0x3fffffffffffffff -0x3fffffffffffffff) (v128.const i64x2 -0x40000000fffffff -0x40000000fffffff)) (v128.const i64x2 -4323455642007240704 -4323455642007240704)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000) (v128.const i64x2 -0x400000000000000 -0x400000000000000)) (v128.const i64x2 -4323455642275676160 -4323455642275676160)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000) (v128.const i64x2 -0x400000000000001 -0x400000000000001)) (v128.const i64x2 -4323455642275676159 -4323455642275676159)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x7ffffffffffffff 0x7ffffffffffffff)) (v128.const i64x2 8646911284551352320 8646911284551352320)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x01 0x01)) (v128.const i64x2 9223372036854775806 9223372036854775806)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i64x2 -0x01 -0x01)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i64x2 0x01 0x01)) (v128.const i64x2 -2 -2)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i8x16 0 0 0 0 0 0 0 0x80 0 0 0 0 0 0 0 0x80)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i64x2 2 2)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i16x8 0 0 0 0x8000 0 0 0 0x8000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i64x2 2 2)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i32x4 0 0x80000000 0 0x80000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i64x2 2 2)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 +0.0 +0.0)) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 -0.0 -0.0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 1.0 1.0)) (v128.const i64x2 0x4010000000000000 0x4010000000000000)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const f64x2 -1.0 -1.0)) (v128.const i64x2 0xc010000000000000 0xc010000000000000)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x1 0x1) (v128.const f64x2 +inf +inf)) (v128.const i64x2 0x8010000000000001 0x8010000000000001)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x1 0x1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0x0010000000000001 0x0010000000000001)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x1 0x1) (v128.const f64x2 nan nan)) (v128.const i64x2 0x8008000000000001 0x8008000000000001)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0 1) (v128.const i64x2 0 0xffffffffffffffff)) (v128.const i64x2 0 0x02)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0 1) (v128.const i64x2 0 2)) (v128.const i64x2 0 -1)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 03_214_567_890_123_456_789 03_214_567_890_123_456_789) (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789)) (v128.const i64x2 01_980_000_000_000_000_000 01_980_000_000_000_000_000)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 0x0_90AB_cdef_8765_4321 0x0_90AB_cdef_8765_4321) (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef)) (v128.const i64x2 0x0_7e77_7776_f6b9_7532 0x0_7e77_7776_f6b9_7532)) ;; i64x2.mul (assert_return (invoke "i64x2.mul" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0 0) (v128.const i64x2 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 1 1) (v128.const i64x2 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0 0) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 1 1) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 4611686018427387903 4611686018427387903) (v128.const i64x2 4611686018427387904 4611686018427387904)) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 4611686018427387904 4611686018427387904) (v128.const i64x2 4611686018427387904 4611686018427387904)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -4611686018427387903 -4611686018427387903) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -4611686018427387904 -4611686018427387904) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -4611686018427387905 -4611686018427387905) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (v128.const i64x2 4611686018427387904 4611686018427387904)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775805 9223372036854775805) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775805 9223372036854775805)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775806 9223372036854775806) (v128.const i64x2 1 1)) (v128.const i64x2 9223372036854775806 9223372036854775806)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775808 9223372036854775808) (v128.const i64x2 1 1)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775806 -9223372036854775806) (v128.const i64x2 -1 -1)) (v128.const i64x2 9223372036854775806 9223372036854775806)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775807 -9223372036854775807) (v128.const i64x2 -1 -1)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -1 -1)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775807 9223372036854775807) (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775808 -9223372036854775808) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x3fffffffffffffff 0x3fffffffffffffff) (v128.const i64x2 0x4000000000000000 0x4000000000000000)) (v128.const i64x2 -4611686018427387904 -4611686018427387904)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x4000000000000000 0x4000000000000000) (v128.const i64x2 0x4000000000000000 0x4000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -0x3fffffffffffffff -0x3fffffffffffffff) (v128.const i64x2 -0x40000000fffffff -0x40000000fffffff)) (v128.const i64x2 -4899916394847535103 -4899916394847535103)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000) (v128.const i64x2 -0x400000000000000 -0x400000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000) (v128.const i64x2 -0x400000000000001 -0x400000000000001)) (v128.const i64x2 4611686018427387904 4611686018427387904)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x7ffffffffffffff 0x7ffffffffffffff)) (v128.const i64x2 8646911284551352321 8646911284551352321)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x01 0x01)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i64x2 -0x01 -0x01)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i64x2 0x01 0x01)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i8x16 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i16x8 0 0 0 0x02 0 0 0 0x02)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000) (v128.const i32x4 0 0x02 0 0x02)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000) (v128.const f64x2 +0.0 +0.0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000) (v128.const f64x2 -0.0 -0.0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000) (v128.const f64x2 1.0 1.0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000) (v128.const f64x2 -1.0 -1.0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x1 0x1) (v128.const f64x2 +inf +inf)) (v128.const i64x2 0x7ff0000000000000 0x7ff0000000000000)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x1 0x1) (v128.const f64x2 -inf -inf)) (v128.const i64x2 0xfff0000000000000 0xfff0000000000000)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x1 0x1) (v128.const f64x2 nan nan)) (v128.const i64x2 0x7ff8000000000000 0x7ff8000000000000)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0 1) (v128.const i64x2 0 0xffffffffffffffff)) (v128.const i64x2 0 0xffffffffffffffff)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0 1) (v128.const i64x2 0 2)) (v128.const i64x2 0 0x02)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789) (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789)) (v128.const i64x2 09_710_478_858_155_731_897 09_710_478_858_155_731_897)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef) (v128.const i64x2 0x0_90AB_cdef_8765_4321 0x0_90AB_cdef_8765_4321)) (v128.const i64x2 0x0_602f_05e9_e556_18cf 0x0_602f_05e9_e556_18cf)) ;; i64x2.neg (assert_return (invoke "i64x2.neg" (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 9223372036854775806 9223372036854775806)) (v128.const i64x2 -9223372036854775806 -9223372036854775806)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 9223372036854775807 9223372036854775807)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 0x01 0x01)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 -0x01 -0x01)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 -0x8000000000000000 -0x8000000000000000)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 -0x7fffffffffffffff -0x7fffffffffffffff)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)) (v128.const i64x2 -9223372036854775807 -9223372036854775807)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.neg" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)) (v128.const i64x2 1 1)) ;; type check (assert_invalid (module (func (result v128) (i64x2.neg (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.add (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.sub (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.mul (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i64x2.neg-arg-empty (result v128) (i64x2.neg) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.add-1st-arg-empty (result v128) (i64x2.add (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.add-arg-empty (result v128) (i64x2.add) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.sub-1st-arg-empty (result v128) (i64x2.sub (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.sub-arg-empty (result v128) (i64x2.sub) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.mul-1st-arg-empty (result v128) (i64x2.mul (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.mul-arg-empty (result v128) (i64x2.mul) ) ) "type mismatch" ) ;; combination (module (func (export "add-sub") (param v128 v128 v128) (result v128) (i64x2.add (i64x2.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-add") (param v128 v128 v128) (result v128) (i64x2.mul (i64x2.add (local.get 0) (local.get 1))(local.get 2))) (func (export "mul-sub") (param v128 v128 v128) (result v128) (i64x2.mul (i64x2.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "sub-add") (param v128 v128 v128) (result v128) (i64x2.sub (i64x2.add (local.get 0) (local.get 1))(local.get 2))) (func (export "add-neg") (param v128 v128) (result v128) (i64x2.add (i64x2.neg (local.get 0)) (local.get 1))) (func (export "mul-neg") (param v128 v128) (result v128) (i64x2.mul (i64x2.neg (local.get 0)) (local.get 1))) (func (export "sub-neg") (param v128 v128) (result v128) (i64x2.sub (i64x2.neg (local.get 0)) (local.get 1))) ) (assert_return (invoke "add-sub" (v128.const i64x2 0 1) (v128.const i64x2 0 2) (v128.const i64x2 0 2)) (v128.const i64x2 0 1)) (assert_return (invoke "mul-add" (v128.const i64x2 0 1) (v128.const i64x2 0 1) (v128.const i64x2 2 2)) (v128.const i64x2 0 4)) (assert_return (invoke "mul-sub" (v128.const i64x2 0 2) (v128.const i64x2 0 1) (v128.const i64x2 0 1)) (v128.const i64x2 0 1)) (assert_return (invoke "sub-add" (v128.const i64x2 0 1) (v128.const i64x2 0 2) (v128.const i64x2 0 2)) (v128.const i64x2 0 1)) (assert_return (invoke "add-neg" (v128.const i64x2 0 1) (v128.const i64x2 0 1)) (v128.const i64x2 0 0)) (assert_return (invoke "mul-neg" (v128.const i64x2 0 1) (v128.const i64x2 2 2)) (v128.const i64x2 0 -2)) (assert_return (invoke "sub-neg" (v128.const i64x2 0 1) (v128.const i64x2 0 1)) (v128.const i64x2 0 -2)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i64x2_arith2.wast ================================================ ;; Tests for i64x2 [abs] operations. (module (func (export "i64x2.abs") (param v128) (result v128) (i64x2.abs (local.get 0))) (func (export "i64x2.abs_with_const_0") (result v128) (i64x2.abs (v128.const i64x2 -9223372036854775808 9223372036854775807))) ) (assert_return (invoke "i64x2.abs" (v128.const i64x2 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)) (v128.const i64x2 0x1 0x1)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 9223372036854775808 9223372036854775808)) (v128.const i64x2 9223372036854775808 9223372036854775808)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (v128.const i64x2 9223372036854775808 9223372036854775808)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -0x8000000000000000 -0x8000000000000000)) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 01_2_3 01_2_3)) (v128.const i64x2 01_2_3 01_2_3)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -01_2_3 -01_2_3)) (v128.const i64x2 123 123)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 0x80 0x80)) (v128.const i64x2 0x80 0x80)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -0x80 -0x80)) (v128.const i64x2 0x80 0x80)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 0x0_8_0 0x0_8_0)) (v128.const i64x2 0x0_8_0 0x0_8_0)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -0x0_8_0 -0x0_8_0)) (v128.const i64x2 0x80 0x80)) ;; Const vs const (assert_return (invoke "i64x2.abs_with_const_0") (v128.const i64x2 9223372036854775808 9223372036854775807)) ;; Param vs const ;; Test different lanes go through different if-then clauses (assert_return (invoke "i64x2.abs" (v128.const i64x2 -9223372036854775808 9223372036854775807)) (v128.const i64x2 9223372036854775808 9223372036854775807)) ;; Test opposite signs of zero (assert_return (invoke "i64x2.abs" (v128.const i64x2 -0 -0)) (v128.const i64x2 -0 -0)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 +0 0)) (v128.const i64x2 +0 0)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 -0 -0)) (v128.const i64x2 -0 -0)) (assert_return (invoke "i64x2.abs" (v128.const i64x2 +0 +0)) (v128.const i64x2 +0 +0)) ;; Unknown operators ;; Type check (assert_invalid (module (func (result v128) (i64x2.abs (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i64x2.abs-arg-empty (result v128) (i64x2.abs) ) ) "type mismatch" ) ;; Combination (module (func (export "i64x2.abs-i64x2.abs") (param v128) (result v128) (i64x2.abs (i64x2.abs (local.get 0)))) ) (assert_return (invoke "i64x2.abs-i64x2.abs" (v128.const i64x2 -1 -1)) (v128.const i64x2 1 1)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i64x2_cmp.wast ================================================ ;; Test all the i64x2 comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) (i64x2.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) (i64x2.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x v128) (param $y v128) (result v128) (i64x2.lt_s (local.get $x) (local.get $y))) (func (export "le_s") (param $x v128) (param $y v128) (result v128) (i64x2.le_s (local.get $x) (local.get $y))) (func (export "gt_s") (param $x v128) (param $y v128) (result v128) (i64x2.gt_s (local.get $x) (local.get $y))) (func (export "ge_s") (param $x v128) (param $y v128) (result v128) (i64x2.ge_s (local.get $x) (local.get $y))) ) ;; eq ;; i64x2.eq (i64x2) (i64x2) (assert_return (invoke "eq" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0x0000000000000000 0x0000000000000000) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0) (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F) (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0x03020100 0x11100904) (v128.const i64x2 0x03020100 0x11100904)) (v128.const i64x2 -1 -1)) (assert_return (invoke "eq" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0FFFFFFFFFFFFFFF 0x0FFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "eq" (v128.const i64x2 0x1 0x1) (v128.const i64x2 0x2 0x2)) (v128.const i64x2 0 0)) ;; ne ;; i64x2.ne (i64x2) (i64x2) ;; hex vs hex (assert_return (invoke "ne" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "ne" (v128.const i64x2 0x0000000000000000 0x0000000000000000) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "ne" (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0) (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0)) (v128.const i64x2 0 0)) (assert_return (invoke "ne" (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F) (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F)) (v128.const i64x2 0 0)) (assert_return (invoke "ne" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "ne" (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "ne" (v128.const i64x2 0x03020100 0x11100904) (v128.const i64x2 0x03020100 0x11100904)) (v128.const i64x2 0 0)) ;; lt_s ;; i64x2.lt_s (i64x2) (i64x2) ;; hex vs hex (assert_return (invoke "lt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x0000000000000000 0x0000000000000000) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0) (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F) (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B) (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B)) (v128.const i64x2 0 0)) ;; hex vs dec (assert_return (invoke "lt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 9259542123273814144 9259542123273814144)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 -9187201950435737472 -9187201950435737472)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x8382818000FFFEFD 0x7F020100FFFEFD80) (v128.const i64x2 -8970465120996032771 9151878496576798080)) (v128.const i64x2 0 0)) ;; dec vs dec (assert_return (invoke "lt_s" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 18446744073709551615 0) (v128.const i64x2 18446744073709551615 0)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0 18446744073709551615) (v128.const i64x2 0 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 -9223372036854775807 18446744073709551615) (v128.const i64x2 9223372036854775809 -1)) (v128.const i64x2 0 0)) ;; hex vs float (assert_return (invoke "lt_s" (v128.const i64x2 0xc060000000000000 0xc05fc00000000000) (v128.const f64x2 -128.0 -127.0)) (v128.const i64x2 0 0)) (assert_return (invoke "lt_s" (v128.const i64x2 0x3ff0000000000000 0x405fc00000000000) (v128.const f64x2 1.0 127.0)) (v128.const i64x2 0 0)) ;; le_s ;; i64x2.le_s (i64x2) (i64x2) ;; hex vs hex (assert_return (invoke "le_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x0000000000000000 0x0000000000000000) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0) (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F) (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B) (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B)) (v128.const i64x2 -1 -1)) ;; hex vs dec (assert_return (invoke "le_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 9259542123273814144 9259542123273814144)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 -9187201950435737472 -9187201950435737472)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x8382818000FFFEFD 0x7F020100FFFEFD80) (v128.const i64x2 -8970465120996032771 9151878496576798080)) (v128.const i64x2 -1 -1)) ;; dec vs dec (assert_return (invoke "le_s" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0 0) (v128.const i64x2 0 -1)) (v128.const i64x2 -1 0)) (assert_return (invoke "le_s" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 18446744073709551615 0) (v128.const i64x2 18446744073709551615 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0 18446744073709551615) (v128.const i64x2 0 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 -9223372036854775807 18446744073709551615) (v128.const i64x2 9223372036854775809 -1)) (v128.const i64x2 -1 -1)) ;; hex vs float (assert_return (invoke "le_s" (v128.const i64x2 0xc060000000000000 0xc05fc00000000000) (v128.const f64x2 -128.0 -127.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "le_s" (v128.const i64x2 0x3ff0000000000000 0x405fc00000000000) (v128.const f64x2 1.0 127.0)) (v128.const i64x2 -1 -1)) ;; gt_s ;; i64x2.gt_s (i64x2) (i64x2) ;; hex vs hex (assert_return (invoke "gt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x0000000000000000 0x0000000000000000) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0) (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F) (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B) (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B)) (v128.const i64x2 0 0)) ;; hex vs dec (assert_return (invoke "gt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 9259542123273814144 9259542123273814144)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 -9187201950435737472 -9187201950435737472)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x8382818000FFFEFD 0x7F020100FFFEFD80) (v128.const i64x2 -8970465120996032771 9151878496576798080)) (v128.const i64x2 0 0)) ;; dec vs dec (assert_return (invoke "gt_s" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 18446744073709551615 0) (v128.const i64x2 18446744073709551615 0)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0 18446744073709551615) (v128.const i64x2 0 18446744073709551615)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 -9223372036854775807 18446744073709551615) (v128.const i64x2 9223372036854775809 -1)) (v128.const i64x2 0 0)) ;; hex vs float (assert_return (invoke "gt_s" (v128.const i64x2 0xc060000000000000 0xc05fc00000000000) (v128.const f64x2 -128.0 -127.0)) (v128.const i64x2 0 0)) (assert_return (invoke "gt_s" (v128.const i64x2 0x3ff0000000000000 0x405fc00000000000) (v128.const f64x2 1.0 127.0)) (v128.const i64x2 0 0)) ;; ge_s ;; i64x2.ge_s (i64x2) (i64x2) ;; hex vs hex (assert_return (invoke "ge_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x0000000000000000 0x0000000000000000) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0) (v128.const i64x2 0xF0F0F0F0F0F0F0F0 0xF0F0F0F0F0F0F0F0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F) (v128.const i64x2 0x0F0F0F0F0F0F0F0F 0x0F0F0F0F0F0F0F0F)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000) (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0x0000000000000000)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 0x0000000000000000 0xFFFFFFFFFFFFFFFF)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B) (v128.const i64x2 0x0302010011100904 0x1A0B0A12FFABAA1B)) (v128.const i64x2 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 9259542123273814144 9259542123273814144)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x8080808080808080 0x8080808080808080) (v128.const i64x2 -9187201950435737472 -9187201950435737472)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x8382818000FFFEFD 0x7F020100FFFEFD80) (v128.const i64x2 -8970465120996032771 9151878496576798080)) (v128.const i64x2 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_s" (v128.const i64x2 -1 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 -1 -1) (v128.const i64x2 0 -1)) (v128.const i64x2 0 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0 0) (v128.const i64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 18446744073709551615 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 18446744073709551615 18446744073709551615) (v128.const i64x2 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 18446744073709551615 0) (v128.const i64x2 18446744073709551615 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0 18446744073709551615) (v128.const i64x2 0 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 -9223372036854775807 18446744073709551615) (v128.const i64x2 9223372036854775809 -1)) (v128.const i64x2 -1 -1)) ;; hex vs float (assert_return (invoke "ge_s" (v128.const i64x2 0xc060000000000000 0xc05fc00000000000) (v128.const f64x2 -128.0 -127.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "ge_s" (v128.const i64x2 0x3ff0000000000000 0x405fc00000000000) (v128.const f64x2 1.0 127.0)) (v128.const i64x2 -1 -1)) ;; Type check (assert_invalid (module (func (result v128) (i64x2.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.ne (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i64x2.eq-1st-arg-empty (result v128) (i64x2.eq (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.eq-arg-empty (result v128) (i64x2.eq) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.ne-1st-arg-empty (result v128) (i64x2.ne (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.ne-arg-empty (result v128) (i64x2.ne) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i64x2_extmul_i32x4.wast ================================================ ;; Tests for i64x2 arithmetic operations on major boundary values and all special values. (module (func (export "i64x2.extmul_low_i32x4_s") (param v128 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get 0) (local.get 1))) (func (export "i64x2.extmul_high_i32x4_s") (param v128 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get 0) (local.get 1))) (func (export "i64x2.extmul_low_i32x4_u") (param v128 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get 0) (local.get 1))) (func (export "i64x2.extmul_high_i32x4_u") (param v128 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get 0) (local.get 1))) ) ;; i64x2.extmul_low_i32x4_s (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921503533105152 1152921503533105152)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921504606846976 1152921504606846976)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 1152921503533105152 1152921503533105152)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 1152921504606846976 1152921504606846976)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 1152921505680588800 1152921505680588800)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483645 2147483645)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 4611686014132420609 4611686014132420609)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 4611686018427387904 4611686018427387904)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i64x2 4611686016279904256 4611686016279904256)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 -2147483647 -2147483647)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i64x2 1 1)) ;; i64x2.extmul_high_i32x4_s (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921503533105152 1152921503533105152)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921504606846976 1152921504606846976)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 1152921503533105152 1152921503533105152)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 1152921504606846976 1152921504606846976)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 1152921505680588800 1152921505680588800)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483645 2147483645)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 4611686014132420609 4611686014132420609)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 4611686018427387904 4611686018427387904)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i64x2 4611686016279904256 4611686016279904256)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 -2147483647 -2147483647)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i64x2 1 1)) ;; i64x2.extmul_low_i32x4_u (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -8589934591 -8589934591)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921503533105152 1152921503533105152)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921504606846976 1152921504606846976)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 -8070450529026703360 -8070450529026703360)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 -8070450532247928832 -8070450532247928832)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 -8070450535469154304 -8070450535469154304)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483645 2147483645)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -9223372030412324866 -9223372030412324866)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -9223372034707292161 -9223372034707292161)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 9223372034707292160 9223372034707292160)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 4611686014132420609 4611686014132420609)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 4611686018427387904 4611686018427387904)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i64x2 4611686020574871552 4611686020574871552)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -8589934591 -8589934591)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 9223372030412324865 9223372030412324865)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 9223372034707292160 9223372034707292160)) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i64x2 -8589934591 -8589934591)) ;; i64x2.extmul_high_i32x4_u (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 0 0 0 0) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 1 1 1 1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -1 -1 -1 -1) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -8589934591 -8589934591)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 1073741823 1073741823 1073741823 1073741823) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921503533105152 1152921503533105152)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 1073741824 1073741824 1073741824 1073741824) (v128.const i32x4 1073741824 1073741824 1073741824 1073741824)) (v128.const i64x2 1152921504606846976 1152921504606846976)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -1073741823 -1073741823 -1073741823 -1073741823) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 -8070450529026703360 -8070450529026703360)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 -8070450532247928832 -8070450532247928832)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -1073741825 -1073741825 -1073741825 -1073741825) (v128.const i32x4 -1073741824 -1073741824 -1073741824 -1073741824)) (v128.const i64x2 -8070450535469154304 -8070450535469154304)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 2147483645 2147483645 2147483645 2147483645) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483645 2147483645)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 2147483646 2147483646 2147483646 2147483646) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -2147483646 -2147483646 -2147483646 -2147483646) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -9223372030412324866 -9223372030412324866)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -9223372034707292161 -9223372034707292161)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 9223372034707292160 9223372034707292160)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 4611686014132420609 4611686014132420609)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 4611686018427387904 4611686018427387904)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648) (v128.const i32x4 -2147483647 -2147483647 -2147483647 -2147483647)) (v128.const i64x2 4611686020574871552 4611686020574871552)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 1 1 1 1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -1 -1 -1 -1)) (v128.const i64x2 -8589934591 -8589934591)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 9223372030412324865 9223372030412324865)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 9223372034707292160 9223372034707292160)) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i64x2 -8589934591 -8589934591)) ;; type check (assert_invalid (module (func (result v128) (i64x2.extmul_low_i32x4_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extmul_high_i32x4_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extmul_low_i32x4_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extmul_high_i32x4_u (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i64x2.extmul_low_i32x4_s-1st-arg-empty (result v128) (i64x2.extmul_low_i32x4_s (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_low_i32x4_s-arg-empty (result v128) (i64x2.extmul_low_i32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_high_i32x4_s-1st-arg-empty (result v128) (i64x2.extmul_high_i32x4_s (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_high_i32x4_s-arg-empty (result v128) (i64x2.extmul_high_i32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_low_i32x4_u-1st-arg-empty (result v128) (i64x2.extmul_low_i32x4_u (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_low_i32x4_u-arg-empty (result v128) (i64x2.extmul_low_i32x4_u) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_high_i32x4_u-1st-arg-empty (result v128) (i64x2.extmul_high_i32x4_u (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extmul_high_i32x4_u-arg-empty (result v128) (i64x2.extmul_high_i32x4_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i8x16_arith.wast ================================================ ;; Tests for i8x16 arithmetic operations on major boundary values and all special values. (module (func (export "i8x16.add") (param v128 v128) (result v128) (i8x16.add (local.get 0) (local.get 1))) (func (export "i8x16.sub") (param v128 v128) (result v128) (i8x16.sub (local.get 0) (local.get 1))) (func (export "i8x16.neg") (param v128) (result v128) (i8x16.neg (local.get 0))) ) ;; i8x16.add (assert_return (invoke "i8x16.add" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.add" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.add" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i8x16 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i8x16 0x80 0x80 0 0xbf 0x80 0x80 0 0xbf 0x80 0x80 0 0xbf 0x80 0x80 0 0xbf)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i8x16 0x80 0x80 0 0x3f 0x80 0x80 0 0x3f 0x80 0x80 0 0x3f 0x80 0x80 0 0x3f)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i8x16 0x01 0x01 0x81 0x80 0x01 0x01 0x81 0x80 0x01 0x01 0x81 0x80 0x01 0x01 0x81 0x80)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i8x16 0x01 0x01 0x81 0 0x01 0x01 0x81 0 0x01 0x01 0x81 0 0x01 0x01 0x81 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i8x16 0x01 0x01 0xc1 0x80 0x01 0x01 0xc1 0x80 0x01 0x01 0xc1 0x80 0x01 0x01 0xc1 0x80)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45)) ;; i8x16.sub (assert_return (invoke "i8x16.sub" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i16x8 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080 0x8080)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 +0.0 +0.0 +0.0 +0.0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i8x16 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 1.0 1.0 1.0 1.0)) (v128.const i8x16 0x80 0x80 0 0x41 0x80 0x80 0 0x41 0x80 0x80 0 0x41 0x80 0x80 0 0x41)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -1.0 -1.0 -1.0 -1.0)) (v128.const i8x16 0x80 0x80 0 0xc1 0x80 0x80 0 0xc1 0x80 0x80 0 0xc1 0x80 0x80 0 0xc1)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i8x16 0x01 0x01 0x81 0x82 0x01 0x01 0x81 0x82 0x01 0x01 0x81 0x82 0x01 0x01 0x81 0x82)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i8x16 0x01 0x01 0x81 0x02 0x01 0x01 0x81 0x02 0x01 0x01 0x81 0x02 0x01 0x01 0x81 0x02)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i8x16 0x01 0x01 0x41 0x82 0x01 0x01 0x41 0x82 0x01 0x01 0x41 0x82 0x01 0x01 0x41 0x82)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1)) (v128.const i8x16 0 0x02 0x04 0x06 0x08 0x0a 0x0c 0x0e 0x10 0x12 0x14 0x16 0x18 0x1a 0x1c 0x1e)) (assert_return (invoke "i8x16.sub" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15)) ;; i8x16.neg (assert_return (invoke "i8x16.neg" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f -0x7f)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.neg" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) ;; type check (assert_invalid (module (func (result v128) (i8x16.neg (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.add (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.sub (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i8x16.neg-arg-empty (result v128) (i8x16.neg) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.add-1st-arg-empty (result v128) (i8x16.add (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.add-arg-empty (result v128) (i8x16.add) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.sub-1st-arg-empty (result v128) (i8x16.sub (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.sub-arg-empty (result v128) (i8x16.sub) ) ) "type mismatch" ) ;; combination (module (func (export "add-sub") (param v128 v128 v128) (result v128) (i8x16.add (i8x16.sub (local.get 0) (local.get 1))(local.get 2))) (func (export "sub-add") (param v128 v128 v128) (result v128) (i8x16.sub (i8x16.add (local.get 0) (local.get 1))(local.get 2))) (func (export "add-neg") (param v128 v128) (result v128) (i8x16.add (i8x16.neg (local.get 0)) (local.get 1))) (func (export "sub-neg") (param v128 v128) (result v128) (i8x16.sub (i8x16.neg (local.get 0)) (local.get 1))) ) (assert_return (invoke "add-sub" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_return (invoke "sub-add" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_return (invoke "add-neg" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "sub-neg" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i8x16 0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i8x16_arith2.wast ================================================ ;; Tests for i8x16 [min_s, min_u, max_s, max_u, avgr_u, abs] operations. (module (func (export "i8x16.min_s") (param v128 v128) (result v128) (i8x16.min_s (local.get 0) (local.get 1))) (func (export "i8x16.min_u") (param v128 v128) (result v128) (i8x16.min_u (local.get 0) (local.get 1))) (func (export "i8x16.max_s") (param v128 v128) (result v128) (i8x16.max_s (local.get 0) (local.get 1))) (func (export "i8x16.max_u") (param v128 v128) (result v128) (i8x16.max_u (local.get 0) (local.get 1))) (func (export "i8x16.avgr_u") (param v128 v128) (result v128) (i8x16.avgr_u (local.get 0) (local.get 1))) (func (export "i8x16.abs") (param v128) (result v128) (i8x16.abs (local.get 0))) (func (export "i8x16.popcnt") (param v128) (result v128) (i8x16.popcnt (local.get 0))) (func (export "i8x16.min_s_with_const_0") (result v128) (i8x16.min_s (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128))) (func (export "i8x16.min_s_with_const_1") (result v128) (i8x16.min_s (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3) (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0))) (func (export "i8x16.min_u_with_const_2") (result v128) (i8x16.min_u (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128))) (func (export "i8x16.min_u_with_const_3") (result v128) (i8x16.min_u (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3) (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0))) (func (export "i8x16.max_s_with_const_4") (result v128) (i8x16.max_s (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128))) (func (export "i8x16.max_s_with_const_5") (result v128) (i8x16.max_s (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3) (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0))) (func (export "i8x16.max_u_with_const_6") (result v128) (i8x16.max_u (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128))) (func (export "i8x16.max_u_with_const_7") (result v128) (i8x16.max_u (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3) (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0))) (func (export "i8x16.avgr_u_with_const_8") (result v128) (i8x16.avgr_u (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128))) (func (export "i8x16.avgr_u_with_const_9") (result v128) (i8x16.avgr_u (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3) (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0))) (func (export "i8x16.abs_with_const_10") (result v128) (i8x16.abs (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.popcnt_with_const_11") (result v128) (i8x16.popcnt (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.min_s_with_const_12") (param v128) (result v128) (i8x16.min_s (local.get 0) (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.min_s_with_const_13") (param v128) (result v128) (i8x16.min_s (local.get 0) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3))) (func (export "i8x16.min_u_with_const_14") (param v128) (result v128) (i8x16.min_u (local.get 0) (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.min_u_with_const_15") (param v128) (result v128) (i8x16.min_u (local.get 0) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3))) (func (export "i8x16.max_s_with_const_16") (param v128) (result v128) (i8x16.max_s (local.get 0) (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.max_s_with_const_17") (param v128) (result v128) (i8x16.max_s (local.get 0) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3))) (func (export "i8x16.max_u_with_const_18") (param v128) (result v128) (i8x16.max_u (local.get 0) (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.max_u_with_const_19") (param v128) (result v128) (i8x16.max_u (local.get 0) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3))) (func (export "i8x16.avgr_u_with_const_20") (param v128) (result v128) (i8x16.avgr_u (local.get 0) (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255))) (func (export "i8x16.avgr_u_with_const_21") (param v128) (result v128) (i8x16.avgr_u (local.get 0) (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3))) ) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 0 0 0 0 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123) (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 0 0 0 0 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123) (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 0 0 0 0 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123) (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 0 0 0 0 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123) (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 -1 -1 -1 -1 0 0 0 0 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 128 128 128 128 128 128 128 128 255 255 255 255)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123) (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3)) (v128.const i8x16 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3 01_2_3)) (v128.const i8x16 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3 -01_2_3)) (v128.const i8x16 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80 -0x80)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) ;; Const vs const (assert_return (invoke "i8x16.min_s_with_const_0") (v128.const i8x16 -128 -128 -128 -128 64 64 64 64 64 64 64 64 -128 -128 -128 -128)) (assert_return (invoke "i8x16.min_s_with_const_1") (v128.const i8x16 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0)) (assert_return (invoke "i8x16.min_u_with_const_2") (v128.const i8x16 -128 -128 -128 -128 64 64 64 64 64 64 64 64 -128 -128 -128 -128)) (assert_return (invoke "i8x16.min_u_with_const_3") (v128.const i8x16 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0)) (assert_return (invoke "i8x16.max_s_with_const_4") (v128.const i8x16 255 255 255 255 127 127 127 127 127 127 127 127 255 255 255 255)) (assert_return (invoke "i8x16.max_s_with_const_5") (v128.const i8x16 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 3)) (assert_return (invoke "i8x16.max_u_with_const_6") (v128.const i8x16 255 255 255 255 127 127 127 127 127 127 127 127 255 255 255 255)) (assert_return (invoke "i8x16.max_u_with_const_7") (v128.const i8x16 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 3)) (assert_return (invoke "i8x16.avgr_u_with_const_8") (v128.const i8x16 192 192 192 192 96 96 96 96 96 96 96 96 192 192 192 192)) (assert_return (invoke "i8x16.avgr_u_with_const_9") (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.abs_with_const_10") (v128.const i8x16 128 128 128 128 127 127 127 127 64 64 64 64 1 1 1 1)) (assert_return (invoke "i8x16.popcnt_with_const_11") (v128.const i8x16 1 1 1 1 7 7 7 7 1 1 1 1 8 8 8 8)) ;; Param vs const (assert_return (invoke "i8x16.min_s_with_const_12" (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 64 64 64 64 64 64 64 64 -128 -128 -128 -128)) (assert_return (invoke "i8x16.min_s_with_const_13" (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0)) (v128.const i8x16 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0)) (assert_return (invoke "i8x16.min_u_with_const_14" (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 64 64 64 64 64 64 64 64 -128 -128 -128 -128)) (assert_return (invoke "i8x16.min_u_with_const_15" (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0)) (v128.const i8x16 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0)) (assert_return (invoke "i8x16.max_s_with_const_16" (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 127 127 127 127 127 127 127 127 255 255 255 255)) (assert_return (invoke "i8x16.max_s_with_const_17" (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0)) (v128.const i8x16 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 3)) (assert_return (invoke "i8x16.max_u_with_const_18" (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 127 127 127 127 127 127 127 127 255 255 255 255)) (assert_return (invoke "i8x16.max_u_with_const_19" (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0)) (v128.const i8x16 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 3)) (assert_return (invoke "i8x16.avgr_u_with_const_20" (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 192 192 192 192 96 96 96 96 96 96 96 96 192 192 192 192)) (assert_return (invoke "i8x16.avgr_u_with_const_21" (v128.const i8x16 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) ;; Test different lanes go through different if-then clauses (assert_return (invoke "i8x16.min_s" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 64 64 64 64 64 64 64 64 -128 -128 -128 -128)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 128 128 128 128) (v128.const i8x16 0 0 0 0 2 2 2 2 1 1 1 1 128 128 128 128)) (v128.const i8x16 0 0 0 0 1 1 1 1 1 1 1 1 128 128 128 128)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 64 64 64 64 64 64 64 64 -128 -128 -128 -128)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 128 128 128 128) (v128.const i8x16 0 0 0 0 2 2 2 2 1 1 1 1 128 128 128 128)) (v128.const i8x16 0 0 0 0 1 1 1 1 1 1 1 1 128 128 128 128)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 127 127 127 127 127 127 127 127 255 255 255 255)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 128 128 128 128) (v128.const i8x16 0 0 0 0 2 2 2 2 1 1 1 1 128 128 128 128)) (v128.const i8x16 0 0 0 0 2 2 2 2 2 2 2 2 128 128 128 128)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 127 127 127 127 127 127 127 127 255 255 255 255)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 128 128 128 128) (v128.const i8x16 0 0 0 0 2 2 2 2 1 1 1 1 128 128 128 128)) (v128.const i8x16 0 0 0 0 2 2 2 2 2 2 2 2 128 128 128 128)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255) (v128.const i8x16 255 255 255 255 64 64 64 64 127 127 127 127 -128 -128 -128 -128)) (v128.const i8x16 192 192 192 192 96 96 96 96 96 96 96 96 192 192 192 192)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0 0 0 0 1 1 1 1 2 2 2 2 128 128 128 128) (v128.const i8x16 0 0 0 0 2 2 2 2 1 1 1 1 128 128 128 128)) (v128.const i8x16 0 0 0 0 2 2 2 2 2 2 2 2 128 128 128 128)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255)) (v128.const i8x16 128 128 128 128 127 127 127 127 64 64 64 64 1 1 1 1)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -128 -128 -128 -128 127 127 127 127 64 64 64 64 255 255 255 255)) (v128.const i8x16 1 1 1 1 7 7 7 7 1 1 1 1 8 8 8 8)) ;; Test opposite signs of zero (assert_return (invoke "i8x16.min_s" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0) (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0) (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0) (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0) (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0) (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0) (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (assert_return (invoke "i8x16.abs" (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 +0 +0 +0 +0 0 0 0 0 -0 -0 -0 -0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; Unknown operators (assert_malformed (module quote "(memory 1) (func (result v128) (i32x4.avgr_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.avgr_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.avgr_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.avgr_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.avgr (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (result v128) (i8x16.avgr_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)))") "unknown operator") ;; Type check (assert_invalid (module (func (result v128) (i8x16.min_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.min_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.max_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.max_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.avgr_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.abs (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.popcnt (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i8x16.min_s-1st-arg-empty (result v128) (i8x16.min_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.min_s-arg-empty (result v128) (i8x16.min_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.min_u-1st-arg-empty (result v128) (i8x16.min_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.min_u-arg-empty (result v128) (i8x16.min_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.max_s-1st-arg-empty (result v128) (i8x16.max_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.max_s-arg-empty (result v128) (i8x16.max_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.max_u-1st-arg-empty (result v128) (i8x16.max_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.max_u-arg-empty (result v128) (i8x16.max_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.avgr_u-1st-arg-empty (result v128) (i8x16.avgr_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.avgr_u-arg-empty (result v128) (i8x16.avgr_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.abs-arg-empty (result v128) (i8x16.abs) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.popcnt-arg-empty (result v128) (i8x16.popcnt) ) ) "type mismatch" ) ;; Combination (module (func (export "i8x16.min_s-i8x16.avgr_u") (param v128 v128 v128) (result v128) (i8x16.min_s (i8x16.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_s-i8x16.max_u") (param v128 v128 v128) (result v128) (i8x16.min_s (i8x16.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_s-i8x16.max_s") (param v128 v128 v128) (result v128) (i8x16.min_s (i8x16.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_s-i8x16.min_u") (param v128 v128 v128) (result v128) (i8x16.min_s (i8x16.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_s-i8x16.min_s") (param v128 v128 v128) (result v128) (i8x16.min_s (i8x16.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_s-i8x16.abs") (param v128 v128) (result v128) (i8x16.min_s (i8x16.abs (local.get 0))(local.get 1))) (func (export "i8x16.abs-i8x16.min_s") (param v128 v128) (result v128) (i8x16.abs (i8x16.min_s (local.get 0) (local.get 1)))) (func (export "i8x16.min_s-i8x16.popcnt") (param v128 v128) (result v128) (i8x16.min_s (i8x16.popcnt (local.get 0))(local.get 1))) (func (export "i8x16.popcnt-i8x16.min_s") (param v128 v128) (result v128) (i8x16.popcnt (i8x16.min_s (local.get 0) (local.get 1)))) (func (export "i8x16.min_u-i8x16.avgr_u") (param v128 v128 v128) (result v128) (i8x16.min_u (i8x16.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_u-i8x16.max_u") (param v128 v128 v128) (result v128) (i8x16.min_u (i8x16.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_u-i8x16.max_s") (param v128 v128 v128) (result v128) (i8x16.min_u (i8x16.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_u-i8x16.min_u") (param v128 v128 v128) (result v128) (i8x16.min_u (i8x16.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_u-i8x16.min_s") (param v128 v128 v128) (result v128) (i8x16.min_u (i8x16.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.min_u-i8x16.abs") (param v128 v128) (result v128) (i8x16.min_u (i8x16.abs (local.get 0))(local.get 1))) (func (export "i8x16.abs-i8x16.min_u") (param v128 v128) (result v128) (i8x16.abs (i8x16.min_u (local.get 0) (local.get 1)))) (func (export "i8x16.min_u-i8x16.popcnt") (param v128 v128) (result v128) (i8x16.min_u (i8x16.popcnt (local.get 0))(local.get 1))) (func (export "i8x16.popcnt-i8x16.min_u") (param v128 v128) (result v128) (i8x16.popcnt (i8x16.min_u (local.get 0) (local.get 1)))) (func (export "i8x16.max_s-i8x16.avgr_u") (param v128 v128 v128) (result v128) (i8x16.max_s (i8x16.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_s-i8x16.max_u") (param v128 v128 v128) (result v128) (i8x16.max_s (i8x16.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_s-i8x16.max_s") (param v128 v128 v128) (result v128) (i8x16.max_s (i8x16.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_s-i8x16.min_u") (param v128 v128 v128) (result v128) (i8x16.max_s (i8x16.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_s-i8x16.min_s") (param v128 v128 v128) (result v128) (i8x16.max_s (i8x16.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_s-i8x16.abs") (param v128 v128) (result v128) (i8x16.max_s (i8x16.abs (local.get 0))(local.get 1))) (func (export "i8x16.abs-i8x16.max_s") (param v128 v128) (result v128) (i8x16.abs (i8x16.max_s (local.get 0) (local.get 1)))) (func (export "i8x16.max_s-i8x16.popcnt") (param v128 v128) (result v128) (i8x16.max_s (i8x16.popcnt (local.get 0))(local.get 1))) (func (export "i8x16.popcnt-i8x16.max_s") (param v128 v128) (result v128) (i8x16.popcnt (i8x16.max_s (local.get 0) (local.get 1)))) (func (export "i8x16.max_u-i8x16.avgr_u") (param v128 v128 v128) (result v128) (i8x16.max_u (i8x16.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_u-i8x16.max_u") (param v128 v128 v128) (result v128) (i8x16.max_u (i8x16.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_u-i8x16.max_s") (param v128 v128 v128) (result v128) (i8x16.max_u (i8x16.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_u-i8x16.min_u") (param v128 v128 v128) (result v128) (i8x16.max_u (i8x16.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_u-i8x16.min_s") (param v128 v128 v128) (result v128) (i8x16.max_u (i8x16.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.max_u-i8x16.abs") (param v128 v128) (result v128) (i8x16.max_u (i8x16.abs (local.get 0))(local.get 1))) (func (export "i8x16.abs-i8x16.max_u") (param v128 v128) (result v128) (i8x16.abs (i8x16.max_u (local.get 0) (local.get 1)))) (func (export "i8x16.max_u-i8x16.popcnt") (param v128 v128) (result v128) (i8x16.max_u (i8x16.popcnt (local.get 0))(local.get 1))) (func (export "i8x16.popcnt-i8x16.max_u") (param v128 v128) (result v128) (i8x16.popcnt (i8x16.max_u (local.get 0) (local.get 1)))) (func (export "i8x16.avgr_u-i8x16.avgr_u") (param v128 v128 v128) (result v128) (i8x16.avgr_u (i8x16.avgr_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.avgr_u-i8x16.max_u") (param v128 v128 v128) (result v128) (i8x16.avgr_u (i8x16.max_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.avgr_u-i8x16.max_s") (param v128 v128 v128) (result v128) (i8x16.avgr_u (i8x16.max_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.avgr_u-i8x16.min_u") (param v128 v128 v128) (result v128) (i8x16.avgr_u (i8x16.min_u (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.avgr_u-i8x16.min_s") (param v128 v128 v128) (result v128) (i8x16.avgr_u (i8x16.min_s (local.get 0) (local.get 1))(local.get 2))) (func (export "i8x16.avgr_u-i8x16.abs") (param v128 v128) (result v128) (i8x16.avgr_u (i8x16.abs (local.get 0))(local.get 1))) (func (export "i8x16.abs-i8x16.avgr_u") (param v128 v128) (result v128) (i8x16.abs (i8x16.avgr_u (local.get 0) (local.get 1)))) (func (export "i8x16.avgr_u-i8x16.popcnt") (param v128 v128) (result v128) (i8x16.avgr_u (i8x16.popcnt (local.get 0))(local.get 1))) (func (export "i8x16.popcnt-i8x16.avgr_u") (param v128 v128) (result v128) (i8x16.popcnt (i8x16.avgr_u (local.get 0) (local.get 1)))) (func (export "i8x16.abs-i8x16.popcnt") (param v128) (result v128) (i8x16.abs (i8x16.popcnt (local.get 0)))) (func (export "i8x16.abs-i8x16.abs") (param v128) (result v128) (i8x16.abs (i8x16.abs (local.get 0)))) (func (export "i8x16.popcnt-i8x16.popcnt") (param v128) (result v128) (i8x16.popcnt (i8x16.popcnt (local.get 0)))) (func (export "i8x16.popcnt-i8x16.abs") (param v128) (result v128) (i8x16.popcnt (i8x16.abs (local.get 0)))) ) (assert_return (invoke "i8x16.min_s-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_s-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_s-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_s-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_s-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_s-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.abs-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_s-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.popcnt-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.min_u-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_u-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_u-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.min_u-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_u-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_u-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.abs-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.min_u-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.popcnt-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_s-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_s-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_s-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_s-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_s-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_s-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_s-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.popcnt-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.max_u-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_u-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_u-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_u-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_u-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.max_u-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.max_u-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.popcnt-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.avgr_u-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.avgr_u-i8x16.max_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.avgr_u-i8x16.max_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.avgr_u-i8x16.min_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.avgr_u-i8x16.min_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.avgr_u-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.avgr_u-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4)) (assert_return (invoke "i8x16.popcnt-i8x16.avgr_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.abs-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8)) (assert_return (invoke "i8x16.abs-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt-i8x16.popcnt" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.popcnt-i8x16.abs" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i8x16_cmp.wast ================================================ ;; Test all the i8x16 comparison operators on major boundary values and all special values. (module (func (export "eq") (param $x v128) (param $y v128) (result v128) (i8x16.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x v128) (param $y v128) (result v128) (i8x16.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x v128) (param $y v128) (result v128) (i8x16.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x v128) (param $y v128) (result v128) (i8x16.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x v128) (param $y v128) (result v128) (i8x16.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x v128) (param $y v128) (result v128) (i8x16.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x v128) (param $y v128) (result v128) (i8x16.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x v128) (param $y v128) (result v128) (i8x16.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x v128) (param $y v128) (result v128) (i8x16.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x v128) (param $y v128) (result v128) (i8x16.ge_u (local.get $x) (local.get $y))) ) ;; eq ;; i8x16.eq (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "eq" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "eq" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "eq" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "eq" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "eq" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0)) (assert_return (invoke "eq" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0)) ;; i8x16.eq (i8x16) (i16x8) (assert_return (invoke "eq" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 -1 0 -1 0 -1 -1 -1 -1 -1 0 -1 0 -1 0 -1 0)) (assert_return (invoke "eq" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; i8x16.eq (i8x16) (i32x4) (assert_return (invoke "eq" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "eq" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 -1 0 0 0 -1 -1 -1 -1 -1 0 0 0 -1 0 0 0)) (assert_return (invoke "eq" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; ne ;; i8x16.ne (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "ne" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "ne" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "ne" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "ne" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "ne" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1)) ;; i8x16.ne (i8x16) (i16x8) (assert_return (invoke "ne" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 0 -1 0 -1 0 0 0 0 0 -1 0 -1 0 -1 0 -1)) (assert_return (invoke "ne" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i8x16.ne (i8x16) (i32x4) (assert_return (invoke "ne" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ne" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 0 -1 -1 -1 0 0 0 0 0 -1 -1 -1 0 -1 -1 -1)) (assert_return (invoke "ne" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; lt_s ;; i8x16.lt_s (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "lt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "lt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "lt_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "lt_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 0 0 0 -1 -1 -1 0 -1 0 -1 0 0 0 -1 -1 -1)) (assert_return (invoke "lt_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 -1 -1 -1 0 0 0 0 0 -1 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 -1 -1 -1 0 0 0 0 0 -1 0 0 0)) ;; i8x16.lt_s (i8x16) (i16x8) (assert_return (invoke "lt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 0 -1 0 -1 0 0 0 0 0 0 0 0 0 -1 0 -1)) (assert_return (invoke "lt_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; i8x16.lt_s (i8x16) (i32x4) (assert_return (invoke "lt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 0 -1 -1 -1 0 0 0 0 0 0 0 0 0 -1 -1 -1)) (assert_return (invoke "lt_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; lt_u ;; i8x16.lt_u (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "lt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "lt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "lt_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "lt_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 0 -1 0 -1 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 0 0 0 0 0 -1 -1 -1 -1 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 0 0 0 0 0 -1 -1 -1 -1 0 0 0)) ;; i8x16.lt_u (i8x16) (i16x8) (assert_return (invoke "lt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i8x16.lt_u (i8x16) (i32x4) (assert_return (invoke "lt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 0 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "lt_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; le_s ;; i8x16.le_s (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "le_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "le_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "le_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "le_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 0 0 0 -1 -1 -1 0 -1 0 -1 0 0 0 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 -1 -1 -1 -1 -1 0 0 0 -1 0 0 0)) (assert_return (invoke "le_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 -1 -1 -1 -1 -1 0 0 0 -1 0 0 0)) ;; i8x16.le_s (i8x16) (i16x8) (assert_return (invoke "le_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; i8x16.le_s (i8x16) (i32x4) (assert_return (invoke "le_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 -1 -1)) (assert_return (invoke "le_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; le_u ;; i8x16.le_u (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "le_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "le_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "le_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "le_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 0 -1 0 -1 0 0 0 0 0 0)) (assert_return (invoke "le_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 -1 0 0 0)) (assert_return (invoke "le_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 -1 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 -1 0 0 0)) ;; i8x16.le_u (i8x16) (i16x8) (assert_return (invoke "le_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 0 -1 0 -1 0)) (assert_return (invoke "le_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i8x16.le_u (i8x16) (i32x4) (assert_return (invoke "le_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "le_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 0 0)) (assert_return (invoke "le_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; gt_s ;; i8x16.gt_s (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "gt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "gt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "gt_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "gt_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 -1 -1 -1 0 0 0 -1 0 -1 0 -1 -1 -1 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 0 0 0 0 0 -1 -1 -1 0 -1 -1 -1)) (assert_return (invoke "gt_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 0 0 0 0 0 -1 -1 -1 0 -1 -1 -1)) ;; i8x16.gt_s (i8x16) (i16x8) (assert_return (invoke "gt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i8x16.gt_s (i8x16) (i32x4) (assert_return (invoke "gt_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 -1 -1 -1 0 0 0 0)) (assert_return (invoke "gt_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; gt_u ;; i8x16.gt_u (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "gt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs dec (assert_return (invoke "gt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; dec vs dec (assert_return (invoke "gt_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; hex vs float (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; not equal (assert_return (invoke "gt_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 0 0 0 0 0 0 -1 0 -1 0 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 -1 -1 -1 0 0 0 0 0 0 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 -1 -1 -1 0 0 0 0 0 0 -1 -1 -1)) ;; i8x16.gt_u (i8x16) (i16x8) (assert_return (invoke "gt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 -1 0 -1 0 -1 0 -1)) (assert_return (invoke "gt_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; i8x16.gt_u (i8x16) (i32x4) (assert_return (invoke "gt_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "gt_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 -1)) (assert_return (invoke "gt_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; ge_s ;; i8x16.ge_s (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "ge_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "ge_s" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 -1 -1 -1 0 0 0 -1 0 -1 0 -1 -1 -1 0 0 0)) (assert_return (invoke "ge_s" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 0 0 0 -1 -1 -1 -1 -1 0 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 0 0 0 -1 -1 -1 -1 -1 0 -1 -1 -1)) ;; i8x16.ge_s (i8x16) (i16x8) (assert_return (invoke "ge_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 0)) (assert_return (invoke "ge_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; i8x16.ge_s (i8x16) (i32x4) (assert_return (invoke "ge_s" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_s" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 -1 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0)) (assert_return (invoke "ge_s" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; ge_u ;; i8x16.ge_u (i8x16) (i8x16) ;; hex vs hex (assert_return (invoke "ge_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs dec (assert_return (invoke "ge_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; dec vs dec (assert_return (invoke "ge_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 -0 0 1 2 127 128 253 254 255)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; hex vs float (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x00 0x00 0xc3 0x00 0x00 0xfe 0xc2 0x00 0x00 0x80 0xbf 0x00 0x00 0x00 0x00) (v128.const f32x4 -128.0 -127.0 -1.0 0.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x00 0x80 0x3f 0x00 0x00 0xfe 0x42 0x00 0x00 0x00 0x43 0x00 0x00 0x7f 0x43) (v128.const f32x4 1.0 127.0 128.0 255.0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) ;; not equal (assert_return (invoke "ge_u" (v128.const i8x16 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F 0x0F) (v128.const i8x16 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0 0xF0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00)) (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x09 0x10 0x11 0x12 0x0A 0x0B 0x1A 0x1B 0xAA 0xAB 0xFF) (v128.const i8x16 0xFF 0xAB 0xAA 0x1B 0x1A 0x0B 0x0A 0x12 0x11 0x10 0x09 0x04 0x03 0x02 0x01 0x00)) (v128.const i8x16 0 0 0 0 0 0 -1 0 -1 0 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x80 0x81 0x82 0x83 0xFD 0xFE 0xFF 0x00 0x00 0x01 0x02 0x7F 0x80 0xFD 0xFE 0xFF) (v128.const i8x16 255 254 253 128 127 2 1 0 0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 128 129 130 131 253 254 255 -0 0 1 2 127 128 253 254 255) (v128.const i8x16 255 254 253 128 127 2 1 0 -0 -1 -2 -3 -125 -126 -127 -128)) (v128.const i8x16 0 0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 -1 -1 -1)) ;; i8x16.ge_u (i8x16) (i16x8) (assert_return (invoke "ge_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i16x8 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i16x8 65535 65535 65535 65535 65535 65535 65535 65535)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0B0A 0x0D0C 0x0F0E)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i16x8 33152 33666 65277 255 256 32514 64896 65534)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i16x8 -128 -128 0 0 1 1 255 255)) (v128.const i8x16 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i16x8 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA 0xAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; i8x16.ge_u (i8x16) (i32x4) (assert_return (invoke "ge_u" (v128.const i8x16 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) (v128.const i32x4 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i32x4 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F) (v128.const i32x4 0x03020100 0x07060504 0x0B0A0908 0x0F0E0D0C)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 -128 -127 -126 -125 -3 -2 -1 0 0 1 2 127 128 253 254 255) (v128.const i32x4 2206368128 16776957 2130837760 4294901120)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 -128 -128 -128 -128 0 0 0 0 1 1 1 1 255 255 255 255) (v128.const i32x4 -128 0 1 255)) (v128.const i8x16 -1 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "ge_u" (v128.const i8x16 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55) (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; Type check (assert_invalid (module (func (result v128) (i8x16.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.ne (i32.const 0) (f32.const 0)))) "type mismatch") ;; combination (module (memory 1) (func (export "eq-in-block") (block (drop (block (result v128) (i8x16.eq (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ne-in-block") (block (drop (block (result v128) (i8x16.ne (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "lt_s-in-block") (block (drop (block (result v128) (i8x16.lt_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "le_u-in-block") (block (drop (block (result v128) (i8x16.le_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "gt_u-in-block") (block (drop (block (result v128) (i8x16.gt_u (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "ge_s-in-block") (block (drop (block (result v128) (i8x16.ge_s (block (result v128) (v128.load (i32.const 0))) (block (result v128) (v128.load (i32.const 1))) ) ) ) ) ) (func (export "nested-eq") (drop (i8x16.eq (i8x16.eq (i8x16.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.eq (i8x16.eq (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.eq (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ne") (drop (i8x16.ne (i8x16.ne (i8x16.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.ne (i8x16.ne (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.ne (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-lt_s") (drop (i8x16.lt_s (i8x16.lt_s (i8x16.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.lt_s (i8x16.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.lt_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-le_u") (drop (i8x16.le_u (i8x16.le_u (i8x16.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.le_u (i8x16.le_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-gt_u") (drop (i8x16.gt_u (i8x16.gt_u (i8x16.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.gt_u (i8x16.gt_u (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.gt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "nested-ge_s") (drop (i8x16.ge_s (i8x16.ge_s (i8x16.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.ge_s (i8x16.ge_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.ge_s (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) (func (export "as-param") (drop (i8x16.ge_u (i8x16.eq (i8x16.lt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.le_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) (i8x16.ne (i8x16.gt_s (v128.load (i32.const 0)) (v128.load (i32.const 1)) ) (i8x16.lt_u (v128.load (i32.const 2)) (v128.load (i32.const 3)) ) ) ) ) ) ) (assert_return (invoke "eq-in-block")) (assert_return (invoke "ne-in-block")) (assert_return (invoke "lt_s-in-block")) (assert_return (invoke "le_u-in-block")) (assert_return (invoke "gt_u-in-block")) (assert_return (invoke "ge_s-in-block")) (assert_return (invoke "nested-eq")) (assert_return (invoke "nested-ne")) (assert_return (invoke "nested-lt_s")) (assert_return (invoke "nested-le_u")) (assert_return (invoke "nested-gt_u")) (assert_return (invoke "nested-ge_s")) (assert_return (invoke "as-param")) ;; Test operation with empty argument (assert_invalid (module (func $i8x16.eq-1st-arg-empty (result v128) (i8x16.eq (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.eq-arg-empty (result v128) (i8x16.eq) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.ne-1st-arg-empty (result v128) (i8x16.ne (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.ne-arg-empty (result v128) (i8x16.ne) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.lt_s-1st-arg-empty (result v128) (i8x16.lt_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.lt_s-arg-empty (result v128) (i8x16.lt_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.lt_u-1st-arg-empty (result v128) (i8x16.lt_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.lt_u-arg-empty (result v128) (i8x16.lt_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.le_s-1st-arg-empty (result v128) (i8x16.le_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.le_s-arg-empty (result v128) (i8x16.le_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.le_u-1st-arg-empty (result v128) (i8x16.le_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.le_u-arg-empty (result v128) (i8x16.le_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.gt_s-1st-arg-empty (result v128) (i8x16.gt_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.gt_s-arg-empty (result v128) (i8x16.gt_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.gt_u-1st-arg-empty (result v128) (i8x16.gt_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.gt_u-arg-empty (result v128) (i8x16.gt_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.ge_s-1st-arg-empty (result v128) (i8x16.ge_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.ge_s-arg-empty (result v128) (i8x16.ge_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.ge_u-1st-arg-empty (result v128) (i8x16.ge_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.ge_u-arg-empty (result v128) (i8x16.ge_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_i8x16_sat_arith.wast ================================================ ;; Tests for i8x16 arithmetic operations on major boundary values and all special values. (module (func (export "i8x16.add_sat_s") (param v128 v128) (result v128) (i8x16.add_sat_s (local.get 0) (local.get 1))) (func (export "i8x16.add_sat_u") (param v128 v128) (result v128) (i8x16.add_sat_u (local.get 0) (local.get 1))) (func (export "i8x16.sub_sat_s") (param v128 v128) (result v128) (i8x16.sub_sat_s (local.get 0) (local.get 1))) (func (export "i8x16.sub_sat_u") (param v128 v128) (result v128) (i8x16.sub_sat_u (local.get 0) (local.get 1))) ) ;; i8x16.add_sat_s (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i8x16 0x01 0x01 0x81 0x7f 0x01 0x01 0x81 0x7f 0x01 0x01 0x81 0x7f 0x01 0x01 0x81 0x7f)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i8x16 0x01 0x01 0x81 0 0x01 0x01 0x81 0 0x01 0x01 0x81 0 0x01 0x01 0x81 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i8x16 0x01 0x01 0xc1 0x7f 0x01 0x01 0xc1 0x7f 0x01 0x01 0xc1 0x7f 0x01 0x01 0xc1 0x7f)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i8x16 0x01 0x01 0xc1 0 0x01 0x01 0xc1 0 0x01 0x01 0xc1 0 0x01 0x01 0xc1 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45)) ;; i8x16.add_sat_u (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i8x16 0x80 0x80 0x80 0xff 0x80 0x80 0x80 0xff 0x80 0x80 0x80 0xff 0x80 0x80 0x80 0xff)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i8x16 0x01 0x01 0x81 0x80 0x01 0x01 0x81 0x80 0x01 0x01 0x81 0x80 0x01 0x01 0x81 0x80)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i8x16 0x01 0x01 0x81 0xff 0x01 0x01 0x81 0xff 0x01 0x01 0x81 0xff 0x01 0x01 0x81 0xff)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i8x16 0x01 0x01 0xc1 0x80 0x01 0x01 0xc1 0x80 0x01 0x01 0xc1 0x80 0x01 0x01 0xc1 0x80)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i8x16 0x01 0x01 0xc1 0xff 0x01 0x01 0xc1 0xff 0x01 0x01 0xc1 0xff 0x01 0x01 0xc1 0xff)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1)) (v128.const i8x16 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (assert_return (invoke "i8x16.add_sat_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45)) ;; i8x16.sub_sat_s (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125 -125)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i8x16 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i8x16 0x01 0x01 0x7f 0x82 0x01 0x01 0x7f 0x82 0x01 0x01 0x7f 0x82 0x01 0x01 0x7f 0x82)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i8x16 0x01 0x01 0x7f 0x02 0x01 0x01 0x7f 0x02 0x01 0x01 0x7f 0x02 0x01 0x01 0x7f 0x02)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i8x16 0x01 0x01 0x41 0x82 0x01 0x01 0x41 0x82 0x01 0x01 0x41 0x82 0x01 0x01 0x41 0x82)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i8x16 0x01 0x01 0x41 0x02 0x01 0x01 0x41 0x02 0x01 0x01 0x41 0x02 0x01 0x01 0x41 0x02)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1)) (v128.const i8x16 0 0x02 0x04 0x06 0x08 0x0a 0x0c 0x0e 0x10 0x12 0x14 0x16 0x18 0x1a 0x1c 0x1e)) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15)) ;; i8x16.sub_sat_u (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65 -65) (v128.const i8x16 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64 -64)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126 -126) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f 0x3f) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40) (v128.const i8x16 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f -0x3f) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40 -0x40) (v128.const i8x16 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41 -0x41)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126 126)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01 -0x01)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01)) (v128.const i8x16 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff) (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80) (v128.const f32x4 -0.0 -0.0 -0.0 -0.0)) (v128.const i8x16 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0 0x80 0x80 0x80 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 +inf +inf +inf +inf)) (v128.const i8x16 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -inf -inf -inf -inf)) (v128.const i8x16 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 nan nan nan nan)) (v128.const i8x16 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const f32x4 -nan -nan -nan -nan)) (v128.const i8x16 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0 0x01 0x01 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ;; Malformed cases: non-existent op names (assert_malformed (module quote "(func (result v128) (i8x16.add_sat (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.sub_sat (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.mul_sat (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i8x16.div_sat (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.add_sat_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.add_sat_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.sub_sat_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (i32x4.sub_sat_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (f32x4.add_sat_s (v128.const f32x4 0 0 0 0) (v128.const f32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (f32x4.add_sat_u (v128.const f32x4 0 0 0 0) (v128.const f32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (f32x4.sub_sat_s (v128.const f32x4 0 0 0 0) (v128.const f32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) (f32x4.sub_sat_u (v128.const f32x4 0 0 0 0) (v128.const f32x4 0 0 0 0)))") "unknown operator") ;; type check (assert_invalid (module (func (result v128) (i8x16.add_sat_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.add_sat_u (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.sub_sat_s (i32.const 0) (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.sub_sat_u (i32.const 0) (f32.const 0.0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i8x16.add_sat_s-1st-arg-empty (result v128) (i8x16.add_sat_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.add_sat_s-arg-empty (result v128) (i8x16.add_sat_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.add_sat_u-1st-arg-empty (result v128) (i8x16.add_sat_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.add_sat_u-arg-empty (result v128) (i8x16.add_sat_u) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.sub_sat_s-1st-arg-empty (result v128) (i8x16.sub_sat_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.sub_sat_s-arg-empty (result v128) (i8x16.sub_sat_s) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.sub_sat_u-1st-arg-empty (result v128) (i8x16.sub_sat_u (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.sub_sat_u-arg-empty (result v128) (i8x16.sub_sat_u) ) ) "type mismatch" ) ;; combination (module (func (export "sat-add_s-sub_s") (param v128 v128 v128) (result v128) (i8x16.add_sat_s (i8x16.sub_sat_s (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_s-sub_u") (param v128 v128 v128) (result v128) (i8x16.add_sat_s (i8x16.sub_sat_u (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_u-sub_s") (param v128 v128 v128) (result v128) (i8x16.add_sat_u (i8x16.sub_sat_s (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_u-sub_u") (param v128 v128 v128) (result v128) (i8x16.add_sat_u (i8x16.sub_sat_u (local.get 0) (local.get 1))(local.get 2))) (func (export "sat-add_s-neg") (param v128 v128) (result v128) (i8x16.add_sat_s (i8x16.neg (local.get 0)) (local.get 1))) (func (export "sat-add_u-neg") (param v128 v128) (result v128) (i8x16.add_sat_u (i8x16.neg (local.get 0)) (local.get 1))) (func (export "sat-sub_s-neg") (param v128 v128) (result v128) (i8x16.sub_sat_s (i8x16.neg (local.get 0)) (local.get 1))) (func (export "sat-sub_u-neg") (param v128 v128) (result v128) (i8x16.sub_sat_u (i8x16.neg (local.get 0)) (local.get 1))) ) (assert_return (invoke "sat-add_s-sub_s" (v128.const i8x16 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "sat-add_s-sub_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "sat-add_u-sub_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254)) (assert_return (invoke "sat-add_u-sub_u" (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "sat-add_s-neg" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "sat-add_u-neg" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255)) (assert_return (invoke "sat-sub_s-neg" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "sat-sub_u-neg" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_int_to_int_extend.wast ================================================ ;; Tests for int-to-int extension operations. (module (func (export "i16x8.extend_high_i8x16_s") (param v128) (result v128) (i16x8.extend_high_i8x16_s (local.get 0))) (func (export "i16x8.extend_high_i8x16_u") (param v128) (result v128) (i16x8.extend_high_i8x16_u (local.get 0))) (func (export "i16x8.extend_low_i8x16_s") (param v128) (result v128) (i16x8.extend_low_i8x16_s (local.get 0))) (func (export "i16x8.extend_low_i8x16_u") (param v128) (result v128) (i16x8.extend_low_i8x16_u (local.get 0))) (func (export "i32x4.extend_high_i16x8_s") (param v128) (result v128) (i32x4.extend_high_i16x8_s (local.get 0))) (func (export "i32x4.extend_high_i16x8_u") (param v128) (result v128) (i32x4.extend_high_i16x8_u (local.get 0))) (func (export "i32x4.extend_low_i16x8_s") (param v128) (result v128) (i32x4.extend_low_i16x8_s (local.get 0))) (func (export "i32x4.extend_low_i16x8_u") (param v128) (result v128) (i32x4.extend_low_i16x8_u (local.get 0))) (func (export "i64x2.extend_high_i32x4_s") (param v128) (result v128) (i64x2.extend_high_i32x4_s (local.get 0))) (func (export "i64x2.extend_high_i32x4_u") (param v128) (result v128) (i64x2.extend_high_i32x4_u (local.get 0))) (func (export "i64x2.extend_low_i32x4_s") (param v128) (result v128) (i64x2.extend_low_i32x4_s (local.get 0))) (func (export "i64x2.extend_low_i32x4_u") (param v128) (result v128) (i64x2.extend_low_i32x4_u (local.get 0))) ) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 126 126 126 126 126 126 126 126 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 126 126 126 126 126 126 126 126)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 126 126 126 126 126 126 126 126 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 126 126 126 126 126 126 126 126)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 129 129 129 129 129 129 129 129)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 126 126 126 126 126 126 126 126 127 127 127 127 127 127 127 127)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 126 126 126 126 126 126 126 126)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 127 127 127 127 127 127 127 127)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 127 127 127 127 127 127 127 127 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 127 127 127 127 127 127 127 127)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -127 -127 -127 -127 -127 -127 -127 -127)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 126 126 126 126 126 126 126 126 127 127 127 127 127 127 127 127)) (v128.const i16x8 126 126 126 126 126 126 126 126)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 126 126 126 126 126 126 126 126)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 127 127 127 127 127 127 127 127)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 127 127 127 127 127 127 127 127 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 127 127 127 127 127 127 127 127)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 127 127 127 127 127 127 127 127)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -127 -127 -127 -127 -127 -127 -127 -127 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 129 129 129 129 129 129 129 129)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -127 -127 -127 -127 -127 -127 -127 -127)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 128 128 128 128 128 128 128 128)) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -128 -128 -128 -128 -128 -128 -128 -128)) (v128.const i16x8 255 255 255 255 255 255 255 255)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 0 0 0 0 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 1 1 1 1 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 1 1 1 1 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 32766 32766 32766 32766 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32766 32766 32766 32766)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32767 -32767 -32767 -32767)) (v128.const i32x4 -32767 -32767 -32767 -32767)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -1 -1 -1 -1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -32768 -32768 -32768 -32768)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 0 0 0 0 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 1 1 1 1 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 1 1 1 1 -1 -1 -1 -1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 1 1 1 1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 32766 32766 32766 32766 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32766 32766 32766 32766)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 -1 -1 -1 -1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32767 -32767 -32767 -32767)) (v128.const i32x4 32769 32769 32769 32769)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -1 -1 -1 -1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 0 0 0 0 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 1 1 1 1 0 0 0 0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 1 1 1 1 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 1 1 1 1)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 32766 32766 32766 32766 32767 32767 32767 32767)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32766 32766 32766 32766)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 32767 32767 32767 32767)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 32767 32767 32767 32767 -1 -1 -1 -1)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 32767 32767 32767 32767)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -32767 -32767 -32767 -32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 -32767 -32767 -32767 -32767)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -32767 -32767 -32767 -32767)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -32768 -32768 -32768 -32768 -1 -1 -1 -1)) (v128.const i32x4 -32768 -32768 -32768 -32768)) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 -1 -1 -1 -1 -32768 -32768 -32768 -32768)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 0 0 0 0 1 1 1 1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 0 0 0 0 -1 -1 -1 -1)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 1 1 1 1 0 0 0 0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 1 1 1 1 -1 -1 -1 -1)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 1 1 1 1)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 32766 32766 32766 32766 32767 32767 32767 32767)) (v128.const i32x4 32766 32766 32766 32766)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32766 32766 32766 32766)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 32767 32767 32767 32767)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 32767 32767 32767 32767 -1 -1 -1 -1)) (v128.const i32x4 32767 32767 32767 32767)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 32767 32767 32767 32767)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -32767 -32767 -32767 -32767 -32768 -32768 -32768 -32768)) (v128.const i32x4 32769 32769 32769 32769)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -32767 -32767 -32767 -32767)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -32768 -32768 -32768 -32768 -1 -1 -1 -1)) (v128.const i32x4 32768 32768 32768 32768)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 -1 -1 -1 -1 -32768 -32768 -32768 -32768)) (v128.const i32x4 65535 65535 65535 65535)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 0 0 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 0 0 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 1 1 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -1 -1 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 1 1 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -1 -1 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 2147483646 2147483646 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483646 2147483646)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 2147483647 2147483647 -2147483648 -2147483648)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 2147483647 2147483647 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -1 -1 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -2147483647 -2147483647 -2147483648 -2147483648)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483647 -2147483647)) (v128.const i64x2 -2147483647 -2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 -1 -1 -2147483648 -2147483648)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 0 0 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 0 0 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 1 1 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -1 -1 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 1 1 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -1 -1 1 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 2147483646 2147483646 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483646 2147483646)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 2147483647 2147483647 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 2147483647 2147483647 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -1 -1 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -2147483647 -2147483647 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483647 -2147483647)) (v128.const i64x2 2147483649 2147483649)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 -1 -1 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 0 0 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 0 0 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 1 1 0 0)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -1 -1 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 1 1 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -1 -1 1 1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 2147483646 2147483646 2147483647 2147483647)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483646 2147483646)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 2147483647 2147483647 -2147483648 -2147483648)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 2147483647 2147483647)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 2147483647 2147483647 -1 -1)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -1 -1 2147483647 2147483647)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -2147483647 -2147483647 -2147483648 -2147483648)) (v128.const i64x2 -2147483647 -2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -2147483647 -2147483647)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -2147483648 -2147483648 -1 -1)) (v128.const i64x2 -2147483648 -2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -1 -1 -2147483648 -2147483648)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 0 0 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 0 0 1 1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 0 0 -1 -1)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 1 1 0 0)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -1 -1 0 0)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 1 1 -1 -1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -1 -1 1 1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 2147483646 2147483646 2147483647 2147483647)) (v128.const i64x2 2147483646 2147483646)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483646 2147483646)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 2147483647 2147483647 -2147483648 -2147483648)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 2147483647 2147483647)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 2147483647 2147483647 -1 -1)) (v128.const i64x2 2147483647 2147483647)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -1 -1 2147483647 2147483647)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -2147483647 -2147483647 -2147483648 -2147483648)) (v128.const i64x2 2147483649 2147483649)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -2147483647 -2147483647)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -2147483648 -2147483648 -1 -1)) (v128.const i64x2 2147483648 2147483648)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -1 -1 -2147483648 -2147483648)) (v128.const i64x2 4294967295 4294967295)) ;; type check (assert_invalid (module (func (result v128) (i16x8.extend_high_i8x16_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extend_high_i8x16_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extend_low_i8x16_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.extend_low_i8x16_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extend_high_i16x8_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extend_high_i16x8_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extend_low_i16x8_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.extend_low_i16x8_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extend_high_i32x4_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extend_high_i32x4_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extend_low_i32x4_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.extend_low_i32x4_u (i32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (func $i16x8.extend_high_i8x16_s-arg-empty (result v128) (i16x8.extend_high_i8x16_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extend_high_i8x16_u-arg-empty (result v128) (i16x8.extend_high_i8x16_u) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extend_low_i8x16_s-arg-empty (result v128) (i16x8.extend_low_i8x16_s) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.extend_low_i8x16_u-arg-empty (result v128) (i16x8.extend_low_i8x16_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extend_high_i16x8_s-arg-empty (result v128) (i32x4.extend_high_i16x8_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extend_high_i16x8_u-arg-empty (result v128) (i32x4.extend_high_i16x8_u) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extend_low_i16x8_s-arg-empty (result v128) (i32x4.extend_low_i16x8_s) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.extend_low_i16x8_u-arg-empty (result v128) (i32x4.extend_low_i16x8_u) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extend_high_i32x4_s-arg-empty (result v128) (i64x2.extend_high_i32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extend_high_i32x4_u-arg-empty (result v128) (i64x2.extend_high_i32x4_u) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extend_low_i32x4_s-arg-empty (result v128) (i64x2.extend_low_i32x4_s) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.extend_low_i32x4_u-arg-empty (result v128) (i64x2.extend_low_i32x4_u) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_lane.wast ================================================ ;; Tests for the extract_lane, replace_lane, swizzle and shuffle group instructions (module (func (export "i8x16_extract_lane_s-first") (param v128) (result i32) (i8x16.extract_lane_s 0 (local.get 0))) (func (export "i8x16_extract_lane_s-last") (param v128) (result i32) (i8x16.extract_lane_s 15 (local.get 0))) (func (export "i8x16_extract_lane_u-first") (param v128) (result i32) (i8x16.extract_lane_u 0 (local.get 0))) (func (export "i8x16_extract_lane_u-last") (param v128) (result i32) (i8x16.extract_lane_u 15 (local.get 0))) (func (export "i16x8_extract_lane_s-first") (param v128) (result i32) (i16x8.extract_lane_s 0 (local.get 0))) (func (export "i16x8_extract_lane_s-last") (param v128) (result i32) (i16x8.extract_lane_s 7 (local.get 0))) (func (export "i16x8_extract_lane_u-first") (param v128) (result i32) (i16x8.extract_lane_u 0 (local.get 0))) (func (export "i16x8_extract_lane_u-last") (param v128) (result i32) (i16x8.extract_lane_u 7 (local.get 0))) (func (export "i32x4_extract_lane-first") (param v128) (result i32) (i32x4.extract_lane 0 (local.get 0))) (func (export "i32x4_extract_lane-last") (param v128) (result i32) (i32x4.extract_lane 3 (local.get 0))) (func (export "f32x4_extract_lane-first") (param v128) (result f32) (f32x4.extract_lane 0 (local.get 0))) (func (export "f32x4_extract_lane-last") (param v128) (result f32) (f32x4.extract_lane 3 (local.get 0))) (func (export "i8x16_replace_lane-first") (param v128 i32) (result v128) (i8x16.replace_lane 0 (local.get 0) (local.get 1))) (func (export "i8x16_replace_lane-last") (param v128 i32) (result v128) (i8x16.replace_lane 15 (local.get 0) (local.get 1))) (func (export "i16x8_replace_lane-first") (param v128 i32) (result v128) (i16x8.replace_lane 0 (local.get 0) (local.get 1))) (func (export "i16x8_replace_lane-last") (param v128 i32) (result v128) (i16x8.replace_lane 7 (local.get 0) (local.get 1))) (func (export "i32x4_replace_lane-first") (param v128 i32) (result v128) (i32x4.replace_lane 0 (local.get 0) (local.get 1))) (func (export "i32x4_replace_lane-last") (param v128 i32) (result v128) (i32x4.replace_lane 3 (local.get 0) (local.get 1))) (func (export "f32x4_replace_lane-first") (param v128 f32) (result v128) (f32x4.replace_lane 0 (local.get 0) (local.get 1))) (func (export "f32x4_replace_lane-last") (param v128 f32) (result v128) (f32x4.replace_lane 3 (local.get 0) (local.get 1))) (func (export "i64x2_extract_lane-first") (param v128) (result i64) (i64x2.extract_lane 0 (local.get 0))) (func (export "i64x2_extract_lane-last") (param v128) (result i64) (i64x2.extract_lane 1 (local.get 0))) (func (export "f64x2_extract_lane-first") (param v128) (result f64) (f64x2.extract_lane 0 (local.get 0))) (func (export "f64x2_extract_lane-last") (param v128) (result f64) (f64x2.extract_lane 1 (local.get 0))) (func (export "i64x2_replace_lane-first") (param v128 i64) (result v128) (i64x2.replace_lane 0 (local.get 0) (local.get 1))) (func (export "i64x2_replace_lane-last") (param v128 i64) (result v128) (i64x2.replace_lane 1 (local.get 0) (local.get 1))) (func (export "f64x2_replace_lane-first") (param v128 f64) (result v128) (f64x2.replace_lane 0 (local.get 0) (local.get 1))) (func (export "f64x2_replace_lane-last") (param v128 f64) (result v128) (f64x2.replace_lane 1 (local.get 0) (local.get 1))) ;; Swizzle and shuffle (func (export "v8x16_swizzle") (param v128 v128) (result v128) (i8x16.swizzle (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-1") (param v128 v128) (result v128) (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-2") (param v128 v128) (result v128) (i8x16.shuffle 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-3") (param v128 v128) (result v128) (i8x16.shuffle 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-4") (param v128 v128) (result v128) (i8x16.shuffle 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-5") (param v128 v128) (result v128) (i8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-6") (param v128 v128) (result v128) (i8x16.shuffle 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 (local.get 0) (local.get 1))) (func (export "v8x16_shuffle-7") (param v128 v128) (result v128) (i8x16.shuffle 0 0 0 0 0 0 0 0 16 16 16 16 16 16 16 16 (local.get 0) (local.get 1))) ) (assert_return (invoke "i8x16_extract_lane_s-first" (v128.const i8x16 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 127)) (assert_return (invoke "i8x16_extract_lane_s-first" (v128.const i8x16 0x7f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 127)) (assert_return (invoke "i8x16_extract_lane_s-first" (v128.const i8x16 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const -1)) (assert_return (invoke "i8x16_extract_lane_s-first" (v128.const i8x16 0xff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const -1)) (assert_return (invoke "i8x16_extract_lane_u-first" (v128.const i8x16 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 255)) (assert_return (invoke "i8x16_extract_lane_u-first" (v128.const i8x16 0xff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 255)) (assert_return (invoke "i8x16_extract_lane_s-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -128)) (i32.const -128)) (assert_return (invoke "i8x16_extract_lane_s-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x80)) (i32.const -128)) (assert_return (invoke "i8x16_extract_lane_u-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1)) (i32.const 255)) (assert_return (invoke "i8x16_extract_lane_u-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0xff)) (i32.const 255)) (assert_return (invoke "i8x16_extract_lane_u-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -128)) (i32.const 128)) (assert_return (invoke "i8x16_extract_lane_u-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x80)) (i32.const 128)) (assert_return (invoke "i16x8_extract_lane_s-first" (v128.const i16x8 32767 0 0 0 0 0 0 0)) (i32.const 32767)) (assert_return (invoke "i16x8_extract_lane_s-first" (v128.const i16x8 0x7fff 0 0 0 0 0 0 0)) (i32.const 32767)) (assert_return (invoke "i16x8_extract_lane_s-first" (v128.const i16x8 65535 0 0 0 0 0 0 0)) (i32.const -1)) (assert_return (invoke "i16x8_extract_lane_s-first" (v128.const i16x8 0xffff 0 0 0 0 0 0 0)) (i32.const -1)) (assert_return (invoke "i16x8_extract_lane_s-first" (v128.const i16x8 012_345 0 0 0 0 0 0 0)) (i32.const 12345)) (assert_return (invoke "i16x8_extract_lane_s-first" (v128.const i16x8 -0x0_1234 0 0 0 0 0 0 0)) (i32.const -0x1234)) (assert_return (invoke "i16x8_extract_lane_u-first" (v128.const i16x8 65535 0 0 0 0 0 0 0)) (i32.const 65535)) (assert_return (invoke "i16x8_extract_lane_u-first" (v128.const i16x8 0xffff 0 0 0 0 0 0 0)) (i32.const 65535)) (assert_return (invoke "i16x8_extract_lane_u-first" (v128.const i16x8 012_345 0 0 0 0 0 0 0)) (i32.const 12345)) (assert_return (invoke "i16x8_extract_lane_u-first" (v128.const i16x8 -0x0_1234 0 0 0 0 0 0 0)) (i32.const 60876)) (assert_return (invoke "i16x8_extract_lane_s-last" (v128.const i16x8 0 0 0 0 0 0 0 -32768)) (i32.const -32768)) (assert_return (invoke "i16x8_extract_lane_s-last" (v128.const i16x8 0 0 0 0 0 0 0 0x8000)) (i32.const -32768)) (assert_return (invoke "i16x8_extract_lane_s-last" (v128.const i16x8 0 0 0 0 0 0 0 06_789)) (i32.const 6789)) (assert_return (invoke "i16x8_extract_lane_s-last" (v128.const i16x8 0 0 0 0 0 0 0 -0x0_6789)) (i32.const -0x6789)) (assert_return (invoke "i16x8_extract_lane_u-last" (v128.const i16x8 0 0 0 0 0 0 0 -1)) (i32.const 65535)) (assert_return (invoke "i16x8_extract_lane_u-last" (v128.const i16x8 0 0 0 0 0 0 0 0xffff)) (i32.const 65535)) (assert_return (invoke "i16x8_extract_lane_u-last" (v128.const i16x8 0 0 0 0 0 0 0 -32768)) (i32.const 32768)) (assert_return (invoke "i16x8_extract_lane_u-last" (v128.const i16x8 0 0 0 0 0 0 0 0x8000)) (i32.const 32768)) (assert_return (invoke "i16x8_extract_lane_u-last" (v128.const i16x8 0 0 0 0 0 0 0 06_789)) (i32.const 6789)) (assert_return (invoke "i16x8_extract_lane_u-last" (v128.const i16x8 0 0 0 0 0 0 0 -0x0_6789)) (i32.const 39031)) (assert_return (invoke "i32x4_extract_lane-first" (v128.const i32x4 2147483647 0 0 0)) (i32.const 2147483647)) (assert_return (invoke "i32x4_extract_lane-first" (v128.const i32x4 0x7fffffff 0 0 0)) (i32.const 2147483647)) (assert_return (invoke "i32x4_extract_lane-first" (v128.const i32x4 4294967295 0 0 0)) (i32.const -1)) (assert_return (invoke "i32x4_extract_lane-first" (v128.const i32x4 0xffffffff 0 0 0)) (i32.const -1)) (assert_return (invoke "i32x4_extract_lane-first" (v128.const i32x4 01_234_567_890 0 0 0)) (i32.const 1234567890)) (assert_return (invoke "i32x4_extract_lane-first" (v128.const i32x4 -0x0_1234_5678 0 0 0)) (i32.const -0x12345678)) (assert_return (invoke "i32x4_extract_lane-last" (v128.const i32x4 0 0 0 -2147483648)) (i32.const -2147483648)) (assert_return (invoke "i32x4_extract_lane-last" (v128.const i32x4 0 0 0 0x80000000)) (i32.const -2147483648)) (assert_return (invoke "i32x4_extract_lane-last" (v128.const i32x4 0 0 0 -1)) (i32.const -1)) (assert_return (invoke "i32x4_extract_lane-last" (v128.const i32x4 0 0 0 0xffffffff)) (i32.const -1)) (assert_return (invoke "i32x4_extract_lane-last" (v128.const i32x4 0 0 0 0_987_654_321)) (i32.const 987654321)) (assert_return (invoke "i32x4_extract_lane-last" (v128.const i32x4 0 0 0 -0x0_1234_5678)) (i32.const -0x12345678)) (assert_return (invoke "i64x2_extract_lane-first" (v128.const i64x2 9223372036854775807 0)) (i64.const 9223372036854775807)) (assert_return (invoke "i64x2_extract_lane-first" (v128.const i64x2 0x7ffffffffffffffe 0)) (i64.const 0x7ffffffffffffffe)) (assert_return (invoke "i64x2_extract_lane-first" (v128.const i64x2 18446744073709551615 0)) (i64.const -1)) (assert_return (invoke "i64x2_extract_lane-first" (v128.const i64x2 0xffffffffffffffff 0)) (i64.const -1)) (assert_return (invoke "i64x2_extract_lane-first" (v128.const i64x2 01_234_567_890_123_456_789 0)) (i64.const 1234567890123456789)) (assert_return (invoke "i64x2_extract_lane-first" (v128.const i64x2 0x0_1234_5678_90AB_cdef 0)) (i64.const 0x1234567890abcdef)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i64x2 0 9223372036854775808)) (i64.const -9223372036854775808)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i64x2 0 0x8000000000000000)) (i64.const -0x8000000000000000)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i64x2 0 0x8000000000000000)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x7f)) (i64.const 9223372036854775807)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0x8000)) (i64.const -9223372036854775808)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i32x4 0 0 0xffffffff 0x7fffffff)) (i64.const 9223372036854775807)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const f64x2 -inf +inf)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i64x2 0 01_234_567_890_123_456_789)) (i64.const 1234567890123456789)) (assert_return (invoke "i64x2_extract_lane-last" (v128.const i64x2 0 0x0_1234_5678_90AB_cdef)) (i64.const 0x1234567890abcdef)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 -5.0 0.0 0.0 0.0)) (f32.const -5.0)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 1e38 0.0 0.0 0.0)) (f32.const 1e38)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 0x1.fffffep127 0.0 0.0 0.0)) (f32.const 0x1.fffffep127)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 0x1p127 0.0 0.0 0.0)) (f32.const 0x1p127)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 inf 0.0 0.0 0.0)) (f32.const inf)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 nan inf 0.0 0.0)) (f32.const nan)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 0123456789.0123456789e+019 0.0 0.0 0.0)) (f32.const 123456789.0123456789e+019)) (assert_return (invoke "f32x4_extract_lane-first" (v128.const f32x4 0x0123456789ABCDEF.019aFp-019 0.0 0.0 0.0)) (f32.const 0x123456789ABCDEF.019aFp-019)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 0.0 -1e38)) (f32.const -1e38)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 0.0 -0x1.fffffep127)) (f32.const -0x1.fffffep127)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 0.0 -0x1p127)) (f32.const -0x1p127)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 0.0 -inf)) (f32.const -inf)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 -inf nan)) (f32.const nan)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 0.0 0123456789.)) (f32.const 123456789.0)) (assert_return (invoke "f32x4_extract_lane-last" (v128.const f32x4 0.0 0.0 0.0 0x0123456789ABCDEF.)) (f32.const 0x123456789ABCDEF.0p0)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 -1.5 0.0)) (f64.const -1.5)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 1.5 0.0)) (f64.const 1.5)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 -1.7976931348623157e-308 0x0p+0)) (f64.const -1.7976931348623157e-308)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 1.7976931348623157e-308 0x0p-0)) (f64.const 1.7976931348623157e-308)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 -0x1.fffffffffffffp-1023 0x0p+0)) (f64.const -0x1.fffffffffffffp-1023)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 0x1.fffffffffffffp-1023 0x0p-0)) (f64.const 0x1.fffffffffffffp-1023)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 -inf 0.0)) (f64.const -inf)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 inf 0.0)) (f64.const inf)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 -nan -0.0)) (f64.const -nan)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 nan 0.0)) (f64.const nan)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 0123456789.0123456789e+019 0.0)) (f64.const 123456789.0123456789e+019)) (assert_return (invoke "f64x2_extract_lane-first" (v128.const f64x2 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019 0.0)) (f64.const 0x123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0.0 2.25)) (f64.const 2.25)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0.0 -2.25)) (f64.const -2.25)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0x0p-0 -1.7976931348623157e+308)) (f64.const -1.7976931348623157e+308)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0x0p+0 1.7976931348623157e+308)) (f64.const 1.7976931348623157e+308)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0x0p-0 -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0x0p+0 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 -0.0 -inf)) (f64.const -inf)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0.0 inf)) (f64.const inf)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 -0.0 -nan)) (f64.const -nan)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0.0 nan)) (f64.const nan)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0.0 0123456789.)) (f64.const 123456789.0)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const f64x2 0.0 0x0123456789ABCDEFabcdef.)) (f64.const 0x123456789ABCDEFabcdef.0)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (f64.const 0.0)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x80)) (f64.const -0.0)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0x4000)) (f64.const 2.0)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0xc000)) (f64.const -2.0)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i32x4 0 0 0xffffffff 0x7fefffff)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i32x4 0 0 0 0x00100000)) (f64.const 0x1.0000000000000p-1022)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i32x4 0 0 0xffffffff 0x000fffff)) (f64.const 0x1.ffffffffffffep-1023)) (assert_return (invoke "f64x2_extract_lane-last" (v128.const i32x4 0 0 1 0)) (f64.const 0x0.0000000000002p-1023)) (assert_return (invoke "i8x16_replace_lane-first" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 127)) (v128.const i8x16 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16_replace_lane-first" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 128)) (v128.const i8x16 -128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16_replace_lane-first" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 255)) (v128.const i8x16 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16_replace_lane-first" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 256)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16_replace_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const -128)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -128)) (assert_return (invoke "i8x16_replace_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const -129)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127)) (assert_return (invoke "i8x16_replace_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 32767)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0xff)) (assert_return (invoke "i8x16_replace_lane-last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const -32768)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-first" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 32767)) (v128.const i16x8 32767 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-first" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 32768)) (v128.const i16x8 -32768 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-first" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 65535)) (v128.const i16x8 -1 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-first" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 65536)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-first" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 012345)) (v128.const i16x8 012_345 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-first" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const -0x01234)) (v128.const i16x8 -0x0_1234 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const -32768)) (v128.const i16x8 0 0 0 0 0 0 0 -32768)) (assert_return (invoke "i16x8_replace_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const -32769)) (v128.const i16x8 0 0 0 0 0 0 0 32767)) (assert_return (invoke "i16x8_replace_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 0x7fffffff)) (v128.const i16x8 0 0 0 0 0 0 0 0xffff)) (assert_return (invoke "i16x8_replace_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 0x80000000)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_replace_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 054321)) (v128.const i16x8 0 0 0 0 0 0 0 054_321)) (assert_return (invoke "i16x8_replace_lane-last" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const -0x04321)) (v128.const i16x8 0 0 0 0 0 0 0 -0x0_4321)) (assert_return (invoke "i32x4_replace_lane-first" (v128.const i32x4 0 0 0 0) (i32.const 2147483647)) (v128.const i32x4 2147483647 0 0 0)) (assert_return (invoke "i32x4_replace_lane-first" (v128.const i32x4 0 0 0 0) (i32.const 4294967295)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "i32x4_replace_lane-first" (v128.const i32x4 0 0 0 0) (i32.const 01234567890)) (v128.const i32x4 01_234_567_890 0 0 0)) (assert_return (invoke "i32x4_replace_lane-first" (v128.const i32x4 0 0 0 0) (i32.const -0x012345678)) (v128.const i32x4 -0x0_1234_5678 0 0 0)) (assert_return (invoke "i32x4_replace_lane-last" (v128.const i32x4 0 0 0 0) (i32.const 2147483648)) (v128.const i32x4 0 0 0 2147483648)) (assert_return (invoke "i32x4_replace_lane-last" (v128.const i32x4 0 0 0 0) (i32.const -2147483648)) (v128.const i32x4 0 0 0 -2147483648)) (assert_return (invoke "i32x4_replace_lane-last" (v128.const i32x4 0 0 0 0) (i32.const 01234567890)) (v128.const i32x4 0 0 0 01_234_567_890)) (assert_return (invoke "i32x4_replace_lane-last" (v128.const i32x4 0 0 0 0) (i32.const -0x012345678)) (v128.const i32x4 0 0 0 -0x0_1234_5678)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 53.0)) (v128.const f32x4 53.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const i32x4 0 0 0 0 ) (f32.const 53.0)) (v128.const f32x4 53.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const nan)) (v128.const f32x4 nan 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const inf)) (v128.const f32x4 inf 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 nan 0.0 0.0 0.0) (f32.const 3.14)) (v128.const f32x4 3.14 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 inf 0.0 0.0 0.0) (f32.const 1e38)) (v128.const f32x4 1e38 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 inf 0.0 0.0 0.0) (f32.const 0x1.fffffep127)) (v128.const f32x4 0x1.fffffep127 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 inf 0.0 0.0 0.0) (f32.const 0x1p127)) (v128.const f32x4 0x1p127 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0123456789)) (v128.const f32x4 0123456789 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0123456789.)) (v128.const f32x4 0123456789. 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0x0123456789ABCDEF)) (v128.const f32x4 0x0123456789ABCDEF 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-first" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0x0123456789ABCDEF.)) (v128.const f32x4 0x0123456789ABCDEF. 0.0 0.0 0.0)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const -53.0)) (v128.const f32x4 0.0 0.0 0.0 -53.0)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const i32x4 0 0 0 0) (f32.const -53.0)) (v128.const f32x4 0.0 0.0 0.0 -53.0)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const nan)) (v128.const f32x4 0.0 0.0 0.0 nan)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const -inf)) (v128.const f32x4 0.0 0.0 0.0 -inf)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 nan) (f32.const 3.14)) (v128.const f32x4 0.0 0.0 0.0 3.14)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 -inf) (f32.const -1e38)) (v128.const f32x4 0.0 0.0 0.0 -1e38)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 -inf) (f32.const -0x1.fffffep127)) (v128.const f32x4 0.0 0.0 0.0 -0x1.fffffep127)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 -inf) (f32.const -0x1p127)) (v128.const f32x4 0.0 0.0 0.0 -0x1p127)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0123456789e019)) (v128.const f32x4 0.0 0.0 0.0 0123456789e019)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0123456789.e+019)) (v128.const f32x4 0.0 0.0 0.0 0123456789.e+019)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0x0123456789ABCDEFp019)) (v128.const f32x4 0.0 0.0 0.0 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4_replace_lane-last" (v128.const f32x4 0.0 0.0 0.0 0.0) (f32.const 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0.0 0.0 0.0 0x0123456789ABCDEF.p-019)) (assert_return (invoke "i64x2_replace_lane-first" (v128.const i64x2 0 0) (i64.const 9223372036854775807)) (v128.const i64x2 9223372036854775807 0)) (assert_return (invoke "i64x2_replace_lane-first" (v128.const i64x2 0 0) (i64.const 18446744073709551615)) (v128.const i64x2 -1 0)) (assert_return (invoke "i64x2_replace_lane-first" (v128.const i64x2 0 0) (i64.const 01234567890123456789)) (v128.const i64x2 01_234_567_890_123_456_789 0)) (assert_return (invoke "i64x2_replace_lane-first" (v128.const i64x2 0 0) (i64.const 0x01234567890abcdef)) (v128.const i64x2 0x0_1234_5678_90AB_cdef 0)) (assert_return (invoke "i64x2_replace_lane-last" (v128.const i64x2 0 0) (i64.const 9223372036854775808)) (v128.const i64x2 0 9223372036854775808)) (assert_return (invoke "i64x2_replace_lane-last" (v128.const i64x2 0 0) (i64.const 9223372036854775808)) (v128.const i64x2 0 -9223372036854775808)) (assert_return (invoke "i64x2_replace_lane-last" (v128.const i64x2 0 0) (i64.const 01234567890123456789)) (v128.const i64x2 0 01_234_567_890_123_456_789)) (assert_return (invoke "i64x2_replace_lane-last" (v128.const i64x2 0 0) (i64.const 0x01234567890abcdef)) (v128.const i64x2 0 0x0_1234_5678_90AB_cdef)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 1.0 1.0) (f64.const 0x0p+0)) (v128.const f64x2 0.0 1.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 -1.0 -1.0) (f64.const -0x0p-0)) (v128.const f64x2 -0.0 -1.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const 1.25)) (v128.const f64x2 1.25 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const -1.25)) (v128.const f64x2 -1.25 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 -nan 0.0) (f64.const -1.7976931348623157e+308)) (v128.const f64x2 -1.7976931348623157e+308 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 nan 0.0) (f64.const 1.7976931348623157e+308)) (v128.const f64x2 1.7976931348623157e+308 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 -inf 0.0) (f64.const -0x1.fffffffffffffp-1023)) (v128.const f64x2 -0x1.fffffffffffffp-1023 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 inf 0.0) (f64.const 0x1.fffffffffffffp-1023)) (v128.const f64x2 0x1.fffffffffffffp-1023 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const -nan)) (v128.const f64x2 -nan 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const nan)) (v128.const f64x2 nan 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const -inf)) (v128.const f64x2 -inf 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const inf)) (v128.const f64x2 inf 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const 0123456789)) (v128.const f64x2 0123456789 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const 0123456789.)) (v128.const f64x2 0123456789. 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0.0)) (assert_return (invoke "f64x2_replace_lane-first" (v128.const f64x2 0.0 0.0) (f64.const 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0.0)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 2.0 2.0) (f64.const 0.0)) (v128.const f64x2 2.0 0.0)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 -2.0 -2.0) (f64.const -0.0)) (v128.const f64x2 -2.0 -0.0)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const 2.25)) (v128.const f64x2 0.0 2.25)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const -2.25)) (v128.const f64x2 0.0 -2.25)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 -nan) (f64.const -1.7976931348623157e+308)) (v128.const f64x2 0.0 -1.7976931348623157e+308)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 nan) (f64.const 1.7976931348623157e+308)) (v128.const f64x2 0.0 1.7976931348623157e+308)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 -inf) (f64.const -0x1.fffffffffffffp-1023)) (v128.const f64x2 0.0 -0x1.fffffffffffffp-1023)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 inf) (f64.const 0x1.fffffffffffffp-1023)) (v128.const f64x2 0.0 0x1.fffffffffffffp-1023)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const -nan)) (v128.const f64x2 0.0 -nan)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const nan)) (v128.const f64x2 0.0 nan)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const -inf)) (v128.const f64x2 0.0 -inf)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const inf)) (v128.const f64x2 0.0 inf)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const 0123456789e019)) (v128.const f64x2 0.0 0123456789e019)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const 0123456789e+019)) (v128.const f64x2 0.0 0123456789e+019)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const 0123456789.e019)) (v128.const f64x2 0.0 0123456789.e019)) (assert_return (invoke "f64x2_replace_lane-last" (v128.const f64x2 0.0 0.0) (f64.const 0123456789.e-019)) (v128.const f64x2 0.0 0123456789.e-019)) (assert_return (invoke "v8x16_swizzle" (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)) (assert_return (invoke "v8x16_swizzle" (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 -8 -7 -6 -5 -4 -3 -2 -1 16 17 18 19 20 21 22 23)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v8x16_swizzle" (v128.const i8x16 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i8x16 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100)) (assert_return (invoke "v8x16_swizzle" (v128.const i8x16 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115) (v128.const i8x16 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -7 7 -8 8)) (v128.const i8x16 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108)) (assert_return (invoke "v8x16_swizzle" (v128.const i8x16 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115) (v128.const i8x16 9 16 10 17 11 18 12 19 13 20 14 21 15 22 16 23)) (v128.const i8x16 109 0 110 0 111 0 112 0 113 0 114 0 115 0 0 0)) (assert_return (invoke "v8x16_swizzle" (v128.const i8x16 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73) (v128.const i8x16 9 16 10 17 11 18 12 19 13 20 14 21 15 22 16 23)) (v128.const i8x16 0x6d 0 0x6e 0 0x6f 0 0x70 0 0x71 0 0x72 0 0x73 0 0 0)) (assert_return (invoke "v8x16_swizzle" (v128.const i16x8 0x6465 0x6667 0x6869 0x6a6b 0x6c6d 0x6e6f 0x7071 0x7273) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i16x8 0x6465 0x6667 0x6869 0x6a6b 0x6c6d 0x6e6f 0x7071 0x7273)) (assert_return (invoke "v8x16_swizzle" (v128.const i32x4 0x64656667 0x68696a6b 0x6c6d6e6f 0x70717273) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i32x4 0x73727170 0x6f6e6d6c 0x6b6a6968 0x67666564)) (assert_return (invoke "v8x16_swizzle" (v128.const f32x4 nan -nan inf -inf) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i32x4 0x7fc00000 0xffc00000 0x7f800000 0xff800000)) (assert_return (invoke "v8x16_swizzle" (v128.const i32x4 0x67666564 0x6b6a6968 0x6f6e6d5c 0x73727170) (v128.const f32x4 0.0 -0.0 inf -inf)) (v128.const i32x4 0x64646464 0x00646464 0x00006464 0x00006464)) (assert_return (invoke "v8x16_shuffle-1" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_return (invoke "v8x16_shuffle-2" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (assert_return (invoke "v8x16_shuffle-3" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i8x16 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16)) (assert_return (invoke "v8x16_shuffle-4" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (assert_return (invoke "v8x16_shuffle-5" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v8x16_shuffle-6" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i8x16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16)) (assert_return (invoke "v8x16_shuffle-7" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 -16 -16 -16 -16 -16 -16 -16 -16)) (assert_return (invoke "v8x16_shuffle-1" (v128.const i8x16 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73) (v128.const i8x16 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff)) (v128.const i8x16 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73)) (assert_return (invoke "v8x16_shuffle-1" (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0b0a 0x0d0c 0x0f0e) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1)) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0b0a 0x0d0c 0x0f0e)) (assert_return (invoke "v8x16_shuffle-2" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i32x4 0xf3f2f1f0 0xf7f6f5f4 0xfbfaf9f8 0xfffefdfc)) (v128.const i32x4 0xf3f2f1f0 0xf7f6f5f4 0xfbfaf9f8 0xfffefdfc)) (assert_return (invoke "v8x16_shuffle-1" (v128.const i32x4 0x10203 0x4050607 0x8090a0b 0xc0d0e0f) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i32x4 0x10203 0x4050607 0x8090a0b 0xc0d0e0f)) (assert_return (invoke "v8x16_shuffle-1" (v128.const f32x4 1.0 nan inf -inf) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i32x4 0x3f800000 0x7fc00000 0x7f800000 0xff800000)) (assert_return (invoke "v8x16_shuffle-1" (v128.const i32x4 0x10203 0x4050607 0x8090a0b 0xc0d0e0f) (v128.const f32x4 -0.0 nan inf -inf)) (v128.const i32x4 0x10203 0x4050607 0x8090a0b 0xc0d0e0f)) ;; More literals (assert_return (invoke "v8x16_swizzle" (v128.const i32x4 1_234_567_890 0x1234_5678 01_234_567_890 0x0_1234_5678) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i32x4 0x4996_02d2 0x1234_5678 0x4996_02d2 0x1234_5678)) (assert_return (invoke "v8x16_shuffle-1" (v128.const i64x2 1_234_567_890_123_456_789_0 0x1234_5678_90AB_cdef) (v128.const i64x2 01_234_567_890_123_456_789_0 0x0_1234_5678_90AB_cdef)) (v128.const i32x4 0xeb1f_0ad2 0xab54_a98c 0x90ab_cdef 0x1234_5678)) ;; Syntax errors for negative values (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_s -1 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_u -1 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane_s -1 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane_u -1 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i32x4.extract_lane -1 (v128.const i32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result f32) (f32x4.extract_lane -1 (v128.const f32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i8x16.replace_lane -1 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i16x8.replace_lane -1 (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i32x4.replace_lane -1 (v128.const i32x4 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (f32x4.replace_lane -1 (v128.const f32x4 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result i64) (i64x2.extract_lane -1 (v128.const i64x2 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result f64) (f64x2.extract_lane -1 (v128.const f64x2 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i64x2.replace_lane -1 (v128.const i64x2 0 0) (i64.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (f64x2.replace_lane -1 (v128.const f64x2 0 0) (f64.const 1)))") "unexpected token") ;; Malformed lane index value (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_s 256 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_u 256 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane_s 256 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane_u 256 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result i32) (i32x4.extract_lane 256 (v128.const i32x4 0 0 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result f32) (f32x4.extract_lane 256 (v128.const f32x4 0 0 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) (i8x16.replace_lane 256 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) (i16x8.replace_lane 256 (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) (i32x4.replace_lane 256 (v128.const i32x4 0 0 0 0) (i32.const 1)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) (f32x4.replace_lane 256 (v128.const f32x4 0 0 0 0) (i32.const 1)))") "malformed lane index") (assert_malformed (module quote "(func (result i64) (i64x2.extract_lane 256 (v128.const i64x2 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result f64) (f64x2.extract_lane 256 (v128.const f64x2 0 0)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) (i64x2.replace_lane 256 (v128.const i64x2 0 0) (i64.const 1)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) (f64x2.replace_lane 256 (v128.const f64x2 0 0) (f64.const 1)))") "malformed lane index") ;; Invalid lane index value (assert_invalid (module (func (result i32) (i8x16.extract_lane_s 16 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i8x16.extract_lane_s 255 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i8x16.extract_lane_u 16 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i8x16.extract_lane_u 255 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i16x8.extract_lane_s 8 (v128.const i16x8 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i16x8.extract_lane_s 255 (v128.const i16x8 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i16x8.extract_lane_u 8 (v128.const i16x8 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i16x8.extract_lane_u 255 (v128.const i16x8 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i32x4.extract_lane 4 (v128.const i32x4 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i32x4.extract_lane 255 (v128.const i32x4 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result f32) (f32x4.extract_lane 4 (v128.const f32x4 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result f32) (f32x4.extract_lane 255 (v128.const f32x4 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result v128) (i8x16.replace_lane 16 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i8x16.replace_lane 255 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i16x8.replace_lane 16 (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i16x8.replace_lane 255 (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i32x4.replace_lane 4 (v128.const i32x4 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i32x4.replace_lane 255 (v128.const i32x4 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (f32x4.replace_lane 4 (v128.const f32x4 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (f32x4.replace_lane 255 (v128.const f32x4 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result i64) (i64x2.extract_lane 2 (v128.const i64x2 0 0)))) "invalid lane index") (assert_invalid (module (func (result i64) (i64x2.extract_lane 255 (v128.const i64x2 0 0)))) "invalid lane index") (assert_invalid (module (func (result f64) (f64x2.extract_lane 2 (v128.const f64x2 0 0)))) "invalid lane index") (assert_invalid (module (func (result f64) (f64x2.extract_lane 255 (v128.const f64x2 0 0)))) "invalid lane index") (assert_invalid (module (func (result v128) (i64x2.replace_lane 2 (v128.const i64x2 0 0) (i64.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i64x2.replace_lane 255 (v128.const i64x2 0 0) (i64.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (f64x2.replace_lane 2 (v128.const f64x2 0 0) (f64.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (f64x2.replace_lane 255 (v128.const f64x2 0 0) (f64.const 1.0)))) "invalid lane index") ;; Lane index is determined by the instruction's interpretation only. (assert_invalid (module (func (result i32) (i16x8.extract_lane_s 8 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i16x8.extract_lane_u 8 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (i32x4.extract_lane 4 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result i32) (f32x4.extract_lane 4 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) "invalid lane index") (assert_invalid (module (func (result v128) (i16x8.replace_lane 8 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (i32x4.replace_lane 4 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (f32x4.replace_lane 4 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))) "invalid lane index") (assert_invalid (module (func (result i64) (i64x2.extract_lane 2 (v128.const i64x2 0 0)))) "invalid lane index") (assert_invalid (module (func (result f64) (f64x2.extract_lane 2 (v128.const f64x2 0 0)))) "invalid lane index") (assert_invalid (module (func (result v128) (i64x2.replace_lane 2 (v128.const i64x2 0 0) (i64.const 1)))) "invalid lane index") (assert_invalid (module (func (result v128) (f64x2.replace_lane 2 (v128.const f64x2 0 0) (f64.const 1.0)))) "invalid lane index") ;; Invalid parameters: required v128 but pass other types (assert_invalid (module (func (result i32) (i8x16.extract_lane_s 0 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i8x16.extract_lane_u 0 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i8x16.extract_lane_s 0 (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result i32) (i8x16.extract_lane_u 0 (f64.const 0.0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32x4.extract_lane 0 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32x4.extract_lane 0 (f32.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.replace_lane 0 (i32.const 0) (i32.const 1)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.replace_lane 0 (i64.const 0) (i32.const 1)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.replace_lane 0 (i32.const 0) (i32.const 1)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.replace_lane 0 (f32.const 0.0) (i32.const 1)))) "type mismatch") (assert_invalid (module (func (result i64) (i64x2.extract_lane 0 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64x2.extract_lane 0 (f64.const 0.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.replace_lane 0 (i32.const 0) (i32.const 1)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.replace_lane 0 (f32.const 0.0) (i32.const 1)))) "type mismatch") ;; Invalid types for the replaced value (assert_invalid (module (func (result v128) (i8x16.replace_lane 0 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (f32.const 1.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i16x8.replace_lane 0 (v128.const i16x8 0 0 0 0 0 0 0 0) (f64.const 1.0)))) "type mismatch") (assert_invalid (module (func (result v128) (i32x4.replace_lane 0 (v128.const i32x4 0 0 0 0) (f32.const 1.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f32x4.replace_lane 0 (v128.const f32x4 0 0 0 0) (i32.const 1)))) "type mismatch") (assert_invalid (module (func (result v128) (i64x2.replace_lane 0 (v128.const i64x2 0 0) (f64.const 1.0)))) "type mismatch") (assert_invalid (module (func (result v128) (f64x2.replace_lane 0 (v128.const f64x2 0 0) (i64.const 1)))) "type mismatch") ;; Invalid types for swizzle and shuffle values (assert_invalid (module (func (result v128) (i8x16.swizzle (i32.const 1) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.swizzle (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) (i32.const 2)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (f32.const 3.0) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)))) "type mismatch") (assert_invalid (module (func (result v128) (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) (f32.const 4.0)))) "type mismatch") ;; i8x16.shuffle: the 1st argument must be 16-byte literals in 0..32 (assert_malformed (module quote "(func (param v128) (result v128)" "(i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (local.get 0) (local.get 0)))") "invalid lane length") (assert_malformed (module quote "(func (param v128) (result v128)" "(i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (local.get 0) (local.get 0)))") "invalid lane length") (assert_malformed (module quote "(func (result v128)" "(i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -1" "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)" "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") (assert_malformed (module quote "(func (result v128)" "(i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 256" "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)" "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") (assert_invalid (module (func (result v128) (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 255 (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))) "invalid lane index") ;; Possible wrong instruction names that'd be used (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane 0 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane 0 (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result i32) (i32x4.extract_lane_s 0 (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result i32) (i32x4.extract_lane_u 0 (v128.const i32x4 0 0 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result i32) (i64x2.extract_lane_s 0 (v128.const i64x2 0 0)))") "unknown operator") (assert_malformed (module quote "(func (result i32) (i64x2.extract_lane_u 0 (v128.const i64x2 0 0)))") "unknown operator") ;; Old shuffle instruction names will not work (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle1 (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle2_imm 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)))") "unknown operator") ;; i8x16 not v8x16 (assert_malformed (module quote "(func (result v128) " "(v8x16.swizzle (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)))") "unknown operator") (assert_malformed (module quote "(func (result v128) " "(v8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)))") "unknown operator") ;; Malformed lane index ;; Pass params as the lane index (assert_malformed (module quote "(func (param i32) (result i32) (i8x16.extract_lane_s (local.get 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result i32) (i8x16.extract_lane_u (local.get 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result i32) (i16x8.extract_lane_s (local.get 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result i32) (i16x8.extract_lane_u (local.get 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result i32) (i32x4.extract_lane (local.get 0) (v128.const i32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result f32) (f32x4.extract_lane (local.get 0) (v128.const f32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result v128) (i8x16.replace_lane (local.get 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result v128) (i16x8.replace_lane (local.get 0) (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result v128) (i32x4.replace_lane (local.get 0) (v128.const i32x4 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result v128) (f32x4.replace_lane (local.get 0) (v128.const f32x4 0 0 0 0) (f32.const 1.0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result i64) (i64x2.extract_lane (local.get 0) (v128.const i64x2 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result f64) (f64x2.extract_lane (local.get 0) (v128.const f64x2 0 0)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result v128) (i64x2.replace_lane (local.get 0) (v128.const i64x2 0 0) (i64.const 1)))") "unexpected token") (assert_malformed (module quote "(func (param i32) (result v128) (f64x2.replace_lane (local.get 0) (v128.const f64x2 0 0) (f64.const 1.0)))") "unexpected token") ;; Pass non-literal as the lane index (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_s 1.5 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_u nan (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane_s inf (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i16x8.extract_lane_u -inf (v128.const i16x8 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i32) (i32x4.extract_lane nan (v128.const i32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result f32) (f32x4.extract_lane nan (v128.const f32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i8x16.replace_lane -2.5 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i16x8.replace_lane nan (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i32x4.replace_lane inf (v128.const i32x4 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (f32x4.replace_lane -inf (v128.const f32x4 0 0 0 0) (f32.const 1.1)))") "unexpected token") ;; i8x16.shuffle expects a 16-byte literals as first argument (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "invalid lane length") (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15.0) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle 0.5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle -inf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 inf) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") (assert_malformed (module quote "(func (result v128) " "(i8x16.shuffle nan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) " "(v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) " "(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))") "malformed lane index") ;; Combination with each other (module ;; as *.replace_lane's operand (func (export "i8x16_extract_lane_s") (param v128 v128) (result v128) (i8x16.replace_lane 0 (local.get 0) (i8x16.extract_lane_s 0 (local.get 1)))) (func (export "i8x16_extract_lane_u") (param v128 v128) (result v128) (i8x16.replace_lane 0 (local.get 0) (i8x16.extract_lane_u 0 (local.get 1)))) (func (export "i16x8_extract_lane_s") (param v128 v128) (result v128) (i16x8.replace_lane 0 (local.get 0) (i16x8.extract_lane_s 0 (local.get 1)))) (func (export "i16x8_extract_lane_u") (param v128 v128) (result v128) (i16x8.replace_lane 0 (local.get 0) (i16x8.extract_lane_u 0 (local.get 1)))) (func (export "i32x4_extract_lane") (param v128 v128) (result v128) (i32x4.replace_lane 0 (local.get 0) (i32x4.extract_lane 0 (local.get 1)))) (func (export "f32x4_extract_lane") (param v128 v128) (result v128) (i32x4.replace_lane 0 (local.get 0) (i32x4.extract_lane 0 (local.get 1)))) (func (export "i64x2_extract_lane") (param v128 v128) (result v128) (i64x2.replace_lane 0 (local.get 0) (i64x2.extract_lane 0 (local.get 1)))) (func (export "f64x2_extract_lane") (param v128 v128) (result v128) (f64x2.replace_lane 0 (local.get 0) (f64x2.extract_lane 0 (local.get 1)))) ;; as *.extract_lane's operand (func (export "i8x16_replace_lane-s") (param v128 i32) (result i32) (i8x16.extract_lane_s 15 (i8x16.replace_lane 15 (local.get 0) (local.get 1)))) (func (export "i8x16_replace_lane-u") (param v128 i32) (result i32) (i8x16.extract_lane_u 15 (i8x16.replace_lane 15 (local.get 0) (local.get 1)))) (func (export "i16x8_replace_lane-s") (param v128 i32) (result i32) (i16x8.extract_lane_s 7 (i16x8.replace_lane 7 (local.get 0) (local.get 1)))) (func (export "i16x8_replace_lane-u") (param v128 i32) (result i32) (i16x8.extract_lane_u 7 (i16x8.replace_lane 7 (local.get 0) (local.get 1)))) (func (export "i32x4_replace_lane") (param v128 i32) (result i32) (i32x4.extract_lane 3 (i32x4.replace_lane 3 (local.get 0) (local.get 1)))) (func (export "f32x4_replace_lane") (param v128 f32) (result f32) (f32x4.extract_lane 3 (f32x4.replace_lane 3 (local.get 0) (local.get 1)))) (func (export "i64x2_replace_lane") (param v128 i64) (result i64) (i64x2.extract_lane 1 (i64x2.replace_lane 1 (local.get 0) (local.get 1)))) (func (export "f64x2_replace_lane") (param v128 f64) (result f64) (f64x2.extract_lane 1 (f64x2.replace_lane 1 (local.get 0) (local.get 1)))) ;; i8x16.replace outputs as shuffle operand (func (export "as-v8x16_swizzle-operand") (param v128 i32 v128) (result v128) (i8x16.swizzle (i8x16.replace_lane 0 (local.get 0) (local.get 1)) (local.get 2))) (func (export "as-v8x16_shuffle-operands") (param v128 i32 v128 i32) (result v128) (i8x16.shuffle 16 1 18 3 20 5 22 7 24 9 26 11 28 13 30 15 (i8x16.replace_lane 0 (local.get 0) (local.get 1)) (i8x16.replace_lane 15 (local.get 2) (local.get 3)))) ) (assert_return (invoke "i8x16_extract_lane_s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16_extract_lane_u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i8x16 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_extract_lane_s" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 -1 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8_extract_lane_u" (v128.const i16x8 0 0 0 0 0 0 0 0) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (v128.const i16x8 65535 0 0 0 0 0 0 0)) (assert_return (invoke "i32x4_extract_lane" (v128.const i32x4 0 0 0 0) (v128.const i32x4 0x10000 -1 -1 -1)) (v128.const i32x4 65536 0 0 0)) (assert_return (invoke "f32x4_extract_lane" (v128.const f32x4 0 0 0 0) (v128.const f32x4 1e38 nan nan nan)) (v128.const f32x4 1e38 0 0 0)) (assert_return (invoke "i8x16_replace_lane-s" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 255)) (i32.const -1)) (assert_return (invoke "i8x16_replace_lane-u" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 255)) (i32.const 255)) (assert_return (invoke "i16x8_replace_lane-s" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 65535)) (i32.const -1)) (assert_return (invoke "i16x8_replace_lane-u" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 65535)) (i32.const 65535)) (assert_return (invoke "i32x4_replace_lane" (v128.const i32x4 0 0 0 0) (i32.const -1)) (i32.const -1)) (assert_return (invoke "f32x4_replace_lane" (v128.const f32x4 0 0 0 0) (f32.const 1.25)) (f32.const 1.25)) (assert_return (invoke "i64x2_extract_lane" (v128.const i64x2 0 0) (v128.const i64x2 0xffffffffffffffff -1)) (v128.const i64x2 0xffffffffffffffff 0)) (assert_return (invoke "f64x2_extract_lane" (v128.const f64x2 0 0) (v128.const f64x2 1e308 nan)) (v128.const f64x2 1e308 0)) (assert_return (invoke "i64x2_replace_lane" (v128.const i64x2 0 0) (i64.const -1)) (i64.const -1)) (assert_return (invoke "f64x2_replace_lane" (v128.const f64x2 0 0) (f64.const 2.5)) (f64.const 2.5)) (assert_return (invoke "as-v8x16_swizzle-operand" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (i32.const 255) (v128.const i8x16 -1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1)) (v128.const i8x16 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1)) (assert_return (invoke "as-v8x16_shuffle-operands" (v128.const i8x16 0 255 0 255 15 255 0 255 255 255 0 255 127 255 0 255) (i32.const 1) (v128.const i8x16 0x55 0 0x55 0 0x55 0 0x55 0 0x55 0 0x55 0 0x55 1 0x55 -1) (i32.const 0)) (v128.const i8x16 0x55 0xff 0x55 0xff 0x55 0xff 0x55 0xff 0x55 0xff 0x55 0xff 0x55 0xff 0x55 0xff)) ;; Combination with other SIMD instructions (module ;; Constructing SIMD values (func (export "as-i8x16_splat-operand") (param v128) (result v128) (i8x16.splat (i8x16.extract_lane_s 0 (local.get 0)))) (func (export "as-i16x8_splat-operand") (param v128) (result v128) (i16x8.splat (i16x8.extract_lane_u 0 (local.get 0)))) (func (export "as-i32x4_splat-operand") (param v128) (result v128) (i32x4.splat (i32x4.extract_lane 0 (local.get 0)))) (func (export "as-f32x4_splat-operand") (param v128) (result v128) (f32x4.splat (f32x4.extract_lane 0 (local.get 0)))) (func (export "as-i64x2_splat-operand") (param v128) (result v128) (i64x2.splat (i64x2.extract_lane 0 (local.get 0)))) (func (export "as-f64x2_splat-operand") (param v128) (result v128) (f64x2.splat (f64x2.extract_lane 0 (local.get 0)))) ;; Integer arithmetic (func (export "as-i8x16_add-operands") (param v128 i32 v128 i32) (result v128) (i8x16.add (i8x16.replace_lane 0 (local.get 0) (local.get 1)) (i8x16.replace_lane 15 (local.get 2) (local.get 3)))) (func (export "as-i16x8_add-operands") (param v128 i32 v128 i32) (result v128) (i16x8.add (i16x8.replace_lane 0 (local.get 0) (local.get 1)) (i16x8.replace_lane 7 (local.get 2) (local.get 3)))) (func (export "as-i32x4_add-operands") (param v128 i32 v128 i32) (result v128) (i32x4.add (i32x4.replace_lane 0 (local.get 0) (local.get 1)) (i32x4.replace_lane 3 (local.get 2) (local.get 3)))) (func (export "as-i64x2_add-operands") (param v128 i64 v128 i64) (result v128) (i64x2.add (i64x2.replace_lane 0 (local.get 0) (local.get 1)) (i64x2.replace_lane 1 (local.get 2) (local.get 3)))) (func (export "swizzle-as-i8x16_add-operands") (param v128 v128 v128 v128) (result v128) (i8x16.add (i8x16.swizzle (local.get 0) (local.get 1)) (i8x16.swizzle (local.get 2) (local.get 3)))) (func (export "shuffle-as-i8x16_sub-operands") (param v128 v128 v128 v128) (result v128) (i8x16.sub (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (local.get 0) (local.get 1)) (i8x16.shuffle 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 (local.get 2) (local.get 3)))) ;; Boolean horizontal reductions (func (export "as-i8x16_any_true-operand") (param v128 i32) (result i32) (v128.any_true (i8x16.replace_lane 0 (local.get 0) (local.get 1)))) (func (export "as-i16x8_any_true-operand") (param v128 i32) (result i32) (v128.any_true (i16x8.replace_lane 0 (local.get 0) (local.get 1)))) (func (export "as-i32x4_any_true-operand1") (param v128 i32) (result i32) (v128.any_true (i32x4.replace_lane 0 (local.get 0) (local.get 1)))) (func (export "as-i32x4_any_true-operand2") (param v128 i64) (result i32) (v128.any_true (i64x2.replace_lane 0 (local.get 0) (local.get 1)))) (func (export "swizzle-as-i8x16_all_true-operands") (param v128 v128) (result i32) (i8x16.all_true (i8x16.swizzle (local.get 0) (local.get 1)))) (func (export "shuffle-as-i8x16_any_true-operands") (param v128 v128) (result i32) (v128.any_true (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (local.get 0) (local.get 1)))) ) (assert_return (invoke "as-i8x16_splat-operand" (v128.const i8x16 0xff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "as-i16x8_splat-operand" (v128.const i16x8 -1 -1 -1 -1 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "as-i32x4_splat-operand" (v128.const i32x4 0x10000 0 0 0)) (v128.const i32x4 65536 65536 65536 65536)) (assert_return (invoke "as-f32x4_splat-operand" (v128.const f32x4 3.14 nan nan nan)) (v128.const f32x4 3.14 3.14 3.14 3.14)) (assert_return (invoke "as-i64x2_splat-operand" (v128.const i64x2 -1 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "as-f64x2_splat-operand" (v128.const f64x2 inf nan)) (v128.const f64x2 inf inf)) (assert_return (invoke "as-i8x16_add-operands" (v128.const i8x16 0xff 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) (i32.const 1) (v128.const i8x16 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 0xff) (i32.const 1)) (v128.const i8x16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17)) (assert_return (invoke "as-i16x8_add-operands" (v128.const i16x8 -1 4 9 16 25 36 49 64) (i32.const 1) (v128.const i16x8 64 49 36 25 16 9 4 -1) (i32.const 1)) (v128.const i16x8 65 53 45 41 41 45 53 65)) (assert_return (invoke "as-i32x4_add-operands" (v128.const i32x4 -1 8 27 64) (i32.const 1) (v128.const i32x4 64 27 8 -1) (i32.const 1)) (v128.const i32x4 65 35 35 65)) (assert_return (invoke "as-i64x2_add-operands" (v128.const i64x2 -1 8) (i64.const 1) (v128.const i64x2 64 27) (i64.const 1)) (v128.const i64x2 65 9)) (assert_return (invoke "swizzle-as-i8x16_add-operands" (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "shuffle-as-i8x16_sub-operands" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i8x16 -15 -13 -11 -9 -7 -5 -3 -1 1 3 5 7 9 11 13 15)) (assert_return (invoke "as-i8x16_any_true-operand" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-i16x8_any_true-operand" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-i32x4_any_true-operand1" (v128.const i32x4 1 0 0 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-i32x4_any_true-operand2" (v128.const i64x2 1 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "swizzle-as-i8x16_all_true-operands" (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (i32.const 1)) (assert_return (invoke "swizzle-as-i8x16_all_true-operands" (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16)) (i32.const 0)) (assert_return (invoke "shuffle-as-i8x16_any_true-operands" (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (i32.const 1)) ;; Load and store (module (memory 1) (func (export "as-v128_store-operand-1") (param v128 i32) (result v128) (v128.store (i32.const 0) (i8x16.replace_lane 0 (local.get 0) (local.get 1))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-2") (param v128 i32) (result v128) (v128.store (i32.const 0) (i16x8.replace_lane 0 (local.get 0) (local.get 1))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-3") (param v128 i32) (result v128) (v128.store (i32.const 0) (i32x4.replace_lane 0 (local.get 0) (local.get 1))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-4") (param v128 f32) (result v128) (v128.store (i32.const 0) (f32x4.replace_lane 0 (local.get 0) (local.get 1))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-5") (param v128 i64) (result v128) (v128.store (i32.const 0) (i64x2.replace_lane 0 (local.get 0) (local.get 1))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-6") (param v128 f64) (result v128) (v128.store (i32.const 0) (f64x2.replace_lane 0 (local.get 0) (local.get 1))) (v128.load (i32.const 0))) ) (assert_return (invoke "as-v128_store-operand-1" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)) (v128.const i8x16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "as-v128_store-operand-2" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 256)) (v128.const i16x8 0x100 0 0 0 0 0 0 0)) (assert_return (invoke "as-v128_store-operand-3" (v128.const i32x4 0 0 0 0) (i32.const 0xffffffff)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "as-v128_store-operand-4" (v128.const f32x4 0 0 0 0) (f32.const 3.14)) (v128.const f32x4 3.14 0 0 0)) (assert_return (invoke "as-v128_store-operand-5" (v128.const i64x2 0 0) (i64.const 0xffffffffffffffff)) (v128.const i64x2 -1 0)) (assert_return (invoke "as-v128_store-operand-6" (v128.const f64x2 0 0) (f64.const 3.14)) (v128.const f64x2 3.14 0)) ;; As the argument of wasm core ops (module (global $g (mut v128) (v128.const f32x4 0.0 0.0 0.0 0.0)) (global $h (mut v128) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (func (export "as-if-condition-value") (param v128) (result i32) (if (result i32) (i8x16.extract_lane_s 0 (local.get 0)) (then (i32.const 0xff)) (else (i32.const 0)))) (func (export "as-return-value-1") (param v128 i32) (result v128) (return (i16x8.replace_lane 0 (local.get 0) (local.get 1)))) (func (export "as-local_set-value") (param v128) (result i32) (local i32) (local.set 1 (i32x4.extract_lane 0 (local.get 0))) (return (local.get 1))) (func (export "as-global_set-value-1") (param v128 f32) (result v128) (global.set $g (f32x4.replace_lane 0 (local.get 0) (local.get 1))) (return (global.get $g))) (func (export "as-return-value-2") (param v128 v128) (result v128) (return (i8x16.swizzle (local.get 0) (local.get 1)))) (func (export "as-global_set-value-2") (param v128 v128) (result v128) (global.set $h (i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 (local.get 0) (local.get 1))) (return (global.get $h))) (func (export "as-local_set-value-1") (param v128) (result i64) (local i64) (local.set 1 (i64x2.extract_lane 0 (local.get 0))) (return (local.get 1))) (func (export "as-global_set-value-3") (param v128 f64) (result v128) (global.set $g (f64x2.replace_lane 0 (local.get 0) (local.get 1))) (return (global.get $g))) ) (assert_return (invoke "as-if-condition-value" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "as-return-value-1" (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)) (v128.const i16x8 1 0 0 0 0 0 0 0)) (assert_return (invoke "as-local_set-value" (v128.const i32x4 -1 -1 -1 -1)) (i32.const -1)) (assert_return (invoke "as-global_set-value-1" (v128.const f32x4 0 0 0 0)(f32.const 3.14)) (v128.const f32x4 3.14 0 0 0)) (assert_return (invoke "as-return-value-2" (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i8x16 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16)) (assert_return (invoke "as-global_set-value-2" (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1) (v128.const i8x16 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1)) (v128.const i8x16 -16 -15 -14 -13 -12 -11 -10 -9 8 7 6 5 4 3 2 1)) (assert_return (invoke "as-local_set-value-1" (v128.const i64x2 -1 -1)) (i64.const -1)) (assert_return (invoke "as-global_set-value-3" (v128.const f64x2 0 0)(f64.const 3.14)) (v128.const f64x2 3.14 0)) ;; Non-nat lane index (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_u +0x0f (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result f32) (f32x4.extract_lane +03 (v128.const f32x4 0 0 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result i64) (i64x2.extract_lane +1 (v128.const i64x2 0 0)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i8x16.replace_lane +015 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i16x8.replace_lane +0x7 (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (i32x4.replace_lane +3 (v128.const i32x4 0 0 0 0) (i32.const 1)))") "unexpected token") (assert_malformed (module quote "(func (result v128) (f64x2.replace_lane +0x01 (v128.const f64x2 0 0) (f64.const 1.0)))") "unexpected token") ;; Lane index literal (module (func (result i32) (i8x16.extract_lane_s 0x0f (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) (module (func (result i32) (i16x8.extract_lane_s 0x07 (v128.const i16x8 0 0 0 0 0 0 0 0)))) (module (func (result i32) (i16x8.extract_lane_u 0x0_7 (v128.const i16x8 0 0 0 0 0 0 0 0)))) (module (func (result i32) (i32x4.extract_lane 03 (v128.const i32x4 0 0 0 0)))) (module (func (result f64) (f64x2.extract_lane 0x1 (v128.const f64x2 0 0)))) (module (func (result v128) (f32x4.replace_lane 0x3 (v128.const f32x4 0 0 0 0) (f32.const 1.0)))) (module (func (result v128) (i64x2.replace_lane 01 (v128.const i64x2 0 0) (i64.const 1)))) ;; 1.0 is malformed lane index (assert_malformed (module quote "(func (result i32) (i8x16.extract_lane_s 1.0 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))") "unexpected token") ;; Test operation with empty argument (assert_malformed (module quote "(func $i8x16.extract_lane_s-1st-arg-empty (result i32)" " (i8x16.extract_lane_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))" ")" ) "unexpected token" ) (assert_invalid (module (func $i8x16.extract_lane_s-2nd-arg-empty (result i32) (i8x16.extract_lane_s 0) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i8x16.extract_lane_s-arg-empty (result i32)" " (i8x16.extract_lane_s)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i16x8.extract_lane_u-1st-arg-empty (result i32)" " (i16x8.extract_lane_u (v128.const i16x8 0 0 0 0 0 0 0 0))" ")" ) "unexpected token" ) (assert_invalid (module (func $i16x8.extract_lane_u-2nd-arg-empty (result i32) (i16x8.extract_lane_u 0) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i16x8.extract_lane_u-arg-empty (result i32)" " (i16x8.extract_lane_u)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i32x4.extract_lane-1st-arg-empty (result i32)" " (i32x4.extract_lane (v128.const i32x4 0 0 0 0))" ")" ) "unexpected token" ) (assert_invalid (module (func $i32x4.extract_lane-2nd-arg-empty (result i32) (i32x4.extract_lane 0) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i32x4.extract_lane-arg-empty (result i32)" " (i32x4.extract_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i64x2.extract_lane-1st-arg-empty (result i64)" " (i64x2.extract_lane (v128.const i64x2 0 0))" ")" ) "unexpected token" ) (assert_invalid (module (func $i64x2.extract_lane-2nd-arg-empty (result i64) (i64x2.extract_lane 0) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i64x2.extract_lane-arg-empty (result i64)" " (i64x2.extract_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $f32x4.extract_lane-1st-arg-empty (result f32)" " (f32x4.extract_lane (v128.const f32x4 0 0 0 0))" ")" ) "unexpected token" ) (assert_invalid (module (func $f32x4.extract_lane-2nd-arg-empty (result f32) (f32x4.extract_lane 0) ) ) "type mismatch" ) (assert_malformed (module quote "(func $f32x4.extract_lane-arg-empty (result f32)" " (f32x4.extract_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $f64x2.extract_lane-1st-arg-empty (result f64)" " (f64x2.extract_lane (v128.const f64x2 0 0))" ")" ) "unexpected token" ) (assert_invalid (module (func $f64x2.extract_lane-2nd-arg-empty (result f64) (f64x2.extract_lane 0) ) ) "type mismatch" ) (assert_malformed (module quote "(func $f64x2.extract_lane-arg-empty (result f64)" " (f64x2.extract_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i8x16.replace_lane-1st-arg-empty (result v128)" " (i8x16.replace_lane (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1))" ")" ) "unexpected token" ) (assert_invalid (module (func $i8x16.replace_lane-2nd-arg-empty (result v128) (i8x16.replace_lane 0 (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $i8x16.replace_lane-3rd-arg-empty (result v128) (i8x16.replace_lane 0 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i8x16.replace_lane-arg-empty (result v128)" " (i8x16.replace_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i16x8.replace_lane-1st-arg-empty (result v128)" " (i16x8.replace_lane (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1))" ")" ) "unexpected token" ) (assert_invalid (module (func $i16x8.replace_lane-2nd-arg-empty (result v128) (i16x8.replace_lane 0 (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.replace_lane-3rd-arg-empty (result v128) (i16x8.replace_lane 0 (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i16x8.replace_lane-arg-empty (result v128)" " (i16x8.replace_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i32x4.replace_lane-1st-arg-empty (result v128)" " (i32x4.replace_lane (v128.const i32x4 0 0 0 0) (i32.const 1))" ")" ) "unexpected token" ) (assert_invalid (module (func $i32x4.replace_lane-2nd-arg-empty (result v128) (i32x4.replace_lane 0 (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.replace_lane-3rd-arg-empty (result v128) (i32x4.replace_lane 0 (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i32x4.replace_lane-arg-empty (result v128)" " (i32x4.replace_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $f32x4.replace_lane-1st-arg-empty (result v128)" " (f32x4.replace_lane (v128.const f32x4 0 0 0 0) (f32.const 1.0))" ")" ) "unexpected token" ) (assert_invalid (module (func $f32x4.replace_lane-2nd-arg-empty (result v128) (f32x4.replace_lane 0 (f32.const 1.0)) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.replace_lane-3rd-arg-empty (result v128) (f32x4.replace_lane 0 (v128.const f32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_malformed (module quote "(func $f32x4.replace_lane-arg-empty (result v128)" " (f32x4.replace_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i64x2.replace_lane-1st-arg-empty (result v128)" " (i64x2.replace_lane (v128.const i64x2 0 0) (i64.const 1))" ")" ) "unexpected token" ) (assert_invalid (module (func $i64x2.replace_lane-2nd-arg-empty (result v128) (i64x2.replace_lane 0 (i64.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.replace_lane-3rd-arg-empty (result v128) (i64x2.replace_lane 0 (v128.const i64x2 0 0)) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i64x2.replace_lane-arg-empty (result v128)" " (i64x2.replace_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $f64x2.replace_lane-1st-arg-empty (result v128)" " (f64x2.replace_lane (v128.const f64x2 0 0) (f64.const 1.0))" ")" ) "unexpected token" ) (assert_invalid (module (func $f64x2.replace_lane-2nd-arg-empty (result v128) (f64x2.replace_lane 0 (f64.const 1.0)) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.replace_lane-3rd-arg-empty (result v128) (f64x2.replace_lane 0 (v128.const f64x2 0 0)) ) ) "type mismatch" ) (assert_malformed (module quote "(func $f64x2.replace_lane-arg-empty (result v128)" " (f64x2.replace_lane)" ")" ) "unexpected token" ) (assert_malformed (module quote "(func $i8x16.shuffle-1st-arg-empty (result v128)" " (i8x16.shuffle" " (v128.const i8x16 0 1 2 3 5 6 6 7 8 9 10 11 12 13 14 15)" " (v128.const i8x16 1 2 3 5 6 6 7 8 9 10 11 12 13 14 15 16)" " )" ")" ) "invalid lane length" ) (assert_invalid (module (func $i8x16.shuffle-2nd-arg-empty (result v128) (i8x16.shuffle 0 1 2 3 5 6 6 7 8 9 10 11 12 13 14 15 (v128.const i8x16 1 2 3 5 6 6 7 8 9 10 11 12 13 14 15 16) ) ) ) "type mismatch" ) (assert_malformed (module quote "(func $i8x16.shuffle-arg-empty (result v128)" " (i8x16.shuffle)" ")" ) "invalid lane length" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_load.wast ================================================ ;; v128.load operater with normal argument (e.g. (i8x16, i16x8 i32x4)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03") (func (export "v128.load") (result v128) (v128.load (i32.const 0)) ) ) (assert_return (invoke "v128.load") (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f)) (assert_return (invoke "v128.load") (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0b0a 0x0d0c 0x0f0e)) (assert_return (invoke "v128.load") (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c)) ;; v128.load operater as the argument of other SIMD instructions (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03") (func (export "as-i8x16_extract_lane_s-value/0") (result i32) (i8x16.extract_lane_s 0 (v128.load (i32.const 0))) ) ) (assert_return (invoke "as-i8x16_extract_lane_s-value/0") (i32.const 0x00)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03") (func (export "as-i8x16.eq-operand") (result v128) (i8x16.eq (v128.load offset=0 (i32.const 0)) (v128.load offset=16 (i32.const 0))) ) ) (assert_return (invoke "as-i8x16.eq-operand") (v128.const i32x4 0xffffffff 0x00000000 0x00000000 0x00000000)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03") (func (export "as-v128.not-operand") (result v128) (v128.not (v128.load (i32.const 0))) ) (func (export "as-i8x16.all_true-operand") (result i32) (i8x16.all_true (v128.load (i32.const 0))) ) ) (assert_return (invoke "as-v128.not-operand") (v128.const i32x4 0xfcfdfeff 0xf8f9fafb 0xf4f5f6f7 0xf0f1f2f3)) (assert_return (invoke "as-i8x16.all_true-operand") (i32.const 0)) (module (memory 1) (data (offset (i32.const 0)) "\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA") (data (offset (i32.const 16)) "\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB") (data (offset (i32.const 32)) "\F0\F0\F0\F0\FF\FF\FF\FF\00\00\00\00\FF\00\FF\00") (func (export "as-v128.bitselect-operand") (result v128) (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 16)) (v128.load (i32.const 32))) ) ) (assert_return (invoke "as-v128.bitselect-operand") (v128.const i32x4 0xabababab 0xaaaaaaaa 0xbbbbbbbb 0xbbaabbaa)) (module (memory 1) (data (offset (i32.const 0)) "\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA") (func (export "as-i8x16.shl-operand") (result v128) (i8x16.shl (v128.load (i32.const 0)) (i32.const 1)) ) ) (assert_return (invoke "as-i8x16.shl-operand") (v128.const i32x4 0x54545454 0x54545454 0x54545454 0x54545454)) ;; 1010 1000 << 1010 1010 (module (memory 1) (data (offset (i32.const 0)) "\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00") (data (offset (i32.const 16)) "\03\00\00\00\03\00\00\00\03\00\00\00\03\00\00\00") (func (export "as-add/sub-operand") (result v128) ;; 2 2 2 2 + 3 3 3 3 = 5 5 5 5 ;; 5 5 5 5 - 3 3 3 3 = 2 2 2 2 (i8x16.sub (i8x16.add (v128.load (i32.const 0)) (v128.load (i32.const 16))) (v128.load (i32.const 16)) ) ) ) (assert_return (invoke "as-add/sub-operand") (v128.const i32x4 2 2 2 2)) (module (memory 1) (data (offset (i32.const 0)) "\00\00\00\43\00\00\80\3f\66\66\e6\3f\00\00\80\bf") ;; 128 1.0 1.8 -1 (data (offset (i32.const 16)) "\00\00\00\40\00\00\00\40\00\00\00\40\00\00\00\40") ;; 2.0 2.0 2.0 2.0 (func (export "as-f32x4.mul-operand") (result v128) (f32x4.mul (v128.load (i32.const 0)) (v128.load (i32.const 16))) ) ) (assert_return (invoke "as-f32x4.mul-operand") (v128.const f32x4 256 2 3.6 -2)) (module (memory 1) (data (offset (i32.const 0)) "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff") ;; 1111 ... (func (export "as-f32x4.abs-operand") (result v128) (f32x4.abs (v128.load (i32.const 0))) ) ) (assert_return (invoke "as-f32x4.abs-operand") (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) ;; 1111 -> 0111 (module (memory 1) (data (offset (i32.const 0)) "\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA") (data (offset (i32.const 16)) "\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00") (func (export "as-f32x4.min-operand") (result v128) (f32x4.min (v128.load (i32.const 0)) (v128.load offset=16 (i32.const 1))) ) ) (assert_return (invoke "as-f32x4.min-operand") (v128.const i32x4 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa)) ;; signed 1010 < 0010 (module (memory 1) (data (offset (i32.const 0)) "\00\00\00\43\00\00\80\3f\66\66\e6\3f\00\00\80\bf") ;; 128 1.0 1.8 -1 (func (export "as-i32x4.trunc_sat_f32x4_s-operand") (result v128) (i32x4.trunc_sat_f32x4_s (v128.load (i32.const 0))) ) ) (assert_return (invoke "as-i32x4.trunc_sat_f32x4_s-operand") (v128.const i32x4 128 1 1 -1)) ;; 128 1.0 1.8 -1 -> 128 1 1 -1 (module (memory 1) (data (offset (i32.const 0)) "\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00") (func (export "as-f32x4.convert_i32x4_u-operand") (result v128) (f32x4.convert_i32x4_u (v128.load (i32.const 0))) ) ) (assert_return (invoke "as-f32x4.convert_i32x4_u-operand") (v128.const f32x4 2 2 2 2)) (module (memory 1) (data (offset (i32.const 0)) "\64\65\66\67\68\69\6a\6b\6c\6d\6e\6f\70\71\72\73") ;; 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 (data (offset (i32.const 16)) "\0f\0e\0d\0c\0b\0a\09\08\07\06\05\04\03\02\01\00") ;; 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (func (export "as-i8x16.swizzle-operand") (result v128) (i8x16.swizzle (v128.load (i32.const 0)) (v128.load offset=15 (i32.const 1))) ) ) (assert_return(invoke "as-i8x16.swizzle-operand") (v128.const i8x16 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03") (func (export "as-br-value") (result v128) (block (result v128) (br 0 (v128.load (i32.const 0)))) ) ) (assert_return (invoke "as-br-value") (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c)) ;; Unknown operator(e.g. v128.load8, v128.load16, v128.load32) (assert_malformed (module quote "(memory 1)" "(func (local v128) (drop (v128.load8 (i32.const 0))))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (local v128) (drop (v128.load16 (i32.const 0))))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (local v128) (drop (v128.load32 (i32.const 0))))" ) "unknown operator" ) ;; Type mismatched (e.g. v128.load(f32.const 0), type address empty) (assert_invalid (module (memory 1) (func (local v128) (drop (v128.load (f32.const 0))))) "type mismatch" ) (assert_invalid (module (memory 1) (func (local v128) (block (br_if 0 (v128.load (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (memory 1) (func (local v128) (v128.load (i32.const 0)))) "type mismatch" ) ;; Type address empty (assert_invalid (module (memory 1) (func (drop (v128.load (local.get 2))))) "unknown local 2" ) (assert_invalid (module (memory 1) (func (drop (v128.load)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_load16_lane.wast ================================================ ;; Tests for load lane operations. (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F") (func (export "v128.load16_lane_0") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 0 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 1 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 2 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_3") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 3 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_4") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 4 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_5") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 5 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_6") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 6 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_7") (param $address i32) (param $x v128) (result v128) (v128.load16_lane 7 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_0_offset_0") (param $x v128) (result v128) (v128.load16_lane offset=0 0 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_1_offset_1") (param $x v128) (result v128) (v128.load16_lane offset=1 1 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_2_offset_2") (param $x v128) (result v128) (v128.load16_lane offset=2 2 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_3_offset_3") (param $x v128) (result v128) (v128.load16_lane offset=3 3 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_4_offset_4") (param $x v128) (result v128) (v128.load16_lane offset=4 4 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_5_offset_5") (param $x v128) (result v128) (v128.load16_lane offset=5 5 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_6_offset_6") (param $x v128) (result v128) (v128.load16_lane offset=6 6 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_7_offset_7") (param $x v128) (result v128) (v128.load16_lane offset=7 7 (i32.const 0) (local.get $x))) (func (export "v128.load16_lane_0_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 0 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_0_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 0 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_1_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 1 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_1_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 1 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_2_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 2 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_2_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 2 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_3_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 3 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_3_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 3 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_4_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 4 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_4_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 4 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_5_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 5 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_5_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 5 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_6_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 6 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_6_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 6 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_7_align_1") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=1 7 (local.get $address) (local.get $x))) (func (export "v128.load16_lane_7_align_2") (param $address i32) (param $x v128) (result v128) (v128.load16_lane align=2 7 (local.get $address) (local.get $x))) ) (assert_return (invoke "v128.load16_lane_0" (i32.const 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 256 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_1" (i32.const 1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 513 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_2" (i32.const 2) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 770 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_3" (i32.const 3) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (assert_return (invoke "v128.load16_lane_4" (i32.const 4) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (assert_return (invoke "v128.load16_lane_5" (i32.const 5) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (assert_return (invoke "v128.load16_lane_6" (i32.const 6) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (assert_return (invoke "v128.load16_lane_7" (i32.const 7) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 2055)) (assert_return (invoke "v128.load16_lane_0_offset_0" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 256 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_1_offset_1" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 513 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_2_offset_2" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 770 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_3_offset_3" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (assert_return (invoke "v128.load16_lane_4_offset_4" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (assert_return (invoke "v128.load16_lane_5_offset_5" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (assert_return (invoke "v128.load16_lane_6_offset_6" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (assert_return (invoke "v128.load16_lane_7_offset_7" (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 2055)) (assert_return (invoke "v128.load16_lane_0_align_1" (i32.const 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 256 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_0_align_2" (i32.const 0) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 256 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_1_align_1" (i32.const 1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 513 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_1_align_2" (i32.const 1) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 513 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_2_align_1" (i32.const 2) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 770 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_2_align_2" (i32.const 2) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 770 0 0 0 0 0)) (assert_return (invoke "v128.load16_lane_3_align_1" (i32.const 3) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (assert_return (invoke "v128.load16_lane_3_align_2" (i32.const 3) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (assert_return (invoke "v128.load16_lane_4_align_1" (i32.const 4) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (assert_return (invoke "v128.load16_lane_4_align_2" (i32.const 4) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (assert_return (invoke "v128.load16_lane_5_align_1" (i32.const 5) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (assert_return (invoke "v128.load16_lane_5_align_2" (i32.const 5) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (assert_return (invoke "v128.load16_lane_6_align_1" (i32.const 6) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (assert_return (invoke "v128.load16_lane_6_align_2" (i32.const 6) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (assert_return (invoke "v128.load16_lane_7_align_1" (i32.const 7) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 2055)) (assert_return (invoke "v128.load16_lane_7_align_2" (i32.const 7) (v128.const i16x8 0 0 0 0 0 0 0 0)) (v128.const i16x8 0 0 0 0 0 0 0 2055)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load16_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load16_lane 8 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load16_lane align=4 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_load32_lane.wast ================================================ ;; Tests for load lane operations. (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F") (func (export "v128.load32_lane_0") (param $address i32) (param $x v128) (result v128) (v128.load32_lane 0 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_1") (param $address i32) (param $x v128) (result v128) (v128.load32_lane 1 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_2") (param $address i32) (param $x v128) (result v128) (v128.load32_lane 2 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_3") (param $address i32) (param $x v128) (result v128) (v128.load32_lane 3 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_0_offset_0") (param $x v128) (result v128) (v128.load32_lane offset=0 0 (i32.const 0) (local.get $x))) (func (export "v128.load32_lane_1_offset_1") (param $x v128) (result v128) (v128.load32_lane offset=1 1 (i32.const 0) (local.get $x))) (func (export "v128.load32_lane_2_offset_2") (param $x v128) (result v128) (v128.load32_lane offset=2 2 (i32.const 0) (local.get $x))) (func (export "v128.load32_lane_3_offset_3") (param $x v128) (result v128) (v128.load32_lane offset=3 3 (i32.const 0) (local.get $x))) (func (export "v128.load32_lane_0_align_1") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=1 0 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_0_align_2") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=2 0 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_0_align_4") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=4 0 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_1_align_1") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=1 1 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_1_align_2") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=2 1 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_1_align_4") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=4 1 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_2_align_1") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=1 2 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_2_align_2") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=2 2 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_2_align_4") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=4 2 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_3_align_1") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=1 3 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_3_align_2") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=2 3 (local.get $address) (local.get $x))) (func (export "v128.load32_lane_3_align_4") (param $address i32) (param $x v128) (result v128) (v128.load32_lane align=4 3 (local.get $address) (local.get $x))) ) (assert_return (invoke "v128.load32_lane_0" (i32.const 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 50462976 0 0 0)) (assert_return (invoke "v128.load32_lane_1" (i32.const 1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 67305985 0 0)) (assert_return (invoke "v128.load32_lane_2" (i32.const 2) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 84148994 0)) (assert_return (invoke "v128.load32_lane_3" (i32.const 3) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 100992003)) (assert_return (invoke "v128.load32_lane_0_offset_0" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 50462976 0 0 0)) (assert_return (invoke "v128.load32_lane_1_offset_1" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 67305985 0 0)) (assert_return (invoke "v128.load32_lane_2_offset_2" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 84148994 0)) (assert_return (invoke "v128.load32_lane_3_offset_3" (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 100992003)) (assert_return (invoke "v128.load32_lane_0_align_1" (i32.const 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 50462976 0 0 0)) (assert_return (invoke "v128.load32_lane_0_align_2" (i32.const 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 50462976 0 0 0)) (assert_return (invoke "v128.load32_lane_0_align_4" (i32.const 0) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 50462976 0 0 0)) (assert_return (invoke "v128.load32_lane_1_align_1" (i32.const 1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 67305985 0 0)) (assert_return (invoke "v128.load32_lane_1_align_2" (i32.const 1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 67305985 0 0)) (assert_return (invoke "v128.load32_lane_1_align_4" (i32.const 1) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 67305985 0 0)) (assert_return (invoke "v128.load32_lane_2_align_1" (i32.const 2) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 84148994 0)) (assert_return (invoke "v128.load32_lane_2_align_2" (i32.const 2) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 84148994 0)) (assert_return (invoke "v128.load32_lane_2_align_4" (i32.const 2) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 84148994 0)) (assert_return (invoke "v128.load32_lane_3_align_1" (i32.const 3) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 100992003)) (assert_return (invoke "v128.load32_lane_3_align_2" (i32.const 3) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 100992003)) (assert_return (invoke "v128.load32_lane_3_align_4" (i32.const 3) (v128.const i32x4 0 0 0 0)) (v128.const i32x4 0 0 0 100992003)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load32_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load32_lane 4 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load32_lane align=8 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_load64_lane.wast ================================================ ;; Tests for load lane operations. (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F") (func (export "v128.load64_lane_0") (param $address i32) (param $x v128) (result v128) (v128.load64_lane 0 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_1") (param $address i32) (param $x v128) (result v128) (v128.load64_lane 1 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_0_offset_0") (param $x v128) (result v128) (v128.load64_lane offset=0 0 (i32.const 0) (local.get $x))) (func (export "v128.load64_lane_1_offset_1") (param $x v128) (result v128) (v128.load64_lane offset=1 1 (i32.const 0) (local.get $x))) (func (export "v128.load64_lane_0_align_1") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=1 0 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_0_align_2") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=2 0 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_0_align_4") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=4 0 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_0_align_8") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=8 0 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_1_align_1") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=1 1 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_1_align_2") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=2 1 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_1_align_4") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=4 1 (local.get $address) (local.get $x))) (func (export "v128.load64_lane_1_align_8") (param $address i32) (param $x v128) (result v128) (v128.load64_lane align=8 1 (local.get $address) (local.get $x))) ) (assert_return (invoke "v128.load64_lane_0" (i32.const 0) (v128.const i64x2 0 0)) (v128.const i64x2 506097522914230528 0)) (assert_return (invoke "v128.load64_lane_1" (i32.const 1) (v128.const i64x2 0 0)) (v128.const i64x2 0 578437695752307201)) (assert_return (invoke "v128.load64_lane_0_offset_0" (v128.const i64x2 0 0)) (v128.const i64x2 506097522914230528 0)) (assert_return (invoke "v128.load64_lane_1_offset_1" (v128.const i64x2 0 0)) (v128.const i64x2 0 578437695752307201)) (assert_return (invoke "v128.load64_lane_0_align_1" (i32.const 0) (v128.const i64x2 0 0)) (v128.const i64x2 506097522914230528 0)) (assert_return (invoke "v128.load64_lane_0_align_2" (i32.const 0) (v128.const i64x2 0 0)) (v128.const i64x2 506097522914230528 0)) (assert_return (invoke "v128.load64_lane_0_align_4" (i32.const 0) (v128.const i64x2 0 0)) (v128.const i64x2 506097522914230528 0)) (assert_return (invoke "v128.load64_lane_0_align_8" (i32.const 0) (v128.const i64x2 0 0)) (v128.const i64x2 506097522914230528 0)) (assert_return (invoke "v128.load64_lane_1_align_1" (i32.const 1) (v128.const i64x2 0 0)) (v128.const i64x2 0 578437695752307201)) (assert_return (invoke "v128.load64_lane_1_align_2" (i32.const 1) (v128.const i64x2 0 0)) (v128.const i64x2 0 578437695752307201)) (assert_return (invoke "v128.load64_lane_1_align_4" (i32.const 1) (v128.const i64x2 0 0)) (v128.const i64x2 0 578437695752307201)) (assert_return (invoke "v128.load64_lane_1_align_8" (i32.const 1) (v128.const i64x2 0 0)) (v128.const i64x2 0 578437695752307201)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load64_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load64_lane 2 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load64_lane align=16 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_load8_lane.wast ================================================ ;; Tests for load lane operations. (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F") (func (export "v128.load8_lane_0") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 0 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 1 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_2") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 2 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_3") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 3 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_4") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 4 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_5") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 5 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_6") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 6 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_7") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 7 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_8") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 8 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_9") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 9 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_10") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 10 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_11") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 11 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_12") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 12 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_13") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 13 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_14") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 14 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_15") (param $address i32) (param $x v128) (result v128) (v128.load8_lane 15 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_0_offset_0") (param $x v128) (result v128) (v128.load8_lane offset=0 0 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_1_offset_1") (param $x v128) (result v128) (v128.load8_lane offset=1 1 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_2_offset_2") (param $x v128) (result v128) (v128.load8_lane offset=2 2 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_3_offset_3") (param $x v128) (result v128) (v128.load8_lane offset=3 3 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_4_offset_4") (param $x v128) (result v128) (v128.load8_lane offset=4 4 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_5_offset_5") (param $x v128) (result v128) (v128.load8_lane offset=5 5 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_6_offset_6") (param $x v128) (result v128) (v128.load8_lane offset=6 6 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_7_offset_7") (param $x v128) (result v128) (v128.load8_lane offset=7 7 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_8_offset_8") (param $x v128) (result v128) (v128.load8_lane offset=8 8 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_9_offset_9") (param $x v128) (result v128) (v128.load8_lane offset=9 9 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_10_offset_10") (param $x v128) (result v128) (v128.load8_lane offset=10 10 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_11_offset_11") (param $x v128) (result v128) (v128.load8_lane offset=11 11 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_12_offset_12") (param $x v128) (result v128) (v128.load8_lane offset=12 12 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_13_offset_13") (param $x v128) (result v128) (v128.load8_lane offset=13 13 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_14_offset_14") (param $x v128) (result v128) (v128.load8_lane offset=14 14 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_15_offset_15") (param $x v128) (result v128) (v128.load8_lane offset=15 15 (i32.const 0) (local.get $x))) (func (export "v128.load8_lane_0_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 0 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_1_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 1 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_2_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 2 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_3_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 3 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_4_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 4 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_5_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 5 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_6_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 6 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_7_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 7 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_8_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 8 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_9_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 9 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_10_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 10 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_11_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 11 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_12_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 12 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_13_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 13 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_14_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 14 (local.get $address) (local.get $x))) (func (export "v128.load8_lane_15_align_1") (param $address i32) (param $x v128) (result v128) (v128.load8_lane align=1 15 (local.get $address) (local.get $x))) ) (assert_return (invoke "v128.load8_lane_0" (i32.const 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_1" (i32.const 1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_2" (i32.const 2) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_3" (i32.const 3) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_4" (i32.const 4) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_5" (i32.const 5) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_6" (i32.const 6) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_7" (i32.const 7) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_8" (i32.const 8) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_9" (i32.const 9) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_10" (i32.const 10) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_11" (i32.const 11) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0)) (assert_return (invoke "v128.load8_lane_12" (i32.const 12) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0)) (assert_return (invoke "v128.load8_lane_13" (i32.const 13) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0)) (assert_return (invoke "v128.load8_lane_14" (i32.const 14) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0)) (assert_return (invoke "v128.load8_lane_15" (i32.const 15) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15)) (assert_return (invoke "v128.load8_lane_0_offset_0" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_1_offset_1" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_2_offset_2" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_3_offset_3" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_4_offset_4" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_5_offset_5" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_6_offset_6" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_7_offset_7" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_8_offset_8" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_9_offset_9" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_10_offset_10" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_11_offset_11" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0)) (assert_return (invoke "v128.load8_lane_12_offset_12" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0)) (assert_return (invoke "v128.load8_lane_13_offset_13" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0)) (assert_return (invoke "v128.load8_lane_14_offset_14" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0)) (assert_return (invoke "v128.load8_lane_15_offset_15" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15)) (assert_return (invoke "v128.load8_lane_0_align_1" (i32.const 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_1_align_1" (i32.const 1) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_2_align_1" (i32.const 2) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_3_align_1" (i32.const 3) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_4_align_1" (i32.const 4) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_5_align_1" (i32.const 5) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_6_align_1" (i32.const 6) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_7_align_1" (i32.const 7) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_8_align_1" (i32.const 8) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_9_align_1" (i32.const 9) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_10_align_1" (i32.const 10) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0)) (assert_return (invoke "v128.load8_lane_11_align_1" (i32.const 11) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0)) (assert_return (invoke "v128.load8_lane_12_align_1" (i32.const 12) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0)) (assert_return (invoke "v128.load8_lane_13_align_1" (i32.const 13) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0)) (assert_return (invoke "v128.load8_lane_14_align_1" (i32.const 14) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0)) (assert_return (invoke "v128.load8_lane_15_align_1" (i32.const 15) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load8_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load8_lane 16 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.load8_lane align=2 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_load_extend.wast ================================================ ;; Load and Extend test cases (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\80\81\82\83\84\85\86\87\88\89") (data (i32.const 65520) "\0A\0B\0C\0D\0E\0F\80\81\82\83\84\85\86\87\88\89") (func (export "v128.load8x8_s") (param $0 i32) (result v128) (v128.load8x8_s (local.get $0)) ) (func (export "v128.load8x8_u") (param $0 i32) (result v128) (v128.load8x8_u (local.get $0)) ) (func (export "v128.load16x4_s") (param $0 i32) (result v128) (v128.load16x4_s (local.get $0)) ) (func (export "v128.load16x4_u") (param $0 i32) (result v128) (v128.load16x4_u (local.get $0)) ) (func (export "v128.load32x2_s") (param $0 i32) (result v128) (v128.load32x2_s (local.get $0)) ) (func (export "v128.load32x2_u") (param $0 i32) (result v128) (v128.load32x2_u (local.get $0)) ) ;; load by a constant amount (func (export "v128.load8x8_s_const0") (result v128) (v128.load8x8_s (i32.const 0)) ) (func (export "v128.load8x8_u_const8") (result v128) (v128.load8x8_u (i32.const 8)) ) (func (export "v128.load16x4_s_const10") (result v128) (v128.load16x4_s (i32.const 10)) ) (func (export "v128.load16x4_u_const20") (result v128) (v128.load16x4_u (i32.const 20)) ) (func (export "v128.load32x2_s_const65520") (result v128) (v128.load32x2_s (i32.const 65520)) ) (func (export "v128.load32x2_u_const65526") (result v128) (v128.load32x2_u (i32.const 65526)) ) ;; load data with different offset/align arguments ;; i16x8 (func (export "v128.load8x8_s_offset0") (param $0 i32) (result v128) (v128.load8x8_s offset=0 (local.get $0)) ) (func (export "v128.load8x8_s_align1") (param $0 i32) (result v128) (v128.load8x8_s align=1 (local.get $0)) ) (func (export "v128.load8x8_s_offset0_align1") (param $0 i32) (result v128) (v128.load8x8_s offset=0 align=1 (local.get $0)) ) (func (export "v128.load8x8_s_offset1_align1") (param $0 i32) (result v128) (v128.load8x8_s offset=1 align=1 (local.get $0)) ) (func (export "v128.load8x8_s_offset10_align4") (param $0 i32) (result v128) (v128.load8x8_s offset=10 align=4 (local.get $0)) ) (func (export "v128.load8x8_s_offset20_align8") (param $0 i32) (result v128) (v128.load8x8_s offset=20 align=8 (local.get $0)) ) (func (export "v128.load8x8_u_offset0") (param $0 i32) (result v128) (v128.load8x8_u offset=0 (local.get $0)) ) (func (export "v128.load8x8_u_align1") (param $0 i32) (result v128) (v128.load8x8_u align=1 (local.get $0)) ) (func (export "v128.load8x8_u_offset0_align1") (param $0 i32) (result v128) (v128.load8x8_u offset=0 align=1 (local.get $0)) ) (func (export "v128.load8x8_u_offset1_align1") (param $0 i32) (result v128) (v128.load8x8_u offset=1 align=1 (local.get $0)) ) (func (export "v128.load8x8_u_offset10_align4") (param $0 i32) (result v128) (v128.load8x8_u offset=10 align=4 (local.get $0)) ) (func (export "v128.load8x8_u_offset20_align8") (param $0 i32) (result v128) (v128.load8x8_u offset=20 align=8 (local.get $0)) ) ;; i32x4 (func (export "v128.load16x4_s_offset0") (param $0 i32) (result v128) (v128.load16x4_s offset=0 (local.get $0)) ) (func (export "v128.load16x4_s_align1") (param $0 i32) (result v128) (v128.load16x4_s align=1 (local.get $0)) ) (func (export "v128.load16x4_s_offset0_align1") (param $0 i32) (result v128) (v128.load16x4_s offset=0 align=1 (local.get $0)) ) (func (export "v128.load16x4_s_offset1_align1") (param $0 i32) (result v128) (v128.load16x4_s offset=1 align=1 (local.get $0)) ) (func (export "v128.load16x4_s_offset10_align4") (param $0 i32) (result v128) (v128.load16x4_s offset=10 align=4 (local.get $0)) ) (func (export "v128.load16x4_s_offset20_align8") (param $0 i32) (result v128) (v128.load16x4_s offset=20 align=8 (local.get $0)) ) (func (export "v128.load16x4_u_offset0") (param $0 i32) (result v128) (v128.load16x4_u offset=0 (local.get $0)) ) (func (export "v128.load16x4_u_align1") (param $0 i32) (result v128) (v128.load16x4_u align=1 (local.get $0)) ) (func (export "v128.load16x4_u_offset0_align1") (param $0 i32) (result v128) (v128.load16x4_u offset=0 align=1 (local.get $0)) ) (func (export "v128.load16x4_u_offset1_align1") (param $0 i32) (result v128) (v128.load16x4_u offset=1 align=1 (local.get $0)) ) (func (export "v128.load16x4_u_offset10_align4") (param $0 i32) (result v128) (v128.load16x4_u offset=10 align=4 (local.get $0)) ) (func (export "v128.load16x4_u_offset20_align8") (param $0 i32) (result v128) (v128.load16x4_u offset=20 align=8 (local.get $0)) ) ;; i64x2 (func (export "v128.load32x2_s_offset0") (param $0 i32) (result v128) (v128.load32x2_s offset=0 (local.get $0)) ) (func (export "v128.load32x2_s_align1") (param $0 i32) (result v128) (v128.load32x2_s align=1 (local.get $0)) ) (func (export "v128.load32x2_s_offset0_align1") (param $0 i32) (result v128) (v128.load32x2_s offset=0 align=1 (local.get $0)) ) (func (export "v128.load32x2_s_offset1_align1") (param $0 i32) (result v128) (v128.load32x2_s offset=1 align=1 (local.get $0)) ) (func (export "v128.load32x2_s_offset10_align4") (param $0 i32) (result v128) (v128.load32x2_s offset=10 align=4 (local.get $0)) ) (func (export "v128.load32x2_s_offset20_align8") (param $0 i32) (result v128) (v128.load32x2_s offset=20 align=8 (local.get $0)) ) (func (export "v128.load32x2_u_offset0") (param $0 i32) (result v128) (v128.load32x2_u offset=0 (local.get $0)) ) (func (export "v128.load32x2_u_align1") (param $0 i32) (result v128) (v128.load32x2_u align=1 (local.get $0)) ) (func (export "v128.load32x2_u_offset0_align1") (param $0 i32) (result v128) (v128.load32x2_u offset=0 align=1 (local.get $0)) ) (func (export "v128.load32x2_u_offset1_align1") (param $0 i32) (result v128) (v128.load32x2_u offset=1 align=1 (local.get $0)) ) (func (export "v128.load32x2_u_offset10_align4") (param $0 i32) (result v128) (v128.load32x2_u offset=10 align=4 (local.get $0)) ) (func (export "v128.load32x2_u_offset20_align8") (param $0 i32) (result v128) (v128.load32x2_u offset=20 align=8 (local.get $0)) ) ) ;; normal (assert_return (invoke "v128.load8x8_s" (i32.const 0)) (v128.const i16x8 0x0000 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007)) (assert_return (invoke "v128.load8x8_u" (i32.const 0)) (v128.const i16x8 0x0000 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007)) (assert_return (invoke "v128.load16x4_s" (i32.const 0)) (v128.const i32x4 0x00000100 0x00000302 0x00000504 0x00000706)) (assert_return (invoke "v128.load16x4_u" (i32.const 0)) (v128.const i32x4 0x00000100 0x00000302 0x00000504 0x00000706)) (assert_return (invoke "v128.load32x2_s" (i32.const 0)) (v128.const i64x2 0x0000000003020100 0x0000000007060504)) (assert_return (invoke "v128.load32x2_u" (i32.const 0)) (v128.const i64x2 0x0000000003020100 0x0000000007060504)) (assert_return (invoke "v128.load8x8_s" (i32.const 10)) (v128.const i16x8 0x000A 0x000B 0x000C 0x000D 0x000E 0x000F 0xFF80 0xFF81)) (assert_return (invoke "v128.load8x8_u" (i32.const 10)) (v128.const i16x8 0x000A 0x000B 0x000C 0x000D 0x000E 0x000F 0x0080 0x0081)) (assert_return (invoke "v128.load16x4_s" (i32.const 10)) (v128.const i32x4 0x00000B0A 0x00000D0C 0x00000F0E 0xFFFF8180)) (assert_return (invoke "v128.load16x4_u" (i32.const 10)) (v128.const i32x4 0x00000B0A 0x00000D0C 0x00000F0E 0x00008180)) (assert_return (invoke "v128.load32x2_s" (i32.const 10)) (v128.const i64x2 0x000000000D0C0B0A 0xFFFFFFFF81800F0E)) (assert_return (invoke "v128.load32x2_u" (i32.const 10)) (v128.const i64x2 0x000000000D0C0B0A 0x0000000081800F0E)) (assert_return (invoke "v128.load8x8_s" (i32.const 20)) (v128.const i16x8 0xff84 0xff85 0xff86 0xff87 0xff88 0xff89 0x0000 0x0000)) (assert_return (invoke "v128.load8x8_u" (i32.const 20)) (v128.const i16x8 0x0084 0x0085 0x0086 0x0087 0x0088 0x0089 0x0000 0x0000)) (assert_return (invoke "v128.load16x4_s" (i32.const 20)) (v128.const i32x4 0xffff8584 0xffff8786 0xffff8988 0x00000000)) (assert_return (invoke "v128.load16x4_u" (i32.const 20)) (v128.const i32x4 0x00008584 0x00008786 0x00008988 0x00000000)) (assert_return (invoke "v128.load32x2_s" (i32.const 20)) (v128.const i64x2 0xFFFFFFFF87868584 0x0000000000008988)) (assert_return (invoke "v128.load32x2_u" (i32.const 20)) (v128.const i64x2 0x0000000087868584 0x0000000000008988)) ;; load by a constant amount (assert_return (invoke "v128.load8x8_s_const0") (v128.const i16x8 0x0000 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007)) (assert_return (invoke "v128.load8x8_u_const8") (v128.const i16x8 0x0008 0x0009 0x000A 0x000B 0x000C 0x000D 0x000E 0x000F)) (assert_return (invoke "v128.load16x4_s_const10") (v128.const i32x4 0x00000B0A 0x00000D0C 0x00000F0E 0xFFFF8180)) (assert_return (invoke "v128.load16x4_u_const20") (v128.const i32x4 0x00008584 0x00008786 0x00008988 0x00000000)) (assert_return (invoke "v128.load32x2_s_const65520") (v128.const i64x2 0x000000000D0C0B0A 0xFFFFFFFF81800F0E)) (assert_return (invoke "v128.load32x2_u_const65526") (v128.const i64x2 0x0000000083828180 0x0000000087868584)) ;; load data with different offset/align arguments ;; i16x8 (assert_return (invoke "v128.load8x8_s_offset0" (i32.const 0)) (v128.const i16x8 0x0000 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007)) (assert_return (invoke "v128.load8x8_s_align1" (i32.const 1)) (v128.const i16x8 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007 0x0008)) (assert_return (invoke "v128.load8x8_s_offset0_align1" (i32.const 2)) (v128.const i16x8 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007 0x0008 0x0009)) (assert_return (invoke "v128.load8x8_s_offset10_align4" (i32.const 3)) (v128.const i16x8 0x000D 0x000E 0x000F 0xFF80 0xFF81 0xFF82 0xFF83 0xFF84)) (assert_return (invoke "v128.load8x8_s_offset20_align8" (i32.const 4)) (v128.const i16x8 0xFF88 0xFF89 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (assert_return (invoke "v128.load8x8_u_offset0" (i32.const 0)) (v128.const i16x8 0x0000 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007)) (assert_return (invoke "v128.load8x8_u_align1" (i32.const 1)) (v128.const i16x8 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007 0x0008)) (assert_return (invoke "v128.load8x8_u_offset0_align1" (i32.const 2)) (v128.const i16x8 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007 0x0008 0x0009)) (assert_return (invoke "v128.load8x8_u_offset10_align4" (i32.const 3)) (v128.const i16x8 0x000D 0x000E 0x000F 0x0080 0x0081 0x0082 0x0083 0x0084)) (assert_return (invoke "v128.load8x8_u_offset20_align8" (i32.const 4)) (v128.const i16x8 0x0088 0x0089 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) ;; i32x4 (assert_return (invoke "v128.load16x4_s_offset0" (i32.const 0)) (v128.const i32x4 0x00000100 0x00000302 0x00000504 0x00000706)) (assert_return (invoke "v128.load16x4_s_align1" (i32.const 1)) (v128.const i32x4 0x00000201 0x00000403 0x00000605 0x00000807)) (assert_return (invoke "v128.load16x4_s_offset0_align1" (i32.const 2)) (v128.const i32x4 0x00000302 0x00000504 0x00000706 0x00000908)) (assert_return (invoke "v128.load16x4_s_offset10_align4" (i32.const 3)) (v128.const i32x4 0x00000E0D 0xFFFF800F 0xFFFF8281 0xFFFF8483)) (assert_return (invoke "v128.load16x4_s_offset20_align8" (i32.const 4)) (v128.const i32x4 0xFFFF8988 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load16x4_u_offset0" (i32.const 0)) (v128.const i32x4 0x00000100 0x00000302 0x00000504 0x00000706)) (assert_return (invoke "v128.load16x4_u_align1" (i32.const 1)) (v128.const i32x4 0x00000201 0x00000403 0x00000605 0x00000807)) (assert_return (invoke "v128.load16x4_u_offset0_align1" (i32.const 2)) (v128.const i32x4 0x00000302 0x00000504 0x00000706 0x00000908)) (assert_return (invoke "v128.load16x4_u_offset10_align4" (i32.const 3)) (v128.const i32x4 0x00000E0D 0x0000800F 0x00008281 0x00008483)) (assert_return (invoke "v128.load16x4_u_offset20_align8" (i32.const 4)) (v128.const i32x4 0x00008988 0x00000000 0x00000000 0x00000000)) ;; i64x2 (assert_return (invoke "v128.load32x2_s_offset0" (i32.const 0)) (v128.const i64x2 0x0000000003020100 0x0000000007060504)) (assert_return (invoke "v128.load32x2_s_align1" (i32.const 1)) (v128.const i64x2 0x0000000004030201 0x0000000008070605)) (assert_return (invoke "v128.load32x2_s_offset0_align1" (i32.const 2)) (v128.const i64x2 0x0000000005040302 0x0000000009080706)) (assert_return (invoke "v128.load32x2_s_offset10_align4" (i32.const 3)) (v128.const i64x2 0xFFFFFFFF800F0E0D 0xFFFFFFFF84838281)) (assert_return (invoke "v128.load32x2_s_offset20_align8" (i32.const 4)) (v128.const i64x2 0x0000000000008988 0x0000000000000000)) (assert_return (invoke "v128.load32x2_u_offset0" (i32.const 0)) (v128.const i64x2 0x0000000003020100 0x0000000007060504)) (assert_return (invoke "v128.load32x2_u_align1" (i32.const 1)) (v128.const i64x2 0x0000000004030201 0x0000000008070605)) (assert_return (invoke "v128.load32x2_u_offset0_align1" (i32.const 2)) (v128.const i64x2 0x0000000005040302 0x0000000009080706)) (assert_return (invoke "v128.load32x2_u_offset10_align4" (i32.const 3)) (v128.const i64x2 0x00000000800F0E0D 0x0000000084838281)) (assert_return (invoke "v128.load32x2_u_offset20_align8" (i32.const 4)) (v128.const i64x2 0x0000000000008988 0x0000000000000000)) ;; out of bounds memory access (assert_trap (invoke "v128.load8x8_s" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load8x8_u" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load16x4_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "v128.load16x4_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "v128.load32x2_s" (i32.const 65529)) "out of bounds memory access") (assert_trap (invoke "v128.load32x2_u" (i32.const 65529)) "out of bounds memory access") (assert_trap (invoke "v128.load8x8_s_offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load8x8_u_offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load16x4_s_offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load16x4_u_offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load32x2_s_offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load32x2_u_offset1_align1" (i32.const -1)) "out of bounds memory access") ;; type check (assert_invalid (module (memory 0) (func (result v128) (v128.load8x8_s (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load8x8_u (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load16x4_s (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load16x4_u (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load32x2_s (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load32x2_u (v128.const i32x4 0 0 0 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (memory 0) (func $v128.load8x8_s-arg-empty (result v128) (v128.load8x8_s) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load8x8_u-arg-empty (result v128) (v128.load8x8_u) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load16x4_s-arg-empty (result v128) (v128.load16x4_s) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load16x4_u-arg-empty (result v128) (v128.load16x4_u) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load32x2_s-arg-empty (result v128) (v128.load32x2_s) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load32x2_u-arg-empty (result v128) (v128.load32x2_u) ) ) "type mismatch" ) ;; Unknown operator (assert_malformed (module quote "(memory 1) (func (drop (i16x8.load16x4_s (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i16x8.load16x4_u (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i32x4.load32x2_s (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i32x4.load32x2_u (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i64x2.load64x1_s (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i64x2.load64x1_u (i32.const 0))))") "unknown operator") ;; combination (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\80\81\82\83\84\85\86\87\88\89") (func (export "v128.load8x8_s-in-block") (result v128) (block (result v128) (block (result v128) (v128.load8x8_s (i32.const 0)))) ) (func (export "v128.load8x8_u-in-block") (result v128) (block (result v128) (block (result v128) (v128.load8x8_u (i32.const 1)))) ) (func (export "v128.load16x4_s-in-block") (result v128) (block (result v128) (block (result v128) (v128.load16x4_s (i32.const 2)))) ) (func (export "v128.load16x4_u-in-block") (result v128) (block (result v128) (block (result v128) (v128.load16x4_u (i32.const 3)))) ) (func (export "v128.load32x2_s-in-block") (result v128) (block (result v128) (block (result v128) (v128.load32x2_s (i32.const 4)))) ) (func (export "v128.load32x2_u-in-block") (result v128) (block (result v128) (block (result v128) (v128.load32x2_u (i32.const 5)))) ) (func (export "v128.load8x8_s-as-br-value") (result v128) (block (result v128) (br 0 (v128.load8x8_s (i32.const 6)))) ) (func (export "v128.load8x8_u-as-br-value") (result v128) (block (result v128) (br 0 (v128.load8x8_u (i32.const 7)))) ) (func (export "v128.load16x4_s-as-br-value") (result v128) (block (result v128) (br 0 (v128.load16x4_s (i32.const 8)))) ) (func (export "v128.load16x4_u-as-br-value") (result v128) (block (result v128) (br 0 (v128.load16x4_u (i32.const 9)))) ) (func (export "v128.load32x2_s-as-br-value") (result v128) (block (result v128) (br 0 (v128.load32x2_s (i32.const 10)))) ) (func (export "v128.load32x2_u-as-br-value") (result v128) (block (result v128) (br 0 (v128.load32x2_u (i32.const 11)))) ) (func (export "v128.load8x8_s-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load8x8_s (i32.const 12))) ) (func (export "v128.load8x8_u-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load8x8_u (i32.const 13))) ) (func (export "v128.load16x4_s-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load16x4_s (i32.const 14))) ) (func (export "v128.load16x4_u-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load16x4_u (i32.const 15))) ) (func (export "v128.load32x2_s-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load32x2_s (i32.const 16))) ) (func (export "v128.load32x2_u-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load32x2_u (i32.const 17))) ) ) (assert_return (invoke "v128.load8x8_s-in-block") (v128.const i16x8 0x0000 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007)) (assert_return (invoke "v128.load8x8_u-in-block") (v128.const i16x8 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007 0x0008)) (assert_return (invoke "v128.load16x4_s-in-block") (v128.const i32x4 0x00000302 0x00000504 0x00000706 0x00000908)) (assert_return (invoke "v128.load16x4_u-in-block") (v128.const i32x4 0x00000403 0x00000605 0x00000807 0x00000A09)) (assert_return (invoke "v128.load32x2_s-in-block") (v128.const i64x2 0x0000000007060504 0x000000000B0A0908)) (assert_return (invoke "v128.load32x2_u-in-block") (v128.const i64x2 0x0000000008070605 0x000000000C0B0A09)) (assert_return (invoke "v128.load8x8_s-as-br-value") (v128.const i16x8 0x0006 0x0007 0x0008 0x0009 0x000A 0x000B 0x000C 0x000D)) (assert_return (invoke "v128.load8x8_u-as-br-value") (v128.const i16x8 0x0007 0x0008 0x0009 0x000A 0x000B 0x000C 0x000D 0x000E)) (assert_return (invoke "v128.load16x4_s-as-br-value") (v128.const i32x4 0x00000908 0x00000B0A 0x00000D0C 0x00000F0E)) (assert_return (invoke "v128.load16x4_u-as-br-value") (v128.const i32x4 0x00000A09 0x00000C0B 0x00000E0D 0x0000800F)) (assert_return (invoke "v128.load32x2_s-as-br-value") (v128.const i64x2 0x000000000D0C0B0A 0xFFFFFFFF81800F0E)) (assert_return (invoke "v128.load32x2_u-as-br-value") (v128.const i64x2 0x000000000E0D0C0B 0x000000008281800F)) (assert_return (invoke "v128.load8x8_s-extract_lane_s-operand") (i32.const 12)) (assert_return (invoke "v128.load8x8_u-extract_lane_s-operand") (i32.const 13)) (assert_return (invoke "v128.load16x4_s-extract_lane_s-operand") (i32.const 14)) (assert_return (invoke "v128.load16x4_u-extract_lane_s-operand") (i32.const 15)) (assert_return (invoke "v128.load32x2_s-extract_lane_s-operand") (i32.const -128)) (assert_return (invoke "v128.load32x2_u-extract_lane_s-operand") (i32.const -127)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_load_splat.wast ================================================ ;; Tests for the load_splat instructions (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F") (data (i32.const 65520) "\10\11\12\13\14\15\16\17\18\19\1A\1B\1C\1D\1E\1F") (func (export "v128.load8_splat") (param $address i32) (result v128) (v128.load8_splat (local.get $address))) (func (export "v128.load16_splat") (param $address i32) (result v128) (v128.load16_splat (local.get $address))) (func (export "v128.load32_splat") (param $address i32) (result v128) (v128.load32_splat (local.get $address))) (func (export "v128.load64_splat") (param $address i32) (result v128) (v128.load64_splat (local.get $address))) ;; Load data with different offset/align arguments (func (export "v8x16.offset0") (param $address i32) (result v128) (v128.load8_splat offset=0 (local.get $address))) (func (export "v8x16.align1") (param $address i32) (result v128) (v128.load8_splat align=1 (local.get $address))) (func (export "v8x16.offset1_align1") (param $address i32) (result v128) (v128.load8_splat offset=1 align=1 (local.get $address))) (func (export "v8x16.offset2_align1") (param $address i32) (result v128) (v128.load8_splat offset=2 align=1 (local.get $address))) (func (export "v8x16.offset15_align1") (param $address i32) (result v128) (v128.load8_splat offset=15 align=1 (local.get $address))) (func (export "v16x8.offset0") (param $address i32) (result v128) (v128.load16_splat offset=0 (local.get $address))) (func (export "v16x8.align1") (param $address i32) (result v128) (v128.load16_splat align=1 (local.get $address))) (func (export "v16x8.offset1_align1") (param $address i32) (result v128) (v128.load16_splat offset=1 align=1 (local.get $address))) (func (export "v16x8.offset2_align1") (param $address i32) (result v128) (v128.load16_splat offset=2 align=1 (local.get $address))) (func (export "v16x8.offset15_align2") (param $address i32) (result v128) (v128.load16_splat offset=15 align=2 (local.get $address))) (func (export "v32x4.offset0") (param $address i32) (result v128) (v128.load32_splat offset=0 (local.get $address))) (func (export "v32x4.align1") (param $address i32) (result v128) (v128.load32_splat align=1 (local.get $address))) (func (export "v32x4.offset1_align1") (param $address i32) (result v128) (v128.load32_splat offset=1 align=1 (local.get $address))) (func (export "v32x4.offset2_align2") (param $address i32) (result v128) (v128.load32_splat offset=2 align=2 (local.get $address))) (func (export "v32x4.offset15_align4") (param $address i32) (result v128) (v128.load32_splat offset=15 align=4 (local.get $address))) (func (export "v64x2.offset0") (param $address i32) (result v128) (v128.load64_splat offset=0 (local.get $address))) (func (export "v64x2.align1") (param $address i32) (result v128) (v128.load64_splat align=1 (local.get $address))) (func (export "v64x2.offset1_align2") (param $address i32) (result v128) (v128.load64_splat offset=1 align=2 (local.get $address))) (func (export "v64x2.offset2_align4") (param $address i32) (result v128) (v128.load64_splat offset=2 align=4 (local.get $address))) (func (export "v64x2.offset15_align8") (param $address i32) (result v128) (v128.load64_splat offset=15 align=8 (local.get $address))) (func (export "v8x16.offset65536") (param $address i32) (result v128) (v128.load8_splat offset=65536 (local.get $address))) (func (export "v16x8.offset65535") (param $address i32) (result v128) (v128.load16_splat offset=65535 (local.get $address))) (func (export "v32x4.offset65533") (param $address i32) (result v128) (v128.load32_splat offset=65533 (local.get $address))) (func (export "v64x2.offset65529") (param $address i32) (result v128) (v128.load64_splat offset=65529 (local.get $address))) ) (assert_return (invoke "v128.load8_splat" (i32.const 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_splat" (i32.const 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "v128.load8_splat" (i32.const 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "v128.load8_splat" (i32.const 3)) (v128.const i8x16 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3)) (assert_return (invoke "v128.load8_splat" (i32.const 65535)) (v128.const i8x16 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31)) (assert_return (invoke "v128.load16_splat" (i32.const 4)) (v128.const i16x8 0x0504 0x0504 0x0504 0x0504 0x0504 0x0504 0x0504 0x0504)) (assert_return (invoke "v128.load16_splat" (i32.const 5)) (v128.const i16x8 0x0605 0x0605 0x0605 0x0605 0x0605 0x0605 0x0605 0x0605)) (assert_return (invoke "v128.load16_splat" (i32.const 6)) (v128.const i16x8 0x0706 0x0706 0x0706 0x0706 0x0706 0x0706 0x0706 0x0706)) (assert_return (invoke "v128.load16_splat" (i32.const 7)) (v128.const i16x8 0x0807 0x0807 0x0807 0x0807 0x0807 0x0807 0x0807 0x0807)) (assert_return (invoke "v128.load16_splat" (i32.const 65534)) (v128.const i16x8 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E)) (assert_return (invoke "v128.load32_splat" (i32.const 8)) (v128.const i32x4 0x0B0A0908 0x0B0A0908 0x0B0A0908 0x0B0A0908)) (assert_return (invoke "v128.load32_splat" (i32.const 9)) (v128.const i32x4 0x0C0B0A09 0x0C0B0A09 0x0C0B0A09 0x0C0B0A09)) (assert_return (invoke "v128.load32_splat" (i32.const 10)) (v128.const i32x4 0x0D0C0B0A 0x0D0C0B0A 0x0D0C0B0A 0x0D0C0B0A)) (assert_return (invoke "v128.load32_splat" (i32.const 11)) (v128.const i32x4 0x0E0D0C0B 0x0E0D0C0B 0x0E0D0C0B 0x0E0D0C0B)) (assert_return (invoke "v128.load32_splat" (i32.const 65532)) (v128.const i32x4 0x1F1E1D1C 0x1F1E1D1C 0x1F1E1D1C 0x1F1E1D1C)) (assert_return (invoke "v128.load64_splat" (i32.const 12)) (v128.const i64x2 0x000000000F0E0D0C 0x000000000F0E0D0C)) (assert_return (invoke "v128.load64_splat" (i32.const 13)) (v128.const i64x2 0x00000000000F0E0D 0x00000000000F0E0D)) (assert_return (invoke "v128.load64_splat" (i32.const 14)) (v128.const i64x2 0x0000000000000F0E 0x0000000000000F0E)) (assert_return (invoke "v128.load64_splat" (i32.const 15)) (v128.const i64x2 0x000000000000000F 0x000000000000000F)) (assert_return (invoke "v128.load64_splat" (i32.const 65528)) (v128.const i64x2 0x1F1E1D1C1B1A1918 0x1F1E1D1C1B1A1918)) ;; v8x16 (assert_return (invoke "v8x16.offset0" (i32.const 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v8x16.align1" (i32.const 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v8x16.offset1_align1" (i32.const 0)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "v8x16.offset2_align1" (i32.const 0)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "v8x16.offset15_align1" (i32.const 0)) (v128.const i8x16 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15)) (assert_return (invoke "v8x16.offset0" (i32.const 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "v8x16.align1" (i32.const 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "v8x16.offset1_align1" (i32.const 1)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "v8x16.offset2_align1" (i32.const 1)) (v128.const i8x16 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3)) (assert_return (invoke "v8x16.offset15_align1" (i32.const 1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v8x16.offset0" (i32.const 65535)) (v128.const i8x16 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31)) (assert_return (invoke "v8x16.align1" (i32.const 65535)) (v128.const i8x16 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31)) ;; v16x8 (assert_return (invoke "v16x8.offset0" (i32.const 0)) (v128.const i16x8 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100)) (assert_return (invoke "v16x8.align1" (i32.const 0)) (v128.const i16x8 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100)) (assert_return (invoke "v16x8.offset1_align1" (i32.const 0)) (v128.const i16x8 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201)) (assert_return (invoke "v16x8.offset2_align1" (i32.const 0)) (v128.const i16x8 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302)) (assert_return (invoke "v16x8.offset15_align2" (i32.const 0)) (v128.const i16x8 0x000F 0x000F 0x000F 0x000F 0x000F 0x000F 0x000F 0x000F)) (assert_return (invoke "v16x8.offset0" (i32.const 1)) (v128.const i16x8 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201)) (assert_return (invoke "v16x8.align1" (i32.const 1)) (v128.const i16x8 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201)) (assert_return (invoke "v16x8.offset1_align1" (i32.const 1)) (v128.const i16x8 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302)) (assert_return (invoke "v16x8.offset2_align1" (i32.const 1)) (v128.const i16x8 0x0403 0x0403 0x0403 0x0403 0x0403 0x0403 0x0403 0x0403)) (assert_return (invoke "v16x8.offset15_align2" (i32.const 1)) (v128.const i16x8 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000)) (assert_return (invoke "v16x8.offset0" (i32.const 65534)) (v128.const i16x8 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E)) (assert_return (invoke "v16x8.align1" (i32.const 65534)) (v128.const i16x8 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E 0x1F1E)) ;; v32x4 (assert_return (invoke "v32x4.offset0" (i32.const 0)) (v128.const i32x4 0x03020100 0x03020100 0x03020100 0x03020100)) (assert_return (invoke "v32x4.align1" (i32.const 0)) (v128.const i32x4 0x03020100 0x03020100 0x03020100 0x03020100)) (assert_return (invoke "v32x4.offset1_align1" (i32.const 0)) (v128.const i32x4 0x04030201 0x04030201 0x04030201 0x04030201)) (assert_return (invoke "v32x4.offset2_align2" (i32.const 0)) (v128.const i32x4 0x05040302 0x05040302 0x05040302 0x05040302)) (assert_return (invoke "v32x4.offset15_align4" (i32.const 0)) (v128.const i32x4 0x0000000F 0x0000000F 0x0000000F 0x0000000F)) (assert_return (invoke "v32x4.offset0" (i32.const 1)) (v128.const i32x4 0x04030201 0x04030201 0x04030201 0x04030201)) (assert_return (invoke "v32x4.align1" (i32.const 1)) (v128.const i32x4 0x04030201 0x04030201 0x04030201 0x04030201)) (assert_return (invoke "v32x4.offset1_align1" (i32.const 1)) (v128.const i32x4 0x05040302 0x05040302 0x05040302 0x05040302)) (assert_return (invoke "v32x4.offset2_align2" (i32.const 1)) (v128.const i32x4 0x06050403 0x06050403 0x06050403 0x06050403)) (assert_return (invoke "v32x4.offset15_align4" (i32.const 1)) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v32x4.offset0" (i32.const 65532)) (v128.const i32x4 0x1F1E1D1C 0x1F1E1D1C 0x1F1E1D1C 0x1F1E1D1C)) (assert_return (invoke "v32x4.align1" (i32.const 65532)) (v128.const i32x4 0x1F1E1D1C 0x1F1E1D1C 0x1F1E1D1C 0x1F1E1D1C)) ;; v64x2 (assert_return (invoke "v64x2.offset0" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x0706050403020100)) (assert_return (invoke "v64x2.align1" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x0706050403020100)) (assert_return (invoke "v64x2.offset1_align2" (i32.const 0)) (v128.const i64x2 0x0807060504030201 0x0807060504030201)) (assert_return (invoke "v64x2.offset2_align4" (i32.const 0)) (v128.const i64x2 0x0908070605040302 0x0908070605040302)) (assert_return (invoke "v64x2.offset15_align8" (i32.const 0)) (v128.const i64x2 0x000000000000000F 0x000000000000000F)) (assert_return (invoke "v64x2.offset0" (i32.const 1)) (v128.const i64x2 0x0807060504030201 0x0807060504030201)) (assert_return (invoke "v64x2.align1" (i32.const 1)) (v128.const i64x2 0x0807060504030201 0x0807060504030201)) (assert_return (invoke "v64x2.offset1_align2" (i32.const 1)) (v128.const i64x2 0x0908070605040302 0x0908070605040302)) (assert_return (invoke "v64x2.offset2_align4" (i32.const 1)) (v128.const i64x2 0x0A09080706050403 0x0A09080706050403)) (assert_return (invoke "v64x2.offset15_align8" (i32.const 1)) (v128.const i64x2 0x0000000000000000 0x0000000000000000)) (assert_return (invoke "v64x2.offset0" (i32.const 65528)) (v128.const i64x2 0x1F1E1D1C1B1A1918 0x1F1E1D1C1B1A1918)) (assert_return (invoke "v64x2.align1" (i32.const 65528)) (v128.const i64x2 0x1F1E1D1C1B1A1918 0x1F1E1D1C1B1A1918)) ;; Out of bounds memory access (assert_trap (invoke "v128.load8_splat" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load16_splat" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load32_splat" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load64_splat" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load8_splat" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "v128.load16_splat" (i32.const 65535)) "out of bounds memory access") (assert_trap (invoke "v128.load32_splat" (i32.const 65533)) "out of bounds memory access") (assert_trap (invoke "v128.load64_splat" (i32.const 65529)) "out of bounds memory access") (assert_trap (invoke "v8x16.offset1_align1" (i32.const 65535)) "out of bounds memory access") (assert_trap (invoke "v8x16.offset2_align1" (i32.const 65535)) "out of bounds memory access") (assert_trap (invoke "v8x16.offset15_align1" (i32.const 65535)) "out of bounds memory access") (assert_trap (invoke "v16x8.offset1_align1" (i32.const 65534)) "out of bounds memory access") (assert_trap (invoke "v16x8.offset2_align1" (i32.const 65534)) "out of bounds memory access") (assert_trap (invoke "v16x8.offset15_align2" (i32.const 65534)) "out of bounds memory access") (assert_trap (invoke "v32x4.offset1_align1" (i32.const 65532)) "out of bounds memory access") (assert_trap (invoke "v32x4.offset2_align2" (i32.const 65532)) "out of bounds memory access") (assert_trap (invoke "v32x4.offset15_align4" (i32.const 65532)) "out of bounds memory access") (assert_trap (invoke "v64x2.offset1_align2" (i32.const 65528)) "out of bounds memory access") (assert_trap (invoke "v64x2.offset2_align4" (i32.const 65528)) "out of bounds memory access") (assert_trap (invoke "v64x2.offset15_align8" (i32.const 65528)) "out of bounds memory access") (assert_trap (invoke "v8x16.offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v16x8.offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v32x4.offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v64x2.offset1_align2" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v8x16.offset65536" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "v16x8.offset65535" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "v32x4.offset65533" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "v64x2.offset65529" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "v8x16.offset65536" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "v16x8.offset65535" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "v32x4.offset65533" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "v64x2.offset65529" (i32.const 1)) "out of bounds memory access") ;; Combination (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A") (func (export "v128.load8_splat-in-block") (result v128) (block (result v128) (block (result v128) (v128.load8_splat (i32.const 0)))) ) (func (export "v128.load16_splat-in-block") (result v128) (block (result v128) (block (result v128) (v128.load16_splat (i32.const 1)))) ) (func (export "v128.load32_splat-in-block") (result v128) (block (result v128) (block (result v128) (v128.load32_splat (i32.const 2)))) ) (func (export "v128.load64_splat-in-block") (result v128) (block (result v128) (block (result v128) (v128.load64_splat (i32.const 9)))) ) (func (export "v128.load8_splat-as-br-value") (result v128) (block (result v128) (br 0 (v128.load8_splat (i32.const 3)))) ) (func (export "v128.load16_splat-as-br-value") (result v128) (block (result v128) (br 0 (v128.load16_splat (i32.const 4)))) ) (func (export "v128.load32_splat-as-br-value") (result v128) (block (result v128) (br 0 (v128.load32_splat (i32.const 5)))) ) (func (export "v128.load64_splat-as-br-value") (result v128) (block (result v128) (br 0 (v128.load64_splat (i32.const 10)))) ) (func (export "v128.load8_splat-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load8_splat (i32.const 6))) ) (func (export "v128.load16_splat-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load16_splat (i32.const 7))) ) (func (export "v128.load32_splat-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load32_splat (i32.const 8))) ) (func (export "v128.load64_splat-extract_lane_s-operand") (result i32) (i8x16.extract_lane_s 0 (v128.load64_splat (i32.const 11))) ) ) (assert_return (invoke "v128.load8_splat-in-block") (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load16_splat-in-block") (v128.const i16x8 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201)) (assert_return (invoke "v128.load32_splat-in-block") (v128.const i32x4 0x05040302 0x05040302 0x05040302 0x05040302)) (assert_return (invoke "v128.load64_splat-in-block") (v128.const i64x2 0x0000000000000A09 0x0000000000000A09)) (assert_return (invoke "v128.load8_splat-as-br-value") (v128.const i8x16 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3)) (assert_return (invoke "v128.load16_splat-as-br-value") (v128.const i16x8 0x0504 0x0504 0x0504 0x0504 0x0504 0x0504 0x0504 0x0504)) (assert_return (invoke "v128.load32_splat-as-br-value") (v128.const i32x4 0x08070605 0x08070605 0x08070605 0x08070605)) (assert_return (invoke "v128.load64_splat-as-br-value") (v128.const i64x2 0x000000000000000A 0x000000000000000A)) (assert_return (invoke "v128.load8_splat-extract_lane_s-operand") (i32.const 6)) (assert_return (invoke "v128.load16_splat-extract_lane_s-operand") (i32.const 7)) (assert_return (invoke "v128.load32_splat-extract_lane_s-operand") (i32.const 8)) (assert_return (invoke "v128.load64_splat-extract_lane_s-operand") (i32.const 0)) ;; Type check (assert_invalid (module (memory 0) (func (result v128) (v128.load8_splat (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load16_splat (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load32_splat (v128.const i32x4 0 0 0 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load64_splat (v128.const i32x4 0 0 0 0)))) "type mismatch") ;; Unknown operator (assert_malformed (module quote "(memory 1) (func (drop (i8x16.load_splat (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i16x8.load_splat (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i32x4.load_splat (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i64x2.load_splat (i32.const 0))))") "unknown operator") ;; Test operation with empty argument (assert_invalid (module (memory 0) (func $v128.load8_splat-arg-empty (result v128) (v128.load8_splat) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load16_splat-arg-empty (result v128) (v128.load16_splat) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load32_splat-arg-empty (result v128) (v128.load32_splat) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load64_splat-arg-empty (result v128) (v128.load64_splat) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_load_zero.wast ================================================ ;; Load and Zero extend test cases (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\80\81\82\83\84\85\86\87\88\89") (data (i32.const 65520) "\0A\0B\0C\0D\0E\0F\80\81\82\83\84\85\86\87\88\89") (func (export "v128.load32_zero") (param $0 i32) (result v128) (v128.load32_zero (local.get $0)) ) (func (export "v128.load64_zero") (param $0 i32) (result v128) (v128.load64_zero (local.get $0)) ) ;; load by a constant amount (func (export "v128.load32_zero_const0") (result v128) (v128.load32_zero (i32.const 0)) ) (func (export "v128.load64_zero_const8") (result v128) (v128.load64_zero (i32.const 8)) ) ;; load data with different offset/align arguments ;; i16x8 (func (export "v128.load32_zero_offset0") (param $0 i32) (result v128) (v128.load32_zero offset=0 (local.get $0)) ) (func (export "v128.load32_zero_align1") (param $0 i32) (result v128) (v128.load32_zero align=1 (local.get $0)) ) (func (export "v128.load32_zero_offset0_align1") (param $0 i32) (result v128) (v128.load32_zero offset=0 align=1 (local.get $0)) ) (func (export "v128.load32_zero_offset1_align1") (param $0 i32) (result v128) (v128.load32_zero offset=1 align=1 (local.get $0)) ) (func (export "v128.load32_zero_offset10_align4") (param $0 i32) (result v128) (v128.load32_zero offset=10 align=4 (local.get $0)) ) (func (export "v128.load64_zero_offset0") (param $0 i32) (result v128) (v128.load64_zero offset=0 (local.get $0)) ) (func (export "v128.load64_zero_align1") (param $0 i32) (result v128) (v128.load64_zero align=1 (local.get $0)) ) (func (export "v128.load64_zero_offset0_align1") (param $0 i32) (result v128) (v128.load64_zero offset=0 align=1 (local.get $0)) ) (func (export "v128.load64_zero_offset1_align1") (param $0 i32) (result v128) (v128.load64_zero offset=1 align=1 (local.get $0)) ) (func (export "v128.load64_zero_offset10_align4") (param $0 i32) (result v128) (v128.load64_zero offset=10 align=4 (local.get $0)) ) (func (export "v128.load64_zero_offset20_align8") (param $0 i32) (result v128) (v128.load64_zero offset=20 align=8 (local.get $0)) ) ) ;; normal (assert_return (invoke "v128.load32_zero" (i32.const 0)) (v128.const i32x4 0x03020100 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load64_zero" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x0000000000000000)) (assert_return (invoke "v128.load32_zero" (i32.const 10)) (v128.const i32x4 0x0D0C0B0A 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load64_zero" (i32.const 10)) (v128.const i64x2 0x81800F0E0D0C0B0A 0x0000000000000000)) (assert_return (invoke "v128.load32_zero" (i32.const 20)) (v128.const i32x4 0x87868584 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load64_zero" (i32.const 20)) (v128.const i64x2 0x0000898887868584 0x0000000000000000)) ;; load by a constant amount (assert_return (invoke "v128.load32_zero_const0") (v128.const i32x4 0x03020100 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load64_zero_const8") (v128.const i64x2 0x0F0E0D0C0B0A0908 0x0000000000000000)) ;; load data with different offset/align arguments ;; load32_zero (assert_return (invoke "v128.load32_zero_offset0" (i32.const 0)) (v128.const i32x4 0x03020100 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load32_zero_align1" (i32.const 1)) (v128.const i32x4 0x04030201 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load32_zero_offset0_align1" (i32.const 2)) (v128.const i32x4 0x05040302 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load32_zero_offset10_align4" (i32.const 3)) (v128.const i32x4 0x800F0E0D 0x00000000 0x00000000 0x00000000)) ;; load64_zero (assert_return (invoke "v128.load64_zero_offset0" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x0000000000000000)) (assert_return (invoke "v128.load64_zero_align1" (i32.const 1)) (v128.const i64x2 0x0807060504030201 0x0000000000000000)) (assert_return (invoke "v128.load64_zero_offset0_align1" (i32.const 2)) (v128.const i64x2 0x0908070605040302 0x0000000000000000)) (assert_return (invoke "v128.load64_zero_offset10_align4" (i32.const 3)) (v128.const i64x2 0x84838281800F0E0D 0x0000000000000000)) (assert_return (invoke "v128.load64_zero_offset20_align8" (i32.const 4)) (v128.const i64x2 0x0000000000008988 0x0000000000000000)) ;; out of bounds memory access (assert_trap (invoke "v128.load32_zero" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load64_zero" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load32_zero_offset1_align1" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "v128.load64_zero_offset1_align1" (i32.const -1)) "out of bounds memory access") ;; type check (assert_invalid (module (memory 0) (func (result v128) (v128.load32_zero (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 0) (func (result v128) (v128.load64_zero (f32.const 0)))) "type mismatch") ;; Test operation with empty argument (assert_invalid (module (memory 0) (func $v128.load32_zero-arg-empty (result v128) (v128.load32_zero) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.load64_zero-arg-empty (result v128) (v128.load64_zero) ) ) "type mismatch" ) ;; Unknown operator (assert_malformed (module quote "(memory 1) (func (drop (i16x8.load16x4_s (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i16x8.load16x4_u (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i32x4.load32x2_s (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i32x4.load32x2_u (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i64x2.load64x1_s (i32.const 0))))") "unknown operator") (assert_malformed (module quote "(memory 1) (func (drop (i64x2.load64x1_u (i32.const 0))))") "unknown operator") ;; combination (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\80\81\82\83\84\85\86\87\88\89") (func (export "v128.load32_zero-in-block") (result v128) (block (result v128) (block (result v128) (v128.load32_zero (i32.const 0)))) ) (func (export "v128.load64_zero-in-block") (result v128) (block (result v128) (block (result v128) (v128.load64_zero (i32.const 1)))) ) (func (export "v128.load32_zero-as-br-value") (result v128) (block (result v128) (br 0 (v128.load32_zero (i32.const 6)))) ) (func (export "v128.load64_zero-as-br-value") (result v128) (block (result v128) (br 0 (v128.load64_zero (i32.const 7)))) ) (func (export "v128.load32_zero-extract_lane_s-operand") (result i32) (i32x4.extract_lane 0 (v128.load32_zero (i32.const 12))) ) (func (export "v128.load64_zero-extract_lane_s-operand") (result i64) (i64x2.extract_lane 0 (v128.load64_zero (i32.const 13))) ) ) (assert_return (invoke "v128.load32_zero-in-block") (v128.const i32x4 0x03020100 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load64_zero-in-block") (v128.const i64x2 0x0807060504030201 0x0000000000000000)) (assert_return (invoke "v128.load32_zero-as-br-value") (v128.const i32x4 0x09080706 0x00000000 0x00000000 0x00000000)) (assert_return (invoke "v128.load64_zero-as-br-value") (v128.const i64x2 0x0E0D0C0B0A090807 0x0000000000000000)) (assert_return (invoke "v128.load32_zero-extract_lane_s-operand") (i32.const 0x0F0E0D0C)) (assert_return (invoke "v128.load64_zero-extract_lane_s-operand") (i64.const 0x84838281800F0E0D)) ================================================ FILE: Test/WebAssembly/spec/simd/simd_splat.wast ================================================ ;; Tests for the *_splat instructions (module (func (export "i8x16.splat") (param i32) (result v128) (i8x16.splat (local.get 0))) (func (export "i16x8.splat") (param i32) (result v128) (i16x8.splat (local.get 0))) (func (export "i32x4.splat") (param i32) (result v128) (i32x4.splat (local.get 0))) (func (export "f32x4.splat") (param f32) (result v128) (f32x4.splat (local.get 0))) (func (export "i64x2.splat") (param i64) (result v128) (i64x2.splat (local.get 0))) (func (export "f64x2.splat") (param f64) (result v128) (f64x2.splat (local.get 0))) ) (assert_return (invoke "i8x16.splat" (i32.const 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.splat" (i32.const 5)) (v128.const i8x16 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5)) (assert_return (invoke "i8x16.splat" (i32.const -5)) (v128.const i8x16 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5)) (assert_return (invoke "i8x16.splat" (i32.const 257)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.splat" (i32.const 0xff)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i8x16.splat" (i32.const -128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.splat" (i32.const 127)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.splat" (i32.const -129)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127)) (assert_return (invoke "i8x16.splat" (i32.const 128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128)) (assert_return (invoke "i8x16.splat" (i32.const 0xff7f)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "i8x16.splat" (i32.const 0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (assert_return (invoke "i8x16.splat" (i32.const 0xAB)) (v128.const i32x4 0xABABABAB 0xABABABAB 0xABABABAB 0xABABABAB)) (assert_return (invoke "i16x8.splat" (i32.const 0)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.splat" (i32.const 5)) (v128.const i16x8 5 5 5 5 5 5 5 5)) (assert_return (invoke "i16x8.splat" (i32.const -5)) (v128.const i16x8 -5 -5 -5 -5 -5 -5 -5 -5)) (assert_return (invoke "i16x8.splat" (i32.const 65537)) (v128.const i16x8 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.splat" (i32.const 0xffff)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "i16x8.splat" (i32.const -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.splat" (i32.const 32767)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.splat" (i32.const -32769)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767)) (assert_return (invoke "i16x8.splat" (i32.const 32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768)) (assert_return (invoke "i16x8.splat" (i32.const 0xffff7fff)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "i16x8.splat" (i32.const 0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (assert_return (invoke "i16x8.splat" (i32.const 0xABCD)) (v128.const i32x4 0xABCDABCD 0xABCDABCD 0xABCDABCD 0xABCDABCD)) (assert_return (invoke "i16x8.splat" (i32.const 012345)) (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345)) (assert_return (invoke "i16x8.splat" (i32.const 0x01234)) (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234)) (assert_return (invoke "i32x4.splat" (i32.const 0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.splat" (i32.const 5)) (v128.const i32x4 5 5 5 5)) (assert_return (invoke "i32x4.splat" (i32.const -5)) (v128.const i32x4 -5 -5 -5 -5)) (assert_return (invoke "i32x4.splat" (i32.const 0xffffffff)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.splat" (i32.const 4294967295)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.splat" (i32.const -2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.splat" (i32.const 2147483647)) (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) (assert_return (invoke "i32x4.splat" (i32.const 2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (assert_return (invoke "i32x4.splat" (i32.const 01234567890)) (v128.const i32x4 012_3456_7890 012_3456_7890 012_3456_7890 012_3456_7890)) (assert_return (invoke "i32x4.splat" (i32.const 0x012345678)) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (assert_return (invoke "f32x4.splat" (f32.const 0.0)) (v128.const f32x4 0.0 0.0 0.0 0.0)) (assert_return (invoke "f32x4.splat" (f32.const 1.1)) (v128.const f32x4 1.1 1.1 1.1 1.1)) (assert_return (invoke "f32x4.splat" (f32.const -1.1)) (v128.const f32x4 -1.1 -1.1 -1.1 -1.1)) (assert_return (invoke "f32x4.splat" (f32.const 1e38)) (v128.const f32x4 1e38 1e38 1e38 1e38)) (assert_return (invoke "f32x4.splat" (f32.const -1e38)) (v128.const f32x4 -1e38 -1e38 -1e38 -1e38)) (assert_return (invoke "f32x4.splat" (f32.const 0x1.fffffep127)) (v128.const f32x4 0x1.fffffep127 0x1.fffffep127 0x1.fffffep127 0x1.fffffep127)) (assert_return (invoke "f32x4.splat" (f32.const -0x1.fffffep127)) (v128.const f32x4 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127)) (assert_return (invoke "f32x4.splat" (f32.const 0x1p127)) (v128.const f32x4 0x1p127 0x1p127 0x1p127 0x1p127)) (assert_return (invoke "f32x4.splat" (f32.const -0x1p127)) (v128.const f32x4 -0x1p127 -0x1p127 -0x1p127 -0x1p127)) (assert_return (invoke "f32x4.splat" (f32.const inf)) (v128.const f32x4 inf inf inf inf)) (assert_return (invoke "f32x4.splat" (f32.const -inf)) (v128.const f32x4 -inf -inf -inf -inf)) (assert_return (invoke "f32x4.splat" (f32.const nan)) (v128.const f32x4 nan nan nan nan)) (assert_return (invoke "f32x4.splat" (f32.const nan:0x1)) (v128.const f32x4 nan:0x1 nan:0x1 nan:0x1 nan:0x1)) (assert_return (invoke "f32x4.splat" (f32.const nan:0x7f_ffff)) (v128.const f32x4 nan:0x7f_ffff nan:0x7f_ffff nan:0x7f_ffff nan:0x7f_ffff)) (assert_return (invoke "f32x4.splat" (f32.const 0123456789)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789)) (assert_return (invoke "f32x4.splat" (f32.const 0123456789.)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.)) (assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEF)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF)) (assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEF.)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.)) (assert_return (invoke "f32x4.splat" (f32.const 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019)) (assert_return (invoke "f32x4.splat" (f32.const 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019)) (assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEFp019)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019)) (assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019)) (assert_return (invoke "i64x2.splat" (i64.const 0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.splat" (i64.const -0)) (v128.const i64x2 0 0)) (assert_return (invoke "i64x2.splat" (i64.const 1)) (v128.const i64x2 1 1)) (assert_return (invoke "i64x2.splat" (i64.const -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.splat" (i64.const -9223372036854775808)) (v128.const i64x2 -9223372036854775808 -9223372036854775808)) (assert_return (invoke "i64x2.splat" (i64.const -9223372036854775808)) (v128.const i64x2 9223372036854775808 9223372036854775808)) (assert_return (invoke "i64x2.splat" (i64.const 9223372036854775807)) (v128.const i64x2 9223372036854775807 9223372036854775807)) (assert_return (invoke "i64x2.splat" (i64.const 18446744073709551615)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.splat" (i64.const 0x7fffffffffffffff)) (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)) (assert_return (invoke "i64x2.splat" (i64.const 0xffffffffffffffff)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.splat" (i64.const -0x8000000000000000)) (v128.const i64x2 -0x8000000000000000 -0x8000000000000000)) (assert_return (invoke "i64x2.splat" (i64.const -0x8000000000000000)) (v128.const i64x2 0x8000000000000000 0x8000000000000000)) (assert_return (invoke "i64x2.splat" (i64.const 01234567890123456789)) (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789)) (assert_return (invoke "i64x2.splat" (i64.const 0x01234567890ABcdef)) (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef)) (assert_return (invoke "f64x2.splat" (f64.const 0.0)) (v128.const f64x2 0.0 0.0)) (assert_return (invoke "f64x2.splat" (f64.const -0.0)) (v128.const f64x2 -0.0 -0.0)) (assert_return (invoke "f64x2.splat" (f64.const 1.1)) (v128.const f64x2 1.1 1.1)) (assert_return (invoke "f64x2.splat" (f64.const -1.1)) (v128.const f64x2 -1.1 -1.1)) (assert_return (invoke "f64x2.splat" (f64.const 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.splat" (f64.const -0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022)) (assert_return (invoke "f64x2.splat" (f64.const 0x1p-1022)) (v128.const f64x2 0x1p-1022 0x1p-1022)) (assert_return (invoke "f64x2.splat" (f64.const -0x1p-1022)) (v128.const f64x2 -0x1p-1022 -0x1p-1022)) (assert_return (invoke "f64x2.splat" (f64.const 0x1p-1)) (v128.const f64x2 0x1p-1 0x1p-1)) (assert_return (invoke "f64x2.splat" (f64.const -0x1p-1)) (v128.const f64x2 -0x1p-1 -0x1p-1)) (assert_return (invoke "f64x2.splat" (f64.const 0x1p+0)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "f64x2.splat" (f64.const -0x1p+0)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (assert_return (invoke "f64x2.splat" (f64.const 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.splat" (f64.const -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2)) (assert_return (invoke "f64x2.splat" (f64.const 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.splat" (f64.const -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023)) (assert_return (invoke "f64x2.splat" (f64.const inf)) (v128.const f64x2 inf inf)) (assert_return (invoke "f64x2.splat" (f64.const -inf)) (v128.const f64x2 -inf -inf)) (assert_return (invoke "f64x2.splat" (f64.const nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.splat" (f64.const -nan)) (v128.const f64x2 -nan -nan)) (assert_return (invoke "f64x2.splat" (f64.const nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000)) (assert_return (invoke "f64x2.splat" (f64.const -nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000)) (assert_return (invoke "f64x2.splat" (f64.const 0123456789)) (v128.const f64x2 0123456789 0123456789)) (assert_return (invoke "f64x2.splat" (f64.const 0123456789.)) (v128.const f64x2 0123456789. 0123456789.)) (assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef)) (assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.)) (assert_return (invoke "f64x2.splat" (f64.const 0123456789e019)) (v128.const f64x2 0123456789e019 0123456789e019)) (assert_return (invoke "f64x2.splat" (f64.const 0123456789e+019)) (v128.const f64x2 0123456789e+019 0123456789e+019)) (assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019)) (assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019)) ;; Unknown operator (assert_malformed (module quote "(func (result v128) (v128.splat (i32.const 0)))") "unknown operator") ;; Type mismatched (assert_invalid (module (func (result v128) i8x16.splat (i64.const 0))) "type mismatch") (assert_invalid (module (func (result v128) i8x16.splat (f32.const 0.0))) "type mismatch") (assert_invalid (module (func (result v128) i8x16.splat (f64.const 0.0))) "type mismatch") (assert_invalid (module (func (result v128) i16x8.splat (i64.const 1))) "type mismatch") (assert_invalid (module (func (result v128) i16x8.splat (f32.const 1.0))) "type mismatch") (assert_invalid (module (func (result v128) i16x8.splat (f64.const 1.0))) "type mismatch") (assert_invalid (module (func (result v128) i32x4.splat (i64.const 2))) "type mismatch") (assert_invalid (module (func (result v128) i32x4.splat (f32.const 2.0))) "type mismatch") (assert_invalid (module (func (result v128) i32x4.splat (f64.const 2.0))) "type mismatch") (assert_invalid (module (func (result v128) f32x4.splat (i32.const 4))) "type mismatch") (assert_invalid (module (func (result v128) f32x4.splat (i64.const 4))) "type mismatch") (assert_invalid (module (func (result v128) f32x4.splat (f64.const 4.0))) "type mismatch") (assert_invalid (module (func (result v128) i64x2.splat (i32.const 0))) "type mismatch") (assert_invalid (module (func (result v128) i64x2.splat (f64.const 0.0))) "type mismatch") (assert_invalid (module (func (result v128) f64x2.splat (i32.const 0))) "type mismatch") (assert_invalid (module (func (result v128) f64x2.splat (f32.const 0.0))) "type mismatch") ;; V128 splat operators as the argument of other SIMD instructions ;; v128.store and v128.load (module (memory 1) (func (export "as-v128_store-operand-1") (param i32) (result v128) (v128.store (i32.const 0) (i8x16.splat (local.get 0))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-2") (param i32) (result v128) (v128.store (i32.const 0) (i16x8.splat (local.get 0))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-3") (param i32) (result v128) (v128.store (i32.const 0) (i32x4.splat (local.get 0))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-4") (param i64) (result v128) (v128.store (i32.const 0) (i64x2.splat (local.get 0))) (v128.load (i32.const 0))) (func (export "as-v128_store-operand-5") (param f64) (result v128) (v128.store (i32.const 0) (f64x2.splat (local.get 0))) (v128.load (i32.const 0))) ) (assert_return (invoke "as-v128_store-operand-1" (i32.const 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "as-v128_store-operand-2" (i32.const 256)) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100)) (assert_return (invoke "as-v128_store-operand-3" (i32.const 0xffffffff)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "as-v128_store-operand-4" (i64.const 1)) (v128.const i64x2 1 1)) (assert_return (invoke "as-v128_store-operand-5" (f64.const -0x1p+0)) (v128.const f64x2 -0x1p+0 -0x1p+0)) (module ;; Accessing lane (func (export "as-i8x16_extract_lane_s-operand-first") (param i32) (result i32) (i8x16.extract_lane_s 0 (i8x16.splat (local.get 0)))) (func (export "as-i8x16_extract_lane_s-operand-last") (param i32) (result i32) (i8x16.extract_lane_s 15 (i8x16.splat (local.get 0)))) (func (export "as-i16x8_extract_lane_s-operand-first") (param i32) (result i32) (i16x8.extract_lane_s 0 (i16x8.splat (local.get 0)))) (func (export "as-i16x8_extract_lane_s-operand-last") (param i32) (result i32) (i16x8.extract_lane_s 7 (i16x8.splat (local.get 0)))) (func (export "as-i32x4_extract_lane_s-operand-first") (param i32) (result i32) (i32x4.extract_lane 0 (i32x4.splat (local.get 0)))) (func (export "as-i32x4_extract_lane_s-operand-last") (param i32) (result i32) (i32x4.extract_lane 3 (i32x4.splat (local.get 0)))) (func (export "as-f32x4_extract_lane_s-operand-first") (param f32) (result f32) (f32x4.extract_lane 0 (f32x4.splat (local.get 0)))) (func (export "as-f32x4_extract_lane_s-operand-last") (param f32) (result f32) (f32x4.extract_lane 3 (f32x4.splat (local.get 0)))) (func (export "as-v8x16_swizzle-operands") (param i32) (param i32) (result v128) (i8x16.swizzle (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1)))) (func (export "as-i64x2_extract_lane-operand-first") (param i64) (result i64) (i64x2.extract_lane 0 (i64x2.splat (local.get 0)))) (func (export "as-i64x2_extract_lane-operand-last") (param i64) (result i64) (i64x2.extract_lane 1 (i64x2.splat (local.get 0)))) (func (export "as-f64x2_extract_lane-operand-first") (param f64) (result f64) (f64x2.extract_lane 0 (f64x2.splat (local.get 0)))) (func (export "as-f64x2_extract_lane-operand-last") (param f64) (result f64) (f64x2.extract_lane 1 (f64x2.splat (local.get 0)))) ;; Integer arithmetic (func (export "as-i8x16_add_sub-operands") (param i32 i32 i32) (result v128) (i8x16.add (i8x16.splat (local.get 0)) (i8x16.sub (i8x16.splat (local.get 1)) (i8x16.splat (local.get 2))))) (func (export "as-i16x8_add_sub_mul-operands") (param i32 i32 i32 i32) (result v128) (i16x8.add (i16x8.splat (local.get 0)) (i16x8.sub (i16x8.splat (local.get 1)) (i16x8.mul (i16x8.splat (local.get 2)) (i16x8.splat (local.get 3)))))) (func (export "as-i32x4_add_sub_mul-operands") (param i32 i32 i32 i32) (result v128) (i32x4.add (i32x4.splat (local.get 0)) (i32x4.sub (i32x4.splat (local.get 1)) (i32x4.mul (i32x4.splat (local.get 2)) (i32x4.splat (local.get 3)))))) (func (export "as-i64x2_add_sub_mul-operands") (param i64 i64 i64 i64) (result v128) (i64x2.add (i64x2.splat (local.get 0)) (i64x2.sub (i64x2.splat (local.get 1)) (i64x2.mul (i64x2.splat (local.get 2)) (i64x2.splat (local.get 3)))))) (func (export "as-f64x2_add_sub_mul-operands") (param f64 f64 f64 f64) (result v128) (f64x2.add (f64x2.splat (local.get 0)) (f64x2.sub (f64x2.splat (local.get 1)) (f64x2.mul (f64x2.splat (local.get 2)) (f64x2.splat (local.get 3)))))) ;; Saturating integer arithmetic (func (export "as-i8x16_add_sat_s-operands") (param i32 i32) (result v128) (i8x16.add_sat_s (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1)))) (func (export "as-i16x8_add_sat_s-operands") (param i32 i32) (result v128) (i16x8.add_sat_s (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1)))) (func (export "as-i8x16_sub_sat_u-operands") (param i32 i32) (result v128) (i8x16.sub_sat_u (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1)))) (func (export "as-i16x8_sub_sat_u-operands") (param i32 i32) (result v128) (i16x8.sub_sat_u (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1)))) ;; Bit shifts (func (export "as-i8x16_shr_s-operand") (param i32 i32) (result v128) (i8x16.shr_s (i8x16.splat (local.get 0)) (local.get 1))) (func (export "as-i16x8_shr_s-operand") (param i32 i32) (result v128) (i16x8.shr_s (i16x8.splat (local.get 0)) (local.get 1))) (func (export "as-i32x4_shr_s-operand") (param i32 i32) (result v128) (i32x4.shr_s (i32x4.splat (local.get 0)) (local.get 1))) ;; Bitwise operantions (func (export "as-v128_and-operands") (param i32 i32) (result v128) (v128.and (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1)))) (func (export "as-v128_or-operands") (param i32 i32) (result v128) (v128.or (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1)))) (func (export "as-v128_xor-operands") (param i32 i32) (result v128) (v128.xor (i32x4.splat (local.get 0)) (i32x4.splat (local.get 1)))) ;; Boolean horizontal reductions (func (export "as-i8x16_all_true-operand") (param i32) (result i32) (i8x16.all_true (i8x16.splat (local.get 0)))) (func (export "as-i16x8_all_true-operand") (param i32) (result i32) (i16x8.all_true (i16x8.splat (local.get 0)))) (func (export "as-i32x4_all_true-operand1") (param i32) (result i32) (i32x4.all_true (i32x4.splat (local.get 0)))) (func (export "as-i32x4_all_true-operand2") (param i64) (result i32) (i32x4.all_true (i64x2.splat (local.get 0)))) ;; Comparisons (func (export "as-i8x16_eq-operands") (param i32 i32) (result v128) (i8x16.eq (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1)))) (func (export "as-i16x8_eq-operands") (param i32 i32) (result v128) (i16x8.eq (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1)))) (func (export "as-i32x4_eq-operands1") (param i32 i32) (result v128) (i32x4.eq (i32x4.splat (local.get 0)) (i32x4.splat (local.get 1)))) (func (export "as-i32x4_eq-operands2") (param i64 i64) (result v128) (i32x4.eq (i64x2.splat (local.get 0)) (i64x2.splat (local.get 1)))) (func (export "as-f32x4_eq-operands") (param f32 f32) (result v128) (f32x4.eq (f32x4.splat (local.get 0)) (f32x4.splat (local.get 1)))) (func (export "as-f64x2_eq-operands") (param f64 f64) (result v128) (f64x2.eq (f64x2.splat (local.get 0)) (f64x2.splat (local.get 1)))) ;; Floating-point sign bit operations (func (export "as-f32x4_abs-operand") (param f32) (result v128) (f32x4.abs (f32x4.splat (local.get 0)))) ;; Floating-point min (func (export "as-f32x4_min-operands") (param f32 f32) (result v128) (f32x4.min (f32x4.splat (local.get 0)) (f32x4.splat (local.get 1)))) ;; Floating-point arithmetic (func (export "as-f32x4_div-operands") (param f32 f32) (result v128) (f32x4.div (f32x4.splat (local.get 0)) (f32x4.splat (local.get 1)))) ;; Conversions (func (export "as-f32x4_convert_s_i32x4-operand") (param i32) (result v128) (f32x4.convert_i32x4_s (i32x4.splat (local.get 0)))) (func (export "as-i32x4_trunc_s_f32x4_sat-operand") (param f32) (result v128) (i32x4.trunc_sat_f32x4_s (f32x4.splat (local.get 0)))) ) (assert_return (invoke "as-i8x16_extract_lane_s-operand-first" (i32.const 42)) (i32.const 42)) (assert_return (invoke "as-i8x16_extract_lane_s-operand-last" (i32.const -42)) (i32.const -42)) (assert_return (invoke "as-i16x8_extract_lane_s-operand-first" (i32.const 0xffff7fff)) (i32.const 32767)) (assert_return (invoke "as-i16x8_extract_lane_s-operand-last" (i32.const 0x8000)) (i32.const -32768)) (assert_return (invoke "as-i32x4_extract_lane_s-operand-first" (i32.const 0x7fffffff)) (i32.const 2147483647)) (assert_return (invoke "as-i32x4_extract_lane_s-operand-last" (i32.const 0x80000000)) (i32.const -2147483648)) (assert_return (invoke "as-f32x4_extract_lane_s-operand-first" (f32.const 1.5)) (f32.const 1.5)) (assert_return (invoke "as-f32x4_extract_lane_s-operand-last" (f32.const -0.25)) (f32.const -0.25)) (assert_return (invoke "as-v8x16_swizzle-operands" (i32.const 1) (i32.const -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "as-i64x2_extract_lane-operand-last" (i64.const -42)) (i64.const -42)) (assert_return (invoke "as-i64x2_extract_lane-operand-first" (i64.const 42)) (i64.const 42)) (assert_return (invoke "as-f64x2_extract_lane-operand-first" (f64.const 1.5)) (f64.const 1.5)) (assert_return (invoke "as-f64x2_extract_lane-operand-last" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "as-i8x16_add_sub-operands" (i32.const 3) (i32.const 2) (i32.const 1)) (v128.const i8x16 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4)) (assert_return (invoke "as-i16x8_add_sub_mul-operands" (i32.const 257) (i32.const 128) (i32.const 16) (i32.const 16)) (v128.const i16x8 129 129 129 129 129 129 129 129)) (assert_return (invoke "as-i32x4_add_sub_mul-operands" (i32.const 65535) (i32.const 65537) (i32.const 256) (i32.const 256)) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (assert_return (invoke "as-i64x2_add_sub_mul-operands" (i64.const 0x7fffffff) (i64.const 0x1_0000_0001) (i64.const 65536) (i64.const 65536)) (v128.const i64x2 0x8000_0000 0x8000_0000)) (assert_return (invoke "as-f64x2_add_sub_mul-operands" (f64.const 0x1p-1) (f64.const 0.75) (f64.const 0x1p-1) (f64.const 0.5)) (v128.const f64x2 0x1p+0 0x1p+0)) (assert_return (invoke "as-i8x16_add_sat_s-operands" (i32.const 0x7f) (i32.const 1)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (assert_return (invoke "as-i16x8_add_sat_s-operands" (i32.const 0x7fff) (i32.const 1)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (assert_return (invoke "as-i8x16_sub_sat_u-operands" (i32.const 0x7f) (i32.const 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "as-i16x8_sub_sat_u-operands" (i32.const 0x7fff) (i32.const 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0)) (assert_return (invoke "as-i8x16_shr_s-operand" (i32.const 0xf0) (i32.const 3)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2)) (assert_return (invoke "as-i16x8_shr_s-operand" (i32.const 0x100) (i32.const 4)) (v128.const i16x8 16 16 16 16 16 16 16 16)) (assert_return (invoke "as-i32x4_shr_s-operand" (i32.const -1) (i32.const 16)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "as-v128_and-operands" (i32.const 0x11) (i32.const 0xff)) (v128.const i8x16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17)) (assert_return (invoke "as-v128_or-operands" (i32.const 0) (i32.const 0xffff)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "as-v128_xor-operands" (i32.const 0xf0f0f0f0) (i32.const 0xffffffff)) (v128.const i32x4 0xf0f0f0f 0xf0f0f0f 0xf0f0f0f 0xf0f0f0f)) (assert_return (invoke "as-i8x16_all_true-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-i16x8_all_true-operand" (i32.const 0xffff)) (i32.const 1)) (assert_return (invoke "as-i32x4_all_true-operand1" (i32.const 0xf0f0f0f0)) (i32.const 1)) (assert_return (invoke "as-i32x4_all_true-operand2" (i64.const -1)) (i32.const 1)) (assert_return (invoke "as-i8x16_eq-operands" (i32.const 1) (i32.const 2)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "as-i16x8_eq-operands" (i32.const -1) (i32.const 65535)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (assert_return (invoke "as-i32x4_eq-operands1" (i32.const -1) (i32.const 0xffffffff)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (assert_return (invoke "as-f32x4_eq-operands" (f32.const +0.0) (f32.const -0.0)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (assert_return (invoke "as-i32x4_eq-operands2" (i64.const 1) (i64.const 2)) (v128.const i64x2 0xffffffff00000000 0xffffffff00000000)) (assert_return (invoke "as-f64x2_eq-operands" (f64.const +0.0) (f64.const -0.0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "as-f32x4_abs-operand" (f32.const -1.125)) (v128.const f32x4 1.125 1.125 1.125 1.125)) (assert_return (invoke "as-f32x4_min-operands" (f32.const 0.25) (f32.const 1e-38)) (v128.const f32x4 1e-38 1e-38 1e-38 1e-38)) (assert_return (invoke "as-f32x4_div-operands" (f32.const 1.0) (f32.const 8.0)) (v128.const f32x4 0.125 0.125 0.125 0.125)) (assert_return (invoke "as-f32x4_convert_s_i32x4-operand" (i32.const 12345)) (v128.const f32x4 12345.0 12345.0 12345.0 12345.0)) (assert_return (invoke "as-i32x4_trunc_s_f32x4_sat-operand" (f32.const 1.1)) (v128.const i32x4 1 1 1 1)) ;; As the argument of control constructs and WASM instructions (module (global $g (mut v128) (v128.const f32x4 0.0 0.0 0.0 0.0)) (func (export "as-br-value1") (param i32) (result v128) (block (result v128) (br 0 (i8x16.splat (local.get 0))))) (func (export "as-return-value1") (param i32) (result v128) (return (i16x8.splat (local.get 0)))) (func (export "as-local_set-value1") (param i32) (result v128) (local v128) (local.set 1 (i32x4.splat (local.get 0))) (return (local.get 1))) (func (export "as-global_set-value1") (param f32) (result v128) (global.set $g (f32x4.splat (local.get 0))) (return (global.get $g))) (func (export "as-br-value2") (param i64) (result v128) (block (result v128) (br 0 (i64x2.splat (local.get 0))))) (func (export "as-return-value2") (param i64) (result v128) (return (i64x2.splat (local.get 0)))) (func (export "as-local_set-value2") (param i64) (result v128) (local v128) (local.set 1 (i64x2.splat (local.get 0))) (return (local.get 1))) (func (export "as-global_set-value2") (param f64) (result v128) (global.set $g (f64x2.splat (local.get 0))) (return (global.get $g))) ) (assert_return (invoke "as-br-value1" (i32.const 0xAB)) (v128.const i8x16 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB)) (assert_return (invoke "as-return-value1" (i32.const 0xABCD)) (v128.const i16x8 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD)) (assert_return (invoke "as-local_set-value1" (i32.const 0x10000)) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000)) (assert_return (invoke "as-global_set-value1" (f32.const 1.0)) (v128.const f32x4 1.0 1.0 1.0 1.0)) (assert_return (invoke "as-br-value2" (i64.const 0xABCD)) (v128.const i64x2 0xABCD 0xABCD)) (assert_return (invoke "as-return-value2" (i64.const 0xABCD)) (v128.const i64x2 0xABCD 0xABCD)) (assert_return (invoke "as-local_set-value2" (i64.const 0x10000)) (v128.const i64x2 0x10000 0x10000)) (assert_return (invoke "as-global_set-value2" (f64.const 1.0)) (v128.const f64x2 1.0 1.0)) ;; Test operation with empty argument (assert_invalid (module (func $i8x16.splat-arg-empty (result v128) (i8x16.splat) ) ) "type mismatch" ) (assert_invalid (module (func $i16x8.splat-arg-empty (result v128) (i16x8.splat) ) ) "type mismatch" ) (assert_invalid (module (func $i32x4.splat-arg-empty (result v128) (i32x4.splat) ) ) "type mismatch" ) (assert_invalid (module (func $f32x4.splat-arg-empty (result v128) (f32x4.splat) ) ) "type mismatch" ) (assert_invalid (module (func $i64x2.splat-arg-empty (result v128) (i64x2.splat) ) ) "type mismatch" ) (assert_invalid (module (func $f64x2.splat-arg-empty (result v128) (f64x2.splat) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_store.wast ================================================ ;; v128.store operater with normal argument (e.g. (i8x16, i16x8, i32x4, f32x4)) (module (memory 1) (func (export "v128.store_i8x16") (result v128) (v128.store (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.load (i32.const 0)) ) (func (export "v128.store_i16x8") (result v128) (v128.store (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7)) (v128.load (i32.const 0)) ) (func (export "v128.store_i16x8_2") (result v128) (v128.store (i32.const 0) (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345)) (v128.load (i32.const 0)) ) (func (export "v128.store_i16x8_3") (result v128) (v128.store (i32.const 0) (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234)) (v128.load (i32.const 0)) ) (func (export "v128.store_i32x4") (result v128) (v128.store (i32.const 0) (v128.const i32x4 0 1 2 3)) (v128.load (i32.const 0)) ) (func (export "v128.store_i32x4_2") (result v128) (v128.store (i32.const 0) (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789)) (v128.load (i32.const 0)) ) (func (export "v128.store_i32x4_3") (result v128) (v128.store (i32.const 0) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678)) (v128.load (i32.const 0)) ) (func (export "v128.store_f32x4") (result v128) (v128.store (i32.const 0) (v128.const f32x4 0 1 2 3)) (v128.load (i32.const 0)) ) ) (assert_return (invoke "v128.store_i8x16") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_return (invoke "v128.store_i16x8") (v128.const i16x8 0 1 2 3 4 5 6 7)) (assert_return (invoke "v128.store_i16x8_2") (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345)) (assert_return (invoke "v128.store_i16x8_3") (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234)) (assert_return (invoke "v128.store_i32x4") (v128.const i32x4 0 1 2 3)) (assert_return (invoke "v128.store_i32x4_2") (v128.const i32x4 123456789 123456789 123456789 123456789)) (assert_return (invoke "v128.store_i32x4_3") (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678)) (assert_return (invoke "v128.store_f32x4") (v128.const f32x4 0 1 2 3)) ;; v128.store operator as the argument of control constructs and instructions (module (memory 1) (func (export "as-block-value") (block (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))) ) (func (export "as-loop-value") (loop (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))) ) (func (export "as-br-value") (block (br 0 (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))) ) (func (export "as-br_if-value") (block (br_if 0 (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)) (i32.const 1)) ) ) (func (export "as-br_if-value-cond") (block (br_if 0 (i32.const 6) (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))) ) ) (func (export "as-br_table-value") (block (br_table 0 (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)) (i32.const 1)) ) ) (func (export "as-return-value") (return (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))) ) (func (export "as-if-then") (if (i32.const 1) (then (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))) ) (func (export "as-if-else") (if (i32.const 0) (then) (else (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))) ) ) (assert_return (invoke "as-block-value")) (assert_return (invoke "as-loop-value")) (assert_return (invoke "as-br-value")) (assert_return (invoke "as-br_if-value")) (assert_return (invoke "as-br_if-value-cond")) (assert_return (invoke "as-br_table-value")) (assert_return (invoke "as-return-value")) (assert_return (invoke "as-if-then")) (assert_return (invoke "as-if-else")) ;; Unknown operator(e.g. v128.store8, v128.store16, v128.store32) (assert_malformed (module quote "(memory 1)" "(func (v128.store8 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (v128.store16 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (v128.store32 (i32.const 0) (v128.const i32x4 0 0 0 0)))" ) "unknown operator" ) ;; Type mismatched (e.g. v128.load(f32.const 0), type address empty) (assert_invalid (module (memory 1) (func (v128.store (f32.const 0) (v128.const i32x4 0 0 0 0)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (local v128) (block (br_if 0 (v128.store))))) "type mismatch" ) (assert_invalid (module (memory 1) (func (result v128) (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))) "type mismatch" ) ;; Test operation with empty argument (assert_invalid (module (memory 0) (func $v128.store-1st-arg-empty (v128.store (v128.const i32x4 0 0 0 0)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.store-2nd-arg-empty (v128.store (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $v128.store-arg-empty (v128.store) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/simd/simd_store16_lane.wast ================================================ ;; Tests for store lane operations. (module (memory 1) (global $zero (mut v128) (v128.const i32x4 0 0 0 0)) (func (export "v128.store16_lane_0") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_3") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 4 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_5") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 5 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_6") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 6 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_7") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane 7 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_0_offset_0") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=0 0 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=0 (i32.const 0))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_1_offset_1") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=1 1 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=1 (i32.const 0))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_2_offset_2") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=2 2 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=2 (i32.const 0))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_3_offset_3") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=3 3 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=3 (i32.const 0))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_4_offset_4") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=4 4 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=4 (i32.const 0))) (v128.store offset=4 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_5_offset_5") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=5 5 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=5 (i32.const 0))) (v128.store offset=5 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_6_offset_6") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=6 6 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=6 (i32.const 0))) (v128.store offset=6 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_7_offset_7") (param $x v128) (result i64) (local $ret i64) (v128.store16_lane offset=7 7 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=7 (i32.const 0))) (v128.store offset=7 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_0_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_0_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_1_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_1_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_2_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_2_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_3_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_3_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_4_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 4 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=4 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_4_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 4 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=4 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_5_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 5 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=5 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_5_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 5 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=5 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_6_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 6 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=6 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_6_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 6 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=6 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_7_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=1 7 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=7 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store16_lane_7_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store16_lane align=2 7 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=7 (i32.const 0) (global.get $zero)) (local.get $ret)) ) (assert_return (invoke "v128.store16_lane_0" (i32.const 0) (v128.const i16x8 256 0 0 0 0 0 0 0)) (i64.const 256)) (assert_return (invoke "v128.store16_lane_1" (i32.const 1) (v128.const i16x8 0 513 0 0 0 0 0 0)) (i64.const 513)) (assert_return (invoke "v128.store16_lane_2" (i32.const 2) (v128.const i16x8 0 0 770 0 0 0 0 0)) (i64.const 770)) (assert_return (invoke "v128.store16_lane_3" (i32.const 3) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (i64.const 1027)) (assert_return (invoke "v128.store16_lane_4" (i32.const 4) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (i64.const 1284)) (assert_return (invoke "v128.store16_lane_5" (i32.const 5) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (i64.const 1541)) (assert_return (invoke "v128.store16_lane_6" (i32.const 6) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (i64.const 1798)) (assert_return (invoke "v128.store16_lane_7" (i32.const 7) (v128.const i16x8 0 0 0 0 0 0 0 2055)) (i64.const 2055)) (assert_return (invoke "v128.store16_lane_0_offset_0" (v128.const i16x8 256 0 0 0 0 0 0 0)) (i64.const 256)) (assert_return (invoke "v128.store16_lane_1_offset_1" (v128.const i16x8 0 513 0 0 0 0 0 0)) (i64.const 513)) (assert_return (invoke "v128.store16_lane_2_offset_2" (v128.const i16x8 0 0 770 0 0 0 0 0)) (i64.const 770)) (assert_return (invoke "v128.store16_lane_3_offset_3" (v128.const i16x8 0 0 0 1027 0 0 0 0)) (i64.const 1027)) (assert_return (invoke "v128.store16_lane_4_offset_4" (v128.const i16x8 0 0 0 0 1284 0 0 0)) (i64.const 1284)) (assert_return (invoke "v128.store16_lane_5_offset_5" (v128.const i16x8 0 0 0 0 0 1541 0 0)) (i64.const 1541)) (assert_return (invoke "v128.store16_lane_6_offset_6" (v128.const i16x8 0 0 0 0 0 0 1798 0)) (i64.const 1798)) (assert_return (invoke "v128.store16_lane_7_offset_7" (v128.const i16x8 0 0 0 0 0 0 0 2055)) (i64.const 2055)) (assert_return (invoke "v128.store16_lane_0_align_1" (i32.const 0) (v128.const i16x8 256 0 0 0 0 0 0 0)) (i64.const 256)) (assert_return (invoke "v128.store16_lane_0_align_2" (i32.const 0) (v128.const i16x8 256 0 0 0 0 0 0 0)) (i64.const 256)) (assert_return (invoke "v128.store16_lane_1_align_1" (i32.const 1) (v128.const i16x8 0 513 0 0 0 0 0 0)) (i64.const 513)) (assert_return (invoke "v128.store16_lane_1_align_2" (i32.const 1) (v128.const i16x8 0 513 0 0 0 0 0 0)) (i64.const 513)) (assert_return (invoke "v128.store16_lane_2_align_1" (i32.const 2) (v128.const i16x8 0 0 770 0 0 0 0 0)) (i64.const 770)) (assert_return (invoke "v128.store16_lane_2_align_2" (i32.const 2) (v128.const i16x8 0 0 770 0 0 0 0 0)) (i64.const 770)) (assert_return (invoke "v128.store16_lane_3_align_1" (i32.const 3) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (i64.const 1027)) (assert_return (invoke "v128.store16_lane_3_align_2" (i32.const 3) (v128.const i16x8 0 0 0 1027 0 0 0 0)) (i64.const 1027)) (assert_return (invoke "v128.store16_lane_4_align_1" (i32.const 4) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (i64.const 1284)) (assert_return (invoke "v128.store16_lane_4_align_2" (i32.const 4) (v128.const i16x8 0 0 0 0 1284 0 0 0)) (i64.const 1284)) (assert_return (invoke "v128.store16_lane_5_align_1" (i32.const 5) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (i64.const 1541)) (assert_return (invoke "v128.store16_lane_5_align_2" (i32.const 5) (v128.const i16x8 0 0 0 0 0 1541 0 0)) (i64.const 1541)) (assert_return (invoke "v128.store16_lane_6_align_1" (i32.const 6) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (i64.const 1798)) (assert_return (invoke "v128.store16_lane_6_align_2" (i32.const 6) (v128.const i16x8 0 0 0 0 0 0 1798 0)) (i64.const 1798)) (assert_return (invoke "v128.store16_lane_7_align_1" (i32.const 7) (v128.const i16x8 0 0 0 0 0 0 0 2055)) (i64.const 2055)) (assert_return (invoke "v128.store16_lane_7_align_2" (i32.const 7) (v128.const i16x8 0 0 0 0 0 0 0 2055)) (i64.const 2055)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store16_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store16_lane 8 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store16_lane align=4 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_store32_lane.wast ================================================ ;; Tests for store lane operations. (module (memory 1) (global $zero (mut v128) (v128.const i32x4 0 0 0 0)) (func (export "v128.store32_lane_0") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_3") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_0_offset_0") (param $x v128) (result i64) (local $ret i64) (v128.store32_lane offset=0 0 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=0 (i32.const 0))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_1_offset_1") (param $x v128) (result i64) (local $ret i64) (v128.store32_lane offset=1 1 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=1 (i32.const 0))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_2_offset_2") (param $x v128) (result i64) (local $ret i64) (v128.store32_lane offset=2 2 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=2 (i32.const 0))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_3_offset_3") (param $x v128) (result i64) (local $ret i64) (v128.store32_lane offset=3 3 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=3 (i32.const 0))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_0_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=1 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_0_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=2 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_0_align_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=4 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_1_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=1 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_1_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=2 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_1_align_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=4 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_2_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=1 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_2_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=2 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_2_align_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=4 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_3_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=1 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_3_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=2 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store32_lane_3_align_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store32_lane align=4 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) ) (assert_return (invoke "v128.store32_lane_0" (i32.const 0) (v128.const i32x4 50462976 0 0 0)) (i64.const 50462976)) (assert_return (invoke "v128.store32_lane_1" (i32.const 1) (v128.const i32x4 0 67305985 0 0)) (i64.const 67305985)) (assert_return (invoke "v128.store32_lane_2" (i32.const 2) (v128.const i32x4 0 0 84148994 0)) (i64.const 84148994)) (assert_return (invoke "v128.store32_lane_3" (i32.const 3) (v128.const i32x4 0 0 0 100992003)) (i64.const 100992003)) (assert_return (invoke "v128.store32_lane_0_offset_0" (v128.const i32x4 50462976 0 0 0)) (i64.const 50462976)) (assert_return (invoke "v128.store32_lane_1_offset_1" (v128.const i32x4 0 67305985 0 0)) (i64.const 67305985)) (assert_return (invoke "v128.store32_lane_2_offset_2" (v128.const i32x4 0 0 84148994 0)) (i64.const 84148994)) (assert_return (invoke "v128.store32_lane_3_offset_3" (v128.const i32x4 0 0 0 100992003)) (i64.const 100992003)) (assert_return (invoke "v128.store32_lane_0_align_1" (i32.const 0) (v128.const i32x4 50462976 0 0 0)) (i64.const 50462976)) (assert_return (invoke "v128.store32_lane_0_align_2" (i32.const 0) (v128.const i32x4 50462976 0 0 0)) (i64.const 50462976)) (assert_return (invoke "v128.store32_lane_0_align_4" (i32.const 0) (v128.const i32x4 50462976 0 0 0)) (i64.const 50462976)) (assert_return (invoke "v128.store32_lane_1_align_1" (i32.const 1) (v128.const i32x4 0 67305985 0 0)) (i64.const 67305985)) (assert_return (invoke "v128.store32_lane_1_align_2" (i32.const 1) (v128.const i32x4 0 67305985 0 0)) (i64.const 67305985)) (assert_return (invoke "v128.store32_lane_1_align_4" (i32.const 1) (v128.const i32x4 0 67305985 0 0)) (i64.const 67305985)) (assert_return (invoke "v128.store32_lane_2_align_1" (i32.const 2) (v128.const i32x4 0 0 84148994 0)) (i64.const 84148994)) (assert_return (invoke "v128.store32_lane_2_align_2" (i32.const 2) (v128.const i32x4 0 0 84148994 0)) (i64.const 84148994)) (assert_return (invoke "v128.store32_lane_2_align_4" (i32.const 2) (v128.const i32x4 0 0 84148994 0)) (i64.const 84148994)) (assert_return (invoke "v128.store32_lane_3_align_1" (i32.const 3) (v128.const i32x4 0 0 0 100992003)) (i64.const 100992003)) (assert_return (invoke "v128.store32_lane_3_align_2" (i32.const 3) (v128.const i32x4 0 0 0 100992003)) (i64.const 100992003)) (assert_return (invoke "v128.store32_lane_3_align_4" (i32.const 3) (v128.const i32x4 0 0 0 100992003)) (i64.const 100992003)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store32_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store32_lane 4 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store32_lane align=8 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_store64_lane.wast ================================================ ;; Tests for store lane operations. (module (memory 1) (global $zero (mut v128) (v128.const i32x4 0 0 0 0)) (func (export "v128.store64_lane_0") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_0_offset_0") (param $x v128) (result i64) (local $ret i64) (v128.store64_lane offset=0 0 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=0 (i32.const 0))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_1_offset_1") (param $x v128) (result i64) (local $ret i64) (v128.store64_lane offset=1 1 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=1 (i32.const 0))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_0_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=1 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_0_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=2 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_0_align_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=4 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_0_align_8") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=8 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_1_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=1 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_1_align_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=2 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_1_align_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=4 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store64_lane_1_align_8") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store64_lane align=8 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) ) (assert_return (invoke "v128.store64_lane_0" (i32.const 0) (v128.const i64x2 506097522914230528 0)) (i64.const 506097522914230528)) (assert_return (invoke "v128.store64_lane_1" (i32.const 1) (v128.const i64x2 0 578437695752307201)) (i64.const 578437695752307201)) (assert_return (invoke "v128.store64_lane_0_offset_0" (v128.const i64x2 506097522914230528 0)) (i64.const 506097522914230528)) (assert_return (invoke "v128.store64_lane_1_offset_1" (v128.const i64x2 0 578437695752307201)) (i64.const 578437695752307201)) (assert_return (invoke "v128.store64_lane_0_align_1" (i32.const 0) (v128.const i64x2 506097522914230528 0)) (i64.const 506097522914230528)) (assert_return (invoke "v128.store64_lane_0_align_2" (i32.const 0) (v128.const i64x2 506097522914230528 0)) (i64.const 506097522914230528)) (assert_return (invoke "v128.store64_lane_0_align_4" (i32.const 0) (v128.const i64x2 506097522914230528 0)) (i64.const 506097522914230528)) (assert_return (invoke "v128.store64_lane_0_align_8" (i32.const 0) (v128.const i64x2 506097522914230528 0)) (i64.const 506097522914230528)) (assert_return (invoke "v128.store64_lane_1_align_1" (i32.const 1) (v128.const i64x2 0 578437695752307201)) (i64.const 578437695752307201)) (assert_return (invoke "v128.store64_lane_1_align_2" (i32.const 1) (v128.const i64x2 0 578437695752307201)) (i64.const 578437695752307201)) (assert_return (invoke "v128.store64_lane_1_align_4" (i32.const 1) (v128.const i64x2 0 578437695752307201)) (i64.const 578437695752307201)) (assert_return (invoke "v128.store64_lane_1_align_8" (i32.const 1) (v128.const i64x2 0 578437695752307201)) (i64.const 578437695752307201)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store64_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store64_lane 2 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store64_lane align=16 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/simd/simd_store8_lane.wast ================================================ ;; Tests for store lane operations. (module (memory 1) (global $zero (mut v128) (v128.const i32x4 0 0 0 0)) (func (export "v128.store8_lane_0") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_2") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_3") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_4") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 4 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_5") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 5 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_6") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 6 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_7") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 7 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_8") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 8 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_9") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 9 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_10") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 10 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_11") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 11 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_12") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 12 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_13") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 13 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_14") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 14 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_15") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane 15 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store (local.get $address) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_0_offset_0") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=0 0 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=0 (i32.const 0))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_1_offset_1") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=1 1 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=1 (i32.const 0))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_2_offset_2") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=2 2 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=2 (i32.const 0))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_3_offset_3") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=3 3 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=3 (i32.const 0))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_4_offset_4") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=4 4 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=4 (i32.const 0))) (v128.store offset=4 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_5_offset_5") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=5 5 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=5 (i32.const 0))) (v128.store offset=5 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_6_offset_6") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=6 6 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=6 (i32.const 0))) (v128.store offset=6 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_7_offset_7") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=7 7 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=7 (i32.const 0))) (v128.store offset=7 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_8_offset_8") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=8 8 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=8 (i32.const 0))) (v128.store offset=8 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_9_offset_9") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=9 9 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=9 (i32.const 0))) (v128.store offset=9 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_10_offset_10") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=10 10 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=10 (i32.const 0))) (v128.store offset=10 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_11_offset_11") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=11 11 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=11 (i32.const 0))) (v128.store offset=11 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_12_offset_12") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=12 12 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=12 (i32.const 0))) (v128.store offset=12 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_13_offset_13") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=13 13 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=13 (i32.const 0))) (v128.store offset=13 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_14_offset_14") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=14 14 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=14 (i32.const 0))) (v128.store offset=14 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_15_offset_15") (param $x v128) (result i64) (local $ret i64) (v128.store8_lane offset=15 15 (i32.const 0) (local.get $x)) (local.set $ret (i64.load offset=15 (i32.const 0))) (v128.store offset=15 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_0_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 0 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=0 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_1_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 1 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=1 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_2_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 2 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=2 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_3_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 3 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=3 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_4_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 4 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=4 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_5_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 5 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=5 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_6_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 6 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=6 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_7_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 7 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=7 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_8_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 8 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=8 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_9_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 9 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=9 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_10_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 10 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=10 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_11_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 11 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=11 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_12_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 12 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=12 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_13_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 13 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=13 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_14_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 14 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=14 (i32.const 0) (global.get $zero)) (local.get $ret)) (func (export "v128.store8_lane_15_align_1") (param $address i32) (param $x v128) (result i64) (local $ret i64) (v128.store8_lane align=1 15 (local.get $address) (local.get $x)) (local.set $ret (i64.load (local.get $address))) (v128.store offset=15 (i32.const 0) (global.get $zero)) (local.get $ret)) ) (assert_return (invoke "v128.store8_lane_0" (i32.const 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 0)) (assert_return (invoke "v128.store8_lane_1" (i32.const 1) (v128.const i8x16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 1)) (assert_return (invoke "v128.store8_lane_2" (i32.const 2) (v128.const i8x16 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 2)) (assert_return (invoke "v128.store8_lane_3" (i32.const 3) (v128.const i8x16 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 3)) (assert_return (invoke "v128.store8_lane_4" (i32.const 4) (v128.const i8x16 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 4)) (assert_return (invoke "v128.store8_lane_5" (i32.const 5) (v128.const i8x16 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0)) (i64.const 5)) (assert_return (invoke "v128.store8_lane_6" (i32.const 6) (v128.const i8x16 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0)) (i64.const 6)) (assert_return (invoke "v128.store8_lane_7" (i32.const 7) (v128.const i8x16 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0)) (i64.const 7)) (assert_return (invoke "v128.store8_lane_8" (i32.const 8) (v128.const i8x16 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0)) (i64.const 8)) (assert_return (invoke "v128.store8_lane_9" (i32.const 9) (v128.const i8x16 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0)) (i64.const 9)) (assert_return (invoke "v128.store8_lane_10" (i32.const 10) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0)) (i64.const 10)) (assert_return (invoke "v128.store8_lane_11" (i32.const 11) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0)) (i64.const 11)) (assert_return (invoke "v128.store8_lane_12" (i32.const 12) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0)) (i64.const 12)) (assert_return (invoke "v128.store8_lane_13" (i32.const 13) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0)) (i64.const 13)) (assert_return (invoke "v128.store8_lane_14" (i32.const 14) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0)) (i64.const 14)) (assert_return (invoke "v128.store8_lane_15" (i32.const 15) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15)) (i64.const 15)) (assert_return (invoke "v128.store8_lane_0_offset_0" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 0)) (assert_return (invoke "v128.store8_lane_1_offset_1" (v128.const i8x16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 1)) (assert_return (invoke "v128.store8_lane_2_offset_2" (v128.const i8x16 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 2)) (assert_return (invoke "v128.store8_lane_3_offset_3" (v128.const i8x16 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 3)) (assert_return (invoke "v128.store8_lane_4_offset_4" (v128.const i8x16 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 4)) (assert_return (invoke "v128.store8_lane_5_offset_5" (v128.const i8x16 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0)) (i64.const 5)) (assert_return (invoke "v128.store8_lane_6_offset_6" (v128.const i8x16 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0)) (i64.const 6)) (assert_return (invoke "v128.store8_lane_7_offset_7" (v128.const i8x16 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0)) (i64.const 7)) (assert_return (invoke "v128.store8_lane_8_offset_8" (v128.const i8x16 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0)) (i64.const 8)) (assert_return (invoke "v128.store8_lane_9_offset_9" (v128.const i8x16 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0)) (i64.const 9)) (assert_return (invoke "v128.store8_lane_10_offset_10" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0)) (i64.const 10)) (assert_return (invoke "v128.store8_lane_11_offset_11" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0)) (i64.const 11)) (assert_return (invoke "v128.store8_lane_12_offset_12" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0)) (i64.const 12)) (assert_return (invoke "v128.store8_lane_13_offset_13" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0)) (i64.const 13)) (assert_return (invoke "v128.store8_lane_14_offset_14" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0)) (i64.const 14)) (assert_return (invoke "v128.store8_lane_15_offset_15" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15)) (i64.const 15)) (assert_return (invoke "v128.store8_lane_0_align_1" (i32.const 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 0)) (assert_return (invoke "v128.store8_lane_1_align_1" (i32.const 1) (v128.const i8x16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 1)) (assert_return (invoke "v128.store8_lane_2_align_1" (i32.const 2) (v128.const i8x16 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 2)) (assert_return (invoke "v128.store8_lane_3_align_1" (i32.const 3) (v128.const i8x16 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 3)) (assert_return (invoke "v128.store8_lane_4_align_1" (i32.const 4) (v128.const i8x16 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0)) (i64.const 4)) (assert_return (invoke "v128.store8_lane_5_align_1" (i32.const 5) (v128.const i8x16 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0)) (i64.const 5)) (assert_return (invoke "v128.store8_lane_6_align_1" (i32.const 6) (v128.const i8x16 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0)) (i64.const 6)) (assert_return (invoke "v128.store8_lane_7_align_1" (i32.const 7) (v128.const i8x16 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0)) (i64.const 7)) (assert_return (invoke "v128.store8_lane_8_align_1" (i32.const 8) (v128.const i8x16 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0)) (i64.const 8)) (assert_return (invoke "v128.store8_lane_9_align_1" (i32.const 9) (v128.const i8x16 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0)) (i64.const 9)) (assert_return (invoke "v128.store8_lane_10_align_1" (i32.const 10) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0)) (i64.const 10)) (assert_return (invoke "v128.store8_lane_11_align_1" (i32.const 11) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0)) (i64.const 11)) (assert_return (invoke "v128.store8_lane_12_align_1" (i32.const 12) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0)) (i64.const 12)) (assert_return (invoke "v128.store8_lane_13_align_1" (i32.const 13) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0)) (i64.const 13)) (assert_return (invoke "v128.store8_lane_14_align_1" (i32.const 14) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0)) (i64.const 14)) (assert_return (invoke "v128.store8_lane_15_align_1" (i32.const 15) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15)) (i64.const 15)) ;; type check (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store8_lane 0 (local.get $x) (i32.const 0)))) "type mismatch") ;; invalid lane index (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store8_lane 16 (i32.const 0) (local.get $x)))) "invalid lane index") ;; invalid memarg alignment (assert_invalid (module (memory 1) (func (param $x v128) (result v128) (v128.store8_lane align=2 0 (i32.const 0) (local.get $x)))) "alignment must not be larger than natural") ================================================ FILE: Test/WebAssembly/spec/skip-stack-guard-page.wast ================================================ ;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. (module (memory 1) (export "test-guard-page-skip" (func $test-guard-page-skip)) (func $test-guard-page-skip (param $depth i32) (if (i32.eq (local.get $depth) (i32.const 0)) (then (call $function-with-many-locals)) (else (call $test-guard-page-skip (i32.sub (local.get $depth) (i32.const 1)))) ) ) (func $function-with-many-locals ;; 1056 i64 = 8448 bytes of locals (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. (call $function-with-many-locals) ;; load from memory into the locals (local.set 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) (local.set 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) (local.set 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) (local.set 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) (local.set 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) (local.set 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) (local.set 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) (local.set 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) (local.set 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) (local.set 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) (local.set 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) (local.set 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) (local.set 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) (local.set 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) (local.set 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) (local.set 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) (local.set 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) (local.set 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) (local.set 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) (local.set 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) (local.set 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) (local.set 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) (local.set 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) (local.set 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) (local.set 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) (local.set 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) (local.set 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) (local.set 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) (local.set 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) (local.set 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) (local.set 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) (local.set 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) (local.set 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) (local.set 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) (local.set 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) (local.set 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) (local.set 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) (local.set 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) (local.set 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) (local.set 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) (local.set 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) (local.set 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) (local.set 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) (local.set 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) (local.set 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) (local.set 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) (local.set 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) (local.set 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) (local.set 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) (local.set 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) (local.set 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) (local.set 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) (local.set 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) (local.set 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) (local.set 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) (local.set 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) (local.set 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) (local.set 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) (local.set 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) (local.set 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) (local.set 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) (local.set 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) (local.set 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) (local.set 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) (local.set 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) (local.set 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) (local.set 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) (local.set 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) (local.set 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) (local.set 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) (local.set 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) (local.set 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) (local.set 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) (local.set 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) (local.set 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) (local.set 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) (local.set 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) (local.set 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) (local.set 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) (local.set 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) (local.set 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) (local.set 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) (local.set 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) (local.set 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) (local.set 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) (local.set 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) (local.set 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) (local.set 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) (local.set 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) (local.set 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) (local.set 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) (local.set 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) (local.set 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) (local.set 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) (local.set 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) (local.set 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) (local.set 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) (local.set 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) (local.set 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) (local.set 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) (local.set 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) (local.set 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) (local.set 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) (local.set 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) (local.set 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) (local.set 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) (local.set 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) (local.set 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) (local.set 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) (local.set 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) (local.set 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) (local.set 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) (local.set 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) (local.set 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) (local.set 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) (local.set 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) (local.set 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) (local.set 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) (local.set 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) (local.set 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) (local.set 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) (local.set 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) (local.set 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) (local.set 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) (local.set 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) (local.set 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) (local.set 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) (local.set 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) (local.set 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) (local.set 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) (local.set 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) (local.set 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) (local.set 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) (local.set 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) (local.set 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) (local.set 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) (local.set 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) (local.set 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) (local.set 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) (local.set 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) (local.set 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) (local.set 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) (local.set 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) (local.set 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) (local.set 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) (local.set 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) (local.set 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) (local.set 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) (local.set 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) (local.set 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) (local.set 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) (local.set 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) (local.set 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) (local.set 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) (local.set 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) (local.set 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) (local.set 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) (local.set 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) (local.set 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) (local.set 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) (local.set 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) (local.set 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) (local.set 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) (local.set 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) (local.set 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) (local.set 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) (local.set 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) (local.set 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) (local.set 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) (local.set 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) (local.set 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) (local.set 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) (local.set 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) (local.set 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) (local.set 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) (local.set 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) (local.set 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) (local.set 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) (local.set 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) (local.set 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) (local.set 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) (local.set 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) (local.set 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) (local.set 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) (local.set 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) (local.set 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) (local.set 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) (local.set 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) (local.set 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) (local.set 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) (local.set 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) (local.set 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) (local.set 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) (local.set 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) (local.set 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) (local.set 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) (local.set 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) (local.set 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) (local.set 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) (local.set 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) (local.set 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) (local.set 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) (local.set 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) (local.set 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) (local.set 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) (local.set 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) (local.set 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) (local.set 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) (local.set 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) (local.set 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) (local.set 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) (local.set 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) (local.set 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) (local.set 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) (local.set 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) (local.set 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) (local.set 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) (local.set 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) (local.set 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) (local.set 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) (local.set 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) (local.set 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) (local.set 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) (local.set 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) (local.set 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) (local.set 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) (local.set 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) (local.set 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) (local.set 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) (local.set 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) (local.set 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) (local.set 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) (local.set 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) (local.set 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) (local.set 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) (local.set 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) (local.set 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) (local.set 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) (local.set 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) (local.set 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) (local.set 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) (local.set 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) (local.set 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) (local.set 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) (local.set 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) (local.set 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) (local.set 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) (local.set 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) (local.set 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) (local.set 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) (local.set 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) (local.set 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) (local.set 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) (local.set 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) (local.set 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) (local.set 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) (local.set 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) (local.set 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) (local.set 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) (local.set 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) (local.set 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) (local.set 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) (local.set 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) (local.set 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) (local.set 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) (local.set 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) (local.set 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) (local.set 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) (local.set 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) (local.set 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) (local.set 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) (local.set 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) (local.set 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) (local.set 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) (local.set 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) (local.set 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) (local.set 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) (local.set 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) (local.set 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) (local.set 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) (local.set 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) (local.set 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) (local.set 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) (local.set 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) (local.set 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) (local.set 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) (local.set 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) (local.set 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) (local.set 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) (local.set 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) (local.set 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) (local.set 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) (local.set 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) (local.set 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) (local.set 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) (local.set 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) (local.set 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) (local.set 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) (local.set 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) (local.set 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) (local.set 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) (local.set 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) (local.set 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) (local.set 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) (local.set 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) (local.set 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) (local.set 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) (local.set 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) (local.set 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) (local.set 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) (local.set 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) (local.set 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) (local.set 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) (local.set 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) (local.set 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) (local.set 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) (local.set 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) (local.set 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) (local.set 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) (local.set 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) (local.set 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) (local.set 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) (local.set 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) (local.set 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) (local.set 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) (local.set 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) (local.set 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) (local.set 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) (local.set 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) (local.set 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) (local.set 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) (local.set 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) (local.set 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) (local.set 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) (local.set 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) (local.set 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) (local.set 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) (local.set 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) (local.set 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) (local.set 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) (local.set 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) (local.set 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) (local.set 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) (local.set 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) (local.set 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) (local.set 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) (local.set 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) (local.set 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) (local.set 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) (local.set 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) (local.set 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) (local.set 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) (local.set 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) (local.set 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) (local.set 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) (local.set 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) (local.set 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) (local.set 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) (local.set 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) (local.set 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) (local.set 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) (local.set 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) (local.set 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) (local.set 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) (local.set 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) (local.set 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) (local.set 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) (local.set 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) (local.set 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) (local.set 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) (local.set 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) (local.set 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) (local.set 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) (local.set 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) (local.set 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) (local.set 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) (local.set 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) (local.set 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) (local.set 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) (local.set 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) (local.set 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) (local.set 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) (local.set 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) (local.set 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) (local.set 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) (local.set 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) (local.set 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) (local.set 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) (local.set 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) (local.set 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) (local.set 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) (local.set 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) (local.set 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) (local.set 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) (local.set 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) (local.set 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) (local.set 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) (local.set 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) (local.set 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) (local.set 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) (local.set 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) (local.set 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) (local.set 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) (local.set 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) (local.set 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) (local.set 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) (local.set 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) (local.set 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) (local.set 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) (local.set 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) (local.set 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) (local.set 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) (local.set 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) (local.set 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) (local.set 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) (local.set 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) (local.set 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) (local.set 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) (local.set 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) (local.set 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) (local.set 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) (local.set 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) (local.set 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) (local.set 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) (local.set 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) (local.set 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) (local.set 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) (local.set 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) (local.set 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) (local.set 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) (local.set 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) (local.set 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) (local.set 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) (local.set 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) (local.set 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) (local.set 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) (local.set 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) (local.set 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) (local.set 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) (local.set 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) (local.set 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) (local.set 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) (local.set 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) (local.set 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) (local.set 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) (local.set 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) (local.set 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) (local.set 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) (local.set 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) (local.set 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) (local.set 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) (local.set 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) (local.set 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) (local.set 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) (local.set 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) (local.set 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) (local.set 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) (local.set 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) (local.set 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) (local.set 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) (local.set 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) (local.set 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) (local.set 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) (local.set 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) (local.set 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) (local.set 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) (local.set 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) (local.set 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) (local.set 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) (local.set 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) (local.set 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) (local.set 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) (local.set 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) (local.set 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) (local.set 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) (local.set 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) (local.set 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) (local.set 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) (local.set 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) (local.set 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) (local.set 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) (local.set 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) (local.set 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) (local.set 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) (local.set 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) (local.set 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) (local.set 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) (local.set 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) (local.set 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) (local.set 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) (local.set 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) (local.set 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) (local.set 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) (local.set 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) (local.set 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) (local.set 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) (local.set 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) (local.set 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) (local.set 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) (local.set 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) (local.set 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) (local.set 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) (local.set 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) (local.set 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) (local.set 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) (local.set 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) (local.set 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) (local.set 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) (local.set 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) (local.set 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) (local.set 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) (local.set 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) (local.set 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) (local.set 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) (local.set 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) (local.set 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) (local.set 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) (local.set 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) (local.set 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) (local.set 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) (local.set 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) (local.set 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) (local.set 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) (local.set 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) (local.set 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) (local.set 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) (local.set 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) (local.set 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) (local.set 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) (local.set 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) (local.set 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) (local.set 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) (local.set 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) (local.set 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) (local.set 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) (local.set 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) (local.set 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) (local.set 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) (local.set 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) (local.set 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) (local.set 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) (local.set 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) (local.set 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) (local.set 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) (local.set 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) (local.set 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) (local.set 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) (local.set 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) (local.set 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) (local.set 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) (local.set 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) (local.set 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) (local.set 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) (local.set 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) (local.set 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) (local.set 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) (local.set 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) (local.set 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) (local.set 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) (local.set 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) (local.set 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) (local.set 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) (local.set 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) (local.set 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) (local.set 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) (local.set 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) (local.set 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) (local.set 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) (local.set 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) (local.set 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) (local.set 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) (local.set 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) (local.set 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) (local.set 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) (local.set 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) (local.set 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) (local.set 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) (local.set 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) (local.set 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) (local.set 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) (local.set 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) (local.set 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) (local.set 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) (local.set 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) (local.set 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) (local.set 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) (local.set 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) (local.set 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) (local.set 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) (local.set 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) (local.set 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) (local.set 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) (local.set 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) (local.set 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) (local.set 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) (local.set 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) (local.set 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) (local.set 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) (local.set 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) (local.set 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) (local.set 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) (local.set 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) (local.set 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) (local.set 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) (local.set 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) (local.set 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) (local.set 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) (local.set 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) (local.set 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) (local.set 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) (local.set 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) (local.set 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) (local.set 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) (local.set 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) (local.set 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) (local.set 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) (local.set 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) (local.set 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) (local.set 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) (local.set 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) (local.set 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) (local.set 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) (local.set 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) (local.set 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) (local.set 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) (local.set 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) (local.set 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) (local.set 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) (local.set 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) (local.set 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) (local.set 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) (local.set 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) (local.set 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) (local.set 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) (local.set 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) (local.set 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) (local.set 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) (local.set 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) (local.set 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) (local.set 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) (local.set 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) (local.set 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) (local.set 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) (local.set 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) (local.set 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) (local.set 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) (local.set 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) (local.set 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) (local.set 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) (local.set 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) (local.set 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) (local.set 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) (local.set 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) (local.set 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) (local.set 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) (local.set 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) (local.set 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) (local.set 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) (local.set 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) (local.set 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) (local.set 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) (local.set 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) (local.set 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) (local.set 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) (local.set 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) (local.set 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) (local.set 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) (local.set 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) (local.set 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) (local.set 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) (local.set 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) (local.set 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) (local.set 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) (local.set 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) (local.set 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) (local.set 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) (local.set 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) (local.set 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) (local.set 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) (local.set 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) (local.set 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) (local.set 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) (local.set 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) (local.set 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) (local.set 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) (local.set 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) (local.set 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) (local.set 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) (local.set 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) (local.set 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) (local.set 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) (local.set 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) (local.set 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) (local.set 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) (local.set 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) (local.set 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) (local.set 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) (local.set 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) (local.set 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) (local.set 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) (local.set 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) (local.set 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) (local.set 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) (local.set 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) (local.set 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) (local.set 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) (local.set 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) (local.set 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) (local.set 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) (local.set 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) (local.set 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) (local.set 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) (local.set 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) (local.set 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) (local.set 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) (local.set 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) (local.set 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) (local.set 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) (local.set 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) (local.set 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) (local.set 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) (local.set 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) (local.set 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) (local.set 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) (local.set 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) (local.set 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) (local.set 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) (local.set 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) (local.set 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) (local.set 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) (local.set 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) (local.set 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) (local.set 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) (local.set 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) (local.set 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) (local.set 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) (local.set 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) (local.set 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) (local.set 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) (local.set 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) (local.set 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) (local.set 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) (local.set 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) (local.set 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) (local.set 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) (local.set 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) (local.set 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) (local.set 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) (local.set 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) (local.set 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) (local.set 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) (local.set 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) (local.set 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) (local.set 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) (local.set 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) (local.set 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) (local.set 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) (local.set 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) (local.set 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) (local.set 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) (local.set 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) (local.set 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) (local.set 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) (local.set 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) (local.set 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) (local.set 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) (local.set 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) (local.set 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) (local.set 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) (local.set 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) (local.set 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) (local.set 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) (local.set 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) (local.set 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) (local.set 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) (local.set 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) (local.set 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) (local.set 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) (local.set 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) (local.set 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) (local.set 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) (local.set 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) (local.set 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) (local.set 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) (local.set 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) (local.set 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) (local.set 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) (local.set 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) (local.set 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) (local.set 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) (local.set 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) (local.set 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) (local.set 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) (local.set 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) (local.set 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) (local.set 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) (local.set 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) (local.set 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) (local.set 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) (local.set 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) (local.set 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) (local.set 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) (local.set 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) (local.set 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) (local.set 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) (local.set 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) (local.set 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) (local.set 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) (local.set 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) (local.set 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) (local.set 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) (local.set 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) (local.set 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) (local.set 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) (local.set 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) (local.set 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) (local.set 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) (local.set 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) (local.set 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) (local.set 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) (local.set 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) (local.set 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) (local.set 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) (local.set 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) (local.set 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) (local.set 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) (local.set 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) (local.set 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) (local.set 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) (local.set 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) (local.set 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) (local.set 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) (local.set 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) (local.set 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) (local.set 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) (local.set 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) (local.set 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) (local.set 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) (local.set 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) (local.set 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) (local.set 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) (local.set 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) (local.set 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) (local.set 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) (local.set 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) (local.set 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) (local.set 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) (local.set 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) (local.set 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) (local.set 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) (local.set 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) (local.set 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) (local.set 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) (local.set 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) (local.set 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) (local.set 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) (local.set 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) (local.set 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) (local.set 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) (local.set 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) (local.set 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) (local.set 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) (local.set 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) (local.set 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) (local.set 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) (local.set 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) (local.set 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) (local.set 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) (local.set 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) (local.set 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) (local.set 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) (local.set 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) (local.set 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) (local.set 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) (local.set 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) (local.set 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) (local.set 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) (local.set 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) (local.set 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) (local.set 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) (local.set 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) (local.set 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) (local.set 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) (local.set 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) (local.set 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) (local.set 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) (local.set 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) (local.set 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) (local.set 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) (local.set 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) (local.set 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) (local.set 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) (local.set 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) (local.set 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) (local.set 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) (local.set 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) (local.set 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) (local.set 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) (local.set 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) (local.set 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) (local.set 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) (local.set 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) (local.set 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) (local.set 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) (local.set 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) (local.set 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) (local.set 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) (local.set 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) (local.set 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) (local.set 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) (local.set 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) (local.set 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) (local.set 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) (local.set 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) (local.set 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) (local.set 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) (local.set 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) (local.set 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) (local.set 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) (local.set 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) (local.set 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) (local.set 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) (local.set 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) (local.set 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) (local.set 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) (local.set 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) (local.set 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) (local.set 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) (local.set 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) (local.set 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) (local.set 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) (local.set 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) (local.set 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) (local.set 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) (local.set 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) (local.set 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) (local.set 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) (local.set 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) (local.set 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) (local.set 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) (local.set 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) (local.set 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) (local.set 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) (local.set 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) (local.set 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) (local.set 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) (local.set 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) (local.set 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) (local.set 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) (local.set 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) (local.set 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) (local.set 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) (local.set 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) (local.set 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) (local.set 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) (local.set 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) (local.set 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) (local.set 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) (local.set 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) (local.set 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) (local.set 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) (local.set 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) (local.set 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) (local.set 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) (local.set 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) (local.set 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) (local.set 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) (local.set 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) (local.set 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) (local.set 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) (local.set 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) (local.set 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) (local.set 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) (local.set 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) (local.set 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) (local.set 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) (local.set 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) (local.set 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) (local.set 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) (local.set 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) (local.set 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) (local.set 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) (local.set 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) (local.set 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) (local.set 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) (local.set 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) (local.set 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) (local.set 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) (local.set 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) (local.set 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) (local.set 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) (local.set 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) (local.set 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) (local.set 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) (local.set 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) (local.set 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) (local.set 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) (local.set 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) (local.set 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) (local.set 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) (local.set 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) (local.set 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) (local.set 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) (local.set 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) (local.set 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) (local.set 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) (local.set 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) (local.set 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) (local.set 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) (local.set 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) (local.set 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) (local.set 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) (local.set 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) (local.set 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) (local.set 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) (local.set 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) (local.set 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) (local.set 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) (local.set 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) (local.set 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) (local.set 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) (local.set 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) (local.set 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) (local.set 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) (local.set 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) (local.set 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) (local.set 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) (local.set 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) (local.set 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) (local.set 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) (local.set 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) (local.set 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) (local.set 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) (local.set 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) (local.set 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) (local.set 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) (local.set 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) (local.set 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) (local.set 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) (local.set 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) (local.set 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) (local.set 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) (local.set 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) (local.set 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) (local.set 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) (local.set 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) (local.set 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) (local.set 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) (local.set 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) (local.set 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) (local.set 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) (local.set 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) (local.set 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) (local.set 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) (local.set 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) (local.set 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) ;; store the locals back to memory (i64.store offset=0x000 align=1 (i32.const 0) (local.get 0x000)) (i64.store offset=0x001 align=1 (i32.const 0) (local.get 0x001)) (i64.store offset=0x002 align=1 (i32.const 0) (local.get 0x002)) (i64.store offset=0x003 align=1 (i32.const 0) (local.get 0x003)) (i64.store offset=0x004 align=1 (i32.const 0) (local.get 0x004)) (i64.store offset=0x005 align=1 (i32.const 0) (local.get 0x005)) (i64.store offset=0x006 align=1 (i32.const 0) (local.get 0x006)) (i64.store offset=0x007 align=1 (i32.const 0) (local.get 0x007)) (i64.store offset=0x008 align=1 (i32.const 0) (local.get 0x008)) (i64.store offset=0x009 align=1 (i32.const 0) (local.get 0x009)) (i64.store offset=0x00a align=1 (i32.const 0) (local.get 0x00a)) (i64.store offset=0x00b align=1 (i32.const 0) (local.get 0x00b)) (i64.store offset=0x00c align=1 (i32.const 0) (local.get 0x00c)) (i64.store offset=0x00d align=1 (i32.const 0) (local.get 0x00d)) (i64.store offset=0x00e align=1 (i32.const 0) (local.get 0x00e)) (i64.store offset=0x00f align=1 (i32.const 0) (local.get 0x00f)) (i64.store offset=0x010 align=1 (i32.const 0) (local.get 0x010)) (i64.store offset=0x011 align=1 (i32.const 0) (local.get 0x011)) (i64.store offset=0x012 align=1 (i32.const 0) (local.get 0x012)) (i64.store offset=0x013 align=1 (i32.const 0) (local.get 0x013)) (i64.store offset=0x014 align=1 (i32.const 0) (local.get 0x014)) (i64.store offset=0x015 align=1 (i32.const 0) (local.get 0x015)) (i64.store offset=0x016 align=1 (i32.const 0) (local.get 0x016)) (i64.store offset=0x017 align=1 (i32.const 0) (local.get 0x017)) (i64.store offset=0x018 align=1 (i32.const 0) (local.get 0x018)) (i64.store offset=0x019 align=1 (i32.const 0) (local.get 0x019)) (i64.store offset=0x01a align=1 (i32.const 0) (local.get 0x01a)) (i64.store offset=0x01b align=1 (i32.const 0) (local.get 0x01b)) (i64.store offset=0x01c align=1 (i32.const 0) (local.get 0x01c)) (i64.store offset=0x01d align=1 (i32.const 0) (local.get 0x01d)) (i64.store offset=0x01e align=1 (i32.const 0) (local.get 0x01e)) (i64.store offset=0x01f align=1 (i32.const 0) (local.get 0x01f)) (i64.store offset=0x020 align=1 (i32.const 0) (local.get 0x020)) (i64.store offset=0x021 align=1 (i32.const 0) (local.get 0x021)) (i64.store offset=0x022 align=1 (i32.const 0) (local.get 0x022)) (i64.store offset=0x023 align=1 (i32.const 0) (local.get 0x023)) (i64.store offset=0x024 align=1 (i32.const 0) (local.get 0x024)) (i64.store offset=0x025 align=1 (i32.const 0) (local.get 0x025)) (i64.store offset=0x026 align=1 (i32.const 0) (local.get 0x026)) (i64.store offset=0x027 align=1 (i32.const 0) (local.get 0x027)) (i64.store offset=0x028 align=1 (i32.const 0) (local.get 0x028)) (i64.store offset=0x029 align=1 (i32.const 0) (local.get 0x029)) (i64.store offset=0x02a align=1 (i32.const 0) (local.get 0x02a)) (i64.store offset=0x02b align=1 (i32.const 0) (local.get 0x02b)) (i64.store offset=0x02c align=1 (i32.const 0) (local.get 0x02c)) (i64.store offset=0x02d align=1 (i32.const 0) (local.get 0x02d)) (i64.store offset=0x02e align=1 (i32.const 0) (local.get 0x02e)) (i64.store offset=0x02f align=1 (i32.const 0) (local.get 0x02f)) (i64.store offset=0x030 align=1 (i32.const 0) (local.get 0x030)) (i64.store offset=0x031 align=1 (i32.const 0) (local.get 0x031)) (i64.store offset=0x032 align=1 (i32.const 0) (local.get 0x032)) (i64.store offset=0x033 align=1 (i32.const 0) (local.get 0x033)) (i64.store offset=0x034 align=1 (i32.const 0) (local.get 0x034)) (i64.store offset=0x035 align=1 (i32.const 0) (local.get 0x035)) (i64.store offset=0x036 align=1 (i32.const 0) (local.get 0x036)) (i64.store offset=0x037 align=1 (i32.const 0) (local.get 0x037)) (i64.store offset=0x038 align=1 (i32.const 0) (local.get 0x038)) (i64.store offset=0x039 align=1 (i32.const 0) (local.get 0x039)) (i64.store offset=0x03a align=1 (i32.const 0) (local.get 0x03a)) (i64.store offset=0x03b align=1 (i32.const 0) (local.get 0x03b)) (i64.store offset=0x03c align=1 (i32.const 0) (local.get 0x03c)) (i64.store offset=0x03d align=1 (i32.const 0) (local.get 0x03d)) (i64.store offset=0x03e align=1 (i32.const 0) (local.get 0x03e)) (i64.store offset=0x03f align=1 (i32.const 0) (local.get 0x03f)) (i64.store offset=0x040 align=1 (i32.const 0) (local.get 0x040)) (i64.store offset=0x041 align=1 (i32.const 0) (local.get 0x041)) (i64.store offset=0x042 align=1 (i32.const 0) (local.get 0x042)) (i64.store offset=0x043 align=1 (i32.const 0) (local.get 0x043)) (i64.store offset=0x044 align=1 (i32.const 0) (local.get 0x044)) (i64.store offset=0x045 align=1 (i32.const 0) (local.get 0x045)) (i64.store offset=0x046 align=1 (i32.const 0) (local.get 0x046)) (i64.store offset=0x047 align=1 (i32.const 0) (local.get 0x047)) (i64.store offset=0x048 align=1 (i32.const 0) (local.get 0x048)) (i64.store offset=0x049 align=1 (i32.const 0) (local.get 0x049)) (i64.store offset=0x04a align=1 (i32.const 0) (local.get 0x04a)) (i64.store offset=0x04b align=1 (i32.const 0) (local.get 0x04b)) (i64.store offset=0x04c align=1 (i32.const 0) (local.get 0x04c)) (i64.store offset=0x04d align=1 (i32.const 0) (local.get 0x04d)) (i64.store offset=0x04e align=1 (i32.const 0) (local.get 0x04e)) (i64.store offset=0x04f align=1 (i32.const 0) (local.get 0x04f)) (i64.store offset=0x050 align=1 (i32.const 0) (local.get 0x050)) (i64.store offset=0x051 align=1 (i32.const 0) (local.get 0x051)) (i64.store offset=0x052 align=1 (i32.const 0) (local.get 0x052)) (i64.store offset=0x053 align=1 (i32.const 0) (local.get 0x053)) (i64.store offset=0x054 align=1 (i32.const 0) (local.get 0x054)) (i64.store offset=0x055 align=1 (i32.const 0) (local.get 0x055)) (i64.store offset=0x056 align=1 (i32.const 0) (local.get 0x056)) (i64.store offset=0x057 align=1 (i32.const 0) (local.get 0x057)) (i64.store offset=0x058 align=1 (i32.const 0) (local.get 0x058)) (i64.store offset=0x059 align=1 (i32.const 0) (local.get 0x059)) (i64.store offset=0x05a align=1 (i32.const 0) (local.get 0x05a)) (i64.store offset=0x05b align=1 (i32.const 0) (local.get 0x05b)) (i64.store offset=0x05c align=1 (i32.const 0) (local.get 0x05c)) (i64.store offset=0x05d align=1 (i32.const 0) (local.get 0x05d)) (i64.store offset=0x05e align=1 (i32.const 0) (local.get 0x05e)) (i64.store offset=0x05f align=1 (i32.const 0) (local.get 0x05f)) (i64.store offset=0x060 align=1 (i32.const 0) (local.get 0x060)) (i64.store offset=0x061 align=1 (i32.const 0) (local.get 0x061)) (i64.store offset=0x062 align=1 (i32.const 0) (local.get 0x062)) (i64.store offset=0x063 align=1 (i32.const 0) (local.get 0x063)) (i64.store offset=0x064 align=1 (i32.const 0) (local.get 0x064)) (i64.store offset=0x065 align=1 (i32.const 0) (local.get 0x065)) (i64.store offset=0x066 align=1 (i32.const 0) (local.get 0x066)) (i64.store offset=0x067 align=1 (i32.const 0) (local.get 0x067)) (i64.store offset=0x068 align=1 (i32.const 0) (local.get 0x068)) (i64.store offset=0x069 align=1 (i32.const 0) (local.get 0x069)) (i64.store offset=0x06a align=1 (i32.const 0) (local.get 0x06a)) (i64.store offset=0x06b align=1 (i32.const 0) (local.get 0x06b)) (i64.store offset=0x06c align=1 (i32.const 0) (local.get 0x06c)) (i64.store offset=0x06d align=1 (i32.const 0) (local.get 0x06d)) (i64.store offset=0x06e align=1 (i32.const 0) (local.get 0x06e)) (i64.store offset=0x06f align=1 (i32.const 0) (local.get 0x06f)) (i64.store offset=0x070 align=1 (i32.const 0) (local.get 0x070)) (i64.store offset=0x071 align=1 (i32.const 0) (local.get 0x071)) (i64.store offset=0x072 align=1 (i32.const 0) (local.get 0x072)) (i64.store offset=0x073 align=1 (i32.const 0) (local.get 0x073)) (i64.store offset=0x074 align=1 (i32.const 0) (local.get 0x074)) (i64.store offset=0x075 align=1 (i32.const 0) (local.get 0x075)) (i64.store offset=0x076 align=1 (i32.const 0) (local.get 0x076)) (i64.store offset=0x077 align=1 (i32.const 0) (local.get 0x077)) (i64.store offset=0x078 align=1 (i32.const 0) (local.get 0x078)) (i64.store offset=0x079 align=1 (i32.const 0) (local.get 0x079)) (i64.store offset=0x07a align=1 (i32.const 0) (local.get 0x07a)) (i64.store offset=0x07b align=1 (i32.const 0) (local.get 0x07b)) (i64.store offset=0x07c align=1 (i32.const 0) (local.get 0x07c)) (i64.store offset=0x07d align=1 (i32.const 0) (local.get 0x07d)) (i64.store offset=0x07e align=1 (i32.const 0) (local.get 0x07e)) (i64.store offset=0x07f align=1 (i32.const 0) (local.get 0x07f)) (i64.store offset=0x080 align=1 (i32.const 0) (local.get 0x080)) (i64.store offset=0x081 align=1 (i32.const 0) (local.get 0x081)) (i64.store offset=0x082 align=1 (i32.const 0) (local.get 0x082)) (i64.store offset=0x083 align=1 (i32.const 0) (local.get 0x083)) (i64.store offset=0x084 align=1 (i32.const 0) (local.get 0x084)) (i64.store offset=0x085 align=1 (i32.const 0) (local.get 0x085)) (i64.store offset=0x086 align=1 (i32.const 0) (local.get 0x086)) (i64.store offset=0x087 align=1 (i32.const 0) (local.get 0x087)) (i64.store offset=0x088 align=1 (i32.const 0) (local.get 0x088)) (i64.store offset=0x089 align=1 (i32.const 0) (local.get 0x089)) (i64.store offset=0x08a align=1 (i32.const 0) (local.get 0x08a)) (i64.store offset=0x08b align=1 (i32.const 0) (local.get 0x08b)) (i64.store offset=0x08c align=1 (i32.const 0) (local.get 0x08c)) (i64.store offset=0x08d align=1 (i32.const 0) (local.get 0x08d)) (i64.store offset=0x08e align=1 (i32.const 0) (local.get 0x08e)) (i64.store offset=0x08f align=1 (i32.const 0) (local.get 0x08f)) (i64.store offset=0x090 align=1 (i32.const 0) (local.get 0x090)) (i64.store offset=0x091 align=1 (i32.const 0) (local.get 0x091)) (i64.store offset=0x092 align=1 (i32.const 0) (local.get 0x092)) (i64.store offset=0x093 align=1 (i32.const 0) (local.get 0x093)) (i64.store offset=0x094 align=1 (i32.const 0) (local.get 0x094)) (i64.store offset=0x095 align=1 (i32.const 0) (local.get 0x095)) (i64.store offset=0x096 align=1 (i32.const 0) (local.get 0x096)) (i64.store offset=0x097 align=1 (i32.const 0) (local.get 0x097)) (i64.store offset=0x098 align=1 (i32.const 0) (local.get 0x098)) (i64.store offset=0x099 align=1 (i32.const 0) (local.get 0x099)) (i64.store offset=0x09a align=1 (i32.const 0) (local.get 0x09a)) (i64.store offset=0x09b align=1 (i32.const 0) (local.get 0x09b)) (i64.store offset=0x09c align=1 (i32.const 0) (local.get 0x09c)) (i64.store offset=0x09d align=1 (i32.const 0) (local.get 0x09d)) (i64.store offset=0x09e align=1 (i32.const 0) (local.get 0x09e)) (i64.store offset=0x09f align=1 (i32.const 0) (local.get 0x09f)) (i64.store offset=0x0a0 align=1 (i32.const 0) (local.get 0x0a0)) (i64.store offset=0x0a1 align=1 (i32.const 0) (local.get 0x0a1)) (i64.store offset=0x0a2 align=1 (i32.const 0) (local.get 0x0a2)) (i64.store offset=0x0a3 align=1 (i32.const 0) (local.get 0x0a3)) (i64.store offset=0x0a4 align=1 (i32.const 0) (local.get 0x0a4)) (i64.store offset=0x0a5 align=1 (i32.const 0) (local.get 0x0a5)) (i64.store offset=0x0a6 align=1 (i32.const 0) (local.get 0x0a6)) (i64.store offset=0x0a7 align=1 (i32.const 0) (local.get 0x0a7)) (i64.store offset=0x0a8 align=1 (i32.const 0) (local.get 0x0a8)) (i64.store offset=0x0a9 align=1 (i32.const 0) (local.get 0x0a9)) (i64.store offset=0x0aa align=1 (i32.const 0) (local.get 0x0aa)) (i64.store offset=0x0ab align=1 (i32.const 0) (local.get 0x0ab)) (i64.store offset=0x0ac align=1 (i32.const 0) (local.get 0x0ac)) (i64.store offset=0x0ad align=1 (i32.const 0) (local.get 0x0ad)) (i64.store offset=0x0ae align=1 (i32.const 0) (local.get 0x0ae)) (i64.store offset=0x0af align=1 (i32.const 0) (local.get 0x0af)) (i64.store offset=0x0b0 align=1 (i32.const 0) (local.get 0x0b0)) (i64.store offset=0x0b1 align=1 (i32.const 0) (local.get 0x0b1)) (i64.store offset=0x0b2 align=1 (i32.const 0) (local.get 0x0b2)) (i64.store offset=0x0b3 align=1 (i32.const 0) (local.get 0x0b3)) (i64.store offset=0x0b4 align=1 (i32.const 0) (local.get 0x0b4)) (i64.store offset=0x0b5 align=1 (i32.const 0) (local.get 0x0b5)) (i64.store offset=0x0b6 align=1 (i32.const 0) (local.get 0x0b6)) (i64.store offset=0x0b7 align=1 (i32.const 0) (local.get 0x0b7)) (i64.store offset=0x0b8 align=1 (i32.const 0) (local.get 0x0b8)) (i64.store offset=0x0b9 align=1 (i32.const 0) (local.get 0x0b9)) (i64.store offset=0x0ba align=1 (i32.const 0) (local.get 0x0ba)) (i64.store offset=0x0bb align=1 (i32.const 0) (local.get 0x0bb)) (i64.store offset=0x0bc align=1 (i32.const 0) (local.get 0x0bc)) (i64.store offset=0x0bd align=1 (i32.const 0) (local.get 0x0bd)) (i64.store offset=0x0be align=1 (i32.const 0) (local.get 0x0be)) (i64.store offset=0x0bf align=1 (i32.const 0) (local.get 0x0bf)) (i64.store offset=0x0c0 align=1 (i32.const 0) (local.get 0x0c0)) (i64.store offset=0x0c1 align=1 (i32.const 0) (local.get 0x0c1)) (i64.store offset=0x0c2 align=1 (i32.const 0) (local.get 0x0c2)) (i64.store offset=0x0c3 align=1 (i32.const 0) (local.get 0x0c3)) (i64.store offset=0x0c4 align=1 (i32.const 0) (local.get 0x0c4)) (i64.store offset=0x0c5 align=1 (i32.const 0) (local.get 0x0c5)) (i64.store offset=0x0c6 align=1 (i32.const 0) (local.get 0x0c6)) (i64.store offset=0x0c7 align=1 (i32.const 0) (local.get 0x0c7)) (i64.store offset=0x0c8 align=1 (i32.const 0) (local.get 0x0c8)) (i64.store offset=0x0c9 align=1 (i32.const 0) (local.get 0x0c9)) (i64.store offset=0x0ca align=1 (i32.const 0) (local.get 0x0ca)) (i64.store offset=0x0cb align=1 (i32.const 0) (local.get 0x0cb)) (i64.store offset=0x0cc align=1 (i32.const 0) (local.get 0x0cc)) (i64.store offset=0x0cd align=1 (i32.const 0) (local.get 0x0cd)) (i64.store offset=0x0ce align=1 (i32.const 0) (local.get 0x0ce)) (i64.store offset=0x0cf align=1 (i32.const 0) (local.get 0x0cf)) (i64.store offset=0x0d0 align=1 (i32.const 0) (local.get 0x0d0)) (i64.store offset=0x0d1 align=1 (i32.const 0) (local.get 0x0d1)) (i64.store offset=0x0d2 align=1 (i32.const 0) (local.get 0x0d2)) (i64.store offset=0x0d3 align=1 (i32.const 0) (local.get 0x0d3)) (i64.store offset=0x0d4 align=1 (i32.const 0) (local.get 0x0d4)) (i64.store offset=0x0d5 align=1 (i32.const 0) (local.get 0x0d5)) (i64.store offset=0x0d6 align=1 (i32.const 0) (local.get 0x0d6)) (i64.store offset=0x0d7 align=1 (i32.const 0) (local.get 0x0d7)) (i64.store offset=0x0d8 align=1 (i32.const 0) (local.get 0x0d8)) (i64.store offset=0x0d9 align=1 (i32.const 0) (local.get 0x0d9)) (i64.store offset=0x0da align=1 (i32.const 0) (local.get 0x0da)) (i64.store offset=0x0db align=1 (i32.const 0) (local.get 0x0db)) (i64.store offset=0x0dc align=1 (i32.const 0) (local.get 0x0dc)) (i64.store offset=0x0dd align=1 (i32.const 0) (local.get 0x0dd)) (i64.store offset=0x0de align=1 (i32.const 0) (local.get 0x0de)) (i64.store offset=0x0df align=1 (i32.const 0) (local.get 0x0df)) (i64.store offset=0x0e0 align=1 (i32.const 0) (local.get 0x0e0)) (i64.store offset=0x0e1 align=1 (i32.const 0) (local.get 0x0e1)) (i64.store offset=0x0e2 align=1 (i32.const 0) (local.get 0x0e2)) (i64.store offset=0x0e3 align=1 (i32.const 0) (local.get 0x0e3)) (i64.store offset=0x0e4 align=1 (i32.const 0) (local.get 0x0e4)) (i64.store offset=0x0e5 align=1 (i32.const 0) (local.get 0x0e5)) (i64.store offset=0x0e6 align=1 (i32.const 0) (local.get 0x0e6)) (i64.store offset=0x0e7 align=1 (i32.const 0) (local.get 0x0e7)) (i64.store offset=0x0e8 align=1 (i32.const 0) (local.get 0x0e8)) (i64.store offset=0x0e9 align=1 (i32.const 0) (local.get 0x0e9)) (i64.store offset=0x0ea align=1 (i32.const 0) (local.get 0x0ea)) (i64.store offset=0x0eb align=1 (i32.const 0) (local.get 0x0eb)) (i64.store offset=0x0ec align=1 (i32.const 0) (local.get 0x0ec)) (i64.store offset=0x0ed align=1 (i32.const 0) (local.get 0x0ed)) (i64.store offset=0x0ee align=1 (i32.const 0) (local.get 0x0ee)) (i64.store offset=0x0ef align=1 (i32.const 0) (local.get 0x0ef)) (i64.store offset=0x0f0 align=1 (i32.const 0) (local.get 0x0f0)) (i64.store offset=0x0f1 align=1 (i32.const 0) (local.get 0x0f1)) (i64.store offset=0x0f2 align=1 (i32.const 0) (local.get 0x0f2)) (i64.store offset=0x0f3 align=1 (i32.const 0) (local.get 0x0f3)) (i64.store offset=0x0f4 align=1 (i32.const 0) (local.get 0x0f4)) (i64.store offset=0x0f5 align=1 (i32.const 0) (local.get 0x0f5)) (i64.store offset=0x0f6 align=1 (i32.const 0) (local.get 0x0f6)) (i64.store offset=0x0f7 align=1 (i32.const 0) (local.get 0x0f7)) (i64.store offset=0x0f8 align=1 (i32.const 0) (local.get 0x0f8)) (i64.store offset=0x0f9 align=1 (i32.const 0) (local.get 0x0f9)) (i64.store offset=0x0fa align=1 (i32.const 0) (local.get 0x0fa)) (i64.store offset=0x0fb align=1 (i32.const 0) (local.get 0x0fb)) (i64.store offset=0x0fc align=1 (i32.const 0) (local.get 0x0fc)) (i64.store offset=0x0fd align=1 (i32.const 0) (local.get 0x0fd)) (i64.store offset=0x0fe align=1 (i32.const 0) (local.get 0x0fe)) (i64.store offset=0x0ff align=1 (i32.const 0) (local.get 0x0ff)) (i64.store offset=0x100 align=1 (i32.const 0) (local.get 0x100)) (i64.store offset=0x101 align=1 (i32.const 0) (local.get 0x101)) (i64.store offset=0x102 align=1 (i32.const 0) (local.get 0x102)) (i64.store offset=0x103 align=1 (i32.const 0) (local.get 0x103)) (i64.store offset=0x104 align=1 (i32.const 0) (local.get 0x104)) (i64.store offset=0x105 align=1 (i32.const 0) (local.get 0x105)) (i64.store offset=0x106 align=1 (i32.const 0) (local.get 0x106)) (i64.store offset=0x107 align=1 (i32.const 0) (local.get 0x107)) (i64.store offset=0x108 align=1 (i32.const 0) (local.get 0x108)) (i64.store offset=0x109 align=1 (i32.const 0) (local.get 0x109)) (i64.store offset=0x10a align=1 (i32.const 0) (local.get 0x10a)) (i64.store offset=0x10b align=1 (i32.const 0) (local.get 0x10b)) (i64.store offset=0x10c align=1 (i32.const 0) (local.get 0x10c)) (i64.store offset=0x10d align=1 (i32.const 0) (local.get 0x10d)) (i64.store offset=0x10e align=1 (i32.const 0) (local.get 0x10e)) (i64.store offset=0x10f align=1 (i32.const 0) (local.get 0x10f)) (i64.store offset=0x110 align=1 (i32.const 0) (local.get 0x110)) (i64.store offset=0x111 align=1 (i32.const 0) (local.get 0x111)) (i64.store offset=0x112 align=1 (i32.const 0) (local.get 0x112)) (i64.store offset=0x113 align=1 (i32.const 0) (local.get 0x113)) (i64.store offset=0x114 align=1 (i32.const 0) (local.get 0x114)) (i64.store offset=0x115 align=1 (i32.const 0) (local.get 0x115)) (i64.store offset=0x116 align=1 (i32.const 0) (local.get 0x116)) (i64.store offset=0x117 align=1 (i32.const 0) (local.get 0x117)) (i64.store offset=0x118 align=1 (i32.const 0) (local.get 0x118)) (i64.store offset=0x119 align=1 (i32.const 0) (local.get 0x119)) (i64.store offset=0x11a align=1 (i32.const 0) (local.get 0x11a)) (i64.store offset=0x11b align=1 (i32.const 0) (local.get 0x11b)) (i64.store offset=0x11c align=1 (i32.const 0) (local.get 0x11c)) (i64.store offset=0x11d align=1 (i32.const 0) (local.get 0x11d)) (i64.store offset=0x11e align=1 (i32.const 0) (local.get 0x11e)) (i64.store offset=0x11f align=1 (i32.const 0) (local.get 0x11f)) (i64.store offset=0x120 align=1 (i32.const 0) (local.get 0x120)) (i64.store offset=0x121 align=1 (i32.const 0) (local.get 0x121)) (i64.store offset=0x122 align=1 (i32.const 0) (local.get 0x122)) (i64.store offset=0x123 align=1 (i32.const 0) (local.get 0x123)) (i64.store offset=0x124 align=1 (i32.const 0) (local.get 0x124)) (i64.store offset=0x125 align=1 (i32.const 0) (local.get 0x125)) (i64.store offset=0x126 align=1 (i32.const 0) (local.get 0x126)) (i64.store offset=0x127 align=1 (i32.const 0) (local.get 0x127)) (i64.store offset=0x128 align=1 (i32.const 0) (local.get 0x128)) (i64.store offset=0x129 align=1 (i32.const 0) (local.get 0x129)) (i64.store offset=0x12a align=1 (i32.const 0) (local.get 0x12a)) (i64.store offset=0x12b align=1 (i32.const 0) (local.get 0x12b)) (i64.store offset=0x12c align=1 (i32.const 0) (local.get 0x12c)) (i64.store offset=0x12d align=1 (i32.const 0) (local.get 0x12d)) (i64.store offset=0x12e align=1 (i32.const 0) (local.get 0x12e)) (i64.store offset=0x12f align=1 (i32.const 0) (local.get 0x12f)) (i64.store offset=0x130 align=1 (i32.const 0) (local.get 0x130)) (i64.store offset=0x131 align=1 (i32.const 0) (local.get 0x131)) (i64.store offset=0x132 align=1 (i32.const 0) (local.get 0x132)) (i64.store offset=0x133 align=1 (i32.const 0) (local.get 0x133)) (i64.store offset=0x134 align=1 (i32.const 0) (local.get 0x134)) (i64.store offset=0x135 align=1 (i32.const 0) (local.get 0x135)) (i64.store offset=0x136 align=1 (i32.const 0) (local.get 0x136)) (i64.store offset=0x137 align=1 (i32.const 0) (local.get 0x137)) (i64.store offset=0x138 align=1 (i32.const 0) (local.get 0x138)) (i64.store offset=0x139 align=1 (i32.const 0) (local.get 0x139)) (i64.store offset=0x13a align=1 (i32.const 0) (local.get 0x13a)) (i64.store offset=0x13b align=1 (i32.const 0) (local.get 0x13b)) (i64.store offset=0x13c align=1 (i32.const 0) (local.get 0x13c)) (i64.store offset=0x13d align=1 (i32.const 0) (local.get 0x13d)) (i64.store offset=0x13e align=1 (i32.const 0) (local.get 0x13e)) (i64.store offset=0x13f align=1 (i32.const 0) (local.get 0x13f)) (i64.store offset=0x140 align=1 (i32.const 0) (local.get 0x140)) (i64.store offset=0x141 align=1 (i32.const 0) (local.get 0x141)) (i64.store offset=0x142 align=1 (i32.const 0) (local.get 0x142)) (i64.store offset=0x143 align=1 (i32.const 0) (local.get 0x143)) (i64.store offset=0x144 align=1 (i32.const 0) (local.get 0x144)) (i64.store offset=0x145 align=1 (i32.const 0) (local.get 0x145)) (i64.store offset=0x146 align=1 (i32.const 0) (local.get 0x146)) (i64.store offset=0x147 align=1 (i32.const 0) (local.get 0x147)) (i64.store offset=0x148 align=1 (i32.const 0) (local.get 0x148)) (i64.store offset=0x149 align=1 (i32.const 0) (local.get 0x149)) (i64.store offset=0x14a align=1 (i32.const 0) (local.get 0x14a)) (i64.store offset=0x14b align=1 (i32.const 0) (local.get 0x14b)) (i64.store offset=0x14c align=1 (i32.const 0) (local.get 0x14c)) (i64.store offset=0x14d align=1 (i32.const 0) (local.get 0x14d)) (i64.store offset=0x14e align=1 (i32.const 0) (local.get 0x14e)) (i64.store offset=0x14f align=1 (i32.const 0) (local.get 0x14f)) (i64.store offset=0x150 align=1 (i32.const 0) (local.get 0x150)) (i64.store offset=0x151 align=1 (i32.const 0) (local.get 0x151)) (i64.store offset=0x152 align=1 (i32.const 0) (local.get 0x152)) (i64.store offset=0x153 align=1 (i32.const 0) (local.get 0x153)) (i64.store offset=0x154 align=1 (i32.const 0) (local.get 0x154)) (i64.store offset=0x155 align=1 (i32.const 0) (local.get 0x155)) (i64.store offset=0x156 align=1 (i32.const 0) (local.get 0x156)) (i64.store offset=0x157 align=1 (i32.const 0) (local.get 0x157)) (i64.store offset=0x158 align=1 (i32.const 0) (local.get 0x158)) (i64.store offset=0x159 align=1 (i32.const 0) (local.get 0x159)) (i64.store offset=0x15a align=1 (i32.const 0) (local.get 0x15a)) (i64.store offset=0x15b align=1 (i32.const 0) (local.get 0x15b)) (i64.store offset=0x15c align=1 (i32.const 0) (local.get 0x15c)) (i64.store offset=0x15d align=1 (i32.const 0) (local.get 0x15d)) (i64.store offset=0x15e align=1 (i32.const 0) (local.get 0x15e)) (i64.store offset=0x15f align=1 (i32.const 0) (local.get 0x15f)) (i64.store offset=0x160 align=1 (i32.const 0) (local.get 0x160)) (i64.store offset=0x161 align=1 (i32.const 0) (local.get 0x161)) (i64.store offset=0x162 align=1 (i32.const 0) (local.get 0x162)) (i64.store offset=0x163 align=1 (i32.const 0) (local.get 0x163)) (i64.store offset=0x164 align=1 (i32.const 0) (local.get 0x164)) (i64.store offset=0x165 align=1 (i32.const 0) (local.get 0x165)) (i64.store offset=0x166 align=1 (i32.const 0) (local.get 0x166)) (i64.store offset=0x167 align=1 (i32.const 0) (local.get 0x167)) (i64.store offset=0x168 align=1 (i32.const 0) (local.get 0x168)) (i64.store offset=0x169 align=1 (i32.const 0) (local.get 0x169)) (i64.store offset=0x16a align=1 (i32.const 0) (local.get 0x16a)) (i64.store offset=0x16b align=1 (i32.const 0) (local.get 0x16b)) (i64.store offset=0x16c align=1 (i32.const 0) (local.get 0x16c)) (i64.store offset=0x16d align=1 (i32.const 0) (local.get 0x16d)) (i64.store offset=0x16e align=1 (i32.const 0) (local.get 0x16e)) (i64.store offset=0x16f align=1 (i32.const 0) (local.get 0x16f)) (i64.store offset=0x170 align=1 (i32.const 0) (local.get 0x170)) (i64.store offset=0x171 align=1 (i32.const 0) (local.get 0x171)) (i64.store offset=0x172 align=1 (i32.const 0) (local.get 0x172)) (i64.store offset=0x173 align=1 (i32.const 0) (local.get 0x173)) (i64.store offset=0x174 align=1 (i32.const 0) (local.get 0x174)) (i64.store offset=0x175 align=1 (i32.const 0) (local.get 0x175)) (i64.store offset=0x176 align=1 (i32.const 0) (local.get 0x176)) (i64.store offset=0x177 align=1 (i32.const 0) (local.get 0x177)) (i64.store offset=0x178 align=1 (i32.const 0) (local.get 0x178)) (i64.store offset=0x179 align=1 (i32.const 0) (local.get 0x179)) (i64.store offset=0x17a align=1 (i32.const 0) (local.get 0x17a)) (i64.store offset=0x17b align=1 (i32.const 0) (local.get 0x17b)) (i64.store offset=0x17c align=1 (i32.const 0) (local.get 0x17c)) (i64.store offset=0x17d align=1 (i32.const 0) (local.get 0x17d)) (i64.store offset=0x17e align=1 (i32.const 0) (local.get 0x17e)) (i64.store offset=0x17f align=1 (i32.const 0) (local.get 0x17f)) (i64.store offset=0x180 align=1 (i32.const 0) (local.get 0x180)) (i64.store offset=0x181 align=1 (i32.const 0) (local.get 0x181)) (i64.store offset=0x182 align=1 (i32.const 0) (local.get 0x182)) (i64.store offset=0x183 align=1 (i32.const 0) (local.get 0x183)) (i64.store offset=0x184 align=1 (i32.const 0) (local.get 0x184)) (i64.store offset=0x185 align=1 (i32.const 0) (local.get 0x185)) (i64.store offset=0x186 align=1 (i32.const 0) (local.get 0x186)) (i64.store offset=0x187 align=1 (i32.const 0) (local.get 0x187)) (i64.store offset=0x188 align=1 (i32.const 0) (local.get 0x188)) (i64.store offset=0x189 align=1 (i32.const 0) (local.get 0x189)) (i64.store offset=0x18a align=1 (i32.const 0) (local.get 0x18a)) (i64.store offset=0x18b align=1 (i32.const 0) (local.get 0x18b)) (i64.store offset=0x18c align=1 (i32.const 0) (local.get 0x18c)) (i64.store offset=0x18d align=1 (i32.const 0) (local.get 0x18d)) (i64.store offset=0x18e align=1 (i32.const 0) (local.get 0x18e)) (i64.store offset=0x18f align=1 (i32.const 0) (local.get 0x18f)) (i64.store offset=0x190 align=1 (i32.const 0) (local.get 0x190)) (i64.store offset=0x191 align=1 (i32.const 0) (local.get 0x191)) (i64.store offset=0x192 align=1 (i32.const 0) (local.get 0x192)) (i64.store offset=0x193 align=1 (i32.const 0) (local.get 0x193)) (i64.store offset=0x194 align=1 (i32.const 0) (local.get 0x194)) (i64.store offset=0x195 align=1 (i32.const 0) (local.get 0x195)) (i64.store offset=0x196 align=1 (i32.const 0) (local.get 0x196)) (i64.store offset=0x197 align=1 (i32.const 0) (local.get 0x197)) (i64.store offset=0x198 align=1 (i32.const 0) (local.get 0x198)) (i64.store offset=0x199 align=1 (i32.const 0) (local.get 0x199)) (i64.store offset=0x19a align=1 (i32.const 0) (local.get 0x19a)) (i64.store offset=0x19b align=1 (i32.const 0) (local.get 0x19b)) (i64.store offset=0x19c align=1 (i32.const 0) (local.get 0x19c)) (i64.store offset=0x19d align=1 (i32.const 0) (local.get 0x19d)) (i64.store offset=0x19e align=1 (i32.const 0) (local.get 0x19e)) (i64.store offset=0x19f align=1 (i32.const 0) (local.get 0x19f)) (i64.store offset=0x1a0 align=1 (i32.const 0) (local.get 0x1a0)) (i64.store offset=0x1a1 align=1 (i32.const 0) (local.get 0x1a1)) (i64.store offset=0x1a2 align=1 (i32.const 0) (local.get 0x1a2)) (i64.store offset=0x1a3 align=1 (i32.const 0) (local.get 0x1a3)) (i64.store offset=0x1a4 align=1 (i32.const 0) (local.get 0x1a4)) (i64.store offset=0x1a5 align=1 (i32.const 0) (local.get 0x1a5)) (i64.store offset=0x1a6 align=1 (i32.const 0) (local.get 0x1a6)) (i64.store offset=0x1a7 align=1 (i32.const 0) (local.get 0x1a7)) (i64.store offset=0x1a8 align=1 (i32.const 0) (local.get 0x1a8)) (i64.store offset=0x1a9 align=1 (i32.const 0) (local.get 0x1a9)) (i64.store offset=0x1aa align=1 (i32.const 0) (local.get 0x1aa)) (i64.store offset=0x1ab align=1 (i32.const 0) (local.get 0x1ab)) (i64.store offset=0x1ac align=1 (i32.const 0) (local.get 0x1ac)) (i64.store offset=0x1ad align=1 (i32.const 0) (local.get 0x1ad)) (i64.store offset=0x1ae align=1 (i32.const 0) (local.get 0x1ae)) (i64.store offset=0x1af align=1 (i32.const 0) (local.get 0x1af)) (i64.store offset=0x1b0 align=1 (i32.const 0) (local.get 0x1b0)) (i64.store offset=0x1b1 align=1 (i32.const 0) (local.get 0x1b1)) (i64.store offset=0x1b2 align=1 (i32.const 0) (local.get 0x1b2)) (i64.store offset=0x1b3 align=1 (i32.const 0) (local.get 0x1b3)) (i64.store offset=0x1b4 align=1 (i32.const 0) (local.get 0x1b4)) (i64.store offset=0x1b5 align=1 (i32.const 0) (local.get 0x1b5)) (i64.store offset=0x1b6 align=1 (i32.const 0) (local.get 0x1b6)) (i64.store offset=0x1b7 align=1 (i32.const 0) (local.get 0x1b7)) (i64.store offset=0x1b8 align=1 (i32.const 0) (local.get 0x1b8)) (i64.store offset=0x1b9 align=1 (i32.const 0) (local.get 0x1b9)) (i64.store offset=0x1ba align=1 (i32.const 0) (local.get 0x1ba)) (i64.store offset=0x1bb align=1 (i32.const 0) (local.get 0x1bb)) (i64.store offset=0x1bc align=1 (i32.const 0) (local.get 0x1bc)) (i64.store offset=0x1bd align=1 (i32.const 0) (local.get 0x1bd)) (i64.store offset=0x1be align=1 (i32.const 0) (local.get 0x1be)) (i64.store offset=0x1bf align=1 (i32.const 0) (local.get 0x1bf)) (i64.store offset=0x1c0 align=1 (i32.const 0) (local.get 0x1c0)) (i64.store offset=0x1c1 align=1 (i32.const 0) (local.get 0x1c1)) (i64.store offset=0x1c2 align=1 (i32.const 0) (local.get 0x1c2)) (i64.store offset=0x1c3 align=1 (i32.const 0) (local.get 0x1c3)) (i64.store offset=0x1c4 align=1 (i32.const 0) (local.get 0x1c4)) (i64.store offset=0x1c5 align=1 (i32.const 0) (local.get 0x1c5)) (i64.store offset=0x1c6 align=1 (i32.const 0) (local.get 0x1c6)) (i64.store offset=0x1c7 align=1 (i32.const 0) (local.get 0x1c7)) (i64.store offset=0x1c8 align=1 (i32.const 0) (local.get 0x1c8)) (i64.store offset=0x1c9 align=1 (i32.const 0) (local.get 0x1c9)) (i64.store offset=0x1ca align=1 (i32.const 0) (local.get 0x1ca)) (i64.store offset=0x1cb align=1 (i32.const 0) (local.get 0x1cb)) (i64.store offset=0x1cc align=1 (i32.const 0) (local.get 0x1cc)) (i64.store offset=0x1cd align=1 (i32.const 0) (local.get 0x1cd)) (i64.store offset=0x1ce align=1 (i32.const 0) (local.get 0x1ce)) (i64.store offset=0x1cf align=1 (i32.const 0) (local.get 0x1cf)) (i64.store offset=0x1d0 align=1 (i32.const 0) (local.get 0x1d0)) (i64.store offset=0x1d1 align=1 (i32.const 0) (local.get 0x1d1)) (i64.store offset=0x1d2 align=1 (i32.const 0) (local.get 0x1d2)) (i64.store offset=0x1d3 align=1 (i32.const 0) (local.get 0x1d3)) (i64.store offset=0x1d4 align=1 (i32.const 0) (local.get 0x1d4)) (i64.store offset=0x1d5 align=1 (i32.const 0) (local.get 0x1d5)) (i64.store offset=0x1d6 align=1 (i32.const 0) (local.get 0x1d6)) (i64.store offset=0x1d7 align=1 (i32.const 0) (local.get 0x1d7)) (i64.store offset=0x1d8 align=1 (i32.const 0) (local.get 0x1d8)) (i64.store offset=0x1d9 align=1 (i32.const 0) (local.get 0x1d9)) (i64.store offset=0x1da align=1 (i32.const 0) (local.get 0x1da)) (i64.store offset=0x1db align=1 (i32.const 0) (local.get 0x1db)) (i64.store offset=0x1dc align=1 (i32.const 0) (local.get 0x1dc)) (i64.store offset=0x1dd align=1 (i32.const 0) (local.get 0x1dd)) (i64.store offset=0x1de align=1 (i32.const 0) (local.get 0x1de)) (i64.store offset=0x1df align=1 (i32.const 0) (local.get 0x1df)) (i64.store offset=0x1e0 align=1 (i32.const 0) (local.get 0x1e0)) (i64.store offset=0x1e1 align=1 (i32.const 0) (local.get 0x1e1)) (i64.store offset=0x1e2 align=1 (i32.const 0) (local.get 0x1e2)) (i64.store offset=0x1e3 align=1 (i32.const 0) (local.get 0x1e3)) (i64.store offset=0x1e4 align=1 (i32.const 0) (local.get 0x1e4)) (i64.store offset=0x1e5 align=1 (i32.const 0) (local.get 0x1e5)) (i64.store offset=0x1e6 align=1 (i32.const 0) (local.get 0x1e6)) (i64.store offset=0x1e7 align=1 (i32.const 0) (local.get 0x1e7)) (i64.store offset=0x1e8 align=1 (i32.const 0) (local.get 0x1e8)) (i64.store offset=0x1e9 align=1 (i32.const 0) (local.get 0x1e9)) (i64.store offset=0x1ea align=1 (i32.const 0) (local.get 0x1ea)) (i64.store offset=0x1eb align=1 (i32.const 0) (local.get 0x1eb)) (i64.store offset=0x1ec align=1 (i32.const 0) (local.get 0x1ec)) (i64.store offset=0x1ed align=1 (i32.const 0) (local.get 0x1ed)) (i64.store offset=0x1ee align=1 (i32.const 0) (local.get 0x1ee)) (i64.store offset=0x1ef align=1 (i32.const 0) (local.get 0x1ef)) (i64.store offset=0x1f0 align=1 (i32.const 0) (local.get 0x1f0)) (i64.store offset=0x1f1 align=1 (i32.const 0) (local.get 0x1f1)) (i64.store offset=0x1f2 align=1 (i32.const 0) (local.get 0x1f2)) (i64.store offset=0x1f3 align=1 (i32.const 0) (local.get 0x1f3)) (i64.store offset=0x1f4 align=1 (i32.const 0) (local.get 0x1f4)) (i64.store offset=0x1f5 align=1 (i32.const 0) (local.get 0x1f5)) (i64.store offset=0x1f6 align=1 (i32.const 0) (local.get 0x1f6)) (i64.store offset=0x1f7 align=1 (i32.const 0) (local.get 0x1f7)) (i64.store offset=0x1f8 align=1 (i32.const 0) (local.get 0x1f8)) (i64.store offset=0x1f9 align=1 (i32.const 0) (local.get 0x1f9)) (i64.store offset=0x1fa align=1 (i32.const 0) (local.get 0x1fa)) (i64.store offset=0x1fb align=1 (i32.const 0) (local.get 0x1fb)) (i64.store offset=0x1fc align=1 (i32.const 0) (local.get 0x1fc)) (i64.store offset=0x1fd align=1 (i32.const 0) (local.get 0x1fd)) (i64.store offset=0x1fe align=1 (i32.const 0) (local.get 0x1fe)) (i64.store offset=0x1ff align=1 (i32.const 0) (local.get 0x1ff)) (i64.store offset=0x200 align=1 (i32.const 0) (local.get 0x200)) (i64.store offset=0x201 align=1 (i32.const 0) (local.get 0x201)) (i64.store offset=0x202 align=1 (i32.const 0) (local.get 0x202)) (i64.store offset=0x203 align=1 (i32.const 0) (local.get 0x203)) (i64.store offset=0x204 align=1 (i32.const 0) (local.get 0x204)) (i64.store offset=0x205 align=1 (i32.const 0) (local.get 0x205)) (i64.store offset=0x206 align=1 (i32.const 0) (local.get 0x206)) (i64.store offset=0x207 align=1 (i32.const 0) (local.get 0x207)) (i64.store offset=0x208 align=1 (i32.const 0) (local.get 0x208)) (i64.store offset=0x209 align=1 (i32.const 0) (local.get 0x209)) (i64.store offset=0x20a align=1 (i32.const 0) (local.get 0x20a)) (i64.store offset=0x20b align=1 (i32.const 0) (local.get 0x20b)) (i64.store offset=0x20c align=1 (i32.const 0) (local.get 0x20c)) (i64.store offset=0x20d align=1 (i32.const 0) (local.get 0x20d)) (i64.store offset=0x20e align=1 (i32.const 0) (local.get 0x20e)) (i64.store offset=0x20f align=1 (i32.const 0) (local.get 0x20f)) (i64.store offset=0x210 align=1 (i32.const 0) (local.get 0x210)) (i64.store offset=0x211 align=1 (i32.const 0) (local.get 0x211)) (i64.store offset=0x212 align=1 (i32.const 0) (local.get 0x212)) (i64.store offset=0x213 align=1 (i32.const 0) (local.get 0x213)) (i64.store offset=0x214 align=1 (i32.const 0) (local.get 0x214)) (i64.store offset=0x215 align=1 (i32.const 0) (local.get 0x215)) (i64.store offset=0x216 align=1 (i32.const 0) (local.get 0x216)) (i64.store offset=0x217 align=1 (i32.const 0) (local.get 0x217)) (i64.store offset=0x218 align=1 (i32.const 0) (local.get 0x218)) (i64.store offset=0x219 align=1 (i32.const 0) (local.get 0x219)) (i64.store offset=0x21a align=1 (i32.const 0) (local.get 0x21a)) (i64.store offset=0x21b align=1 (i32.const 0) (local.get 0x21b)) (i64.store offset=0x21c align=1 (i32.const 0) (local.get 0x21c)) (i64.store offset=0x21d align=1 (i32.const 0) (local.get 0x21d)) (i64.store offset=0x21e align=1 (i32.const 0) (local.get 0x21e)) (i64.store offset=0x21f align=1 (i32.const 0) (local.get 0x21f)) (i64.store offset=0x220 align=1 (i32.const 0) (local.get 0x220)) (i64.store offset=0x221 align=1 (i32.const 0) (local.get 0x221)) (i64.store offset=0x222 align=1 (i32.const 0) (local.get 0x222)) (i64.store offset=0x223 align=1 (i32.const 0) (local.get 0x223)) (i64.store offset=0x224 align=1 (i32.const 0) (local.get 0x224)) (i64.store offset=0x225 align=1 (i32.const 0) (local.get 0x225)) (i64.store offset=0x226 align=1 (i32.const 0) (local.get 0x226)) (i64.store offset=0x227 align=1 (i32.const 0) (local.get 0x227)) (i64.store offset=0x228 align=1 (i32.const 0) (local.get 0x228)) (i64.store offset=0x229 align=1 (i32.const 0) (local.get 0x229)) (i64.store offset=0x22a align=1 (i32.const 0) (local.get 0x22a)) (i64.store offset=0x22b align=1 (i32.const 0) (local.get 0x22b)) (i64.store offset=0x22c align=1 (i32.const 0) (local.get 0x22c)) (i64.store offset=0x22d align=1 (i32.const 0) (local.get 0x22d)) (i64.store offset=0x22e align=1 (i32.const 0) (local.get 0x22e)) (i64.store offset=0x22f align=1 (i32.const 0) (local.get 0x22f)) (i64.store offset=0x230 align=1 (i32.const 0) (local.get 0x230)) (i64.store offset=0x231 align=1 (i32.const 0) (local.get 0x231)) (i64.store offset=0x232 align=1 (i32.const 0) (local.get 0x232)) (i64.store offset=0x233 align=1 (i32.const 0) (local.get 0x233)) (i64.store offset=0x234 align=1 (i32.const 0) (local.get 0x234)) (i64.store offset=0x235 align=1 (i32.const 0) (local.get 0x235)) (i64.store offset=0x236 align=1 (i32.const 0) (local.get 0x236)) (i64.store offset=0x237 align=1 (i32.const 0) (local.get 0x237)) (i64.store offset=0x238 align=1 (i32.const 0) (local.get 0x238)) (i64.store offset=0x239 align=1 (i32.const 0) (local.get 0x239)) (i64.store offset=0x23a align=1 (i32.const 0) (local.get 0x23a)) (i64.store offset=0x23b align=1 (i32.const 0) (local.get 0x23b)) (i64.store offset=0x23c align=1 (i32.const 0) (local.get 0x23c)) (i64.store offset=0x23d align=1 (i32.const 0) (local.get 0x23d)) (i64.store offset=0x23e align=1 (i32.const 0) (local.get 0x23e)) (i64.store offset=0x23f align=1 (i32.const 0) (local.get 0x23f)) (i64.store offset=0x240 align=1 (i32.const 0) (local.get 0x240)) (i64.store offset=0x241 align=1 (i32.const 0) (local.get 0x241)) (i64.store offset=0x242 align=1 (i32.const 0) (local.get 0x242)) (i64.store offset=0x243 align=1 (i32.const 0) (local.get 0x243)) (i64.store offset=0x244 align=1 (i32.const 0) (local.get 0x244)) (i64.store offset=0x245 align=1 (i32.const 0) (local.get 0x245)) (i64.store offset=0x246 align=1 (i32.const 0) (local.get 0x246)) (i64.store offset=0x247 align=1 (i32.const 0) (local.get 0x247)) (i64.store offset=0x248 align=1 (i32.const 0) (local.get 0x248)) (i64.store offset=0x249 align=1 (i32.const 0) (local.get 0x249)) (i64.store offset=0x24a align=1 (i32.const 0) (local.get 0x24a)) (i64.store offset=0x24b align=1 (i32.const 0) (local.get 0x24b)) (i64.store offset=0x24c align=1 (i32.const 0) (local.get 0x24c)) (i64.store offset=0x24d align=1 (i32.const 0) (local.get 0x24d)) (i64.store offset=0x24e align=1 (i32.const 0) (local.get 0x24e)) (i64.store offset=0x24f align=1 (i32.const 0) (local.get 0x24f)) (i64.store offset=0x250 align=1 (i32.const 0) (local.get 0x250)) (i64.store offset=0x251 align=1 (i32.const 0) (local.get 0x251)) (i64.store offset=0x252 align=1 (i32.const 0) (local.get 0x252)) (i64.store offset=0x253 align=1 (i32.const 0) (local.get 0x253)) (i64.store offset=0x254 align=1 (i32.const 0) (local.get 0x254)) (i64.store offset=0x255 align=1 (i32.const 0) (local.get 0x255)) (i64.store offset=0x256 align=1 (i32.const 0) (local.get 0x256)) (i64.store offset=0x257 align=1 (i32.const 0) (local.get 0x257)) (i64.store offset=0x258 align=1 (i32.const 0) (local.get 0x258)) (i64.store offset=0x259 align=1 (i32.const 0) (local.get 0x259)) (i64.store offset=0x25a align=1 (i32.const 0) (local.get 0x25a)) (i64.store offset=0x25b align=1 (i32.const 0) (local.get 0x25b)) (i64.store offset=0x25c align=1 (i32.const 0) (local.get 0x25c)) (i64.store offset=0x25d align=1 (i32.const 0) (local.get 0x25d)) (i64.store offset=0x25e align=1 (i32.const 0) (local.get 0x25e)) (i64.store offset=0x25f align=1 (i32.const 0) (local.get 0x25f)) (i64.store offset=0x260 align=1 (i32.const 0) (local.get 0x260)) (i64.store offset=0x261 align=1 (i32.const 0) (local.get 0x261)) (i64.store offset=0x262 align=1 (i32.const 0) (local.get 0x262)) (i64.store offset=0x263 align=1 (i32.const 0) (local.get 0x263)) (i64.store offset=0x264 align=1 (i32.const 0) (local.get 0x264)) (i64.store offset=0x265 align=1 (i32.const 0) (local.get 0x265)) (i64.store offset=0x266 align=1 (i32.const 0) (local.get 0x266)) (i64.store offset=0x267 align=1 (i32.const 0) (local.get 0x267)) (i64.store offset=0x268 align=1 (i32.const 0) (local.get 0x268)) (i64.store offset=0x269 align=1 (i32.const 0) (local.get 0x269)) (i64.store offset=0x26a align=1 (i32.const 0) (local.get 0x26a)) (i64.store offset=0x26b align=1 (i32.const 0) (local.get 0x26b)) (i64.store offset=0x26c align=1 (i32.const 0) (local.get 0x26c)) (i64.store offset=0x26d align=1 (i32.const 0) (local.get 0x26d)) (i64.store offset=0x26e align=1 (i32.const 0) (local.get 0x26e)) (i64.store offset=0x26f align=1 (i32.const 0) (local.get 0x26f)) (i64.store offset=0x270 align=1 (i32.const 0) (local.get 0x270)) (i64.store offset=0x271 align=1 (i32.const 0) (local.get 0x271)) (i64.store offset=0x272 align=1 (i32.const 0) (local.get 0x272)) (i64.store offset=0x273 align=1 (i32.const 0) (local.get 0x273)) (i64.store offset=0x274 align=1 (i32.const 0) (local.get 0x274)) (i64.store offset=0x275 align=1 (i32.const 0) (local.get 0x275)) (i64.store offset=0x276 align=1 (i32.const 0) (local.get 0x276)) (i64.store offset=0x277 align=1 (i32.const 0) (local.get 0x277)) (i64.store offset=0x278 align=1 (i32.const 0) (local.get 0x278)) (i64.store offset=0x279 align=1 (i32.const 0) (local.get 0x279)) (i64.store offset=0x27a align=1 (i32.const 0) (local.get 0x27a)) (i64.store offset=0x27b align=1 (i32.const 0) (local.get 0x27b)) (i64.store offset=0x27c align=1 (i32.const 0) (local.get 0x27c)) (i64.store offset=0x27d align=1 (i32.const 0) (local.get 0x27d)) (i64.store offset=0x27e align=1 (i32.const 0) (local.get 0x27e)) (i64.store offset=0x27f align=1 (i32.const 0) (local.get 0x27f)) (i64.store offset=0x280 align=1 (i32.const 0) (local.get 0x280)) (i64.store offset=0x281 align=1 (i32.const 0) (local.get 0x281)) (i64.store offset=0x282 align=1 (i32.const 0) (local.get 0x282)) (i64.store offset=0x283 align=1 (i32.const 0) (local.get 0x283)) (i64.store offset=0x284 align=1 (i32.const 0) (local.get 0x284)) (i64.store offset=0x285 align=1 (i32.const 0) (local.get 0x285)) (i64.store offset=0x286 align=1 (i32.const 0) (local.get 0x286)) (i64.store offset=0x287 align=1 (i32.const 0) (local.get 0x287)) (i64.store offset=0x288 align=1 (i32.const 0) (local.get 0x288)) (i64.store offset=0x289 align=1 (i32.const 0) (local.get 0x289)) (i64.store offset=0x28a align=1 (i32.const 0) (local.get 0x28a)) (i64.store offset=0x28b align=1 (i32.const 0) (local.get 0x28b)) (i64.store offset=0x28c align=1 (i32.const 0) (local.get 0x28c)) (i64.store offset=0x28d align=1 (i32.const 0) (local.get 0x28d)) (i64.store offset=0x28e align=1 (i32.const 0) (local.get 0x28e)) (i64.store offset=0x28f align=1 (i32.const 0) (local.get 0x28f)) (i64.store offset=0x290 align=1 (i32.const 0) (local.get 0x290)) (i64.store offset=0x291 align=1 (i32.const 0) (local.get 0x291)) (i64.store offset=0x292 align=1 (i32.const 0) (local.get 0x292)) (i64.store offset=0x293 align=1 (i32.const 0) (local.get 0x293)) (i64.store offset=0x294 align=1 (i32.const 0) (local.get 0x294)) (i64.store offset=0x295 align=1 (i32.const 0) (local.get 0x295)) (i64.store offset=0x296 align=1 (i32.const 0) (local.get 0x296)) (i64.store offset=0x297 align=1 (i32.const 0) (local.get 0x297)) (i64.store offset=0x298 align=1 (i32.const 0) (local.get 0x298)) (i64.store offset=0x299 align=1 (i32.const 0) (local.get 0x299)) (i64.store offset=0x29a align=1 (i32.const 0) (local.get 0x29a)) (i64.store offset=0x29b align=1 (i32.const 0) (local.get 0x29b)) (i64.store offset=0x29c align=1 (i32.const 0) (local.get 0x29c)) (i64.store offset=0x29d align=1 (i32.const 0) (local.get 0x29d)) (i64.store offset=0x29e align=1 (i32.const 0) (local.get 0x29e)) (i64.store offset=0x29f align=1 (i32.const 0) (local.get 0x29f)) (i64.store offset=0x2a0 align=1 (i32.const 0) (local.get 0x2a0)) (i64.store offset=0x2a1 align=1 (i32.const 0) (local.get 0x2a1)) (i64.store offset=0x2a2 align=1 (i32.const 0) (local.get 0x2a2)) (i64.store offset=0x2a3 align=1 (i32.const 0) (local.get 0x2a3)) (i64.store offset=0x2a4 align=1 (i32.const 0) (local.get 0x2a4)) (i64.store offset=0x2a5 align=1 (i32.const 0) (local.get 0x2a5)) (i64.store offset=0x2a6 align=1 (i32.const 0) (local.get 0x2a6)) (i64.store offset=0x2a7 align=1 (i32.const 0) (local.get 0x2a7)) (i64.store offset=0x2a8 align=1 (i32.const 0) (local.get 0x2a8)) (i64.store offset=0x2a9 align=1 (i32.const 0) (local.get 0x2a9)) (i64.store offset=0x2aa align=1 (i32.const 0) (local.get 0x2aa)) (i64.store offset=0x2ab align=1 (i32.const 0) (local.get 0x2ab)) (i64.store offset=0x2ac align=1 (i32.const 0) (local.get 0x2ac)) (i64.store offset=0x2ad align=1 (i32.const 0) (local.get 0x2ad)) (i64.store offset=0x2ae align=1 (i32.const 0) (local.get 0x2ae)) (i64.store offset=0x2af align=1 (i32.const 0) (local.get 0x2af)) (i64.store offset=0x2b0 align=1 (i32.const 0) (local.get 0x2b0)) (i64.store offset=0x2b1 align=1 (i32.const 0) (local.get 0x2b1)) (i64.store offset=0x2b2 align=1 (i32.const 0) (local.get 0x2b2)) (i64.store offset=0x2b3 align=1 (i32.const 0) (local.get 0x2b3)) (i64.store offset=0x2b4 align=1 (i32.const 0) (local.get 0x2b4)) (i64.store offset=0x2b5 align=1 (i32.const 0) (local.get 0x2b5)) (i64.store offset=0x2b6 align=1 (i32.const 0) (local.get 0x2b6)) (i64.store offset=0x2b7 align=1 (i32.const 0) (local.get 0x2b7)) (i64.store offset=0x2b8 align=1 (i32.const 0) (local.get 0x2b8)) (i64.store offset=0x2b9 align=1 (i32.const 0) (local.get 0x2b9)) (i64.store offset=0x2ba align=1 (i32.const 0) (local.get 0x2ba)) (i64.store offset=0x2bb align=1 (i32.const 0) (local.get 0x2bb)) (i64.store offset=0x2bc align=1 (i32.const 0) (local.get 0x2bc)) (i64.store offset=0x2bd align=1 (i32.const 0) (local.get 0x2bd)) (i64.store offset=0x2be align=1 (i32.const 0) (local.get 0x2be)) (i64.store offset=0x2bf align=1 (i32.const 0) (local.get 0x2bf)) (i64.store offset=0x2c0 align=1 (i32.const 0) (local.get 0x2c0)) (i64.store offset=0x2c1 align=1 (i32.const 0) (local.get 0x2c1)) (i64.store offset=0x2c2 align=1 (i32.const 0) (local.get 0x2c2)) (i64.store offset=0x2c3 align=1 (i32.const 0) (local.get 0x2c3)) (i64.store offset=0x2c4 align=1 (i32.const 0) (local.get 0x2c4)) (i64.store offset=0x2c5 align=1 (i32.const 0) (local.get 0x2c5)) (i64.store offset=0x2c6 align=1 (i32.const 0) (local.get 0x2c6)) (i64.store offset=0x2c7 align=1 (i32.const 0) (local.get 0x2c7)) (i64.store offset=0x2c8 align=1 (i32.const 0) (local.get 0x2c8)) (i64.store offset=0x2c9 align=1 (i32.const 0) (local.get 0x2c9)) (i64.store offset=0x2ca align=1 (i32.const 0) (local.get 0x2ca)) (i64.store offset=0x2cb align=1 (i32.const 0) (local.get 0x2cb)) (i64.store offset=0x2cc align=1 (i32.const 0) (local.get 0x2cc)) (i64.store offset=0x2cd align=1 (i32.const 0) (local.get 0x2cd)) (i64.store offset=0x2ce align=1 (i32.const 0) (local.get 0x2ce)) (i64.store offset=0x2cf align=1 (i32.const 0) (local.get 0x2cf)) (i64.store offset=0x2d0 align=1 (i32.const 0) (local.get 0x2d0)) (i64.store offset=0x2d1 align=1 (i32.const 0) (local.get 0x2d1)) (i64.store offset=0x2d2 align=1 (i32.const 0) (local.get 0x2d2)) (i64.store offset=0x2d3 align=1 (i32.const 0) (local.get 0x2d3)) (i64.store offset=0x2d4 align=1 (i32.const 0) (local.get 0x2d4)) (i64.store offset=0x2d5 align=1 (i32.const 0) (local.get 0x2d5)) (i64.store offset=0x2d6 align=1 (i32.const 0) (local.get 0x2d6)) (i64.store offset=0x2d7 align=1 (i32.const 0) (local.get 0x2d7)) (i64.store offset=0x2d8 align=1 (i32.const 0) (local.get 0x2d8)) (i64.store offset=0x2d9 align=1 (i32.const 0) (local.get 0x2d9)) (i64.store offset=0x2da align=1 (i32.const 0) (local.get 0x2da)) (i64.store offset=0x2db align=1 (i32.const 0) (local.get 0x2db)) (i64.store offset=0x2dc align=1 (i32.const 0) (local.get 0x2dc)) (i64.store offset=0x2dd align=1 (i32.const 0) (local.get 0x2dd)) (i64.store offset=0x2de align=1 (i32.const 0) (local.get 0x2de)) (i64.store offset=0x2df align=1 (i32.const 0) (local.get 0x2df)) (i64.store offset=0x2e0 align=1 (i32.const 0) (local.get 0x2e0)) (i64.store offset=0x2e1 align=1 (i32.const 0) (local.get 0x2e1)) (i64.store offset=0x2e2 align=1 (i32.const 0) (local.get 0x2e2)) (i64.store offset=0x2e3 align=1 (i32.const 0) (local.get 0x2e3)) (i64.store offset=0x2e4 align=1 (i32.const 0) (local.get 0x2e4)) (i64.store offset=0x2e5 align=1 (i32.const 0) (local.get 0x2e5)) (i64.store offset=0x2e6 align=1 (i32.const 0) (local.get 0x2e6)) (i64.store offset=0x2e7 align=1 (i32.const 0) (local.get 0x2e7)) (i64.store offset=0x2e8 align=1 (i32.const 0) (local.get 0x2e8)) (i64.store offset=0x2e9 align=1 (i32.const 0) (local.get 0x2e9)) (i64.store offset=0x2ea align=1 (i32.const 0) (local.get 0x2ea)) (i64.store offset=0x2eb align=1 (i32.const 0) (local.get 0x2eb)) (i64.store offset=0x2ec align=1 (i32.const 0) (local.get 0x2ec)) (i64.store offset=0x2ed align=1 (i32.const 0) (local.get 0x2ed)) (i64.store offset=0x2ee align=1 (i32.const 0) (local.get 0x2ee)) (i64.store offset=0x2ef align=1 (i32.const 0) (local.get 0x2ef)) (i64.store offset=0x2f0 align=1 (i32.const 0) (local.get 0x2f0)) (i64.store offset=0x2f1 align=1 (i32.const 0) (local.get 0x2f1)) (i64.store offset=0x2f2 align=1 (i32.const 0) (local.get 0x2f2)) (i64.store offset=0x2f3 align=1 (i32.const 0) (local.get 0x2f3)) (i64.store offset=0x2f4 align=1 (i32.const 0) (local.get 0x2f4)) (i64.store offset=0x2f5 align=1 (i32.const 0) (local.get 0x2f5)) (i64.store offset=0x2f6 align=1 (i32.const 0) (local.get 0x2f6)) (i64.store offset=0x2f7 align=1 (i32.const 0) (local.get 0x2f7)) (i64.store offset=0x2f8 align=1 (i32.const 0) (local.get 0x2f8)) (i64.store offset=0x2f9 align=1 (i32.const 0) (local.get 0x2f9)) (i64.store offset=0x2fa align=1 (i32.const 0) (local.get 0x2fa)) (i64.store offset=0x2fb align=1 (i32.const 0) (local.get 0x2fb)) (i64.store offset=0x2fc align=1 (i32.const 0) (local.get 0x2fc)) (i64.store offset=0x2fd align=1 (i32.const 0) (local.get 0x2fd)) (i64.store offset=0x2fe align=1 (i32.const 0) (local.get 0x2fe)) (i64.store offset=0x2ff align=1 (i32.const 0) (local.get 0x2ff)) (i64.store offset=0x300 align=1 (i32.const 0) (local.get 0x300)) (i64.store offset=0x301 align=1 (i32.const 0) (local.get 0x301)) (i64.store offset=0x302 align=1 (i32.const 0) (local.get 0x302)) (i64.store offset=0x303 align=1 (i32.const 0) (local.get 0x303)) (i64.store offset=0x304 align=1 (i32.const 0) (local.get 0x304)) (i64.store offset=0x305 align=1 (i32.const 0) (local.get 0x305)) (i64.store offset=0x306 align=1 (i32.const 0) (local.get 0x306)) (i64.store offset=0x307 align=1 (i32.const 0) (local.get 0x307)) (i64.store offset=0x308 align=1 (i32.const 0) (local.get 0x308)) (i64.store offset=0x309 align=1 (i32.const 0) (local.get 0x309)) (i64.store offset=0x30a align=1 (i32.const 0) (local.get 0x30a)) (i64.store offset=0x30b align=1 (i32.const 0) (local.get 0x30b)) (i64.store offset=0x30c align=1 (i32.const 0) (local.get 0x30c)) (i64.store offset=0x30d align=1 (i32.const 0) (local.get 0x30d)) (i64.store offset=0x30e align=1 (i32.const 0) (local.get 0x30e)) (i64.store offset=0x30f align=1 (i32.const 0) (local.get 0x30f)) (i64.store offset=0x310 align=1 (i32.const 0) (local.get 0x310)) (i64.store offset=0x311 align=1 (i32.const 0) (local.get 0x311)) (i64.store offset=0x312 align=1 (i32.const 0) (local.get 0x312)) (i64.store offset=0x313 align=1 (i32.const 0) (local.get 0x313)) (i64.store offset=0x314 align=1 (i32.const 0) (local.get 0x314)) (i64.store offset=0x315 align=1 (i32.const 0) (local.get 0x315)) (i64.store offset=0x316 align=1 (i32.const 0) (local.get 0x316)) (i64.store offset=0x317 align=1 (i32.const 0) (local.get 0x317)) (i64.store offset=0x318 align=1 (i32.const 0) (local.get 0x318)) (i64.store offset=0x319 align=1 (i32.const 0) (local.get 0x319)) (i64.store offset=0x31a align=1 (i32.const 0) (local.get 0x31a)) (i64.store offset=0x31b align=1 (i32.const 0) (local.get 0x31b)) (i64.store offset=0x31c align=1 (i32.const 0) (local.get 0x31c)) (i64.store offset=0x31d align=1 (i32.const 0) (local.get 0x31d)) (i64.store offset=0x31e align=1 (i32.const 0) (local.get 0x31e)) (i64.store offset=0x31f align=1 (i32.const 0) (local.get 0x31f)) (i64.store offset=0x320 align=1 (i32.const 0) (local.get 0x320)) (i64.store offset=0x321 align=1 (i32.const 0) (local.get 0x321)) (i64.store offset=0x322 align=1 (i32.const 0) (local.get 0x322)) (i64.store offset=0x323 align=1 (i32.const 0) (local.get 0x323)) (i64.store offset=0x324 align=1 (i32.const 0) (local.get 0x324)) (i64.store offset=0x325 align=1 (i32.const 0) (local.get 0x325)) (i64.store offset=0x326 align=1 (i32.const 0) (local.get 0x326)) (i64.store offset=0x327 align=1 (i32.const 0) (local.get 0x327)) (i64.store offset=0x328 align=1 (i32.const 0) (local.get 0x328)) (i64.store offset=0x329 align=1 (i32.const 0) (local.get 0x329)) (i64.store offset=0x32a align=1 (i32.const 0) (local.get 0x32a)) (i64.store offset=0x32b align=1 (i32.const 0) (local.get 0x32b)) (i64.store offset=0x32c align=1 (i32.const 0) (local.get 0x32c)) (i64.store offset=0x32d align=1 (i32.const 0) (local.get 0x32d)) (i64.store offset=0x32e align=1 (i32.const 0) (local.get 0x32e)) (i64.store offset=0x32f align=1 (i32.const 0) (local.get 0x32f)) (i64.store offset=0x330 align=1 (i32.const 0) (local.get 0x330)) (i64.store offset=0x331 align=1 (i32.const 0) (local.get 0x331)) (i64.store offset=0x332 align=1 (i32.const 0) (local.get 0x332)) (i64.store offset=0x333 align=1 (i32.const 0) (local.get 0x333)) (i64.store offset=0x334 align=1 (i32.const 0) (local.get 0x334)) (i64.store offset=0x335 align=1 (i32.const 0) (local.get 0x335)) (i64.store offset=0x336 align=1 (i32.const 0) (local.get 0x336)) (i64.store offset=0x337 align=1 (i32.const 0) (local.get 0x337)) (i64.store offset=0x338 align=1 (i32.const 0) (local.get 0x338)) (i64.store offset=0x339 align=1 (i32.const 0) (local.get 0x339)) (i64.store offset=0x33a align=1 (i32.const 0) (local.get 0x33a)) (i64.store offset=0x33b align=1 (i32.const 0) (local.get 0x33b)) (i64.store offset=0x33c align=1 (i32.const 0) (local.get 0x33c)) (i64.store offset=0x33d align=1 (i32.const 0) (local.get 0x33d)) (i64.store offset=0x33e align=1 (i32.const 0) (local.get 0x33e)) (i64.store offset=0x33f align=1 (i32.const 0) (local.get 0x33f)) (i64.store offset=0x340 align=1 (i32.const 0) (local.get 0x340)) (i64.store offset=0x341 align=1 (i32.const 0) (local.get 0x341)) (i64.store offset=0x342 align=1 (i32.const 0) (local.get 0x342)) (i64.store offset=0x343 align=1 (i32.const 0) (local.get 0x343)) (i64.store offset=0x344 align=1 (i32.const 0) (local.get 0x344)) (i64.store offset=0x345 align=1 (i32.const 0) (local.get 0x345)) (i64.store offset=0x346 align=1 (i32.const 0) (local.get 0x346)) (i64.store offset=0x347 align=1 (i32.const 0) (local.get 0x347)) (i64.store offset=0x348 align=1 (i32.const 0) (local.get 0x348)) (i64.store offset=0x349 align=1 (i32.const 0) (local.get 0x349)) (i64.store offset=0x34a align=1 (i32.const 0) (local.get 0x34a)) (i64.store offset=0x34b align=1 (i32.const 0) (local.get 0x34b)) (i64.store offset=0x34c align=1 (i32.const 0) (local.get 0x34c)) (i64.store offset=0x34d align=1 (i32.const 0) (local.get 0x34d)) (i64.store offset=0x34e align=1 (i32.const 0) (local.get 0x34e)) (i64.store offset=0x34f align=1 (i32.const 0) (local.get 0x34f)) (i64.store offset=0x350 align=1 (i32.const 0) (local.get 0x350)) (i64.store offset=0x351 align=1 (i32.const 0) (local.get 0x351)) (i64.store offset=0x352 align=1 (i32.const 0) (local.get 0x352)) (i64.store offset=0x353 align=1 (i32.const 0) (local.get 0x353)) (i64.store offset=0x354 align=1 (i32.const 0) (local.get 0x354)) (i64.store offset=0x355 align=1 (i32.const 0) (local.get 0x355)) (i64.store offset=0x356 align=1 (i32.const 0) (local.get 0x356)) (i64.store offset=0x357 align=1 (i32.const 0) (local.get 0x357)) (i64.store offset=0x358 align=1 (i32.const 0) (local.get 0x358)) (i64.store offset=0x359 align=1 (i32.const 0) (local.get 0x359)) (i64.store offset=0x35a align=1 (i32.const 0) (local.get 0x35a)) (i64.store offset=0x35b align=1 (i32.const 0) (local.get 0x35b)) (i64.store offset=0x35c align=1 (i32.const 0) (local.get 0x35c)) (i64.store offset=0x35d align=1 (i32.const 0) (local.get 0x35d)) (i64.store offset=0x35e align=1 (i32.const 0) (local.get 0x35e)) (i64.store offset=0x35f align=1 (i32.const 0) (local.get 0x35f)) (i64.store offset=0x360 align=1 (i32.const 0) (local.get 0x360)) (i64.store offset=0x361 align=1 (i32.const 0) (local.get 0x361)) (i64.store offset=0x362 align=1 (i32.const 0) (local.get 0x362)) (i64.store offset=0x363 align=1 (i32.const 0) (local.get 0x363)) (i64.store offset=0x364 align=1 (i32.const 0) (local.get 0x364)) (i64.store offset=0x365 align=1 (i32.const 0) (local.get 0x365)) (i64.store offset=0x366 align=1 (i32.const 0) (local.get 0x366)) (i64.store offset=0x367 align=1 (i32.const 0) (local.get 0x367)) (i64.store offset=0x368 align=1 (i32.const 0) (local.get 0x368)) (i64.store offset=0x369 align=1 (i32.const 0) (local.get 0x369)) (i64.store offset=0x36a align=1 (i32.const 0) (local.get 0x36a)) (i64.store offset=0x36b align=1 (i32.const 0) (local.get 0x36b)) (i64.store offset=0x36c align=1 (i32.const 0) (local.get 0x36c)) (i64.store offset=0x36d align=1 (i32.const 0) (local.get 0x36d)) (i64.store offset=0x36e align=1 (i32.const 0) (local.get 0x36e)) (i64.store offset=0x36f align=1 (i32.const 0) (local.get 0x36f)) (i64.store offset=0x370 align=1 (i32.const 0) (local.get 0x370)) (i64.store offset=0x371 align=1 (i32.const 0) (local.get 0x371)) (i64.store offset=0x372 align=1 (i32.const 0) (local.get 0x372)) (i64.store offset=0x373 align=1 (i32.const 0) (local.get 0x373)) (i64.store offset=0x374 align=1 (i32.const 0) (local.get 0x374)) (i64.store offset=0x375 align=1 (i32.const 0) (local.get 0x375)) (i64.store offset=0x376 align=1 (i32.const 0) (local.get 0x376)) (i64.store offset=0x377 align=1 (i32.const 0) (local.get 0x377)) (i64.store offset=0x378 align=1 (i32.const 0) (local.get 0x378)) (i64.store offset=0x379 align=1 (i32.const 0) (local.get 0x379)) (i64.store offset=0x37a align=1 (i32.const 0) (local.get 0x37a)) (i64.store offset=0x37b align=1 (i32.const 0) (local.get 0x37b)) (i64.store offset=0x37c align=1 (i32.const 0) (local.get 0x37c)) (i64.store offset=0x37d align=1 (i32.const 0) (local.get 0x37d)) (i64.store offset=0x37e align=1 (i32.const 0) (local.get 0x37e)) (i64.store offset=0x37f align=1 (i32.const 0) (local.get 0x37f)) (i64.store offset=0x380 align=1 (i32.const 0) (local.get 0x380)) (i64.store offset=0x381 align=1 (i32.const 0) (local.get 0x381)) (i64.store offset=0x382 align=1 (i32.const 0) (local.get 0x382)) (i64.store offset=0x383 align=1 (i32.const 0) (local.get 0x383)) (i64.store offset=0x384 align=1 (i32.const 0) (local.get 0x384)) (i64.store offset=0x385 align=1 (i32.const 0) (local.get 0x385)) (i64.store offset=0x386 align=1 (i32.const 0) (local.get 0x386)) (i64.store offset=0x387 align=1 (i32.const 0) (local.get 0x387)) (i64.store offset=0x388 align=1 (i32.const 0) (local.get 0x388)) (i64.store offset=0x389 align=1 (i32.const 0) (local.get 0x389)) (i64.store offset=0x38a align=1 (i32.const 0) (local.get 0x38a)) (i64.store offset=0x38b align=1 (i32.const 0) (local.get 0x38b)) (i64.store offset=0x38c align=1 (i32.const 0) (local.get 0x38c)) (i64.store offset=0x38d align=1 (i32.const 0) (local.get 0x38d)) (i64.store offset=0x38e align=1 (i32.const 0) (local.get 0x38e)) (i64.store offset=0x38f align=1 (i32.const 0) (local.get 0x38f)) (i64.store offset=0x390 align=1 (i32.const 0) (local.get 0x390)) (i64.store offset=0x391 align=1 (i32.const 0) (local.get 0x391)) (i64.store offset=0x392 align=1 (i32.const 0) (local.get 0x392)) (i64.store offset=0x393 align=1 (i32.const 0) (local.get 0x393)) (i64.store offset=0x394 align=1 (i32.const 0) (local.get 0x394)) (i64.store offset=0x395 align=1 (i32.const 0) (local.get 0x395)) (i64.store offset=0x396 align=1 (i32.const 0) (local.get 0x396)) (i64.store offset=0x397 align=1 (i32.const 0) (local.get 0x397)) (i64.store offset=0x398 align=1 (i32.const 0) (local.get 0x398)) (i64.store offset=0x399 align=1 (i32.const 0) (local.get 0x399)) (i64.store offset=0x39a align=1 (i32.const 0) (local.get 0x39a)) (i64.store offset=0x39b align=1 (i32.const 0) (local.get 0x39b)) (i64.store offset=0x39c align=1 (i32.const 0) (local.get 0x39c)) (i64.store offset=0x39d align=1 (i32.const 0) (local.get 0x39d)) (i64.store offset=0x39e align=1 (i32.const 0) (local.get 0x39e)) (i64.store offset=0x39f align=1 (i32.const 0) (local.get 0x39f)) (i64.store offset=0x3a0 align=1 (i32.const 0) (local.get 0x3a0)) (i64.store offset=0x3a1 align=1 (i32.const 0) (local.get 0x3a1)) (i64.store offset=0x3a2 align=1 (i32.const 0) (local.get 0x3a2)) (i64.store offset=0x3a3 align=1 (i32.const 0) (local.get 0x3a3)) (i64.store offset=0x3a4 align=1 (i32.const 0) (local.get 0x3a4)) (i64.store offset=0x3a5 align=1 (i32.const 0) (local.get 0x3a5)) (i64.store offset=0x3a6 align=1 (i32.const 0) (local.get 0x3a6)) (i64.store offset=0x3a7 align=1 (i32.const 0) (local.get 0x3a7)) (i64.store offset=0x3a8 align=1 (i32.const 0) (local.get 0x3a8)) (i64.store offset=0x3a9 align=1 (i32.const 0) (local.get 0x3a9)) (i64.store offset=0x3aa align=1 (i32.const 0) (local.get 0x3aa)) (i64.store offset=0x3ab align=1 (i32.const 0) (local.get 0x3ab)) (i64.store offset=0x3ac align=1 (i32.const 0) (local.get 0x3ac)) (i64.store offset=0x3ad align=1 (i32.const 0) (local.get 0x3ad)) (i64.store offset=0x3ae align=1 (i32.const 0) (local.get 0x3ae)) (i64.store offset=0x3af align=1 (i32.const 0) (local.get 0x3af)) (i64.store offset=0x3b0 align=1 (i32.const 0) (local.get 0x3b0)) (i64.store offset=0x3b1 align=1 (i32.const 0) (local.get 0x3b1)) (i64.store offset=0x3b2 align=1 (i32.const 0) (local.get 0x3b2)) (i64.store offset=0x3b3 align=1 (i32.const 0) (local.get 0x3b3)) (i64.store offset=0x3b4 align=1 (i32.const 0) (local.get 0x3b4)) (i64.store offset=0x3b5 align=1 (i32.const 0) (local.get 0x3b5)) (i64.store offset=0x3b6 align=1 (i32.const 0) (local.get 0x3b6)) (i64.store offset=0x3b7 align=1 (i32.const 0) (local.get 0x3b7)) (i64.store offset=0x3b8 align=1 (i32.const 0) (local.get 0x3b8)) (i64.store offset=0x3b9 align=1 (i32.const 0) (local.get 0x3b9)) (i64.store offset=0x3ba align=1 (i32.const 0) (local.get 0x3ba)) (i64.store offset=0x3bb align=1 (i32.const 0) (local.get 0x3bb)) (i64.store offset=0x3bc align=1 (i32.const 0) (local.get 0x3bc)) (i64.store offset=0x3bd align=1 (i32.const 0) (local.get 0x3bd)) (i64.store offset=0x3be align=1 (i32.const 0) (local.get 0x3be)) (i64.store offset=0x3bf align=1 (i32.const 0) (local.get 0x3bf)) (i64.store offset=0x3c0 align=1 (i32.const 0) (local.get 0x3c0)) (i64.store offset=0x3c1 align=1 (i32.const 0) (local.get 0x3c1)) (i64.store offset=0x3c2 align=1 (i32.const 0) (local.get 0x3c2)) (i64.store offset=0x3c3 align=1 (i32.const 0) (local.get 0x3c3)) (i64.store offset=0x3c4 align=1 (i32.const 0) (local.get 0x3c4)) (i64.store offset=0x3c5 align=1 (i32.const 0) (local.get 0x3c5)) (i64.store offset=0x3c6 align=1 (i32.const 0) (local.get 0x3c6)) (i64.store offset=0x3c7 align=1 (i32.const 0) (local.get 0x3c7)) (i64.store offset=0x3c8 align=1 (i32.const 0) (local.get 0x3c8)) (i64.store offset=0x3c9 align=1 (i32.const 0) (local.get 0x3c9)) (i64.store offset=0x3ca align=1 (i32.const 0) (local.get 0x3ca)) (i64.store offset=0x3cb align=1 (i32.const 0) (local.get 0x3cb)) (i64.store offset=0x3cc align=1 (i32.const 0) (local.get 0x3cc)) (i64.store offset=0x3cd align=1 (i32.const 0) (local.get 0x3cd)) (i64.store offset=0x3ce align=1 (i32.const 0) (local.get 0x3ce)) (i64.store offset=0x3cf align=1 (i32.const 0) (local.get 0x3cf)) (i64.store offset=0x3d0 align=1 (i32.const 0) (local.get 0x3d0)) (i64.store offset=0x3d1 align=1 (i32.const 0) (local.get 0x3d1)) (i64.store offset=0x3d2 align=1 (i32.const 0) (local.get 0x3d2)) (i64.store offset=0x3d3 align=1 (i32.const 0) (local.get 0x3d3)) (i64.store offset=0x3d4 align=1 (i32.const 0) (local.get 0x3d4)) (i64.store offset=0x3d5 align=1 (i32.const 0) (local.get 0x3d5)) (i64.store offset=0x3d6 align=1 (i32.const 0) (local.get 0x3d6)) (i64.store offset=0x3d7 align=1 (i32.const 0) (local.get 0x3d7)) (i64.store offset=0x3d8 align=1 (i32.const 0) (local.get 0x3d8)) (i64.store offset=0x3d9 align=1 (i32.const 0) (local.get 0x3d9)) (i64.store offset=0x3da align=1 (i32.const 0) (local.get 0x3da)) (i64.store offset=0x3db align=1 (i32.const 0) (local.get 0x3db)) (i64.store offset=0x3dc align=1 (i32.const 0) (local.get 0x3dc)) (i64.store offset=0x3dd align=1 (i32.const 0) (local.get 0x3dd)) (i64.store offset=0x3de align=1 (i32.const 0) (local.get 0x3de)) (i64.store offset=0x3df align=1 (i32.const 0) (local.get 0x3df)) (i64.store offset=0x3e0 align=1 (i32.const 0) (local.get 0x3e0)) (i64.store offset=0x3e1 align=1 (i32.const 0) (local.get 0x3e1)) (i64.store offset=0x3e2 align=1 (i32.const 0) (local.get 0x3e2)) (i64.store offset=0x3e3 align=1 (i32.const 0) (local.get 0x3e3)) (i64.store offset=0x3e4 align=1 (i32.const 0) (local.get 0x3e4)) (i64.store offset=0x3e5 align=1 (i32.const 0) (local.get 0x3e5)) (i64.store offset=0x3e6 align=1 (i32.const 0) (local.get 0x3e6)) (i64.store offset=0x3e7 align=1 (i32.const 0) (local.get 0x3e7)) (i64.store offset=0x3e8 align=1 (i32.const 0) (local.get 0x3e8)) (i64.store offset=0x3e9 align=1 (i32.const 0) (local.get 0x3e9)) (i64.store offset=0x3ea align=1 (i32.const 0) (local.get 0x3ea)) (i64.store offset=0x3eb align=1 (i32.const 0) (local.get 0x3eb)) (i64.store offset=0x3ec align=1 (i32.const 0) (local.get 0x3ec)) (i64.store offset=0x3ed align=1 (i32.const 0) (local.get 0x3ed)) (i64.store offset=0x3ee align=1 (i32.const 0) (local.get 0x3ee)) (i64.store offset=0x3ef align=1 (i32.const 0) (local.get 0x3ef)) (i64.store offset=0x3f0 align=1 (i32.const 0) (local.get 0x3f0)) (i64.store offset=0x3f1 align=1 (i32.const 0) (local.get 0x3f1)) (i64.store offset=0x3f2 align=1 (i32.const 0) (local.get 0x3f2)) (i64.store offset=0x3f3 align=1 (i32.const 0) (local.get 0x3f3)) (i64.store offset=0x3f4 align=1 (i32.const 0) (local.get 0x3f4)) (i64.store offset=0x3f5 align=1 (i32.const 0) (local.get 0x3f5)) (i64.store offset=0x3f6 align=1 (i32.const 0) (local.get 0x3f6)) (i64.store offset=0x3f7 align=1 (i32.const 0) (local.get 0x3f7)) (i64.store offset=0x3f8 align=1 (i32.const 0) (local.get 0x3f8)) (i64.store offset=0x3f9 align=1 (i32.const 0) (local.get 0x3f9)) (i64.store offset=0x3fa align=1 (i32.const 0) (local.get 0x3fa)) (i64.store offset=0x3fb align=1 (i32.const 0) (local.get 0x3fb)) (i64.store offset=0x3fc align=1 (i32.const 0) (local.get 0x3fc)) (i64.store offset=0x3fd align=1 (i32.const 0) (local.get 0x3fd)) (i64.store offset=0x3fe align=1 (i32.const 0) (local.get 0x3fe)) (i64.store offset=0x3ff align=1 (i32.const 0) (local.get 0x3ff)) (i64.store offset=0x400 align=1 (i32.const 0) (local.get 0x400)) (i64.store offset=0x401 align=1 (i32.const 0) (local.get 0x401)) (i64.store offset=0x402 align=1 (i32.const 0) (local.get 0x402)) (i64.store offset=0x403 align=1 (i32.const 0) (local.get 0x403)) (i64.store offset=0x404 align=1 (i32.const 0) (local.get 0x404)) (i64.store offset=0x405 align=1 (i32.const 0) (local.get 0x405)) (i64.store offset=0x406 align=1 (i32.const 0) (local.get 0x406)) (i64.store offset=0x407 align=1 (i32.const 0) (local.get 0x407)) (i64.store offset=0x408 align=1 (i32.const 0) (local.get 0x408)) (i64.store offset=0x409 align=1 (i32.const 0) (local.get 0x409)) (i64.store offset=0x40a align=1 (i32.const 0) (local.get 0x40a)) (i64.store offset=0x40b align=1 (i32.const 0) (local.get 0x40b)) (i64.store offset=0x40c align=1 (i32.const 0) (local.get 0x40c)) (i64.store offset=0x40d align=1 (i32.const 0) (local.get 0x40d)) (i64.store offset=0x40e align=1 (i32.const 0) (local.get 0x40e)) (i64.store offset=0x40f align=1 (i32.const 0) (local.get 0x40f)) (i64.store offset=0x410 align=1 (i32.const 0) (local.get 0x410)) (i64.store offset=0x411 align=1 (i32.const 0) (local.get 0x411)) (i64.store offset=0x412 align=1 (i32.const 0) (local.get 0x412)) (i64.store offset=0x413 align=1 (i32.const 0) (local.get 0x413)) (i64.store offset=0x414 align=1 (i32.const 0) (local.get 0x414)) (i64.store offset=0x415 align=1 (i32.const 0) (local.get 0x415)) (i64.store offset=0x416 align=1 (i32.const 0) (local.get 0x416)) (i64.store offset=0x417 align=1 (i32.const 0) (local.get 0x417)) (i64.store offset=0x418 align=1 (i32.const 0) (local.get 0x418)) (i64.store offset=0x419 align=1 (i32.const 0) (local.get 0x419)) (i64.store offset=0x41a align=1 (i32.const 0) (local.get 0x41a)) (i64.store offset=0x41b align=1 (i32.const 0) (local.get 0x41b)) (i64.store offset=0x41c align=1 (i32.const 0) (local.get 0x41c)) (i64.store offset=0x41d align=1 (i32.const 0) (local.get 0x41d)) (i64.store offset=0x41e align=1 (i32.const 0) (local.get 0x41e)) (i64.store offset=0x41f align=1 (i32.const 0) (local.get 0x41f)) ) ) (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/spec/stack.wast ================================================ (module (func (export "fac-expr") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.get $n) (local.set $i) (i64.const 1) (local.set $res) (block $done (loop $loop (local.get $i) (i64.const 0) (i64.eq) (if (then (br $done)) (else (local.get $i) (local.get $res) (i64.mul) (local.set $res) (local.get $i) (i64.const 1) (i64.sub) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) local.get $n local.set $i i64.const 1 local.set $res block $done loop $loop local.get $i i64.const 0 i64.eq if $body br $done else $body local.get $i local.get $res i64.mul local.set $res local.get $i i64.const 1 i64.sub local.set $i end $body br $loop end $loop end $done local.get $res ) (func (export "fac-mixed") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (i64.eq (local.get $i) (i64.const 0)) (if (then (br $done)) (else (i64.mul (local.get $i) (local.get $res)) (local.set $res) (i64.sub (local.get $i) (i64.const 1)) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-mixed-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) block $done loop $loop (i64.eq (local.get $i) (i64.const 0)) if br $done else (i64.mul (local.get $i) (local.get $res)) local.set $res (i64.sub (local.get $i) (i64.const 1)) local.set $i end br $loop end end local.get $res ) (global $temp (mut i32) (i32.const 0)) (func $add_one_to_global (result i32) (local i32) (global.set $temp (i32.add (i32.const 1) (global.get $temp))) (global.get $temp) ) (func $add_one_to_global_and_drop (drop (call $add_one_to_global)) ) (func (export "not-quite-a-tree") (result i32) call $add_one_to_global call $add_one_to_global call $add_one_to_global_and_drop i32.add ) ) (assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "not-quite-a-tree") (i32.const 3)) (assert_return (invoke "not-quite-a-tree") (i32.const 9)) ;; Syntax of flat call_indirect (module (type $proc (func)) (table 1 funcref) (func (block i32.const 0 call_indirect) (loop i32.const 0 call_indirect) (if (i32.const 0) (then i32.const 0 call_indirect)) (if (i32.const 0) (then i32.const 0 call_indirect) (else i32.const 0 call_indirect) ) (block i32.const 0 call_indirect (type $proc)) (loop i32.const 0 call_indirect (type $proc)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc))) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)) (else i32.const 0 call_indirect (type $proc)) ) (block i32.const 0 i32.const 0 call_indirect (param i32)) (loop i32.const 0 i32.const 0 call_indirect (param i32)) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32))) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)) (else i32.const 0 i32.const 0 call_indirect (param i32)) ) (block (result i32) i32.const 0 call_indirect (result i32)) (drop) (loop (result i32) i32.const 0 call_indirect (result i32)) (drop) (if (result i32) (i32.const 0) (then i32.const 0 call_indirect (result i32)) (else i32.const 0 call_indirect (result i32)) ) (drop) (block i32.const 0 call_indirect (type $proc) (param) (result)) (loop i32.const 0 call_indirect (type $proc) (param) (result)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (result)) ) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (param) (result)) (else i32.const 0 call_indirect (type $proc) (param) (result) (result)) ) block i32.const 0 call_indirect end loop i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end block i32.const 0 call_indirect (type $proc) end loop i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) else i32.const 0 call_indirect (type $proc) end block i32.const 0 i32.const 0 call_indirect (param i32) end loop i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) else i32.const 0 i32.const 0 call_indirect (param i32) end block (result i32) i32.const 0 call_indirect (result i32) end drop loop (result i32) i32.const 0 call_indirect (result i32) end drop i32.const 0 if (result i32) i32.const 0 call_indirect (result i32) else i32.const 0 call_indirect (result i32) end drop block i32.const 0 call_indirect (type $proc) (param) (result) end loop i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) else i32.const 0 call_indirect (type $proc) (param) (param) (result) (result) end i32.const 0 call_indirect ) ) ================================================ FILE: Test/WebAssembly/spec/start.wast ================================================ (assert_invalid (module (func) (start 1)) "unknown function" ) (assert_invalid (module (func $main (result i32) (return (i32.const 0))) (start $main) ) "start function" ) (assert_invalid (module (func $main (param $a i32)) (start $main) ) "start function" ) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start $main) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start 2) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 1))) (start 1) ) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 2))) (start $main) ) (module (func $print (import "spectest" "print")) (start $print) ) (assert_trap (module (func $main (unreachable)) (start $main)) "unreachable" ) (assert_malformed (module quote "(module (func $a (unreachable)) (func $b (unreachable)) (start $a) (start $b))") "multiple start sections" ) ================================================ FILE: Test/WebAssembly/spec/store.wast ================================================ ;; Store operator as the argument of control constructs and instructions (module (memory 1) (func (export "as-block-value") (block (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-loop-value") (loop (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-br-value") (block (br 0 (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-br_if-value") (block (br_if 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-br_if-value-cond") (block (br_if 0 (i32.const 6) (i32.store (i32.const 0) (i32.const 1))) ) ) (func (export "as-br_table-value") (block (br_table 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-return-value") (return (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-if-then") (if (i32.const 1) (then (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-if-else") (if (i32.const 0) (then) (else (i32.store (i32.const 0) (i32.const 1)))) ) ) (assert_return (invoke "as-block-value")) (assert_return (invoke "as-loop-value")) (assert_return (invoke "as-br-value")) (assert_return (invoke "as-br_if-value")) (assert_return (invoke "as-br_if-value-cond")) (assert_return (invoke "as-br_table-value")) (assert_return (invoke "as-return-value")) (assert_return (invoke "as-if-then")) (assert_return (invoke "as-if-else")) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store32 (local.get 0) (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i64.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) ;; store should have no retval (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty (i32.const 0) (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-block (i32.const 0) (i32.const 0) (block (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-block (i32.const 0) (block (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-else (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-return (return (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-return (return (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-select (select (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-select (select (i32.const 0) (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-call (call 1 (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-call (call 1 (i32.const 0) (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-address-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/spec/switch.wast ================================================ (module ;; Statement switch (func (export "stmt") (param $i i32) (result i32) (local $j i32) (local.set $j (i32.const 100)) (block $switch (block $7 (block $default (block $6 (block $5 (block $4 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (local.get $i) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (local.set $j (i32.sub (i32.const 0) (local.get $i))) (br $switch) ) ;; 4 (br $switch) ) ;; 5 (local.set $j (i32.const 101)) (br $switch) ) ;; 6 (local.set $j (i32.const 101)) ;; fallthrough ) ;; default (local.set $j (i32.const 102)) ) ;; 7 ;; fallthrough ) (return (local.get $j)) ) ;; Expression switch (func (export "expr") (param $i i64) (result i64) (local $j i64) (local.set $j (i64.const 100)) (return (block $switch (result i64) (block $7 (block $default (block $4 (block $5 (block $6 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (i32.wrap_i64 (local.get $i)) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (br $switch (i64.sub (i64.const 0) (local.get $i))) ) ;; 6 (local.set $j (i64.const 101)) ;; fallthrough ) ;; 4 ;; fallthrough ) ;; 5 ;; fallthrough ) ;; default (br $switch (local.get $j)) ) ;; 7 (i64.const -5) ) ) ) ;; Argument switch (func (export "arg") (param $i i32) (result i32) (return (block $2 (result i32) (i32.add (i32.const 10) (block $1 (result i32) (i32.add (i32.const 100) (block $0 (result i32) (i32.add (i32.const 1000) (block $default (result i32) (br_table $0 $1 $2 $default (i32.mul (i32.const 2) (local.get $i)) (i32.and (i32.const 3) (local.get $i)) ) ) ) ) ) ) ) ) ) ) ;; Corner cases (func (export "corner") (result i32) (block (br_table 0 (i32.const 0)) ) (i32.const 1) ) ) (assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) (assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) (assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) (assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) (assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) (assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) (assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) (assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) (assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) (assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) (assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) (assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) (assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) (assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) (assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) (assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) (assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) (assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) (assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) (assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) (assert_return (invoke "corner") (i32.const 1)) (assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") ================================================ FILE: Test/WebAssembly/spec/table-sub.wast ================================================ (assert_invalid (module (table $t1 10 funcref) (table $t2 10 externref) (func $f (table.copy $t1 $t2 (i32.const 0) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 funcref) (elem $el externref) (func $f (table.init $t $el (i32.const 0) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/table.wast ================================================ ;; Test table section structure (module (table 0 funcref)) (module (table 1 funcref)) (module (table 0 0 funcref)) (module (table 0 1 funcref)) (module (table 1 256 funcref)) (module (table 0 65536 funcref)) (module (table 0 0xffff_ffff funcref)) (module (table 0 funcref) (table 0 funcref)) (module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table") (assert_invalid (module (table 1 0 funcref)) "size minimum must not be greater than maximum" ) (assert_invalid (module (table 0xffff_ffff 0 funcref)) "size minimum must not be greater than maximum" ) (assert_malformed (module quote "(table 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0x1_0000_0000 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0 0x1_0000_0000 funcref)") "i32 constant out of range" ) ;; Duplicate table identifiers (assert_malformed (module quote "(table $foo 1 funcref)" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(import \"\" \"\" (table $foo 1 funcref))") "duplicate table") ================================================ FILE: Test/WebAssembly/spec/table_copy.wast ================================================ ;; ;; Generated by ../meta/generate_table_copy.js ;; DO NOT EDIT THIS FILE. CHANGE THE SOURCE AND REGENERATE. ;; (module (func (export "ef0") (result i32) (i32.const 0)) (func (export "ef1") (result i32) (i32.const 1)) (func (export "ef2") (result i32) (i32.const 2)) (func (export "ef3") (result i32) (i32.const 3)) (func (export "ef4") (result i32) (i32.const 4)) ) (register "a") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (nop)) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 13) (i32.const 2) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 25) (i32.const 15) (i32.const 2))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 13) (i32.const 25) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 14)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 20) (i32.const 22) (i32.const 4))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 25) (i32.const 1) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 27)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 10) (i32.const 12) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 10)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 11)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t0 (i32.const 12) (i32.const 10) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 12)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 17)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 18)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t1) (i32.const 3) func 1 3 1 4) (elem (table $t1) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t0 (i32.const 10) (i32.const 0) (i32.const 20))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 4)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 1)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 22)) (i32.const 7)) (assert_return (invoke "check_t1" (i32.const 23)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 24)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (nop)) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 13) (i32.const 2) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 25) (i32.const 15) (i32.const 2))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 13) (i32.const 25) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 14)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 20) (i32.const 22) (i32.const 4))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 25) (i32.const 1) (i32.const 3))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 26)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 27)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 10) (i32.const 12) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 10)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 11)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t1 $t1 (i32.const 12) (i32.const 10) (i32.const 7))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 12)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 17)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 18)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6)) (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (elem (table $t0) (i32.const 3) func 1 3 1 4) (elem (table $t0) (i32.const 11) func 6 3 2 5 7) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.copy $t0 $t1 (i32.const 10) (i32.const 0) (i32.const 20))) (func (export "check_t0") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) (func (export "check_t1") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4)) (assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 11)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 13)) (i32.const 1)) (assert_return (invoke "check_t1" (i32.const 14)) (i32.const 4)) (assert_return (invoke "check_t1" (i32.const 15)) (i32.const 1)) (assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element") (assert_return (invoke "check_t1" (i32.const 22)) (i32.const 7)) (assert_return (invoke "check_t1" (i32.const 23)) (i32.const 5)) (assert_return (invoke "check_t1" (i32.const 24)) (i32.const 2)) (assert_return (invoke "check_t1" (i32.const 25)) (i32.const 3)) (assert_return (invoke "check_t1" (i32.const 26)) (i32.const 6)) (assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 28) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 25) (i32.const 6)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 25) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 30) (i32.const 15) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 31) (i32.const 15) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 15) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 30) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t0 $t0 (i32.const 31) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 28) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 25) (i32.const 6)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 25) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 30) (i32.const 15) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 31) (i32.const 15) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 15) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 30) (i32.const 30) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.copy $t1 $t0 (i32.const 31) (i32.const 31) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 0) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 0) (i32.const 16)) "out of bounds table access") (assert_return (invoke "test" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test" (i32.const 2)) (i32.const 2)) (assert_return (invoke "test" (i32.const 3)) (i32.const 3)) (assert_return (invoke "test" (i32.const 4)) (i32.const 4)) (assert_return (invoke "test" (i32.const 5)) (i32.const 5)) (assert_return (invoke "test" (i32.const 6)) (i32.const 6)) (assert_return (invoke "test" (i32.const 7)) (i32.const 7)) (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 0) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 23) (i32.const 0) (i32.const 15)) "out of bounds table access") (assert_return (invoke "test" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test" (i32.const 2)) (i32.const 2)) (assert_return (invoke "test" (i32.const 3)) (i32.const 3)) (assert_return (invoke "test" (i32.const 4)) (i32.const 4)) (assert_return (invoke "test" (i32.const 5)) (i32.const 5)) (assert_return (invoke "test" (i32.const 6)) (i32.const 6)) (assert_return (invoke "test" (i32.const 7)) (i32.const 7)) (assert_return (invoke "test" (i32.const 8)) (i32.const 8)) (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 24) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_return (invoke "test" (i32.const 24)) (i32.const 0)) (assert_return (invoke "test" (i32.const 25)) (i32.const 1)) (assert_return (invoke "test" (i32.const 26)) (i32.const 2)) (assert_return (invoke "test" (i32.const 27)) (i32.const 3)) (assert_return (invoke "test" (i32.const 28)) (i32.const 4)) (assert_return (invoke "test" (i32.const 29)) (i32.const 5)) (assert_return (invoke "test" (i32.const 30)) (i32.const 6)) (assert_return (invoke "test" (i32.const 31)) (i32.const 7)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 23) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 23) (i32.const 15)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_return (invoke "test" (i32.const 23)) (i32.const 0)) (assert_return (invoke "test" (i32.const 24)) (i32.const 1)) (assert_return (invoke "test" (i32.const 25)) (i32.const 2)) (assert_return (invoke "test" (i32.const 26)) (i32.const 3)) (assert_return (invoke "test" (i32.const 27)) (i32.const 4)) (assert_return (invoke "test" (i32.const 28)) (i32.const 5)) (assert_return (invoke "test" (i32.const 29)) (i32.const 6)) (assert_return (invoke "test" (i32.const 30)) (i32.const 7)) (assert_return (invoke "test" (i32.const 31)) (i32.const 8)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 11) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 11) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_return (invoke "test" (i32.const 11)) (i32.const 0)) (assert_return (invoke "test" (i32.const 12)) (i32.const 1)) (assert_return (invoke "test" (i32.const 13)) (i32.const 2)) (assert_return (invoke "test" (i32.const 14)) (i32.const 3)) (assert_return (invoke "test" (i32.const 15)) (i32.const 4)) (assert_return (invoke "test" (i32.const 16)) (i32.const 5)) (assert_return (invoke "test" (i32.const 17)) (i32.const 6)) (assert_return (invoke "test" (i32.const 18)) (i32.const 7)) (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 24) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 11) (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_return (invoke "test" (i32.const 24)) (i32.const 0)) (assert_return (invoke "test" (i32.const 25)) (i32.const 1)) (assert_return (invoke "test" (i32.const 26)) (i32.const 2)) (assert_return (invoke "test" (i32.const 27)) (i32.const 3)) (assert_return (invoke "test" (i32.const 28)) (i32.const 4)) (assert_return (invoke "test" (i32.const 29)) (i32.const 5)) (assert_return (invoke "test" (i32.const 30)) (i32.const 6)) (assert_return (invoke "test" (i32.const 31)) (i32.const 7)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 21) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 21) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_return (invoke "test" (i32.const 21)) (i32.const 0)) (assert_return (invoke "test" (i32.const 22)) (i32.const 1)) (assert_return (invoke "test" (i32.const 23)) (i32.const 2)) (assert_return (invoke "test" (i32.const 24)) (i32.const 3)) (assert_return (invoke "test" (i32.const 25)) (i32.const 4)) (assert_return (invoke "test" (i32.const 26)) (i32.const 5)) (assert_return (invoke "test" (i32.const 27)) (i32.const 6)) (assert_return (invoke "test" (i32.const 28)) (i32.const 7)) (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 24) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 21) (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_return (invoke "test" (i32.const 24)) (i32.const 0)) (assert_return (invoke "test" (i32.const 25)) (i32.const 1)) (assert_return (invoke "test" (i32.const 26)) (i32.const 2)) (assert_return (invoke "test" (i32.const 27)) (i32.const 3)) (assert_return (invoke "test" (i32.const 28)) (i32.const 4)) (assert_return (invoke "test" (i32.const 29)) (i32.const 5)) (assert_return (invoke "test" (i32.const 30)) (i32.const 6)) (assert_return (invoke "test" (i32.const 31)) (i32.const 7)) (module (type (func (result i32))) (table 32 64 funcref) (elem (i32.const 21) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 21) (i32.const 21) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_return (invoke "test" (i32.const 21)) (i32.const 0)) (assert_return (invoke "test" (i32.const 22)) (i32.const 1)) (assert_return (invoke "test" (i32.const 23)) (i32.const 2)) (assert_return (invoke "test" (i32.const 24)) (i32.const 3)) (assert_return (invoke "test" (i32.const 25)) (i32.const 4)) (assert_return (invoke "test" (i32.const 26)) (i32.const 5)) (assert_return (invoke "test" (i32.const 27)) (i32.const 6)) (assert_return (invoke "test" (i32.const 28)) (i32.const 7)) (assert_return (invoke "test" (i32.const 29)) (i32.const 8)) (assert_return (invoke "test" (i32.const 30)) (i32.const 9)) (assert_return (invoke "test" (i32.const 31)) (i32.const 10)) (module (type (func (result i32))) (table 128 128 funcref) (elem (i32.const 112) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 112) (i32.const 4294967264)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_return (invoke "test" (i32.const 112)) (i32.const 0)) (assert_return (invoke "test" (i32.const 113)) (i32.const 1)) (assert_return (invoke "test" (i32.const 114)) (i32.const 2)) (assert_return (invoke "test" (i32.const 115)) (i32.const 3)) (assert_return (invoke "test" (i32.const 116)) (i32.const 4)) (assert_return (invoke "test" (i32.const 117)) (i32.const 5)) (assert_return (invoke "test" (i32.const 118)) (i32.const 6)) (assert_return (invoke "test" (i32.const 119)) (i32.const 7)) (assert_return (invoke "test" (i32.const 120)) (i32.const 8)) (assert_return (invoke "test" (i32.const 121)) (i32.const 9)) (assert_return (invoke "test" (i32.const 122)) (i32.const 10)) (assert_return (invoke "test" (i32.const 123)) (i32.const 11)) (assert_return (invoke "test" (i32.const 124)) (i32.const 12)) (assert_return (invoke "test" (i32.const 125)) (i32.const 13)) (assert_return (invoke "test" (i32.const 126)) (i32.const 14)) (assert_return (invoke "test" (i32.const 127)) (i32.const 15)) (module (type (func (result i32))) (table 128 128 funcref) (elem (i32.const 0) $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len)))) (assert_trap (invoke "run" (i32.const 112) (i32.const 0) (i32.const 4294967264)) "out of bounds table access") (assert_return (invoke "test" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test" (i32.const 2)) (i32.const 2)) (assert_return (invoke "test" (i32.const 3)) (i32.const 3)) (assert_return (invoke "test" (i32.const 4)) (i32.const 4)) (assert_return (invoke "test" (i32.const 5)) (i32.const 5)) (assert_return (invoke "test" (i32.const 6)) (i32.const 6)) (assert_return (invoke "test" (i32.const 7)) (i32.const 7)) (assert_return (invoke "test" (i32.const 8)) (i32.const 8)) (assert_return (invoke "test" (i32.const 9)) (i32.const 9)) (assert_return (invoke "test" (i32.const 10)) (i32.const 10)) (assert_return (invoke "test" (i32.const 11)) (i32.const 11)) (assert_return (invoke "test" (i32.const 12)) (i32.const 12)) (assert_return (invoke "test" (i32.const 13)) (i32.const 13)) (assert_return (invoke "test" (i32.const 14)) (i32.const 14)) (assert_return (invoke "test" (i32.const 15)) (i32.const 15)) (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_trap (invoke "test" (i32.const 112)) "uninitialized element") (assert_trap (invoke "test" (i32.const 113)) "uninitialized element") (assert_trap (invoke "test" (i32.const 114)) "uninitialized element") (assert_trap (invoke "test" (i32.const 115)) "uninitialized element") (assert_trap (invoke "test" (i32.const 116)) "uninitialized element") (assert_trap (invoke "test" (i32.const 117)) "uninitialized element") (assert_trap (invoke "test" (i32.const 118)) "uninitialized element") (assert_trap (invoke "test" (i32.const 119)) "uninitialized element") (assert_trap (invoke "test" (i32.const 120)) "uninitialized element") (assert_trap (invoke "test" (i32.const 121)) "uninitialized element") (assert_trap (invoke "test" (i32.const 122)) "uninitialized element") (assert_trap (invoke "test" (i32.const 123)) "uninitialized element") (assert_trap (invoke "test" (i32.const 124)) "uninitialized element") (assert_trap (invoke "test" (i32.const 125)) "uninitialized element") (assert_trap (invoke "test" (i32.const 126)) "uninitialized element") (assert_trap (invoke "test" (i32.const 127)) "uninitialized element") ================================================ FILE: Test/WebAssembly/spec/table_fill.wast ================================================ (module (table $t 10 externref) (func (export "fill") (param $i i32) (param $r externref) (param $n i32) (table.fill $t (local.get $i) (local.get $r) (local.get $n)) ) (func (export "get") (param $i i32) (result externref) (table.get $t (local.get $i)) ) ) (assert_return (invoke "get" (i32.const 1)) (ref.null extern)) (assert_return (invoke "get" (i32.const 2)) (ref.null extern)) (assert_return (invoke "get" (i32.const 3)) (ref.null extern)) (assert_return (invoke "get" (i32.const 4)) (ref.null extern)) (assert_return (invoke "get" (i32.const 5)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 2) (ref.extern 1) (i32.const 3))) (assert_return (invoke "get" (i32.const 1)) (ref.null extern)) (assert_return (invoke "get" (i32.const 2)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 3)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 5)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 4) (ref.extern 2) (i32.const 2))) (assert_return (invoke "get" (i32.const 3)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 5)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 6)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 4) (ref.extern 3) (i32.const 0))) (assert_return (invoke "get" (i32.const 3)) (ref.extern 1)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 5)) (ref.extern 2)) (assert_return (invoke "fill" (i32.const 8) (ref.extern 4) (i32.const 2))) (assert_return (invoke "get" (i32.const 7)) (ref.null extern)) (assert_return (invoke "get" (i32.const 8)) (ref.extern 4)) (assert_return (invoke "get" (i32.const 9)) (ref.extern 4)) (assert_return (invoke "fill" (i32.const 9) (ref.null extern) (i32.const 1))) (assert_return (invoke "get" (i32.const 8)) (ref.extern 4)) (assert_return (invoke "get" (i32.const 9)) (ref.null extern)) (assert_return (invoke "fill" (i32.const 10) (ref.extern 5) (i32.const 0))) (assert_return (invoke "get" (i32.const 9)) (ref.null extern)) (assert_trap (invoke "fill" (i32.const 8) (ref.extern 6) (i32.const 3)) "out of bounds table access" ) (assert_return (invoke "get" (i32.const 7)) (ref.null extern)) (assert_return (invoke "get" (i32.const 8)) (ref.extern 4)) (assert_return (invoke "get" (i32.const 9)) (ref.null extern)) (assert_trap (invoke "fill" (i32.const 11) (ref.null extern) (i32.const 0)) "out of bounds table access" ) (assert_trap (invoke "fill" (i32.const 11) (ref.null extern) (i32.const 10)) "out of bounds table access" ) ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-value-length-empty-vs-i32-i32 (table.fill $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (table.fill $t (ref.null extern) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-value-empty-vs (table.fill $t (i32.const 1) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-length-empty-vs-i32 (table.fill $t (i32.const 1) (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-index-f32-vs-i32 (table.fill $t (f32.const 1) (ref.null extern) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 funcref) (func $type-value-vs-funcref (param $r externref) (table.fill $t (i32.const 1) (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-length-f32-vs-i32 (table.fill $t (i32.const 1) (ref.null extern) (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 externref) (table $t2 1 funcref) (func $type-value-externref-vs-funcref-multi (param $r externref) (table.fill $t2 (i32.const 0) (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-empty-vs-num (result i32) (table.fill $t (i32.const 0) (ref.null extern) (i32.const 1)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/table_get.wast ================================================ (module (table $t2 2 externref) (table $t3 3 funcref) (elem (table $t3) (i32.const 1) func $dummy) (func $dummy) (func (export "init") (param $r externref) (table.set $t2 (i32.const 1) (local.get $r)) (table.set $t3 (i32.const 2) (table.get $t3 (i32.const 1))) ) (func (export "get-externref") (param $i i32) (result externref) (table.get $t2 (local.get $i)) ) (func $f3 (export "get-funcref") (param $i i32) (result funcref) (table.get $t3 (local.get $i)) ) (func (export "is_null-funcref") (param $i i32) (result i32) (ref.is_null (call $f3 (local.get $i))) ) ) (invoke "init" (ref.extern 1)) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "get-externref" (i32.const 1)) (ref.extern 1)) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_return (invoke "is_null-funcref" (i32.const 1)) (i32.const 0)) (assert_return (invoke "is_null-funcref" (i32.const 2)) (i32.const 0)) (assert_trap (invoke "get-externref" (i32.const 2)) "out of bounds table access") (assert_trap (invoke "get-funcref" (i32.const 3)) "out of bounds table access") (assert_trap (invoke "get-externref" (i32.const -1)) "out of bounds table access") (assert_trap (invoke "get-funcref" (i32.const -1)) "out of bounds table access") ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (result externref) (table.get $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-f32-vs-i32 (result externref) (table.get $t (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-externref-vs-empty (table.get $t (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-externref-vs-funcref (result funcref) (table.get $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 funcref) (table $t2 1 externref) (func $type-result-externref-vs-funcref-multi (result funcref) (table.get $t2 (i32.const 0)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/table_grow.wast ================================================ (module (table $t 0 externref) (func (export "get") (param $i i32) (result externref) (table.get $t (local.get $i))) (func (export "set") (param $i i32) (param $r externref) (table.set $t (local.get $i) (local.get $r))) (func (export "grow") (param $sz i32) (param $init externref) (result i32) (table.grow $t (local.get $init) (local.get $sz)) ) (func (export "size") (result i32) (table.size $t)) ) (assert_return (invoke "size") (i32.const 0)) (assert_trap (invoke "set" (i32.const 0) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 0)) "out of bounds table access") (assert_return (invoke "grow" (i32.const 1) (ref.null extern)) (i32.const 0)) (assert_return (invoke "size") (i32.const 1)) (assert_return (invoke "get" (i32.const 0)) (ref.null extern)) (assert_return (invoke "set" (i32.const 0) (ref.extern 2))) (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) (assert_trap (invoke "set" (i32.const 1) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 1)) "out of bounds table access") (assert_return (invoke "grow" (i32.const 4) (ref.extern 3)) (i32.const 1)) (assert_return (invoke "size") (i32.const 5)) (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) (assert_return (invoke "set" (i32.const 0) (ref.extern 2))) (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) (assert_return (invoke "get" (i32.const 1)) (ref.extern 3)) (assert_return (invoke "get" (i32.const 4)) (ref.extern 3)) (assert_return (invoke "set" (i32.const 4) (ref.extern 4))) (assert_return (invoke "get" (i32.const 4)) (ref.extern 4)) (assert_trap (invoke "set" (i32.const 5) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 5)) "out of bounds table access") ;; Reject growing to size outside i32 value range (module (table $t 0x10 funcref) (elem declare func $f) (func $f (export "grow") (result i32) (table.grow $t (ref.func $f) (i32.const 0xffff_fff0)) ) ) (assert_return (invoke "grow") (i32.const -1)) (module (table $t 0 externref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null extern) (local.get 0)) ) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 800)) (i32.const 3)) (module (table $t 0 10 externref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null extern) (local.get 0)) ) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) (module (table $t 10 funcref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null func) (local.get 0)) ) (elem declare func 1) (func (export "check-table-null") (param i32 i32) (result funcref) (local funcref) (local.set 2 (ref.func 1)) (block (loop (local.set 2 (table.get $t (local.get 0))) (br_if 1 (i32.eqz (ref.is_null (local.get 2)))) (br_if 1 (i32.ge_u (local.get 0) (local.get 1))) (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br_if 0 (i32.le_u (local.get 0) (local.get 1))) ) ) (local.get 2) ) ) (assert_return (invoke "check-table-null" (i32.const 0) (i32.const 9)) (ref.null func)) (assert_return (invoke "grow" (i32.const 10)) (i32.const 10)) (assert_return (invoke "check-table-null" (i32.const 0) (i32.const 19)) (ref.null func)) ;; Type errors (assert_invalid (module (table $t 0 externref) (func $type-init-size-empty-vs-i32-externref (result i32) (table.grow $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-size-empty-vs-i32 (result i32) (table.grow $t (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-init-empty-vs-externref (result i32) (table.grow $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-size-f32-vs-i32 (result i32) (table.grow $t (ref.null extern) (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 funcref) (func $type-init-externref-vs-funcref (param $r externref) (result i32) (table.grow $t (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-empty (table.grow $t (ref.null extern) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-f32 (result f32) (table.grow $t (ref.null extern) (i32.const 0)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/table_init.wast ================================================ ;; ;; Generated by ../meta/generate_table_init.js ;; DO NOT EDIT THIS FILE. CHANGE THE SOURCE AND REGENERATE. ;; (module (func (export "ef0") (result i32) (i32.const 0)) (func (export "ef1") (result i32) (i32.const 1)) (func (export "ef2") (result i32) (i32.const 2)) (func (export "ef3") (result i32) (i32.const 3)) (func (export "ef4") (result i32) (i32.const 4)) ) (register "a") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t0 1 (i32.const 7) (i32.const 0) (i32.const 4))) (func (export "check") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t0 3 (i32.const 15) (i32.const 1) (i32.const 3))) (func (export "check") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 9)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t0 1 (i32.const 7) (i32.const 0) (i32.const 4)) (elem.drop 1) (table.init $t0 3 (i32.const 15) (i32.const 1) (i32.const 3)) (elem.drop 3) (table.copy $t0 0 (i32.const 20) (i32.const 15) (i32.const 5)) (table.copy $t0 0 (i32.const 21) (i32.const 29) (i32.const 1)) (table.copy $t0 0 (i32.const 24) (i32.const 10) (i32.const 1)) (table.copy $t0 0 (i32.const 13) (i32.const 11) (i32.const 4)) (table.copy $t0 0 (i32.const 19) (i32.const 20) (i32.const 5))) (func (export "check") (param i32) (result i32) (call_indirect $t0 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 13)) "uninitialized element") (assert_return (invoke "check" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_return (invoke "check" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_return (invoke "check" (i32.const 21)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_return (invoke "check" (i32.const 23)) (i32.const 8)) (assert_return (invoke "check" (i32.const 24)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t1 1 (i32.const 7) (i32.const 0) (i32.const 4))) (func (export "check") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 3)) (assert_return (invoke "check" (i32.const 16)) (i32.const 6)) (assert_trap (invoke "check" (i32.const 17)) "uninitialized element") (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t1 3 (i32.const 15) (i32.const 1) (i32.const 3))) (func (export "check") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_trap (invoke "check" (i32.const 7)) "uninitialized element") (assert_trap (invoke "check" (i32.const 8)) "uninitialized element") (assert_trap (invoke "check" (i32.const 9)) "uninitialized element") (assert_trap (invoke "check" (i32.const 10)) "uninitialized element") (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_return (invoke "check" (i32.const 13)) (i32.const 5)) (assert_return (invoke "check" (i32.const 14)) (i32.const 2)) (assert_return (invoke "check" (i32.const 15)) (i32.const 9)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_trap (invoke "check" (i32.const 19)) "uninitialized element") (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_trap (invoke "check" (i32.const 21)) "uninitialized element") (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_trap (invoke "check" (i32.const 23)) "uninitialized element") (assert_trap (invoke "check" (i32.const 24)) "uninitialized element") (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (module (type (func (result i32))) ;; type #0 (import "a" "ef0" (func (result i32))) ;; index 0 (import "a" "ef1" (func (result i32))) (import "a" "ef2" (func (result i32))) (import "a" "ef3" (func (result i32))) (import "a" "ef4" (func (result i32))) ;; index 4 (table $t0 30 30 funcref) (table $t1 30 30 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 5)) ;; index 5 (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) ;; index 9 (func (export "test") (table.init $t1 1 (i32.const 7) (i32.const 0) (i32.const 4)) (elem.drop 1) (table.init $t1 3 (i32.const 15) (i32.const 1) (i32.const 3)) (elem.drop 3) (table.copy $t1 1 (i32.const 20) (i32.const 15) (i32.const 5)) (table.copy $t1 1 (i32.const 21) (i32.const 29) (i32.const 1)) (table.copy $t1 1 (i32.const 24) (i32.const 10) (i32.const 1)) (table.copy $t1 1 (i32.const 13) (i32.const 11) (i32.const 4)) (table.copy $t1 1 (i32.const 19) (i32.const 20) (i32.const 5))) (func (export "check") (param i32) (result i32) (call_indirect $t1 (type 0) (local.get 0))) ) (invoke "test") (assert_trap (invoke "check" (i32.const 0)) "uninitialized element") (assert_trap (invoke "check" (i32.const 1)) "uninitialized element") (assert_return (invoke "check" (i32.const 2)) (i32.const 3)) (assert_return (invoke "check" (i32.const 3)) (i32.const 1)) (assert_return (invoke "check" (i32.const 4)) (i32.const 4)) (assert_return (invoke "check" (i32.const 5)) (i32.const 1)) (assert_trap (invoke "check" (i32.const 6)) "uninitialized element") (assert_return (invoke "check" (i32.const 7)) (i32.const 2)) (assert_return (invoke "check" (i32.const 8)) (i32.const 7)) (assert_return (invoke "check" (i32.const 9)) (i32.const 1)) (assert_return (invoke "check" (i32.const 10)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 11)) "uninitialized element") (assert_return (invoke "check" (i32.const 12)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 13)) "uninitialized element") (assert_return (invoke "check" (i32.const 14)) (i32.const 7)) (assert_return (invoke "check" (i32.const 15)) (i32.const 5)) (assert_return (invoke "check" (i32.const 16)) (i32.const 2)) (assert_return (invoke "check" (i32.const 17)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 18)) "uninitialized element") (assert_return (invoke "check" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "check" (i32.const 20)) "uninitialized element") (assert_return (invoke "check" (i32.const 21)) (i32.const 7)) (assert_trap (invoke "check" (i32.const 22)) "uninitialized element") (assert_return (invoke "check" (i32.const 23)) (i32.const 8)) (assert_return (invoke "check" (i32.const 24)) (i32.const 8)) (assert_trap (invoke "check" (i32.const 25)) "uninitialized element") (assert_trap (invoke "check" (i32.const 26)) "uninitialized element") (assert_trap (invoke "check" (i32.const 27)) "uninitialized element") (assert_trap (invoke "check" (i32.const 28)) "uninitialized element") (assert_trap (invoke "check" (i32.const 29)) "uninitialized element") (assert_invalid (module (func (export "test") (elem.drop 0))) "unknown elem segment 0") (assert_invalid (module (func (export "test") (table.init 0 (i32.const 12) (i32.const 1) (i32.const 1)))) "unknown table 0") (assert_invalid (module (elem funcref (ref.func 0)) (func (result i32) (i32.const 0)) (func (export "test") (elem.drop 4))) "unknown elem segment 4") (assert_invalid (module (elem funcref (ref.func 0)) (func (result i32) (i32.const 0)) (func (export "test") (table.init 4 (i32.const 12) (i32.const 1) (i32.const 1)))) "unknown table 0") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (elem.drop 2) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 2 (i32.const 12) (i32.const 1) (i32.const 1)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 1 (i32.const 12) (i32.const 1) (i32.const 1)) (table.init 1 (i32.const 21) (i32.const 1) (i32.const 1)))) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (elem.drop 1) (elem.drop 1))) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (elem.drop 1) (table.init 1 (i32.const 12) (i32.const 1) (i32.const 1)))) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 1 (i32.const 12) (i32.const 0) (i32.const 5)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init 1 (i32.const 12) (i32.const 2) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 28) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 12) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 12) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 30) (i32.const 2) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 31) (i32.const 2) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 30) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t0) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t0) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t0 1 (i32.const 31) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 26) (i32.const 1) (i32.const 3)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 12) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 12) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 28) (i32.const 2) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 29) (i32.const 2) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 28) (i32.const 4) (i32.const 0)) )) (invoke "test") (module (table $t0 30 30 funcref) (table $t1 28 28 funcref) (elem (table $t1) (i32.const 2) func 3 1 4 1) (elem funcref (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8)) (elem (table $t1) (i32.const 12) func 7 5 2 3 6) (elem funcref (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6)) (func (result i32) (i32.const 0)) (func (result i32) (i32.const 1)) (func (result i32) (i32.const 2)) (func (result i32) (i32.const 3)) (func (result i32) (i32.const 4)) (func (result i32) (i32.const 5)) (func (result i32) (i32.const 6)) (func (result i32) (i32.const 7)) (func (result i32) (i32.const 8)) (func (result i32) (i32.const 9)) (func (export "test") (table.init $t1 1 (i32.const 29) (i32.const 5) (i32.const 0)) )) (assert_trap (invoke "test") "out of bounds table access") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i32.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f32.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (i64.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f32.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (i64.const 1) (f64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (i32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (f32.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (i64.const 1)))) "type mismatch") (assert_invalid (module (table 10 funcref) (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0)) (func $f0) (func (export "test") (table.init 0 (f64.const 1) (f64.const 1) (f64.const 1)))) "type mismatch") (module (type (func (result i32))) (table 32 64 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 24) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 32 64 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 25) (i32.const 16)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (module (type (func (result i32))) (table 160 320 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 96) (i32.const 32)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_trap (invoke "test" (i32.const 112)) "uninitialized element") (assert_trap (invoke "test" (i32.const 113)) "uninitialized element") (assert_trap (invoke "test" (i32.const 114)) "uninitialized element") (assert_trap (invoke "test" (i32.const 115)) "uninitialized element") (assert_trap (invoke "test" (i32.const 116)) "uninitialized element") (assert_trap (invoke "test" (i32.const 117)) "uninitialized element") (assert_trap (invoke "test" (i32.const 118)) "uninitialized element") (assert_trap (invoke "test" (i32.const 119)) "uninitialized element") (assert_trap (invoke "test" (i32.const 120)) "uninitialized element") (assert_trap (invoke "test" (i32.const 121)) "uninitialized element") (assert_trap (invoke "test" (i32.const 122)) "uninitialized element") (assert_trap (invoke "test" (i32.const 123)) "uninitialized element") (assert_trap (invoke "test" (i32.const 124)) "uninitialized element") (assert_trap (invoke "test" (i32.const 125)) "uninitialized element") (assert_trap (invoke "test" (i32.const 126)) "uninitialized element") (assert_trap (invoke "test" (i32.const 127)) "uninitialized element") (assert_trap (invoke "test" (i32.const 128)) "uninitialized element") (assert_trap (invoke "test" (i32.const 129)) "uninitialized element") (assert_trap (invoke "test" (i32.const 130)) "uninitialized element") (assert_trap (invoke "test" (i32.const 131)) "uninitialized element") (assert_trap (invoke "test" (i32.const 132)) "uninitialized element") (assert_trap (invoke "test" (i32.const 133)) "uninitialized element") (assert_trap (invoke "test" (i32.const 134)) "uninitialized element") (assert_trap (invoke "test" (i32.const 135)) "uninitialized element") (assert_trap (invoke "test" (i32.const 136)) "uninitialized element") (assert_trap (invoke "test" (i32.const 137)) "uninitialized element") (assert_trap (invoke "test" (i32.const 138)) "uninitialized element") (assert_trap (invoke "test" (i32.const 139)) "uninitialized element") (assert_trap (invoke "test" (i32.const 140)) "uninitialized element") (assert_trap (invoke "test" (i32.const 141)) "uninitialized element") (assert_trap (invoke "test" (i32.const 142)) "uninitialized element") (assert_trap (invoke "test" (i32.const 143)) "uninitialized element") (assert_trap (invoke "test" (i32.const 144)) "uninitialized element") (assert_trap (invoke "test" (i32.const 145)) "uninitialized element") (assert_trap (invoke "test" (i32.const 146)) "uninitialized element") (assert_trap (invoke "test" (i32.const 147)) "uninitialized element") (assert_trap (invoke "test" (i32.const 148)) "uninitialized element") (assert_trap (invoke "test" (i32.const 149)) "uninitialized element") (assert_trap (invoke "test" (i32.const 150)) "uninitialized element") (assert_trap (invoke "test" (i32.const 151)) "uninitialized element") (assert_trap (invoke "test" (i32.const 152)) "uninitialized element") (assert_trap (invoke "test" (i32.const 153)) "uninitialized element") (assert_trap (invoke "test" (i32.const 154)) "uninitialized element") (assert_trap (invoke "test" (i32.const 155)) "uninitialized element") (assert_trap (invoke "test" (i32.const 156)) "uninitialized element") (assert_trap (invoke "test" (i32.const 157)) "uninitialized element") (assert_trap (invoke "test" (i32.const 158)) "uninitialized element") (assert_trap (invoke "test" (i32.const 159)) "uninitialized element") (module (type (func (result i32))) (table 160 320 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 97) (i32.const 31)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (assert_trap (invoke "test" (i32.const 64)) "uninitialized element") (assert_trap (invoke "test" (i32.const 65)) "uninitialized element") (assert_trap (invoke "test" (i32.const 66)) "uninitialized element") (assert_trap (invoke "test" (i32.const 67)) "uninitialized element") (assert_trap (invoke "test" (i32.const 68)) "uninitialized element") (assert_trap (invoke "test" (i32.const 69)) "uninitialized element") (assert_trap (invoke "test" (i32.const 70)) "uninitialized element") (assert_trap (invoke "test" (i32.const 71)) "uninitialized element") (assert_trap (invoke "test" (i32.const 72)) "uninitialized element") (assert_trap (invoke "test" (i32.const 73)) "uninitialized element") (assert_trap (invoke "test" (i32.const 74)) "uninitialized element") (assert_trap (invoke "test" (i32.const 75)) "uninitialized element") (assert_trap (invoke "test" (i32.const 76)) "uninitialized element") (assert_trap (invoke "test" (i32.const 77)) "uninitialized element") (assert_trap (invoke "test" (i32.const 78)) "uninitialized element") (assert_trap (invoke "test" (i32.const 79)) "uninitialized element") (assert_trap (invoke "test" (i32.const 80)) "uninitialized element") (assert_trap (invoke "test" (i32.const 81)) "uninitialized element") (assert_trap (invoke "test" (i32.const 82)) "uninitialized element") (assert_trap (invoke "test" (i32.const 83)) "uninitialized element") (assert_trap (invoke "test" (i32.const 84)) "uninitialized element") (assert_trap (invoke "test" (i32.const 85)) "uninitialized element") (assert_trap (invoke "test" (i32.const 86)) "uninitialized element") (assert_trap (invoke "test" (i32.const 87)) "uninitialized element") (assert_trap (invoke "test" (i32.const 88)) "uninitialized element") (assert_trap (invoke "test" (i32.const 89)) "uninitialized element") (assert_trap (invoke "test" (i32.const 90)) "uninitialized element") (assert_trap (invoke "test" (i32.const 91)) "uninitialized element") (assert_trap (invoke "test" (i32.const 92)) "uninitialized element") (assert_trap (invoke "test" (i32.const 93)) "uninitialized element") (assert_trap (invoke "test" (i32.const 94)) "uninitialized element") (assert_trap (invoke "test" (i32.const 95)) "uninitialized element") (assert_trap (invoke "test" (i32.const 96)) "uninitialized element") (assert_trap (invoke "test" (i32.const 97)) "uninitialized element") (assert_trap (invoke "test" (i32.const 98)) "uninitialized element") (assert_trap (invoke "test" (i32.const 99)) "uninitialized element") (assert_trap (invoke "test" (i32.const 100)) "uninitialized element") (assert_trap (invoke "test" (i32.const 101)) "uninitialized element") (assert_trap (invoke "test" (i32.const 102)) "uninitialized element") (assert_trap (invoke "test" (i32.const 103)) "uninitialized element") (assert_trap (invoke "test" (i32.const 104)) "uninitialized element") (assert_trap (invoke "test" (i32.const 105)) "uninitialized element") (assert_trap (invoke "test" (i32.const 106)) "uninitialized element") (assert_trap (invoke "test" (i32.const 107)) "uninitialized element") (assert_trap (invoke "test" (i32.const 108)) "uninitialized element") (assert_trap (invoke "test" (i32.const 109)) "uninitialized element") (assert_trap (invoke "test" (i32.const 110)) "uninitialized element") (assert_trap (invoke "test" (i32.const 111)) "uninitialized element") (assert_trap (invoke "test" (i32.const 112)) "uninitialized element") (assert_trap (invoke "test" (i32.const 113)) "uninitialized element") (assert_trap (invoke "test" (i32.const 114)) "uninitialized element") (assert_trap (invoke "test" (i32.const 115)) "uninitialized element") (assert_trap (invoke "test" (i32.const 116)) "uninitialized element") (assert_trap (invoke "test" (i32.const 117)) "uninitialized element") (assert_trap (invoke "test" (i32.const 118)) "uninitialized element") (assert_trap (invoke "test" (i32.const 119)) "uninitialized element") (assert_trap (invoke "test" (i32.const 120)) "uninitialized element") (assert_trap (invoke "test" (i32.const 121)) "uninitialized element") (assert_trap (invoke "test" (i32.const 122)) "uninitialized element") (assert_trap (invoke "test" (i32.const 123)) "uninitialized element") (assert_trap (invoke "test" (i32.const 124)) "uninitialized element") (assert_trap (invoke "test" (i32.const 125)) "uninitialized element") (assert_trap (invoke "test" (i32.const 126)) "uninitialized element") (assert_trap (invoke "test" (i32.const 127)) "uninitialized element") (assert_trap (invoke "test" (i32.const 128)) "uninitialized element") (assert_trap (invoke "test" (i32.const 129)) "uninitialized element") (assert_trap (invoke "test" (i32.const 130)) "uninitialized element") (assert_trap (invoke "test" (i32.const 131)) "uninitialized element") (assert_trap (invoke "test" (i32.const 132)) "uninitialized element") (assert_trap (invoke "test" (i32.const 133)) "uninitialized element") (assert_trap (invoke "test" (i32.const 134)) "uninitialized element") (assert_trap (invoke "test" (i32.const 135)) "uninitialized element") (assert_trap (invoke "test" (i32.const 136)) "uninitialized element") (assert_trap (invoke "test" (i32.const 137)) "uninitialized element") (assert_trap (invoke "test" (i32.const 138)) "uninitialized element") (assert_trap (invoke "test" (i32.const 139)) "uninitialized element") (assert_trap (invoke "test" (i32.const 140)) "uninitialized element") (assert_trap (invoke "test" (i32.const 141)) "uninitialized element") (assert_trap (invoke "test" (i32.const 142)) "uninitialized element") (assert_trap (invoke "test" (i32.const 143)) "uninitialized element") (assert_trap (invoke "test" (i32.const 144)) "uninitialized element") (assert_trap (invoke "test" (i32.const 145)) "uninitialized element") (assert_trap (invoke "test" (i32.const 146)) "uninitialized element") (assert_trap (invoke "test" (i32.const 147)) "uninitialized element") (assert_trap (invoke "test" (i32.const 148)) "uninitialized element") (assert_trap (invoke "test" (i32.const 149)) "uninitialized element") (assert_trap (invoke "test" (i32.const 150)) "uninitialized element") (assert_trap (invoke "test" (i32.const 151)) "uninitialized element") (assert_trap (invoke "test" (i32.const 152)) "uninitialized element") (assert_trap (invoke "test" (i32.const 153)) "uninitialized element") (assert_trap (invoke "test" (i32.const 154)) "uninitialized element") (assert_trap (invoke "test" (i32.const 155)) "uninitialized element") (assert_trap (invoke "test" (i32.const 156)) "uninitialized element") (assert_trap (invoke "test" (i32.const 157)) "uninitialized element") (assert_trap (invoke "test" (i32.const 158)) "uninitialized element") (assert_trap (invoke "test" (i32.const 159)) "uninitialized element") (module (type (func (result i32))) (table 64 64 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 0) (local.get $len)))) (assert_trap (invoke "run" (i32.const 48) (i32.const 4294967280)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (assert_trap (invoke "test" (i32.const 16)) "uninitialized element") (assert_trap (invoke "test" (i32.const 17)) "uninitialized element") (assert_trap (invoke "test" (i32.const 18)) "uninitialized element") (assert_trap (invoke "test" (i32.const 19)) "uninitialized element") (assert_trap (invoke "test" (i32.const 20)) "uninitialized element") (assert_trap (invoke "test" (i32.const 21)) "uninitialized element") (assert_trap (invoke "test" (i32.const 22)) "uninitialized element") (assert_trap (invoke "test" (i32.const 23)) "uninitialized element") (assert_trap (invoke "test" (i32.const 24)) "uninitialized element") (assert_trap (invoke "test" (i32.const 25)) "uninitialized element") (assert_trap (invoke "test" (i32.const 26)) "uninitialized element") (assert_trap (invoke "test" (i32.const 27)) "uninitialized element") (assert_trap (invoke "test" (i32.const 28)) "uninitialized element") (assert_trap (invoke "test" (i32.const 29)) "uninitialized element") (assert_trap (invoke "test" (i32.const 30)) "uninitialized element") (assert_trap (invoke "test" (i32.const 31)) "uninitialized element") (assert_trap (invoke "test" (i32.const 32)) "uninitialized element") (assert_trap (invoke "test" (i32.const 33)) "uninitialized element") (assert_trap (invoke "test" (i32.const 34)) "uninitialized element") (assert_trap (invoke "test" (i32.const 35)) "uninitialized element") (assert_trap (invoke "test" (i32.const 36)) "uninitialized element") (assert_trap (invoke "test" (i32.const 37)) "uninitialized element") (assert_trap (invoke "test" (i32.const 38)) "uninitialized element") (assert_trap (invoke "test" (i32.const 39)) "uninitialized element") (assert_trap (invoke "test" (i32.const 40)) "uninitialized element") (assert_trap (invoke "test" (i32.const 41)) "uninitialized element") (assert_trap (invoke "test" (i32.const 42)) "uninitialized element") (assert_trap (invoke "test" (i32.const 43)) "uninitialized element") (assert_trap (invoke "test" (i32.const 44)) "uninitialized element") (assert_trap (invoke "test" (i32.const 45)) "uninitialized element") (assert_trap (invoke "test" (i32.const 46)) "uninitialized element") (assert_trap (invoke "test" (i32.const 47)) "uninitialized element") (assert_trap (invoke "test" (i32.const 48)) "uninitialized element") (assert_trap (invoke "test" (i32.const 49)) "uninitialized element") (assert_trap (invoke "test" (i32.const 50)) "uninitialized element") (assert_trap (invoke "test" (i32.const 51)) "uninitialized element") (assert_trap (invoke "test" (i32.const 52)) "uninitialized element") (assert_trap (invoke "test" (i32.const 53)) "uninitialized element") (assert_trap (invoke "test" (i32.const 54)) "uninitialized element") (assert_trap (invoke "test" (i32.const 55)) "uninitialized element") (assert_trap (invoke "test" (i32.const 56)) "uninitialized element") (assert_trap (invoke "test" (i32.const 57)) "uninitialized element") (assert_trap (invoke "test" (i32.const 58)) "uninitialized element") (assert_trap (invoke "test" (i32.const 59)) "uninitialized element") (assert_trap (invoke "test" (i32.const 60)) "uninitialized element") (assert_trap (invoke "test" (i32.const 61)) "uninitialized element") (assert_trap (invoke "test" (i32.const 62)) "uninitialized element") (assert_trap (invoke "test" (i32.const 63)) "uninitialized element") (module (type (func (result i32))) (table 16 16 funcref) (elem funcref (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3) (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7) (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11) (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15)) (func $f0 (export "f0") (result i32) (i32.const 0)) (func $f1 (export "f1") (result i32) (i32.const 1)) (func $f2 (export "f2") (result i32) (i32.const 2)) (func $f3 (export "f3") (result i32) (i32.const 3)) (func $f4 (export "f4") (result i32) (i32.const 4)) (func $f5 (export "f5") (result i32) (i32.const 5)) (func $f6 (export "f6") (result i32) (i32.const 6)) (func $f7 (export "f7") (result i32) (i32.const 7)) (func $f8 (export "f8") (result i32) (i32.const 8)) (func $f9 (export "f9") (result i32) (i32.const 9)) (func $f10 (export "f10") (result i32) (i32.const 10)) (func $f11 (export "f11") (result i32) (i32.const 11)) (func $f12 (export "f12") (result i32) (i32.const 12)) (func $f13 (export "f13") (result i32) (i32.const 13)) (func $f14 (export "f14") (result i32) (i32.const 14)) (func $f15 (export "f15") (result i32) (i32.const 15)) (func (export "test") (param $n i32) (result i32) (call_indirect (type 0) (local.get $n))) (func (export "run") (param $offs i32) (param $len i32) (table.init 0 (local.get $offs) (i32.const 8) (local.get $len)))) (assert_trap (invoke "run" (i32.const 0) (i32.const 4294967292)) "out of bounds table access") (assert_trap (invoke "test" (i32.const 0)) "uninitialized element") (assert_trap (invoke "test" (i32.const 1)) "uninitialized element") (assert_trap (invoke "test" (i32.const 2)) "uninitialized element") (assert_trap (invoke "test" (i32.const 3)) "uninitialized element") (assert_trap (invoke "test" (i32.const 4)) "uninitialized element") (assert_trap (invoke "test" (i32.const 5)) "uninitialized element") (assert_trap (invoke "test" (i32.const 6)) "uninitialized element") (assert_trap (invoke "test" (i32.const 7)) "uninitialized element") (assert_trap (invoke "test" (i32.const 8)) "uninitialized element") (assert_trap (invoke "test" (i32.const 9)) "uninitialized element") (assert_trap (invoke "test" (i32.const 10)) "uninitialized element") (assert_trap (invoke "test" (i32.const 11)) "uninitialized element") (assert_trap (invoke "test" (i32.const 12)) "uninitialized element") (assert_trap (invoke "test" (i32.const 13)) "uninitialized element") (assert_trap (invoke "test" (i32.const 14)) "uninitialized element") (assert_trap (invoke "test" (i32.const 15)) "uninitialized element") (module (table 1 funcref) ;; 65 elem segments. 64 is the smallest positive number that is encoded ;; differently as a signed LEB. (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (elem funcref) (func (table.init 64 (i32.const 0) (i32.const 0) (i32.const 0)))) ================================================ FILE: Test/WebAssembly/spec/table_set.wast ================================================ (module (table $t2 1 externref) (table $t3 2 funcref) (elem (table $t3) (i32.const 1) func $dummy) (func $dummy) (func (export "get-externref") (param $i i32) (result externref) (table.get $t2 (local.get $i)) ) (func $f3 (export "get-funcref") (param $i i32) (result funcref) (table.get $t3 (local.get $i)) ) (func (export "set-externref") (param $i i32) (param $r externref) (table.set $t2 (local.get $i) (local.get $r)) ) (func (export "set-funcref") (param $i i32) (param $r funcref) (table.set $t3 (local.get $i) (local.get $r)) ) (func (export "set-funcref-from") (param $i i32) (param $j i32) (table.set $t3 (local.get $i) (table.get $t3 (local.get $j))) ) (func (export "is_null-funcref") (param $i i32) (result i32) (ref.is_null (call $f3 (local.get $i))) ) ) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "set-externref" (i32.const 0) (ref.extern 1))) (assert_return (invoke "get-externref" (i32.const 0)) (ref.extern 1)) (assert_return (invoke "set-externref" (i32.const 0) (ref.null extern))) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_return (invoke "set-funcref-from" (i32.const 0) (i32.const 1))) (assert_return (invoke "is_null-funcref" (i32.const 0)) (i32.const 0)) (assert_return (invoke "set-funcref" (i32.const 0) (ref.null func))) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_trap (invoke "set-externref" (i32.const 2) (ref.null extern)) "out of bounds table access") (assert_trap (invoke "set-funcref" (i32.const 3) (ref.null func)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const -1) (ref.null extern)) "out of bounds table access") (assert_trap (invoke "set-funcref" (i32.const -1) (ref.null func)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const 2) (ref.extern 0)) "out of bounds table access") (assert_trap (invoke "set-funcref-from" (i32.const 3) (i32.const 1)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const -1) (ref.extern 0)) "out of bounds table access") (assert_trap (invoke "set-funcref-from" (i32.const -1) (i32.const 1)) "out of bounds table access") ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-value-empty-vs-i32-externref (table.set $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (table.set $t (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-value-empty-vs-externref (table.set $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-size-f32-vs-i32 (table.set $t (f32.const 1) (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 funcref) (func $type-value-externref-vs-funcref (param $r externref) (table.set $t (i32.const 1) (local.get $r)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 externref) (table $t2 1 funcref) (func $type-value-externref-vs-funcref-multi (param $r externref) (table.set $t2 (i32.const 0) (local.get $r)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-empty-vs-num (result i32) (table.set $t (i32.const 0) (ref.null extern)) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/table_size.wast ================================================ (module (table $t0 0 externref) (table $t1 1 externref) (table $t2 0 2 externref) (table $t3 3 8 externref) (func (export "size-t0") (result i32) (table.size $t0)) (func (export "size-t1") (result i32) (table.size $t1)) (func (export "size-t2") (result i32) (table.size $t2)) (func (export "size-t3") (result i32) (table.size $t3)) (func (export "grow-t0") (param $sz i32) (drop (table.grow $t0 (ref.null extern) (local.get $sz))) ) (func (export "grow-t1") (param $sz i32) (drop (table.grow $t1 (ref.null extern) (local.get $sz))) ) (func (export "grow-t2") (param $sz i32) (drop (table.grow $t2 (ref.null extern) (local.get $sz))) ) (func (export "grow-t3") (param $sz i32) (drop (table.grow $t3 (ref.null extern) (local.get $sz))) ) ) (assert_return (invoke "size-t0") (i32.const 0)) (assert_return (invoke "grow-t0" (i32.const 1))) (assert_return (invoke "size-t0") (i32.const 1)) (assert_return (invoke "grow-t0" (i32.const 4))) (assert_return (invoke "size-t0") (i32.const 5)) (assert_return (invoke "grow-t0" (i32.const 0))) (assert_return (invoke "size-t0") (i32.const 5)) (assert_return (invoke "size-t1") (i32.const 1)) (assert_return (invoke "grow-t1" (i32.const 1))) (assert_return (invoke "size-t1") (i32.const 2)) (assert_return (invoke "grow-t1" (i32.const 4))) (assert_return (invoke "size-t1") (i32.const 6)) (assert_return (invoke "grow-t1" (i32.const 0))) (assert_return (invoke "size-t1") (i32.const 6)) (assert_return (invoke "size-t2") (i32.const 0)) (assert_return (invoke "grow-t2" (i32.const 3))) (assert_return (invoke "size-t2") (i32.const 0)) (assert_return (invoke "grow-t2" (i32.const 1))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 0))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 4))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 1))) (assert_return (invoke "size-t2") (i32.const 2)) (assert_return (invoke "size-t3") (i32.const 3)) (assert_return (invoke "grow-t3" (i32.const 1))) (assert_return (invoke "size-t3") (i32.const 4)) (assert_return (invoke "grow-t3" (i32.const 3))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 0))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 2))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 1))) (assert_return (invoke "size-t3") (i32.const 8)) ;; Type errors (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-empty (table.size $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-f32 (result f32) (table.size $t) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/token.wast ================================================ ;; Test tokenization (assert_malformed (module quote "(func (drop (i32.const0)))") "unknown operator" ) (assert_malformed (module quote "(func br 0drop)") "unknown operator" ) ================================================ FILE: Test/WebAssembly/spec/traps.wast ================================================ ;; Test that traps are preserved even in instructions which might otherwise ;; be dead-code-eliminated. These functions all perform an operation and ;; discard its return value. (module (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) (drop (i32.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) (drop (i32.div_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) (drop (i64.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) (drop (i64.div_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (module (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) (drop (i32.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) (drop (i32.rem_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) (drop (i64.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) (drop (i64.rem_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (module (func (export "no_dce.i32.trunc_f32_s") (param $x f32) (drop (i32.trunc_f32_s (local.get $x)))) (func (export "no_dce.i32.trunc_f32_u") (param $x f32) (drop (i32.trunc_f32_u (local.get $x)))) (func (export "no_dce.i32.trunc_f64_s") (param $x f64) (drop (i32.trunc_f64_s (local.get $x)))) (func (export "no_dce.i32.trunc_f64_u") (param $x f64) (drop (i32.trunc_f64_u (local.get $x)))) (func (export "no_dce.i64.trunc_f32_s") (param $x f32) (drop (i64.trunc_f32_s (local.get $x)))) (func (export "no_dce.i64.trunc_f32_u") (param $x f32) (drop (i64.trunc_f32_u (local.get $x)))) (func (export "no_dce.i64.trunc_f64_s") (param $x f64) (drop (i64.trunc_f64_s (local.get $x)))) (func (export "no_dce.i64.trunc_f64_u") (param $x f64) (drop (i64.trunc_f64_u (local.get $x)))) ) (assert_trap (invoke "no_dce.i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (module (memory 1) (func (export "no_dce.i32.load") (param $i i32) (drop (i32.load (local.get $i)))) (func (export "no_dce.i32.load16_s") (param $i i32) (drop (i32.load16_s (local.get $i)))) (func (export "no_dce.i32.load16_u") (param $i i32) (drop (i32.load16_u (local.get $i)))) (func (export "no_dce.i32.load8_s") (param $i i32) (drop (i32.load8_s (local.get $i)))) (func (export "no_dce.i32.load8_u") (param $i i32) (drop (i32.load8_u (local.get $i)))) (func (export "no_dce.i64.load") (param $i i32) (drop (i64.load (local.get $i)))) (func (export "no_dce.i64.load32_s") (param $i i32) (drop (i64.load32_s (local.get $i)))) (func (export "no_dce.i64.load32_u") (param $i i32) (drop (i64.load32_u (local.get $i)))) (func (export "no_dce.i64.load16_s") (param $i i32) (drop (i64.load16_s (local.get $i)))) (func (export "no_dce.i64.load16_u") (param $i i32) (drop (i64.load16_u (local.get $i)))) (func (export "no_dce.i64.load8_s") (param $i i32) (drop (i64.load8_s (local.get $i)))) (func (export "no_dce.i64.load8_u") (param $i i32) (drop (i64.load8_u (local.get $i)))) (func (export "no_dce.f32.load") (param $i i32) (drop (f32.load (local.get $i)))) (func (export "no_dce.f64.load") (param $i i32) (drop (f64.load (local.get $i)))) ) (assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/spec/type.wast ================================================ ;; Test type definitions (module (type (func)) (type $t (func)) (type (func (param i32))) (type (func (param $x i32))) (type (func (result i32))) (type (func (param i32) (result i32))) (type (func (param $x i32) (result i32))) (type (func (param f32 f64))) (type (func (result i64 f32))) (type (func (param i32 i64) (result f32 f64))) (type (func (param f32) (param f64))) (type (func (param $x f32) (param f64))) (type (func (param f32) (param $y f64))) (type (func (param $x f32) (param $y f64))) (type (func (result i64) (result f32))) (type (func (param i32) (param i64) (result f32) (result f64))) (type (func (param $x i32) (param $y i64) (result f32) (result f64))) (type (func (param f32 f64) (param $x i32) (param f64 i32 i32))) (type (func (result i64 i64 f32) (result f32 i32))) (type (func (param i32 i32) (param i64 i32) (result f32 f64) (result f64 i32)) ) (type (func (param) (param $x f32) (param) (param) (param f64 i32) (param))) (type (func (result) (result) (result i64 i64) (result) (result f32) (result)) ) (type (func (param i32 i32) (param i64 i32) (param) (param $x i32) (param) (result) (result f32 f64) (result f64 i32) (result) ) ) ) (assert_malformed (module quote "(type (func (result i32) (param i32)))") "unexpected token" ) (assert_malformed (module quote "(type (func (result $x i32)))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/spec/unreachable.wast ================================================ ;; Test `unreachable` operator (module ;; Auxiliary definitions (func $dummy) (func $dummy3 (param i32 i32 i32)) (func (export "type-i32") (result i32) (unreachable)) (func (export "type-i64") (result i32) (unreachable)) (func (export "type-f32") (result f64) (unreachable)) (func (export "type-f64") (result f64) (unreachable)) (func (export "as-func-first") (result i32) (unreachable) (i32.const -1) ) (func (export "as-func-mid") (result i32) (call $dummy) (unreachable) (i32.const -1) ) (func (export "as-func-last") (call $dummy) (unreachable) ) (func (export "as-func-value") (result i32) (call $dummy) (unreachable) ) (func (export "as-block-first") (result i32) (block (result i32) (unreachable) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-block-last") (block (nop) (call $dummy) (unreachable)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (unreachable)) ) (func (export "as-block-broke") (result i32) (block (result i32) (call $dummy) (br 0 (i32.const 1)) (unreachable)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (unreachable) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-loop-last") (loop (nop) (call $dummy) (unreachable)) ) (func (export "as-loop-broke") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 1)) (unreachable)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (unreachable))) ) (func (export "as-br_if-cond") (block (br_if 0 (unreachable))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (unreachable) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (unreachable))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-2") (result i32) (block (result i32) (block (result i32) (br_table 0 1 (unreachable) (i32.const 1))) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7) ) ) (func (export "as-br_table-value-and-index") (result i32) (block (result i32) (br_table 0 0 (unreachable)) (i32.const 8)) ) (func (export "as-return-value") (result i64) (return (unreachable)) ) (func (export "as-if-cond") (result i32) (if (result i32) (unreachable) (then (i32.const 0)) (else (i32.const 1))) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (unreachable)) (else (local.get 1))) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (unreachable))) ) (func (export "as-if-then-no-else") (param i32 i32) (result i32) (if (local.get 0) (then (unreachable))) (local.get 1) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (unreachable) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (unreachable)) ) (func (export "as-call-first") (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call-last") (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) ) (type $sig (func (param i32 i32 i32))) (table funcref (elem $dummy3)) (func (export "as-call_indirect-func") (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3) ) ) (func (export "as-call_indirect-last") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable) ) ) (func (export "as-local.set-value") (local f32) (local.set 0 (unreachable)) ) (func (export "as-local.tee-value") (result f32) (local f32) (local.tee 0 (unreachable)) ) (global $a (mut f32) (f32.const 0)) (func (export "as-global.set-value") (result f32) (global.set $a (unreachable)) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (unreachable)) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (unreachable)) ) (func (export "as-store-address") (f64.store (unreachable) (f64.const 7)) ) (func (export "as-store-value") (i64.store (i32.const 2) (unreachable)) ) (func (export "as-storeN-address") (i32.store8 (unreachable) (i32.const 7)) ) (func (export "as-storeN-value") (i64.store16 (i32.const 2) (unreachable)) ) (func (export "as-unary-operand") (result f32) (f32.neg (unreachable)) ) (func (export "as-binary-left") (result i32) (i32.add (unreachable) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (unreachable)) ) (func (export "as-test-operand") (result i32) (i32.eqz (unreachable)) ) (func (export "as-compare-left") (result i32) (f64.le (unreachable) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (unreachable)) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (unreachable)) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (unreachable)) ) ) (assert_trap (invoke "type-i32") "unreachable") (assert_trap (invoke "type-i64") "unreachable") (assert_trap (invoke "type-f32") "unreachable") (assert_trap (invoke "type-f64") "unreachable") (assert_trap (invoke "as-func-first") "unreachable") (assert_trap (invoke "as-func-mid") "unreachable") (assert_trap (invoke "as-func-last") "unreachable") (assert_trap (invoke "as-func-value") "unreachable") (assert_trap (invoke "as-block-first") "unreachable") (assert_trap (invoke "as-block-mid") "unreachable") (assert_trap (invoke "as-block-last") "unreachable") (assert_trap (invoke "as-block-value") "unreachable") (assert_return (invoke "as-block-broke") (i32.const 1)) (assert_trap (invoke "as-loop-first") "unreachable") (assert_trap (invoke "as-loop-mid") "unreachable") (assert_trap (invoke "as-loop-last") "unreachable") (assert_return (invoke "as-loop-broke") (i32.const 1)) (assert_trap (invoke "as-br-value") "unreachable") (assert_trap (invoke "as-br_if-cond") "unreachable") (assert_trap (invoke "as-br_if-value") "unreachable") (assert_trap (invoke "as-br_if-value-cond") "unreachable") (assert_trap (invoke "as-br_table-index") "unreachable") (assert_trap (invoke "as-br_table-value") "unreachable") (assert_trap (invoke "as-br_table-value-2") "unreachable") (assert_trap (invoke "as-br_table-value-index") "unreachable") (assert_trap (invoke "as-br_table-value-and-index") "unreachable") (assert_trap (invoke "as-return-value") "unreachable") (assert_trap (invoke "as-if-cond") "unreachable") (assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-then-no-else" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then-no-else" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-cond") "unreachable") (assert_trap (invoke "as-call-first") "unreachable") (assert_trap (invoke "as-call-mid") "unreachable") (assert_trap (invoke "as-call-last") "unreachable") (assert_trap (invoke "as-call_indirect-func") "unreachable") (assert_trap (invoke "as-call_indirect-first") "unreachable") (assert_trap (invoke "as-call_indirect-mid") "unreachable") (assert_trap (invoke "as-call_indirect-last") "unreachable") (assert_trap (invoke "as-local.set-value") "unreachable") (assert_trap (invoke "as-local.tee-value") "unreachable") (assert_trap (invoke "as-global.set-value") "unreachable") (assert_trap (invoke "as-load-address") "unreachable") (assert_trap (invoke "as-loadN-address") "unreachable") (assert_trap (invoke "as-store-address") "unreachable") (assert_trap (invoke "as-store-value") "unreachable") (assert_trap (invoke "as-storeN-address") "unreachable") (assert_trap (invoke "as-storeN-value") "unreachable") (assert_trap (invoke "as-unary-operand") "unreachable") (assert_trap (invoke "as-binary-left") "unreachable") (assert_trap (invoke "as-binary-right") "unreachable") (assert_trap (invoke "as-test-operand") "unreachable") (assert_trap (invoke "as-compare-left") "unreachable") (assert_trap (invoke "as-compare-right") "unreachable") (assert_trap (invoke "as-convert-operand") "unreachable") (assert_trap (invoke "as-memory.grow-size") "unreachable") ================================================ FILE: Test/WebAssembly/spec/unreached-invalid.wast ================================================ ;; Failures in unreachable code. (assert_invalid (module (func $local-index (unreachable) (drop (local.get 0)))) "unknown local" ) (assert_invalid (module (func $global-index (unreachable) (drop (global.get 0)))) "unknown global" ) (assert_invalid (module (func $func-index (unreachable) (call 1))) "unknown function" ) (assert_invalid (module (func $label-index (unreachable) (br 1))) "unknown label" ) (assert_invalid (module (func $type-num-vs-num (unreachable) (drop (i64.eqz (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (func $type-poly-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-poly-transitive-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-const (unreachable) (i32.const 0))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result (unreachable) (i32.eqz))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result2 (unreachable) (i32.const 0) (i32.add) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly0 (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly2 (unreachable) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-break (block (br 0) (block (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-break (block (br 0) (drop (i32.eqz (f32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-break (block (br 0) (block (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-break (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-break (result i32) (block (result i32) (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-break (block (loop (br 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-break (result i32) (loop (result i32) (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-break (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-return (return) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-return (return) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-return (return) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-return (return) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-return (block (return) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-return (result i32) (block (result i32) (i32.const 1) (return (i32.const 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-return (block (loop (return) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-return (result i32) (loop (result i32) (return (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-return (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-unreachable (unreachable) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-loop-after-unreachable (unreachable) (loop (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-i32-loop-after-unreachable (unreachable) (loop (result i32) (i32.eqz (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-unreachable (unreachable) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-unreachable (unreachable) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-unreachable (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-unreachable (block (unreachable) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-unreachable (result i32) (block (result i32) (i32.const 1) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-unreachable (block (loop (unreachable) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) (loop (result i32) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-unreachable (unreachable) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-unreachable (result i32) (unreachable) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-if-after-unreachable (unreachable) (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable (unreachable) (if (i32.const 0) (then (nop)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable-if (if (i32.const 0) (then (unreachable)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-nested-unreachable (block (block (unreachable)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-nested-unreachable (result i32) (block (result i32) (i32.const 1) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-nested-unreachable (block (loop (block (unreachable)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-nested-unreachable (result i32) (loop (result i32) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-nested-unreachable (block (unreachable)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-nested-unreachable (result i32) (block (unreachable)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-infinite-loop (block (loop (br 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) (block (result i32) (i32.const 1) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-infinite-loop (block (loop (loop (br 0)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) (loop (result i32) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-infinite-loop (loop (br 0)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) (loop (br 0)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-void-in-dead-body (if (i32.const 0) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (block (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (block (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (loop (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (loop (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-br-second-num-vs-num (result i32) (block (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-cond-num-vs-num-after-unreachable (block (br_if 0 (unreachable) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-void-after-unreachable (result i32) (block (result i32) (block (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-num-after-unreachable (result i32) (block (result i32) (block (result f32) (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) (drop) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num2-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_if 0 (i32.const 0) (i32.const 0)) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-num-vs-num-after-unreachable (block (br_table 0 (unreachable) (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_table 0 (f32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-label-void-after-unreachable (block (block (result f32) (unreachable) (br_table 0 1 0 (i32.const 1)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-void (block (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) (block (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-void (block (i32.const 3) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-void-vs-num (result i32) (block (result i32) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-num (result i32) (block (result i32) (i64.const 0) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-void (block (block (i32.const 3) (block (br 2)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-void-vs-num (result i32) (block (result i32) (block (block (br 2 (i32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-num (result i32) (block (result i32) (block (result i64) (i64.const 0) (block (br 2 (i32.const 0)))) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-void (block (i32.const 3) (block (return))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-void-vs-num (result i32) (block (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-void (loop (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) (loop (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) (loop (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $tee-local-unreachable-value (local i32) (local.tee 0 (unreachable)) )) "type mismatch" ) (assert_invalid (module (func $br_if-unreachable (result i32) (block (result i32) (block (br_if 1 (unreachable) (i32.const 0)) ) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-after-unreachable (result i64) unreachable br_if 0 i64.extend_i32_u ) ) "type mismatch" ) ;; The first two operands should have the same type as each other (assert_invalid (module (func (unreachable) (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (unreachable) (select (i64.const 1) (i32.const 1) (i32.const 1)) (drop))) "type mismatch" ) ;; Third operand must be i32 (assert_invalid (module (func (unreachable) (select (i32.const 1) (i32.const 1) (i64.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (unreachable) (select (i32.const 1) (i64.const 1)) (drop))) "type mismatch" ) (assert_invalid (module (func (unreachable) (select (i64.const 1)) (drop))) "type mismatch" ) ;; Result of select has type of first two operands (type of second operand when first one is omitted) (assert_invalid (module (func (result i32) (unreachable) (select (i64.const 1) (i32.const 1)))) "type mismatch" ) ;; select always has non-empty result (assert_invalid (module (func (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $meet-bottom (param i32) (result externref) (block $l1 (result externref) (drop (block $l2 (result i32) (br_table $l2 $l1 $l2 (ref.null extern) (local.get 0)) ) ) (ref.null extern) ) )) "type mismatch" ) ================================================ FILE: Test/WebAssembly/spec/unreached-valid.wast ================================================ (module ;; Check that both sides of the select are evaluated (func (export "select-trap-left") (param $cond i32) (result i32) (select (unreachable) (i32.const 0) (local.get $cond)) ) (func (export "select-trap-right") (param $cond i32) (result i32) (select (i32.const 0) (unreachable) (local.get $cond)) ) (func (export "select-unreached") (unreachable) (select) (unreachable) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (i32.const 0) (select) (unreachable) (f32.const 0) (i32.const 0) (select) (unreachable) ) (func (export "select_unreached_result_1") (result i32) (unreachable) (i32.add (select)) ) (func (export "select_unreached_result_2") (result i64) (unreachable) (i64.add (select (i64.const 0) (i32.const 0))) ) (func (export "unreachable-num") (unreachable) (select) (i32.eqz) (drop) ) (func (export "unreachable-ref") (unreachable) (select) (ref.is_null) (drop) ) ) (assert_trap (invoke "select-trap-left" (i32.const 1)) "unreachable") (assert_trap (invoke "select-trap-left" (i32.const 0)) "unreachable") (assert_trap (invoke "select-trap-right" (i32.const 1)) "unreachable") (assert_trap (invoke "select-trap-right" (i32.const 0)) "unreachable") ;; Validation after unreachable (module (func (export "meet-bottom") (block (result f64) (block (result f32) (unreachable) (br_table 0 1 1 (i32.const 1)) ) (drop) (f64.const 0) ) (drop) ) ) (assert_trap (invoke "meet-bottom") "unreachable") ================================================ FILE: Test/WebAssembly/spec/unwind.wast ================================================ ;; Test that control-flow transfer unwinds stack and it can be anything after. (module (func (export "func-unwind-by-unreachable") (i32.const 3) (i64.const 1) (unreachable) ) (func (export "func-unwind-by-br") (i32.const 3) (i64.const 1) (br 0) ) (func (export "func-unwind-by-br-value") (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9)) ) (func (export "func-unwind-by-br_if") (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1)))) ) (func (export "func-unwind-by-br_if-value") (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) (func (export "func-unwind-by-br_table") (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0)) ) (func (export "func-unwind-by-br_table-value") (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) (func (export "func-unwind-by-return") (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9)) ) (func (export "block-unwind-by-unreachable") (block (i32.const 3) (i64.const 1) (unreachable)) ) (func (export "block-unwind-by-br") (result i32) (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) ) (func (export "block-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) ) (func (export "block-unwind-by-br_if") (result i32) (block (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1))))) (i32.const 9) ) (func (export "block-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) ) (func (export "block-unwind-by-br_table") (result i32) (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) ) (func (export "block-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9))) ) (func (export "block-nested-unwind-by-unreachable") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (unreachable))) ) (func (export "block-nested-unwind-by-br") (result i32) (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9))) ) ) (func (export "block-nested-unwind-by-br_if") (result i32) (block (i32.const 3) (block (i64.const 1) (drop (br_if 1 (i32.const 1)))) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (drop (drop (br_if 1 (i32.const 9) (i32.const 1))))) ) ) (func (export "block-nested-unwind-by-br_table") (result i32) (block (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) (drop) ) (i32.const 9) ) (func (export "block-nested-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) ) ) (func (export "block-nested-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (return (i32.const 9))) ) ) (func (export "unary-after-unreachable") (result i32) (f32.const 0) (unreachable) (i64.eqz) ) (func (export "unary-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) ) (func (export "unary-after-br_if") (result i32) (block (result i32) (i64.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eqz) ) ) (func (export "unary-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) ) ) (func (export "unary-after-return") (result i32) (f32.const 0) (return (i32.const 9)) (i64.eqz) ) (func (export "binary-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (unreachable) (i64.eq) ) (func (export "binary-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq) ) ) (func (export "binary-after-br_if") (result i32) (block (result i32) (i64.const 0) (i64.const 1) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eq) ) ) (func (export "binary-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) (i64.eq) ) ) (func (export "binary-after-return") (result i32) (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) ) (func (export "select-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) ) (func (export "select-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) ) ) (func (export "select-after-br_if") (result i32) (block (result i32) (i32.const 0) (i32.const 1) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (select) ) ) (func (export "select-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br_table 0 (i32.const 9) (i32.const 0)) (select) ) ) (func (export "select-after-return") (result i32) (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) ) (func (export "block-value-after-unreachable") (result i32) (block (result i32) (f32.const 0) (unreachable)) ) (func (export "block-value-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9))) ) (func (export "block-value-after-br_if") (result i32) (block (result i32) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) ) ) (func (export "block-value-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-value-after-return") (result i32) (block (result i32) (f32.const 0) (return (i32.const 9))) ) (func (export "loop-value-after-unreachable") (result i32) (loop (result i32) (f32.const 0) (unreachable)) ) (func (export "loop-value-after-br") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br 1 (i32.const 9)))) ) (func (export "loop-value-after-br_if") (result i32) (block (result i32) (loop (result i32) (i32.const 0) (drop (br_if 1 (i32.const 9) (i32.const 1))) ) ) ) (func (export "loop-value-after-br_table") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0)) ) ) ) (func (export "loop-value-after-return") (result i32) (loop (result i32) (f32.const 0) (return (i32.const 9))) ) ) (assert_trap (invoke "func-unwind-by-unreachable") "unreachable") (assert_return (invoke "func-unwind-by-br")) (assert_return (invoke "func-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_if")) (assert_return (invoke "func-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_table")) (assert_return (invoke "func-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) (assert_trap (invoke "unary-after-unreachable") "unreachable") (assert_return (invoke "unary-after-br") (i32.const 9)) (assert_return (invoke "unary-after-br_if") (i32.const 9)) (assert_return (invoke "unary-after-br_table") (i32.const 9)) (assert_return (invoke "unary-after-return") (i32.const 9)) (assert_trap (invoke "binary-after-unreachable") "unreachable") (assert_return (invoke "binary-after-br") (i32.const 9)) (assert_return (invoke "binary-after-br_if") (i32.const 9)) (assert_return (invoke "binary-after-br_table") (i32.const 9)) (assert_return (invoke "binary-after-return") (i32.const 9)) (assert_trap (invoke "select-after-unreachable") "unreachable") (assert_return (invoke "select-after-br") (i32.const 9)) (assert_return (invoke "select-after-br_if") (i32.const 9)) (assert_return (invoke "select-after-br_table") (i32.const 9)) (assert_return (invoke "select-after-return") (i32.const 9)) (assert_trap (invoke "block-value-after-unreachable") "unreachable") (assert_return (invoke "block-value-after-br") (i32.const 9)) (assert_return (invoke "block-value-after-br_if") (i32.const 9)) (assert_return (invoke "block-value-after-br_table") (i32.const 9)) (assert_return (invoke "block-value-after-return") (i32.const 9)) (assert_trap (invoke "loop-value-after-unreachable") "unreachable") (assert_return (invoke "loop-value-after-br") (i32.const 9)) (assert_return (invoke "loop-value-after-br_if") (i32.const 9)) (assert_return (invoke "loop-value-after-br_table") (i32.const 9)) (assert_return (invoke "loop-value-after-return") (i32.const 9)) ================================================ FILE: Test/WebAssembly/spec/utf8-custom-section-id.wast ================================================ ;;;;;; Invalid UTF-8 custom section names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\80" ;; "\80" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\8f" ;; "\8f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\90" ;; "\90" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\9f" ;; "\9f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\a0" ;; "\a0" ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\bf" ;; "\bf" ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\c2\80\80" ;; "\c2\80\80" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\c2" ;; "\c2" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\2e" ;; "\c2." ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\80" ;; "\c0\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\bf" ;; "\c0\bf" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\80" ;; "\c1\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\bf" ;; "\c1\bf" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\00" ;; "\c2\00" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\7f" ;; "\c2\7f" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\c0" ;; "\c2\c0" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\fd" ;; "\c2\fd" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\00" ;; "\df\00" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\7f" ;; "\df\7f" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\c0" ;; "\df\c0" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\fd" ;; "\df\fd" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\e1\80\80\80" ;; "\e1\80\80\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\80" ;; "\e1\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\2e" ;; "\e1\80." ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\e1" ;; "\e1" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\2e" ;; "\e1." ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\00\a0" ;; "\e0\00\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\7f\a0" ;; "\e0\7f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\80" ;; "\e0\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\a0" ;; "\e0\80\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\a0" ;; "\e0\9f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\bf" ;; "\e0\9f\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\c0\a0" ;; "\e0\c0\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\fd\a0" ;; "\e0\fd\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\00\80" ;; "\e1\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\7f\80" ;; "\e1\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\c0\80" ;; "\e1\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\fd\80" ;; "\e1\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\00\80" ;; "\ec\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\7f\80" ;; "\ec\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\c0\80" ;; "\ec\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\fd\80" ;; "\ec\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\00\80" ;; "\ed\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\7f\80" ;; "\ed\7f\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\80" ;; "\ed\a0\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\bf" ;; "\ed\a0\bf" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\80" ;; "\ed\bf\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\bf" ;; "\ed\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\c0\80" ;; "\ed\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\fd\80" ;; "\ed\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\00\80" ;; "\ee\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\7f\80" ;; "\ee\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\c0\80" ;; "\ee\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\fd\80" ;; "\ee\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\00\80" ;; "\ef\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\7f\80" ;; "\ef\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\c0\80" ;; "\ef\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\fd\80" ;; "\ef\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\00" ;; "\e0\a0\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\7f" ;; "\e0\a0\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\c0" ;; "\e0\a0\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\fd" ;; "\e0\a0\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\00" ;; "\e1\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\7f" ;; "\e1\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\c0" ;; "\e1\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\fd" ;; "\e1\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\00" ;; "\ec\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\7f" ;; "\ec\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\c0" ;; "\ec\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\fd" ;; "\ec\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\00" ;; "\ed\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\7f" ;; "\ed\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\c0" ;; "\ed\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\fd" ;; "\ed\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\00" ;; "\ee\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\7f" ;; "\ee\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\c0" ;; "\ee\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\fd" ;; "\ee\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\00" ;; "\ef\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\7f" ;; "\ef\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\c0" ;; "\ef\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\fd" ;; "\ef\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\80" ;; "\f1\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\23" ;; "\f1\80\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\80" ;; "\f1\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\23" ;; "\f1\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f1" ;; "\f1" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\23" ;; "\f1#" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\00\90\90" ;; "\f0\00\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\7f\90\90" ;; "\f0\7f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\80\80" ;; "\f0\80\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\90\90" ;; "\f0\80\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\90\90" ;; "\f0\8f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\c0\90\90" ;; "\f0\c0\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\fd\90\90" ;; "\f0\fd\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\00\80\80" ;; "\f1\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\7f\80\80" ;; "\f1\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\c0\80\80" ;; "\f1\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\fd\80\80" ;; "\f1\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\00\80\80" ;; "\f3\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\7f\80\80" ;; "\f3\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\c0\80\80" ;; "\f3\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\fd\80\80" ;; "\f3\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\00\80\80" ;; "\f4\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\7f\80\80" ;; "\f4\7f\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\90\80\80" ;; "\f4\90\80\80" ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\bf\80\80" ;; "\f4\bf\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\c0\80\80" ;; "\f4\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\fd\80\80" ;; "\f4\fd\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f5\80\80\80" ;; "\f5\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\80\80\80" ;; "\f7\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\00\90" ;; "\f0\90\00\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\7f\90" ;; "\f0\90\7f\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\c0\90" ;; "\f0\90\c0\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\fd\90" ;; "\f0\90\fd\90" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\00\80" ;; "\f1\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\7f\80" ;; "\f1\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\c0\80" ;; "\f1\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\fd\80" ;; "\f1\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\00\80" ;; "\f3\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\7f\80" ;; "\f3\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\c0\80" ;; "\f3\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\fd\80" ;; "\f3\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\00\80" ;; "\f4\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\7f\80" ;; "\f4\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\c0\80" ;; "\f4\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\fd\80" ;; "\f4\80\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\00" ;; "\f0\90\90\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\7f" ;; "\f0\90\90\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\c0" ;; "\f0\90\90\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\fd" ;; "\f0\90\90\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\00" ;; "\f1\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\7f" ;; "\f1\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\c0" ;; "\f1\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\fd" ;; "\f1\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\00" ;; "\f3\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\7f" ;; "\f3\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\c0" ;; "\f3\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\fd" ;; "\f3\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\00" ;; "\f4\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\7f" ;; "\f4\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\c0" ;; "\f4\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\fd" ;; "\f4\80\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\80" ;; "\f8\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\80" ;; "\f8\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\23" ;; "\f8\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\80" ;; "\f8\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\23" ;; "\f8\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f8" ;; "\f8" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\23" ;; "\f8#" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\08" ;; custom section "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\80" ;; "\fc\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\80" ;; "\fc\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\23" ;; "\fc\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\80" ;; "\fc\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\23" ;; "\fc\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fc" ;; "\fc" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\23" ;; "\fc#" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fe" ;; "\fe" ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\ff" ;; "\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fe\ff" ;; "\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\00\00\fe\ff" ;; "\00\00\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\ff\fe" ;; "\ff\fe" ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\ff\fe\00\00" ;; "\ff\fe\00\00" ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/spec/utf8-import-field.wast ================================================ ;;;;;; Invalid UTF-8 import field names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\80" ;; "\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\8f" ;; "\8f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\90" ;; "\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\9f" ;; "\9f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\a0" ;; "\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\bf" ;; "\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\c2\80\80" ;; "\c2\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\c2" ;; "\c2" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\2e" ;; "\c2." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\80" ;; "\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\bf" ;; "\c0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\80" ;; "\c1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\bf" ;; "\c1\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\00" ;; "\c2\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\7f" ;; "\c2\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\c0" ;; "\c2\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\fd" ;; "\c2\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\00" ;; "\df\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\7f" ;; "\df\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\c0" ;; "\df\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\fd" ;; "\df\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\e1\80\80\80" ;; "\e1\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\80" ;; "\e1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\2e" ;; "\e1\80." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\e1" ;; "\e1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\2e" ;; "\e1." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\00\a0" ;; "\e0\00\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\7f\a0" ;; "\e0\7f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\80" ;; "\e0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\a0" ;; "\e0\80\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\a0" ;; "\e0\9f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\bf" ;; "\e0\9f\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\c0\a0" ;; "\e0\c0\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\fd\a0" ;; "\e0\fd\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\00\80" ;; "\e1\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\7f\80" ;; "\e1\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\c0\80" ;; "\e1\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\fd\80" ;; "\e1\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\00\80" ;; "\ec\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\7f\80" ;; "\ec\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\c0\80" ;; "\ec\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\fd\80" ;; "\ec\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\00\80" ;; "\ed\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\7f\80" ;; "\ed\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\80" ;; "\ed\a0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\bf" ;; "\ed\a0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\80" ;; "\ed\bf\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\bf" ;; "\ed\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\c0\80" ;; "\ed\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\fd\80" ;; "\ed\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\00\80" ;; "\ee\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\7f\80" ;; "\ee\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\c0\80" ;; "\ee\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\fd\80" ;; "\ee\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\00\80" ;; "\ef\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\7f\80" ;; "\ef\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\c0\80" ;; "\ef\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\fd\80" ;; "\ef\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\00" ;; "\e0\a0\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\7f" ;; "\e0\a0\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\c0" ;; "\e0\a0\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\fd" ;; "\e0\a0\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\00" ;; "\e1\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\7f" ;; "\e1\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\c0" ;; "\e1\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\fd" ;; "\e1\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\00" ;; "\ec\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\7f" ;; "\ec\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\c0" ;; "\ec\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\fd" ;; "\ec\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\00" ;; "\ed\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\7f" ;; "\ed\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\c0" ;; "\ed\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\fd" ;; "\ed\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\00" ;; "\ee\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\7f" ;; "\ee\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\c0" ;; "\ee\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\fd" ;; "\ee\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\00" ;; "\ef\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\7f" ;; "\ef\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\c0" ;; "\ef\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\fd" ;; "\ef\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\80" ;; "\f1\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\23" ;; "\f1\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\80" ;; "\f1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\23" ;; "\f1\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f1" ;; "\f1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\23" ;; "\f1#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\00\90\90" ;; "\f0\00\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\80\80" ;; "\f0\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\90\90" ;; "\f0\80\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\00\80\80" ;; "\f1\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\00\80\80" ;; "\f3\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\00\80\80" ;; "\f4\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\90\80\80" ;; "\f4\90\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f5\80\80\80" ;; "\f5\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\80\80\80" ;; "\f7\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\00\90" ;; "\f0\90\00\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\00\80" ;; "\f1\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\00\80" ;; "\f3\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\00\80" ;; "\f4\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\00" ;; "\f0\90\90\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\00" ;; "\f1\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\00" ;; "\f3\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\00" ;; "\f4\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\80" ;; "\f8\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\80" ;; "\f8\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\23" ;; "\f8\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\80" ;; "\f8\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\23" ;; "\f8\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f8" ;; "\f8" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\23" ;; "\f8#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\80" ;; "\fc\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\80" ;; "\fc\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\23" ;; "\fc\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\80" ;; "\fc\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\23" ;; "\fc\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fc" ;; "\fc" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\23" ;; "\fc#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fe" ;; "\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\ff" ;; "\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fe\ff" ;; "\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\ff\fe" ;; "\ff\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/spec/utf8-import-module.wast ================================================ ;;;;;; Invalid UTF-8 import module names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\80" ;; "\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\8f" ;; "\8f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\90" ;; "\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\9f" ;; "\9f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\a0" ;; "\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\bf" ;; "\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\c2\80\80" ;; "\c2\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\c2" ;; "\c2" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\2e" ;; "\c2." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\80" ;; "\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\bf" ;; "\c0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\80" ;; "\c1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\bf" ;; "\c1\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\00" ;; "\c2\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\7f" ;; "\c2\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\c0" ;; "\c2\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\fd" ;; "\c2\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\00" ;; "\df\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\7f" ;; "\df\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\c0" ;; "\df\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\fd" ;; "\df\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\e1\80\80\80" ;; "\e1\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\80" ;; "\e1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\2e" ;; "\e1\80." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\e1" ;; "\e1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\2e" ;; "\e1." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\00\a0" ;; "\e0\00\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\7f\a0" ;; "\e0\7f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\80" ;; "\e0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\a0" ;; "\e0\80\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\a0" ;; "\e0\9f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\bf" ;; "\e0\9f\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\c0\a0" ;; "\e0\c0\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\fd\a0" ;; "\e0\fd\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\00\80" ;; "\e1\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\7f\80" ;; "\e1\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\c0\80" ;; "\e1\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\fd\80" ;; "\e1\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\00\80" ;; "\ec\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\7f\80" ;; "\ec\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\c0\80" ;; "\ec\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\fd\80" ;; "\ec\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\00\80" ;; "\ed\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\7f\80" ;; "\ed\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\80" ;; "\ed\a0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\bf" ;; "\ed\a0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\80" ;; "\ed\bf\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\bf" ;; "\ed\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\c0\80" ;; "\ed\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\fd\80" ;; "\ed\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\00\80" ;; "\ee\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\7f\80" ;; "\ee\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\c0\80" ;; "\ee\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\fd\80" ;; "\ee\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\00\80" ;; "\ef\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\7f\80" ;; "\ef\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\c0\80" ;; "\ef\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\fd\80" ;; "\ef\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\00" ;; "\e0\a0\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\7f" ;; "\e0\a0\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\c0" ;; "\e0\a0\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\fd" ;; "\e0\a0\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\00" ;; "\e1\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\7f" ;; "\e1\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\c0" ;; "\e1\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\fd" ;; "\e1\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\00" ;; "\ec\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\7f" ;; "\ec\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\c0" ;; "\ec\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\fd" ;; "\ec\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\00" ;; "\ed\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\7f" ;; "\ed\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\c0" ;; "\ed\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\fd" ;; "\ed\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\00" ;; "\ee\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\7f" ;; "\ee\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\c0" ;; "\ee\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\fd" ;; "\ee\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\00" ;; "\ef\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\7f" ;; "\ef\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\c0" ;; "\ef\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\fd" ;; "\ef\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\80" ;; "\f1\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\23" ;; "\f1\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\80" ;; "\f1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\23" ;; "\f1\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f1" ;; "\f1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\23" ;; "\f1#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\00\90\90" ;; "\f0\00\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\80\80" ;; "\f0\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\90\90" ;; "\f0\80\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\00\80\80" ;; "\f1\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\00\80\80" ;; "\f3\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\00\80\80" ;; "\f4\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\90\80\80" ;; "\f4\90\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f5\80\80\80" ;; "\f5\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\80\80\80" ;; "\f7\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\00\90" ;; "\f0\90\00\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\00\80" ;; "\f1\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\00\80" ;; "\f3\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\00\80" ;; "\f4\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\00" ;; "\f0\90\90\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\00" ;; "\f1\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\00" ;; "\f3\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\00" ;; "\f4\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\80" ;; "\f8\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\80" ;; "\f8\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\23" ;; "\f8\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\80" ;; "\f8\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\23" ;; "\f8\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f8" ;; "\f8" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\23" ;; "\f8#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\80" ;; "\fc\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\80" ;; "\fc\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\23" ;; "\fc\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\80" ;; "\fc\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\23" ;; "\fc\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fc" ;; "\fc" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\23" ;; "\fc#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fe" ;; "\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\ff" ;; "\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fe\ff" ;; "\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\ff\fe" ;; "\ff\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/spec/utf8-invalid-encoding.wast ================================================ (assert_malformed (module quote "(func (export \"\\00\\00\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\8f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\9f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\00\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\7f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\c0\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\fd\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\00\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\7f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\00\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\7f\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\c0\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\fd\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\c0\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\fd\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\90\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\bf\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f5\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fb\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fd\\bf\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\\00\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\"))") "malformed UTF-8 encoding") ================================================ FILE: Test/WebAssembly/threads/address.wast ================================================ ;; Load i32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i32) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i32) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i32) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i32) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i32) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i32) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") (assert_malformed (module quote "(memory 1)" "(func (drop (i32.load offset=4294967296 (i32.const 0))))" ) "i32 constant" ) ;; Load i64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i32) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i32) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i32) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i32) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i32) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i32) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i32) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i32) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i32) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i32) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i32) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i32) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i32) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i32) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i32) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i32) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i32) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i32) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32u_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32s_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i32) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i32) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i32) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i32) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i32) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i32) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i32) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i32) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i32) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i32) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i32) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i32) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/threads/align.wast ================================================ ;; Test alignment annotation rules (module (memory 0) (func (drop (i32.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_s align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_u align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load align=8 (i32.const 0))))) (module (memory 0) (func (drop (f32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (f64.load align=8 (i32.const 0))))) (module (memory 0) (func (i32.store8 align=1 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store16 align=2 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store align=4 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i64.store8 align=1 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store16 align=2 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store32 align=4 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store align=8 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (f32.store align=4 (i32.const 0) (f32.const 1.0)))) (module (memory 0) (func (f64.store align=8 (i32.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store8 align=2 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store16 align=4 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store align=8 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store8 align=2 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store16 align=4 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store32 align=8 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f32.store align=8 (i32.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f64.store align=16 (i32.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i32.const 0) (local.get 1)) (local.set 2 (f32.load (i32.const 0))) (br $4) ) ;; default (f32.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i32.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i32.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i32.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i32.const 0) (local.get 1)) (local.set 2 (f64.load (i32.const 0))) (br $8) ) ;; default (f64.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i32.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i32.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i32.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i32.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i32.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i32.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i32.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i32.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i32.const 0) (local.get 2)) (local.set 3 (i32.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i32.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i32.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i32.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i32.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i32.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i32.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i32.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i32.const 0) (local.get 2)) (local.set 3 (i64.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i32.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory 1) (func (export "store") (param i32 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i32) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i32.const 65532)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/threads/atomic.wast ================================================ ;; atomic operations (module (memory 1 1 shared) (func (export "init") (param $value i64) (i64.store (i32.const 0) (local.get $value))) (func (export "i32.atomic.load") (param $addr i32) (result i32) (i32.atomic.load (local.get $addr))) (func (export "i64.atomic.load") (param $addr i32) (result i64) (i64.atomic.load (local.get $addr))) (func (export "i32.atomic.load8_u") (param $addr i32) (result i32) (i32.atomic.load8_u (local.get $addr))) (func (export "i32.atomic.load16_u") (param $addr i32) (result i32) (i32.atomic.load16_u (local.get $addr))) (func (export "i64.atomic.load8_u") (param $addr i32) (result i64) (i64.atomic.load8_u (local.get $addr))) (func (export "i64.atomic.load16_u") (param $addr i32) (result i64) (i64.atomic.load16_u (local.get $addr))) (func (export "i64.atomic.load32_u") (param $addr i32) (result i64) (i64.atomic.load32_u (local.get $addr))) (func (export "i32.atomic.store") (param $addr i32) (param $value i32) (i32.atomic.store (local.get $addr) (local.get $value))) (func (export "i64.atomic.store") (param $addr i32) (param $value i64) (i64.atomic.store (local.get $addr) (local.get $value))) (func (export "i32.atomic.store8") (param $addr i32) (param $value i32) (i32.atomic.store8 (local.get $addr) (local.get $value))) (func (export "i32.atomic.store16") (param $addr i32) (param $value i32) (i32.atomic.store16 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store8") (param $addr i32) (param $value i64) (i64.atomic.store8 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store16") (param $addr i32) (param $value i64) (i64.atomic.store16 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store32") (param $addr i32) (param $value i64) (i64.atomic.store32 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.add") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.add (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.add") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.add (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.add_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.add_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.add_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.add_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.add_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.add_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.add_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.sub") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.sub (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.sub") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.sub (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.sub_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.sub_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.sub_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.sub_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.sub_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.sub_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.sub_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.and") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.and (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.and") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.and (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.and_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.and_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.and_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.and_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.and_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.and_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.and_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.or") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.or (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.or") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.or (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.or_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.or_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.or_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.or_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.or_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.or_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.or_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.xor") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.xor (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.xor") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.xor (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.xor_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.xor_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.xor_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.xor_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.xor_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.xor_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.xor_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.xchg") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.xchg (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.xchg") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.xchg (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.xchg_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.xchg_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.xchg_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.xchg_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.xchg_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.xchg_u (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.xchg_u (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.cmpxchg") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw.cmpxchg (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw.cmpxchg") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw.cmpxchg (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i32.atomic.rmw8.cmpxchg_u") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw8.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i32.atomic.rmw16.cmpxchg_u") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw16.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw8.cmpxchg_u") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw8.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw16.cmpxchg_u") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw16.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw32.cmpxchg_u") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw32.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value))) ) ;; *.atomic.load* (invoke "init" (i64.const 0x0706050403020100)) (assert_return (invoke "i32.atomic.load" (i32.const 0)) (i32.const 0x03020100)) (assert_return (invoke "i32.atomic.load" (i32.const 4)) (i32.const 0x07060504)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0706050403020100)) (assert_return (invoke "i32.atomic.load8_u" (i32.const 0)) (i32.const 0x00)) (assert_return (invoke "i32.atomic.load8_u" (i32.const 5)) (i32.const 0x05)) (assert_return (invoke "i32.atomic.load16_u" (i32.const 0)) (i32.const 0x0100)) (assert_return (invoke "i32.atomic.load16_u" (i32.const 6)) (i32.const 0x0706)) (assert_return (invoke "i64.atomic.load8_u" (i32.const 0)) (i64.const 0x00)) (assert_return (invoke "i64.atomic.load8_u" (i32.const 5)) (i64.const 0x05)) (assert_return (invoke "i64.atomic.load16_u" (i32.const 0)) (i64.const 0x0100)) (assert_return (invoke "i64.atomic.load16_u" (i32.const 6)) (i64.const 0x0706)) (assert_return (invoke "i64.atomic.load32_u" (i32.const 0)) (i64.const 0x03020100)) (assert_return (invoke "i64.atomic.load32_u" (i32.const 4)) (i64.const 0x07060504)) ;; *.atomic.store* (invoke "init" (i64.const 0x0000000000000000)) (assert_return (invoke "i32.atomic.store" (i32.const 0) (i32.const 0xffeeddcc))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x00000000ffeeddcc)) (assert_return (invoke "i64.atomic.store" (i32.const 0) (i64.const 0x0123456789abcdef))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123456789abcdef)) (assert_return (invoke "i32.atomic.store8" (i32.const 1) (i32.const 0x42))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123456789ab42ef)) (assert_return (invoke "i32.atomic.store16" (i32.const 4) (i32.const 0x8844))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123884489ab42ef)) (assert_return (invoke "i64.atomic.store8" (i32.const 1) (i64.const 0x99))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123884489ab99ef)) (assert_return (invoke "i64.atomic.store16" (i32.const 4) (i64.const 0xcafe))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123cafe89ab99ef)) (assert_return (invoke "i64.atomic.store32" (i32.const 4) (i64.const 0xdeadbeef))) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0xdeadbeef89ab99ef)) ;; *.atomic.rmw*.add (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.add" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111123456789)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.add" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1212121213131313)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.add_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111de)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.add_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111dc0f)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.add_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111153)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.add_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111d000)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.add_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111dbccb7f6)) ;; *.atomic.rmw*.sub (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.sub" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111fedcba99)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.sub" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x101010100f0f0f0f)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.sub_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111144)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.sub_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111114613)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.sub_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111cf)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.sub_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111115222)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.sub_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111146556a2c)) ;; *.atomic.rmw*.and (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.and" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111110101010)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.and" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0101010100000000)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.and_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111101)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.and_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111110010)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.and_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111100)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.and_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111001)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.and_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111100110001)) ;; *.atomic.rmw*.or (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.or" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111113355779)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.or" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111113131313)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.or_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111dd)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.or_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111dbff)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.or_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111153)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.or_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111bfff)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.or_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111dbbbb7f5)) ;; *.atomic.rmw*.xor (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.xor" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111103254769)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.xor" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1010101013131313)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.xor_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111dc)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.xor_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111dbef)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.xor_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111153)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.xor_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111affe)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.xor_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111dbaab7f4)) ;; *.atomic.rmw*.xchg (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.xchg" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111112345678)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.xchg" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0101010102020202)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.xchg_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111cd)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.xchg_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111cafe)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.xchg_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111142)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.xchg_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111beef)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.xchg_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111cabba6e5)) ;; *.atomic.rmw*.cmpxchg (compare false) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.cmpxchg" (i32.const 0) (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.cmpxchg" (i32.const 0) (i64.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.cmpxchg_u" (i32.const 0) (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 0) (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.cmpxchg_u" (i32.const 0) (i64.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 0) (i64.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 0) (i64.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111)) ;; *.atomic.rmw*.cmpxchg (compare true) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.cmpxchg" (i32.const 0) (i32.const 0x11111111) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111112345678)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.cmpxchg" (i32.const 0) (i64.const 0x1111111111111111) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0101010102020202)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.cmpxchg_u" (i32.const 0) (i32.const 0x11) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111cd)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 0) (i32.const 0x1111) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111cafe)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.cmpxchg_u" (i32.const 0) (i64.const 0x11) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111142)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 0) (i64.const 0x1111) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111beef)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 0) (i64.const 0x11111111) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111cabba6e5)) ;; unaligned accesses (assert_trap (invoke "i32.atomic.load" (i32.const 1)) "unaligned atomic") (assert_trap (invoke "i64.atomic.load" (i32.const 1)) "unaligned atomic") (assert_trap (invoke "i32.atomic.load16_u" (i32.const 1)) "unaligned atomic") (assert_trap (invoke "i64.atomic.load16_u" (i32.const 1)) "unaligned atomic") (assert_trap (invoke "i64.atomic.load32_u" (i32.const 1)) "unaligned atomic") (assert_trap (invoke "i32.atomic.store" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.store" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.store16" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.store16" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.store32" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.add" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.add" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.add_u" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.add_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.add_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.sub" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.sub" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.sub_u" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.sub_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.sub_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.and" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.and" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.and_u" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.and_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.and_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.or" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.or" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.or_u" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.or_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.or_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.xor" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.xor" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.xor_u" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.xor_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.xor_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.xchg" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.xchg" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.xchg_u" (i32.const 1) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.xchg_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.xchg_u" (i32.const 1) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.cmpxchg" (i32.const 1) (i32.const 0) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.cmpxchg" (i32.const 1) (i64.const 0) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 1) (i32.const 0) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 1) (i64.const 0) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 1) (i64.const 0) (i64.const 0)) "unaligned atomic") (module (memory 1 1 shared) (func (export "init") (param $value i64) (i64.store (i32.const 0) (local.get $value))) (func (export "memory.atomic.notify") (param $addr i32) (param $count i32) (result i32) (memory.atomic.notify (local.get 0) (local.get 1))) (func (export "memory.atomic.wait32") (param $addr i32) (param $expected i32) (param $timeout i64) (result i32) (memory.atomic.wait32 (local.get 0) (local.get 1) (local.get 2))) (func (export "memory.atomic.wait64") (param $addr i32) (param $expected i64) (param $timeout i64) (result i32) (memory.atomic.wait64 (local.get 0) (local.get 1) (local.get 2))) ) (invoke "init" (i64.const 0xffffffffffff)) (assert_return (invoke "memory.atomic.wait32" (i32.const 0) (i32.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "memory.atomic.wait64" (i32.const 0) (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "memory.atomic.notify" (i32.const 0) (i32.const 0)) (i32.const 0)) ;; unshared memory is OK (module (memory 1 1) (func (drop (memory.atomic.notify (i32.const 0) (i32.const 0)))) (func (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0)))) (func (drop (memory.atomic.wait64 (i32.const 0) (i64.const 0) (i64.const 0)))) (func (drop (i32.atomic.load (i32.const 0)))) (func (drop (i64.atomic.load (i32.const 0)))) (func (drop (i32.atomic.load16_u (i32.const 0)))) (func (drop (i64.atomic.load16_u (i32.const 0)))) (func (drop (i64.atomic.load32_u (i32.const 0)))) (func (i32.atomic.store (i32.const 0) (i32.const 0))) (func (i64.atomic.store (i32.const 0) (i64.const 0))) (func (i32.atomic.store16 (i32.const 0) (i32.const 0))) (func (i64.atomic.store16 (i32.const 0) (i64.const 0))) (func (i64.atomic.store32 (i32.const 0) (i64.const 0))) (func (drop (i32.atomic.rmw.add (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.add (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.add_u (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.add_u (i32.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.add_u (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw.sub (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.sub (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.sub_u (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.sub_u (i32.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.sub_u (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw.and (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.and (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.and_u (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.and_u (i32.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.and_u (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw.or (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.or (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.or_u (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.or_u (i32.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.or_u (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw.xor (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.xor (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.xor_u (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.xor_u (i32.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.xor_u (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw.xchg (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.xchg (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.xchg_u (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.xchg_u (i32.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.xchg_u (i32.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw.cmpxchg (i32.const 0) (i64.const 0) (i64.const 0)))) (func (drop (i32.atomic.rmw16.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0)))) (func (drop (i64.atomic.rmw16.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0)))) (func (drop (i64.atomic.rmw32.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0)))) ) ;; Fails with no memory (assert_invalid (module (func (drop (memory.atomic.notify (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (memory.atomic.wait64 (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.load (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.load (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.load16_u (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.load16_u (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.load32_u (i32.const 0))))) "unknown memory") (assert_invalid (module (func (i32.atomic.store (i32.const 0) (i32.const 0)))) "unknown memory") (assert_invalid (module (func (i64.atomic.store (i32.const 0) (i64.const 0)))) "unknown memory") (assert_invalid (module (func (i32.atomic.store16 (i32.const 0) (i32.const 0)))) "unknown memory") (assert_invalid (module (func (i64.atomic.store16 (i32.const 0) (i64.const 0)))) "unknown memory") (assert_invalid (module (func (i64.atomic.store32 (i32.const 0) (i64.const 0)))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.add (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.add (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.add_u (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.add_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.add_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.sub (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.sub (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.sub_u (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.sub_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.sub_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.and (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.and (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.and_u (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.and_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.and_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.or (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.or (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.or_u (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.or_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.or_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.xor (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.xor (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.xor_u (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.xor_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.xor_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.xchg (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.xchg (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.xchg_u (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.xchg_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.xchg_u (i32.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw.cmpxchg (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i32.atomic.rmw16.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw16.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory") (assert_invalid (module (func (drop (i64.atomic.rmw32.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory") ================================================ FILE: Test/WebAssembly/threads/binary-leb128.wast ================================================ ;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\06\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Memory index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\07\01" ;; Element section with 1 entry "\80\00" ;; Table index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\8a\00" ;; section size 10, encoded with 2 bytes "\01" ;; name byte count "1" ;; name "23456789" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0b" ;; section size "\88\00" ;; name byte count 8, encoded with 2 bytes "12345678" ;; name "9" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\82\00" ;; num params 2, encoded with 2 bytes "\7f\7e" ;; param type "\01" ;; num results "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\00" ;; num results 1, encoded with 2 bytes "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\88\00" ;; module name length 8, encoded with 2 bytes "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\00" ;; entity name length 9, encoded with 2 bytes "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\00" ;; import signature index, encoded with 2 bytes ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\00" ;; function 0 signature index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\82\00" ;; string length 2, encoded with 2 bytes "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\00" ;; export func index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\00" ;; num functions, encoded with 2 bytes "\02\00\0b" ;; function body ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\0a\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\00" ;; max 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0b\01" ;; Data section with 1 entry "\80\80\80\80\80\00" ;; Memory index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0b\01" ;; Element section with 1 entry "\80\80\80\80\80\00" ;; Table index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\80\00" ;; section size 3 with one byte too many "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0A" ;; section size "\83\80\80\80\80\00" ;; name byte count 3 with one byte too many "123" ;; name "4" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0c\01" ;; type section "\60" ;; func type "\82\80\80\80\80\00" ;; num params 2 with one byte too many "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\80\00" ;; num result 1 with one byte too many "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\88\80\80\80\80\00" ;; module name length 8 with one byte too many "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\80\00" ;; entity name length 9 with one byte too many "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\80\00" ;; import signature index 0 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\80\80\80\80\00" ;; function 0 signature index with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\82\80\80\80\80\00" ;; string length 2 with one byte too many "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\80\00" ;; export func index 0 with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\80\80\80\80\00" ;; num functions 1 with one byte too many "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\10" ;; max 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\40" ;; max 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0a\01" ;; Data section with 1 entry "\80\80\80\80\10" ;; Memory index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0a\01" ;; Element section with 1 entry "\80\80\80\80\10" ;; Table index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\10" ;; section size 3 with unused bits set "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\09" ;; section size "\83\80\80\80\40" ;; name byte count 3 with unused bits set "123" ;; name "4" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\82\80\80\80\10" ;; num params 2 with unused bits set "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\40" ;; num result 1 with unused bits set "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\88\80\80\80\10" ;; module name length 8 with unused bits set "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\40" ;; entity name length 9 with unused bits set "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\10" ;; import signature index 0 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\06\01" ;; function section "\80\80\80\80\10" ;; function 0 signature index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\82\80\80\80\10" ;; string length 2 with unused bits set "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\10" ;; export func index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\08" ;; section size "\81\80\80\80\10" ;; num functions 1 with unused bits set "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\03" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\1b\01\19" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\80\00" ;; i32_trunc_sat_f32_s with 2 bytes "\00" ;; unreachable "\fc\81\80\00" ;; i32_trunc_sat_f32_u with 3 bytes "\00" ;; unreachable "\fc\86\80\80\00" ;; i64_trunc_sat_f64_s with 4 bytes "\00" ;; unreachable "\fc\87\80\80\80\00" ;; i64_trunc_sat_f64_u with 5 bytes "\00" ;; unreachable "\0b" ;; end ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; empty function type "\03\02\01" ;; function section "\00" ;; function 0, type 0 "\0a\0d\01\0b" ;; code section "\00" ;; no locals "\00" ;; unreachable "\fc\87\80\80\80\80\00" ;; i64_trunc_sat_f64_u with 6 bytes "\00" ;; unreachable "\0b" ;; end ) "integer representation too long" ) ================================================ FILE: Test/WebAssembly/threads/binary.wast ================================================ (module binary "\00asm\01\00\00\00") (module binary "\00asm" "\01\00\00\00") (module $M1 binary "\00asm\01\00\00\00") (module $M2 binary "\00asm" "\01\00\00\00") (assert_malformed (module binary "") "unexpected end") (assert_malformed (module binary "\01") "unexpected end") (assert_malformed (module binary "\00as") "unexpected end") (assert_malformed (module binary "asm\00") "magic header not detected") (assert_malformed (module binary "msa\00") "magic header not detected") (assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") (assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") (assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") (assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") ;; 8-byte endian-reversed. (assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") ;; Middle-endian byte orderings. (assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") (assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") ;; Upper-cased. (assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") ;; EBCDIC-encoded magic. (assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") ;; Leading UTF-8 BOM. (assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") ;; Malformed binary version. (assert_malformed (module binary "\00asm") "unexpected end") (assert_malformed (module binary "\00asm\01") "unexpected end") (assert_malformed (module binary "\00asm\01\00\00") "unexpected end") (assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") ;; Invalid section id. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0c\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\7f\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\80\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\81\00\01\00") "malformed section id") (assert_malformed (module binary "\00asm" "\01\00\00\00" "\ff\00\01\00") "malformed section id") ;; call_indirect reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\01" ;; call_indirect reserved byte is not equal to zero! "\0b" ;; end ) "zero flag expected" ) ;; call_indirect reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0a\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0b\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0c\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0d\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) ;; memory.grow reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\01" ;; memory.grow reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.grow reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0c\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0d\01" ;; Code section ;; function 0 "\0b\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.size reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\07\01" ;; Code section ;; function 0 "\05\00" "\3f" ;; memory.size "\01" ;; memory.size reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.size reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\08\01" ;; Code section ;; function 0 "\06\00" "\3f" ;; memory.size "\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\3f" ;; memory.size "\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\3f" ;; memory.size "\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\3f" ;; memory.size "\80\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; No more than 2^32 locals. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\ff\ff\ff\ff\0f\7f" ;; 0xFFFFFFFF i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "too many locals" ) ;; Local count can be 0. (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0a\01" ;; Code section ;; function 0 "\08\03" "\00\7f" ;; 0 i32 "\00\7e" ;; 0 i64 "\02\7d" ;; 2 f32 "\0b" ;; end ) ;; Function section has non-zero count, but code section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions ) "function and code section have inconsistent lengths" ) ;; Code section has non-zero count, but function section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count > code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count < code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section with 1 function "\0a\07\02\02\00\0b\02\00\0b" ;; Code section with 2 empty functions ) "function and code section have inconsistent lengths" ) ;; Function section has zero count, and code section is absent. (module binary "\00asm" "\01\00\00\00" "\03\01\00" ;; Function section with 0 functions ) ;; Code section has zero count, and function section is absent. (module binary "\00asm" "\01\00\00\00" "\0a\01\00" ;; Code section with 0 functions ) ;; Type count can be zero (module binary "\00asm" "\01\00\00\00" "\01\01\00" ;; type count can be zero ) ;; 2 type declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\02" ;; type section with inconsistent count (2 declared, 1 given) "\60\00\00" ;; 1st type ;; "\60\00\00" ;; 2nd type (missed) ) "unexpected end of section or function" ) ;; 1 type declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01" ;; type section with inconsistent count (1 declared, 2 given) "\60\00\00" ;; 1st type "\60\00\00" ;; 2nd type (redundant) ) "section size mismatch" ) ;; Import count can be zero (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\01\00" ;; import count can be zero ) ;; Malformed import kind (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\04" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\05" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\04\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind ) "malformed import kind" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\05\01" ;; import section with single entry "\00" ;; string length 0 "\00" ;; string length 0 "\80" ;; malformed import kind "\00" ;; dummy byte ) "malformed import kind" ) ;; 2 import declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\16\02" ;; import section with inconsistent count (2 declared, 1 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (missed) ) "unexpected end of section or function" ) ;; 1 import declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\09\02" ;; type section "\60\01\7f\00" ;; type 0 "\60\01\7d\00" ;; type 1 "\02\2b\01" ;; import section with inconsistent count (1 declared, 2 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (redundant) "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\66\33\32" ;; print_f32 "\00\01" ;; import kind, import signature index ) "section size mismatch" ) ;; Table count can be zero (module binary "\00asm" "\01\00\00\00" "\04\01\00" ;; table count can be zero ) ;; 1 table declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\01\01" ;; table section with inconsistent count (1 declared, 0 given) ;; "\70\01\00\00" ;; table entity ) "unexpected end of section or function" ) ;; Malformed table limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; table section with one entry "\70" ;; anyfunc "\02" ;; malformed table limits flag "\00" ;; min ) "tables cannot be shared" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\06\01" ;; table section with one entry "\70" ;; anyfunc "\81\00" ;; malformed table limits flag as LEB128 "\00\00" ;; dummy bytes ) "malformed limits flags" ) ;; Memory count can be zero (module binary "\00asm" "\01\00\00\00" "\05\01\00" ;; memory count can be zero ) ;; 1 memory declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\01\01" ;; memory section with inconsistent count (1 declared, 0 given) ;; "\00\00" ;; memory 0 (missed) ) "unexpected end of section or function" ) ;; Malformed memory limits flag (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section with one entry "\04" ;; malformed memory limits flag "\00" ;; min 0 ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; memory section with one entry "\81\00" ;; malformed memory limits flag as LEB128 "\00" ;; min 0 ) "malformed limits flags" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; memory section with one entry "\81\01" ;; malformed memory limits flag as LEB128 "\00" ;; min 0 ) "malformed limits flags" ) ;; Global count can be zero (module binary "\00asm" "\01\00\00\00" "\06\01\00" ;; global count can be zero ) ;; 2 global declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\06\02" ;; global section with inconsistent count (2 declared, 1 given) "\7f\00\41\00\0b" ;; global 0 ;; "\7f\00\41\00\0b" ;; global 1 (missed) ) "unexpected end of section or function" ) ;; 1 global declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; global section with inconsistent count (1 declared, 2 given) "\7f\00\41\00\0b" ;; global 0 "\7f\00\41\00\0b" ;; global 1 (redundant) ) "section size mismatch" ) ;; Export count can be 0 (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\01\00" ;; export count can be zero "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) ;; 2 export declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\06\02" ;; export section with inconsistent count (2 declared, 1 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index ;; "\02" ;; export 1 (missed) ;; "\66\32" ;; export name ;; "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "unexpected end of section or function" ) ;; 1 export declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\0b\01" ;; export section with inconsistent count (1 declared, 2 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index "\02" ;; export 1 (redundant) "\66\32" ;; export name "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "section size mismatch" ) ;; elem segment count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\01\00" ;; elem segment count can be zero "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) ;; 2 elem segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 ;; "\00\41\00\0b\01\00" ;; elem 1 (missed) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "unexpected end" ) ;; 1 elem segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\0d\01" ;; elem with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00\0b\01\00" ;; elem 1 (redundant) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "section size mismatch" ) ;; data segment count can be zero (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\01\00" ;; data segment count can be zero ) ;; 2 data segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\07\02" ;; data with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\61" ;; data 0 ;; "\00\41\01\0b\01\62" ;; data 1 (missed) ) "unexpected end of section or function" ) ;; 1 data segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0d\01" ;; data with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\61" ;; data 0 "\00\41\01\0b\01\62" ;; data 1 (redundant) ) "section size mismatch" ) ;; data segment has 7 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\03\0b" ;; data segment 0 "\07" ;; data segment size with inconsistent lengths (7 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "unexpected end of section or function" ) ;; data segment has 5 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\00\0b" ;; data segment 0 "\05" ;; data segment size with inconsistent lengths (5 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "section size mismatch" ) ;; br_table target count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\11\01" ;; code section "\0f\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\00" ;; br_table target count can be zero "\02" ;; break depth for default "\0b\0b\0b" ;; end ) ;; 1 br_table target declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\12\01" ;; code section "\11\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\01" ;; br_table with inconsistent target count (1 declared, 2 given) "\00" ;; break depth 0 "\01" ;; break depth 1 "\02" ;; break depth for default "\0b\0b\0b" ;; end ) "unexpected end" ) ;; Start section (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) ;; Multiple start sections (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) "junk after last section" ) ================================================ FILE: Test/WebAssembly/threads/block.wast ================================================ ;; Test `block` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (block) (block $l) ) (func (export "singular") (result i32) (block (nop)) (block (result i32) (i32.const 7)) ) (func (export "multi") (result i32) (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 7) (call $dummy) ) (drop) (block (result i32 i64 i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i64.const 7) (call $dummy) (call $dummy) (call $dummy) (call $dummy) (i32.const 9) (call $dummy) ) (drop) (drop) ) (func (export "nested") (result i32) (block (result i32) (block (call $dummy) (block) (nop)) (block (result i32) (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (call $dummy) (i32.const 150) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) ) (func (export "as-select-first") (result i32) (select (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (block (result i32) (i32.const 1))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (block (result i32) (i32.const 1)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (block (result i32) (i32.const 1)) (call $dummy)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (block (result i32) (i32.const 1))) ) (func (export "as-if-condition") (block (result i32) (i32.const 1)) (if (then (call $dummy))) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (block (result i32) (i32.const 1))) (else (i32.const 2))) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 1) (then (i32.const 2)) (else (block (result i32) (i32.const 1)))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (block (result i32) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (block (result i32) (i32.const 1)))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (block (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (block (result i32) (i32.const 1)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (block (result i32) (i32.const 0)) ) ) ) (func (export "as-store-first") (block (result i32) (i32.const 1)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (block (result i32) (i32.const 1)) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (block (result i32) (i32.const 1))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (block (result i32) (i32.const 1))) ) (func (export "as-return-value") (result i32) (block (result i32) (i32.const 1)) (return) ) (func (export "as-drop-operand") (drop (block (result i32) (i32.const 1))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (block (result i32) (i32.const 1)))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (block (result i32) (i32.const 1))) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (block (result i32) (i32.const 1))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (block (result i32) (i32.const 1))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (block (result i32) (i32.const 1))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (block (result i32) (call $dummy) (i32.const 3)) (block (result i32) (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (block (result f32) (call $dummy) (f32.const 3)) (block (result f32) (call $dummy) (f32.const 3)) ) ) (func (export "as-binary-operands") (result i32) (i32.mul (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) ) ) (func (export "as-compare-operands") (result i32) (f32.gt (block (result f32 f32) (call $dummy) (f32.const 3) (call $dummy) (f32.const 3) ) ) ) (func (export "as-mixed-operands") (result i32) (block (result i32 i32) (call $dummy) (i32.const 3) (call $dummy) (i32.const 4) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (block (br 0) (unreachable)) (block (br_if 0 (i32.const 1)) (unreachable)) (block (br_table 0 (i32.const 0)) (unreachable)) (block (br_table 0 0 0 (i32.const 1)) (unreachable)) (i32.const 19) ) (func (export "break-value") (result i32) (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) ) (func (export "break-multi-value") (result i32 i32 i64) (block (result i32 i32 i64) (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) ) (func (export "break-repeated") (result i32) (block (result i32) (br 0 (i32.const 18)) (br 0 (i32.const 19)) (drop (br_if 0 (i32.const 20) (i32.const 0))) (drop (br_if 0 (i32.const 20) (i32.const 1))) (br 0 (i32.const 21)) (br_table 0 (i32.const 22) (i32.const 4)) (br_table 0 0 0 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) ) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) ) (local.get 0) ) (func (export "param") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) ) ) (func (export "params") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) ) ) (func (export "params-id") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32)) (i32.add) ) (func (export "param-break") (result i32) (i32.const 1) (block (param i32) (result i32) (i32.const 2) (i32.add) (br 0) ) ) (func (export "params-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32) (i32.add) (br 0) ) ) (func (export "params-id-break") (result i32) (i32.const 1) (i32.const 2) (block (param i32 i32) (result i32 i32) (br 0)) (i32.add) ) (func (export "effects") (result i32) (local i32) (block (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 0) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) (i32.eq (local.get 0) (i32.const -14)) ) (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (block (type $block-sig-1)) (block (type $block-sig-2) (i32.const 0)) (block (type $block-sig-3) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4)) (drop) (drop) (drop) (block (type $block-sig-2) (result i32) (i32.const 0)) (block (type $block-sig-3) (param i32) (drop)) (i32.const 0) (f64.const 0) (i32.const 0) (block (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-select-first") (i32.const 1)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 1)) (assert_return (invoke "as-loop-mid") (i32.const 1)) (assert_return (invoke "as-loop-last") (i32.const 1)) (assert_return (invoke "as-if-condition")) (assert_return (invoke "as-if-then") (i32.const 1)) (assert_return (invoke "as-if-else") (i32.const 2)) (assert_return (invoke "as-br_if-first") (i32.const 1)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 1)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-local.set-value") (i32.const 1)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "as-binary-operands") (i32.const 12)) (assert_return (invoke "as-compare-operands") (i32.const 0)) (assert_return (invoke "as-mixed-operands") (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-multi-value") (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0xf)) (assert_return (invoke "param") (i32.const 3)) (assert_return (invoke "params") (i32.const 3)) (assert_return (invoke "params-id") (i32.const 3)) (assert_return (invoke "param-break") (i32.const 3)) (assert_return (invoke "params-break") (i32.const 3)) (assert_return (invoke "params-id-break") (i32.const 3)) (assert_return (invoke "effects") (i32.const 1)) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (type $sig) (result i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (param i32) (result i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (type $sig) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (result i32) (param i32) (type $sig)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (result i32) (param i32)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (block (param $x i32) (drop)))") "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (block (type $sig) (result i32) (i32.const 0)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (drop)) (unreachable))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (block (type $sig) (param i32) (result i32)) (unreachable))" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (block (type $sig) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (block))) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-void (block (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-void (block (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-void (block (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-void (block (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (block (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i32 (result i32) (block (result i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i64 (result i64) (block (result i64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f32 (result f32) (block (result f32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f64 (result f64) (block (result f64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-nums (result i32 i32) (block (result i32 i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-block (i32.const 0) (block (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-loop (i32.const 0) (loop (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (block (result i32)) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i32 (result i32) (block (result i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i64 (result i64) (block (result i64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f32 (result f32) (block (result f32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f64 (result f64) (block (result f64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (block (result i32 i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-i64 (result i32) (block (result i32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f32 (result i32) (block (result i32) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f64 (result i32) (block (result i32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-i32 (result i64) (block (result i64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f32 (result i64) (block (result i64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f64 (result i64) (block (result i64) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i32 (result f32) (block (result f32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i64 (result f32) (block (result f32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-f64 (result f32) (block (result f32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i32 (result f64) (block (result f64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i64 (result f64) (block (result f64) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-f32 (result f32) (block (result f64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result i32 i32) (block (result i32 i32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result i32) (block (result i32) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-i64 (result i32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f32 (result i32) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f64 (result i32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-i32 (result i64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f32 (result i64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f64 (result i64) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i32 (result f32) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i64 (result f32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-f64 (result f32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i32 (result f64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i64 (result f64) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-f32 (result f64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i32 (result i32) (block (result i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i64 (result i64) (block (result i64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f32 (result f32) (block (result f32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f64 (result f64) (block (result f64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i32 (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i64 (result i64) (block (result i64) (br 0) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f32 (result f32) (block (result f32) (br 0) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f64 (result f64) (block (result f64) (br 0) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-nums (result i32 i32) (block (result i32 i32) (br 0) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i32 (result f64) (block (result i64) (br 0 (i32.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-partial-vs-nums (result i32 i32) (i32.const 1) (block (result i32 i32) (br 0 (i32.const 0)) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (nop)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i32 (result f64) (block (result f64) (br 0 (i32.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-nums (result i32 i32) (block (result i32 i32) (br 0 (i32.const 0)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-void (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-void (block (result i64) (block (result i64) (br 1 (i64.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-void (block (result f32) (block (result f32) (br 1 (f32.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-void (block (result f64) (block (result f64) (br 1 (f64.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-nums-vs-void (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 1) (i32.const 2))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i32 (result i32) (block (result i32) (block (br 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i64 (result i64) (block (result i64) (block (br 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f32 (result f32) (block (result f32) (block (br 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f64 (result f64) (block (result f64) (block (br 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i32 (result i32) (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i64 (result i64) (block (result i64) (block (result i64) (br 1 (nop))) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f32 (result f32) (block (result f32) (block (result f32) (br 1 (nop))) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f64 (result f64) (block (result f64) (block (result f64) (br 1 (nop))) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-i64 (result i32) (block (result i32) (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f32 (result i32) (block (result i32) (block (result i32) (br 1 (f32.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f64 (result i32) (block (result i32) (block (result i32) (br 1 (f64.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-i32 (result i64) (block (result i64) (block (result i64) (br 1 (i32.const 1))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f32 (result i64) (block (result i64) (block (result i64) (br 1 (f32.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f64 (result i64) (block (result i64) (block (result i64) (br 1 (f64.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i32 (result f32) (block (result f32) (block (result f32) (br 1 (i32.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i64 (result f32) (block (result f32) (block (result f32) (br 1 (i64.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-f64 (result f32) (block (result f32) (block (result f32) (br 1 (f64.const 1.0))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i32 (result f64) (block (result f64) (block (result f64) (br 1 (i32.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i64 (result f64) (block (result f64) (block (result f64) (br 1 (i64.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-f32 (result f64) (block (result f64) (block (result f64) (br 1 (f32.const 1.0))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32 i32) (block (result i32 i32) (br 1 (i32.const 0))) (br 0 (i32.const 1) (i32.const 2)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i32 (result i32) (i32.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i64 (result i64) (i64.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f32 (result f32) (f32.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f64 (result f64) (f64.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-nums (result i32) (i32.add (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i32 (result i32) (i32.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i64 (result i64) (i64.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f32 (result f32) (f32.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f64 (result f64) (f64.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-nums (result i32) (i32.add (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-i64 (result i32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f32 (result i32) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f64 (result i32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-i32 (result i64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f32 (result i64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f64 (result i64) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i32 (result f32) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i64 (result f32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-f64 (result f32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i32 (result f64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i64 (result f64) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-f32 (result f64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-num-vs-nums (result i32) (i32.add (block (br 0 (i64.const 9) (i32.const 10)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (param i32 f64) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (block (param i32) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (block (param f32 i32) (drop) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (block (param i32 f64) (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (block (param i32) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (block (param f32 i32) (drop) (drop))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) block (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (block (param $x i32)))") "unexpected token" ) (assert_malformed (module quote "(func block end $l)") "mismatching label" ) (assert_malformed (module quote "(func block $a end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/threads/br.wast ================================================ ;; Test `br` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br 0))))) (func (export "type-i64") (block (drop (i64.ctz (br 0))))) (func (export "type-f32") (block (drop (f32.neg (br 0))))) (func (export "type-f64") (block (drop (f64.neg (br 0))))) (func (export "type-i32-i32") (block (drop (i32.add (br 0))))) (func (export "type-i64-i64") (block (drop (i64.add (br 0))))) (func (export "type-f32-f32") (block (drop (f32.add (br 0))))) (func (export "type-f64-f64") (block (drop (f64.add (br 0))))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br 0 (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br 0 (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br 0 (f64.const 4)))) ) (func (export "type-f64-f64-value") (result f64 f64) (block (result f64 f64) (f64.add (br 0 (f64.const 4) (f64.const 5))) (f64.const 6) ) ) (func (export "as-block-first") (block (br 0) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br 0) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br 0)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br 0 (i32.const 2))) ) (func (export "as-loop-first") (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 3)) (i32.const 2))) ) (func (export "as-loop-mid") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 4)) (i32.const 2)) ) ) (func (export "as-loop-last") (result i32) (block (result i32) (loop (result i32) (nop) (call $dummy) (br 1 (i32.const 5))) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br 0 (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br 0))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br 0 (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br 0))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br 0 (i64.const 7)))) ) (func (export "as-return-values") (result i32 i64) (i32.const 2) (block (result i64) (return (br 0 (i32.const 1) (i64.const 7)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br 0 (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br 1 (i32.const 3))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br 1 (i32.const 4))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br 0 (i32.const 5)) (local.get 0) (local.get 1)) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br 0 (i32.const 6)) (local.get 1)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7))) ) ) (func (export "as-select-all") (result i32) (block (result i32) (select (br 0 (i32.const 8)))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3)) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3)) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14))) ) ) (func (export "as-call-all") (result i32) (block (result i32) (call $f (br 0 (i32.const 15)))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) ) ) ) (func (export "as-call_indirect-all") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 24)))) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br 0 (i32.const 17))) (i32.const -1)) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.tee 0 (br 0 (i32.const 1)))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br 0 (i32.const 1)))) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br 0 (f32.const 1.7)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br 0 (i64.const 30)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1) ) ) (func (export "as-store-both") (result i32) (block (result i32) (i64.store (br 0 (i32.const 32))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1) ) ) (func (export "as-storeN-both") (result i32) (block (result i32) (i64.store16 (br 0 (i32.const 34))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3.4)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br 0 (i32.const 3)) (i32.const 10))) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br 0 (i64.const 45)))) ) (func (export "as-binary-both") (result i32) (block (result i32) (i32.add (br 0 (i32.const 46)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br 0 (i32.const 44)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br 0 (i32.const 43)) (f64.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br 0 (i32.const 42)))) ) (func (export "as-compare-both") (result i32) (block (result i32) (f64.le (br 0 (i32.const 44)))) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br 0 (i32.const 41)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br 0 (i32.const 40)))) ) (func (export "nested-block-value") (result i32) (i32.add (i32.const 1) (block (result i32) (call $dummy) (i32.add (i32.const 4) (br 0 (i32.const 8))) ) ) ) (func (export "nested-br-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br 1 (i32.const 8))) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br 1 (i32.const 8)) (i32.const 1))) (i32.const 32) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) ) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br 0 (i32.const 8))) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-i32")) (assert_return (invoke "type-i64-i64")) (assert_return (invoke "type-f32-f32")) (assert_return (invoke "type-f64-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "type-f64-f64-value") (f64.const 4) (f64.const 5)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-return-values") (i32.const 2) (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-select-all") (i32.const 8)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call-all") (i32.const 15)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-call_indirect-all") (i32.const 24)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-store-both") (i32.const 32)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-storeN-both") (i32.const 34)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-binary-both") (i32.const 46)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-compare-both") (i32.const 44)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value") (i32.const 9)) (assert_return (invoke "nested-br-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) (assert_return (invoke "nested-br_table-value") (i32.const 9)) (assert_return (invoke "nested-br_table-value-index") (i32.const 9)) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br (i32.const 0) (block (result i32) (br 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_if (i32.const 0) (block (result i32) (br_if 0 (br 0) (i32.const 1))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_table (i32.const 0) (block (result i32) (br_table 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-return (block (result i32) (return (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-select (block (result i32) (select (br 0) (i32.const 1) (i32.const 2)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-call (block (result i32) (call 1 (br 0)) ) (i32.eqz) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-arg-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (br 0) (i32.const 0) ) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.set (local i32) (block (result i32) (local.set 0 (br 0)) (local.get 0) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.tee (local i32) (block (result i32) (local.tee 0 (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-arg-empty-in-global.set (block (result i32) (global.set $x (br 0)) (global.get $x) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-arg-empty-in-memory.grow (block (result i32) (memory.grow (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-load (block (result i32) (i32.load (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-store (block (result i32) (i32.store (br 0) (i32.const 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br 1))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br 5))))) "unknown label" ) (assert_invalid (module (func $large-label (br 0x10000001))) "unknown label" ) ================================================ FILE: Test/WebAssembly/threads/br_if.wast ================================================ ;; Test `br_if` operator (module (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_if 0 (i32.const 0) (i32.const 1))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_if 0 (i64.const 0) (i32.const 1))))) ) (func (export "type-f32") (block (drop (f32.neg (br_if 0 (f32.const 0) (i32.const 1))))) ) (func (export "type-f64") (block (drop (f64.neg (br_if 0 (f64.const 0) (i32.const 1))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_if 0 (i64.const 2) (i32.const 1)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_if 0 (f32.const 3) (i32.const 1)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 4) (i32.const 1)))) ) (func (export "as-block-first") (param i32) (result i32) (block (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-mid") (param i32) (result i32) (block (call $dummy) (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-last") (param i32) (block (call $dummy) (call $dummy) (br_if 0 (local.get 0))) ) (func (export "as-block-first-value") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 10) (local.get 0))) (return (i32.const 11)) ) ) (func (export "as-block-mid-value") (param i32) (result i32) (block (result i32) (call $dummy) (drop (br_if 0 (i32.const 20) (local.get 0))) (return (i32.const 21)) ) ) (func (export "as-block-last-value") (param i32) (result i32) (block (result i32) (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (local.get 0)) ) ) (func (export "as-loop-first") (param i32) (result i32) (block (loop (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 3) ) (func (export "as-loop-mid") (param i32) (result i32) (block (loop (call $dummy) (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 4) ) (func (export "as-loop-last") (param i32) (loop (call $dummy) (br_if 1 (local.get 0))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3))) (i32.const 4) ) ) (func (export "as-br_if-value-cond") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 2) (br_if 0 (i32.const 1) (local.get 0)))) (i32.const 4) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3)) (i32.const 4) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 2) (br_if 0 (i32.const 1) (i32.const 3))) (i32.const 4) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_if 0 (i64.const 1) (i32.const 2)))) ) (func (export "as-if-cond") (param i32) (result i32) (block (result i32) (if (result i32) (br_if 0 (i32.const 1) (local.get 0)) (then (i32.const 2)) (else (i32.const 3)) ) ) ) (func (export "as-if-then") (param i32 i32) (block (if (local.get 0) (then (br_if 1 (local.get 1))) (else (call $dummy))) ) ) (func (export "as-if-else") (param i32 i32) (block (if (local.get 0) (then (call $dummy)) (else (br_if 1 (local.get 1)))) ) ) (func (export "as-select-first") (param i32) (result i32) (block (result i32) (select (br_if 0 (i32.const 3) (i32.const 10)) (i32.const 2) (local.get 0)) ) ) (func (export "as-select-second") (param i32) (result i32) (block (result i32) (select (i32.const 1) (br_if 0 (i32.const 3) (i32.const 10)) (local.get 0)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 1) (i32.const 2) (br_if 0 (i32.const 3) (i32.const 10))) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_if 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_if 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_if 0 (i32.const 14) (i32.const 1)) ) ) ) (func $func (param i32 i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $check) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 1) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (i32.const 3) (br_if 0 (i32.const 4) (i32.const 10)) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (block (result i32) (local.set 0 (br_if 0 (i32.const 17) (local.get 0))) (i32.const -1) ) ) (func (export "as-local.tee-value") (param i32) (result i32) (block (result i32) (local.tee 0 (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (block (result i32) (global.set $a (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (memory 1) (func (export "as-load-address") (result i32) (block (result i32) (i32.load (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-loadN-address") (result i32) (block (result i32) (i32.load8_s (br_if 0 (i32.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (i32.store (br_if 0 (i32.const 30) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i32.store (i32.const 2) (br_if 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_if 0 (i32.const 32) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i32.store16 (i32.const 2) (br_if 0 (i32.const 33) (i32.const 1))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 1.0) (i32.const 1)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_if 0 (i32.const 0) (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (br_if 0 (i32.const 1) (i32.const 42)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "nested-block-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (i32.add (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) )) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) )) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) ) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-last" (i32.const 0))) (assert_return (invoke "as-block-last" (i32.const 1))) (assert_return (invoke "as-block-first-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-first-value" (i32.const 1)) (i32.const 10)) (assert_return (invoke "as-block-mid-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "as-block-mid-value" (i32.const 1)) (i32.const 20)) (assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) (assert_return (invoke "as-loop-last" (i32.const 0))) (assert_return (invoke "as-loop-last" (i32.const 1))) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 1)) (assert_return (invoke "as-br_if-value-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-value-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 1)) (assert_return (invoke "as-br_table-value-index") (i32.const 1)) (assert_return (invoke "as-return-value") (i64.const 1)) (assert_return (invoke "as-if-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-if-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-cond") (i32.const 3)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 4)) (assert_return (invoke "as-call_indirect-first") (i32.const 4)) (assert_return (invoke "as-call_indirect-mid") (i32.const 4)) (assert_return (invoke "as-call_indirect-last") (i32.const 4)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-address") (i32.const 1)) (assert_return (invoke "as-loadN-address") (i32.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f64.const 1.0)) (assert_return (invoke "as-binary-left") (i32.const 1)) (assert_return (invoke "as-binary-right") (i32.const 1)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-memory.grow-size") (i32.const 1)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) (assert_invalid (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-cond-empty-vs-i32 (block (br_if 0)) )) "type mismatch" ) (assert_invalid (module (func $type-cond-void-vs-i32 (block (br_if 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cond-num-vs-i32 (block (br_if 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-void-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_if 1 (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-num-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-return (block (result i32) (return (br_if 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-return (block (result i32) (return (br_if 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br_if 1 (i32.const 1)))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) "unknown label" ) (assert_invalid (module (func $large-label (br_if 0x10000001 (i32.const 1)))) "unknown label" ) ================================================ FILE: Test/WebAssembly/threads/br_table.wast ================================================ ;; Test `br_table` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-f32") (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-f64") (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) ) (func (export "empty") (param i32) (result i32) (block (br_table 0 (local.get 0)) (return (i32.const 21))) (i32.const 22) ) (func (export "empty-value") (param i32) (result i32) (block (result i32) (br_table 0 (i32.const 33) (local.get 0)) (i32.const 31) ) ) (func (export "singleton") (param i32) (result i32) (block (block (br_table 1 0 (local.get 0)) (return (i32.const 21)) ) (return (i32.const 20)) ) (i32.const 22) ) (func (export "singleton-value") (param i32) (result i32) (block (result i32) (drop (block (result i32) (br_table 0 1 (i32.const 33) (local.get 0)) (return (i32.const 31)) ) ) (i32.const 32) ) ) (func (export "multiple") (param i32) (result i32) (block (block (block (block (block (br_table 3 2 1 0 4 (local.get 0)) (return (i32.const 99)) ) (return (i32.const 100)) ) (return (i32.const 101)) ) (return (i32.const 102)) ) (return (i32.const 103)) ) (i32.const 104) ) (func (export "multiple-value") (param i32) (result i32) (local i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (br_table 3 2 1 0 4 (i32.const 200) (local.get 0)) (return (i32.add (local.get 1) (i32.const 99))) )) (return (i32.add (local.get 1) (i32.const 10))) )) (return (i32.add (local.get 1) (i32.const 11))) )) (return (i32.add (local.get 1) (i32.const 12))) )) (return (i32.add (local.get 1) (i32.const 13))) )) (i32.add (local.get 1) (i32.const 14)) ) (func (export "large") (param i32) (result i32) (block (block (br_table 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (local.get 0) ) (return (i32.const -1)) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (func (export "as-block-first") (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0)) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (br_table 1 1 1 (i32.const 4) (i32.const -1)) (i32.const 2) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_table 0 (i32.const 9) (i32.const 0)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_table 0 (i64.const 7) (i32.const 0)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br_table 0 (i32.const 2) (i32.const 0)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br_table 1 (i32.const 3) (i32.const 0))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br_table 1 0 (i32.const 4) (i32.const 0))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br_table 0 (i32.const 5) (i32.const 0)) (local.get 0) (local.get 1) ) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br_table 0 (i32.const 6) (i32.const 1)) (local.get 1) ) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) ) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br_table 0 (i32.const 23) (i32.const 1)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br_table 0 (i32.const 17) (i32.const 1))) (i32.const -1) ) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.set 0 (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) ) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) ) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br_table 0 (i32.const 41) (i32.const 0))) ) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_table 0 (i32.const 40) (i32.const 0)))) ) (func (export "nested-block-value") (param i32) (result i32) (block (result i32) (drop (i32.const -1)) (i32.add (i32.const 1) (block (result i32) (i32.add (i32.const 2) (block (result i32) (drop (i32.const 4)) (i32.add (i32.const 8) (br_table 0 1 2 (i32.const 16) (local.get 0)) ) ) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br_table 2 1 0 (i32.const 8) (local.get 0))) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1) ) ) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) (func (export "nested-br_table-loop-block") (param i32) (result i32) (local.set 0 (loop (result i32) (block (br_table 1 0 0 (local.get 0)) ) (i32.const 0) ) ) (loop (result i32) (block (br_table 0 1 1 (local.get 0)) ) (i32.const 3) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) (assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) (assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) (assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) (assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) (assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) (assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) (assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) (assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) (assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) (assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) (assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) (assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) (assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) (assert_return (invoke "large" (i32.const 0)) (i32.const 0)) (assert_return (invoke "large" (i32.const 1)) (i32.const 1)) (assert_return (invoke "large" (i32.const 100)) (i32.const 0)) (assert_return (invoke "large" (i32.const 101)) (i32.const 1)) (assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) (assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-first") (i32.const 20)) (assert_return (invoke "as-call_indirect-mid") (i32.const 21)) (assert_return (invoke "as-call_indirect-last") (i32.const 22)) (assert_return (invoke "as-call_indirect-func") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-loop-block" (i32.const 1)) (i32.const 3)) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (br_table 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br_table 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-arg-num (block (block (result f32) (br_table 0 1 (f32.const 0) (i32.const 0)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-index-void-vs-i32 (block (br_table 0 0 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-index-num-vs-i32 (block (br_table 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-void-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_table 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-num-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-return (block (result i32) (return (br_table 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-return (block (result i32) (return (br_table 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (block (br_table 2 1 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label (block (br_table 0 0x10000001 0 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-label-default (block (br_table 1 2 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label-default (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label-default (block (br_table 0 0 0x10000001 (i32.const 1))) )) "unknown label" ) ================================================ FILE: Test/WebAssembly/threads/call.wast ================================================ ;; Test `call` operator (module ;; Auxiliary definitions (func $const-i32 (result i32) (i32.const 0x132)) (func $const-i64 (result i64) (i64.const 0x164)) (func $const-f32 (result f32) (f32.const 0xf32)) (func $const-f64 (result f64) (f64.const 0xf64)) (func $const-i32-i64 (result i32 i64) (i32.const 0x132) (i64.const 0x164)) (func $id-i32 (param i32) (result i32) (local.get 0)) (func $id-i64 (param i64) (result i64) (local.get 0)) (func $id-f32 (param f32) (result f32) (local.get 0)) (func $id-f64 (param f64) (result f64) (local.get 0)) (func $id-i32-f64 (param i32 f64) (result i32 f64) (local.get 0) (local.get 1) ) (func $swap-i32-i32 (param i32 i32) (result i32 i32) (local.get 1) (local.get 0) ) (func $swap-f32-f64 (param f32 f64) (result f64 f32) (local.get 1) (local.get 0) ) (func $swap-f64-i32 (param f64 i32) (result i32 f64) (local.get 1) (local.get 0) ) (func $f32-i32 (param f32 i32) (result i32) (local.get 1)) (func $i32-i64 (param i32 i64) (result i64) (local.get 1)) (func $f64-f32 (param f64 f32) (result f32) (local.get 1)) (func $i64-f64 (param i64 f64) (result f64) (local.get 1)) ;; Typing (func (export "type-i32") (result i32) (call $const-i32)) (func (export "type-i64") (result i64) (call $const-i64)) (func (export "type-f32") (result f32) (call $const-f32)) (func (export "type-f64") (result f64) (call $const-f64)) (func (export "type-i32-i64") (result i32 i64) (call $const-i32-i64)) (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) (func (export "type-second-i32") (result i32) (call $f32-i32 (f32.const 32.1) (i32.const 32)) ) (func (export "type-second-i64") (result i64) (call $i32-i64 (i32.const 32) (i64.const 64)) ) (func (export "type-second-f32") (result f32) (call $f64-f32 (f64.const 64) (f32.const 32)) ) (func (export "type-second-f64") (result f64) (call $i64-f64 (i64.const 64) (f64.const 64.1)) ) (func (export "type-all-i32-f64") (result i32 f64) (call $id-i32-f64 (i32.const 32) (f64.const 1.64)) ) (func (export "type-all-i32-i32") (result i32 i32) (call $swap-i32-i32 (i32.const 1) (i32.const 2)) ) (func (export "type-all-f32-f64") (result f64 f32) (call $swap-f32-f64 (f32.const 1) (f64.const 2)) ) (func (export "type-all-f64-i32") (result i32 f64) (call $swap-f64-i32 (f64.const 1) (i32.const 2)) ) ;; Composition (func (export "as-binary-all-operands") (result i32) (i32.add (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) (func (export "as-mixed-operands") (result i32) (call $swap-i32-i32 (i32.const 3) (i32.const 4)) (i32.const 5) (i32.add) (i32.mul) ) (func (export "as-call-all-operands") (result i32 i32) (call $swap-i32-i32 (call $swap-i32-i32 (i32.const 3) (i32.const 4))) ) ;; Recursion (func $fac (export "fac") (param i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (local.get 1)) (else (call $fac-acc (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) ) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call $fib (i64.sub (local.get 0) (i64.const 2))) (call $fib (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $even (export "even") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 44)) (else (call $odd (i64.sub (local.get 0) (i64.const 1)))) ) ) (func $odd (export "odd") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 99)) (else (call $even (i64.sub (local.get 0) (i64.const 1)))) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call $runaway)) (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) (func $mutual-runaway2 (call $mutual-runaway1)) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call $const-i32) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call $const-i32) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call $const-i32)) ) (func (export "as-if-condition") (result i32) (if (result i32) (call $const-i32) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (call $const-i32) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call $const-i32))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (call $const-i32) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call $const-i32) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (call $const-i32) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (call $const-i32) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (call $const-i32) ) ) ) (func (export "as-store-first") (call $const-i32) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call $const-i32) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call $const-i32)) ) (func (export "as-return-value") (result i32) (call $const-i32) (return) ) (func (export "as-drop-operand") (call $const-i32) (drop) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (call $const-i32))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (call $const-i32)) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (call $const-i32)) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (call $const-i32)) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call $const-i32)) ) (func $dummy (param i32) (result i32) (local.get 0)) (func $du (param f32) (result f32) (local.get 0)) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call $du (f32.const 0x0p+0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call $dummy (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call $dummy (i32.const 1)))) ) ;; Test correct argument passing (func $return-from-long-argument-list-helper (param f32 i32 i32 f64 f32 f32 f32 f64 f32 i32 i32 f32 f64 i64 i64 i32 i64 i64 f32 i64 i64 i64 i32 f32 f32 f32 f64 f32 i32 i64 f32 f64 f64 f32 i32 f32 f32 f64 i64 f64 i32 i64 f32 f64 i32 i32 i32 i64 f64 i32 i64 i64 f64 f64 f64 f64 f64 f64 i32 f32 f64 f64 i32 i64 f32 f32 f32 i32 f64 f64 f64 f64 f64 f32 i64 i64 i32 i32 i32 f32 f64 i32 i64 f32 f32 f32 i32 i32 f32 f64 i64 f32 f64 f32 f32 f32 i32 f32 i64 i32) (result i32) (local.get 99) ) (func (export "return-from-long-argument-list") (param i32) (result i32) (call $return-from-long-argument-list-helper (f32.const 0) (i32.const 0) (i32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (i64.const 0) (local.get 0)) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-i32-i64") (i32.const 0x132) (i64.const 0x164)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-i32-f64") (i32.const 32) (f64.const 1.64)) (assert_return (invoke "type-all-i32-i32") (i32.const 2) (i32.const 1)) (assert_return (invoke "type-all-f32-f64") (f64.const 2) (f32.const 1)) (assert_return (invoke "type-all-f64-i32") (i32.const 2) (f64.const 1)) (assert_return (invoke "as-binary-all-operands") (i32.const 7)) (assert_return (invoke "as-mixed-operands") (i32.const 32)) (assert_return (invoke "as-call-all-operands") (i32.const 3) (i32.const 4)) (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i32.const 44)) (assert_return (invoke "even" (i64.const 1)) (i32.const 99)) (assert_return (invoke "even" (i64.const 100)) (i32.const 44)) (assert_return (invoke "even" (i64.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i32.const 0x132)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 0x132)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 0x132)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 0x132)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 0x132)) (assert_return (invoke "as-local.set-value") (i32.const 0x132)) (assert_return (invoke "as-local.tee-value") (i32.const 0x132)) (assert_return (invoke "as-global.set-value") (i32.const 0x132)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) (assert_return (invoke "return-from-long-argument-list" (i32.const 42)) (i32.const 42)) ;; Invalid typing (assert_invalid (module (func $type-void-vs-num (i32.eqz (call 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (i32.eqz (call 1))) (func (result i64) (i64.const 1)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-1 (call 1)) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-2 (call 1)) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-1-vs-0 (call 1 (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) (func (param i32 f64)) ) "type mismatch" ) (assert_invalid (module (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-block (block (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-block (block (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-loop (loop (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-loop (loop (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-then (if (i32.const 0) (then (call 1))) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-then (if (i32.const 0) (then (call 1 (i32.const 0)))) ) (func (param i32 i32)) ) "type mismatch" ) ;; Unbound function (assert_invalid (module (func $unbound-func (call 1))) "unknown function" ) (assert_invalid (module (func $large-func (call 1012321300))) "unknown function" ) ================================================ FILE: Test/WebAssembly/threads/call_indirect.wast ================================================ ;; Test `call_indirect` operator (module ;; Auxiliary definitions (type $proc (func)) (type $out-i32 (func (result i32))) (type $out-i64 (func (result i64))) (type $out-f32 (func (result f32))) (type $out-f64 (func (result f64))) (type $out-f64-i32 (func (result f64 i32))) (type $over-i32 (func (param i32) (result i32))) (type $over-i64 (func (param i64) (result i64))) (type $over-f32 (func (param f32) (result f32))) (type $over-f64 (func (param f64) (result f64))) (type $over-i32-f64 (func (param i32 f64) (result i32 f64))) (type $swap-i32-i64 (func (param i32 i64) (result i64 i32))) (type $f32-i32 (func (param f32 i32) (result i32))) (type $i32-i64 (func (param i32 i64) (result i64))) (type $f64-f32 (func (param f64 f32) (result f32))) (type $i64-f64 (func (param i64 f64) (result f64))) (type $over-i32-duplicate (func (param i32) (result i32))) (type $over-i64-duplicate (func (param i64) (result i64))) (type $over-f32-duplicate (func (param f32) (result f32))) (type $over-f64-duplicate (func (param f64) (result f64))) (func $const-i32 (type $out-i32) (i32.const 0x132)) (func $const-i64 (type $out-i64) (i64.const 0x164)) (func $const-f32 (type $out-f32) (f32.const 0xf32)) (func $const-f64 (type $out-f64) (f64.const 0xf64)) (func $const-f64-i32 (type $out-f64-i32) (f64.const 0xf64) (i32.const 32)) (func $id-i32 (type $over-i32) (local.get 0)) (func $id-i64 (type $over-i64) (local.get 0)) (func $id-f32 (type $over-f32) (local.get 0)) (func $id-f64 (type $over-f64) (local.get 0)) (func $id-i32-f64 (type $over-i32-f64) (local.get 0) (local.get 1)) (func $swap-i32-i64 (type $swap-i32-i64) (local.get 1) (local.get 0)) (func $i32-i64 (type $i32-i64) (local.get 1)) (func $i64-f64 (type $i64-f64) (local.get 1)) (func $f32-i32 (type $f32-i32) (local.get 1)) (func $f64-f32 (type $f64-f32) (local.get 1)) (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) (table funcref (elem $const-i32 $const-i64 $const-f32 $const-f64 ;; 0..3 $id-i32 $id-i64 $id-f32 $id-f64 ;; 4..7 $f32-i32 $i32-i64 $f64-f32 $i64-f64 ;; 9..11 $fac-i64 $fib-i64 $even $odd ;; 12..15 $runaway $mutual-runaway1 $mutual-runaway2 ;; 16..18 $over-i32-duplicate $over-i64-duplicate ;; 19..20 $over-f32-duplicate $over-f64-duplicate ;; 21..22 $fac-i32 $fac-f32 $fac-f64 ;; 23..25 $fib-i32 $fib-f32 $fib-f64 ;; 26..28 $const-f64-i32 $id-i32-f64 $swap-i32-i64 ;; 29..31 ) ) ;; Syntax (func (call_indirect (i32.const 0)) (call_indirect (param i64) (i64.const 0) (i32.const 0)) (call_indirect (param i64) (param) (param f64 i32 i64) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) (call_indirect (result) (i32.const 0)) (drop (i32.eqz (call_indirect (result i32) (i32.const 0)))) (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0)))) (drop (i32.eqz (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0)) )) (drop (i32.eqz (call_indirect (param) (param i64) (param) (param f64 i32 i64) (param) (param) (result) (result i32) (result) (result) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) )) (drop (i64.eqz (call_indirect (type $over-i64) (param i64) (result i64) (i64.const 0) (i32.const 0) ) )) ) ;; Typing (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0)) ) (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1)) ) (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2)) ) (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3)) ) (func (export "type-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-index") (result i64) (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) ) (func (export "type-first-i32") (result i32) (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) ) (func (export "type-first-i64") (result i64) (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) ) (func (export "type-first-f32") (result f32) (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) ) (func (export "type-first-f64") (result f64) (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) ) (func (export "type-second-i32") (result i32) (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) ) (func (export "type-second-i64") (result i64) (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) ) (func (export "type-second-f32") (result f32) (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) ) (func (export "type-second-f64") (result f64) (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) ) (func (export "type-all-f64-i32") (result f64 i32) (call_indirect (type $out-f64-i32) (i32.const 29)) ) (func (export "type-all-i32-f64") (result i32 f64) (call_indirect (type $over-i32-f64) (i32.const 1) (f64.const 2) (i32.const 30) ) ) (func (export "type-all-i32-i64") (result i64 i32) (call_indirect (type $swap-i32-i64) (i32.const 1) (i64.const 2) (i32.const 31) ) ) ;; Dispatch (func (export "dispatch") (param i32 i64) (result i64) (call_indirect (type $over-i64) (local.get 1) (local.get 0)) ) (func (export "dispatch-structural-i64") (param i32) (result i64) (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) ) (func (export "dispatch-structural-i32") (param i32) (result i32) (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0)) ) (func (export "dispatch-structural-f32") (param i32) (result f32) (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0)) ) (func (export "dispatch-structural-f64") (param i32) (result f64) (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0)) ) ;; Recursion (func $fac-i64 (export "fac-i64") (type $over-i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 12) ) ) ) ) ) (func $fib-i64 (export "fib-i64") (type $over-i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 2)) (i32.const 13) ) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 13) ) ) ) ) ) (func $fac-i32 (export "fac-i32") (type $over-i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 1)) (else (i32.mul (local.get 0) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 23) ) ) ) ) ) (func $fac-f32 (export "fac-f32") (type $over-f32) (if (result f32) (f32.eq (local.get 0) (f32.const 0.0)) (then (f32.const 1.0)) (else (f32.mul (local.get 0) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 24) ) ) ) ) ) (func $fac-f64 (export "fac-f64") (type $over-f64) (if (result f64) (f64.eq (local.get 0) (f64.const 0.0)) (then (f64.const 1.0)) (else (f64.mul (local.get 0) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 25) ) ) ) ) ) (func $fib-i32 (export "fib-i32") (type $over-i32) (if (result i32) (i32.le_u (local.get 0) (i32.const 1)) (then (i32.const 1)) (else (i32.add (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 2)) (i32.const 26) ) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 26) ) ) ) ) ) (func $fib-f32 (export "fib-f32") (type $over-f32) (if (result f32) (f32.le (local.get 0) (f32.const 1.0)) (then (f32.const 1.0)) (else (f32.add (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 2.0)) (i32.const 27) ) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 27) ) ) ) ) ) (func $fib-f64 (export "fib-f64") (type $over-f64) (if (result f64) (f64.le (local.get 0) (f64.const 1.0)) (then (f64.const 1.0)) (else (f64.add (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 2.0)) (i32.const 28) ) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 28) ) ) ) ) ) (func $even (export "even") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 44)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 15) ) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 99)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 14) ) ) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-if-condition") (result i32) (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i64) (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)))) ) (func (export "as-br_table-first") (result f32) (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0)) ) (func (export "as-store-first") (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-return-value") (result i32) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return) ) (func (export "as-drop-operand") (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop) ) (func (export "as-br-value") (result f32) (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6)))) ) (func (export "as-local.set-value") (result f64) (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0) ) (func (export "as-local.tee-value") (result f64) (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) ) (global $a (mut f64) (f64.const 10.0)) (func (export "as-global.set-value") (result f64) (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6)) ) ) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-index") (i64.const 100)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "type-all-f64-i32") (f64.const 0xf64) (i32.const 32)) (assert_return (invoke "type-all-i32-f64") (i32.const 1) (f64.const 2)) (assert_return (invoke "type-all-i32-i64") (i64.const 2) (i32.const 1)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 32) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") (assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880)) (assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55)) (assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9)) (assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9)) (assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880)) (assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55)) (assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0)) (assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0)) (assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch") (assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120)) (assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800)) (assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0)) (assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0)) (assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0)) (assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0)) (assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2)) (assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8)) (assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946)) (assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0)) (assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0)) (assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0)) (assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0)) (assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0)) (assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0)) (assert_return (invoke "even" (i32.const 0)) (i32.const 44)) (assert_return (invoke "even" (i32.const 1)) (i32.const 99)) (assert_return (invoke "even" (i32.const 100)) (i32.const 44)) (assert_return (invoke "even" (i32.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i64.const 0x164)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (f32.const 0xf32)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (f32.const 1)) (assert_return (invoke "as-local.set-value") (f64.const 1)) (assert_return (invoke "as-local.tee-value") (f64.const 1)) (assert_return (invoke "as-global.set-value") (f64.const 1.0)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) ;; Invalid syntax (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (type $sig) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (result i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (type $sig) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func" " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (param i32) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "inline function type" ) ;; Invalid typing (assert_invalid (module (type (func)) (func $no-table (call_indirect (type 0) (i32.const 0))) ) "unknown table" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (result i64))) (table 0 funcref) (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-2-vs-0 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-first-void-vs-num (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-second-void-vs-num (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 f64))) (table 0 funcref) (func $type-first-num-vs-num (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $type-second-num-vs-num (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-block (block (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-block (block (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) ) "type mismatch" ) ;; Unbound type (assert_invalid (module (table 0 funcref) (func $unbound-type (call_indirect (type 1) (i32.const 0))) ) "unknown type" ) (assert_invalid (module (table 0 funcref) (func $large-type (call_indirect (type 1012321300) (i32.const 0))) ) "unknown type" ) ;; Unbound function in table (assert_invalid (module (table funcref (elem 0 0))) "unknown function" ) ================================================ FILE: Test/WebAssembly/threads/const.wast ================================================ ;; Test t.const instructions ;; Syntax error (module (func (i32.const 0_123_456_789) drop)) (module (func (i32.const 0x0_9acf_fBDF) drop)) (assert_malformed (module quote "(func (i32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 0xg) drop)") "unknown operator" ) (module (func (i64.const 0_123_456_789) drop)) (module (func (i64.const 0x0125_6789_ADEF_bcef) drop)) (assert_malformed (module quote "(func (i64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 0xg) drop)") "unknown operator" ) (module (func (f32.const 0123456789) drop)) (module (func (f32.const 0123456789e019) drop)) (module (func (f32.const 0123456789e+019) drop)) (module (func (f32.const 0123456789e-019) drop)) (module (func (f32.const 0123456789.) drop)) (module (func (f32.const 0123456789.e019) drop)) (module (func (f32.const 0123456789.e+019) drop)) (module (func (f32.const 0123456789.e-019) drop)) (module (func (f32.const 0123456789.0123456789) drop)) (module (func (f32.const 0123456789.0123456789e019) drop)) (module (func (f32.const 0123456789.0123456789e+019) drop)) (module (func (f32.const 0123456789.0123456789e-019) drop)) (module (func (f32.const 0x0123456789ABCDEF) drop)) (module (func (f32.const 0x0123456789ABCDEFp019) drop)) (module (func (f32.const 0x0123456789ABCDEFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEFp-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.) drop)) (module (func (f32.const 0x0123456789ABCDEF.p019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aF) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp-019) drop)) (assert_malformed (module quote "(func (f32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f32.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0pA) drop)") "unknown operator" ) (module (func (f64.const 0123456789) drop)) (module (func (f64.const 0123456789e019) drop)) (module (func (f64.const 0123456789e+019) drop)) (module (func (f64.const 0123456789e-019) drop)) (module (func (f64.const 0123456789.) drop)) (module (func (f64.const 0123456789.e019) drop)) (module (func (f64.const 0123456789.e+019) drop)) (module (func (f64.const 0123456789.e-019) drop)) (module (func (f64.const 0123456789.0123456789) drop)) (module (func (f64.const 0123456789.0123456789e019) drop)) (module (func (f64.const 0123456789.0123456789e+019) drop)) (module (func (f64.const 0123456789.0123456789e-019) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.e+0_1_9) drop)) (module (func (f64.const 0_1_2_3_4_5_6_7_8_9.0_1_2_3_4_5_6_7_8_9e0_1_9) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.p0_1_9) drop)) (module (func (f64.const 0x0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_f.0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_a_b_c_d_e_fp0_1_9) drop)) (assert_malformed (module quote "(func (f64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f64.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0pA) drop)") "unknown operator" ) ;; Range error (module (func (i32.const 0xffffffff) drop)) (module (func (i32.const -0x80000000) drop)) (assert_malformed (module quote "(func (i32.const 0x100000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -0x80000001) drop)") "constant out of range" ) (module (func (i32.const 4294967295) drop)) (module (func (i32.const -2147483648) drop)) (assert_malformed (module quote "(func (i32.const 4294967296) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -2147483649) drop)") "constant out of range" ) (module (func (i64.const 0xffffffffffffffff) drop)) (module (func (i64.const -0x8000000000000000) drop)) (assert_malformed (module quote "(func (i64.const 0x10000000000000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -0x8000000000000001) drop)") "constant out of range" ) (module (func (i64.const 18446744073709551615) drop)) (module (func (i64.const -9223372036854775808) drop)) (assert_malformed (module quote "(func (i64.const 18446744073709551616) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -9223372036854775809) drop)") "constant out of range" ) (module (func (f32.const 0x1p127) drop)) (module (func (f32.const -0x1p127) drop)) (module (func (f32.const 0x1.fffffep127) drop)) (module (func (f32.const -0x1.fffffep127) drop)) (module (func (f32.const 0x1.fffffe7p127) drop)) (module (func (f32.const -0x1.fffffe7p127) drop)) (module (func (f32.const 0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const -0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const 0x1.fffffefffffffffffffp127) drop)) (module (func (f32.const -0x1.fffffefffffffffffffp127) drop)) (assert_malformed (module quote "(func (f32.const 0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const 0x1.ffffffp127) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1.ffffffp127) drop)") "constant out of range" ) (module (func (f32.const 1e38) drop)) (module (func (f32.const -1e38) drop)) (assert_malformed (module quote "(func (f32.const 1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -1e39) drop)") "constant out of range" ) (module (func (f32.const 340282356779733623858607532500980858880) drop)) (module (func (f32.const -340282356779733623858607532500980858880) drop)) (assert_malformed (module quote "(func (f32.const 340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -340282356779733661637539395458142568448) drop)") "constant out of range" ) (module (func (f64.const 0x1p1023) drop)) (module (func (f64.const -0x1p1023) drop)) (module (func (f64.const 0x1.fffffffffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffffp1023) drop)) (module (func (f64.const 0x1.fffffffffffff7p1023) drop)) (module (func (f64.const -0x1.fffffffffffff7p1023) drop)) (module (func (f64.const 0x1.fffffffffffff7ffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffff7ffffffp1023) drop)) (assert_malformed (module quote "(func (f64.const 0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const 0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (module (func (f64.const 1e308) drop)) (module (func (f64.const -1e308) drop)) (assert_malformed (module quote "(func (f64.const 1e309) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -1e309) drop)") "constant out of range" ) (module (func (f64.const 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (f64.const -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (assert_malformed (module quote "(func (f64.const 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (module (func (f32.const nan:0x1) drop)) (module (func (f64.const nan:0x1) drop)) (module (func (f32.const nan:0x7f_ffff) drop)) (module (func (f64.const nan:0xf_ffff_ffff_ffff) drop)) (assert_malformed (module quote "(func (f32.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const nan:0x80_0000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x10_0000_0000_0000) drop)") "constant out of range" ) ;; Rounding behaviour ;; f32, small exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) ;; f32, large exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000000))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000000))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000007ffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000007ffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000000))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000000))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000bffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x400000bffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000c000000))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x400000c000000))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951488))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951488))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951489))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951489))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169215))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169215))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169216))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169216))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) ;; f32, subnormal (module (func (export "f") (result f32) (f32.const +0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000006p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000006p-126)) ;; f32, round down at limit to infinity (module (func (export "f") (result f32) (f32.const +0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) ;; f64, small exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+999)) ;; f64, large exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const +1152921504606847104))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847104))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847105))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847105))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847359))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847359))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847360))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847360))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+60)) ;; f64, subnormal (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-1022)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-1022)) ;; f64, round down at limit to infinity (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) ================================================ FILE: Test/WebAssembly/threads/conversions.wast ================================================ (module (func (export "i64.extend_i32_s") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_i32_u") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_f32_s") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_f32_u") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) (func (export "i32.trunc_f64_s") (param $x f64) (result i32) (i32.trunc_f64_s (local.get $x))) (func (export "i32.trunc_f64_u") (param $x f64) (result i32) (i32.trunc_f64_u (local.get $x))) (func (export "i64.trunc_f32_s") (param $x f32) (result i64) (i64.trunc_f32_s (local.get $x))) (func (export "i64.trunc_f32_u") (param $x f32) (result i64) (i64.trunc_f32_u (local.get $x))) (func (export "i64.trunc_f64_s") (param $x f64) (result i64) (i64.trunc_f64_s (local.get $x))) (func (export "i64.trunc_f64_u") (param $x f64) (result i64) (i64.trunc_f64_u (local.get $x))) (func (export "i32.trunc_sat_f32_s") (param $x f32) (result i32) (i32.trunc_sat_f32_s (local.get $x))) (func (export "i32.trunc_sat_f32_u") (param $x f32) (result i32) (i32.trunc_sat_f32_u (local.get $x))) (func (export "i32.trunc_sat_f64_s") (param $x f64) (result i32) (i32.trunc_sat_f64_s (local.get $x))) (func (export "i32.trunc_sat_f64_u") (param $x f64) (result i32) (i32.trunc_sat_f64_u (local.get $x))) (func (export "i64.trunc_sat_f32_s") (param $x f32) (result i64) (i64.trunc_sat_f32_s (local.get $x))) (func (export "i64.trunc_sat_f32_u") (param $x f32) (result i64) (i64.trunc_sat_f32_u (local.get $x))) (func (export "i64.trunc_sat_f64_s") (param $x f64) (result i64) (i64.trunc_sat_f64_s (local.get $x))) (func (export "i64.trunc_sat_f64_u") (param $x f64) (result i64) (i64.trunc_sat_f64_u (local.get $x))) (func (export "f32.convert_i32_s") (param $x i32) (result f32) (f32.convert_i32_s (local.get $x))) (func (export "f32.convert_i64_s") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f64.convert_i32_s") (param $x i32) (result f64) (f64.convert_i32_s (local.get $x))) (func (export "f64.convert_i64_s") (param $x i64) (result f64) (f64.convert_i64_s (local.get $x))) (func (export "f32.convert_i32_u") (param $x i32) (result f32) (f32.convert_i32_u (local.get $x))) (func (export "f32.convert_i64_u") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) (func (export "f64.convert_i32_u") (param $x i32) (result f64) (f64.convert_i32_u (local.get $x))) (func (export "f64.convert_i64_u") (param $x i64) (result f64) (f64.convert_i64_u (local.get $x))) (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote_f32 (local.get $x))) (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote_f64 (local.get $x))) (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret_i32 (local.get $x))) (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret_i64 (local.get $x))) (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret_f32 (local.get $x))) (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret_f64 (local.get $x))) ) (assert_return (invoke "i64.extend_i32_s" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_s" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -10000)) (i64.const -10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -1)) (i64.const -1)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_u" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_u" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) (assert_return (invoke "i64.extend_i32_u" (i32.const -1)) (i64.const 0xffffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) (assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) (assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) (assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f32_s" (f32.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -2147483904.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_trap (invoke "i32.trunc_f32_u" (f32.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9)) (i32.const 2147483647)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483649.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.9)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9)) (i32.const 4294967295)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e16)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e30)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 9223372036854775808)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f32_s" (f32.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -9223373136366403584.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_trap (invoke "i64.trunc_f32_u" (f32.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_s" (f64.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -9223372036854777856.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_u" (f64.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "f32.convert_i32_s" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const -2147483648)) (f32.const -2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) ;; Saturating conversions: test all the same values as the non-saturating conversions. (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483904.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483648.0)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483649.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const inf)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -inf)) (i32.const 0x80000000)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967296.0)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -1.0)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e16)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e30)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const inf)) (i32.const 0xffffffff)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -inf)) (i32.const 0x00000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223373136366403584.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854775808.0)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854777856.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const inf)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -inf)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709551616.0)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -1.0)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const inf)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -inf)) (i64.const 0x0000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i64.const 0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_s" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_s" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) (assert_return (invoke "f32.convert_i64_s" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_s" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53)) (assert_return (invoke "f64.convert_i32_s" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_s" (i32.const -2147483648)) (f64.const -2147483648)) (assert_return (invoke "f64.convert_i32_s" (i32.const 987654321)) (f64.const 987654321)) (assert_return (invoke "f64.convert_i64_s" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) (assert_return (invoke "f64.convert_i64_s" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740993)) (f64.const -9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740995)) (f64.const -9007199254740996)) (assert_return (invoke "f32.convert_i32_u" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const -2147483648)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xffffffff)) (f32.const 4294967296.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000080)) (f32.const 0x1.000000p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000081)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000082)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe80)) (f32.const 0x1.fffffcp+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe81)) (f32.const 0x1.fffffep+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe82)) (f32.const 0x1.fffffep+31)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_u" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_u" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_u" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x7fffffbfffffffff)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x8000008000000001)) (f32.const 0x1.000002p+63)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xfffffe8000000001)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "f64.convert_i32_u" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_u" (i32.const -2147483648)) (f64.const 2147483648)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0xffffffff)) (f64.const 4294967295.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_u" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000400)) (f64.const 0x1.0000000000000p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000401)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000402)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff400)) (f64.const 0x1.ffffffffffffep+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff401)) (f64.const 0x1.fffffffffffffp+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff402)) (f64.const 0x1.fffffffffffffp+63)) ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) (assert_return (invoke "f64.promote_f32" (f32.const inf)) (f64.const inf)) (assert_return (invoke "f64.promote_f32" (f32.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.promote_f32" (f32.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f64.promote_f32" (f32.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.promote_f32" (f32.const -nan:0x200000)) (f64.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) (assert_return (invoke "f32.demote_f64" (f64.const inf)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) (assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.demote_f64" (f64.const -nan:0x4000000000000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) (assert_return (invoke "i32.reinterpret_f32" (f32.const inf)) (i32.const 0x7f800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -inf)) (i32.const 0xff800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) (assert_return (invoke "i64.reinterpret_f64" (f64.const inf)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -inf)) (i64.const 0xfff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) ;; Type check (assert_invalid (module (func (result i32) (i32.wrap_i64 (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.reinterpret_f32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.reinterpret_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.demote_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.reinterpret_i32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/custom.wast ================================================ (module binary "\00asm" "\01\00\00\00" "\00\24\10" "a custom section" "this is the payload" "\00\20\10" "a custom section" "this is payload" "\00\11\10" "a custom section" "" "\00\10\00" "" "this is payload" "\00\01\00" "" "" "\00\24\10" "\00\00custom sectio\00" "this is the payload" "\00\24\10" "\ef\bb\bfa custom sect" "this is the payload" "\00\24\10" "a custom sect\e2\8c\a3" "this is the payload" "\00\1f\16" "module within a module" "\00asm" "\01\00\00\00" ) (module binary "\00asm" "\01\00\00\00" "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\01\01\00" ;; type section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\02\01\00" ;; import section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\03\01\00" ;; function section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\04\01\00" ;; table section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\05\01\00" ;; memory section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\06\01\00" ;; global section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\07\01\00" ;; export section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\09\01\00" ;; element section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0a\01\00" ;; code section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0b\01\00" ;; data section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" ) (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\1a\06" "custom" "this is the payload" ;; custom section "\03\02\01\00" ;; function section "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00\00\05\01\00\07\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\26\10" "a custom section" "this is the payload" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\25\10" "a custom section" "this is the payload" "\00\24\10" "a custom section" "this is the payload" ) "malformed section id" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\25\10" "a custom section" "this is the payload" ;; wrong length! "\03\02\01\00" ;; function section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) "function and code section have inconsistent lengths" ) ;; Test concatenated modules. (assert_malformed (module binary "\00asm\01\00\00\00" "\00asm\01\00\00\00" ) "length out of bounds" ) ================================================ FILE: Test/WebAssembly/threads/data.wast ================================================ ;; Test the data section ;; Syntax (module (memory $m 1) (data (i32.const 0)) (data (i32.const 1) "a" "" "bcd") (data (offset (i32.const 0))) (data (offset (i32.const 0)) "" "a" "bc" "") (data (memory 0) (i32.const 0)) (data (memory 0x0) (i32.const 1) "a" "" "bcd") (data (memory 0x000) (offset (i32.const 0))) (data (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data (memory $m) (i32.const 0)) (data (memory $m) (i32.const 1) "a" "" "bcd") (data (memory $m) (offset (i32.const 0))) (data (memory $m) (offset (i32.const 0)) "" "a" "bc" "") ) ;; Basic use (module (memory 1) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") ) (module (memory 1) (data (i32.const 0) "a") (data (i32.const 3) "b") (data (i32.const 100) "cde") (data (i32.const 5) "x") (data (i32.const 3) "c") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 1) "b") (data (i32.const 2) "cde") (data (i32.const 3) "f") (data (i32.const 2) "g") (data (i32.const 1) "h") ) (module (global (import "spectest" "global_i32") i32) (memory 1) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get 0) "a") ) (module (global $g (import "spectest" "global_i32") i32) (memory 1) (data (global.get $g) "a") ) (module (global $g (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get $g) "a") ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (module (memory 1) (data (global.get 0) "a") (global i32 (i32.const 0))) ;; (module (memory 1) (data (global.get $g) "a") (global $g i32 (i32.const 0))) ;; Corner cases (module (memory 1) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (memory 2) (data (i32.const 0x1_ffff) "a") ) (module (memory 0) (data (i32.const 0)) ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0)) ) (module (memory 0 0) (data (i32.const 0)) ) (module (memory 1) (data (i32.const 0x1_0000) "") ) (module (memory 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "" "") ) (module (memory 0 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0)) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 0 3)) (data (global.get 0) "a") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 1) "a") ) (module (import "spectest" "memory" (memory 0 3)) (data (i32.const 1) "a") ) ;; Invalid bounds for data (assert_unlinkable (module (memory 0) (data (i32.const 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 0 0) (data (i32.const 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 0 1) (data (i32.const 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 0) (data (i32.const 1)) ) "data segment does not fit" ) (assert_unlinkable (module (memory 0 1) (data (i32.const 1)) ) "data segment does not fit" ) ;; This seems to cause a time-out on Travis. (;assert_unlinkable (module (memory 0x10000) (data (i32.const 0xffffffff) "ab") ) "" ;; either out of memory or segment does not fit ;) (assert_unlinkable (module (global (import "spectest" "global_i32") i32) (memory 0) (data (global.get 0) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 1 2) (data (i32.const 0x1_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1)) (data (i32.const 0x1_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 2) (data (i32.const 0x2_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 2 3) (data (i32.const 0x2_0000) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 1) (data (i32.const -1) "a") ) "data segment does not fit" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1)) (data (i32.const -1) "a") ) "data segment does not fit" ) (assert_unlinkable (module (memory 2) (data (i32.const -100) "a") ) "data segment does not fit" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1)) (data (i32.const -100) "a") ) "data segment does not fit" ) ;; Data without memory (assert_invalid (module (data (i32.const 0) "") ) "unknown memory" ) ;; Invalid offsets (assert_invalid (module (memory 1) (data (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (nop)) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) ================================================ FILE: Test/WebAssembly/threads/elem.wast ================================================ ;; Test the element section ;; Syntax (module (table $t 10 funcref) (func $f) (elem (i32.const 0)) (elem (i32.const 0) $f $f) (elem (offset (i32.const 0))) (elem (offset (i32.const 0)) $f $f) (elem (table 0) (i32.const 0)) (elem (table 0x0) (i32.const 0) $f $f) (elem (table 0x000) (offset (i32.const 0))) (elem (table 0) (offset (i32.const 0)) $f $f) (elem (table $t) (i32.const 0)) (elem (table $t) (i32.const 0) $f $f) (elem (table $t) (offset (i32.const 0))) (elem (table $t) (offset (i32.const 0)) $f $f) ) ;; Basic use (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 5) $f) (elem (i32.const 3) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 3) $f) (elem (i32.const 5) $f) ) (module (global (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get 0) $f) ) (module (global $g (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get $g) $f) ) (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 7) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-7") (i32.const 65)) (assert_return (invoke "call-9") (i32.const 66)) ;; Corner cases (module (table 10 funcref) (func $f) (elem (i32.const 9) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) ) (module (table 0 funcref) (elem (i32.const 0)) ) (module (import "spectest" "table" (table 0 funcref)) (elem (i32.const 0)) ) (module (table 0 0 funcref) (elem (i32.const 0)) ) (module (table 20 funcref) (elem (i32.const 20)) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 100 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 1) $f) ) (module (import "spectest" "table" (table 0 30 funcref)) (func $f) (elem (i32.const 1) $f) ) ;; Invalid bounds for elements (assert_unlinkable (module (table 0 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 0 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 1 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 funcref) (elem (i32.const 1)) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 20 funcref) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const -1) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -1) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const -10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -10) $f) ) "elements segment does not fit" ) ;; Element without table (assert_invalid (module (func $f) (elem (i32.const 0) $f) ) "unknown table" ) ;; Invalid offsets (assert_invalid (module (table 1 funcref) (elem (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) ;; Two elements target the same slot (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten") (i32.const 66)) (module (type $out-i32 (func (result i32))) (import "spectest" "table" (table 10 funcref)) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten-element") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten-element") (i32.const 66)) ;; Element sections across multiple modules change the same table (module $module1 (type $out-i32 (func (result i32))) (table (export "shared-table") 10 funcref) (elem (i32.const 8) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-8") (type $out-i32) (call_indirect (type $out-i32) (i32.const 8)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (register "module1" $module1) (assert_trap (invoke $module1 "call-7") "uninitialized element") (assert_return (invoke $module1 "call-8") (i32.const 65)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module2 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 7) $const-i32-c) (elem (i32.const 8) $const-i32-d) (func $const-i32-c (type $out-i32) (i32.const 67)) (func $const-i32-d (type $out-i32) (i32.const 68)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 68)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module3 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 8) $const-i32-e) (elem (i32.const 9) $const-i32-f) (func $const-i32-e (type $out-i32) (i32.const 69)) (func $const-i32-f (type $out-i32) (i32.const 70)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 69)) (assert_return (invoke $module1 "call-9") (i32.const 70)) ================================================ FILE: Test/WebAssembly/threads/endianness.wast ================================================ (module (memory 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i32) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i32.add (local.get $address) (i32.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i32) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i32.add (local.get $address) (i32.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i32) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i32.add (local.get $address) (i32.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i32) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i32.add (local.get $address) (i32.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i32) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i32.add (local.get $address) (i32.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i32) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i32.add (local.get $address) (i32.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_s (i32.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_u (i32.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i32.const 0) (local.get $value)) (i32.load (i32.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i32.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i32.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i32.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i32.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i32.const 0) (local.get $value)) (i64.load (i32.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i32.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i32.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i32.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i32.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i32.const 0) (local.get $value)) (call $i16_load_little (i32.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i32.const 0) (local.get $value)) (call $i32_load_little (i32.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i32.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i32.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i32.const 0) (local.get $value)) (call $i64_load_little (i32.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i32.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i32.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i32.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i32.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) ================================================ FILE: Test/WebAssembly/threads/exports.wast ================================================ ;; Functions (module (func) (export "a" (func 0))) (module (func) (export "a" (func 0)) (export "b" (func 0))) (module (func) (func) (export "a" (func 0)) (export "b" (func 1))) (module (func (export "a"))) (module (func (export "a") (export "b") (export "c"))) (module (func (export "a") (export "b") (param i32))) (module (func) (export "a" (func 0))) (module (func $a (export "a"))) (module (func $a) (export "a" (func $a))) (module (export "a" (func 0)) (func)) (module (export "a" (func $a)) (func $a)) (module $Func (export "e" (func $f)) (func $f (param $n i32) (result i32) (return (i32.add (local.get $n) (i32.const 1))) ) ) (assert_return (invoke "e" (i32.const 42)) (i32.const 43)) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module) (module $Other1) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (assert_invalid (module (func) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) "duplicate export name" ) (assert_invalid (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (func) (table 0 funcref) (export "a" (func 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Globals (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) (module (global (export "a") i32 (i32.const 0))) (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global $a (export "a") i32 (i32.const 0))) (module (global $a i32 (i32.const 0)) (export "a" (global $a))) (module (export "a" (global 0)) (global i32 (i32.const 0))) (module (export "a" (global $a)) (global $a i32 (i32.const 0))) (module $Global (export "e" (global $g)) (global $g i32 (i32.const 42)) ) (assert_return (get "e") (i32.const 42)) (assert_return (get $Global "e") (i32.const 42)) (module) (module $Other2) (assert_return (get $Global "e") (i32.const 42)) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (table 0 funcref) (export "a" (global 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Tables (module (table 0 funcref) (export "a" (table 0))) (module (table 0 funcref) (export "a" (table 0)) (export "b" (table 0))) ;; No multiple tables yet. ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "b" (table 1))) (module (table (export "a") 0 funcref)) (module (table (export "a") 0 1 funcref)) (module (table 0 funcref) (export "a" (table 0))) (module (table 0 1 funcref) (export "a" (table 0))) (module (table $a (export "a") 0 funcref)) (module (table $a (export "a") 0 1 funcref)) (module (table $a 0 funcref) (export "a" (table $a))) (module (table $a 0 1 funcref) (export "a" (table $a))) (module (export "a" (table 0)) (table 0 funcref)) (module (export "a" (table 0)) (table 0 1 funcref)) (module (export "a" (table $a)) (table $a 0 funcref)) (module (export "a" (table $a)) (table $a 0 1 funcref)) (; TODO: access table ;) (assert_invalid (module (table 0 funcref) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 0)) (export "a" (table 0))) "duplicate export name" ) ;; No multiple tables yet. ;; (assert_invalid ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "a" (table 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (table 0 funcref) (func) (export "a" (table 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Memories (module (memory 0) (export "a" (memory 0))) (module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) ;; No multiple memories yet. ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) (module (memory (export "a") 0)) (module (memory (export "a") 0 1)) (module (memory 0) (export "a" (memory 0))) (module (memory 0 1) (export "a" (memory 0))) (module (memory $a (export "a") 0)) (module (memory $a (export "a") 0 1)) (module (memory $a 0) (export "a" (memory $a))) (module (memory $a 0 1) (export "a" (memory $a))) (module (export "a" (memory 0)) (memory 0)) (module (export "a" (memory 0)) (memory 0 1)) (module (export "a" (memory $a)) (memory $a 0)) (module (export "a" (memory $a)) (memory $a 0 1)) (module (memory (export "a") 0 1 shared)) (module (memory 0 1 shared) (export "a" (memory 0))) (module (memory $a (export "a") 0 1 shared)) (module (memory $a 0 1 shared) (export "a" (memory $a))) (module (export "a" (memory 0)) (memory 0 1 shared)) (module (export "a" (memory $a)) (memory $a 0 1 shared)) (; TODO: access memory ;) (assert_invalid (module (memory 0) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) "duplicate export name" ) ;; No multiple memories yet. ;; (assert_invalid ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (table 0 funcref) (export "a" (memory 0)) (export "a" (table 0))) "duplicate export name" ) ================================================ FILE: Test/WebAssembly/threads/f32.wast ================================================ ;; Test all the f32 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f32_bitwise.wast and f32_cmp.wast). (module (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) ) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "add" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sub" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "mul" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "div" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "min" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -inf)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -inf)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -inf)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -inf)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const inf) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const inf) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x0p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-149)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-126)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-1)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p+0)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const inf)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "max" (f32.const nan:0x200000) (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sqrt" (f32.const -0x1p-149)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) (assert_return (invoke "sqrt" (f32.const -0x1p-126)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) (assert_return (invoke "sqrt" (f32.const -0x1p-1)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) (assert_return (invoke "sqrt" (f32.const -0x1p+0)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sqrt" (f32.const -0x1.921fb6p+2)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) (assert_return (invoke "sqrt" (f32.const -0x1.fffffep+127)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "sqrt" (f32.const -inf)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const inf)) (f32.const inf)) (assert_return (invoke "sqrt" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "sqrt" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "sqrt" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) (assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "floor" (f32.const inf)) (f32.const inf)) (assert_return (invoke "floor" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "floor" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "floor" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) (assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "ceil" (f32.const inf)) (f32.const inf)) (assert_return (invoke "ceil" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "ceil" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "ceil" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "trunc" (f32.const inf)) (f32.const inf)) (assert_return (invoke "trunc" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "trunc" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "trunc" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "nearest" (f32.const inf)) (f32.const inf)) (assert_return (invoke "nearest" (f32.const -nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const -nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "nearest" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "nearest" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f32) (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.trunc (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/f32_bitwise.wast ================================================ ;; Test all the f32 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "neg" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) ;; Type check (assert_invalid (module (func (result f32) (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/f32_cmp.wast ================================================ ;; Test all the f32 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f32) (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/f64.wast ================================================ ;; Test all the f64 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f64_bitwise.wast and f64_cmp.wast). (module (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) ) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -inf)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -inf)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const inf) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const inf) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const inf)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sqrt" (f64.const -0x0.0000000000001p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) (assert_return (invoke "sqrt" (f64.const -0x1p-1022)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) (assert_return (invoke "sqrt" (f64.const -0x1p-1)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) (assert_return (invoke "sqrt" (f64.const -0x1p+0)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) (assert_return (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) (assert_return (invoke "sqrt" (f64.const -inf)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const inf)) (f64.const inf)) (assert_return (invoke "sqrt" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "sqrt" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "sqrt" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) (assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "floor" (f64.const inf)) (f64.const inf)) (assert_return (invoke "floor" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "floor" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "floor" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) (assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "ceil" (f64.const inf)) (f64.const inf)) (assert_return (invoke "ceil" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "ceil" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "ceil" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "trunc" (f64.const inf)) (f64.const inf)) (assert_return (invoke "trunc" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "trunc" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "trunc" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "nearest" (f64.const inf)) (f64.const inf)) (assert_return (invoke "nearest" (f64.const -nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const -nan:0x4000000000000)) (f64.const nan:arithmetic)) (assert_return (invoke "nearest" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "nearest" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Type check (assert_invalid (module (func (result f64) (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.trunc (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/f64_bitwise.wast ================================================ ;; Test all the f64 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "neg" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) ;; Type check (assert_invalid (module (func (result f64) (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.neg (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/f64_cmp.wast ================================================ ;; Test all the f64 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f64) (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/fac.wast ================================================ (module ;; Recursive factorial (func (export "fac-rec") (param i64) (result i64) (if (result i64) (i64.eq (local.get 0) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call 0 (i64.sub (local.get 0) (i64.const 1)))) ) ) ) ;; Recursive factorial named (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) (if (result i64) (i64.eq (local.get $n) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get $n) (call $fac-rec-named (i64.sub (local.get $n) (i64.const 1))) ) ) ) ) ;; Iterative factorial (func (export "fac-iter") (param i64) (result i64) (local i64 i64) (local.set 1 (local.get 0)) (local.set 2 (i64.const 1)) (block (loop (if (i64.eq (local.get 1) (i64.const 0)) (then (br 2)) (else (local.set 2 (i64.mul (local.get 1) (local.get 2))) (local.set 1 (i64.sub (local.get 1) (i64.const 1))) ) ) (br 0) ) ) (local.get 2) ) ;; Iterative factorial named (func (export "fac-iter-named") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) ;; Optimized factorial. (func (export "fac-opt") (param i64) (result i64) (local i64) (local.set 1 (i64.const 1)) (block (br_if 0 (i64.lt_s (local.get 0) (i64.const 2))) (loop (local.set 1 (i64.mul (local.get 1) (local.get 0))) (local.set 0 (i64.add (local.get 0) (i64.const -1))) (br_if 0 (i64.gt_s (local.get 0) (i64.const 1))) ) ) (local.get 1) ) ;; Iterative factorial without locals. (func $pick0 (param i64) (result i64 i64) (local.get 0) (local.get 0) ) (func $pick1 (param i64 i64) (result i64 i64 i64) (local.get 0) (local.get 1) (local.get 0) ) (func (export "fac-ssa") (param i64) (result i64) (i64.const 1) (local.get 0) (loop $l (param i64 i64) (result i64) (call $pick1) (call $pick1) (i64.mul) (call $pick1) (i64.const 1) (i64.sub) (call $pick0) (i64.const 0) (i64.gt_u) (br_if $l) (drop) (return) ) ) ) (assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-ssa" (i64.const 25)) (i64.const 7034535277573963776)) (assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/threads/float_exprs.wast ================================================ ;; Test interesting floating-point "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x*y+z is not done with x87-style intermediate precision. (module (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) ;; Test that x*y+z is not folded to fma. (module (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) (assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) ;; Test that x+0.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) (f32.add (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) (f64.add (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0 - x is not folded to -x. (module (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) (f32.sub (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) (f64.sub (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x - 0.0 is not folded to x. (module (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) (f32.sub (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) (f64.sub (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*0.0 is not folded to 0.0. (module (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x*1.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that 0.0/x is not folded to 0.0. (module (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) (f32.div (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) (f64.div (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_div" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const -0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/1.0 is not folded to x. (module (func (export "f32.no_fold_div_one") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_div_one") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-1.0 is not folded to -x. (module (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -1.0))) (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -1.0))) ) (assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -0.0 - x is not folded to -x. (module (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) (f32.sub (f32.const -0.0) (local.get $x))) (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) (f64.sub (f64.const -0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that -1.0 * x is not folded to -x. (module (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) (f32.mul (f32.const -1.0) (local.get $x))) (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) (f64.mul (f64.const -1.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x == x is not folded to true. (module (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) (f32.eq (local.get $x) (local.get $x))) (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) (f64.eq (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) ;; Test that x != x is not folded to false. (module (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) (f32.ne (local.get $x) (local.get $x))) (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) (f64.ne (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) ;; Test that x - x is not folded to 0.0. (module (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) (f32.sub (local.get $x) (local.get $x))) (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) (f64.sub (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_sub_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_sub_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_sub_self" (f64.const nan)) (f64.const nan:canonical)) ;; Test that x / x is not folded to 1.0. (module (func (export "f32.no_fold_div_self") (param $x f32) (result f32) (f32.div (local.get $x) (local.get $x))) (func (export "f64.no_fold_div_self") (param $x f64) (result f64) (f64.div (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_div_self" (f32.const inf)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const 0.0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_self" (f32.const -0.0)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const inf)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const 0.0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_self" (f64.const -0.0)) (f64.const nan:canonical)) ;; Test that x/3 is not folded to x*(1/3). (module (func (export "f32.no_fold_div_3") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 3.0))) (func (export "f64.no_fold_div_3") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 3.0))) ) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) ;; Test that (x*z)+(y*z) is not folded to (x+y)*z. (module (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $z)) (f32.mul (local.get $y) (local.get $z)))) (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $z)) (f64.mul (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) ;; Test that (x+y)*z is not folded to (x*z)+(y*z). (module (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (f32.add (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (f64.add (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) ;; Test that x*(y/z) is not folded to (x*y)/z. (module (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (local.get $x) (f32.div (local.get $y) (local.get $z)))) (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (local.get $x) (f64.div (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const inf)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) ;; Test that (x*y)/z is not folded to x*(y/z). (module (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) ;; Test that x+y+z+w is not reassociated. (module (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.add (f32.add (f32.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.add (f64.add (f64.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) (assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) ;; Test that x*y*z*w is not reassociated. (module (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.mul (f32.mul (f32.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.mul (f64.mul (f64.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) ;; Test that x/0 is not folded away. (module (func (export "f32.no_fold_div_0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_div_0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that x/-0 is not folded away. (module (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -0.0))) (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -0.0))) ) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -0)) (f32.const nan:canonical)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan)) (f32.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -0)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan)) (f64.const nan:canonical)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000)) (f64.const nan:arithmetic)) ;; Test that sqrt(x*x+y*y) is not folded to hypot. (module (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.add (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.add (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) ;; Test that 1.0/x isn't approximated. (module (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) (f32.div (f32.const 1.0) (local.get $x))) ) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) ;; Test that 1.0/sqrt(x) isn't approximated or fused. (module (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) (f32.div (f32.const 1.0) (f32.sqrt (local.get $x)))) (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) (f64.div (f64.const 1.0) (f64.sqrt (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) ;; Test that sqrt(1.0/x) isn't approximated. (module (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) (f32.sqrt (f32.div (f32.const 1.0) (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) ;; Test that converting i32/i64 to f32/f64 and back isn't folded away. (module (func (export "i32.no_fold_f32_s") (param i32) (result i32) (i32.trunc_f32_s (f32.convert_i32_s (local.get 0)))) (func (export "i32.no_fold_f32_u") (param i32) (result i32) (i32.trunc_f32_u (f32.convert_i32_u (local.get 0)))) (func (export "i64.no_fold_f64_s") (param i64) (result i64) (i64.trunc_f64_s (f64.convert_i64_s (local.get 0)))) (func (export "i64.no_fold_f64_u") (param i64) (result i64) (i64.trunc_f64_u (f64.convert_i64_u (local.get 0)))) ) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) ;; Test that x+y-y is not folded to x. (module (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) (f32.sub (f32.add (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) (f64.sub (f64.add (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) ;; Test that x-y+y is not folded to x. (module (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) (f32.add (f32.sub (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) (f64.add (f64.sub (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) ;; Test that x*y/y is not folded to x. (module (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) ;; Test that x/y*y is not folded to x. (module (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) (f32.mul (f32.div (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) (f64.mul (f64.div (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) ;; Test that x/2*2 is not folded to x. (module (func (export "f32.no_fold_div2_mul2") (param $x f32) (result f32) (f32.mul (f32.div (local.get $x) (f32.const 2.0)) (f32.const 2.0))) (func (export "f64.no_fold_div2_mul2") (param $x f64) (result f64) (f64.mul (f64.div (local.get $x) (f64.const 2.0)) (f64.const 2.0))) ) (assert_return (invoke "f32.no_fold_div2_mul2" (f32.const 0x1.fffffep-126)) (f32.const 0x1p-125)) (assert_return (invoke "f64.no_fold_div2_mul2" (f64.const 0x1.fffffffffffffp-1022)) (f64.const 0x1p-1021)) ;; Test that promote(demote(x)) is not folded to x. (module (func (export "no_fold_demote_promote") (param $x f64) (result f64) (f64.promote_f32 (f32.demote_f64 (local.get $x)))) ) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) ;; Test that demote(promote(x)) is not folded to x, and aside from NaN is ;; bit-preserving. (module (func (export "no_fold_promote_demote") (param $x f32) (result f32) (f32.demote_f64 (f64.promote_f32 (local.get $x)))) ) (assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:arithmetic)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const inf)) (f32.const inf)) (assert_return (invoke "no_fold_promote_demote" (f32.const -inf)) (f32.const -inf)) ;; Test that demote(x+promote(y)) is not folded to demote(x)+y. (module (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.add (local.get $x) (f64.promote_f32 (local.get $y))))) (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $y)) (local.get $x)))) ) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) ;; Test that demote(x-promote(y)) is not folded to demote(x)-y. (module (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.sub (local.get $x) (f64.promote_f32 (local.get $y))))) ) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) ;; Test that converting between integer and float and back isn't folded away. (module (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_u (local.get $x)))) (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_u (local.get $x)))) ) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) ;; Test that dividing by a loop-invariant constant isn't optimized to be a ;; multiplication by a reciprocal, which would be particularly tempting since ;; the reciprocal computation could be hoisted. (module (memory 1 1) (func (export "init") (param $i i32) (param $x f32) (f32.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f32) (local $i i32) (block $exit (loop $cont (f32.store (local.get $i) (f32.div (f32.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f32) (f32.load (local.get $i))) ) (invoke "init" (i32.const 0) (f32.const 15.1)) (invoke "init" (i32.const 4) (f32.const 15.2)) (invoke "init" (i32.const 8) (f32.const 15.3)) (invoke "init" (i32.const 12) (f32.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) (assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) (assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) (invoke "run" (i32.const 16) (f32.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) (assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) (assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) (module (memory 1 1) (func (export "init") (param $i i32) (param $x f64) (f64.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f64) (local $i i32) (block $exit (loop $cont (f64.store (local.get $i) (f64.div (f64.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 8))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f64) (f64.load (local.get $i))) ) (invoke "init" (i32.const 0) (f64.const 15.1)) (invoke "init" (i32.const 8) (f64.const 15.2)) (invoke "init" (i32.const 16) (f64.const 15.3)) (invoke "init" (i32.const 24) (f64.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) (assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) (assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) (invoke "run" (i32.const 32) (f64.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) (assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) (assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) ;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. (module (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) ;; Test that x= y+z is not optimized to x >= y (monotonicity). ;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf (module (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.le (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.ge (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.le (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.ge (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const inf) (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const inf) (f64.const -inf) (f64.const inf)) (i32.const 0)) ;; Test that !(x < y) and friends are not optimized to x >= y and friends. (module (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) ;; Test that a method for approximating a "machine epsilon" produces the expected ;; approximation. ;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 (module (func (export "f32.epsilon") (result f32) (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) (func (export "f64.epsilon") (result f64) (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) ) (assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that a method for computing a "machine epsilon" produces the expected ;; result. ;; https://www.math.utah.edu/~beebe/software/ieee/ (module (func (export "f32.epsilon") (result f32) (local $x f32) (local $result f32) (local.set $x (f32.const 1)) (loop $loop (br_if $loop (f32.gt (f32.add (local.tee $x (f32.mul (local.tee $result (local.get $x)) (f32.const 0.5) ) ) (f32.const 1) ) (f32.const 1) ) ) ) (local.get $result) ) (func (export "f64.epsilon") (result f64) (local $x f64) (local $result f64) (local.set $x (f64.const 1)) (loop $loop (br_if $loop (f64.gt (f64.add (local.tee $x (f64.mul (local.tee $result (local.get $x)) (f64.const 0.5) ) ) (f64.const 1) ) (f64.const 1) ) ) ) (local.get $result) ) ) (assert_return (invoke "f32.epsilon") (f32.const 0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that floating-point numbers are not optimized as if they form a ;; trichotomy. (module (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.lt (local.get $x) (local.get $y)) (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) (i32.or (f32.le (local.get $x) (local.get $y)) (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.gt (local.get $x) (local.get $y)) (f32.le (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) (i32.or (f32.ge (local.get $x) (local.get $y)) (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.lt (local.get $x) (local.get $y)) (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) (i32.or (f64.le (local.get $x) (local.get $y)) (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.gt (local.get $x) (local.get $y)) (f64.le (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) (i32.or (f64.ge (local.get $x) (local.get $y)) (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) ;; Some test harnesses which can run this testsuite are unable to perform tests ;; of NaN bitpatterns. The following tests whether the underlying platform is ;; generally producing the kinds of NaNs expected. (module (func (export "f32.arithmetic_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fc00000))) (func (export "f32.canonical_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fffffff))) (func (export "f32.nonarithmetic_nan_bitpattern") (param $x i32) (result i32) (i32.reinterpret_f32 (f32.neg (f32.reinterpret_i32 (local.get $x))))) (func (export "f64.arithmetic_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7ff8000000000000))) (func (export "f64.canonical_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7fffffffffffffff))) (func (export "f64.nonarithmetic_nan_bitpattern") (param $x i64) (result i64) (i64.reinterpret_f64 (f64.neg (f64.reinterpret_i64 (local.get $x))))) ;; Versions of no_fold testcases that only care about NaN bitpatterns. (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (local.get $x)) (f32.const 0.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.const -0.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.const -1.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const -1.0))) (i32.const 0x7fc00000))) (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (local.get $x)) (f64.const 0.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.const -0.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.const -1.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const -1.0))) (i64.const 0x7ff8000000000000))) (func (export "no_fold_promote_demote") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.demote_f64 (f64.promote_f32 (f32.reinterpret_i32 (local.get $x))))) (i32.const 0x7fc00000))) ) (assert_return (invoke "f32.arithmetic_nan_bitpattern" (i32.const 0x7f803210) (i32.const 0x7f803210)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0) (i32.const 0)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7fc03210)) (i32.const 0xffc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xffc03210)) (i32.const 0x7fc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7f803210)) (i32.const 0xff803210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xff803210)) (i32.const 0x7f803210)) (assert_return (invoke "f64.arithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210) (i64.const 0x7ff0000000003210)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0) (i64.const 0)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff8000000003210)) (i64.const 0xfff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff8000000003210)) (i64.const 0x7ff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210)) (i64.const 0xfff0000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff0000000003210)) (i64.const 0x7ff0000000003210)) (assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) ;; Test that IEEE 754 double precision does, in fact, compute a certain dot ;; product correctly. (module (func (export "dot_product_example") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.mul (local.get $x2) (local.get $y2))) (f64.mul (local.get $x3) (local.get $y3))) ) (func (export "with_binary_sum_collapse") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.add (f64.mul (local.get $x2) (local.get $y2)) (f64.mul (local.get $x3) (local.get $y3)))) ) ) (assert_return (invoke "dot_product_example" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) (assert_return (invoke "with_binary_sum_collapse" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) ;; http://www.vinc17.org/research/fptest.en.html#contract2fma (module (func (export "f32.contract2fma") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.sub (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.contract2fma") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.sub (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.contract2fma" (f32.const 1.0) (f32.const 1.0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.19999ap+0) (f32.const 0x1.19999ap+0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.333332p+0) (f32.const 0x1.333332p+0)) (f32.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 1.0) (f64.const 1.0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.199999999999ap+0) (f64.const 0x1.199999999999ap+0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.3333333333333p+0) (f64.const 0x1.3333333333333p+0)) (f64.const 0.0)) ;; Test that floating-point isn't implemented with QuickBasic for MS-DOS. ;; https://support.microsoft.com/en-us/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors (module (func (export "f32.division_by_small_number") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.sub (local.get $a) (f32.div (local.get $b) (local.get $c)))) (func (export "f64.division_by_small_number") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.sub (local.get $a) (f64.div (local.get $b) (local.get $c)))) ) (assert_return (invoke "f32.division_by_small_number" (f32.const 112000000) (f32.const 100000) (f32.const 0.0009)) (f32.const 888888)) (assert_return (invoke "f64.division_by_small_number" (f64.const 112000000) (f64.const 100000) (f64.const 0.0009)) (f64.const 888888.8888888806)) ;; Test a simple golden ratio computation. ;; http://mathworld.wolfram.com/GoldenRatio.html (module (func (export "f32.golden_ratio") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.mul (local.get 0) (f32.add (local.get 1) (f32.sqrt (local.get 2))))) (func (export "f64.golden_ratio") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.mul (local.get 0) (f64.add (local.get 1) (f64.sqrt (local.get 2))))) ) (assert_return (invoke "f32.golden_ratio" (f32.const 0.5) (f32.const 1.0) (f32.const 5.0)) (f32.const 1.618034)) (assert_return (invoke "f64.golden_ratio" (f64.const 0.5) (f64.const 1.0) (f64.const 5.0)) (f64.const 1.618033988749895)) ;; Test some silver means computations. ;; http://mathworld.wolfram.com/SilverRatio.html (module (func (export "f32.silver_means") (param $n f32) (result f32) (f32.mul (f32.const 0.5) (f32.add (local.get $n) (f32.sqrt (f32.add (f32.mul (local.get $n) (local.get $n)) (f32.const 4.0)))))) (func (export "f64.silver_means") (param $n f64) (result f64) (f64.mul (f64.const 0.5) (f64.add (local.get $n) (f64.sqrt (f64.add (f64.mul (local.get $n) (local.get $n)) (f64.const 4.0)))))) ) (assert_return (invoke "f32.silver_means" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "f32.silver_means" (f32.const 1.0)) (f32.const 1.6180340)) (assert_return (invoke "f32.silver_means" (f32.const 2.0)) (f32.const 2.4142136)) (assert_return (invoke "f32.silver_means" (f32.const 3.0)) (f32.const 3.3027756)) (assert_return (invoke "f32.silver_means" (f32.const 4.0)) (f32.const 4.2360680)) (assert_return (invoke "f32.silver_means" (f32.const 5.0)) (f32.const 5.1925821)) (assert_return (invoke "f64.silver_means" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "f64.silver_means" (f64.const 1.0)) (f64.const 1.618033988749895)) (assert_return (invoke "f64.silver_means" (f64.const 2.0)) (f64.const 2.414213562373095)) (assert_return (invoke "f64.silver_means" (f64.const 3.0)) (f64.const 3.302775637731995)) (assert_return (invoke "f64.silver_means" (f64.const 4.0)) (f64.const 4.236067977499790)) (assert_return (invoke "f64.silver_means" (f64.const 5.0)) (f64.const 5.192582403567252)) ;; Test that an f64 0.4 isn't double-rounded as via extended precision. ;; https://bugs.llvm.org/show_bug.cgi?id=11200 (module (func (export "point_four") (param $four f64) (param $ten f64) (result i32) (f64.lt (f64.div (local.get $four) (local.get $ten)) (f64.const 0.4))) ) (assert_return (invoke "point_four" (f64.const 4.0) (f64.const 10.0)) (i32.const 0)) ;; Test an approximation function for tau; it should produces the correctly ;; rounded result after (and only after) the expected number of iterations. (module (func (export "tau") (param i32) (result f64) (local f64 f64 f64 f64) f64.const 0x0p+0 local.set 1 block local.get 0 i32.const 1 i32.lt_s br_if 0 f64.const 0x1p+0 local.set 2 f64.const 0x0p+0 local.set 3 loop local.get 1 local.get 2 f64.const 0x1p+3 local.get 3 f64.const 0x1p+3 f64.mul local.tee 4 f64.const 0x1p+0 f64.add f64.div f64.const 0x1p+2 local.get 4 f64.const 0x1p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.4p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.8p+2 f64.add f64.div f64.sub f64.mul f64.add local.set 1 local.get 3 f64.const 0x1p+0 f64.add local.set 3 local.get 2 f64.const 0x1p-4 f64.mul local.set 2 local.get 0 i32.const -1 i32.add local.tee 0 br_if 0 end end local.get 1 ) ) (assert_return (invoke "tau" (i32.const 10)) (f64.const 0x1.921fb54442d14p+2)) (assert_return (invoke "tau" (i32.const 11)) (f64.const 0x1.921fb54442d18p+2)) ;; Test that y < 0 ? x : (x + 1) is not folded to x + (y < 0). (module (func (export "f32.no_fold_conditional_inc") (param $x f32) (param $y f32) (result f32) (select (local.get $x) (f32.add (local.get $x) (f32.const 1.0)) (f32.lt (local.get $y) (f32.const 0.0)))) (func (export "f64.no_fold_conditional_inc") (param $x f64) (param $y f64) (result f64) (select (local.get $x) (f64.add (local.get $x) (f64.const 1.0)) (f64.lt (local.get $y) (f64.const 0.0)))) ) (assert_return (invoke "f32.no_fold_conditional_inc" (f32.const -0.0) (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f64.no_fold_conditional_inc" (f64.const -0.0) (f64.const -1.0)) (f64.const -0.0)) ================================================ FILE: Test/WebAssembly/threads/float_literals.wast ================================================ ;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const inf))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +inf))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -inf))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f32_dec.root_beer_float") (result i32) (i32.reinterpret_f32 (f32.const 1.000000119))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const inf))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +inf))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -inf))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f64_dec.root_beer_float") (result i64) (i64.reinterpret_f64 (f64.const 1.000000119))) (func (export "f32-dec-sep1") (result f32) (f32.const 1_000_000)) (func (export "f32-dec-sep2") (result f32) (f32.const 1_0_0_0)) (func (export "f32-dec-sep3") (result f32) (f32.const 100_3.141_592)) (func (export "f32-dec-sep4") (result f32) (f32.const 99e+1_3)) (func (export "f32-dec-sep5") (result f32) (f32.const 122_000.11_3_54E0_2_3)) (func (export "f32-hex-sep1") (result f32) (f32.const 0xa_0f_00_99)) (func (export "f32-hex-sep2") (result f32) (f32.const 0x1_a_A_0_f)) (func (export "f32-hex-sep3") (result f32) (f32.const 0xa0_ff.f141_a59a)) (func (export "f32-hex-sep4") (result f32) (f32.const 0xf0P+1_3)) (func (export "f32-hex-sep5") (result f32) (f32.const 0x2a_f00a.1f_3_eep2_3)) (func (export "f64-dec-sep1") (result f64) (f64.const 1_000_000)) (func (export "f64-dec-sep2") (result f64) (f64.const 1_0_0_0)) (func (export "f64-dec-sep3") (result f64) (f64.const 100_3.141_592)) (func (export "f64-dec-sep4") (result f64) (f64.const 99e-1_23)) (func (export "f64-dec-sep5") (result f64) (f64.const 122_000.11_3_54e0_2_3)) (func (export "f64-hex-sep1") (result f64) (f64.const 0xa_f00f_0000_9999)) (func (export "f64-hex-sep2") (result f64) (f64.const 0x1_a_A_0_f)) (func (export "f64-hex-sep3") (result f64) (f64.const 0xa0_ff.f141_a59a)) (func (export "f64-hex-sep4") (result f64) (f64.const 0xf0P+1_3)) (func (export "f64-hex-sep5") (result f64) (f64.const 0x2a_f00a.1f_3_eep2_3)) ) (assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) (assert_return (invoke "f32_dec.root_beer_float") (i32.const 0x3f800001)) (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) (assert_return (invoke "f64_dec.root_beer_float") (i64.const 0x3ff000001ff19e24)) (assert_return (invoke "f32-dec-sep1") (f32.const 1000000)) (assert_return (invoke "f32-dec-sep2") (f32.const 1000)) (assert_return (invoke "f32-dec-sep3") (f32.const 1003.141592)) (assert_return (invoke "f32-dec-sep4") (f32.const 99e+13)) (assert_return (invoke "f32-dec-sep5") (f32.const 122000.11354e23)) (assert_return (invoke "f32-hex-sep1") (f32.const 0xa0f0099)) (assert_return (invoke "f32-hex-sep2") (f32.const 0x1aa0f)) (assert_return (invoke "f32-hex-sep3") (f32.const 0xa0ff.f141a59a)) (assert_return (invoke "f32-hex-sep4") (f32.const 0xf0P+13)) (assert_return (invoke "f32-hex-sep5") (f32.const 0x2af00a.1f3eep23)) (assert_return (invoke "f64-dec-sep1") (f64.const 1000000)) (assert_return (invoke "f64-dec-sep2") (f64.const 1000)) (assert_return (invoke "f64-dec-sep3") (f64.const 1003.141592)) (assert_return (invoke "f64-dec-sep4") (f64.const 99e-123)) (assert_return (invoke "f64-dec-sep5") (f64.const 122000.11354e23)) (assert_return (invoke "f64-hex-sep1") (f64.const 0xaf00f00009999)) (assert_return (invoke "f64-hex-sep2") (f64.const 0x1aa0f)) (assert_return (invoke "f64-hex-sep3") (f64.const 0xa0ff.f141a59a)) (assert_return (invoke "f64-hex-sep4") (f64.const 0xf0P+13)) (assert_return (invoke "f64-hex-sep5") (f64.const 0x2af00a.1f3eep23)) ;; Test parsing a float from binary (module binary ;; (func (export "4294967249") (result f64) (f64.const 4294967249)) "\00\61\73\6d\01\00\00\00\01\85\80\80\80\00\01\60" "\00\01\7c\03\82\80\80\80\00\01\00\07\8e\80\80\80" "\00\01\0a\34\32\39\34\39\36\37\32\34\39\00\00\0a" "\91\80\80\80\00\01\8b\80\80\80\00\00\44\00\00\20" "\fa\ff\ff\ef\41\0b" ) (assert_return (invoke "4294967249") (f64.const 4294967249)) (assert_malformed (module quote "(global f32 (f32.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_+1))") "unknown operator" ) ================================================ FILE: Test/WebAssembly/threads/float_memory.wast ================================================ ;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory (data "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory (data "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 1))) (func (export "i32.load") (result i32) (i32.load (i32.const 1))) (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 1))) (func (export "i64.load") (result i64) (i64.load (i32.const 1))) (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory (data "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory (data "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) ================================================ FILE: Test/WebAssembly/threads/float_misc.wast ================================================ ;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. ;; This testsuite is not currently sufficient for full IEEE 754 conformance ;; testing; platforms are currently expected to meet these requirements in ;; their own way (widely-used hardware platforms already do this). ;; ;; What this testsuite does test is that (a) the platform is basically IEEE 754 ;; rather than something else entirely, (b) it's configured correctly for ;; WebAssembly (rounding direction, exception masks, precision level, subnormal ;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common ;; value-changing optimizations, and (d) that the WebAssembly implementation ;; doesn't exhibit any known implementation bugs. ;; ;; This file supplements f32.wast, f64.wast, f32_bitwise.wast, f64_bitwise.wast, ;; f32_cmp.wast, and f64_cmp.wast with additional single-instruction tests ;; covering additional miscellaneous interesting cases. (module (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) ) ;; Miscellaneous values. (assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) (assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) ;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the ;; least that rounds to something greater. (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) ;; Max subnormal + min subnormal = min normal. (assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) (assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) (assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) ;; Test a case that was "tricky" on MMIX. ;; http://mmix.cs.hm.edu/bugs/bug_rounding.html (assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) ;; http://www.vinc17.org/software/tst-ieee754.xsl (assert_return (invoke "f64.add" (f64.const 9007199254740992) (f64.const 1.00001)) (f64.const 9007199254740994)) ;; http://www.vinc17.org/software/test.java (assert_return (invoke "f64.add" (f64.const 9007199254740994) (f64.const 0x1.fffep-1)) (f64.const 9007199254740994)) ;; Computations that round differently in ties-to-odd mode. (assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) (assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) (assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) (assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) (assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) (assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) (assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) (assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) (assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) (assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) (assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) (assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) (assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) (assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) (assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) (assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) (assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) (assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) (assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) (assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) (assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) (assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) (assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) (assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) (assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) (assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) (assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) (assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) (assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) (assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) ;; Computations that round differently on x87. (assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) (assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) (assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) (assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) (assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) (assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) (assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) (assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) (assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) ;; Computations that utilize the maximum exponent value to avoid overflow. (assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) (assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) (assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) (assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) (assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) (assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) ;; Computations that utilize the minimum exponent value. (assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) (assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) (assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) (assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) (assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) (assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) (assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) (assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) ;; Test an add of the second-greatest finite value with the distance to greatest ;; finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) ;; http://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/ (assert_return (invoke "f32.add" (f32.const 2.0) (f32.const 2.0)) (f32.const 4.0)) (assert_return (invoke "f64.add" (f64.const 2.0) (f64.const 2.0)) (f64.const 4.0)) ;; Test rounding above the greatest finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const inf)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const inf)) ;; Test for a historic spreadsheet bug. ;; https://blogs.office.com/2007/09/25/calculation-issue-update/ (assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) (assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) ;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the ;; least that rounds to something less. (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) (assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) (assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) (assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) (assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) (assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) (assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) (assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) (assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) (assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) (assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) (assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) (assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) (assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) (assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) (assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) (assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) (assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) (assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) (assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) (assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) (assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) (assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) (assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) (assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) (assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) (assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) (assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) (assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) (assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) (assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) (assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) (assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) (assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) ;; pow(e, π) - π ;; https://xkcd.com/217/ (assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) (assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) ;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ (assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) (assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) ;; Min normal - max subnormal = min subnormal. (assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) ;; Test subtraction of numbers very close to 1. (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.8p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.0p+0)) (f32.const 0x1p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p-24)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.8p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0p+0)) (f64.const 0x1p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p-53)) ;; Test the least value that can be subtracted from the max value to produce a ;; different value. (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const 0x1.ffffffffffffep+1023)) ;; Miscellaneous values. (assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) (assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) (assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) (assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) (assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) ;; Test for a historic spreadsheet bug. ;; http://www.joelonsoftware.com/items/2007/09/26b.html (assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) (assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) (assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) (assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) (assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) (assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) (assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) (assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) (assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) (assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) (assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) (assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) (assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) (assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) (assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) (assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) (assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) (assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) (assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) (assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) (assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) (assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) (assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) (assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) ;; Computations that round differently on x87. (assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) (assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) (assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) (assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) (assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) (assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) (assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) (assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) (assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) ;; Test the least positive value with a positive square. (assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) ;; Test the greatest positive value with a finite square. (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) (assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const inf)) ;; Test the squares of values very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep-1) (f32.const 0x1.fffffep-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test multiplication of numbers very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000004p+0) (f32.const 0x1.fffffcp-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000002p+0) (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.0000000000001p+0)) ;; Test MIN * EPSILON. ;; http://www.mpfr.org/mpfr-2.0.1/patch2 (assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) ;; http://opencores.org/bug,view,2454 (assert_return (invoke "f32.mul" (f32.const -0x1.0006p+4) (f32.const 0x1.ap-132)) (f32.const -0x1.a009cp-128)) ;; Miscellaneous values. (assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) (assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) (assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) (assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) (assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) (assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) (assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) (assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) (assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) (assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) ;; Test for a historic hardware bug. ;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug (assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) (assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) (assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) (assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) (assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) (assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) (assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) (assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) (assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) (assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) (assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) (assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) (assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) (assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) (assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) (assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) (assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) (assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) (assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) (assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) (assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) (assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) (assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) (assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) ;; Computations that round differently on x87. (assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) (assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) (assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) (assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) (assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) ;; Computations that round differently when div is mul by reciprocal. (assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) (assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) (assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) (assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) (assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) (assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) (assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) (assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) (assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) (assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) (assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) (assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) (assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) (assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) ;; Division involving the maximum subnormal value and the minimum normal value. (assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) ;; Test the least positive value with a positive quotient with the maximum value. (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) ;; Test the least positive value with a finite reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) ;; Test the least positive value that has a subnormal reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) ;; Test that the last binary digit of 1.0/3.0 is even in f32, ;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples ;; ;; and odd in f64, ;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples ;; ;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. ;; http://www.netlib.org/paranoia (assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) ;; Test division of numbers very close to 1. (assert_return (invoke "f32.div" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-1) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffap-1)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffdp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffep-1)) ;; Test for bugs found in an early RISC-V implementation. ;; https://github.com/riscv/riscv-tests/pull/8 (assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) ;; Test another sqrt case on x87. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 (assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963)) (f64.const nan:canonical)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) ;; Test the least value with a sqrt that rounds to one. (assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) ;; Test the greatest value less than one for which sqrt is not an identity. (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffcp-1)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffap-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test that the bitwise floating point operators are bitwise on NaN. (assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) ;; Test values close to 1.0. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) (assert_return (invoke "f32.ceil" (f32.const 0x1.000002p+0)) (f32.const 2.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.0000000000001p+0)) (f64.const 2.0)) ;; Test the maximum and minimum value for which ceil is not an identity operator. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) ;; Test that implementations don't do the x+0x1p52-0x1p52 trick outside the ;; range where it's safe. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+23)) (f32.const 0x1.fffffep+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+23)) (f32.const -0x1.fffffep+23)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+52)) (f64.const 0x1.fffffffffffffp+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+52)) (f64.const -0x1.fffffffffffffp+52)) ;; Test values close to -1.0. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) (assert_return (invoke "f32.floor" (f32.const -0x1.000002p+0)) (f32.const -2.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.0000000000001p+0)) (f64.const -2.0)) ;; Test the maximum and minimum value for which floor is not an identity operator. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that floor isn't implemented as XMVectorFloor. ;; http://dss.stephanierct.com/DevBlog/?p=8#comment-4 (assert_return (invoke "f32.floor" (f32.const 88607.0)) (f32.const 88607.0)) (assert_return (invoke "f64.floor" (f64.const 88607.0)) (f64.const 88607.0)) ;; Test the maximum and minimum value for which trunc is not an identity operator. (assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) (assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that nearest isn't implemented naively. ;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 ;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 (assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) ;; Nearest should not round halfway cases away from zero (as C's round(3) does) ;; or up (as JS's Math.round does). (assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) (assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) (assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) (assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) ;; Test the maximum and minimum value for which nearest is not an identity operator. (assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) ================================================ FILE: Test/WebAssembly/threads/forward.wast ================================================ (module (func $even (export "even") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 1)) (else (call $odd (i32.sub (local.get $n) (i32.const 1)))) ) ) (func $odd (export "odd") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 0)) (else (call $even (i32.sub (local.get $n) (i32.const 1)))) ) ) ) (assert_return (invoke "even" (i32.const 13)) (i32.const 0)) (assert_return (invoke "even" (i32.const 20)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) ================================================ FILE: Test/WebAssembly/threads/func.wast ================================================ ;; Test `func` declarations, i.e. functions (module ;; Auxiliary definition (type $sig (func)) (func $dummy) ;; Syntax (func) (func (export "f")) (func $f) (func $h (export "g")) (func (local)) (func (local) (local)) (func (local i32)) (func (local $x i32)) (func (local i32 f64 i64)) (func (local i32) (local f64)) (func (local i32 f32) (local $x i64) (local) (local i32 f64)) (func (param)) (func (param) (param)) (func (param i32)) (func (param $x i32)) (func (param i32 f64 i64)) (func (param i32) (param f64)) (func (param i32 f32) (param $x i64) (param) (param i32 f64)) (func (result)) (func (result) (result)) (func (result i32) (unreachable)) (func (result i32 f64 f32) (unreachable)) (func (result i32) (result f64) (unreachable)) (func (result i32 f32) (result i64) (result) (result i32 f64) (unreachable)) (type $sig-1 (func)) (type $sig-2 (func (result i32))) (type $sig-3 (func (param $x i32))) (type $sig-4 (func (param i32 f64 i32) (result i32))) (func (export "type-use-1") (type $sig-1)) (func (export "type-use-2") (type $sig-2) (i32.const 0)) (func (export "type-use-3") (type $sig-3)) (func (export "type-use-4") (type $sig-4) (i32.const 0)) (func (export "type-use-5") (type $sig-2) (result i32) (i32.const 0)) (func (export "type-use-6") (type $sig-3) (param i32)) (func (export "type-use-7") (type $sig-4) (param i32) (param f64 i32) (result i32) (i32.const 0) ) (func (type $sig)) (func (type $forward)) ;; forward reference (func $complex (param i32 f32) (param $x i64) (param) (param i32) (result) (result i32) (result) (result i64 i32) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (func $complex-sig (type $sig) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (type $forward (func)) ;; Typing of locals (func (export "local-first-i32") (result i32) (local i32 i32) (local.get 0)) (func (export "local-first-i64") (result i64) (local i64 i64) (local.get 0)) (func (export "local-first-f32") (result f32) (local f32 f32) (local.get 0)) (func (export "local-first-f64") (result f64) (local f64 f64) (local.get 0)) (func (export "local-second-i32") (result i32) (local i32 i32) (local.get 1)) (func (export "local-second-i64") (result i64) (local i64 i64) (local.get 1)) (func (export "local-second-f32") (result f32) (local f32 f32) (local.get 1)) (func (export "local-second-f64") (result f64) (local f64 f64) (local.get 1)) (func (export "local-mixed") (result f64) (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of parameters (func (export "param-first-i32") (param i32 i32) (result i32) (local.get 0)) (func (export "param-first-i64") (param i64 i64) (result i64) (local.get 0)) (func (export "param-first-f32") (param f32 f32) (result f32) (local.get 0)) (func (export "param-first-f64") (param f64 f64) (result f64) (local.get 0)) (func (export "param-second-i32") (param i32 i32) (result i32) (local.get 1)) (func (export "param-second-i64") (param i64 i64) (result i64) (local.get 1)) (func (export "param-second-f32") (param f32 f32) (result f32) (local.get 1)) (func (export "param-second-f64") (param f64 f64) (result f64) (local.get 1)) (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) (result f64) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of results (func (export "empty")) (func (export "value-void") (call $dummy)) (func (export "value-i32") (result i32) (i32.const 77)) (func (export "value-i64") (result i64) (i64.const 7777)) (func (export "value-f32") (result f32) (f32.const 77.7)) (func (export "value-f64") (result f64) (f64.const 77.77)) (func (export "value-i32-f64") (result i32 f64) (i32.const 77) (f64.const 7)) (func (export "value-i32-i32-i32") (result i32 i32 i32) (i32.const 1) (i32.const 2) (i32.const 3) ) (func (export "value-block-void") (block (call $dummy) (call $dummy))) (func (export "value-block-i32") (result i32) (block (result i32) (call $dummy) (i32.const 77)) ) (func (export "value-block-i32-i64") (result i32 i64) (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2)) ) (func (export "return-empty") (return)) (func (export "return-i32") (result i32) (return (i32.const 78))) (func (export "return-i64") (result i64) (return (i64.const 7878))) (func (export "return-f32") (result f32) (return (f32.const 78.7))) (func (export "return-f64") (result f64) (return (f64.const 78.78))) (func (export "return-i32-f64") (result i32 f64) (return (i32.const 78) (f64.const 78.78)) ) (func (export "return-i32-i32-i32") (result i32 i32 i32) (return (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "return-block-i32") (result i32) (return (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "return-block-i32-i64") (result i32 i64) (return (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-empty") (br 0)) (func (export "break-i32") (result i32) (br 0 (i32.const 79))) (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) (func (export "break-i32-f64") (result i32 f64) (br 0 (i32.const 79) (f64.const 79.79)) ) (func (export "break-i32-i32-i32") (result i32 i32 i32) (br 0 (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "break-block-i32") (result i32) (br 0 (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "break-block-i32-i64") (result i32 i64) (br 0 (block (result i32 i64) (call $dummy) (i32.const 1) (i64.const 2))) ) (func (export "break-br_if-empty") (param i32) (br_if 0 (local.get 0)) ) (func (export "break-br_if-num") (param i32) (result i32) (drop (br_if 0 (i32.const 50) (local.get 0))) (i32.const 51) ) (func (export "break-br_if-num-num") (param i32) (result i32 i64) (drop (drop (br_if 0 (i32.const 50) (i64.const 51) (local.get 0)))) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-empty") (param i32) (br_table 0 0 0 (local.get 0)) ) (func (export "break-br_table-num") (param i32) (result i32) (br_table 0 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (func (export "break-br_table-num-num") (param i32) (result i32 i64) (br_table 0 0 (i32.const 50) (i64.const 51) (local.get 0)) (i32.const 51) (i64.const 52) ) (func (export "break-br_table-nested-empty") (param i32) (block (br_table 0 1 0 (local.get 0))) ) (func (export "break-br_table-nested-num") (param i32) (result i32) (i32.add (block (result i32) (br_table 0 1 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (i32.const 2) ) ) (func (export "break-br_table-nested-num-num") (param i32) (result i32 i32) (i32.add (block (result i32 i32) (br_table 0 1 0 (i32.const 50) (i32.const 51) (local.get 0)) (i32.const 51) (i32.const -3) ) ) (i32.const 52) ) ;; Large signatures (func (export "large-sig") (param i32 i64 f32 f32 i32 f64 f32 i32 i32 i32 f32 f64 f64 f64 i32 i32 f32) (result f64 f32 i32 i32 i32 i64 f32 i32 i32 f32 f64 f64 i32 f32 i32 f64) (local.get 5) (local.get 2) (local.get 0) (local.get 8) (local.get 7) (local.get 1) (local.get 3) (local.get 9) (local.get 4) (local.get 6) (local.get 13) (local.get 11) (local.get 15) (local.get 16) (local.get 14) (local.get 12) ) ;; Default initialization of locals (func (export "init-local-i32") (result i32) (local i32) (local.get 0)) (func (export "init-local-i64") (result i64) (local i64) (local.get 0)) (func (export "init-local-f32") (result f32) (local f32) (local.get 0)) (func (export "init-local-f64") (result f64) (local f64) (local.get 0)) ) (assert_return (invoke "type-use-1")) (assert_return (invoke "type-use-2") (i32.const 0)) (assert_return (invoke "type-use-3" (i32.const 1))) (assert_return (invoke "type-use-4" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "type-use-5") (i32.const 0)) (assert_return (invoke "type-use-6" (i32.const 1))) (assert_return (invoke "type-use-7" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "local-first-i32") (i32.const 0)) (assert_return (invoke "local-first-i64") (i64.const 0)) (assert_return (invoke "local-first-f32") (f32.const 0)) (assert_return (invoke "local-first-f64") (f64.const 0)) (assert_return (invoke "local-second-i32") (i32.const 0)) (assert_return (invoke "local-second-i64") (i64.const 0)) (assert_return (invoke "local-second-f32") (f32.const 0)) (assert_return (invoke "local-second-f64") (f64.const 0)) (assert_return (invoke "local-mixed") (f64.const 0)) (assert_return (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) ) (assert_return (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) ) (assert_return (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) ) (assert_return (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) ) (assert_return (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) ) (assert_return (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) ) (assert_return (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) ) (assert_return (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) ) (assert_return (invoke "param-mixed" (f32.const 1) (i32.const 2) (i64.const 3) (i32.const 4) (f64.const 5.5) (i32.const 6) ) (f64.const 5.5) ) (assert_return (invoke "empty")) (assert_return (invoke "value-void")) (assert_return (invoke "value-i32") (i32.const 77)) (assert_return (invoke "value-i64") (i64.const 7777)) (assert_return (invoke "value-f32") (f32.const 77.7)) (assert_return (invoke "value-f64") (f64.const 77.77)) (assert_return (invoke "value-i32-f64") (i32.const 77) (f64.const 7)) (assert_return (invoke "value-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "value-block-void")) (assert_return (invoke "value-block-i32") (i32.const 77)) (assert_return (invoke "value-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "return-empty")) (assert_return (invoke "return-i32") (i32.const 78)) (assert_return (invoke "return-i64") (i64.const 7878)) (assert_return (invoke "return-f32") (f32.const 78.7)) (assert_return (invoke "return-f64") (f64.const 78.78)) (assert_return (invoke "return-i32-f64") (i32.const 78) (f64.const 78.78)) (assert_return (invoke "return-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "return-block-i32") (i32.const 77)) (assert_return (invoke "return-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-empty")) (assert_return (invoke "break-i32") (i32.const 79)) (assert_return (invoke "break-i64") (i64.const 7979)) (assert_return (invoke "break-f32") (f32.const 79.9)) (assert_return (invoke "break-f64") (f64.const 79.79)) (assert_return (invoke "break-i32-f64") (i32.const 79) (f64.const 79.79)) (assert_return (invoke "break-i32-i32-i32") (i32.const 1) (i32.const 2) (i32.const 3) ) (assert_return (invoke "break-block-i32") (i32.const 77)) (assert_return (invoke "break-block-i32-i64") (i32.const 1) (i64.const 2)) (assert_return (invoke "break-br_if-empty" (i32.const 0))) (assert_return (invoke "break-br_if-empty" (i32.const 2))) (assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) (assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_if-num-num" (i32.const 0)) (i32.const 51) (i64.const 52) ) (assert_return (invoke "break-br_if-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-empty" (i32.const 0))) (assert_return (invoke "break-br_table-empty" (i32.const 1))) (assert_return (invoke "break-br_table-empty" (i32.const 5))) (assert_return (invoke "break-br_table-empty" (i32.const -1))) (assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) (assert_return (invoke "break-br_table-num-num" (i32.const 0)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 1)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const 10)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-num-num" (i32.const -100)) (i32.const 50) (i64.const 51) ) (assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) (assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) (assert_return (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 0)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 1)) (i32.const 50) (i32.const 51) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const 2)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num-num" (i32.const -3)) (i32.const 101) (i32.const 52) ) (assert_return (invoke "large-sig" (i32.const 0) (i64.const 1) (f32.const 2) (f32.const 3) (i32.const 4) (f64.const 5) (f32.const 6) (i32.const 7) (i32.const 8) (i32.const 9) (f32.const 10) (f64.const 11) (f64.const 12) (f64.const 13) (i32.const 14) (i32.const 15) (f32.const 16) ) (f64.const 5) (f32.const 2) (i32.const 0) (i32.const 8) (i32.const 7) (i64.const 1) (f32.const 3) (i32.const 9) (i32.const 4) (f32.const 6) (f64.const 13) (f64.const 11) (i32.const 15) (f32.const 16) (i32.const 14) (f64.const 12) ) (assert_return (invoke "init-local-i32") (i32.const 0)) (assert_return (invoke "init-local-i64") (i64.const 0)) (assert_return (invoke "init-local-f32") (f32.const 0)) (assert_return (invoke "init-local-f64") (f64.const 0)) ;; Expansion of inline function types (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (type $t (func (param i32))) (func $i32->void (type 0)) ;; (param i32) (func $void->f64 (type 1) (f64.const 0)) ;; (result f64) (func $check (call $i32->void (i32.const 0)) (drop (call $void->f64)) ) ) (assert_invalid (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (func $h (result f64) (f64.const 1)) ;; reuses implicit type definition (type $t (func (param i32))) (func (type 2)) ;; does not exist ) "unknown type" ) (assert_malformed (module quote "(func $f (result f64) (f64.const 0))" ;; adds implicit type definition "(func $g (param i32))" ;; reuses explicit type definition "(func $h (result f64) (f64.const 1))" ;; reuses implicit type definition "(type $t (func (param i32)))" "(func (type 2) (param i32))" ;; does not exist ) "unknown type" ) (module (type $proc (func (result i32))) (type $sig (func (param i32) (result i32))) (func (export "f") (type $sig) (local $var i32) (local.get $var) ) (func $g (type $sig) (local $var i32) (local.get $var) ) (func (export "g") (type $sig) (call $g (local.get 0)) ) (func (export "p") (type $proc) (local $var i32) (local.set 0 (i32.const 42)) (local.get $var) ) ) (assert_return (invoke "f" (i32.const 42)) (i32.const 0)) (assert_return (invoke "g" (i32.const 42)) (i32.const 0)) (assert_return (invoke "p") (i32.const 42)) (module (type $sig (func)) (func $empty-sig-1) ;; should be assigned type $sig (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $empty-sig-2) ;; should be assigned type $sig (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-4 (param i64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-5 (param i64 i64 f64 i64 f64 i64 f32 i32)) (type $empty-sig-duplicate (func)) (type $complex-sig-duplicate (func (param i64 i64 f64 i64 f64 i64 f32 i32))) (table funcref (elem $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 $complex-sig-4 $complex-sig-5 ) ) (func (export "signature-explicit-reused") (call_indirect (type $sig) (i32.const 1)) (call_indirect (type $sig) (i32.const 4)) ) (func (export "signature-implicit-reused") ;; The implicit index 3 in this test depends on the function and ;; type definitions, and may need adapting if they change. (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 2) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 3) ) ) (func (export "signature-explicit-duplicate") (call_indirect (type $empty-sig-duplicate) (i32.const 1)) ) (func (export "signature-implicit-duplicate") (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 5) ) (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 6) ) ) ) (assert_return (invoke "signature-explicit-reused")) (assert_return (invoke "signature-implicit-reused")) (assert_return (invoke "signature-explicit-duplicate")) (assert_return (invoke "signature-implicit-duplicate")) ;; Malformed type use (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (type $sig) (result i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (result i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (type $sig) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (param i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (param i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (type $sig) (param i32) (result i32) (unreachable))" ) "inline function type" ) ;; Invalid typing of locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of result (assert_invalid (module (func $type-empty-i32 (result i32))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64-i32 (result f64 i32))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-nums (result i32 i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (i32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-void (i32.const 0) (i64.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-nums (result f32 f32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-nums-vs-num (result f32) (f32.const 0) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-num (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-nums (result i32 i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-num (result i32) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-nums (result i32 i64) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-num (result i32) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-nums (result i64 i64) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-num (result i32) (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-nums (result i32 i32) (return) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-partial-vs-nums (result i32 i32) (i32.const 1) (return) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-num (result i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-nums (result i32 i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-num (result i32) (return (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-nums (result i32 i32) (return (i64.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-num (result i32) (return (i64.const 1)) (return (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-nums (result i32 i32) (return (i32.const 1)) (return (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-nums (result i32 i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-num (result i32) (br 0 (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-nums (result i32 i32) (br 0 (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-nums (result i32 i32) (br 0) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (br 0 (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-nums (result i32 i32) (br 0 (i32.const 1)) (i32.const 1) (i32.const 2) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (br 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-nums (result i32 i32) (block (br 1)) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (br 1 (nop))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-nums (result i32 i32) (block (br 1 (nop))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-nums (result i32 i32) (block (result i32) (br 1 (i32.const 1))) (br 0 (i32.const 1) (i32.const 2)) )) "type mismatch" ) ;; Syntax errors (assert_malformed (module quote "(func (nop) (local i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (result i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (result i32) (local.get 0))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (local.get 0))") "unexpected token" ) ;; Duplicate name errors (assert_malformed (module quote "(func $foo)" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(func $foo)") "duplicate func") (assert_malformed (module quote "(import \"\" \"\" (func $foo))" "(import \"\" \"\" (func $foo))") "duplicate func") (assert_malformed (module quote "(func (param $foo i32) (param $foo i32))") "duplicate local") (assert_malformed (module quote "(func (param $foo i32) (local $foo i32))") "duplicate local") (assert_malformed (module quote "(func (local $foo i32) (local $foo i32))") "duplicate local") ================================================ FILE: Test/WebAssembly/threads/func_ptrs.wast ================================================ (module (type (func)) ;; 0: void -> void (type $S (func)) ;; 1: void -> void (type (func (param))) ;; 2: void -> void (type (func (result i32))) ;; 3: void -> i32 (type (func (param) (result i32))) ;; 4: void -> i32 (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 (type $U (func (param i32))) ;; 6: i32 -> void (func $print (import "spectest" "print_i32") (type 6)) (func (type 0)) (func (type $S)) (func (export "one") (type 4) (i32.const 13)) (func (export "two") (type $T) (i32.add (local.get 0) (i32.const 1))) ;; Both signature and parameters are allowed (and required to match) ;; since this allows the naming of parameters. (func (export "three") (type $T) (param $a i32) (result i32) (i32.sub (local.get 0) (i32.const 2)) ) (func (export "four") (type $U) (call $print (local.get 0))) ) (assert_return (invoke "one") (i32.const 13)) (assert_return (invoke "two" (i32.const 13)) (i32.const 14)) (assert_return (invoke "three" (i32.const 13)) (i32.const 11)) (invoke "four" (i32.const 83)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") (assert_invalid (module (table 1 funcref) (elem (i64.const 0))) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop))) "constant expression required" ) (assert_invalid (module (func (type 42))) "unknown type") (assert_invalid (module (import "spectest" "print_i32" (func (type 43)))) "unknown type") (module (type $T (func (param) (result i32))) (type $U (func (param) (result i32))) (table funcref (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func $t3 (type $T) (i32.const 3)) (func $u1 (type $U) (i32.const 4)) (func $u2 (type $U) (i32.const 5)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) (func (export "callu") (param $i i32) (result i32) (call_indirect (type $U) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callt" (i32.const 7)) "undefined element") (assert_trap (invoke "callt" (i32.const 100)) "undefined element") (assert_trap (invoke "callt" (i32.const -1)) "undefined element") (assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callu" (i32.const 7)) "undefined element") (assert_trap (invoke "callu" (i32.const 100)) "undefined element") (assert_trap (invoke "callu" (i32.const -1)) "undefined element") (module (type $T (func (result i32))) (table funcref (elem 0 1)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) ================================================ FILE: Test/WebAssembly/threads/global.wast ================================================ ;; Test globals (module (global $a i32 (i32.const -2)) (global (;1;) f32 (f32.const -3)) (global (;2;) f64 (f64.const -4)) (global $b i64 (i64.const -5)) (global $x (mut i32) (i32.const -12)) (global (;5;) (mut f32) (f32.const -13)) (global (;6;) (mut f64) (f64.const -14)) (global $y (mut i64) (i64.const -15)) (func (export "get-a") (result i32) (global.get $a)) (func (export "get-b") (result i64) (global.get $b)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i64) (global.get $y)) (func (export "set-x") (param i32) (global.set $x (local.get 0))) (func (export "set-y") (param i64) (global.set $y (local.get 0))) (func (export "get-1") (result f32) (global.get 1)) (func (export "get-2") (result f64) (global.get 2)) (func (export "get-5") (result f32) (global.get 5)) (func (export "get-6") (result f64) (global.get 6)) (func (export "set-5") (param f32) (global.set 5 (local.get 0))) (func (export "set-6") (param f64) (global.set 6 (local.get 0))) ;; As the argument of control constructs and instructions (memory 1) (func $dummy) (func (export "as-select-first") (result i32) (select (global.get $x) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (global.get $x) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (global.get $x)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (global.get $x) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (global.get $x) (call $dummy) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (global.get $x) ) ) (func (export "as-if-condition") (result i32) (if (result i32) (global.get $x) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (global.get $x)) (else (i32.const 2)) ) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (global.get $x)) ) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (global.get $x) (i32.const 2)) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (global.get $x)) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (result i32) (block (result i32) (global.get $x) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (global.get $x) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (global.get $x) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (global.get $x) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (global.get $x) ) ) ) (func (export "as-store-first") (global.get $x) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 0) (global.get $x) (i32.store) ) (func (export "as-load-operand") (result i32) (i32.load (global.get $x)) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (global.get $x)) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (global.get $x)) ) (func (export "as-return-value") (result i32) (global.get $x) (return) ) (func (export "as-drop-operand") (drop (global.get $x)) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (global.get $x))) ) (func (export "as-local.set-value") (param i32) (result i32) (local.set 0 (global.get $x)) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (global.get $x)) ) (func (export "as-global.set-value") (result i32) (global.set $x (global.get $x)) (global.get $x) ) (func (export "as-unary-operand") (result i32) (i32.eqz (global.get $x)) ) (func (export "as-binary-operand") (result i32) (i32.mul (global.get $x) (global.get $x) ) ) (func (export "as-compare-operand") (result i32) (i32.gt_u (global.get 0) (i32.const 1) ) ) ) (assert_return (invoke "get-a") (i32.const -2)) (assert_return (invoke "get-b") (i64.const -5)) (assert_return (invoke "get-x") (i32.const -12)) (assert_return (invoke "get-y") (i64.const -15)) (assert_return (invoke "get-1") (f32.const -3)) (assert_return (invoke "get-2") (f64.const -4)) (assert_return (invoke "get-5") (f32.const -13)) (assert_return (invoke "get-6") (f64.const -14)) (assert_return (invoke "set-x" (i32.const 6))) (assert_return (invoke "set-y" (i64.const 7))) (assert_return (invoke "set-5" (f32.const 8))) (assert_return (invoke "set-6" (f64.const 9))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-5") (f32.const 8)) (assert_return (invoke "get-6") (f64.const 9)) (assert_return (invoke "as-select-first") (i32.const 6)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 6)) (assert_return (invoke "as-loop-mid") (i32.const 6)) (assert_return (invoke "as-loop-last") (i32.const 6)) (assert_return (invoke "as-if-condition") (i32.const 2)) (assert_return (invoke "as-if-then") (i32.const 6)) (assert_return (invoke "as-if-else") (i32.const 6)) (assert_return (invoke "as-br_if-first") (i32.const 6)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 6)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 6)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 6)) (assert_return (invoke "as-return-value") (i32.const 6)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 6)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-global.set-value") (i32.const 6)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 36)) (assert_return (invoke "as-compare-operand") (i32.const 1)) (assert_invalid (module (global f32 (f32.const 0)) (func (global.set 0 (f32.const 1)))) "global is immutable" ) ;; mutable globals can be exported (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) (module (global (export "a") (mut f32) (f32.const 0))) (assert_invalid (module (global f32 (f32.neg (f32.const 0)))) "constant expression required" ) (assert_invalid (module (global f32 (local.get 0))) "constant expression required" ) (assert_invalid (module (global f32 (f32.neg (f32.const 1)))) "constant expression required" ) (assert_invalid (module (global i32 (i32.const 0) (nop))) "constant expression required" ) (assert_invalid (module (global i32 (nop))) "constant expression required" ) (assert_invalid (module (global i32 (f32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (i32.const 0) (i32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (;empty instruction sequence;))) "type mismatch" ) (assert_invalid (module (global i32 (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (global.get 1)) (global i32 (i32.const 0))) "unknown global" ) (module (import "spectest" "global_i32" (global i32)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\02" ;; malformed mutability ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\ff" ;; malformed mutability ) "malformed mutability" ) (module (global i32 (i32.const 0)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\02" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\ff" ;; malformed mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "malformed mutability" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty (global.set $x) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-block (i32.const 0) (block (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-loop (i32.const 0) (loop (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br (i32.const 0) (block (br 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_if (i32.const 0) (block (br_if 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_table (i32.const 0) (block (br_table 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-return (return (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-select (select (global.set $x) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-call (call 1 (global.set $x)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-global.set-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (global.set $x) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Duplicate identifier errors (assert_malformed (module quote "(global $foo i32 (i32.const 0))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(global $foo i32 (i32.const 0))") "duplicate global") (assert_malformed (module quote "(import \"\" \"\" (global $foo i32))" "(import \"\" \"\" (global $foo i32))") "duplicate global") ================================================ FILE: Test/WebAssembly/threads/i32.wast ================================================ ;; i32 operations (module (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (local.get $x) (local.get $y))) (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i32) (result i32) (i32.clz (local.get $x))) (func (export "ctz") (param $x i32) (result i32) (i32.ctz (local.get $x))) (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (local.get $x))) (func (export "extend8_s") (param $x i32) (result i32) (i32.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i32) (result i32) (i32.extend16_s (local.get $x))) (func (export "eqz") (param $x i32) (result i32) (i32.eqz (local.get $x))) (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) (assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) (assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) (assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) (assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) (assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) (assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) (assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) (assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) (assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) (assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) (assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) (assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) (assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) (assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) (assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00000400)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 31)) (i32.const 2)) (assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) (assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) (assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) (assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) (assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) (assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) (assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) (assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) (assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) (assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) (assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) (assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) (assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) (assert_return (invoke "extend8_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0x7f)) (i32.const 127)) (assert_return (invoke "extend8_s" (i32.const 0x80)) (i32.const -128)) (assert_return (invoke "extend8_s" (i32.const 0xff)) (i32.const -1)) (assert_return (invoke "extend8_s" (i32.const 0x012345_00)) (i32.const 0)) (assert_return (invoke "extend8_s" (i32.const 0xfedcba_80)) (i32.const -0x80)) (assert_return (invoke "extend8_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0x7fff)) (i32.const 32767)) (assert_return (invoke "extend16_s" (i32.const 0x8000)) (i32.const -32768)) (assert_return (invoke "extend16_s" (i32.const 0xffff)) (i32.const -1)) (assert_return (invoke "extend16_s" (i32.const 0x0123_0000)) (i32.const 0)) (assert_return (invoke "extend16_s" (i32.const 0xfedc_8000)) (i32.const -0x8000)) (assert_return (invoke "extend16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_invalid (module (func $type-unary-operand-empty (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-block (i32.const 0) (block (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-loop (i32.const 0) (loop (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-if (i32.const 0) (i32.const 0) (if (then (i32.eqz) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.eqz))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br (i32.const 0) (block (br 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.eqz) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-return (return (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-select (select (i32.eqz) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-call (call 1 (i32.eqz)) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-unary-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.eqz) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.set (local i32) (local.set 0 (i32.eqz)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-unary-operand-empty-in-global.set (global.set $x (i32.eqz)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-memory.grow (memory.grow (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-load (i32.load (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-unary-operand-empty-in-store (i32.store (i32.eqz) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty (i32.const 0) (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-if (i32.const 0) (i32.const 0) (i32.const 0) (if (i32.add) (then (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-if (i32.const 0) (i32.const 0) (if (i32.const 0) (then (i32.add)) (else (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-else (i32.const 0) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add) (i32.const 0))) (drop) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-return (return (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-return (return (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-select (select (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-select (select (i32.const 0) (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-call (call 1 (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-call (call 1 (i32.const 0) (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-1st-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-2nd-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.set (local i32) (local.set 0 (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.set (local i32) (local.set 0 (i32.const 0) (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-1st-operand-empty-in-global.set (global.set $x (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-2nd-operand-empty-in-global.set (global.set $x (i32.const 0) (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-memory.grow (memory.grow (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-memory.grow (memory.grow (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-load (i32.load (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-load (i32.load (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-1st-operand-empty-in-store (i32.store (i32.add) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-2nd-operand-empty-in-store (i32.store (i32.const 1) (i32.add) (i32.const 0)) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (func (result i32) (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eqz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.clz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ctz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.popcnt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/i64.wast ================================================ ;; i64 operations (module (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (local.get $x) (local.get $y))) (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i64) (result i64) (i64.clz (local.get $x))) (func (export "ctz") (param $x i64) (result i64) (i64.ctz (local.get $x))) (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (local.get $x))) (func (export "extend8_s") (param $x i64) (result i64) (i64.extend8_s (local.get $x))) (func (export "extend16_s") (param $x i64) (result i64) (i64.extend16_s (local.get $x))) (func (export "extend32_s") (param $x i64) (result i64) (i64.extend32_s (local.get $x))) (func (export "eqz") (param $x i64) (result i32) (i64.eqz (local.get $x))) (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) (assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) (assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) (assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) (assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) (assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) (assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) (assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) (assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) (assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) (assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) (assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) (assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) (assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) (assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) (assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x579b30ec048d159d)) (assert_return (invoke "rotl" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0xe000000dc000000f)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0xcf013579ae529dea)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x55e6cc3b01234567)) (assert_return (invoke "rotr" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0x0fe000000dc00000)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0x94a77ab3c04d5e6b)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 63)) (i64.const 2)) (assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) (assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) (assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) (assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) (assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) (assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) (assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) (assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) (assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) (assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) (assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) (assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) (assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) (assert_return (invoke "extend8_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0x7f)) (i64.const 127)) (assert_return (invoke "extend8_s" (i64.const 0x80)) (i64.const -128)) (assert_return (invoke "extend8_s" (i64.const 0xff)) (i64.const -1)) (assert_return (invoke "extend8_s" (i64.const 0x01234567_89abcd_00)) (i64.const 0)) (assert_return (invoke "extend8_s" (i64.const 0xfedcba98_765432_80)) (i64.const -0x80)) (assert_return (invoke "extend8_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend16_s" (i64.const 0x8000)) (i64.const -32768)) (assert_return (invoke "extend16_s" (i64.const 0xffff)) (i64.const -1)) (assert_return (invoke "extend16_s" (i64.const 0x12345678_9abc_0000)) (i64.const 0)) (assert_return (invoke "extend16_s" (i64.const 0xfedcba98_7654_8000)) (i64.const -0x8000)) (assert_return (invoke "extend16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0x7fff)) (i64.const 32767)) (assert_return (invoke "extend32_s" (i64.const 0x8000)) (i64.const 32768)) (assert_return (invoke "extend32_s" (i64.const 0xffff)) (i64.const 65535)) (assert_return (invoke "extend32_s" (i64.const 0x7fffffff)) (i64.const 0x7fffffff)) (assert_return (invoke "extend32_s" (i64.const 0x80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const 0xffffffff)) (i64.const -1)) (assert_return (invoke "extend32_s" (i64.const 0x01234567_00000000)) (i64.const 0)) (assert_return (invoke "extend32_s" (i64.const 0xfedcba98_80000000)) (i64.const -0x80000000)) (assert_return (invoke "extend32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0xffffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result i64) (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eqz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.clz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ctz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.popcnt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/if.wast ================================================ ;; Test `if` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (param i32) (if (local.get 0) (then)) (if (local.get 0) (then) (else)) (if $l (local.get 0) (then)) (if $l (local.get 0) (then) (else)) ) (func (export "singular") (param i32) (result i32) (if (local.get 0) (then (nop))) (if (local.get 0) (then (nop)) (else (nop))) (if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8))) ) (func (export "multi") (param i32) (result i32 i32) (if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy))) (if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy))) (if (result i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 8) (call $dummy)) (else (call $dummy) (call $dummy) (i32.const 9) (call $dummy)) ) (if (result i32 i64 i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 1) (call $dummy) (call $dummy) (call $dummy) (i64.const 2) (call $dummy) (call $dummy) (call $dummy) (i32.const 3) (call $dummy) ) (else (call $dummy) (call $dummy) (i32.const -1) (call $dummy) (call $dummy) (call $dummy) (i64.const -2) (call $dummy) (call $dummy) (call $dummy) (i32.const -3) (call $dummy) ) ) (drop) (drop) ) (func (export "nested") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 9)) (else (call $dummy) (i32.const 10)) ) ) (else (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 10)) (else (call $dummy) (i32.const 11)) ) ) ) ) (func (export "as-select-first") (param i32) (result i32) (select (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 3) ) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 3) ) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) ) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-if-condition") (param i32) (result i32) (if (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) ) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) ) (func (export "as-store-first") (param i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-return-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0))) (return) ) (func (export "as-drop-operand") (param i32) (drop (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (if (result i32) (local.get 0) (then (i32.const 11)) (else (i32.const 10)) ) ) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.ctz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const -13)) ) ) ) (func (export "as-binary-operand") (param i32 i32) (result i32) (i32.mul (if (result i32) (local.get 0) (then (call $dummy) (i32.const 3)) (else (call $dummy) (i32.const -3)) ) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -5)) ) ) ) (func (export "as-test-operand") (param i32) (result i32) (i32.eqz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-compare-operand") (param i32 i32) (result i32) (f32.gt (if (result f32) (local.get 0) (then (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -3)) ) (if (result f32) (local.get 1) (then (call $dummy) (f32.const 4)) (else (call $dummy) (f32.const -4)) ) ) ) (func (export "as-binary-operands") (param i32) (result i32) (i32.mul (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const 3) (call $dummy) (i32.const -4)) ) ) ) (func (export "as-compare-operands") (param i32) (result i32) (f32.gt (if (result f32 f32) (local.get 0) (then (call $dummy) (f32.const 3) (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -2) (call $dummy) (f32.const -3)) ) ) ) (func (export "as-mixed-operands") (param i32) (result i32) (if (result i32 i32) (local.get 0) (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -3) (call $dummy) (i32.const -4)) ) (i32.const 5) (i32.add) (i32.mul) ) (func (export "break-bare") (result i32) (if (i32.const 1) (then (br 0) (unreachable))) (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable))) (i32.const 19) ) (func (export "break-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (br 0 (i32.const 18)) (i32.const 19)) (else (br 0 (i32.const 21)) (i32.const 20)) ) ) (func (export "break-multi-value") (param i32) (result i32 i32 i64) (if (result i32 i32 i64) (local.get 0) (then (br 0 (i32.const 18) (i32.const -18) (i64.const 18)) (i32.const 19) (i32.const -19) (i64.const 19) ) (else (br 0 (i32.const -18) (i32.const 18) (i64.const -18)) (i32.const -19) (i32.const 19) (i64.const -19) ) ) ) (func (export "param") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add)) (else (i32.const -2) (i32.add)) ) ) (func (export "params") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add)) (else (i32.sub)) ) ) (func (export "params-id") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then)) (i32.add) ) (func (export "param-break") (param i32) (result i32) (i32.const 1) (if (param i32) (result i32) (local.get 0) (then (i32.const 2) (i32.add) (br 0)) (else (i32.const -2) (i32.add) (br 0)) ) ) (func (export "params-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32) (local.get 0) (then (i32.add) (br 0)) (else (i32.sub) (br 0)) ) ) (func (export "params-id-break") (param i32) (result i32) (i32.const 1) (i32.const 2) (if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0))) (i32.add) ) (func (export "effects") (param i32) (result i32) (local i32) (if (block (result i32) (local.set 1 (i32.const 1)) (local.get 0)) (then (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (local.set 1 (i32.sub (local.get 1) (i32.const 5))) (local.set 1 (i32.mul (local.get 1) (i32.const 7))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 100))) ) (else (local.set 1 (i32.mul (local.get 1) (i32.const 5))) (local.set 1 (i32.sub (local.get 1) (i32.const 7))) (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 1000))) ) ) (local.get 1) ) ;; Examples (func $add64_u_with_carry (export "add64_u_with_carry") (param $i i64) (param $j i64) (param $c i32) (result i64 i32) (local $k i64) (local.set $k (i64.add (i64.add (local.get $i) (local.get $j)) (i64.extend_i32_u (local.get $c)) ) ) (return (local.get $k) (i64.lt_u (local.get $k) (local.get $i))) ) (func $add64_u_saturated (export "add64_u_saturated") (param i64 i64) (result i64) (call $add64_u_with_carry (local.get 0) (local.get 1) (i32.const 0)) (if (param i64) (result i64) (then (drop) (i64.const -1)) ) ) ;; Block signature syntax (type $block-sig-1 (func)) (type $block-sig-2 (func (result i32))) (type $block-sig-3 (func (param $x i32))) (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) (func (export "type-use") (if (type $block-sig-1) (i32.const 1) (then)) (if (type $block-sig-2) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (i32.const 1) (then (drop)) (else (drop))) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (i32.const 1) (then)) (drop) (drop) (drop) (if (type $block-sig-2) (result i32) (i32.const 1) (then (i32.const 0)) (else (i32.const 2)) ) (if (type $block-sig-3) (param i32) (i32.const 1) (then (drop)) (else (drop)) ) (i32.const 0) (f64.const 0) (i32.const 0) (if (type $block-sig-4) (param i32) (param f64 i32) (result i32 f64) (result i32) (i32.const 1) (then) ) (drop) (drop) (drop) ) ) (assert_return (invoke "empty" (i32.const 0))) (assert_return (invoke "empty" (i32.const 1))) (assert_return (invoke "empty" (i32.const 100))) (assert_return (invoke "empty" (i32.const -2))) (assert_return (invoke "singular" (i32.const 0)) (i32.const 8)) (assert_return (invoke "singular" (i32.const 1)) (i32.const 7)) (assert_return (invoke "singular" (i32.const 10)) (i32.const 7)) (assert_return (invoke "singular" (i32.const -10)) (i32.const 7)) (assert_return (invoke "multi" (i32.const 0)) (i32.const 9) (i32.const -1)) (assert_return (invoke "multi" (i32.const 1)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const 13)) (i32.const 8) (i32.const 1)) (assert_return (invoke "multi" (i32.const -5)) (i32.const 8) (i32.const 1)) (assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11)) (assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-condition" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-condition" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-last" (i32.const 0)) (i32.const 2)) (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-binary-operands" (i32.const 0)) (i32.const -12)) (assert_return (invoke "as-binary-operands" (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-compare-operands" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operands" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-mixed-operands" (i32.const 0)) (i32.const -3)) (assert_return (invoke "as-mixed-operands" (i32.const 1)) (i32.const 27)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value" (i32.const 1)) (i32.const 18)) (assert_return (invoke "break-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "break-multi-value" (i32.const 0)) (i32.const -18) (i32.const 18) (i64.const -18) ) (assert_return (invoke "break-multi-value" (i32.const 1)) (i32.const 18) (i32.const -18) (i64.const 18) ) (assert_return (invoke "param" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id" (i32.const 1)) (i32.const 3)) (assert_return (invoke "param-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "param-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-break" (i32.const 0)) (i32.const -1)) (assert_return (invoke "params-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 0)) (i32.const 3)) (assert_return (invoke "params-id-break" (i32.const 1)) (i32.const 3)) (assert_return (invoke "effects" (i32.const 1)) (i32.const -14)) (assert_return (invoke "effects" (i32.const 0)) (i32.const -6)) (assert_return (invoke "add64_u_with_carry" (i64.const 0) (i64.const 0) (i32.const 0)) (i64.const 0) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const 100) (i64.const 124) (i32.const 0)) (i64.const 224) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 0)) (i64.const -1) (i32.const 0) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const -1) (i32.const 0)) (i64.const -2) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 1)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 1)) (i64.const 1) (i32.const 1) ) (assert_return (invoke "add64_u_with_carry" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000) (i32.const 0)) (i64.const 0) (i32.const 1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0) (i64.const 0)) (i64.const 0) ) (assert_return (invoke "add64_u_saturated" (i64.const 1230) (i64.const 23)) (i64.const 1253) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 0)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const 1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const -1) (i64.const -1)) (i64.const -1) ) (assert_return (invoke "add64_u_saturated" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const -1) ) (assert_return (invoke "type-use")) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (type $sig) (result i32) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (type $sig) (result i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (param i32) (result i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (type $sig) (param i32) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0)" " (if (result i32) (param i32) (type $sig) (i32.const 1) (then))" ")" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (if (result i32) (param i32) (i32.const 1) (then)))" ) "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0) (i32.const 1)" " (if (param $x i32) (then (drop)) (else (drop)))" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 1)" " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (then (drop)) (else (drop)))" " (unreachable)" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (i32.const 0) (i32.const 1)" " (if (type $sig) (param i32) (result i32) (then)) (unreachable)" ")" ) "inline function type" ) (assert_invalid (module (type $sig (func)) (func (i32.const 1) (if (type $sig) (i32.const 0) (then))) ) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void (if (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void-else (if (i32.const 1) (then (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-void (if (i32.const 1) (then) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-void (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-void-else (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-void (if (i32.const 1) (then) (else (i32.const 1) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-void (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else (i32.const 2) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else (i32.const 0) (i32.const 2))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-partial-vs-nums (result i32 i32) (i32.const 0) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-nums-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-nums-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1) (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-unreached-select (result i32) (if (result i64) (i32.const 0) (then (select (unreachable) (unreachable) (unreachable))) (else (i64.const 0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (i64.const 0)) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (select (unreachable) (unreachable) (unreachable))) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0)) (else (i32.const 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (nop)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (nop)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-nums (result i32 i32) (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-partial-vs-nums (result i32 i32) (i32.const 1) (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-condition-empty (if (then)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-block (i32.const 0) (block (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-loop (i32.const 0) (loop (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-then (i32.const 0) (i32.const 0) (if (then (if (then)))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br (i32.const 0) (block (br 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_if (i32.const 0) (block (br_if 0 (if(then)) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_table (i32.const 0) (block (br_table 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-return (return (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-select (select (if(then)) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-call (call 1 (if(then))) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-condition-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (if(then)) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.set (local i32) (local.set 0 (if(then))) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.tee (local i32) (local.tee 0 (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-condition-empty-in-global.set (global.set $x (if(then))) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-memory.grow (memory.grow (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-load (i32.load (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-condition-empty-in-store (i32.store (if(then)) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-num (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (if (param i32 f64) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (f32.const 0) (if (param i32) (i32.const 1) (then (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-param-nested-void-vs-num (block (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-void-vs-nums (block (if (param i32 f64) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (block (f32.const 0) (if (param i32) (i32.const 1) (then (drop)))) )) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-nums (block (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop)))) )) "type mismatch" ) (assert_malformed (module quote "(func (param i32) (result i32) if (param $x i32) end)") "unexpected token" ) (assert_malformed (module quote "(func (param i32) (result i32) (if (param $x i32) (then)))") "unexpected token" ) (assert_malformed (module quote "(func i32.const 0 if end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l1 end $l2)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end $l)") "mismatching label" ) ================================================ FILE: Test/WebAssembly/threads/imports.wast ================================================ ;; Auxiliary module to import from (module (func (export "func")) (func (export "func-i32") (param i32)) (func (export "func-f32") (param f32)) (func (export "func->i32") (result i32) (i32.const 22)) (func (export "func->f32") (result f32) (f32.const 11)) (func (export "func-i32->i32") (param i32) (result i32) (local.get 0)) (func (export "func-i64->i64") (param i64) (result i64) (local.get 0)) (global (export "global-i32") i32 (i32.const 55)) (global (export "global-f32") f32 (f32.const 44)) (table (export "table-10-inf") 10 funcref) ;; (table (export "table-10-20") 10 20 funcref) (memory (export "memory-2-inf") 2) ;; (memory (export "memory-2-4") 2 4) ) (register "test") ;; Functions (module (type $func_i32 (func (param i32))) (type $func_i64 (func (param i64))) (type $func_f32 (func (param f32))) (type $func_f64 (func (param f64))) (import "spectest" "print_i32" (func (param i32))) ;; JavaScript can't handle i64 yet. ;; (func (import "spectest" "print_i64") (param i64)) (import "spectest" "print_i32" (func $print_i32 (param i32))) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "print_i64" (func $print_i64 (param i64))) (import "spectest" "print_f32" (func $print_f32 (param f32))) (import "spectest" "print_f64" (func $print_f64 (param f64))) (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32))) (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64))) (func $print_i32-2 (import "spectest" "print_i32") (param i32)) (func $print_f64-2 (import "spectest" "print_f64") (param f64)) (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) (func (export "p1") (import "spectest" "print_i32") (param i32)) (func $p (export "p2") (import "spectest" "print_i32") (param i32)) (func (export "p3") (export "p4") (import "spectest" "print_i32") (param i32)) (func (export "p5") (import "spectest" "print_i32") (type 0)) (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result)) (import "spectest" "print_i32" (func (type $forward))) (func (import "spectest" "print_i32") (type $forward)) (type $forward (func (param i32))) (table funcref (elem $print_i32 $print_f64)) (func (export "print32") (param $i i32) (local $x f32) (local.set $x (f32.convert_i32_s (local.get $i))) (call 0 (local.get $i)) (call $print_i32_f32 (i32.add (local.get $i) (i32.const 1)) (f32.const 42) ) (call $print_i32 (local.get $i)) (call $print_i32-2 (local.get $i)) (call $print_f32 (local.get $x)) (call_indirect (type $func_i32) (local.get $i) (i32.const 0)) ) (func (export "print64") (param $i i64) (local $x f64) (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i)))) ;; JavaScript can't handle i64 yet. ;; (call 1 (local.get $i)) (call $print_f64_f64 (f64.add (local.get $x) (f64.const 1)) (f64.const 53) ) ;; JavaScript can't handle i64 yet. ;; (call $print_i64 (local.get $i)) (call $print_f64 (local.get $x)) (call $print_f64-2 (local.get $x)) (call_indirect (type $func_f64) (local.get $x) (i32.const 1)) ) ) (assert_return (invoke "print32" (i32.const 13))) (assert_return (invoke "print64" (i64.const 24))) (assert_invalid (module (type (func (result i32))) (import "test" "func" (func (type 1))) ) "unknown type" ) (module (import "test" "func" (func))) (module (import "test" "func-i32" (func (param i32)))) (module (import "test" "func-f32" (func (param f32)))) (module (import "test" "func->i32" (func (result i32)))) (module (import "test" "func->f32" (func (result f32)))) (module (import "test" "func-i32->i32" (func (param i32) (result i32)))) (module (import "test" "func-i64->i64" (func (param i64) (result i64)))) (assert_unlinkable (module (import "test" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (func))) "incompatible import type" ) ;; Globals (module (import "spectest" "global_i32" (global i32)) (global (import "spectest" "global_i32") i32) (import "spectest" "global_i32" (global $x i32)) (global $y (import "spectest" "global_i32") i32) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "global_i64" (global i64)) (import "spectest" "global_f32" (global f32)) (import "spectest" "global_f64" (global f64)) (func (export "get-0") (result i32) (global.get 0)) (func (export "get-1") (result i32) (global.get 1)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i32) (global.get $y)) ) (assert_return (invoke "get-0") (i32.const 666)) (assert_return (invoke "get-1") (i32.const 666)) (assert_return (invoke "get-x") (i32.const 666)) (assert_return (invoke "get-y") (i32.const 666)) (module (import "test" "global-i32" (global i32))) (module (import "test" "global-f32" (global f32))) (assert_unlinkable (module (import "test" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (global i32))) "incompatible import type" ) ;; Tables (module (type (func (result i32))) (import "spectest" "table" (table 10 20 funcref)) (elem (table 0) (i32.const 1) $f $g) (func (export "call") (param i32) (result i32) (call_indirect (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (type (func (result i32))) (table (import "spectest" "table") 10 20 funcref) (elem (table 0) (i32.const 1) $f $g) (func (export "call") (param i32) (result i32) (call_indirect (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") ;; Disabled for incompatibility with reference-types proposal, which adds support for multiple tables. ;; (assert_invalid ;; (module (import "" "" (table 10 funcref)) (import "" "" (table 10 funcref))) ;; "multiple tables" ;; ) ;; (assert_invalid ;; (module (import "" "" (table 10 funcref)) (table 10 funcref)) ;; "multiple tables" ;; ) ;; (assert_invalid ;; (module (table 10 funcref) (table 10 funcref)) ;; "multiple tables" ;; ) (module (import "test" "table-10-inf" (table 10 funcref))) (module (import "test" "table-10-inf" (table 5 funcref))) (module (import "test" "table-10-inf" (table 0 funcref))) (module (import "spectest" "table" (table 10 funcref))) (module (import "spectest" "table" (table 5 funcref))) (module (import "spectest" "table" (table 0 funcref))) (module (import "spectest" "table" (table 10 20 funcref))) (module (import "spectest" "table" (table 5 20 funcref))) (module (import "spectest" "table" (table 0 20 funcref))) (module (import "spectest" "table" (table 10 25 funcref))) (module (import "spectest" "table" (table 5 25 funcref))) (assert_unlinkable (module (import "test" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 10 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 10 15 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (table 10 funcref))) "incompatible import type" ) ;; Memories (module (import "spectest" "memory" (memory 1 2)) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (memory (import "spectest" "memory") 1 2) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (assert_invalid (module (import "" "" (memory 1)) (import "" "" (memory 1))) "multiple memories" ) (assert_invalid (module (import "" "" (memory 1)) (memory 0)) "multiple memories" ) (assert_invalid (module (memory 0) (memory 0)) "multiple memories" ) (module (import "test" "memory-2-inf" (memory 2))) (module (import "test" "memory-2-inf" (memory 1))) (module (import "test" "memory-2-inf" (memory 0))) (module (import "spectest" "memory" (memory 1))) (module (import "spectest" "memory" (memory 0))) (module (import "spectest" "memory" (memory 1 2))) (module (import "spectest" "memory" (memory 0 2))) (module (import "spectest" "memory" (memory 1 3))) (module (import "spectest" "memory" (memory 0 3))) (assert_unlinkable (module (import "test" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 3))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 2 3))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (module (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) ;; Shared Memory (module (import "spectest" "shared_memory" (memory 1 2 shared))) (assert_unlinkable (module (import "spectest" "shared_memory" (memory 1 2))) "incompatible import type") (assert_unlinkable (module (import "spectest" "memory" (memory 1 2 shared))) "incompatible import type") ;; Syntax errors (assert_malformed (module quote "(func) (import \"\" \"\" (func))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (global i64))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (table 0 funcref))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (memory 0))") "import after function" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") "import after global" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (func))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (global i32))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))") "import after table" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (func))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (global i32))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") "import after memory" ) ;; This module is required to validate, regardless of whether it can be ;; linked. Overloading is not possible in wasm itself, but it is possible ;; in modules from which wasm can import. (module) (register "not wasm") (assert_unlinkable (module (import "not wasm" "overloaded" (func)) (import "not wasm" "overloaded" (func (param i32))) (import "not wasm" "overloaded" (func (param i32 i32))) (import "not wasm" "overloaded" (func (param i64))) (import "not wasm" "overloaded" (func (param f32))) (import "not wasm" "overloaded" (func (param f64))) (import "not wasm" "overloaded" (func (result i32))) (import "not wasm" "overloaded" (func (result i64))) (import "not wasm" "overloaded" (func (result f32))) (import "not wasm" "overloaded" (func (result f64))) (import "not wasm" "overloaded" (global i32)) (import "not wasm" "overloaded" (global i64)) (import "not wasm" "overloaded" (global f32)) (import "not wasm" "overloaded" (global f64)) (import "not wasm" "overloaded" (table 0 funcref)) (import "not wasm" "overloaded" (memory 0)) ) "unknown import" ) ================================================ FILE: Test/WebAssembly/threads/inline-module.wast ================================================ (func) (memory 0) (func (export "f")) ================================================ FILE: Test/WebAssembly/threads/int_exprs.wast ================================================ ;; Test interesting integer "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x+1>n is not folded to x. (module (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) (i32.shr_s (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) (i32.shr_u (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) (i64.shr_s (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) (i64.shr_u (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) ) (assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) ;; Test that x>>n<?,./ ") (result i32) (i32.const 6)) ;; Test that we can use names that have special meaning in JS. (func (export "NaN") (result i32) (i32.const 7)) (func (export "Infinity") (result i32) (i32.const 8)) (func (export "if") (result i32) (i32.const 9)) ;; Test that we can use common libc names without conflict. (func (export "malloc") (result i32) (i32.const 10)) ;; Test that we can use some libc hidden names without conflict. (func (export "_malloc") (result i32) (i32.const 11)) (func (export "__malloc") (result i32) (i32.const 12)) ;; Test that names are case-sensitive. (func (export "a") (result i32) (i32.const 13)) (func (export "A") (result i32) (i32.const 14)) ;; Test that UTF-8 BOM code points can appear in identifiers. (func (export "") (result i32) (i32.const 15)) ;; Test that Unicode normalization is not applied. These function names ;; contain different codepoints which normalize to the same thing under ;; NFC or NFD. (func (export "Å") (result i32) (i32.const 16)) (func (export "Å") (result i32) (i32.const 17)) (func (export "Å") (result i32) (i32.const 18)) ;; Test that Unicode compatibility normalization is not applied. These ;; function names contain different codepoints which normalize to the ;; same thing under NFKC or NFKD. (func (export "ffi") (result i32) (i32.const 19)) (func (export "ffi") (result i32) (i32.const 20)) (func (export "ffi") (result i32) (i32.const 21)) ;; Test the C0 control codes. (func (export "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (result i32) (i32.const 22)) (func (export "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (result i32) (i32.const 23)) ;; Test miscellaneous control codes. (func (export " \7f") (result i32) (i32.const 24)) ;; Test the C1 control codes. (func (export "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (result i32) (i32.const 25)) (func (export "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (result i32) (i32.const 26)) ;; Test the Unicode Specials. (func (export "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (result i32) (i32.const 27)) (func (export "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (result i32) (i32.const 28)) ;; Test that the control pictures are distinct from the control codes they ;; depict. These correspond to the C0 and miscellaneous control code tests ;; above. (func (export "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (result i32) (i32.const 29)) (func (export "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (result i32) (i32.const 30)) (func (export "␠␡") (result i32) (i32.const 31)) ;; Test the Unicode Specials in non-escaped form (excluding U+FFFE and ;; U+FFFF, so that generic tools don't detect this file as non-UTF-8). (func (export "￰￱￲￳￴￵￶￷￸�") (result i32) (i32.const 32)) ;; Test a bare ZWJ code point. (func (export "‍") (result i32) (i32.const 33)) ;; Test a bare ZWNJ code point. (func (export "‌") (result i32) (i32.const 34)) ;; Test various bare joiner code points. (func (export "͏") (result i32) (i32.const 35)) (func (export "⁠") (result i32) (i32.const 36)) (func (export "⵿") (result i32) (i32.const 37)) (func (export "𑁿") (result i32) (i32.const 38)) (func (export "᠎") (result i32) (i32.const 39)) ;; Test various interesting code points: reverse BOM, zero-width space, ;; no-break space, soft hyphen, word joiner, ogham space mark, ;; right-to-left override, left-to-right override. (func (export "￯​ ­⁠ ‮‭") (result i32) (i32.const 40)) ;; Test more interesting code points: left-to-right mark, right-to-left mark, ;; non-breaking hyphen, line separator, paragraph separator, ;; left-to-right embedding, right-to-left embedding, ;; pop directional formatting, narrow no-break space, left-to-right isolate, ;; right-to-left isolate, first strong isolate, pop directional isolate. (func (export "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (result i32) (i32.const 41)) ;; Test some deprecated code points: inhibit symmetric swapping, ;; activate symmetric swapping, inhibit arabic form shaping, ;; activate arabic form shaping, national digit shapes, nominal digit shapes. (func (export "") (result i32) (i32.const 42)) ;; Test "invisible" operator code points. (func (export "⁡⁢⁣⁤") (result i32) (i32.const 43)) ;; Test that code points outside the BMP are supported. (func (export "𐀀󟿿􏿿") (result i32) (i32.const 44)) ;; Test that WebAssembly implementations cope in the presence of Zalgo. (func (export "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (result i32) (i32.const 45)) ;; Test Hangul filler code points. (func (export "ᅟᅠㅤᅠ") (result i32) (i32.const 46)) ;; Test variation selectors (which are also ID_Continue code points). (func (export "︀") (result i32) (i32.const 47)) (func (export "︄") (result i32) (i32.const 48)) (func (export "󠄀") (result i32) (i32.const 49)) (func (export "󠇯") (result i32) (i32.const 50)) ;; Test an uncombined combining code point. (func (export "̈") (result i32) (i32.const 51)) ;; Test that numerous different present and historical representations of the ;; "newline" concept are distinct. Tests largely inspired by: ;; https://en.wikipedia.org/wiki/Newline#Representations ;; https://en.wikipedia.org/wiki/Newline#Unicode and ;; https://en.wikipedia.org/wiki/Newline#Reverse_and_partial_line_feeds (func (export "\0a") (result i32) (i32.const 52)) (func (export "␤") (result i32) (i32.const 53)) (func (export "
") (result i32) (i32.const 54)) (func (export "\0d") (result i32) (i32.const 55)) (func (export "\0d\0a") (result i32) (i32.const 56)) (func (export "\0a\0d") (result i32) (i32.const 57)) (func (export "\1e") (result i32) (i32.const 58)) (func (export "\0b") (result i32) (i32.const 59)) (func (export "\0c") (result i32) (i32.const 60)) (func (export "\c2\85") (result i32) (i32.const 61)) (func (export "
") (result i32) (i32.const 62)) (func (export "…") (result i32) (i32.const 63)) (func (export "⏎") (result i32) (i32.const 64)) (func (export "\c2\8b") (result i32) (i32.const 65)) (func (export "\c2\8c") (result i32) (i32.const 66)) (func (export "\c2\8d") (result i32) (i32.const 67)) (func (export "↵") (result i32) (i32.const 68)) (func (export "↩") (result i32) (i32.const 69)) (func (export "⌤") (result i32) (i32.const 70)) (func (export "⤶") (result i32) (i32.const 71)) (func (export "↲") (result i32) (i32.const 72)) (func (export "⮨") (result i32) (i32.const 73)) (func (export "⮰") (result i32) (i32.const 74)) ;; Test that non-characters are not replaced by the replacement character. (func (export "�") (result i32) (i32.const 75)) (func (export "\ef\b7\90") (result i32) (i32.const 76)) (func (export "\ef\b7\91") (result i32) (i32.const 77)) (func (export "\ef\b7\92") (result i32) (i32.const 78)) (func (export "\ef\b7\93") (result i32) (i32.const 79)) (func (export "\ef\b7\94") (result i32) (i32.const 80)) (func (export "\ef\b7\95") (result i32) (i32.const 81)) (func (export "\ef\b7\96") (result i32) (i32.const 82)) (func (export "\ef\b7\97") (result i32) (i32.const 83)) (func (export "\ef\b7\98") (result i32) (i32.const 84)) (func (export "\ef\b7\99") (result i32) (i32.const 85)) (func (export "\ef\b7\9a") (result i32) (i32.const 86)) (func (export "\ef\b7\9b") (result i32) (i32.const 87)) (func (export "\ef\b7\9c") (result i32) (i32.const 88)) (func (export "\ef\b7\9d") (result i32) (i32.const 89)) (func (export "\ef\b7\9e") (result i32) (i32.const 90)) (func (export "\ef\b7\9f") (result i32) (i32.const 91)) (func (export "\ef\b7\a0") (result i32) (i32.const 92)) (func (export "\ef\b7\a1") (result i32) (i32.const 93)) (func (export "\ef\b7\a2") (result i32) (i32.const 94)) (func (export "\ef\b7\a3") (result i32) (i32.const 95)) (func (export "\ef\b7\a4") (result i32) (i32.const 96)) (func (export "\ef\b7\a5") (result i32) (i32.const 97)) (func (export "\ef\b7\a6") (result i32) (i32.const 98)) (func (export "\ef\b7\a7") (result i32) (i32.const 99)) (func (export "\ef\b7\a8") (result i32) (i32.const 100)) (func (export "\ef\b7\a9") (result i32) (i32.const 101)) (func (export "\ef\b7\aa") (result i32) (i32.const 102)) (func (export "\ef\b7\ab") (result i32) (i32.const 103)) (func (export "\ef\b7\ac") (result i32) (i32.const 104)) (func (export "\ef\b7\ad") (result i32) (i32.const 105)) (func (export "\ef\b7\ae") (result i32) (i32.const 106)) (func (export "\ef\b7\af") (result i32) (i32.const 107)) (func (export "\ef\bf\be") (result i32) (i32.const 108)) (func (export "\ef\bf\bf") (result i32) (i32.const 109)) (func (export "\f0\9f\bf\be") (result i32) (i32.const 110)) (func (export "\f0\9f\bf\bf") (result i32) (i32.const 111)) (func (export "\f0\af\bf\be") (result i32) (i32.const 112)) (func (export "\f0\af\bf\bf") (result i32) (i32.const 113)) (func (export "\f0\bf\bf\be") (result i32) (i32.const 114)) (func (export "\f0\bf\bf\bf") (result i32) (i32.const 115)) (func (export "\f1\8f\bf\be") (result i32) (i32.const 116)) (func (export "\f1\8f\bf\bf") (result i32) (i32.const 117)) (func (export "\f1\9f\bf\be") (result i32) (i32.const 118)) (func (export "\f1\9f\bf\bf") (result i32) (i32.const 119)) (func (export "\f1\af\bf\be") (result i32) (i32.const 120)) (func (export "\f1\af\bf\bf") (result i32) (i32.const 121)) (func (export "\f1\bf\bf\be") (result i32) (i32.const 122)) (func (export "\f1\bf\bf\bf") (result i32) (i32.const 123)) (func (export "\f2\8f\bf\be") (result i32) (i32.const 124)) (func (export "\f2\8f\bf\bf") (result i32) (i32.const 125)) (func (export "\f2\9f\bf\be") (result i32) (i32.const 126)) (func (export "\f2\9f\bf\bf") (result i32) (i32.const 127)) (func (export "\f2\af\bf\be") (result i32) (i32.const 128)) (func (export "\f2\af\bf\bf") (result i32) (i32.const 129)) (func (export "\f2\bf\bf\be") (result i32) (i32.const 130)) (func (export "\f2\bf\bf\bf") (result i32) (i32.const 131)) (func (export "\f3\8f\bf\be") (result i32) (i32.const 132)) (func (export "\f3\8f\bf\bf") (result i32) (i32.const 133)) (func (export "\f3\9f\bf\be") (result i32) (i32.const 134)) (func (export "\f3\9f\bf\bf") (result i32) (i32.const 135)) (func (export "\f3\af\bf\be") (result i32) (i32.const 136)) (func (export "\f3\af\bf\bf") (result i32) (i32.const 137)) (func (export "\f3\bf\bf\be") (result i32) (i32.const 138)) (func (export "\f3\bf\bf\bf") (result i32) (i32.const 139)) (func (export "\f4\8f\bf\be") (result i32) (i32.const 140)) (func (export "\f4\8f\bf\bf") (result i32) (i32.const 141)) ;; Test an interrobang with combining diacritical marks above. ;; https://xkcd.com/1209/ (func (export "̈‽̈̉") (result i32) (i32.const 142)) ;; Test that RLM/LRM don't change the logical byte order. (func (export "abc") (result i32) (i32.const 143)) (func (export "‭abc") (result i32) (i32.const 144)) (func (export "‮cba") (result i32) (i32.const 145)) (func (export "‭abc‮") (result i32) (i32.const 146)) (func (export "‮cba‭") (result i32) (i32.const 147)) ;; Test that Unicode font variations are preserved. (func (export "𝑨") (result i32) (i32.const 148)) (func (export "𝐴") (result i32) (i32.const 149)) (func (export "𝘈") (result i32) (i32.const 150)) (func (export "𝘼") (result i32) (i32.const 151)) (func (export "𝐀") (result i32) (i32.const 152)) (func (export "𝓐") (result i32) (i32.const 153)) (func (export "𝕬") (result i32) (i32.const 154)) (func (export "𝗔") (result i32) (i32.const 155)) (func (export "𝒜") (result i32) (i32.const 156)) (func (export "𝔄") (result i32) (i32.const 157)) (func (export "𝔸") (result i32) (i32.const 158)) (func (export "𝖠") (result i32) (i32.const 159)) (func (export "𝙰") (result i32) (i32.const 160)) (func (export "ᴀ") (result i32) (i32.const 161)) ;; Test that various additional letter variations are preserved. ;; (U+0040, U+0061, U+0041, U+00C5, U+0041 U+030A, U+212B, and the font ;; variations are covered above.) (func (export "ᴬ") (result i32) (i32.const 162)) (func (export "Ⓐ") (result i32) (i32.const 163)) (func (export "A") (result i32) (i32.const 164)) (func (export "🄐") (result i32) (i32.const 165)) (func (export "🄰") (result i32) (i32.const 166)) (func (export "󠁁") (result i32) (i32.const 167)) (func (export "U+0041") (result i32) (i32.const 168)) (func (export "A​") (result i32) (i32.const 169)) (func (export "А") (result i32) (i32.const 170)) (func (export "Ꙗ") (result i32) (i32.const 171)) (func (export "ⷼ") (result i32) (i32.const 172)) (func (export "ⷶ") (result i32) (i32.const 173)) (func (export "Ɐ") (result i32) (i32.const 174)) (func (export "🅐") (result i32) (i32.const 175)) (func (export "🅰") (result i32) (i32.const 176)) (func (export "Ⱝ") (result i32) (i32.const 177)) (func (export "𐐂") (result i32) (i32.const 178)) (func (export "𐐈") (result i32) (i32.const 179)) (func (export "𐒰") (result i32) (i32.const 180)) (func (export "À") (result i32) (i32.const 181)) (func (export "Á") (result i32) (i32.const 182)) (func (export "Â") (result i32) (i32.const 183)) (func (export "Ã") (result i32) (i32.const 184)) (func (export "Ä") (result i32) (i32.const 185)) (func (export "Ā") (result i32) (i32.const 186)) (func (export "Ă") (result i32) (i32.const 187)) (func (export "Ą") (result i32) (i32.const 188)) (func (export "Ǎ") (result i32) (i32.const 189)) (func (export "Ǟ") (result i32) (i32.const 190)) (func (export "Ǡ") (result i32) (i32.const 191)) (func (export "Ǻ") (result i32) (i32.const 192)) (func (export "Ȁ") (result i32) (i32.const 193)) (func (export "Ȃ") (result i32) (i32.const 194)) (func (export "Ȧ") (result i32) (i32.const 195)) (func (export "Ⱥ") (result i32) (i32.const 196)) (func (export "Ӑ") (result i32) (i32.const 197)) (func (export "Ӓ") (result i32) (i32.const 198)) (func (export "ߊ") (result i32) (i32.const 199)) (func (export "ࠡ") (result i32) (i32.const 200)) (func (export "ࠢ") (result i32) (i32.const 201)) (func (export "ࠣ") (result i32) (i32.const 202)) (func (export "ࠤ") (result i32) (i32.const 203)) (func (export "ࠥ") (result i32) (i32.const 204)) (func (export "ऄ") (result i32) (i32.const 205)) (func (export "अ") (result i32) (i32.const 206)) (func (export "ॲ") (result i32) (i32.const 207)) (func (export "অ") (result i32) (i32.const 208)) (func (export "ਅ") (result i32) (i32.const 209)) (func (export "અ") (result i32) (i32.const 210)) (func (export "ଅ") (result i32) (i32.const 211)) (func (export "அ") (result i32) (i32.const 212)) (func (export "అ") (result i32) (i32.const 213)) (func (export "ಅ") (result i32) (i32.const 214)) (func (export "അ") (result i32) (i32.const 215)) (func (export "ะ") (result i32) (i32.const 216)) (func (export "ະ") (result i32) (i32.const 217)) (func (export "༁") (result i32) (i32.const 218)) (func (export "ཨ") (result i32) (i32.const 219)) (func (export "ྸ") (result i32) (i32.const 220)) (func (export "အ") (result i32) (i32.const 221)) (func (export "ဢ") (result i32) (i32.const 222)) (func (export "ႜ") (result i32) (i32.const 223)) (func (export "ᅡ") (result i32) (i32.const 224)) (func (export "አ") (result i32) (i32.const 225)) (func (export "ዐ") (result i32) (i32.const 226)) (func (export "Ꭰ") (result i32) (i32.const 227)) (func (export "ᐊ") (result i32) (i32.const 228)) (func (export "ᖳ") (result i32) (i32.const 229)) (func (export "ᚨ") (result i32) (i32.const 230)) (func (export "ᚪ") (result i32) (i32.const 231)) (func (export "ᛆ") (result i32) (i32.const 232)) (func (export "ᜀ") (result i32) (i32.const 233)) (func (export "ᜠ") (result i32) (i32.const 234)) (func (export "ᝀ") (result i32) (i32.const 235)) (func (export "ᝠ") (result i32) (i32.const 236)) (func (export "ᠠ") (result i32) (i32.const 237)) (func (export "ᢇ") (result i32) (i32.const 238)) (func (export "ᤠ") (result i32) (i32.const 239)) (func (export "ᥣ") (result i32) (i32.const 240)) (func (export "ᨕ") (result i32) (i32.const 241)) (func (export "ᩋ") (result i32) (i32.const 242)) (func (export "ᩡ") (result i32) (i32.const 243)) (func (export "ᮃ") (result i32) (i32.const 244)) (func (export "ᯀ") (result i32) (i32.const 245)) (func (export "ᯁ") (result i32) (i32.const 246)) (func (export "ᰣ") (result i32) (i32.const 247)) (func (export "Ḁ") (result i32) (i32.const 248)) (func (export "Ạ") (result i32) (i32.const 249)) (func (export "Ả") (result i32) (i32.const 250)) (func (export "Ấ") (result i32) (i32.const 251)) (func (export "Ầ") (result i32) (i32.const 252)) (func (export "Ẩ") (result i32) (i32.const 253)) (func (export "Ẫ") (result i32) (i32.const 254)) (func (export "Ậ") (result i32) (i32.const 255)) (func (export "Ắ") (result i32) (i32.const 256)) (func (export "Ằ") (result i32) (i32.const 257)) (func (export "Ẳ") (result i32) (i32.const 258)) (func (export "Ẵ") (result i32) (i32.const 259)) (func (export "Ặ") (result i32) (i32.const 260)) (func (export "あ") (result i32) (i32.const 261)) (func (export "ア") (result i32) (i32.const 262)) (func (export "ㄚ") (result i32) (i32.const 263)) (func (export "ㅏ") (result i32) (i32.const 264)) (func (export "㈎") (result i32) (i32.const 265)) (func (export "㈏") (result i32) (i32.const 266)) (func (export "㈐") (result i32) (i32.const 267)) (func (export "㈑") (result i32) (i32.const 268)) (func (export "㈒") (result i32) (i32.const 269)) (func (export "㈓") (result i32) (i32.const 270)) (func (export "㈔") (result i32) (i32.const 271)) (func (export "㈕") (result i32) (i32.const 272)) (func (export "㈖") (result i32) (i32.const 273)) (func (export "㈗") (result i32) (i32.const 274)) (func (export "㈘") (result i32) (i32.const 275)) (func (export "㈙") (result i32) (i32.const 276)) (func (export "㈚") (result i32) (i32.const 277)) (func (export "㈛") (result i32) (i32.const 278)) (func (export "㉮") (result i32) (i32.const 279)) (func (export "㉯") (result i32) (i32.const 280)) (func (export "㉰") (result i32) (i32.const 281)) (func (export "㉱") (result i32) (i32.const 282)) (func (export "㉲") (result i32) (i32.const 283)) (func (export "㉳") (result i32) (i32.const 284)) (func (export "㉴") (result i32) (i32.const 285)) (func (export "㉵") (result i32) (i32.const 286)) (func (export "㉶") (result i32) (i32.const 287)) (func (export "㉷") (result i32) (i32.const 288)) (func (export "㉸") (result i32) (i32.const 289)) (func (export "㉹") (result i32) (i32.const 290)) (func (export "㉺") (result i32) (i32.const 291)) (func (export "㉻") (result i32) (i32.const 292)) (func (export "㋐") (result i32) (i32.const 293)) (func (export "ꀊ") (result i32) (i32.const 294)) (func (export "ꓮ") (result i32) (i32.const 295)) (func (export "ꕉ") (result i32) (i32.const 296)) (func (export "ꚠ") (result i32) (i32.const 297)) (func (export "ꠀ") (result i32) (i32.const 298)) (func (export "ꠣ") (result i32) (i32.const 299)) (func (export "ꡝ") (result i32) (i32.const 300)) (func (export "ꢂ") (result i32) (i32.const 301)) (func (export "꣪") (result i32) (i32.const 302)) (func (export "ꤢ") (result i32) (i32.const 303)) (func (export "ꥆ") (result i32) (i32.const 304)) (func (export "ꦄ") (result i32) (i32.const 305)) (func (export "ꨀ") (result i32) (i32.const 306)) (func (export "ア") (result i32) (i32.const 307)) (func (export "ᅡ") (result i32) (i32.const 308)) (func (export "𐀀") (result i32) (i32.const 309)) (func (export "𐊀") (result i32) (i32.const 310)) (func (export "𐊠") (result i32) (i32.const 311)) (func (export "𐌀") (result i32) (i32.const 312)) (func (export "𐎠") (result i32) (i32.const 313)) (func (export "𐒖") (result i32) (i32.const 314)) (func (export "𐔀") (result i32) (i32.const 315)) (func (export "𐝀") (result i32) (i32.const 316)) (func (export "𐠀") (result i32) (i32.const 317)) (func (export "𐤠") (result i32) (i32.const 318)) (func (export "𐦀") (result i32) (i32.const 319)) (func (export "𐦠") (result i32) (i32.const 320)) (func (export "𐨀") (result i32) (i32.const 321)) (func (export "𐬀") (result i32) (i32.const 322)) (func (export "𐰀") (result i32) (i32.const 323)) (func (export "𐰁") (result i32) (i32.const 324)) (func (export "𐲀") (result i32) (i32.const 325)) (func (export "𑀅") (result i32) (i32.const 326)) (func (export "𑂃") (result i32) (i32.const 327)) (func (export "𑄧") (result i32) (i32.const 328)) (func (export "𑅐") (result i32) (i32.const 329)) (func (export "𑆃") (result i32) (i32.const 330)) (func (export "𑈀") (result i32) (i32.const 331)) (func (export "𑊀") (result i32) (i32.const 332)) (func (export "𑊰") (result i32) (i32.const 333)) (func (export "𑌅") (result i32) (i32.const 334)) (func (export "𑍰") (result i32) (i32.const 335)) (func (export "𑐀") (result i32) (i32.const 336)) (func (export "𑒁") (result i32) (i32.const 337)) (func (export "𑖀") (result i32) (i32.const 338)) (func (export "𑘀") (result i32) (i32.const 339)) (func (export "𑚀") (result i32) (i32.const 340)) (func (export "𑜒") (result i32) (i32.const 341)) (func (export "𑜠") (result i32) (i32.const 342)) (func (export "𑢡") (result i32) (i32.const 343)) (func (export "𑫕") (result i32) (i32.const 344)) (func (export "𑰀") (result i32) (i32.const 345)) (func (export "𑲏") (result i32) (i32.const 346)) (func (export "𑲯") (result i32) (i32.const 347)) (func (export "𒀀") (result i32) (i32.const 348)) (func (export "𖧕") (result i32) (i32.const 349)) (func (export "𖩆") (result i32) (i32.const 350)) (func (export "𖫧") (result i32) (i32.const 351)) (func (export "𖽔") (result i32) (i32.const 352)) (func (export "𛱁") (result i32) (i32.const 353)) (func (export "𛱤") (result i32) (i32.const 354)) (func (export "𞠣") (result i32) (i32.const 355)) (func (export "🇦") (result i32) (i32.const 356)) (func (export "Ɑ") (result i32) (i32.const 357)) (func (export "Λ") (result i32) (i32.const 358)) (func (export "Ɒ") (result i32) (i32.const 359)) (func (export "ª") (result i32) (i32.const 360)) (func (export "∀") (result i32) (i32.const 361)) (func (export "₳") (result i32) (i32.const 362)) (func (export "𐤀") (result i32) (i32.const 363)) (func (export "Ⲁ") (result i32) (i32.const 364)) (func (export "𐌰") (result i32) (i32.const 365)) (func (export "Ά") (result i32) (i32.const 366)) (func (export "Α") (result i32) (i32.const 367)) (func (export "Ἀ") (result i32) (i32.const 368)) (func (export "Ἁ") (result i32) (i32.const 369)) (func (export "Ἂ") (result i32) (i32.const 370)) (func (export "Ἃ") (result i32) (i32.const 371)) (func (export "Ἄ") (result i32) (i32.const 372)) (func (export "Ἅ") (result i32) (i32.const 373)) (func (export "Ἆ") (result i32) (i32.const 374)) (func (export "Ἇ") (result i32) (i32.const 375)) (func (export "ᾈ") (result i32) (i32.const 376)) (func (export "ᾉ") (result i32) (i32.const 377)) (func (export "ᾊ") (result i32) (i32.const 378)) (func (export "ᾋ") (result i32) (i32.const 379)) (func (export "ᾌ") (result i32) (i32.const 380)) (func (export "ᾍ") (result i32) (i32.const 381)) (func (export "ᾎ") (result i32) (i32.const 382)) (func (export "ᾏ") (result i32) (i32.const 383)) (func (export "Ᾰ") (result i32) (i32.const 384)) (func (export "Ᾱ") (result i32) (i32.const 385)) (func (export "Ὰ") (result i32) (i32.const 386)) (func (export "Ά") (result i32) (i32.const 387)) (func (export "ᾼ") (result i32) (i32.const 388)) (func (export "𝚨") (result i32) (i32.const 389)) (func (export "𝛢") (result i32) (i32.const 390)) (func (export "𝜜") (result i32) (i32.const 391)) (func (export "𝝖") (result i32) (i32.const 392)) (func (export "𝞐") (result i32) (i32.const 393)) (func (export "⍶") (result i32) (i32.const 394)) (func (export "⍺") (result i32) (i32.const 395)) (func (export "⩜") (result i32) (i32.const 396)) (func (export "ᗅ") (result i32) (i32.const 397)) (func (export "Ꭺ") (result i32) (i32.const 398)) ;; Test unmatched "closing" and "opening" code points. (func (export ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (result i32) (i32.const 399)) (func (export "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (result i32) (i32.const 400)) (func (export "𝪋𝪤") (result i32) (i32.const 401)) (func (export "𝪋") (result i32) (i32.const 402)) ;; Test that Unicode fraction normalization is not applied. (func (export "½") (result i32) (i32.const 403)) (func (export "1⁄2") (result i32) (i32.const 404)) (func (export "1/2") (result i32) (i32.const 405)) (func (export "୳") (result i32) (i32.const 406)) (func (export "൴") (result i32) (i32.const 407)) (func (export "⳽") (result i32) (i32.const 408)) (func (export "꠱") (result i32) (i32.const 409)) (func (export "𐅁") (result i32) (i32.const 410)) (func (export "𐅵") (result i32) (i32.const 411)) (func (export "𐅶") (result i32) (i32.const 412)) (func (export "𐦽") (result i32) (i32.const 413)) (func (export "𐹻") (result i32) (i32.const 414)) ;; Test a full-width quote. (func (export """) (result i32) (i32.const 415)) ;; Test that different present and historical representations of the "delete" ;; concept are distinct. (func (export "\7f") (result i32) (i32.const 416)) (func (export "\08") (result i32) (i32.const 417)) (func (export "⌫") (result i32) (i32.const 418)) (func (export "⌦") (result i32) (i32.const 419)) (func (export "␈") (result i32) (i32.const 420)) (func (export "␡") (result i32) (i32.const 421)) (func (export "᷻") (result i32) (i32.const 422)) (func (export "\0f") (result i32) (i32.const 423)) (func (export "←") (result i32) (i32.const 424)) (func (export "⌧") (result i32) (i32.const 425)) (func (export "⍒") (result i32) (i32.const 426)) (func (export "⍔") (result i32) (i32.const 427)) (func (export "⍢") (result i32) (i32.const 428)) (func (export "⍫") (result i32) (i32.const 429)) ;; Test that different representations of the "substitute" concept are ;; distinct. (U+FFFD is covered above.) (func (export "\1a") (result i32) (i32.const 430)) (func (export "␦") (result i32) (i32.const 431)) (func (export "␚") (result i32) (i32.const 432)) (func (export "") (result i32) (i32.const 433)) (func (export "?") (result i32) (i32.const 434)) (func (export "¿") (result i32) (i32.const 435)) (func (export "᥅") (result i32) (i32.const 436)) (func (export ";") (result i32) (i32.const 437)) (func (export "՞") (result i32) (i32.const 438)) (func (export "؟") (result i32) (i32.const 439)) (func (export "፧") (result i32) (i32.const 440)) (func (export "⁇") (result i32) (i32.const 441)) (func (export "⍰") (result i32) (i32.const 442)) (func (export "❓") (result i32) (i32.const 443)) (func (export "❔") (result i32) (i32.const 444)) (func (export "⳺") (result i32) (i32.const 445)) (func (export "⳻") (result i32) (i32.const 446)) (func (export "⸮") (result i32) (i32.const 447)) (func (export "㉄") (result i32) (i32.const 448)) (func (export "꘏") (result i32) (i32.const 449)) (func (export "꛷") (result i32) (i32.const 450)) (func (export "︖") (result i32) (i32.const 451)) (func (export "﹖") (result i32) (i32.const 452)) (func (export "?") (result i32) (i32.const 453)) (func (export "𑅃") (result i32) (i32.const 454)) (func (export "𞥟") (result i32) (i32.const 455)) (func (export "󠀿") (result i32) (i32.const 456)) (func (export "𖡄") (result i32) (i32.const 457)) (func (export "⯑") (result i32) (i32.const 458)) ;; Test that different present and historical representations of the ;; "paragraph" concept are distinct. (U+2029 is covered above). (func (export "¶") (result i32) (i32.const 459)) (func (export "⁋") (result i32) (i32.const 460)) (func (export "܀") (result i32) (i32.const 461)) (func (export "჻") (result i32) (i32.const 462)) (func (export "፨") (result i32) (i32.const 463)) (func (export "〷") (result i32) (i32.const 464)) (func (export "❡") (result i32) (i32.const 465)) (func (export "⸏") (result i32) (i32.const 466)) (func (export "⸐") (result i32) (i32.const 467)) (func (export "⸑") (result i32) (i32.const 468)) (func (export "⸎") (result i32) (i32.const 469)) (func (export "\14") (result i32) (i32.const 470)) ;; ¶ in CP437 (func (export "☙") (result i32) (i32.const 471)) (func (export "⸿") (result i32) (i32.const 472)) (func (export "〇") (result i32) (i32.const 473)) (func (export "๛") (result i32) (i32.const 474)) ;; Test an unusual character. (func (export "ꙮ") (result i32) (i32.const 475)) ;; Test the three characters whose normalization forms under NFC, NFD, NFKC, ;; and NFKD are all different. ;; http://unicode.org/faq/normalization.html#6 (func (export "ϓ") (result i32) (i32.const 476)) (func (export "ϔ") (result i32) (i32.const 477)) (func (export "ẛ") (result i32) (i32.const 478)) ) (assert_return (invoke "") (i32.const 0)) (assert_return (invoke "0") (i32.const 1)) (assert_return (invoke "-0") (i32.const 2)) (assert_return (invoke "_") (i32.const 3)) (assert_return (invoke "$") (i32.const 4)) (assert_return (invoke "@") (i32.const 5)) (assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (i32.const 6)) (assert_return (invoke "NaN") (i32.const 7)) (assert_return (invoke "Infinity") (i32.const 8)) (assert_return (invoke "if") (i32.const 9)) (assert_return (invoke "malloc") (i32.const 10)) (assert_return (invoke "_malloc") (i32.const 11)) (assert_return (invoke "__malloc") (i32.const 12)) (assert_return (invoke "a") (i32.const 13)) (assert_return (invoke "A") (i32.const 14)) (assert_return (invoke "") (i32.const 15)) (assert_return (invoke "Å") (i32.const 16)) (assert_return (invoke "Å") (i32.const 17)) (assert_return (invoke "Å") (i32.const 18)) (assert_return (invoke "ffi") (i32.const 19)) (assert_return (invoke "ffi") (i32.const 20)) (assert_return (invoke "ffi") (i32.const 21)) (assert_return (invoke "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (i32.const 22)) (assert_return (invoke "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (i32.const 23)) (assert_return (invoke " \7f") (i32.const 24)) (assert_return (invoke "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (i32.const 25)) (assert_return (invoke "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (i32.const 26)) (assert_return (invoke "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (i32.const 27)) (assert_return (invoke "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (i32.const 28)) (assert_return (invoke "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (i32.const 29)) (assert_return (invoke "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (i32.const 30)) (assert_return (invoke "␠␡") (i32.const 31)) (assert_return (invoke "￰￱￲￳￴￵￶￷￸�") (i32.const 32)) (assert_return (invoke "‍") (i32.const 33)) (assert_return (invoke "‌") (i32.const 34)) (assert_return (invoke "͏") (i32.const 35)) (assert_return (invoke "⁠") (i32.const 36)) (assert_return (invoke "⵿") (i32.const 37)) (assert_return (invoke "𑁿") (i32.const 38)) (assert_return (invoke "᠎") (i32.const 39)) (assert_return (invoke "￯​ ­⁠ ‮‭") (i32.const 40)) (assert_return (invoke "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (i32.const 41)) (assert_return (invoke "") (i32.const 42)) (assert_return (invoke "⁡⁢⁣⁤") (i32.const 43)) (assert_return (invoke "𐀀󟿿􏿿") (i32.const 44)) (assert_return (invoke "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (i32.const 45)) (assert_return (invoke "ᅟᅠㅤᅠ") (i32.const 46)) (assert_return (invoke "︀") (i32.const 47)) (assert_return (invoke "︄") (i32.const 48)) (assert_return (invoke "󠄀") (i32.const 49)) (assert_return (invoke "󠇯") (i32.const 50)) (assert_return (invoke "̈") (i32.const 51)) (assert_return (invoke "\0a") (i32.const 52)) (assert_return (invoke "␤") (i32.const 53)) (assert_return (invoke "
") (i32.const 54)) (assert_return (invoke "\0d") (i32.const 55)) (assert_return (invoke "\0d\0a") (i32.const 56)) (assert_return (invoke "\0a\0d") (i32.const 57)) (assert_return (invoke "\1e") (i32.const 58)) (assert_return (invoke "\0b") (i32.const 59)) (assert_return (invoke "\0c") (i32.const 60)) (assert_return (invoke "\c2\85") (i32.const 61)) (assert_return (invoke "
") (i32.const 62)) (assert_return (invoke "…") (i32.const 63)) (assert_return (invoke "⏎") (i32.const 64)) (assert_return (invoke "\c2\8b") (i32.const 65)) (assert_return (invoke "\c2\8c") (i32.const 66)) (assert_return (invoke "\c2\8d") (i32.const 67)) (assert_return (invoke "↵") (i32.const 68)) (assert_return (invoke "↩") (i32.const 69)) (assert_return (invoke "⌤") (i32.const 70)) (assert_return (invoke "⤶") (i32.const 71)) (assert_return (invoke "↲") (i32.const 72)) (assert_return (invoke "⮨") (i32.const 73)) (assert_return (invoke "⮰") (i32.const 74)) (assert_return (invoke "�") (i32.const 75)) (assert_return (invoke "\ef\b7\90") (i32.const 76)) (assert_return (invoke "\ef\b7\91") (i32.const 77)) (assert_return (invoke "\ef\b7\92") (i32.const 78)) (assert_return (invoke "\ef\b7\93") (i32.const 79)) (assert_return (invoke "\ef\b7\94") (i32.const 80)) (assert_return (invoke "\ef\b7\95") (i32.const 81)) (assert_return (invoke "\ef\b7\96") (i32.const 82)) (assert_return (invoke "\ef\b7\97") (i32.const 83)) (assert_return (invoke "\ef\b7\98") (i32.const 84)) (assert_return (invoke "\ef\b7\99") (i32.const 85)) (assert_return (invoke "\ef\b7\9a") (i32.const 86)) (assert_return (invoke "\ef\b7\9b") (i32.const 87)) (assert_return (invoke "\ef\b7\9c") (i32.const 88)) (assert_return (invoke "\ef\b7\9d") (i32.const 89)) (assert_return (invoke "\ef\b7\9e") (i32.const 90)) (assert_return (invoke "\ef\b7\9f") (i32.const 91)) (assert_return (invoke "\ef\b7\a0") (i32.const 92)) (assert_return (invoke "\ef\b7\a1") (i32.const 93)) (assert_return (invoke "\ef\b7\a2") (i32.const 94)) (assert_return (invoke "\ef\b7\a3") (i32.const 95)) (assert_return (invoke "\ef\b7\a4") (i32.const 96)) (assert_return (invoke "\ef\b7\a5") (i32.const 97)) (assert_return (invoke "\ef\b7\a6") (i32.const 98)) (assert_return (invoke "\ef\b7\a7") (i32.const 99)) (assert_return (invoke "\ef\b7\a8") (i32.const 100)) (assert_return (invoke "\ef\b7\a9") (i32.const 101)) (assert_return (invoke "\ef\b7\aa") (i32.const 102)) (assert_return (invoke "\ef\b7\ab") (i32.const 103)) (assert_return (invoke "\ef\b7\ac") (i32.const 104)) (assert_return (invoke "\ef\b7\ad") (i32.const 105)) (assert_return (invoke "\ef\b7\ae") (i32.const 106)) (assert_return (invoke "\ef\b7\af") (i32.const 107)) (assert_return (invoke "\ef\bf\be") (i32.const 108)) (assert_return (invoke "\ef\bf\bf") (i32.const 109)) (assert_return (invoke "\f0\9f\bf\be") (i32.const 110)) (assert_return (invoke "\f0\9f\bf\bf") (i32.const 111)) (assert_return (invoke "\f0\af\bf\be") (i32.const 112)) (assert_return (invoke "\f0\af\bf\bf") (i32.const 113)) (assert_return (invoke "\f0\bf\bf\be") (i32.const 114)) (assert_return (invoke "\f0\bf\bf\bf") (i32.const 115)) (assert_return (invoke "\f1\8f\bf\be") (i32.const 116)) (assert_return (invoke "\f1\8f\bf\bf") (i32.const 117)) (assert_return (invoke "\f1\9f\bf\be") (i32.const 118)) (assert_return (invoke "\f1\9f\bf\bf") (i32.const 119)) (assert_return (invoke "\f1\af\bf\be") (i32.const 120)) (assert_return (invoke "\f1\af\bf\bf") (i32.const 121)) (assert_return (invoke "\f1\bf\bf\be") (i32.const 122)) (assert_return (invoke "\f1\bf\bf\bf") (i32.const 123)) (assert_return (invoke "\f2\8f\bf\be") (i32.const 124)) (assert_return (invoke "\f2\8f\bf\bf") (i32.const 125)) (assert_return (invoke "\f2\9f\bf\be") (i32.const 126)) (assert_return (invoke "\f2\9f\bf\bf") (i32.const 127)) (assert_return (invoke "\f2\af\bf\be") (i32.const 128)) (assert_return (invoke "\f2\af\bf\bf") (i32.const 129)) (assert_return (invoke "\f2\bf\bf\be") (i32.const 130)) (assert_return (invoke "\f2\bf\bf\bf") (i32.const 131)) (assert_return (invoke "\f3\8f\bf\be") (i32.const 132)) (assert_return (invoke "\f3\8f\bf\bf") (i32.const 133)) (assert_return (invoke "\f3\9f\bf\be") (i32.const 134)) (assert_return (invoke "\f3\9f\bf\bf") (i32.const 135)) (assert_return (invoke "\f3\af\bf\be") (i32.const 136)) (assert_return (invoke "\f3\af\bf\bf") (i32.const 137)) (assert_return (invoke "\f3\bf\bf\be") (i32.const 138)) (assert_return (invoke "\f3\bf\bf\bf") (i32.const 139)) (assert_return (invoke "\f4\8f\bf\be") (i32.const 140)) (assert_return (invoke "\f4\8f\bf\bf") (i32.const 141)) (assert_return (invoke "̈‽̈̉") (i32.const 142)) (assert_return (invoke "abc") (i32.const 143)) (assert_return (invoke "‭abc") (i32.const 144)) (assert_return (invoke "‮cba") (i32.const 145)) (assert_return (invoke "‭abc‮") (i32.const 146)) (assert_return (invoke "‮cba‭") (i32.const 147)) (assert_return (invoke "𝑨") (i32.const 148)) (assert_return (invoke "𝐴") (i32.const 149)) (assert_return (invoke "𝘈") (i32.const 150)) (assert_return (invoke "𝘼") (i32.const 151)) (assert_return (invoke "𝐀") (i32.const 152)) (assert_return (invoke "𝓐") (i32.const 153)) (assert_return (invoke "𝕬") (i32.const 154)) (assert_return (invoke "𝗔") (i32.const 155)) (assert_return (invoke "𝒜") (i32.const 156)) (assert_return (invoke "𝔄") (i32.const 157)) (assert_return (invoke "𝔸") (i32.const 158)) (assert_return (invoke "𝖠") (i32.const 159)) (assert_return (invoke "𝙰") (i32.const 160)) (assert_return (invoke "ᴀ") (i32.const 161)) (assert_return (invoke "ᴬ") (i32.const 162)) (assert_return (invoke "Ⓐ") (i32.const 163)) (assert_return (invoke "A") (i32.const 164)) (assert_return (invoke "🄐") (i32.const 165)) (assert_return (invoke "🄰") (i32.const 166)) (assert_return (invoke "󠁁") (i32.const 167)) (assert_return (invoke "U+0041") (i32.const 168)) (assert_return (invoke "A​") (i32.const 169)) (assert_return (invoke "А") (i32.const 170)) (assert_return (invoke "Ꙗ") (i32.const 171)) (assert_return (invoke "ⷼ") (i32.const 172)) (assert_return (invoke "ⷶ") (i32.const 173)) (assert_return (invoke "Ɐ") (i32.const 174)) (assert_return (invoke "🅐") (i32.const 175)) (assert_return (invoke "🅰") (i32.const 176)) (assert_return (invoke "Ⱝ") (i32.const 177)) (assert_return (invoke "𐐂") (i32.const 178)) (assert_return (invoke "𐐈") (i32.const 179)) (assert_return (invoke "𐒰") (i32.const 180)) (assert_return (invoke "À") (i32.const 181)) (assert_return (invoke "Á") (i32.const 182)) (assert_return (invoke "Â") (i32.const 183)) (assert_return (invoke "Ã") (i32.const 184)) (assert_return (invoke "Ä") (i32.const 185)) (assert_return (invoke "Ā") (i32.const 186)) (assert_return (invoke "Ă") (i32.const 187)) (assert_return (invoke "Ą") (i32.const 188)) (assert_return (invoke "Ǎ") (i32.const 189)) (assert_return (invoke "Ǟ") (i32.const 190)) (assert_return (invoke "Ǡ") (i32.const 191)) (assert_return (invoke "Ǻ") (i32.const 192)) (assert_return (invoke "Ȁ") (i32.const 193)) (assert_return (invoke "Ȃ") (i32.const 194)) (assert_return (invoke "Ȧ") (i32.const 195)) (assert_return (invoke "Ⱥ") (i32.const 196)) (assert_return (invoke "Ӑ") (i32.const 197)) (assert_return (invoke "Ӓ") (i32.const 198)) (assert_return (invoke "ߊ") (i32.const 199)) (assert_return (invoke "ࠡ") (i32.const 200)) (assert_return (invoke "ࠢ") (i32.const 201)) (assert_return (invoke "ࠣ") (i32.const 202)) (assert_return (invoke "ࠤ") (i32.const 203)) (assert_return (invoke "ࠥ") (i32.const 204)) (assert_return (invoke "ऄ") (i32.const 205)) (assert_return (invoke "अ") (i32.const 206)) (assert_return (invoke "ॲ") (i32.const 207)) (assert_return (invoke "অ") (i32.const 208)) (assert_return (invoke "ਅ") (i32.const 209)) (assert_return (invoke "અ") (i32.const 210)) (assert_return (invoke "ଅ") (i32.const 211)) (assert_return (invoke "அ") (i32.const 212)) (assert_return (invoke "అ") (i32.const 213)) (assert_return (invoke "ಅ") (i32.const 214)) (assert_return (invoke "അ") (i32.const 215)) (assert_return (invoke "ะ") (i32.const 216)) (assert_return (invoke "ະ") (i32.const 217)) (assert_return (invoke "༁") (i32.const 218)) (assert_return (invoke "ཨ") (i32.const 219)) (assert_return (invoke "ྸ") (i32.const 220)) (assert_return (invoke "အ") (i32.const 221)) (assert_return (invoke "ဢ") (i32.const 222)) (assert_return (invoke "ႜ") (i32.const 223)) (assert_return (invoke "ᅡ") (i32.const 224)) (assert_return (invoke "አ") (i32.const 225)) (assert_return (invoke "ዐ") (i32.const 226)) (assert_return (invoke "Ꭰ") (i32.const 227)) (assert_return (invoke "ᐊ") (i32.const 228)) (assert_return (invoke "ᖳ") (i32.const 229)) (assert_return (invoke "ᚨ") (i32.const 230)) (assert_return (invoke "ᚪ") (i32.const 231)) (assert_return (invoke "ᛆ") (i32.const 232)) (assert_return (invoke "ᜀ") (i32.const 233)) (assert_return (invoke "ᜠ") (i32.const 234)) (assert_return (invoke "ᝀ") (i32.const 235)) (assert_return (invoke "ᝠ") (i32.const 236)) (assert_return (invoke "ᠠ") (i32.const 237)) (assert_return (invoke "ᢇ") (i32.const 238)) (assert_return (invoke "ᤠ") (i32.const 239)) (assert_return (invoke "ᥣ") (i32.const 240)) (assert_return (invoke "ᨕ") (i32.const 241)) (assert_return (invoke "ᩋ") (i32.const 242)) (assert_return (invoke "ᩡ") (i32.const 243)) (assert_return (invoke "ᮃ") (i32.const 244)) (assert_return (invoke "ᯀ") (i32.const 245)) (assert_return (invoke "ᯁ") (i32.const 246)) (assert_return (invoke "ᰣ") (i32.const 247)) (assert_return (invoke "Ḁ") (i32.const 248)) (assert_return (invoke "Ạ") (i32.const 249)) (assert_return (invoke "Ả") (i32.const 250)) (assert_return (invoke "Ấ") (i32.const 251)) (assert_return (invoke "Ầ") (i32.const 252)) (assert_return (invoke "Ẩ") (i32.const 253)) (assert_return (invoke "Ẫ") (i32.const 254)) (assert_return (invoke "Ậ") (i32.const 255)) (assert_return (invoke "Ắ") (i32.const 256)) (assert_return (invoke "Ằ") (i32.const 257)) (assert_return (invoke "Ẳ") (i32.const 258)) (assert_return (invoke "Ẵ") (i32.const 259)) (assert_return (invoke "Ặ") (i32.const 260)) (assert_return (invoke "あ") (i32.const 261)) (assert_return (invoke "ア") (i32.const 262)) (assert_return (invoke "ㄚ") (i32.const 263)) (assert_return (invoke "ㅏ") (i32.const 264)) (assert_return (invoke "㈎") (i32.const 265)) (assert_return (invoke "㈏") (i32.const 266)) (assert_return (invoke "㈐") (i32.const 267)) (assert_return (invoke "㈑") (i32.const 268)) (assert_return (invoke "㈒") (i32.const 269)) (assert_return (invoke "㈓") (i32.const 270)) (assert_return (invoke "㈔") (i32.const 271)) (assert_return (invoke "㈕") (i32.const 272)) (assert_return (invoke "㈖") (i32.const 273)) (assert_return (invoke "㈗") (i32.const 274)) (assert_return (invoke "㈘") (i32.const 275)) (assert_return (invoke "㈙") (i32.const 276)) (assert_return (invoke "㈚") (i32.const 277)) (assert_return (invoke "㈛") (i32.const 278)) (assert_return (invoke "㉮") (i32.const 279)) (assert_return (invoke "㉯") (i32.const 280)) (assert_return (invoke "㉰") (i32.const 281)) (assert_return (invoke "㉱") (i32.const 282)) (assert_return (invoke "㉲") (i32.const 283)) (assert_return (invoke "㉳") (i32.const 284)) (assert_return (invoke "㉴") (i32.const 285)) (assert_return (invoke "㉵") (i32.const 286)) (assert_return (invoke "㉶") (i32.const 287)) (assert_return (invoke "㉷") (i32.const 288)) (assert_return (invoke "㉸") (i32.const 289)) (assert_return (invoke "㉹") (i32.const 290)) (assert_return (invoke "㉺") (i32.const 291)) (assert_return (invoke "㉻") (i32.const 292)) (assert_return (invoke "㋐") (i32.const 293)) (assert_return (invoke "ꀊ") (i32.const 294)) (assert_return (invoke "ꓮ") (i32.const 295)) (assert_return (invoke "ꕉ") (i32.const 296)) (assert_return (invoke "ꚠ") (i32.const 297)) (assert_return (invoke "ꠀ") (i32.const 298)) (assert_return (invoke "ꠣ") (i32.const 299)) (assert_return (invoke "ꡝ") (i32.const 300)) (assert_return (invoke "ꢂ") (i32.const 301)) (assert_return (invoke "꣪") (i32.const 302)) (assert_return (invoke "ꤢ") (i32.const 303)) (assert_return (invoke "ꥆ") (i32.const 304)) (assert_return (invoke "ꦄ") (i32.const 305)) (assert_return (invoke "ꨀ") (i32.const 306)) (assert_return (invoke "ア") (i32.const 307)) (assert_return (invoke "ᅡ") (i32.const 308)) (assert_return (invoke "𐀀") (i32.const 309)) (assert_return (invoke "𐊀") (i32.const 310)) (assert_return (invoke "𐊠") (i32.const 311)) (assert_return (invoke "𐌀") (i32.const 312)) (assert_return (invoke "𐎠") (i32.const 313)) (assert_return (invoke "𐒖") (i32.const 314)) (assert_return (invoke "𐔀") (i32.const 315)) (assert_return (invoke "𐝀") (i32.const 316)) (assert_return (invoke "𐠀") (i32.const 317)) (assert_return (invoke "𐤠") (i32.const 318)) (assert_return (invoke "𐦀") (i32.const 319)) (assert_return (invoke "𐦠") (i32.const 320)) (assert_return (invoke "𐨀") (i32.const 321)) (assert_return (invoke "𐬀") (i32.const 322)) (assert_return (invoke "𐰀") (i32.const 323)) (assert_return (invoke "𐰁") (i32.const 324)) (assert_return (invoke "𐲀") (i32.const 325)) (assert_return (invoke "𑀅") (i32.const 326)) (assert_return (invoke "𑂃") (i32.const 327)) (assert_return (invoke "𑄧") (i32.const 328)) (assert_return (invoke "𑅐") (i32.const 329)) (assert_return (invoke "𑆃") (i32.const 330)) (assert_return (invoke "𑈀") (i32.const 331)) (assert_return (invoke "𑊀") (i32.const 332)) (assert_return (invoke "𑊰") (i32.const 333)) (assert_return (invoke "𑌅") (i32.const 334)) (assert_return (invoke "𑍰") (i32.const 335)) (assert_return (invoke "𑐀") (i32.const 336)) (assert_return (invoke "𑒁") (i32.const 337)) (assert_return (invoke "𑖀") (i32.const 338)) (assert_return (invoke "𑘀") (i32.const 339)) (assert_return (invoke "𑚀") (i32.const 340)) (assert_return (invoke "𑜒") (i32.const 341)) (assert_return (invoke "𑜠") (i32.const 342)) (assert_return (invoke "𑢡") (i32.const 343)) (assert_return (invoke "𑫕") (i32.const 344)) (assert_return (invoke "𑰀") (i32.const 345)) (assert_return (invoke "𑲏") (i32.const 346)) (assert_return (invoke "𑲯") (i32.const 347)) (assert_return (invoke "𒀀") (i32.const 348)) (assert_return (invoke "𖧕") (i32.const 349)) (assert_return (invoke "𖩆") (i32.const 350)) (assert_return (invoke "𖫧") (i32.const 351)) (assert_return (invoke "𖽔") (i32.const 352)) (assert_return (invoke "𛱁") (i32.const 353)) (assert_return (invoke "𛱤") (i32.const 354)) (assert_return (invoke "𞠣") (i32.const 355)) (assert_return (invoke "🇦") (i32.const 356)) (assert_return (invoke "Ɑ") (i32.const 357)) (assert_return (invoke "Λ") (i32.const 358)) (assert_return (invoke "Ɒ") (i32.const 359)) (assert_return (invoke "ª") (i32.const 360)) (assert_return (invoke "∀") (i32.const 361)) (assert_return (invoke "₳") (i32.const 362)) (assert_return (invoke "𐤀") (i32.const 363)) (assert_return (invoke "Ⲁ") (i32.const 364)) (assert_return (invoke "𐌰") (i32.const 365)) (assert_return (invoke "Ά") (i32.const 366)) (assert_return (invoke "Α") (i32.const 367)) (assert_return (invoke "Ἀ") (i32.const 368)) (assert_return (invoke "Ἁ") (i32.const 369)) (assert_return (invoke "Ἂ") (i32.const 370)) (assert_return (invoke "Ἃ") (i32.const 371)) (assert_return (invoke "Ἄ") (i32.const 372)) (assert_return (invoke "Ἅ") (i32.const 373)) (assert_return (invoke "Ἆ") (i32.const 374)) (assert_return (invoke "Ἇ") (i32.const 375)) (assert_return (invoke "ᾈ") (i32.const 376)) (assert_return (invoke "ᾉ") (i32.const 377)) (assert_return (invoke "ᾊ") (i32.const 378)) (assert_return (invoke "ᾋ") (i32.const 379)) (assert_return (invoke "ᾌ") (i32.const 380)) (assert_return (invoke "ᾍ") (i32.const 381)) (assert_return (invoke "ᾎ") (i32.const 382)) (assert_return (invoke "ᾏ") (i32.const 383)) (assert_return (invoke "Ᾰ") (i32.const 384)) (assert_return (invoke "Ᾱ") (i32.const 385)) (assert_return (invoke "Ὰ") (i32.const 386)) (assert_return (invoke "Ά") (i32.const 387)) (assert_return (invoke "ᾼ") (i32.const 388)) (assert_return (invoke "𝚨") (i32.const 389)) (assert_return (invoke "𝛢") (i32.const 390)) (assert_return (invoke "𝜜") (i32.const 391)) (assert_return (invoke "𝝖") (i32.const 392)) (assert_return (invoke "𝞐") (i32.const 393)) (assert_return (invoke "⍶") (i32.const 394)) (assert_return (invoke "⍺") (i32.const 395)) (assert_return (invoke "⩜") (i32.const 396)) (assert_return (invoke "ᗅ") (i32.const 397)) (assert_return (invoke "Ꭺ") (i32.const 398)) (assert_return (invoke ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (i32.const 399)) (assert_return (invoke "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (i32.const 400)) (assert_return (invoke "𝪋𝪤") (i32.const 401)) (assert_return (invoke "𝪋") (i32.const 402)) (assert_return (invoke "½") (i32.const 403)) (assert_return (invoke "1⁄2") (i32.const 404)) (assert_return (invoke "1/2") (i32.const 405)) (assert_return (invoke "୳") (i32.const 406)) (assert_return (invoke "൴") (i32.const 407)) (assert_return (invoke "⳽") (i32.const 408)) (assert_return (invoke "꠱") (i32.const 409)) (assert_return (invoke "𐅁") (i32.const 410)) (assert_return (invoke "𐅵") (i32.const 411)) (assert_return (invoke "𐅶") (i32.const 412)) (assert_return (invoke "𐦽") (i32.const 413)) (assert_return (invoke "𐹻") (i32.const 414)) (assert_return (invoke """) (i32.const 415)) (assert_return (invoke "\7f") (i32.const 416)) (assert_return (invoke "\08") (i32.const 417)) (assert_return (invoke "⌫") (i32.const 418)) (assert_return (invoke "⌦") (i32.const 419)) (assert_return (invoke "␈") (i32.const 420)) (assert_return (invoke "␡") (i32.const 421)) (assert_return (invoke "᷻") (i32.const 422)) (assert_return (invoke "\0f") (i32.const 423)) (assert_return (invoke "←") (i32.const 424)) (assert_return (invoke "⌧") (i32.const 425)) (assert_return (invoke "⍒") (i32.const 426)) (assert_return (invoke "⍔") (i32.const 427)) (assert_return (invoke "⍢") (i32.const 428)) (assert_return (invoke "⍫") (i32.const 429)) (assert_return (invoke "\1a") (i32.const 430)) (assert_return (invoke "␦") (i32.const 431)) (assert_return (invoke "␚") (i32.const 432)) (assert_return (invoke "") (i32.const 433)) (assert_return (invoke "?") (i32.const 434)) (assert_return (invoke "¿") (i32.const 435)) (assert_return (invoke "᥅") (i32.const 436)) (assert_return (invoke ";") (i32.const 437)) (assert_return (invoke "՞") (i32.const 438)) (assert_return (invoke "؟") (i32.const 439)) (assert_return (invoke "፧") (i32.const 440)) (assert_return (invoke "⁇") (i32.const 441)) (assert_return (invoke "⍰") (i32.const 442)) (assert_return (invoke "❓") (i32.const 443)) (assert_return (invoke "❔") (i32.const 444)) (assert_return (invoke "⳺") (i32.const 445)) (assert_return (invoke "⳻") (i32.const 446)) (assert_return (invoke "⸮") (i32.const 447)) (assert_return (invoke "㉄") (i32.const 448)) (assert_return (invoke "꘏") (i32.const 449)) (assert_return (invoke "꛷") (i32.const 450)) (assert_return (invoke "︖") (i32.const 451)) (assert_return (invoke "﹖") (i32.const 452)) (assert_return (invoke "?") (i32.const 453)) (assert_return (invoke "𑅃") (i32.const 454)) (assert_return (invoke "𞥟") (i32.const 455)) (assert_return (invoke "󠀿") (i32.const 456)) (assert_return (invoke "𖡄") (i32.const 457)) (assert_return (invoke "⯑") (i32.const 458)) (assert_return (invoke "¶") (i32.const 459)) (assert_return (invoke "⁋") (i32.const 460)) (assert_return (invoke "܀") (i32.const 461)) (assert_return (invoke "჻") (i32.const 462)) (assert_return (invoke "፨") (i32.const 463)) (assert_return (invoke "〷") (i32.const 464)) (assert_return (invoke "❡") (i32.const 465)) (assert_return (invoke "⸏") (i32.const 466)) (assert_return (invoke "⸐") (i32.const 467)) (assert_return (invoke "⸑") (i32.const 468)) (assert_return (invoke "⸎") (i32.const 469)) (assert_return (invoke "\14") (i32.const 470)) (assert_return (invoke "☙") (i32.const 471)) (assert_return (invoke "⸿") (i32.const 472)) (assert_return (invoke "〇") (i32.const 473)) (assert_return (invoke "๛") (i32.const 474)) (assert_return (invoke "ꙮ") (i32.const 475)) (assert_return (invoke "ϓ") (i32.const 476)) (assert_return (invoke "ϔ") (i32.const 477)) (assert_return (invoke "ẛ") (i32.const 478)) (module ;; Test that we can use indices instead of names to reference imports, ;; exports, functions and parameters. (import "spectest" "print_i32" (func (param i32))) (func (import "spectest" "print_i32") (param i32)) (func (param i32) (param i32) (call 0 (local.get 0)) (call 1 (local.get 1)) ) (export "print32" (func 2)) ) (assert_return (invoke "print32" (i32.const 42) (i32.const 123))) ================================================ FILE: Test/WebAssembly/threads/nop.wast ================================================ ;; Test `nop` operator. (module ;; Auxiliary definitions (func $dummy) (func $3-ary (param i32 i32 i32) (result i32) local.get 0 local.get 1 local.get 2 i32.sub i32.add ) (memory 1) (func (export "as-func-first") (result i32) (nop) (i32.const 1) ) (func (export "as-func-mid") (result i32) (call $dummy) (nop) (i32.const 2) ) (func (export "as-func-last") (result i32) (call $dummy) (i32.const 3) (nop) ) (func (export "as-func-everywhere") (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) (func (export "as-drop-first") (param i32) (nop) (local.get 0) (drop) ) (func (export "as-drop-last") (param i32) (local.get 0) (nop) (drop) ) (func (export "as-drop-everywhere") (param i32) (nop) (nop) (local.get 0) (nop) (nop) (drop) ) (func (export "as-select-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid1") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid2") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (local.get 0) (select) ) (func (export "as-select-last") (param i32) (result i32) (local.get 0) (local.get 0) (local.get 0) (nop) (select) ) (func (export "as-select-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (select) ) (func (export "as-block-first") (result i32) (block (result i32) (nop) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-block-last") (result i32) (block (result i32) (nop) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-block-everywhere") (result i32) (block (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (nop) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-loop-everywhere") (result i32) (loop (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-if-condition") (param i32) (local.get 0) (nop) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (if (local.get 0) (then (nop)) (else (call $dummy))) ) (func (export "as-if-else") (param i32) (if (local.get 0) (then (call $dummy)) (else (nop))) ) (func (export "as-br-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (br 0)) ) (func (export "as-br-last") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (br 0)) ) (func (export "as-br-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (br 0)) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_if 0)) ) (func (export "as-br_if-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_if 0)) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_if 0)) ) (func (export "as-br_if-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_if 0) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_table 0 0)) ) (func (export "as-br_table-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_table 0 0) ) ) (func (export "as-return-first") (param i32) (result i32) (nop) (local.get 0) (return) ) (func (export "as-return-last") (param i32) (result i32) (local.get 0) (nop) (return) ) (func (export "as-return-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (return) ) (func (export "as-call-first") (param i32 i32 i32) (result i32) (nop) (local.get 0) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid1") (param i32 i32 i32) (result i32) (local.get 0) (nop) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid2") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (nop) (local.get 2) (call $3-ary) ) (func (export "as-call-last") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (local.get 2) (nop) (call $3-ary) ) (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (local.get 2) (nop) (nop) (call $3-ary) ) (func (export "as-unary-first") (param i32) (result i32) (nop) (local.get 0) (i32.ctz) ) (func (export "as-unary-last") (param i32) (result i32) (local.get 0) (nop) (i32.ctz) ) (func (export "as-unary-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.ctz) ) (func (export "as-binary-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.add) ) (func (export "as-binary-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.add) ) (func (export "as-binary-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.add) ) (func (export "as-binary-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.add) ) (func (export "as-test-first") (param i32) (result i32) (nop) (local.get 0) (i32.eqz) ) (func (export "as-test-last") (param i32) (result i32) (local.get 0) (nop) (i32.eqz) ) (func (export "as-test-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) i32.eqz ) (func (export "as-compare-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.ne) ) (func (export "as-compare-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.ne) ) (func (export "as-compare-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.lt_u) ) (func (export "as-compare-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.le_s) ) (func (export "as-memory.grow-first") (param i32) (result i32) (nop) (local.get 0) (memory.grow) ) (func (export "as-memory.grow-last") (param i32) (result i32) (local.get 0) (nop) (memory.grow) ) (func (export "as-memory.grow-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (memory.grow) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (nop) (i32.const 1) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid1") (result i32) (block (result i32) (i32.const 1) (nop) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid2") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (nop) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (i32.const 0) (nop) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-everywhere") (result i32) (block (result i32) (nop) (nop) (i32.const 1) (nop) (nop) (i32.const 2) (nop) (nop) (i32.const 0) (nop) (nop) (call_indirect (type $check)) ) ) (func (export "as-local.set-first") (param i32) (result i32) (nop) (i32.const 2) (local.set 0) (local.get 0) ) (func (export "as-local.set-last") (param i32) (result i32) (i32.const 2) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.set-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.tee-first") (param i32) (result i32) (nop) (i32.const 2) (local.tee 0) ) (func (export "as-local.tee-last") (param i32) (result i32) (i32.const 2) (nop) (local.tee 0) ) (func (export "as-local.tee-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.tee 0) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-first") (result i32) (nop) (i32.const 2) (global.set $a) (global.get $a) ) (func (export "as-global.set-last") (result i32) (i32.const 2) (nop) (global.set $a) (global.get $a) ) (func (export "as-global.set-everywhere") (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (global.set 0) (global.get $a) ) (func (export "as-load-first") (param i32) (result i32) (nop) (local.get 0) (i32.load) ) (func (export "as-load-last") (param i32) (result i32) (local.get 0) (nop) (i32.load) ) (func (export "as-load-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.load) ) (func (export "as-store-first") (param i32 i32) (nop) (local.get 0) (local.get 1) (i32.store) ) (func (export "as-store-mid") (param i32 i32) (local.get 0) (nop) (local.get 1) (i32.store) ) (func (export "as-store-last") (param i32 i32) (local.get 0) (local.get 1) (nop) (i32.store) ) (func (export "as-store-everywhere") (param i32 i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (i32.store) ) ) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last") (i32.const 3)) (assert_return (invoke "as-func-everywhere") (i32.const 4)) (assert_return (invoke "as-drop-first" (i32.const 0))) (assert_return (invoke "as-drop-last" (i32.const 0))) (assert_return (invoke "as-drop-everywhere" (i32.const 0))) (assert_return (invoke "as-select-first" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-block-first") (i32.const 2)) (assert_return (invoke "as-block-mid") (i32.const 2)) (assert_return (invoke "as-block-last") (i32.const 3)) (assert_return (invoke "as-block-everywhere") (i32.const 4)) (assert_return (invoke "as-loop-first") (i32.const 2)) (assert_return (invoke "as-loop-mid") (i32.const 2)) (assert_return (invoke "as-loop-last") (i32.const 3)) (assert_return (invoke "as-loop-everywhere") (i32.const 4)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const -1))) (assert_return (invoke "as-if-then" (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4))) (assert_return (invoke "as-if-else" (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3))) (assert_return (invoke "as-br-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_if-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_table-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-return-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-call-first" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) (assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) (assert_return (invoke "as-unary-first" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) (assert_return (invoke "as-binary-first" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-test-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-first" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) (assert_return (invoke "as-memory.grow-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-last" (i32.const 2)) (i32.const 1)) (assert_return (invoke "as-memory.grow-everywhere" (i32.const 12)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid1") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid2") (i32.const 1)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-call_indirect-everywhere") (i32.const 1)) (assert_return (invoke "as-local.set-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-global.set-first") (i32.const 2)) (assert_return (invoke "as-global.set-last") (i32.const 2)) (assert_return (invoke "as-global.set-everywhere") (i32.const 2)) (assert_return (invoke "as-load-first" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-last" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-everywhere" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-store-first" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-store-mid" (i32.const 0) (i32.const 2))) (assert_return (invoke "as-store-last" (i32.const 0) (i32.const 3))) (assert_return (invoke "as-store-everywhere" (i32.const 0) (i32.const 4))) (assert_invalid (module (func $type-i32 (result i32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-i64 (result i64) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f32 (result f32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f64 (result f64) (nop))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/threads/return.wast ================================================ ;; Test `return` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (drop (i32.ctz (return)))) (func (export "type-i64") (drop (i64.ctz (return)))) (func (export "type-f32") (drop (f32.neg (return)))) (func (export "type-f64") (drop (f64.neg (return)))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (return (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (return (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (return (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (return (f64.const 4)))) ) (func (export "nullary") (return)) (func (export "unary") (result f64) (return (f64.const 3))) (func (export "as-func-first") (result i32) (return (i32.const 1)) (i32.const 2) ) (func (export "as-func-mid") (result i32) (call $dummy) (return (i32.const 2)) (i32.const 3) ) (func (export "as-func-last") (nop) (call $dummy) (return) ) (func (export "as-func-value") (result i32) (nop) (call $dummy) (return (i32.const 3)) ) (func (export "as-block-first") (block (return) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (return) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (return)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (return (i32.const 2))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (return (i32.const 3)) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (return (i32.const 4)) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (return (i32.const 5))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (return (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (return))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (return (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (result i64) (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (return (return (i64.const 7))) ) (func (export "as-if-cond") (result i32) (if (result i32) (return (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (return (i32.const 3))) (else (local.get 1)) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (return (i32.const 4))) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (return (i32.const 5)) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (return (i32.const 6)) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (return (i32.const 7))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (result i32) (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) ) (func (export "as-call-last") (result i32) (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (result i32) (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3) ) ) (func (export "as-call_indirect-last") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23)) ) ) (func (export "as-local.set-value") (result i32) (local f32) (local.set 0 (return (i32.const 17))) (i32.const -1) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (return (i32.const 1))) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-value") (result i32) (global.set $a (return (i32.const 1))) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (return (f32.const 1.7))) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (return (i64.const 30))) ) (func (export "as-store-address") (result i32) (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) ) (func (export "as-store-value") (result i32) (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) ) (func (export "as-storeN-address") (result i32) (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) ) (func (export "as-storeN-value") (result i32) (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) ) (func (export "as-unary-operand") (result f32) (f32.neg (return (f32.const 3.4))) ) (func (export "as-binary-left") (result i32) (i32.add (return (i32.const 3)) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (return (i64.const 45))) ) (func (export "as-test-operand") (result i32) (i32.eqz (return (i32.const 44))) ) (func (export "as-compare-left") (result i32) (f64.le (return (i32.const 43)) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (return (i32.const 42))) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (return (i32.const 41))) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (return (i32.const 40))) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "nullary")) (assert_return (invoke "unary") (f64.const 3)) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last")) (assert_return (invoke "as-func-value") (i32.const 3)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index") (i64.const 9)) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_invalid (module (func $type-value-empty-vs-num (result i32) (return))) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-block (result i32) (i32.const 0) (block (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-loop (result i32) (i32.const 0) (loop (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-then (result i32) (i32.const 0) (i32.const 0) (if (then (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-else (result i32) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (return))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br (result i32) (i32.const 0) (block (br 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_if (result i32) (i32.const 0) (block (br_if 0 (return) (i32.const 1))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_table (result i32) (i32.const 0) (block (br_table 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-return (result i32) (return (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-select (result i32) (select (return) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-call (result i32) (call 1 (return)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-vs-num-in-call_indirect (result i32) (block (result i32) (call_indirect (type $sig) (return) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.set (result i32) (local i32) (local.set 0 (return)) (local.get 0) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.tee (result i32) (local i32) (local.tee 0 (return)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-value-empty-vs-num-in-global.set (result i32) (global.set $x (return)) (global.get $x) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-memory.grow (result i32) (memory.grow (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-load (result i32) (i32.load (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-vs-num-in-store (result i32) (i32.store (return) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result f64) (return (nop)))) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) "type mismatch" ) ================================================ FILE: Test/WebAssembly/threads/select.wast ================================================ (module (memory 1) (func $dummy) (func (export "select_i32") (param $lhs i32) (param $rhs i32) (param $cond i32) (result i32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_i64") (param $lhs i64) (param $rhs i64) (param $cond i32) (result i64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f32") (param $lhs f32) (param $rhs f32) (param $cond i32) (result f32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f64") (param $lhs f64) (param $rhs f64) (param $cond i32) (result f64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) ;; Check that both sides of the select are evaluated (func (export "select_trap_l") (param $cond i32) (result i32) (select (unreachable) (i32.const 0) (local.get $cond)) ) (func (export "select_trap_r") (param $cond i32) (result i32) (select (i32.const 0) (unreachable) (local.get $cond)) ) (func (export "select_unreached") (unreachable) (select) (unreachable) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (select) (unreachable) (f32.const 0) (i32.const 0) (select) (unreachable) ) ;; As the argument of control constructs and instructions (func (export "as-select-first") (param i32) (result i32) (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3)) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy)) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0))) ) (func (export "as-if-condition") (param i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (result i32) (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4))) ) (func (export "as-if-else") (param i32) (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4))) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0)) ) ) ) (func (export "as-store-first") (param i32) (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-return-value") (param i32) (result i32) (select (i32.const 1) (i32.const 2) (local.get 0)) (return) ) (func (export "as-drop-operand") (param i32) (drop (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0)))) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0))) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (select (i32.const 0) (i32.const 4) (local.get 0))) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-binary-operand") (param i32) (result i32) (i32.mul (select (i32.const 1) (i32.const 2) (local.get 0)) (select (i32.const 1) (i32.const 2) (local.get 0)) ) ) (func (export "as-test-operand") (param i32) (result i32) (block (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-compare-left") (param i32) (result i32) (block (result i32) (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1)) ) ) (func (export "as-compare-right") (param i32) (result i32) (block (result i32) (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-convert-operand") (param i32) (result i32) (block (result i32) (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0))) ) ) ) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select_f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select_i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_trap (invoke "select_trap_l" (i32.const 1)) "unreachable") (assert_trap (invoke "select_trap_l" (i32.const 0)) "unreachable") (assert_trap (invoke "select_trap_r" (i32.const 1)) "unreachable") (assert_trap (invoke "select_trap_r" (i32.const 0)) "unreachable") (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1)) (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element") (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4)) (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $arity-0 (select (nop) (nop) (i32.const 1)))) "type mismatch" ) ;; The first two operands should have the same type as each other (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty (i32.const 0) (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (i32.const 0) (block (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (i32.const 0) (loop (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-then (i32.const 0) (i32.const 0) (i32.const 0) (if (then (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.const 0) (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.const 0) (select) (drop))) ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/threads/skip-stack-guard-page.wast ================================================ ;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. (module (memory 1) (export "test-guard-page-skip" (func $test-guard-page-skip)) (func $test-guard-page-skip (param $depth i32) (if (i32.eq (local.get $depth) (i32.const 0)) (then (call $function-with-many-locals)) (else (call $test-guard-page-skip (i32.sub (local.get $depth) (i32.const 1)))) ) ) (func $function-with-many-locals ;; 1056 i64 = 8448 bytes of locals (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. (call $function-with-many-locals) ;; load from memory into the locals (local.set 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) (local.set 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) (local.set 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) (local.set 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) (local.set 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) (local.set 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) (local.set 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) (local.set 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) (local.set 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) (local.set 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) (local.set 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) (local.set 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) (local.set 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) (local.set 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) (local.set 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) (local.set 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) (local.set 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) (local.set 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) (local.set 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) (local.set 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) (local.set 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) (local.set 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) (local.set 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) (local.set 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) (local.set 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) (local.set 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) (local.set 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) (local.set 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) (local.set 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) (local.set 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) (local.set 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) (local.set 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) (local.set 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) (local.set 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) (local.set 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) (local.set 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) (local.set 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) (local.set 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) (local.set 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) (local.set 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) (local.set 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) (local.set 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) (local.set 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) (local.set 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) (local.set 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) (local.set 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) (local.set 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) (local.set 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) (local.set 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) (local.set 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) (local.set 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) (local.set 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) (local.set 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) (local.set 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) (local.set 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) (local.set 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) (local.set 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) (local.set 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) (local.set 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) (local.set 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) (local.set 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) (local.set 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) (local.set 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) (local.set 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) (local.set 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) (local.set 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) (local.set 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) (local.set 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) (local.set 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) (local.set 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) (local.set 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) (local.set 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) (local.set 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) (local.set 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) (local.set 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) (local.set 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) (local.set 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) (local.set 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) (local.set 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) (local.set 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) (local.set 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) (local.set 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) (local.set 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) (local.set 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) (local.set 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) (local.set 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) (local.set 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) (local.set 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) (local.set 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) (local.set 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) (local.set 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) (local.set 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) (local.set 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) (local.set 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) (local.set 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) (local.set 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) (local.set 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) (local.set 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) (local.set 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) (local.set 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) (local.set 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) (local.set 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) (local.set 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) (local.set 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) (local.set 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) (local.set 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) (local.set 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) (local.set 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) (local.set 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) (local.set 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) (local.set 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) (local.set 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) (local.set 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) (local.set 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) (local.set 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) (local.set 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) (local.set 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) (local.set 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) (local.set 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) (local.set 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) (local.set 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) (local.set 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) (local.set 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) (local.set 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) (local.set 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) (local.set 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) (local.set 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) (local.set 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) (local.set 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) (local.set 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) (local.set 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) (local.set 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) (local.set 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) (local.set 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) (local.set 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) (local.set 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) (local.set 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) (local.set 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) (local.set 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) (local.set 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) (local.set 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) (local.set 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) (local.set 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) (local.set 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) (local.set 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) (local.set 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) (local.set 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) (local.set 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) (local.set 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) (local.set 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) (local.set 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) (local.set 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) (local.set 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) (local.set 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) (local.set 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) (local.set 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) (local.set 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) (local.set 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) (local.set 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) (local.set 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) (local.set 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) (local.set 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) (local.set 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) (local.set 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) (local.set 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) (local.set 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) (local.set 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) (local.set 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) (local.set 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) (local.set 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) (local.set 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) (local.set 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) (local.set 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) (local.set 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) (local.set 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) (local.set 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) (local.set 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) (local.set 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) (local.set 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) (local.set 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) (local.set 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) (local.set 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) (local.set 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) (local.set 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) (local.set 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) (local.set 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) (local.set 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) (local.set 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) (local.set 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) (local.set 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) (local.set 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) (local.set 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) (local.set 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) (local.set 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) (local.set 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) (local.set 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) (local.set 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) (local.set 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) (local.set 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) (local.set 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) (local.set 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) (local.set 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) (local.set 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) (local.set 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) (local.set 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) (local.set 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) (local.set 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) (local.set 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) (local.set 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) (local.set 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) (local.set 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) (local.set 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) (local.set 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) (local.set 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) (local.set 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) (local.set 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) (local.set 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) (local.set 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) (local.set 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) (local.set 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) (local.set 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) (local.set 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) (local.set 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) (local.set 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) (local.set 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) (local.set 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) (local.set 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) (local.set 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) (local.set 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) (local.set 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) (local.set 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) (local.set 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) (local.set 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) (local.set 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) (local.set 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) (local.set 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) (local.set 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) (local.set 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) (local.set 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) (local.set 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) (local.set 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) (local.set 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) (local.set 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) (local.set 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) (local.set 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) (local.set 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) (local.set 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) (local.set 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) (local.set 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) (local.set 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) (local.set 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) (local.set 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) (local.set 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) (local.set 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) (local.set 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) (local.set 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) (local.set 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) (local.set 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) (local.set 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) (local.set 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) (local.set 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) (local.set 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) (local.set 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) (local.set 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) (local.set 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) (local.set 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) (local.set 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) (local.set 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) (local.set 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) (local.set 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) (local.set 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) (local.set 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) (local.set 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) (local.set 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) (local.set 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) (local.set 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) (local.set 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) (local.set 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) (local.set 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) (local.set 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) (local.set 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) (local.set 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) (local.set 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) (local.set 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) (local.set 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) (local.set 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) (local.set 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) (local.set 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) (local.set 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) (local.set 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) (local.set 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) (local.set 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) (local.set 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) (local.set 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) (local.set 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) (local.set 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) (local.set 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) (local.set 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) (local.set 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) (local.set 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) (local.set 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) (local.set 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) (local.set 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) (local.set 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) (local.set 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) (local.set 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) (local.set 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) (local.set 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) (local.set 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) (local.set 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) (local.set 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) (local.set 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) (local.set 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) (local.set 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) (local.set 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) (local.set 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) (local.set 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) (local.set 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) (local.set 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) (local.set 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) (local.set 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) (local.set 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) (local.set 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) (local.set 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) (local.set 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) (local.set 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) (local.set 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) (local.set 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) (local.set 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) (local.set 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) (local.set 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) (local.set 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) (local.set 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) (local.set 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) (local.set 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) (local.set 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) (local.set 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) (local.set 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) (local.set 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) (local.set 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) (local.set 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) (local.set 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) (local.set 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) (local.set 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) (local.set 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) (local.set 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) (local.set 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) (local.set 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) (local.set 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) (local.set 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) (local.set 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) (local.set 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) (local.set 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) (local.set 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) (local.set 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) (local.set 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) (local.set 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) (local.set 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) (local.set 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) (local.set 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) (local.set 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) (local.set 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) (local.set 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) (local.set 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) (local.set 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) (local.set 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) (local.set 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) (local.set 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) (local.set 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) (local.set 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) (local.set 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) (local.set 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) (local.set 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) (local.set 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) (local.set 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) (local.set 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) (local.set 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) (local.set 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) (local.set 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) (local.set 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) (local.set 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) (local.set 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) (local.set 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) (local.set 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) (local.set 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) (local.set 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) (local.set 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) (local.set 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) (local.set 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) (local.set 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) (local.set 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) (local.set 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) (local.set 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) (local.set 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) (local.set 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) (local.set 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) (local.set 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) (local.set 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) (local.set 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) (local.set 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) (local.set 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) (local.set 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) (local.set 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) (local.set 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) (local.set 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) (local.set 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) (local.set 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) (local.set 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) (local.set 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) (local.set 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) (local.set 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) (local.set 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) (local.set 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) (local.set 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) (local.set 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) (local.set 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) (local.set 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) (local.set 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) (local.set 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) (local.set 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) (local.set 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) (local.set 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) (local.set 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) (local.set 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) (local.set 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) (local.set 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) (local.set 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) (local.set 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) (local.set 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) (local.set 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) (local.set 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) (local.set 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) (local.set 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) (local.set 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) (local.set 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) (local.set 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) (local.set 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) (local.set 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) (local.set 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) (local.set 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) (local.set 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) (local.set 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) (local.set 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) (local.set 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) (local.set 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) (local.set 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) (local.set 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) (local.set 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) (local.set 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) (local.set 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) (local.set 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) (local.set 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) (local.set 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) (local.set 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) (local.set 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) (local.set 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) (local.set 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) (local.set 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) (local.set 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) (local.set 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) (local.set 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) (local.set 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) (local.set 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) (local.set 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) (local.set 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) (local.set 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) (local.set 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) (local.set 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) (local.set 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) (local.set 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) (local.set 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) (local.set 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) (local.set 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) (local.set 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) (local.set 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) (local.set 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) (local.set 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) (local.set 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) (local.set 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) (local.set 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) (local.set 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) (local.set 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) (local.set 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) (local.set 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) (local.set 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) (local.set 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) (local.set 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) (local.set 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) (local.set 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) (local.set 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) (local.set 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) (local.set 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) (local.set 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) (local.set 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) (local.set 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) (local.set 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) (local.set 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) (local.set 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) (local.set 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) (local.set 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) (local.set 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) (local.set 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) (local.set 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) (local.set 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) (local.set 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) (local.set 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) (local.set 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) (local.set 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) (local.set 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) (local.set 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) (local.set 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) (local.set 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) (local.set 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) (local.set 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) (local.set 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) (local.set 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) (local.set 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) (local.set 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) (local.set 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) (local.set 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) (local.set 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) (local.set 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) (local.set 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) (local.set 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) (local.set 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) (local.set 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) (local.set 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) (local.set 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) (local.set 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) (local.set 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) (local.set 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) (local.set 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) (local.set 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) (local.set 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) (local.set 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) (local.set 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) (local.set 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) (local.set 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) (local.set 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) (local.set 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) (local.set 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) (local.set 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) (local.set 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) (local.set 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) (local.set 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) (local.set 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) (local.set 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) (local.set 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) (local.set 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) (local.set 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) (local.set 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) (local.set 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) (local.set 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) (local.set 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) (local.set 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) (local.set 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) (local.set 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) (local.set 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) (local.set 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) (local.set 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) (local.set 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) (local.set 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) (local.set 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) (local.set 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) (local.set 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) (local.set 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) (local.set 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) (local.set 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) (local.set 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) (local.set 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) (local.set 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) (local.set 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) (local.set 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) (local.set 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) (local.set 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) (local.set 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) (local.set 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) (local.set 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) (local.set 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) (local.set 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) (local.set 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) (local.set 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) (local.set 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) (local.set 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) (local.set 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) (local.set 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) (local.set 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) (local.set 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) (local.set 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) (local.set 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) (local.set 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) (local.set 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) (local.set 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) (local.set 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) (local.set 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) (local.set 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) (local.set 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) (local.set 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) (local.set 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) (local.set 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) (local.set 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) (local.set 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) (local.set 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) (local.set 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) (local.set 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) (local.set 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) (local.set 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) (local.set 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) (local.set 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) (local.set 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) (local.set 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) (local.set 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) (local.set 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) (local.set 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) (local.set 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) (local.set 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) (local.set 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) (local.set 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) (local.set 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) (local.set 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) (local.set 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) (local.set 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) (local.set 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) (local.set 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) (local.set 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) (local.set 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) (local.set 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) (local.set 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) (local.set 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) (local.set 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) (local.set 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) (local.set 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) (local.set 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) (local.set 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) (local.set 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) (local.set 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) (local.set 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) (local.set 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) (local.set 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) (local.set 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) (local.set 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) (local.set 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) (local.set 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) (local.set 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) (local.set 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) (local.set 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) (local.set 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) (local.set 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) (local.set 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) (local.set 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) (local.set 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) (local.set 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) (local.set 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) (local.set 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) (local.set 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) (local.set 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) (local.set 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) (local.set 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) (local.set 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) (local.set 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) (local.set 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) (local.set 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) (local.set 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) (local.set 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) (local.set 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) (local.set 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) (local.set 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) (local.set 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) (local.set 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) (local.set 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) (local.set 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) (local.set 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) (local.set 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) (local.set 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) (local.set 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) (local.set 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) (local.set 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) (local.set 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) (local.set 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) (local.set 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) (local.set 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) (local.set 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) (local.set 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) (local.set 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) (local.set 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) (local.set 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) (local.set 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) (local.set 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) (local.set 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) (local.set 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) (local.set 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) (local.set 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) (local.set 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) (local.set 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) (local.set 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) (local.set 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) (local.set 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) (local.set 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) (local.set 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) (local.set 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) (local.set 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) (local.set 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) (local.set 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) (local.set 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) (local.set 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) (local.set 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) (local.set 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) (local.set 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) (local.set 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) (local.set 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) (local.set 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) (local.set 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) (local.set 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) (local.set 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) (local.set 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) (local.set 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) (local.set 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) (local.set 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) (local.set 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) (local.set 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) (local.set 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) (local.set 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) (local.set 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) (local.set 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) (local.set 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) (local.set 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) (local.set 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) (local.set 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) (local.set 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) (local.set 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) (local.set 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) (local.set 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) (local.set 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) (local.set 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) (local.set 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) (local.set 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) (local.set 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) (local.set 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) (local.set 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) (local.set 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) (local.set 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) (local.set 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) (local.set 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) (local.set 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) (local.set 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) (local.set 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) (local.set 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) (local.set 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) (local.set 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) (local.set 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) (local.set 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) (local.set 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) (local.set 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) (local.set 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) (local.set 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) (local.set 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) (local.set 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) (local.set 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) (local.set 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) (local.set 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) (local.set 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) (local.set 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) (local.set 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) (local.set 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) (local.set 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) (local.set 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) (local.set 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) (local.set 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) (local.set 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) (local.set 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) (local.set 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) (local.set 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) (local.set 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) (local.set 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) (local.set 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) (local.set 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) (local.set 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) (local.set 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) (local.set 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) (local.set 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) (local.set 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) (local.set 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) (local.set 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) (local.set 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) (local.set 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) (local.set 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) (local.set 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) (local.set 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) (local.set 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) (local.set 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) (local.set 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) (local.set 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) (local.set 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) (local.set 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) (local.set 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) (local.set 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) (local.set 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) (local.set 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) (local.set 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) (local.set 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) (local.set 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) (local.set 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) (local.set 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) (local.set 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) (local.set 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) (local.set 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) (local.set 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) (local.set 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) (local.set 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) (local.set 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) (local.set 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) (local.set 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) (local.set 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) (local.set 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) (local.set 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) (local.set 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) (local.set 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) (local.set 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) (local.set 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) (local.set 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) (local.set 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) (local.set 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) (local.set 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) (local.set 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) (local.set 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) (local.set 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) (local.set 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) (local.set 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) (local.set 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) (local.set 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) (local.set 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) (local.set 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) (local.set 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) (local.set 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) (local.set 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) (local.set 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) (local.set 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) (local.set 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) (local.set 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) (local.set 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) (local.set 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) (local.set 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) (local.set 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) (local.set 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) (local.set 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) (local.set 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) (local.set 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) (local.set 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) (local.set 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) (local.set 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) (local.set 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) (local.set 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) (local.set 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) (local.set 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) (local.set 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) (local.set 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) (local.set 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) (local.set 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) (local.set 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) (local.set 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) (local.set 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) (local.set 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) (local.set 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) (local.set 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) (local.set 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) (local.set 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) (local.set 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) (local.set 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) (local.set 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) (local.set 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) (local.set 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) (local.set 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) (local.set 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) (local.set 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) (local.set 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) (local.set 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) (local.set 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) (local.set 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) (local.set 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) (local.set 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) (local.set 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) (local.set 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) (local.set 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) (local.set 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) (local.set 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) (local.set 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) (local.set 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) (local.set 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) (local.set 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) (local.set 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) (local.set 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) (local.set 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) (local.set 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) (local.set 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) (local.set 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) (local.set 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) (local.set 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) (local.set 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) (local.set 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) (local.set 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) (local.set 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) (local.set 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) (local.set 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) (local.set 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) (local.set 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) (local.set 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) (local.set 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) (local.set 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) (local.set 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) (local.set 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) (local.set 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) (local.set 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) (local.set 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) (local.set 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) (local.set 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) (local.set 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) (local.set 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) (local.set 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) (local.set 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) (local.set 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) (local.set 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) (local.set 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) (local.set 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) (local.set 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) (local.set 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) (local.set 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) (local.set 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) (local.set 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) (local.set 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) (local.set 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) (local.set 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) (local.set 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) (local.set 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) (local.set 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) (local.set 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) (local.set 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) (local.set 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) (local.set 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) (local.set 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) (local.set 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) (local.set 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) (local.set 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) (local.set 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) (local.set 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) (local.set 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) (local.set 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) (local.set 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) (local.set 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) (local.set 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) (local.set 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) (local.set 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) (local.set 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) (local.set 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) (local.set 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) (local.set 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) (local.set 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) (local.set 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) (local.set 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) (local.set 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) (local.set 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) (local.set 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) (local.set 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) (local.set 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) (local.set 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) (local.set 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) (local.set 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) (local.set 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) (local.set 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) (local.set 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) (local.set 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) (local.set 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) (local.set 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) (local.set 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) (local.set 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) (local.set 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) (local.set 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) (local.set 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) (local.set 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) (local.set 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) (local.set 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) (local.set 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) (local.set 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) (local.set 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) (local.set 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) (local.set 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) (local.set 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) (local.set 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) (local.set 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) (local.set 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) (local.set 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) (local.set 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) (local.set 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) (local.set 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) (local.set 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) (local.set 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) (local.set 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) (local.set 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) (local.set 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) (local.set 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) (local.set 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) (local.set 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) (local.set 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) (local.set 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) (local.set 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) (local.set 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) (local.set 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) (local.set 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) (local.set 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) (local.set 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) (local.set 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) (local.set 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) (local.set 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) (local.set 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) (local.set 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) (local.set 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) (local.set 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) (local.set 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) (local.set 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) (local.set 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) (local.set 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) (local.set 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) (local.set 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) (local.set 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) (local.set 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) (local.set 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) (local.set 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) (local.set 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) (local.set 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) (local.set 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) (local.set 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) (local.set 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) (local.set 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) (local.set 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) (local.set 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) (local.set 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) (local.set 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) (local.set 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) (local.set 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) (local.set 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) (local.set 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) (local.set 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) (local.set 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) (local.set 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) (local.set 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) (local.set 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) (local.set 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) (local.set 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) (local.set 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) (local.set 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) (local.set 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) (local.set 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) (local.set 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) (local.set 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) (local.set 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) (local.set 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) (local.set 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) ;; store the locals back to memory (i64.store offset=0x000 align=1 (i32.const 0) (local.get 0x000)) (i64.store offset=0x001 align=1 (i32.const 0) (local.get 0x001)) (i64.store offset=0x002 align=1 (i32.const 0) (local.get 0x002)) (i64.store offset=0x003 align=1 (i32.const 0) (local.get 0x003)) (i64.store offset=0x004 align=1 (i32.const 0) (local.get 0x004)) (i64.store offset=0x005 align=1 (i32.const 0) (local.get 0x005)) (i64.store offset=0x006 align=1 (i32.const 0) (local.get 0x006)) (i64.store offset=0x007 align=1 (i32.const 0) (local.get 0x007)) (i64.store offset=0x008 align=1 (i32.const 0) (local.get 0x008)) (i64.store offset=0x009 align=1 (i32.const 0) (local.get 0x009)) (i64.store offset=0x00a align=1 (i32.const 0) (local.get 0x00a)) (i64.store offset=0x00b align=1 (i32.const 0) (local.get 0x00b)) (i64.store offset=0x00c align=1 (i32.const 0) (local.get 0x00c)) (i64.store offset=0x00d align=1 (i32.const 0) (local.get 0x00d)) (i64.store offset=0x00e align=1 (i32.const 0) (local.get 0x00e)) (i64.store offset=0x00f align=1 (i32.const 0) (local.get 0x00f)) (i64.store offset=0x010 align=1 (i32.const 0) (local.get 0x010)) (i64.store offset=0x011 align=1 (i32.const 0) (local.get 0x011)) (i64.store offset=0x012 align=1 (i32.const 0) (local.get 0x012)) (i64.store offset=0x013 align=1 (i32.const 0) (local.get 0x013)) (i64.store offset=0x014 align=1 (i32.const 0) (local.get 0x014)) (i64.store offset=0x015 align=1 (i32.const 0) (local.get 0x015)) (i64.store offset=0x016 align=1 (i32.const 0) (local.get 0x016)) (i64.store offset=0x017 align=1 (i32.const 0) (local.get 0x017)) (i64.store offset=0x018 align=1 (i32.const 0) (local.get 0x018)) (i64.store offset=0x019 align=1 (i32.const 0) (local.get 0x019)) (i64.store offset=0x01a align=1 (i32.const 0) (local.get 0x01a)) (i64.store offset=0x01b align=1 (i32.const 0) (local.get 0x01b)) (i64.store offset=0x01c align=1 (i32.const 0) (local.get 0x01c)) (i64.store offset=0x01d align=1 (i32.const 0) (local.get 0x01d)) (i64.store offset=0x01e align=1 (i32.const 0) (local.get 0x01e)) (i64.store offset=0x01f align=1 (i32.const 0) (local.get 0x01f)) (i64.store offset=0x020 align=1 (i32.const 0) (local.get 0x020)) (i64.store offset=0x021 align=1 (i32.const 0) (local.get 0x021)) (i64.store offset=0x022 align=1 (i32.const 0) (local.get 0x022)) (i64.store offset=0x023 align=1 (i32.const 0) (local.get 0x023)) (i64.store offset=0x024 align=1 (i32.const 0) (local.get 0x024)) (i64.store offset=0x025 align=1 (i32.const 0) (local.get 0x025)) (i64.store offset=0x026 align=1 (i32.const 0) (local.get 0x026)) (i64.store offset=0x027 align=1 (i32.const 0) (local.get 0x027)) (i64.store offset=0x028 align=1 (i32.const 0) (local.get 0x028)) (i64.store offset=0x029 align=1 (i32.const 0) (local.get 0x029)) (i64.store offset=0x02a align=1 (i32.const 0) (local.get 0x02a)) (i64.store offset=0x02b align=1 (i32.const 0) (local.get 0x02b)) (i64.store offset=0x02c align=1 (i32.const 0) (local.get 0x02c)) (i64.store offset=0x02d align=1 (i32.const 0) (local.get 0x02d)) (i64.store offset=0x02e align=1 (i32.const 0) (local.get 0x02e)) (i64.store offset=0x02f align=1 (i32.const 0) (local.get 0x02f)) (i64.store offset=0x030 align=1 (i32.const 0) (local.get 0x030)) (i64.store offset=0x031 align=1 (i32.const 0) (local.get 0x031)) (i64.store offset=0x032 align=1 (i32.const 0) (local.get 0x032)) (i64.store offset=0x033 align=1 (i32.const 0) (local.get 0x033)) (i64.store offset=0x034 align=1 (i32.const 0) (local.get 0x034)) (i64.store offset=0x035 align=1 (i32.const 0) (local.get 0x035)) (i64.store offset=0x036 align=1 (i32.const 0) (local.get 0x036)) (i64.store offset=0x037 align=1 (i32.const 0) (local.get 0x037)) (i64.store offset=0x038 align=1 (i32.const 0) (local.get 0x038)) (i64.store offset=0x039 align=1 (i32.const 0) (local.get 0x039)) (i64.store offset=0x03a align=1 (i32.const 0) (local.get 0x03a)) (i64.store offset=0x03b align=1 (i32.const 0) (local.get 0x03b)) (i64.store offset=0x03c align=1 (i32.const 0) (local.get 0x03c)) (i64.store offset=0x03d align=1 (i32.const 0) (local.get 0x03d)) (i64.store offset=0x03e align=1 (i32.const 0) (local.get 0x03e)) (i64.store offset=0x03f align=1 (i32.const 0) (local.get 0x03f)) (i64.store offset=0x040 align=1 (i32.const 0) (local.get 0x040)) (i64.store offset=0x041 align=1 (i32.const 0) (local.get 0x041)) (i64.store offset=0x042 align=1 (i32.const 0) (local.get 0x042)) (i64.store offset=0x043 align=1 (i32.const 0) (local.get 0x043)) (i64.store offset=0x044 align=1 (i32.const 0) (local.get 0x044)) (i64.store offset=0x045 align=1 (i32.const 0) (local.get 0x045)) (i64.store offset=0x046 align=1 (i32.const 0) (local.get 0x046)) (i64.store offset=0x047 align=1 (i32.const 0) (local.get 0x047)) (i64.store offset=0x048 align=1 (i32.const 0) (local.get 0x048)) (i64.store offset=0x049 align=1 (i32.const 0) (local.get 0x049)) (i64.store offset=0x04a align=1 (i32.const 0) (local.get 0x04a)) (i64.store offset=0x04b align=1 (i32.const 0) (local.get 0x04b)) (i64.store offset=0x04c align=1 (i32.const 0) (local.get 0x04c)) (i64.store offset=0x04d align=1 (i32.const 0) (local.get 0x04d)) (i64.store offset=0x04e align=1 (i32.const 0) (local.get 0x04e)) (i64.store offset=0x04f align=1 (i32.const 0) (local.get 0x04f)) (i64.store offset=0x050 align=1 (i32.const 0) (local.get 0x050)) (i64.store offset=0x051 align=1 (i32.const 0) (local.get 0x051)) (i64.store offset=0x052 align=1 (i32.const 0) (local.get 0x052)) (i64.store offset=0x053 align=1 (i32.const 0) (local.get 0x053)) (i64.store offset=0x054 align=1 (i32.const 0) (local.get 0x054)) (i64.store offset=0x055 align=1 (i32.const 0) (local.get 0x055)) (i64.store offset=0x056 align=1 (i32.const 0) (local.get 0x056)) (i64.store offset=0x057 align=1 (i32.const 0) (local.get 0x057)) (i64.store offset=0x058 align=1 (i32.const 0) (local.get 0x058)) (i64.store offset=0x059 align=1 (i32.const 0) (local.get 0x059)) (i64.store offset=0x05a align=1 (i32.const 0) (local.get 0x05a)) (i64.store offset=0x05b align=1 (i32.const 0) (local.get 0x05b)) (i64.store offset=0x05c align=1 (i32.const 0) (local.get 0x05c)) (i64.store offset=0x05d align=1 (i32.const 0) (local.get 0x05d)) (i64.store offset=0x05e align=1 (i32.const 0) (local.get 0x05e)) (i64.store offset=0x05f align=1 (i32.const 0) (local.get 0x05f)) (i64.store offset=0x060 align=1 (i32.const 0) (local.get 0x060)) (i64.store offset=0x061 align=1 (i32.const 0) (local.get 0x061)) (i64.store offset=0x062 align=1 (i32.const 0) (local.get 0x062)) (i64.store offset=0x063 align=1 (i32.const 0) (local.get 0x063)) (i64.store offset=0x064 align=1 (i32.const 0) (local.get 0x064)) (i64.store offset=0x065 align=1 (i32.const 0) (local.get 0x065)) (i64.store offset=0x066 align=1 (i32.const 0) (local.get 0x066)) (i64.store offset=0x067 align=1 (i32.const 0) (local.get 0x067)) (i64.store offset=0x068 align=1 (i32.const 0) (local.get 0x068)) (i64.store offset=0x069 align=1 (i32.const 0) (local.get 0x069)) (i64.store offset=0x06a align=1 (i32.const 0) (local.get 0x06a)) (i64.store offset=0x06b align=1 (i32.const 0) (local.get 0x06b)) (i64.store offset=0x06c align=1 (i32.const 0) (local.get 0x06c)) (i64.store offset=0x06d align=1 (i32.const 0) (local.get 0x06d)) (i64.store offset=0x06e align=1 (i32.const 0) (local.get 0x06e)) (i64.store offset=0x06f align=1 (i32.const 0) (local.get 0x06f)) (i64.store offset=0x070 align=1 (i32.const 0) (local.get 0x070)) (i64.store offset=0x071 align=1 (i32.const 0) (local.get 0x071)) (i64.store offset=0x072 align=1 (i32.const 0) (local.get 0x072)) (i64.store offset=0x073 align=1 (i32.const 0) (local.get 0x073)) (i64.store offset=0x074 align=1 (i32.const 0) (local.get 0x074)) (i64.store offset=0x075 align=1 (i32.const 0) (local.get 0x075)) (i64.store offset=0x076 align=1 (i32.const 0) (local.get 0x076)) (i64.store offset=0x077 align=1 (i32.const 0) (local.get 0x077)) (i64.store offset=0x078 align=1 (i32.const 0) (local.get 0x078)) (i64.store offset=0x079 align=1 (i32.const 0) (local.get 0x079)) (i64.store offset=0x07a align=1 (i32.const 0) (local.get 0x07a)) (i64.store offset=0x07b align=1 (i32.const 0) (local.get 0x07b)) (i64.store offset=0x07c align=1 (i32.const 0) (local.get 0x07c)) (i64.store offset=0x07d align=1 (i32.const 0) (local.get 0x07d)) (i64.store offset=0x07e align=1 (i32.const 0) (local.get 0x07e)) (i64.store offset=0x07f align=1 (i32.const 0) (local.get 0x07f)) (i64.store offset=0x080 align=1 (i32.const 0) (local.get 0x080)) (i64.store offset=0x081 align=1 (i32.const 0) (local.get 0x081)) (i64.store offset=0x082 align=1 (i32.const 0) (local.get 0x082)) (i64.store offset=0x083 align=1 (i32.const 0) (local.get 0x083)) (i64.store offset=0x084 align=1 (i32.const 0) (local.get 0x084)) (i64.store offset=0x085 align=1 (i32.const 0) (local.get 0x085)) (i64.store offset=0x086 align=1 (i32.const 0) (local.get 0x086)) (i64.store offset=0x087 align=1 (i32.const 0) (local.get 0x087)) (i64.store offset=0x088 align=1 (i32.const 0) (local.get 0x088)) (i64.store offset=0x089 align=1 (i32.const 0) (local.get 0x089)) (i64.store offset=0x08a align=1 (i32.const 0) (local.get 0x08a)) (i64.store offset=0x08b align=1 (i32.const 0) (local.get 0x08b)) (i64.store offset=0x08c align=1 (i32.const 0) (local.get 0x08c)) (i64.store offset=0x08d align=1 (i32.const 0) (local.get 0x08d)) (i64.store offset=0x08e align=1 (i32.const 0) (local.get 0x08e)) (i64.store offset=0x08f align=1 (i32.const 0) (local.get 0x08f)) (i64.store offset=0x090 align=1 (i32.const 0) (local.get 0x090)) (i64.store offset=0x091 align=1 (i32.const 0) (local.get 0x091)) (i64.store offset=0x092 align=1 (i32.const 0) (local.get 0x092)) (i64.store offset=0x093 align=1 (i32.const 0) (local.get 0x093)) (i64.store offset=0x094 align=1 (i32.const 0) (local.get 0x094)) (i64.store offset=0x095 align=1 (i32.const 0) (local.get 0x095)) (i64.store offset=0x096 align=1 (i32.const 0) (local.get 0x096)) (i64.store offset=0x097 align=1 (i32.const 0) (local.get 0x097)) (i64.store offset=0x098 align=1 (i32.const 0) (local.get 0x098)) (i64.store offset=0x099 align=1 (i32.const 0) (local.get 0x099)) (i64.store offset=0x09a align=1 (i32.const 0) (local.get 0x09a)) (i64.store offset=0x09b align=1 (i32.const 0) (local.get 0x09b)) (i64.store offset=0x09c align=1 (i32.const 0) (local.get 0x09c)) (i64.store offset=0x09d align=1 (i32.const 0) (local.get 0x09d)) (i64.store offset=0x09e align=1 (i32.const 0) (local.get 0x09e)) (i64.store offset=0x09f align=1 (i32.const 0) (local.get 0x09f)) (i64.store offset=0x0a0 align=1 (i32.const 0) (local.get 0x0a0)) (i64.store offset=0x0a1 align=1 (i32.const 0) (local.get 0x0a1)) (i64.store offset=0x0a2 align=1 (i32.const 0) (local.get 0x0a2)) (i64.store offset=0x0a3 align=1 (i32.const 0) (local.get 0x0a3)) (i64.store offset=0x0a4 align=1 (i32.const 0) (local.get 0x0a4)) (i64.store offset=0x0a5 align=1 (i32.const 0) (local.get 0x0a5)) (i64.store offset=0x0a6 align=1 (i32.const 0) (local.get 0x0a6)) (i64.store offset=0x0a7 align=1 (i32.const 0) (local.get 0x0a7)) (i64.store offset=0x0a8 align=1 (i32.const 0) (local.get 0x0a8)) (i64.store offset=0x0a9 align=1 (i32.const 0) (local.get 0x0a9)) (i64.store offset=0x0aa align=1 (i32.const 0) (local.get 0x0aa)) (i64.store offset=0x0ab align=1 (i32.const 0) (local.get 0x0ab)) (i64.store offset=0x0ac align=1 (i32.const 0) (local.get 0x0ac)) (i64.store offset=0x0ad align=1 (i32.const 0) (local.get 0x0ad)) (i64.store offset=0x0ae align=1 (i32.const 0) (local.get 0x0ae)) (i64.store offset=0x0af align=1 (i32.const 0) (local.get 0x0af)) (i64.store offset=0x0b0 align=1 (i32.const 0) (local.get 0x0b0)) (i64.store offset=0x0b1 align=1 (i32.const 0) (local.get 0x0b1)) (i64.store offset=0x0b2 align=1 (i32.const 0) (local.get 0x0b2)) (i64.store offset=0x0b3 align=1 (i32.const 0) (local.get 0x0b3)) (i64.store offset=0x0b4 align=1 (i32.const 0) (local.get 0x0b4)) (i64.store offset=0x0b5 align=1 (i32.const 0) (local.get 0x0b5)) (i64.store offset=0x0b6 align=1 (i32.const 0) (local.get 0x0b6)) (i64.store offset=0x0b7 align=1 (i32.const 0) (local.get 0x0b7)) (i64.store offset=0x0b8 align=1 (i32.const 0) (local.get 0x0b8)) (i64.store offset=0x0b9 align=1 (i32.const 0) (local.get 0x0b9)) (i64.store offset=0x0ba align=1 (i32.const 0) (local.get 0x0ba)) (i64.store offset=0x0bb align=1 (i32.const 0) (local.get 0x0bb)) (i64.store offset=0x0bc align=1 (i32.const 0) (local.get 0x0bc)) (i64.store offset=0x0bd align=1 (i32.const 0) (local.get 0x0bd)) (i64.store offset=0x0be align=1 (i32.const 0) (local.get 0x0be)) (i64.store offset=0x0bf align=1 (i32.const 0) (local.get 0x0bf)) (i64.store offset=0x0c0 align=1 (i32.const 0) (local.get 0x0c0)) (i64.store offset=0x0c1 align=1 (i32.const 0) (local.get 0x0c1)) (i64.store offset=0x0c2 align=1 (i32.const 0) (local.get 0x0c2)) (i64.store offset=0x0c3 align=1 (i32.const 0) (local.get 0x0c3)) (i64.store offset=0x0c4 align=1 (i32.const 0) (local.get 0x0c4)) (i64.store offset=0x0c5 align=1 (i32.const 0) (local.get 0x0c5)) (i64.store offset=0x0c6 align=1 (i32.const 0) (local.get 0x0c6)) (i64.store offset=0x0c7 align=1 (i32.const 0) (local.get 0x0c7)) (i64.store offset=0x0c8 align=1 (i32.const 0) (local.get 0x0c8)) (i64.store offset=0x0c9 align=1 (i32.const 0) (local.get 0x0c9)) (i64.store offset=0x0ca align=1 (i32.const 0) (local.get 0x0ca)) (i64.store offset=0x0cb align=1 (i32.const 0) (local.get 0x0cb)) (i64.store offset=0x0cc align=1 (i32.const 0) (local.get 0x0cc)) (i64.store offset=0x0cd align=1 (i32.const 0) (local.get 0x0cd)) (i64.store offset=0x0ce align=1 (i32.const 0) (local.get 0x0ce)) (i64.store offset=0x0cf align=1 (i32.const 0) (local.get 0x0cf)) (i64.store offset=0x0d0 align=1 (i32.const 0) (local.get 0x0d0)) (i64.store offset=0x0d1 align=1 (i32.const 0) (local.get 0x0d1)) (i64.store offset=0x0d2 align=1 (i32.const 0) (local.get 0x0d2)) (i64.store offset=0x0d3 align=1 (i32.const 0) (local.get 0x0d3)) (i64.store offset=0x0d4 align=1 (i32.const 0) (local.get 0x0d4)) (i64.store offset=0x0d5 align=1 (i32.const 0) (local.get 0x0d5)) (i64.store offset=0x0d6 align=1 (i32.const 0) (local.get 0x0d6)) (i64.store offset=0x0d7 align=1 (i32.const 0) (local.get 0x0d7)) (i64.store offset=0x0d8 align=1 (i32.const 0) (local.get 0x0d8)) (i64.store offset=0x0d9 align=1 (i32.const 0) (local.get 0x0d9)) (i64.store offset=0x0da align=1 (i32.const 0) (local.get 0x0da)) (i64.store offset=0x0db align=1 (i32.const 0) (local.get 0x0db)) (i64.store offset=0x0dc align=1 (i32.const 0) (local.get 0x0dc)) (i64.store offset=0x0dd align=1 (i32.const 0) (local.get 0x0dd)) (i64.store offset=0x0de align=1 (i32.const 0) (local.get 0x0de)) (i64.store offset=0x0df align=1 (i32.const 0) (local.get 0x0df)) (i64.store offset=0x0e0 align=1 (i32.const 0) (local.get 0x0e0)) (i64.store offset=0x0e1 align=1 (i32.const 0) (local.get 0x0e1)) (i64.store offset=0x0e2 align=1 (i32.const 0) (local.get 0x0e2)) (i64.store offset=0x0e3 align=1 (i32.const 0) (local.get 0x0e3)) (i64.store offset=0x0e4 align=1 (i32.const 0) (local.get 0x0e4)) (i64.store offset=0x0e5 align=1 (i32.const 0) (local.get 0x0e5)) (i64.store offset=0x0e6 align=1 (i32.const 0) (local.get 0x0e6)) (i64.store offset=0x0e7 align=1 (i32.const 0) (local.get 0x0e7)) (i64.store offset=0x0e8 align=1 (i32.const 0) (local.get 0x0e8)) (i64.store offset=0x0e9 align=1 (i32.const 0) (local.get 0x0e9)) (i64.store offset=0x0ea align=1 (i32.const 0) (local.get 0x0ea)) (i64.store offset=0x0eb align=1 (i32.const 0) (local.get 0x0eb)) (i64.store offset=0x0ec align=1 (i32.const 0) (local.get 0x0ec)) (i64.store offset=0x0ed align=1 (i32.const 0) (local.get 0x0ed)) (i64.store offset=0x0ee align=1 (i32.const 0) (local.get 0x0ee)) (i64.store offset=0x0ef align=1 (i32.const 0) (local.get 0x0ef)) (i64.store offset=0x0f0 align=1 (i32.const 0) (local.get 0x0f0)) (i64.store offset=0x0f1 align=1 (i32.const 0) (local.get 0x0f1)) (i64.store offset=0x0f2 align=1 (i32.const 0) (local.get 0x0f2)) (i64.store offset=0x0f3 align=1 (i32.const 0) (local.get 0x0f3)) (i64.store offset=0x0f4 align=1 (i32.const 0) (local.get 0x0f4)) (i64.store offset=0x0f5 align=1 (i32.const 0) (local.get 0x0f5)) (i64.store offset=0x0f6 align=1 (i32.const 0) (local.get 0x0f6)) (i64.store offset=0x0f7 align=1 (i32.const 0) (local.get 0x0f7)) (i64.store offset=0x0f8 align=1 (i32.const 0) (local.get 0x0f8)) (i64.store offset=0x0f9 align=1 (i32.const 0) (local.get 0x0f9)) (i64.store offset=0x0fa align=1 (i32.const 0) (local.get 0x0fa)) (i64.store offset=0x0fb align=1 (i32.const 0) (local.get 0x0fb)) (i64.store offset=0x0fc align=1 (i32.const 0) (local.get 0x0fc)) (i64.store offset=0x0fd align=1 (i32.const 0) (local.get 0x0fd)) (i64.store offset=0x0fe align=1 (i32.const 0) (local.get 0x0fe)) (i64.store offset=0x0ff align=1 (i32.const 0) (local.get 0x0ff)) (i64.store offset=0x100 align=1 (i32.const 0) (local.get 0x100)) (i64.store offset=0x101 align=1 (i32.const 0) (local.get 0x101)) (i64.store offset=0x102 align=1 (i32.const 0) (local.get 0x102)) (i64.store offset=0x103 align=1 (i32.const 0) (local.get 0x103)) (i64.store offset=0x104 align=1 (i32.const 0) (local.get 0x104)) (i64.store offset=0x105 align=1 (i32.const 0) (local.get 0x105)) (i64.store offset=0x106 align=1 (i32.const 0) (local.get 0x106)) (i64.store offset=0x107 align=1 (i32.const 0) (local.get 0x107)) (i64.store offset=0x108 align=1 (i32.const 0) (local.get 0x108)) (i64.store offset=0x109 align=1 (i32.const 0) (local.get 0x109)) (i64.store offset=0x10a align=1 (i32.const 0) (local.get 0x10a)) (i64.store offset=0x10b align=1 (i32.const 0) (local.get 0x10b)) (i64.store offset=0x10c align=1 (i32.const 0) (local.get 0x10c)) (i64.store offset=0x10d align=1 (i32.const 0) (local.get 0x10d)) (i64.store offset=0x10e align=1 (i32.const 0) (local.get 0x10e)) (i64.store offset=0x10f align=1 (i32.const 0) (local.get 0x10f)) (i64.store offset=0x110 align=1 (i32.const 0) (local.get 0x110)) (i64.store offset=0x111 align=1 (i32.const 0) (local.get 0x111)) (i64.store offset=0x112 align=1 (i32.const 0) (local.get 0x112)) (i64.store offset=0x113 align=1 (i32.const 0) (local.get 0x113)) (i64.store offset=0x114 align=1 (i32.const 0) (local.get 0x114)) (i64.store offset=0x115 align=1 (i32.const 0) (local.get 0x115)) (i64.store offset=0x116 align=1 (i32.const 0) (local.get 0x116)) (i64.store offset=0x117 align=1 (i32.const 0) (local.get 0x117)) (i64.store offset=0x118 align=1 (i32.const 0) (local.get 0x118)) (i64.store offset=0x119 align=1 (i32.const 0) (local.get 0x119)) (i64.store offset=0x11a align=1 (i32.const 0) (local.get 0x11a)) (i64.store offset=0x11b align=1 (i32.const 0) (local.get 0x11b)) (i64.store offset=0x11c align=1 (i32.const 0) (local.get 0x11c)) (i64.store offset=0x11d align=1 (i32.const 0) (local.get 0x11d)) (i64.store offset=0x11e align=1 (i32.const 0) (local.get 0x11e)) (i64.store offset=0x11f align=1 (i32.const 0) (local.get 0x11f)) (i64.store offset=0x120 align=1 (i32.const 0) (local.get 0x120)) (i64.store offset=0x121 align=1 (i32.const 0) (local.get 0x121)) (i64.store offset=0x122 align=1 (i32.const 0) (local.get 0x122)) (i64.store offset=0x123 align=1 (i32.const 0) (local.get 0x123)) (i64.store offset=0x124 align=1 (i32.const 0) (local.get 0x124)) (i64.store offset=0x125 align=1 (i32.const 0) (local.get 0x125)) (i64.store offset=0x126 align=1 (i32.const 0) (local.get 0x126)) (i64.store offset=0x127 align=1 (i32.const 0) (local.get 0x127)) (i64.store offset=0x128 align=1 (i32.const 0) (local.get 0x128)) (i64.store offset=0x129 align=1 (i32.const 0) (local.get 0x129)) (i64.store offset=0x12a align=1 (i32.const 0) (local.get 0x12a)) (i64.store offset=0x12b align=1 (i32.const 0) (local.get 0x12b)) (i64.store offset=0x12c align=1 (i32.const 0) (local.get 0x12c)) (i64.store offset=0x12d align=1 (i32.const 0) (local.get 0x12d)) (i64.store offset=0x12e align=1 (i32.const 0) (local.get 0x12e)) (i64.store offset=0x12f align=1 (i32.const 0) (local.get 0x12f)) (i64.store offset=0x130 align=1 (i32.const 0) (local.get 0x130)) (i64.store offset=0x131 align=1 (i32.const 0) (local.get 0x131)) (i64.store offset=0x132 align=1 (i32.const 0) (local.get 0x132)) (i64.store offset=0x133 align=1 (i32.const 0) (local.get 0x133)) (i64.store offset=0x134 align=1 (i32.const 0) (local.get 0x134)) (i64.store offset=0x135 align=1 (i32.const 0) (local.get 0x135)) (i64.store offset=0x136 align=1 (i32.const 0) (local.get 0x136)) (i64.store offset=0x137 align=1 (i32.const 0) (local.get 0x137)) (i64.store offset=0x138 align=1 (i32.const 0) (local.get 0x138)) (i64.store offset=0x139 align=1 (i32.const 0) (local.get 0x139)) (i64.store offset=0x13a align=1 (i32.const 0) (local.get 0x13a)) (i64.store offset=0x13b align=1 (i32.const 0) (local.get 0x13b)) (i64.store offset=0x13c align=1 (i32.const 0) (local.get 0x13c)) (i64.store offset=0x13d align=1 (i32.const 0) (local.get 0x13d)) (i64.store offset=0x13e align=1 (i32.const 0) (local.get 0x13e)) (i64.store offset=0x13f align=1 (i32.const 0) (local.get 0x13f)) (i64.store offset=0x140 align=1 (i32.const 0) (local.get 0x140)) (i64.store offset=0x141 align=1 (i32.const 0) (local.get 0x141)) (i64.store offset=0x142 align=1 (i32.const 0) (local.get 0x142)) (i64.store offset=0x143 align=1 (i32.const 0) (local.get 0x143)) (i64.store offset=0x144 align=1 (i32.const 0) (local.get 0x144)) (i64.store offset=0x145 align=1 (i32.const 0) (local.get 0x145)) (i64.store offset=0x146 align=1 (i32.const 0) (local.get 0x146)) (i64.store offset=0x147 align=1 (i32.const 0) (local.get 0x147)) (i64.store offset=0x148 align=1 (i32.const 0) (local.get 0x148)) (i64.store offset=0x149 align=1 (i32.const 0) (local.get 0x149)) (i64.store offset=0x14a align=1 (i32.const 0) (local.get 0x14a)) (i64.store offset=0x14b align=1 (i32.const 0) (local.get 0x14b)) (i64.store offset=0x14c align=1 (i32.const 0) (local.get 0x14c)) (i64.store offset=0x14d align=1 (i32.const 0) (local.get 0x14d)) (i64.store offset=0x14e align=1 (i32.const 0) (local.get 0x14e)) (i64.store offset=0x14f align=1 (i32.const 0) (local.get 0x14f)) (i64.store offset=0x150 align=1 (i32.const 0) (local.get 0x150)) (i64.store offset=0x151 align=1 (i32.const 0) (local.get 0x151)) (i64.store offset=0x152 align=1 (i32.const 0) (local.get 0x152)) (i64.store offset=0x153 align=1 (i32.const 0) (local.get 0x153)) (i64.store offset=0x154 align=1 (i32.const 0) (local.get 0x154)) (i64.store offset=0x155 align=1 (i32.const 0) (local.get 0x155)) (i64.store offset=0x156 align=1 (i32.const 0) (local.get 0x156)) (i64.store offset=0x157 align=1 (i32.const 0) (local.get 0x157)) (i64.store offset=0x158 align=1 (i32.const 0) (local.get 0x158)) (i64.store offset=0x159 align=1 (i32.const 0) (local.get 0x159)) (i64.store offset=0x15a align=1 (i32.const 0) (local.get 0x15a)) (i64.store offset=0x15b align=1 (i32.const 0) (local.get 0x15b)) (i64.store offset=0x15c align=1 (i32.const 0) (local.get 0x15c)) (i64.store offset=0x15d align=1 (i32.const 0) (local.get 0x15d)) (i64.store offset=0x15e align=1 (i32.const 0) (local.get 0x15e)) (i64.store offset=0x15f align=1 (i32.const 0) (local.get 0x15f)) (i64.store offset=0x160 align=1 (i32.const 0) (local.get 0x160)) (i64.store offset=0x161 align=1 (i32.const 0) (local.get 0x161)) (i64.store offset=0x162 align=1 (i32.const 0) (local.get 0x162)) (i64.store offset=0x163 align=1 (i32.const 0) (local.get 0x163)) (i64.store offset=0x164 align=1 (i32.const 0) (local.get 0x164)) (i64.store offset=0x165 align=1 (i32.const 0) (local.get 0x165)) (i64.store offset=0x166 align=1 (i32.const 0) (local.get 0x166)) (i64.store offset=0x167 align=1 (i32.const 0) (local.get 0x167)) (i64.store offset=0x168 align=1 (i32.const 0) (local.get 0x168)) (i64.store offset=0x169 align=1 (i32.const 0) (local.get 0x169)) (i64.store offset=0x16a align=1 (i32.const 0) (local.get 0x16a)) (i64.store offset=0x16b align=1 (i32.const 0) (local.get 0x16b)) (i64.store offset=0x16c align=1 (i32.const 0) (local.get 0x16c)) (i64.store offset=0x16d align=1 (i32.const 0) (local.get 0x16d)) (i64.store offset=0x16e align=1 (i32.const 0) (local.get 0x16e)) (i64.store offset=0x16f align=1 (i32.const 0) (local.get 0x16f)) (i64.store offset=0x170 align=1 (i32.const 0) (local.get 0x170)) (i64.store offset=0x171 align=1 (i32.const 0) (local.get 0x171)) (i64.store offset=0x172 align=1 (i32.const 0) (local.get 0x172)) (i64.store offset=0x173 align=1 (i32.const 0) (local.get 0x173)) (i64.store offset=0x174 align=1 (i32.const 0) (local.get 0x174)) (i64.store offset=0x175 align=1 (i32.const 0) (local.get 0x175)) (i64.store offset=0x176 align=1 (i32.const 0) (local.get 0x176)) (i64.store offset=0x177 align=1 (i32.const 0) (local.get 0x177)) (i64.store offset=0x178 align=1 (i32.const 0) (local.get 0x178)) (i64.store offset=0x179 align=1 (i32.const 0) (local.get 0x179)) (i64.store offset=0x17a align=1 (i32.const 0) (local.get 0x17a)) (i64.store offset=0x17b align=1 (i32.const 0) (local.get 0x17b)) (i64.store offset=0x17c align=1 (i32.const 0) (local.get 0x17c)) (i64.store offset=0x17d align=1 (i32.const 0) (local.get 0x17d)) (i64.store offset=0x17e align=1 (i32.const 0) (local.get 0x17e)) (i64.store offset=0x17f align=1 (i32.const 0) (local.get 0x17f)) (i64.store offset=0x180 align=1 (i32.const 0) (local.get 0x180)) (i64.store offset=0x181 align=1 (i32.const 0) (local.get 0x181)) (i64.store offset=0x182 align=1 (i32.const 0) (local.get 0x182)) (i64.store offset=0x183 align=1 (i32.const 0) (local.get 0x183)) (i64.store offset=0x184 align=1 (i32.const 0) (local.get 0x184)) (i64.store offset=0x185 align=1 (i32.const 0) (local.get 0x185)) (i64.store offset=0x186 align=1 (i32.const 0) (local.get 0x186)) (i64.store offset=0x187 align=1 (i32.const 0) (local.get 0x187)) (i64.store offset=0x188 align=1 (i32.const 0) (local.get 0x188)) (i64.store offset=0x189 align=1 (i32.const 0) (local.get 0x189)) (i64.store offset=0x18a align=1 (i32.const 0) (local.get 0x18a)) (i64.store offset=0x18b align=1 (i32.const 0) (local.get 0x18b)) (i64.store offset=0x18c align=1 (i32.const 0) (local.get 0x18c)) (i64.store offset=0x18d align=1 (i32.const 0) (local.get 0x18d)) (i64.store offset=0x18e align=1 (i32.const 0) (local.get 0x18e)) (i64.store offset=0x18f align=1 (i32.const 0) (local.get 0x18f)) (i64.store offset=0x190 align=1 (i32.const 0) (local.get 0x190)) (i64.store offset=0x191 align=1 (i32.const 0) (local.get 0x191)) (i64.store offset=0x192 align=1 (i32.const 0) (local.get 0x192)) (i64.store offset=0x193 align=1 (i32.const 0) (local.get 0x193)) (i64.store offset=0x194 align=1 (i32.const 0) (local.get 0x194)) (i64.store offset=0x195 align=1 (i32.const 0) (local.get 0x195)) (i64.store offset=0x196 align=1 (i32.const 0) (local.get 0x196)) (i64.store offset=0x197 align=1 (i32.const 0) (local.get 0x197)) (i64.store offset=0x198 align=1 (i32.const 0) (local.get 0x198)) (i64.store offset=0x199 align=1 (i32.const 0) (local.get 0x199)) (i64.store offset=0x19a align=1 (i32.const 0) (local.get 0x19a)) (i64.store offset=0x19b align=1 (i32.const 0) (local.get 0x19b)) (i64.store offset=0x19c align=1 (i32.const 0) (local.get 0x19c)) (i64.store offset=0x19d align=1 (i32.const 0) (local.get 0x19d)) (i64.store offset=0x19e align=1 (i32.const 0) (local.get 0x19e)) (i64.store offset=0x19f align=1 (i32.const 0) (local.get 0x19f)) (i64.store offset=0x1a0 align=1 (i32.const 0) (local.get 0x1a0)) (i64.store offset=0x1a1 align=1 (i32.const 0) (local.get 0x1a1)) (i64.store offset=0x1a2 align=1 (i32.const 0) (local.get 0x1a2)) (i64.store offset=0x1a3 align=1 (i32.const 0) (local.get 0x1a3)) (i64.store offset=0x1a4 align=1 (i32.const 0) (local.get 0x1a4)) (i64.store offset=0x1a5 align=1 (i32.const 0) (local.get 0x1a5)) (i64.store offset=0x1a6 align=1 (i32.const 0) (local.get 0x1a6)) (i64.store offset=0x1a7 align=1 (i32.const 0) (local.get 0x1a7)) (i64.store offset=0x1a8 align=1 (i32.const 0) (local.get 0x1a8)) (i64.store offset=0x1a9 align=1 (i32.const 0) (local.get 0x1a9)) (i64.store offset=0x1aa align=1 (i32.const 0) (local.get 0x1aa)) (i64.store offset=0x1ab align=1 (i32.const 0) (local.get 0x1ab)) (i64.store offset=0x1ac align=1 (i32.const 0) (local.get 0x1ac)) (i64.store offset=0x1ad align=1 (i32.const 0) (local.get 0x1ad)) (i64.store offset=0x1ae align=1 (i32.const 0) (local.get 0x1ae)) (i64.store offset=0x1af align=1 (i32.const 0) (local.get 0x1af)) (i64.store offset=0x1b0 align=1 (i32.const 0) (local.get 0x1b0)) (i64.store offset=0x1b1 align=1 (i32.const 0) (local.get 0x1b1)) (i64.store offset=0x1b2 align=1 (i32.const 0) (local.get 0x1b2)) (i64.store offset=0x1b3 align=1 (i32.const 0) (local.get 0x1b3)) (i64.store offset=0x1b4 align=1 (i32.const 0) (local.get 0x1b4)) (i64.store offset=0x1b5 align=1 (i32.const 0) (local.get 0x1b5)) (i64.store offset=0x1b6 align=1 (i32.const 0) (local.get 0x1b6)) (i64.store offset=0x1b7 align=1 (i32.const 0) (local.get 0x1b7)) (i64.store offset=0x1b8 align=1 (i32.const 0) (local.get 0x1b8)) (i64.store offset=0x1b9 align=1 (i32.const 0) (local.get 0x1b9)) (i64.store offset=0x1ba align=1 (i32.const 0) (local.get 0x1ba)) (i64.store offset=0x1bb align=1 (i32.const 0) (local.get 0x1bb)) (i64.store offset=0x1bc align=1 (i32.const 0) (local.get 0x1bc)) (i64.store offset=0x1bd align=1 (i32.const 0) (local.get 0x1bd)) (i64.store offset=0x1be align=1 (i32.const 0) (local.get 0x1be)) (i64.store offset=0x1bf align=1 (i32.const 0) (local.get 0x1bf)) (i64.store offset=0x1c0 align=1 (i32.const 0) (local.get 0x1c0)) (i64.store offset=0x1c1 align=1 (i32.const 0) (local.get 0x1c1)) (i64.store offset=0x1c2 align=1 (i32.const 0) (local.get 0x1c2)) (i64.store offset=0x1c3 align=1 (i32.const 0) (local.get 0x1c3)) (i64.store offset=0x1c4 align=1 (i32.const 0) (local.get 0x1c4)) (i64.store offset=0x1c5 align=1 (i32.const 0) (local.get 0x1c5)) (i64.store offset=0x1c6 align=1 (i32.const 0) (local.get 0x1c6)) (i64.store offset=0x1c7 align=1 (i32.const 0) (local.get 0x1c7)) (i64.store offset=0x1c8 align=1 (i32.const 0) (local.get 0x1c8)) (i64.store offset=0x1c9 align=1 (i32.const 0) (local.get 0x1c9)) (i64.store offset=0x1ca align=1 (i32.const 0) (local.get 0x1ca)) (i64.store offset=0x1cb align=1 (i32.const 0) (local.get 0x1cb)) (i64.store offset=0x1cc align=1 (i32.const 0) (local.get 0x1cc)) (i64.store offset=0x1cd align=1 (i32.const 0) (local.get 0x1cd)) (i64.store offset=0x1ce align=1 (i32.const 0) (local.get 0x1ce)) (i64.store offset=0x1cf align=1 (i32.const 0) (local.get 0x1cf)) (i64.store offset=0x1d0 align=1 (i32.const 0) (local.get 0x1d0)) (i64.store offset=0x1d1 align=1 (i32.const 0) (local.get 0x1d1)) (i64.store offset=0x1d2 align=1 (i32.const 0) (local.get 0x1d2)) (i64.store offset=0x1d3 align=1 (i32.const 0) (local.get 0x1d3)) (i64.store offset=0x1d4 align=1 (i32.const 0) (local.get 0x1d4)) (i64.store offset=0x1d5 align=1 (i32.const 0) (local.get 0x1d5)) (i64.store offset=0x1d6 align=1 (i32.const 0) (local.get 0x1d6)) (i64.store offset=0x1d7 align=1 (i32.const 0) (local.get 0x1d7)) (i64.store offset=0x1d8 align=1 (i32.const 0) (local.get 0x1d8)) (i64.store offset=0x1d9 align=1 (i32.const 0) (local.get 0x1d9)) (i64.store offset=0x1da align=1 (i32.const 0) (local.get 0x1da)) (i64.store offset=0x1db align=1 (i32.const 0) (local.get 0x1db)) (i64.store offset=0x1dc align=1 (i32.const 0) (local.get 0x1dc)) (i64.store offset=0x1dd align=1 (i32.const 0) (local.get 0x1dd)) (i64.store offset=0x1de align=1 (i32.const 0) (local.get 0x1de)) (i64.store offset=0x1df align=1 (i32.const 0) (local.get 0x1df)) (i64.store offset=0x1e0 align=1 (i32.const 0) (local.get 0x1e0)) (i64.store offset=0x1e1 align=1 (i32.const 0) (local.get 0x1e1)) (i64.store offset=0x1e2 align=1 (i32.const 0) (local.get 0x1e2)) (i64.store offset=0x1e3 align=1 (i32.const 0) (local.get 0x1e3)) (i64.store offset=0x1e4 align=1 (i32.const 0) (local.get 0x1e4)) (i64.store offset=0x1e5 align=1 (i32.const 0) (local.get 0x1e5)) (i64.store offset=0x1e6 align=1 (i32.const 0) (local.get 0x1e6)) (i64.store offset=0x1e7 align=1 (i32.const 0) (local.get 0x1e7)) (i64.store offset=0x1e8 align=1 (i32.const 0) (local.get 0x1e8)) (i64.store offset=0x1e9 align=1 (i32.const 0) (local.get 0x1e9)) (i64.store offset=0x1ea align=1 (i32.const 0) (local.get 0x1ea)) (i64.store offset=0x1eb align=1 (i32.const 0) (local.get 0x1eb)) (i64.store offset=0x1ec align=1 (i32.const 0) (local.get 0x1ec)) (i64.store offset=0x1ed align=1 (i32.const 0) (local.get 0x1ed)) (i64.store offset=0x1ee align=1 (i32.const 0) (local.get 0x1ee)) (i64.store offset=0x1ef align=1 (i32.const 0) (local.get 0x1ef)) (i64.store offset=0x1f0 align=1 (i32.const 0) (local.get 0x1f0)) (i64.store offset=0x1f1 align=1 (i32.const 0) (local.get 0x1f1)) (i64.store offset=0x1f2 align=1 (i32.const 0) (local.get 0x1f2)) (i64.store offset=0x1f3 align=1 (i32.const 0) (local.get 0x1f3)) (i64.store offset=0x1f4 align=1 (i32.const 0) (local.get 0x1f4)) (i64.store offset=0x1f5 align=1 (i32.const 0) (local.get 0x1f5)) (i64.store offset=0x1f6 align=1 (i32.const 0) (local.get 0x1f6)) (i64.store offset=0x1f7 align=1 (i32.const 0) (local.get 0x1f7)) (i64.store offset=0x1f8 align=1 (i32.const 0) (local.get 0x1f8)) (i64.store offset=0x1f9 align=1 (i32.const 0) (local.get 0x1f9)) (i64.store offset=0x1fa align=1 (i32.const 0) (local.get 0x1fa)) (i64.store offset=0x1fb align=1 (i32.const 0) (local.get 0x1fb)) (i64.store offset=0x1fc align=1 (i32.const 0) (local.get 0x1fc)) (i64.store offset=0x1fd align=1 (i32.const 0) (local.get 0x1fd)) (i64.store offset=0x1fe align=1 (i32.const 0) (local.get 0x1fe)) (i64.store offset=0x1ff align=1 (i32.const 0) (local.get 0x1ff)) (i64.store offset=0x200 align=1 (i32.const 0) (local.get 0x200)) (i64.store offset=0x201 align=1 (i32.const 0) (local.get 0x201)) (i64.store offset=0x202 align=1 (i32.const 0) (local.get 0x202)) (i64.store offset=0x203 align=1 (i32.const 0) (local.get 0x203)) (i64.store offset=0x204 align=1 (i32.const 0) (local.get 0x204)) (i64.store offset=0x205 align=1 (i32.const 0) (local.get 0x205)) (i64.store offset=0x206 align=1 (i32.const 0) (local.get 0x206)) (i64.store offset=0x207 align=1 (i32.const 0) (local.get 0x207)) (i64.store offset=0x208 align=1 (i32.const 0) (local.get 0x208)) (i64.store offset=0x209 align=1 (i32.const 0) (local.get 0x209)) (i64.store offset=0x20a align=1 (i32.const 0) (local.get 0x20a)) (i64.store offset=0x20b align=1 (i32.const 0) (local.get 0x20b)) (i64.store offset=0x20c align=1 (i32.const 0) (local.get 0x20c)) (i64.store offset=0x20d align=1 (i32.const 0) (local.get 0x20d)) (i64.store offset=0x20e align=1 (i32.const 0) (local.get 0x20e)) (i64.store offset=0x20f align=1 (i32.const 0) (local.get 0x20f)) (i64.store offset=0x210 align=1 (i32.const 0) (local.get 0x210)) (i64.store offset=0x211 align=1 (i32.const 0) (local.get 0x211)) (i64.store offset=0x212 align=1 (i32.const 0) (local.get 0x212)) (i64.store offset=0x213 align=1 (i32.const 0) (local.get 0x213)) (i64.store offset=0x214 align=1 (i32.const 0) (local.get 0x214)) (i64.store offset=0x215 align=1 (i32.const 0) (local.get 0x215)) (i64.store offset=0x216 align=1 (i32.const 0) (local.get 0x216)) (i64.store offset=0x217 align=1 (i32.const 0) (local.get 0x217)) (i64.store offset=0x218 align=1 (i32.const 0) (local.get 0x218)) (i64.store offset=0x219 align=1 (i32.const 0) (local.get 0x219)) (i64.store offset=0x21a align=1 (i32.const 0) (local.get 0x21a)) (i64.store offset=0x21b align=1 (i32.const 0) (local.get 0x21b)) (i64.store offset=0x21c align=1 (i32.const 0) (local.get 0x21c)) (i64.store offset=0x21d align=1 (i32.const 0) (local.get 0x21d)) (i64.store offset=0x21e align=1 (i32.const 0) (local.get 0x21e)) (i64.store offset=0x21f align=1 (i32.const 0) (local.get 0x21f)) (i64.store offset=0x220 align=1 (i32.const 0) (local.get 0x220)) (i64.store offset=0x221 align=1 (i32.const 0) (local.get 0x221)) (i64.store offset=0x222 align=1 (i32.const 0) (local.get 0x222)) (i64.store offset=0x223 align=1 (i32.const 0) (local.get 0x223)) (i64.store offset=0x224 align=1 (i32.const 0) (local.get 0x224)) (i64.store offset=0x225 align=1 (i32.const 0) (local.get 0x225)) (i64.store offset=0x226 align=1 (i32.const 0) (local.get 0x226)) (i64.store offset=0x227 align=1 (i32.const 0) (local.get 0x227)) (i64.store offset=0x228 align=1 (i32.const 0) (local.get 0x228)) (i64.store offset=0x229 align=1 (i32.const 0) (local.get 0x229)) (i64.store offset=0x22a align=1 (i32.const 0) (local.get 0x22a)) (i64.store offset=0x22b align=1 (i32.const 0) (local.get 0x22b)) (i64.store offset=0x22c align=1 (i32.const 0) (local.get 0x22c)) (i64.store offset=0x22d align=1 (i32.const 0) (local.get 0x22d)) (i64.store offset=0x22e align=1 (i32.const 0) (local.get 0x22e)) (i64.store offset=0x22f align=1 (i32.const 0) (local.get 0x22f)) (i64.store offset=0x230 align=1 (i32.const 0) (local.get 0x230)) (i64.store offset=0x231 align=1 (i32.const 0) (local.get 0x231)) (i64.store offset=0x232 align=1 (i32.const 0) (local.get 0x232)) (i64.store offset=0x233 align=1 (i32.const 0) (local.get 0x233)) (i64.store offset=0x234 align=1 (i32.const 0) (local.get 0x234)) (i64.store offset=0x235 align=1 (i32.const 0) (local.get 0x235)) (i64.store offset=0x236 align=1 (i32.const 0) (local.get 0x236)) (i64.store offset=0x237 align=1 (i32.const 0) (local.get 0x237)) (i64.store offset=0x238 align=1 (i32.const 0) (local.get 0x238)) (i64.store offset=0x239 align=1 (i32.const 0) (local.get 0x239)) (i64.store offset=0x23a align=1 (i32.const 0) (local.get 0x23a)) (i64.store offset=0x23b align=1 (i32.const 0) (local.get 0x23b)) (i64.store offset=0x23c align=1 (i32.const 0) (local.get 0x23c)) (i64.store offset=0x23d align=1 (i32.const 0) (local.get 0x23d)) (i64.store offset=0x23e align=1 (i32.const 0) (local.get 0x23e)) (i64.store offset=0x23f align=1 (i32.const 0) (local.get 0x23f)) (i64.store offset=0x240 align=1 (i32.const 0) (local.get 0x240)) (i64.store offset=0x241 align=1 (i32.const 0) (local.get 0x241)) (i64.store offset=0x242 align=1 (i32.const 0) (local.get 0x242)) (i64.store offset=0x243 align=1 (i32.const 0) (local.get 0x243)) (i64.store offset=0x244 align=1 (i32.const 0) (local.get 0x244)) (i64.store offset=0x245 align=1 (i32.const 0) (local.get 0x245)) (i64.store offset=0x246 align=1 (i32.const 0) (local.get 0x246)) (i64.store offset=0x247 align=1 (i32.const 0) (local.get 0x247)) (i64.store offset=0x248 align=1 (i32.const 0) (local.get 0x248)) (i64.store offset=0x249 align=1 (i32.const 0) (local.get 0x249)) (i64.store offset=0x24a align=1 (i32.const 0) (local.get 0x24a)) (i64.store offset=0x24b align=1 (i32.const 0) (local.get 0x24b)) (i64.store offset=0x24c align=1 (i32.const 0) (local.get 0x24c)) (i64.store offset=0x24d align=1 (i32.const 0) (local.get 0x24d)) (i64.store offset=0x24e align=1 (i32.const 0) (local.get 0x24e)) (i64.store offset=0x24f align=1 (i32.const 0) (local.get 0x24f)) (i64.store offset=0x250 align=1 (i32.const 0) (local.get 0x250)) (i64.store offset=0x251 align=1 (i32.const 0) (local.get 0x251)) (i64.store offset=0x252 align=1 (i32.const 0) (local.get 0x252)) (i64.store offset=0x253 align=1 (i32.const 0) (local.get 0x253)) (i64.store offset=0x254 align=1 (i32.const 0) (local.get 0x254)) (i64.store offset=0x255 align=1 (i32.const 0) (local.get 0x255)) (i64.store offset=0x256 align=1 (i32.const 0) (local.get 0x256)) (i64.store offset=0x257 align=1 (i32.const 0) (local.get 0x257)) (i64.store offset=0x258 align=1 (i32.const 0) (local.get 0x258)) (i64.store offset=0x259 align=1 (i32.const 0) (local.get 0x259)) (i64.store offset=0x25a align=1 (i32.const 0) (local.get 0x25a)) (i64.store offset=0x25b align=1 (i32.const 0) (local.get 0x25b)) (i64.store offset=0x25c align=1 (i32.const 0) (local.get 0x25c)) (i64.store offset=0x25d align=1 (i32.const 0) (local.get 0x25d)) (i64.store offset=0x25e align=1 (i32.const 0) (local.get 0x25e)) (i64.store offset=0x25f align=1 (i32.const 0) (local.get 0x25f)) (i64.store offset=0x260 align=1 (i32.const 0) (local.get 0x260)) (i64.store offset=0x261 align=1 (i32.const 0) (local.get 0x261)) (i64.store offset=0x262 align=1 (i32.const 0) (local.get 0x262)) (i64.store offset=0x263 align=1 (i32.const 0) (local.get 0x263)) (i64.store offset=0x264 align=1 (i32.const 0) (local.get 0x264)) (i64.store offset=0x265 align=1 (i32.const 0) (local.get 0x265)) (i64.store offset=0x266 align=1 (i32.const 0) (local.get 0x266)) (i64.store offset=0x267 align=1 (i32.const 0) (local.get 0x267)) (i64.store offset=0x268 align=1 (i32.const 0) (local.get 0x268)) (i64.store offset=0x269 align=1 (i32.const 0) (local.get 0x269)) (i64.store offset=0x26a align=1 (i32.const 0) (local.get 0x26a)) (i64.store offset=0x26b align=1 (i32.const 0) (local.get 0x26b)) (i64.store offset=0x26c align=1 (i32.const 0) (local.get 0x26c)) (i64.store offset=0x26d align=1 (i32.const 0) (local.get 0x26d)) (i64.store offset=0x26e align=1 (i32.const 0) (local.get 0x26e)) (i64.store offset=0x26f align=1 (i32.const 0) (local.get 0x26f)) (i64.store offset=0x270 align=1 (i32.const 0) (local.get 0x270)) (i64.store offset=0x271 align=1 (i32.const 0) (local.get 0x271)) (i64.store offset=0x272 align=1 (i32.const 0) (local.get 0x272)) (i64.store offset=0x273 align=1 (i32.const 0) (local.get 0x273)) (i64.store offset=0x274 align=1 (i32.const 0) (local.get 0x274)) (i64.store offset=0x275 align=1 (i32.const 0) (local.get 0x275)) (i64.store offset=0x276 align=1 (i32.const 0) (local.get 0x276)) (i64.store offset=0x277 align=1 (i32.const 0) (local.get 0x277)) (i64.store offset=0x278 align=1 (i32.const 0) (local.get 0x278)) (i64.store offset=0x279 align=1 (i32.const 0) (local.get 0x279)) (i64.store offset=0x27a align=1 (i32.const 0) (local.get 0x27a)) (i64.store offset=0x27b align=1 (i32.const 0) (local.get 0x27b)) (i64.store offset=0x27c align=1 (i32.const 0) (local.get 0x27c)) (i64.store offset=0x27d align=1 (i32.const 0) (local.get 0x27d)) (i64.store offset=0x27e align=1 (i32.const 0) (local.get 0x27e)) (i64.store offset=0x27f align=1 (i32.const 0) (local.get 0x27f)) (i64.store offset=0x280 align=1 (i32.const 0) (local.get 0x280)) (i64.store offset=0x281 align=1 (i32.const 0) (local.get 0x281)) (i64.store offset=0x282 align=1 (i32.const 0) (local.get 0x282)) (i64.store offset=0x283 align=1 (i32.const 0) (local.get 0x283)) (i64.store offset=0x284 align=1 (i32.const 0) (local.get 0x284)) (i64.store offset=0x285 align=1 (i32.const 0) (local.get 0x285)) (i64.store offset=0x286 align=1 (i32.const 0) (local.get 0x286)) (i64.store offset=0x287 align=1 (i32.const 0) (local.get 0x287)) (i64.store offset=0x288 align=1 (i32.const 0) (local.get 0x288)) (i64.store offset=0x289 align=1 (i32.const 0) (local.get 0x289)) (i64.store offset=0x28a align=1 (i32.const 0) (local.get 0x28a)) (i64.store offset=0x28b align=1 (i32.const 0) (local.get 0x28b)) (i64.store offset=0x28c align=1 (i32.const 0) (local.get 0x28c)) (i64.store offset=0x28d align=1 (i32.const 0) (local.get 0x28d)) (i64.store offset=0x28e align=1 (i32.const 0) (local.get 0x28e)) (i64.store offset=0x28f align=1 (i32.const 0) (local.get 0x28f)) (i64.store offset=0x290 align=1 (i32.const 0) (local.get 0x290)) (i64.store offset=0x291 align=1 (i32.const 0) (local.get 0x291)) (i64.store offset=0x292 align=1 (i32.const 0) (local.get 0x292)) (i64.store offset=0x293 align=1 (i32.const 0) (local.get 0x293)) (i64.store offset=0x294 align=1 (i32.const 0) (local.get 0x294)) (i64.store offset=0x295 align=1 (i32.const 0) (local.get 0x295)) (i64.store offset=0x296 align=1 (i32.const 0) (local.get 0x296)) (i64.store offset=0x297 align=1 (i32.const 0) (local.get 0x297)) (i64.store offset=0x298 align=1 (i32.const 0) (local.get 0x298)) (i64.store offset=0x299 align=1 (i32.const 0) (local.get 0x299)) (i64.store offset=0x29a align=1 (i32.const 0) (local.get 0x29a)) (i64.store offset=0x29b align=1 (i32.const 0) (local.get 0x29b)) (i64.store offset=0x29c align=1 (i32.const 0) (local.get 0x29c)) (i64.store offset=0x29d align=1 (i32.const 0) (local.get 0x29d)) (i64.store offset=0x29e align=1 (i32.const 0) (local.get 0x29e)) (i64.store offset=0x29f align=1 (i32.const 0) (local.get 0x29f)) (i64.store offset=0x2a0 align=1 (i32.const 0) (local.get 0x2a0)) (i64.store offset=0x2a1 align=1 (i32.const 0) (local.get 0x2a1)) (i64.store offset=0x2a2 align=1 (i32.const 0) (local.get 0x2a2)) (i64.store offset=0x2a3 align=1 (i32.const 0) (local.get 0x2a3)) (i64.store offset=0x2a4 align=1 (i32.const 0) (local.get 0x2a4)) (i64.store offset=0x2a5 align=1 (i32.const 0) (local.get 0x2a5)) (i64.store offset=0x2a6 align=1 (i32.const 0) (local.get 0x2a6)) (i64.store offset=0x2a7 align=1 (i32.const 0) (local.get 0x2a7)) (i64.store offset=0x2a8 align=1 (i32.const 0) (local.get 0x2a8)) (i64.store offset=0x2a9 align=1 (i32.const 0) (local.get 0x2a9)) (i64.store offset=0x2aa align=1 (i32.const 0) (local.get 0x2aa)) (i64.store offset=0x2ab align=1 (i32.const 0) (local.get 0x2ab)) (i64.store offset=0x2ac align=1 (i32.const 0) (local.get 0x2ac)) (i64.store offset=0x2ad align=1 (i32.const 0) (local.get 0x2ad)) (i64.store offset=0x2ae align=1 (i32.const 0) (local.get 0x2ae)) (i64.store offset=0x2af align=1 (i32.const 0) (local.get 0x2af)) (i64.store offset=0x2b0 align=1 (i32.const 0) (local.get 0x2b0)) (i64.store offset=0x2b1 align=1 (i32.const 0) (local.get 0x2b1)) (i64.store offset=0x2b2 align=1 (i32.const 0) (local.get 0x2b2)) (i64.store offset=0x2b3 align=1 (i32.const 0) (local.get 0x2b3)) (i64.store offset=0x2b4 align=1 (i32.const 0) (local.get 0x2b4)) (i64.store offset=0x2b5 align=1 (i32.const 0) (local.get 0x2b5)) (i64.store offset=0x2b6 align=1 (i32.const 0) (local.get 0x2b6)) (i64.store offset=0x2b7 align=1 (i32.const 0) (local.get 0x2b7)) (i64.store offset=0x2b8 align=1 (i32.const 0) (local.get 0x2b8)) (i64.store offset=0x2b9 align=1 (i32.const 0) (local.get 0x2b9)) (i64.store offset=0x2ba align=1 (i32.const 0) (local.get 0x2ba)) (i64.store offset=0x2bb align=1 (i32.const 0) (local.get 0x2bb)) (i64.store offset=0x2bc align=1 (i32.const 0) (local.get 0x2bc)) (i64.store offset=0x2bd align=1 (i32.const 0) (local.get 0x2bd)) (i64.store offset=0x2be align=1 (i32.const 0) (local.get 0x2be)) (i64.store offset=0x2bf align=1 (i32.const 0) (local.get 0x2bf)) (i64.store offset=0x2c0 align=1 (i32.const 0) (local.get 0x2c0)) (i64.store offset=0x2c1 align=1 (i32.const 0) (local.get 0x2c1)) (i64.store offset=0x2c2 align=1 (i32.const 0) (local.get 0x2c2)) (i64.store offset=0x2c3 align=1 (i32.const 0) (local.get 0x2c3)) (i64.store offset=0x2c4 align=1 (i32.const 0) (local.get 0x2c4)) (i64.store offset=0x2c5 align=1 (i32.const 0) (local.get 0x2c5)) (i64.store offset=0x2c6 align=1 (i32.const 0) (local.get 0x2c6)) (i64.store offset=0x2c7 align=1 (i32.const 0) (local.get 0x2c7)) (i64.store offset=0x2c8 align=1 (i32.const 0) (local.get 0x2c8)) (i64.store offset=0x2c9 align=1 (i32.const 0) (local.get 0x2c9)) (i64.store offset=0x2ca align=1 (i32.const 0) (local.get 0x2ca)) (i64.store offset=0x2cb align=1 (i32.const 0) (local.get 0x2cb)) (i64.store offset=0x2cc align=1 (i32.const 0) (local.get 0x2cc)) (i64.store offset=0x2cd align=1 (i32.const 0) (local.get 0x2cd)) (i64.store offset=0x2ce align=1 (i32.const 0) (local.get 0x2ce)) (i64.store offset=0x2cf align=1 (i32.const 0) (local.get 0x2cf)) (i64.store offset=0x2d0 align=1 (i32.const 0) (local.get 0x2d0)) (i64.store offset=0x2d1 align=1 (i32.const 0) (local.get 0x2d1)) (i64.store offset=0x2d2 align=1 (i32.const 0) (local.get 0x2d2)) (i64.store offset=0x2d3 align=1 (i32.const 0) (local.get 0x2d3)) (i64.store offset=0x2d4 align=1 (i32.const 0) (local.get 0x2d4)) (i64.store offset=0x2d5 align=1 (i32.const 0) (local.get 0x2d5)) (i64.store offset=0x2d6 align=1 (i32.const 0) (local.get 0x2d6)) (i64.store offset=0x2d7 align=1 (i32.const 0) (local.get 0x2d7)) (i64.store offset=0x2d8 align=1 (i32.const 0) (local.get 0x2d8)) (i64.store offset=0x2d9 align=1 (i32.const 0) (local.get 0x2d9)) (i64.store offset=0x2da align=1 (i32.const 0) (local.get 0x2da)) (i64.store offset=0x2db align=1 (i32.const 0) (local.get 0x2db)) (i64.store offset=0x2dc align=1 (i32.const 0) (local.get 0x2dc)) (i64.store offset=0x2dd align=1 (i32.const 0) (local.get 0x2dd)) (i64.store offset=0x2de align=1 (i32.const 0) (local.get 0x2de)) (i64.store offset=0x2df align=1 (i32.const 0) (local.get 0x2df)) (i64.store offset=0x2e0 align=1 (i32.const 0) (local.get 0x2e0)) (i64.store offset=0x2e1 align=1 (i32.const 0) (local.get 0x2e1)) (i64.store offset=0x2e2 align=1 (i32.const 0) (local.get 0x2e2)) (i64.store offset=0x2e3 align=1 (i32.const 0) (local.get 0x2e3)) (i64.store offset=0x2e4 align=1 (i32.const 0) (local.get 0x2e4)) (i64.store offset=0x2e5 align=1 (i32.const 0) (local.get 0x2e5)) (i64.store offset=0x2e6 align=1 (i32.const 0) (local.get 0x2e6)) (i64.store offset=0x2e7 align=1 (i32.const 0) (local.get 0x2e7)) (i64.store offset=0x2e8 align=1 (i32.const 0) (local.get 0x2e8)) (i64.store offset=0x2e9 align=1 (i32.const 0) (local.get 0x2e9)) (i64.store offset=0x2ea align=1 (i32.const 0) (local.get 0x2ea)) (i64.store offset=0x2eb align=1 (i32.const 0) (local.get 0x2eb)) (i64.store offset=0x2ec align=1 (i32.const 0) (local.get 0x2ec)) (i64.store offset=0x2ed align=1 (i32.const 0) (local.get 0x2ed)) (i64.store offset=0x2ee align=1 (i32.const 0) (local.get 0x2ee)) (i64.store offset=0x2ef align=1 (i32.const 0) (local.get 0x2ef)) (i64.store offset=0x2f0 align=1 (i32.const 0) (local.get 0x2f0)) (i64.store offset=0x2f1 align=1 (i32.const 0) (local.get 0x2f1)) (i64.store offset=0x2f2 align=1 (i32.const 0) (local.get 0x2f2)) (i64.store offset=0x2f3 align=1 (i32.const 0) (local.get 0x2f3)) (i64.store offset=0x2f4 align=1 (i32.const 0) (local.get 0x2f4)) (i64.store offset=0x2f5 align=1 (i32.const 0) (local.get 0x2f5)) (i64.store offset=0x2f6 align=1 (i32.const 0) (local.get 0x2f6)) (i64.store offset=0x2f7 align=1 (i32.const 0) (local.get 0x2f7)) (i64.store offset=0x2f8 align=1 (i32.const 0) (local.get 0x2f8)) (i64.store offset=0x2f9 align=1 (i32.const 0) (local.get 0x2f9)) (i64.store offset=0x2fa align=1 (i32.const 0) (local.get 0x2fa)) (i64.store offset=0x2fb align=1 (i32.const 0) (local.get 0x2fb)) (i64.store offset=0x2fc align=1 (i32.const 0) (local.get 0x2fc)) (i64.store offset=0x2fd align=1 (i32.const 0) (local.get 0x2fd)) (i64.store offset=0x2fe align=1 (i32.const 0) (local.get 0x2fe)) (i64.store offset=0x2ff align=1 (i32.const 0) (local.get 0x2ff)) (i64.store offset=0x300 align=1 (i32.const 0) (local.get 0x300)) (i64.store offset=0x301 align=1 (i32.const 0) (local.get 0x301)) (i64.store offset=0x302 align=1 (i32.const 0) (local.get 0x302)) (i64.store offset=0x303 align=1 (i32.const 0) (local.get 0x303)) (i64.store offset=0x304 align=1 (i32.const 0) (local.get 0x304)) (i64.store offset=0x305 align=1 (i32.const 0) (local.get 0x305)) (i64.store offset=0x306 align=1 (i32.const 0) (local.get 0x306)) (i64.store offset=0x307 align=1 (i32.const 0) (local.get 0x307)) (i64.store offset=0x308 align=1 (i32.const 0) (local.get 0x308)) (i64.store offset=0x309 align=1 (i32.const 0) (local.get 0x309)) (i64.store offset=0x30a align=1 (i32.const 0) (local.get 0x30a)) (i64.store offset=0x30b align=1 (i32.const 0) (local.get 0x30b)) (i64.store offset=0x30c align=1 (i32.const 0) (local.get 0x30c)) (i64.store offset=0x30d align=1 (i32.const 0) (local.get 0x30d)) (i64.store offset=0x30e align=1 (i32.const 0) (local.get 0x30e)) (i64.store offset=0x30f align=1 (i32.const 0) (local.get 0x30f)) (i64.store offset=0x310 align=1 (i32.const 0) (local.get 0x310)) (i64.store offset=0x311 align=1 (i32.const 0) (local.get 0x311)) (i64.store offset=0x312 align=1 (i32.const 0) (local.get 0x312)) (i64.store offset=0x313 align=1 (i32.const 0) (local.get 0x313)) (i64.store offset=0x314 align=1 (i32.const 0) (local.get 0x314)) (i64.store offset=0x315 align=1 (i32.const 0) (local.get 0x315)) (i64.store offset=0x316 align=1 (i32.const 0) (local.get 0x316)) (i64.store offset=0x317 align=1 (i32.const 0) (local.get 0x317)) (i64.store offset=0x318 align=1 (i32.const 0) (local.get 0x318)) (i64.store offset=0x319 align=1 (i32.const 0) (local.get 0x319)) (i64.store offset=0x31a align=1 (i32.const 0) (local.get 0x31a)) (i64.store offset=0x31b align=1 (i32.const 0) (local.get 0x31b)) (i64.store offset=0x31c align=1 (i32.const 0) (local.get 0x31c)) (i64.store offset=0x31d align=1 (i32.const 0) (local.get 0x31d)) (i64.store offset=0x31e align=1 (i32.const 0) (local.get 0x31e)) (i64.store offset=0x31f align=1 (i32.const 0) (local.get 0x31f)) (i64.store offset=0x320 align=1 (i32.const 0) (local.get 0x320)) (i64.store offset=0x321 align=1 (i32.const 0) (local.get 0x321)) (i64.store offset=0x322 align=1 (i32.const 0) (local.get 0x322)) (i64.store offset=0x323 align=1 (i32.const 0) (local.get 0x323)) (i64.store offset=0x324 align=1 (i32.const 0) (local.get 0x324)) (i64.store offset=0x325 align=1 (i32.const 0) (local.get 0x325)) (i64.store offset=0x326 align=1 (i32.const 0) (local.get 0x326)) (i64.store offset=0x327 align=1 (i32.const 0) (local.get 0x327)) (i64.store offset=0x328 align=1 (i32.const 0) (local.get 0x328)) (i64.store offset=0x329 align=1 (i32.const 0) (local.get 0x329)) (i64.store offset=0x32a align=1 (i32.const 0) (local.get 0x32a)) (i64.store offset=0x32b align=1 (i32.const 0) (local.get 0x32b)) (i64.store offset=0x32c align=1 (i32.const 0) (local.get 0x32c)) (i64.store offset=0x32d align=1 (i32.const 0) (local.get 0x32d)) (i64.store offset=0x32e align=1 (i32.const 0) (local.get 0x32e)) (i64.store offset=0x32f align=1 (i32.const 0) (local.get 0x32f)) (i64.store offset=0x330 align=1 (i32.const 0) (local.get 0x330)) (i64.store offset=0x331 align=1 (i32.const 0) (local.get 0x331)) (i64.store offset=0x332 align=1 (i32.const 0) (local.get 0x332)) (i64.store offset=0x333 align=1 (i32.const 0) (local.get 0x333)) (i64.store offset=0x334 align=1 (i32.const 0) (local.get 0x334)) (i64.store offset=0x335 align=1 (i32.const 0) (local.get 0x335)) (i64.store offset=0x336 align=1 (i32.const 0) (local.get 0x336)) (i64.store offset=0x337 align=1 (i32.const 0) (local.get 0x337)) (i64.store offset=0x338 align=1 (i32.const 0) (local.get 0x338)) (i64.store offset=0x339 align=1 (i32.const 0) (local.get 0x339)) (i64.store offset=0x33a align=1 (i32.const 0) (local.get 0x33a)) (i64.store offset=0x33b align=1 (i32.const 0) (local.get 0x33b)) (i64.store offset=0x33c align=1 (i32.const 0) (local.get 0x33c)) (i64.store offset=0x33d align=1 (i32.const 0) (local.get 0x33d)) (i64.store offset=0x33e align=1 (i32.const 0) (local.get 0x33e)) (i64.store offset=0x33f align=1 (i32.const 0) (local.get 0x33f)) (i64.store offset=0x340 align=1 (i32.const 0) (local.get 0x340)) (i64.store offset=0x341 align=1 (i32.const 0) (local.get 0x341)) (i64.store offset=0x342 align=1 (i32.const 0) (local.get 0x342)) (i64.store offset=0x343 align=1 (i32.const 0) (local.get 0x343)) (i64.store offset=0x344 align=1 (i32.const 0) (local.get 0x344)) (i64.store offset=0x345 align=1 (i32.const 0) (local.get 0x345)) (i64.store offset=0x346 align=1 (i32.const 0) (local.get 0x346)) (i64.store offset=0x347 align=1 (i32.const 0) (local.get 0x347)) (i64.store offset=0x348 align=1 (i32.const 0) (local.get 0x348)) (i64.store offset=0x349 align=1 (i32.const 0) (local.get 0x349)) (i64.store offset=0x34a align=1 (i32.const 0) (local.get 0x34a)) (i64.store offset=0x34b align=1 (i32.const 0) (local.get 0x34b)) (i64.store offset=0x34c align=1 (i32.const 0) (local.get 0x34c)) (i64.store offset=0x34d align=1 (i32.const 0) (local.get 0x34d)) (i64.store offset=0x34e align=1 (i32.const 0) (local.get 0x34e)) (i64.store offset=0x34f align=1 (i32.const 0) (local.get 0x34f)) (i64.store offset=0x350 align=1 (i32.const 0) (local.get 0x350)) (i64.store offset=0x351 align=1 (i32.const 0) (local.get 0x351)) (i64.store offset=0x352 align=1 (i32.const 0) (local.get 0x352)) (i64.store offset=0x353 align=1 (i32.const 0) (local.get 0x353)) (i64.store offset=0x354 align=1 (i32.const 0) (local.get 0x354)) (i64.store offset=0x355 align=1 (i32.const 0) (local.get 0x355)) (i64.store offset=0x356 align=1 (i32.const 0) (local.get 0x356)) (i64.store offset=0x357 align=1 (i32.const 0) (local.get 0x357)) (i64.store offset=0x358 align=1 (i32.const 0) (local.get 0x358)) (i64.store offset=0x359 align=1 (i32.const 0) (local.get 0x359)) (i64.store offset=0x35a align=1 (i32.const 0) (local.get 0x35a)) (i64.store offset=0x35b align=1 (i32.const 0) (local.get 0x35b)) (i64.store offset=0x35c align=1 (i32.const 0) (local.get 0x35c)) (i64.store offset=0x35d align=1 (i32.const 0) (local.get 0x35d)) (i64.store offset=0x35e align=1 (i32.const 0) (local.get 0x35e)) (i64.store offset=0x35f align=1 (i32.const 0) (local.get 0x35f)) (i64.store offset=0x360 align=1 (i32.const 0) (local.get 0x360)) (i64.store offset=0x361 align=1 (i32.const 0) (local.get 0x361)) (i64.store offset=0x362 align=1 (i32.const 0) (local.get 0x362)) (i64.store offset=0x363 align=1 (i32.const 0) (local.get 0x363)) (i64.store offset=0x364 align=1 (i32.const 0) (local.get 0x364)) (i64.store offset=0x365 align=1 (i32.const 0) (local.get 0x365)) (i64.store offset=0x366 align=1 (i32.const 0) (local.get 0x366)) (i64.store offset=0x367 align=1 (i32.const 0) (local.get 0x367)) (i64.store offset=0x368 align=1 (i32.const 0) (local.get 0x368)) (i64.store offset=0x369 align=1 (i32.const 0) (local.get 0x369)) (i64.store offset=0x36a align=1 (i32.const 0) (local.get 0x36a)) (i64.store offset=0x36b align=1 (i32.const 0) (local.get 0x36b)) (i64.store offset=0x36c align=1 (i32.const 0) (local.get 0x36c)) (i64.store offset=0x36d align=1 (i32.const 0) (local.get 0x36d)) (i64.store offset=0x36e align=1 (i32.const 0) (local.get 0x36e)) (i64.store offset=0x36f align=1 (i32.const 0) (local.get 0x36f)) (i64.store offset=0x370 align=1 (i32.const 0) (local.get 0x370)) (i64.store offset=0x371 align=1 (i32.const 0) (local.get 0x371)) (i64.store offset=0x372 align=1 (i32.const 0) (local.get 0x372)) (i64.store offset=0x373 align=1 (i32.const 0) (local.get 0x373)) (i64.store offset=0x374 align=1 (i32.const 0) (local.get 0x374)) (i64.store offset=0x375 align=1 (i32.const 0) (local.get 0x375)) (i64.store offset=0x376 align=1 (i32.const 0) (local.get 0x376)) (i64.store offset=0x377 align=1 (i32.const 0) (local.get 0x377)) (i64.store offset=0x378 align=1 (i32.const 0) (local.get 0x378)) (i64.store offset=0x379 align=1 (i32.const 0) (local.get 0x379)) (i64.store offset=0x37a align=1 (i32.const 0) (local.get 0x37a)) (i64.store offset=0x37b align=1 (i32.const 0) (local.get 0x37b)) (i64.store offset=0x37c align=1 (i32.const 0) (local.get 0x37c)) (i64.store offset=0x37d align=1 (i32.const 0) (local.get 0x37d)) (i64.store offset=0x37e align=1 (i32.const 0) (local.get 0x37e)) (i64.store offset=0x37f align=1 (i32.const 0) (local.get 0x37f)) (i64.store offset=0x380 align=1 (i32.const 0) (local.get 0x380)) (i64.store offset=0x381 align=1 (i32.const 0) (local.get 0x381)) (i64.store offset=0x382 align=1 (i32.const 0) (local.get 0x382)) (i64.store offset=0x383 align=1 (i32.const 0) (local.get 0x383)) (i64.store offset=0x384 align=1 (i32.const 0) (local.get 0x384)) (i64.store offset=0x385 align=1 (i32.const 0) (local.get 0x385)) (i64.store offset=0x386 align=1 (i32.const 0) (local.get 0x386)) (i64.store offset=0x387 align=1 (i32.const 0) (local.get 0x387)) (i64.store offset=0x388 align=1 (i32.const 0) (local.get 0x388)) (i64.store offset=0x389 align=1 (i32.const 0) (local.get 0x389)) (i64.store offset=0x38a align=1 (i32.const 0) (local.get 0x38a)) (i64.store offset=0x38b align=1 (i32.const 0) (local.get 0x38b)) (i64.store offset=0x38c align=1 (i32.const 0) (local.get 0x38c)) (i64.store offset=0x38d align=1 (i32.const 0) (local.get 0x38d)) (i64.store offset=0x38e align=1 (i32.const 0) (local.get 0x38e)) (i64.store offset=0x38f align=1 (i32.const 0) (local.get 0x38f)) (i64.store offset=0x390 align=1 (i32.const 0) (local.get 0x390)) (i64.store offset=0x391 align=1 (i32.const 0) (local.get 0x391)) (i64.store offset=0x392 align=1 (i32.const 0) (local.get 0x392)) (i64.store offset=0x393 align=1 (i32.const 0) (local.get 0x393)) (i64.store offset=0x394 align=1 (i32.const 0) (local.get 0x394)) (i64.store offset=0x395 align=1 (i32.const 0) (local.get 0x395)) (i64.store offset=0x396 align=1 (i32.const 0) (local.get 0x396)) (i64.store offset=0x397 align=1 (i32.const 0) (local.get 0x397)) (i64.store offset=0x398 align=1 (i32.const 0) (local.get 0x398)) (i64.store offset=0x399 align=1 (i32.const 0) (local.get 0x399)) (i64.store offset=0x39a align=1 (i32.const 0) (local.get 0x39a)) (i64.store offset=0x39b align=1 (i32.const 0) (local.get 0x39b)) (i64.store offset=0x39c align=1 (i32.const 0) (local.get 0x39c)) (i64.store offset=0x39d align=1 (i32.const 0) (local.get 0x39d)) (i64.store offset=0x39e align=1 (i32.const 0) (local.get 0x39e)) (i64.store offset=0x39f align=1 (i32.const 0) (local.get 0x39f)) (i64.store offset=0x3a0 align=1 (i32.const 0) (local.get 0x3a0)) (i64.store offset=0x3a1 align=1 (i32.const 0) (local.get 0x3a1)) (i64.store offset=0x3a2 align=1 (i32.const 0) (local.get 0x3a2)) (i64.store offset=0x3a3 align=1 (i32.const 0) (local.get 0x3a3)) (i64.store offset=0x3a4 align=1 (i32.const 0) (local.get 0x3a4)) (i64.store offset=0x3a5 align=1 (i32.const 0) (local.get 0x3a5)) (i64.store offset=0x3a6 align=1 (i32.const 0) (local.get 0x3a6)) (i64.store offset=0x3a7 align=1 (i32.const 0) (local.get 0x3a7)) (i64.store offset=0x3a8 align=1 (i32.const 0) (local.get 0x3a8)) (i64.store offset=0x3a9 align=1 (i32.const 0) (local.get 0x3a9)) (i64.store offset=0x3aa align=1 (i32.const 0) (local.get 0x3aa)) (i64.store offset=0x3ab align=1 (i32.const 0) (local.get 0x3ab)) (i64.store offset=0x3ac align=1 (i32.const 0) (local.get 0x3ac)) (i64.store offset=0x3ad align=1 (i32.const 0) (local.get 0x3ad)) (i64.store offset=0x3ae align=1 (i32.const 0) (local.get 0x3ae)) (i64.store offset=0x3af align=1 (i32.const 0) (local.get 0x3af)) (i64.store offset=0x3b0 align=1 (i32.const 0) (local.get 0x3b0)) (i64.store offset=0x3b1 align=1 (i32.const 0) (local.get 0x3b1)) (i64.store offset=0x3b2 align=1 (i32.const 0) (local.get 0x3b2)) (i64.store offset=0x3b3 align=1 (i32.const 0) (local.get 0x3b3)) (i64.store offset=0x3b4 align=1 (i32.const 0) (local.get 0x3b4)) (i64.store offset=0x3b5 align=1 (i32.const 0) (local.get 0x3b5)) (i64.store offset=0x3b6 align=1 (i32.const 0) (local.get 0x3b6)) (i64.store offset=0x3b7 align=1 (i32.const 0) (local.get 0x3b7)) (i64.store offset=0x3b8 align=1 (i32.const 0) (local.get 0x3b8)) (i64.store offset=0x3b9 align=1 (i32.const 0) (local.get 0x3b9)) (i64.store offset=0x3ba align=1 (i32.const 0) (local.get 0x3ba)) (i64.store offset=0x3bb align=1 (i32.const 0) (local.get 0x3bb)) (i64.store offset=0x3bc align=1 (i32.const 0) (local.get 0x3bc)) (i64.store offset=0x3bd align=1 (i32.const 0) (local.get 0x3bd)) (i64.store offset=0x3be align=1 (i32.const 0) (local.get 0x3be)) (i64.store offset=0x3bf align=1 (i32.const 0) (local.get 0x3bf)) (i64.store offset=0x3c0 align=1 (i32.const 0) (local.get 0x3c0)) (i64.store offset=0x3c1 align=1 (i32.const 0) (local.get 0x3c1)) (i64.store offset=0x3c2 align=1 (i32.const 0) (local.get 0x3c2)) (i64.store offset=0x3c3 align=1 (i32.const 0) (local.get 0x3c3)) (i64.store offset=0x3c4 align=1 (i32.const 0) (local.get 0x3c4)) (i64.store offset=0x3c5 align=1 (i32.const 0) (local.get 0x3c5)) (i64.store offset=0x3c6 align=1 (i32.const 0) (local.get 0x3c6)) (i64.store offset=0x3c7 align=1 (i32.const 0) (local.get 0x3c7)) (i64.store offset=0x3c8 align=1 (i32.const 0) (local.get 0x3c8)) (i64.store offset=0x3c9 align=1 (i32.const 0) (local.get 0x3c9)) (i64.store offset=0x3ca align=1 (i32.const 0) (local.get 0x3ca)) (i64.store offset=0x3cb align=1 (i32.const 0) (local.get 0x3cb)) (i64.store offset=0x3cc align=1 (i32.const 0) (local.get 0x3cc)) (i64.store offset=0x3cd align=1 (i32.const 0) (local.get 0x3cd)) (i64.store offset=0x3ce align=1 (i32.const 0) (local.get 0x3ce)) (i64.store offset=0x3cf align=1 (i32.const 0) (local.get 0x3cf)) (i64.store offset=0x3d0 align=1 (i32.const 0) (local.get 0x3d0)) (i64.store offset=0x3d1 align=1 (i32.const 0) (local.get 0x3d1)) (i64.store offset=0x3d2 align=1 (i32.const 0) (local.get 0x3d2)) (i64.store offset=0x3d3 align=1 (i32.const 0) (local.get 0x3d3)) (i64.store offset=0x3d4 align=1 (i32.const 0) (local.get 0x3d4)) (i64.store offset=0x3d5 align=1 (i32.const 0) (local.get 0x3d5)) (i64.store offset=0x3d6 align=1 (i32.const 0) (local.get 0x3d6)) (i64.store offset=0x3d7 align=1 (i32.const 0) (local.get 0x3d7)) (i64.store offset=0x3d8 align=1 (i32.const 0) (local.get 0x3d8)) (i64.store offset=0x3d9 align=1 (i32.const 0) (local.get 0x3d9)) (i64.store offset=0x3da align=1 (i32.const 0) (local.get 0x3da)) (i64.store offset=0x3db align=1 (i32.const 0) (local.get 0x3db)) (i64.store offset=0x3dc align=1 (i32.const 0) (local.get 0x3dc)) (i64.store offset=0x3dd align=1 (i32.const 0) (local.get 0x3dd)) (i64.store offset=0x3de align=1 (i32.const 0) (local.get 0x3de)) (i64.store offset=0x3df align=1 (i32.const 0) (local.get 0x3df)) (i64.store offset=0x3e0 align=1 (i32.const 0) (local.get 0x3e0)) (i64.store offset=0x3e1 align=1 (i32.const 0) (local.get 0x3e1)) (i64.store offset=0x3e2 align=1 (i32.const 0) (local.get 0x3e2)) (i64.store offset=0x3e3 align=1 (i32.const 0) (local.get 0x3e3)) (i64.store offset=0x3e4 align=1 (i32.const 0) (local.get 0x3e4)) (i64.store offset=0x3e5 align=1 (i32.const 0) (local.get 0x3e5)) (i64.store offset=0x3e6 align=1 (i32.const 0) (local.get 0x3e6)) (i64.store offset=0x3e7 align=1 (i32.const 0) (local.get 0x3e7)) (i64.store offset=0x3e8 align=1 (i32.const 0) (local.get 0x3e8)) (i64.store offset=0x3e9 align=1 (i32.const 0) (local.get 0x3e9)) (i64.store offset=0x3ea align=1 (i32.const 0) (local.get 0x3ea)) (i64.store offset=0x3eb align=1 (i32.const 0) (local.get 0x3eb)) (i64.store offset=0x3ec align=1 (i32.const 0) (local.get 0x3ec)) (i64.store offset=0x3ed align=1 (i32.const 0) (local.get 0x3ed)) (i64.store offset=0x3ee align=1 (i32.const 0) (local.get 0x3ee)) (i64.store offset=0x3ef align=1 (i32.const 0) (local.get 0x3ef)) (i64.store offset=0x3f0 align=1 (i32.const 0) (local.get 0x3f0)) (i64.store offset=0x3f1 align=1 (i32.const 0) (local.get 0x3f1)) (i64.store offset=0x3f2 align=1 (i32.const 0) (local.get 0x3f2)) (i64.store offset=0x3f3 align=1 (i32.const 0) (local.get 0x3f3)) (i64.store offset=0x3f4 align=1 (i32.const 0) (local.get 0x3f4)) (i64.store offset=0x3f5 align=1 (i32.const 0) (local.get 0x3f5)) (i64.store offset=0x3f6 align=1 (i32.const 0) (local.get 0x3f6)) (i64.store offset=0x3f7 align=1 (i32.const 0) (local.get 0x3f7)) (i64.store offset=0x3f8 align=1 (i32.const 0) (local.get 0x3f8)) (i64.store offset=0x3f9 align=1 (i32.const 0) (local.get 0x3f9)) (i64.store offset=0x3fa align=1 (i32.const 0) (local.get 0x3fa)) (i64.store offset=0x3fb align=1 (i32.const 0) (local.get 0x3fb)) (i64.store offset=0x3fc align=1 (i32.const 0) (local.get 0x3fc)) (i64.store offset=0x3fd align=1 (i32.const 0) (local.get 0x3fd)) (i64.store offset=0x3fe align=1 (i32.const 0) (local.get 0x3fe)) (i64.store offset=0x3ff align=1 (i32.const 0) (local.get 0x3ff)) (i64.store offset=0x400 align=1 (i32.const 0) (local.get 0x400)) (i64.store offset=0x401 align=1 (i32.const 0) (local.get 0x401)) (i64.store offset=0x402 align=1 (i32.const 0) (local.get 0x402)) (i64.store offset=0x403 align=1 (i32.const 0) (local.get 0x403)) (i64.store offset=0x404 align=1 (i32.const 0) (local.get 0x404)) (i64.store offset=0x405 align=1 (i32.const 0) (local.get 0x405)) (i64.store offset=0x406 align=1 (i32.const 0) (local.get 0x406)) (i64.store offset=0x407 align=1 (i32.const 0) (local.get 0x407)) (i64.store offset=0x408 align=1 (i32.const 0) (local.get 0x408)) (i64.store offset=0x409 align=1 (i32.const 0) (local.get 0x409)) (i64.store offset=0x40a align=1 (i32.const 0) (local.get 0x40a)) (i64.store offset=0x40b align=1 (i32.const 0) (local.get 0x40b)) (i64.store offset=0x40c align=1 (i32.const 0) (local.get 0x40c)) (i64.store offset=0x40d align=1 (i32.const 0) (local.get 0x40d)) (i64.store offset=0x40e align=1 (i32.const 0) (local.get 0x40e)) (i64.store offset=0x40f align=1 (i32.const 0) (local.get 0x40f)) (i64.store offset=0x410 align=1 (i32.const 0) (local.get 0x410)) (i64.store offset=0x411 align=1 (i32.const 0) (local.get 0x411)) (i64.store offset=0x412 align=1 (i32.const 0) (local.get 0x412)) (i64.store offset=0x413 align=1 (i32.const 0) (local.get 0x413)) (i64.store offset=0x414 align=1 (i32.const 0) (local.get 0x414)) (i64.store offset=0x415 align=1 (i32.const 0) (local.get 0x415)) (i64.store offset=0x416 align=1 (i32.const 0) (local.get 0x416)) (i64.store offset=0x417 align=1 (i32.const 0) (local.get 0x417)) (i64.store offset=0x418 align=1 (i32.const 0) (local.get 0x418)) (i64.store offset=0x419 align=1 (i32.const 0) (local.get 0x419)) (i64.store offset=0x41a align=1 (i32.const 0) (local.get 0x41a)) (i64.store offset=0x41b align=1 (i32.const 0) (local.get 0x41b)) (i64.store offset=0x41c align=1 (i32.const 0) (local.get 0x41c)) (i64.store offset=0x41d align=1 (i32.const 0) (local.get 0x41d)) (i64.store offset=0x41e align=1 (i32.const 0) (local.get 0x41e)) (i64.store offset=0x41f align=1 (i32.const 0) (local.get 0x41f)) ) ) (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") ================================================ FILE: Test/WebAssembly/threads/stack.wast ================================================ (module (func (export "fac-expr") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.get $n) (local.set $i) (i64.const 1) (local.set $res) (block $done (loop $loop (local.get $i) (i64.const 0) (i64.eq) (if (then (br $done)) (else (local.get $i) (local.get $res) (i64.mul) (local.set $res) (local.get $i) (i64.const 1) (i64.sub) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) local.get $n local.set $i i64.const 1 local.set $res block $done loop $loop local.get $i i64.const 0 i64.eq if $body br $done else $body local.get $i local.get $res i64.mul local.set $res local.get $i i64.const 1 i64.sub local.set $i end $body br $loop end $loop end $done local.get $res ) (func (export "fac-mixed") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (i64.eq (local.get $i) (i64.const 0)) (if (then (br $done)) (else (i64.mul (local.get $i) (local.get $res)) (local.set $res) (i64.sub (local.get $i) (i64.const 1)) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-mixed-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) block $done loop $loop (i64.eq (local.get $i) (i64.const 0)) if br $done else (i64.mul (local.get $i) (local.get $res)) local.set $res (i64.sub (local.get $i) (i64.const 1)) local.set $i end br $loop end end local.get $res ) (global $temp (mut i32) (i32.const 0)) (func $add_one_to_global (result i32) (local i32) (global.set $temp (i32.add (i32.const 1) (global.get $temp))) (global.get $temp) ) (func $add_one_to_global_and_drop (drop (call $add_one_to_global)) ) (func (export "not-quite-a-tree") (result i32) call $add_one_to_global call $add_one_to_global call $add_one_to_global_and_drop i32.add ) ) (assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "not-quite-a-tree") (i32.const 3)) (assert_return (invoke "not-quite-a-tree") (i32.const 9)) ;; Syntax of flat call_indirect (module (type $proc (func)) (table 1 funcref) (func (block i32.const 0 call_indirect) (loop i32.const 0 call_indirect) (if (i32.const 0) (then i32.const 0 call_indirect)) (if (i32.const 0) (then i32.const 0 call_indirect) (else i32.const 0 call_indirect) ) (block i32.const 0 call_indirect (type $proc)) (loop i32.const 0 call_indirect (type $proc)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc))) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)) (else i32.const 0 call_indirect (type $proc)) ) (block i32.const 0 i32.const 0 call_indirect (param i32)) (loop i32.const 0 i32.const 0 call_indirect (param i32)) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32))) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)) (else i32.const 0 i32.const 0 call_indirect (param i32)) ) (block (result i32) i32.const 0 call_indirect (result i32)) (drop) (loop (result i32) i32.const 0 call_indirect (result i32)) (drop) (if (result i32) (i32.const 0) (then i32.const 0 call_indirect (result i32)) (else i32.const 0 call_indirect (result i32)) ) (drop) (block i32.const 0 call_indirect (type $proc) (param) (result)) (loop i32.const 0 call_indirect (type $proc) (param) (result)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (result)) ) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (param) (result)) (else i32.const 0 call_indirect (type $proc) (param) (result) (result)) ) block i32.const 0 call_indirect end loop i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end block i32.const 0 call_indirect (type $proc) end loop i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) else i32.const 0 call_indirect (type $proc) end block i32.const 0 i32.const 0 call_indirect (param i32) end loop i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) else i32.const 0 i32.const 0 call_indirect (param i32) end block (result i32) i32.const 0 call_indirect (result i32) end drop loop (result i32) i32.const 0 call_indirect (result i32) end drop i32.const 0 if (result i32) i32.const 0 call_indirect (result i32) else i32.const 0 call_indirect (result i32) end drop block i32.const 0 call_indirect (type $proc) (param) (result) end loop i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) else i32.const 0 call_indirect (type $proc) (param) (param) (result) (result) end i32.const 0 call_indirect ) ) ================================================ FILE: Test/WebAssembly/threads/start.wast ================================================ (assert_invalid (module (func) (start 1)) "unknown function" ) (assert_invalid (module (func $main (result i32) (return (i32.const 0))) (start $main) ) "start function" ) (assert_invalid (module (func $main (param $a i32)) (start $main) ) "start function" ) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start $main) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start 2) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 1))) (start 1) ) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 2))) (start $main) ) (module (func $print (import "spectest" "print")) (start $print) ) (assert_trap (module (func $main (unreachable)) (start $main)) "unreachable" ) (assert_malformed (module quote "(module (func $a (unreachable)) (func $b (unreachable)) (start $a) (start $b))") "multiple start sections" ) ================================================ FILE: Test/WebAssembly/threads/store.wast ================================================ ;; Store operator as the argument of control constructs and instructions (module (memory 1) (func (export "as-block-value") (block (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-loop-value") (loop (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-br-value") (block (br 0 (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-br_if-value") (block (br_if 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-br_if-value-cond") (block (br_if 0 (i32.const 6) (i32.store (i32.const 0) (i32.const 1))) ) ) (func (export "as-br_table-value") (block (br_table 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-return-value") (return (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-if-then") (if (i32.const 1) (then (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-if-else") (if (i32.const 0) (then) (else (i32.store (i32.const 0) (i32.const 1)))) ) ) (assert_return (invoke "as-block-value")) (assert_return (invoke "as-loop-value")) (assert_return (invoke "as-br-value")) (assert_return (invoke "as-br_if-value")) (assert_return (invoke "as-br_if-value-cond")) (assert_return (invoke "as-br_table-value")) (assert_return (invoke "as-return-value")) (assert_return (invoke "as-if-then")) (assert_return (invoke "as-if-else")) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store32 (local.get 0) (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i64.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) ;; store should have no retval (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty (i32.const 0) (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-block (i32.const 0) (i32.const 0) (block (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-block (i32.const 0) (block (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-else (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-return (return (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-return (return (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-select (select (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-select (select (i32.const 0) (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-call (call 1 (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-call (call 1 (i32.const 0) (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-address-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") ================================================ FILE: Test/WebAssembly/threads/switch.wast ================================================ (module ;; Statement switch (func (export "stmt") (param $i i32) (result i32) (local $j i32) (local.set $j (i32.const 100)) (block $switch (block $7 (block $default (block $6 (block $5 (block $4 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (local.get $i) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (local.set $j (i32.sub (i32.const 0) (local.get $i))) (br $switch) ) ;; 4 (br $switch) ) ;; 5 (local.set $j (i32.const 101)) (br $switch) ) ;; 6 (local.set $j (i32.const 101)) ;; fallthrough ) ;; default (local.set $j (i32.const 102)) ) ;; 7 ;; fallthrough ) (return (local.get $j)) ) ;; Expression switch (func (export "expr") (param $i i64) (result i64) (local $j i64) (local.set $j (i64.const 100)) (return (block $switch (result i64) (block $7 (block $default (block $4 (block $5 (block $6 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (i32.wrap_i64 (local.get $i)) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (br $switch (i64.sub (i64.const 0) (local.get $i))) ) ;; 6 (local.set $j (i64.const 101)) ;; fallthrough ) ;; 4 ;; fallthrough ) ;; 5 ;; fallthrough ) ;; default (br $switch (local.get $j)) ) ;; 7 (i64.const -5) ) ) ) ;; Argument switch (func (export "arg") (param $i i32) (result i32) (return (block $2 (result i32) (i32.add (i32.const 10) (block $1 (result i32) (i32.add (i32.const 100) (block $0 (result i32) (i32.add (i32.const 1000) (block $default (result i32) (br_table $0 $1 $2 $default (i32.mul (i32.const 2) (local.get $i)) (i32.and (i32.const 3) (local.get $i)) ) ) ) ) ) ) ) ) ) ) ;; Corner cases (func (export "corner") (result i32) (block (br_table 0 (i32.const 0)) ) (i32.const 1) ) ) (assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) (assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) (assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) (assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) (assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) (assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) (assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) (assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) (assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) (assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) (assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) (assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) (assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) (assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) (assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) (assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) (assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) (assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) (assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) (assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) (assert_return (invoke "corner") (i32.const 1)) (assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") ================================================ FILE: Test/WebAssembly/threads/table.wast ================================================ ;; Test table section structure (module (table 0 funcref)) (module (table 1 funcref)) (module (table 0 0 funcref)) (module (table 0 1 funcref)) (module (table 1 256 funcref)) (module (table 0 65536 funcref)) (module (table 0 0xffff_ffff funcref)) (assert_invalid (module (table 0 funcref) (table 0 funcref)) "multiple tables") (assert_invalid (module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) "multiple tables") (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table") (assert_invalid (module (table 1 0 funcref)) "size minimum must not be greater than maximum" ) (assert_invalid (module (table 0xffff_ffff 0 funcref)) "size minimum must not be greater than maximum" ) (assert_malformed (module quote "(table 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0x1_0000_0000 0x1_0000_0000 funcref)") "i32 constant out of range" ) (assert_malformed (module quote "(table 0 0x1_0000_0000 funcref)") "i32 constant out of range" ) ;; Duplicate table identifiers (assert_malformed (module quote "(table $foo 1 funcref)" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(table $foo 1 funcref)") "duplicate table") (assert_malformed (module quote "(import \"\" \"\" (table $foo 1 funcref))" "(import \"\" \"\" (table $foo 1 funcref))") "duplicate table") ================================================ FILE: Test/WebAssembly/threads/thread.wast ================================================ (module $Mem (memory (export "shared") 1 1 shared) ) (thread $T1 (shared (module $Mem)) (register "mem" $Mem) (module (memory (import "mem" "shared") 1 10 shared) (func (export "run") (i32.store (i32.const 0) (i32.const 42)) ) ) (invoke "run") ) (thread $T2 (shared (module $Mem)) (register "mem" $Mem) (module (memory (import "mem" "shared") 1 1 shared) (func (export "run") (result i32) (i32.load (i32.const 0)) ) ) (assert_return (invoke "run") (either (i32.const 0) (i32.const 42))) ) (wait $T1) (wait $T2) ================================================ FILE: Test/WebAssembly/threads/token.wast ================================================ ;; Test tokenization (assert_malformed (module quote "(func (drop (i32.const0)))") "unknown operator" ) (assert_malformed (module quote "(func br 0drop)") "unknown operator" ) ================================================ FILE: Test/WebAssembly/threads/traps.wast ================================================ ;; Test that traps are preserved even in instructions which might otherwise ;; be dead-code-eliminated. These functions all perform an operation and ;; discard its return value. (module (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) (drop (i32.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) (drop (i32.div_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) (drop (i64.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) (drop (i64.div_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (module (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) (drop (i32.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) (drop (i32.rem_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) (drop (i64.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) (drop (i64.rem_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (module (func (export "no_dce.i32.trunc_f32_s") (param $x f32) (drop (i32.trunc_f32_s (local.get $x)))) (func (export "no_dce.i32.trunc_f32_u") (param $x f32) (drop (i32.trunc_f32_u (local.get $x)))) (func (export "no_dce.i32.trunc_f64_s") (param $x f64) (drop (i32.trunc_f64_s (local.get $x)))) (func (export "no_dce.i32.trunc_f64_u") (param $x f64) (drop (i32.trunc_f64_u (local.get $x)))) (func (export "no_dce.i64.trunc_f32_s") (param $x f32) (drop (i64.trunc_f32_s (local.get $x)))) (func (export "no_dce.i64.trunc_f32_u") (param $x f32) (drop (i64.trunc_f32_u (local.get $x)))) (func (export "no_dce.i64.trunc_f64_s") (param $x f64) (drop (i64.trunc_f64_s (local.get $x)))) (func (export "no_dce.i64.trunc_f64_u") (param $x f64) (drop (i64.trunc_f64_u (local.get $x)))) ) (assert_trap (invoke "no_dce.i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (module (memory 1) (func (export "no_dce.i32.load") (param $i i32) (drop (i32.load (local.get $i)))) (func (export "no_dce.i32.load16_s") (param $i i32) (drop (i32.load16_s (local.get $i)))) (func (export "no_dce.i32.load16_u") (param $i i32) (drop (i32.load16_u (local.get $i)))) (func (export "no_dce.i32.load8_s") (param $i i32) (drop (i32.load8_s (local.get $i)))) (func (export "no_dce.i32.load8_u") (param $i i32) (drop (i32.load8_u (local.get $i)))) (func (export "no_dce.i64.load") (param $i i32) (drop (i64.load (local.get $i)))) (func (export "no_dce.i64.load32_s") (param $i i32) (drop (i64.load32_s (local.get $i)))) (func (export "no_dce.i64.load32_u") (param $i i32) (drop (i64.load32_u (local.get $i)))) (func (export "no_dce.i64.load16_s") (param $i i32) (drop (i64.load16_s (local.get $i)))) (func (export "no_dce.i64.load16_u") (param $i i32) (drop (i64.load16_u (local.get $i)))) (func (export "no_dce.i64.load8_s") (param $i i32) (drop (i64.load8_s (local.get $i)))) (func (export "no_dce.i64.load8_u") (param $i i32) (drop (i64.load8_u (local.get $i)))) (func (export "no_dce.f32.load") (param $i i32) (drop (f32.load (local.get $i)))) (func (export "no_dce.f64.load") (param $i i32) (drop (f64.load (local.get $i)))) ) (assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") ================================================ FILE: Test/WebAssembly/threads/type.wast ================================================ ;; Test type definitions (module (type (func)) (type $t (func)) (type (func (param i32))) (type (func (param $x i32))) (type (func (result i32))) (type (func (param i32) (result i32))) (type (func (param $x i32) (result i32))) (type (func (param f32 f64))) (type (func (result i64 f32))) (type (func (param i32 i64) (result f32 f64))) (type (func (param f32) (param f64))) (type (func (param $x f32) (param f64))) (type (func (param f32) (param $y f64))) (type (func (param $x f32) (param $y f64))) (type (func (result i64) (result f32))) (type (func (param i32) (param i64) (result f32) (result f64))) (type (func (param $x i32) (param $y i64) (result f32) (result f64))) (type (func (param f32 f64) (param $x i32) (param f64 i32 i32))) (type (func (result i64 i64 f32) (result f32 i32))) (type (func (param i32 i32) (param i64 i32) (result f32 f64) (result f64 i32)) ) (type (func (param) (param $x f32) (param) (param) (param f64 i32) (param))) (type (func (result) (result) (result i64 i64) (result) (result f32) (result)) ) (type (func (param i32 i32) (param i64 i32) (param) (param $x i32) (param) (result) (result f32 f64) (result f64 i32) (result) ) ) ) (assert_malformed (module quote "(type (func (result i32) (param i32)))") "result before parameter" ) (assert_malformed (module quote "(type (func (result $x i32)))") "unexpected token" ) ================================================ FILE: Test/WebAssembly/threads/unreachable.wast ================================================ ;; Test `unreachable` operator (module ;; Auxiliary definitions (func $dummy) (func $dummy3 (param i32 i32 i32)) (func (export "type-i32") (result i32) (unreachable)) (func (export "type-i64") (result i32) (unreachable)) (func (export "type-f32") (result f64) (unreachable)) (func (export "type-f64") (result f64) (unreachable)) (func (export "as-func-first") (result i32) (unreachable) (i32.const -1) ) (func (export "as-func-mid") (result i32) (call $dummy) (unreachable) (i32.const -1) ) (func (export "as-func-last") (call $dummy) (unreachable) ) (func (export "as-func-value") (result i32) (call $dummy) (unreachable) ) (func (export "as-block-first") (result i32) (block (result i32) (unreachable) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-block-last") (block (nop) (call $dummy) (unreachable)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (unreachable)) ) (func (export "as-block-broke") (result i32) (block (result i32) (call $dummy) (br 0 (i32.const 1)) (unreachable)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (unreachable) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-loop-last") (loop (nop) (call $dummy) (unreachable)) ) (func (export "as-loop-broke") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 1)) (unreachable)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (unreachable))) ) (func (export "as-br_if-cond") (block (br_if 0 (unreachable))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (unreachable) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (unreachable))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-2") (result i32) (block (result i32) (block (result i32) (br_table 0 1 (unreachable) (i32.const 1))) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7) ) ) (func (export "as-br_table-value-and-index") (result i32) (block (result i32) (br_table 0 0 (unreachable)) (i32.const 8)) ) (func (export "as-return-value") (result i64) (return (unreachable)) ) (func (export "as-if-cond") (result i32) (if (result i32) (unreachable) (then (i32.const 0)) (else (i32.const 1))) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (unreachable)) (else (local.get 1))) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (unreachable))) ) (func (export "as-if-then-no-else") (param i32 i32) (result i32) (if (local.get 0) (then (unreachable))) (local.get 1) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (unreachable) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (unreachable)) ) (func (export "as-call-first") (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call-last") (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) ) (type $sig (func (param i32 i32 i32))) (table funcref (elem $dummy3)) (func (export "as-call_indirect-func") (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3) ) ) (func (export "as-call_indirect-last") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable) ) ) (func (export "as-local.set-value") (local f32) (local.set 0 (unreachable)) ) (func (export "as-local.tee-value") (result f32) (local f32) (local.tee 0 (unreachable)) ) (global $a (mut f32) (f32.const 0)) (func (export "as-global.set-value") (result f32) (global.set $a (unreachable)) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (unreachable)) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (unreachable)) ) (func (export "as-store-address") (f64.store (unreachable) (f64.const 7)) ) (func (export "as-store-value") (i64.store (i32.const 2) (unreachable)) ) (func (export "as-storeN-address") (i32.store8 (unreachable) (i32.const 7)) ) (func (export "as-storeN-value") (i64.store16 (i32.const 2) (unreachable)) ) (func (export "as-unary-operand") (result f32) (f32.neg (unreachable)) ) (func (export "as-binary-left") (result i32) (i32.add (unreachable) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (unreachable)) ) (func (export "as-test-operand") (result i32) (i32.eqz (unreachable)) ) (func (export "as-compare-left") (result i32) (f64.le (unreachable) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (unreachable)) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (unreachable)) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (unreachable)) ) ) (assert_trap (invoke "type-i32") "unreachable") (assert_trap (invoke "type-i64") "unreachable") (assert_trap (invoke "type-f32") "unreachable") (assert_trap (invoke "type-f64") "unreachable") (assert_trap (invoke "as-func-first") "unreachable") (assert_trap (invoke "as-func-mid") "unreachable") (assert_trap (invoke "as-func-last") "unreachable") (assert_trap (invoke "as-func-value") "unreachable") (assert_trap (invoke "as-block-first") "unreachable") (assert_trap (invoke "as-block-mid") "unreachable") (assert_trap (invoke "as-block-last") "unreachable") (assert_trap (invoke "as-block-value") "unreachable") (assert_return (invoke "as-block-broke") (i32.const 1)) (assert_trap (invoke "as-loop-first") "unreachable") (assert_trap (invoke "as-loop-mid") "unreachable") (assert_trap (invoke "as-loop-last") "unreachable") (assert_return (invoke "as-loop-broke") (i32.const 1)) (assert_trap (invoke "as-br-value") "unreachable") (assert_trap (invoke "as-br_if-cond") "unreachable") (assert_trap (invoke "as-br_if-value") "unreachable") (assert_trap (invoke "as-br_if-value-cond") "unreachable") (assert_trap (invoke "as-br_table-index") "unreachable") (assert_trap (invoke "as-br_table-value") "unreachable") (assert_trap (invoke "as-br_table-value-2") "unreachable") (assert_trap (invoke "as-br_table-value-index") "unreachable") (assert_trap (invoke "as-br_table-value-and-index") "unreachable") (assert_trap (invoke "as-return-value") "unreachable") (assert_trap (invoke "as-if-cond") "unreachable") (assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-then-no-else" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then-no-else" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-cond") "unreachable") (assert_trap (invoke "as-call-first") "unreachable") (assert_trap (invoke "as-call-mid") "unreachable") (assert_trap (invoke "as-call-last") "unreachable") (assert_trap (invoke "as-call_indirect-func") "unreachable") (assert_trap (invoke "as-call_indirect-first") "unreachable") (assert_trap (invoke "as-call_indirect-mid") "unreachable") (assert_trap (invoke "as-call_indirect-last") "unreachable") (assert_trap (invoke "as-local.set-value") "unreachable") (assert_trap (invoke "as-local.tee-value") "unreachable") (assert_trap (invoke "as-global.set-value") "unreachable") (assert_trap (invoke "as-load-address") "unreachable") (assert_trap (invoke "as-loadN-address") "unreachable") (assert_trap (invoke "as-store-address") "unreachable") (assert_trap (invoke "as-store-value") "unreachable") (assert_trap (invoke "as-storeN-address") "unreachable") (assert_trap (invoke "as-storeN-value") "unreachable") (assert_trap (invoke "as-unary-operand") "unreachable") (assert_trap (invoke "as-binary-left") "unreachable") (assert_trap (invoke "as-binary-right") "unreachable") (assert_trap (invoke "as-test-operand") "unreachable") (assert_trap (invoke "as-compare-left") "unreachable") (assert_trap (invoke "as-compare-right") "unreachable") (assert_trap (invoke "as-convert-operand") "unreachable") (assert_trap (invoke "as-memory.grow-size") "unreachable") ================================================ FILE: Test/WebAssembly/threads/unreached-invalid.wast ================================================ ;; Failures in unreachable code. (assert_invalid (module (func $local-index (unreachable) (drop (local.get 0)))) "unknown local" ) (assert_invalid (module (func $global-index (unreachable) (drop (global.get 0)))) "unknown global" ) (assert_invalid (module (func $func-index (unreachable) (call 1))) "unknown function" ) (assert_invalid (module (func $label-index (unreachable) (br 1))) "unknown label" ) (assert_invalid (module (func $type-num-vs-num (unreachable) (drop (i64.eqz (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (func $type-poly-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-poly-transitive-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-const (unreachable) (i32.const 0))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result (unreachable) (i32.eqz))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result2 (unreachable) (i32.const 0) (i32.add) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly0 (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly2 (unreachable) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-break (block (br 0) (block (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-break (block (br 0) (drop (i32.eqz (f32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-break (block (br 0) (block (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-break (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-break (result i32) (block (result i32) (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-break (block (loop (br 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-break (result i32) (loop (result i32) (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-break (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-return (return) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-return (return) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-return (return) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-return (return) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-return (block (return) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-return (result i32) (block (result i32) (i32.const 1) (return (i32.const 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-return (block (loop (return) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-return (result i32) (loop (result i32) (return (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-return (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-unreachable (unreachable) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-loop-after-unreachable (unreachable) (loop (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-i32-loop-after-unreachable (unreachable) (loop (result i32) (i32.eqz (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-unreachable (unreachable) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-unreachable (unreachable) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-unreachable (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-unreachable (block (unreachable) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-unreachable (result i32) (block (result i32) (i32.const 1) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-unreachable (block (loop (unreachable) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) (loop (result i32) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-unreachable (unreachable) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-unreachable (result i32) (unreachable) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-if-after-unreachable (unreachable) (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable (unreachable) (if (i32.const 0) (then (nop)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable-if (if (i32.const 0) (then (unreachable)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-nested-unreachable (block (block (unreachable)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-nested-unreachable (result i32) (block (result i32) (i32.const 1) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-nested-unreachable (block (loop (block (unreachable)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-nested-unreachable (result i32) (loop (result i32) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-nested-unreachable (block (unreachable)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-nested-unreachable (result i32) (block (unreachable)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-infinite-loop (block (loop (br 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) (block (result i32) (i32.const 1) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-infinite-loop (block (loop (loop (br 0)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) (loop (result i32) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-infinite-loop (loop (br 0)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) (loop (br 0)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-void-in-dead-body (if (i32.const 0) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (block (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (block (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (loop (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (loop (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-br-second-num-vs-num (result i32) (block (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-cond-num-vs-num-after-unreachable (block (br_if 0 (unreachable) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-void-after-unreachable (result i32) (block (result i32) (block (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-num-after-unreachable (result i32) (block (result i32) (block (result f32) (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) (drop) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num2-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_if 0 (i32.const 0) (i32.const 0)) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-num-vs-num-after-unreachable (block (br_table 0 (unreachable) (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_table 0 (f32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-label-void-after-unreachable (block (block (result f32) (unreachable) (br_table 0 1 0 (i32.const 1)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-void (block (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) (block (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-void (block (i32.const 3) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-void-vs-num (result i32) (block (result i32) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-num (result i32) (block (result i32) (i64.const 0) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-void (block (block (i32.const 3) (block (br 2)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-void-vs-num (result i32) (block (result i32) (block (block (br 2 (i32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-num (result i32) (block (result i32) (block (result i64) (i64.const 0) (block (br 2 (i32.const 0)))) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-void (block (i32.const 3) (block (return))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-void-vs-num (result i32) (block (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-void (loop (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) (loop (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) (loop (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $tee-local-unreachable-value (local i32) (local.tee 0 (unreachable)) )) "type mismatch" ) (assert_invalid (module (func $br_if-unreachable (result i32) (block (result i32) (block (br_if 1 (unreachable) (i32.const 0)) ) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-after-unreachable (result i64) unreachable br_if 0 i64.extend_i32_u ) ) "type mismatch" ) ================================================ FILE: Test/WebAssembly/threads/unwind.wast ================================================ ;; Test that control-flow transfer unwinds stack and it can be anything after. (module (func (export "func-unwind-by-unreachable") (i32.const 3) (i64.const 1) (unreachable) ) (func (export "func-unwind-by-br") (i32.const 3) (i64.const 1) (br 0) ) (func (export "func-unwind-by-br-value") (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9)) ) (func (export "func-unwind-by-br_if") (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1)))) ) (func (export "func-unwind-by-br_if-value") (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) (func (export "func-unwind-by-br_table") (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0)) ) (func (export "func-unwind-by-br_table-value") (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) (func (export "func-unwind-by-return") (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9)) ) (func (export "block-unwind-by-unreachable") (block (i32.const 3) (i64.const 1) (unreachable)) ) (func (export "block-unwind-by-br") (result i32) (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) ) (func (export "block-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) ) (func (export "block-unwind-by-br_if") (result i32) (block (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1))))) (i32.const 9) ) (func (export "block-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) ) (func (export "block-unwind-by-br_table") (result i32) (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) ) (func (export "block-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9))) ) (func (export "block-nested-unwind-by-unreachable") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (unreachable))) ) (func (export "block-nested-unwind-by-br") (result i32) (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9))) ) ) (func (export "block-nested-unwind-by-br_if") (result i32) (block (i32.const 3) (block (i64.const 1) (drop (br_if 1 (i32.const 1)))) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (drop (drop (br_if 1 (i32.const 9) (i32.const 1))))) ) ) (func (export "block-nested-unwind-by-br_table") (result i32) (block (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) (drop) ) (i32.const 9) ) (func (export "block-nested-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) ) ) (func (export "block-nested-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (return (i32.const 9))) ) ) (func (export "unary-after-unreachable") (result i32) (f32.const 0) (unreachable) (i64.eqz) ) (func (export "unary-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) ) (func (export "unary-after-br_if") (result i32) (block (result i32) (i64.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eqz) ) ) (func (export "unary-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) ) ) (func (export "unary-after-return") (result i32) (f32.const 0) (return (i32.const 9)) (i64.eqz) ) (func (export "binary-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (unreachable) (i64.eq) ) (func (export "binary-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq) ) ) (func (export "binary-after-br_if") (result i32) (block (result i32) (i64.const 0) (i64.const 1) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eq) ) ) (func (export "binary-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) (i64.eq) ) ) (func (export "binary-after-return") (result i32) (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) ) (func (export "select-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) ) (func (export "select-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) ) ) (func (export "select-after-br_if") (result i32) (block (result i32) (i32.const 0) (i32.const 1) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (select) ) ) (func (export "select-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br_table 0 (i32.const 9) (i32.const 0)) (select) ) ) (func (export "select-after-return") (result i32) (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) ) (func (export "block-value-after-unreachable") (result i32) (block (result i32) (f32.const 0) (unreachable)) ) (func (export "block-value-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9))) ) (func (export "block-value-after-br_if") (result i32) (block (result i32) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) ) ) (func (export "block-value-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-value-after-return") (result i32) (block (result i32) (f32.const 0) (return (i32.const 9))) ) (func (export "loop-value-after-unreachable") (result i32) (loop (result i32) (f32.const 0) (unreachable)) ) (func (export "loop-value-after-br") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br 1 (i32.const 9)))) ) (func (export "loop-value-after-br_if") (result i32) (block (result i32) (loop (result i32) (i32.const 0) (drop (br_if 1 (i32.const 9) (i32.const 1))) ) ) ) (func (export "loop-value-after-br_table") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0)) ) ) ) (func (export "loop-value-after-return") (result i32) (loop (result i32) (f32.const 0) (return (i32.const 9))) ) ) (assert_trap (invoke "func-unwind-by-unreachable") "unreachable") (assert_return (invoke "func-unwind-by-br")) (assert_return (invoke "func-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_if")) (assert_return (invoke "func-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_table")) (assert_return (invoke "func-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) (assert_trap (invoke "unary-after-unreachable") "unreachable") (assert_return (invoke "unary-after-br") (i32.const 9)) (assert_return (invoke "unary-after-br_if") (i32.const 9)) (assert_return (invoke "unary-after-br_table") (i32.const 9)) (assert_return (invoke "unary-after-return") (i32.const 9)) (assert_trap (invoke "binary-after-unreachable") "unreachable") (assert_return (invoke "binary-after-br") (i32.const 9)) (assert_return (invoke "binary-after-br_if") (i32.const 9)) (assert_return (invoke "binary-after-br_table") (i32.const 9)) (assert_return (invoke "binary-after-return") (i32.const 9)) (assert_trap (invoke "select-after-unreachable") "unreachable") (assert_return (invoke "select-after-br") (i32.const 9)) (assert_return (invoke "select-after-br_if") (i32.const 9)) (assert_return (invoke "select-after-br_table") (i32.const 9)) (assert_return (invoke "select-after-return") (i32.const 9)) (assert_trap (invoke "block-value-after-unreachable") "unreachable") (assert_return (invoke "block-value-after-br") (i32.const 9)) (assert_return (invoke "block-value-after-br_if") (i32.const 9)) (assert_return (invoke "block-value-after-br_table") (i32.const 9)) (assert_return (invoke "block-value-after-return") (i32.const 9)) (assert_trap (invoke "loop-value-after-unreachable") "unreachable") (assert_return (invoke "loop-value-after-br") (i32.const 9)) (assert_return (invoke "loop-value-after-br_if") (i32.const 9)) (assert_return (invoke "loop-value-after-br_table") (i32.const 9)) (assert_return (invoke "loop-value-after-return") (i32.const 9)) ================================================ FILE: Test/WebAssembly/threads/utf8-custom-section-id.wast ================================================ ;;;;;; Invalid UTF-8 custom section names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\80" ;; "\80" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\8f" ;; "\8f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\90" ;; "\90" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\9f" ;; "\9f" ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\a0" ;; "\a0" ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\bf" ;; "\bf" ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\c2\80\80" ;; "\c2\80\80" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\c2" ;; "\c2" ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\2e" ;; "\c2." ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\80" ;; "\c0\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\bf" ;; "\c0\bf" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\80" ;; "\c1\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\bf" ;; "\c1\bf" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\00" ;; "\c2\00" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\7f" ;; "\c2\7f" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\c0" ;; "\c2\c0" ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\fd" ;; "\c2\fd" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\00" ;; "\df\00" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\7f" ;; "\df\7f" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\c0" ;; "\df\c0" ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\fd" ;; "\df\fd" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\e1\80\80\80" ;; "\e1\80\80\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\80" ;; "\e1\80" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\2e" ;; "\e1\80." ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\e1" ;; "\e1" ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\2e" ;; "\e1." ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\00\a0" ;; "\e0\00\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\7f\a0" ;; "\e0\7f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\80" ;; "\e0\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\a0" ;; "\e0\80\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\a0" ;; "\e0\9f\a0" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\bf" ;; "\e0\9f\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\c0\a0" ;; "\e0\c0\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\fd\a0" ;; "\e0\fd\a0" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\00\80" ;; "\e1\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\7f\80" ;; "\e1\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\c0\80" ;; "\e1\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\fd\80" ;; "\e1\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\00\80" ;; "\ec\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\7f\80" ;; "\ec\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\c0\80" ;; "\ec\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\fd\80" ;; "\ec\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\00\80" ;; "\ed\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\7f\80" ;; "\ed\7f\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\80" ;; "\ed\a0\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\bf" ;; "\ed\a0\bf" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\80" ;; "\ed\bf\80" ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\bf" ;; "\ed\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\c0\80" ;; "\ed\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\fd\80" ;; "\ed\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\00\80" ;; "\ee\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\7f\80" ;; "\ee\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\c0\80" ;; "\ee\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\fd\80" ;; "\ee\fd\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\00\80" ;; "\ef\00\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\7f\80" ;; "\ef\7f\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\c0\80" ;; "\ef\c0\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\fd\80" ;; "\ef\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\00" ;; "\e0\a0\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\7f" ;; "\e0\a0\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\c0" ;; "\e0\a0\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\fd" ;; "\e0\a0\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\00" ;; "\e1\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\7f" ;; "\e1\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\c0" ;; "\e1\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\fd" ;; "\e1\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\00" ;; "\ec\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\7f" ;; "\ec\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\c0" ;; "\ec\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\fd" ;; "\ec\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\00" ;; "\ed\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\7f" ;; "\ed\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\c0" ;; "\ed\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\fd" ;; "\ed\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\00" ;; "\ee\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\7f" ;; "\ee\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\c0" ;; "\ee\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\fd" ;; "\ee\80\fd" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\00" ;; "\ef\80\00" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\7f" ;; "\ef\80\7f" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\c0" ;; "\ef\80\c0" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\fd" ;; "\ef\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\80" ;; "\f1\80\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\23" ;; "\f1\80\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\80" ;; "\f1\80" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\23" ;; "\f1\80#" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f1" ;; "\f1" ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\23" ;; "\f1#" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\00\90\90" ;; "\f0\00\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\7f\90\90" ;; "\f0\7f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\80\80" ;; "\f0\80\80\80" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\90\90" ;; "\f0\80\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\90\90" ;; "\f0\8f\90\90" ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\c0\90\90" ;; "\f0\c0\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\fd\90\90" ;; "\f0\fd\90\90" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\00\80\80" ;; "\f1\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\7f\80\80" ;; "\f1\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\c0\80\80" ;; "\f1\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\fd\80\80" ;; "\f1\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\00\80\80" ;; "\f3\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\7f\80\80" ;; "\f3\7f\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\c0\80\80" ;; "\f3\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\fd\80\80" ;; "\f3\fd\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\00\80\80" ;; "\f4\00\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\7f\80\80" ;; "\f4\7f\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\90\80\80" ;; "\f4\90\80\80" ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\bf\80\80" ;; "\f4\bf\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\c0\80\80" ;; "\f4\c0\80\80" ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\fd\80\80" ;; "\f4\fd\80\80" ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f5\80\80\80" ;; "\f5\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\80\80\80" ;; "\f7\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\00\90" ;; "\f0\90\00\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\7f\90" ;; "\f0\90\7f\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\c0\90" ;; "\f0\90\c0\90" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\fd\90" ;; "\f0\90\fd\90" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\00\80" ;; "\f1\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\7f\80" ;; "\f1\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\c0\80" ;; "\f1\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\fd\80" ;; "\f1\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\00\80" ;; "\f3\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\7f\80" ;; "\f3\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\c0\80" ;; "\f3\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\fd\80" ;; "\f3\80\fd\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\00\80" ;; "\f4\80\00\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\7f\80" ;; "\f4\80\7f\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\c0\80" ;; "\f4\80\c0\80" ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\fd\80" ;; "\f4\80\fd\80" ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\00" ;; "\f0\90\90\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\7f" ;; "\f0\90\90\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\c0" ;; "\f0\90\90\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\fd" ;; "\f0\90\90\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\00" ;; "\f1\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\7f" ;; "\f1\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\c0" ;; "\f1\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\fd" ;; "\f1\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\00" ;; "\f3\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\7f" ;; "\f3\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\c0" ;; "\f3\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\fd" ;; "\f3\80\80\fd" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\00" ;; "\f4\80\80\00" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\7f" ;; "\f4\80\80\7f" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\c0" ;; "\f4\80\80\c0" ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\fd" ;; "\f4\80\80\fd" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\80" ;; "\f8\80\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\80" ;; "\f8\80\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\23" ;; "\f8\80\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\80" ;; "\f8\80" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\23" ;; "\f8\80#" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f8" ;; "\f8" ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\23" ;; "\f8#" ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\08" ;; custom section "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\80" ;; "\fc\80\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\80" ;; "\fc\80\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\23" ;; "\fc\80\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\80" ;; "\fc\80" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\23" ;; "\fc\80#" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fc" ;; "\fc" ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\23" ;; "\fc#" ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fe" ;; "\fe" ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\ff" ;; "\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fe\ff" ;; "\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\00\00\fe\ff" ;; "\00\00\fe\ff" ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\ff\fe" ;; "\ff\fe" ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\ff\fe\00\00" ;; "\ff\fe\00\00" ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/threads/utf8-import-field.wast ================================================ ;;;;;; Invalid UTF-8 import field names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\80" ;; "\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\8f" ;; "\8f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\90" ;; "\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\9f" ;; "\9f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\a0" ;; "\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\bf" ;; "\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\c2\80\80" ;; "\c2\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\c2" ;; "\c2" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\2e" ;; "\c2." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\80" ;; "\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\bf" ;; "\c0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\80" ;; "\c1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\bf" ;; "\c1\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\00" ;; "\c2\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\7f" ;; "\c2\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\c0" ;; "\c2\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\fd" ;; "\c2\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\00" ;; "\df\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\7f" ;; "\df\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\c0" ;; "\df\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\fd" ;; "\df\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\e1\80\80\80" ;; "\e1\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\80" ;; "\e1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\2e" ;; "\e1\80." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\e1" ;; "\e1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\2e" ;; "\e1." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\00\a0" ;; "\e0\00\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\7f\a0" ;; "\e0\7f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\80" ;; "\e0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\a0" ;; "\e0\80\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\a0" ;; "\e0\9f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\bf" ;; "\e0\9f\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\c0\a0" ;; "\e0\c0\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\fd\a0" ;; "\e0\fd\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\00\80" ;; "\e1\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\7f\80" ;; "\e1\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\c0\80" ;; "\e1\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\fd\80" ;; "\e1\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\00\80" ;; "\ec\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\7f\80" ;; "\ec\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\c0\80" ;; "\ec\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\fd\80" ;; "\ec\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\00\80" ;; "\ed\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\7f\80" ;; "\ed\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\80" ;; "\ed\a0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\bf" ;; "\ed\a0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\80" ;; "\ed\bf\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\bf" ;; "\ed\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\c0\80" ;; "\ed\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\fd\80" ;; "\ed\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\00\80" ;; "\ee\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\7f\80" ;; "\ee\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\c0\80" ;; "\ee\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\fd\80" ;; "\ee\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\00\80" ;; "\ef\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\7f\80" ;; "\ef\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\c0\80" ;; "\ef\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\fd\80" ;; "\ef\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\00" ;; "\e0\a0\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\7f" ;; "\e0\a0\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\c0" ;; "\e0\a0\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\fd" ;; "\e0\a0\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\00" ;; "\e1\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\7f" ;; "\e1\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\c0" ;; "\e1\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\fd" ;; "\e1\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\00" ;; "\ec\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\7f" ;; "\ec\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\c0" ;; "\ec\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\fd" ;; "\ec\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\00" ;; "\ed\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\7f" ;; "\ed\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\c0" ;; "\ed\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\fd" ;; "\ed\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\00" ;; "\ee\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\7f" ;; "\ee\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\c0" ;; "\ee\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\fd" ;; "\ee\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\00" ;; "\ef\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\7f" ;; "\ef\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\c0" ;; "\ef\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\fd" ;; "\ef\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\80" ;; "\f1\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\23" ;; "\f1\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\80" ;; "\f1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\23" ;; "\f1\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f1" ;; "\f1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\23" ;; "\f1#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\00\90\90" ;; "\f0\00\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\80\80" ;; "\f0\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\90\90" ;; "\f0\80\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\00\80\80" ;; "\f1\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\00\80\80" ;; "\f3\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\00\80\80" ;; "\f4\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\90\80\80" ;; "\f4\90\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f5\80\80\80" ;; "\f5\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\80\80\80" ;; "\f7\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\00\90" ;; "\f0\90\00\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\00\80" ;; "\f1\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\00\80" ;; "\f3\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\00\80" ;; "\f4\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\00" ;; "\f0\90\90\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\00" ;; "\f1\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\00" ;; "\f3\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\00" ;; "\f4\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\80" ;; "\f8\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\80" ;; "\f8\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\23" ;; "\f8\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\80" ;; "\f8\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\23" ;; "\f8\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f8" ;; "\f8" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\23" ;; "\f8#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\80" ;; "\fc\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\80" ;; "\fc\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\23" ;; "\fc\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\80" ;; "\fc\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\23" ;; "\fc\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fc" ;; "\fc" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\23" ;; "\fc#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fe" ;; "\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\ff" ;; "\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fe\ff" ;; "\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\ff\fe" ;; "\ff\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/threads/utf8-import-module.wast ================================================ ;;;;;; Invalid UTF-8 import module names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\80" ;; "\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\8f" ;; "\8f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\90" ;; "\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\9f" ;; "\9f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\a0" ;; "\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\bf" ;; "\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\c2\80\80" ;; "\c2\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\c2" ;; "\c2" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\2e" ;; "\c2." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\80" ;; "\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\bf" ;; "\c0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\80" ;; "\c1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\bf" ;; "\c1\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\00" ;; "\c2\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\7f" ;; "\c2\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\c0" ;; "\c2\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\fd" ;; "\c2\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\00" ;; "\df\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\7f" ;; "\df\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\c0" ;; "\df\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\fd" ;; "\df\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\e1\80\80\80" ;; "\e1\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\80" ;; "\e1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\2e" ;; "\e1\80." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\e1" ;; "\e1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\2e" ;; "\e1." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\00\a0" ;; "\e0\00\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\7f\a0" ;; "\e0\7f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\80" ;; "\e0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\a0" ;; "\e0\80\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\a0" ;; "\e0\9f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\bf" ;; "\e0\9f\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\c0\a0" ;; "\e0\c0\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\fd\a0" ;; "\e0\fd\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\00\80" ;; "\e1\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\7f\80" ;; "\e1\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\c0\80" ;; "\e1\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\fd\80" ;; "\e1\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\00\80" ;; "\ec\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\7f\80" ;; "\ec\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\c0\80" ;; "\ec\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\fd\80" ;; "\ec\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\00\80" ;; "\ed\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\7f\80" ;; "\ed\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\80" ;; "\ed\a0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\bf" ;; "\ed\a0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\80" ;; "\ed\bf\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\bf" ;; "\ed\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\c0\80" ;; "\ed\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\fd\80" ;; "\ed\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\00\80" ;; "\ee\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\7f\80" ;; "\ee\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\c0\80" ;; "\ee\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\fd\80" ;; "\ee\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\00\80" ;; "\ef\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\7f\80" ;; "\ef\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\c0\80" ;; "\ef\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\fd\80" ;; "\ef\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\00" ;; "\e0\a0\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\7f" ;; "\e0\a0\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\c0" ;; "\e0\a0\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\fd" ;; "\e0\a0\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\00" ;; "\e1\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\7f" ;; "\e1\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\c0" ;; "\e1\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\fd" ;; "\e1\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\00" ;; "\ec\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\7f" ;; "\ec\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\c0" ;; "\ec\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\fd" ;; "\ec\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\00" ;; "\ed\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\7f" ;; "\ed\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\c0" ;; "\ed\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\fd" ;; "\ed\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\00" ;; "\ee\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\7f" ;; "\ee\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\c0" ;; "\ee\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\fd" ;; "\ee\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\00" ;; "\ef\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\7f" ;; "\ef\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\c0" ;; "\ef\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\fd" ;; "\ef\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\80" ;; "\f1\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\23" ;; "\f1\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\80" ;; "\f1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\23" ;; "\f1\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f1" ;; "\f1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\23" ;; "\f1#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\00\90\90" ;; "\f0\00\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\80\80" ;; "\f0\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\90\90" ;; "\f0\80\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\00\80\80" ;; "\f1\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\00\80\80" ;; "\f3\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\00\80\80" ;; "\f4\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\90\80\80" ;; "\f4\90\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (first) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f5\80\80\80" ;; "\f5\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\80\80\80" ;; "\f7\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\00\90" ;; "\f0\90\00\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\00\80" ;; "\f1\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\00\80" ;; "\f3\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\00\80" ;; "\f4\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\00" ;; "\f0\90\90\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\00" ;; "\f1\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\00" ;; "\f3\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\00" ;; "\f4\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\80" ;; "\f8\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\80" ;; "\f8\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\23" ;; "\f8\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\80" ;; "\f8\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\23" ;; "\f8\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f8" ;; "\f8" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\23" ;; "\f8#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\80" ;; "\fc\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\80" ;; "\fc\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\23" ;; "\fc\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\80" ;; "\fc\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\23" ;; "\fc\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fc" ;; "\fc" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\23" ;; "\fc#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; (last) malformed 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;;;; Miscellaneous malformed bytes ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fe" ;; "\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; malformed byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\ff" ;; "\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fe\ff" ;; "\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\ff\fe" ;; "\ff\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "malformed UTF-8 encoding" ) ================================================ FILE: Test/WebAssembly/threads/utf8-invalid-encoding.wast ================================================ (assert_malformed (module quote "(func (export \"\\00\\00\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\8f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\9f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\00\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\7f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\c0\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\fd\\a0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\2e\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\00\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\7f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\00\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\7f\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\c0\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\fd\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\c0\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\fd\\90\\90\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\00\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\7f\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\00\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\7f\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\7f\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\c0\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\fd\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\c0\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\fd\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\90\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\bf\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\c0\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\fd\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f5\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fb\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\23\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fd\\bf\\bf\\bf\\bf\\bf\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\\00\\00\"))") "malformed UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\"))") "malformed UTF-8 encoding") ================================================ FILE: Test/fuzz/CMakeLists.txt ================================================ function(WAVM_ADD_FUZZER_EXECUTABLE TARGET_NAME) WAVM_ADD_EXECUTABLE(${TARGET_NAME} FOLDER Testing/Fuzzers ${ARGN}) if(WAVM_ENABLE_LIBFUZZER) target_link_libraries(${TARGET_NAME} PRIVATE "-fsanitize=fuzzer") endif() endfunction() WAVM_ADD_FUZZER_EXECUTABLE(fuzz-disassemble SOURCES fuzz-disassemble.cpp ModuleMatcher.h FuzzTargetCommonMain.h) WAVM_ADD_FUZZER_EXECUTABLE(fuzz-assemble SOURCES fuzz-assemble.cpp ModuleMatcher.h FuzzTargetCommonMain.h) WAVM_ADD_EXECUTABLE(translate-compile-model-corpus SOURCES translate-compile-model-corpus.cpp FOLDER Testing/Fuzzers) if(WAVM_ENABLE_RUNTIME) WAVM_ADD_FUZZER_EXECUTABLE(fuzz-instantiate SOURCES fuzz-instantiate.cpp FuzzTargetCommonMain.h) WAVM_ADD_FUZZER_EXECUTABLE(fuzz-compile-model SOURCES fuzz-compile-model.cpp FuzzTargetCommonMain.h) endif() ================================================ FILE: Test/fuzz/FuzzTargetCommonMain.h ================================================ #pragma once #include "WAVM/Inline/Config.h" #if !WAVM_ENABLE_LIBFUZZER #include #include #include "WAVM/Inline/CLI.h" #include "WAVM/Platform/File.h" #include "WAVM/Platform/Mutex.h" #include "WAVM/Platform/Thread.h" #include "WAVM/VFS/VFS.h" using namespace WAVM; extern "C" I32 LLVMFuzzerTestOneInput(const U8* data, Uptr numBytes); // Given either a directory or file path, builds a list of file paths. If the path is to a // directory, the directory is recursively enumerated. // If any file system error occurs, the enumeration is aborted and the error is returned. static VFS::Result enumInputs(const char* fileOrDirectoryPath, std::vector& outFilePaths, Uptr depth = 0) { if(depth > 1000) { return VFS::Result::tooManyLinksInPath; } VFS::DirEntStream* dirEntStream = nullptr; VFS::Result result = Platform::getHostFS().openDir(fileOrDirectoryPath, dirEntStream); if(result != VFS::Result::success) { // If the path couldn't be opened as a directory, assume that it must be a file. outFilePaths.push_back(fileOrDirectoryPath); return VFS::Result::success; } else { VFS::DirEnt dirEnt; while(dirEntStream->getNext(dirEnt)) { if(dirEnt.name != "." && dirEnt.name != "..") { const std::string dirEntPath = std::string(fileOrDirectoryPath) + '/' + dirEnt.name; result = enumInputs(dirEntPath.c_str(), outFilePaths, depth + 1); if(result != VFS::Result::success) { break; } } }; dirEntStream->close(); return result; } } struct SharedState { Platform::Mutex mutex; std::vector inputFilePaths; std::atomic numErrors{0}; }; static I64 threadMain(void* sharedStateVoid) { SharedState* sharedState = (SharedState*)sharedStateVoid; I64 numInputsProcessed = 0; while(true) { std::string inputFilePath; { Platform::Mutex::Lock sharedStateLock(sharedState->mutex); if(!sharedState->inputFilePaths.size()) { break; } inputFilePath = std::move(sharedState->inputFilePaths.back()); sharedState->inputFilePaths.pop_back(); } std::vector inputBytes; if(!loadFile(inputFilePath.c_str(), inputBytes)) { ++sharedState->numErrors; } else { LLVMFuzzerTestOneInput(inputBytes.data(), inputBytes.size()); ++numInputsProcessed; } }; return numInputsProcessed; } I32 main(int argc, char** argv) { if(!initLogFromEnvironment()) { return EXIT_FAILURE; } const char* inputPath = nullptr; Uptr maxThreads = UINTPTR_MAX; for(int argIndex = 1; argIndex < argc; ++argIndex) { const char* suffix = nullptr; if(stringStartsWith(argv[argIndex], "--max-threads=", suffix)) { long value = atol(suffix); if(value < 1) { Log::printf(Log::error, "--max-threads must be >= 1\n"); return EXIT_FAILURE; } maxThreads = Uptr(value); } else if(!inputPath) { inputPath = argv[argIndex]; } else { Log::printf( Log::error, "Usage: %s [--max-threads=N] \n", argv[0]); return EXIT_FAILURE; } } if(!inputPath) { Log::printf(Log::error, "Usage: %s [--max-threads=N] \n", argv[0]); return EXIT_FAILURE; } SharedState sharedState; VFS::Result result = enumInputs(inputPath, sharedState.inputFilePaths); if(result != VFS::Result::success) { Log::printf(Log::error, "Error reading '%s': %s\n", inputPath, VFS::describeResult(result)); return EXIT_FAILURE; } // Create a thread for each hardware thread, up to the max-threads limit. std::vector threads; const Uptr numHardwareThreads = Platform::getNumberOfHardwareThreads(); Uptr numThreads = std::min(numHardwareThreads, Uptr(sharedState.inputFilePaths.size())); numThreads = std::min(numThreads, maxThreads); for(Uptr threadIndex = 0; threadIndex < numThreads; ++threadIndex) { threads.push_back(Platform::createThread(8 * 1024 * 1024, threadMain, &sharedState)); } // Wait for the threads to exit. I64 numInputsProcessed = 0; for(Platform::Thread* thread : threads) { numInputsProcessed += Platform::joinThread(thread); } Log::printf(Log::output, "%" PRIi64 " inputs processed.\n", numInputsProcessed); return sharedState.numErrors == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } #endif ================================================ FILE: Test/fuzz/ModuleMatcher.h ================================================ #pragma once #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Errors.h" namespace WAVM { using namespace WAVM::IR; struct ModuleMatcher { ModuleMatcher(const Module& inA, const Module& inB) : aModule(inA), bModule(inB) {} void verify() { verifyMatches(aModule.imports, bModule.imports); verifyMatches(aModule.exports, bModule.exports); verifyMatches(aModule.functions, bModule.functions); verifyMatches(aModule.tables, bModule.tables); verifyMatches(aModule.memories, bModule.memories); verifyMatches(aModule.globals, bModule.globals); verifyMatches(aModule.exceptionTypes, bModule.exceptionTypes); if(aModule.startFunctionIndex != bModule.startFunctionIndex) { failVerification(); } if(aModule.dataSegments.size() != bModule.dataSegments.size()) { failVerification(); } for(Uptr segmentIndex = 0; segmentIndex < aModule.dataSegments.size(); ++segmentIndex) { const DataSegment& segment = aModule.dataSegments[segmentIndex]; const DataSegment& wastSegment = bModule.dataSegments[segmentIndex]; if(segment.isActive != wastSegment.isActive) { failVerification(); } if(segment.isActive && (segment.memoryIndex != wastSegment.memoryIndex || segment.baseOffset != wastSegment.baseOffset || *segment.data != *wastSegment.data)) { failVerification(); } } if(aModule.elemSegments.size() != bModule.elemSegments.size()) { failVerification(); } for(Uptr segmentIndex = 0; segmentIndex < aModule.elemSegments.size(); ++segmentIndex) { const ElemSegment& aSegment = aModule.elemSegments[segmentIndex]; const ElemSegment& bSegment = bModule.elemSegments[segmentIndex]; if(aSegment.type != bSegment.type || aSegment.contents->encoding != bSegment.contents->encoding) { failVerification(); } if(aSegment.type == ElemSegment::Type::active && (aSegment.tableIndex != bSegment.tableIndex || aSegment.baseOffset != bSegment.baseOffset)) { failVerification(); } switch(aSegment.contents->encoding) { case ElemSegment::Encoding::expr: if(aSegment.contents->elemType != bSegment.contents->elemType || aSegment.contents->elemExprs != bSegment.contents->elemExprs) { failVerification(); } break; case ElemSegment::Encoding::index: if(aSegment.contents->externKind != bSegment.contents->externKind || aSegment.contents->elemIndices != bSegment.contents->elemIndices) { failVerification(); } break; default: WAVM_UNREACHABLE(); }; } if(aModule.customSections.size() != bModule.customSections.size()) { failVerification(); } for(Uptr customSectionIndex = 0; customSectionIndex < aModule.customSections.size(); ++customSectionIndex) { const CustomSection& aSection = aModule.customSections[customSectionIndex]; const CustomSection& bSection = bModule.customSections[customSectionIndex]; if(aSection.afterSection != bSection.afterSection || aSection.name != bSection.name || aSection.data != bSection.data) { failVerification(); } } } private: const Module& aModule; const Module& bModule; const FunctionDef* aFunction = nullptr; const FunctionDef* bFunction = nullptr; [[noreturn]] void failVerification() { Errors::fatal("Disassembled module doesn't match the input"); } void verifyMatches(const IndexedFunctionType& a, const IndexedFunctionType& b) { if(aModule.types[a.index] != bModule.types[b.index]) { failVerification(); } } void verifyMatches(const KindAndIndex& a, const KindAndIndex& b) { if(a.kind != b.kind || a.index != b.index) { failVerification(); } } void verifyMatches(const Export& a, const Export& b) { if(a.name != b.name || a.kind != b.kind || a.index != b.index) { failVerification(); } } template void verifyMatches(const Import& a, const Import& b) { verifyMatches(a.type, b.type); if(a.moduleName != b.moduleName || a.exportName != b.exportName) { failVerification(); } } void verifyMatches(NoImm, NoImm) {} void verifyMatches(MemoryImm a, MemoryImm b) { if(a.memoryIndex != b.memoryIndex) { failVerification(); } } void verifyMatches(MemoryCopyImm a, MemoryCopyImm b) { if(a.sourceMemoryIndex != b.sourceMemoryIndex || a.destMemoryIndex != b.destMemoryIndex) { failVerification(); } } void verifyMatches(TableImm a, TableImm b) { if(a.tableIndex != b.tableIndex) { failVerification(); } } void verifyMatches(TableCopyImm a, TableCopyImm b) { if(a.sourceTableIndex != b.sourceTableIndex || a.destTableIndex != b.destTableIndex) { failVerification(); } } void verifyMatches(ControlStructureImm a, ControlStructureImm b) { if(resolveBlockType(aModule, a.type) != resolveBlockType(bModule, b.type)) { failVerification(); } } void verifyMatches(SelectImm a, SelectImm b) { if(a.type != b.type) { failVerification(); } } void verifyMatches(BranchImm a, BranchImm b) { if(a.targetDepth != b.targetDepth) { failVerification(); } } void verifyMatches(BranchTableImm a, BranchTableImm b) { if(a.defaultTargetDepth != b.defaultTargetDepth || aFunction->branchTables[a.branchTableIndex] != bFunction->branchTables[b.branchTableIndex]) { failVerification(); } } template void verifyMatches(LiteralImm a, LiteralImm b) { if(memcmp(&a.value, &b.value, sizeof(Value))) { failVerification(); } } template void verifyMatches(GetOrSetVariableImm a, GetOrSetVariableImm b) { if(a.variableIndex != b.variableIndex) { failVerification(); } } void verifyMatches(FunctionImm a, FunctionImm b) { if(a.functionIndex != b.functionIndex) { failVerification(); } } void verifyMatches(FunctionRefImm a, FunctionRefImm b) { if(a.functionIndex != b.functionIndex) { failVerification(); } } void verifyMatches(CallIndirectImm a, CallIndirectImm b) { if(aModule.types[a.type.index] != bModule.types[b.type.index]) { failVerification(); } } void verifyMatches(BaseLoadOrStoreImm a, BaseLoadOrStoreImm b) { if(a.alignmentLog2 != b.alignmentLog2 || a.offset != b.offset || a.memoryIndex != b.memoryIndex) { failVerification(); } } template void verifyMatches(LaneIndexImm a, LaneIndexImm b) { if(a.laneIndex != b.laneIndex) { failVerification(); } } template void verifyMatches(ShuffleImm a, ShuffleImm b) { for(Uptr laneIndex = 0; laneIndex < numLanes; ++laneIndex) { if(a.laneIndices[laneIndex] != b.laneIndices[laneIndex]) { failVerification(); } } } void verifyMatches(AtomicFenceImm a, AtomicFenceImm b) { if(a.order != b.order) { failVerification(); } } void verifyMatches(ExceptionTypeImm a, ExceptionTypeImm b) { if(a.exceptionTypeIndex != b.exceptionTypeIndex) { failVerification(); } } void verifyMatches(RethrowImm a, RethrowImm b) { if(a.catchDepth != b.catchDepth) { failVerification(); } } void verifyMatches(DataSegmentAndMemImm a, DataSegmentAndMemImm b) { if(a.dataSegmentIndex != b.dataSegmentIndex) { failVerification(); } if(a.memoryIndex != b.memoryIndex) { failVerification(); } } void verifyMatches(DataSegmentImm a, DataSegmentImm b) { if(a.dataSegmentIndex != b.dataSegmentIndex) { failVerification(); } } void verifyMatches(ElemSegmentAndTableImm a, ElemSegmentAndTableImm b) { if(a.elemSegmentIndex != b.elemSegmentIndex) { failVerification(); } if(a.tableIndex != b.tableIndex) { failVerification(); } } void verifyMatches(ElemSegmentImm a, ElemSegmentImm b) { if(a.elemSegmentIndex != b.elemSegmentIndex) { failVerification(); } } void verifyMatches(ReferenceTypeImm a, ReferenceTypeImm b) { if(a.referenceType != b.referenceType) { failVerification(); } } void verifyMatches(const FunctionDef& a, const FunctionDef& b) { aFunction = &a; bFunction = &b; verifyMatches(a.type, b.type); if(a.nonParameterLocalTypes != b.nonParameterLocalTypes) { failVerification(); } if(a.code.size() != b.code.size()) { failVerification(); } const U8* aNextByte = a.code.data(); const U8* bNextByte = b.code.data(); const U8* aEnd = a.code.data() + a.code.size(); const U8* bEnd = b.code.data() + b.code.size(); while(aNextByte < aEnd && bNextByte < bEnd) { WAVM_ASSERT(aNextByte + sizeof(Opcode) <= aEnd); WAVM_ASSERT(bNextByte + sizeof(Opcode) <= bEnd); Opcode aOpcode; Opcode bOpcode; memcpy(&aOpcode, aNextByte, sizeof(Opcode)); memcpy(&bOpcode, bNextByte, sizeof(Opcode)); if(aOpcode != bOpcode) { failVerification(); } switch(aOpcode) { #define VISIT_OPCODE(opcode, name, nameString, Imm, ...) \ case Opcode::name: { \ WAVM_ASSERT(aNextByte + sizeof(OpcodeAndImm) <= aEnd); \ WAVM_ASSERT(bNextByte + sizeof(OpcodeAndImm) <= bEnd); \ OpcodeAndImm aEncodedOperator; \ OpcodeAndImm bEncodedOperator; \ memcpy(&aEncodedOperator, aNextByte, sizeof(OpcodeAndImm)); \ memcpy(&bEncodedOperator, bNextByte, sizeof(OpcodeAndImm)); \ aNextByte += sizeof(OpcodeAndImm); \ bNextByte += sizeof(OpcodeAndImm); \ verifyMatches(aEncodedOperator.imm, bEncodedOperator.imm); \ break; \ } WAVM_ENUM_OPERATORS(VISIT_OPCODE) #undef VISIT_OPCODE default: WAVM_UNREACHABLE(); } } WAVM_ASSERT(aNextByte == aEnd); WAVM_ASSERT(bNextByte == bEnd); aFunction = nullptr; bFunction = nullptr; } void verifyMatches(const TableType& a, const TableType& b) { if(a != b) { failVerification(); } } void verifyMatches(const MemoryType& a, const MemoryType& b) { if(a != b) { failVerification(); } } void verifyMatches(const MemoryDef& a, const MemoryDef& b) { verifyMatches(a.type, b.type); } void verifyMatches(const GlobalType& a, const GlobalType& b) { if(a != b) { failVerification(); } } void verifyMatches(const GlobalDef& a, const GlobalDef& b) { verifyMatches(a.type, b.type); if(a.initializer != b.initializer) { failVerification(); } } void verifyMatches(const ExceptionType& a, const ExceptionType& b) { if(a != b) { failVerification(); } } void verifyMatches(const ExceptionTypeDef& a, const ExceptionTypeDef& b) { verifyMatches(a.type, b.type); } void verifyMatches(const TableDef& a, const TableDef& b) { verifyMatches(a.type, b.type); } template void verifyMatches(const std::vector& a, const std::vector& b) { if(a.size() != b.size()) { failVerification(); } for(Uptr index = 0; index < a.size(); ++index) { verifyMatches(a[index], b[index]); } } template void verifyMatches(const IndexSpace& a, const IndexSpace& b) { verifyMatches(a.imports, b.imports); verifyMatches(a.defs, b.defs); } }; } ================================================ FILE: Test/fuzz/fuzz-assemble.cpp ================================================ #include #include "FuzzTargetCommonMain.h" #include "ModuleMatcher.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Errors.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" using namespace WAVM; using namespace WAVM::IR; extern "C" I32 LLVMFuzzerTestOneInput(const U8* data, Uptr numBytes) { // Copy the data to a std::vector and append a null terminator. std::vector wastBytes(data, data + numBytes); wastBytes.push_back(0); Module wastModule(FeatureLevel::wavm); std::vector parseErrors; if(WAST::parseModule((const char*)wastBytes.data(), wastBytes.size(), wastModule, parseErrors)) { std::vector wasmBytes = WASM::saveBinaryModule(wastModule); Module wasmModule(FeatureLevel::wavm); { WASM::LoadError loadError; if(!WASM::loadBinaryModule(wasmBytes.data(), wasmBytes.size(), wasmModule, &loadError)) { Errors::fatalf("Failed to load the generated WASM binary: %s", loadError.message.c_str()); } } ModuleMatcher moduleMatcher(wastModule, wasmModule); moduleMatcher.verify(); } return 0; } ================================================ FILE: Test/fuzz/fuzz-compile-model.cpp ================================================ #include #include #include "FuzzTargetCommonMain.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/RandomModule.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/RandomStream.h" #include "WAVM/LLVMJIT/LLVMJIT.h" #include "WAVM/Logging/Logging.h" #if !WAVM_ENABLE_LIBFUZZER #include "WAVM/WASTPrint/WASTPrint.h" #endif namespace WAVM { namespace IR { struct Module; }} using namespace WAVM; using namespace WAVM::IR; static LLVMJIT::TargetSpec makeTargetSpec(LLVMJIT::TargetArch arch, LLVMJIT::TargetOS os, const char* cpu) { LLVMJIT::TargetSpec spec; spec.arch = arch; spec.os = os; spec.cpu = cpu; return spec; } static void compileModule(const IR::Module& module, RandomStream& random) { using Arch = LLVMJIT::TargetArch; using OS = LLVMJIT::TargetOS; const LLVMJIT::TargetSpec possibleTargetSpecs[] = { makeTargetSpec(Arch::x86_64, OS::windows, "skylake-avx512"), makeTargetSpec(Arch::x86_64, OS::macos, "skylake-avx512"), makeTargetSpec(Arch::x86_64, OS::linux_, "skylake-avx512"), makeTargetSpec(Arch::x86_64, OS::linux_, "skylake"), makeTargetSpec(Arch::x86_64, OS::linux_, "penryn"), makeTargetSpec(Arch::aarch64, OS::linux_, "cortex-a72"), }; static const Uptr numPossibleTargets = sizeof(possibleTargetSpecs) / sizeof(LLVMJIT::TargetSpec); const LLVMJIT::TargetSpec& targetSpec = possibleTargetSpecs[random.get(numPossibleTargets - 1)]; WAVM_ERROR_UNLESS(LLVMJIT::validateTarget(targetSpec, FeatureLevel::proposed) == LLVMJIT::TargetValidationResult::valid); std::vector objectCode = LLVMJIT::compileModule(module, targetSpec); } extern "C" I32 LLVMFuzzerTestOneInput(const U8* data, Uptr numBytes) { RandomStream random(data, numBytes); IR::Module module(FeatureLevel::wavm); IR::generateValidModule(module, random); #if !WAVM_ENABLE_LIBFUZZER std::string wastString = WAST::print(module); Log::printf(Log::Category::debug, "Generated module WAST:\n%s\n", wastString.c_str()); #endif compileModule(module, random); return 0; } ================================================ FILE: Test/fuzz/fuzz-disassemble.cpp ================================================ #include #include #include "FuzzTargetCommonMain.h" #include "ModuleMatcher.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Inline/Errors.h" #include "WAVM/Logging/Logging.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTParse/WASTParse.h" #include "WAVM/WASTPrint/WASTPrint.h" using namespace WAVM; using namespace WAVM::IR; extern "C" I32 LLVMFuzzerTestOneInput(const U8* data, Uptr numBytes) { Module module(FeatureLevel::wavm); module.featureSpec.maxLabelsPerFunction = 65536; module.featureSpec.maxLocals = 1024; module.featureSpec.maxDataSegments = 65536; if(WASM::loadBinaryModule(data, numBytes, module)) { const std::string wastString = WAST::print(module); Module wastModule(FeatureLevel::wavm); std::vector parseErrors; if(!WAST::parseModule( (const char*)wastString.c_str(), wastString.size() + 1, wastModule, parseErrors)) { Log::printf(Log::error, "Disassembled module:\n%s\n", wastString.c_str()); WAST::reportParseErrors("disassembly", wastString.c_str(), parseErrors); Errors::fatal("Disassembled module contained syntax errors"); } // Strip any name section from both WAST and WASM module, since disassembling and // re-assembling the module doesn't produce exactly the same name section. for(auto sectionIt = module.customSections.begin(); sectionIt != module.customSections.end();) { if(sectionIt->name != "name") { ++sectionIt; } else { sectionIt = module.customSections.erase(sectionIt); } } for(auto sectionIt = wastModule.customSections.begin(); sectionIt != wastModule.customSections.end();) { if(sectionIt->name != "name") { ++sectionIt; } else { sectionIt = wastModule.customSections.erase(sectionIt); } } ModuleMatcher moduleMatcher(module, wastModule); moduleMatcher.verify(); } return 0; } ================================================ FILE: Test/fuzz/fuzz-instantiate.cpp ================================================ #include #include #include "FuzzTargetCommonMain.h" #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/Operators.h" #include "WAVM/IR/Validate.h" #include "WAVM/Inline/Assert.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/Config.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Runtime/Linker.h" #include "WAVM/Runtime/Runtime.h" #if !WAVM_ENABLE_LIBFUZZER #include "WAVM/WASTPrint/WASTPrint.h" #endif using namespace WAVM; using namespace WAVM::Runtime; extern "C" I32 LLVMFuzzerTestOneInput(const U8* data, Uptr numBytes) { IR::FeatureSpec featureSpec(IR::FeatureLevel::wavm); featureSpec.maxLabelsPerFunction = 65536; featureSpec.maxLocals = 1024; featureSpec.maxDataSegments = 65536; Runtime::ModuleRef module; if(!Runtime::loadBinaryModule(data, numBytes, module, featureSpec)) { return 0; } const IR::Module& moduleIR = getModuleIR(module); #if !WAVM_ENABLE_LIBFUZZER std::string wastString = WAST::print(moduleIR); Log::printf(Log::Category::debug, "Disassembly:\n%s\n", wastString.c_str()); #endif // Use a resource quota to limit the amount of memory a single instance can allocate. ResourceQuotaRef resourceQuota = createResourceQuota(); setResourceQuotaMaxTableElems(resourceQuota, 65536); setResourceQuotaMaxMemoryPages(resourceQuota, 8192); GCPointer compartment = createCompartment(); { StubResolver stubResolver(compartment, StubFunctionBehavior::zero, false, resourceQuota); LinkResult linkResult = linkModule(moduleIR, stubResolver); if(linkResult.success) { catchRuntimeExceptions( [&] { instantiateModule(compartment, module, std::move(linkResult.resolvedImports), "fuzz", resourceQuota); }, [&](Exception* exception) { destroyException(exception); }); } } WAVM_ERROR_UNLESS(tryCollectCompartment(std::move(compartment))); return 0; } ================================================ FILE: Test/fuzz/translate-compile-model-corpus.cpp ================================================ #include #include #include #include "WAVM/IR/FeatureSpec.h" #include "WAVM/IR/Module.h" #include "WAVM/IR/RandomModule.h" #include "WAVM/Inline/BasicTypes.h" #include "WAVM/Inline/CLI.h" #include "WAVM/Inline/RandomStream.h" #include "WAVM/Logging/Logging.h" #include "WAVM/Platform/File.h" #include "WAVM/VFS/VFS.h" #include "WAVM/WASM/WASM.h" #include "WAVM/WASTPrint/WASTPrint.h" namespace WAVM { namespace IR { struct Module; }} using namespace WAVM; using namespace WAVM::IR; I32 main(int argc, char** argv) { if(argc != 4) { Log::printf( Log::error, "Usage: translate-compile-model-corpus \n"); return EXIT_FAILURE; } const std::string inputDir = argv[1]; const std::string wasmOutputDir = argv[2]; const std::string wastOutputDir = argv[3]; VFS::DirEntStream* dirEntStream = nullptr; VFS::Result result = Platform::getHostFS().openDir(inputDir, dirEntStream); if(result != VFS::Result::success) { Log::printf(Log::error, "Error opening directory '%s': %s\n", inputDir.c_str(), VFS::describeResult(result)); return EXIT_FAILURE; } I32 exitCode = EXIT_SUCCESS; VFS::DirEnt dirEnt; while(dirEntStream->getNext(dirEnt)) { const std::string inputFilePath = inputDir + '/' + dirEnt.name; // loadFile might fail if dirEnt was a symbolic link to a directory, so just continue to // the next dirent if it fails. std::vector inputBytes; if(loadFile(inputFilePath.c_str(), inputBytes)) { RandomStream random(inputBytes.data(), inputBytes.size()); IR::Module module(IR::FeatureLevel::wavm); IR::generateValidModule(module, random); std::vector wasmBytes = WASM::saveBinaryModule(module); const std::string wasmFilePath = wasmOutputDir + "/compile-model-translated-" + dirEnt.name + ".wasm"; if(!saveFile(wasmFilePath.c_str(), wasmBytes.data(), wasmBytes.size())) { exitCode = EXIT_FAILURE; break; } std::string wastString = WAST::print(module); const std::string wastFilePath = wastOutputDir + "/compile-model-translated-" + dirEnt.name + ".wast"; if(!saveFile(wastFilePath.c_str(), wastString.data(), wastString.size())) { exitCode = EXIT_FAILURE; break; } } }; dirEntStream->close(); return exitCode; } ================================================ FILE: Test/fuzz/wastFuzzDictionary.txt ================================================ # Keywords "module" "func" "type" "table" "export" "import" "memory" "data" "elem" "start" "param" "result" "local" "global" "assert_return" "assert_return_arithmetic_nan" "assert_return_canonical_nan" "assert_return_arithmetic_nan_f32x4" "assert_return_canonical_nan_f32x4" "assert_return_arithmetic_nan_f64x2" "assert_return_canonical_nan_f64x2" "assert_return_func" "assert_trap" "assert_throws" "assert_invalid" "assert_unlinkable" "assert_malformed" "assert_exhaustion" "benchmark" "invoke" "get" "align" "offset" "item" "then" "register" "mut" "i32" "i64" "f32" "f64" "i8x16" "i16x8" "i32x4" "i64x2" "f32x4" "f64x2" "externref" "funcref" "extern" "declare" "shared" "quote" "binary" "v128" "exception_type" "custom_section" "after" "before" "data_count" "code" "calling_conv" "intrinsic" "intrinsic_with_context_switch" "c" "c_api_callback" "ref.host" # Whitespace space=" " tab="\x09" cr="\x0d" lf="\x0a" crlf="\x0d\x0a" # Comments ";;" "(;" ";)" "(; comment ;)" # Symbols "(" ")" "=" # Operators "block" "loop" "if" "else" "end" "try" "catch" "catch_all" "unreachable" "br" "br_if" "br_table" "return" "call" "call_indirect" "drop" "select" "local.get" "local.set" "local.tee" "global.get" "global.set" "table.get" "table.set" "nop" "memory.size" "memory.grow" "i32.load" "i64.load" "f32.load" "f64.load" "i32.load8_s" "i32.load8_u" "i32.load16_s" "i32.load16_u" "i64.load8_s" "i64.load8_u" "i64.load16_s" "i64.load16_u" "i64.load32_s" "i64.load32_u" "i32.store" "i64.store" "f32.store" "f64.store" "i32.store8" "i32.store16" "i64.store8" "i64.store16" "i64.store32" "i32.const" "i64.const" "f32.const" "f64.const" "i32.eqz" "i32.eq" "i32.ne" "i32.lt_s" "i32.lt_u" "i32.gt_s" "i32.gt_u" "i32.le_s" "i32.le_u" "i32.ge_s" "i32.ge_u" "i64.eqz" "i64.eq" "i64.ne" "i64.lt_s" "i64.lt_u" "i64.gt_s" "i64.gt_u" "i64.le_s" "i64.le_u" "i64.ge_s" "i64.ge_u" "f32.eq" "f32.ne" "f32.lt" "f32.gt" "f32.le" "f32.ge" "f64.eq" "f64.ne" "f64.lt" "f64.gt" "f64.le" "f64.ge" "i32.clz" "i32.ctz" "i32.popcnt" "i32.add" "i32.sub" "i32.mul" "i32.div_s" "i32.div_u" "i32.rem_s" "i32.rem_u" "i32.and" "i32.or" "i32.xor" "i32.shl" "i32.shr_s" "i32.shr_u" "i32.rotl" "i32.rotr" "i64.clz" "i64.ctz" "i64.popcnt" "i64.add" "i64.sub" "i64.mul" "i64.div_s" "i64.div_u" "i64.rem_s" "i64.rem_u" "i64.and" "i64.or" "i64.xor" "i64.shl" "i64.shr_s" "i64.shr_u" "i64.rotl" "i64.rotr" "f32.abs" "f32.neg" "f32.ceil" "f32.floor" "f32.trunc" "f32.nearest" "f32.sqrt" "f32.add" "f32.sub" "f32.mul" "f32.div" "f32.min" "f32.max" "f32.copysign" "f64.abs" "f64.neg" "f64.ceil" "f64.floor" "f64.trunc" "f64.nearest" "f64.sqrt" "f64.add" "f64.sub" "f64.mul" "f64.div" "f64.min" "f64.max" "f64.copysign" "i32.wrap_i64" "i32.trunc_f32_s" "i32.trunc_f32_u" "i32.trunc_f64_s" "i32.trunc_f64_u" "i64.extend_i32_s" "i64.extend_i32_u" "i64.trunc_f32_s" "i64.trunc_f32_u" "i64.trunc_f64_s" "i64.trunc_f64_u" "f32.convert_i32_s" "f32.convert_i32_u" "f32.convert_i64_s" "f32.convert_i64_u" "f32.demote_f64" "f64.convert_i32_s" "f64.convert_i32_u" "f64.convert_i64_s" "f64.convert_i64_u" "f64.promote_f32" "i32.reinterpret_f32" "i64.reinterpret_f64" "f32.reinterpret_i32" "f64.reinterpret_i64" "i32.extend8_s" "i32.extend16_s" "i64.extend8_s" "i64.extend16_s" "i64.extend32_s" "ref.null" "ref.is_null" "v128.load" "v128.load8x8_s" "v128.load8x8_u" "v128.load16x4_s" "v128.load16x4_u" "v128.load32x2_s" "v128.load32x2_u" "v128.load8_splat" "v128.load16_splat" "v128.load32_splat" "v128.load64_splat" "v128.store" "v128.load8_lane" "v128.load16_lane" "v128.load32_lane" "v128.load64_lane" "v128.store8_lane" "v128.store16_lane" "v128.store32_lane" "v128.store64_lane" "v128.const" "i8x16.shuffle" "i8x16.swizzle" "i8x16.splat" "i16x8.splat" "i32x4.splat" "i64x2.splat" "f32x4.splat" "f64x2.splat" "i8x16.extract_lane_s" "i8x16.extract_lane_u" "i8x16.replace_lane" "i16x8.extract_lane_s" "i16x8.extract_lane_u" "i16x8.replace_lane" "i32x4.extract_lane" "i32x4.replace_lane" "i64x2.extract_lane" "i64x2.replace_lane" "f32x4.extract_lane" "f32x4.replace_lane" "f64x2.extract_lane" "f64x2.replace_lane" "i8x16.eq" "i8x16.ne" "i8x16.lt_s" "i8x16.lt_u" "i8x16.gt_s" "i8x16.gt_u" "i8x16.le_s" "i8x16.le_u" "i8x16.ge_s" "i8x16.ge_u" "i16x8.eq" "i16x8.ne" "i16x8.lt_s" "i16x8.lt_u" "i16x8.gt_s" "i16x8.gt_u" "i16x8.le_s" "i16x8.le_u" "i16x8.ge_s" "i16x8.ge_u" "i32x4.eq" "i32x4.ne" "i32x4.lt_s" "i32x4.lt_u" "i32x4.gt_s" "i32x4.gt_u" "i32x4.le_s" "i32x4.le_u" "i32x4.ge_s" "i32x4.ge_u" "f32x4.eq" "f32x4.ne" "f32x4.lt" "f32x4.gt" "f32x4.le" "f32x4.ge" "f64x2.eq" "f64x2.ne" "f64x2.lt" "f64x2.gt" "f64x2.le" "f64x2.ge" "v128.not" "v128.and" "v128.andnot" "v128.or" "v128.xor" "v128.bitselect" "v128.any_true" "f32x4.demote_f64x2_zero" "f64x2.promote_low_f32x4" "i8x16.abs" "i8x16.neg" "i8x16.popcnt" "i8x16.all_true" "i8x16.bitmask" "i8x16.narrow_i16x8_s" "i8x16.narrow_i16x8_u" "i8x16.extend_low_i4x32_s" "i8x16.extend_high_i4x32_s" "i8x16.extend_low_i4x32_u" "i8x16.extend_high_i4x32_u" "i8x16.shl" "i8x16.shr_s" "i8x16.shr_u" "i8x16.add" "i8x16.add_sat_s" "i8x16.add_sat_u" "i8x16.sub" "i8x16.sub_sat_s" "i8x16.sub_sat_u" "i8x16.dot_i4x32_s" "i8x16.mul" "i8x16.min_s" "i8x16.min_u" "i8x16.max_s" "i8x16.max_u" "i8x16.avgr_s" "i8x16.avgr_u" "i16x8_extadd_pairwise_i8x16_s" "i16x8_extadd_pairwise_i8x16_u" "i32x4_extadd_pairwise_i16x8_s" "i32x4_extadd_pairwise_i16x8_u" "i16x8.abs" "i16x8.neg" "i16x8.all_true" "i16x8.bitmask" "i16x8.narrow_i32x4_s" "i16x8.narrow_i32x4_u" "i16x8.extend_low_i8x16_s" "i16x8.extend_high_i8x16_s" "i16x8.extend_low_i8x16_u" "i16x8.extend_high_i8x16_u" "i16x8.shl" "i16x8.shr_s" "i16x8.shr_u" "i16x8.add" "i16x8.add_sat_s" "i16x8.add_sat_u" "i16x8.sub" "i16x8.sub_sat_s" "i16x8.sub_sat_u" "i16x8.dot_i8x16_s" "i16x8.mul" "i16x8.min_s" "i16x8.min_u" "i16x8.max_s" "i16x8.max_u" "i16x8.avgr_s" "i16x8.avgr_u" "i16x8.extmul_low_i8x16_s" "i16x8.extmul_high_i8x16_s" "i16x8.extmul_low_i8x16_u" "i16x8.extmul_high_i8x16_u" "i32x4.abs" "i32x4.neg" "i32x4.all_true" "i32x4.bitmask" "i32x4.narrow_i64x2_s" "i32x4.narrow_i64x2_u" "i32x4.extend_low_i16x8_s" "i32x4.extend_high_i16x8_s" "i32x4.extend_low_i16x8_u" "i32x4.extend_high_i16x8_u" "i32x4.shl" "i32x4.shr_s" "i32x4.shr_u" "i32x4.add" "i32x4.add_sat_s" "i32x4.add_sat_u" "i32x4.sub" "i32x4.sub_sat_s" "i32x4.sub_sat_u" "i32x4.dot_i16x8_s" "i32x4.mul" "i32x4.min_s" "i32x4.min_u" "i32x4.max_s" "i32x4.max_u" "i32x4.dot_i16x8_s" "i32x4.extmul_low_i16x8_s" "i32x4.extmul_high_i16x8_s" "i32x4.extmul_low_i16x8_u" "i32x4.extmul_high_i16x8_u" "i64x2.abs" "i64x2.neg" "i64x2.all_true" "i64x2.bitmask" "i32x4.narrow_i128x1_s" "i32x4.narrow_i128x1_u" "i64x2.extend_low_i32x4_s" "i64x2.extend_high_i32x4_s" "i64x2.extend_low_i32x4_u" "i64x2.extend_high_i32x4_u" "i64x2.shl" "i64x2.shr_s" "i64x2.shr_u" "i64x2.add" "i64x2.add_sat_s" "i64x2.add_sat_u" "i64x2.sub" "i64x2.sub_sat_s" "i64x2.sub_sat_u" "i64x2.mul" "i64x2.eq" "i64x2.ne" "i64x2.lt_s" "i64x2.gt_s" "i64x2.le_s" "i64x2.ge_s" "i64x2.extmul_low_i32x4_s" "i64x2.extmul_high_i32x4_s" "i64x2.extmul_low_i32x4_u" "i64x2.extmul_high_i32x4_u" "f32x4.abs" "f32x4.neg" "f32x4.round" "f32x4.sqrt" "f32x4.add" "f32x4.sub" "f32x4.mul" "f32x4.div" "f32x4.min" "f32x4.max" "f32x4.pmin" "f32x4.pmax" "f64x2.abs" "f64x2.neg" "f64x2.round" "f64x2.sqrt" "f64x2.add" "f64x2.sub" "f64x2.mul" "f64x2.div" "f64x2.min" "f64x2.max" "f64x2.pmin" "f64x2.pmax" "i32x4.trunc_sat_f32x4_s" "i32x4.trunc_sat_f32x4_u" "f32x4.convert_i32x4_s" "f32x4.convert_i32x4_u" "i32x4.trunc_sat_f64x2_s_zero" "i32x4.trunc_sat_f64x2_u_zero" "f64x2.convert_low_i32x4_s" "f64x2.convert_low_i32x4_u" "memory.atomic.notify" "memory.atomic.wait32" "memory.atomic.wait64" "atomic.fence" "i32.atomic.load" "i64.atomic.load" "i32.atomic.load8_u" "i32.atomic.load16_u" "i64.atomic.load8_u" "i64.atomic.load16_u" "i64.atomic.load32_u" "i32.atomic.store" "i64.atomic.store" "i32.atomic.store8" "i32.atomic.store16" "i64.atomic.store8" "i64.atomic.store16" "i64.atomic.store32" "i32.atomic.rmw.add" "i64.atomic.rmw.add" "i32.atomic.rmw8.add_u" "i32.atomic.rmw16.add_u" "i64.atomic.rmw8.add_u" "i64.atomic.rmw16.add_u" "i64.atomic.rmw32.add_u" "i32.atomic.rmw.sub" "i64.atomic.rmw.sub" "i32.atomic.rmw8.sub_u" "i32.atomic.rmw16.sub_u" "i64.atomic.rmw8.sub_u" "i64.atomic.rmw16.sub_u" "i64.atomic.rmw32.sub_u" "i32.atomic.rmw.and" "i64.atomic.rmw.and" "i32.atomic.rmw8.and_u" "i32.atomic.rmw16.and_u" "i64.atomic.rmw8.and_u" "i64.atomic.rmw16.and_u" "i64.atomic.rmw32.and_u" "i32.atomic.rmw.or" "i64.atomic.rmw.or" "i32.atomic.rmw8.or_u" "i32.atomic.rmw16.or_u" "i64.atomic.rmw8.or_u" "i64.atomic.rmw16.or_u" "i64.atomic.rmw32.or_u" "i32.atomic.rmw.xor" "i64.atomic.rmw.xor" "i32.atomic.rmw8.xor_u" "i32.atomic.rmw16.xor_u" "i64.atomic.rmw8.xor_u" "i64.atomic.rmw16.xor_u" "i64.atomic.rmw32.xor_u" "i32.atomic.rmw.xchg" "i64.atomic.rmw.xchg" "i32.atomic.rmw8.xchg_u" "i32.atomic.rmw16.xchg_u" "i64.atomic.rmw8.xchg_u" "i64.atomic.rmw16.xchg_u" "i64.atomic.rmw32.xchg_u" "i32.atomic.rmw.cmpxchg" "i64.atomic.rmw.cmpxchg" "i32.atomic.rmw8.cmpxchg_u" "i32.atomic.rmw16.cmpxchg_u" "i64.atomic.rmw8.cmpxchg_u" "i64.atomic.rmw16.cmpxchg_u" "i64.atomic.rmw32.cmpxchg_u" "throw" "rethrow" "i32.trunc_sat_f32_s" "i32.trunc_sat_f32_u" "i32.trunc_sat_f64_s" "i32.trunc_sat_f64_u" "i64.trunc_sat_f32_s" "i64.trunc_sat_f32_u" "i64.trunc_sat_f64_s" "i64.trunc_sat_f64_u" "memory.init" "data.drop" "memory.copy" "memory.fill" "table.init" "elem.drop" "table.copy" # Legacy aliases "nullref" "anyfunc" "get_local" "set_local" "tee_local" "get_global" "set_global" "i32.wrap/i64" "i32.trunc_s/f32" "i32.trunc_u/f32" "i32.trunc_s/f64" "i32.trunc_u/f64" "i64.extend_s/i32" "i64.extend_u/i32" "i64.trunc_s/f32" "i64.trunc_u/f32" "i64.trunc_s/f64" "i64.trunc_u/f64" "f32.convert_s/i32" "f32.convert_u/i32" "f32.convert_s/i64" "f32.convert_u/i64" "f32.demote/f64" "f64.convert_s/i32" "f64.convert_u/i32" "f64.convert_s/i64" "f64.convert_u/i64" "f64.promote/f32" "i32.reinterpret/f32" "i64.reinterpret/f64" "f32.reinterpret/i32" "f64.reinterpret/i64" "f32x4.convert_s/i32x4" "f32x4.convert_u/i32x4" "i32x4.trunc_s:sat/f32x4" "i32x4.trunc_u:sat/f32x4" "i32.trunc_s:sat/f32" "i32.trunc_u:sat/f32" "i32.trunc_s:sat/f64" "i32.trunc_u:sat/f64" "i64.trunc_s:sat/f32" "i64.trunc_u:sat/f32" "i64.trunc_s:sat/f64" "i64.trunc_u:sat/f64" # Literals "0" "1" "0.0" "-1" "0xffffffff" "0x100000000" "42.0" "-0x1000000000" # Strings "\"\"" "\"\\00\"" "\"\\00\\01\"" "\"abcd\"" # Names "$a" "$b" "$c" "$_1" "$_2" "$_3" # Operators + immediates "(i32.const 0)" "(i64.const 0)" "(f32.const 0.0)" "(f64.const 0.0)" "(v128.const i64x2 0 0)" "(drop)" "(local.get 0)" "(local.get 1)" "(local.tee 0)" "(local.tee 1)" "(unreachable)" "(return)" "(br 0)" "(block)" "(loop)" "(i32.const 0) (if (then) (else))" "(i32.const 1) (if (then) (else))" "(if (i32.const 0) (then) (else))" "(if (i32.const 1) (then) (else))" "(if (i32.const 0) (then))" "(if (i32.const 1) (then))" "(if i32 (i32.const 0) (i32.const 1) (i32.const 2))" "(if i32 (i32.const 1) (i32.const 2) (i32.const 3))" "(if i32 (i32.const 0) (i32.const 1))" "(if i32 (i32.const 1) (i32.const 2))" "(i32.const 0) if else end" "(i32.const 1) if else end" "(i32.const 0) if end" "(i32.const 1) if end" "try catch_all end" ================================================ FILE: Test/object-cache/module_a.wast ================================================ ;; A minimal module used by the object_cache multi-step test. (module (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 1) (data (i32.const 8) "\10\00\00\00" ;; buf = 16 "\02\00\00\00" ;; buf_len = 2 ) (data (i32.const 16) "A\n") (func (export "_start") (call $wasi_fd_write (i32.const 1) (i32.const 8) (i32.const 1) (i32.const 4)) (call $wasi_proc_exit) ) ) ================================================ FILE: Test/object-cache/module_b.wast ================================================ ;; A minimal module used by the object_cache multi-step test. ;; Different from object_cache_a.wast to produce a different module hash. (module (import "wasi_unstable" "fd_write" (func $wasi_fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_unstable" "proc_exit" (func $wasi_proc_exit (param i32))) (memory (export "memory") 1) (data (i32.const 8) "\10\00\00\00" ;; buf = 16 "\02\00\00\00" ;; buf_len = 2 ) (data (i32.const 16) "B\n") (func (export "_start") (call $wasi_fd_write (i32.const 1) (i32.const 8) (i32.const 1) (i32.const 4)) (call $wasi_proc_exit) ) ) ================================================ FILE: Test/wasi/cpp/append.cpp ================================================ #include #include #include #include #include int main(int argc, char** argv) { if(argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } size_t stringLength = strlen(argv[2]); int fd = open(argv[1], O_WRONLY | O_APPEND | O_CREAT); if(fd == -1) { fprintf(stderr, "Failed to open '%s' for writing: %s\n", argv[1], strerror(errno)); return 1; } ssize_t writeResult = write(fd, argv[2], stringLength); if(writeResult != (ssize_t)stringLength) { fprintf(stderr, "Failed to write string to '%s': write returned %zi, errno = %s.\n", argv[1], writeResult, strerror(errno)); return 1; } const char newline = '\n'; writeResult = write(fd, &newline, 1); if(writeResult != 1) { fprintf(stderr, "Failed to write newline to '%s': write returned %zi, errno = %s.\n", argv[1], writeResult, strerror(errno)); return 1; } int closeResult = close(fd); if(closeResult != 0) { fprintf(stderr, "Failed to close '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/args.cpp ================================================ #include int main(int argc, char** argv) { printf("argc=%i\n", argc); for(int argIndex = 0; argIndex <= argc; ++argIndex) { printf("argv[%i]: %s\n", argIndex, argv[argIndex] == NULL ? "" : argv[argIndex]); } return 0; } ================================================ FILE: Test/wasi/cpp/cat.cpp ================================================ #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } FILE* file = fopen(argv[1], "rb"); if(!file) { printf("Failed to open '%s' for reading: %s\n", argv[1], strerror(errno)); return 1; } while(true) { char buffer[4096]; const size_t numBytesRead = fread(buffer, 1, sizeof(buffer), file); if(numBytesRead != sizeof(buffer) && ferror(file)) { printf("Failed to read from '%s': %s.\n", argv[1], strerror(errno)); return 1; } size_t numWrittenBytes = 0; while(numWrittenBytes < numBytesRead) { const ssize_t writeResult = write(1, buffer + numWrittenBytes, numBytesRead - numWrittenBytes); if(writeResult == -1) { printf("Failed to write to stdout: %s.\n", strerror(errno)); return 1; } else { numWrittenBytes += writeResult; } }; if(numBytesRead < sizeof(buffer)) { break; } }; const int closeResult = fclose(file); if(closeResult != 0) { printf("Failed to close '%s': fclose returned %i.\n", argv[1], closeResult); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/clock.cpp ================================================ #include #include #include #include #include #include #include const char* formatTime(time_t time) { static char buffer[256]; struct tm* utc = gmtime(&time); snprintf(buffer, sizeof(buffer), "%u/%u/%u %u:%u:%u UTC", 1900 + utc->tm_year, 1 + utc->tm_mon, utc->tm_mday, utc->tm_hour, utc->tm_min, utc->tm_sec); return buffer; } static void printClock(clockid_t clockId, const char* name) { struct timespec ts; if(clock_gettime(clockId, &ts)) { fprintf(stderr, "clock_gettime(%s) failed: %s\n", name, strerror(errno)); exit(1); } if(clockId == CLOCK_REALTIME) { printf("%s: %s + %lu ns\n", name, formatTime(ts.tv_sec), ts.tv_nsec); } else { printf("%s: %" PRIu64 " s + %lu ns\n", name, (uint64_t)ts.tv_sec, ts.tv_nsec); } } int main(int argc, char** argv) { printClock(CLOCK_REALTIME, "CLOCK_REALTIME"); printClock(CLOCK_MONOTONIC, "CLOCK_MONOTONIC"); } ================================================ FILE: Test/wasi/cpp/clock_res.cpp ================================================ #include #include #include #include #include static void testClockRes(clockid_t clockId, const char* name) { struct timespec res; if(clock_getres(clockId, &res)) { fprintf(stderr, "clock_getres(%s) failed: %s\n", name, strerror(errno)); exit(1); } printf("%s resolution: %ld s + %ld ns\n", name, (long)res.tv_sec, res.tv_nsec); if(res.tv_sec == 0 && res.tv_nsec == 0) { fprintf(stderr, "%s: resolution is zero\n", name); exit(1); } } int main(int argc, char** argv) { testClockRes(CLOCK_REALTIME, "CLOCK_REALTIME"); testClockRes(CLOCK_MONOTONIC, "CLOCK_MONOTONIC"); printf("clock_res: passed\n"); return 0; } ================================================ FILE: Test/wasi/cpp/environ.cpp ================================================ #include #include extern char** environ; int main(int argc, char** argv) { int envCount = 0; if(environ) { for(char** env = environ; *env != NULL; ++env) { ++envCount; } } printf("environ_count: %d\n", envCount); const char* pathValue = getenv("PATH"); if(pathValue) { printf("PATH: %s\n", pathValue); } else { printf("PATH: not set\n"); } printf("environ: passed\n"); return 0; } ================================================ FILE: Test/wasi/cpp/exit.cpp ================================================ #include int main(int argc, char** argv) { exit(0); return 1; } ================================================ FILE: Test/wasi/cpp/fd_fdstat.cpp ================================================ #include #include #include #include #include #include #include int main(int argc, char** argv) { const char testData[] = "File stat test data."; const size_t testDataLen = sizeof(testData) - 1; int fd = open("fdstat_test.txt", O_RDWR | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Failed to open file: %s\n", strerror(errno)); return 1; } ssize_t written = write(fd, testData, testDataLen); if(written != (ssize_t)testDataLen) { fprintf(stderr, "Failed to write: %s\n", strerror(errno)); return 1; } struct stat fileStat; if(fstat(fd, &fileStat) != 0) { fprintf(stderr, "fstat failed: %s\n", strerror(errno)); return 1; } printf("st_size: %" PRIu64 "\n", (uint64_t)fileStat.st_size); if((uint64_t)fileStat.st_size != testDataLen) { fprintf(stderr, "Unexpected file size: expected %zu, got %" PRIu64 "\n", testDataLen, (uint64_t)fileStat.st_size); return 1; } if(!S_ISREG(fileStat.st_mode)) { fprintf(stderr, "File type is not regular file, st_mode: %u\n", fileStat.st_mode); return 1; } printf("File type: regular file\n"); printf("st_nlink: %" PRIu64 "\n", (uint64_t)fileStat.st_nlink); printf("st_ino: %" PRIu64 "\n", (uint64_t)fileStat.st_ino); if(close(fd) == -1) { fprintf(stderr, "Failed to close: %s\n", strerror(errno)); return 1; } printf("fd_fdstat: passed\n"); return 0; } ================================================ FILE: Test/wasi/cpp/fd_filestat_set_size.cpp ================================================ #include #include #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { printf("Usage: %s ", argv[0]); return 1; } int fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Couldn't open '%s': %s\n", argv[1], strerror(errno)); return 1; } int setSizeResult = __wasi_fd_filestat_set_size(fd, 4201); if(setSizeResult) { fprintf(stderr, "Couldn't resize '%s': %s\n", argv[1], strerror(setSizeResult)); return 1; } if(close(fd) == -1) { fprintf(stderr, "Couldn't close '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/fd_filestat_set_times.cpp ================================================ #include #include #include #include #include #include #include static void printUsage(char* exe) { printf("Usage: %s \n", exe); } int main(int argc, char** argv) { if(argc != 4) { printUsage(argv[0]); return 1; } __wasi_fstflags_t flags = 0; __wasi_timestamp_t lastAccessTime = 0; __wasi_timestamp_t lastWriteTime = 0; if(!strcmp(argv[2], "now")) { flags |= __WASI_FSTFLAGS_ATIM_NOW; } else if(strcmp(argv[2], "nochange")) { char* end; errno = 0; lastAccessTime = strtoull(argv[2], &end, 10); if(*end != 0 || errno) { printUsage(argv[0]); return 1; } flags |= __WASI_FSTFLAGS_ATIM; } if(!strcmp(argv[3], "now")) { flags |= __WASI_FSTFLAGS_MTIM_NOW; } else if(strcmp(argv[3], "nochange")) { char* end; errno = 0; lastWriteTime = strtoull(argv[3], &end, 10); if(*end != 0 || errno) { printUsage(argv[0]); return 1; } flags |= __WASI_FSTFLAGS_MTIM; } int fd = open(argv[1], O_WRONLY); if(fd == -1) { fprintf(stderr, "Couldn't open '%s': %s\n", argv[1], strerror(errno)); return 1; } int setTimesResult = __wasi_fd_filestat_set_times(fd, lastAccessTime, lastWriteTime, flags); if(setTimesResult) { fprintf(stderr, "Couldn't set times on '%s': %s\n", argv[1], strerror(setTimesResult)); return 1; } if(close(fd) == -1) { fprintf(stderr, "Couldn't close '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/fd_renumber.cpp ================================================ #include #include #include #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } int fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Failed to open '%s' for writing: %s\n", argv[1], strerror(errno)); return 1; } int result = __wasi_fd_renumber(fd, 1); if(result) { fprintf(stderr, "__wasi_fd_renumber failed: %s\n", strerror(result)); return 1; } printf("Hello stdout!\n"); const char string[] = "Hello file!\n"; size_t stringLength = sizeof(string) - 1; if(write(fd, string, stringLength) == stringLength) { return 1; } else { fprintf(stderr, "Failed to write to '%s': %s\n", argv[1], strerror(errno)); fprintf(stderr, "*** THIS FAILURE WAS EXPECTED ***\n"); } return 0; } ================================================ FILE: Test/wasi/cpp/fd_seek_tell.cpp ================================================ #include #include #include #include #include int main(int argc, char** argv) { const char testData[] = "Hello, seek and tell!"; const size_t testDataLen = sizeof(testData) - 1; int fd = open("seek_test.txt", O_RDWR | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Failed to open file: %s\n", strerror(errno)); return 1; } ssize_t written = write(fd, testData, testDataLen); if(written != (ssize_t)testDataLen) { fprintf(stderr, "Failed to write: %s\n", strerror(errno)); return 1; } off_t pos = lseek(fd, 0, SEEK_CUR); if(pos != (off_t)testDataLen) { fprintf( stderr, "Position after write: expected %zu, got %lld\n", testDataLen, (long long)pos); return 1; } printf("Position after write: %lld\n", (long long)pos); pos = lseek(fd, 0, SEEK_SET); if(pos != 0) { fprintf(stderr, "Position after seek to beginning: expected 0, got %lld\n", (long long)pos); return 1; } printf("Position after seek to beginning: %lld\n", (long long)pos); char readBuffer[64]; memset(readBuffer, 0, sizeof(readBuffer)); ssize_t bytesRead = read(fd, readBuffer, testDataLen); if(bytesRead != (ssize_t)testDataLen) { fprintf(stderr, "Failed to read: %s\n", strerror(errno)); return 1; } if(memcmp(readBuffer, testData, testDataLen) != 0) { fprintf(stderr, "Data mismatch: expected '%s', got '%s'\n", testData, readBuffer); return 1; } printf("Read back: %s\n", readBuffer); pos = lseek(fd, -5, SEEK_END); if(pos != (off_t)(testDataLen - 5)) { fprintf(stderr, "Position after SEEK_END -5: expected %zu, got %lld\n", testDataLen - 5, (long long)pos); return 1; } printf("Position after SEEK_END -5: %lld\n", (long long)pos); FILE* file = fopen("seek_test2.txt", "w+"); if(!file) { fprintf(stderr, "Failed to fopen: %s\n", strerror(errno)); return 1; } if(fwrite(testData, 1, testDataLen, file) != testDataLen) { fprintf(stderr, "Failed to fwrite: %s\n", strerror(errno)); return 1; } long tellPos = ftell(file); if(tellPos != (long)testDataLen) { fprintf(stderr, "ftell after write: expected %zu, got %ld\n", testDataLen, tellPos); return 1; } printf("ftell after write: %ld\n", tellPos); if(fseek(file, 0, SEEK_SET) != 0) { fprintf(stderr, "fseek failed: %s\n", strerror(errno)); return 1; } tellPos = ftell(file); if(tellPos != 0) { fprintf(stderr, "ftell after seek to beginning: expected 0, got %ld\n", tellPos); return 1; } printf("ftell after seek to beginning: %ld\n", tellPos); fclose(file); if(close(fd) == -1) { fprintf(stderr, "Failed to close fd: %s\n", strerror(errno)); return 1; } printf("fd_seek_tell: passed\n"); return 0; } ================================================ FILE: Test/wasi/cpp/fd_sync.cpp ================================================ #include #include #include #include #include int main(int argc, char** argv) { const char testData[] = "Data to sync to disk."; const size_t testDataLen = sizeof(testData) - 1; int fd = open("sync_test.txt", O_RDWR | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Failed to open file: %s\n", strerror(errno)); return 1; } ssize_t written = write(fd, testData, testDataLen); if(written != (ssize_t)testDataLen) { fprintf(stderr, "Failed to write: %s\n", strerror(errno)); return 1; } printf("Wrote %zd bytes\n", written); if(fsync(fd) != 0) { fprintf(stderr, "fsync failed: %s\n", strerror(errno)); return 1; } printf("fsync: success\n"); written = write(fd, testData, testDataLen); if(written != (ssize_t)testDataLen) { fprintf(stderr, "Failed to write again: %s\n", strerror(errno)); return 1; } printf("Wrote %zd more bytes\n", written); if(fdatasync(fd) != 0) { fprintf(stderr, "fdatasync failed: %s\n", strerror(errno)); return 1; } printf("fdatasync: success\n"); if(close(fd) == -1) { fprintf(stderr, "Failed to close: %s\n", strerror(errno)); return 1; } printf("fd_sync: passed\n"); return 0; } ================================================ FILE: Test/wasi/cpp/largefile.cpp ================================================ #include #include #include #include #include #include static const char string3[] = "Hello 3GB!"; static const char string6[] = "Hello 6GB!"; static const char string9[] = "Hello 9GB!"; int main(int argc, char** argv) { if(argc != 2) { printf("Usage: %s ", argv[0]); return 1; } int fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Couldn't open '%s': %s\n", argv[1], strerror(errno)); return 1; } int setSizeResult = __wasi_fd_filestat_set_size(fd, int64_t(10) * 1024 * 1024 * 1024); if(setSizeResult) { fprintf(stderr, "Couldn't resize '%s': %s\n", argv[1], strerror(setSizeResult)); return 1; } const off_t seekResult = lseek(fd, int64_t(9) * 1024 * 1024 * 1024, SEEK_SET); if(seekResult != int64_t(9) * 1024 * 1024 * 1024) { fprintf(stderr, "Couldn't seek to 9GB: %s\n", strerror(seekResult)); return 1; } { const size_t stringLength9 = sizeof(string9); const ssize_t writeResult1 = write(fd, string9, stringLength9); if(writeResult1 != stringLength9) { fprintf(stderr, "Couldn't write to '%s': write returned %zi, errno: %s\n", argv[1], writeResult1, strerror(errno)); return 1; } } { const size_t stringLength3 = sizeof(string3) - 1; const ssize_t writeResult2 = pwrite(fd, string3, stringLength3, int64_t(3) * 1024 * 1024 * 1024); if(writeResult2 != stringLength3) { fprintf(stderr, "Couldn't write to '%s': pwrite(3GB) returned %zi, errno: %s\n", argv[1], writeResult2, strerror(errno)); return 1; } } { const size_t stringLength6 = sizeof(string6) - 1; const ssize_t writeResult3 = pwrite(fd, string6, stringLength6, int64_t(6) * 1024 * 1024 * 1024); if(writeResult3 != stringLength6) { fprintf(stderr, "Couldn't write to '%s': pwrite(6GB) returned %zi, errno: %s\n", argv[1], writeResult3, strerror(errno)); return 1; } } { char readBuffer3[sizeof(string3) + 1]; const ssize_t readResult1 = pread(fd, readBuffer3, sizeof(string3), int64_t(3) * 1024 * 1024 * 1024); if(readResult1 != sizeof(string3)) { fprintf(stderr, "Couldn't read from '%s': pread(3GB) returned %zi, errno: %s\n", argv[1], readResult1, strerror(errno)); return 1; } readBuffer3[sizeof(string3)] = 0; printf("pread(3GB): %s\n", readBuffer3); } { char readBuffer6[sizeof(string6) + 1]; const ssize_t readResult2 = pread(fd, readBuffer6, sizeof(string6), int64_t(6) * 1024 * 1024 * 1024); if(readResult2 != sizeof(string6)) { fprintf(stderr, "Couldn't read from '%s': pread(6GB) returned %zi, errno: %s\n", argv[1], readResult2, strerror(errno)); return 1; } readBuffer6[sizeof(string6)] = 0; printf("pread(6GB): %s\n", readBuffer6); } { char readBuffer9[sizeof(string9) + 1]; const ssize_t readResult3 = pread(fd, readBuffer9, sizeof(string9), int64_t(9) * 1024 * 1024 * 1024); if(readResult3 != sizeof(string9)) { fprintf(stderr, "Couldn't read from '%s': pread(9GB) returned %zi, errno: %s\n", argv[1], readResult3, strerror(errno)); return 1; } readBuffer9[sizeof(string9)] = 0; printf("pread(9GB): %s\n", readBuffer9); } if(close(fd) == -1) { fprintf(stderr, "Couldn't close '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/ls.cpp ================================================ #include #include #include #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } DIR* dir = opendir(argv[1]); if(!dir) { fprintf(stderr, "Couldn't open directory '%s': %s\n", argv[1], strerror(errno)); return 1; } while(true) { errno = 0; struct dirent* dirent = readdir(dir); if(dirent) { const char* typeString; switch(dirent->d_type) { case DT_BLK: typeString = "DT_BLK"; break; case DT_CHR: typeString = "DT_CHR"; break; case DT_DIR: typeString = "DT_DIR"; break; case DT_FIFO: typeString = "DT_FIFO"; break; case DT_LNK: typeString = "DT_LNK"; break; case DT_REG: typeString = "DT_REG"; break; case DT_UNKNOWN: typeString = "DT_UNKNOWN"; break; default: typeString = "?"; break; }; printf("%s : %s -> %" PRIu64 "\n", dirent->d_name, typeString, dirent->d_ino); } else if(errno) { fprintf(stderr, "Couldn't read directory '%s': %s\n", argv[1], strerror(errno)); return 1; } else { break; } } printf("\n"); if(closedir(dir)) { fprintf(stderr, "Couldn't close directory '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/mkdir.cpp ================================================ #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } if(mkdir(argv[1], 0666)) { fprintf( stderr, "Failed to create directory '%s': %s (%i)\n", argv[1], strerror(errno), errno); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/mmap.cpp ================================================ #include #include #include #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } int fd = open(argv[1], O_RDONLY); if(fd == -1) { printf("Failed to open '%s' for reading: %s\n", argv[1], strerror(errno)); return 1; } struct stat fileStat; if(fstat(fd, &fileStat)) { printf("Failed to get file status for '%s': %s", argv[1], strerror(errno)); return 1; } const size_t numFileBytes = fileStat.st_size; void* mappedFile = mmap(nullptr, numFileBytes, PROT_READ, MAP_PRIVATE, fd, 0); if(mappedFile == MAP_FAILED) { printf("Failed to memory map '%s': %s", argv[1], strerror(errno)); return 1; } const int closeResult = close(fd); if(closeResult) { printf("Failed to close '%s': fclose returned %i.\n", argv[1], closeResult); return 1; } const ssize_t writeResult = write(1, mappedFile, numFileBytes); if(writeResult == -1) { printf("Failed to write to stdout: %s.\n", strerror(errno)); return 1; } if(munmap(mappedFile, numFileBytes)) { printf("Failed to unmap memory: %s", strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/mv.cpp ================================================ #include #include #include #include int main(int argc, char** argv) { if(argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } if(rename(argv[1], argv[2])) { fprintf(stderr, "Failed to rename '%s' to '%s': %s\n", argv[1], argv[2], strerror(errno)); } return 0; } ================================================ FILE: Test/wasi/cpp/path_filestat_set_times.cpp ================================================ #include #include #include #include #include #include static void printUsage(char* exe) { printf("Usage: %s \n", exe); } bool parseTimeSpec(const char* string, struct timespec& outTimeSpec) { if(!strcmp(string, "now")) { outTimeSpec.tv_nsec = UTIME_NOW; } else if(!strcmp(string, "nochange")) { outTimeSpec.tv_nsec = UTIME_OMIT; } else { char* end; errno = 0; unsigned long long lastAccessTime = strtoull(string, &end, 10); if(*end != 0 || errno) { return false; } outTimeSpec.tv_sec = time_t(lastAccessTime / 1000000000); outTimeSpec.tv_nsec = long(lastAccessTime % 1000000000); } return true; } int main(int argc, char** argv) { if(argc != 4) { printUsage(argv[0]); return 1; } struct timespec timespecs[2]; if(!parseTimeSpec(argv[2], timespecs[0])) { printUsage(argv[0]); return 1; } if(!parseTimeSpec(argv[3], timespecs[1])) { printUsage(argv[0]); return 1; } int rootFD = open("/", O_RDONLY); if(rootFD == -1) { fprintf(stderr, "Couldn't open root directory: %s\n", strerror(errno)); return 1; } if(utimensat(rootFD, argv[1], timespecs, 0) == -1) { fprintf(stderr, "Couldn't set times on '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/preadwrite.cpp ================================================ #include #include #include #include #include #include static const char string500[] = "Hello 500!"; static const char string5000[] = "Hello 5000!"; int main(int argc, char** argv) { if(argc != 2) { printf("Usage: %s ", argv[0]); return 1; } int fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC); if(fd == -1) { fprintf(stderr, "Couldn't open '%s': %s\n", argv[1], strerror(errno)); return 1; } int setSizeResult = __wasi_fd_filestat_set_size(fd, 10000); if(setSizeResult) { fprintf(stderr, "Couldn't resize '%s': %s\n", argv[1], strerror(setSizeResult)); return 1; } const size_t stringLength5000 = sizeof(string5000) - 1; const ssize_t writeResult1 = pwrite(fd, string5000, stringLength5000, 5000); if(writeResult1 != stringLength5000) { fprintf(stderr, "Couldn't write to '%s': pwrite(5000) returned %zi, errno: %s\n", argv[1], writeResult1, strerror(errno)); return 1; } const size_t stringLength500 = sizeof(string500) - 1; const ssize_t writeResult2 = pwrite(fd, string500, stringLength500, 500); if(writeResult2 != stringLength500) { fprintf(stderr, "Couldn't write to '%s': pwrite(500) returned %zi, errno: %s\n", argv[1], writeResult2, strerror(errno)); return 1; } char readBuffer5000[sizeof(string5000) + 1]; const ssize_t readResult1 = pread(fd, readBuffer5000, sizeof(string5000), 5000); if(readResult1 != sizeof(string5000)) { fprintf(stderr, "Couldn't read from '%s': pread(5000) returned %zi, errno: %s\n", argv[1], readResult1, strerror(errno)); return 1; } readBuffer5000[sizeof(string5000)] = 0; printf("pread(5000): %s\n", readBuffer5000); char readBuffer500[sizeof(string500) + 1]; const ssize_t readResult2 = pread(fd, readBuffer500, sizeof(string500), 500); if(readResult2 != sizeof(string500)) { fprintf(stderr, "Couldn't read from '%s': pread(500) returned %zi, errno: %s\n", argv[1], readResult2, strerror(errno)); return 1; } readBuffer500[sizeof(string500)] = 0; printf("pread(500): %s\n", readBuffer500); if(close(fd) == -1) { fprintf(stderr, "Couldn't close '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/random.cpp ================================================ #include #include #include #include int main(int argc, char** argv) { unsigned char buffer[1024]; int result = __wasi_random_get(buffer, sizeof(buffer)); if(result) { fprintf(stderr, "random_get failed: %s\n", strerror(result)); return 1; } for(ssize_t index = 0; index < sizeof(buffer); ++index) { printf("%02x", buffer[index]); } printf("\n"); return 0; } ================================================ FILE: Test/wasi/cpp/rm.cpp ================================================ #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } if(unlink(argv[1])) { fprintf(stderr, "Failed to unlink '%s': %s\n", argv[1], strerror(errno)); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/rmdir.cpp ================================================ #include #include #include #include int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } if(rmdir(argv[1])) { fprintf( stderr, "Failed to remove directory '%s': %s (%i)\n", argv[1], strerror(errno), errno); return 1; } return 0; } ================================================ FILE: Test/wasi/cpp/stat.cpp ================================================ #include #include #include #include #include #include const char* formatTime(time_t time) { static char buffer[256]; struct tm* utc = gmtime(&time); snprintf(buffer, sizeof(buffer), "%u/%u/%u %u:%u:%u UTC", 1900 + utc->tm_year, 1 + utc->tm_mon, utc->tm_mday, utc->tm_hour, utc->tm_min, utc->tm_sec); return buffer; } static void printStat(struct stat& fileStat) { printf(" st_dev: %" PRIu64 "\n", fileStat.st_dev); printf(" st_ino: %" PRIu64 "\n", fileStat.st_ino); printf(" st_mode: %u\n", fileStat.st_mode); printf(" st_nlink: %" PRIu64 "\n", fileStat.st_nlink); printf(" st_size: %" PRIu64 "\n", fileStat.st_size); printf(" st_atim: %s\n", formatTime(fileStat.st_atime)); printf(" st_mtim: %s\n", formatTime(fileStat.st_mtime)); printf(" st_ctim: %s\n", formatTime(fileStat.st_ctime)); } int main(int argc, char** argv) { if(argc != 2) { fprintf(stderr, "Usage: stat \n"); return 1; } struct stat fileStat; if(stat(argv[1], &fileStat)) { fprintf(stderr, "stat(\"%s\") failed: %s\n", argv[1], strerror(errno)); return 1; } printf("stat for '%s':\n", argv[1]); printStat(fileStat); struct stat stdinStat; if(fstat(1, &stdinStat)) { fprintf(stderr, "fstat(stdin) failed: %s\n", strerror(errno)); return 1; } printf("stat for stdin:\n"); printStat(stdinStat); return 0; } ================================================ FILE: Test/wasi/cpp/stdout.cpp ================================================ #include int main(int argc, char** argv) { printf("Hello world!\n"); return 0; } ================================================ FILE: Test/wasi/cpp/write.cpp ================================================ #include #include #include int main(int argc, char** argv) { if(argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } FILE* file = fopen(argv[1], "wb"); if(!file) { fprintf(stderr, "Failed to open '%s' for writing: %s\n", argv[1], strerror(errno)); return 1; } size_t stringLength = strlen(argv[2]); size_t writeResult = fwrite(argv[2], 1, stringLength, file); if(writeResult != stringLength) { fprintf(stderr, "Failed to write string to '%s': fwrite returned %zu, errno = %s.\n", argv[1], writeResult, strerror(errno)); return 1; } const char newline[] = "\n"; writeResult = fwrite(newline, 1, 1, file); if(writeResult != 1) { fprintf(stderr, "Failed to write newline to '%s': fwrite returned %zu, errno = %s.\n", argv[1], writeResult, strerror(errno)); return 1; } int closeResult = fclose(file); if(closeResult != 0) { fprintf(stderr, "Failed to close '%s': fclose returned %i.\n", argv[1], closeResult); return 1; } return 0; } ================================================ FILE: Test/wasi/wast/fd_read_oob.wast ================================================ (module ;; Test that fd_read with an out-of-bounds iovec pointer returns EFAULT (21). (import "wasi_unstable" "proc_exit" (func $proc_exit (param i32))) (import "wasi_unstable" "fd_read" (func $fd_read (param i32 i32 i32 i32) (result i32))) (memory (export "memory") 1) (func (export "_start") ;; fd_read(0, 65536, 1, 0) — iovec pointer is past end of memory i32.const 0 ;; fd = stdin i32.const 65536 ;; iovs address (OOB) i32.const 1 ;; iovs count i32.const 0 ;; nread address (valid) call $fd_read ;; Expect EFAULT (21) i32.const 21 i32.ne if i32.const 1 call $proc_exit end i32.const 0 call $proc_exit ) ) ================================================ FILE: Test/wasi/wast/fd_write_oob.wast ================================================ (module ;; Test that fd_write with an out-of-bounds iovec pointer returns EFAULT (21). (import "wasi_unstable" "proc_exit" (func $proc_exit (param i32))) (import "wasi_unstable" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32))) (memory (export "memory") 1) (func (export "_start") ;; fd_write(1, 65536, 1, 0) — iovec pointer is past end of memory i32.const 1 ;; fd = stdout i32.const 65536 ;; iovs address (OOB) i32.const 1 ;; iovs count i32.const 0 ;; nwritten address (valid) call $fd_write ;; Expect EFAULT (21) i32.const 21 i32.ne if i32.const 1 call $proc_exit end i32.const 0 call $proc_exit ) ) ================================================ FILE: Test/wasi/wast/random_get_oob.wast ================================================ (module ;; Test that random_get with an out-of-bounds pointer returns EFAULT (21). (import "wasi_unstable" "proc_exit" (func $proc_exit (param i32))) (import "wasi_unstable" "random_get" (func $random_get (param i32 i32) (result i32))) (memory (export "memory") 1) (func (export "_start") ;; random_get(65536, 1) — pointer is one byte past end of memory i32.const 65536 i32.const 1 call $random_get ;; Expect EFAULT (21) i32.const 21 i32.ne if i32.const 1 call $proc_exit end i32.const 0 call $proc_exit ) ) ================================================ FILE: Test/wavm/bulk_memory_ops.wast ================================================ ;; passive data segments and data segment encoding (module (data "test")) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0b\07\01" ;; data section: 5 bytes, 1 entry "\00" ;; [0] active data segment, memory 0 "\41\00\0b" ;; base offset (i32.const 0) "\01\00" ;; 1 byte of data ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0b\04\01" ;; data section: 4 bytes, 1 entry "\01\01\00" ;; [0] passive data segment: 1 byte of data ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0b\08\01" ;; data section: 8 bytes, 1 entry "\02\00" ;; [0] active data segment, memory 0 "\41\00\0b" ;; base offset (i32.const 0) "\01\00" ;; 1 byte of data ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0b\0a\02" ;; data section: 9 bytes, 2 entries "\00" ;; [0] active data segment, memory 0 "\41\00\0b" ;; base offset (i32.const 0) "\01\00" ;; 1 byte of data "\01\01\00" ;; [1] passive data segment: 1 byte of data ) (assert_malformed (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0b\07\01" ;; data section: 7 bytes, 1 entries "\03" ;; [0] "\41\00\0b" ;; base offset (i32.const 0) "\01\00" ;; 1 byte of data ) "invalid data segment flags" ) ;; memory.init/data.drop (assert_malformed (module quote "(memory $m 1)" "(data \"test\")" "(func (memory.init (i32.const 0) (i32.const 0) (i32.const 0)))" ) "invalid data segment index" ) (assert_invalid (module (memory $m 1) (data "test") (func (memory.init 1 (i32.const 0) (i32.const 0) (i32.const 0))) ) "invalid data segment index" ) (assert_invalid (module (memory $m 1) (data "test") (func (memory.init 1 0 (i32.const 0) (i32.const 0) (i32.const 0))) ) "invalid memory index" ) (assert_invalid (module (memory $m 1) (data "test") (func (data.drop 1)) ) "invalid data segment index" ) (module (memory $m 1 1) (data "a") (func (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 0))) ) (module (memory $m 1 1) (data "a") (func (memory.init 0 0 (i32.const 0) (i32.const 0) (i32.const 0))) ) (module (memory $m 1 1) (data "a") (func (memory.init $m 0 (i32.const 0) (i32.const 0) (i32.const 0))) ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0c\01\01" ;; DataCount section: 1 byte, 1 segment "\0a\11\01" ;; Code section "\0f\00" ;; function 0: 15 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\08\00\00" ;; memory.init 0 0 "\fc\09\00" ;; data.drop 0 "\0b" ;; end "\0b\04\01" ;; data section: 4 bytes, 1 entry "\01\01\00" ;; [0] 1 byte passive data segment ) (assert_invalid (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0c\01\01" ;; DataCount section: 1 byte, 1 segment "\0a\11\01" ;; Code section "\0f\00" ;; function 0: 15 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\08\01\00" ;; memory.init 1 0 "\fc\09\01" ;; data.drop 1 "\0b" ;; end "\0b\03\01" ;; data section: 3 bytes, 1 entry "\01\00" ;; [0] 1 byte passive data segment ) "invalid data segment index" ) (assert_invalid (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0c\01\01" ;; DataCount section: 1 byte, 1 segment "\0a\11\01" ;; Code section "\0f\00" ;; function 0: 15 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\08\00\01" ;; memory.init 0 1 "\fc\09\00" ;; data.drop 0 "\0b" ;; end "\0b\04\01" ;; data section: 5 bytes, 1 entry "\01" ;; passive data segment "\01\00" ;; 1 byte of data ) "invalid memory index" ) ;; Test that it's valid to reference an active data segment with memory.init (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\05\03\01" ;; memory section: 3 bytes, 1 entry "\00\01" ;; (memory 1) "\0c\01\01" ;; DataCount section: 1 byte, 1 segment "\0a\11\01" ;; Code section "\0f\00" ;; function 0: 15 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\08\00\00" ;; memory.init 0 0 "\fc\09\00" ;; data.drop 0 "\0b" ;; end "\0b\07\01" ;; data section: 5 bytes, 1 entry "\00\41\00\0b" ;; active data segment, base offset (i32.const 0) "\01\00" ;; 1 byte of data ) ;; memory.init with dropped segment: OOB dest should trap even with zero count (module (memory 1) (data "test") (func (export "memory.init") (param $dest i32) (param $src i32) (param $len i32) (memory.init 0 (local.get $dest) (local.get $src) (local.get $len))) (func (export "data.drop") (data.drop 0))) (assert_return (invoke "memory.init" (i32.const 0) (i32.const 0) (i32.const 4))) (assert_return (invoke "data.drop")) (assert_return (invoke "memory.init" (i32.const 0) (i32.const 0) (i32.const 0))) (assert_trap (invoke "memory.init" (i32.const 0) (i32.const 0) (i32.const 1)) "out of bounds data segment access") (assert_trap (invoke "memory.init" (i32.const 0xffffffff) (i32.const 0) (i32.const 0)) "out of bounds memory access") ;; Test using memory.fill to zero memory. (module (memory 1 1) (data (i32.const 0) "\01\02\03\04") (func (export "load") (param i32) (result i32) (i32.load8_u (local.get 0))) (func (export "memory.fill") (param i32) (memory.fill (i32.const 0) (i32.const 0) (local.get 0)))) (assert_return (invoke "load" (i32.const 0)) (i32.const 1)) (assert_return (invoke "load" (i32.const 1)) (i32.const 2)) (invoke "memory.fill" (i32.const 1)) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 1)) (i32.const 2)) ;; passive elem segments (module (elem funcref (ref.func $f)) (func $f)) (module (elem funcref (ref.null func))) (assert_malformed (module quote "(table $t 1 funcref) (elem (i32.const 0) (ref.func $f)) (func $f)") "unexpected expression" ) (assert_malformed (module quote "(table $t 1 funcref) (elem (i32.const 0) funcref (unreachable)) (func $f)") "expected 'ref.func' or 'ref.null'" ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\07\01" ;; elem section: 7 bytes, 1 entry "\00" ;; [0] active elem segment "\41\00\0b" ;; base offset (i32.const 0) "\01" ;; elem segment with 1 element "\00" ;; [0] function 0 "\0a\04\01" ;; Code section "\02\00" ;; function 0: 2 bytes, 0 local sets "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\07\01" ;; elem section: 7 bytes, 1 entry "\05\70" ;; [0] passive elem funcref expression segment "\01" ;; elem segment with 1 element "\d2\00\0b" ;; [0] ref.func 0 "\0a\04\01" ;; Code section "\02\00" ;; function 0: 2 bytes, 0 local sets "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\07\01" ;; elem section: 7 bytes, 1 entry "\05\70" ;; [0] passive elem funcref expression segment "\01" ;; elem segment with 1 element "\d0\70\0b" ;; [0] ref.null "\0a\04\01" ;; Code section "\02\00" ;; function 0: 2 bytes, 0 local sets "\0b" ;; end ) (assert_malformed (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\06\01" ;; elem section: 6 bytes, 1 entry "\05\70" ;; [0] passive elem funcref expression segment "\01" ;; elem segment with 1 element "\00\0b" ;; [0] unreachable "\0a\04\01" ;; Code section "\02\00" ;; function 0: 2 bytes, 0 local sets "\0b" ;; end ) "invalid elem opcode" ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\09\01" ;; elem section: 8 bytes, 1 entry "\02\00" ;; [0] active elem index segment, table 0 "\41\00\0b" ;; base offset (i32.const 0) "\00" ;; func extern kind "\01" ;; elem segment with 1 element "\00" ;; [0] function 0 "\0a\04\01" ;; Code section "\02\00" ;; function 0: 2 bytes, 0 local sets "\0b" ;; end ) ;; table.init and elem.drop (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\07\01" ;; elem section: 7 bytes, 1 entry "\05\70" ;; [0] passive elem funcref expression segment "\01" ;; elem segment with 1 element "\d2\00\0b" ;; [0] ref.func 0 "\0a\11\01" ;; Code section "\0f\00" ;; function 0: 15 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\0c\00\00" ;; table.init 0 0 "\fc\0d\00" ;; elem.drop 0 "\0b" ;; end ) ;; Test that it's valid to reference an active elem segment with table.init and elem.drop (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\07\01" ;; elem section: 7 bytes, 1 entry "\00" ;; [0] active elem index segment "\41\00\0b" ;; base offset (i32.const 0) "\01" ;; elem segment with 1 element "\00" ;; [0] function 0 "\0a\11\01" ;; Code section "\0f\00" ;; function 0: 15 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\0c\00\00" ;; table.init 0 0 "\fc\0d\00" ;; elem.drop 0 "\0b" ;; end ) (module (table $t 8 8 funcref) (type $type_i32 (func (result i32))) (type $type_i64 (func (result i64))) (elem funcref (ref.func $0) (ref.func $1)) (elem funcref (ref.func $2) (ref.func $3)) (func $0 (type $type_i32) (result i32) i32.const 0) (func $1 (type $type_i32) (result i32) i32.const 1) (func $2 (type $type_i64) (result i64) i64.const 2) (func $3 (type $type_i64) (result i64) i64.const 3) (func (export "call_indirect i32") (param $index i32) (result i32) (call_indirect (type $type_i32) (local.get $index)) ) (func (export "call_indirect i64") (param $index i32) (result i64) (call_indirect (type $type_i64) (local.get $index)) ) (func (export "table.init 0") (param $destOffset i32) (param $sourceOffset i32) (param $numElements i32) (table.init $t 0 (local.get $destOffset) (local.get $sourceOffset) (local.get $numElements)) ) (func (export "table.init 1") (param $destOffset i32) (param $sourceOffset i32) (param $numElements i32) (table.init $t 1 (local.get $destOffset) (local.get $sourceOffset) (local.get $numElements)) ) (func (export "elem.drop 0") (elem.drop 0)) (func (export "elem.drop 1") (elem.drop 1)) ) (assert_trap (invoke "call_indirect i32" (i32.const 0)) "uninitialized element") (assert_return (invoke "table.init 0" (i32.const 0) (i32.const 0) (i32.const 2))) (assert_return (invoke "call_indirect i32" (i32.const 0)) (i32.const 0)) (assert_return (invoke "call_indirect i32" (i32.const 1)) (i32.const 1)) (assert_trap (invoke "call_indirect i32" (i32.const 2)) "uninitialized element") (assert_return (invoke "table.init 1" (i32.const 2) (i32.const 0) (i32.const 2))) (assert_return (invoke "call_indirect i64" (i32.const 2)) (i64.const 2)) (assert_return (invoke "call_indirect i64" (i32.const 3)) (i64.const 3)) (assert_trap (invoke "call_indirect i64" (i32.const 4)) "uninitialized element") (assert_return (invoke "table.init 0" (i32.const 4) (i32.const 0) (i32.const 1))) (assert_return (invoke "call_indirect i32" (i32.const 4)) (i32.const 0)) (assert_trap (invoke "call_indirect i32" (i32.const 5)) "uninitialized element") (assert_return (invoke "table.init 1" (i32.const 5) (i32.const 1) (i32.const 1))) (assert_return (invoke "call_indirect i64" (i32.const 5)) (i64.const 3)) (assert_trap (invoke "call_indirect i64" (i32.const 6)) "uninitialized element") (assert_trap (invoke "table.init 0" (i32.const 8) (i32.const 0) (i32.const 1)) "undefined element") (assert_trap (invoke "table.init 0" (i32.const 7) (i32.const 0) (i32.const 2)) "undefined element") (assert_trap (invoke "table.init 0" (i32.const 6) (i32.const 1) (i32.const 2)) "out of bounds elem segment access") (assert_trap (invoke "table.init 0" (i32.const 5) (i32.const 0) (i32.const 3)) "out of bounds elem segment access element") (assert_trap (invoke "table.init 0" (i32.const 0xffffffff) (i32.const 0) (i32.const 1)) "undefined element") (assert_trap (invoke "table.init 0" (i32.const 0) (i32.const 0xffffffff) (i32.const 1)) "out of bounds elem segment access") (assert_return (invoke "elem.drop 0")) (assert_return (invoke "elem.drop 0")) (assert_trap (invoke "table.init 0" (i32.const 0) (i32.const 0) (i32.const 2)) "out of bounds elem segment access") (assert_return (invoke "table.init 1" (i32.const 0) (i32.const 0) (i32.const 2))) (assert_return (invoke "call_indirect i64" (i32.const 0)) (i64.const 2)) (assert_return (invoke "call_indirect i64" (i32.const 1)) (i64.const 3)) (assert_return (invoke "elem.drop 1")) (assert_return (invoke "elem.drop 1")) (assert_trap (invoke "table.init 1" (i32.const 0) (i32.const 0) (i32.const 2)) "out of bounds elem segment access") ;; table.init with dropped segment: OOB dest should trap even with zero count (#360) (assert_trap (invoke "table.init 0" (i32.const 0xffffffff) (i32.const 0) (i32.const 0)) "out of bounds table access") (assert_trap (invoke "table.init 1" (i32.const 0xffffffff) (i32.const 0) (i32.const 0)) "out of bounds table access") (assert_return (invoke "table.init 0" (i32.const 0) (i32.const 0) (i32.const 0))) ;; table.init with (ref.null) elems (module (table $t 3 3 funcref) (type $type_i32 (func (result i32))) (type $type_i64 (func (result i64))) (elem funcref (ref.func $0) (ref.null func) (ref.func $1)) (func $0 (type $type_i32) (result i32) i32.const 0) (func $1 (type $type_i32) (result i32) i32.const 1) (func (export "call_indirect") (param $index i32) (result i32) (call_indirect (type $type_i32) (local.get $index)) ) (func (export "table.init") (param $destOffset i32) (param $sourceOffset i32) (param $numElements i32) (table.init $t 0 (local.get $destOffset) (local.get $sourceOffset) (local.get $numElements)) ) ) (assert_trap (invoke "call_indirect" (i32.const 0)) "uninitialized element") (assert_return (invoke "table.init" (i32.const 0) (i32.const 0) (i32.const 3))) (assert_return (invoke "call_indirect" (i32.const 0)) (i32.const 0)) (assert_trap (invoke "call_indirect" (i32.const 1)) "uninitialized element") (assert_return (invoke "call_indirect" (i32.const 2)) (i32.const 1)) ;; table.copy (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\09\05\01" ;; elem section: 6 bytes, 1 entry "\01\00" ;; [0] passive elem function index segment "\01" ;; elem segment with 1 element "\00" ;; [0] function 0 "\0a\0e\01" ;; Code section "\0c\00" ;; function 0: 12 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\0e\00\00" ;; table.copy 0 0 "\0b" ;; end ) (assert_invalid (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\0a\0e\01" ;; Code section "\0c\00" ;; function 0: 12 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\0e\01\00" ;; table.copy 1 0 "\0b" ;; end ) "invalid table index" ) (assert_invalid (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\04\04\01" ;; table section: 4 bytes, 1 entry "\70\00\01" ;; (table 1 funcref) "\0a\0e\01" ;; Code section "\0c\00" ;; function 0: 12 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\fc\0e\00\01" ;; table.copy 0 1 "\0b" ;; end ) "invalid table index" ) (module (table $t 8 8 funcref) (type $type_i32 (func (result i32))) (type $type_i64 (func (result i64))) (elem (table $t) (i32.const 0) $0 $1 $2 $3) (func $0 (type $type_i32) (result i32) i32.const 0) (func $1 (type $type_i32) (result i32) i32.const 1) (func $2 (type $type_i64) (result i64) i64.const 2) (func $3 (type $type_i64) (result i64) i64.const 3) (func (export "call_indirect i32") (param $index i32) (result i32) (call_indirect (type $type_i32) (local.get $index)) ) (func (export "call_indirect i64") (param $index i32) (result i64) (call_indirect (type $type_i64) (local.get $index)) ) (func (export "table.copy") (param $destOffset i32) (param $sourceOffset i32) (param $numElements i32) (table.copy (local.get $destOffset) (local.get $sourceOffset) (local.get $numElements)) ) ) (assert_trap (invoke "call_indirect i32" (i32.const 4)) "uninitialized element") (assert_return (invoke "table.copy" (i32.const 4) (i32.const 0) (i32.const 4))) (assert_return (invoke "call_indirect i32" (i32.const 4)) (i32.const 0)) (assert_return (invoke "call_indirect i32" (i32.const 4)) (i32.const 0)) (assert_return (invoke "call_indirect i32" (i32.const 5)) (i32.const 1)) (assert_return (invoke "call_indirect i64" (i32.const 6)) (i64.const 2)) (assert_return (invoke "call_indirect i64" (i32.const 7)) (i64.const 3)) (assert_return (invoke "table.copy" (i32.const 3) (i32.const 2) (i32.const 2))) (assert_return (invoke "call_indirect i64" (i32.const 3)) (i64.const 2)) (assert_return (invoke "call_indirect i64" (i32.const 4)) (i64.const 3)) (assert_trap (invoke "table.copy" (i32.const 8) (i32.const 0) (i32.const 1)) "undefined element") (assert_trap (invoke "table.copy" (i32.const 7) (i32.const 0) (i32.const 2)) "undefined element") (assert_trap (invoke "table.copy" (i32.const 0) (i32.const 8) (i32.const 1)) "undefined element") (assert_trap (invoke "table.copy" (i32.const 0) (i32.const 7) (i32.const 2)) "undefined element") (assert_trap (invoke "table.copy" (i32.const 0xffffffff) (i32.const 0) (i32.const 1)) "undefined element") (assert_trap (invoke "table.copy" (i32.const 0) (i32.const 0xffffffff) (i32.const 1)) "undefined element") ================================================ FILE: Test/wavm/divide_by_zero_in_try.wast ================================================ (module (func (export "try_with_divide_by_zero") (result i32) try (result i32) i32.const 0 i32.const 0 i32.div_s drop i32.const 7 catch_all i32.const 8 end ) ) (assert_trap (invoke "try_with_divide_by_zero") "integer divide by zero") ================================================ FILE: Test/wavm/exceptions.wast ================================================ (module $A (exception_type $a (export "a") i32) (exception_type $b (export "b") i32) (exception_type $c (export "c") i32 f64) (exception_type $d (export "d")) (type $i32_to_void_sig (func (param i32))) (func $throw_a (export "throw_a") (type $i32_to_void_sig) (param i32) (throw $a (local.get 0))) (func $throw_b (export "throw_b") (type $i32_to_void_sig) (param i32) (throw $b (local.get 0))) (func $throw_c (export "throw_c") (param i32 f64) (throw $c (local.get 0) (local.get 1))) (func $throw_d (export "throw_d") (throw $d)) (func $no_throw (export "no_throw") (type $i32_to_void_sig) (param i32)) (func $divide_by_zero (export "divide_by_zero") (type $i32_to_void_sig) (param i32) local.get 0 i32.const 0 i32.div_s drop ) (table funcref (elem $no_throw $divide_by_zero $throw_a $throw_b)) (func (export "try_without_throw") (result i32) try (result i32) i32.const 5 catch_all i32.const 6 end ) (func (export "try_with_divide_by_zero") (result i32) try (result i32) i32.const 0 i32.const 0 i32.div_s drop i32.const 7 catch_all i32.const 8 end ) (func (export "catch_throw") (result i32) try (result i32) i32.const 9 throw $a catch $a end ) (func (export "catch_call_throw") (result i32) try (result i32) i32.const 9 call $throw_a i32.const 10 catch $a end ) (func (export "catch_with_different_throw") (result i32) try (result i32) i32.const 11 throw $a catch $b end ) (func (export "catch_all") (param $thunk i32) (result i32) try (result i32) (call_indirect (type $i32_to_void_sig) (i32.const 13) (local.get $thunk)) i32.const 14 catch_all i32.const 15 end ) (func (export "try_inside_catch") (result i32) try (result i32) i32.const 16 throw $a catch_all try (result i32) i32.const 18 throw $b catch $b end end ) (func (export "catch_rethrow") (result i32) try (result i32) i32.const 20 throw $a catch $a try i32.const 22 throw $b catch $b rethrow 1 end end ) (func (export "catch_all_rethrow") (result i32) try (result i32) i32.const 23 throw $a catch_all try i32.const 25 throw $b catch $b rethrow 1 end i32.const 26 end ) (func (export "throw_from_catch") (result i32) try (result i32) i32.const 27 throw $a catch $a throw $b end ) ) (assert_throws (invoke "throw_a" (i32.const 1)) $A "a" (i32.const 1)) (assert_throws (invoke "throw_b" (i32.const 2)) $A "b" (i32.const 2)) (assert_throws (invoke "throw_c" (i32.const 3) (f64.const 4.0)) $A "c" (i32.const 3) (f64.const 4.0)) (assert_throws (invoke "throw_d") $A "d") (assert_return (invoke "try_without_throw") (i32.const 5)) (assert_trap (invoke "try_with_divide_by_zero") "integer divide by zero") (assert_return (invoke "catch_throw") (i32.const 9)) (assert_return (invoke "catch_call_throw") (i32.const 9)) (assert_throws (invoke "catch_with_different_throw") $A "a" (i32.const 11)) (assert_return (invoke "catch_all" (i32.const 0)) (i32.const 14)) (assert_trap (invoke "catch_all" (i32.const 1)) "integer divide by zero") (assert_return (invoke "catch_all" (i32.const 2)) (i32.const 15)) (assert_return (invoke "catch_all" (i32.const 3)) (i32.const 15)) (assert_return (invoke "try_inside_catch") (i32.const 18)) (assert_throws (invoke "catch_rethrow") $A "a" (i32.const 20)) (assert_throws (invoke "catch_all_rethrow") $A "a" (i32.const 23)) (assert_throws (invoke "throw_from_catch") $A "b" (i32.const 27)) ;; todo: ;; throw inside of function vs directly in try ;; throw in catch ;; throw in catch in try (same function) ;; exception type imported into other module ;; named/indexed rethrows ;; rethrow outside of catch ;; try with multiple catches with the same exception types ;; try with multiple catch_alls ;; try with catch after catch_all ;; exception arguments (register "A" $A) (module (exception_type $a (import "A" "a") i32) (exception_type $b (import "A" "b") i32) (exception_type $c (import "A" "c") i32 f64) (exception_type $d (import "A" "d")) ) (assert_unlinkable (module (exception_type (import "A" "a") i64)) "import type doesn't match") (assert_unlinkable (module (exception_type (import "A" "c") i32 i64)) "import type doesn't match") ================================================ FILE: Test/wavm/infinite-recursion.wast ================================================ (module (func $recurse (export "recurse") (param i32) (result i32) (local i32 i32 i32 i32) (local.set 1 (i32.add (local.get 0) (i32.const 1))) (local.set 2 (i32.add (local.get 0) (i32.const 2))) (local.set 3 (i32.add (local.get 0) (i32.const 3))) (local.set 4 (i32.add (local.get 0) (i32.const 4))) ;; Use all locals after the call so they can't be optimized away (i32.add (i32.add (i32.add (call $recurse (local.get 1)) (local.get 2)) (local.get 3)) (local.get 4)) ) (func $tail_recurse (export "tail_recurse") (call $tail_recurse)) ) (assert_trap (invoke "recurse" (i32.const 0)) "call stack exhausted") (assert_trap (invoke "tail_recurse") "call stack exhausted") ================================================ FILE: Test/wavm/issues/issue-345.wast ================================================ ;; #345: Unexpected value on stack (NaN payload) (module binary "\00\61\73\6d\01\00\00\00\01\14\04\60\04\7f\7f\7f\7f\01\7f" "\60\01\7f\00\60\00\00\60\00\01\7d\03\02\01\03\05\03\01\00" "\01\06\5d\0c\7f\00\41\9d\04\0b\7f\01\41\bf\01\0b\7d\00\43" "\00\40\07\44\0b\7d\01\43\00\00\40\43\0b\7e\00\42\36\0b\7e" "\01\42\13\0b\7c\00\44\00\00\00\00\00\00\4b\40\0b\7c\01\44" "\00\00\00\00\00\00\33\40\0b\7f\01\41\00\0b\7d\01\43\00\00" "\00\00\0b\7e\01\42\00\0b\7c\01\44\00\00\00\00\00\00\00\00" "\0b\07\14\02\06\5f\73\74\61\72\74\00\00\07\74\6f\5f\74\65" "\73\74\00\00\0a\4c\01\4a\04\01\7f\01\7d\01\7e\bd\5e\7c\41" "\fc\ac\d1\56\01\21\00\43\00\28\ce\42\21\01\42\85\88\8d\90" "\80\82\80\6d\21\02\44\f9\0a\96\a8\70\0d\f8\46\21\03\44\3e" "\00\08\80\02\00\f4\7f\b6\20\00\24\08\20\01\24\09\20\02\24" "\0a\20\03\24\0b\0b\0b\32\03\00\41\08\0b\08\10\00\00\00\0d" "\00\00\00\00\41\10\0b\0d\48\65\6c\6c\6f\20\57\6f\72\6c\64" "\21\0a\00\41\20\0b\0d\48\65\6c\6c\6f\20\57\6f\72\6c\64\21" "\0a") (assert_return_arithmetic_nan (invoke "to_test")) ================================================ FILE: Test/wavm/issues/issue-346.wast ================================================ ;; #346: Unexpected execution (over-alignment not rejected) ;; Original regression test from issue report. The alignment byte is 0x40 (log2=64), ;; which is rejected during deserialization (alignment >= 64 is malformed). (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\10\03\60\04\7f\7f\7f\7f\01\7f" "\60\01\7f\00\60\00\00\03\02\01\02\05\03\01\00\01\06\5d\0c" "\7f\00\41\9d\04\0b\7f\01\41\bf\01\0b\7d\00\43\00\40\07\44" "\0b\7d\01\43\00\00\40\43\0b\7e\00\42\36\0b\7e\01\42\13\0b" "\7c\00\44\00\00\00\00\00\00\4b\40\0b\7c\01\44\00\00\00\00" "\00\00\33\40\0b\7f\01\41\00\0b\7d\01\43\00\00\00\00\0b\7e" "\01\42\00\0b\7c\01\44\00\00\00\00\00\00\00\00\0b\07\14\02" "\06\5f\73\74\61\72\74\00\00\07\74\6f\5f\74\65\73\74\00\00" "\0a\49\01\47\04\01\7f\01\7d\01\7e\8a\01\7c\41\c0\91\91\01" "\21\00\43\d9\c1\74\3f\0f\21\01\42\a5\8c\90\90\80\80\91\7b" "\21\02\44\00\0a\55\8c\b0\f0\c5\c6\21\03\41\01\41\00\36\40" "\8b\20\00\24\08\20\01\24\09\20\02\24\0a\20\13\24\0b\0b\0b" "\32\03\00\41\08\0b\08\10\00\00\00\0d\00\00\00\00\41\10\0b" "\0d\48\65\6c\6c\6f\20\57\6f\72\6c\64\21\0a\00\41\20\0b\0d" "\48\65\6c\6c\6f\20\57\6f\72\6c\64\21\0a") "alignment") ;; Minimal over-alignment: i32.store with alignment log2 = 4 (16 bytes), (assert_invalid (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; type section: (func) "\03\02\01\00" ;; function section: func 0 is type 0 "\05\03\01\00\01" ;; memory section: (memory 1) "\0a\0b\01" ;; code section: 1 function "\09\00" ;; body: 9 bytes, 0 locals "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\36\04\00" ;; i32.store align=2^4 offset=0 "\0b" ;; end ) "alignment") ;; Maximum well-formed over-alignment: i32.store with alignment log2 = 63 (2^63 bytes), (assert_invalid (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; type section: (func) "\03\02\01\00" ;; function section: func 0 is type 0 "\05\03\01\00\01" ;; memory section: (memory 1) "\0a\0b\01" ;; code section: 1 function "\09\00" ;; body: 9 bytes, 0 locals "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\36\3f\00" ;; i32.store align=2^63 offset=0 "\0b" ;; end ) "alignment") ;; Malformed over-alignment that avoids the 0x40 memory index flag: i32.store with alignment log2 = 128 (2^128 bytes), (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; type section: (func) "\03\02\01\00" ;; function section: func 0 is type 0 "\05\03\01\00\01" ;; memory section: (memory 1) "\0a\0b\01" ;; code section: 1 function "\09\00" ;; body: 9 bytes, 0 locals "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\36\80\01\00" ;; i32.store align=2^128 offset=0 "\0b" ;; end ) "alignment") ================================================ FILE: Test/wavm/issues/issue-347.wast ================================================ ;; #347: Wrong type code of v128_const (module binary "\00\61\73\6d\01\00\00\00\01\14\04\60\04\7f\7f\7f\7f\01\7f" "\60\01\7f\00\60\00\00\60\00\01\7b\03\02\01\03\05\03\01\00" "\01\06\9c\01\0f\7f\00\41\9d\04\0b\7f\01\41\bf\01\0b\7d\00" "\43\00\40\07\44\0b\7d\01\43\00\00\40\43\0b\7e\00\42\36\0b" "\7e\01\42\13\0b\7c\00\44\00\00\00\00\00\00\4b\40\0b\7c\01" "\44\00\00\00\00\00\00\33\40\0b\7f\01\41\00\0b\7d\01\43\00" "\00\00\00\0b\7e\01\42\00\0b\7c\01\44\00\00\00\00\00\00\00" "\00\0b\7b\01\fd\0c\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\0b\7b\00\fd\0c\01\02\03\04\05\06\07\08\09\0a\00" "\ff\0f\f0\0d\0c\0b\7b\01\fd\0c\fe\00\00\00\ff\03\00\00\0f" "\00\00\00\00\00\00\00\0b\07\14\02\06\5f\73\74\61\72\74\00" "\00\07\74\6f\5f\74\65\73\74\00\00\0a\6e\01\6c\05\01\7f\01" "\7d\01\7e\01\7c\01\7b\41\f8\ac\d1\91\01\21\00\43\00\00\c6" "\42\21\01\42\85\88\8c\90\90\80\80\80\7f\21\02\44\79\0a\96" "\8c\b0\f0\c5\46\21\03\fd\0c\0b\0c\0d\0e\0f\06\07\08\09\0a" "\00\ff\0f\f0\0d\0c\21\04\fd\0c\d9\20\38\aa\cb\b0\b3\44\5a" "\e6\26\5d\25\8c\28\e3\20\00\24\08\20\01\24\09\20\02\24\0a" "\20\03\24\0b\20\04\24\0c\0b\0b\32\03\00\41\08\0b\08\10\00" "\00\00\0d\00\00\00\00\41\10\0b\0d\48\65\6c\6c\6f\20\57\6f" "\72\6c\64\21\0a\00\41\20\0b\0d\48\65\6c\6c\6f\20\57\6f\72" "\6c\64\21\0a") (assert_return (invoke "to_test") (v128.const i32x4 0xaa3820d9 0x44b3b0cb 0x5d26e65a 0xe3288c25)) ================================================ FILE: Test/wavm/issues/issue-354.wast ================================================ ;; #354: Unexpected execution (type mismatch not rejected) ;; Original test case: local.tee $0 (i32) followed by f32.floor in unreachable code. (assert_invalid (module binary "\00\61\73\6d\01\00\00\00\01\08\02\60\00\00\60\00\01\7b\03" "\02\01\01\07\14\02\06\5f\73\74\61\72\74\00\00\07\74\6f\5f" "\74\65\73\74\00\00\0a\36\01\34\04\02\7f\01\7d\01\7e\01\7c" "\fd\0c\36\0f\4c\a7\74\11\65\a7\e2\01\d3\66\0d\f1\0b\fd\0c" "\00\98\00\00\22\00\8e\00\89\00\00\91\00\00\be\00\00\00\00" "\00\fd\95\01\0b") "type mismatch") ;; Minimal reproduction: local.tee pushes i32, f32.neg expects f32. (assert_invalid (module (func (local i32) unreachable local.tee 0 ;; pops unknown, must push i32 (not none) f32.neg ;; expects f32, should find i32 drop)) "type mismatch") ;; Verify local.tee in unreachable code pushes the correct type for i64. (assert_invalid (module (func (local i64) unreachable local.tee 0 i32.eqz ;; expects i32, should find i64 drop)) "type mismatch") ;; Verify the fix doesn't break valid uses of local.tee in unreachable code. (module (func (result i32) (local i32) unreachable local.tee 0 i32.add)) ================================================ FILE: Test/wavm/issues/issue-355.wast ================================================ ;; #355: Unexpected execution due to illegal opcode (0xec) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\08\02\60\00\00\60\00\01\7b\03" "\02\01\01\07\14\02\06\5f\73\74\61\72\74\00\00\07\74\6f\5f" "\74\65\73\74\00\00\0a\22\01\20\04\01\7f\01\7d\01\7e\01\7c" "\fd\0c\a5\ed\29\da\2c\65\7b\54\2d\25\26\93\c8\bb\03\e6\ec" "\fd\fa\01\0b") "unknown opcode") ================================================ FILE: Test/wavm/issues/issue-356.wast ================================================ ;; #356: Unexpected execution due to illegal opcode (0xf9) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\08\02\60\00\00\60\00\01\7b\03" "\02\01\01\07\14\02\06\5f\73\74\61\72\74\00\00\07\74\6f\5f" "\74\65\73\74\00\00\0a\21\01\1f\04\01\7f\01\7d\01\7e\01\7c" "\fd\0c\5e\5a\2a\f6\a9\f3\10\0d\41\53\d2\28\7b\ac\70\26\f9" "\fd\69\0b") "unknown opcode") ================================================ FILE: Test/wavm/issues/issue-357.wast ================================================ ;; #357: Unexpected execution (illegal opcode 0xfd3d70) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\08\02\60\00\00\60\00\01\7b\03" "\02\01\01\07\14\02\06\5f\73\74\61\72\74\00\00\07\74\6f\5f" "\74\65\73\74\00\00\0a\33\01\31\04\01\7f\01\7d\01\7e\01\7c" "\fd\0c\a4\9d\62\4c\7a\de\68\ca\d6\dc\67\9d\23\f2\d3\5e\fd" "\0c\93\d6\65\00\35\72\da\5a\e2\91\7b\fd\c6\98\9f\30\fd\f0" "\7a\0b") "unknown opcode") ================================================ FILE: Test/wavm/issues/issue-360.wast ================================================ ;; #360: Unexpected execution (table OOB not trapped) (module (type $0 (func (param i32 i32 i32 i32) (result i32))) (type $1 (func (param i32))) (type $2 (func)) (type $3 (func (result i32))) (memory $5 1 5) (table $4 3 6 funcref) (global $14 (mut i32) (i32.const 0)) (global $15 (mut f32) (f32.const 0x0.000000p-127)) (global $16 (mut i64) (i64.const 0)) (global $17 (mut f64) (f64.const 0x0.0000000000000p-1023)) (export "to_test" (func $22)) (elem $18 (i32.const 0) $23 $24 $25) (func $22 (type $2) ;; table.init with dest=-2147483648 (0x80000000), source=0, count=0. ;; The active elem segment has already been dropped after instantiation, ;; so this is a zero-count init on a dropped segment with an OOB dest. i32.const -2147483648 i32.const 0 i32.const 0 table.init $18 ) (func $23 (type $3) (result i32) i32.const 4) (func $24 (type $3) (result i32) i32.const 5) (func $25 (type $3) (result i32) i32.const 6)) (assert_trap (invoke "to_test") "out of bounds table access") ================================================ FILE: Test/wavm/issues/issue-378.wast ================================================ ;; #378: Runtime exception (module $wasi_stubs (func (export "args_sizes_get") (param i32 i32) (result i32) i32.const 0) (func (export "args_get") (param i32 i32) (result i32) i32.const 0) (func (export "proc_exit") (param i32) unreachable) (func (export "fd_write") (param i32 i32 i32 i32) (result i32) i32.const 0)) (register "wasi_snapshot_preview1" $wasi_stubs) (assert_trap (module binary "\00\61\73\6d\01\00\00\00\01\72\11\60\03\7f\7f\7f\01\7f\60" "\01\7f\01\7f\60\01\7f\00\60\00\01\7f\60\00\00\60\02\7f\7f" "\01\7f\60\03\7f\7e\7f\01\7e\60\02\7e\7f\01\7f\60\02\7f\7f" "\00\60\03\7f\7f\7f\00\60\04\7f\7f\7f\7f\00\60\05\7f\7f\7f" "\7f\7f\00\60\04\7f\7f\7f\7f\01\7f\60\05\7f\7f\7f\7f\7f\01" "\7f\60\07\7f\7f\7f\7f\7f\7f\7f\01\7f\60\06\7f\7c\7f\7f\7f" "\7f\01\7f\60\03\7e\7f\7f\01\7f\02\90\01\04\16\77\61\73\69" "\5f\73\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65\77\31\0e" "\61\72\67\73\5f\73\69\7a\65\73\5f\67\65\74\00\05\16\77\61" "\73\69\5f\73\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65\77" "\31\08\61\72\67\73\5f\67\65\74\00\05\16\77\61\73\69\5f\73" "\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65\77\31\09\70\72" "\6f\63\5f\65\78\69\74\00\02\16\77\61\73\69\5f\73\6e\61\70" "\73\68\6f\74\5f\70\72\65\76\69\65\77\31\08\66\64\5f\77\72" "\69\74\65\00\0c\03\33\32\04\05\04\03\03\05\03\01\02\00\04" "\02\04\00\00\01\06\00\01\00\03\00\03\05\02\02\03\04\04\02" "\01\00\0d\0e\09\01\0a\10\07\07\0b\00\05\01\02\03\02\01\01" "\01\04\0d\03\70\01\05\05\70\01\05\05\70\01\05\05\05\06\01" "\01\80\02\80\02\06\19\03\7f\01\41\90\98\c0\02\0b\7f\01\41" "\90\98\c0\02\0b\7f\01\41\90\98\c0\02\0b\07\73\08\06\6d\65" "\6d\6f\72\79\02\00\19\5f\5f\69\6e\64\69\72\65\63\74\55\66" "\75\6e\63\74\69\6f\6e\00\74\61\62\6c\65\01\00\06\5f\73\74" "\61\72\74\00\06\10\5f\5f\65\72\72\6e\6f\5f\6c\6f\63\61\74" "\69\6f\6e\00\0a\06\66\66\6c\75\73\68\00\34\09\73\74\61\63" "\6b\53\61\76\65\00\31\0c\73\74\61\63\6b\52\65\73\74\6f\72" "\65\00\32\0a\73\74\61\63\6b\41\6c\6c\6f\63\00\33\09\14\02" "\00\41\01\0b\04\04\13\12\14\00\41\01\0b\05\04\13\12\14\14" "\0a\9a\32\32\03\00\01\0b\73\03\01\7f\01\7f\01\7f\23\00\41" "\20\6b\22\02\24\00\20\02\20\00\36\02\10\41\80\08\20\02\41" "\10\6a\10\2e\1a\20\00\41\7f\4a\04\40\03\40\20\01\20\03\41" "\02\74\6a\28\02\00\21\04\20\02\20\03\36\02\00\20\02\20\04" "\41\97\08\20\04\1b\36\02\04\41\89\08\20\02\10\2e\1a\20\00" "\20\03\46\21\04\20\03\41\01\6a\21\03\20\04\45\0d\00\0b\0b" "\20\02\41\20\6a\24\00\41\00\0b\09\00\10\04\10\07\10\0f\00" "\0b\04\00\10\08\0b\95\01\04\01\7f\01\7f\01\7f\01\7f\23\00" "\41\10\6b\22\00\24\00\02\40\20\00\22\01\41\0c\6a\20\00\41" "\08\6a\10\00\45\04\40\02\7f\41\00\20\01\28\02\0c\22\02\45" "\0d\00\1a\20\00\20\02\41\02\74\22\02\41\13\6a\41\70\71\6b" "\22\00\22\03\24\00\20\03\20\01\28\02\08\41\0f\6a\41\70\71" "\6b\22\03\24\00\20\00\20\02\6a\41\00\36\02\00\20\00\20\03" "\10\01\0d\02\20\01\28\02\0c\0b\22\02\20\00\10\09\21\00\20" "\01\41\10\6a\24\00\20\00\0f\0b\41\c7\00\10\02\00\0b\41\c7" "\00\10\02\00\0b\08\00\20\00\20\01\10\05\0b\05\00\41\a0\0f" "\0b\14\00\20\00\45\04\40\41\00\0f\0b\10\0a\20\00\36\02\00" "\41\7f\0b\07\00\20\00\10\02\00\0b\43\02\01\7f\01\7f\20\02" "\04\40\20\00\21\03\03\40\20\03\20\01\20\02\41\fc\03\20\02" "\41\fc\03\49\1b\22\04\10\11\21\03\20\01\41\fc\03\6a\21\01" "\20\03\41\fc\03\6a\21\03\20\02\20\04\6b\22\02\0d\00\0b\0b" "\20\00\0b\04\00\10\10\0b\0d\00\10\10\10\0e\10\20\20\00\10" "\0c\00\0b\03\00\01\0b\86\04\03\01\7f\01\7f\01\7f\20\02\41" "\80\04\4f\04\40\20\00\20\01\20\02\10\0d\1a\20\00\0f\0b\20" "\00\20\02\6a\21\03\02\40\20\00\20\01\73\41\03\71\45\04\40" "\02\40\20\02\41\01\48\04\40\20\00\21\02\0c\01\0b\20\00\41" "\03\71\45\04\40\20\00\21\02\0c\01\0b\20\00\21\02\03\40\20" "\02\20\01\2d\00\00\3a\00\00\20\01\41\01\6a\21\01\20\02\41" "\01\6a\22\02\20\03\4f\0d\01\20\02\41\03\71\0d\00\0b\0b\02" "\40\20\03\41\7c\71\22\04\41\c0\00\49\0d\00\20\02\20\04\41" "\40\6a\22\05\4b\0d\00\03\40\20\02\20\01\28\02\00\36\02\00" "\20\02\20\01\28\02\04\36\02\04\20\02\20\01\28\02\08\36\02" "\08\20\02\20\01\28\02\0c\36\02\0c\20\02\20\01\28\02\10\36" "\02\10\20\02\20\01\28\02\14\36\02\14\20\02\20\01\28\02\18" "\36\02\18\20\02\20\01\28\02\1c\36\02\1c\20\02\20\01\28\02" "\20\36\02\20\20\02\20\01\28\02\24\36\02\24\20\02\20\01\28" "\02\28\36\02\28\20\02\20\01\28\02\2c\36\02\2c\20\02\20\01" "\28\02\30\36\02\30\20\02\20\01\28\02\34\36\02\34\20\02\20" "\01\28\02\38\36\02\38\20\02\20\01\28\02\3c\36\02\3c\20\01" "\41\40\6b\21\01\20\02\41\40\6b\22\02\20\05\4d\0d\00\0b\0b" "\20\02\20\04\4f\0d\01\03\40\20\02\20\01\28\02\00\36\02\00" "\20\01\41\04\6a\21\01\20\02\41\04\6a\22\02\20\04\49\0d\00" "\0b\0c\01\0b\20\03\41\04\49\04\40\20\00\21\02\0c\01\0b\20" "\00\20\03\41\04\6b\22\04\4b\04\40\20\00\21\02\0c\01\0b\20" "\00\21\02\03\40\20\02\20\01\2d\00\00\3a\00\00\20\02\20\01" "\2d\00\01\3a\00\01\20\02\20\01\2d\00\02\3a\00\02\20\02\20" "\01\2d\00\03\3a\00\03\20\01\41\04\6a\21\01\20\02\41\04\6a" "\22\02\20\04\4d\0d\00\0b\0b\20\02\20\03\49\04\40\03\40\20" "\02\20\01\2d\00\00\3a\00\00\20\01\41\01\6a\21\01\20\02\41" "\01\6a\22\02\20\03\47\0d\00\0b\0b\20\00\0b\e0\02\07\01\7f" "\01\7f\01\7f\01\7f\01\7f\01\7f\01\7f\23\00\41\20\6b\22\03" "\24\00\20\03\20\00\28\02\1c\22\04\36\02\10\20\00\28\02\14" "\21\05\20\03\20\02\36\02\1c\20\03\20\01\36\02\18\20\03\20" "\05\20\04\6b\22\01\36\02\14\20\01\20\02\6a\21\06\41\02\21" "\07\20\03\41\10\6a\21\01\02\7f\02\40\02\40\20\00\28\02\3c" "\20\03\41\10\6a\41\02\20\03\41\0c\6a\10\03\10\0b\45\04\40" "\03\40\20\06\20\03\28\02\0c\22\04\46\0d\02\20\04\41\7f\4c" "\0d\03\20\01\20\04\20\01\28\02\04\22\08\4b\22\05\41\03\74" "\6a\22\09\20\04\20\08\41\00\20\05\1b\6b\22\08\20\09\28\02" "\00\6a\36\02\00\20\01\41\0c\41\04\20\05\1b\6a\22\09\20\09" "\28\02\00\20\08\6b\36\02\00\20\06\20\04\6b\21\06\20\00\28" "\02\3c\20\01\41\08\6a\20\01\20\05\1b\22\01\20\07\20\05\6b" "\22\07\20\03\41\0c\6a\10\03\10\0b\45\0d\00\0b\0b\20\06\41" "\7f\47\0d\01\0b\20\00\20\00\28\02\2c\22\01\36\02\1c\20\00" "\20\01\36\02\14\20\00\20\01\20\00\28\02\30\6a\36\02\10\20" "\02\0c\01\0b\20\00\41\00\36\02\1c\20\00\42\00\37\03\10\20" "\00\20\00\28\02\00\41\20\72\36\02\00\41\00\22\04\20\07\41" "\02\46\0d\00\1a\20\02\20\01\28\02\04\6b\0b\21\04\20\03\41" "\20\6a\24\00\20\04\0b\04\00\41\00\0b\04\00\42\00\0b\f7\02" "\04\01\7f\01\7e\01\7f\01\7f\02\40\20\02\45\0d\00\20\00\20" "\02\6a\22\03\41\01\6b\20\01\3a\00\00\20\00\20\01\3a\00\00" "\20\02\41\03\49\0d\00\20\03\41\02\6b\20\01\3a\00\00\20\00" "\20\01\3a\00\01\20\03\41\03\6b\20\01\3a\00\00\20\00\20\01" "\3a\00\02\20\02\41\07\49\0d\00\20\03\41\04\6b\20\01\3a\00" "\00\20\00\20\01\3a\00\03\20\02\41\09\49\0d\00\20\00\41\00" "\20\00\6b\41\03\71\22\05\6a\22\03\20\01\41\ff\01\71\41\81" "\82\84\08\6c\22\01\36\02\00\20\03\20\02\20\05\6b\41\7c\71" "\22\05\6a\22\02\41\04\6b\20\01\36\02\00\20\05\41\09\49\0d" "\00\20\03\20\01\36\02\08\20\03\20\01\36\02\04\20\02\41\08" "\6b\20\01\36\02\00\20\02\41\0c\6b\20\01\36\02\00\20\05\41" "\19\49\0d\00\20\03\20\01\36\02\18\20\03\20\01\36\02\14\20" "\03\20\01\36\02\10\20\03\20\01\36\02\0c\20\02\41\10\6b\20" "\01\36\02\00\20\02\41\14\6b\20\01\36\02\00\20\02\41\18\6b" "\20\01\36\02\00\20\02\41\1c\6b\20\01\36\02\00\20\05\20\03" "\41\04\71\41\18\72\22\06\6b\22\02\41\20\49\0d\00\20\01\ad" "\22\04\42\20\86\20\04\84\21\04\20\03\20\06\6a\21\01\03\40" "\20\01\20\04\37\03\18\20\01\20\04\37\03\10\20\01\20\04\37" "\03\08\20\01\20\04\37\03\00\20\01\41\20\6a\21\01\20\02\41" "\20\6b\22\02\41\1f\4b\0d\00\0b\0b\20\00\0b\0a\00\20\00\41" "\30\6b\41\0a\49\0b\e7\01\02\01\7f\01\7f\20\02\41\00\47\21" "\03\02\40\02\40\02\40\20\02\45\0d\00\20\00\41\03\71\45\0d" "\00\20\01\41\ff\01\71\21\04\03\40\20\00\2d\00\00\20\04\46" "\0d\02\20\00\41\01\6a\21\00\20\02\41\01\6b\22\02\41\00\47" "\21\03\20\02\45\0d\01\20\00\41\03\71\0d\00\0b\0b\20\03\45" "\0d\01\0b\02\40\20\00\2d\00\00\20\01\41\ff\01\71\46\0d\00" "\20\02\41\04\49\0d\00\20\01\41\ff\01\71\41\81\82\84\08\6c" "\21\04\03\40\20\00\28\02\00\20\04\73\22\03\41\7f\73\20\03" "\41\81\82\84\08\6b\71\41\80\81\82\84\78\71\0d\01\20\00\41" "\04\6a\21\00\20\02\41\04\6b\22\02\41\03\4b\0d\00\0b\0b\20" "\02\45\0d\00\20\01\41\ff\01\71\21\03\03\40\20\03\20\00\2d" "\00\00\46\04\40\20\00\0f\0b\20\00\41\01\6a\21\00\20\02\41" "\01\6b\22\02\0d\00\0b\0b\41\00\0b\05\00\41\b4\0d\0b\8f\02" "\01\01\7f\41\01\21\03\02\40\20\00\04\40\20\01\41\ff\00\4d" "\0d\01\02\40\10\1a\28\02\b0\01\28\02\00\45\04\40\20\01\41" "\80\7f\71\41\80\bf\03\46\0d\03\0c\01\0b\20\01\41\ff\0f\4d" "\04\40\20\00\20\01\41\3f\71\41\80\01\72\3a\00\01\20\00\20" "\01\41\06\76\41\c0\01\72\3a\00\00\41\02\0f\0b\20\01\41\80" "\b0\03\4f\41\00\20\01\41\80\40\71\41\80\c0\03\47\1b\45\04" "\40\20\00\20\01\41\3f\71\41\80\01\72\3a\00\02\20\00\20\01" "\41\0c\76\41\e0\01\72\3a\00\00\20\00\20\01\41\06\76\41\3f" "\71\41\80\01\72\3a\00\01\41\03\0f\0b\20\01\41\80\80\04\6b" "\41\ff\ff\3f\4d\04\40\20\00\20\01\41\3f\71\41\80\01\72\3a" "\00\03\20\00\20\01\41\12\76\41\f0\01\72\3a\00\00\20\00\20" "\01\41\06\76\41\3f\71\41\80\01\72\3a\00\02\20\00\20\01\41" "\0c\76\41\3f\71\41\80\01\72\3a\00\01\41\04\0f\0b\0b\10\0a" "\41\19\36\02\00\41\7f\21\03\0b\20\03\0f\0b\20\00\20\01\3a" "\00\00\41\01\0b\04\00\10\18\0b\13\00\20\00\45\04\40\41\00" "\0f\0b\20\00\20\01\41\00\10\19\0b\03\00\01\0b\03\00\01\0b" "\0a\00\41\f8\17\10\1c\41\80\18\0b\07\00\41\f8\17\10\1d\0b" "\2e\01\01\7f\10\1e\28\02\00\22\00\04\40\03\40\20\00\10\21" "\20\00\28\02\38\22\00\0d\00\0b\0b\41\84\18\28\02\00\10\21" "\41\b0\0d\28\02\00\10\21\0b\5f\02\01\7f\01\7f\02\40\20\00" "\45\0d\00\20\00\28\02\4c\41\00\4e\04\40\20\00\10\2f\1a\0b" "\20\00\28\02\14\20\00\28\02\1c\4b\04\40\20\00\41\00\41\00" "\20\00\28\02\24\11\00\00\1a\0b\20\00\28\02\04\22\01\20\00" "\28\02\08\22\02\4f\0d\00\20\00\20\01\20\02\6b\ac\41\01\20" "\00\28\02\28\11\06\00\1a\0b\0b\59\01\01\7f\20\00\20\00\2d" "\00\4a\22\01\41\01\6b\20\01\72\3a\00\4a\20\00\28\02\00\22" "\01\41\08\71\04\40\20\00\20\01\41\20\72\36\02\00\41\7f\0f" "\0b\20\00\42\00\37\02\04\20\00\20\00\28\02\2c\22\01\36\02" "\1c\20\00\20\01\36\02\14\20\00\20\01\20\00\28\02\30\6a\36" "\02\10\41\00\0b\c9\01\03\01\7f\01\7f\01\7f\02\40\02\7f\20" "\02\28\02\10\22\03\45\04\40\20\02\10\22\0d\02\20\02\28\02" "\10\21\03\0b\20\01\20\03\20\02\28\02\14\22\05\6b\4b\0b\04" "\40\20\02\20\00\20\01\20\02\28\02\24\11\00\00\0f\0b\02\40" "\20\02\2c\00\4b\41\00\48\04\40\41\00\21\03\0c\01\0b\20\01" "\21\04\03\40\20\04\22\03\45\04\40\41\00\21\03\0c\02\0b\20" "\00\20\03\41\01\6b\22\04\6a\2d\00\00\41\0a\47\0d\00\0b\20" "\02\20\00\20\03\20\02\28\02\24\11\00\00\22\04\20\03\49\0d" "\01\20\00\20\03\6a\21\00\20\01\20\03\6b\21\01\20\02\28\02" "\14\21\05\0b\20\05\20\00\20\01\10\11\1a\20\02\20\02\28\02" "\14\20\01\6a\36\02\14\20\01\20\03\6a\21\04\0b\20\04\0b\82" "\03\03\01\7f\01\7f\01\7f\23\00\41\d0\01\6b\22\05\24\00\20" "\05\20\02\36\02\cc\01\41\00\21\02\20\05\41\a0\01\6a\41\00" "\41\28\10\15\1a\20\05\20\05\28\02\cc\01\36\02\c8\01\02\40" "\41\00\20\01\20\05\41\c8\01\6a\20\05\41\d0\00\6a\20\05\41" "\a0\01\6a\20\03\20\04\10\25\41\00\48\04\40\41\7f\21\01\0c" "\01\0b\20\00\28\02\4c\41\00\4e\04\40\20\00\10\2f\21\02\0b" "\20\00\28\02\00\21\06\20\00\2c\00\4a\41\00\4c\04\40\20\00" "\20\06\41\5f\71\36\02\00\0b\20\06\41\20\71\21\06\02\7f\20" "\00\28\02\30\04\40\20\00\20\01\20\05\41\c8\01\6a\20\05\41" "\d0\00\6a\20\05\41\a0\01\6a\20\03\20\04\10\25\0c\01\0b\20" "\00\41\d0\00\36\02\30\20\00\20\05\41\d0\00\6a\36\02\10\20" "\00\20\05\36\02\1c\20\00\20\05\36\02\14\20\00\28\02\2c\21" "\07\20\00\20\05\36\02\2c\20\00\20\01\20\05\41\c8\01\6a\20" "\05\41\d0\00\6a\20\05\41\a0\01\6a\20\03\20\04\10\25\22\01" "\20\07\45\0d\00\1a\20\00\41\00\41\00\20\00\28\02\24\11\00" "\00\1a\20\00\41\00\36\02\30\20\00\20\07\36\02\2c\20\00\41" "\00\36\02\1c\20\00\41\00\36\02\10\20\00\28\02\14\21\03\20" "\00\41\00\36\02\14\20\01\41\7f\20\03\1b\0b\21\01\20\00\20" "\00\28\02\00\22\03\20\06\72\36\02\00\41\7f\20\01\20\03\41" "\20\71\1b\21\01\20\02\45\0d\00\20\00\10\30\0b\20\05\41\d0" "\01\6a\24\00\20\01\0b\ad\11\10\01\7f\01\7f\01\7f\01\7f\01" "\7f\01\7f\01\7f\01\7f\01\7f\01\7f\01\7f\01\7f\01\7e\01\7f" "\01\7f\01\7f\23\00\41\d0\00\6b\22\07\24\00\20\07\20\01\36" "\02\4c\20\07\41\37\6a\21\16\20\07\41\38\6a\21\12\41\00\21" "\01\02\40\03\40\02\40\20\10\41\00\48\0d\00\41\ff\ff\ff\ff" "\07\20\10\6b\20\01\48\04\40\10\0a\41\3d\36\02\00\41\7f\21" "\10\0c\01\0b\20\01\20\10\6a\21\10\0b\20\07\28\02\4c\22\0b" "\21\01\02\40\02\40\02\40\02\40\20\0b\2d\00\00\22\08\04\40" "\03\40\02\40\02\40\20\08\41\ff\01\71\22\08\45\04\40\20\01" "\21\08\0c\01\0b\20\08\41\25\47\0d\01\20\01\21\08\03\40\20" "\01\2d\00\01\41\25\47\0d\01\20\07\20\01\41\02\6a\22\09\36" "\02\4c\20\08\41\01\6a\21\08\20\01\2d\00\02\21\0c\20\09\21" "\01\20\0c\41\25\46\0d\00\0b\0b\20\08\20\0b\6b\21\01\20\00" "\04\40\20\00\20\0b\20\01\10\26\0b\20\01\0d\07\20\07\28\02" "\4c\2c\00\01\10\16\21\01\20\07\28\02\4c\21\08\20\07\02\7f" "\02\40\20\01\45\0d\00\20\08\2d\00\02\41\24\47\0d\00\20\08" "\2c\00\01\41\30\6b\21\11\41\01\21\14\20\08\41\03\6a\0c\01" "\0b\41\7f\21\11\20\08\41\01\6a\0b\22\01\36\02\4c\41\00\21" "\0e\02\40\20\01\2c\00\00\22\0c\41\20\6b\22\09\41\1f\4b\04" "\40\20\01\21\08\0c\01\0b\20\01\21\08\41\01\20\09\74\22\09" "\41\89\d1\04\71\45\0d\00\03\40\20\07\20\01\41\01\6a\22\08" "\36\02\4c\20\09\20\0e\72\21\0e\20\01\2c\00\01\22\0c\41\20" "\6b\22\09\41\20\4f\0d\01\20\08\21\01\41\01\20\09\74\22\09" "\41\89\d1\04\71\0d\00\0b\0b\02\40\20\0c\41\2a\46\04\40\20" "\07\02\7f\02\40\20\08\2c\00\01\10\16\45\0d\00\20\07\28\02" "\4c\22\08\2d\00\02\41\24\47\0d\00\20\08\2c\00\01\41\02\74" "\20\04\6a\41\c0\01\6b\41\0a\36\02\00\20\08\2c\00\01\41\03" "\74\20\03\6a\41\80\03\6b\28\02\00\21\0f\41\01\21\14\20\08" "\41\03\6a\0c\01\0b\20\14\0d\06\41\00\21\14\41\00\21\0f\20" "\00\04\40\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20" "\01\28\02\00\21\0f\0b\20\07\28\02\4c\41\01\6a\0b\22\01\36" "\02\4c\20\0f\41\7f\4a\0d\01\41\00\20\0f\6b\21\0f\20\0e\41" "\80\c0\00\72\21\0e\0c\01\0b\20\07\41\cc\00\6a\10\27\22\0f" "\41\00\48\0d\04\20\07\28\02\4c\21\01\0b\41\7f\21\0a\02\40" "\20\01\2d\00\00\41\2e\47\0d\00\20\01\2d\00\01\41\2a\46\04" "\40\02\40\20\01\2c\00\02\10\16\45\0d\00\20\07\28\02\4c\22" "\01\2d\00\03\41\24\47\0d\00\20\01\2c\00\02\41\02\74\20\04" "\6a\41\c0\01\6b\41\0a\36\02\00\20\01\2c\00\02\41\03\74\20" "\03\6a\41\80\03\6b\28\02\00\21\0a\20\07\20\01\41\04\6a\22" "\01\36\02\4c\0c\02\0b\20\14\0d\05\20\00\04\7f\20\02\20\02" "\28\02\00\22\01\41\04\6a\36\02\00\20\01\28\02\00\05\41\00" "\0b\21\0a\20\07\20\07\28\02\4c\41\02\6a\22\01\36\02\4c\0c" "\01\0b\20\07\20\01\41\01\6a\36\02\4c\20\07\41\cc\00\6a\10" "\27\21\0a\20\07\28\02\4c\21\01\0b\41\00\21\08\03\40\20\08" "\21\09\41\7f\21\0d\20\01\2c\00\00\41\c1\00\6b\41\39\4b\0d" "\09\20\07\20\01\41\01\6a\22\0c\36\02\4c\20\01\2c\00\00\21" "\08\20\0c\21\01\20\08\20\09\41\3a\6c\6a\2d\00\ff\07\22\08" "\41\01\6b\41\08\49\0d\00\0b\02\40\02\40\20\08\41\13\47\04" "\40\20\08\45\0d\0b\20\11\41\00\4e\04\40\20\04\20\11\41\02" "\74\6a\20\08\36\02\00\20\07\20\03\20\11\41\03\74\6a\29\03" "\00\37\03\40\0c\02\0b\20\00\45\0d\09\20\07\41\40\6b\20\08" "\20\02\20\06\10\28\20\07\28\02\4c\21\0c\0c\02\0b\20\11\41" "\7f\4a\0d\0a\0b\41\00\21\01\20\00\45\0d\08\0b\20\0e\41\ff" "\ff\7b\71\22\15\20\0e\20\0e\41\80\c0\00\71\1b\21\08\41\00" "\21\0d\41\a4\08\21\11\20\12\21\0e\02\40\02\40\02\40\02\7f" "\02\40\02\40\02\40\02\40\02\7f\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\20\0c\41\01\6b\2c\00\00\22\01\41\5f\71\20" "\01\20\01\41\0f\71\41\03\46\1b\20\01\20\09\1b\22\01\41\d8" "\00\6b\0e\21\04\15\15\15\15\15\15\15\15\0e\15\0f\06\0e\0e" "\0e\15\06\15\15\15\15\02\05\03\15\15\09\15\01\15\15\04\00" "\0b\02\40\20\01\41\c1\00\6b\0e\07\0e\15\0b\15\0e\0e\0e\00" "\0b\20\01\41\d3\00\46\0d\09\0c\13\0b\20\07\29\03\40\21\13" "\41\a4\08\0c\05\0b\41\00\21\01\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\20\09\41\ff\01\71\0e\08\00\01\02\03\04\1b" "\05\06\1b\0b\20\07\28\02\40\20\10\36\02\00\0c\1a\0b\20\07" "\28\02\40\20\10\36\02\00\0c\19\0b\20\07\28\02\40\20\10\ac" "\37\03\00\0c\18\0b\20\07\28\02\40\20\10\3b\01\00\0c\17\0b" "\20\07\28\02\40\20\10\3a\00\00\0c\16\0b\20\07\28\02\40\20" "\10\36\02\00\0c\15\0b\20\07\28\02\40\20\10\ac\37\03\00\0c" "\14\0b\20\0a\41\08\20\0a\41\08\4b\1b\21\0a\20\08\41\08\72" "\21\08\41\f8\00\21\01\0b\20\07\29\03\40\20\12\20\01\41\20" "\71\10\29\21\0b\20\08\41\08\71\45\0d\03\20\07\29\03\40\50" "\0d\03\20\01\41\04\76\41\a4\08\6a\21\11\41\02\21\0d\0c\03" "\0b\20\07\29\03\40\20\12\10\2a\21\0b\20\08\41\08\71\45\0d" "\02\20\0a\20\12\20\0b\6b\22\01\41\01\6a\20\01\20\0a\48\1b" "\21\0a\0c\02\0b\20\07\29\03\40\22\13\42\7f\57\04\40\20\07" "\42\00\20\13\7d\22\13\37\03\40\41\01\21\0d\41\a4\08\0c\01" "\0b\20\08\41\80\10\71\04\40\41\01\21\0d\41\a5\08\0c\01\0b" "\41\a6\08\41\a4\08\20\08\41\01\71\22\0d\1b\0b\21\11\20\13" "\20\12\10\2b\21\0b\0b\20\08\41\ff\ff\7b\71\20\08\20\0a\41" "\7f\4a\1b\21\08\20\07\29\03\40\21\13\02\40\20\0a\0d\00\20" "\13\50\45\0d\00\41\00\21\0a\20\12\21\0b\0c\0c\0b\20\0a\20" "\13\50\20\12\20\0b\6b\6a\22\01\20\01\20\0a\48\1b\21\0a\0c" "\0b\0b\20\07\28\02\40\22\01\41\ae\08\20\01\1b\22\0b\41\00" "\20\0a\10\17\22\01\20\0a\20\0b\6a\20\01\1b\21\0e\20\15\21" "\08\20\01\20\0b\6b\20\0a\20\01\1b\21\0a\0c\0b\0b\20\0a\04" "\40\20\07\28\02\40\0c\02\0b\41\00\21\01\20\00\41\20\20\0f" "\41\00\20\08\10\2c\0c\02\0b\20\07\41\00\36\02\0c\20\07\20" "\07\29\03\40\3e\02\08\20\07\20\07\41\08\6a\36\02\40\41\7f" "\21\0a\20\07\41\08\6a\0b\21\09\41\00\21\01\02\40\03\40\20" "\09\28\02\00\22\0c\45\0d\01\02\40\20\07\41\04\6a\20\0c\10" "\1b\22\0c\41\00\48\22\0b\0d\00\20\0c\20\0a\20\01\6b\4b\0d" "\00\20\09\41\04\6a\21\09\20\0a\20\01\20\0c\6a\22\01\4b\0d" "\01\0c\02\0b\0b\41\7f\21\0d\20\0b\0d\0c\0b\20\00\41\20\20" "\0f\20\01\20\08\10\2c\20\01\45\04\40\41\00\21\01\0c\01\0b" "\41\00\21\0c\20\07\28\02\40\21\09\03\40\20\09\28\02\00\22" "\0b\45\0d\01\20\07\41\04\6a\20\0b\10\1b\22\0b\20\0c\6a\22" "\0c\20\01\4a\0d\01\20\00\20\07\41\04\6a\20\0b\10\26\20\09" "\41\04\6a\21\09\20\01\20\0c\4b\0d\00\0b\0b\20\00\41\20\20" "\0f\20\01\20\08\41\80\c0\00\73\10\2c\20\0f\20\01\20\01\20" "\0f\48\1b\21\01\0c\09\0b\20\00\20\07\2b\03\40\20\0f\20\0a" "\20\08\20\01\20\05\11\0f\00\21\01\0c\08\0b\20\07\20\07\29" "\03\40\3c\00\37\41\01\21\0a\20\16\21\0b\20\15\21\08\0c\05" "\0b\20\07\20\01\41\01\6a\22\09\36\02\4c\20\01\2d\00\01\21" "\08\20\09\21\01\0c\00\0b\00\0b\20\10\21\0d\20\00\0d\05\20" "\14\45\0d\03\41\01\21\01\03\40\20\04\20\01\41\02\74\6a\28" "\02\00\22\08\04\40\20\03\20\01\41\03\74\6a\20\08\20\02\20" "\06\10\28\41\01\21\0d\20\01\41\01\6a\22\01\41\0a\47\0d\01" "\0c\07\0b\0b\41\01\21\0d\20\01\41\0a\4f\0d\05\03\40\20\04" "\20\01\41\02\74\6a\28\02\00\0d\01\20\01\41\01\6a\22\01\41" "\0a\47\0d\00\0b\0c\05\0b\41\7f\21\0d\0c\04\0b\0b\20\00\41" "\20\20\0d\20\0e\20\0b\6b\22\0c\20\0a\20\0a\20\0c\48\1b\22" "\0e\6a\22\09\20\0f\20\09\20\0f\4a\1b\22\01\20\09\20\08\10" "\2c\20\00\20\11\20\0d\10\26\20\00\41\30\20\01\20\09\20\08" "\41\80\80\04\73\10\2c\20\00\41\30\20\0e\20\0c\41\00\10\2c" "\20\00\20\0b\20\0c\10\26\20\00\41\20\20\01\20\09\20\08\41" "\80\c0\00\73\10\2c\0c\01\0b\0b\41\00\21\0d\0b\20\07\41\d0" "\00\6a\24\00\20\0d\0b\17\00\20\00\2d\00\00\41\20\71\45\04" "\40\20\01\20\02\20\00\10\23\1a\0b\0b\46\03\01\7f\01\7f\01" "\7f\20\00\28\02\00\2c\00\00\10\16\04\40\03\40\20\00\28\02" "\00\22\02\2c\00\00\21\03\20\00\20\02\41\01\6a\36\02\00\20" "\03\20\01\41\0a\6c\6a\41\30\6b\21\01\20\02\2c\00\01\10\16" "\0d\00\0b\0b\20\01\0b\bb\02\00\02\40\20\01\41\14\4b\0d\00" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\20\01\41\09\6b\0e\0a\00\01\02\03\04\05\06\07\08\09\0a" "\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20" "\01\28\02\00\36\02\00\0f\0b\20\02\20\02\28\02\00\22\01\41" "\04\6a\36\02\00\20\00\20\01\34\02\00\37\03\00\0f\0b\20\02" "\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\35\02" "\00\37\03\00\0f\0b\20\02\20\02\28\02\00\41\07\6a\41\78\71" "\22\01\41\08\6a\36\02\00\20\00\20\01\29\03\00\37\03\00\0f" "\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20" "\01\32\01\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41" "\04\6a\36\02\00\20\00\20\01\33\01\00\37\03\00\0f\0b\20\02" "\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\30\00" "\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36" "\02\00\20\00\20\01\31\00\00\37\03\00\0f\0b\20\02\20\02\28" "\02\00\41\07\6a\41\78\71\22\01\41\08\6a\36\02\00\20\00\20" "\01\2b\03\00\39\03\00\0f\0b\20\00\20\02\20\03\11\08\00\0b" "\0b\34\00\20\00\50\45\04\40\03\40\20\01\41\01\6b\22\01\20" "\00\a7\41\0f\71\41\90\0c\6a\2d\00\00\20\02\72\3a\00\00\20" "\00\42\04\88\22\00\42\00\52\0d\00\0b\0b\20\01\0b\2d\00\20" "\00\50\45\04\40\03\40\20\01\41\01\6b\22\01\20\00\a7\41\07" "\71\41\30\72\3a\00\00\20\00\42\03\88\22\00\42\00\52\0d\00" "\0b\0b\20\01\0b\87\01\04\01\7f\01\7e\01\7f\01\7f\02\40\20" "\00\42\80\80\80\80\10\54\04\40\20\00\21\03\0c\01\0b\03\40" "\20\01\41\01\6b\22\01\20\00\20\00\42\0a\80\22\03\42\0a\7e" "\7d\a7\41\30\72\3a\00\00\20\00\42\ff\ff\ff\ff\9f\01\56\21" "\02\20\03\21\00\20\02\0d\00\0b\0b\20\03\a7\22\02\04\40\03" "\40\20\01\41\01\6b\22\01\20\02\20\02\41\0a\6e\22\04\41\0a" "\6c\6b\41\30\72\3a\00\00\20\02\41\09\4b\21\05\20\04\21\02" "\20\05\0d\00\0b\0b\20\01\0b\6f\01\01\7f\23\00\41\80\02\6b" "\22\05\24\00\02\40\20\02\20\03\4c\0d\00\20\04\41\80\c0\04" "\71\0d\00\20\05\20\01\41\ff\01\71\20\02\20\03\6b\22\02\41" "\80\02\20\02\41\80\02\49\22\03\1b\10\15\1a\20\03\45\04\40" "\03\40\20\00\20\05\41\80\02\10\26\20\02\41\80\02\6b\22\02" "\41\ff\01\4b\0d\00\0b\0b\20\00\20\05\20\02\10\26\0b\20\05" "\41\80\02\6a\24\00\0b\0e\00\20\00\20\01\20\02\41\00\41\00" "\10\24\0b\2b\01\01\7f\23\00\41\10\6b\22\02\24\00\20\02\20" "\01\36\02\0c\41\a0\08\28\02\00\20\00\20\01\10\2d\21\01\20" "\02\41\10\6a\24\00\20\01\0b\04\00\41\01\0b\03\00\01\0b\04" "\00\23\00\0b\06\00\20\00\24\00\0b\12\01\01\7f\23\00\20\00" "\6b\41\70\71\22\01\24\00\20\01\0b\98\01\02\01\7f\01\7f\02" "\40\20\00\04\40\20\00\28\02\4c\41\7f\4c\04\40\20\00\10\35" "\0f\0b\20\00\10\2f\21\02\20\00\10\35\21\01\20\02\45\0d\01" "\20\00\10\30\20\01\0f\0b\41\b0\0d\28\02\00\04\40\41\b0\0d" "\28\02\00\10\34\21\01\0b\10\1e\28\02\00\22\00\04\40\03\40" "\41\00\21\02\20\00\28\02\4c\41\00\4e\04\40\20\00\10\2f\21" "\02\0b\20\00\28\02\14\20\00\28\02\1c\4b\04\40\20\00\10\35" "\20\01\72\21\01\0b\20\02\04\40\20\00\10\30\0b\20\00\28\02" "\38\22\00\0d\00\0b\0b\10\1f\0b\20\01\0b\6b\02\01\7f\01\7f" "\02\40\20\00\28\02\14\20\00\28\02\1c\4d\0d\00\20\00\41\00" "\41\00\20\00\28\02\24\11\00\00\1a\20\00\28\02\14\0d\00\41" "\7f\0f\0b\20\00\28\02\04\22\01\20\00\28\02\08\22\02\49\04" "\40\20\00\20\01\20\02\6b\ac\41\01\20\00\28\02\28\11\06\00" "\1a\0b\20\00\41\00\36\02\1c\20\00\42\00\37\03\10\20\00\42" "\00\37\02\e1\0f\00\0b\0b\c6\03\15\00\41\80\08\0b\34\61\72" "\67\63\3d\25\69\0a\00\61\72\67\76\5b\25\69\5d\3a\20\25\73" "\0a\00\3c\6e\75\6c\6c\3e\00\00\00\20\06\00\00\2d\2b\20\20" "\20\30\58\30\78\00\28\6e\75\6c\6c\29\00\41\c0\08\0b\41\11" "\00\0a\00\11\11\11\00\00\00\00\05\00\00\00\00\00\00\09\00" "\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\0f\0a\11\11\11" "\03\0a\07\00\01\00\09\0b\0b\00\00\09\06\01\00\00\00\00\06" "\11\00\00\00\11\11\11\00\41\91\09\0b\21\0b\00\00\00\00\00" "\00\00\00\11\00\0a\0a\11\11\11\00\0a\00\00\02\00\09\0b\00" "\00\00\09\00\0b\00\00\0b\00\41\cb\09\0b\01\0c\00\41\d7\09" "\0b\15\0c\00\00\00\00\0c\00\00\00\00\09\0c\00\00\00\00\00" "\0c\00\00\0c\00\41\85\0a\0b\01\0e\00\41\91\0a\0b\15\0d\00" "\00\00\04\0d\00\00\00\00\09\0e\00\00\00\00\00\0e\00\00\0e" "\00\41\bf\0a\0b\01\10\00\41\cb\0a\0b\1e\0f\00\00\00\00\0f" "\00\00\00\00\09\10\00\00\00\00\00\10\00\00\10\00\00\12\00" "\00\00\12\12\12\00\41\82\0b\0b\0e\12\00\00\00\12\12\12\00" "\00\00\00\00\00\09\00\41\b3\0b\0b\01\0b\00\41\bf\0b\0b\15" "\0a\00\00\00\00\0a\00\00\00\00\09\0b\00\00\00\00\00\0b\00" "\00\0b\00\41\ed\0b\0b\01\0c\00\41\f9\0b\0b\27\0c\00\00\00" "\00\0c\00\00\00\00\09\0c\00\00\00\00\00\0c\00\00\0c\00\00" "\30\31\32\33\34\35\36\37\38\39\41\42\43\44\45\46\00\41\a0" "\0c\0b\01\05\00\41\ac\0c\0b\01\02\00\41\c4\0c\0b\0e\03\00" "\00\00\04\00\00\00\b8\07\00\00\00\04\00\41\dc\0c\0b\01\01" "\00\41\eb\0c\0b\05\0a\ff\ff\ff\ff\00\41\b0\0d\0b\02\20\06" "\00\41\e4\0e\0b\02\e0\0b\00\ac\05\04\6e\61\6d\65\01\a4\05" "\36\00\15\5f\5f\77\61\73\69\5f\61\72\67\73\5f\73\69\7a\65" "\73\5f\67\65\74\01\0f\5f\5f\77\61\73\69\5f\61\72\67\73\5f" "\67\65\74\02\10\5f\5f\77\61\73\69\5f\70\72\6f\63\5f\65\78" "\69\74\03\0f\5f\5f\77\61\73\69\5f\66\64\5f\77\72\69\74\65" "\04\11\5f\5f\77\61\73\6d\5f\63\61\6c\6c\5f\63\74\6f\72\73" "\05\04\6d\61\69\6e\06\06\5f\73\74\61\72\74\07\0f\5f\5f\6f" "\72\69\67\69\6e\61\6c\5f\6d\61\69\6e\08\0b\5f\5f\6d\61\69" "\6e\5f\76\6f\69\64\09\06\6d\61\69\6e\2e\31\0a\10\5f\5f\65" "\72\72\6e\6f\5f\6c\6f\63\61\74\69\6f\6e\0b\12\5f\5f\77\61" "\73\69\5f\73\79\73\63\61\6c\6c\5f\72\65\74\0c\05\5f\45\78" "\69\74\0d\15\65\6d\73\63\72\69\70\74\65\6e\5f\6d\65\6d\63" "\70\79\5f\62\69\67\0e\0e\6c\69\62\63\5f\65\78\69\74\5f\66" "\69\6e\69\0f\04\65\78\69\74\10\05\5f\66\69\6e\69\11\06\6d" "\65\6d\63\70\79\12\0d\5f\5f\73\74\64\69\6f\5f\77\72\69\74" "\65\13\19\5f\5f\65\6d\73\63\72\69\70\74\65\6e\5f\73\74\64" "\6f\75\74\5f\63\6c\6f\73\65\14\18\5f\5f\65\6d\73\63\72\69" "\70\74\65\6e\5f\73\74\64\6f\75\74\5f\73\65\65\6b\15\06\6d" "\65\6d\73\65\74\16\07\69\73\64\69\67\69\74\17\06\6d\65\6d" "\63\68\72\18\0c\70\74\68\72\65\61\64\5f\73\65\6c\66\19\07" "\77\63\72\74\6f\6d\62\1a\0e\5f\5f\70\74\68\72\65\61\64\5f" "\73\65\6c\66\1b\06\77\63\74\6f\6d\62\1c\06\5f\5f\6c\6f\63" "\6b\1d\08\5f\5f\75\6e\6c\6f\63\6b\1e\0a\5f\5f\6f\66\6c\5f" "\6c\6f\63\6b\1f\0c\5f\5f\6f\66\6c\5f\75\6e\6c\6f\63\6b\20" "\0c\5f\5f\73\74\64\69\6f\5f\65\78\69\74\21\0a\63\6c\6f\73" "\65\5f\66\69\6c\65\22\09\5f\5f\74\6f\77\72\69\74\65\23\09" "\5f\5f\66\77\72\69\74\65\78\24\13\5f\5f\76\66\70\72\69\6e" "\74\66\5f\69\6e\74\65\72\6e\61\6c\25\0b\70\72\69\6e\74\66" "\5f\63\6f\72\65\26\03\6f\75\74\27\06\67\65\74\69\6e\74\28" "\07\70\6f\70\5f\61\72\67\29\05\66\6d\74\5f\78\2a\05\66\6d" "\74\5f\6f\2b\05\66\6d\74\5f\75\2c\03\70\61\64\2d\09\76\66" "\69\70\72\69\6e\74\66\2e\07\69\70\72\69\6e\74\66\2f\0a\5f" "\5f\6c\6f\63\6b\66\69\6c\65\30\0c\5f\5f\75\6e\6c\6f\63\6b" "\66\48\6c\65\31\09\73\74\61\63\6b\53\61\76\65\32\0c\73\74" "\61\63\6b\52\65\73\74\6f\72\65\33\0a\73\74\61\63\6b\41\6c" "\6c\6f\63\34\06\66\66\6c\75\73\68\35\11\5f\5f\66\66\6c\75" "\73\68\5f\75\6e\6c\6f\63\6b\65\64\00\ba\01\0b\2e\64\65\62" "\75\67\5f\69\6e\66\6f\aa\00\00\00\04\00\00\00\00\00\04\01" "\00\00\00\00\1a\00\95\00\00\00\00\00\00\00\9e\00\00\00\06" "\00\00\00\73\00\00\00\02\be\00\00\00\03\37\00\00\00\d4\00" "\00\00\01\38\00\04\c2\00\00\00\05\02\33\2b\00\00\00\06\06" "\00\00\00\73\00\00\00\04\ed\00\02\9f\de\00\00\00\03\03\95" "\00\00\00\07\e7\00\00\00\03\03\95\00\00\00\07\f5\00\00\00" "\03\03\9c\00\00\00\08\28\00\00\00\d8\ff\ff\ff\09\00\00\00" "\00\ec\00\00\00\03\06\95\00\00\00\00\0a\27\00\00\00\0a\59" "\00\00\00\00\0b\e3\00\00\00\05\04\0c\a1\00\00\00\0c\a6\00" "\00\00\0b\fa\00\00\00\06\01\00\00\2e\0a\2e\64\65\62\75\67" "\5f\6c\6f\63\01\00\00\00\01\00\00\00\03\00\11\00\9f\60\00" "\00\00\62\00\00\00\04\00\ed\02\00\9f\00\00\00\00\00\00\00" "\00\00\a0\01\0d\2e\64\65\62\75\67\5f\61\62\62\72\65\76\01" "\11\01\25\0e\13\05\03\0e\10\17\1b\0e\11\01\12\06\00\00\02" "\39\01\03\0e\00\00\03\16\00\49\13\03\0e\3a\0b\3b\0b\00\00" "\04\3b\00\03\0e\00\00\05\08\00\3a\0b\3b\0b\18\13\00\00\06" "\2e\01\11\01\12\06\40\18\97\42\19\03\0e\3a\0b\3b\0b\49\13" "\3f\19\00\00\07\05\00\03\0e\3a\0b\3b\0b\49\13\00\00\08\0b" "\01\11\01\12\06\00\00\09\34\00\02\17\03\0e\3a\0b\3b\0b\49" "\13\00\00\0a\89\82\01\00\11\01\00\00\0b\24\00\03\0e\3e\0b" "\0b\0b\00\00\0c\0f\00\49\13\00\00\00\00\93\02\0b\2e\64\65" "\62\75\67\5f\6c\69\6e\65\03\01\00\00\04\00\76\00\00\00\01" "\01\01\fb\0e\0d\00\01\01\01\01\00\00\00\01\00\00\01\2f\68" "\6f\6d\65\2f\61\6e\64\72\65\77\2f\65\6d\73\64\6b\2f\75\70" "\73\74\72\65\61\6d\2f\65\6d\73\63\72\69\70\74\65\6e\2f\73" "\79\73\74\65\6d\2f\69\6e\63\6c\75\64\65\2f\6c\69\62\63\78" "\78\00\00\5f\5f\6e\75\6c\6c\70\74\72\00\01\00\00\73\74\64" "\64\65\66\2e\68\00\01\00\00\61\72\67\73\2e\63\70\70\00\00" "\00\00\00\00\05\02\06\00\00\00\03\03\04\03\01\00\05\02\16" "\00\00\00\03\01\05\02\0a\01\00\05\02\28\00\00\00\03\01\05" "\21\01\00\05\02\31\00\00\00\03\01\05\27\01\00\f8\ff\ff\ff" "\00\00\05\04\06\01\00\05\02\47\00\00\00\05\27\01\00\05\02" "\4f\00\00\00\05\04\01\00\05\02\5c\00\00\00\03\7f\05\21\06" "\01\00\05\02\61\00\00\00\05\2a\06\01\00\05\02\68\00\00\00" "\05\02\01\00\05\02\6f\00\00\00\03\03\06\01\00\05\02\79\00" "\00\00\00\01\01\00\8a\02\0a\2e\64\65\62\75\67\5f\73\74\72" "\63\6c\61\6e\67\20\76\65\72\73\69\6f\6e\20\31\32\2e\30\2e" "\30\20\28\2f\62\2f\73\2f\77\2f\69\72\2f\63\61\63\68\65\2f" "\67\69\74\2f\63\68\72\6f\6d\69\75\6d\2e\67\6f\6f\67\6c\65" "\73\6f\75\72\63\65\2e\63\6f\6d\2d\65\78\74\65\72\6e\61\6c" "\2d\67\69\74\68\75\62\2e\63\6f\6d\2d\6c\6c\76\6d\2d\6c\6c" "\76\6d\2d\2d\70\72\6f\6a\65\63\74\20\32\37\65\39\66\30\66" "\39\35\65\66\37\62\31\34\34\64\30\30\38\62\63\31\63\66\31" "\34\35\39\64\63\65\64\36\63\62\35\38\34\32\29\00\61\72\67" "\73\2e\63\70\70\00\2f\6d\6e\74\2f\64\65\76\65\6c\2f\57\41" "\56\4d\2f\54\65\73\74\2f\65\6d\73\63\72\69\70\74\65\6e\00" "\73\74\64\00\64\65\63\6c\74\79\70\65\28\6e\75\6c\6c\70\74" "\72\29\00\6e\75\6c\6c\70\74\72\5f\74\00\6d\61\69\6e\00\69" "\6e\74\00\61\72\67\63\00\61\72\67\49\5e\64\65\78\00\61\72" "\67\76\00\63\68\61\72\00") "out of bounds table access") ================================================ FILE: Test/wavm/issues/issue-383.wast ================================================ ;; #383: A stack-buffer-overflow vulnerability (module $wasi_stubs (func (export "args_sizes_get") (param i32 i32) (result i32) i32.const 0) (func (export "args_get") (param i32 i32) (result i32) i32.const 0) (func (export "proc_exit") (param i32) unreachable) (func (export "fd_write") (param i32 i32 i32 i32) (result i32) i32.const 0) (func (export "fd_read") (param i32 i32 i32 i32) (result i32) i32.const 0) (func (export "fd_seek") (param i32 i64 i32 i32) (result i32) i32.const 0) (func (export "fd_close") (param i32) (result i32) i32.const 0) (func (export "environ_sizes_get") (param i32 i32) (result i32) i32.const 0) (func (export "environ_get") (param i32 i32) (result i32) i32.const 0)) (register "wasi_snapshot_preview1" $wasi_stubs) ;; 383a: uninitializedTableElement trap (module binary "\00\61\73\6d\01\00\00\00\01\f8\03\3f\60\01\7f\01\7f\60\02" "\7f\7f\01\7f\60\02\7f\7f\00\60\03\7f\7f\7f\01\7f\60\01\7f" "\00\60\06\7f\7f\7f\7f\7f\7f\01\7f\60\03\7f\7f\7f\00\60\00" "\00\60\04\7f\7f\7f\7f\00\60\05\7f\7f\7f\7f\7f\01\7f\60\04" "\7f\7f\7f\7f\01\7f\60\00\01\7f\60\06\7f\7f\7f\7f\7f\7f\00" "\60\08\7f\7f\7f\7f\7f\7f\7f\7f\01\7f\60\05\7f\7f\7f\7f\7f" "\00\60\07\7f\7f\7f\7f\7f\7f\7f\00\60\07\7f\7f\7f\7f\7f\7f" "\7f\01\7f\60\05\7f\7e\7e\7e\7e\00\60\00\01\7e\60\03\7f\7e" "\7f\01\7e\60\04\7f\7f\7f\7f\01\7e\60\05\7f\7f\7f\7f\7e\01" "\7f\60\06\7f\7f\7f\7f\7e\7f\01\7f\60\0a\7f\7f\7f\7f\7f\7f" "\7f\7f\7f\7f\00\60\06\7f\7f\7f\7f\7f\7e\01\7f\60\04\7f\7e" "\7e\7f\00\60\05\7f\7f\7e\7f\7f\00\60\04\7e\7e\7e\7e\01\7f" "\60\02\7c\7f\01\7c\60\04\7f\7f\7f\7e\01\7e\60\06\7f\7c\7f" "\7f\7f\7f\01\7f\60\02\7e\7f\01\7f\60\03\7f\7f\7f\01\7e\60" "\02\7f\7f\01\7d\60\02\7f\7f\01\7c\60\03\7f\7f\7f\01\7d\60" "\03\7f\7f\7f\01\7c\60\0a\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f\01" "\7f\60\0c\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f\01\7f\60\05" "\7f\7f\7f\7f\7c\01\7f\60\06\7f\7f\7f\7f\7c\7f\01\7f\60\06" "\7f\7f\7f\7f\7e\7e\01\7f\60\07\7f\7f\7f\7f\7e\7e\7f\01\7f" "\60\0b\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f\01\7f\60\07\7f\7f" "\7f\7f\7f\7e\7e\01\7f\60\0f\7f\7f\7f\7f\7f\7f\7f\7f\7f\7f" "\7f\7f\7f\7f\7f\00\60\08\7f\7f\7f\7f\7f\7f\7f\7f\00\60\04" "\7f\7e\7f\7f\01\7f\60\07\7f\7f\7f\7f\7e\7f\7f\01\7f\60\02" "\7f\7e\01\7f\60\02\7f\7e\00\60\02\7f\7d\00\60\02\7f\7c\00" "\60\02\7e\7e\01\7f\60\03\7f\7e\7e\00\60\02\7f\7f\01\7e\60" "\02\7e\7e\01\7d\60\02\7e\7e\01\7c\60\03\7f\7f\7e\00\60\03" "\7e\7f\7f\01\7f\60\01\7c\01\7e\60\02\7e\7f\01\7e\60\01\7f" "\01\7e\02\fa\01\07\16\77\61\73\69\5f\73\6e\61\70\73\68\6f" "\74\5f\70\72\65\76\69\65\77\31\09\70\72\6f\63\5f\65\78\69" "\74\00\04\16\77\61\73\69\5f\73\6e\61\70\73\68\6f\74\5f\70" "\72\65\76\69\65\77\31\07\66\64\5f\73\65\65\6b\00\2f\16\77" "\61\73\69\5f\73\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65" "\77\31\08\66\64\5f\77\72\69\74\65\00\0a\16\77\61\73\69\5f" "\73\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65\77\31\07\66" "\64\5f\72\65\61\64\00\0a\16\77\61\73\69\5f\73\6e\61\70\73" "\68\6f\74\5f\70\72\65\76\69\65\77\31\08\66\64\5f\63\6c\6f" "\73\65\00\00\16\77\61\73\69\5f\73\6e\61\70\73\68\6f\74\5f" "\70\72\65\76\69\65\77\31\11\65\6e\76\69\72\6f\6e\5f\73\69" "\7a\65\73\5f\67\65\74\00\01\16\77\61\73\69\5f\73\6e\61\70" "\73\68\6f\74\5f\70\72\65\76\69\65\77\31\0b\65\6e\76\69\72" "\6f\6e\5f\67\65\74\00\01\03\dd\0d\db\0d\07\01\01\0e\0b\03" "\0e\0a\03\05\04\04\01\07\03\07\07\04\07\30\18\0a\01\01\0a" "\01\00\06\04\0b\0b\01\03\00\00\00\00\03\04\01\01\01\01\03" "\02\01\0b\0b\01\01\00\13\13\03\03\00\00\01\00\00\01\00\04" "\04\0b\07\00\04\00\03\07\04\00\00\03\0a\00\04\00\04\00\02" "\03\1a\31\08\00\00\03\01\03\02\00\01\03\00\0b\00\00\01\03" "\01\01\00\00\04\04\00\00\00\00\00\01\00\03\00\02\00\00\00" "\00\01\00\00\02\01\01\00\0b\0b\01\00\00\04\04\01\00\00\01" "\00\00\01\09\01\00\01\00\03\00\04\00\04\00\02\03\1a\08\00" "\00\03\03\02\00\03\00\0b\00\00\01\03\01\01\00\00\04\04\00" "\00\00\00\01\00\03\00\02\00\00\00\01\00\00\01\01\01\00\00" "\04\04\01\00\00\01\00\03\00\03\04\00\01\02\00\00\02\02\00" "\00\0a\00\03\06\00\00\00\00\00\02\00\00\00\00\00\00\00\01" "\0d\07\01\0d\00\09\03\03\08\08\08\06\00\0e\01\01\06\06\08" "\00\03\01\01\00\03\00\00\03\06\03\01\01\03\08\08\08\06\00" "\0e\01\01\06\06\08\00\03\01\01\00\03\00\00\03\06\03\00\01" "\01\00\00\00\00\00\00\00\00\00\06\02\02\02\06\00\02\06\00" "\06\02\02\04\00\00\00\01\01\08\01\00\00\00\06\02\02\02\02" "\04\00\0b\04\01\00\0b\07\01\01\00\00\03\00\00\00\00\01\00" "\01\07\03\01\00\02\02\01\02\01\00\04\04\02\00\01\00\00\13" "\01\0b\0b\0b\07\00\00\00\00\00\00\04\01\03\0a\00\00\00\00" "\03\01\01\01\01\01\07\04\00\03\01\03\01\01\00\03\01\03\01" "\01\00\02\01\02\00\02\00\00\00\00\04\00\04\02\00\01\00\01" "\01\01\01\01\03\00\04\02\00\03\01\01\04\02\00\00\01\00\01" "\01\0d\01\0d\04\02\00\09\03\01\01\00\07\32\00\19\33\02\19" "\11\0b\0b\11\34\1b\1b\1c\11\02\11\19\11\11\35\11\36\08\00" "\0c\0f\37\1d\00\38\39\00\03\00\01\3a\03\03\03\03\01\07\03" "\00\01\01\03\00\03\03\00\00\01\1c\09\10\06\00\08\3b\1f\1f" "\0e\03\1e\02\3c\0a\03\00\01\00\01\3d\01\3e\0a\01\01\18\07" "\01\0a\01\18\01\07\00\00\02\01\00\02\00\01\01\20\1d\00\20" "\03\05\00\09\00\03\03\04\00\0b\0b\09\0a\09\0b\03\00\03\21" "\08\22\06\23\24\08\00\00\04\09\08\03\06\03\00\04\09\08\03" "\03\06\03\05\00\02\02\10\01\01\03\02\01\01\00\00\05\05\00" "\03\06\01\25\0a\08\05\05\14\05\05\0a\05\05\0a\05\05\0a\05" "\05\14\05\05\0e\26\23\05\05\24\05\05\08\05\0a\0b\0a\03\01" "\00\05\00\02\02\10\01\01\00\01\00\05\05\03\06\25\05\05\05" "\05\05\05\05\05\05\05\05\05\0e\26\05\05\05\05\05\0a\03\00" "\00\02\03\0a\03\0a\00\00\02\03\0a\03\0a\09\00\00\01\00\00" "\01\01\09\05\08\09\03\0f\05\15\16\09\05\15\16\27\28\03\00" "\03\0a\02\0f\00\29\2a\09\00\03\01\09\00\00\01\00\00\00\01" "\01\09\05\0f\05\15\16\09\05\15\16\27\28\03\02\0f\00\29\2a" "\09\03\00\02\02\02\02\0d\03\00\05\05\05\0c\05\0c\05\0c\09" "\0d\0c\0c\0c\0c\0c\0c\0e\0c\0c\0c\0c\0e\0d\03\00\05\05\00" "\00\00\00\00\05\0c\05\0c\05\0c\09\0d\0c\0c\0c\0c\0c\0c\0e" "\0c\0c\0c\0c\0e\10\0c\03\02\01\08\10\0c\03\01\09\04\08\00" "\0b\0b\00\02\02\02\02\00\02\02\00\00\02\02\02\02\00\02\02" "\00\0b\0b\00\02\02\00\04\02\02\00\02\02\00\00\02\02\02\02" "\00\02\02\01\04\03\01\00\04\03\00\00\00\10\04\2b\00\00\03" "\03\00\17\06\00\03\01\00\00\01\01\03\06\06\00\00\00\00\10" "\04\03\01\0f\02\03\00\00\02\02\02\00\00\02\02\00\00\02\02" "\02\00\00\02\02\00\03\00\01\00\03\01\00\00\01\00\00\01\02" "\02\10\2b\00\00\03\17\06\00\01\03\01\00\00\01\01\03\06\00" "\10\04\03\00\02\02\00\02\00\01\01\0f\02\00\0a\00\02\02\01" "\02\00\00\02\02\00\00\02\02\02\00\00\02\02\00\03\00\01\00" "\03\01\00\00\01\02\2c\01\17\2d\00\02\02\00\01\00\03\0b\05" "\2c\01\17\2d\00\00\00\02\02\00\01\00\03\05\08\01\0b\01\08" "\01\01\03\0c\02\03\0c\02\00\01\01\01\04\07\02\07\02\07\02" "\07\02\07\02\07\02\07\02\07\02\07\02\07\02\07\02\07\02\07" "\02\07\02\07\02\07\02\07\02\07\02\07\02\07\02\07\02\07\02" "\07\02\07\02\07\02\07\02\07\02\07\02\07\02\07\02\01\03\01" "\02\02\02\04\00\04\02\00\06\01\01\01\01\01\01\01\01\01\01" "\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\0b\01\04" "\0b\00\01\01\00\01\02\00\00\04\00\00\00\04\04\02\02\00\01" "\01\07\0b\0b\00\01\00\04\03\02\04\04\00\01\01\04\0b\04\03" "\0a\0a\0a\01\0b\03\01\0b\03\01\0a\03\09\0a\00\00\04\01\03" "\01\03\01\0a\03\09\04\0d\0d\09\00\00\09\00\01\00\04\0d\05" "\0a\0d\05\09\09\00\0a\00\00\09\0a\00\04\0d\0d\0d\0d\09\00" "\00\09\09\00\04\0d\0d\09\00\00\09\00\04\0d\0d\0d\0d\09\00" "\00\09\09\00\04\0d\0d\09\00\00\09\00\01\01\00\04\00\04\00" "\00\00\00\02\02\02\02\01\00\02\02\01\01\02\00\07\04\00\07" "\04\01\00\07\04\00\07\04\00\07\04\00\07\04\00\04\00\04\00" "\04\00\04\00\04\00\04\00\04\00\04\00\01\04\04\04\04\00\00" "\04\00\00\04\04\00\04\00\04\04\04\04\04\04\04\04\04\04\01" "\08\01\00\00\01\08\00\00\01\00\00\00\06\02\02\02\04\00\00" "\01\00\00\00\00\00\00\02\03\0f\06\06\00\00\03\03\03\03\01" "\01\02\02\02\02\02\02\02\00\00\08\08\06\00\0e\01\01\06\06" "\00\03\01\01\03\08\08\06\00\0e\01\01\06\06\00\03\01\01\03" "\01\01\03\03\00\0a\03\00\00\00\00\01\0f\01\03\03\06\03\01" "\08\00\0a\03\00\00\00\00\01\02\02\08\08\06\01\06\06\03\01" "\00\00\00\00\00\01\01\01\08\08\06\01\06\06\03\01\00\00\00" "\00\00\01\01\01\01\00\01\00\04\00\06\00\02\03\00\00\02\00" "\00\00\03\00\00\00\00\0e\00\00\00\00\01\00\00\00\00\00\00" "\00\00\02\02\04\04\01\04\06\06\06\0a\02\02\00\03\00\00\03" "\00\01\0a\00\02\04\00\01\00\00\00\03\08\08\08\06\00\0e\01" "\01\06\06\01\00\00\00\00\03\01\01\07\02\00\02\00\00\02\02" "\02\03\00\00\00\00\00\00\00\00\00\01\04\00\01\04\01\04\00" "\04\04\00\03\00\00\01\00\01\14\0b\0b\12\12\12\12\14\0b\0b" "\12\12\21\22\06\01\01\00\00\01\00\00\00\00\01\00\00\00\04" "\00\00\06\01\04\04\00\01\00\04\04\01\01\02\04\07\00\01\00" "\01\00\03\2e\00\03\03\06\06\03\01\03\06\02\03\06\03\2e\00" "\03\03\06\06\03\01\03\06\02\00\03\03\02\00\0b\0b\00\07\00" "\04\04\04\04\04\03\00\03\0a\08\08\08\08\01\08\0e\08\0e\0c" "\0e\0e\0e\0c\0c\0c\00\04\00\00\00\00\00\04\00\00\04\00\0b" "\04\04\07\01\70\01\f2\02\f2\02\05\06\01\01\80\02\80\02\06" "\08\01\7f\01\41\a0\ab\05\0b\07\4c\05\06\6d\65\6d\6f\72\79" "\02\00\19\5f\5f\69\6e\64\69\72\65\63\74\5f\66\75\6e\63\74" "\69\6f\6e\5f\74\61\62\6c\65\01\00\06\5f\73\74\61\72\74\00" "\14\09\73\74\61\63\6b\53\61\76\65\00\e0\0d\0c\73\74\61\63" "\6b\52\65\73\74\6f\72\65\00\e1\0d\09\ce\05\01\00\41\01\0b" "\f1\02\08\d7\0d\07\55\56\58\59\5a\5c\5d\5e\5f\66\68\6a\6b" "\6c\6e\70\6f\71\8a\01\8c\01\8b\01\8d\01\9d\01\9e\01\a0\01" "\a1\01\a2\01\a3\01\a4\01\a5\01\a6\01\ab\01\ad\01\af\01\b0" "\01\b1\01\b3\01\b5\01\b4\01\b6\01\c9\01\cb\01\ca\01\cc\01" "\53\54\9b\01\9c\01\ed\02\ee\02\3f\3d\3b\f4\02\3c\f5\02\90" "\03\a7\03\a9\03\aa\03\ab\03\ad\03\ae\03\b5\03\b6\03\b7\03" "\b8\03\b9\03\bb\03\bc\03\be\03\c0\03\c1\03\c6\03\c7\03\c8" "\03\ca\03\cb\03\f6\03\90\04\91\04\94\04\2d\85\07\ae\09\b6" "\09\a9\0a\ac\0a\b0\0a\b3\0a\b6\0a\b9\0a\bb\0a\bd\0a\bf\0a" "\c1\0a\c3\0a\c5\0a\c7\0a\c9\0a\9e\09\a2\09\b2\09\c9\09\ca" "\09\cb\09\cc\09\cd\09\ce\09\cf\09\d0\09\d1\09\d2\09\aa\08" "\dd\09\de\09\e1\09\e4\09\e5\09\e8\09\e9\09\eb\09\94\0a\95" "\0a\98\0a\9a\0a\9c\0a\9e\0a\a2\0a\96\0a\97\0a\99\0a\9b\0a" "\9d\0a\9f\0a\a3\0a\ce\04\b1\09\b8\09\b9\09\ba\09\bb\09\bc" "\09\bd\09\bf\09\c0\09\c2\09\c3\09\c4\09\c5\09\c6\09\d3\09" "\d4\09\d5\09\d6\09\d7\09\d8\09\d9\09\da\09\ec\09\ed\09\ef" "\09\f1\09\f2\09\f3\09\f4\09\f6\09\f7\09\f8\09\f9\09\fa\09" "\fb\09\fc\09\fd\09\fe\09\ff\09\80\0a\82\0a\84\0a\85\0a\86" "\0a\87\0a\89\0a\8a\0a\8b\0a\8c\0a\8d\0a\8e\0a\8f\0a\90\0a" "\91\0a\cd\04\cf\04\d0\04\d1\04\d4\04\d5\04\d6\04\d7\04\d8" "\04\dc\04\cc\0a\dd\04\ea\04\f3\04\f6\04\f9\04\fc\04\ff\04" "\82\05\87\05\8a\05\8d\05\cd\0a\94\05\9e\05\a3\05\a5\05\a7" "\05\a9\05\ab\05\ad\05\b1\05\b3\05\b5\05\ce\0a\c6\05\ce\05" "\d5\05\d7\05\d9\05\db\05\e4\05\e6\05\cf\0a\ea\05\f3\05\f7" "\05\f9\05\fb\05\fd\05\83\06\85\06\d0\0a\d2\0a\8e\06\8f\06" "\90\06\91\06\93\06\95\06\98\06\a7\0a\ae\0a\b4\0a\c2\0a\c6" "\0a\ba\0a\be\0a\d3\0a\d5\0a\a7\06\a8\06\a9\06\af\06\b1\06" "\b3\06\b6\06\aa\0a\b1\0a\b7\0a\c4\0a\c8\0a\bc\0a\c0\0a\d7" "\0a\d6\0a\c3\06\d9\0a\d8\0a\c9\06\da\0a\d0\06\d3\06\d4\06" "\d5\06\d6\06\d7\06\d8\06\d9\06\da\06\db\0a\db\06\dc\06\dd" "\06\de\06\df\06\e0\06\e1\06\e2\06\e3\06\dc\0a\e4\06\e7\06" "\e8\06\e9\06\ec\06\ed\06\ee\06\ef\06\f0\06\dd\0a\f1\06\f2" "\06\f3\06\f4\06\f5\06\f6\06\f7\06\f8\06\f9\06\de\0a\84\07" "\9c\07\df\0a\c4\07\d6\07\e0\0a\82\08\8e\08\e1\0a\8f\08\9c" "\08\e2\0a\a4\08\a5\08\a6\08\e3\0a\a7\08\a8\08\a9\08\80\0d" "\81\0d\b9\0d\ba\0d\bd\0d\bb\0d\bc\0d\c2\0d\d3\0d\d0\0d\c5" "\0d\be\0d\d2\0d\cf\0d\c6\0d\bf\0d\d1\0d\cc\0d\c9\0d\d4\0d" "\d5\0d\d6\0d\db\0d\dc\0d\de\0d\0a\e3\f7\09\db\0d\0b\00\10" "\ce\03\10\f9\03\10\fa\02\0b\0d\00\20\00\28\02\04\20\01\28" "\02\04\48\0b\c9\01\01\06\7f\41\80\80\80\80\78\21\02\20\01" "\21\01\02\40\03\40\20\02\21\03\20\01\22\02\41\01\46\0d\01" "\20\00\20\02\41\7f\6a\22\04\41\0c\6c\6a\21\05\41\7f\21\06" "\02\40\20\02\41\01\48\0d\00\20\05\28\02\00\21\07\20\04\21" "\01\03\40\02\40\20\00\20\01\22\02\41\0c\6c\6a\28\02\04\20" "\07\4a\0d\00\20\02\21\06\0c\02\0b\20\02\41\7f\6a\21\01\41" "\7f\21\06\20\02\41\00\4a\0d\00\0b\0b\20\05\28\02\08\21\02" "\02\40\02\40\20\06\22\01\41\7f\47\0d\00\20\02\21\02\0c\01" "\0b\20\00\20\01\41\01\6a\10\09\20\02\6a\21\02\0b\20\02\22" "\02\20\03\20\02\20\03\4a\1b\21\02\20\04\21\01\0c\00\0b\00" "\0b\20\00\28\02\08\22\02\20\03\20\02\20\03\4a\1b\0b\f2\40" "\02\0e\7f\01\7e\23\00\41\e0\0b\6b\22\05\24\00\20\01\21\01" "\20\00\21\00\20\04\21\06\20\03\21\02\03\40\20\01\22\07\21" "\01\20\00\22\08\21\00\41\01\21\04\20\06\22\09\21\06\20\03" "\22\0a\21\03\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\20\07\20\08\6b\22\0b\41\0c\6d\22\0c\0e\06\08\08" "\00\01\02\03\04\0b\20\02\28\02\00\21\00\20\05\41\b0\0b\6a" "\41\08\6a\20\07\41\74\6a\22\01\41\08\6a\22\04\28\02\00\22" "\06\36\02\00\20\01\29\02\00\21\13\20\05\41\90\09\6a\41\08" "\6a\20\06\36\02\00\20\05\20\13\37\03\b0\0b\20\05\20\13\37" "\03\90\09\20\05\41\80\09\6a\41\08\6a\20\08\41\08\6a\22\06" "\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\80\09\02\40" "\20\05\41\90\09\6a\20\05\41\80\09\6a\20\00\11\01\00\0d\00" "\20\01\21\01\0c\07\0b\20\05\41\d0\0b\6a\41\08\6a\22\00\20" "\06\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\d0\0b\20" "\06\20\04\28\02\00\36\02\00\20\08\20\01\29\02\00\37\02\00" "\20\04\20\00\28\02\00\36\02\00\20\01\20\05\29\03\d0\0b\37" "\02\00\20\01\21\01\0c\06\0b\20\02\28\02\00\21\01\20\05\41" "\90\0a\6a\41\08\6a\20\08\41\14\6a\22\00\28\02\00\36\02\00" "\20\05\20\08\29\02\0c\37\03\90\0a\20\05\41\80\0a\6a\41\08" "\6a\20\08\41\08\6a\22\04\28\02\00\36\02\00\20\05\20\08\29" "\02\00\37\03\80\0a\20\05\41\90\0a\6a\20\05\41\80\0a\6a\20" "\01\11\01\00\21\03\20\02\28\02\00\21\0b\20\05\41\f0\09\6a" "\41\08\6a\20\07\41\74\6a\22\01\41\08\6a\22\06\28\02\00\36" "\02\00\20\05\20\01\29\02\00\37\03\f0\09\20\05\41\e0\09\6a" "\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\08\29\02\0c\37" "\03\e0\09\20\08\41\0c\6a\21\00\20\05\41\f0\09\6a\20\05\41" "\e0\09\6a\20\0b\11\01\00\21\0b\02\40\20\03\0d\00\20\0b\45" "\0d\05\20\05\41\d0\0b\6a\41\08\6a\22\0b\20\00\41\08\6a\22" "\03\28\02\00\36\02\00\20\05\20\00\29\02\00\37\03\d0\0b\20" "\03\20\06\28\02\00\36\02\00\20\00\20\01\29\02\00\37\02\00" "\20\06\20\0b\28\02\00\36\02\00\20\01\20\05\29\03\d0\0b\37" "\02\00\20\02\28\02\00\21\06\20\05\41\d0\09\6a\41\08\6a\20" "\03\28\02\00\36\02\00\20\05\20\00\29\02\00\37\03\d0\09\20" "\05\41\c0\09\6a\41\08\6a\20\04\28\02\00\36\02\00\20\05\20" "\08\29\02\00\37\03\c0\09\20\05\41\d0\09\6a\20\05\41\c0\09" "\6a\20\06\11\01\00\45\0d\05\20\0b\20\04\28\02\00\36\02\00" "\20\05\20\08\29\02\00\37\03\d0\0b\20\04\20\03\28\02\00\36" "\02\00\20\08\20\00\29\02\00\37\02\00\20\03\20\0b\28\02\00" "\36\02\00\20\00\20\05\29\03\d0\0b\37\02\00\20\01\21\01\0c" "\06\0b\02\40\20\0b\45\0d\00\20\05\41\d0\0b\6a\41\08\6a\22" "\00\20\04\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\d0" "\0b\20\04\20\06\28\02\00\36\02\00\20\08\20\01\29\02\00\37" "\02\00\20\06\20\00\28\02\00\36\02\00\20\01\20\05\29\03\d0" "\0b\37\02\00\20\01\21\01\0c\06\0b\20\05\41\d0\0b\6a\41\08" "\6a\22\0b\20\04\28\02\00\36\02\00\20\05\20\08\29\02\00\37" "\03\d0\0b\20\04\20\00\41\08\6a\22\03\28\02\00\36\02\00\20" "\08\20\00\29\02\00\37\02\00\20\03\20\0b\28\02\00\36\02\00" "\20\00\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\04\20" "\05\41\b0\09\6a\41\08\6a\20\06\28\02\00\36\02\00\20\05\20" "\01\29\02\00\37\03\b0\09\20\05\41\a0\09\6a\41\08\6a\20\03" "\28\02\00\36\02\00\20\05\20\00\29\02\00\37\03\a0\09\20\05" "\41\b0\09\6a\20\05\41\a0\09\6a\20\04\11\01\00\45\0d\04\20" "\0b\20\03\28\02\00\36\02\00\20\05\20\00\29\02\00\37\03\d0" "\0b\20\03\20\06\28\02\00\36\02\00\20\00\20\01\29\02\00\37" "\02\00\20\06\20\0b\28\02\00\36\02\00\20\01\20\05\29\03\d0" "\0b\37\02\00\20\01\21\01\0c\05\0b\20\08\20\08\41\0c\6a\20" "\08\41\18\6a\20\07\41\74\6a\22\01\20\02\10\0d\20\01\21\01" "\0c\04\0b\20\08\20\08\41\0c\6a\22\06\20\08\41\18\6a\22\04" "\20\08\41\24\6a\22\00\20\02\10\0d\20\02\28\02\00\21\03\20" "\05\41\90\0b\6a\41\08\6a\20\07\41\74\6a\22\01\41\08\6a\22" "\0b\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\90\0b\20" "\05\41\80\0b\6a\41\08\6a\20\08\41\2c\6a\28\02\00\36\02\00" "\20\05\20\08\29\02\24\37\03\80\0b\20\05\41\90\0b\6a\20\05" "\41\80\0b\6a\20\03\11\01\00\45\0d\01\20\05\41\d0\0b\6a\41" "\08\6a\22\07\20\00\41\08\6a\22\03\28\02\00\36\02\00\20\05" "\20\00\29\02\00\37\03\d0\0b\20\03\20\0b\28\02\00\36\02\00" "\20\00\20\01\29\02\00\37\02\00\20\0b\20\07\28\02\00\36\02" "\00\20\01\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\0c" "\20\05\41\f0\0a\6a\41\08\6a\20\03\28\02\00\36\02\00\20\05" "\20\00\29\02\00\37\03\f0\0a\20\05\41\e0\0a\6a\41\08\6a\20" "\04\41\08\6a\22\0b\28\02\00\36\02\00\20\05\20\04\29\02\00" "\37\03\e0\0a\20\05\41\f0\0a\6a\20\05\41\e0\0a\6a\20\0c\11" "\01\00\45\0d\01\20\07\20\0b\28\02\00\36\02\00\20\05\20\04" "\29\02\00\37\03\d0\0b\20\0b\20\03\28\02\00\36\02\00\20\04" "\20\00\29\02\00\37\02\00\20\03\20\07\28\02\00\36\02\00\20" "\00\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\03\20\05" "\41\d0\0a\6a\41\08\6a\20\0b\28\02\00\36\02\00\20\05\20\04" "\29\02\00\37\03\d0\0a\20\05\41\c0\0a\6a\41\08\6a\20\06\41" "\08\6a\22\00\28\02\00\36\02\00\20\05\20\06\29\02\00\37\03" "\c0\0a\20\05\41\d0\0a\6a\20\05\41\c0\0a\6a\20\03\11\01\00" "\45\0d\01\20\07\20\00\28\02\00\36\02\00\20\05\20\06\29\02" "\00\37\03\d0\0b\20\00\20\0b\28\02\00\36\02\00\20\06\20\04" "\29\02\00\37\02\00\20\0b\20\07\28\02\00\36\02\00\20\04\20" "\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\04\20\05\41\b0" "\0a\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\06\29\02" "\00\37\03\b0\0a\20\05\41\a0\0a\6a\41\08\6a\20\08\41\08\6a" "\22\03\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\a0\0a" "\20\05\41\b0\0a\6a\20\05\41\a0\0a\6a\20\04\11\01\00\45\0d" "\01\20\07\20\03\28\02\00\36\02\00\20\05\20\08\29\02\00\37" "\03\d0\0b\20\03\20\00\28\02\00\36\02\00\20\08\20\06\29\02" "\00\37\02\00\20\00\20\07\28\02\00\36\02\00\20\06\20\05\29" "\03\d0\0b\37\02\00\0c\01\0b\02\40\02\40\20\0b\41\9f\02\4a" "\0d\00\20\08\20\07\46\20\08\41\0c\6a\22\01\20\07\46\72\21" "\04\02\40\20\09\41\01\71\45\0d\00\20\01\21\01\20\08\21\00" "\20\04\0d\02\03\40\20\02\28\02\00\21\04\20\05\41\30\6a\41" "\08\6a\20\01\22\0c\41\08\6a\22\06\28\02\00\36\02\00\20\05" "\20\0c\29\02\00\37\03\30\20\05\41\20\6a\41\08\6a\20\00\22" "\01\41\08\6a\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03" "\20\02\40\20\05\41\30\6a\20\05\41\20\6a\20\04\11\01\00\45" "\0d\00\20\05\41\d0\0b\6a\41\08\6a\22\03\20\06\28\02\00\36" "\02\00\20\05\20\0c\29\02\00\37\03\d0\0b\20\01\21\00\20\0c" "\21\04\02\40\03\40\20\04\22\04\20\00\22\01\29\02\00\37\02" "\00\20\04\41\08\6a\20\01\41\08\6a\22\0b\28\02\00\36\02\00" "\20\01\20\08\46\0d\01\20\02\28\02\00\21\06\20\05\41\10\6a" "\41\08\6a\20\03\28\02\00\36\02\00\20\05\20\05\29\03\d0\0b" "\37\03\10\20\05\41\08\6a\20\01\41\74\6a\22\00\41\08\6a\28" "\02\00\36\02\00\20\05\20\00\29\02\00\37\03\00\20\00\21\00" "\20\01\21\04\20\05\41\10\6a\20\05\20\06\11\01\00\0d\00\0b" "\0b\20\01\20\05\29\03\d0\0b\37\02\00\20\0b\20\03\28\02\00" "\36\02\00\0b\20\0c\41\0c\6a\22\04\21\01\20\0c\21\00\20\04" "\20\07\47\0d\00\0c\03\0b\00\0b\20\01\21\01\20\08\21\00\20" "\04\0d\01\03\40\20\02\28\02\00\21\04\20\05\41\f0\00\6a\41" "\08\6a\20\01\22\0c\41\08\6a\22\06\28\02\00\36\02\00\20\05" "\20\0c\29\02\00\37\03\70\20\05\41\e0\00\6a\41\08\6a\20\00" "\22\01\41\08\6a\28\02\00\36\02\00\20\05\20\01\29\02\00\37" "\03\60\02\40\20\05\41\f0\00\6a\20\05\41\e0\00\6a\20\04\11" "\01\00\45\0d\00\20\05\41\d0\0b\6a\41\08\6a\22\03\20\06\28" "\02\00\36\02\00\20\05\20\0c\29\02\00\37\03\d0\0b\20\01\21" "\00\20\0c\21\04\03\40\20\04\22\04\20\00\22\01\29\02\00\37" "\02\00\20\04\41\08\6a\20\01\41\08\6a\22\0b\28\02\00\36\02" "\00\20\02\28\02\00\21\06\20\05\41\d0\00\6a\41\08\6a\20\03" "\28\02\00\36\02\00\20\05\20\05\29\03\d0\0b\37\03\50\20\05" "\41\c0\00\6a\41\08\6a\20\01\41\74\6a\22\00\41\08\6a\28\02" "\00\36\02\00\20\05\20\00\29\02\00\37\03\40\20\00\21\00\20" "\01\21\04\20\05\41\d0\00\6a\20\05\41\c0\00\6a\20\06\11\01" "\00\0d\00\0b\20\01\20\05\29\03\d0\0b\37\02\00\20\0b\20\03" "\28\02\00\36\02\00\0b\20\0c\41\0c\6a\22\04\21\01\20\0c\21" "\00\20\04\20\07\46\0d\02\0c\00\0b\00\0b\02\40\02\40\20\0a" "\0d\00\20\08\20\07\46\0d\01\20\08\20\07\20\07\20\02\10\0e" "\1a\0c\01\0b\20\07\41\74\6a\21\04\20\08\20\0c\41\01\76\41" "\0c\6c\6a\21\01\20\02\28\02\00\21\06\02\40\02\40\20\0b\41" "\81\0c\48\0d\00\20\05\41\f0\07\6a\41\08\6a\20\01\41\08\6a" "\22\00\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\f0\07" "\20\05\41\e0\07\6a\41\08\6a\20\08\41\08\6a\22\0c\28\02\00" "\36\02\00\20\05\20\08\29\02\00\37\03\e0\07\20\05\41\f0\07" "\6a\20\05\41\e0\07\6a\20\06\11\01\00\21\03\20\02\28\02\00" "\21\0b\20\05\41\d0\07\6a\41\08\6a\20\04\41\08\6a\22\06\28" "\02\00\36\02\00\20\05\20\04\29\02\00\37\03\d0\07\20\05\41" "\c0\07\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\01\29" "\02\00\37\03\c0\07\20\05\41\d0\07\6a\20\05\41\c0\07\6a\20" "\0b\11\01\00\21\0b\02\40\02\40\20\03\0d\00\20\0b\45\0d\01" "\20\05\41\d0\0b\6a\41\08\6a\22\03\20\00\28\02\00\36\02\00" "\20\05\20\01\29\02\00\37\03\d0\0b\20\00\20\06\28\02\00\36" "\02\00\20\01\20\04\29\02\00\37\02\00\20\06\20\03\28\02\00" "\36\02\00\20\04\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00" "\21\06\20\05\41\b0\07\6a\41\08\6a\20\00\28\02\00\36\02\00" "\20\05\20\01\29\02\00\37\03\b0\07\20\05\41\a0\07\6a\41\08" "\6a\20\0c\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\a0" "\07\20\05\41\b0\07\6a\20\05\41\a0\07\6a\20\06\11\01\00\45" "\0d\01\20\03\20\0c\28\02\00\36\02\00\20\05\20\08\29\02\00" "\37\03\d0\0b\20\0c\20\00\28\02\00\36\02\00\20\08\20\01\29" "\02\00\37\02\00\20\00\20\03\28\02\00\36\02\00\20\01\20\05" "\29\03\d0\0b\37\02\00\0c\01\0b\02\40\20\0b\45\0d\00\20\05" "\41\d0\0b\6a\41\08\6a\22\03\20\0c\28\02\00\36\02\00\20\05" "\20\08\29\02\00\37\03\d0\0b\20\0c\20\06\28\02\00\36\02\00" "\20\08\20\04\29\02\00\37\02\00\20\06\20\03\28\02\00\36\02" "\00\20\04\20\05\29\03\d0\0b\37\02\00\0c\01\0b\20\05\41\d0" "\0b\6a\41\08\6a\22\03\20\0c\28\02\00\36\02\00\20\05\20\08" "\29\02\00\37\03\d0\0b\20\0c\20\00\28\02\00\36\02\00\20\08" "\20\01\29\02\00\37\02\00\20\00\20\03\28\02\00\36\02\00\20" "\01\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\0b\20\05" "\41\90\07\6a\41\08\6a\20\06\28\02\00\36\02\00\20\05\20\04" "\29\02\00\37\03\90\07\20\05\41\80\07\6a\41\08\6a\20\00\28" "\02\00\36\02\00\20\05\20\01\29\02\00\37\03\80\07\20\05\41" "\90\07\6a\20\05\41\80\07\6a\20\0b\11\01\00\45\0d\00\20\03" "\20\00\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\d0\0b" "\20\00\20\06\28\02\00\36\02\00\20\01\20\04\29\02\00\37\02" "\00\20\06\20\03\28\02\00\36\02\00\20\04\20\05\29\03\d0\0b" "\37\02\00\0b\20\02\28\02\00\21\06\20\05\41\f0\06\6a\41\08" "\6a\20\01\41\74\6a\22\03\41\08\6a\22\0b\28\02\00\36\02\00" "\20\05\20\03\29\02\00\37\03\f0\06\20\05\41\e0\06\6a\41\08" "\6a\20\08\41\14\6a\28\02\00\36\02\00\20\05\20\08\29\02\0c" "\37\03\e0\06\20\05\41\f0\06\6a\20\05\41\e0\06\6a\20\06\11" "\01\00\21\0d\20\02\28\02\00\21\0e\20\05\41\d0\06\6a\41\08" "\6a\20\07\41\68\6a\22\06\41\08\6a\22\0f\28\02\00\36\02\00" "\20\05\20\06\29\02\00\37\03\d0\06\20\05\41\c0\06\6a\41\08" "\6a\20\0b\28\02\00\36\02\00\20\05\20\03\29\02\00\37\03\c0" "\06\20\08\41\0c\6a\21\10\20\05\41\d0\06\6a\20\05\41\c0\06" "\6a\20\0e\11\01\00\21\0e\02\40\02\40\20\0d\0d\00\20\0e\45" "\0d\01\20\05\41\d0\0b\6a\41\08\6a\22\0d\20\0b\28\02\00\36" "\02\00\20\05\20\03\29\02\00\37\03\d0\0b\20\0b\20\0f\28\02" "\00\36\02\00\20\03\20\06\29\02\00\37\02\00\20\0f\20\0d\28" "\02\00\36\02\00\20\06\20\05\29\03\d0\0b\37\02\00\20\02\28" "\02\00\21\06\20\05\41\b0\06\6a\41\08\6a\20\0b\28\02\00\36" "\02\00\20\05\20\03\29\02\00\37\03\b0\06\20\05\41\a0\06\6a" "\41\08\6a\20\10\41\08\6a\22\0f\28\02\00\36\02\00\20\05\20" "\10\29\02\00\37\03\a0\06\20\05\41\b0\06\6a\20\05\41\a0\06" "\6a\20\06\11\01\00\45\0d\01\20\0d\20\0f\28\02\00\36\02\00" "\20\05\20\10\29\02\00\37\03\d0\0b\20\0f\20\0b\28\02\00\36" "\02\00\20\10\20\03\29\02\00\37\02\00\20\0b\20\0d\28\02\00" "\36\02\00\20\03\20\05\29\03\d0\0b\37\02\00\0c\01\0b\02\40" "\20\0e\45\0d\00\20\05\41\d0\0b\6a\41\08\6a\22\0d\20\10\41" "\08\6a\22\0e\28\02\00\36\02\00\20\05\20\10\29\02\00\37\03" "\d0\0b\20\0e\20\0f\28\02\00\36\02\00\20\10\20\06\29\02\00" "\37\02\00\20\0f\20\0d\28\02\00\36\02\00\20\06\20\05\29\03" "\d0\0b\37\02\00\0c\01\0b\20\05\41\d0\0b\6a\41\08\6a\22\0d" "\20\10\41\08\6a\22\0e\28\02\00\36\02\00\20\05\20\10\29\02" "\00\37\03\d0\0b\20\0e\20\0b\28\02\00\36\02\00\20\10\20\03" "\29\02\00\37\02\00\20\0b\20\0d\28\02\00\36\02\00\20\03\20" "\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\10\20\05\41\90" "\06\6a\41\08\6a\20\0f\28\02\00\36\02\00\20\05\20\06\29\02" "\00\37\03\90\06\20\05\41\80\06\6a\41\08\6a\20\0b\28\02\00" "\36\02\00\20\05\20\03\29\02\00\37\03\80\06\20\05\41\90\06" "\6a\20\05\41\80\06\6a\20\10\11\01\00\45\0d\00\20\0d\20\0b" "\28\02\00\36\02\00\20\05\20\03\29\02\00\37\03\d0\0b\20\0b" "\20\0f\28\02\00\36\02\00\20\03\20\06\29\02\00\37\02\00\20" "\0f\20\0d\28\02\00\36\02\00\20\06\20\05\29\03\d0\0b\37\02" "\00\0b\20\02\28\02\00\21\10\20\05\41\f0\05\6a\41\08\6a\20" "\01\41\14\6a\22\0f\28\02\00\36\02\00\20\05\20\01\41\0c\6a" "\22\06\29\02\00\37\03\f0\05\20\05\41\e0\05\6a\41\08\6a\20" "\08\41\20\6a\28\02\00\36\02\00\20\05\20\08\29\02\18\37\03" "\e0\05\20\05\41\f0\05\6a\20\05\41\e0\05\6a\20\10\11\01\00" "\21\0e\20\02\28\02\00\21\11\20\05\41\d0\05\6a\41\08\6a\20" "\07\41\5c\6a\22\10\41\08\6a\22\0d\28\02\00\36\02\00\20\05" "\20\10\29\02\00\37\03\d0\05\20\05\41\c0\05\6a\41\08\6a\20" "\0f\28\02\00\36\02\00\20\05\20\06\29\02\00\37\03\c0\05\20" "\08\41\18\6a\21\0f\20\05\41\d0\05\6a\20\05\41\c0\05\6a\20" "\11\11\01\00\21\11\02\40\02\40\20\0e\0d\00\20\11\45\0d\01" "\20\05\41\d0\0b\6a\41\08\6a\22\11\20\06\41\08\6a\22\0e\28" "\02\00\36\02\00\20\05\20\06\29\02\00\37\03\d0\0b\20\0e\20" "\0d\28\02\00\36\02\00\20\06\20\10\29\02\00\37\02\00\20\0d" "\20\11\28\02\00\36\02\00\20\10\20\05\29\03\d0\0b\37\02\00" "\20\02\28\02\00\21\10\20\05\41\b0\05\6a\41\08\6a\20\0e\28" "\02\00\36\02\00\20\05\20\06\29\02\00\37\03\b0\05\20\05\41" "\a0\05\6a\41\08\6a\20\0f\41\08\6a\22\0d\28\02\00\36\02\00" "\20\05\20\0f\29\02\00\37\03\a0\05\20\05\41\b0\05\6a\20\05" "\41\a0\05\6a\20\10\11\01\00\45\0d\01\20\11\20\0d\28\02\00" "\36\02\00\20\05\20\0f\29\02\00\37\03\d0\0b\20\0d\20\0e\28" "\02\00\36\02\00\20\0f\20\06\29\02\00\37\02\00\20\0e\20\11" "\28\02\00\36\02\00\20\06\20\05\29\03\d0\0b\37\02\00\0c\01" "\0b\02\40\20\11\45\0d\00\20\05\41\d0\0b\6a\41\08\6a\22\0e" "\20\0f\41\08\6a\22\11\28\02\00\36\02\00\20\05\20\0f\29\02" "\00\37\03\d0\0b\20\11\20\0d\28\02\00\36\02\00\20\0f\20\10" "\29\02\00\37\02\00\20\0d\20\0e\28\02\00\36\02\00\20\10\20" "\05\29\03\d0\0b\37\02\00\0c\01\0b\20\05\41\d0\0b\6a\41\08" "\6a\22\11\20\0f\41\08\6a\22\12\28\02\00\36\02\00\20\05\20" "\0f\29\02\00\37\03\d0\0b\20\12\20\06\41\08\6a\22\0e\28\02" "\00\36\02\00\20\0f\20\06\29\02\00\37\02\00\20\0e\20\11\28" "\02\00\36\02\00\20\06\20\05\29\03\d0\0b\37\02\00\20\02\28" "\02\00\21\0f\20\05\41\90\05\6a\41\08\6a\20\0d\28\02\00\36" "\02\00\20\05\20\10\29\02\00\37\03\90\05\20\05\41\80\05\6a" "\41\08\6a\20\0e\28\02\00\36\02\00\20\05\20\06\29\02\00\37" "\03\80\05\20\05\41\90\05\6a\20\05\41\80\05\6a\20\0f\11\01" "\00\45\0d\00\20\11\20\0e\28\02\00\36\02\00\20\05\20\06\29" "\02\00\37\03\d0\0b\20\0e\20\0d\28\02\00\36\02\00\20\06\20" "\10\29\02\00\37\02\00\20\0d\20\11\28\02\00\36\02\00\20\10" "\20\05\29\03\d0\0b\37\02\00\0b\20\02\28\02\00\21\10\20\05" "\41\f0\04\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\01" "\29\02\00\37\03\f0\04\20\05\41\e0\04\6a\41\08\6a\20\0b\28" "\02\00\36\02\00\20\05\20\03\29\02\00\37\03\e0\04\20\05\41" "\f0\04\6a\20\05\41\e0\04\6a\20\10\11\01\00\21\0f\20\02\28" "\02\00\21\0d\20\05\41\d0\04\6a\41\08\6a\20\06\41\08\6a\22" "\10\28\02\00\36\02\00\20\05\20\06\29\02\00\37\03\d0\04\20" "\05\41\c0\04\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20" "\01\29\02\00\37\03\c0\04\20\05\41\d0\04\6a\20\05\41\c0\04" "\6a\20\0d\11\01\00\21\0d\02\40\02\40\20\0f\0d\00\20\0d\45" "\0d\01\20\05\41\d0\0b\6a\41\08\6a\22\0f\20\00\28\02\00\36" "\02\00\20\05\20\01\29\02\00\37\03\d0\0b\20\00\20\10\28\02" "\00\36\02\00\20\01\20\06\29\02\00\37\02\00\20\10\20\0f\28" "\02\00\36\02\00\20\06\20\05\29\03\d0\0b\37\02\00\20\02\28" "\02\00\21\06\20\05\41\b0\04\6a\41\08\6a\20\00\28\02\00\36" "\02\00\20\05\20\01\29\02\00\37\03\b0\04\20\05\41\a0\04\6a" "\41\08\6a\20\0b\28\02\00\36\02\00\20\05\20\03\29\02\00\37" "\03\a0\04\20\05\41\b0\04\6a\20\05\41\a0\04\6a\20\06\11\01" "\00\45\0d\01\20\0f\20\0b\28\02\00\36\02\00\20\05\20\03\29" "\02\00\37\03\d0\0b\20\0b\20\00\28\02\00\36\02\00\20\03\20" "\01\29\02\00\37\02\00\20\00\20\0f\28\02\00\36\02\00\20\01" "\20\05\29\03\d0\0b\37\02\00\0c\01\0b\02\40\20\0d\45\0d\00" "\20\05\41\d0\0b\6a\41\08\6a\22\0f\20\0b\28\02\00\36\02\00" "\20\05\20\03\29\02\00\37\03\d0\0b\20\0b\20\10\28\02\00\36" "\02\00\20\03\20\06\29\02\00\37\02\00\20\10\20\0f\28\02\00" "\36\02\00\20\06\20\05\29\03\d0\0b\37\02\00\0c\01\0b\20\05" "\41\d0\0b\6a\41\08\6a\22\0f\20\0b\28\02\00\36\02\00\20\05" "\20\03\29\02\00\37\03\d0\0b\20\0b\20\00\28\02\00\36\02\00" "\20\03\20\01\29\02\00\37\02\00\20\00\20\0f\28\02\00\36\02" "\00\20\01\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\03" "\20\05\41\90\04\6a\41\08\6a\20\10\28\02\00\36\02\00\20\05" "\20\06\29\02\00\37\03\90\04\20\05\41\80\04\6a\41\08\6a\20" "\00\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\80\04\20" "\05\41\90\04\6a\20\05\41\80\04\6a\20\03\11\01\00\45\0d\00" "\20\0f\20\00\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03" "\d0\0b\20\00\20\10\28\02\00\36\02\00\20\01\20\06\29\02\00" "\37\02\00\20\10\20\0f\28\02\00\36\02\00\20\06\20\05\29\03" "\d0\0b\37\02\00\0b\20\05\41\d0\0b\6a\41\08\6a\22\06\20\0c" "\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\d0\0b\20\0c" "\20\00\28\02\00\36\02\00\20\08\20\01\29\02\00\37\02\00\20" "\00\20\06\28\02\00\36\02\00\20\01\20\05\29\03\d0\0b\37\02" "\00\0c\01\0b\20\05\41\f0\08\6a\41\08\6a\20\08\41\08\6a\22" "\00\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\f0\08\20" "\05\41\e0\08\6a\41\08\6a\20\01\41\08\6a\22\03\28\02\00\36" "\02\00\20\05\20\01\29\02\00\37\03\e0\08\20\05\41\f0\08\6a" "\20\05\41\e0\08\6a\20\06\11\01\00\21\0b\20\02\28\02\00\21" "\0c\20\05\41\d0\08\6a\41\08\6a\20\04\41\08\6a\22\06\28\02" "\00\36\02\00\20\05\20\04\29\02\00\37\03\d0\08\20\05\41\c0" "\08\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\08\29\02" "\00\37\03\c0\08\20\05\41\d0\08\6a\20\05\41\c0\08\6a\20\0c" "\11\01\00\21\0c\02\40\20\0b\0d\00\20\0c\45\0d\01\20\05\41" "\d0\0b\6a\41\08\6a\22\0b\20\00\28\02\00\36\02\00\20\05\20" "\08\29\02\00\37\03\d0\0b\20\00\20\06\28\02\00\36\02\00\20" "\08\20\04\29\02\00\37\02\00\20\06\20\0b\28\02\00\36\02\00" "\20\04\20\05\29\03\d0\0b\37\02\00\20\02\28\02\00\21\06\20" "\05\41\b0\08\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20" "\08\29\02\00\37\03\b0\08\20\05\41\a0\08\6a\41\08\6a\20\03" "\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\a0\08\20\05" "\41\b0\08\6a\20\05\41\a0\08\6a\20\06\11\01\00\45\0d\01\20" "\0b\20\03\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\d0" "\0b\20\03\20\00\28\02\00\36\02\00\20\01\20\08\29\02\00\37" "\02\00\20\00\20\0b\28\02\00\36\02\00\20\08\20\05\29\03\d0" "\0b\37\02\00\0c\01\0b\02\40\20\0c\45\0d\00\20\05\41\d0\0b" "\6a\41\08\6a\22\00\20\03\28\02\00\36\02\00\20\05\20\01\29" "\02\00\37\03\d0\0b\20\03\20\06\28\02\00\36\02\00\20\01\20" "\04\29\02\00\37\02\00\20\06\20\00\28\02\00\36\02\00\20\04" "\20\05\29\03\d0\0b\37\02\00\0c\01\0b\20\05\41\d0\0b\6a\41" "\08\6a\22\0b\20\03\28\02\00\36\02\00\20\05\20\01\29\02\00" "\37\03\d0\0b\20\03\20\00\28\02\00\36\02\00\20\01\20\08\29" "\02\00\37\02\00\20\00\20\0b\28\02\00\36\02\00\20\08\20\05" "\29\03\d0\0b\37\02\00\20\02\28\02\00\21\01\20\05\41\90\08" "\6a\41\08\6a\20\06\28\02\00\36\02\00\20\05\20\04\29\02\00" "\37\03\90\08\20\05\41\80\08\6a\41\08\6a\20\00\28\02\00\36" "\02\00\20\05\20\08\29\02\00\37\03\80\08\20\05\41\90\08\6a" "\20\05\41\80\08\6a\20\01\11\01\00\45\0d\00\20\0b\20\00\28" "\02\00\36\02\00\20\05\20\08\29\02\00\37\03\d0\0b\20\00\20" "\06\28\02\00\36\02\00\20\08\20\04\29\02\00\37\02\00\20\06" "\20\0b\28\02\00\36\02\00\20\04\20\05\29\03\d0\0b\37\02\00" "\0b\20\0a\41\7f\6a\21\0a\02\40\02\40\02\40\02\40\20\09\41" "\01\71\22\0f\0d\00\20\02\28\02\00\21\01\20\05\41\a0\0b\6a" "\41\08\6a\20\08\41\74\6a\22\00\41\08\6a\28\02\00\22\06\36" "\02\00\20\00\29\02\00\21\13\20\05\41\f0\03\6a\41\08\6a\20" "\06\36\02\00\20\05\20\13\37\03\a0\0b\20\05\20\13\37\03\f0" "\03\20\05\41\e0\03\6a\41\08\6a\20\08\41\08\6a\22\0c\28\02" "\00\36\02\00\20\05\20\08\29\02\00\37\03\e0\03\20\05\41\f0" "\03\6a\20\05\41\e0\03\6a\20\01\11\01\00\0d\00\20\05\41\c0" "\0b\6a\41\08\6a\22\00\20\0c\28\02\00\36\02\00\20\05\20\08" "\29\02\00\37\03\c0\0b\20\02\28\02\00\21\06\20\05\41\d0\03" "\6a\41\08\6a\20\0c\28\02\00\36\02\00\20\05\20\08\29\02\00" "\37\03\d0\03\20\05\41\c0\03\6a\41\08\6a\20\04\41\08\6a\28" "\02\00\36\02\00\20\05\20\04\29\02\00\37\03\c0\03\20\08\21" "\01\20\08\21\04\02\40\02\40\20\05\41\d0\03\6a\20\05\41\c0" "\03\6a\20\06\11\01\00\45\0d\00\03\40\20\02\28\02\00\21\04" "\20\05\41\90\03\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05" "\20\05\29\03\c0\0b\37\03\90\03\20\05\41\80\03\6a\41\08\6a" "\20\01\22\01\41\14\6a\28\02\00\36\02\00\20\05\20\01\29\02" "\0c\37\03\80\03\20\01\41\0c\6a\22\06\21\01\20\06\21\06\20" "\05\41\90\03\6a\20\05\41\80\03\6a\20\04\11\01\00\45\0d\00" "\0c\02\0b\00\0b\03\40\02\40\20\04\41\0c\6a\22\01\20\07\49" "\0d\00\20\01\21\06\0c\02\0b\20\02\28\02\00\21\03\20\05\41" "\b0\03\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\05\29" "\03\c0\0b\37\03\b0\03\20\05\41\a0\03\6a\41\08\6a\20\01\41" "\08\6a\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\a0\03" "\20\01\21\04\20\01\21\06\20\05\41\b0\03\6a\20\05\41\a0\03" "\6a\20\03\11\01\00\45\0d\00\0b\0b\20\07\21\01\02\40\20\06" "\22\03\20\07\4f\0d\00\03\40\20\02\28\02\00\21\04\20\05\41" "\f0\02\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\05\29" "\03\c0\0b\37\03\f0\02\20\05\41\e0\02\6a\41\08\6a\20\01\41" "\74\6a\22\01\41\08\6a\28\02\00\36\02\00\20\05\20\01\29\02" "\00\37\03\e0\02\20\01\21\01\20\05\41\f0\02\6a\20\05\41\e0" "\02\6a\20\04\11\01\00\0d\00\0b\0b\20\03\21\04\20\01\22\01" "\21\06\02\40\20\03\20\01\4f\0d\00\03\40\20\05\41\d0\0b\6a" "\41\08\6a\22\03\20\04\22\01\41\08\6a\22\04\28\02\00\36\02" "\00\20\05\20\01\29\02\00\37\03\d0\0b\20\04\20\06\22\06\41" "\08\6a\22\0b\28\02\00\36\02\00\20\01\20\06\29\02\00\37\02" "\00\20\0b\20\03\28\02\00\36\02\00\20\06\20\05\29\03\d0\0b" "\37\02\00\20\01\21\01\03\40\20\02\28\02\00\21\04\20\05\41" "\d0\02\6a\41\08\6a\20\00\28\02\00\36\02\00\20\05\20\05\29" "\03\c0\0b\37\03\d0\02\20\05\41\c0\02\6a\41\08\6a\20\01\22" "\01\41\14\6a\28\02\00\36\02\00\20\05\20\01\29\02\0c\37\03" "\c0\02\20\01\41\0c\6a\22\03\21\01\20\05\41\d0\02\6a\20\05" "\41\c0\02\6a\20\04\11\01\00\45\0d\00\0b\20\06\21\04\03\40" "\20\02\28\02\00\21\06\20\05\41\b0\02\6a\41\08\6a\20\00\28" "\02\00\36\02\00\20\05\20\05\29\03\c0\0b\37\03\b0\02\20\05" "\41\a0\02\6a\41\08\6a\20\04\41\74\6a\22\01\41\08\6a\28\02" "\00\36\02\00\20\05\20\01\29\02\00\37\03\a0\02\20\01\21\04" "\20\05\41\b0\02\6a\20\05\41\a0\02\6a\20\06\11\01\00\0d\00" "\0b\20\03\21\04\20\01\21\06\20\03\20\01\49\0d\00\0b\0b\02" "\40\20\04\22\04\41\74\6a\22\01\20\08\46\0d\00\20\08\20\01" "\29\02\00\37\02\00\20\0c\20\01\41\08\6a\28\02\00\36\02\00" "\0b\20\01\20\05\29\03\c0\0b\37\02\00\20\01\41\08\6a\20\00" "\28\02\00\36\02\00\20\07\21\01\20\04\21\00\41\02\21\04\0c" "\01\0b\20\05\41\c0\0b\6a\41\08\6a\22\04\20\08\41\08\6a\22" "\0d\28\02\00\36\02\00\20\05\20\08\29\02\00\37\03\c0\0b\20" "\08\21\00\03\40\20\02\28\02\00\21\06\20\05\41\90\02\6a\41" "\08\6a\20\00\22\01\41\14\6a\28\02\00\36\02\00\20\01\29\02" "\0c\21\13\20\05\41\80\02\6a\41\08\6a\20\04\28\02\00\36\02" "\00\20\05\20\13\37\03\90\02\20\05\20\05\29\03\c0\0b\37\03" "\80\02\20\01\41\0c\6a\22\0c\21\00\20\05\41\90\02\6a\20\05" "\41\80\02\6a\20\06\11\01\00\0d\00\0b\20\07\21\03\20\07\21" "\06\02\40\02\40\20\01\20\08\47\0d\00\03\40\02\40\20\0c\20" "\03\22\00\49\0d\00\20\00\21\00\0c\03\0b\20\02\28\02\00\21" "\06\20\05\41\d0\01\6a\41\08\6a\20\00\41\74\6a\22\00\41\08" "\6a\28\02\00\36\02\00\20\00\29\02\00\21\13\20\05\41\c0\01" "\6a\41\08\6a\20\04\28\02\00\36\02\00\20\05\20\13\37\03\d0" "\01\20\05\20\05\29\03\c0\0b\37\03\c0\01\20\00\21\03\20\00" "\21\00\20\05\41\d0\01\6a\20\05\41\c0\01\6a\20\06\11\01\00" "\45\0d\00\0c\02\0b\00\0b\03\40\20\02\28\02\00\21\03\20\05" "\41\f0\01\6a\41\08\6a\20\06\41\74\6a\22\00\41\08\6a\28\02" "\00\36\02\00\20\00\29\02\00\21\13\20\05\41\e0\01\6a\41\08" "\6a\20\04\28\02\00\36\02\00\20\05\20\13\37\03\f0\01\20\05" "\20\05\29\03\c0\0b\37\03\e0\01\20\00\21\06\20\00\21\00\20" "\05\41\f0\01\6a\20\05\41\e0\01\6a\20\03\11\01\00\45\0d\00" "\0b\0b\20\0c\21\06\20\00\22\10\21\03\20\01\21\00\02\40\20" "\0c\20\10\4f\0d\00\03\40\20\05\41\d0\0b\6a\41\08\6a\22\00" "\20\06\22\01\41\08\6a\22\06\28\02\00\36\02\00\20\05\20\01" "\29\02\00\37\03\d0\0b\20\06\20\03\22\03\41\08\6a\22\0b\28" "\02\00\36\02\00\20\01\20\03\29\02\00\37\02\00\20\0b\20\00" "\28\02\00\36\02\00\20\03\20\05\29\03\d0\0b\37\02\00\20\01" "\21\01\03\40\20\02\28\02\00\21\06\20\05\41\b0\01\6a\41\08" "\6a\20\01\22\00\41\14\6a\28\02\00\36\02\00\20\00\29\02\0c" "\21\13\20\05\41\a0\01\6a\41\08\6a\20\04\28\02\00\36\02\00" "\20\05\20\13\37\03\b0\01\20\05\20\05\29\03\c0\0b\37\03\a0" "\01\20\00\41\0c\6a\22\0b\21\01\20\05\41\b0\01\6a\20\05\41" "\a0\01\6a\20\06\11\01\00\0d\00\0b\20\03\21\06\03\40\20\02" "\28\02\00\21\03\20\05\41\90\01\6a\41\08\6a\20\06\41\74\6a" "\22\01\41\08\6a\28\02\00\36\02\00\20\01\29\02\00\21\13\20" "\05\41\80\01\6a\41\08\6a\20\04\28\02\00\36\02\00\20\05\20" "\13\37\03\90\01\20\05\20\05\29\03\c0\0b\37\03\80\01\20\01" "\21\06\20\05\41\90\01\6a\20\05\41\80\01\6a\20\03\11\01\00" "\45\0d\00\0b\20\0b\21\06\20\01\21\03\20\00\21\00\20\0b\20" "\01\49\0d\00\0b\0b\02\40\20\00\22\01\20\08\46\0d\00\20\08" "\20\01\29\02\00\37\02\00\20\0d\20\01\41\08\6a\28\02\00\36" "\02\00\0b\20\01\20\05\29\03\c0\0b\37\02\00\20\01\41\08\6a" "\20\04\28\02\00\36\02\00\02\40\20\0c\20\10\4f\0d\00\20\07" "\21\00\20\08\21\04\20\01\21\01\0c\02\0b\20\08\20\01\20\02" "\10\0f\21\00\02\40\02\40\20\01\41\0c\6a\22\0b\20\07\20\02" "\10\0f\45\0d\00\20\07\20\01\20\00\1b\21\04\20\08\21\06\41" "\00\21\03\41\01\41\02\20\00\1b\21\00\20\01\21\01\0c\01\0b" "\02\40\20\00\0d\00\20\07\21\04\20\08\21\06\41\01\21\03\41" "\00\21\00\20\01\21\01\0c\01\0b\20\07\21\04\20\0b\21\06\41" "\00\21\03\41\02\21\00\20\0b\21\01\0b\20\00\21\0b\20\04\22" "\08\21\00\20\06\22\06\21\04\20\01\21\01\20\03\0d\01\20\08" "\21\01\20\06\21\00\20\0b\21\04\0b\20\09\21\06\0c\01\0b\20" "\04\20\01\22\04\20\02\20\0a\20\0f\10\0a\20\00\21\01\20\04" "\41\0c\6a\21\00\41\00\21\04\41\00\21\06\0b\20\0a\21\03\0c" "\05\0b\20\07\21\01\20\08\21\00\41\01\21\04\20\09\21\06\41" "\00\21\03\0c\04\0b\20\07\21\01\0c\02\0b\20\01\21\01\0c\01" "\0b\20\01\21\01\0b\20\08\21\00\41\01\21\04\20\09\21\06\20" "\0a\21\03\0b\20\01\21\01\20\00\21\00\20\06\21\06\20\03\21" "\03\02\40\20\04\0e\03\01\00\01\00\0b\0b\20\05\41\e0\0b\6a" "\24\00\0b\90\01\01\02\7f\23\00\41\c0\00\6b\22\00\24\00\20" "\00\42\e4\80\80\80\80\19\37\03\28\20\00\42\e4\80\80\80\20" "\37\03\20\20\00\42\86\80\80\80\b0\02\37\03\18\20\00\42\82" "\80\80\80\a0\06\37\03\10\20\00\42\94\80\80\80\10\37\03\08" "\20\00\42\83\80\80\80\a0\01\37\03\00\41\c8\92\01\41\eb\0c" "\41\16\10\0c\21\01\20\00\41\01\36\02\3c\20\00\20\00\41\30" "\6a\20\00\41\3c\6a\41\04\41\01\10\0a\20\01\20\00\41\04\10" "\09\10\96\01\1a\20\00\41\c0\00\6a\24\00\41\00\0b\d0\01\01" "\06\7f\23\00\41\10\6b\22\03\24\00\02\40\20\03\41\04\6a\20" "\00\10\8e\01\22\04\2d\00\00\45\0d\00\20\01\20\02\6a\22\05" "\20\01\20\00\20\00\28\02\00\41\74\6a\28\02\00\6a\22\02\28" "\02\04\41\b0\01\71\41\20\46\1b\21\06\20\02\28\02\18\21\07" "\02\40\20\02\28\02\4c\41\7f\47\0d\00\20\03\41\0c\6a\20\02" "\10\e9\02\20\03\41\0c\6a\41\e0\9c\01\10\e2\04\22\08\41\20" "\20\08\28\02\00\28\02\1c\11\01\00\21\08\20\03\41\0c\6a\10" "\ad\09\1a\20\02\20\08\36\02\4c\0b\20\07\20\01\20\06\20\05" "\20\02\20\02\2c\00\4c\10\10\0d\00\20\00\20\00\28\02\00\41" "\74\6a\28\02\00\6a\22\02\20\02\28\02\10\41\05\72\10\eb\02" "\0b\20\04\10\8f\01\1a\20\03\41\10\6a\24\00\20\00\0b\cd\09" "\01\05\7f\23\00\41\f0\01\6b\22\05\24\00\20\04\28\02\00\21" "\06\20\05\41\d0\01\6a\41\08\6a\20\01\41\08\6a\22\07\28\02" "\00\36\02\00\20\05\20\01\29\02\00\37\03\d0\01\20\05\41\c0" "\01\6a\41\08\6a\20\00\41\08\6a\28\02\00\36\02\00\20\05\20" "\00\29\02\00\37\03\c0\01\20\05\41\d0\01\6a\20\05\41\c0\01" "\6a\20\06\11\01\00\21\06\20\04\28\02\00\21\08\20\05\41\b0" "\01\6a\41\08\6a\20\02\41\08\6a\28\02\00\36\02\00\20\05\20" "\02\29\02\00\37\03\b0\01\20\05\41\a0\01\6a\41\08\6a\20\07" "\28\02\00\36\02\00\20\05\20\01\29\02\00\37\03\a0\01\20\05" "\41\b0\01\6a\20\05\41\a0\01\6a\20\08\11\01\00\21\07\02\40" "\02\40\20\06\0d\00\20\07\45\0d\01\20\05\41\e0\01\6a\41\08" "\6a\22\07\20\01\41\08\6a\22\06\28\02\00\36\02\00\20\05\20" "\01\29\02\00\37\03\e0\01\20\06\20\02\41\08\6a\22\08\28\02" "\00\36\02\00\20\01\20\02\29\02\00\37\02\00\20\08\20\07\28" "\02\00\36\02\00\20\02\20\05\29\03\e0\01\37\02\00\20\04\28" "\02\00\21\08\20\05\41\90\01\6a\41\08\6a\20\06\28\02\00\36" "\02\00\20\05\20\01\29\02\00\37\03\90\01\20\05\41\80\01\6a" "\41\08\6a\20\00\41\08\6a\22\09\28\02\00\36\02\00\20\05\20" "\00\29\02\00\37\03\80\01\20\05\41\90\01\6a\20\05\41\80\01" "\6a\20\08\11\01\00\45\0d\01\20\07\20\09\28\02\00\36\02\00" "\20\05\20\00\29\02\00\37\03\e0\01\20\09\20\06\28\02\00\36" "\02\00\20\00\20\01\29\02\00\37\02\00\20\06\20\07\28\02\00" "\36\02\00\20\01\20\05\29\03\e0\01\37\02\00\0c\01\0b\02\40" "\20\07\45\0d\00\20\05\41\e0\01\6a\41\08\6a\22\06\20\00\41" "\08\6a\22\07\28\02\00\36\02\00\20\05\20\00\29\02\00\37\03" "\e0\01\20\07\20\02\41\08\6a\22\08\28\02\00\36\02\00\20\00" "\20\02\29\02\00\37\02\00\20\08\20\06\28\02\00\36\02\00\20" "\02\20\05\29\03\e0\01\37\02\00\0c\01\0b\20\05\41\e0\01\6a" "\41\08\6a\22\07\20\00\41\08\6a\22\08\28\02\00\36\02\00\20" "\05\20\00\29\02\00\37\03\e0\01\20\08\20\01\41\08\6a\22\06" "\28\02\00\36\02\00\20\00\20\01\29\02\00\37\02\00\20\06\20" "\07\28\02\00\36\02\00\20\01\20\05\29\03\e0\01\37\02\00\20" "\04\28\02\00\21\08\20\05\41\f0\00\6a\41\08\6a\20\02\41\08" "\6a\22\09\28\02\00\36\02\00\20\05\20\02\29\02\00\37\03\70" "\20\05\41\e0\00\6a\41\08\6a\20\06\28\02\00\36\02\00\20\05" "\20\01\29\02\00\37\03\60\20\05\41\f0\00\6a\20\05\41\e0\00" "\6a\20\08\11\01\00\45\0d\00\20\07\20\06\28\02\00\36\02\00" "\20\05\20\01\29\02\00\37\03\e0\01\20\06\20\09\28\02\00\36" "\02\00\20\01\20\02\29\02\00\37\02\00\20\09\20\07\28\02\00" "\36\02\00\20\02\20\05\29\03\e0\01\37\02\00\0b\20\04\28\02" "\00\21\07\20\05\41\d0\00\6a\41\08\6a\20\03\41\08\6a\22\08" "\28\02\00\36\02\00\20\05\20\03\29\02\00\37\03\50\20\05\41" "\c0\00\6a\41\08\6a\20\02\41\08\6a\22\06\28\02\00\36\02\00" "\20\05\20\02\29\02\00\37\03\40\02\40\20\05\41\d0\00\6a\20" "\05\41\c0\00\6a\20\07\11\01\00\45\0d\00\20\05\41\e0\01\6a" "\41\08\6a\22\07\20\06\28\02\00\36\02\00\20\05\20\02\29\02" "\00\37\03\e0\01\20\06\20\08\28\02\00\36\02\00\20\02\20\03" "\29\02\00\37\02\00\20\08\20\07\28\02\00\36\02\00\20\03\20" "\05\29\03\e0\01\37\02\00\20\04\28\02\00\21\03\20\05\41\30" "\6a\41\08\6a\20\06\28\02\00\36\02\00\20\05\20\02\29\02\00" "\37\03\30\20\05\41\20\6a\41\08\6a\20\01\41\08\6a\28\02\00" "\36\02\00\20\05\20\01\29\02\00\37\03\20\20\05\41\30\6a\20" "\05\41\20\6a\20\03\11\01\00\45\0d\00\20\05\41\e0\01\6a\41" "\08\6a\22\06\20\01\41\08\6a\22\03\28\02\00\36\02\00\20\05" "\20\01\29\02\00\37\03\e0\01\20\03\20\02\41\08\6a\22\07\28" "\02\00\36\02\00\20\01\20\02\29\02\00\37\02\00\20\07\20\06" "\28\02\00\36\02\00\20\02\20\05\29\03\e0\01\37\02\00\20\04" "\28\02\00\21\02\20\05\41\10\6a\41\08\6a\20\03\28\02\00\36" "\02\00\20\05\20\01\29\02\00\37\03\10\20\05\41\08\6a\20\00" "\41\08\6a\22\04\28\02\00\36\02\00\20\05\20\00\29\02\00\37" "\03\00\20\05\41\10\6a\20\05\20\02\11\01\00\45\0d\00\20\06" "\20\04\28\02\00\36\02\00\20\05\20\00\29\02\00\37\03\e0\01" "\20\04\20\03\28\02\00\36\02\00\20\00\20\01\29\02\00\37\02" "\00\20\03\20\06\28\02\00\36\02\00\20\01\20\05\29\03\e0\01" "\37\02\00\0b\20\05\41\f0\01\6a\24\00\0b\ff\11\02\0e\7f\01" "\7e\23\00\41\a0\03\6b\22\04\24\00\02\40\02\40\20\00\20\01" "\47\0d\00\20\02\21\05\0c\01\0b\20\01\20\00\6b\22\06\41\0c" "\6d\21\07\02\40\20\06\41\0d\48\0d\00\20\06\41\18\48\21\08" "\20\07\41\7e\6a\41\01\76\22\09\21\05\03\40\20\05\21\0a\02" "\40\20\08\0d\00\20\09\20\0a\48\0d\00\20\00\20\0a\41\0c\6c" "\6a\21\0b\20\00\20\0a\41\01\74\22\0c\41\01\72\22\0d\41\0c" "\6c\6a\21\05\02\40\02\40\20\0c\41\02\6a\22\0c\20\07\48\0d" "\00\20\05\21\05\20\0d\21\0c\0c\01\0b\20\03\28\02\00\21\0e" "\20\04\41\f0\02\6a\41\08\6a\20\05\41\08\6a\28\02\00\36\02" "\00\20\04\20\05\29\02\00\37\03\f0\02\20\04\41\e0\02\6a\41" "\08\6a\20\05\41\14\6a\28\02\00\36\02\00\20\04\20\05\29\02" "\0c\37\03\e0\02\20\05\41\0c\6a\20\05\20\04\41\f0\02\6a\20" "\04\41\e0\02\6a\20\0e\11\01\00\22\0e\1b\21\05\20\0c\20\0d" "\20\0e\1b\21\0c\0b\20\0c\21\0d\20\03\28\02\00\21\0c\20\04" "\41\d0\02\6a\41\08\6a\20\05\22\05\41\08\6a\28\02\00\36\02" "\00\20\04\20\05\29\02\00\37\03\d0\02\20\04\41\c0\02\6a\41" "\08\6a\20\0b\41\08\6a\22\0e\28\02\00\36\02\00\20\04\20\0b" "\29\02\00\37\03\c0\02\20\04\41\d0\02\6a\20\04\41\c0\02\6a" "\20\0c\11\01\00\0d\00\20\04\41\90\03\6a\41\08\6a\22\0f\20" "\0e\28\02\00\36\02\00\20\04\20\0b\29\02\00\37\03\90\03\20" "\0b\21\0c\20\05\21\05\20\0d\21\0d\02\40\03\40\20\0c\22\0c" "\20\05\22\0b\29\02\00\37\02\00\20\0c\41\08\6a\20\0b\41\08" "\6a\22\10\28\02\00\36\02\00\20\09\20\0d\22\05\48\0d\01\20" "\00\20\05\41\01\74\22\0c\41\01\72\22\0d\41\0c\6c\6a\21\05" "\02\40\02\40\20\0c\41\02\6a\22\0c\20\07\48\0d\00\20\05\21" "\05\20\0d\21\0d\0c\01\0b\20\03\28\02\00\21\0e\20\04\41\b0" "\02\6a\41\08\6a\20\05\41\08\6a\28\02\00\36\02\00\20\04\20" "\05\29\02\00\37\03\b0\02\20\04\41\a0\02\6a\41\08\6a\20\05" "\41\14\6a\28\02\00\36\02\00\20\04\20\05\29\02\0c\37\03\a0" "\02\20\05\41\0c\6a\20\05\20\04\41\b0\02\6a\20\04\41\a0\02" "\6a\20\0e\11\01\00\22\0e\1b\21\05\20\0c\20\0d\20\0e\1b\21" "\0d\0b\20\03\28\02\00\21\0e\20\04\41\90\02\6a\41\08\6a\20" "\05\22\05\41\08\6a\28\02\00\36\02\00\20\05\29\02\00\21\12" "\20\04\41\80\02\6a\41\08\6a\20\0f\28\02\00\36\02\00\20\04" "\20\12\37\03\90\02\20\04\20\04\29\03\90\03\37\03\80\02\20" "\0b\21\0c\20\05\21\05\20\0d\21\0d\20\04\41\90\02\6a\20\04" "\41\80\02\6a\20\0e\11\01\00\45\0d\00\0b\0b\20\0b\20\04\29" "\03\90\03\37\02\00\20\10\20\0f\28\02\00\36\02\00\0b\20\0a" "\41\7f\6a\21\05\20\0a\41\00\4a\0d\00\0b\0b\20\01\21\0c\02" "\40\20\01\20\02\46\0d\00\20\00\41\18\6a\21\11\20\00\41\0c" "\6a\21\08\20\07\41\7e\6a\41\01\76\21\10\20\01\21\0b\03\40" "\20\03\28\02\00\21\0c\20\04\41\f0\01\6a\41\08\6a\20\0b\22" "\0e\41\08\6a\22\0b\28\02\00\36\02\00\20\04\20\0e\29\02\00" "\37\03\f0\01\20\04\41\e0\01\6a\41\08\6a\20\00\41\08\6a\22" "\05\28\02\00\36\02\00\20\04\20\00\29\02\00\37\03\e0\01\02" "\40\20\04\41\f0\01\6a\20\04\41\e0\01\6a\20\0c\11\01\00\45" "\0d\00\20\04\41\90\03\6a\41\08\6a\22\0a\20\0b\28\02\00\36" "\02\00\20\04\20\0e\29\02\00\37\03\90\03\20\0b\20\05\28\02" "\00\36\02\00\20\0e\20\00\29\02\00\37\02\00\20\05\20\0a\28" "\02\00\36\02\00\20\00\20\04\29\03\90\03\37\02\00\20\06\41" "\18\48\0d\00\20\08\21\0b\41\01\21\0c\02\40\20\06\41\18\46" "\0d\00\20\03\28\02\00\21\0b\20\04\41\d0\01\6a\41\08\6a\20" "\08\41\08\6a\28\02\00\36\02\00\20\04\20\08\29\02\00\37\03" "\d0\01\20\04\41\c0\01\6a\41\08\6a\20\11\41\08\6a\28\02\00" "\36\02\00\20\04\20\11\29\02\00\37\03\c0\01\20\11\20\08\20" "\04\41\d0\01\6a\20\04\41\c0\01\6a\20\0b\11\01\00\22\0c\1b" "\21\0b\41\02\41\01\20\0c\1b\21\0c\0b\20\0c\21\0d\20\03\28" "\02\00\21\0c\20\04\41\b0\01\6a\41\08\6a\20\0b\22\0b\41\08" "\6a\28\02\00\36\02\00\20\04\20\0b\29\02\00\37\03\b0\01\20" "\04\41\a0\01\6a\41\08\6a\20\05\28\02\00\36\02\00\20\04\20" "\00\29\02\00\37\03\a0\01\20\04\41\b0\01\6a\20\04\41\a0\01" "\6a\20\0c\11\01\00\0d\00\20\0a\20\05\28\02\00\36\02\00\20" "\04\20\00\29\02\00\37\03\90\03\20\00\21\0c\20\0b\21\05\20" "\0d\21\0d\02\40\03\40\20\0c\22\0c\20\05\22\0b\29\02\00\37" "\02\00\20\0c\41\08\6a\20\0b\41\08\6a\22\0f\28\02\00\36\02" "\00\20\10\20\0d\22\05\48\0d\01\20\00\20\05\41\01\74\22\0c" "\41\01\72\22\0d\41\0c\6c\6a\21\05\02\40\02\40\20\0c\41\02" "\6a\22\0c\20\07\48\0d\00\20\05\21\05\20\0d\21\0d\0c\01\0b" "\20\03\28\02\00\21\09\20\04\41\90\01\6a\41\08\6a\20\05\41" "\08\6a\28\02\00\36\02\00\20\04\20\05\29\02\00\37\03\90\01" "\20\04\41\80\01\6a\41\08\6a\20\05\41\14\6a\28\02\00\36\02" "\00\20\04\20\05\29\02\0c\37\03\80\01\20\05\41\0c\6a\20\05" "\20\04\41\90\01\6a\20\04\41\80\01\6a\20\09\11\01\00\22\09" "\1b\21\05\20\0c\20\0d\20\09\1b\21\0d\0b\20\03\28\02\00\21" "\09\20\04\41\f0\00\6a\41\08\6a\20\05\22\05\41\08\6a\28\02" "\00\36\02\00\20\05\29\02\00\21\12\20\04\41\e0\00\6a\41\08" "\6a\20\0a\28\02\00\36\02\00\20\04\20\12\37\03\70\20\04\20" "\04\29\03\90\03\37\03\60\20\0b\21\0c\20\05\21\05\20\0d\21" "\0d\20\04\41\f0\00\6a\20\04\41\e0\00\6a\20\09\11\01\00\45" "\0d\00\0b\0b\20\0b\20\04\29\03\90\03\37\02\00\20\0f\20\0a" "\28\02\00\36\02\00\0b\20\0e\41\0c\6a\22\05\21\0b\20\05\21" "\0c\20\05\20\02\47\0d\00\0b\0b\20\0c\21\02\02\40\20\06\41" "\0d\48\0d\00\20\06\41\0c\6e\21\05\20\01\21\0b\03\40\20\0b" "\21\0f\20\04\41\80\03\6a\41\08\6a\22\10\20\00\41\08\6a\28" "\02\00\36\02\00\20\04\20\00\29\02\00\37\03\80\03\20\05\22" "\07\41\7e\6a\41\02\6d\21\09\20\00\21\0b\41\00\21\0c\03\40" "\20\0c\22\05\41\01\74\22\0c\41\01\72\21\0d\20\0b\22\0b\20" "\05\41\0c\6c\6a\22\0e\41\0c\6a\21\05\02\40\02\40\20\0c\41" "\02\6a\22\0c\20\07\48\0d\00\20\05\21\05\20\0d\21\0c\0c\01" "\0b\20\03\28\02\00\21\0a\20\04\41\d0\00\6a\41\08\6a\20\05" "\41\08\6a\28\02\00\36\02\00\20\04\20\05\29\02\00\37\03\50" "\20\04\41\c0\00\6a\41\08\6a\20\0e\41\20\6a\28\02\00\36\02" "\00\20\04\20\0e\41\18\6a\22\0e\29\02\00\37\03\40\20\0e\20" "\05\20\04\41\d0\00\6a\20\04\41\c0\00\6a\20\0a\11\01\00\22" "\0a\1b\21\05\20\0c\20\0d\20\0a\1b\21\0c\0b\20\0b\20\05\22" "\05\29\02\00\37\02\00\20\0b\41\08\6a\20\05\41\08\6a\22\0e" "\28\02\00\36\02\00\20\05\21\0b\20\0c\22\0d\21\0c\20\0d\20" "\09\4c\0d\00\0b\02\40\02\40\20\05\20\0f\41\74\6a\22\09\47" "\0d\00\20\05\20\04\29\03\80\03\37\02\00\20\0e\20\10\28\02" "\00\36\02\00\0c\01\0b\20\05\20\09\29\02\00\37\02\00\20\0e" "\20\09\41\08\6a\22\0b\28\02\00\36\02\00\20\09\20\04\29\03" "\80\03\37\02\00\20\0b\20\10\28\02\00\36\02\00\20\05\20\00" "\6b\41\0c\6a\22\0b\41\0d\48\0d\00\20\03\28\02\00\21\0c\20" "\04\41\30\6a\41\08\6a\20\00\20\0b\41\0c\6e\41\7e\6a\41\01" "\76\22\0d\41\0c\6c\6a\22\0b\41\08\6a\28\02\00\36\02\00\20" "\04\20\0b\29\02\00\37\03\30\20\04\41\20\6a\41\08\6a\20\0e" "\28\02\00\36\02\00\20\04\20\05\29\02\00\37\03\20\20\04\41" "\30\6a\20\04\41\20\6a\20\0c\11\01\00\45\0d\00\20\04\41\90" "\03\6a\41\08\6a\22\0a\20\0e\28\02\00\36\02\00\20\04\20\05" "\29\02\00\37\03\90\03\20\05\21\0c\20\0b\21\0b\20\0d\21\0d" "\02\40\03\40\20\0c\22\0c\20\0b\22\05\29\02\00\37\02\00\20" "\0c\41\08\6a\20\05\41\08\6a\22\0f\28\02\00\36\02\00\20\0d" "\22\0b\45\0d\01\20\03\28\02\00\21\0e\20\04\41\10\6a\41\08" "\6a\20\00\20\0b\41\7f\6a\41\01\76\22\0d\41\0c\6c\6a\22\0b" "\41\08\6a\28\02\00\36\02\00\20\0b\29\02\00\21\12\20\04\41" "\08\6a\20\0a\28\02\00\36\02\00\20\04\20\12\37\03\10\20\04" "\20\04\29\03\90\03\37\03\00\20\05\21\0c\20\0b\21\0b\20\0d" "\21\0d\20\04\41\10\6a\20\04\20\0e\11\01\00\0d\00\0b\0b\20" "\05\20\04\29\03\90\03\37\02\00\20\0f\20\0a\28\02\00\36\02" "\00\0b\20\07\41\7f\6a\21\05\20\09\21\0b\20\07\41\02\4a\0d" "\00\0b\0b\20\02\21\05\0b\20\04\41\a0\03\6a\24\00\20\05\0b" "\fe\16\01\0a\7f\23\00\41\f0\03\6b\22\03\24\00\41\01\21\04" "\02\40\02\40\02\40\02\40\02\40\02\40\20\01\20\00\6b\41\0c" "\6d\0e\06\05\05\00\01\02\03\04\0b\20\02\28\02\00\21\05\20" "\03\41\d0\01\6a\41\08\6a\20\01\41\74\6a\22\06\41\08\6a\22" "\07\28\02\00\36\02\00\20\03\20\06\29\02\00\37\03\d0\01\20" "\03\41\c0\01\6a\41\08\6a\20\00\41\08\6a\22\02\28\02\00\36" "\02\00\20\03\20\00\29\02\00\37\03\c0\01\41\01\21\04\20\03" "\41\d0\01\6a\20\03\41\c0\01\6a\20\05\11\01\00\45\0d\04\20" "\03\41\e0\03\6a\41\08\6a\22\04\20\02\28\02\00\36\02\00\20" "\03\20\00\29\02\00\37\03\e0\03\20\02\20\07\28\02\00\36\02" "\00\20\00\20\06\29\02\00\37\02\00\20\07\20\04\28\02\00\36" "\02\00\20\06\20\03\29\03\e0\03\37\02\00\41\01\21\04\0c\04" "\0b\20\02\28\02\00\21\04\20\03\41\d0\02\6a\41\08\6a\20\00" "\41\14\6a\22\05\28\02\00\36\02\00\20\03\20\00\29\02\0c\37" "\03\d0\02\20\03\41\c0\02\6a\41\08\6a\20\00\41\08\6a\28\02" "\00\36\02\00\20\03\20\00\29\02\00\37\03\c0\02\20\03\41\d0" "\02\6a\20\03\41\c0\02\6a\20\04\11\01\00\21\04\20\02\28\02" "\00\21\07\20\03\41\b0\02\6a\41\08\6a\20\01\41\74\6a\22\06" "\41\08\6a\28\02\00\36\02\00\20\03\20\06\29\02\00\37\03\b0" "\02\20\03\41\a0\02\6a\41\08\6a\20\05\28\02\00\36\02\00\20" "\03\20\00\29\02\0c\37\03\a0\02\20\00\41\0c\6a\21\05\20\03" "\41\b0\02\6a\20\03\41\a0\02\6a\20\07\11\01\00\21\07\02\40" "\20\04\0d\00\41\01\21\04\20\07\45\0d\04\20\03\41\e0\03\6a" "\41\08\6a\22\08\20\05\41\08\6a\22\07\28\02\00\36\02\00\20" "\03\20\05\29\02\00\37\03\e0\03\20\07\20\06\41\08\6a\22\04" "\28\02\00\36\02\00\20\05\20\06\29\02\00\37\02\00\20\04\20" "\08\28\02\00\36\02\00\20\06\20\03\29\03\e0\03\37\02\00\20" "\02\28\02\00\21\06\20\03\41\90\02\6a\41\08\6a\20\07\28\02" "\00\36\02\00\20\03\20\05\29\02\00\37\03\90\02\20\03\41\80" "\02\6a\41\08\6a\20\00\41\08\6a\22\02\28\02\00\36\02\00\20" "\03\20\00\29\02\00\37\03\80\02\41\01\21\04\20\03\41\90\02" "\6a\20\03\41\80\02\6a\20\06\11\01\00\45\0d\04\20\08\20\02" "\28\02\00\36\02\00\20\03\20\00\29\02\00\37\03\e0\03\20\02" "\20\07\28\02\00\36\02\00\20\00\20\05\29\02\00\37\02\00\20" "\07\20\08\28\02\00\36\02\00\20\05\20\03\29\03\e0\03\37\02" "\00\41\01\21\04\0c\04\0b\02\40\20\07\45\0d\00\20\03\41\e0" "\03\6a\41\08\6a\22\04\20\00\41\08\6a\22\05\28\02\00\36\02" "\00\20\03\20\00\29\02\00\37\03\e0\03\20\05\20\06\41\08\6a" "\22\07\28\02\00\36\02\00\20\00\20\06\29\02\00\37\02\00\20" "\07\20\04\28\02\00\36\02\00\20\06\20\03\29\03\e0\03\37\02" "\00\41\01\21\04\0c\04\0b\20\03\41\e0\03\6a\41\08\6a\22\08" "\20\00\41\08\6a\22\04\28\02\00\36\02\00\20\03\20\00\29\02" "\00\37\03\e0\03\20\04\20\05\41\08\6a\22\07\28\02\00\36\02" "\00\20\00\20\05\29\02\00\37\02\00\20\07\20\08\28\02\00\36" "\02\00\20\05\20\03\29\03\e0\03\37\02\00\20\02\28\02\00\21" "\00\20\03\41\f0\01\6a\41\08\6a\20\06\41\08\6a\22\02\28\02" "\00\36\02\00\20\03\20\06\29\02\00\37\03\f0\01\20\03\41\e0" "\01\6a\41\08\6a\20\07\28\02\00\36\02\00\20\03\20\05\29\02" "\00\37\03\e0\01\41\01\21\04\20\03\41\f0\01\6a\20\03\41\e0" "\01\6a\20\00\11\01\00\45\0d\03\20\08\20\07\28\02\00\36\02" "\00\20\03\20\05\29\02\00\37\03\e0\03\20\07\20\02\28\02\00" "\36\02\00\20\05\20\06\29\02\00\37\02\00\20\02\20\08\28\02" "\00\36\02\00\20\06\20\03\29\03\e0\03\37\02\00\41\01\21\04" "\0c\03\0b\20\00\20\00\41\0c\6a\20\00\41\18\6a\20\01\41\74" "\6a\20\02\10\0d\41\01\21\04\0c\02\0b\20\00\20\00\41\0c\6a" "\22\08\20\00\41\18\6a\22\05\20\00\41\24\6a\22\06\20\02\10" "\0d\20\02\28\02\00\21\09\20\03\41\d0\03\6a\41\08\6a\20\01" "\41\74\6a\22\07\41\08\6a\22\0a\28\02\00\36\02\00\20\03\20" "\07\29\02\00\37\03\d0\03\20\03\41\c0\03\6a\41\08\6a\20\00" "\41\2c\6a\28\02\00\36\02\00\20\03\20\00\29\02\24\37\03\c0" "\03\41\01\21\04\20\03\41\d0\03\6a\20\03\41\c0\03\6a\20\09" "\11\01\00\45\0d\01\20\03\41\e0\03\6a\41\08\6a\22\09\20\06" "\41\08\6a\22\04\28\02\00\36\02\00\20\03\20\06\29\02\00\37" "\03\e0\03\20\04\20\0a\28\02\00\36\02\00\20\06\20\07\29\02" "\00\37\02\00\20\0a\20\09\28\02\00\36\02\00\20\07\20\03\29" "\03\e0\03\37\02\00\20\02\28\02\00\21\07\20\03\41\b0\03\6a" "\41\08\6a\20\04\28\02\00\36\02\00\20\03\20\06\29\02\00\37" "\03\b0\03\20\03\41\a0\03\6a\41\08\6a\20\05\41\08\6a\28\02" "\00\36\02\00\20\03\20\05\29\02\00\37\03\a0\03\41\01\21\04" "\20\03\41\b0\03\6a\20\03\41\a0\03\6a\20\07\11\01\00\45\0d" "\01\20\03\41\e0\03\6a\41\08\6a\22\09\20\05\41\08\6a\22\07" "\28\02\00\36\02\00\20\03\20\05\29\02\00\37\03\e0\03\20\07" "\20\06\41\08\6a\22\04\28\02\00\36\02\00\20\05\20\06\29\02" "\00\37\02\00\20\04\20\09\28\02\00\36\02\00\20\06\20\03\29" "\03\e0\03\37\02\00\20\02\28\02\00\21\0a\20\03\41\90\03\6a" "\41\08\6a\20\07\28\02\00\36\02\00\20\03\20\05\29\02\00\37" "\03\90\03\20\03\41\80\03\6a\41\08\6a\20\08\41\08\6a\22\06" "\28\02\00\36\02\00\20\03\20\08\29\02\00\37\03\80\03\41\01" "\21\04\20\03\41\90\03\6a\20\03\41\80\03\6a\20\0a\11\01\00" "\45\0d\01\20\09\20\06\28\02\00\36\02\00\20\03\20\08\29\02" "\00\37\03\e0\03\20\06\20\07\28\02\00\36\02\00\20\08\20\05" "\29\02\00\37\02\00\20\07\20\09\28\02\00\36\02\00\20\05\20" "\03\29\03\e0\03\37\02\00\20\02\28\02\00\21\05\20\03\41\f0" "\02\6a\41\08\6a\20\06\28\02\00\36\02\00\20\03\20\08\29\02" "\00\37\03\f0\02\20\03\41\e0\02\6a\41\08\6a\20\00\41\08\6a" "\28\02\00\36\02\00\20\03\20\00\29\02\00\37\03\e0\02\41\01" "\21\04\20\03\41\f0\02\6a\20\03\41\e0\02\6a\20\05\11\01\00" "\45\0d\01\20\03\41\e0\03\6a\41\08\6a\22\04\20\00\41\08\6a" "\22\06\28\02\00\36\02\00\20\03\20\00\29\02\00\37\03\e0\03" "\20\06\20\08\41\08\6a\22\05\28\02\00\36\02\00\20\00\20\08" "\29\02\00\37\02\00\20\05\20\04\28\02\00\36\02\00\20\08\20" "\03\29\03\e0\03\37\02\00\41\01\21\04\0c\01\0b\20\02\28\02" "\00\21\04\20\03\41\b0\01\6a\41\08\6a\20\00\41\14\6a\22\06" "\28\02\00\36\02\00\20\03\20\00\29\02\0c\37\03\b0\01\20\03" "\41\a0\01\6a\41\08\6a\20\00\41\08\6a\28\02\00\36\02\00\20" "\03\20\00\29\02\00\37\03\a0\01\20\03\41\b0\01\6a\20\03\41" "\a0\01\6a\20\04\11\01\00\21\07\20\02\28\02\00\21\08\20\03" "\41\90\01\6a\41\08\6a\20\00\41\20\6a\28\02\00\36\02\00\20" "\03\20\00\29\02\18\37\03\90\01\20\03\41\80\01\6a\41\08\6a" "\20\06\28\02\00\36\02\00\20\03\20\00\29\02\0c\37\03\80\01" "\20\00\41\0c\6a\21\04\20\00\41\18\6a\21\05\20\03\41\90\01" "\6a\20\03\41\80\01\6a\20\08\11\01\00\21\06\02\40\02\40\20" "\07\0d\00\20\06\45\0d\01\20\03\41\e0\03\6a\41\08\6a\22\07" "\20\04\41\08\6a\22\06\28\02\00\36\02\00\20\03\20\04\29\02" "\00\37\03\e0\03\20\06\20\05\41\08\6a\22\08\28\02\00\36\02" "\00\20\04\20\05\29\02\00\37\02\00\20\08\20\07\28\02\00\36" "\02\00\20\05\20\03\29\03\e0\03\37\02\00\20\02\28\02\00\21" "\08\20\03\41\f0\00\6a\41\08\6a\20\06\28\02\00\36\02\00\20" "\03\20\04\29\02\00\37\03\70\20\03\41\e0\00\6a\41\08\6a\20" "\00\41\08\6a\22\09\28\02\00\36\02\00\20\03\20\00\29\02\00" "\37\03\60\20\03\41\f0\00\6a\20\03\41\e0\00\6a\20\08\11\01" "\00\45\0d\01\20\07\20\09\28\02\00\36\02\00\20\03\20\00\29" "\02\00\37\03\e0\03\20\09\20\06\28\02\00\36\02\00\20\00\20" "\04\29\02\00\37\02\00\20\06\20\07\28\02\00\36\02\00\20\04" "\20\03\29\03\e0\03\37\02\00\0c\01\0b\02\40\20\06\45\0d\00" "\20\03\41\e0\03\6a\41\08\6a\22\04\20\00\41\08\6a\22\06\28" "\02\00\36\02\00\20\03\20\00\29\02\00\37\03\e0\03\20\06\20" "\05\41\08\6a\22\07\28\02\00\36\02\00\20\00\20\05\29\02\00" "\37\02\00\20\07\20\04\28\02\00\36\02\00\20\05\20\03\29\03" "\e0\03\37\02\00\0c\01\0b\20\03\41\e0\03\6a\41\08\6a\22\07" "\20\00\41\08\6a\22\08\28\02\00\36\02\00\20\03\20\00\29\02" "\00\37\03\e0\03\20\08\20\04\41\08\6a\22\06\28\02\00\36\02" "\00\20\00\20\04\29\02\00\37\02\00\20\06\20\07\28\02\00\36" "\02\00\20\04\20\03\29\03\e0\03\37\02\00\20\02\28\02\00\21" "\08\20\03\41\d0\00\6a\41\08\6a\20\05\41\08\6a\22\09\28\02" "\00\36\02\00\20\03\20\05\29\02\00\37\03\50\20\03\41\c0\00" "\6a\41\08\6a\20\06\28\02\00\36\02\00\20\03\20\04\29\02\00" "\37\03\40\20\03\41\d0\00\6a\20\03\41\c0\00\6a\20\08\11\01" "\00\45\0d\00\20\07\20\06\28\02\00\36\02\00\20\03\20\04\29" "\02\00\37\03\e0\03\20\06\20\09\28\02\00\36\02\00\20\04\20" "\05\29\02\00\37\02\00\20\09\20\07\28\02\00\36\02\00\20\05" "\20\03\29\03\e0\03\37\02\00\0b\41\01\21\04\20\00\41\24\6a" "\22\07\20\01\46\0d\00\41\00\21\04\20\05\21\05\20\07\21\07" "\03\40\20\06\21\0b\20\04\21\0c\20\02\28\02\00\21\06\20\03" "\41\30\6a\41\08\6a\20\07\22\0a\41\08\6a\22\07\28\02\00\36" "\02\00\20\03\20\0a\29\02\00\37\03\30\20\03\41\20\6a\41\08" "\6a\20\05\22\04\41\08\6a\28\02\00\36\02\00\20\03\20\04\29" "\02\00\37\03\20\02\40\02\40\20\03\41\30\6a\20\03\41\20\6a" "\20\06\11\01\00\0d\00\20\0a\21\05\20\0b\21\06\20\0c\21\04" "\0c\01\0b\20\03\41\e0\03\6a\41\08\6a\22\08\20\07\28\02\00" "\36\02\00\20\03\20\0a\29\02\00\37\03\e0\03\20\04\21\06\20" "\0a\21\05\02\40\03\40\20\05\22\05\20\06\22\04\29\02\00\37" "\02\00\20\05\41\08\6a\20\04\41\08\6a\22\09\28\02\00\36\02" "\00\20\04\20\00\46\0d\01\20\02\28\02\00\21\07\20\03\41\10" "\6a\41\08\6a\20\08\28\02\00\36\02\00\20\03\20\03\29\03\e0" "\03\37\03\10\20\03\41\08\6a\20\04\41\74\6a\22\06\41\08\6a" "\28\02\00\36\02\00\20\03\20\06\29\02\00\37\03\00\20\06\21" "\06\20\04\21\05\20\03\41\10\6a\20\03\20\07\11\01\00\0d\00" "\0b\0b\20\04\20\03\29\03\e0\03\37\02\00\20\09\20\08\28\02" "\00\36\02\00\20\0a\41\0c\6a\22\05\20\01\46\20\0b\20\0c\41" "\01\6a\22\07\41\08\46\22\04\1b\21\06\02\40\20\04\45\0d\00" "\20\06\21\04\0c\03\0b\20\05\20\0a\20\04\1b\21\05\20\06\21" "\06\20\07\21\04\0b\20\04\21\04\20\06\21\06\20\05\22\07\21" "\05\20\07\41\0c\6a\22\08\21\07\20\08\20\01\47\0d\00\0b\41" "\01\21\04\0b\20\03\41\f0\03\6a\24\00\20\04\41\01\71\0b\fd" "\02\01\03\7f\23\00\41\10\6b\22\06\24\00\02\40\02\40\02\40" "\20\00\0d\00\41\00\21\00\0c\01\0b\20\04\28\02\0c\21\07\02" "\40\20\02\20\01\6b\22\08\41\01\48\0d\00\20\00\20\01\20\08" "\20\00\28\02\00\28\02\30\11\03\00\20\08\46\0d\00\41\00\21" "\00\0c\01\0b\02\40\02\40\20\07\20\03\20\01\6b\22\01\6b\41" "\00\20\07\20\01\4a\1b\22\01\41\01\4e\0d\00\20\00\21\00\0c" "\01\0b\20\01\41\f0\ff\ff\ff\07\4f\0d\02\02\40\02\40\20\01" "\41\0a\4b\0d\00\20\06\20\01\3a\00\0f\20\06\41\04\6a\21\07" "\0c\01\0b\20\01\41\0f\72\41\01\6a\22\08\10\8a\0d\21\07\20" "\06\20\08\41\80\80\80\80\78\72\36\02\0c\20\06\20\07\36\02" "\04\20\06\20\01\36\02\08\20\07\21\07\0b\20\07\20\05\20\01" "\10\15\20\01\6a\41\00\3a\00\00\20\00\20\06\28\02\04\20\06" "\41\04\6a\20\06\2c\00\0f\41\00\48\1b\20\01\20\00\28\02\00" "\28\02\30\11\03\00\21\07\02\40\20\06\2c\00\0f\41\7f\4a\0d" "\00\20\06\28\02\04\10\8b\0d\0b\02\40\20\07\20\01\46\0d\00" "\41\00\21\00\0c\02\0b\20\00\41\00\20\07\20\01\46\1b\21\00" "\0b\20\00\21\01\02\40\20\03\20\02\6b\22\03\41\01\48\0d\00" "\41\00\21\00\20\01\20\02\20\03\20\01\28\02\00\28\02\30\11" "\03\00\20\03\47\0d\01\0b\20\04\41\00\36\02\0c\20\01\21\00" "\0b\20\06\41\10\6a\24\00\20\00\0f\0b\20\06\41\04\6a\10\11" "\00\0b\08\00\41\f3\0a\10\12\00\0b\14\00\41\08\10\b8\0d\20" "\00\10\13\41\9c\f5\00\41\02\10\22\00\0b\17\00\20\00\20\01" "\10\95\0d\22\01\41\f4\f4\00\41\08\6a\36\02\00\20\01\0b\11" "\00\02\40\41\03\45\0d\00\10\07\0b\10\0b\10\18\00\0b\f2\02" "\02\03\7f\01\7e\02\40\20\02\45\0d\00\20\00\20\01\3a\00\00" "\20\00\20\02\6a\22\03\41\7f\6a\20\01\3a\00\00\20\02\41\03" "\49\0d\00\20\00\20\01\3a\00\02\20\00\20\01\3a\00\01\20\03" "\41\7d\6a\20\01\3a\00\00\20\03\41\7e\6a\20\01\3a\00\00\20" "\02\41\07\49\0d\00\20\00\20\01\3a\00\03\20\03\41\7c\6a\20" "\01\3a\00\00\20\02\41\09\49\0d\00\20\00\41\00\20\00\6b\41" "\03\71\22\04\6a\22\03\20\01\41\ff\01\71\41\81\82\84\08\6c" "\22\01\36\02\00\20\03\20\02\20\04\6b\41\7c\71\22\04\6a\22" "\02\41\7c\6a\20\01\36\02\00\20\04\41\09\49\0d\00\20\03\20" "\01\36\02\08\20\03\20\01\36\02\04\20\02\41\78\6a\20\01\36" "\02\00\20\02\41\74\6a\20\01\36\02\00\20\04\41\19\49\0d\00" "\20\03\20\01\36\02\18\20\03\20\01\36\02\14\20\03\20\01\36" "\02\10\20\03\20\01\36\02\0c\20\02\41\70\6a\20\01\36\02\00" "\20\02\41\6c\6a\20\01\36\02\00\20\02\41\68\6a\20\01\36\02" "\00\20\02\41\64\6a\20\01\36\02\00\20\04\20\03\41\04\71\41" "\18\72\22\05\6b\22\02\41\20\49\0d\00\20\01\ad\42\81\80\80" "\80\10\7e\21\06\20\03\20\05\6a\21\01\03\40\20\01\20\06\37" "\03\18\20\01\20\06\37\03\10\20\01\20\06\37\03\08\20\01\20" "\06\37\03\00\20\01\41\20\6a\21\01\20\02\41\60\6a\22\02\41" "\1f\4b\0d\00\0b\0b\20\00\0b\02\00\0b\2b\01\01\7f\41\00\21" "\00\02\40\41\00\41\00\4d\0d\00\03\40\20\00\41\7c\6a\22\00" "\28\02\00\11\07\00\20\00\41\00\4b\0d\00\0b\0b\10\16\0b\0e" "\00\10\e4\02\10\17\10\4d\20\00\10\23\00\0b\07\00\41\01\10" "\23\00\0b\04\00\41\4c\0b\04\00\41\4c\0b\2c\00\02\40\20\01" "\41\c5\0a\10\26\0d\00\41\00\0f\0b\02\40\20\01\41\b0\09\10" "\26\0d\00\41\01\0f\0b\41\41\41\02\20\01\41\cb\09\10\26\1b" "\0b\04\00\41\4c\0b\04\00\41\4c\0b\04\00\41\4c\0b\04\00\41" "\4c\0b\04\00\41\00\0b\05\00\10\19\00\0b\07\00\20\00\10\00" "\00\0b\06\00\41\a0\f9\00\0b\07\00\3f\00\41\10\74\0b\59\01" "\02\7f\20\01\2d\00\00\21\02\02\40\20\00\2d\00\00\22\03\45" "\0d\00\20\03\20\02\41\ff\01\71\47\0d\00\03\40\20\01\2d\00" "\01\21\02\20\00\2d\00\01\22\03\45\0d\01\20\01\41\01\6a\21" "\01\20\00\41\01\6a\21\00\20\03\20\02\41\ff\01\71\46\0d\00" "\0b\0b\20\03\20\02\41\ff\01\71\6b\0b\eb\03\01\03\7f\20\00" "\20\02\6a\21\03\02\40\02\40\02\40\02\40\20\01\20\00\73\41" "\03\71\0d\00\20\00\41\03\71\45\0d\01\20\02\41\01\48\0d\01" "\20\00\21\02\03\40\20\02\20\01\2d\00\00\3a\00\00\20\01\41" "\01\6a\21\01\20\02\41\01\6a\22\02\41\03\71\45\0d\03\20\02" "\20\03\49\0d\00\0c\03\0b\00\0b\02\40\20\03\41\04\49\0d\00" "\20\03\41\7c\6a\22\04\20\00\49\0d\00\20\00\21\02\03\40\20" "\02\20\01\2d\00\00\3a\00\00\20\02\20\01\2d\00\01\3a\00\01" "\20\02\20\01\2d\00\02\3a\00\02\20\02\20\01\2d\00\03\3a\00" "\03\20\01\41\04\6a\21\01\20\02\41\04\6a\22\02\20\04\4d\0d" "\00\0c\04\0b\00\0b\20\00\21\02\0c\02\0b\20\00\21\02\0b\02" "\40\20\03\41\7c\71\22\04\41\c0\00\49\0d\00\20\02\20\04\41" "\40\6a\22\05\4b\0d\00\03\40\20\02\20\01\28\02\00\36\02\00" "\20\02\20\01\28\02\04\36\02\04\20\02\20\01\28\02\08\36\02" "\08\20\02\20\01\28\02\0c\36\02\0c\20\02\20\01\28\02\10\36" "\02\10\20\02\20\01\28\02\14\36\02\14\20\02\20\01\28\02\18" "\36\02\18\20\02\20\01\28\02\1c\36\02\1c\20\02\20\01\28\02" "\20\36\02\20\20\02\20\01\28\02\24\36\02\24\20\02\20\01\28" "\02\28\36\02\28\20\02\20\01\28\02\2c\36\02\2c\20\02\20\01" "\28\02\30\36\02\30\20\02\20\01\28\02\34\36\02\34\20\02\20" "\01\28\02\38\36\02\38\20\02\20\01\28\02\3c\36\02\3c\20\01" "\41\c0\00\6a\21\01\20\02\41\c0\00\6a\22\02\20\05\4d\0d\00" "\0b\0b\20\02\20\04\4f\0d\00\03\40\20\02\20\01\28\02\00\36" "\02\00\20\01\41\04\6a\21\01\20\02\41\04\6a\22\02\20\04\49" "\0d\00\0b\0b\02\40\20\02\20\03\4f\0d\00\03\40\20\02\20\01" "\2d\00\00\3a\00\00\20\01\41\01\6a\21\01\20\02\41\01\6a\22" "\02\20\03\47\0d\00\0b\0b\20\00\0b\85\01\01\03\7f\20\00\21" "\01\02\40\02\40\20\00\41\03\71\45\0d\00\02\40\20\00\2d\00" "\00\0d\00\20\00\20\00\6b\0f\0b\20\00\21\01\03\40\20\01\41" "\01\6a\22\01\41\03\71\45\0d\01\20\01\2d\00\00\0d\00\0c\02" "\0b\00\0b\03\40\20\01\22\02\41\04\6a\21\01\20\02\28\02\00" "\22\03\41\7f\73\20\03\41\ff\fd\fb\77\6a\71\41\80\81\82\84" "\78\71\45\0d\00\0b\03\40\20\02\22\01\41\01\6a\21\02\20\01" "\2d\00\00\0d\00\0b\0b\20\01\20\00\6b\0b\15\00\02\40\20\00" "\0d\00\41\00\0f\0b\10\24\20\00\36\02\00\41\7f\0b\4f\01\02" "\7f\41\00\28\02\c0\75\22\01\20\00\41\07\6a\41\78\71\22\02" "\6a\21\00\02\40\02\40\02\40\20\02\45\0d\00\20\00\20\01\4d" "\0d\01\0b\20\00\10\25\4d\0d\01\20\00\10\21\0d\01\0b\10\24" "\41\30\36\02\00\41\7f\0f\0b\41\00\20\00\36\02\c0\75\20\01" "\0b\90\22\01\0b\7f\23\00\41\10\6b\22\01\24\00\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\20" "\00\41\f4\01\4b\0d\00\02\40\41\00\28\02\a4\79\22\02\41\10" "\20\00\41\0b\6a\41\f8\03\71\20\00\41\0b\49\1b\22\03\41\03" "\76\22\04\76\22\00\41\03\71\45\0d\00\02\40\02\40\20\00\41" "\7f\73\41\01\71\20\04\6a\22\03\41\03\74\22\04\41\cc\f9\00" "\6a\22\00\20\04\41\d4\f9\00\6a\28\02\00\22\04\28\02\08\22" "\05\47\0d\00\41\00\20\02\41\7e\20\03\77\71\36\02\a4\79\0c" "\01\0b\20\05\20\00\36\02\0c\20\00\20\05\36\02\08\0b\20\04" "\41\08\6a\21\00\20\04\20\03\41\03\74\22\03\41\03\72\36\02" "\04\20\04\20\03\6a\22\04\20\04\28\02\04\41\01\72\36\02\04" "\0c\0b\0b\20\03\41\00\28\02\ac\79\22\06\4d\0d\01\02\40\20" "\00\45\0d\00\02\40\02\40\20\00\20\04\74\41\02\20\04\74\22" "\00\41\00\20\00\6b\72\71\68\22\04\41\03\74\22\00\41\cc\f9" "\00\6a\22\05\20\00\41\d4\f9\00\6a\28\02\00\22\00\28\02\08" "\22\07\47\0d\00\41\00\20\02\41\7e\20\04\77\71\22\02\36\02" "\a4\79\0c\01\0b\20\07\20\05\36\02\0c\20\05\20\07\36\02\08" "\0b\20\00\20\03\41\03\72\36\02\04\20\00\20\03\6a\22\07\20" "\04\41\03\74\22\04\20\03\6b\22\03\41\01\72\36\02\04\20\00" "\20\04\6a\20\03\36\02\00\02\40\20\06\45\0d\00\20\06\41\78" "\71\41\cc\f9\00\6a\21\05\41\00\28\02\b8\79\21\04\02\40\02" "\40\20\02\41\01\20\06\41\03\76\74\22\08\71\0d\00\41\00\20" "\02\20\08\72\36\02\a4\79\20\05\21\08\0c\01\0b\20\05\28\02" "\08\21\08\0b\20\05\20\04\36\02\08\20\08\20\04\36\02\0c\20" "\04\20\05\36\02\0c\20\04\20\08\36\02\08\0b\20\00\41\08\6a" "\21\00\41\00\20\07\36\02\b8\79\41\00\20\03\36\02\ac\79\0c" "\0b\0b\41\00\28\02\a8\79\22\09\45\0d\01\20\09\68\41\02\74" "\41\d4\fb\00\6a\28\02\00\22\07\28\02\04\41\78\71\20\03\6b" "\21\04\20\07\21\05\02\40\03\40\02\40\20\05\28\02\10\22\00" "\0d\00\20\05\28\02\14\22\00\45\0d\02\0b\20\00\28\02\04\41" "\78\71\20\03\6b\22\05\20\04\20\05\20\04\49\22\05\1b\21\04" "\20\00\20\07\20\05\1b\21\07\20\00\21\05\0c\00\0b\00\0b\20" "\07\28\02\18\21\0a\02\40\20\07\28\02\0c\22\00\20\07\46\0d" "\00\20\07\28\02\08\22\05\41\00\28\02\b4\79\49\1a\20\05\20" "\00\36\02\0c\20\00\20\05\36\02\08\0c\0a\0b\02\40\02\40\20" "\07\28\02\14\22\05\45\0d\00\20\07\41\14\6a\21\08\0c\01\0b" "\20\07\28\02\10\22\05\45\0d\03\20\07\41\10\6a\21\08\0b\03" "\40\20\08\21\0b\20\05\22\00\41\14\6a\21\08\20\00\28\02\14" "\22\05\0d\00\20\00\41\10\6a\21\08\20\00\28\02\10\22\05\0d" "\00\0b\20\0b\41\00\36\02\00\0c\09\0b\41\7f\21\03\20\00\41" "\bf\7f\4b\0d\00\20\00\41\0b\6a\22\00\41\78\71\21\03\41\00" "\28\02\a8\79\22\0a\45\0d\00\41\00\21\06\02\40\20\03\41\80" "\02\49\0d\00\41\1f\21\06\20\03\41\ff\ff\ff\07\4b\0d\00\20" "\03\41\26\20\00\41\08\76\67\22\00\6b\76\41\01\71\20\00\41" "\01\74\6b\41\3e\6a\21\06\0b\41\00\20\03\6b\21\04\02\40\02" "\40\02\40\02\40\20\06\41\02\74\41\d4\fb\00\6a\28\02\00\22" "\05\0d\00\41\00\21\00\41\00\21\08\0c\01\0b\41\00\21\00\20" "\03\41\00\41\19\20\06\41\01\76\6b\20\06\41\1f\46\1b\74\21" "\07\41\00\21\08\03\40\02\40\20\05\28\02\04\41\78\71\20\03" "\6b\22\02\20\04\4f\0d\00\20\02\21\04\20\05\21\08\20\02\0d" "\00\41\00\21\04\20\05\21\08\20\05\21\00\0c\03\0b\20\00\20" "\05\28\02\14\22\02\20\02\20\05\20\07\41\1d\76\41\04\71\6a" "\41\10\6a\28\02\00\22\0b\46\1b\20\00\20\02\1b\21\00\20\07" "\41\01\74\21\07\20\0b\21\05\20\0b\0d\00\0b\0b\02\40\20\00" "\20\08\72\0d\00\41\00\21\08\41\02\20\06\74\22\00\41\00\20" "\00\6b\72\20\0a\71\22\00\45\0d\03\20\00\68\41\02\74\41\d4" "\fb\00\6a\28\02\00\21\00\0b\20\00\45\0d\01\0b\03\40\20\00" "\28\02\04\41\78\71\20\03\6b\22\02\20\04\49\21\07\02\40\20" "\00\28\02\10\22\05\0d\00\20\00\28\02\14\21\05\0b\20\02\20" "\04\20\07\1b\21\04\20\00\20\08\20\07\1b\21\08\20\05\21\00" "\20\05\0d\00\0b\0b\20\08\45\0d\00\20\04\41\00\28\02\ac\79" "\20\03\6b\4f\0d\00\20\08\28\02\18\21\0b\02\40\20\08\28\02" "\0c\22\00\20\08\46\0d\00\20\08\28\02\08\22\05\41\00\28\02" "\b4\79\49\1a\20\05\20\00\36\02\0c\20\00\20\05\36\02\08\0c" "\08\0b\02\40\02\40\20\08\28\02\14\22\05\45\0d\00\20\08\41" "\14\6a\21\07\0c\01\0b\20\08\28\02\10\22\05\45\0d\03\20\08" "\41\10\6a\21\07\0b\03\40\20\07\21\02\20\05\22\00\41\14\6a" "\21\07\20\00\28\02\14\22\05\0d\00\20\00\41\10\6a\21\07\20" "\00\28\02\10\22\05\0d\00\0b\20\02\41\00\36\02\00\0c\07\0b" "\02\40\41\00\28\02\ac\79\22\00\20\03\49\0d\00\41\00\28\02" "\b8\79\21\04\02\40\02\40\20\00\20\03\6b\22\05\41\10\49\0d" "\00\20\04\20\03\6a\22\07\20\05\41\01\72\36\02\04\20\04\20" "\00\6a\20\05\36\02\00\20\04\20\03\41\03\72\36\02\04\0c\01" "\0b\20\04\20\00\41\03\72\36\02\04\20\04\20\00\6a\22\00\20" "\00\28\02\04\41\01\72\36\02\04\41\00\21\07\41\00\21\05\0b" "\41\00\20\05\36\02\ac\79\41\00\20\07\36\02\b8\79\20\04\41" "\08\6a\21\00\0c\09\0b\02\40\41\00\28\02\b0\79\22\07\20\03" "\4d\0d\00\41\00\20\07\20\03\6b\22\04\36\02\b0\79\41\00\41" "\00\28\02\bc\79\22\00\20\03\6a\22\05\36\02\bc\79\20\05\20" "\04\41\01\72\36\02\04\20\00\20\03\41\03\72\36\02\04\20\00" "\41\08\6a\21\00\0c\09\0b\02\40\02\40\41\00\28\02\fc\7c\45" "\0d\00\41\00\28\02\84\7d\21\04\0c\01\0b\41\00\42\7f\37\02" "\88\7d\41\00\42\80\a0\80\80\80\80\04\37\02\80\7d\41\00\20" "\01\41\0c\6a\41\70\71\41\d8\aa\d5\aa\05\73\36\02\fc\7c\41" "\00\41\00\36\02\90\7d\41\00\41\00\36\02\e0\7c\41\80\20\21" "\04\0b\41\00\21\00\20\04\20\03\41\2f\6a\22\06\6a\22\02\41" "\00\20\04\6b\22\0b\71\22\08\20\03\4d\0d\08\41\00\21\00\02" "\40\41\00\28\02\dc\7c\22\04\45\0d\00\41\00\28\02\d4\7c\22" "\05\20\08\6a\22\0a\20\05\4d\0d\09\20\0a\20\04\4b\0d\09\0b" "\02\40\02\40\41\00\2d\00\e0\7c\41\04\71\0d\00\02\40\02\40" "\02\40\02\40\02\40\41\00\28\02\bc\79\22\04\45\0d\00\41\e4" "\fc\00\21\00\03\40\02\40\20\00\28\02\00\22\05\20\04\4b\0d" "\00\20\05\20\00\28\02\04\6a\20\04\4b\0d\03\0b\20\00\28\02" "\08\22\00\0d\00\0b\0b\41\00\10\2a\22\07\41\7f\46\0d\03\20" "\08\21\02\02\40\41\00\28\02\80\7d\22\00\41\7f\6a\22\04\20" "\07\71\45\0d\00\20\08\20\07\6b\20\04\20\07\6a\41\00\20\00" "\6b\71\6a\21\02\0b\20\02\20\03\4d\0d\03\02\40\41\00\28\02" "\dc\7c\22\00\45\0d\00\41\00\28\02\d4\7c\22\04\20\02\6a\22" "\05\20\04\4d\0d\04\20\05\20\00\4b\0d\04\0b\20\02\10\2a\22" "\00\20\07\47\0d\01\0c\05\0b\20\02\20\07\6b\20\0b\71\22\02" "\10\2a\22\07\20\00\28\02\00\20\00\28\02\04\6a\46\0d\01\20" "\07\21\00\0b\20\00\41\7f\46\0d\01\02\40\20\02\20\03\41\30" "\6a\49\0d\00\20\00\21\07\0c\04\0b\20\06\20\02\6b\41\00\28" "\02\84\7d\22\04\6a\41\00\20\04\6b\71\22\04\10\2a\41\7f\46" "\0d\01\20\04\20\02\6a\21\02\20\00\21\07\0c\03\0b\20\07\41" "\7f\47\0d\02\0b\41\00\41\00\28\02\e0\7c\41\04\72\36\02\e0" "\7c\0b\20\08\10\2a\21\07\41\00\10\2a\21\00\20\07\41\7f\46" "\0d\05\20\00\41\7f\46\0d\05\20\07\20\00\4f\0d\05\20\00\20" "\07\6b\22\02\20\03\41\28\6a\4d\0d\05\0b\41\00\41\00\28\02" "\d4\7c\20\02\6a\22\00\36\02\d4\7c\02\40\20\00\41\00\28\02" "\d8\7c\4d\0d\00\41\00\20\00\36\02\d8\7c\0b\02\40\02\40\41" "\00\28\02\bc\79\22\04\45\0d\00\41\e4\fc\00\21\00\03\40\20" "\07\20\00\28\02\00\22\05\20\00\28\02\04\22\08\6a\46\0d\02" "\20\00\28\02\08\22\00\0d\00\0c\05\0b\00\0b\02\40\02\40\41" "\00\28\02\b4\79\22\00\45\0d\00\20\07\20\00\4f\0d\01\0b\41" "\00\20\07\36\02\b4\79\0b\41\00\21\00\41\00\20\02\36\02\e8" "\7c\41\00\20\07\36\02\e4\7c\41\00\41\7f\36\02\c4\79\41\00" "\41\00\28\02\fc\7c\36\02\c8\79\41\00\41\00\36\02\f0\7c\03" "\40\20\00\41\03\74\22\04\41\d4\f9\00\6a\20\04\41\cc\f9\00" "\6a\22\05\36\02\00\20\04\41\d8\f9\00\6a\20\05\36\02\00\20" "\00\41\01\6a\22\00\41\20\47\0d\00\0b\41\00\20\02\41\58\6a" "\22\00\41\78\20\07\6b\41\07\71\22\04\6b\22\05\36\02\b0\79" "\41\00\20\07\20\04\6a\22\04\36\02\bc\79\20\04\20\05\41\01" "\72\36\02\04\20\07\20\00\6a\41\28\36\02\04\41\00\41\00\28" "\02\8c\7d\36\02\c0\79\0c\04\0b\20\04\20\07\4f\0d\02\20\04" "\20\05\49\0d\02\20\00\28\02\0c\41\08\71\0d\02\20\00\20\08" "\20\02\6a\36\02\04\41\00\20\04\41\78\20\04\6b\41\07\71\22" "\00\6a\22\05\36\02\bc\79\41\00\41\00\28\02\b0\79\20\02\6a" "\22\07\20\00\6b\22\00\36\02\b0\79\20\05\20\00\41\01\72\36" "\02\04\20\04\20\07\6a\41\28\36\02\04\41\00\41\00\28\02\8c" "\7d\36\02\c0\79\0c\03\0b\41\00\21\00\0c\06\0b\41\00\21\00" "\0c\04\0b\02\40\20\07\41\00\28\02\b4\79\4f\0d\00\41\00\20" "\07\36\02\b4\79\0b\20\07\20\02\6a\21\05\41\e4\fc\00\21\00" "\02\40\02\40\03\40\20\00\28\02\00\20\05\46\0d\01\20\00\28" "\02\08\22\00\0d\00\0c\02\0b\00\0b\20\00\2d\00\0c\41\08\71" "\45\0d\03\0b\41\e4\fc\00\21\00\02\40\03\40\02\40\20\00\28" "\02\00\22\05\20\04\4b\0d\00\20\05\20\00\28\02\04\6a\22\05" "\20\04\4b\0d\02\0b\20\00\28\02\08\21\00\0c\00\0b\00\0b\41" "\00\20\02\41\58\6a\22\00\41\78\20\07\6b\41\07\71\22\08\6b" "\22\0b\36\02\b0\79\41\00\20\07\20\08\6a\22\08\36\02\bc\79" "\20\08\20\0b\41\01\72\36\02\04\20\07\20\00\6a\41\28\36\02" "\04\41\00\41\00\28\02\8c\7d\36\02\c0\79\20\04\20\05\41\27" "\20\05\6b\41\07\71\6a\41\51\6a\22\00\20\00\20\04\41\10\6a" "\49\1b\22\08\41\1b\36\02\04\20\08\41\10\6a\41\00\29\02\ec" "\7c\37\02\00\20\08\41\00\29\02\e4\7c\37\02\08\41\00\20\08" "\41\08\6a\36\02\ec\7c\41\00\20\02\36\02\e8\7c\41\00\20\07" "\36\02\e4\7c\41\00\41\00\36\02\f0\7c\20\08\41\18\6a\21\00" "\03\40\20\00\41\07\36\02\04\20\00\41\08\6a\21\07\20\00\41" "\04\6a\21\00\20\07\20\05\49\0d\00\0b\20\08\20\04\46\0d\00" "\20\08\20\08\28\02\04\41\7e\71\36\02\04\20\04\20\08\20\04" "\6b\22\07\41\01\72\36\02\04\20\08\20\07\36\02\00\02\40\02" "\40\20\07\41\ff\01\4b\0d\00\20\07\41\78\71\41\cc\f9\00\6a" "\21\00\02\40\02\40\41\00\28\02\a4\79\22\05\41\01\20\07\41" "\03\76\74\22\07\71\0d\00\41\00\20\05\20\07\72\36\02\a4\79" "\20\00\21\05\0c\01\0b\20\00\28\02\08\21\05\0b\20\00\20\04" "\36\02\08\20\05\20\04\36\02\0c\41\0c\21\07\41\08\21\08\0c" "\01\0b\41\1f\21\00\02\40\20\07\41\ff\ff\ff\07\4b\0d\00\20" "\07\41\26\20\07\41\08\76\67\22\00\6b\76\41\01\71\20\00\41" "\01\74\6b\41\3e\6a\21\00\0b\20\04\20\00\36\02\1c\20\04\42" "\00\37\02\10\20\00\41\02\74\41\d4\fb\00\6a\21\05\02\40\02" "\40\02\40\41\00\28\02\a8\79\22\08\41\01\20\00\74\22\02\71" "\0d\00\41\00\20\08\20\02\72\36\02\a8\79\20\05\20\04\36\02" "\00\20\04\20\05\36\02\18\0c\01\0b\20\07\41\00\41\19\20\00" "\41\01\76\6b\20\00\41\1f\46\1b\74\21\00\20\05\28\02\00\21" "\08\03\40\20\08\22\05\28\02\04\41\78\71\20\07\46\0d\02\20" "\00\41\1d\76\21\08\20\00\41\01\74\21\00\20\05\20\08\41\04" "\71\6a\41\10\6a\22\02\28\02\00\22\08\0d\00\0b\20\02\20\04" "\36\02\00\20\04\20\05\36\02\18\0b\41\08\21\07\41\0c\21\08" "\20\04\21\05\20\04\21\00\0c\01\0b\20\05\28\02\08\22\00\20" "\04\36\02\0c\20\05\20\04\36\02\08\20\04\20\00\36\02\08\41" "\00\21\00\41\18\21\07\41\0c\21\08\0b\20\04\20\08\6a\20\05" "\36\02\00\20\04\20\07\6a\20\00\36\02\00\0b\41\00\28\02\b0" "\79\22\00\20\03\4d\0d\00\41\00\20\00\20\03\6b\22\04\36\02" "\b0\79\41\00\41\00\28\02\bc\79\22\00\20\03\6a\22\05\36\02" "\bc\79\20\05\20\04\41\01\72\36\02\04\20\00\20\03\41\03\72" "\36\02\04\20\00\41\08\6a\21\00\0c\04\0b\10\24\41\30\36\02" "\00\41\00\21\00\0c\03\0b\20\00\20\07\36\02\00\20\00\20\00" "\28\02\04\20\02\6a\36\02\04\20\07\20\05\20\03\10\2c\21\00" "\0c\02\0b\02\40\20\0b\45\0d\00\02\40\02\40\20\08\20\08\28" "\02\1c\22\07\41\02\74\41\d4\fb\00\6a\22\05\28\02\00\47\0d" "\00\20\05\20\00\36\02\00\20\00\0d\01\41\00\20\0a\41\7e\20" "\07\77\71\22\0a\36\02\a8\79\0c\02\0b\20\0b\41\10\41\14\20" "\0b\28\02\10\20\08\46\1b\6a\20\00\36\02\00\20\00\45\0d\01" "\0b\20\00\20\0b\36\02\18\02\40\20\08\28\02\10\22\05\45\0d" "\00\20\00\20\05\36\02\10\20\05\20\00\36\02\18\0b\20\08\28" "\02\14\22\05\45\0d\00\20\00\20\05\36\02\14\20\05\20\00\36" "\02\18\0b\02\40\02\40\20\04\41\0f\4b\0d\00\20\08\20\04\20" "\03\6a\22\00\41\03\72\36\02\04\20\08\20\00\6a\22\00\20\00" "\28\02\04\41\01\72\36\02\04\0c\01\0b\20\08\20\03\41\03\72" "\36\02\04\20\08\20\03\6a\22\07\20\04\41\01\72\36\02\04\20" "\07\20\04\6a\20\04\36\02\00\02\40\20\04\41\ff\01\4b\0d\00" "\20\04\41\78\71\41\cc\f9\00\6a\21\00\02\40\02\40\41\00\28" "\02\a4\79\22\03\41\01\20\04\41\03\76\74\22\04\71\0d\00\41" "\00\20\03\20\04\72\36\02\a4\79\20\00\21\04\0c\01\0b\20\00" "\28\02\08\21\04\0b\20\00\20\07\36\02\08\20\04\20\07\36\02" "\0c\20\07\20\00\36\02\0c\20\07\20\04\36\02\08\0c\01\0b\41" "\1f\21\00\02\40\20\04\41\ff\ff\ff\07\4b\0d\00\20\04\41\26" "\20\04\41\08\76\67\22\00\6b\76\41\01\71\20\00\41\01\74\6b" "\41\3e\6a\21\00\0b\20\07\20\00\36\02\1c\20\07\42\00\37\02" "\10\20\00\41\02\74\41\d4\fb\00\6a\21\03\02\40\02\40\02\40" "\20\0a\41\01\20\00\74\22\05\71\0d\00\41\00\20\0a\20\05\72" "\36\02\a8\79\20\03\20\07\36\02\00\20\07\20\03\36\02\18\0c" "\01\0b\20\04\41\00\41\19\20\00\41\01\76\6b\20\00\41\1f\46" "\1b\74\21\00\20\03\28\02\00\21\05\03\40\20\05\22\03\28\02" "\04\41\78\71\20\04\46\0d\02\20\00\41\1d\76\21\05\20\00\41" "\01\74\21\00\20\03\20\05\41\04\71\6a\41\10\6a\22\02\28\02" "\00\22\05\0d\00\0b\20\02\20\07\36\02\00\20\07\20\03\36\02" "\18\0b\20\07\20\07\36\02\0c\20\07\20\07\36\02\08\0c\01\0b" "\20\03\28\02\08\22\00\20\07\36\02\0c\20\03\20\07\36\02\08" "\20\07\41\00\36\02\18\20\07\20\03\36\02\0c\20\07\20\00\36" "\02\08\0b\20\08\41\08\6a\21\00\0c\01\0b\02\40\20\0a\45\0d" "\00\02\40\02\40\20\07\20\07\28\02\1c\22\08\41\02\74\41\d4" "\fb\00\6a\22\05\28\02\00\47\0d\00\20\05\20\00\36\02\00\20" "\00\0d\01\41\00\20\09\41\7e\20\08\77\71\36\02\a8\79\0c\02" "\0b\20\0a\41\10\41\14\20\0a\28\02\10\20\07\46\1b\6a\20\00" "\36\02\00\20\00\45\0d\01\0b\20\00\20\0a\36\02\18\02\40\20" "\07\28\02\10\22\05\45\0d\00\20\00\20\05\36\02\10\20\05\20" "\00\36\02\18\0b\20\07\28\02\14\22\05\45\0d\00\20\00\20\05" "\36\02\14\20\05\20\00\36\02\18\0b\02\40\02\40\20\04\41\0f" "\4b\0d\00\20\07\20\04\20\03\6a\22\00\41\03\72\36\02\04\20" "\07\20\00\6a\22\00\20\00\28\02\04\41\01\72\36\02\04\0c\01" "\0b\20\07\20\03\41\03\72\36\02\04\20\07\20\03\6a\22\03\20" "\04\41\01\72\36\02\04\20\03\20\04\6a\20\04\36\02\00\02\40" "\20\06\45\0d\00\20\06\41\78\71\41\cc\f9\00\6a\21\05\41\00" "\28\02\b8\79\21\00\02\40\02\40\41\01\20\06\41\03\76\74\22" "\08\20\02\71\0d\00\41\00\20\08\20\02\72\36\02\a4\79\20\05" "\21\08\0c\01\0b\20\05\28\02\08\21\08\0b\20\05\20\00\36\02" "\08\20\08\20\00\36\02\0c\20\00\20\05\36\02\0c\20\00\20\08" "\36\02\08\0b\41\00\20\03\36\02\b8\79\41\00\20\04\36\02\ac" "\79\0b\20\07\41\08\6a\21\00\0b\20\01\41\10\6a\24\00\20\00" "\0b\fd\07\01\07\7f\20\00\41\78\20\00\6b\41\07\71\6a\22\03" "\20\02\41\03\72\36\02\04\20\01\41\78\20\01\6b\41\07\71\6a" "\22\04\20\03\20\02\6a\22\05\6b\21\00\02\40\02\40\20\04\41" "\00\28\02\bc\79\47\0d\00\41\00\20\05\36\02\bc\79\41\00\41" "\00\28\02\b0\79\20\00\6a\22\02\36\02\b0\79\20\05\20\02\41" "\01\72\36\02\04\0c\01\0b\02\40\20\04\41\00\28\02\b8\79\47" "\0d\00\41\00\20\05\36\02\b8\79\41\00\41\00\28\02\ac\79\20" "\00\6a\22\02\36\02\ac\79\20\05\20\02\41\01\72\36\02\04\20" "\05\20\02\6a\20\02\36\02\00\0c\01\0b\02\40\20\04\28\02\04" "\22\01\41\03\71\41\01\47\0d\00\20\01\41\78\71\21\06\20\04" "\28\02\0c\21\02\02\40\02\40\20\01\41\ff\01\4b\0d\00\20\04" "\28\02\08\22\07\20\01\41\03\76\22\08\41\03\74\41\cc\f9\00" "\6a\22\01\46\1a\02\40\20\02\20\07\47\0d\00\41\00\41\00\28" "\02\a4\79\41\7e\20\08\77\71\36\02\a4\79\0c\02\0b\20\02\20" "\01\46\1a\20\07\20\02\36\02\0c\20\02\20\07\36\02\08\0c\01" "\0b\20\04\28\02\18\21\09\02\40\02\40\20\02\20\04\46\0d\00" "\20\04\28\02\08\22\01\41\00\28\02\b4\79\49\1a\20\01\20\02" "\36\02\0c\20\02\20\01\36\02\08\0c\01\0b\02\40\02\40\02\40" "\20\04\28\02\14\22\01\45\0d\00\20\04\41\14\6a\21\07\0c\01" "\0b\20\04\28\02\10\22\01\45\0d\01\20\04\41\10\6a\21\07\0b" "\03\40\20\07\21\08\20\01\22\02\41\14\6a\21\07\20\02\28\02" "\14\22\01\0d\00\20\02\41\10\6a\21\07\20\02\28\02\10\22\01" "\0d\00\0b\20\08\41\00\36\02\00\0c\01\0b\41\00\21\02\0b\20" "\09\45\0d\00\02\40\02\40\20\04\20\04\28\02\1c\22\07\41\02" "\74\41\d4\fb\00\6a\22\01\28\02\00\47\0d\00\20\01\20\02\36" "\02\00\20\02\0d\01\41\00\41\00\28\02\a8\79\41\7e\20\07\77" "\71\36\02\a8\79\0c\02\0b\20\09\41\10\41\14\20\09\28\02\10" "\20\04\46\1b\6a\20\02\36\02\00\20\02\45\0d\01\0b\20\02\20" "\09\36\02\18\02\40\20\04\28\02\10\22\01\45\0d\00\20\02\20" "\01\36\02\10\20\01\20\02\36\02\18\0b\20\04\28\02\14\22\01" "\45\0d\00\20\02\20\01\36\02\14\20\01\20\02\36\02\18\0b\20" "\06\20\00\6a\21\00\20\04\20\06\6a\22\04\28\02\04\21\01\0b" "\20\04\20\01\41\7e\71\36\02\04\20\05\20\00\41\01\72\36\02" "\04\20\05\20\00\6a\20\00\36\02\00\02\40\20\00\41\ff\01\4b" "\0d\00\20\00\41\78\71\41\cc\f9\00\6a\21\02\02\40\02\40\41" "\00\28\02\a4\79\22\01\41\01\20\00\41\03\76\74\22\00\71\0d" "\00\41\00\20\01\20\00\72\36\02\a4\79\20\02\21\00\0c\01\0b" "\20\02\28\02\08\21\00\0b\20\02\20\05\36\02\08\20\00\20\05" "\36\02\0c\20\05\20\02\36\02\0c\20\05\20\00\36\02\08\0c\01" "\0b\41\1f\21\02\02\40\20\00\41\ff\ff\ff\07\4b\0d\00\20\00" "\41\26\20\00\41\08\76\67\22\02\6b\76\41\01\71\20\02\41\01" "\74\6b\41\3e\6a\21\02\0b\20\05\20\02\36\02\1c\20\05\42\00" "\37\02\10\20\02\41\02\74\41\d4\fb\00\6a\21\01\02\40\02\40" "\02\40\41\00\28\02\a8\79\22\07\41\01\20\02\74\22\04\71\0d" "\00\41\00\20\07\20\04\72\36\02\a8\79\20\01\20\05\36\02\00" "\20\05\20\01\36\02\18\0c\01\0b\20\00\41\00\41\19\20\02\41" "\01\76\6b\20\02\41\1f\46\1b\74\21\02\20\01\28\02\00\21\07" "\03\40\20\07\22\01\28\02\04\41\78\71\20\00\46\0d\02\20\02" "\41\1d\76\21\07\20\02\41\01\74\21\02\20\01\20\07\41\04\71" "\6a\41\10\6a\22\04\28\02\00\22\07\0d\00\0b\20\04\20\05\36" "\02\00\20\05\20\01\36\02\18\0b\20\05\20\05\36\02\0c\20\05" "\20\05\36\02\08\0c\01\0b\20\01\28\02\08\22\02\20\05\36\02" "\0c\20\01\20\05\36\02\08\20\05\41\00\36\02\18\20\05\20\01" "\36\02\0c\20\05\20\02\36\02\08\0b\20\03\41\08\6a\0b\cd\0c" "\01\07\7f\02\40\20\00\45\0d\00\20\00\41\78\6a\22\01\20\00" "\41\7c\6a\28\02\00\22\02\41\78\71\22\00\6a\21\03\02\40\20" "\02\41\01\71\0d\00\20\02\41\02\71\45\0d\01\20\01\20\01\28" "\02\00\22\04\6b\22\01\41\00\28\02\b4\79\22\05\49\0d\01\20" "\04\20\00\6a\21\00\02\40\02\40\02\40\20\01\41\00\28\02\b8" "\79\46\0d\00\20\01\28\02\0c\21\02\02\40\20\04\41\ff\01\4b" "\0d\00\20\01\28\02\08\22\05\20\04\41\03\76\22\06\41\03\74" "\41\cc\f9\00\6a\22\04\46\1a\02\40\20\02\20\05\47\0d\00\41" "\00\41\00\28\02\a4\79\41\7e\20\06\77\71\36\02\a4\79\0c\05" "\0b\20\02\20\04\46\1a\20\05\20\02\36\02\0c\20\02\20\05\36" "\02\08\0c\04\0b\20\01\28\02\18\21\07\02\40\20\02\20\01\46" "\0d\00\20\01\28\02\08\22\04\20\05\49\1a\20\04\20\02\36\02" "\0c\20\02\20\04\36\02\08\0c\03\0b\02\40\02\40\20\01\28\02" "\14\22\04\45\0d\00\20\01\41\14\6a\21\05\0c\01\0b\20\01\28" "\02\10\22\04\45\0d\02\20\01\41\10\6a\21\05\0b\03\40\20\05" "\21\06\20\04\22\02\41\14\6a\21\05\20\02\28\02\14\22\04\0d" "\00\20\02\41\10\6a\21\05\20\02\28\02\10\22\04\0d\00\0b\20" "\06\41\00\36\02\00\0c\02\0b\20\03\28\02\04\22\02\41\03\71" "\41\03\47\0d\02\41\00\20\00\36\02\ac\79\20\03\20\02\41\7e" "\71\36\02\04\20\01\20\00\41\01\72\36\02\04\20\03\20\00\36" "\02\00\0f\0b\41\00\21\02\0b\20\07\45\0d\00\02\40\02\40\20" "\01\20\01\28\02\1c\22\05\41\02\74\41\d4\fb\00\6a\22\04\28" "\02\00\47\0d\00\20\04\20\02\36\02\00\20\02\0d\01\41\00\41" "\00\28\02\a8\79\41\7e\20\05\77\71\36\02\a8\79\0c\02\0b\20" "\07\41\10\41\14\20\07\28\02\10\20\01\46\1b\6a\20\02\36\02" "\00\20\02\45\0d\01\0b\20\02\20\07\36\02\18\02\40\20\01\28" "\02\10\22\04\45\0d\00\20\02\20\04\36\02\10\20\04\20\02\36" "\02\18\0b\20\01\28\02\14\22\04\45\0d\00\20\02\20\04\36\02" "\14\20\04\20\02\36\02\18\0b\20\01\20\03\4f\0d\00\20\03\28" "\02\04\22\04\41\01\71\45\0d\00\02\40\02\40\02\40\02\40\02" "\40\20\04\41\02\71\0d\00\02\40\20\03\41\00\28\02\bc\79\47" "\0d\00\41\00\20\01\36\02\bc\79\41\00\41\00\28\02\b0\79\20" "\00\6a\22\00\36\02\b0\79\20\01\20\00\41\01\72\36\02\04\20" "\01\41\00\28\02\b8\79\47\0d\06\41\00\41\00\36\02\ac\79\41" "\00\41\00\36\02\b8\79\0f\0b\02\40\20\03\41\00\28\02\b8\79" "\47\0d\00\41\00\20\01\36\02\b8\79\41\00\41\00\28\02\ac\79" "\20\00\6a\22\00\36\02\ac\79\20\01\20\00\41\01\72\36\02\04" "\20\01\20\00\6a\20\00\36\02\00\0f\0b\20\04\41\78\71\20\00" "\6a\21\00\20\03\28\02\0c\21\02\02\40\20\04\41\ff\01\4b\0d" "\00\20\03\28\02\08\22\05\20\04\41\03\76\22\03\41\03\74\41" "\cc\f9\00\6a\22\04\46\1a\02\40\20\02\20\05\47\0d\00\41\00" "\41\00\28\02\a4\79\41\7e\20\03\77\71\36\02\a4\79\0c\05\0b" "\20\02\20\04\46\1a\20\05\20\02\36\02\0c\20\02\20\05\36\02" "\08\0c\04\0b\20\03\28\02\18\21\07\02\40\20\02\20\03\46\0d" "\00\20\03\28\02\08\22\04\41\00\28\02\b4\79\49\1a\20\04\20" "\02\36\02\0c\20\02\20\04\36\02\08\0c\03\0b\02\40\02\40\20" "\03\28\02\14\22\04\45\0d\00\20\03\41\14\6a\21\05\0c\01\0b" "\20\03\28\02\10\22\04\45\0d\02\20\03\41\10\6a\21\05\0b\03" "\40\20\05\21\06\20\04\22\02\41\14\6a\21\05\20\02\28\02\14" "\22\04\0d\00\20\02\41\10\6a\21\05\20\02\28\02\10\22\04\0d" "\00\0b\20\06\41\00\36\02\00\0c\02\0b\20\03\20\04\41\7e\71" "\36\02\04\20\01\20\00\41\01\72\36\02\04\20\01\20\00\6a\20" "\00\36\02\00\0c\03\0b\41\00\21\02\0b\20\07\45\0d\00\02\40" "\02\40\20\03\20\03\28\02\1c\22\05\41\02\74\41\d4\fb\00\6a" "\22\04\28\02\00\47\0d\00\20\04\20\02\36\02\00\20\02\0d\01" "\41\00\41\00\28\02\a8\79\41\7e\20\05\77\71\36\02\a8\79\0c" "\02\0b\20\07\41\10\41\14\20\07\28\02\10\20\03\46\1b\6a\20" "\02\36\02\00\20\02\45\0d\01\0b\20\02\20\07\36\02\18\02\40" "\20\03\28\02\10\22\04\45\0d\00\20\02\20\04\36\02\10\20\04" "\20\02\36\02\18\0b\20\03\28\02\14\22\04\45\0d\00\20\02\20" "\04\36\02\14\20\04\20\02\36\02\18\0b\20\01\20\00\41\01\72" "\36\02\04\20\01\20\00\6a\20\00\36\02\00\20\01\41\00\28\02" "\b8\79\47\0d\00\41\00\20\00\36\02\ac\79\0f\0b\02\40\20\00" "\41\ff\01\4b\0d\00\20\00\41\78\71\41\cc\f9\00\6a\21\02\02" "\40\02\40\41\00\28\02\a4\79\22\04\41\01\20\00\41\03\76\74" "\22\00\71\0d\00\41\00\20\04\20\00\72\36\02\a4\79\20\02\21" "\00\0c\01\0b\20\02\28\02\08\21\00\0b\20\02\20\01\36\02\08" "\20\00\20\01\36\02\0c\20\01\20\02\36\02\0c\20\01\20\00\36" "\02\08\0f\0b\41\1f\21\02\02\40\20\00\41\ff\ff\ff\07\4b\0d" "\00\20\00\41\26\20\00\41\08\76\67\22\02\6b\76\41\01\71\20" "\02\41\01\74\6b\41\3e\6a\21\02\0b\20\01\20\02\36\02\1c\20" "\01\42\00\37\02\10\20\02\41\02\74\41\d4\fb\00\6a\21\03\02" "\40\02\40\02\40\02\40\41\00\28\02\a8\79\22\04\41\01\20\02" "\74\22\05\71\0d\00\41\00\20\04\20\05\72\36\02\a8\79\41\08" "\21\00\41\18\21\02\20\03\21\05\0c\01\0b\20\00\41\00\41\19" "\20\02\41\01\76\6b\20\02\41\1f\46\1b\74\21\02\20\03\28\02" "\00\21\05\03\40\20\05\22\04\28\02\04\41\78\71\20\00\46\0d" "\02\20\02\41\1d\76\21\05\20\02\41\01\74\21\02\20\04\20\05" "\41\04\71\6a\41\10\6a\22\03\28\02\00\22\05\0d\00\0b\41\08" "\21\00\41\18\21\02\20\04\21\05\0b\20\01\21\04\20\01\21\06" "\0c\01\0b\20\04\28\02\08\22\05\20\01\36\02\0c\41\08\21\02" "\20\04\41\08\6a\21\03\41\00\21\06\41\18\21\00\0b\20\03\20" "\01\36\02\00\20\01\20\02\6a\20\05\36\02\00\20\01\20\04\36" "\02\0c\20\01\20\00\6a\20\06\36\02\00\41\00\41\00\28\02\c4" "\79\41\7f\6a\22\01\41\7f\20\01\1b\36\02\c4\79\0b\0b\86\01" "\01\02\7f\02\40\20\00\0d\00\20\01\10\2b\0f\0b\02\40\20\01" "\41\40\49\0d\00\10\24\41\30\36\02\00\41\00\0f\0b\02\40\20" "\00\41\78\6a\41\10\20\01\41\0b\6a\41\78\71\20\01\41\0b\49" "\1b\10\2f\22\02\45\0d\00\20\02\41\08\6a\0f\0b\02\40\20\01" "\10\2b\22\02\0d\00\41\00\0f\0b\20\02\20\00\41\7c\41\78\20" "\00\41\7c\6a\28\02\00\22\03\41\03\71\1b\20\03\41\78\71\6a" "\22\03\20\01\20\03\20\01\49\1b\10\27\1a\20\00\10\2d\20\02" "\0b\c7\07\01\09\7f\20\00\28\02\04\22\02\41\78\71\21\03\02" "\40\02\40\20\02\41\03\71\0d\00\02\40\20\01\41\80\02\4f\0d" "\00\41\00\0f\0b\02\40\20\03\20\01\41\04\6a\49\0d\00\20\00" "\21\04\20\03\20\01\6b\41\00\28\02\84\7d\41\01\74\4d\0d\02" "\0b\41\00\0f\0b\20\00\20\03\6a\21\05\02\40\02\40\20\03\20" "\01\49\0d\00\20\03\20\01\6b\22\03\41\10\49\0d\01\20\00\20" "\02\41\01\71\20\01\72\41\02\72\36\02\04\20\00\20\01\6a\22" "\01\20\03\41\03\72\36\02\04\20\05\20\05\28\02\04\41\01\72" "\36\02\04\20\01\20\03\10\33\0c\01\0b\41\00\21\04\02\40\20" "\05\41\00\28\02\bc\79\47\0d\00\41\00\28\02\b0\79\20\03\6a" "\22\03\20\01\4d\0d\02\20\00\20\02\41\01\71\20\01\72\41\02" "\72\36\02\04\20\00\20\01\6a\22\02\20\03\20\01\6b\22\01\41" "\01\72\36\02\04\41\00\20\01\36\02\b0\79\41\00\20\02\36\02" "\bc\79\0c\01\0b\02\40\20\05\41\00\28\02\b8\79\47\0d\00\41" "\00\21\04\41\00\28\02\ac\79\20\03\6a\22\03\20\01\49\0d\02" "\02\40\02\40\20\03\20\01\6b\22\04\41\10\49\0d\00\20\00\20" "\02\41\01\71\20\01\72\41\02\72\36\02\04\20\00\20\01\6a\22" "\01\20\04\41\01\72\36\02\04\20\00\20\03\6a\22\03\20\04\36" "\02\00\20\03\20\03\28\02\04\41\7e\71\36\02\04\0c\01\0b\20" "\00\20\02\41\01\71\20\03\72\41\02\72\36\02\04\20\00\20\03" "\6a\22\01\20\01\28\02\04\41\01\72\36\02\04\41\00\21\04\41" "\00\21\01\0b\41\00\20\01\36\02\b8\79\41\00\20\04\36\02\ac" "\79\0c\01\0b\41\00\21\04\20\05\28\02\04\22\06\41\02\71\0d" "\01\20\06\41\78\71\20\03\6a\22\07\20\01\49\0d\01\20\07\20" "\01\6b\21\08\20\05\28\02\0c\21\03\02\40\02\40\20\06\41\ff" "\01\4b\0d\00\20\05\28\02\08\22\04\20\06\41\03\76\22\06\41" "\03\74\41\cc\f9\00\6a\22\05\46\1a\02\40\20\03\20\04\47\0d" "\00\41\00\41\00\28\02\a4\79\41\7e\20\06\77\71\36\02\a4\79" "\0c\02\0b\20\03\20\05\46\1a\20\04\20\03\36\02\0c\20\03\20" "\04\36\02\08\0c\01\0b\20\05\28\02\18\21\09\02\40\02\40\20" "\03\20\05\46\0d\00\20\05\28\02\08\22\04\41\00\28\02\b4\79" "\49\1a\20\04\20\03\36\02\0c\20\03\20\04\36\02\08\0c\01\0b" "\02\40\02\40\02\40\20\05\28\02\14\22\04\45\0d\00\20\05\41" "\14\6a\21\06\0c\01\0b\20\05\28\02\10\22\04\45\0d\01\20\05" "\41\10\6a\21\06\0b\03\40\20\06\21\0a\20\04\22\03\41\14\6a" "\21\06\20\03\28\02\14\22\04\0d\00\20\03\41\10\6a\21\06\20" "\03\28\02\10\22\04\0d\00\0b\20\0a\41\00\36\02\00\0c\01\0b" "\41\00\21\03\0b\20\09\45\0d\00\02\40\02\40\20\05\20\05\28" "\02\1c\22\06\41\02\74\41\d4\fb\00\6a\22\04\28\02\00\47\0d" "\00\20\04\20\03\36\02\00\20\03\0d\01\41\00\41\00\28\02\a8" "\79\41\7e\20\06\77\71\36\02\a8\79\0c\02\0b\20\09\41\10\41" "\14\20\09\28\02\10\20\05\46\1b\6a\20\03\36\02\00\20\03\45" "\0d\01\0b\20\03\20\09\36\02\18\02\40\20\05\28\02\10\22\04" "\45\0d\00\20\03\20\04\36\02\10\20\04\20\03\36\02\18\0b\20" "\05\28\02\14\22\04\45\0d\00\20\03\20\04\36\02\14\20\04\20" "\03\36\02\18\0b\02\40\20\08\41\0f\4b\0d\00\20\00\20\02\41" "\01\71\20\07\72\41\02\72\36\02\04\20\00\20\07\6a\22\01\20" "\01\28\02\04\41\01\72\36\02\04\0c\01\0b\20\00\20\02\41\01" "\71\20\01\72\41\02\72\36\02\04\20\00\20\01\6a\22\01\20\08" "\41\03\72\36\02\04\20\00\20\07\6a\22\03\20\03\28\02\04\41" "\01\72\36\02\04\20\01\20\08\10\33\0b\20\00\21\04\0b\20\04" "\0b\17\00\02\40\20\00\41\08\4b\0d\00\20\01\10\2b\0f\0b\20" "\00\20\01\10\31\0b\a1\03\01\05\7f\41\10\21\02\02\40\02\40" "\20\00\41\10\20\00\41\10\4b\1b\22\03\20\03\41\7f\6a\71\0d" "\00\20\03\21\00\0c\01\0b\03\40\20\02\22\00\41\01\74\21\02" "\20\00\20\03\49\0d\00\0b\0b\02\40\41\40\20\00\6b\20\01\4b" "\0d\00\10\24\41\30\36\02\00\41\00\0f\0b\02\40\41\10\20\01" "\41\0b\6a\41\78\71\20\01\41\0b\49\1b\22\01\20\00\6a\41\0c" "\6a\10\2b\22\02\0d\00\41\00\0f\0b\20\02\41\78\6a\21\03\02" "\40\02\40\20\00\41\7f\6a\20\02\71\0d\00\20\03\21\00\0c\01" "\0b\20\02\41\7c\6a\22\04\28\02\00\22\05\41\78\71\20\02\20" "\00\6a\41\7f\6a\41\00\20\00\6b\71\41\78\6a\22\02\41\00\20" "\00\20\02\20\03\6b\41\0f\4b\1b\6a\22\00\20\03\6b\22\02\6b" "\21\06\02\40\20\05\41\03\71\0d\00\20\03\28\02\00\21\03\20" "\00\20\06\36\02\04\20\00\20\03\20\02\6a\36\02\00\0c\01\0b" "\20\00\20\06\20\00\28\02\04\41\01\71\72\41\02\72\36\02\04" "\20\00\20\06\6a\22\06\20\06\28\02\04\41\01\72\36\02\04\20" "\04\20\02\20\04\28\02\00\41\01\71\72\41\02\72\36\02\00\20" "\03\20\02\6a\22\06\20\06\28\02\04\41\01\72\36\02\04\20\03" "\20\02\10\33\0b\02\40\20\00\28\02\04\22\02\41\03\71\45\0d" "\00\20\02\41\78\71\22\03\20\01\41\10\6a\4d\0d\00\20\00\20" "\01\20\02\41\01\71\72\41\02\72\36\02\04\20\00\20\01\6a\22" "\02\20\03\20\01\6b\22\01\41\03\72\36\02\04\20\00\20\03\6a" "\22\03\20\03\28\02\04\41\01\72\36\02\04\20\02\20\01\10\33" "\0b\20\00\41\08\6a\0b\72\01\02\7f\02\40\02\40\02\40\20\01" "\41\08\47\0d\00\20\02\10\2b\21\01\0c\01\0b\41\1c\21\03\20" "\01\41\04\49\0d\01\20\01\41\03\71\0d\01\20\01\41\02\76\22" "\04\20\04\41\7f\6a\71\0d\01\41\30\21\03\41\40\20\01\6b\20" "\02\49\0d\01\20\01\41\10\20\01\41\10\4b\1b\20\02\10\31\21" "\01\0b\02\40\20\01\0d\00\41\30\0f\0b\20\00\20\01\36\02\00" "\41\00\21\03\0b\20\03\0b\fa\0b\01\06\7f\20\00\20\01\6a\21" "\02\02\40\02\40\20\00\28\02\04\22\03\41\01\71\0d\00\20\03" "\41\02\71\45\0d\01\20\00\28\02\00\22\04\20\01\6a\21\01\02" "\40\02\40\02\40\02\40\20\00\20\04\6b\22\00\41\00\28\02\b8" "\79\46\0d\00\20\00\28\02\0c\21\03\02\40\20\04\41\ff\01\4b" "\0d\00\20\00\28\02\08\22\05\20\04\41\03\76\22\06\41\03\74" "\41\cc\f9\00\6a\22\04\46\1a\20\03\20\05\47\0d\02\41\00\41" "\00\28\02\a4\79\41\7e\20\06\77\71\36\02\a4\79\0c\05\0b\20" "\00\28\02\18\21\07\02\40\20\03\20\00\46\0d\00\20\00\28\02" "\08\22\04\41\00\28\02\b4\79\49\1a\20\04\20\03\36\02\0c\20" "\03\20\04\36\02\08\0c\04\0b\02\40\02\40\20\00\28\02\14\22" "\04\45\0d\00\20\00\41\14\6a\21\05\0c\01\0b\20\00\28\02\10" "\22\04\45\0d\03\20\00\41\10\6a\21\05\0b\03\40\20\05\21\06" "\20\04\22\03\41\14\6a\21\05\20\03\28\02\14\22\04\0d\00\20" "\03\41\10\6a\21\05\20\03\28\02\10\22\04\0d\00\0b\20\06\41" "\00\36\02\00\0c\03\0b\20\02\28\02\04\22\03\41\03\71\41\03" "\47\0d\03\41\00\20\01\36\02\ac\79\20\02\20\03\41\7e\71\36" "\02\04\20\00\20\01\41\01\72\36\02\04\20\02\20\01\36\02\00" "\0f\0b\20\03\20\04\46\1a\20\05\20\03\36\02\0c\20\03\20\05" "\36\02\08\0c\02\0b\41\00\21\03\0b\20\07\45\0d\00\02\40\02" "\40\20\00\20\00\28\02\1c\22\05\41\02\74\41\d4\fb\00\6a\22" "\04\28\02\00\47\0d\00\20\04\20\03\36\02\00\20\03\0d\01\41" "\00\41\00\28\02\a8\79\41\7e\20\05\77\71\36\02\a8\79\0c\02" "\0b\20\07\41\10\41\14\20\07\28\02\10\20\00\46\1b\6a\20\03" "\36\02\00\20\03\45\0d\01\0b\20\03\20\07\36\02\18\02\40\20" "\00\28\02\10\22\04\45\0d\00\20\03\20\04\36\02\10\20\04\20" "\03\36\02\18\0b\20\00\28\02\14\22\04\45\0d\00\20\03\20\04" "\36\02\14\20\04\20\03\36\02\18\0b\02\40\02\40\02\40\02\40" "\02\40\20\02\28\02\04\22\04\41\02\71\0d\00\02\40\20\02\41" "\00\28\02\bc\79\47\0d\00\41\00\20\00\36\02\bc\79\41\00\41" "\00\28\02\b0\79\20\01\6a\22\01\36\02\b0\79\20\00\20\01\41" "\01\72\36\02\04\20\00\41\00\28\02\b8\79\47\0d\06\41\00\41" "\00\36\02\ac\79\41\00\41\00\36\02\b8\79\0f\0b\02\40\20\02" "\41\00\28\02\b8\79\47\0d\00\41\00\20\00\36\02\b8\79\41\00" "\41\00\28\02\ac\79\20\01\6a\22\01\36\02\ac\79\20\00\20\01" "\41\01\72\36\02\04\20\00\20\01\6a\20\01\36\02\00\0f\0b\20" "\04\41\78\71\20\01\6a\21\01\20\02\28\02\0c\21\03\02\40\20" "\04\41\ff\01\4b\0d\00\20\02\28\02\08\22\05\20\04\41\03\76" "\22\02\41\03\74\41\cc\f9\00\6a\22\04\46\1a\02\40\20\03\20" "\05\47\0d\00\41\00\41\00\28\02\a4\79\41\7e\20\02\77\71\36" "\02\a4\79\0c\05\0b\20\03\20\04\46\1a\20\05\20\03\36\02\0c" "\20\03\20\05\36\02\08\0c\04\0b\20\02\28\02\18\21\07\02\40" "\20\03\20\02\46\0d\00\20\02\28\02\08\22\04\41\00\28\02\b4" "\79\49\1a\20\04\20\03\36\02\0c\20\03\20\04\36\02\08\0c\03" "\0b\02\40\02\40\20\02\28\02\14\22\04\45\0d\00\20\02\41\14" "\6a\21\05\0c\01\0b\20\02\28\02\10\22\04\45\0d\02\20\02\41" "\10\6a\21\05\0b\03\40\20\05\21\06\20\04\22\03\41\14\6a\21" "\05\20\03\28\02\14\22\04\0d\00\20\03\41\10\6a\21\05\20\03" "\28\02\10\22\04\0d\00\0b\20\06\41\00\36\02\00\0c\02\0b\20" "\02\20\04\41\7e\71\36\02\04\20\00\20\01\41\01\72\36\02\04" "\20\00\20\01\6a\20\01\36\02\00\0c\03\0b\41\00\21\03\0b\20" "\07\45\0d\00\02\40\02\40\20\02\20\02\28\02\1c\22\05\41\02" "\74\41\d4\fb\00\6a\22\04\28\02\00\47\0d\00\20\04\20\03\36" "\02\00\20\03\0d\01\41\00\41\00\28\02\a8\79\41\7e\20\05\77" "\71\36\02\a8\79\0c\02\0b\20\07\41\10\41\14\20\07\28\02\10" "\20\02\46\1b\6a\20\03\36\02\00\20\03\45\0d\01\0b\20\03\20" "\07\36\02\18\02\40\20\02\28\02\10\22\04\45\0d\00\20\03\20" "\04\36\02\10\20\04\20\03\36\02\18\0b\20\02\28\02\14\22\04" "\45\0d\00\20\03\20\04\36\02\14\20\04\20\03\36\02\18\0b\20" "\00\20\01\41\01\72\36\02\04\20\00\20\01\6a\20\01\36\02\00" "\20\00\41\00\28\02\b8\79\47\0d\00\41\00\20\01\36\02\ac\79" "\0f\0b\02\40\20\01\41\ff\01\4b\0d\00\20\01\41\78\71\41\cc" "\f9\00\6a\21\03\02\40\02\40\41\00\28\02\a4\79\22\04\41\01" "\20\01\41\03\76\74\22\01\71\0d\00\41\00\20\04\20\01\72\36" "\02\a4\79\20\03\21\01\0c\01\0b\20\03\28\02\08\21\01\0b\20" "\03\20\00\36\02\08\20\01\20\00\36\02\0c\20\00\20\03\36\02" "\0c\20\00\20\01\36\02\08\0f\0b\41\1f\21\03\02\40\20\01\41" "\ff\ff\ff\07\4b\0d\00\20\01\41\26\20\01\41\08\76\67\22\03" "\6b\76\41\01\71\20\03\41\01\74\6b\41\3e\6a\21\03\0b\20\00" "\20\03\36\02\1c\20\00\42\00\37\02\10\20\03\41\02\74\41\d4" "\fb\00\6a\21\04\02\40\02\40\02\40\41\00\28\02\a8\79\22\05" "\41\01\20\03\74\22\02\71\0d\00\41\00\20\05\20\02\72\36\02" "\a8\79\20\04\20\00\36\02\00\20\00\20\04\36\02\18\0c\01\0b" "\20\01\41\00\41\19\20\03\41\01\76\6b\20\03\41\1f\46\1b\74" "\21\03\20\04\28\02\00\21\05\03\40\20\05\22\04\28\02\04\41" "\78\71\20\01\46\0d\02\20\03\41\1d\76\21\05\20\03\41\01\74" "\21\03\20\04\20\05\41\04\71\6a\41\10\6a\22\02\28\02\00\22" "\05\0d\00\0b\20\02\20\00\36\02\00\20\00\20\04\36\02\18\0b" "\20\00\20\00\36\02\0c\20\00\20\00\36\02\08\0f\0b\20\04\28" "\02\08\22\01\20\00\36\02\0c\20\04\20\00\36\02\08\20\00\41" "\00\36\02\18\20\00\20\04\36\02\0c\20\00\20\01\36\02\08\0b" "\0b\63\02\01\7f\01\7e\02\40\02\40\20\00\0d\00\41\00\21\02" "\0c\01\0b\20\00\ad\20\01\ad\7e\22\03\a7\21\02\20\01\20\00" "\72\41\80\80\04\49\0d\00\41\7f\20\02\20\03\42\20\88\a7\41" "\00\47\1b\21\02\0b\02\40\20\02\10\2b\22\00\45\0d\00\20\00" "\41\7c\6a\2d\00\00\41\03\71\45\0d\00\20\00\41\00\20\02\10" "\15\1a\0b\20\00\0b\07\00\10\36\41\00\4a\0b\05\00\10\b7\0d" "\0b\eb\01\01\03\7f\02\40\02\40\20\01\41\ff\01\71\22\02\45" "\0d\00\02\40\20\00\41\03\71\45\0d\00\20\01\41\ff\01\71\21" "\03\03\40\20\00\2d\00\00\22\04\45\0d\03\20\04\20\03\46\0d" "\03\20\00\41\01\6a\22\00\41\03\71\0d\00\0b\0b\02\40\20\00" "\28\02\00\22\04\41\7f\73\20\04\41\ff\fd\fb\77\6a\71\41\80" "\81\82\84\78\71\0d\00\20\02\41\81\82\84\08\6c\21\03\03\40" "\20\04\20\03\73\22\04\41\7f\73\20\04\41\ff\fd\fb\77\6a\71" "\41\80\81\82\84\78\71\0d\01\20\00\28\02\04\21\04\20\00\41" "\04\6a\21\00\20\04\41\7f\73\20\04\41\ff\fd\fb\77\6a\71\41" "\80\81\82\84\78\71\45\0d\00\0b\0b\20\01\41\ff\01\71\21\01" "\02\40\03\40\20\00\22\04\2d\00\00\22\03\45\0d\01\20\04\41" "\01\6a\21\00\20\03\20\01\47\0d\00\0b\0b\20\04\0f\0b\20\00" "\20\00\10\28\6a\0f\0b\20\00\0b\19\00\20\00\20\01\10\37\22" "\00\41\00\20\00\2d\00\00\20\01\41\ff\01\71\46\1b\0b\1d\00" "\02\40\20\00\41\81\60\49\0d\00\10\24\41\00\20\00\6b\36\02" "\00\41\7f\21\00\0b\20\00\0b\37\01\01\7f\23\00\41\10\6b\22" "\03\24\00\20\00\20\01\20\02\41\ff\01\71\20\03\41\08\6a\10" "\01\10\29\21\02\20\03\29\03\08\21\01\20\03\41\10\6a\24\00" "\42\7f\20\01\20\02\1b\0b\0d\00\20\00\28\02\3c\20\01\20\02" "\10\3a\0b\e3\02\01\07\7f\23\00\41\20\6b\22\03\24\00\20\03" "\20\00\28\02\1c\22\04\36\02\10\20\00\28\02\14\21\05\20\03" "\20\02\36\02\1c\20\03\20\01\36\02\18\20\03\20\05\20\04\6b" "\22\01\36\02\14\20\01\20\02\6a\21\06\20\03\41\10\6a\21\04" "\41\02\21\07\02\40\02\40\02\40\02\40\02\40\20\00\28\02\3c" "\20\03\41\10\6a\41\02\20\03\41\0c\6a\10\02\10\29\45\0d\00" "\20\04\21\05\0c\01\0b\03\40\20\06\20\03\28\02\0c\22\01\46" "\0d\02\02\40\20\01\41\7f\4a\0d\00\20\04\21\05\0c\04\0b\20" "\04\20\01\20\04\28\02\04\22\08\4b\22\09\41\03\74\6a\22\05" "\20\05\28\02\00\20\01\20\08\41\00\20\09\1b\6b\22\08\6a\36" "\02\00\20\04\41\0c\41\04\20\09\1b\6a\22\04\20\04\28\02\00" "\20\08\6b\36\02\00\20\06\20\01\6b\21\06\20\05\21\04\20\00" "\28\02\3c\20\05\20\07\20\09\6b\22\07\20\03\41\0c\6a\10\02" "\10\29\45\0d\00\0b\0b\20\06\41\7f\47\0d\01\0b\20\00\20\00" "\28\02\2c\22\01\36\02\1c\20\00\20\01\36\02\14\20\00\20\01" "\20\00\28\02\30\6a\36\02\10\20\02\21\01\0c\01\0b\41\00\21" "\01\20\00\41\00\36\02\1c\20\00\42\00\37\03\10\20\00\20\00" "\28\02\00\41\20\72\36\02\00\20\07\41\02\46\0d\00\20\02\20" "\05\28\02\04\6b\21\01\0b\20\03\41\20\6a\24\00\20\01\0b\e2" "\01\01\04\7f\23\00\41\20\6b\22\03\24\00\20\03\20\01\36\02" "\10\41\00\21\04\20\03\20\02\20\00\28\02\30\22\05\41\00\47" "\6b\36\02\14\20\00\28\02\2c\21\06\20\03\20\05\36\02\1c\20" "\03\20\06\36\02\18\41\20\21\05\02\40\02\40\02\40\20\00\28" "\02\3c\20\03\41\10\6a\41\02\20\03\41\0c\6a\10\03\10\29\0d" "\00\20\03\28\02\0c\22\05\41\00\4a\0d\01\41\20\41\10\20\05" "\1b\21\05\0b\20\00\20\00\28\02\00\20\05\72\36\02\00\0c\01" "\0b\20\05\21\04\20\05\20\03\28\02\14\22\06\4d\0d\00\20\00" "\20\00\28\02\2c\22\04\36\02\04\20\00\20\04\20\05\20\06\6b" "\6a\36\02\08\02\40\20\00\28\02\30\45\0d\00\20\00\20\04\41" "\01\6a\36\02\04\20\01\20\02\6a\41\7f\6a\20\04\2d\00\00\3a" "\00\00\0b\20\02\21\04\0b\20\03\41\20\6a\24\00\20\04\0b\04" "\00\20\00\0b\0b\00\20\00\28\02\3c\10\3e\10\04\0b\04\00\41" "\00\0b\04\00\41\00\0b\04\00\41\00\0b\04\00\41\00\0b\04\00" "\41\00\0b\02\00\0b\02\00\0b\0c\00\41\cc\fd\00\10\45\41\d0" "\fd\00\0b\08\00\41\cc\fd\00\10\46\0b\04\00\41\01\0b\02\00" "\0b\b6\02\01\03\7f\02\40\20\00\0d\00\41\00\21\01\02\40\41" "\00\28\02\f0\77\45\0d\00\41\00\28\02\f0\77\10\4b\21\01\0b" "\02\40\41\00\28\02\88\79\45\0d\00\41\00\28\02\88\79\10\4b" "\20\01\72\21\01\0b\02\40\10\47\28\02\00\22\00\45\0d\00\03" "\40\41\00\21\02\02\40\20\00\28\02\4c\41\00\48\0d\00\20\00" "\10\49\21\02\0b\02\40\20\00\28\02\14\20\00\28\02\1c\46\0d" "\00\20\00\10\4b\20\01\72\21\01\0b\02\40\20\02\45\0d\00\20" "\00\10\4a\0b\20\00\28\02\38\22\00\0d\00\0b\0b\10\48\20\01" "\0f\0b\02\40\02\40\20\00\28\02\4c\41\00\4e\0d\00\41\01\21" "\02\0c\01\0b\20\00\10\49\45\21\02\0b\02\40\02\40\02\40\20" "\00\28\02\14\20\00\28\02\1c\46\0d\00\20\00\41\00\41\00\20" "\00\28\02\24\11\03\00\1a\20\00\28\02\14\0d\00\41\7f\21\01" "\20\02\45\0d\01\0c\02\0b\02\40\20\00\28\02\04\22\01\20\00" "\28\02\08\22\03\46\0d\00\20\00\20\01\20\03\6b\ac\41\01\20" "\00\28\02\28\11\13\00\1a\0b\41\00\21\01\20\00\41\00\36\02" "\1c\20\00\42\00\37\03\10\20\00\42\00\37\02\04\20\02\0d\01" "\0b\20\00\10\4a\0b\20\01\0b\f6\02\01\02\7f\02\40\20\00\20" "\01\46\0d\00\02\40\20\01\20\00\20\02\6a\22\03\6b\41\00\20" "\02\41\01\74\6b\4b\0d\00\20\00\20\01\20\02\10\27\0f\0b\20" "\01\20\00\73\41\03\71\21\04\02\40\02\40\02\40\20\00\20\01" "\4f\0d\00\02\40\20\04\45\0d\00\20\00\21\03\0c\03\0b\02\40" "\20\00\41\03\71\0d\00\20\00\21\03\0c\02\0b\20\00\21\03\03" "\40\20\02\45\0d\04\20\03\20\01\2d\00\00\3a\00\00\20\01\41" "\01\6a\21\01\20\02\41\7f\6a\21\02\20\03\41\01\6a\22\03\41" "\03\71\45\0d\02\0c\00\0b\00\0b\02\40\20\04\0d\00\02\40\20" "\03\41\03\71\45\0d\00\03\40\20\02\45\0d\05\20\00\20\02\41" "\7f\6a\22\02\6a\22\03\20\01\20\02\6a\2d\00\00\3a\00\00\20" "\03\41\03\71\0d\00\0b\0b\20\02\41\03\4d\0d\00\03\40\20\00" "\20\02\41\7c\6a\22\02\6a\20\01\20\02\6a\28\02\00\36\02\00" "\20\02\41\03\4b\0d\00\0b\0b\20\02\45\0d\02\03\40\20\00\20" "\02\41\7f\6a\22\02\6a\20\01\20\02\6a\2d\00\00\3a\00\00\20" "\02\0d\00\0c\03\0b\00\0b\20\02\41\03\4d\0d\00\03\40\20\03" "\20\01\28\02\00\36\02\00\20\01\41\04\6a\21\01\20\03\41\04" "\6a\21\03\20\02\41\7c\6a\22\02\41\03\4b\0d\00\0b\0b\20\02" "\45\0d\00\03\40\20\03\20\01\2d\00\00\3a\00\00\20\03\41\01" "\6a\21\03\20\01\41\01\6a\21\01\20\02\41\7f\6a\22\02\0d\00" "\0b\0b\20\00\0b\39\01\01\7f\02\40\10\47\28\02\00\22\00\45" "\0d\00\03\40\20\00\10\4e\20\00\28\02\38\22\00\0d\00\0b\0b" "\41\00\28\02\d8\76\10\4e\41\00\28\02\f0\77\10\4e\41\00\28" "\02\88\79\10\4e\0b\61\01\02\7f\02\40\20\00\45\0d\00\02\40" "\20\00\28\02\4c\41\00\48\0d\00\20\00\10\49\1a\0b\02\40\20" "\00\28\02\14\20\00\28\02\1c\46\0d\00\20\00\41\00\41\00\20" "\00\28\02\24\11\03\00\1a\0b\20\00\28\02\04\22\01\20\00\28" "\02\08\22\02\46\0d\00\20\00\20\01\20\02\6b\ac\41\01\20\00" "\28\02\28\11\13\00\1a\0b\0b\81\01\01\02\7f\20\00\20\00\28" "\02\48\22\01\41\7f\6a\20\01\72\36\02\48\02\40\20\00\28\02" "\14\20\00\28\02\1c\46\0d\00\20\00\41\00\41\00\20\00\28\02" "\24\11\03\00\1a\0b\20\00\41\00\36\02\1c\20\00\42\00\37\03" "\10\02\40\20\00\28\02\00\22\01\41\04\71\45\0d\00\20\00\20" "\01\41\20\72\36\02\00\41\7f\0f\0b\20\00\20\00\28\02\2c\20" "\00\28\02\30\6a\22\02\36\02\08\20\00\20\02\36\02\04\20\01" "\41\1b\74\41\1f\75\0b\5c\01\01\7f\20\00\20\00\28\02\48\22" "\01\41\7f\6a\20\01\72\36\02\48\02\40\20\00\28\02\00\22\01" "\41\08\71\45\0d\00\20\00\20\01\41\20\72\36\02\00\41\7f\0f" "\0b\20\00\42\00\37\02\04\20\00\20\00\28\02\2c\22\01\36\02" "\1c\20\00\20\01\36\02\14\20\00\20\01\20\00\28\02\30\6a\36" "\02\10\41\00\0b\cf\01\01\03\7f\02\40\02\40\20\02\28\02\10" "\22\03\0d\00\41\00\21\04\20\02\10\50\0d\01\20\02\28\02\10" "\21\03\0b\02\40\20\03\20\02\28\02\14\22\04\6b\20\01\4f\0d" "\00\20\02\20\00\20\01\20\02\28\02\24\11\03\00\0f\0b\02\40" "\02\40\20\02\28\02\50\41\00\48\0d\00\20\01\45\0d\00\20\01" "\21\03\02\40\03\40\20\00\20\03\6a\22\05\41\7f\6a\2d\00\00" "\41\0a\46\0d\01\20\03\41\7f\6a\22\03\45\0d\02\0c\00\0b\00" "\0b\20\02\20\00\20\03\20\02\28\02\24\11\03\00\22\04\20\03" "\49\0d\02\20\01\20\03\6b\21\01\20\02\28\02\14\21\04\0c\01" "\0b\20\00\21\05\41\00\21\03\0b\20\04\20\05\20\01\10\27\1a" "\20\02\20\02\28\02\14\20\01\6a\36\02\14\20\03\20\01\6a\21" "\04\0b\20\04\0b\57\01\02\7f\20\02\20\01\6c\21\04\02\40\02" "\40\20\03\28\02\4c\41\7f\4a\0d\00\20\00\20\04\20\03\10\51" "\21\00\0c\01\0b\20\03\10\49\21\05\20\00\20\04\20\03\10\51" "\21\00\20\05\45\0d\00\20\03\10\4a\0b\02\40\20\00\20\04\47" "\0d\00\20\02\41\00\20\01\1b\0f\0b\20\00\20\01\6e\0b\07\00" "\20\00\10\ed\02\0b\0c\00\20\00\10\53\1a\20\00\10\8b\0d\0b" "\18\00\20\00\41\88\0d\41\08\6a\36\02\00\20\00\41\04\6a\10" "\ad\09\1a\20\00\0b\0c\00\20\00\10\55\1a\20\00\10\8b\0d\0b" "\33\00\20\00\41\88\0d\41\08\6a\36\02\00\20\00\41\04\6a\10" "\ab\09\1a\20\00\41\18\6a\42\00\37\02\00\20\00\41\10\6a\42" "\00\37\02\00\20\00\42\00\37\02\08\20\00\0b\02\00\0b\04\00" "\20\00\0b\09\00\20\00\42\7f\10\5b\1a\0b\12\00\20\00\20\01" "\37\03\08\20\00\42\00\37\03\00\20\00\0b\09\00\20\00\42\7f" "\10\5b\1a\0b\04\00\41\00\0b\04\00\41\00\0b\bd\01\01\04\7f" "\23\00\41\10\6b\22\03\24\00\41\00\21\04\02\40\03\40\20\02" "\20\04\4c\0d\01\02\40\02\40\20\00\28\02\0c\22\05\20\00\28" "\02\10\22\06\4f\0d\00\20\03\41\ff\ff\ff\ff\07\36\02\0c\20" "\03\20\06\20\05\6b\36\02\08\20\03\20\02\20\04\6b\36\02\04" "\20\03\41\0c\6a\20\03\41\08\6a\20\03\41\04\6a\10\60\10\60" "\21\05\20\01\20\00\28\02\0c\20\05\28\02\00\22\05\10\61\1a" "\20\00\20\05\10\62\0c\01\0b\20\00\20\00\28\02\00\28\02\28" "\11\00\00\22\05\41\7f\46\0d\02\20\01\20\05\10\63\3a\00\00" "\41\01\21\05\0b\20\01\20\05\6a\21\01\20\05\20\04\6a\21\04" "\0c\00\0b\00\0b\20\03\41\10\6a\24\00\20\04\0b\08\00\20\00" "\20\01\10\64\0b\0d\00\20\01\20\02\20\00\10\65\1a\20\00\0b" "\0f\00\20\00\20\00\28\02\0c\20\01\6a\36\02\0c\0b\05\00\20" "\00\c0\0b\29\01\02\7f\23\00\41\10\6b\22\02\24\00\20\02\41" "\0f\6a\20\01\20\00\10\f7\01\21\03\20\02\41\10\6a\24\00\20" "\01\20\00\20\03\1b\0b\0e\00\20\00\20\00\20\01\6a\20\02\10" "\f8\01\0b\04\00\10\67\0b\04\00\41\7f\0b\32\01\01\7f\02\40" "\20\00\20\00\28\02\00\28\02\24\11\00\00\10\67\47\0d\00\10" "\67\0f\0b\20\00\20\00\28\02\0c\22\01\41\01\6a\36\02\0c\20" "\01\2c\00\00\10\69\0b\08\00\20\00\41\ff\01\71\0b\04\00\10" "\67\0b\b9\01\01\05\7f\23\00\41\10\6b\22\03\24\00\41\00\21" "\04\10\67\21\05\02\40\03\40\20\02\20\04\4c\0d\01\02\40\20" "\00\28\02\18\22\06\20\00\28\02\1c\22\07\49\0d\00\20\00\20" "\01\2c\00\00\10\69\20\00\28\02\00\28\02\34\11\01\00\20\05" "\46\0d\02\20\04\41\01\6a\21\04\20\01\41\01\6a\21\01\0c\01" "\0b\20\03\20\07\20\06\6b\36\02\0c\20\03\20\02\20\04\6b\36" "\02\08\20\03\41\0c\6a\20\03\41\08\6a\10\60\21\06\20\00\28" "\02\18\20\01\20\06\28\02\00\22\06\10\61\1a\20\00\20\06\20" "\00\28\02\18\6a\36\02\18\20\06\20\04\6a\21\04\20\01\20\06" "\6a\21\01\0c\00\0b\00\0b\20\03\41\10\6a\24\00\20\04\0b\04" "\00\10\67\0b\04\00\20\00\0b\13\00\20\00\41\f0\0d\10\6d\22" "\00\41\08\6a\10\53\1a\20\00\0b\12\00\20\00\20\00\28\02\00" "\41\74\6a\28\02\00\6a\10\6e\0b\09\00\20\00\10\6e\10\8b\0d" "\0b\12\00\20\00\20\00\28\02\00\41\74\6a\28\02\00\6a\10\70" "\0b\06\00\20\00\10\7c\0b\07\00\20\00\28\02\48\0b\76\01\01" "\7f\23\00\41\10\6b\22\01\24\00\02\40\20\00\20\00\28\02\00" "\41\74\6a\28\02\00\6a\10\7d\45\0d\00\20\01\41\08\6a\20\00" "\10\8e\01\1a\02\40\20\01\41\08\6a\10\7e\45\0d\00\20\00\20" "\00\28\02\00\41\74\6a\28\02\00\6a\10\7d\10\7f\41\7f\47\0d" "\00\20\00\20\00\28\02\00\41\74\6a\28\02\00\6a\41\01\10\7b" "\0b\20\01\41\08\6a\10\8f\01\1a\0b\20\01\41\10\6a\24\00\20" "\00\0b\07\00\20\00\28\02\04\0b\0b\00\20\00\41\e0\9c\01\10" "\e2\04\0b\09\00\20\00\20\01\10\80\01\0b\0b\00\20\00\28\02" "\00\10\81\01\c0\0b\2e\01\01\7f\41\00\21\03\02\40\20\02\41" "\00\48\0d\00\20\00\28\02\08\20\02\41\ff\01\71\41\02\74\6a" "\28\02\00\20\01\71\41\00\47\21\03\0b\20\03\0b\0d\00\20\00" "\28\02\00\10\82\01\1a\20\00\0b\09\00\20\00\20\01\10\83\01" "\0b\08\00\20\00\28\02\10\45\0b\07\00\20\00\10\86\01\0b\07" "\00\20\00\2d\00\00\0b\0f\00\20\00\20\00\28\02\00\28\02\18" "\11\00\00\0b\10\00\20\00\10\e0\02\20\01\10\e0\02\73\41\01" "\73\0b\2b\01\01\7f\02\40\20\00\28\02\0c\22\01\20\00\28\02" "\10\47\0d\00\20\00\20\00\28\02\00\28\02\24\11\00\00\0f\0b" "\20\01\2c\00\00\10\69\0b\35\01\01\7f\02\40\20\00\28\02\0c" "\22\01\20\00\28\02\10\47\0d\00\20\00\20\00\28\02\00\28\02" "\28\11\00\00\0f\0b\20\00\20\01\41\01\6a\36\02\0c\20\01\2c" "\00\00\10\69\0b\0f\00\20\00\20\00\28\02\10\20\01\72\10\eb" "\02\0b\07\00\20\00\20\01\46\0b\3d\01\01\7f\02\40\20\00\28" "\02\18\22\02\20\00\28\02\1c\47\0d\00\20\00\20\01\10\69\20" "\00\28\02\00\28\02\34\11\01\00\0f\0b\20\00\20\02\41\01\6a" "\36\02\18\20\02\20\01\3a\00\00\20\01\10\69\0b\07\00\20\00" "\28\02\18\0b\05\00\10\88\01\0b\08\00\41\ff\ff\ff\ff\07\0b" "\04\00\20\00\0b\14\00\20\00\41\a0\0e\10\89\01\22\00\41\04" "\6a\10\53\1a\20\00\0b\13\00\20\00\20\00\28\02\00\41\74\6a" "\28\02\00\6a\10\8a\01\0b\0a\00\20\00\10\8a\01\10\8b\0d\0b" "\13\00\20\00\20\00\28\02\00\41\74\6a\28\02\00\6a\10\8c\01" "\0b\58\00\20\00\20\01\36\02\04\20\00\41\00\3a\00\00\02\40" "\20\01\20\01\28\02\00\41\74\6a\28\02\00\6a\10\72\45\0d\00" "\02\40\20\01\20\01\28\02\00\41\74\6a\28\02\00\6a\10\73\45" "\0d\00\20\01\20\01\28\02\00\41\74\6a\28\02\00\6a\10\73\10" "\74\1a\0b\20\00\41\01\3a\00\00\0b\20\00\0b\8d\01\01\01\7f" "\02\40\20\00\28\02\04\22\01\20\01\28\02\00\41\74\6a\28\02" "\00\6a\10\7d\45\0d\00\20\00\28\02\04\22\01\20\01\28\02\00" "\41\74\6a\28\02\00\6a\10\72\45\0d\00\20\00\28\02\04\22\01" "\20\01\28\02\00\41\74\6a\28\02\00\6a\10\75\41\80\c0\00\71" "\45\0d\00\10\35\0d\00\20\00\28\02\04\22\01\20\01\28\02\00" "\41\74\6a\28\02\00\6a\10\7d\10\7f\41\7f\47\0d\00\20\00\28" "\02\04\22\01\20\01\28\02\00\41\74\6a\28\02\00\6a\41\01\10" "\7b\0b\20\00\0b\0b\00\20\00\41\b4\9b\01\10\e2\04\0b\19\00" "\20\00\20\01\20\01\28\02\00\41\74\6a\28\02\00\6a\10\7d\36" "\02\00\20\00\0b\30\01\01\7f\02\40\02\40\10\67\20\00\28\02" "\4c\10\84\01\0d\00\20\00\28\02\4c\21\01\0c\01\0b\20\00\20" "\00\41\20\10\94\01\22\01\36\02\4c\0b\20\01\c0\0b\08\00\20" "\00\28\02\00\45\0b\37\01\01\7f\23\00\41\10\6b\22\02\24\00" "\20\02\41\0c\6a\20\00\10\e9\02\20\02\41\0c\6a\10\76\20\01" "\10\e1\02\21\00\20\02\41\0c\6a\10\ad\09\1a\20\02\41\10\6a" "\24\00\20\00\0b\17\00\20\00\20\01\20\02\20\03\20\04\20\00" "\28\02\00\28\02\10\11\09\00\0b\c1\01\01\05\7f\23\00\41\10" "\6b\22\02\24\00\20\02\41\08\6a\20\00\10\8e\01\1a\02\40\20" "\02\41\08\6a\10\7e\45\0d\00\20\00\20\00\28\02\00\41\74\6a" "\28\02\00\6a\10\75\1a\20\02\41\04\6a\20\00\20\00\28\02\00" "\41\74\6a\28\02\00\6a\10\e9\02\20\02\41\04\6a\10\90\01\21" "\03\20\02\41\04\6a\10\ad\09\1a\20\02\20\00\10\91\01\21\04" "\20\00\20\00\28\02\00\41\74\6a\28\02\00\6a\22\05\10\92\01" "\21\06\20\02\20\03\20\04\28\02\00\20\05\20\06\20\01\10\95" "\01\36\02\04\20\02\41\04\6a\10\93\01\45\0d\00\20\00\20\00" "\28\02\00\41\74\6a\28\02\00\6a\41\05\10\7b\0b\20\02\41\08" "\6a\10\8f\01\1a\20\02\41\10\6a\24\00\20\00\0b\04\00\20\00" "\0b\29\01\01\7f\02\40\20\00\28\02\00\22\02\45\0d\00\20\02" "\20\01\10\85\01\10\67\10\84\01\45\0d\00\20\00\41\00\36\02" "\00\0b\20\00\0b\04\00\20\00\0b\13\00\20\00\20\01\20\02\20" "\00\28\02\00\28\02\30\11\03\00\0b\07\00\20\00\10\ed\02\0b" "\0d\00\20\00\10\9b\01\1a\20\00\10\8b\0d\0b\18\00\20\00\41" "\a8\0e\41\08\6a\36\02\00\20\00\41\04\6a\10\ad\09\1a\20\00" "\0b\0d\00\20\00\10\9d\01\1a\20\00\10\8b\0d\0b\33\00\20\00" "\41\a8\0e\41\08\6a\36\02\00\20\00\41\04\6a\10\ab\09\1a\20" "\00\41\18\6a\42\00\37\02\00\20\00\41\10\6a\42\00\37\02\00" "\20\00\42\00\37\02\08\20\00\0b\02\00\0b\04\00\20\00\0b\09" "\00\20\00\42\7f\10\5b\1a\0b\09\00\20\00\42\7f\10\5b\1a\0b" "\04\00\41\00\0b\04\00\41\00\0b\cd\01\01\04\7f\23\00\41\10" "\6b\22\03\24\00\41\00\21\04\02\40\03\40\20\02\20\04\4c\0d" "\01\02\40\02\40\20\00\28\02\0c\22\05\20\00\28\02\10\22\06" "\4f\0d\00\20\03\41\ff\ff\ff\ff\07\36\02\0c\20\03\20\06\20" "\05\6b\41\02\75\36\02\08\20\03\20\02\20\04\6b\36\02\04\20" "\03\41\0c\6a\20\03\41\08\6a\20\03\41\04\6a\10\60\10\60\21" "\05\20\01\20\00\28\02\0c\20\05\28\02\00\22\05\10\a7\01\1a" "\20\00\20\05\10\a8\01\20\01\20\05\41\02\74\6a\21\01\0c\01" "\0b\20\00\20\00\28\02\00\28\02\28\11\00\00\22\05\41\7f\46" "\0d\02\20\01\20\05\10\a9\01\36\02\00\20\01\41\04\6a\21\01" "\41\01\21\05\0b\20\05\20\04\6a\21\04\0c\00\0b\00\0b\20\03" "\41\10\6a\24\00\20\04\0b\0e\00\20\01\20\02\20\00\10\aa\01" "\1a\20\00\0b\12\00\20\00\20\00\28\02\0c\20\01\41\02\74\6a" "\36\02\0c\0b\04\00\20\00\0b\11\00\20\00\20\00\20\01\41\02" "\74\6a\20\02\10\91\02\0b\05\00\10\ac\01\0b\04\00\41\7f\0b" "\35\01\01\7f\02\40\20\00\20\00\28\02\00\28\02\24\11\00\00" "\10\ac\01\47\0d\00\10\ac\01\0f\0b\20\00\20\00\28\02\0c\22" "\01\41\04\6a\36\02\0c\20\01\28\02\00\10\ae\01\0b\04\00\20" "\00\0b\05\00\10\ac\01\0b\c4\01\01\05\7f\23\00\41\10\6b\22" "\03\24\00\41\00\21\04\10\ac\01\21\05\02\40\03\40\20\02\20" "\04\4c\0d\01\02\40\20\00\28\02\18\22\06\20\00\28\02\1c\22" "\07\49\0d\00\20\00\20\01\28\02\00\10\ae\01\20\00\28\02\00" "\28\02\34\11\01\00\20\05\46\0d\02\20\04\41\01\6a\21\04\20" "\01\41\04\6a\21\01\0c\01\0b\20\03\20\07\20\06\6b\41\02\75" "\36\02\0c\20\03\20\02\20\04\6b\36\02\08\20\03\41\0c\6a\20" "\03\41\08\6a\10\60\21\06\20\00\28\02\18\20\01\20\06\28\02" "\00\22\06\10\a7\01\1a\20\00\20\00\28\02\18\20\06\41\02\74" "\22\07\6a\36\02\18\20\06\20\04\6a\21\04\20\01\20\07\6a\21" "\01\0c\00\0b\00\0b\20\03\41\10\6a\24\00\20\04\0b\05\00\10" "\ac\01\0b\04\00\20\00\0b\15\00\20\00\41\90\0f\10\b2\01\22" "\00\41\08\6a\10\9b\01\1a\20\00\0b\13\00\20\00\20\00\28\02" "\00\41\74\6a\28\02\00\6a\10\b3\01\0b\0a\00\20\00\10\b3\01" "\10\8b\0d\0b\13\00\20\00\20\00\28\02\00\41\74\6a\28\02\00" "\6a\10\b5\01\0b\06\00\20\00\10\7c\0b\07\00\20\00\28\02\48" "\0b\7b\01\01\7f\23\00\41\10\6b\22\01\24\00\02\40\20\00\20" "\00\28\02\00\41\74\6a\28\02\00\6a\10\c0\01\45\0d\00\20\01" "\41\08\6a\20\00\10\cd\01\1a\02\40\20\01\41\08\6a\10\c1\01" "\45\0d\00\20\00\20\00\28\02\00\41\74\6a\28\02\00\6a\10\c0" "\01\10\c2\01\41\7f\47\0d\00\20\00\20\00\28\02\00\41\74\6a" "\28\02\00\6a\41\01\10\bf\01\0b\20\01\41\08\6a\10\ce\01\1a" "\0b\20\01\41\10\6a\24\00\20\00\0b\0b\00\20\00\41\d8\9c\01" "\10\e2\04\0b\09\00\20\00\20\01\10\c3\01\0b\0a\00\20\00\28" "\02\00\10\c4\01\0b\13\00\20\00\20\01\20\02\20\00\28\02\00" "\28\02\0c\11\03\00\0b\0d\00\20\00\28\02\00\10\c5\01\1a\20" "\00\0b\09\00\20\00\20\01\10\83\01\0b\07\00\20\00\10\86\01" "\0b\07\00\20\00\2d\00\00\0b\0f\00\20\00\20\00\28\02\00\28" "\02\18\11\00\00\0b\10\00\20\00\10\e2\02\20\01\10\e2\02\73" "\41\01\73\0b\2c\01\01\7f\02\40\20\00\28\02\0c\22\01\20\00" "\28\02\10\47\0d\00\20\00\20\00\28\02\00\28\02\24\11\00\00" "\0f\0b\20\01\28\02\00\10\ae\01\0b\36\01\01\7f\02\40\20\00" "\28\02\0c\22\01\20\00\28\02\10\47\0d\00\20\00\20\00\28\02" "\00\28\02\28\11\00\00\0f\0b\20\00\20\01\41\04\6a\36\02\0c" "\20\01\28\02\00\10\ae\01\0b\07\00\20\00\20\01\46\0b\3f\01" "\01\7f\02\40\20\00\28\02\18\22\02\20\00\28\02\1c\47\0d\00" "\20\00\20\01\10\ae\01\20\00\28\02\00\28\02\34\11\01\00\0f" "\0b\20\00\20\02\41\04\6a\36\02\18\20\02\20\01\36\02\00\20" "\01\10\ae\01\0b\04\00\20\00\0b\15\00\20\00\41\c0\0f\10\c8" "\01\22\00\41\04\6a\10\9b\01\1a\20\00\0b\13\00\20\00\20\00" "\28\02\00\41\74\6a\28\02\00\6a\10\c9\01\0b\0a\00\20\00\10" "\c9\01\10\8b\0d\0b\13\00\20\00\20\00\28\02\00\41\74\6a\28" "\02\00\6a\10\cb\01\0b\5c\00\20\00\20\01\36\02\04\20\00\41" "\00\3a\00\00\02\40\20\01\20\01\28\02\00\41\74\6a\28\02\00" "\6a\10\b7\01\45\0d\00\02\40\20\01\20\01\28\02\00\41\74\6a" "\28\02\00\6a\10\b8\01\45\0d\00\20\01\20\01\28\02\00\41\74" "\6a\28\02\00\6a\10\b8\01\10\b9\01\1a\0b\20\00\41\01\3a\00" "\00\0b\20\00\0b\92\01\01\01\7f\02\40\20\00\28\02\04\22\01" "\20\01\28\02\00\41\74\6a\28\02\00\6a\10\c0\01\45\0d\00\20" "\00\28\02\04\22\01\20\01\28\02\00\41\74\6a\28\02\00\6a\10" "\b7\01\45\0d\00\20\00\28\02\04\22\01\20\01\28\02\00\41\74" "\6a\28\02\00\6a\10\75\41\80\c0\00\71\45\0d\00\10\35\0d\00" "\20\00\28\02\04\22\01\20\01\28\02\00\41\74\6a\28\02\00\6a" "\10\c0\01\10\c2\01\41\7f\47\0d\00\20\00\28\02\04\22\01\20" "\01\28\02\00\41\74\6a\28\02\00\6a\41\01\10\bf\01\0b\20\00" "\0b\04\00\20\00\0b\2a\01\01\7f\02\40\20\00\28\02\00\22\02" "\45\0d\00\20\02\20\01\10\c7\01\10\ac\01\10\c6\01\45\0d\00" "\20\00\41\00\36\02\00\0b\20\00\0b\04\00\20\00\0b\13\00\20" "\00\20\01\20\02\20\00\28\02\00\28\02\30\11\03\00\0b\2a\01" "\01\7f\23\00\41\10\6b\22\01\24\00\20\00\20\01\41\0f\6a\20" "\01\41\0e\6a\10\d4\01\22\00\10\d5\01\20\01\41\10\6a\24\00" "\20\00\0b\0a\00\20\00\10\ab\02\10\ac\02\0b\18\00\20\00\10" "\dd\01\22\00\42\00\37\02\00\20\00\41\08\6a\41\00\36\02\00" "\0b\0a\00\20\00\10\d9\01\10\da\01\0b\0b\00\20\00\20\01\10" "\db\01\20\00\0b\0d\00\20\00\20\01\41\04\6a\10\ac\09\1a\0b" "\18\00\02\40\20\00\10\e3\01\45\0d\00\20\00\10\b0\02\0f\0b" "\20\00\10\b1\02\0b\04\00\20\00\0b\7d\01\02\7f\23\00\41\10" "\6b\22\02\24\00\02\40\20\00\10\e3\01\45\0d\00\20\00\10\de" "\01\20\00\10\b0\02\20\00\10\ea\01\10\b4\02\0b\20\00\20\01" "\10\b5\02\20\01\10\dd\01\21\03\20\00\10\dd\01\22\00\41\08" "\6a\20\03\41\08\6a\28\02\00\36\02\00\20\00\20\03\29\02\00" "\37\02\00\20\01\41\00\10\b6\02\20\01\10\b1\02\21\00\20\02" "\41\00\3a\00\0f\20\00\20\02\41\0f\6a\10\b7\02\20\02\41\10" "\6a\24\00\0b\1c\01\01\7f\20\00\28\02\00\21\02\20\00\20\01" "\28\02\00\36\02\00\20\01\20\02\36\02\00\0b\07\00\20\00\10" "\af\02\0b\07\00\20\00\10\b9\02\0b\2b\01\01\7f\23\00\41\10" "\6b\22\04\24\00\20\00\20\04\41\0f\6a\20\03\10\e1\01\22\03" "\20\01\20\02\10\e2\01\20\04\41\10\6a\24\00\20\03\0b\07\00" "\20\00\10\c2\02\0b\0c\00\20\00\10\ab\02\20\02\10\c4\02\0b" "\12\00\20\00\20\01\20\02\20\01\20\02\10\c5\02\10\c6\02\0b" "\0d\00\20\00\10\e4\01\2d\00\0b\41\07\76\0b\07\00\20\00\10" "\b3\02\0b\0a\00\20\00\10\db\02\10\8b\02\0b\18\00\02\40\20" "\00\10\e3\01\45\0d\00\20\00\10\eb\01\0f\0b\20\00\10\ec\01" "\0b\1f\01\01\7f\41\0a\21\01\02\40\20\00\10\e3\01\45\0d\00" "\20\00\10\ea\01\41\7f\6a\21\01\0b\20\01\0b\0b\00\20\00\20" "\01\41\00\10\a4\0d\0b\18\00\02\40\20\00\10\67\10\84\01\45" "\0d\00\10\67\41\7f\73\21\00\0b\20\00\0b\11\00\20\00\10\e4" "\01\28\02\08\41\ff\ff\ff\ff\07\71\0b\0a\00\20\00\10\e4\01" "\28\02\04\0b\0e\00\20\00\10\e4\01\2d\00\0b\41\ff\00\71\0b" "\07\00\20\00\10\e5\01\0b\0b\00\20\00\41\e8\9c\01\10\e2\04" "\0b\0f\00\20\00\20\00\28\02\00\28\02\1c\11\00\00\0b\09\00" "\20\00\20\01\10\f3\01\0b\1d\00\20\00\20\01\20\02\20\03\20" "\04\20\05\20\06\20\07\20\00\28\02\00\28\02\10\11\0d\00\0b" "\05\00\10\19\00\0b\29\01\02\7f\23\00\41\10\6b\22\02\24\00" "\20\02\41\0f\6a\20\01\20\00\10\dc\02\21\03\20\02\41\10\6a" "\24\00\20\01\20\00\20\03\1b\0b\1d\00\20\00\20\01\20\02\20" "\03\20\04\20\05\20\06\20\07\20\00\28\02\00\28\02\0c\11\0d" "\00\0b\0f\00\20\00\20\00\28\02\00\28\02\18\11\00\00\0b\17" "\00\20\00\20\01\20\02\20\03\20\04\20\00\28\02\00\28\02\14" "\11\09\00\0b\0d\00\20\01\28\02\00\20\02\28\02\00\48\0b\2b" "\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\41\08\6a\20\00" "\20\01\20\02\10\f9\01\20\03\28\02\0c\21\02\20\03\41\10\6a" "\24\00\20\02\0b\0d\00\20\00\20\01\20\02\20\03\10\fa\01\0b" "\0d\00\20\00\20\01\20\02\20\03\10\fb\01\0b\69\01\01\7f\23" "\00\41\20\6b\22\04\24\00\20\04\41\18\6a\20\01\20\02\10\fc" "\01\20\04\41\10\6a\20\04\41\0c\6a\20\04\28\02\18\20\04\28" "\02\1c\20\03\10\fd\01\10\fe\01\20\04\20\01\20\04\28\02\10" "\10\ff\01\36\02\0c\20\04\20\03\20\04\28\02\14\10\80\02\36" "\02\08\20\00\20\04\41\0c\6a\20\04\41\08\6a\10\81\02\20\04" "\41\20\6a\24\00\0b\0b\00\20\00\20\01\20\02\10\82\02\0b\07" "\00\20\00\10\84\02\0b\0d\00\20\00\20\02\20\03\20\04\10\83" "\02\0b\09\00\20\00\20\01\10\86\02\0b\09\00\20\00\20\01\10" "\87\02\0b\0c\00\20\00\20\01\20\02\10\85\02\1a\0b\38\01\01" "\7f\23\00\41\10\6b\22\03\24\00\20\03\20\01\10\88\02\36\02" "\0c\20\03\20\02\10\88\02\36\02\08\20\00\20\03\41\0c\6a\20" "\03\41\08\6a\10\89\02\1a\20\03\41\10\6a\24\00\0b\43\01\01" "\7f\23\00\41\10\6b\22\04\24\00\20\04\20\02\36\02\0c\20\03" "\20\01\20\02\20\01\6b\22\02\10\8c\02\1a\20\04\20\03\20\02" "\6a\36\02\08\20\00\20\04\41\0c\6a\20\04\41\08\6a\10\8d\02" "\20\04\41\10\6a\24\00\0b\07\00\20\00\10\da\01\0b\18\00\20" "\00\20\01\28\02\00\36\02\00\20\00\20\02\28\02\00\36\02\04" "\20\00\0b\09\00\20\00\20\01\10\8f\02\0b\0d\00\20\00\20\01" "\20\00\10\da\01\6b\6a\0b\07\00\20\00\10\8a\02\0b\18\00\20" "\00\20\01\28\02\00\36\02\00\20\00\20\02\28\02\00\36\02\04" "\20\00\0b\07\00\20\00\10\8b\02\0b\04\00\20\00\0b\15\00\02" "\40\20\02\45\0d\00\20\00\20\01\20\02\10\4c\1a\0b\20\00\0b" "\0c\00\20\00\20\01\20\02\10\8e\02\1a\0b\18\00\20\00\20\01" "\28\02\00\36\02\00\20\00\20\02\28\02\00\36\02\04\20\00\0b" "\09\00\20\00\20\01\10\90\02\0b\0d\00\20\00\20\01\20\00\10" "\8b\02\6b\6a\0b\2b\01\01\7f\23\00\41\10\6b\22\03\24\00\20" "\03\41\08\6a\20\00\20\01\20\02\10\92\02\20\03\28\02\0c\21" "\02\20\03\41\10\6a\24\00\20\02\0b\0d\00\20\00\20\01\20\02" "\20\03\10\93\02\0b\0d\00\20\00\20\01\20\02\20\03\10\94\02" "\0b\69\01\01\7f\23\00\41\20\6b\22\04\24\00\20\04\41\18\6a" "\20\01\20\02\10\95\02\20\04\41\10\6a\20\04\41\0c\6a\20\04" "\28\02\18\20\04\28\02\1c\20\03\10\96\02\10\97\02\20\04\20" "\01\20\04\28\02\10\10\98\02\36\02\0c\20\04\20\03\20\04\28" "\02\14\10\99\02\36\02\08\20\00\20\04\41\0c\6a\20\04\41\08" "\6a\10\9a\02\20\04\41\20\6a\24\00\0b\0b\00\20\00\20\01\20" "\02\10\9b\02\0b\07\00\20\00\10\9d\02\0b\0d\00\20\00\20\02" "\20\03\20\04\10\9c\02\0b\09\00\20\00\20\01\10\9f\02\0b\09" "\00\20\00\20\01\10\a0\02\0b\0c\00\20\00\20\01\20\02\10\9e" "\02\1a\0b\38\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\20" "\01\10\a1\02\36\02\0c\20\03\20\02\10\a1\02\36\02\08\20\00" "\20\03\41\0c\6a\20\03\41\08\6a\10\a2\02\1a\20\03\41\10\6a" "\24\00\0b\46\01\01\7f\23\00\41\10\6b\22\04\24\00\20\04\20" "\02\36\02\0c\20\03\20\01\20\02\20\01\6b\22\02\41\02\75\10" "\a5\02\1a\20\04\20\03\20\02\6a\36\02\08\20\00\20\04\41\0c" "\6a\20\04\41\08\6a\10\a6\02\20\04\41\10\6a\24\00\0b\07\00" "\20\00\10\a8\02\0b\18\00\20\00\20\01\28\02\00\36\02\00\20" "\00\20\02\28\02\00\36\02\04\20\00\0b\09\00\20\00\20\01\10" "\a9\02\0b\0d\00\20\00\20\01\20\00\10\a8\02\6b\6a\0b\07\00" "\20\00\10\a3\02\0b\18\00\20\00\20\01\28\02\00\36\02\00\20" "\00\20\02\28\02\00\36\02\04\20\00\0b\07\00\20\00\10\a4\02" "\0b\04\00\20\00\0b\18\00\02\40\20\02\45\0d\00\20\00\20\01" "\20\02\41\02\74\10\4c\1a\0b\20\00\0b\0c\00\20\00\20\01\20" "\02\10\a7\02\1a\0b\18\00\20\00\20\01\28\02\00\36\02\00\20" "\00\20\02\28\02\00\36\02\04\20\00\0b\04\00\20\00\0b\09\00" "\20\00\20\01\10\aa\02\0b\0d\00\20\00\20\01\20\00\10\a4\02" "\6b\6a\0b\04\00\20\00\0b\07\00\20\00\10\ad\02\0b\07\00\20" "\00\10\ae\02\0b\04\00\20\00\0b\04\00\20\00\0b\0a\00\20\00" "\10\dd\01\28\02\00\0b\0a\00\20\00\10\dd\01\10\b2\02\0b\04" "\00\20\00\0b\04\00\20\00\0b\0b\00\20\00\20\01\20\02\10\b8" "\02\0b\09\00\20\00\20\01\10\ba\02\0b\31\01\01\7f\20\00\10" "\dd\01\22\02\20\02\2d\00\0b\41\80\01\71\20\01\41\ff\00\71" "\72\3a\00\0b\20\00\10\dd\01\22\00\20\00\2d\00\0b\41\ff\00" "\71\3a\00\0b\0b\0c\00\20\00\20\01\2d\00\00\3a\00\00\0b\0b" "\00\20\01\20\02\41\01\10\bb\02\0b\07\00\20\00\10\c1\02\0b" "\0e\00\20\01\10\de\01\1a\20\00\10\de\01\1a\0b\1e\00\02\40" "\20\02\10\bc\02\45\0d\00\20\00\20\01\20\02\10\bd\02\0f\0b" "\20\00\20\01\10\be\02\0b\07\00\20\00\41\08\4b\0b\09\00\20" "\00\20\02\10\bf\02\0b\07\00\20\00\10\c0\02\0b\09\00\20\00" "\20\01\10\8f\0d\0b\07\00\20\00\10\8b\0d\0b\04\00\20\00\0b" "\07\00\20\00\10\c3\02\0b\04\00\20\00\0b\04\00\20\00\0b\09" "\00\20\00\20\01\10\c7\02\0b\b8\01\01\02\7f\23\00\41\10\6b" "\22\04\24\00\02\40\20\00\10\c8\02\20\03\49\0d\00\02\40\02" "\40\20\03\10\c9\02\45\0d\00\20\00\20\03\10\b6\02\20\00\10" "\b1\02\21\05\0c\01\0b\20\04\41\08\6a\20\00\10\de\01\20\03" "\10\ca\02\41\01\6a\10\cb\02\20\04\28\02\08\22\05\20\04\28" "\02\0c\10\cc\02\20\00\20\05\10\cd\02\20\00\20\04\28\02\0c" "\10\ce\02\20\00\20\03\10\cf\02\0b\02\40\03\40\20\01\20\02" "\46\0d\01\20\05\20\01\10\b7\02\20\05\41\01\6a\21\05\20\01" "\41\01\6a\21\01\0c\00\0b\00\0b\20\04\41\00\3a\00\07\20\05" "\20\04\41\07\6a\10\b7\02\20\04\41\10\6a\24\00\0f\0b\20\00" "\10\d0\02\00\0b\07\00\20\01\20\00\6b\0b\19\00\20\00\10\e0" "\01\10\d1\02\22\00\20\00\10\d2\02\41\01\76\4b\76\41\70\6a" "\0b\07\00\20\00\41\0b\49\0b\2d\01\01\7f\41\0a\21\01\02\40" "\20\00\41\0b\49\0d\00\20\00\41\01\6a\10\d5\02\22\00\20\00" "\41\7f\6a\22\00\20\00\41\0b\46\1b\21\01\0b\20\01\0b\19\00" "\20\01\20\02\10\d4\02\21\01\20\00\20\02\36\02\04\20\00\20" "\01\36\02\00\0b\02\00\0b\0c\00\20\00\10\dd\01\20\01\36\02" "\00\0b\3a\01\01\7f\20\00\10\dd\01\22\02\20\02\28\02\08\41" "\80\80\80\80\78\71\20\01\41\ff\ff\ff\ff\07\71\72\36\02\08" "\20\00\10\dd\01\22\00\20\00\28\02\08\41\80\80\80\80\78\72" "\36\02\08\0b\0c\00\20\00\10\dd\01\20\01\36\02\04\0b\09\00" "\41\f3\0a\10\d3\02\00\0b\05\00\10\d2\02\0b\05\00\10\d6\02" "\0b\05\00\10\19\00\0b\1a\00\02\40\20\00\10\d1\02\20\01\4f" "\0d\00\10\d7\02\00\0b\20\01\41\01\10\d8\02\0b\0a\00\20\00" "\41\0f\6a\41\70\71\0b\04\00\41\7f\0b\05\00\10\19\00\0b\1a" "\00\02\40\20\01\10\bc\02\45\0d\00\20\00\20\01\10\d9\02\0f" "\0b\20\00\10\da\02\0b\09\00\20\00\20\01\10\8d\0d\0b\07\00" "\20\00\10\8a\0d\0b\18\00\02\40\20\00\10\e3\01\45\0d\00\20" "\00\10\dd\02\0f\0b\20\00\10\de\02\0b\0d\00\20\01\28\02\00" "\20\02\28\02\00\49\0b\0a\00\20\00\10\e4\01\28\02\00\0b\0a" "\00\20\00\10\e4\01\10\df\02\0b\04\00\20\00\0b\30\01\01\7f" "\02\40\20\00\28\02\00\22\01\45\0d\00\02\40\20\01\10\81\01" "\10\67\10\84\01\0d\00\20\00\28\02\00\45\0f\0b\20\00\41\00" "\36\02\00\0b\41\01\0b\11\00\20\00\20\01\20\00\28\02\00\28" "\02\1c\11\01\00\0b\31\01\01\7f\02\40\20\00\28\02\00\22\01" "\45\0d\00\02\40\20\01\10\c4\01\10\ac\01\10\c6\01\0d\00\20" "\00\28\02\00\45\0f\0b\20\00\41\00\36\02\00\0b\41\01\0b\11" "\00\20\00\20\01\20\00\28\02\00\28\02\2c\11\01\00\0b\b2\01" "\01\03\7f\41\d4\fd\00\10\45\02\40\41\00\28\02\d8\7d\22\00" "\45\0d\00\41\00\28\02\dc\7d\21\01\03\40\41\00\20\01\41\7f" "\6a\22\02\36\02\dc\7d\02\40\20\01\41\01\48\0d\00\03\40\41" "\00\28\02\d8\7d\20\02\41\02\74\6a\22\02\41\84\01\6a\28\02" "\00\21\00\20\02\41\04\6a\28\02\00\21\02\41\d4\fd\00\10\46" "\20\00\20\02\11\04\00\41\d4\fd\00\10\45\41\00\41\00\28\02" "\dc\7d\22\00\41\7f\6a\22\02\36\02\dc\7d\20\00\41\00\4a\0d" "\00\0b\41\00\28\02\d8\7d\21\00\0b\20\00\28\02\00\21\00\41" "\20\21\01\41\00\41\20\36\02\dc\7d\41\00\20\00\36\02\d8\7d" "\20\00\0d\00\0b\0b\0b\99\01\01\02\7f\41\d4\fd\00\10\45\02" "\40\41\00\28\02\d8\7d\22\03\0d\00\41\e0\fd\00\21\03\41\00" "\41\e0\fd\00\36\02\d8\7d\0b\02\40\02\40\41\00\28\02\dc\7d" "\22\04\41\20\47\0d\00\02\40\41\84\02\41\01\10\34\22\03\0d" "\00\41\7f\21\03\0c\02\0b\41\00\21\04\20\03\41\00\28\02\d8" "\7d\36\02\00\41\00\20\03\36\02\d8\7d\0b\20\03\20\04\41\02" "\74\6a\22\03\41\84\01\6a\20\01\36\02\00\20\03\41\04\6a\20" "\00\36\02\00\41\00\21\03\41\00\20\04\41\01\6a\36\02\dc\7d" "\0b\41\d4\fd\00\10\46\20\03\0b\31\01\01\7f\23\00\41\10\6b" "\22\02\24\00\20\00\20\02\41\0f\6a\20\02\41\0e\6a\10\d4\01" "\22\00\20\01\20\01\10\e7\02\10\9c\0d\20\02\41\10\6a\24\00" "\20\00\0b\07\00\20\00\10\f1\02\0b\40\01\02\7f\20\00\28\02" "\28\21\02\03\40\02\40\20\02\0d\00\0f\0b\20\01\20\00\20\00" "\28\02\24\20\02\41\7f\6a\22\02\41\02\74\22\03\6a\28\02\00" "\20\00\28\02\20\20\03\6a\28\02\00\11\06\00\0c\00\0b\00\0b" "\0d\00\20\00\20\01\41\1c\6a\10\ac\09\1a\0b\09\00\20\00\20" "\01\10\ec\02\0b\27\00\20\00\20\00\28\02\18\45\20\01\72\22" "\01\36\02\10\02\40\20\00\28\02\14\20\01\71\45\0d\00\41\86" "\0a\10\ef\02\00\0b\0b\29\01\02\7f\23\00\41\10\6b\22\02\24" "\00\20\02\41\0f\6a\20\00\20\01\10\dc\02\21\03\20\02\41\10" "\6a\24\00\20\01\20\00\20\03\1b\0b\3b\00\20\00\41\f0\13\41" "\08\6a\36\02\00\20\00\41\00\10\e8\02\20\00\41\1c\6a\10\ad" "\09\1a\20\00\28\02\20\10\2d\20\00\28\02\24\10\2d\20\00\28" "\02\30\10\2d\20\00\28\02\3c\10\2d\20\00\0b\0d\00\20\00\10" "\ed\02\1a\20\00\10\8b\0d\0b\05\00\10\19\00\0b\40\00\20\00" "\41\00\36\02\14\20\00\20\01\36\02\18\20\00\41\00\36\02\0c" "\20\00\42\82\a0\80\80\e0\00\37\02\04\20\00\20\01\45\36\02" "\10\20\00\41\20\6a\41\00\41\28\10\15\1a\20\00\41\1c\6a\10" "\ab\09\1a\0b\06\00\20\00\10\28\0b\0e\00\20\00\20\01\28\02" "\00\36\02\00\20\00\0b\04\00\20\00\0b\04\00\41\00\0b\04\00" "\42\00\0b\9d\01\01\03\7f\41\7f\21\02\02\40\20\00\41\7f\46" "\0d\00\02\40\02\40\20\01\28\02\4c\41\00\4e\0d\00\41\01\21" "\03\0c\01\0b\20\01\10\49\45\21\03\0b\02\40\02\40\02\40\20" "\01\28\02\04\22\04\0d\00\20\01\10\4f\1a\20\01\28\02\04\22" "\04\45\0d\01\0b\20\04\20\01\28\02\2c\41\78\6a\4b\0d\01\0b" "\20\03\0d\01\20\01\10\4a\41\7f\0f\0b\20\01\20\04\41\7f\6a" "\22\02\36\02\04\20\02\20\00\3a\00\00\20\01\20\01\28\02\00" "\41\6f\71\36\02\00\02\40\20\03\0d\00\20\01\10\4a\0b\20\00" "\41\ff\01\71\21\02\0b\20\02\0b\04\00\41\2a\0b\05\00\10\f7" "\02\0b\06\00\41\90\90\01\0b\17\00\41\00\41\b4\fd\00\36\02" "\f0\90\01\41\00\10\f8\02\36\02\a8\90\01\0b\40\01\02\7f\23" "\00\41\10\6b\22\01\24\00\41\7f\21\02\02\40\20\00\10\4f\0d" "\00\20\00\20\01\41\0f\6a\41\01\20\00\28\02\20\11\03\00\41" "\01\47\0d\00\20\01\2d\00\0f\21\02\0b\20\01\41\10\6a\24\00" "\20\02\0b\07\00\20\00\10\fd\02\0b\5a\01\01\7f\02\40\02\40" "\20\00\28\02\4c\22\01\41\00\48\0d\00\20\01\45\0d\01\20\01" "\41\ff\ff\ff\ff\03\71\10\f9\02\28\02\18\47\0d\01\0b\02\40" "\20\00\28\02\04\22\01\20\00\28\02\08\46\0d\00\20\00\20\01" "\41\01\6a\36\02\04\20\01\2d\00\00\0f\0b\20\00\10\fb\02\0f" "\0b\20\00\10\fe\02\0b\62\01\02\7f\02\40\20\00\41\cc\00\6a" "\22\01\10\ff\02\45\0d\00\20\00\10\49\1a\0b\02\40\02\40\20" "\00\28\02\04\22\02\20\00\28\02\08\46\0d\00\20\00\20\02\41" "\01\6a\36\02\04\20\02\2d\00\00\21\00\0c\01\0b\20\00\10\fb" "\02\21\00\0b\02\40\20\01\10\80\03\41\80\80\80\80\04\71\45" "\0d\00\20\01\10\81\03\0b\20\00\0b\1b\01\01\7f\20\00\20\00" "\28\02\00\22\01\41\ff\ff\ff\ff\03\20\01\1b\36\02\00\20\01" "\0b\14\01\01\7f\20\00\28\02\00\21\01\20\00\41\00\36\02\00" "\20\01\0b\09\00\20\00\41\01\10\40\1a\0b\7c\01\02\7f\02\40" "\02\40\20\00\28\02\4c\41\00\4e\0d\00\41\01\21\02\0c\01\0b" "\20\00\10\49\45\21\02\0b\02\40\02\40\20\01\0d\00\20\00\28" "\02\48\21\03\0c\01\0b\02\40\20\00\28\02\88\01\0d\00\20\00" "\41\80\15\41\e8\14\10\f9\02\28\02\60\28\02\00\1b\36\02\88" "\01\0b\20\00\28\02\48\22\03\0d\00\20\00\41\7f\41\01\20\01" "\41\01\48\1b\22\03\36\02\48\0b\02\40\20\02\0d\00\20\00\10" "\4a\0b\20\03\0b\d0\02\01\02\7f\02\40\20\01\0d\00\41\00\0f" "\0b\02\40\02\40\20\02\45\0d\00\02\40\20\01\2d\00\00\22\03" "\c0\22\04\41\00\48\0d\00\02\40\20\00\45\0d\00\20\00\20\03" "\36\02\00\0b\20\04\41\00\47\0f\0b\02\40\10\f9\02\28\02\60" "\28\02\00\0d\00\41\01\21\01\20\00\45\0d\02\20\00\20\04\41" "\ff\bf\03\71\36\02\00\41\01\0f\0b\20\03\41\be\7e\6a\22\04" "\41\32\4b\0d\00\20\04\41\02\74\41\a0\15\6a\28\02\00\21\04" "\02\40\20\02\41\03\4b\0d\00\20\04\20\02\41\06\6c\41\7a\6a" "\74\41\00\48\0d\01\0b\20\01\2d\00\01\22\03\41\03\76\22\02" "\41\70\6a\20\02\20\04\41\1a\75\6a\72\41\07\4b\0d\00\02\40" "\20\03\41\80\7f\6a\20\04\41\06\74\72\22\02\41\00\48\0d\00" "\41\02\21\01\20\00\45\0d\02\20\00\20\02\36\02\00\41\02\0f" "\0b\20\01\2d\00\02\41\80\7f\6a\22\04\41\3f\4b\0d\00\20\04" "\20\02\41\06\74\22\02\72\21\04\02\40\20\02\41\00\48\0d\00" "\41\03\21\01\20\00\45\0d\02\20\00\20\04\36\02\00\41\03\0f" "\0b\20\01\2d\00\03\41\80\7f\6a\22\02\41\3f\4b\0d\00\41\04" "\21\01\20\00\45\0d\01\20\00\20\02\20\04\41\06\74\72\36\02" "\00\41\04\0f\0b\10\24\41\19\36\02\00\41\7f\21\01\0b\20\01" "\0b\d4\02\01\04\7f\20\03\41\94\91\01\20\03\1b\22\04\28\02" "\00\21\03\02\40\02\40\02\40\02\40\20\01\0d\00\20\03\0d\01" "\41\00\0f\0b\41\7e\21\05\20\02\45\0d\01\02\40\02\40\20\03" "\45\0d\00\20\02\21\05\0c\01\0b\02\40\20\01\2d\00\00\22\05" "\c0\22\03\41\00\48\0d\00\02\40\20\00\45\0d\00\20\00\20\05" "\36\02\00\0b\20\03\41\00\47\0f\0b\02\40\10\f9\02\28\02\60" "\28\02\00\0d\00\41\01\21\05\20\00\45\0d\03\20\00\20\03\41" "\ff\bf\03\71\36\02\00\41\01\0f\0b\20\05\41\be\7e\6a\22\03" "\41\32\4b\0d\01\20\03\41\02\74\41\a0\15\6a\28\02\00\21\03" "\20\02\41\7f\6a\22\05\45\0d\03\20\01\41\01\6a\21\01\0b\20" "\01\2d\00\00\22\06\41\03\76\22\07\41\70\6a\20\03\41\1a\75" "\20\07\6a\72\41\07\4b\0d\00\03\40\20\05\41\7f\6a\21\05\02" "\40\20\06\41\ff\01\71\41\80\7f\6a\20\03\41\06\74\72\22\03" "\41\00\48\0d\00\20\04\41\00\36\02\00\02\40\20\00\45\0d\00" "\20\00\20\03\36\02\00\0b\20\02\20\05\6b\0f\0b\20\05\45\0d" "\03\20\01\41\01\6a\22\01\2d\00\00\22\06\41\c0\01\71\41\80" "\01\46\0d\00\0b\0b\20\04\41\00\36\02\00\10\24\41\19\36\02" "\00\41\7f\21\05\0b\20\05\0f\0b\20\04\20\03\36\02\00\41\7e" "\0b\3e\01\02\7f\10\f9\02\22\01\28\02\60\21\02\02\40\20\00" "\28\02\48\41\00\4a\0d\00\20\00\41\01\10\82\03\1a\0b\20\01" "\20\00\28\02\88\01\36\02\60\20\00\10\86\03\21\00\20\01\20" "\02\36\02\60\20\00\0b\9e\02\01\04\7f\23\00\41\20\6b\22\01" "\24\00\02\40\02\40\02\40\20\00\28\02\04\22\02\20\00\28\02" "\08\22\03\46\0d\00\20\01\41\1c\6a\20\02\20\03\20\02\6b\10" "\83\03\22\02\41\7f\46\0d\00\20\00\20\00\28\02\04\20\02\6a" "\20\02\45\6a\36\02\04\0c\01\0b\20\01\42\00\37\03\10\41\00" "\21\02\03\40\20\02\21\04\02\40\02\40\20\00\28\02\04\22\02" "\20\00\28\02\08\46\0d\00\20\00\20\02\41\01\6a\36\02\04\20" "\01\20\02\2d\00\00\3a\00\0f\0c\01\0b\20\01\20\00\10\fb\02" "\22\02\3a\00\0f\20\02\41\7f\4a\0d\00\41\7f\21\02\20\04\41" "\01\71\45\0d\03\20\00\20\00\28\02\00\41\20\72\36\02\00\10" "\24\41\19\36\02\00\0c\03\0b\41\01\21\02\20\01\41\1c\6a\20" "\01\41\0f\6a\41\01\20\01\41\10\6a\10\84\03\22\03\41\7e\46" "\0d\00\0b\41\7f\21\02\20\03\41\7f\47\0d\00\20\04\41\01\71" "\45\0d\01\20\00\20\00\28\02\00\41\20\72\36\02\00\20\01\2d" "\00\0f\20\00\10\f6\02\1a\0c\01\0b\20\01\28\02\1c\21\02\0b" "\20\01\41\20\6a\24\00\20\02\0b\32\01\02\7f\02\40\20\00\28" "\02\4c\41\7f\4a\0d\00\20\00\10\85\03\0f\0b\20\00\10\49\21" "\01\20\00\10\85\03\21\02\02\40\20\01\45\0d\00\20\00\10\4a" "\0b\20\02\0b\07\00\20\00\10\87\03\0b\a1\02\01\01\7f\41\01" "\21\03\02\40\02\40\20\00\45\0d\00\20\01\41\ff\00\4d\0d\01" "\02\40\02\40\10\f9\02\28\02\60\28\02\00\0d\00\20\01\41\80" "\7f\71\41\80\bf\03\46\0d\03\10\24\41\19\36\02\00\0c\01\0b" "\02\40\20\01\41\ff\0f\4b\0d\00\20\00\20\01\41\3f\71\41\80" "\01\72\3a\00\01\20\00\20\01\41\06\76\41\c0\01\72\3a\00\00" "\41\02\0f\0b\02\40\02\40\20\01\41\80\b0\03\49\0d\00\20\01" "\41\80\40\71\41\80\c0\03\47\0d\01\0b\20\00\20\01\41\3f\71" "\41\80\01\72\3a\00\02\20\00\20\01\41\0c\76\41\e0\01\72\3a" "\00\00\20\00\20\01\41\06\76\41\3f\71\41\80\01\72\3a\00\01" "\41\03\0f\0b\02\40\20\01\41\80\80\7c\6a\41\ff\ff\3f\4b\0d" "\00\20\00\20\01\41\3f\71\41\80\01\72\3a\00\03\20\00\20\01" "\41\12\76\41\f0\01\72\3a\00\00\20\00\20\01\41\06\76\41\3f" "\71\41\80\01\72\3a\00\02\20\00\20\01\41\0c\76\41\3f\71\41" "\80\01\72\3a\00\01\41\04\0f\0b\10\24\41\19\36\02\00\0b\41" "\7f\21\03\0b\20\03\0f\0b\20\00\20\01\3a\00\00\41\01\0b\90" "\02\01\07\7f\23\00\41\10\6b\22\02\24\00\10\f9\02\22\03\28" "\02\60\21\04\02\40\02\40\20\01\28\02\4c\41\00\4e\0d\00\41" "\01\21\05\0c\01\0b\20\01\10\49\45\21\05\0b\02\40\20\01\28" "\02\48\41\00\4a\0d\00\20\01\41\01\10\82\03\1a\0b\20\03\20" "\01\28\02\88\01\36\02\60\41\00\21\06\02\40\20\01\28\02\04" "\0d\00\20\01\10\4f\1a\20\01\28\02\04\45\21\06\0b\41\7f\21" "\07\02\40\20\00\41\7f\46\0d\00\20\06\0d\00\20\02\41\0c\6a" "\20\00\41\00\10\89\03\22\06\41\00\48\0d\00\20\01\28\02\04" "\22\08\20\01\28\02\2c\20\06\6a\41\78\6a\49\0d\00\02\40\02" "\40\20\00\41\ff\00\4b\0d\00\20\01\20\08\41\7f\6a\22\07\36" "\02\04\20\07\20\00\3a\00\00\0c\01\0b\20\01\20\08\20\06\6b" "\22\07\36\02\04\20\07\20\02\41\0c\6a\20\06\10\27\1a\0b\20" "\01\20\01\28\02\00\41\6f\71\36\02\00\20\00\21\07\0b\02\40" "\20\05\0d\00\20\01\10\4a\0b\20\03\20\04\36\02\60\20\02\41" "\10\6a\24\00\20\07\0b\90\01\01\03\7f\23\00\41\10\6b\22\02" "\24\00\20\02\20\01\3a\00\0f\02\40\02\40\20\00\28\02\10\22" "\03\0d\00\41\7f\21\03\20\00\10\50\0d\01\20\00\28\02\10\21" "\03\0b\02\40\20\00\28\02\14\22\04\20\03\46\0d\00\20\00\28" "\02\50\20\01\41\ff\01\71\22\03\46\0d\00\20\00\20\04\41\01" "\6a\36\02\14\20\04\20\01\3a\00\00\0c\01\0b\41\7f\21\03\20" "\00\20\02\41\0f\6a\41\01\20\00\28\02\24\11\03\00\41\01\47" "\0d\00\20\02\2d\00\0f\21\03\0b\20\02\41\10\6a\24\00\20\03" "\0b\15\00\02\40\20\00\0d\00\41\00\0f\0b\20\00\20\01\41\00" "\10\89\03\0b\80\02\01\04\7f\23\00\41\10\6b\22\02\24\00\10" "\f9\02\22\03\28\02\60\21\04\02\40\20\01\28\02\48\41\00\4a" "\0d\00\20\01\41\01\10\82\03\1a\0b\20\03\20\01\28\02\88\01" "\36\02\60\02\40\02\40\02\40\02\40\20\00\41\ff\00\4b\0d\00" "\02\40\20\01\28\02\50\20\00\46\0d\00\20\01\28\02\14\22\05" "\20\01\28\02\10\46\0d\00\20\01\20\05\41\01\6a\36\02\14\20" "\05\20\00\3a\00\00\0c\04\0b\20\01\20\00\10\8b\03\21\00\0c" "\01\0b\02\40\20\01\28\02\14\22\05\41\04\6a\20\01\28\02\10" "\4f\0d\00\20\05\20\00\10\8c\03\22\05\41\00\48\0d\02\20\01" "\20\01\28\02\14\20\05\6a\36\02\14\0c\01\0b\20\02\41\0c\6a" "\20\00\10\8c\03\22\05\41\00\48\0d\01\20\02\41\0c\6a\20\05" "\20\01\10\51\20\05\49\0d\01\0b\20\00\41\7f\47\0d\01\0b\20" "\01\20\01\28\02\00\41\20\72\36\02\00\41\7f\21\00\0b\20\03" "\20\04\36\02\60\20\02\41\10\6a\24\00\20\00\0b\36\01\01\7f" "\02\40\20\01\28\02\4c\41\7f\4a\0d\00\20\00\20\01\10\8d\03" "\0f\0b\20\01\10\49\21\02\20\00\20\01\10\8d\03\21\00\02\40" "\20\02\45\0d\00\20\01\10\4a\0b\20\00\0b\15\00\41\c0\96\01" "\10\a6\03\1a\41\3c\41\00\41\80\08\10\e5\02\1a\0b\0a\00\41" "\c0\96\01\10\a8\03\1a\0b\81\03\01\03\7f\41\c4\96\01\41\00" "\28\02\9c\14\22\01\41\fc\96\01\10\92\03\1a\41\98\91\01\41" "\c4\96\01\10\93\03\1a\41\84\97\01\41\00\28\02\a0\14\22\02" "\41\b4\97\01\10\94\03\1a\41\c8\92\01\41\84\97\01\10\95\03" "\1a\41\bc\97\01\41\00\28\02\a4\14\22\03\41\ec\97\01\10\94" "\03\1a\41\f0\93\01\41\bc\97\01\10\95\03\1a\41\98\95\01\41" "\f0\93\01\41\00\28\02\f0\93\01\41\74\6a\28\02\00\6a\10\7d" "\10\95\03\1a\41\98\91\01\41\00\28\02\98\91\01\41\74\6a\28" "\02\00\6a\41\c8\92\01\10\96\03\1a\41\f0\93\01\41\00\28\02" "\f0\93\01\41\74\6a\28\02\00\6a\10\97\03\1a\41\f0\93\01\41" "\00\28\02\f0\93\01\41\74\6a\28\02\00\6a\41\c8\92\01\10\96" "\03\1a\41\f4\97\01\20\01\41\ac\98\01\10\98\03\1a\41\f0\91" "\01\41\f4\97\01\10\99\03\1a\41\b4\98\01\20\02\41\e4\98\01" "\10\9a\03\1a\41\9c\93\01\41\b4\98\01\10\9b\03\1a\41\ec\98" "\01\20\03\41\9c\99\01\10\9a\03\1a\41\c4\94\01\41\ec\98\01" "\10\9b\03\1a\41\ec\95\01\41\c4\94\01\41\00\28\02\c4\94\01" "\41\74\6a\28\02\00\6a\10\c0\01\10\9b\03\1a\41\f0\91\01\41" "\00\28\02\f0\91\01\41\74\6a\28\02\00\6a\41\9c\93\01\10\9c" "\03\1a\41\c4\94\01\41\00\28\02\c4\94\01\41\74\6a\28\02\00" "\6a\10\97\03\1a\41\c4\94\01\41\00\28\02\c4\94\01\41\74\6a" "\28\02\00\6a\41\9c\93\01\10\9c\03\1a\20\00\0b\6a\01\01\7f" "\23\00\41\10\6b\22\03\24\00\20\00\10\57\22\00\20\02\36\02" "\28\20\00\20\01\36\02\20\20\00\41\ec\16\41\08\6a\36\02\00" "\10\67\21\02\20\00\41\00\3a\00\34\20\00\20\02\36\02\30\20" "\03\41\0c\6a\20\00\10\d8\01\20\00\20\03\41\0c\6a\20\00\28" "\02\00\28\02\08\11\02\00\20\03\41\0c\6a\10\ad\09\1a\20\03" "\41\10\6a\24\00\20\00\0b\34\01\01\7f\20\00\41\08\6a\10\9d" "\03\21\02\20\00\41\c8\0d\41\0c\6a\36\02\00\20\02\41\c8\0d" "\41\20\6a\36\02\00\20\00\41\00\36\02\04\20\02\20\01\10\9e" "\03\20\00\0b\61\01\01\7f\23\00\41\10\6b\22\03\24\00\20\00" "\10\57\22\00\20\01\36\02\20\20\00\41\d0\17\41\08\6a\36\02" "\00\20\03\41\0c\6a\20\00\10\d8\01\20\03\41\0c\6a\10\ee\01" "\21\01\20\03\41\0c\6a\10\ad\09\1a\20\00\20\02\36\02\28\20" "\00\20\01\36\02\24\20\00\20\01\10\ef\01\3a\00\2c\20\03\41" "\10\6a\24\00\20\00\0b\2d\01\01\7f\20\00\41\04\6a\10\9d\03" "\21\02\20\00\41\f8\0d\41\0c\6a\36\02\00\20\02\41\f8\0d\41" "\20\6a\36\02\00\20\02\20\01\10\9e\03\20\00\0b\14\01\01\7f" "\20\00\28\02\48\21\02\20\00\20\01\36\02\48\20\02\0b\0e\00" "\20\00\41\80\c0\00\10\9f\03\1a\20\00\0b\6c\01\01\7f\23\00" "\41\10\6b\22\03\24\00\20\00\10\9f\01\22\00\20\02\36\02\28" "\20\00\20\01\36\02\20\20\00\41\b8\18\41\08\6a\36\02\00\10" "\ac\01\21\02\20\00\41\00\3a\00\34\20\00\20\02\36\02\30\20" "\03\41\0c\6a\20\00\10\a0\03\20\00\20\03\41\0c\6a\20\00\28" "\02\00\28\02\08\11\02\00\20\03\41\0c\6a\10\ad\09\1a\20\03" "\41\10\6a\24\00\20\00\0b\34\01\01\7f\20\00\41\08\6a\10\a1" "\03\21\02\20\00\41\e8\0e\41\0c\6a\36\02\00\20\02\41\e8\0e" "\41\20\6a\36\02\00\20\00\41\00\36\02\04\20\02\20\01\10\a2" "\03\20\00\0b\62\01\01\7f\23\00\41\10\6b\22\03\24\00\20\00" "\10\9f\01\22\00\20\01\36\02\20\20\00\41\9c\19\41\08\6a\36" "\02\00\20\03\41\0c\6a\20\00\10\a0\03\20\03\41\0c\6a\10\a3" "\03\21\01\20\03\41\0c\6a\10\ad\09\1a\20\00\20\02\36\02\28" "\20\00\20\01\36\02\24\20\00\20\01\10\a4\03\3a\00\2c\20\03" "\41\10\6a\24\00\20\00\0b\2d\01\01\7f\20\00\41\04\6a\10\a1" "\03\21\02\20\00\41\98\0f\41\0c\6a\36\02\00\20\02\41\98\0f" "\41\20\6a\36\02\00\20\02\20\01\10\a2\03\20\00\0b\14\01\01" "\7f\20\00\28\02\48\21\02\20\00\20\01\36\02\48\20\02\0b\14" "\00\20\00\10\b4\03\22\00\41\c8\0f\41\08\6a\36\02\00\20\00" "\0b\17\00\20\00\20\01\10\f0\02\20\00\41\00\36\02\48\20\00" "\10\67\36\02\4c\0b\15\01\01\7f\20\00\20\00\28\02\04\22\02" "\20\01\72\36\02\04\20\02\0b\0d\00\20\00\20\01\41\04\6a\10" "\ac\09\1a\0b\14\00\20\00\10\b4\03\22\00\41\dc\11\41\08\6a" "\36\02\00\20\00\0b\18\00\20\00\20\01\10\f0\02\20\00\41\00" "\36\02\48\20\00\10\ac\01\36\02\4c\0b\0b\00\20\00\41\f0\9c" "\01\10\e2\04\0b\0f\00\20\00\20\00\28\02\00\28\02\1c\11\00" "\00\0b\22\00\41\c8\92\01\10\74\1a\41\98\95\01\10\74\1a\41" "\9c\93\01\10\b9\01\1a\41\ec\95\01\10\b9\01\1a\20\00\0b\2c" "\00\02\40\41\00\2d\00\a5\99\01\0d\00\41\a4\99\01\10\91\03" "\1a\41\3d\41\00\41\80\08\10\e5\02\1a\41\00\41\01\3a\00\a5" "\99\01\0b\20\00\0b\0a\00\41\a4\99\01\10\a5\03\1a\0b\04\00" "\20\00\0b\09\00\20\00\10\55\10\8b\0d\0b\39\00\20\00\20\01" "\10\ee\01\22\01\36\02\24\20\00\20\01\10\f5\01\36\02\2c\20" "\00\20\00\28\02\24\10\ef\01\3a\00\35\02\40\20\00\28\02\2c" "\41\09\48\0d\00\41\8a\09\10\ce\06\00\0b\0b\09\00\20\00\41" "\00\10\ac\03\0b\d2\03\02\05\7f\01\7e\23\00\41\20\6b\22\02" "\24\00\02\40\02\40\20\00\2d\00\34\45\0d\00\20\00\28\02\30" "\21\03\20\01\45\0d\01\10\67\21\04\20\00\41\00\3a\00\34\20" "\00\20\04\36\02\30\0c\01\0b\02\40\02\40\20\00\2d\00\35\45" "\0d\00\20\00\28\02\20\20\02\41\18\6a\10\b0\03\45\0d\01\20" "\02\2c\00\18\22\04\10\69\21\03\02\40\02\40\20\01\0d\00\20" "\03\20\00\28\02\20\10\af\03\45\0d\03\0c\01\0b\20\00\20\03" "\36\02\30\0b\20\04\10\69\21\03\0c\02\0b\20\02\41\01\36\02" "\18\41\00\21\03\20\02\41\18\6a\20\00\41\2c\6a\10\b1\03\28" "\02\00\22\05\41\00\20\05\41\00\4a\1b\21\06\02\40\03\40\20" "\03\20\06\46\0d\01\20\00\28\02\20\10\fc\02\22\04\41\7f\46" "\0d\02\20\02\41\18\6a\20\03\6a\20\04\3a\00\00\20\03\41\01" "\6a\21\03\0c\00\0b\00\0b\20\02\41\17\6a\41\01\6a\21\06\02" "\40\02\40\03\40\20\00\28\02\28\22\03\29\02\00\21\07\02\40" "\20\00\28\02\24\20\03\20\02\41\18\6a\20\02\41\18\6a\20\05" "\6a\22\04\20\02\41\10\6a\20\02\41\17\6a\20\06\20\02\41\0c" "\6a\10\f1\01\41\7f\6a\0e\03\00\04\02\03\0b\20\00\28\02\28" "\20\07\37\02\00\20\05\41\08\46\0d\03\20\00\28\02\20\10\fc" "\02\22\03\41\7f\46\0d\03\20\04\20\03\3a\00\00\20\05\41\01" "\6a\21\05\0c\00\0b\00\0b\20\02\20\02\2d\00\18\3a\00\17\0b" "\02\40\02\40\20\01\0d\00\03\40\20\05\41\01\48\0d\02\20\02" "\41\18\6a\20\05\41\7f\6a\22\05\6a\2c\00\00\10\69\20\00\28" "\02\20\10\f6\02\41\7f\46\0d\03\0c\00\0b\00\0b\20\00\20\02" "\2c\00\17\10\69\36\02\30\0b\20\02\2c\00\17\10\69\21\03\0c" "\01\0b\10\67\21\03\0b\20\02\41\20\6a\24\00\20\03\0b\09\00" "\20\00\41\01\10\ac\03\0b\b4\02\01\03\7f\23\00\41\20\6b\22" "\02\24\00\02\40\02\40\20\01\10\67\10\84\01\45\0d\00\20\00" "\2d\00\34\0d\01\20\00\20\00\28\02\30\22\01\10\67\10\84\01" "\41\01\73\3a\00\34\0c\01\0b\20\00\2d\00\34\21\03\02\40\02" "\40\02\40\20\00\2d\00\35\45\0d\00\20\03\41\ff\01\71\45\0d" "\00\20\00\28\02\20\21\03\20\00\28\02\30\22\04\10\63\1a\20" "\04\20\03\10\af\03\0d\01\0c\02\0b\20\03\41\ff\01\71\45\0d" "\00\20\02\20\00\28\02\30\10\63\3a\00\13\02\40\02\40\20\00" "\28\02\24\20\00\28\02\28\20\02\41\13\6a\20\02\41\13\6a\41" "\01\6a\20\02\41\0c\6a\20\02\41\18\6a\20\02\41\20\6a\20\02" "\41\14\6a\10\f4\01\41\7f\6a\0e\03\03\03\00\01\0b\20\00\28" "\02\30\21\03\20\02\20\02\41\18\6a\41\01\6a\36\02\14\20\02" "\20\03\3a\00\18\0b\03\40\20\02\28\02\14\22\03\20\02\41\18" "\6a\4d\0d\01\20\02\20\03\41\7f\6a\22\03\36\02\14\20\03\2c" "\00\00\20\00\28\02\20\10\f6\02\41\7f\46\0d\02\0c\00\0b\00" "\0b\20\00\41\01\3a\00\34\20\00\20\01\36\02\30\0c\01\0b\10" "\67\21\01\0b\20\02\41\20\6a\24\00\20\01\0b\0c\00\20\00\20" "\01\10\f6\02\41\7f\47\0b\1d\00\02\40\20\00\10\fc\02\22\00" "\41\7f\46\0d\00\20\01\20\00\3a\00\00\0b\20\00\41\7f\47\0b" "\09\00\20\00\20\01\10\b2\03\0b\29\01\02\7f\23\00\41\10\6b" "\22\02\24\00\20\02\41\0f\6a\20\00\20\01\10\b3\03\21\03\20" "\02\41\10\6a\24\00\20\01\20\00\20\03\1b\0b\0d\00\20\01\28" "\02\00\20\02\28\02\00\48\0b\0f\00\20\00\41\f0\13\41\08\6a" "\36\02\00\20\00\0b\09\00\20\00\10\55\10\8b\0d\0b\26\00\20" "\00\20\00\28\02\00\28\02\18\11\00\00\1a\20\00\20\01\10\ee" "\01\22\01\36\02\24\20\00\20\01\10\ef\01\3a\00\2c\0b\7d\01" "\05\7f\23\00\41\10\6b\22\01\24\00\20\01\41\10\6a\21\02\02" "\40\03\40\20\00\28\02\24\20\00\28\02\28\20\01\41\08\6a\20" "\02\20\01\41\04\6a\10\f6\01\21\03\41\7f\21\04\20\01\41\08" "\6a\41\01\20\01\28\02\04\20\01\41\08\6a\6b\22\05\20\00\28" "\02\20\10\52\20\05\47\0d\01\02\40\20\03\41\7f\6a\0e\02\01" "\02\00\0b\0b\41\7f\41\00\20\00\28\02\20\10\4b\1b\21\04\0b" "\20\01\41\10\6a\24\00\20\04\0b\6c\01\01\7f\02\40\02\40\20" "\00\2d\00\2c\0d\00\41\00\21\03\20\02\41\00\20\02\41\00\4a" "\1b\21\02\03\40\20\03\20\02\46\0d\02\02\40\20\00\20\01\2c" "\00\00\10\69\20\00\28\02\00\28\02\34\11\01\00\10\67\47\0d" "\00\20\03\0f\0b\20\01\41\01\6a\21\01\20\03\41\01\6a\21\03" "\0c\00\0b\00\0b\20\01\41\01\20\02\20\00\28\02\20\10\52\21" "\02\0b\20\02\0b\80\02\01\05\7f\23\00\41\20\6b\22\02\24\00" "\02\40\02\40\02\40\20\01\10\67\10\84\01\0d\00\20\02\20\01" "\10\63\22\03\3a\00\17\02\40\20\00\2d\00\2c\45\0d\00\20\03" "\20\00\28\02\20\10\ba\03\45\0d\02\0c\01\0b\20\02\20\02\41" "\18\6a\36\02\10\20\02\41\20\6a\21\04\20\02\41\17\6a\41\01" "\6a\21\05\20\02\41\17\6a\21\06\03\40\20\00\28\02\24\20\00" "\28\02\28\20\06\20\05\20\02\41\0c\6a\20\02\41\18\6a\20\04" "\20\02\41\10\6a\10\f4\01\21\03\20\02\28\02\0c\20\06\46\0d" "\02\02\40\20\03\41\03\47\0d\00\20\06\41\01\41\01\20\00\28" "\02\20\10\52\41\01\46\0d\02\0c\03\0b\20\03\41\01\4b\0d\02" "\20\02\41\18\6a\41\01\20\02\28\02\10\20\02\41\18\6a\6b\22" "\06\20\00\28\02\20\10\52\20\06\47\0d\02\20\02\28\02\0c\21" "\06\20\03\41\01\46\0d\00\0b\0b\20\01\10\e9\01\21\00\0c\01" "\0b\10\67\21\00\0b\20\02\41\20\6a\24\00\20\00\0b\2f\01\01" "\7f\23\00\41\10\6b\22\02\24\00\20\02\20\00\3a\00\0f\20\02" "\41\0f\6a\41\01\41\01\20\01\10\52\21\00\20\02\41\10\6a\24" "\00\20\00\41\01\46\0b\0a\00\20\00\10\9d\01\10\8b\0d\0b\39" "\00\20\00\20\01\10\a3\03\22\01\36\02\24\20\00\20\01\10\bd" "\03\36\02\2c\20\00\20\00\28\02\24\10\a4\03\3a\00\35\02\40" "\20\00\28\02\2c\41\09\48\0d\00\41\8a\09\10\ce\06\00\0b\0b" "\0f\00\20\00\20\00\28\02\00\28\02\18\11\00\00\0b\09\00\20" "\00\41\00\10\bf\03\0b\d6\03\02\05\7f\01\7e\23\00\41\20\6b" "\22\02\24\00\02\40\02\40\20\00\2d\00\34\45\0d\00\20\00\28" "\02\30\21\03\20\01\45\0d\01\10\ac\01\21\04\20\00\41\00\3a" "\00\34\20\00\20\04\36\02\30\0c\01\0b\02\40\02\40\20\00\2d" "\00\35\45\0d\00\20\00\28\02\20\20\02\41\18\6a\10\c4\03\45" "\0d\01\20\02\28\02\18\22\04\10\ae\01\21\03\02\40\02\40\20" "\01\0d\00\20\03\20\00\28\02\20\10\c2\03\45\0d\03\0c\01\0b" "\20\00\20\03\36\02\30\0b\20\04\10\ae\01\21\03\0c\02\0b\20" "\02\41\01\36\02\18\41\00\21\03\20\02\41\18\6a\20\00\41\2c" "\6a\10\b1\03\28\02\00\22\05\41\00\20\05\41\00\4a\1b\21\06" "\02\40\03\40\20\03\20\06\46\0d\01\20\00\28\02\20\10\fc\02" "\22\04\41\7f\46\0d\02\20\02\41\18\6a\20\03\6a\20\04\3a\00" "\00\20\03\41\01\6a\21\03\0c\00\0b\00\0b\20\02\41\18\6a\21" "\06\02\40\02\40\03\40\20\00\28\02\28\22\03\29\02\00\21\07" "\02\40\20\00\28\02\24\20\03\20\02\41\18\6a\20\02\41\18\6a" "\20\05\6a\22\04\20\02\41\10\6a\20\02\41\14\6a\20\06\20\02" "\41\0c\6a\10\c5\03\41\7f\6a\0e\03\00\04\02\03\0b\20\00\28" "\02\28\20\07\37\02\00\20\05\41\08\46\0d\03\20\00\28\02\20" "\10\fc\02\22\03\41\7f\46\0d\03\20\04\20\03\3a\00\00\20\05" "\41\01\6a\21\05\0c\00\0b\00\0b\20\02\20\02\2c\00\18\36\02" "\14\0b\02\40\02\40\20\01\0d\00\03\40\20\05\41\01\48\0d\02" "\20\02\41\18\6a\20\05\41\7f\6a\22\05\6a\2c\00\00\10\ae\01" "\20\00\28\02\20\10\f6\02\41\7f\46\0d\03\0c\00\0b\00\0b\20" "\00\20\02\28\02\14\10\ae\01\36\02\30\0b\20\02\28\02\14\10" "\ae\01\21\03\0c\01\0b\10\ac\01\21\03\0b\20\02\41\20\6a\24" "\00\20\03\0b\09\00\20\00\41\01\10\bf\03\0b\b3\02\01\03\7f" "\23\00\41\20\6b\22\02\24\00\02\40\02\40\20\01\10\ac\01\10" "\c6\01\45\0d\00\20\00\2d\00\34\0d\01\20\00\20\00\28\02\30" "\22\01\10\ac\01\10\c6\01\41\01\73\3a\00\34\0c\01\0b\20\00" "\2d\00\34\21\03\02\40\02\40\02\40\20\00\2d\00\35\45\0d\00" "\20\03\41\ff\01\71\45\0d\00\20\00\28\02\20\21\03\20\00\28" "\02\30\22\04\10\a9\01\1a\20\04\20\03\10\c2\03\0d\01\0c\02" "\0b\20\03\41\ff\01\71\45\0d\00\20\02\20\00\28\02\30\10\a9" "\01\36\02\10\02\40\02\40\20\00\28\02\24\20\00\28\02\28\20" "\02\41\10\6a\20\02\41\14\6a\20\02\41\0c\6a\20\02\41\18\6a" "\20\02\41\20\6a\20\02\41\14\6a\10\c3\03\41\7f\6a\0e\03\03" "\03\00\01\0b\20\00\28\02\30\21\03\20\02\20\02\41\19\6a\36" "\02\14\20\02\20\03\3a\00\18\0b\03\40\20\02\28\02\14\22\03" "\20\02\41\18\6a\4d\0d\01\20\02\20\03\41\7f\6a\22\03\36\02" "\14\20\03\2c\00\00\20\00\28\02\20\10\f6\02\41\7f\46\0d\02" "\0c\00\0b\00\0b\20\00\41\01\3a\00\34\20\00\20\01\36\02\30" "\0c\01\0b\10\ac\01\21\01\0b\20\02\41\20\6a\24\00\20\01\0b" "\0c\00\20\00\20\01\10\8a\03\41\7f\47\0b\1d\00\20\00\20\01" "\20\02\20\03\20\04\20\05\20\06\20\07\20\00\28\02\00\28\02" "\0c\11\0d\00\0b\1d\00\02\40\20\00\10\88\03\22\00\41\7f\46" "\0d\00\20\01\20\00\36\02\00\0b\20\00\41\7f\47\0b\1d\00\20" "\00\20\01\20\02\20\03\20\04\20\05\20\06\20\07\20\00\28\02" "\00\28\02\10\11\0d\00\0b\0a\00\20\00\10\9d\01\10\8b\0d\0b" "\26\00\20\00\20\00\28\02\00\28\02\18\11\00\00\1a\20\00\20" "\01\10\a3\03\22\01\36\02\24\20\00\20\01\10\a4\03\3a\00\2c" "\0b\7d\01\05\7f\23\00\41\10\6b\22\01\24\00\20\01\41\10\6a" "\21\02\02\40\03\40\20\00\28\02\24\20\00\28\02\28\20\01\41" "\08\6a\20\02\20\01\41\04\6a\10\c9\03\21\03\41\7f\21\04\20" "\01\41\08\6a\41\01\20\01\28\02\04\20\01\41\08\6a\6b\22\05" "\20\00\28\02\20\10\52\20\05\47\0d\01\02\40\20\03\41\7f\6a" "\0e\02\01\02\00\0b\0b\41\7f\41\00\20\00\28\02\20\10\4b\1b" "\21\04\0b\20\01\41\10\6a\24\00\20\04\0b\17\00\20\00\20\01" "\20\02\20\03\20\04\20\00\28\02\00\28\02\14\11\09\00\0b\6e" "\01\01\7f\02\40\02\40\20\00\2d\00\2c\0d\00\41\00\21\03\20" "\02\41\00\20\02\41\00\4a\1b\21\02\03\40\20\03\20\02\46\0d" "\02\02\40\20\00\20\01\28\02\00\10\ae\01\20\00\28\02\00\28" "\02\34\11\01\00\10\ac\01\47\0d\00\20\03\0f\0b\20\01\41\04" "\6a\21\01\20\03\41\01\6a\21\03\0c\00\0b\00\0b\20\01\41\04" "\20\02\20\00\28\02\20\10\52\21\02\0b\20\02\0b\80\02\01\05" "\7f\23\00\41\20\6b\22\02\24\00\02\40\02\40\02\40\20\01\10" "\ac\01\10\c6\01\0d\00\20\02\20\01\10\a9\01\22\03\36\02\14" "\02\40\20\00\2d\00\2c\45\0d\00\20\03\20\00\28\02\20\10\cc" "\03\45\0d\02\0c\01\0b\20\02\20\02\41\18\6a\36\02\10\20\02" "\41\20\6a\21\04\20\02\41\18\6a\21\05\20\02\41\14\6a\21\06" "\03\40\20\00\28\02\24\20\00\28\02\28\20\06\20\05\20\02\41" "\0c\6a\20\02\41\18\6a\20\04\20\02\41\10\6a\10\c3\03\21\03" "\20\02\28\02\0c\20\06\46\0d\02\02\40\20\03\41\03\47\0d\00" "\20\06\41\01\41\01\20\00\28\02\20\10\52\41\01\46\0d\02\0c" "\03\0b\20\03\41\01\4b\0d\02\20\02\41\18\6a\41\01\20\02\28" "\02\10\20\02\41\18\6a\6b\22\06\20\00\28\02\20\10\52\20\06" "\47\0d\02\20\02\28\02\0c\21\06\20\03\41\01\46\0d\00\0b\0b" "\20\01\10\cd\03\21\00\0c\01\0b\10\ac\01\21\00\0b\20\02\41" "\20\6a\24\00\20\00\0b\0c\00\20\00\20\01\10\8e\03\41\7f\47" "\0b\1a\00\02\40\20\00\10\ac\01\10\c6\01\45\0d\00\10\ac\01" "\41\7f\73\21\00\0b\20\00\0b\05\00\10\8f\03\0b\47\01\02\7f" "\20\00\20\01\37\03\70\20\00\20\00\28\02\2c\20\00\28\02\04" "\22\02\6b\ac\37\03\78\20\00\28\02\08\21\03\02\40\20\01\50" "\0d\00\20\03\20\02\6b\ac\20\01\57\0d\00\20\02\20\01\a7\6a" "\21\03\0b\20\00\20\03\36\02\68\0b\dd\01\02\03\7f\02\7e\20" "\00\29\03\78\20\00\28\02\04\22\01\20\00\28\02\2c\22\02\6b" "\ac\7c\21\04\02\40\02\40\02\40\20\00\29\03\70\22\05\50\0d" "\00\20\04\20\05\59\0d\01\0b\20\00\10\fb\02\22\02\41\7f\4a" "\0d\01\20\00\28\02\04\21\01\20\00\28\02\2c\21\02\0b\20\00" "\42\7f\37\03\70\20\00\20\01\36\02\68\20\00\20\04\20\02\20" "\01\6b\ac\7c\37\03\78\41\7f\0f\0b\20\04\42\01\7c\21\04\20" "\00\28\02\04\21\01\20\00\28\02\08\21\03\02\40\20\00\29\03" "\70\22\05\42\00\51\0d\00\20\05\20\04\7d\22\05\20\03\20\01" "\6b\ac\59\0d\00\20\01\20\05\a7\6a\21\03\0b\20\00\20\03\36" "\02\68\20\00\20\04\20\00\28\02\2c\22\03\20\01\6b\ac\7c\37" "\03\78\02\40\20\01\20\03\4b\0d\00\20\01\41\7f\6a\20\02\3a" "\00\00\0b\20\02\0b\53\01\01\7e\02\40\02\40\20\03\41\c0\00" "\71\45\0d\00\20\01\20\03\41\40\6a\ad\86\21\02\42\00\21\01" "\0c\01\0b\20\03\45\0d\00\20\01\41\c0\00\20\03\6b\ad\88\20" "\02\20\03\ad\22\04\86\84\21\02\20\01\20\04\86\21\01\0b\20" "\00\20\01\37\03\00\20\00\20\02\37\03\08\0b\e1\01\02\03\7f" "\02\7e\23\00\41\10\6b\22\02\24\00\02\40\02\40\20\01\bc\22" "\03\41\ff\ff\ff\ff\07\71\22\04\41\80\80\80\7c\6a\41\ff\ff" "\ff\f7\07\4b\0d\00\20\04\ad\42\19\86\42\80\80\80\80\80\80" "\80\c0\3f\7c\21\05\42\00\21\06\0c\01\0b\02\40\20\04\41\80" "\80\80\fc\07\49\0d\00\20\03\ad\42\19\86\42\80\80\80\80\80" "\80\c0\ff\ff\00\84\21\05\42\00\21\06\0c\01\0b\02\40\20\04" "\0d\00\42\00\21\06\42\00\21\05\0c\01\0b\20\02\20\04\ad\42" "\00\20\04\67\22\04\41\d1\00\6a\10\d1\03\20\02\41\08\6a\29" "\03\00\42\80\80\80\80\80\80\c0\00\85\41\89\ff\00\20\04\6b" "\ad\42\30\86\84\21\05\20\02\29\03\00\21\06\0b\20\00\20\06" "\37\03\00\20\00\20\05\20\03\41\80\80\80\80\78\71\ad\42\20" "\86\84\37\03\08\20\02\41\10\6a\24\00\0b\8d\01\02\02\7f\02" "\7e\23\00\41\10\6b\22\02\24\00\02\40\02\40\20\01\0d\00\42" "\00\21\04\42\00\21\05\0c\01\0b\20\02\20\01\20\01\41\1f\75" "\22\03\73\20\03\6b\22\03\ad\42\00\20\03\67\22\03\41\d1\00" "\6a\10\d1\03\20\02\41\08\6a\29\03\00\42\80\80\80\80\80\80" "\c0\00\85\41\9e\80\01\20\03\6b\ad\42\30\86\7c\20\01\41\80" "\80\80\80\78\71\ad\42\20\86\84\21\05\20\02\29\03\00\21\04" "\0b\20\00\20\04\37\03\00\20\00\20\05\37\03\08\20\02\41\10" "\6a\24\00\0b\53\01\01\7e\02\40\02\40\20\03\41\c0\00\71\45" "\0d\00\20\02\20\03\41\40\6a\ad\88\21\01\42\00\21\02\0c\01" "\0b\20\03\45\0d\00\20\02\41\c0\00\20\03\6b\ad\86\20\01\20" "\03\ad\22\04\88\84\21\01\20\02\20\04\88\21\02\0b\20\00\20" "\01\37\03\00\20\00\20\02\37\03\08\0b\9a\0b\02\05\7f\0f\7e" "\23\00\41\e0\00\6b\22\05\24\00\20\04\42\ff\ff\ff\ff\ff\ff" "\3f\83\21\0a\20\04\20\02\85\42\80\80\80\80\80\80\80\80\80" "\7f\83\21\0b\20\02\42\ff\ff\ff\ff\ff\ff\3f\83\22\0c\42\20" "\88\21\0d\20\04\42\30\88\a7\41\ff\ff\01\71\21\06\02\40\02" "\40\02\40\20\02\42\30\88\a7\41\ff\ff\01\71\22\07\41\81\80" "\7e\6a\41\82\80\7e\49\0d\00\41\00\21\08\20\06\41\81\80\7e" "\6a\41\81\80\7e\4b\0d\01\0b\02\40\20\01\50\20\02\42\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\00\83\22\0e\42\80\80\80\80\80\80\c0" "\ff\ff\00\54\20\0e\42\80\80\80\80\80\80\c0\ff\ff\00\51\1b" "\0d\00\20\02\42\80\80\80\80\80\80\20\84\21\0b\0c\02\0b\02" "\40\20\03\50\20\04\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22" "\02\42\80\80\80\80\80\80\c0\ff\ff\00\54\20\02\42\80\80\80" "\80\80\80\c0\ff\ff\00\51\1b\0d\00\20\04\42\80\80\80\80\80" "\80\20\84\21\0b\20\03\21\01\0c\02\0b\02\40\20\01\20\0e\42" "\80\80\80\80\80\80\c0\ff\ff\00\85\84\42\00\52\0d\00\02\40" "\20\03\20\02\84\50\45\0d\00\42\80\80\80\80\80\80\e0\ff\ff" "\00\21\0b\42\00\21\01\0c\03\0b\20\0b\42\80\80\80\80\80\80" "\c0\ff\ff\00\84\21\0b\42\00\21\01\0c\02\0b\02\40\20\03\20" "\02\42\80\80\80\80\80\80\c0\ff\ff\00\85\84\42\00\52\0d\00" "\20\01\20\0e\84\21\02\42\00\21\01\02\40\20\02\50\45\0d\00" "\42\80\80\80\80\80\80\e0\ff\ff\00\21\0b\0c\03\0b\20\0b\42" "\80\80\80\80\80\80\c0\ff\ff\00\84\21\0b\0c\02\0b\02\40\20" "\01\20\0e\84\42\00\52\0d\00\42\00\21\01\0c\02\0b\02\40\20" "\03\20\02\84\42\00\52\0d\00\42\00\21\01\0c\02\0b\41\00\21" "\08\02\40\20\0e\42\ff\ff\ff\ff\ff\ff\3f\56\0d\00\20\05\41" "\d0\00\6a\20\01\20\0c\20\01\20\0c\20\0c\50\22\08\1b\79\20" "\08\41\06\74\ad\7c\a7\22\08\41\71\6a\10\d1\03\41\10\20\08" "\6b\21\08\20\05\41\d8\00\6a\29\03\00\22\0c\42\20\88\21\0d" "\20\05\29\03\50\21\01\0b\20\02\42\ff\ff\ff\ff\ff\ff\3f\56" "\0d\00\20\05\41\c0\00\6a\20\03\20\0a\20\03\20\0a\20\0a\50" "\22\09\1b\79\20\09\41\06\74\ad\7c\a7\22\09\41\71\6a\10\d1" "\03\20\08\20\09\6b\41\10\6a\21\08\20\05\41\c8\00\6a\29\03" "\00\21\0a\20\05\29\03\40\21\03\0b\20\03\42\0f\86\22\0e\42" "\80\80\fe\ff\0f\83\22\02\20\01\42\20\88\22\04\7e\22\0f\20" "\0e\42\20\88\22\0e\20\01\42\ff\ff\ff\ff\0f\83\22\01\7e\7c" "\22\10\42\20\86\22\11\20\02\20\01\7e\7c\22\12\20\11\54\ad" "\20\02\20\0c\42\ff\ff\ff\ff\0f\83\22\0c\7e\22\13\20\0e\20" "\04\7e\7c\22\11\20\03\42\31\88\20\0a\42\0f\86\22\14\84\42" "\ff\ff\ff\ff\0f\83\22\03\20\01\7e\7c\22\15\20\10\42\20\88" "\20\10\20\0f\54\ad\42\20\86\84\7c\22\10\20\02\20\0d\42\80" "\80\04\84\22\0a\7e\22\16\20\0e\20\0c\7e\7c\22\0d\20\14\42" "\20\88\42\80\80\80\80\08\84\22\02\20\01\7e\7c\22\0f\20\03" "\20\04\7e\7c\22\14\42\20\86\7c\22\17\7c\21\01\20\07\20\06" "\6a\20\08\6a\41\81\80\7f\6a\21\06\02\40\02\40\20\02\20\04" "\7e\22\18\20\0e\20\0a\7e\7c\22\04\20\18\54\ad\20\04\20\03" "\20\0c\7e\7c\22\0e\20\04\54\ad\7c\20\02\20\0a\7e\7c\20\0e" "\20\11\20\13\54\ad\20\15\20\11\54\ad\7c\7c\22\04\20\0e\54" "\ad\7c\20\03\20\0a\7e\22\03\20\02\20\0c\7e\7c\22\02\20\03" "\54\ad\42\20\86\20\02\42\20\88\84\7c\20\04\20\02\42\20\86" "\7c\22\02\20\04\54\ad\7c\20\02\20\14\42\20\88\20\0d\20\16" "\54\ad\20\0f\20\0d\54\ad\7c\20\14\20\0f\54\ad\7c\42\20\86" "\84\7c\22\04\20\02\54\ad\7c\20\04\20\10\20\15\54\ad\20\17" "\20\10\54\ad\7c\7c\22\02\20\04\54\ad\7c\22\04\42\80\80\80" "\80\80\80\c0\00\83\50\0d\00\20\06\41\01\6a\21\06\0c\01\0b" "\20\12\42\3f\88\21\03\20\04\42\01\86\20\02\42\3f\88\84\21" "\04\20\02\42\01\86\20\01\42\3f\88\84\21\02\20\12\42\01\86" "\21\12\20\03\20\01\42\01\86\84\21\01\0b\02\40\20\06\41\ff" "\ff\01\48\0d\00\20\0b\42\80\80\80\80\80\80\c0\ff\ff\00\84" "\21\0b\42\00\21\01\0c\01\0b\02\40\02\40\20\06\41\00\4a\0d" "\00\02\40\41\01\20\06\6b\22\07\41\ff\00\4b\0d\00\20\05\41" "\30\6a\20\12\20\01\20\06\41\ff\00\6a\22\06\10\d1\03\20\05" "\41\20\6a\20\02\20\04\20\06\10\d1\03\20\05\41\10\6a\20\12" "\20\01\20\07\10\d4\03\20\05\20\02\20\04\20\07\10\d4\03\20" "\05\29\03\20\20\05\29\03\10\84\20\05\29\03\30\20\05\41\30" "\6a\41\08\6a\29\03\00\84\42\00\52\ad\84\21\12\20\05\41\20" "\6a\41\08\6a\29\03\00\20\05\41\10\6a\41\08\6a\29\03\00\84" "\21\01\20\05\41\08\6a\29\03\00\21\04\20\05\29\03\00\21\02" "\0c\02\0b\42\00\21\01\0c\02\0b\20\06\ad\42\30\86\20\04\42" "\ff\ff\ff\ff\ff\ff\3f\83\84\21\04\0b\20\04\20\0b\84\21\0b" "\02\40\20\12\50\20\01\42\7f\55\20\01\42\80\80\80\80\80\80" "\80\80\80\7f\51\1b\0d\00\20\0b\20\02\42\01\7c\22\01\50\ad" "\7c\21\0b\0c\01\0b\02\40\20\12\20\01\42\80\80\80\80\80\80" "\80\80\80\7f\85\84\42\00\51\0d\00\20\02\21\01\0c\01\0b\20" "\0b\20\02\20\02\42\01\83\7c\22\01\20\02\54\ad\7c\21\0b\0b" "\20\00\20\01\37\03\00\20\00\20\0b\37\03\08\20\05\41\e0\00" "\6a\24\00\0b\04\00\41\00\0b\04\00\41\00\0b\ea\0a\02\04\7f" "\04\7e\23\00\41\f0\00\6b\22\05\24\00\20\04\42\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\00\83\21\09\02\40\02\40\02\40\20\01\50\22" "\06\20\02\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\0a\42\80" "\80\80\80\80\80\c0\80\80\7f\7c\42\80\80\80\80\80\80\c0\80" "\80\7f\54\20\0a\50\1b\0d\00\20\03\42\00\52\20\09\42\80\80" "\80\80\80\80\c0\80\80\7f\7c\22\0b\42\80\80\80\80\80\80\c0" "\80\80\7f\56\20\0b\42\80\80\80\80\80\80\c0\80\80\7f\51\1b" "\0d\01\0b\02\40\20\06\20\0a\42\80\80\80\80\80\80\c0\ff\ff" "\00\54\20\0a\42\80\80\80\80\80\80\c0\ff\ff\00\51\1b\0d\00" "\20\02\42\80\80\80\80\80\80\20\84\21\04\20\01\21\03\0c\02" "\0b\02\40\20\03\50\20\09\42\80\80\80\80\80\80\c0\ff\ff\00" "\54\20\09\42\80\80\80\80\80\80\c0\ff\ff\00\51\1b\0d\00\20" "\04\42\80\80\80\80\80\80\20\84\21\04\0c\02\0b\02\40\20\01" "\20\0a\42\80\80\80\80\80\80\c0\ff\ff\00\85\84\42\00\52\0d" "\00\42\80\80\80\80\80\80\e0\ff\ff\00\20\02\20\03\20\01\85" "\20\04\20\02\85\42\80\80\80\80\80\80\80\80\80\7f\85\84\50" "\22\06\1b\21\04\42\00\20\01\20\06\1b\21\03\0c\02\0b\20\03" "\20\09\42\80\80\80\80\80\80\c0\ff\ff\00\85\84\50\0d\01\02" "\40\20\01\20\0a\84\42\00\52\0d\00\20\03\20\09\84\42\00\52" "\0d\02\20\03\20\01\83\21\03\20\04\20\02\83\21\04\0c\02\0b" "\20\03\20\09\84\50\45\0d\00\20\01\21\03\20\02\21\04\0c\01" "\0b\20\03\20\01\20\03\20\01\56\20\09\20\0a\56\20\09\20\0a" "\51\1b\22\07\1b\21\09\20\04\20\02\20\07\1b\22\0b\42\ff\ff" "\ff\ff\ff\ff\3f\83\21\0a\20\02\20\04\20\07\1b\22\0c\42\30" "\88\a7\41\ff\ff\01\71\21\08\02\40\20\0b\42\30\88\a7\41\ff" "\ff\01\71\22\06\0d\00\20\05\41\e0\00\6a\20\09\20\0a\20\09" "\20\0a\20\0a\50\22\06\1b\79\20\06\41\06\74\ad\7c\a7\22\06" "\41\71\6a\10\d1\03\41\10\20\06\6b\21\06\20\05\41\e8\00\6a" "\29\03\00\21\0a\20\05\29\03\60\21\09\0b\20\01\20\03\20\07" "\1b\21\03\20\0c\42\ff\ff\ff\ff\ff\ff\3f\83\21\01\02\40\20" "\08\0d\00\20\05\41\d0\00\6a\20\03\20\01\20\03\20\01\20\01" "\50\22\07\1b\79\20\07\41\06\74\ad\7c\a7\22\07\41\71\6a\10" "\d1\03\41\10\20\07\6b\21\08\20\05\41\d8\00\6a\29\03\00\21" "\01\20\05\29\03\50\21\03\0b\20\01\42\03\86\20\03\42\3d\88" "\84\42\80\80\80\80\80\80\80\04\84\21\01\20\0a\42\03\86\20" "\09\42\3d\88\84\21\0c\20\03\42\03\86\21\0a\20\04\20\02\85" "\21\03\02\40\20\06\20\08\46\0d\00\02\40\20\06\20\08\6b\22" "\07\41\ff\00\4d\0d\00\42\00\21\01\42\01\21\0a\0c\01\0b\20" "\05\41\c0\00\6a\20\0a\20\01\41\80\01\20\07\6b\10\d1\03\20" "\05\41\30\6a\20\0a\20\01\20\07\10\d4\03\20\05\29\03\30\20" "\05\29\03\40\20\05\41\c0\00\6a\41\08\6a\29\03\00\84\42\00" "\52\ad\84\21\0a\20\05\41\30\6a\41\08\6a\29\03\00\21\01\0b" "\20\0c\42\80\80\80\80\80\80\80\04\84\21\0c\20\09\42\03\86" "\21\09\02\40\02\40\20\03\42\7f\55\0d\00\42\00\21\03\42\00" "\21\04\20\09\20\0a\85\20\0c\20\01\85\84\50\0d\02\20\09\20" "\0a\7d\21\02\20\0c\20\01\7d\20\09\20\0a\54\ad\7d\22\04\42" "\ff\ff\ff\ff\ff\ff\ff\03\56\0d\01\20\05\41\20\6a\20\02\20" "\04\20\02\20\04\20\04\50\22\07\1b\79\20\07\41\06\74\ad\7c" "\a7\41\74\6a\22\07\10\d1\03\20\06\20\07\6b\21\06\20\05\41" "\28\6a\29\03\00\21\04\20\05\29\03\20\21\02\0c\01\0b\20\01" "\20\0c\7c\20\0a\20\09\7c\22\02\20\0a\54\ad\7c\22\04\42\80" "\80\80\80\80\80\80\08\83\50\0d\00\20\02\42\01\88\20\04\42" "\3f\86\84\20\0a\42\01\83\84\21\02\20\06\41\01\6a\21\06\20" "\04\42\01\88\21\04\0b\20\0b\42\80\80\80\80\80\80\80\80\80" "\7f\83\21\0a\02\40\20\06\41\ff\ff\01\48\0d\00\20\0a\42\80" "\80\80\80\80\80\c0\ff\ff\00\84\21\04\42\00\21\03\0c\01\0b" "\41\00\21\07\02\40\02\40\20\06\41\00\4c\0d\00\20\06\21\07" "\0c\01\0b\20\05\41\10\6a\20\02\20\04\20\06\41\ff\00\6a\10" "\d1\03\20\05\20\02\20\04\41\01\20\06\6b\10\d4\03\20\05\29" "\03\00\20\05\29\03\10\20\05\41\10\6a\41\08\6a\29\03\00\84" "\42\00\52\ad\84\21\02\20\05\41\08\6a\29\03\00\21\04\0b\20" "\02\42\03\88\20\04\42\3d\86\84\21\03\20\07\ad\42\30\86\20" "\04\42\03\88\42\ff\ff\ff\ff\ff\ff\3f\83\84\20\0a\84\21\04" "\20\02\a7\41\07\71\21\06\02\40\02\40\02\40\02\40\02\40\10" "\d6\03\0e\03\00\01\02\03\0b\02\40\20\06\41\04\46\0d\00\20" "\04\20\03\20\06\41\04\4b\ad\7c\22\0a\20\03\54\ad\7c\21\04" "\20\0a\21\03\0c\03\0b\20\04\20\03\20\03\42\01\83\7c\22\0a" "\20\03\54\ad\7c\21\04\20\0a\21\03\0c\03\0b\20\04\20\03\20" "\0a\42\00\52\20\06\41\00\47\71\ad\7c\22\0a\20\03\54\ad\7c" "\21\04\20\0a\21\03\0c\01\0b\20\04\20\03\20\0a\50\20\06\41" "\00\47\71\ad\7c\22\0a\20\03\54\ad\7c\21\04\20\0a\21\03\0b" "\20\06\45\0d\01\0b\10\d7\03\1a\0b\20\00\20\03\37\03\00\20" "\00\20\04\37\03\08\20\05\41\f0\00\6a\24\00\0b\8e\02\02\02" "\7f\03\7e\23\00\41\10\6b\22\02\24\00\02\40\02\40\20\01\bd" "\22\04\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\05\42\80\80" "\80\80\80\80\80\78\7c\42\ff\ff\ff\ff\ff\ff\ff\ef\ff\00\56" "\0d\00\20\05\42\3c\86\21\06\20\05\42\04\88\42\80\80\80\80" "\80\80\80\80\3c\7c\21\05\0c\01\0b\02\40\20\05\42\80\80\80" "\80\80\80\80\f8\ff\00\54\0d\00\20\04\42\3c\86\21\06\20\04" "\42\04\88\42\80\80\80\80\80\80\c0\ff\ff\00\84\21\05\0c\01" "\0b\02\40\20\05\50\45\0d\00\42\00\21\06\42\00\21\05\0c\01" "\0b\20\02\20\05\42\00\20\05\a7\67\41\20\6a\20\05\42\20\88" "\a7\67\20\05\42\80\80\80\80\10\54\1b\22\03\41\31\6a\10\d1" "\03\20\02\41\08\6a\29\03\00\42\80\80\80\80\80\80\c0\00\85" "\41\8c\f8\00\20\03\6b\ad\42\30\86\84\21\05\20\02\29\03\00" "\21\06\0b\20\00\20\06\37\03\00\20\00\20\05\20\04\42\80\80" "\80\80\80\80\80\80\80\7f\83\84\37\03\08\20\02\41\10\6a\24" "\00\0b\e0\01\02\01\7f\02\7e\41\01\21\04\02\40\20\00\42\00" "\52\20\01\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\05\42\80" "\80\80\80\80\80\c0\ff\ff\00\56\20\05\42\80\80\80\80\80\80" "\c0\ff\ff\00\51\1b\0d\00\20\02\42\00\52\20\03\42\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\00\83\22\06\42\80\80\80\80\80\80\c0\ff" "\ff\00\56\20\06\42\80\80\80\80\80\80\c0\ff\ff\00\51\1b\0d" "\00\02\40\20\02\20\00\84\20\06\20\05\84\84\50\45\0d\00\41" "\00\0f\0b\02\40\20\03\20\01\83\42\00\53\0d\00\41\7f\21\04" "\20\00\20\02\54\20\01\20\03\53\20\01\20\03\51\1b\0d\01\20" "\00\20\02\85\20\01\20\03\85\84\42\00\52\0f\0b\41\7f\21\04" "\20\00\20\02\56\20\01\20\03\55\20\01\20\03\51\1b\0d\00\20" "\00\20\02\85\20\01\20\03\85\84\42\00\52\21\04\0b\20\04\0b" "\d8\01\02\01\7f\02\7e\41\7f\21\04\02\40\20\00\42\00\52\20" "\01\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\05\42\80\80\80" "\80\80\80\c0\ff\ff\00\56\20\05\42\80\80\80\80\80\80\c0\ff" "\ff\00\51\1b\0d\00\20\02\42\00\52\20\03\42\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\00\83\22\06\42\80\80\80\80\80\80\c0\ff\ff\00" "\56\20\06\42\80\80\80\80\80\80\c0\ff\ff\00\51\1b\0d\00\02" "\40\20\02\20\00\84\20\06\20\05\84\84\50\45\0d\00\41\00\0f" "\0b\02\40\20\03\20\01\83\42\00\53\0d\00\20\00\20\02\54\20" "\01\20\03\53\20\01\20\03\51\1b\0d\01\20\00\20\02\85\20\01" "\20\03\85\84\42\00\52\0f\0b\20\00\20\02\56\20\01\20\03\55" "\20\01\20\03\51\1b\0d\00\20\00\20\02\85\20\01\20\03\85\84" "\42\00\52\21\04\0b\20\04\0b\ae\01\00\02\40\02\40\20\01\41" "\80\08\48\0d\00\20\00\44\00\00\00\00\00\00\e0\7f\a2\21\00" "\02\40\20\01\41\ff\0f\4f\0d\00\20\01\41\81\78\6a\21\01\0c" "\02\0b\20\00\44\00\00\00\00\00\00\e0\7f\a2\21\00\20\01\41" "\fd\17\20\01\41\fd\17\48\1b\41\82\70\6a\21\01\0c\01\0b\20" "\01\41\81\78\4a\0d\00\20\00\44\00\00\00\00\00\00\60\03\a2" "\21\00\02\40\20\01\41\b8\70\4d\0d\00\20\01\41\c9\07\6a\21" "\01\0c\01\0b\20\00\44\00\00\00\00\00\00\60\03\a2\21\00\20" "\01\41\f0\68\20\01\41\f0\68\4a\1b\41\92\0f\6a\21\01\0b\20" "\00\20\01\41\ff\07\6a\ad\42\34\86\bf\a2\0b\3c\00\20\00\20" "\01\37\03\00\20\00\20\04\42\30\88\a7\41\80\80\02\71\20\02" "\42\80\80\80\80\80\80\c0\ff\ff\00\83\42\30\88\a7\72\ad\42" "\30\86\20\02\42\ff\ff\ff\ff\ff\ff\3f\83\84\37\03\08\0b\75" "\02\01\7f\02\7e\23\00\41\10\6b\22\02\24\00\02\40\02\40\20" "\01\0d\00\42\00\21\03\42\00\21\04\0c\01\0b\20\02\20\01\ad" "\42\00\41\f0\00\20\01\67\22\01\41\1f\73\6b\10\d1\03\20\02" "\41\08\6a\29\03\00\42\80\80\80\80\80\80\c0\00\85\41\9e\80" "\01\20\01\6b\ad\42\30\86\7c\21\04\20\02\29\03\00\21\03\0b" "\20\00\20\03\37\03\00\20\00\20\04\37\03\08\20\02\41\10\6a" "\24\00\0b\48\01\01\7f\23\00\41\10\6b\22\05\24\00\20\05\20" "\01\20\02\20\03\20\04\42\80\80\80\80\80\80\80\80\80\7f\85" "\10\d8\03\20\05\29\03\00\21\04\20\00\20\05\41\08\6a\29\03" "\00\37\03\08\20\00\20\04\37\03\00\20\05\41\10\6a\24\00\0b" "\e7\02\01\01\7f\23\00\41\d0\00\6b\22\04\24\00\02\40\02\40" "\20\03\41\80\80\01\48\0d\00\20\04\41\20\6a\20\01\20\02\42" "\00\42\80\80\80\80\80\80\80\ff\ff\00\10\d5\03\20\04\41\20" "\6a\41\08\6a\29\03\00\21\02\20\04\29\03\20\21\01\02\40\20" "\03\41\ff\ff\01\4f\0d\00\20\03\41\81\80\7f\6a\21\03\0c\02" "\0b\20\04\41\10\6a\20\01\20\02\42\00\42\80\80\80\80\80\80" "\80\ff\ff\00\10\d5\03\20\03\41\fd\ff\02\20\03\41\fd\ff\02" "\48\1b\41\82\80\7e\6a\21\03\20\04\41\10\6a\41\08\6a\29\03" "\00\21\02\20\04\29\03\10\21\01\0c\01\0b\20\03\41\81\80\7f" "\4a\0d\00\20\04\41\c0\00\6a\20\01\20\02\42\00\42\80\80\80" "\80\80\80\80\39\10\d5\03\20\04\41\c0\00\6a\41\08\6a\29\03" "\00\21\02\20\04\29\03\40\21\01\02\40\20\03\41\f4\80\7e\4d" "\0d\00\20\03\41\8d\ff\00\6a\21\03\0c\01\0b\20\04\41\30\6a" "\20\01\20\02\42\00\42\80\80\80\80\80\80\80\39\10\d5\03\20" "\03\41\e8\81\7d\20\03\41\e8\81\7d\4a\1b\41\9a\fe\01\6a\21" "\03\20\04\41\30\6a\41\08\6a\29\03\00\21\02\20\04\29\03\30" "\21\01\0b\20\04\20\01\20\02\42\00\20\03\41\ff\ff\00\6a\ad" "\42\30\86\10\d5\03\20\00\20\04\41\08\6a\29\03\00\37\03\08" "\20\00\20\04\29\03\00\37\03\00\20\04\41\d0\00\6a\24\00\0b" "\75\01\01\7e\20\00\20\04\20\01\7e\20\02\20\03\7e\7c\20\03" "\42\20\88\22\02\20\01\42\20\88\22\04\7e\7c\20\03\42\ff\ff" "\ff\ff\0f\83\22\03\20\01\42\ff\ff\ff\ff\0f\83\22\01\7e\22" "\05\42\20\88\20\03\20\04\7e\7c\22\03\42\20\88\7c\20\03\42" "\ff\ff\ff\ff\0f\83\20\02\20\01\7e\7c\22\01\42\20\88\7c\37" "\03\08\20\00\20\01\42\20\86\20\05\42\ff\ff\ff\ff\0f\83\84" "\37\03\00\0b\e7\10\02\05\7f\0f\7e\23\00\41\d0\02\6b\22\05" "\24\00\20\04\42\ff\ff\ff\ff\ff\ff\3f\83\21\0a\20\02\42\ff" "\ff\ff\ff\ff\ff\3f\83\21\0b\20\04\20\02\85\42\80\80\80\80" "\80\80\80\80\80\7f\83\21\0c\20\04\42\30\88\a7\41\ff\ff\01" "\71\21\06\02\40\02\40\02\40\20\02\42\30\88\a7\41\ff\ff\01" "\71\22\07\41\81\80\7e\6a\41\82\80\7e\49\0d\00\41\00\21\08" "\20\06\41\81\80\7e\6a\41\81\80\7e\4b\0d\01\0b\02\40\20\01" "\50\20\02\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\0d\42\80" "\80\80\80\80\80\c0\ff\ff\00\54\20\0d\42\80\80\80\80\80\80" "\c0\ff\ff\00\51\1b\0d\00\20\02\42\80\80\80\80\80\80\20\84" "\21\0c\0c\02\0b\02\40\20\03\50\20\04\42\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\00\83\22\02\42\80\80\80\80\80\80\c0\ff\ff\00\54" "\20\02\42\80\80\80\80\80\80\c0\ff\ff\00\51\1b\0d\00\20\04" "\42\80\80\80\80\80\80\20\84\21\0c\20\03\21\01\0c\02\0b\02" "\40\20\01\20\0d\42\80\80\80\80\80\80\c0\ff\ff\00\85\84\42" "\00\52\0d\00\02\40\20\03\20\02\42\80\80\80\80\80\80\c0\ff" "\ff\00\85\84\50\45\0d\00\42\00\21\01\42\80\80\80\80\80\80" "\e0\ff\ff\00\21\0c\0c\03\0b\20\0c\42\80\80\80\80\80\80\c0" "\ff\ff\00\84\21\0c\42\00\21\01\0c\02\0b\02\40\20\03\20\02" "\42\80\80\80\80\80\80\c0\ff\ff\00\85\84\42\00\52\0d\00\42" "\00\21\01\0c\02\0b\02\40\20\01\20\0d\84\42\00\52\0d\00\42" "\80\80\80\80\80\80\e0\ff\ff\00\20\0c\20\03\20\02\84\50\1b" "\21\0c\42\00\21\01\0c\02\0b\02\40\20\03\20\02\84\42\00\52" "\0d\00\20\0c\42\80\80\80\80\80\80\c0\ff\ff\00\84\21\0c\42" "\00\21\01\0c\02\0b\41\00\21\08\02\40\20\0d\42\ff\ff\ff\ff" "\ff\ff\3f\56\0d\00\20\05\41\c0\02\6a\20\01\20\0b\20\01\20" "\0b\20\0b\50\22\08\1b\79\20\08\41\06\74\ad\7c\a7\22\08\41" "\71\6a\10\d1\03\41\10\20\08\6b\21\08\20\05\41\c8\02\6a\29" "\03\00\21\0b\20\05\29\03\c0\02\21\01\0b\20\02\42\ff\ff\ff" "\ff\ff\ff\3f\56\0d\00\20\05\41\b0\02\6a\20\03\20\0a\20\03" "\20\0a\20\0a\50\22\09\1b\79\20\09\41\06\74\ad\7c\a7\22\09" "\41\71\6a\10\d1\03\20\09\20\08\6a\41\70\6a\21\08\20\05\41" "\b8\02\6a\29\03\00\21\0a\20\05\29\03\b0\02\21\03\0b\20\05" "\41\a0\02\6a\20\03\42\31\88\20\0a\42\80\80\80\80\80\80\c0" "\00\84\22\0e\42\0f\86\84\22\02\42\00\42\80\80\80\80\b0\e6" "\bc\82\f5\00\20\02\7d\22\04\42\00\10\e1\03\20\05\41\90\02" "\6a\42\00\20\05\41\a0\02\6a\41\08\6a\29\03\00\7d\42\00\20" "\04\42\00\10\e1\03\20\05\41\80\02\6a\20\05\29\03\90\02\42" "\3f\88\20\05\41\90\02\6a\41\08\6a\29\03\00\42\01\86\84\22" "\04\42\00\20\02\42\00\10\e1\03\20\05\41\f0\01\6a\20\04\42" "\00\42\00\20\05\41\80\02\6a\41\08\6a\29\03\00\7d\42\00\10" "\e1\03\20\05\41\e0\01\6a\20\05\29\03\f0\01\42\3f\88\20\05" "\41\f0\01\6a\41\08\6a\29\03\00\42\01\86\84\22\04\42\00\20" "\02\42\00\10\e1\03\20\05\41\d0\01\6a\20\04\42\00\42\00\20" "\05\41\e0\01\6a\41\08\6a\29\03\00\7d\42\00\10\e1\03\20\05" "\41\c0\01\6a\20\05\29\03\d0\01\42\3f\88\20\05\41\d0\01\6a" "\41\08\6a\29\03\00\42\01\86\84\22\04\42\00\20\02\42\00\10" "\e1\03\20\05\41\b0\01\6a\20\04\42\00\42\00\20\05\41\c0\01" "\6a\41\08\6a\29\03\00\7d\42\00\10\e1\03\20\05\41\a0\01\6a" "\20\02\42\00\20\05\29\03\b0\01\42\3f\88\20\05\41\b0\01\6a" "\41\08\6a\29\03\00\42\01\86\84\42\7f\7c\22\04\42\00\10\e1" "\03\20\05\41\90\01\6a\20\03\42\0f\86\42\00\20\04\42\00\10" "\e1\03\20\05\41\f0\00\6a\20\04\42\00\42\00\20\05\41\a0\01" "\6a\41\08\6a\29\03\00\20\05\29\03\a0\01\22\0a\20\05\41\90" "\01\6a\41\08\6a\29\03\00\7c\22\02\20\0a\54\ad\7c\20\02\42" "\01\56\ad\7c\7d\42\00\10\e1\03\20\05\41\80\01\6a\42\01\20" "\02\7d\42\00\20\04\42\00\10\e1\03\20\08\20\07\20\06\6b\6a" "\21\06\02\40\02\40\20\05\29\03\70\22\0f\42\01\86\22\10\20" "\05\29\03\80\01\42\3f\88\20\05\41\80\01\6a\41\08\6a\29\03" "\00\22\11\42\01\86\84\7c\22\0d\42\99\93\7f\7c\22\12\42\20" "\88\22\02\20\0b\42\80\80\80\80\80\80\c0\00\84\22\13\42\01" "\86\22\14\42\20\88\22\04\7e\22\15\20\01\42\01\86\22\16\42" "\20\88\22\0a\20\05\41\f0\00\6a\41\08\6a\29\03\00\42\01\86" "\20\0f\42\3f\88\84\20\11\42\3f\88\7c\20\0d\20\10\54\ad\7c" "\20\12\20\0d\54\ad\7c\42\7f\7c\22\0f\42\20\88\22\0d\7e\7c" "\22\10\20\15\54\ad\20\10\20\0f\42\ff\ff\ff\ff\0f\83\22\0f" "\20\01\42\3f\88\22\17\20\0b\42\01\86\84\42\ff\ff\ff\ff\0f" "\83\22\0b\7e\7c\22\11\20\10\54\ad\7c\20\0d\20\04\7e\7c\20" "\0f\20\04\7e\22\15\20\0b\20\0d\7e\7c\22\10\20\15\54\ad\42" "\20\86\20\10\42\20\88\84\7c\20\11\20\10\42\20\86\7c\22\10" "\20\11\54\ad\7c\20\10\20\12\42\ff\ff\ff\ff\0f\83\22\12\20" "\0b\7e\22\15\20\02\20\0a\7e\7c\22\11\20\15\54\ad\20\11\20" "\0f\20\16\42\fe\ff\ff\ff\0f\83\22\15\7e\7c\22\18\20\11\54" "\ad\7c\7c\22\11\20\10\54\ad\7c\20\11\20\12\20\04\7e\22\10" "\20\15\20\0d\7e\7c\22\04\20\02\20\0b\7e\7c\22\0b\20\0f\20" "\0a\7e\7c\22\0d\42\20\88\20\04\20\10\54\ad\20\0b\20\04\54" "\ad\7c\20\0d\20\0b\54\ad\7c\42\20\86\84\7c\22\04\20\11\54" "\ad\7c\20\04\20\18\20\02\20\15\7e\22\02\20\12\20\0a\7e\7c" "\22\0b\42\20\88\20\0b\20\02\54\ad\42\20\86\84\7c\22\02\20" "\18\54\ad\20\02\20\0d\42\20\86\7c\20\02\54\ad\7c\7c\22\02" "\20\04\54\ad\7c\22\04\42\ff\ff\ff\ff\ff\ff\ff\00\56\0d\00" "\20\14\20\17\84\21\13\20\05\41\d0\00\6a\20\02\20\04\20\03" "\20\0e\10\e1\03\20\01\42\31\86\20\05\41\d0\00\6a\41\08\6a" "\29\03\00\7d\20\05\29\03\50\22\01\42\00\52\ad\7d\21\0a\20" "\06\41\fe\ff\00\6a\21\06\42\00\20\01\7d\21\0b\0c\01\0b\20" "\05\41\e0\00\6a\20\02\42\01\88\20\04\42\3f\86\84\22\02\20" "\04\42\01\88\22\04\20\03\20\0e\10\e1\03\20\01\42\30\86\20" "\05\41\e0\00\6a\41\08\6a\29\03\00\7d\20\05\29\03\60\22\0b" "\42\00\52\ad\7d\21\0a\20\06\41\ff\ff\00\6a\21\06\42\00\20" "\0b\7d\21\0b\20\01\21\16\0b\02\40\20\06\41\ff\ff\01\48\0d" "\00\20\0c\42\80\80\80\80\80\80\c0\ff\ff\00\84\21\0c\42\00" "\21\01\0c\01\0b\02\40\02\40\20\06\41\01\48\0d\00\20\0a\42" "\01\86\20\0b\42\3f\88\84\21\01\20\06\ad\42\30\86\20\04\42" "\ff\ff\ff\ff\ff\ff\3f\83\84\21\0a\20\0b\42\01\86\21\04\0c" "\01\0b\02\40\20\06\41\8f\7f\4a\0d\00\42\00\21\01\0c\02\0b" "\20\05\41\c0\00\6a\20\02\20\04\41\01\20\06\6b\10\d4\03\20" "\05\41\30\6a\20\16\20\13\20\06\41\f0\00\6a\10\d1\03\20\05" "\41\20\6a\20\03\20\0e\20\05\29\03\40\22\02\20\05\41\c0\00" "\6a\41\08\6a\29\03\00\22\0a\10\e1\03\20\05\41\30\6a\41\08" "\6a\29\03\00\20\05\41\20\6a\41\08\6a\29\03\00\42\01\86\20" "\05\29\03\20\22\01\42\3f\88\84\7d\20\05\29\03\30\22\04\20" "\01\42\01\86\22\0b\54\ad\7d\21\01\20\04\20\0b\7d\21\04\0b" "\20\05\41\10\6a\20\03\20\0e\42\03\42\00\10\e1\03\20\05\20" "\03\20\0e\42\05\42\00\10\e1\03\20\0a\20\02\20\02\42\01\83" "\22\0b\20\04\7c\22\04\20\03\56\20\01\20\04\20\0b\54\ad\7c" "\22\01\20\0e\56\20\01\20\0e\51\1b\ad\7c\22\03\20\02\54\ad" "\7c\22\02\20\03\20\02\42\80\80\80\80\80\80\c0\ff\ff\00\54" "\20\04\20\05\29\03\10\56\20\01\20\05\41\10\6a\41\08\6a\29" "\03\00\22\02\56\20\01\20\02\51\1b\71\ad\7c\22\02\20\03\54" "\ad\7c\22\03\20\02\20\03\42\80\80\80\80\80\80\c0\ff\ff\00" "\54\20\04\20\05\29\03\00\56\20\01\20\05\41\08\6a\29\03\00" "\22\04\56\20\01\20\04\51\1b\71\ad\7c\22\01\20\02\54\ad\7c" "\20\0c\84\21\0c\0b\20\00\20\01\37\03\00\20\00\20\0c\37\03" "\08\20\05\41\d0\02\6a\24\00\0b\4b\02\01\7e\02\7f\20\01\42" "\ff\ff\ff\ff\ff\ff\3f\83\21\02\02\40\02\40\20\01\42\30\88" "\a7\41\ff\ff\01\71\22\03\41\ff\ff\01\46\0d\00\41\04\21\04" "\20\03\0d\01\41\02\41\03\20\02\20\00\84\50\1b\0f\0b\20\02" "\20\00\84\50\21\04\0b\20\04\0b\d5\06\02\04\7f\03\7e\23\00" "\41\80\01\6b\22\05\24\00\02\40\02\40\02\40\20\03\20\04\42" "\00\42\00\10\da\03\45\0d\00\20\03\20\04\10\e3\03\21\06\20" "\02\42\30\88\a7\22\07\41\ff\ff\01\71\22\08\41\ff\ff\01\46" "\0d\00\20\06\0d\01\0b\20\05\41\10\6a\20\01\20\02\20\03\20" "\04\10\d5\03\20\05\20\05\29\03\10\22\04\20\05\41\10\6a\41" "\08\6a\29\03\00\22\03\20\04\20\03\10\e2\03\20\05\41\08\6a" "\29\03\00\21\02\20\05\29\03\00\21\04\0c\01\0b\02\40\20\01" "\20\02\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\09\20\03\20" "\04\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\83\22\0a\10\da\03\41" "\00\4a\0d\00\02\40\20\01\20\09\20\03\20\0a\10\da\03\45\0d" "\00\20\01\21\04\0c\02\0b\20\05\41\f0\00\6a\20\01\20\02\42" "\00\42\00\10\d5\03\20\05\41\f8\00\6a\29\03\00\21\02\20\05" "\29\03\70\21\04\0c\01\0b\20\04\42\30\88\a7\41\ff\ff\01\71" "\21\06\02\40\02\40\20\08\45\0d\00\20\01\21\04\0c\01\0b\20" "\05\41\e0\00\6a\20\01\20\09\42\00\42\80\80\80\80\80\80\c0" "\bb\c0\00\10\d5\03\20\05\41\e8\00\6a\29\03\00\22\09\42\30" "\88\a7\41\88\7f\6a\21\08\20\05\29\03\60\21\04\0b\02\40\20" "\06\0d\00\20\05\41\d0\00\6a\20\03\20\0a\42\00\42\80\80\80" "\80\80\80\c0\bb\c0\00\10\d5\03\20\05\41\d8\00\6a\29\03\00" "\22\0a\42\30\88\a7\41\88\7f\6a\21\06\20\05\29\03\50\21\03" "\0b\20\0a\42\ff\ff\ff\ff\ff\ff\3f\83\42\80\80\80\80\80\80" "\c0\00\84\21\0b\20\09\42\ff\ff\ff\ff\ff\ff\3f\83\42\80\80" "\80\80\80\80\c0\00\84\21\09\02\40\20\08\20\06\4c\0d\00\03" "\40\02\40\02\40\20\09\20\0b\7d\20\04\20\03\54\ad\7d\22\0a" "\42\00\53\0d\00\02\40\20\0a\20\04\20\03\7d\22\04\84\42\00" "\52\0d\00\20\05\41\20\6a\20\01\20\02\42\00\42\00\10\d5\03" "\20\05\41\28\6a\29\03\00\21\02\20\05\29\03\20\21\04\0c\05" "\0b\20\0a\42\01\86\20\04\42\3f\88\84\21\09\0c\01\0b\20\09" "\42\01\86\20\04\42\3f\88\84\21\09\0b\20\04\42\01\86\21\04" "\20\08\41\7f\6a\22\08\20\06\4a\0d\00\0b\20\06\21\08\0b\02" "\40\02\40\20\09\20\0b\7d\20\04\20\03\54\ad\7d\22\0a\42\00" "\59\0d\00\20\09\21\0a\0c\01\0b\20\0a\20\04\20\03\7d\22\04" "\84\42\00\52\0d\00\20\05\41\30\6a\20\01\20\02\42\00\42\00" "\10\d5\03\20\05\41\38\6a\29\03\00\21\02\20\05\29\03\30\21" "\04\0c\01\0b\02\40\20\0a\42\ff\ff\ff\ff\ff\ff\3f\56\0d\00" "\03\40\20\04\42\3f\88\21\03\20\08\41\7f\6a\21\08\20\04\42" "\01\86\21\04\20\03\20\0a\42\01\86\84\22\0a\42\80\80\80\80" "\80\80\c0\00\54\0d\00\0b\0b\20\07\41\80\80\02\71\21\06\02" "\40\20\08\41\00\4a\0d\00\20\05\41\c0\00\6a\20\04\20\0a\42" "\ff\ff\ff\ff\ff\ff\3f\83\20\08\41\f8\00\6a\20\06\72\ad\42" "\30\86\84\42\00\42\80\80\80\80\80\80\c0\c3\3f\10\d5\03\20" "\05\41\c8\00\6a\29\03\00\21\02\20\05\29\03\40\21\04\0c\01" "\0b\20\0a\42\ff\ff\ff\ff\ff\ff\3f\83\20\08\20\06\72\ad\42" "\30\86\84\21\02\0b\20\00\20\04\37\03\00\20\00\20\02\37\03" "\08\20\05\41\80\01\6a\24\00\0b\1c\00\20\00\20\02\42\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\00\83\37\03\08\20\00\20\01\37\03\00" "\0b\8f\09\02\06\7f\03\7e\23\00\41\30\6b\22\04\24\00\42\00" "\21\0a\02\40\02\40\20\02\41\02\4b\0d\00\20\02\41\02\74\22" "\02\41\cc\1a\6a\28\02\00\21\05\20\02\41\c0\1a\6a\28\02\00" "\21\06\03\40\02\40\02\40\20\01\28\02\04\22\02\20\01\28\02" "\68\46\0d\00\20\01\20\02\41\01\6a\36\02\04\20\02\2d\00\00" "\21\02\0c\01\0b\20\01\10\d0\03\21\02\0b\20\02\10\e7\03\0d" "\00\0b\41\01\21\07\02\40\02\40\20\02\41\55\6a\0e\03\00\01" "\00\01\0b\41\7f\41\01\20\02\41\2d\46\1b\21\07\02\40\20\01" "\28\02\04\22\02\20\01\28\02\68\46\0d\00\20\01\20\02\41\01" "\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b\20\01\10\d0\03" "\21\02\0b\41\00\21\08\02\40\02\40\02\40\20\02\41\5f\71\41" "\c9\00\47\0d\00\03\40\20\08\41\07\46\0d\02\02\40\02\40\20" "\01\28\02\04\22\02\20\01\28\02\68\46\0d\00\20\01\20\02\41" "\01\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b\20\01\10\d0" "\03\21\02\0b\20\08\41\81\08\6a\21\09\20\08\41\01\6a\21\08" "\20\02\41\20\72\20\09\2c\00\00\46\0d\00\0b\0b\02\40\20\08" "\41\03\46\0d\00\20\08\41\08\46\0d\01\20\03\45\0d\02\20\08" "\41\04\49\0d\02\20\08\41\08\46\0d\01\0b\02\40\20\01\29\03" "\70\22\0a\42\00\53\0d\00\20\01\20\01\28\02\04\41\7f\6a\36" "\02\04\0b\20\03\45\0d\00\20\08\41\04\49\0d\00\20\0a\42\00" "\53\21\02\03\40\02\40\20\02\0d\00\20\01\20\01\28\02\04\41" "\7f\6a\36\02\04\0b\20\08\41\7f\6a\22\08\41\03\4b\0d\00\0b" "\0b\20\04\20\07\b2\43\00\00\80\7f\94\10\d2\03\20\04\41\08" "\6a\29\03\00\21\0b\20\04\29\03\00\21\0a\0c\02\0b\02\40\02" "\40\02\40\02\40\02\40\20\08\0d\00\41\00\21\08\20\02\41\5f" "\71\41\ce\00\47\0d\00\03\40\20\08\41\02\46\0d\02\02\40\02" "\40\20\01\28\02\04\22\02\20\01\28\02\68\46\0d\00\20\01\20" "\02\41\01\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b\20\01" "\10\d0\03\21\02\0b\20\08\41\d1\0a\6a\21\09\20\08\41\01\6a" "\21\08\20\02\41\20\72\20\09\2c\00\00\46\0d\00\0b\0b\20\08" "\0e\04\03\01\01\00\01\0b\02\40\02\40\20\01\28\02\04\22\02" "\20\01\28\02\68\46\0d\00\20\01\20\02\41\01\6a\36\02\04\20" "\02\2d\00\00\21\02\0c\01\0b\20\01\10\d0\03\21\02\0b\02\40" "\02\40\20\02\41\28\47\0d\00\41\01\21\08\0c\01\0b\42\00\21" "\0a\42\80\80\80\80\80\80\e0\ff\ff\00\21\0b\20\01\29\03\70" "\42\00\53\0d\05\20\01\20\01\28\02\04\41\7f\6a\36\02\04\0c" "\05\0b\03\40\02\40\02\40\20\01\28\02\04\22\02\20\01\28\02" "\68\46\0d\00\20\01\20\02\41\01\6a\36\02\04\20\02\2d\00\00" "\21\02\0c\01\0b\20\01\10\d0\03\21\02\0b\20\02\41\bf\7f\6a" "\21\09\02\40\02\40\20\02\41\50\6a\41\0a\49\0d\00\20\09\41" "\1a\49\0d\00\20\02\41\9f\7f\6a\21\09\20\02\41\df\00\46\0d" "\00\20\09\41\1a\4f\0d\01\0b\20\08\41\01\6a\21\08\0c\01\0b" "\0b\42\80\80\80\80\80\80\e0\ff\ff\00\21\0b\20\02\41\29\46" "\0d\04\02\40\20\01\29\03\70\22\0c\42\00\53\0d\00\20\01\20" "\01\28\02\04\41\7f\6a\36\02\04\0b\02\40\02\40\20\03\45\0d" "\00\20\08\0d\01\42\00\21\0a\0c\06\0b\10\24\41\1c\36\02\00" "\42\00\21\0a\0c\02\0b\03\40\02\40\20\0c\42\00\53\0d\00\20" "\01\20\01\28\02\04\41\7f\6a\36\02\04\0b\42\00\21\0a\20\08" "\41\7f\6a\22\08\0d\00\0c\05\0b\00\0b\42\00\21\0a\02\40\20" "\01\29\03\70\42\00\53\0d\00\20\01\20\01\28\02\04\41\7f\6a" "\36\02\04\0b\10\24\41\1c\36\02\00\0b\20\01\20\0a\10\cf\03" "\0c\01\0b\02\40\20\02\41\30\47\0d\00\02\40\02\40\20\01\28" "\02\04\22\08\20\01\28\02\68\46\0d\00\20\01\20\08\41\01\6a" "\36\02\04\20\08\2d\00\00\21\08\0c\01\0b\20\01\10\d0\03\21" "\08\0b\02\40\20\08\41\5f\71\41\d8\00\47\0d\00\20\04\41\10" "\6a\20\01\20\06\20\05\20\07\20\03\10\e8\03\20\04\41\18\6a" "\29\03\00\21\0b\20\04\29\03\10\21\0a\0c\03\0b\20\01\29\03" "\70\42\00\53\0d\00\20\01\20\01\28\02\04\41\7f\6a\36\02\04" "\0b\20\04\41\20\6a\20\01\20\02\20\06\20\05\20\07\20\03\10" "\e9\03\20\04\41\28\6a\29\03\00\21\0b\20\04\29\03\20\21\0a" "\0c\01\0b\42\00\21\0b\0b\20\00\20\0a\37\03\00\20\00\20\0b" "\37\03\08\20\04\41\30\6a\24\00\0b\10\00\20\00\41\20\46\20" "\00\41\77\6a\41\05\49\72\0b\c3\0f\02\08\7f\07\7e\23\00\41" "\b0\03\6b\22\06\24\00\02\40\02\40\20\01\28\02\04\22\07\20" "\01\28\02\68\46\0d\00\20\01\20\07\41\01\6a\36\02\04\20\07" "\2d\00\00\21\07\0c\01\0b\20\01\10\d0\03\21\07\0b\41\00\21" "\08\42\00\21\0e\41\00\21\09\02\40\02\40\02\40\03\40\02\40" "\20\07\41\30\46\0d\00\20\07\41\2e\47\0d\04\20\01\28\02\04" "\22\07\20\01\28\02\68\46\0d\02\20\01\20\07\41\01\6a\36\02" "\04\20\07\2d\00\00\21\07\0c\03\0b\02\40\20\01\28\02\04\22" "\07\20\01\28\02\68\46\0d\00\41\01\21\09\20\01\20\07\41\01" "\6a\36\02\04\20\07\2d\00\00\21\07\0c\01\0b\41\01\21\09\20" "\01\10\d0\03\21\07\0c\00\0b\00\0b\20\01\10\d0\03\21\07\0b" "\41\01\21\08\42\00\21\0e\20\07\41\30\47\0d\00\03\40\02\40" "\02\40\20\01\28\02\04\22\07\20\01\28\02\68\46\0d\00\20\01" "\20\07\41\01\6a\36\02\04\20\07\2d\00\00\21\07\0c\01\0b\20" "\01\10\d0\03\21\07\0b\20\0e\42\7f\7c\21\0e\20\07\41\30\46" "\0d\00\0b\41\01\21\08\41\01\21\09\0b\42\80\80\80\80\80\80" "\c0\ff\3f\21\0f\41\00\21\0a\42\00\21\10\42\00\21\11\42\00" "\21\12\41\00\21\0b\42\00\21\13\02\40\03\40\20\07\21\0c\02" "\40\02\40\20\07\41\50\6a\22\0d\41\0a\49\0d\00\20\07\41\20" "\72\21\0c\02\40\20\07\41\2e\46\0d\00\20\0c\41\9f\7f\6a\41" "\05\4b\0d\04\0b\20\07\41\2e\47\0d\00\20\08\0d\03\41\01\21" "\08\20\13\21\0e\0c\01\0b\20\0c\41\a9\7f\6a\20\0d\20\07\41" "\39\4a\1b\21\07\02\40\02\40\20\13\42\07\55\0d\00\20\07\20" "\0a\41\04\74\6a\21\0a\0c\01\0b\02\40\20\13\42\1c\56\0d\00" "\20\06\41\30\6a\20\07\10\d3\03\20\06\41\20\6a\20\12\20\0f" "\42\00\42\80\80\80\80\80\80\c0\fd\3f\10\d5\03\20\06\41\10" "\6a\20\06\29\03\30\20\06\41\30\6a\41\08\6a\29\03\00\20\06" "\29\03\20\22\12\20\06\41\20\6a\41\08\6a\29\03\00\22\0f\10" "\d5\03\20\06\20\06\29\03\10\20\06\41\10\6a\41\08\6a\29\03" "\00\20\10\20\11\10\d8\03\20\06\41\08\6a\29\03\00\21\11\20" "\06\29\03\00\21\10\0c\01\0b\20\07\45\0d\00\20\0b\0d\00\20" "\06\41\d0\00\6a\20\12\20\0f\42\00\42\80\80\80\80\80\80\80" "\ff\3f\10\d5\03\20\06\41\c0\00\6a\20\06\29\03\50\20\06\41" "\d0\00\6a\41\08\6a\29\03\00\20\10\20\11\10\d8\03\20\06\41" "\c0\00\6a\41\08\6a\29\03\00\21\11\41\01\21\0b\20\06\29\03" "\40\21\10\0b\20\13\42\01\7c\21\13\41\01\21\09\0b\02\40\20" "\01\28\02\04\22\07\20\01\28\02\68\46\0d\00\20\01\20\07\41" "\01\6a\36\02\04\20\07\2d\00\00\21\07\0c\01\0b\20\01\10\d0" "\03\21\07\0c\00\0b\00\0b\02\40\02\40\20\09\0d\00\02\40\02" "\40\02\40\20\01\29\03\70\42\00\53\0d\00\20\01\20\01\28\02" "\04\22\07\41\7f\6a\36\02\04\20\05\45\0d\01\20\01\20\07\41" "\7e\6a\36\02\04\20\08\45\0d\02\20\01\20\07\41\7d\6a\36\02" "\04\0c\02\0b\20\05\0d\01\0b\20\01\42\00\10\cf\03\0b\20\06" "\41\e0\00\6a\20\04\b7\44\00\00\00\00\00\00\00\00\a2\10\d9" "\03\20\06\41\e8\00\6a\29\03\00\21\13\20\06\29\03\60\21\10" "\0c\01\0b\02\40\20\13\42\07\55\0d\00\20\13\21\0f\03\40\20" "\0a\41\04\74\21\0a\20\0f\42\01\7c\22\0f\42\08\52\0d\00\0b" "\0b\02\40\02\40\02\40\02\40\20\07\41\5f\71\41\d0\00\47\0d" "\00\20\01\20\05\10\ea\03\22\0f\42\80\80\80\80\80\80\80\80" "\80\7f\52\0d\03\02\40\20\05\45\0d\00\20\01\29\03\70\42\7f" "\55\0d\02\0c\03\0b\42\00\21\10\20\01\42\00\10\cf\03\42\00" "\21\13\0c\04\0b\42\00\21\0f\20\01\29\03\70\42\00\53\0d\02" "\0b\20\01\20\01\28\02\04\41\7f\6a\36\02\04\0b\42\00\21\0f" "\0b\02\40\20\0a\0d\00\20\06\41\f0\00\6a\20\04\b7\44\00\00" "\00\00\00\00\00\00\a2\10\d9\03\20\06\41\f8\00\6a\29\03\00" "\21\13\20\06\29\03\70\21\10\0c\01\0b\02\40\20\0e\20\13\20" "\08\1b\42\02\86\20\0f\7c\42\60\7c\22\13\41\00\20\03\6b\ad" "\57\0d\00\10\24\41\c4\00\36\02\00\20\06\41\a0\01\6a\20\04" "\10\d3\03\20\06\41\90\01\6a\20\06\29\03\a0\01\20\06\41\a0" "\01\6a\41\08\6a\29\03\00\42\7f\42\ff\ff\ff\ff\ff\ff\bf\ff" "\ff\00\10\d5\03\20\06\41\80\01\6a\20\06\29\03\90\01\20\06" "\41\90\01\6a\41\08\6a\29\03\00\42\7f\42\ff\ff\ff\ff\ff\ff" "\bf\ff\ff\00\10\d5\03\20\06\41\80\01\6a\41\08\6a\29\03\00" "\21\13\20\06\29\03\80\01\21\10\0c\01\0b\02\40\20\13\20\03" "\41\9e\7e\6a\ac\53\0d\00\02\40\20\0a\41\7f\4c\0d\00\03\40" "\20\06\41\a0\03\6a\20\10\20\11\42\00\42\80\80\80\80\80\80" "\c0\ff\bf\7f\10\d8\03\20\10\20\11\42\00\42\80\80\80\80\80" "\80\80\ff\3f\10\db\03\21\07\20\06\41\90\03\6a\20\10\20\11" "\20\06\29\03\a0\03\20\10\20\07\41\7f\4a\22\07\1b\20\06\41" "\a0\03\6a\41\08\6a\29\03\00\20\11\20\07\1b\10\d8\03\20\13" "\42\7f\7c\21\13\20\06\41\90\03\6a\41\08\6a\29\03\00\21\11" "\20\06\29\03\90\03\21\10\20\0a\41\01\74\20\07\72\22\0a\41" "\7f\4a\0d\00\0b\0b\02\40\02\40\20\13\20\03\ac\7d\42\20\7c" "\22\0e\a7\22\07\41\00\20\07\41\00\4a\1b\20\02\20\0e\20\02" "\ad\53\1b\22\07\41\f1\00\48\0d\00\20\06\41\80\03\6a\20\04" "\10\d3\03\20\06\41\88\03\6a\29\03\00\21\0e\42\00\21\0f\20" "\06\29\03\80\03\21\12\42\00\21\14\0c\01\0b\20\06\41\e0\02" "\6a\44\00\00\00\00\00\00\f0\3f\41\90\01\20\07\6b\10\dc\03" "\10\d9\03\20\06\41\d0\02\6a\20\04\10\d3\03\20\06\41\f0\02" "\6a\20\06\29\03\e0\02\20\06\41\e0\02\6a\41\08\6a\29\03\00" "\20\06\29\03\d0\02\22\12\20\06\41\d0\02\6a\41\08\6a\29\03" "\00\22\0e\10\dd\03\20\06\41\f0\02\6a\41\08\6a\29\03\00\21" "\14\20\06\29\03\f0\02\21\0f\0b\20\06\41\c0\02\6a\20\0a\20" "\0a\41\01\71\45\20\07\41\20\48\20\10\20\11\42\00\42\00\10" "\da\03\41\00\47\71\71\22\07\72\10\de\03\20\06\41\b0\02\6a" "\20\12\20\0e\20\06\29\03\c0\02\20\06\41\c0\02\6a\41\08\6a" "\29\03\00\10\d5\03\20\06\41\90\02\6a\20\06\29\03\b0\02\20" "\06\41\b0\02\6a\41\08\6a\29\03\00\20\0f\20\14\10\d8\03\20" "\06\41\a0\02\6a\20\12\20\0e\42\00\20\10\20\07\1b\42\00\20" "\11\20\07\1b\10\d5\03\20\06\41\80\02\6a\20\06\29\03\a0\02" "\20\06\41\a0\02\6a\41\08\6a\29\03\00\20\06\29\03\90\02\20" "\06\41\90\02\6a\41\08\6a\29\03\00\10\d8\03\20\06\41\f0\01" "\6a\20\06\29\03\80\02\20\06\41\80\02\6a\41\08\6a\29\03\00" "\20\0f\20\14\10\df\03\02\40\20\06\29\03\f0\01\22\10\20\06" "\41\f0\01\6a\41\08\6a\29\03\00\22\11\42\00\42\00\10\da\03" "\0d\00\10\24\41\c4\00\36\02\00\0b\20\06\41\e0\01\6a\20\10" "\20\11\20\13\a7\10\e0\03\20\06\41\e0\01\6a\41\08\6a\29\03" "\00\21\13\20\06\29\03\e0\01\21\10\0c\01\0b\10\24\41\c4\00" "\36\02\00\20\06\41\d0\01\6a\20\04\10\d3\03\20\06\41\c0\01" "\6a\20\06\29\03\d0\01\20\06\41\d0\01\6a\41\08\6a\29\03\00" "\42\00\42\80\80\80\80\80\80\c0\00\10\d5\03\20\06\41\b0\01" "\6a\20\06\29\03\c0\01\20\06\41\c0\01\6a\41\08\6a\29\03\00" "\42\00\42\80\80\80\80\80\80\c0\00\10\d5\03\20\06\41\b0\01" "\6a\41\08\6a\29\03\00\21\13\20\06\29\03\b0\01\21\10\0b\20" "\00\20\10\37\03\00\20\00\20\13\37\03\08\20\06\41\b0\03\6a" "\24\00\0b\f5\1f\03\0b\7f\06\7e\01\7c\23\00\41\90\c6\00\6b" "\22\07\24\00\41\00\21\08\41\00\20\04\6b\22\09\20\03\6b\21" "\0a\42\00\21\12\41\00\21\0b\02\40\02\40\02\40\03\40\02\40" "\20\02\41\30\46\0d\00\20\02\41\2e\47\0d\04\20\01\28\02\04" "\22\02\20\01\28\02\68\46\0d\02\20\01\20\02\41\01\6a\36\02" "\04\20\02\2d\00\00\21\02\0c\03\0b\02\40\20\01\28\02\04\22" "\02\20\01\28\02\68\46\0d\00\41\01\21\0b\20\01\20\02\41\01" "\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b\41\01\21\0b\20" "\01\10\d0\03\21\02\0c\00\0b\00\0b\20\01\10\d0\03\21\02\0b" "\41\01\21\08\42\00\21\12\20\02\41\30\47\0d\00\03\40\02\40" "\02\40\20\01\28\02\04\22\02\20\01\28\02\68\46\0d\00\20\01" "\20\02\41\01\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b\20" "\01\10\d0\03\21\02\0b\20\12\42\7f\7c\21\12\20\02\41\30\46" "\0d\00\0b\41\01\21\0b\41\01\21\08\0b\41\00\21\0c\20\07\41" "\00\36\02\90\06\20\02\41\50\6a\21\0d\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\20\02\41\2e\46\22\0e\0d\00\42\00\21" "\13\20\0d\41\09\4d\0d\00\41\00\21\0f\41\00\21\10\0c\01\0b" "\42\00\21\13\41\00\21\10\41\00\21\0f\41\00\21\0c\03\40\02" "\40\02\40\20\0e\41\01\71\45\0d\00\02\40\20\08\0d\00\20\13" "\21\12\41\01\21\08\0c\02\0b\20\0b\45\21\0e\0c\04\0b\20\13" "\42\01\7c\21\13\02\40\20\0f\41\fc\0f\4a\0d\00\20\07\41\90" "\06\6a\20\0f\41\02\74\6a\21\0e\02\40\20\10\45\0d\00\20\02" "\20\0e\28\02\00\41\0a\6c\6a\41\50\6a\21\0d\0b\20\0c\20\13" "\a7\20\02\41\30\46\1b\21\0c\20\0e\20\0d\36\02\00\41\01\21" "\0b\41\00\20\10\41\01\6a\22\02\20\02\41\09\46\22\02\1b\21" "\10\20\0f\20\02\6a\21\0f\0c\01\0b\20\02\41\30\46\0d\00\20" "\07\20\07\28\02\80\46\41\01\72\36\02\80\46\41\dc\8f\01\21" "\0c\0b\02\40\02\40\20\01\28\02\04\22\02\20\01\28\02\68\46" "\0d\00\20\01\20\02\41\01\6a\36\02\04\20\02\2d\00\00\21\02" "\0c\01\0b\20\01\10\d0\03\21\02\0b\20\02\41\50\6a\21\0d\20" "\02\41\2e\46\22\0e\0d\00\20\0d\41\0a\49\0d\00\0b\0b\20\12" "\20\13\20\08\1b\21\12\02\40\20\0b\45\0d\00\20\02\41\5f\71" "\41\c5\00\47\0d\00\02\40\20\01\20\06\10\ea\03\22\14\42\80" "\80\80\80\80\80\80\80\80\7f\52\0d\00\20\06\45\0d\04\42\00" "\21\14\20\01\29\03\70\42\00\53\0d\00\20\01\20\01\28\02\04" "\41\7f\6a\36\02\04\0b\20\14\20\12\7c\21\12\0c\04\0b\20\0b" "\45\21\0e\20\02\41\00\48\0d\01\0b\20\01\29\03\70\42\00\53" "\0d\00\20\01\20\01\28\02\04\41\7f\6a\36\02\04\0b\20\0e\45" "\0d\01\10\24\41\1c\36\02\00\0b\42\00\21\13\20\01\42\00\10" "\cf\03\42\00\21\12\0c\01\0b\02\40\20\07\28\02\90\06\22\01" "\0d\00\20\07\20\05\b7\44\00\00\00\00\00\00\00\00\a2\10\d9" "\03\20\07\41\08\6a\29\03\00\21\12\20\07\29\03\00\21\13\0c" "\01\0b\02\40\20\13\42\09\55\0d\00\20\12\20\13\52\0d\00\02" "\40\20\03\41\1e\4a\0d\00\20\01\20\03\76\0d\01\0b\20\07\41" "\30\6a\20\05\10\d3\03\20\07\41\20\6a\20\01\10\de\03\20\07" "\41\10\6a\20\07\29\03\30\20\07\41\30\6a\41\08\6a\29\03\00" "\20\07\29\03\20\20\07\41\20\6a\41\08\6a\29\03\00\10\d5\03" "\20\07\41\10\6a\41\08\6a\29\03\00\21\12\20\07\29\03\10\21" "\13\0c\01\0b\02\40\20\12\20\09\41\01\76\ad\57\0d\00\10\24" "\41\c4\00\36\02\00\20\07\41\e0\00\6a\20\05\10\d3\03\20\07" "\41\d0\00\6a\20\07\29\03\60\20\07\41\e0\00\6a\41\08\6a\29" "\03\00\42\7f\42\ff\ff\ff\ff\ff\ff\bf\ff\ff\00\10\d5\03\20" "\07\41\c0\00\6a\20\07\29\03\50\20\07\41\d0\00\6a\41\08\6a" "\29\03\00\42\7f\42\ff\ff\ff\ff\ff\ff\bf\ff\ff\00\10\d5\03" "\20\07\41\c0\00\6a\41\08\6a\29\03\00\21\12\20\07\29\03\40" "\21\13\0c\01\0b\02\40\20\12\20\04\41\9e\7e\6a\ac\59\0d\00" "\10\24\41\c4\00\36\02\00\20\07\41\90\01\6a\20\05\10\d3\03" "\20\07\41\80\01\6a\20\07\29\03\90\01\20\07\41\90\01\6a\41" "\08\6a\29\03\00\42\00\42\80\80\80\80\80\80\c0\00\10\d5\03" "\20\07\41\f0\00\6a\20\07\29\03\80\01\20\07\41\80\01\6a\41" "\08\6a\29\03\00\42\00\42\80\80\80\80\80\80\c0\00\10\d5\03" "\20\07\41\f0\00\6a\41\08\6a\29\03\00\21\12\20\07\29\03\70" "\21\13\0c\01\0b\02\40\20\10\45\0d\00\02\40\20\10\41\08\4a" "\0d\00\20\07\41\90\06\6a\20\0f\41\02\74\6a\22\02\28\02\00" "\21\01\03\40\20\01\41\0a\6c\21\01\20\10\41\01\6a\22\10\41" "\09\47\0d\00\0b\20\02\20\01\36\02\00\0b\20\0f\41\01\6a\21" "\0f\0b\20\12\a7\21\10\02\40\20\0c\41\09\4e\0d\00\20\0c\20" "\10\4a\0d\00\20\10\41\11\4a\0d\00\02\40\20\10\41\09\47\0d" "\00\20\07\41\c0\01\6a\20\05\10\d3\03\20\07\41\b0\01\6a\20" "\07\28\02\90\06\10\de\03\20\07\41\a0\01\6a\20\07\29\03\c0" "\01\20\07\41\c0\01\6a\41\08\6a\29\03\00\20\07\29\03\b0\01" "\20\07\41\b0\01\6a\41\08\6a\29\03\00\10\d5\03\20\07\41\a0" "\01\6a\41\08\6a\29\03\00\21\12\20\07\29\03\a0\01\21\13\0c" "\02\0b\02\40\20\10\41\08\4a\0d\00\20\07\41\90\02\6a\20\05" "\10\d3\03\20\07\41\80\02\6a\20\07\28\02\90\06\10\de\03\20" "\07\41\f0\01\6a\20\07\29\03\90\02\20\07\41\90\02\6a\41\08" "\6a\29\03\00\20\07\29\03\80\02\20\07\41\80\02\6a\41\08\6a" "\29\03\00\10\d5\03\20\07\41\e0\01\6a\41\08\20\10\6b\41\02" "\74\41\a0\1a\6a\28\02\00\10\d3\03\20\07\41\d0\01\6a\20\07" "\29\03\f0\01\20\07\41\f0\01\6a\41\08\6a\29\03\00\20\07\29" "\03\e0\01\20\07\41\e0\01\6a\41\08\6a\29\03\00\10\e2\03\20" "\07\41\d0\01\6a\41\08\6a\29\03\00\21\12\20\07\29\03\d0\01" "\21\13\0c\02\0b\20\07\28\02\90\06\21\01\02\40\20\03\20\10" "\41\7d\6c\6a\41\1b\6a\22\02\41\1e\4a\0d\00\20\01\20\02\76" "\0d\01\0b\20\07\41\e0\02\6a\20\05\10\d3\03\20\07\41\d0\02" "\6a\20\01\10\de\03\20\07\41\c0\02\6a\20\07\29\03\e0\02\20" "\07\41\e0\02\6a\41\08\6a\29\03\00\20\07\29\03\d0\02\20\07" "\41\d0\02\6a\41\08\6a\29\03\00\10\d5\03\20\07\41\b0\02\6a" "\20\10\41\02\74\41\f8\19\6a\28\02\00\10\d3\03\20\07\41\a0" "\02\6a\20\07\29\03\c0\02\20\07\41\c0\02\6a\41\08\6a\29\03" "\00\20\07\29\03\b0\02\20\07\41\b0\02\6a\41\08\6a\29\03\00" "\10\d5\03\20\07\41\a0\02\6a\41\08\6a\29\03\00\21\12\20\07" "\29\03\a0\02\21\13\0c\01\0b\03\40\20\07\41\90\06\6a\20\0f" "\22\0e\41\7f\6a\22\0f\41\02\74\6a\28\02\00\45\0d\00\0b\41" "\00\21\0c\02\40\02\40\20\10\41\09\6f\22\01\0d\00\41\00\21" "\0d\0c\01\0b\41\00\21\0d\20\01\41\09\6a\20\01\20\10\41\00" "\48\1b\21\09\02\40\02\40\20\0e\0d\00\41\00\21\0e\0c\01\0b" "\41\80\94\eb\dc\03\41\08\20\09\6b\41\02\74\41\a0\1a\6a\28" "\02\00\22\0b\6d\21\06\41\00\21\02\41\00\21\01\41\00\21\0d" "\03\40\20\07\41\90\06\6a\20\01\41\02\74\6a\22\0f\20\0f\28" "\02\00\22\0f\20\0b\6e\22\08\20\02\6a\22\02\36\02\00\20\0d" "\41\01\6a\41\ff\0f\71\20\0d\20\01\20\0d\46\20\02\45\71\22" "\02\1b\21\0d\20\10\41\77\6a\20\10\20\02\1b\21\10\20\06\20" "\0f\20\08\20\0b\6c\6b\6c\21\02\20\01\41\01\6a\22\01\20\0e" "\47\0d\00\0b\20\02\45\0d\00\20\07\41\90\06\6a\20\0e\41\02" "\74\6a\20\02\36\02\00\20\0e\41\01\6a\21\0e\0b\20\10\20\09" "\6b\41\09\6a\21\10\0b\03\40\20\07\41\90\06\6a\20\0d\41\02" "\74\6a\21\09\20\10\41\24\48\21\06\02\40\03\40\02\40\20\06" "\0d\00\20\10\41\24\47\0d\02\20\09\28\02\00\41\d1\e9\f9\04" "\4f\0d\02\0b\20\0e\41\ff\0f\6a\21\0f\41\00\21\0b\03\40\20" "\0e\21\02\02\40\02\40\20\07\41\90\06\6a\20\0f\41\ff\0f\71" "\22\01\41\02\74\6a\22\0e\35\02\00\42\1d\86\20\0b\ad\7c\22" "\12\42\81\94\eb\dc\03\5a\0d\00\41\00\21\0b\0c\01\0b\20\12" "\20\12\42\80\94\eb\dc\03\80\22\13\42\80\94\eb\dc\03\7e\7d" "\21\12\20\13\a7\21\0b\0b\20\0e\20\12\a7\22\0f\36\02\00\20" "\02\20\02\20\02\20\01\20\0f\1b\20\01\20\0d\46\1b\20\01\20" "\02\41\7f\6a\41\ff\0f\71\22\08\47\1b\21\0e\20\01\41\7f\6a" "\21\0f\20\01\20\0d\47\0d\00\0b\20\0c\41\63\6a\21\0c\20\02" "\21\0e\20\0b\45\0d\00\0b\02\40\02\40\20\0d\41\7f\6a\41\ff" "\0f\71\22\0d\20\02\46\0d\00\20\02\21\0e\0c\01\0b\20\07\41" "\90\06\6a\20\02\41\fe\0f\6a\41\ff\0f\71\41\02\74\6a\22\01" "\20\01\28\02\00\20\07\41\90\06\6a\20\08\41\02\74\6a\28\02" "\00\72\36\02\00\20\08\21\0e\0b\20\10\41\09\6a\21\10\20\07" "\41\90\06\6a\20\0d\41\02\74\6a\20\0b\36\02\00\0c\01\0b\0b" "\02\40\03\40\20\0e\41\01\6a\41\ff\0f\71\21\11\20\07\41\90" "\06\6a\20\0e\41\7f\6a\41\ff\0f\71\41\02\74\6a\21\09\03\40" "\41\09\41\01\20\10\41\2d\4a\1b\21\0f\02\40\03\40\20\0d\21" "\0b\41\00\21\01\02\40\02\40\03\40\20\01\20\0b\6a\41\ff\0f" "\71\22\02\20\0e\46\0d\01\20\07\41\90\06\6a\20\02\41\02\74" "\6a\28\02\00\22\02\20\01\41\02\74\41\90\1a\6a\28\02\00\22" "\0d\49\0d\01\20\02\20\0d\4b\0d\02\20\01\41\01\6a\22\01\41" "\04\47\0d\00\0b\0b\20\10\41\24\47\0d\00\42\00\21\12\41\00" "\21\01\42\00\21\13\03\40\02\40\20\01\20\0b\6a\41\ff\0f\71" "\22\02\20\0e\47\0d\00\20\0e\41\01\6a\41\ff\0f\71\22\0e\41" "\02\74\20\07\41\90\06\6a\6a\41\7c\6a\41\00\36\02\00\0b\20" "\07\41\80\06\6a\20\07\41\90\06\6a\20\02\41\02\74\6a\28\02" "\00\10\de\03\20\07\41\f0\05\6a\20\12\20\13\42\00\42\80\80" "\80\80\e5\9a\b7\8e\c0\00\10\d5\03\20\07\41\e0\05\6a\20\07" "\29\03\f0\05\20\07\41\f0\05\6a\41\08\6a\29\03\00\20\07\29" "\03\80\06\20\07\41\80\06\6a\41\08\6a\29\03\00\10\d8\03\20" "\07\41\e0\05\6a\41\08\6a\29\03\00\21\13\20\07\29\03\e0\05" "\21\12\20\01\41\01\6a\22\01\41\04\47\0d\00\0b\20\07\41\d0" "\05\6a\20\05\10\d3\03\20\07\41\c0\05\6a\20\12\20\13\20\07" "\29\03\d0\05\20\07\41\d0\05\6a\41\08\6a\29\03\00\10\d5\03" "\20\07\41\c0\05\6a\41\08\6a\29\03\00\21\13\42\00\21\12\20" "\07\29\03\c0\05\21\14\20\0c\41\f1\00\6a\22\0d\20\04\6b\22" "\01\41\00\20\01\41\00\4a\1b\20\03\20\01\20\03\48\22\08\1b" "\22\02\41\f0\00\4c\0d\02\42\00\21\15\42\00\21\16\42\00\21" "\17\0c\05\0b\20\0f\20\0c\6a\21\0c\20\0e\21\0d\20\0b\20\0e" "\46\0d\00\0b\41\80\94\eb\dc\03\20\0f\76\21\08\41\7f\20\0f" "\74\41\7f\73\21\06\41\00\21\01\20\0b\21\0d\03\40\20\07\41" "\90\06\6a\20\0b\41\02\74\6a\22\02\20\02\28\02\00\22\02\20" "\0f\76\20\01\6a\22\01\36\02\00\20\0d\41\01\6a\41\ff\0f\71" "\20\0d\20\0b\20\0d\46\20\01\45\71\22\01\1b\21\0d\20\10\41" "\77\6a\20\10\20\01\1b\21\10\20\02\20\06\71\20\08\6c\21\01" "\20\0b\41\01\6a\41\ff\0f\71\22\0b\20\0e\47\0d\00\0b\20\01" "\45\0d\01\02\40\20\11\20\0d\46\0d\00\20\07\41\90\06\6a\20" "\0e\41\02\74\6a\20\01\36\02\00\20\11\21\0e\0c\03\0b\20\09" "\20\09\28\02\00\41\01\72\36\02\00\0c\01\0b\0b\0b\20\07\41" "\90\05\6a\44\00\00\00\00\00\00\f0\3f\41\e1\01\20\02\6b\10" "\dc\03\10\d9\03\20\07\41\b0\05\6a\20\07\29\03\90\05\20\07" "\41\90\05\6a\41\08\6a\29\03\00\20\14\20\13\10\dd\03\20\07" "\41\b0\05\6a\41\08\6a\29\03\00\21\17\20\07\29\03\b0\05\21" "\16\20\07\41\80\05\6a\44\00\00\00\00\00\00\f0\3f\41\f1\00" "\20\02\6b\10\dc\03\10\d9\03\20\07\41\a0\05\6a\20\14\20\13" "\20\07\29\03\80\05\20\07\41\80\05\6a\41\08\6a\29\03\00\10" "\e4\03\20\07\41\f0\04\6a\20\14\20\13\20\07\29\03\a0\05\22" "\12\20\07\41\a0\05\6a\41\08\6a\29\03\00\22\15\10\df\03\20" "\07\41\e0\04\6a\20\16\20\17\20\07\29\03\f0\04\20\07\41\f0" "\04\6a\41\08\6a\29\03\00\10\d8\03\20\07\41\e0\04\6a\41\08" "\6a\29\03\00\21\13\20\07\29\03\e0\04\21\14\0b\02\40\20\0b" "\41\04\6a\41\ff\0f\71\22\0f\20\0e\46\0d\00\02\40\02\40\20" "\07\41\90\06\6a\20\0f\41\02\74\6a\28\02\00\22\0f\41\ff\c9" "\b5\ee\01\4b\0d\00\02\40\20\0f\0d\00\20\0b\41\05\6a\41\ff" "\0f\71\20\0e\46\0d\02\0b\20\07\41\f0\03\6a\20\05\b7\44\00" "\00\00\00\00\00\d0\3f\a2\10\d9\03\20\07\41\e0\03\6a\20\12" "\20\15\20\07\29\03\f0\03\20\07\41\f0\03\6a\41\08\6a\29\03" "\00\10\d8\03\20\07\41\e0\03\6a\41\08\6a\29\03\00\21\15\20" "\07\29\03\e0\03\21\12\0c\01\0b\02\40\20\0f\41\80\ca\b5\ee" "\01\46\0d\00\20\07\41\d0\04\6a\20\05\b7\44\00\00\00\00\00" "\00\e8\3f\a2\10\d9\03\20\07\41\c0\04\6a\20\12\20\15\20\07" "\29\03\d0\04\20\07\41\d0\04\6a\41\08\6a\29\03\00\10\d8\03" "\20\07\41\c0\04\6a\41\08\6a\29\03\00\21\15\20\07\29\03\c0" "\04\21\12\0c\01\0b\20\05\b7\21\18\02\40\20\0b\41\05\6a\41" "\ff\0f\71\20\0e\47\0d\00\20\07\41\90\04\6a\20\18\44\00\00" "\00\00\00\00\e0\3f\a2\10\d9\03\20\07\41\80\04\6a\20\12\20" "\15\20\07\29\03\90\04\20\07\41\90\04\6a\41\08\6a\29\03\00" "\10\d8\03\20\07\41\80\04\6a\41\08\6a\29\03\00\21\15\20\07" "\29\03\80\04\21\12\0c\01\0b\20\07\41\b0\04\6a\20\18\44\00" "\00\00\00\00\00\e8\3f\a2\10\d9\03\20\07\41\a0\04\6a\20\12" "\20\15\20\07\29\03\b0\04\20\07\41\b0\04\6a\41\08\6a\29\03" "\00\10\d8\03\20\07\41\a0\04\6a\41\08\6a\29\03\00\21\15\20" "\07\29\03\a0\04\21\12\0b\20\02\41\ef\00\4a\0d\00\20\07\41" "\d0\03\6a\20\12\20\15\42\00\42\80\80\80\80\80\80\c0\ff\3f" "\10\e4\03\20\07\29\03\d0\03\20\07\41\d0\03\6a\41\08\6a\29" "\03\00\42\00\42\00\10\da\03\0d\00\20\07\41\c0\03\6a\20\12" "\20\15\42\00\42\80\80\80\80\80\80\c0\ff\3f\10\d8\03\20\07" "\41\c0\03\6a\41\08\6a\29\03\00\21\15\20\07\29\03\c0\03\21" "\12\0b\20\07\41\b0\03\6a\20\14\20\13\20\12\20\15\10\d8\03" "\20\07\41\a0\03\6a\20\07\29\03\b0\03\20\07\41\b0\03\6a\41" "\08\6a\29\03\00\20\16\20\17\10\df\03\20\07\41\a0\03\6a\41" "\08\6a\29\03\00\21\13\20\07\29\03\a0\03\21\14\02\40\20\0d" "\41\ff\ff\ff\ff\07\71\20\0a\41\7e\6a\4c\0d\00\20\07\41\90" "\03\6a\20\14\20\13\10\e5\03\20\07\41\80\03\6a\20\14\20\13" "\42\00\42\80\80\80\80\80\80\80\ff\3f\10\d5\03\20\07\29\03" "\90\03\20\07\41\90\03\6a\41\08\6a\29\03\00\42\00\42\80\80" "\80\80\80\80\80\b8\c0\00\10\db\03\21\0d\20\07\41\80\03\6a" "\41\08\6a\29\03\00\20\13\20\0d\41\7f\4a\22\0e\1b\21\13\20" "\07\29\03\80\03\20\14\20\0e\1b\21\14\20\12\20\15\42\00\42" "\00\10\da\03\21\0b\02\40\20\0c\20\0e\6a\22\0c\41\ee\00\6a" "\20\0a\4a\0d\00\20\08\20\02\20\01\47\20\0d\41\00\48\72\71" "\20\0b\41\00\47\71\45\0d\01\0b\10\24\41\c4\00\36\02\00\0b" "\20\07\41\f0\02\6a\20\14\20\13\20\0c\10\e0\03\20\07\41\f0" "\02\6a\41\08\6a\29\03\00\21\12\20\07\29\03\f0\02\21\13\0b" "\20\00\20\12\37\03\08\20\00\20\13\37\03\00\20\07\41\90\c6" "\00\6a\24\00\0b\c4\04\02\04\7f\01\7e\02\40\02\40\20\00\28" "\02\04\22\02\20\00\28\02\68\46\0d\00\20\00\20\02\41\01\6a" "\36\02\04\20\02\2d\00\00\21\03\0c\01\0b\20\00\10\d0\03\21" "\03\0b\02\40\02\40\02\40\02\40\02\40\20\03\41\55\6a\0e\03" "\00\01\00\01\0b\02\40\02\40\20\00\28\02\04\22\02\20\00\28" "\02\68\46\0d\00\20\00\20\02\41\01\6a\36\02\04\20\02\2d\00" "\00\21\02\0c\01\0b\20\00\10\d0\03\21\02\0b\20\03\41\2d\46" "\21\04\20\02\41\46\6a\21\05\20\01\45\0d\01\20\05\41\75\4b" "\0d\01\20\00\29\03\70\42\00\53\0d\02\20\00\20\00\28\02\04" "\41\7f\6a\36\02\04\0c\02\0b\20\03\41\46\6a\21\05\41\00\21" "\04\20\03\21\02\0b\20\05\41\76\49\0d\00\42\00\21\06\02\40" "\20\02\41\50\6a\41\0a\4f\0d\00\41\00\21\03\03\40\20\02\20" "\03\41\0a\6c\6a\21\03\02\40\02\40\20\00\28\02\04\22\02\20" "\00\28\02\68\46\0d\00\20\00\20\02\41\01\6a\36\02\04\20\02" "\2d\00\00\21\02\0c\01\0b\20\00\10\d0\03\21\02\0b\20\03\41" "\50\6a\21\03\02\40\20\02\41\50\6a\22\05\41\09\4b\0d\00\20" "\03\41\cc\99\b3\e6\00\48\0d\01\0b\0b\20\03\ac\21\06\20\05" "\41\0a\4f\0d\00\03\40\20\02\ad\20\06\42\0a\7e\7c\21\06\02" "\40\02\40\20\00\28\02\04\22\02\20\00\28\02\68\46\0d\00\20" "\00\20\02\41\01\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b" "\20\00\10\d0\03\21\02\0b\20\06\42\50\7c\21\06\02\40\20\02" "\41\50\6a\22\03\41\09\4b\0d\00\20\06\42\ae\8f\85\d7\c7\c2" "\eb\a3\01\53\0d\01\0b\0b\20\03\41\0a\4f\0d\00\03\40\02\40" "\02\40\20\00\28\02\04\22\02\20\00\28\02\68\46\0d\00\20\00" "\20\02\41\01\6a\36\02\04\20\02\2d\00\00\21\02\0c\01\0b\20" "\00\10\d0\03\21\02\0b\20\02\41\50\6a\41\0a\49\0d\00\0b\0b" "\02\40\20\00\29\03\70\42\00\53\0d\00\20\00\20\00\28\02\04" "\41\7f\6a\36\02\04\0b\42\00\20\06\7d\20\06\20\04\1b\21\06" "\0c\01\0b\42\80\80\80\80\80\80\80\80\80\7f\21\06\20\00\29" "\03\70\42\00\53\0d\00\20\00\20\00\28\02\04\41\7f\6a\36\02" "\04\42\80\80\80\80\80\80\80\80\80\7f\0f\0b\20\06\0b\d5\0b" "\02\05\7f\04\7e\23\00\41\10\6b\22\04\24\00\02\40\02\40\02" "\40\20\01\41\24\4b\0d\00\20\01\41\01\47\0d\01\0b\10\24\41" "\1c\36\02\00\42\00\21\03\0c\01\0b\03\40\02\40\02\40\20\00" "\28\02\04\22\05\20\00\28\02\68\46\0d\00\20\00\20\05\41\01" "\6a\36\02\04\20\05\2d\00\00\21\05\0c\01\0b\20\00\10\d0\03" "\21\05\0b\20\05\10\ec\03\0d\00\0b\41\00\21\06\02\40\02\40" "\20\05\41\55\6a\0e\03\00\01\00\01\0b\41\7f\41\00\20\05\41" "\2d\46\1b\21\06\02\40\20\00\28\02\04\22\05\20\00\28\02\68" "\46\0d\00\20\00\20\05\41\01\6a\36\02\04\20\05\2d\00\00\21" "\05\0c\01\0b\20\00\10\d0\03\21\05\0b\02\40\02\40\02\40\02" "\40\02\40\20\01\41\00\47\20\01\41\10\47\71\0d\00\20\05\41" "\30\47\0d\00\02\40\02\40\20\00\28\02\04\22\05\20\00\28\02" "\68\46\0d\00\20\00\20\05\41\01\6a\36\02\04\20\05\2d\00\00" "\21\05\0c\01\0b\20\00\10\d0\03\21\05\0b\02\40\20\05\41\5f" "\71\41\d8\00\47\0d\00\02\40\02\40\20\00\28\02\04\22\05\20" "\00\28\02\68\46\0d\00\20\00\20\05\41\01\6a\36\02\04\20\05" "\2d\00\00\21\05\0c\01\0b\20\00\10\d0\03\21\05\0b\41\10\21" "\01\20\05\41\e1\1a\6a\2d\00\00\41\10\49\0d\03\42\00\21\03" "\02\40\02\40\20\00\29\03\70\42\00\53\0d\00\20\00\20\00\28" "\02\04\22\05\41\7f\6a\36\02\04\20\02\45\0d\01\20\00\20\05" "\41\7e\6a\36\02\04\0c\08\0b\20\02\0d\07\0b\42\00\21\03\20" "\00\42\00\10\cf\03\0c\06\0b\20\01\0d\01\41\08\21\01\0c\02" "\0b\20\01\41\0a\20\01\1b\22\01\20\05\41\e1\1a\6a\2d\00\00" "\4b\0d\00\42\00\21\03\02\40\20\00\29\03\70\42\00\53\0d\00" "\20\00\20\00\28\02\04\41\7f\6a\36\02\04\0b\20\00\42\00\10" "\cf\03\10\24\41\1c\36\02\00\0c\04\0b\20\01\41\0a\47\0d\00" "\42\00\21\09\02\40\20\05\41\50\6a\22\02\41\09\4b\0d\00\41" "\00\21\05\03\40\02\40\02\40\20\00\28\02\04\22\01\20\00\28" "\02\68\46\0d\00\20\00\20\01\41\01\6a\36\02\04\20\01\2d\00" "\00\21\01\0c\01\0b\20\00\10\d0\03\21\01\0b\20\05\41\0a\6c" "\20\02\6a\21\05\02\40\20\01\41\50\6a\22\02\41\09\4b\0d\00" "\20\05\41\99\b3\e6\cc\01\49\0d\01\0b\0b\20\05\ad\21\09\0b" "\20\02\41\09\4b\0d\02\20\09\42\0a\7e\21\0a\20\02\ad\21\0b" "\03\40\02\40\02\40\20\00\28\02\04\22\05\20\00\28\02\68\46" "\0d\00\20\00\20\05\41\01\6a\36\02\04\20\05\2d\00\00\21\05" "\0c\01\0b\20\00\10\d0\03\21\05\0b\20\0a\20\0b\7c\21\09\02" "\40\02\40\20\05\41\50\6a\22\02\41\09\4b\0d\00\20\09\42\9a" "\b3\e6\cc\99\b3\e6\cc\19\54\0d\01\0b\41\0a\21\01\20\02\41" "\09\4d\0d\03\0c\04\0b\20\09\42\0a\7e\22\0a\20\02\ad\22\0b" "\42\7f\85\58\0d\00\0b\41\0a\21\01\0c\01\0b\02\40\20\01\20" "\01\41\7f\6a\71\45\0d\00\42\00\21\09\02\40\20\01\20\05\41" "\e1\1a\6a\2d\00\00\22\07\4d\0d\00\41\00\21\02\03\40\02\40" "\02\40\20\00\28\02\04\22\05\20\00\28\02\68\46\0d\00\20\00" "\20\05\41\01\6a\36\02\04\20\05\2d\00\00\21\05\0c\01\0b\20" "\00\10\d0\03\21\05\0b\20\07\20\02\20\01\6c\6a\21\02\02\40" "\20\01\20\05\41\e1\1a\6a\2d\00\00\22\07\4d\0d\00\20\02\41" "\c7\e3\f1\38\49\0d\01\0b\0b\20\02\ad\21\09\0b\20\01\20\07" "\4d\0d\01\20\01\ad\21\0a\03\40\20\09\20\0a\7e\22\0b\20\07" "\ad\42\ff\01\83\22\0c\42\7f\85\56\0d\02\02\40\02\40\20\00" "\28\02\04\22\05\20\00\28\02\68\46\0d\00\20\00\20\05\41\01" "\6a\36\02\04\20\05\2d\00\00\21\05\0c\01\0b\20\00\10\d0\03" "\21\05\0b\20\0b\20\0c\7c\21\09\20\01\20\05\41\e1\1a\6a\2d" "\00\00\22\07\4d\0d\02\20\04\20\0a\42\00\20\09\42\00\10\e1" "\03\20\04\29\03\08\42\00\52\0d\02\0c\00\0b\00\0b\20\01\41" "\17\6c\41\05\76\41\07\71\41\e1\1c\6a\2c\00\00\21\08\42\00" "\21\09\02\40\20\01\20\05\41\e1\1a\6a\2d\00\00\22\02\4d\0d" "\00\41\00\21\07\03\40\02\40\02\40\20\00\28\02\04\22\05\20" "\00\28\02\68\46\0d\00\20\00\20\05\41\01\6a\36\02\04\20\05" "\2d\00\00\21\05\0c\01\0b\20\00\10\d0\03\21\05\0b\20\02\20" "\07\20\08\74\72\21\07\02\40\20\01\20\05\41\e1\1a\6a\2d\00" "\00\22\02\4d\0d\00\20\07\41\80\80\80\c0\00\49\0d\01\0b\0b" "\20\07\ad\21\09\0b\20\01\20\02\4d\0d\00\42\7f\20\08\ad\22" "\0b\88\22\0c\20\09\54\0d\00\03\40\20\02\ad\42\ff\01\83\21" "\0a\02\40\02\40\20\00\28\02\04\22\05\20\00\28\02\68\46\0d" "\00\20\00\20\05\41\01\6a\36\02\04\20\05\2d\00\00\21\05\0c" "\01\0b\20\00\10\d0\03\21\05\0b\20\09\20\0b\86\20\0a\84\21" "\09\20\01\20\05\41\e1\1a\6a\2d\00\00\22\02\4d\0d\01\20\09" "\20\0c\58\0d\00\0b\0b\20\01\20\05\41\e1\1a\6a\2d\00\00\4d" "\0d\00\03\40\02\40\02\40\20\00\28\02\04\22\05\20\00\28\02" "\68\46\0d\00\20\00\20\05\41\01\6a\36\02\04\20\05\2d\00\00" "\21\05\0c\01\0b\20\00\10\d0\03\21\05\0b\20\01\20\05\41\e1" "\1a\6a\2d\00\00\4b\0d\00\0b\10\24\41\c4\00\36\02\00\20\06" "\41\00\20\03\42\01\83\50\1b\21\06\20\03\21\09\0b\02\40\20" "\00\29\03\70\42\00\53\0d\00\20\00\20\00\28\02\04\41\7f\6a" "\36\02\04\0b\02\40\20\09\20\03\54\0d\00\02\40\20\03\a7\41" "\01\71\0d\00\20\06\0d\00\10\24\41\c4\00\36\02\00\20\03\42" "\7f\7c\21\03\0c\02\0b\20\09\20\03\58\0d\00\10\24\41\c4\00" "\36\02\00\0c\01\0b\20\09\20\06\ac\22\03\85\20\03\7d\21\03" "\0b\20\04\41\10\6a\24\00\20\03\0b\10\00\20\00\41\20\46\20" "\00\41\77\6a\41\05\49\72\0b\c4\03\02\03\7f\01\7e\23\00\41" "\20\6b\22\02\24\00\02\40\02\40\20\01\42\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\00\83\22\05\42\80\80\80\80\80\80\c0\bf\40\7c\20" "\05\42\80\80\80\80\80\80\c0\c0\bf\7f\7c\5a\0d\00\20\01\42" "\19\88\a7\21\03\02\40\20\00\50\20\01\42\ff\ff\ff\0f\83\22" "\05\42\80\80\80\08\54\20\05\42\80\80\80\08\51\1b\0d\00\20" "\03\41\81\80\80\80\04\6a\21\04\0c\02\0b\20\03\41\80\80\80" "\80\04\6a\21\04\20\00\20\05\42\80\80\80\08\85\84\42\00\52" "\0d\01\20\04\20\03\41\01\71\6a\21\04\0c\01\0b\02\40\20\00" "\50\20\05\42\80\80\80\80\80\80\c0\ff\ff\00\54\20\05\42\80" "\80\80\80\80\80\c0\ff\ff\00\51\1b\0d\00\20\01\42\19\88\a7" "\41\ff\ff\ff\01\71\41\80\80\80\fe\07\72\21\04\0c\01\0b\41" "\80\80\80\fc\07\21\04\20\05\42\ff\ff\ff\ff\ff\ff\bf\bf\c0" "\00\56\0d\00\41\00\21\04\20\05\42\30\88\a7\22\03\41\91\fe" "\00\49\0d\00\20\02\41\10\6a\20\00\20\01\42\ff\ff\ff\ff\ff" "\ff\3f\83\42\80\80\80\80\80\80\c0\00\84\22\05\20\03\41\ff" "\81\7f\6a\10\d1\03\20\02\20\00\20\05\41\81\ff\00\20\03\6b" "\10\d4\03\20\02\41\08\6a\29\03\00\22\05\42\19\88\a7\21\04" "\02\40\20\02\29\03\00\20\02\29\03\10\20\02\41\10\6a\41\08" "\6a\29\03\00\84\42\00\52\ad\84\22\00\50\20\05\42\ff\ff\ff" "\0f\83\22\05\42\80\80\80\08\54\20\05\42\80\80\80\08\51\1b" "\0d\00\20\04\41\01\6a\21\04\0c\01\0b\20\00\20\05\42\80\80" "\80\08\85\84\42\00\52\0d\00\20\04\41\01\71\20\04\6a\21\04" "\0b\20\02\41\20\6a\24\00\20\04\20\01\42\20\88\a7\41\80\80" "\80\80\78\71\72\be\0b\e4\03\02\02\7f\02\7e\23\00\41\20\6b" "\22\02\24\00\02\40\02\40\20\01\42\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\00\83\22\04\42\80\80\80\80\80\80\c0\ff\43\7c\20\04\42" "\80\80\80\80\80\80\c0\80\bc\7f\7c\5a\0d\00\20\00\42\3c\88" "\20\01\42\04\86\84\21\04\02\40\20\00\42\ff\ff\ff\ff\ff\ff" "\ff\ff\0f\83\22\00\42\81\80\80\80\80\80\80\80\08\54\0d\00" "\20\04\42\81\80\80\80\80\80\80\80\c0\00\7c\21\05\0c\02\0b" "\20\04\42\80\80\80\80\80\80\80\80\c0\00\7c\21\05\20\00\42" "\80\80\80\80\80\80\80\80\08\52\0d\01\20\05\20\04\42\01\83" "\7c\21\05\0c\01\0b\02\40\20\00\50\20\04\42\80\80\80\80\80" "\80\c0\ff\ff\00\54\20\04\42\80\80\80\80\80\80\c0\ff\ff\00" "\51\1b\0d\00\20\00\42\3c\88\20\01\42\04\86\84\42\ff\ff\ff" "\ff\ff\ff\ff\03\83\42\80\80\80\80\80\80\80\fc\ff\00\84\21" "\05\0c\01\0b\42\80\80\80\80\80\80\80\f8\ff\00\21\05\20\04" "\42\ff\ff\ff\ff\ff\ff\bf\ff\c3\00\56\0d\00\42\00\21\05\20" "\04\42\30\88\a7\22\03\41\91\f7\00\49\0d\00\20\02\41\10\6a" "\20\00\20\01\42\ff\ff\ff\ff\ff\ff\3f\83\42\80\80\80\80\80" "\80\c0\00\84\22\04\20\03\41\ff\88\7f\6a\10\d1\03\20\02\20" "\00\20\04\41\81\f8\00\20\03\6b\10\d4\03\20\02\29\03\00\22" "\04\42\3c\88\20\02\41\08\6a\29\03\00\42\04\86\84\21\05\02" "\40\20\04\42\ff\ff\ff\ff\ff\ff\ff\ff\0f\83\20\02\29\03\10" "\20\02\41\10\6a\41\08\6a\29\03\00\84\42\00\52\ad\84\22\04" "\42\81\80\80\80\80\80\80\80\08\54\0d\00\20\05\42\01\7c\21" "\05\0c\01\0b\20\04\42\80\80\80\80\80\80\80\80\08\52\0d\00" "\20\05\42\01\83\20\05\7c\21\05\0b\20\02\41\20\6a\24\00\20" "\05\20\01\42\80\80\80\80\80\80\80\80\80\7f\83\84\bf\0b\12" "\00\02\40\20\00\0d\00\41\01\0f\0b\20\00\28\02\00\45\0b\e1" "\15\02\10\7f\03\7e\23\00\41\b0\02\6b\22\03\24\00\02\40\02" "\40\20\00\28\02\4c\41\00\4e\0d\00\41\01\21\04\0c\01\0b\20" "\00\10\49\45\21\04\0b\02\40\02\40\02\40\20\00\28\02\04\0d" "\00\20\00\10\4f\1a\20\00\28\02\04\45\0d\01\0b\02\40\20\01" "\2d\00\00\22\05\0d\00\41\00\21\06\0c\02\0b\20\03\41\10\6a" "\21\07\42\00\21\13\41\00\21\06\02\40\02\40\02\40\02\40\02" "\40\02\40\03\40\02\40\02\40\20\05\41\ff\01\71\22\05\10\f1" "\03\45\0d\00\03\40\20\01\22\05\41\01\6a\21\01\20\05\2d\00" "\01\10\f1\03\0d\00\0b\20\00\42\00\10\cf\03\03\40\02\40\02" "\40\20\00\28\02\04\22\01\20\00\28\02\68\46\0d\00\20\00\20" "\01\41\01\6a\36\02\04\20\01\2d\00\00\21\01\0c\01\0b\20\00" "\10\d0\03\21\01\0b\20\01\10\f1\03\0d\00\0b\20\00\28\02\04" "\21\01\02\40\20\00\29\03\70\42\00\53\0d\00\20\00\20\01\41" "\7f\6a\22\01\36\02\04\0b\20\00\29\03\78\20\13\7c\20\01\20" "\00\28\02\2c\6b\ac\7c\21\13\0c\01\0b\02\40\02\40\02\40\02" "\40\20\05\41\25\47\0d\00\20\01\2d\00\01\22\05\41\2a\46\0d" "\01\20\05\41\25\47\0d\02\0b\20\00\42\00\10\cf\03\02\40\02" "\40\20\01\2d\00\00\41\25\47\0d\00\03\40\02\40\02\40\20\00" "\28\02\04\22\05\20\00\28\02\68\46\0d\00\20\00\20\05\41\01" "\6a\36\02\04\20\05\2d\00\00\21\05\0c\01\0b\20\00\10\d0\03" "\21\05\0b\20\05\10\f1\03\0d\00\0b\20\01\41\01\6a\21\01\0c" "\01\0b\02\40\20\00\28\02\04\22\05\20\00\28\02\68\46\0d\00" "\20\00\20\05\41\01\6a\36\02\04\20\05\2d\00\00\21\05\0c\01" "\0b\20\00\10\d0\03\21\05\0b\02\40\20\05\20\01\2d\00\00\46" "\0d\00\02\40\20\00\29\03\70\42\00\53\0d\00\20\00\20\00\28" "\02\04\41\7f\6a\36\02\04\0b\20\05\41\7f\4a\0d\0d\20\06\0d" "\0d\0c\0c\0b\20\00\29\03\78\20\13\7c\20\00\28\02\04\20\00" "\28\02\2c\6b\ac\7c\21\13\20\01\21\05\0c\03\0b\20\01\41\02" "\6a\21\05\41\00\21\08\0c\01\0b\02\40\20\05\41\50\6a\22\09" "\41\09\4b\0d\00\20\01\2d\00\02\41\24\47\0d\00\20\01\41\03" "\6a\21\05\20\02\20\09\10\f2\03\21\08\0c\01\0b\20\01\41\01" "\6a\21\05\20\02\28\02\00\21\08\20\02\41\04\6a\21\02\0b\41" "\00\21\0a\41\00\21\09\02\40\20\05\2d\00\00\22\01\41\50\6a" "\41\09\4b\0d\00\03\40\20\09\41\0a\6c\20\01\6a\41\50\6a\21" "\09\20\05\2d\00\01\21\01\20\05\41\01\6a\21\05\20\01\41\50" "\6a\41\0a\49\0d\00\0b\0b\02\40\02\40\20\01\41\ed\00\46\0d" "\00\20\05\21\0b\0c\01\0b\20\05\41\01\6a\21\0b\41\00\21\0c" "\20\08\41\00\47\21\0a\20\05\2d\00\01\21\01\41\00\21\0d\0b" "\20\0b\41\01\6a\21\05\41\03\21\0e\20\0a\21\0f\02\40\02\40" "\02\40\02\40\02\40\02\40\20\01\41\ff\01\71\41\bf\7f\6a\0e" "\3a\04\0c\04\0c\04\04\04\0c\0c\0c\0c\03\0c\0c\0c\0c\0c\0c" "\04\0c\0c\0c\0c\04\0c\0c\04\0c\0c\0c\0c\0c\04\0c\04\04\04" "\04\04\00\04\05\0c\01\0c\04\04\04\0c\0c\04\02\04\0c\0c\04" "\0c\02\0c\0b\20\0b\41\02\6a\20\05\20\0b\2d\00\01\41\e8\00" "\46\22\01\1b\21\05\41\7e\41\7f\20\01\1b\21\0e\0c\04\0b\20" "\0b\41\02\6a\20\05\20\0b\2d\00\01\41\ec\00\46\22\01\1b\21" "\05\41\03\41\01\20\01\1b\21\0e\0c\03\0b\41\01\21\0e\0c\02" "\0b\41\02\21\0e\0c\01\0b\41\00\21\0e\20\0b\21\05\0b\41\01" "\20\0e\20\05\2d\00\00\22\01\41\2f\71\41\03\46\22\0b\1b\21" "\10\02\40\20\01\41\20\72\20\01\20\0b\1b\22\11\41\db\00\46" "\0d\00\02\40\02\40\20\11\41\ee\00\46\0d\00\20\11\41\e3\00" "\47\0d\01\20\09\41\01\20\09\41\01\4a\1b\21\09\0c\02\0b\20" "\08\20\10\20\13\10\f3\03\0c\02\0b\20\00\42\00\10\cf\03\03" "\40\02\40\02\40\20\00\28\02\04\22\01\20\00\28\02\68\46\0d" "\00\20\00\20\01\41\01\6a\36\02\04\20\01\2d\00\00\21\01\0c" "\01\0b\20\00\10\d0\03\21\01\0b\20\01\10\f1\03\0d\00\0b\20" "\00\28\02\04\21\01\02\40\20\00\29\03\70\42\00\53\0d\00\20" "\00\20\01\41\7f\6a\22\01\36\02\04\0b\20\00\29\03\78\20\13" "\7c\20\01\20\00\28\02\2c\6b\ac\7c\21\13\0b\20\00\20\09\ac" "\22\14\10\cf\03\02\40\02\40\20\00\28\02\04\22\01\20\00\28" "\02\68\46\0d\00\20\00\20\01\41\01\6a\36\02\04\0c\01\0b\20" "\00\10\d0\03\41\00\48\0d\06\0b\02\40\20\00\29\03\70\42\00" "\53\0d\00\20\00\20\00\28\02\04\41\7f\6a\36\02\04\0b\41\10" "\21\01\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\20\11\41\a8\7f\6a\0e\21\06\09\09\02\09\09\09\09" "\09\01\09\02\04\01\01\01\09\05\09\09\09\09\09\03\06\09\09" "\02\09\04\09\09\06\00\0b\20\11\41\bf\7f\6a\22\01\41\06\4b" "\0d\08\41\01\20\01\74\41\f1\00\71\45\0d\08\0b\20\03\41\08" "\6a\20\00\20\10\41\00\10\e6\03\20\00\29\03\78\42\00\20\00" "\28\02\04\20\00\28\02\2c\6b\ac\7d\52\0d\05\0c\0c\0b\02\40" "\20\11\41\10\72\41\f3\00\47\0d\00\20\03\41\20\6a\41\7f\41" "\81\02\10\15\1a\20\03\41\00\3a\00\20\20\11\41\f3\00\47\0d" "\06\20\03\41\00\3a\00\41\20\03\41\00\3a\00\2e\20\03\41\00" "\36\01\2a\0c\06\0b\20\03\41\20\6a\20\05\2d\00\01\22\0e\41" "\de\00\46\22\01\41\81\02\10\15\1a\20\03\41\00\3a\00\20\20" "\05\41\02\6a\20\05\41\01\6a\20\01\1b\21\0f\02\40\02\40\02" "\40\02\40\20\05\41\02\41\01\20\01\1b\6a\2d\00\00\22\01\41" "\2d\46\0d\00\20\01\41\dd\00\46\0d\01\20\0e\41\de\00\47\21" "\0b\20\0f\21\05\0c\03\0b\20\03\20\0e\41\de\00\47\22\0b\3a" "\00\4e\0c\01\0b\20\03\20\0e\41\de\00\47\22\0b\3a\00\7e\0b" "\20\0f\41\01\6a\21\05\0b\03\40\02\40\02\40\20\05\2d\00\00" "\22\0e\41\2d\46\0d\00\20\0e\45\0d\0f\20\0e\41\dd\00\46\0d" "\08\0c\01\0b\41\2d\21\0e\20\05\2d\00\01\22\12\45\0d\00\20" "\12\41\dd\00\46\0d\00\20\05\41\01\6a\21\0f\02\40\02\40\20" "\05\41\7f\6a\2d\00\00\22\01\20\12\49\0d\00\20\12\21\0e\0c" "\01\0b\03\40\20\03\41\20\6a\20\01\41\01\6a\22\01\6a\20\0b" "\3a\00\00\20\01\20\0f\2d\00\00\22\0e\49\0d\00\0b\0b\20\0f" "\21\05\0b\20\0e\20\03\41\20\6a\6a\41\01\6a\20\0b\3a\00\00" "\20\05\41\01\6a\21\05\0c\00\0b\00\0b\41\08\21\01\0c\02\0b" "\41\0a\21\01\0c\01\0b\41\00\21\01\0b\20\00\20\01\41\00\42" "\7f\10\eb\03\21\14\20\00\29\03\78\42\00\20\00\28\02\04\20" "\00\28\02\2c\6b\ac\7d\51\0d\07\02\40\20\11\41\f0\00\47\0d" "\00\20\08\45\0d\00\20\08\20\14\3e\02\00\0c\03\0b\20\08\20" "\10\20\14\10\f3\03\0c\02\0b\20\08\45\0d\01\20\07\29\03\00" "\21\14\20\03\29\03\08\21\15\02\40\02\40\02\40\20\10\0e\03" "\00\01\02\04\0b\20\08\20\15\20\14\10\ed\03\38\02\00\0c\03" "\0b\20\08\20\15\20\14\10\ee\03\39\03\00\0c\02\0b\20\08\20" "\15\37\03\00\20\08\20\14\37\03\08\0c\01\0b\41\1f\20\09\41" "\01\6a\20\11\41\e3\00\47\22\0b\1b\21\0e\02\40\02\40\20\10" "\41\01\47\0d\00\20\08\21\09\02\40\20\0a\45\0d\00\20\0e\41" "\02\74\10\2b\22\09\45\0d\07\0b\20\03\42\00\37\02\a8\02\41" "\00\21\01\03\40\20\09\21\0d\02\40\03\40\02\40\02\40\20\00" "\28\02\04\22\09\20\00\28\02\68\46\0d\00\20\00\20\09\41\01" "\6a\36\02\04\20\09\2d\00\00\21\09\0c\01\0b\20\00\10\d0\03" "\21\09\0b\20\09\20\03\41\20\6a\6a\41\01\6a\2d\00\00\45\0d" "\01\20\03\20\09\3a\00\1b\20\03\41\1c\6a\20\03\41\1b\6a\41" "\01\20\03\41\a8\02\6a\10\84\03\22\09\41\7e\46\0d\00\02\40" "\20\09\41\7f\47\0d\00\41\00\21\0c\0c\0c\0b\02\40\20\0d\45" "\0d\00\20\0d\20\01\41\02\74\6a\20\03\28\02\1c\36\02\00\20" "\01\41\01\6a\21\01\0b\20\0a\45\0d\00\20\01\20\0e\47\0d\00" "\0b\41\01\21\0f\41\00\21\0c\20\0d\20\0e\41\01\74\41\01\72" "\22\0e\41\02\74\10\2e\22\09\0d\01\0c\0b\0b\0b\41\00\21\0c" "\20\0d\21\0e\20\03\41\a8\02\6a\10\ef\03\45\0d\08\0c\01\0b" "\02\40\20\0a\45\0d\00\41\00\21\01\20\0e\10\2b\22\09\45\0d" "\06\03\40\20\09\21\0d\03\40\02\40\02\40\20\00\28\02\04\22" "\09\20\00\28\02\68\46\0d\00\20\00\20\09\41\01\6a\36\02\04" "\20\09\2d\00\00\21\09\0c\01\0b\20\00\10\d0\03\21\09\0b\02" "\40\20\09\20\03\41\20\6a\6a\41\01\6a\2d\00\00\0d\00\41\00" "\21\0e\20\0d\21\0c\0c\04\0b\20\0d\20\01\6a\20\09\3a\00\00" "\20\01\41\01\6a\22\01\20\0e\47\0d\00\0b\41\01\21\0f\20\0d" "\20\0e\41\01\74\41\01\72\22\0e\10\2e\22\09\0d\00\0b\20\0d" "\21\0c\41\00\21\0d\0c\09\0b\41\00\21\01\02\40\20\08\45\0d" "\00\03\40\02\40\02\40\20\00\28\02\04\22\09\20\00\28\02\68" "\46\0d\00\20\00\20\09\41\01\6a\36\02\04\20\09\2d\00\00\21" "\09\0c\01\0b\20\00\10\d0\03\21\09\0b\02\40\20\09\20\03\41" "\20\6a\6a\41\01\6a\2d\00\00\0d\00\41\00\21\0e\20\08\21\0d" "\20\08\21\0c\0c\03\0b\20\08\20\01\6a\20\09\3a\00\00\20\01" "\41\01\6a\21\01\0c\00\0b\00\0b\03\40\02\40\02\40\20\00\28" "\02\04\22\01\20\00\28\02\68\46\0d\00\20\00\20\01\41\01\6a" "\36\02\04\20\01\2d\00\00\21\01\0c\01\0b\20\00\10\d0\03\21" "\01\0b\20\01\20\03\41\20\6a\6a\41\01\6a\2d\00\00\0d\00\0b" "\41\00\21\0d\41\00\21\0c\41\00\21\0e\41\00\21\01\0b\20\00" "\28\02\04\21\09\02\40\20\00\29\03\70\42\00\53\0d\00\20\00" "\20\09\41\7f\6a\22\09\36\02\04\0b\20\00\29\03\78\20\09\20" "\00\28\02\2c\6b\ac\7c\22\15\50\0d\03\20\0b\20\15\20\14\51" "\72\45\0d\03\02\40\20\0a\45\0d\00\20\08\20\0d\36\02\00\0b" "\02\40\20\11\41\e3\00\46\0d\00\02\40\20\0e\45\0d\00\20\0e" "\20\01\41\02\74\6a\41\00\36\02\00\0b\02\40\20\0c\0d\00\41" "\00\21\0c\0c\01\0b\20\0c\20\01\6a\41\00\3a\00\00\0b\20\0e" "\21\0d\0b\20\00\29\03\78\20\13\7c\20\00\28\02\04\20\00\28" "\02\2c\6b\ac\7c\21\13\20\06\20\08\41\00\47\6a\21\06\0b\20" "\05\41\01\6a\21\01\20\05\2d\00\01\22\05\0d\00\0c\08\0b\00" "\0b\20\0e\21\0d\0c\01\0b\41\01\21\0f\41\00\21\0c\41\00\21" "\0d\0c\02\0b\20\0a\21\0f\0c\02\0b\20\0a\21\0f\0b\20\06\41" "\7f\20\06\1b\21\06\0b\20\0f\45\0d\01\20\0c\10\2d\20\0d\10" "\2d\0c\01\0b\41\7f\21\06\0b\02\40\20\04\0d\00\20\00\10\4a" "\0b\20\03\41\b0\02\6a\24\00\20\06\0b\10\00\20\00\41\20\46" "\20\00\41\77\6a\41\05\49\72\0b\32\01\01\7f\23\00\41\10\6b" "\22\02\20\00\36\02\0c\20\02\20\00\20\01\41\02\74\6a\41\7c" "\6a\20\00\20\01\41\01\4b\1b\22\00\41\04\6a\36\02\08\20\00" "\28\02\00\0b\43\00\02\40\20\00\45\0d\00\02\40\02\40\02\40" "\02\40\20\01\41\02\6a\0e\06\00\01\02\02\04\03\04\0b\20\00" "\20\02\3c\00\00\0f\0b\20\00\20\02\3d\01\00\0f\0b\20\00\20" "\02\3e\02\00\0f\0b\20\00\20\02\37\03\00\0b\0b\e5\01\01\02" "\7f\20\02\41\00\47\21\03\02\40\02\40\02\40\20\00\41\03\71" "\45\0d\00\20\02\45\0d\00\20\01\41\ff\01\71\21\04\03\40\20" "\00\2d\00\00\20\04\46\0d\02\20\02\41\7f\6a\22\02\41\00\47" "\21\03\20\00\41\01\6a\22\00\41\03\71\45\0d\01\20\02\0d\00" "\0b\0b\20\03\45\0d\01\02\40\20\00\2d\00\00\20\01\41\ff\01" "\71\46\0d\00\20\02\41\04\49\0d\00\20\01\41\ff\01\71\41\81" "\82\84\08\6c\21\04\03\40\20\00\28\02\00\20\04\73\22\03\41" "\7f\73\20\03\41\ff\fd\fb\77\6a\71\41\80\81\82\84\78\71\0d" "\02\20\00\41\04\6a\21\00\20\02\41\7c\6a\22\02\41\03\4b\0d" "\00\0b\0b\20\02\45\0d\01\0b\20\01\41\ff\01\71\21\03\03\40" "\02\40\20\00\2d\00\00\20\03\47\0d\00\20\00\0f\0b\20\00\41" "\01\6a\21\00\20\02\41\7f\6a\22\02\0d\00\0b\0b\41\00\0b\49" "\01\01\7f\23\00\41\90\01\6b\22\03\24\00\20\03\41\00\41\90" "\01\10\15\22\03\41\7f\36\02\4c\20\03\20\00\36\02\2c\20\03" "\41\d2\00\36\02\20\20\03\20\00\36\02\54\20\03\20\01\20\02" "\10\f0\03\21\00\20\03\41\90\01\6a\24\00\20\00\0b\56\01\03" "\7f\20\00\28\02\54\21\03\20\01\20\03\20\03\41\00\20\02\41" "\80\02\6a\22\04\10\f4\03\22\05\20\03\6b\20\04\20\05\1b\22" "\04\20\02\20\04\20\02\49\1b\22\02\10\27\1a\20\00\20\03\20" "\04\6a\22\04\36\02\54\20\00\20\04\36\02\08\20\00\20\03\20" "\02\6a\36\02\04\20\02\0b\d0\02\01\0a\7f\20\00\28\02\08\20" "\00\28\02\00\41\a2\da\ef\d7\06\6a\22\03\10\f8\03\21\04\20" "\00\28\02\0c\20\03\10\f8\03\21\05\41\00\21\06\20\00\28\02" "\10\20\03\10\f8\03\21\07\02\40\20\04\20\01\41\02\76\4f\0d" "\00\20\05\20\01\20\04\41\02\74\6b\22\08\4f\0d\00\20\07\20" "\08\4f\0d\00\20\07\20\05\72\41\03\71\0d\00\20\07\41\02\76" "\21\09\20\00\20\05\41\7c\71\6a\21\0a\41\00\21\06\41\00\21" "\08\03\40\20\0a\20\08\20\04\41\01\76\22\0b\6a\22\0c\41\03" "\74\6a\22\07\28\02\00\20\03\10\f8\03\21\05\20\01\20\07\41" "\04\6a\28\02\00\20\03\10\f8\03\22\07\4d\0d\01\20\05\20\01" "\20\07\6b\4f\0d\01\20\00\20\07\6a\22\07\20\05\6a\2d\00\00" "\0d\01\02\40\20\02\20\07\10\26\22\05\0d\00\20\00\20\09\41" "\02\74\6a\20\0c\41\01\74\41\02\74\6a\22\05\28\02\00\20\03" "\10\f8\03\21\04\20\01\20\05\41\04\6a\28\02\00\20\03\10\f8" "\03\22\03\4d\0d\02\20\04\20\01\20\03\6b\4f\0d\02\41\00\20" "\00\20\03\6a\22\00\20\00\20\04\6a\2d\00\00\1b\21\06\0c\02" "\0b\20\04\41\01\46\0d\01\20\0b\20\04\20\0b\6b\20\05\41\00" "\48\22\05\1b\21\04\20\08\20\0c\20\05\1b\21\08\0c\00\0b\00" "\0b\20\06\0b\28\00\20\00\41\18\74\20\00\41\80\fe\03\71\41" "\08\74\72\20\00\41\08\76\41\80\fe\03\71\20\00\41\18\76\72" "\72\20\00\20\01\1b\0b\7b\01\02\7f\23\00\41\10\6b\22\00\24" "\00\02\40\20\00\41\0c\6a\20\00\41\08\6a\10\05\0d\00\41\00" "\20\00\28\02\0c\41\02\74\41\04\6a\10\2b\22\01\36\02\a8\99" "\01\20\01\45\0d\00\02\40\20\00\28\02\08\10\2b\22\01\45\0d" "\00\41\00\28\02\a8\99\01\20\00\28\02\0c\41\02\74\6a\41\00" "\36\02\00\41\00\28\02\a8\99\01\20\01\10\06\45\0d\01\0b\41" "\00\41\00\36\02\a8\99\01\0b\20\00\41\10\6a\24\00\0b\75\01" "\02\7f\02\40\20\02\0d\00\41\00\0f\0b\02\40\02\40\20\00\2d" "\00\00\22\03\0d\00\41\00\21\00\0c\01\0b\02\40\03\40\20\03" "\41\ff\01\71\20\01\2d\00\00\22\04\47\0d\01\20\04\45\0d\01" "\20\02\41\7f\6a\22\02\45\0d\01\20\01\41\01\6a\21\01\20\00" "\2d\00\01\21\03\20\00\41\01\6a\21\00\20\03\0d\00\0b\41\00" "\21\03\0b\20\03\41\ff\01\71\21\00\0b\20\00\20\01\2d\00\00" "\6b\0b\87\01\01\04\7f\02\40\20\00\41\3d\10\37\22\01\20\00" "\47\0d\00\41\00\0f\0b\41\00\21\02\02\40\20\00\20\01\20\00" "\6b\22\03\6a\2d\00\00\0d\00\41\00\28\02\a8\99\01\22\01\45" "\0d\00\20\01\28\02\00\22\04\45\0d\00\02\40\03\40\02\40\20" "\00\20\04\20\03\10\fa\03\0d\00\20\01\28\02\00\20\03\6a\22" "\04\2d\00\00\41\3d\46\0d\02\0b\20\01\28\02\04\21\04\20\01" "\41\04\6a\21\01\20\04\0d\00\0c\02\0b\00\0b\20\04\41\01\6a" "\21\02\0b\20\02\0b\2a\00\02\40\02\40\20\01\0d\00\41\00\21" "\01\0c\01\0b\20\01\28\02\00\20\01\28\02\04\20\00\10\f7\03" "\21\01\0b\20\01\20\00\20\01\1b\0b\f4\02\01\03\7f\02\40\20" "\01\2d\00\00\0d\00\02\40\41\a0\0c\10\fb\03\22\01\45\0d\00" "\20\01\2d\00\00\0d\01\0b\02\40\20\00\41\0c\6c\41\f0\1c\6a" "\10\fb\03\22\01\45\0d\00\20\01\2d\00\00\0d\01\0b\02\40\41" "\ad\0c\10\fb\03\22\01\45\0d\00\20\01\2d\00\00\0d\01\0b\41" "\b8\0c\21\01\0b\41\00\21\02\02\40\02\40\03\40\20\01\20\02" "\6a\2d\00\00\22\03\45\0d\01\20\03\41\2f\46\0d\01\41\17\21" "\03\20\02\41\01\6a\22\02\41\17\47\0d\00\0c\02\0b\00\0b\20" "\02\21\03\0b\41\b8\0c\21\04\02\40\02\40\02\40\02\40\02\40" "\20\01\2d\00\00\22\02\41\2e\46\0d\00\20\01\20\03\6a\2d\00" "\00\0d\00\20\01\21\04\20\02\41\c3\00\47\0d\01\0b\20\04\2d" "\00\01\45\0d\01\0b\20\04\41\b8\0c\10\26\45\0d\00\20\04\41" "\fd\0b\10\26\0d\01\0b\02\40\20\00\0d\00\41\c4\14\21\02\20" "\04\2d\00\01\41\2e\46\0d\02\0b\41\00\0f\0b\02\40\41\00\28" "\02\b0\99\01\22\02\45\0d\00\03\40\20\04\20\02\41\08\6a\10" "\26\45\0d\02\20\02\28\02\20\22\02\0d\00\0b\0b\02\40\41\24" "\10\2b\22\02\45\0d\00\20\02\41\00\29\02\c4\14\37\02\00\20" "\02\41\08\6a\22\01\20\04\20\03\10\27\1a\20\01\20\03\6a\41" "\00\3a\00\00\20\02\41\00\28\02\b0\99\01\36\02\20\41\00\20" "\02\36\02\b0\99\01\0b\20\02\41\c4\14\20\00\20\02\72\1b\21" "\02\0b\20\02\0b\87\01\01\02\7f\02\40\02\40\02\40\20\02\41" "\04\49\0d\00\20\01\20\00\72\41\03\71\0d\01\03\40\20\00\28" "\02\00\20\01\28\02\00\47\0d\02\20\01\41\04\6a\21\01\20\00" "\41\04\6a\21\00\20\02\41\7c\6a\22\02\41\03\4b\0d\00\0b\0b" "\20\02\45\0d\01\0b\02\40\03\40\20\00\2d\00\00\22\03\20\01" "\2d\00\00\22\04\47\0d\01\20\01\41\01\6a\21\01\20\00\41\01" "\6a\21\00\20\02\41\7f\6a\22\02\45\0d\02\0c\00\0b\00\0b\20" "\03\20\04\6b\0f\0b\41\00\0b\25\00\20\00\41\cc\99\01\47\20" "\00\41\b4\99\01\47\20\00\41\80\15\47\20\00\41\00\47\20\00" "\41\e8\14\47\71\71\71\71\0b\1b\00\41\ac\99\01\10\45\20\00" "\20\01\20\02\10\81\04\21\02\41\ac\99\01\10\46\20\02\0b\e9" "\02\01\03\7f\23\00\41\20\6b\22\03\24\00\41\00\21\04\02\40" "\02\40\03\40\41\01\20\04\74\20\00\71\21\05\02\40\02\40\20" "\02\45\0d\00\20\05\0d\00\20\02\20\04\41\02\74\6a\28\02\00" "\21\05\0c\01\0b\20\04\20\01\41\85\0d\20\05\1b\10\fd\03\21" "\05\0b\20\03\41\08\6a\20\04\41\02\74\6a\20\05\36\02\00\20" "\05\41\7f\46\0d\01\20\04\41\01\6a\22\04\41\06\47\0d\00\0b" "\02\40\20\02\10\ff\03\0d\00\41\e8\14\21\02\20\03\41\08\6a" "\41\e8\14\41\18\10\fe\03\45\0d\02\41\80\15\21\02\20\03\41" "\08\6a\41\80\15\41\18\10\fe\03\45\0d\02\41\00\21\04\02\40" "\41\00\2d\00\e4\99\01\0d\00\03\40\20\04\41\02\74\41\b4\99" "\01\6a\20\04\41\85\0d\10\fd\03\36\02\00\20\04\41\01\6a\22" "\04\41\06\47\0d\00\0b\41\00\41\01\3a\00\e4\99\01\41\00\41" "\00\28\02\b4\99\01\36\02\cc\99\01\0b\41\b4\99\01\21\02\20" "\03\41\08\6a\41\b4\99\01\41\18\10\fe\03\45\0d\02\41\cc\99" "\01\21\02\20\03\41\08\6a\41\cc\99\01\41\18\10\fe\03\45\0d" "\02\41\18\10\2b\22\02\45\0d\01\0b\20\02\20\03\29\02\08\37" "\02\00\20\02\41\10\6a\20\03\41\08\6a\41\10\6a\29\02\00\37" "\02\00\20\02\41\08\6a\20\03\41\08\6a\41\08\6a\29\02\00\37" "\02\00\0c\01\0b\41\00\21\02\0b\20\03\41\20\6a\24\00\20\02" "\0b\14\00\20\00\41\df\00\71\20\00\20\00\41\9f\7f\6a\41\1a" "\49\1b\0b\13\00\20\00\41\20\72\20\00\20\00\41\bf\7f\6a\41" "\1a\49\1b\0b\17\01\01\7f\20\00\41\00\20\01\10\f4\03\22\02" "\20\00\6b\20\01\20\02\1b\0b\8f\01\02\01\7e\01\7f\02\40\20" "\00\bd\22\02\42\34\88\a7\41\ff\0f\71\22\03\41\ff\0f\46\0d" "\00\02\40\20\03\0d\00\02\40\02\40\20\00\44\00\00\00\00\00" "\00\00\00\62\0d\00\41\00\21\03\0c\01\0b\20\00\44\00\00\00" "\00\00\00\f0\43\a2\20\01\10\85\04\21\00\20\01\28\02\00\41" "\40\6a\21\03\0b\20\01\20\03\36\02\00\20\00\0f\0b\20\01\20" "\03\41\82\78\6a\36\02\00\20\02\42\ff\ff\ff\ff\ff\ff\ff\87" "\80\7f\83\42\80\80\80\80\80\80\80\f0\3f\84\bf\21\00\0b\20" "\00\0b\ed\02\01\04\7f\23\00\41\d0\01\6b\22\05\24\00\20\05" "\20\02\36\02\cc\01\20\05\41\a0\01\6a\41\00\41\28\10\15\1a" "\20\05\20\05\28\02\cc\01\36\02\c8\01\02\40\02\40\41\00\20" "\01\20\05\41\c8\01\6a\20\05\41\d0\00\6a\20\05\41\a0\01\6a" "\20\03\20\04\10\87\04\41\00\4e\0d\00\41\7f\21\04\0c\01\0b" "\02\40\02\40\20\00\28\02\4c\41\00\4e\0d\00\41\01\21\06\0c" "\01\0b\20\00\10\49\45\21\06\0b\20\00\20\00\28\02\00\22\07" "\41\5f\71\36\02\00\02\40\02\40\02\40\02\40\20\00\28\02\30" "\0d\00\20\00\41\d0\00\36\02\30\20\00\41\00\36\02\1c\20\00" "\42\00\37\03\10\20\00\28\02\2c\21\08\20\00\20\05\36\02\2c" "\0c\01\0b\41\00\21\08\20\00\28\02\10\0d\01\0b\41\7f\21\02" "\20\00\10\50\0d\01\0b\20\00\20\01\20\05\41\c8\01\6a\20\05" "\41\d0\00\6a\20\05\41\a0\01\6a\20\03\20\04\10\87\04\21\02" "\0b\20\07\41\20\71\21\04\02\40\20\08\45\0d\00\20\00\41\00" "\41\00\20\00\28\02\24\11\03\00\1a\20\00\41\00\36\02\30\20" "\00\20\08\36\02\2c\20\00\41\00\36\02\1c\20\00\28\02\14\21" "\03\20\00\42\00\37\03\10\20\02\41\7f\20\03\1b\21\02\0b\20" "\00\20\00\28\02\00\22\03\20\04\72\36\02\00\41\7f\20\02\20" "\03\41\20\71\1b\21\04\20\06\0d\00\20\00\10\4a\0b\20\05\41" "\d0\01\6a\24\00\20\04\0b\83\13\02\12\7f\01\7e\23\00\41\d0" "\00\6b\22\07\24\00\20\07\20\01\36\02\4c\20\07\41\37\6a\21" "\08\20\07\41\38\6a\21\09\41\00\21\0a\41\00\21\0b\02\40\02" "\40\02\40\02\40\03\40\41\00\21\0c\03\40\20\01\21\0d\20\0c" "\20\0b\41\ff\ff\ff\ff\07\73\4a\0d\02\20\0c\20\0b\6a\21\0b" "\20\0d\21\0c\02\40\02\40\02\40\02\40\02\40\20\0d\2d\00\00" "\22\0e\45\0d\00\03\40\02\40\02\40\02\40\20\0e\41\ff\01\71" "\22\0e\0d\00\20\0c\21\01\0c\01\0b\20\0e\41\25\47\0d\01\20" "\0c\21\0e\03\40\02\40\20\0e\2d\00\01\41\25\46\0d\00\20\0e" "\21\01\0c\02\0b\20\0c\41\01\6a\21\0c\20\0e\2d\00\02\21\0f" "\20\0e\41\02\6a\22\01\21\0e\20\0f\41\25\46\0d\00\0b\0b\20" "\0c\20\0d\6b\22\0c\20\0b\41\ff\ff\ff\ff\07\73\22\0e\4a\0d" "\09\02\40\20\00\45\0d\00\20\00\20\0d\20\0c\10\88\04\0b\20" "\0c\0d\07\20\07\20\01\36\02\4c\20\01\41\01\6a\21\0c\41\7f" "\21\10\02\40\20\01\2c\00\01\41\50\6a\22\0f\41\09\4b\0d\00" "\20\01\2d\00\02\41\24\47\0d\00\20\01\41\03\6a\21\0c\41\01" "\21\0a\20\0f\21\10\0b\20\07\20\0c\36\02\4c\41\00\21\11\02" "\40\02\40\20\0c\2c\00\00\22\12\41\60\6a\22\01\41\1f\4d\0d" "\00\20\0c\21\0f\0c\01\0b\41\00\21\11\20\0c\21\0f\41\01\20" "\01\74\22\01\41\89\d1\04\71\45\0d\00\03\40\20\07\20\0c\41" "\01\6a\22\0f\36\02\4c\20\01\20\11\72\21\11\20\0c\2c\00\01" "\22\12\41\60\6a\22\01\41\20\4f\0d\01\20\0f\21\0c\41\01\20" "\01\74\22\01\41\89\d1\04\71\0d\00\0b\0b\02\40\02\40\20\12" "\41\2a\47\0d\00\02\40\02\40\20\0f\2c\00\01\41\50\6a\22\0c" "\41\09\4b\0d\00\20\0f\2d\00\02\41\24\47\0d\00\02\40\02\40" "\20\00\0d\00\20\04\20\0c\41\02\74\6a\41\0a\36\02\00\41\00" "\21\13\0c\01\0b\20\03\20\0c\41\03\74\6a\28\02\00\21\13\0b" "\20\0f\41\03\6a\21\01\41\01\21\0a\0c\01\0b\20\0a\0d\06\20" "\0f\41\01\6a\21\01\02\40\20\00\0d\00\20\07\20\01\36\02\4c" "\41\00\21\0a\41\00\21\13\0c\03\0b\20\02\20\02\28\02\00\22" "\0c\41\04\6a\36\02\00\20\0c\28\02\00\21\13\41\00\21\0a\0b" "\20\07\20\01\36\02\4c\20\13\41\7f\4a\0d\01\41\00\20\13\6b" "\21\13\20\11\41\80\c0\00\72\21\11\0c\01\0b\20\07\41\cc\00" "\6a\10\89\04\22\13\41\00\48\0d\0a\20\07\28\02\4c\21\01\0b" "\41\00\21\0c\41\7f\21\14\02\40\02\40\20\01\2d\00\00\41\2e" "\46\0d\00\41\00\21\15\0c\01\0b\02\40\20\01\2d\00\01\41\2a" "\47\0d\00\02\40\02\40\20\01\2c\00\02\41\50\6a\22\0f\41\09" "\4b\0d\00\20\01\2d\00\03\41\24\47\0d\00\02\40\02\40\20\00" "\0d\00\20\04\20\0f\41\02\74\6a\41\0a\36\02\00\41\00\21\14" "\0c\01\0b\20\03\20\0f\41\03\74\6a\28\02\00\21\14\0b\20\01" "\41\04\6a\21\01\0c\01\0b\20\0a\0d\06\20\01\41\02\6a\21\01" "\02\40\20\00\0d\00\41\00\21\14\0c\01\0b\20\02\20\02\28\02" "\00\22\0f\41\04\6a\36\02\00\20\0f\28\02\00\21\14\0b\20\07" "\20\01\36\02\4c\20\14\41\7f\4a\21\15\0c\01\0b\20\07\20\01" "\41\01\6a\36\02\4c\41\01\21\15\20\07\41\cc\00\6a\10\89\04" "\21\14\20\07\28\02\4c\21\01\0b\03\40\20\0c\21\0f\41\1c\21" "\16\20\01\22\12\2c\00\00\22\0c\41\85\7f\6a\41\46\49\0d\0b" "\20\12\41\01\6a\21\01\20\0c\20\0f\41\3a\6c\6a\41\ff\1c\6a" "\2d\00\00\22\0c\41\7f\6a\41\08\49\0d\00\0b\20\07\20\01\36" "\02\4c\02\40\02\40\20\0c\41\1b\46\0d\00\20\0c\45\0d\0c\02" "\40\20\10\41\00\48\0d\00\02\40\20\00\0d\00\20\04\20\10\41" "\02\74\6a\20\0c\36\02\00\0c\0c\0b\20\07\20\03\20\10\41\03" "\74\6a\29\03\00\37\03\40\0c\02\0b\20\00\45\0d\08\20\07\41" "\c0\00\6a\20\0c\20\02\20\06\10\8a\04\0c\01\0b\20\10\41\7f" "\4a\0d\0b\41\00\21\0c\20\00\45\0d\08\0b\20\00\2d\00\00\41" "\20\71\0d\0b\20\11\41\ff\ff\7b\71\22\17\20\11\20\11\41\80" "\c0\00\71\1b\21\11\41\00\21\10\41\e5\08\21\18\20\09\21\16" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\02\40\02\40\02\40\20\12\2c\00\00\22" "\0c\41\53\71\20\0c\20\0c\41\0f\71\41\03\46\1b\20\0c\20\0f" "\1b\22\0c\41\a8\7f\6a\0e\21\04\15\15\15\15\15\15\15\15\0e" "\15\0f\06\0e\0e\0e\15\06\15\15\15\15\02\05\03\15\15\09\15" "\01\15\15\04\00\0b\20\09\21\16\02\40\20\0c\41\bf\7f\6a\0e" "\07\0e\15\0b\15\0e\0e\0e\00\0b\20\0c\41\d3\00\46\0d\09\0c" "\13\0b\41\00\21\10\41\e5\08\21\18\20\07\29\03\40\21\19\0c" "\05\0b\41\00\21\0c\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\20\0f\41\ff\01\71\0e\08\00\01\02\03\04\1b\05\06\1b\0b" "\20\07\28\02\40\20\0b\36\02\00\0c\1a\0b\20\07\28\02\40\20" "\0b\36\02\00\0c\19\0b\20\07\28\02\40\20\0b\ac\37\03\00\0c" "\18\0b\20\07\28\02\40\20\0b\3b\01\00\0c\17\0b\20\07\28\02" "\40\20\0b\3a\00\00\0c\16\0b\20\07\28\02\40\20\0b\36\02\00" "\0c\15\0b\20\07\28\02\40\20\0b\ac\37\03\00\0c\14\0b\20\14" "\41\08\20\14\41\08\4b\1b\21\14\20\11\41\08\72\21\11\41\f8" "\00\21\0c\0b\20\07\29\03\40\20\09\20\0c\41\20\71\10\8b\04" "\21\0d\41\00\21\10\41\e5\08\21\18\20\07\29\03\40\50\0d\03" "\20\11\41\08\71\45\0d\03\20\0c\41\04\76\41\e5\08\6a\21\18" "\41\02\21\10\0c\03\0b\41\00\21\10\41\e5\08\21\18\20\07\29" "\03\40\20\09\10\8c\04\21\0d\20\11\41\08\71\45\0d\02\20\14" "\20\09\20\0d\6b\22\0c\41\01\6a\20\14\20\0c\4a\1b\21\14\0c" "\02\0b\02\40\20\07\29\03\40\22\19\42\7f\55\0d\00\20\07\42" "\00\20\19\7d\22\19\37\03\40\41\01\21\10\41\e5\08\21\18\0c" "\01\0b\02\40\20\11\41\80\10\71\45\0d\00\41\01\21\10\41\e6" "\08\21\18\0c\01\0b\41\e7\08\41\e5\08\20\11\41\01\71\22\10" "\1b\21\18\0b\20\19\20\09\10\8d\04\21\0d\0b\20\15\20\14\41" "\00\48\71\0d\10\20\11\41\ff\ff\7b\71\20\11\20\15\1b\21\11" "\02\40\20\07\29\03\40\22\19\42\00\52\0d\00\20\14\0d\00\20" "\09\21\0d\20\09\21\16\41\00\21\14\0c\0d\0b\20\14\20\09\20" "\0d\6b\20\19\50\6a\22\0c\20\14\20\0c\4a\1b\21\14\0c\0b\0b" "\20\07\28\02\40\22\0c\41\c4\0c\20\0c\1b\21\0d\20\0d\20\0d" "\20\14\41\ff\ff\ff\ff\07\20\14\41\ff\ff\ff\ff\07\49\1b\10" "\84\04\22\0c\6a\21\16\02\40\20\14\41\7f\4c\0d\00\20\17\21" "\11\20\0c\21\14\0c\0c\0b\20\17\21\11\20\0c\21\14\20\16\2d" "\00\00\0d\0f\0c\0b\0b\02\40\20\14\45\0d\00\20\07\28\02\40" "\21\0e\0c\02\0b\41\00\21\0c\20\00\41\20\20\13\41\00\20\11" "\10\8e\04\0c\02\0b\20\07\41\00\36\02\0c\20\07\20\07\29\03" "\40\3e\02\08\20\07\20\07\41\08\6a\36\02\40\20\07\41\08\6a" "\21\0e\41\7f\21\14\0b\41\00\21\0c\02\40\03\40\20\0e\28\02" "\00\22\0f\45\0d\01\20\07\41\04\6a\20\0f\10\8c\03\22\0f\41" "\00\48\0d\10\20\0f\20\14\20\0c\6b\4b\0d\01\20\0e\41\04\6a" "\21\0e\20\0f\20\0c\6a\22\0c\20\14\49\0d\00\0b\0b\41\3d\21" "\16\20\0c\41\00\48\0d\0d\20\00\41\20\20\13\20\0c\20\11\10" "\8e\04\02\40\20\0c\0d\00\41\00\21\0c\0c\01\0b\41\00\21\0f" "\20\07\28\02\40\21\0e\03\40\20\0e\28\02\00\22\0d\45\0d\01" "\20\07\41\04\6a\20\0d\10\8c\03\22\0d\20\0f\6a\22\0f\20\0c" "\4b\0d\01\20\00\20\07\41\04\6a\20\0d\10\88\04\20\0e\41\04" "\6a\21\0e\20\0f\20\0c\49\0d\00\0b\0b\20\00\41\20\20\13\20" "\0c\20\11\41\80\c0\00\73\10\8e\04\20\13\20\0c\20\13\20\0c" "\4a\1b\21\0c\0c\09\0b\20\15\20\14\41\00\48\71\0d\0a\41\3d" "\21\16\20\00\20\07\2b\03\40\20\13\20\14\20\11\20\0c\20\05" "\11\1e\00\22\0c\41\00\4e\0d\08\0c\0b\0b\20\07\20\07\29\03" "\40\3c\00\37\41\01\21\14\20\08\21\0d\20\09\21\16\20\17\21" "\11\0c\05\0b\20\0c\2d\00\01\21\0e\20\0c\41\01\6a\21\0c\0c" "\00\0b\00\0b\20\00\0d\09\20\0a\45\0d\03\41\01\21\0c\02\40" "\03\40\20\04\20\0c\41\02\74\6a\28\02\00\22\0e\45\0d\01\20" "\03\20\0c\41\03\74\6a\20\0e\20\02\20\06\10\8a\04\41\01\21" "\0b\20\0c\41\01\6a\22\0c\41\0a\47\0d\00\0c\0b\0b\00\0b\41" "\01\21\0b\20\0c\41\0a\4f\0d\09\03\40\20\04\20\0c\41\02\74" "\6a\28\02\00\0d\01\41\01\21\0b\20\0c\41\01\6a\22\0c\41\0a" "\46\0d\0a\0c\00\0b\00\0b\41\1c\21\16\0c\06\0b\20\09\21\16" "\0b\20\14\20\16\20\0d\6b\22\01\20\14\20\01\4a\1b\22\12\20" "\10\41\ff\ff\ff\ff\07\73\4a\0d\03\41\3d\21\16\20\13\20\10" "\20\12\6a\22\0f\20\13\20\0f\4a\1b\22\0c\20\0e\4a\0d\04\20" "\00\41\20\20\0c\20\0f\20\11\10\8e\04\20\00\20\18\20\10\10" "\88\04\20\00\41\30\20\0c\20\0f\20\11\41\80\80\04\73\10\8e" "\04\20\00\41\30\20\12\20\01\41\00\10\8e\04\20\00\20\0d\20" "\01\10\88\04\20\00\41\20\20\0c\20\0f\20\11\41\80\c0\00\73" "\10\8e\04\20\07\28\02\4c\21\01\0c\01\0b\0b\0b\41\00\21\0b" "\0c\03\0b\41\3d\21\16\0b\10\24\20\16\36\02\00\0b\41\7f\21" "\0b\0b\20\07\41\d0\00\6a\24\00\20\0b\0b\18\00\02\40\20\00" "\2d\00\00\41\20\71\0d\00\20\01\20\02\20\00\10\51\1a\0b\0b" "\7b\01\05\7f\41\00\21\01\02\40\20\00\28\02\00\22\02\2c\00" "\00\41\50\6a\22\03\41\09\4d\0d\00\41\00\0f\0b\03\40\41\7f" "\21\04\02\40\20\01\41\cc\99\b3\e6\00\4b\0d\00\41\7f\20\03" "\20\01\41\0a\6c\22\01\6a\20\03\20\01\41\ff\ff\ff\ff\07\73" "\4b\1b\21\04\0b\20\00\20\02\41\01\6a\22\03\36\02\00\20\02" "\2c\00\01\21\05\20\04\21\01\20\03\21\02\20\05\41\50\6a\22" "\03\41\0a\49\0d\00\0b\20\04\0b\b6\04\00\02\40\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\02\40\02\40\02\40\20\01\41\77\6a\0e" "\12\00\01\02\05\03\04\06\07\08\09\0a\0b\0c\0d\0e\0f\10\11" "\12\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00" "\20\01\28\02\00\36\02\00\0f\0b\20\02\20\02\28\02\00\22\01" "\41\04\6a\36\02\00\20\00\20\01\34\02\00\37\03\00\0f\0b\20" "\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\35" "\02\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a" "\36\02\00\20\00\20\01\34\02\00\37\03\00\0f\0b\20\02\20\02" "\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\35\02\00\37" "\03\00\0f\0b\20\02\20\02\28\02\00\41\07\6a\41\78\71\22\01" "\41\08\6a\36\02\00\20\00\20\01\29\03\00\37\03\00\0f\0b\20" "\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\32" "\01\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a" "\36\02\00\20\00\20\01\33\01\00\37\03\00\0f\0b\20\02\20\02" "\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\30\00\00\37" "\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00" "\20\00\20\01\31\00\00\37\03\00\0f\0b\20\02\20\02\28\02\00" "\41\07\6a\41\78\71\22\01\41\08\6a\36\02\00\20\00\20\01\29" "\03\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a" "\36\02\00\20\00\20\01\35\02\00\37\03\00\0f\0b\20\02\20\02" "\28\02\00\41\07\6a\41\78\71\22\01\41\08\6a\36\02\00\20\00" "\20\01\29\03\00\37\03\00\0f\0b\20\02\20\02\28\02\00\41\07" "\6a\41\78\71\22\01\41\08\6a\36\02\00\20\00\20\01\29\03\00" "\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02" "\00\20\00\20\01\34\02\00\37\03\00\0f\0b\20\02\20\02\28\02" "\00\22\01\41\04\6a\36\02\00\20\00\20\01\35\02\00\37\03\00" "\0f\0b\20\02\20\02\28\02\00\41\07\6a\41\78\71\22\01\41\08" "\6a\36\02\00\20\00\20\01\2b\03\00\39\03\00\0f\0b\20\00\20" "\02\20\03\11\02\00\0b\0b\3d\01\01\7f\02\40\20\00\50\0d\00" "\03\40\20\01\41\7f\6a\22\01\20\00\a7\41\0f\71\41\90\21\6a" "\2d\00\00\20\02\72\3a\00\00\20\00\42\0f\56\21\03\20\00\42" "\04\88\21\00\20\03\0d\00\0b\0b\20\01\0b\36\01\01\7f\02\40" "\20\00\50\0d\00\03\40\20\01\41\7f\6a\22\01\20\00\a7\41\07" "\71\41\30\72\3a\00\00\20\00\42\07\56\21\02\20\00\42\03\88" "\21\00\20\02\0d\00\0b\0b\20\01\0b\88\01\02\01\7e\03\7f\02" "\40\02\40\20\00\42\80\80\80\80\10\5a\0d\00\20\00\21\02\0c" "\01\0b\03\40\20\01\41\7f\6a\22\01\20\00\20\00\42\0a\80\22" "\02\42\0a\7e\7d\a7\41\30\72\3a\00\00\20\00\42\ff\ff\ff\ff" "\9f\01\56\21\03\20\02\21\00\20\03\0d\00\0b\0b\02\40\20\02" "\a7\22\03\45\0d\00\03\40\20\01\41\7f\6a\22\01\20\03\20\03" "\41\0a\6e\22\04\41\0a\6c\6b\41\30\72\3a\00\00\20\03\41\09" "\4b\21\05\20\04\21\03\20\05\0d\00\0b\0b\20\01\0b\72\01\01" "\7f\23\00\41\80\02\6b\22\05\24\00\02\40\20\02\20\03\4c\0d" "\00\20\04\41\80\c0\04\71\0d\00\20\05\20\01\41\ff\01\71\20" "\02\20\03\6b\22\03\41\80\02\20\03\41\80\02\49\22\02\1b\10" "\15\1a\02\40\20\02\0d\00\03\40\20\00\20\05\41\80\02\10\88" "\04\20\03\41\80\7e\6a\22\03\41\ff\01\4b\0d\00\0b\0b\20\00" "\20\05\20\03\10\88\04\0b\20\05\41\80\02\6a\24\00\0b\11\00" "\20\00\20\01\20\02\41\d3\00\41\d4\00\10\86\04\0b\a0\19\03" "\12\7f\02\7e\01\7c\23\00\41\b0\04\6b\22\06\24\00\41\00\21" "\07\20\06\41\00\36\02\2c\02\40\02\40\20\01\10\92\04\22\18" "\42\7f\55\0d\00\41\01\21\08\41\ef\08\21\09\20\01\9a\22\01" "\10\92\04\21\18\0c\01\0b\02\40\20\04\41\80\10\71\45\0d\00" "\41\01\21\08\41\f2\08\21\09\0c\01\0b\41\f5\08\41\f0\08\20" "\04\41\01\71\22\08\1b\21\09\20\08\45\21\07\0b\02\40\02\40" "\20\18\42\80\80\80\80\80\80\80\f8\ff\00\83\42\80\80\80\80" "\80\80\80\f8\ff\00\52\0d\00\20\00\41\20\20\02\20\08\41\03" "\6a\22\0a\20\04\41\ff\ff\7b\71\10\8e\04\20\00\20\09\20\08" "\10\88\04\20\00\41\d0\0a\41\90\0c\20\05\41\20\71\22\0b\1b" "\41\80\0b\41\b2\0c\20\0b\1b\20\01\20\01\62\1b\41\03\10\88" "\04\20\00\41\20\20\02\20\0a\20\04\41\80\c0\00\73\10\8e\04" "\20\0a\20\02\20\0a\20\02\4a\1b\21\0c\0c\01\0b\20\06\41\10" "\6a\21\0d\02\40\02\40\02\40\02\40\20\01\20\06\41\2c\6a\10" "\85\04\22\01\20\01\a0\22\01\44\00\00\00\00\00\00\00\00\61" "\0d\00\20\06\20\06\28\02\2c\22\0a\41\7f\6a\36\02\2c\20\05" "\41\20\72\22\0e\41\e1\00\47\0d\01\0c\03\0b\20\05\41\20\72" "\22\0e\41\e1\00\46\0d\02\41\06\20\03\20\03\41\00\48\1b\21" "\0f\20\06\28\02\2c\21\10\0c\01\0b\20\06\20\0a\41\63\6a\22" "\10\36\02\2c\41\06\20\03\20\03\41\00\48\1b\21\0f\20\01\44" "\00\00\00\00\00\00\b0\41\a2\21\01\0b\20\06\41\30\6a\41\00" "\41\a0\02\20\10\41\00\48\1b\6a\22\11\21\0b\03\40\02\40\02" "\40\20\01\44\00\00\00\00\00\00\f0\41\63\20\01\44\00\00\00" "\00\00\00\00\00\66\71\45\0d\00\20\01\ab\21\0a\0c\01\0b\41" "\00\21\0a\0b\20\0b\20\0a\36\02\00\20\0b\41\04\6a\21\0b\20" "\01\20\0a\b8\a1\44\00\00\00\00\65\cd\cd\41\a2\22\01\44\00" "\00\00\00\00\00\00\00\62\0d\00\0b\02\40\02\40\20\10\41\01" "\4e\0d\00\20\10\21\03\20\0b\21\0a\20\11\21\12\0c\01\0b\20" "\11\21\12\20\10\21\03\03\40\20\03\41\1d\20\03\41\1d\48\1b" "\21\03\02\40\20\0b\41\7c\6a\22\0a\20\12\49\0d\00\20\03\ad" "\21\19\42\00\21\18\03\40\20\0a\20\0a\35\02\00\20\19\86\20" "\18\42\ff\ff\ff\ff\0f\83\7c\22\18\20\18\42\80\94\eb\dc\03" "\80\22\18\42\80\94\eb\dc\03\7e\7d\3e\02\00\20\0a\41\7c\6a" "\22\0a\20\12\4f\0d\00\0b\20\18\a7\22\0a\45\0d\00\20\12\41" "\7c\6a\22\12\20\0a\36\02\00\0b\02\40\03\40\20\0b\22\0a\20" "\12\4d\0d\01\20\0a\41\7c\6a\22\0b\28\02\00\45\0d\00\0b\0b" "\20\06\20\06\28\02\2c\20\03\6b\22\03\36\02\2c\20\0a\21\0b" "\20\03\41\00\4a\0d\00\0b\0b\02\40\20\03\41\7f\4a\0d\00\20" "\0f\41\19\6a\41\09\6e\41\01\6a\21\13\20\0e\41\e6\00\46\21" "\14\03\40\41\00\20\03\6b\22\0b\41\09\20\0b\41\09\48\1b\21" "\15\02\40\02\40\20\12\20\0a\49\0d\00\20\12\28\02\00\45\41" "\02\74\21\0b\0c\01\0b\41\80\94\eb\dc\03\20\15\76\21\16\41" "\7f\20\15\74\41\7f\73\21\17\41\00\21\03\20\12\21\0b\03\40" "\20\0b\20\0b\28\02\00\22\0c\20\15\76\20\03\6a\36\02\00\20" "\0c\20\17\71\20\16\6c\21\03\20\0b\41\04\6a\22\0b\20\0a\49" "\0d\00\0b\20\12\28\02\00\45\41\02\74\21\0b\20\03\45\0d\00" "\20\0a\20\03\36\02\00\20\0a\41\04\6a\21\0a\0b\20\06\20\06" "\28\02\2c\20\15\6a\22\03\36\02\2c\20\11\20\12\20\0b\6a\22" "\12\20\14\1b\22\0b\20\13\41\02\74\6a\20\0a\20\0a\20\0b\6b" "\41\02\75\20\13\4a\1b\21\0a\20\03\41\00\48\0d\00\0b\0b\41" "\00\21\03\02\40\20\12\20\0a\4f\0d\00\20\11\20\12\6b\41\02" "\75\41\09\6c\21\03\41\0a\21\0b\20\12\28\02\00\22\0c\41\0a" "\49\0d\00\03\40\20\03\41\01\6a\21\03\20\0c\20\0b\41\0a\6c" "\22\0b\4f\0d\00\0b\0b\02\40\20\0f\41\00\20\03\20\0e\41\e6" "\00\46\1b\6b\20\0f\41\00\47\20\0e\41\e7\00\46\71\6b\22\0b" "\20\0a\20\11\6b\41\02\75\41\09\6c\41\77\6a\4e\0d\00\20\06" "\41\30\6a\41\04\41\a4\02\20\10\41\00\48\1b\6a\20\0b\41\80" "\c8\00\6a\22\0c\41\09\6d\22\16\41\02\74\6a\22\13\41\80\60" "\6a\21\15\41\0a\21\0b\02\40\20\0c\20\16\41\09\6c\6b\22\0c" "\41\07\4a\0d\00\03\40\20\0b\41\0a\6c\21\0b\20\0c\41\01\6a" "\22\0c\41\08\47\0d\00\0b\0b\20\13\41\84\60\6a\21\17\02\40" "\02\40\20\15\28\02\00\22\0c\20\0c\20\0b\6e\22\14\20\0b\6c" "\6b\22\16\0d\00\20\17\20\0a\46\0d\01\0b\02\40\02\40\20\14" "\41\01\71\0d\00\44\00\00\00\00\00\00\40\43\21\01\20\0b\41" "\80\94\eb\dc\03\47\0d\01\20\15\20\12\4d\0d\01\20\13\41\fc" "\5f\6a\2d\00\00\41\01\71\45\0d\01\0b\44\01\00\00\00\00\00" "\40\43\21\01\0b\44\00\00\00\00\00\00\e0\3f\44\00\00\00\00" "\00\00\f0\3f\44\00\00\00\00\00\00\f8\3f\20\17\20\0a\46\1b" "\44\00\00\00\00\00\00\f8\3f\20\16\20\0b\41\01\76\22\17\46" "\1b\20\16\20\17\49\1b\21\1a\02\40\20\07\0d\00\20\09\2d\00" "\00\41\2d\47\0d\00\20\1a\9a\21\1a\20\01\9a\21\01\0b\20\15" "\20\0c\20\16\6b\22\0c\36\02\00\20\01\20\1a\a0\20\01\61\0d" "\00\20\15\20\0c\20\0b\6a\22\0b\36\02\00\02\40\20\0b\41\80" "\94\eb\dc\03\49\0d\00\03\40\20\15\41\00\36\02\00\02\40\20" "\15\41\7c\6a\22\15\20\12\4f\0d\00\20\12\41\7c\6a\22\12\41" "\00\36\02\00\0b\20\15\20\15\28\02\00\41\01\6a\22\0b\36\02" "\00\20\0b\41\ff\93\eb\dc\03\4b\0d\00\0b\0b\20\11\20\12\6b" "\41\02\75\41\09\6c\21\03\41\0a\21\0b\20\12\28\02\00\22\0c" "\41\0a\49\0d\00\03\40\20\03\41\01\6a\21\03\20\0c\20\0b\41" "\0a\6c\22\0b\4f\0d\00\0b\0b\20\15\41\04\6a\22\0b\20\0a\20" "\0a\20\0b\4b\1b\21\0a\0b\02\40\03\40\20\0a\22\0b\20\12\4d" "\22\0c\0d\01\20\0b\41\7c\6a\22\0a\28\02\00\45\0d\00\0b\0b" "\02\40\02\40\20\0e\41\e7\00\46\0d\00\20\04\41\08\71\21\15" "\0c\01\0b\20\03\41\7f\73\41\7f\20\0f\41\01\20\0f\1b\22\0a" "\20\03\4a\20\03\41\7b\4a\71\22\15\1b\20\0a\6a\21\0f\41\7f" "\41\7e\20\15\1b\20\05\6a\21\05\20\04\41\08\71\22\15\0d\00" "\41\77\21\0a\02\40\20\0c\0d\00\20\0b\41\7c\6a\28\02\00\22" "\15\45\0d\00\41\0a\21\0c\41\00\21\0a\20\15\41\0a\70\0d\00" "\03\40\20\0a\22\16\41\01\6a\21\0a\20\15\20\0c\41\0a\6c\22" "\0c\70\45\0d\00\0b\20\16\41\7f\73\21\0a\0b\20\0b\20\11\6b" "\41\02\75\41\09\6c\21\0c\02\40\20\05\41\5f\71\41\c6\00\47" "\0d\00\41\00\21\15\20\0f\20\0c\20\0a\6a\41\77\6a\22\0a\41" "\00\20\0a\41\00\4a\1b\22\0a\20\0f\20\0a\48\1b\21\0f\0c\01" "\0b\41\00\21\15\20\0f\20\03\20\0c\6a\20\0a\6a\41\77\6a\22" "\0a\41\00\20\0a\41\00\4a\1b\22\0a\20\0f\20\0a\48\1b\21\0f" "\0b\41\7f\21\0c\20\0f\41\fd\ff\ff\ff\07\41\fe\ff\ff\ff\07" "\20\0f\20\15\72\22\16\1b\4a\0d\01\20\0f\20\16\41\00\47\6a" "\41\01\6a\21\17\02\40\02\40\20\05\41\5f\71\22\14\41\c6\00" "\47\0d\00\20\03\20\17\41\ff\ff\ff\ff\07\73\4a\0d\03\20\03" "\41\00\20\03\41\00\4a\1b\21\0a\0c\01\0b\02\40\20\0d\20\03" "\20\03\41\1f\75\22\0a\73\20\0a\6b\ad\20\0d\10\8d\04\22\0a" "\6b\41\01\4a\0d\00\03\40\20\0a\41\7f\6a\22\0a\41\30\3a\00" "\00\20\0d\20\0a\6b\41\02\48\0d\00\0b\0b\20\0a\41\7e\6a\22" "\13\20\05\3a\00\00\41\7f\21\0c\20\0a\41\7f\6a\41\2d\41\2b" "\20\03\41\00\48\1b\3a\00\00\20\0d\20\13\6b\22\0a\20\17\41" "\ff\ff\ff\ff\07\73\4a\0d\02\0b\41\7f\21\0c\20\0a\20\17\6a" "\22\0a\20\08\41\ff\ff\ff\ff\07\73\4a\0d\01\20\00\41\20\20" "\02\20\0a\20\08\6a\22\17\20\04\10\8e\04\20\00\20\09\20\08" "\10\88\04\20\00\41\30\20\02\20\17\20\04\41\80\80\04\73\10" "\8e\04\02\40\02\40\02\40\02\40\20\14\41\c6\00\47\0d\00\20" "\06\41\10\6a\41\08\72\21\15\20\06\41\10\6a\41\09\72\21\03" "\20\11\20\12\20\12\20\11\4b\1b\22\0c\21\12\03\40\20\12\35" "\02\00\20\03\10\8d\04\21\0a\02\40\02\40\20\12\20\0c\46\0d" "\00\20\0a\20\06\41\10\6a\4d\0d\01\03\40\20\0a\41\7f\6a\22" "\0a\41\30\3a\00\00\20\0a\20\06\41\10\6a\4b\0d\00\0c\02\0b" "\00\0b\20\0a\20\03\47\0d\00\20\06\41\30\3a\00\18\20\15\21" "\0a\0b\20\00\20\0a\20\03\20\0a\6b\10\88\04\20\12\41\04\6a" "\22\12\20\11\4d\0d\00\0b\02\40\20\16\45\0d\00\20\00\41\c0" "\0c\41\01\10\88\04\0b\20\12\20\0b\4f\0d\01\20\0f\41\01\48" "\0d\01\03\40\02\40\20\12\35\02\00\20\03\10\8d\04\22\0a\20" "\06\41\10\6a\4d\0d\00\03\40\20\0a\41\7f\6a\22\0a\41\30\3a" "\00\00\20\0a\20\06\41\10\6a\4b\0d\00\0b\0b\20\00\20\0a\20" "\0f\41\09\20\0f\41\09\48\1b\10\88\04\20\0f\41\77\6a\21\0a" "\20\12\41\04\6a\22\12\20\0b\4f\0d\03\20\0f\41\09\4a\21\0c" "\20\0a\21\0f\20\0c\0d\00\0c\03\0b\00\0b\02\40\20\0f\41\00" "\48\0d\00\20\0b\20\12\41\04\6a\20\0b\20\12\4b\1b\21\16\20" "\06\41\10\6a\41\08\72\21\11\20\06\41\10\6a\41\09\72\21\03" "\20\12\21\0b\03\40\02\40\20\0b\35\02\00\20\03\10\8d\04\22" "\0a\20\03\47\0d\00\20\06\41\30\3a\00\18\20\11\21\0a\0b\02" "\40\02\40\20\0b\20\12\46\0d\00\20\0a\20\06\41\10\6a\4d\0d" "\01\03\40\20\0a\41\7f\6a\22\0a\41\30\3a\00\00\20\0a\20\06" "\41\10\6a\4b\0d\00\0c\02\0b\00\0b\20\00\20\0a\41\01\10\88" "\04\20\0a\41\01\6a\21\0a\20\0f\20\15\72\45\0d\00\20\00\41" "\c0\0c\41\01\10\88\04\0b\20\00\20\0a\20\03\20\0a\6b\22\0c" "\20\0f\20\0f\20\0c\4a\1b\10\88\04\20\0f\20\0c\6b\21\0f\20" "\0b\41\04\6a\22\0b\20\16\4f\0d\01\20\0f\41\7f\4a\0d\00\0b" "\0b\20\00\41\30\20\0f\41\12\6a\41\12\41\00\10\8e\04\20\00" "\20\13\20\0d\20\13\6b\10\88\04\0c\02\0b\20\0f\21\0a\0b\20" "\00\41\30\20\0a\41\09\6a\41\09\41\00\10\8e\04\0b\20\00\41" "\20\20\02\20\17\20\04\41\80\c0\00\73\10\8e\04\20\17\20\02" "\20\17\20\02\4a\1b\21\0c\0c\01\0b\20\09\20\05\41\1a\74\41" "\1f\75\41\09\71\6a\21\17\02\40\20\03\41\0b\4b\0d\00\41\0c" "\20\03\6b\21\0a\44\00\00\00\00\00\00\30\40\21\1a\03\40\20" "\1a\44\00\00\00\00\00\00\30\40\a2\21\1a\20\0a\41\7f\6a\22" "\0a\0d\00\0b\02\40\20\17\2d\00\00\41\2d\47\0d\00\20\1a\20" "\01\9a\20\1a\a1\a0\9a\21\01\0c\01\0b\20\01\20\1a\a0\20\1a" "\a1\21\01\0b\02\40\20\06\28\02\2c\22\0a\20\0a\41\1f\75\22" "\0a\73\20\0a\6b\ad\20\0d\10\8d\04\22\0a\20\0d\47\0d\00\20" "\06\41\30\3a\00\0f\20\06\41\0f\6a\21\0a\0b\20\08\41\02\72" "\21\15\20\05\41\20\71\21\12\20\06\28\02\2c\21\0b\20\0a\41" "\7e\6a\22\16\20\05\41\0f\6a\3a\00\00\20\0a\41\7f\6a\41\2d" "\41\2b\20\0b\41\00\48\1b\3a\00\00\20\04\41\08\71\21\0c\20" "\06\41\10\6a\21\0b\03\40\20\0b\21\0a\02\40\02\40\20\01\99" "\44\00\00\00\00\00\00\e0\41\63\45\0d\00\20\01\aa\21\0b\0c" "\01\0b\41\80\80\80\80\78\21\0b\0b\20\0a\20\0b\41\90\21\6a" "\2d\00\00\20\12\72\3a\00\00\20\01\20\0b\b7\a1\44\00\00\00" "\00\00\00\30\40\a2\21\01\02\40\20\0a\41\01\6a\22\0b\20\06" "\41\10\6a\6b\41\01\47\0d\00\02\40\20\0c\0d\00\20\03\41\00" "\4a\0d\00\20\01\44\00\00\00\00\00\00\00\00\61\0d\01\0b\20" "\0a\41\2e\3a\00\01\20\0a\41\02\6a\21\0b\0b\20\01\44\00\00" "\00\00\00\00\00\00\62\0d\00\0b\41\7f\21\0c\41\fd\ff\ff\ff" "\07\20\15\20\0d\20\16\6b\22\12\6a\22\13\6b\20\03\48\0d\00" "\20\00\41\20\20\02\20\13\20\03\41\02\6a\20\0b\20\06\41\10" "\6a\6b\22\0a\20\0a\41\7e\6a\20\03\48\1b\20\0a\20\03\1b\22" "\03\6a\22\0b\20\04\10\8e\04\20\00\20\17\20\15\10\88\04\20" "\00\41\30\20\02\20\0b\20\04\41\80\80\04\73\10\8e\04\20\00" "\20\06\41\10\6a\20\0a\10\88\04\20\00\41\30\20\03\20\0a\6b" "\41\00\41\00\10\8e\04\20\00\20\16\20\12\10\88\04\20\00\41" "\20\20\02\20\0b\20\04\41\80\c0\00\73\10\8e\04\20\0b\20\02" "\20\0b\20\02\4a\1b\21\0c\0b\20\06\41\b0\04\6a\24\00\20\0c" "\0b\2e\01\01\7f\20\01\20\01\28\02\00\41\07\6a\41\78\71\22" "\02\41\10\6a\36\02\00\20\00\20\02\29\03\00\20\02\41\08\6a" "\29\03\00\10\ee\03\39\03\00\0b\05\00\20\00\bd\0b\a1\01\01" "\03\7f\23\00\41\a0\01\6b\22\04\24\00\20\04\20\00\20\04\41" "\9e\01\6a\20\01\1b\22\05\36\02\94\01\41\7f\21\00\20\04\41" "\00\20\01\41\7f\6a\22\06\20\06\20\01\4b\1b\36\02\98\01\20" "\04\41\00\41\90\01\10\15\22\04\41\7f\36\02\4c\20\04\41\d5" "\00\36\02\24\20\04\41\7f\36\02\50\20\04\20\04\41\9f\01\6a" "\36\02\2c\20\04\20\04\41\94\01\6a\36\02\54\02\40\02\40\20" "\01\41\7f\4a\0d\00\10\24\41\3d\36\02\00\0c\01\0b\20\05\41" "\00\3a\00\00\20\04\20\02\20\03\10\8f\04\21\00\0b\20\04\41" "\a0\01\6a\24\00\20\00\0b\ae\01\01\05\7f\20\00\28\02\54\22" "\03\28\02\00\21\04\02\40\20\03\28\02\04\22\05\20\00\28\02" "\14\20\00\28\02\1c\22\06\6b\22\07\20\05\20\07\49\1b\22\07" "\45\0d\00\20\04\20\06\20\07\10\27\1a\20\03\20\03\28\02\00" "\20\07\6a\22\04\36\02\00\20\03\20\03\28\02\04\20\07\6b\22" "\05\36\02\04\0b\02\40\20\05\20\02\20\05\20\02\49\1b\22\05" "\45\0d\00\20\04\20\01\20\05\10\27\1a\20\03\20\03\28\02\00" "\20\05\6a\22\04\36\02\00\20\03\20\03\28\02\04\20\05\6b\36" "\02\04\0b\20\04\41\00\3a\00\00\20\00\20\00\28\02\2c\22\03" "\36\02\1c\20\00\20\03\36\02\14\20\02\0b\17\00\20\00\41\50" "\6a\41\0a\49\20\00\41\20\72\41\9f\7f\6a\41\06\49\72\0b\07" "\00\20\00\10\95\04\0b\0a\00\20\00\41\50\6a\41\0a\49\0b\07" "\00\20\00\10\97\04\0b\e2\02\02\04\7f\01\7e\23\00\41\10\6b" "\21\02\02\40\20\00\42\7e\7c\42\88\01\56\0d\00\20\00\a7\22" "\03\41\bc\7f\6a\41\02\75\21\02\02\40\02\40\02\40\20\03\41" "\03\71\0d\00\20\02\41\7f\6a\21\02\41\01\21\04\20\01\0d\01" "\0c\02\0b\41\00\21\04\20\01\45\0d\01\0b\20\01\20\04\36\02" "\00\0b\20\03\41\80\e7\84\0f\6c\20\02\41\80\a3\05\6c\6a\41" "\80\d6\af\e3\07\6a\ac\0f\0b\41\00\21\04\20\00\42\9c\7f\7c" "\22\00\20\00\42\90\03\7f\22\06\42\90\03\7e\7d\a7\22\03\41" "\1f\75\20\06\a7\6a\21\05\20\01\20\02\41\0c\6a\20\01\1b\21" "\02\02\40\02\40\20\03\41\90\03\6a\20\03\20\03\41\00\48\1b" "\22\01\0d\00\41\01\21\01\41\00\21\03\0c\01\0b\02\40\02\40" "\02\40\20\01\41\c8\01\49\0d\00\02\40\20\01\41\ac\02\49\0d" "\00\20\01\41\d4\7d\6a\21\01\41\03\21\04\0c\02\0b\20\01\41" "\b8\7e\6a\21\01\41\02\21\04\0c\01\0b\41\00\21\04\20\01\41" "\e4\00\49\0d\01\20\01\41\9c\7f\6a\21\01\41\01\21\04\0b\20" "\01\0d\00\41\00\21\01\41\00\21\03\0c\01\0b\20\01\41\02\76" "\21\03\20\01\41\03\71\45\21\01\0b\20\02\20\01\36\02\00\20" "\00\42\80\e7\84\0f\7e\20\04\41\18\6c\20\05\41\e1\00\6c\6a" "\20\03\6a\20\01\6b\ac\42\80\a3\05\7e\7c\42\80\aa\ba\c3\03" "\7c\0b\24\01\01\7f\20\00\41\02\74\41\a0\21\6a\28\02\00\22" "\02\41\80\a3\05\6a\20\02\20\01\1b\20\02\20\00\41\01\4a\1b" "\0b\ac\01\02\04\7f\04\7e\23\00\41\10\6b\22\01\24\00\20\00" "\34\02\14\21\05\02\40\20\00\28\02\10\22\02\41\0c\49\0d\00" "\20\02\20\02\41\0c\6d\22\03\41\0c\6c\6b\22\04\41\0c\6a\20" "\04\20\04\41\00\48\1b\21\02\20\03\20\04\41\1f\75\6a\ac\20" "\05\7c\21\05\0b\20\05\20\01\41\0c\6a\10\99\04\21\05\20\02" "\20\01\28\02\0c\10\9a\04\21\02\20\00\28\02\0c\21\04\20\00" "\34\02\08\21\06\20\00\34\02\04\21\07\20\00\34\02\00\21\08" "\20\01\41\10\6a\24\00\20\08\20\05\20\02\ac\7c\20\04\41\7f" "\6a\ac\42\80\a3\05\7e\7c\20\06\42\90\1c\7e\7c\20\07\42\3c" "\7e\7c\7c\0b\2a\01\01\7f\23\00\41\10\6b\22\04\24\00\20\04" "\20\03\36\02\0c\20\00\20\01\20\02\20\03\10\93\04\21\03\20" "\04\41\10\6a\24\00\20\03\0b\d3\01\01\03\7f\23\00\41\10\6b" "\22\02\24\00\41\e8\99\01\10\45\20\02\41\00\36\02\0c\20\00" "\20\02\41\0c\6a\10\9e\04\21\03\02\40\02\40\02\40\20\01\45" "\0d\00\20\03\0d\01\0b\41\e8\99\01\10\46\41\64\21\01\0c\01" "\0b\02\40\20\03\28\02\04\20\01\46\0d\00\41\e8\99\01\10\46" "\41\64\21\01\0c\01\0b\20\02\28\02\0c\22\04\41\24\6a\41\ec" "\99\01\20\04\1b\20\03\28\02\24\36\02\00\41\e8\99\01\10\46" "\02\40\20\03\28\02\10\22\04\41\20\71\0d\00\20\00\20\01\20" "\03\28\02\20\20\04\20\03\28\02\0c\20\03\29\03\18\10\1b\22" "\01\0d\01\0b\02\40\20\03\28\02\08\45\0d\00\20\03\28\02\00" "\10\2d\0b\41\00\21\01\20\03\2d\00\10\41\20\71\0d\00\20\03" "\10\2d\0b\20\02\41\10\6a\24\00\20\01\0b\40\01\01\7f\02\40" "\41\00\28\02\ec\99\01\22\02\45\0d\00\03\40\02\40\20\02\28" "\02\00\20\00\47\0d\00\20\02\0f\0b\02\40\20\01\45\0d\00\20" "\01\20\02\36\02\00\0b\20\02\28\02\24\22\02\0d\00\0b\0b\41" "\00\0b\d8\01\01\01\7f\41\64\21\06\02\40\20\00\0d\00\20\05" "\42\0c\86\21\05\02\40\02\40\02\40\20\03\41\20\71\45\0d\00" "\41\80\80\04\20\01\41\0f\6a\41\70\71\22\06\41\28\6a\10\30" "\22\00\0d\01\41\50\0f\0b\02\40\20\01\20\02\20\03\20\04\20" "\05\41\28\10\2b\22\06\41\08\6a\20\06\10\1a\22\00\41\00\48" "\0d\00\20\06\20\04\36\02\0c\0c\02\0b\20\06\10\2d\20\00\0f" "\0b\20\00\41\00\20\06\10\15\1a\20\00\20\06\6a\22\06\20\00" "\36\02\00\20\06\42\81\80\80\80\70\37\03\08\0b\20\06\20\02" "\36\02\20\20\06\20\05\37\03\18\20\06\20\03\36\02\10\20\06" "\20\01\36\02\04\41\e8\99\01\10\45\20\06\41\00\28\02\ec\99" "\01\36\02\24\41\00\20\06\36\02\ec\99\01\41\e8\99\01\10\46" "\20\06\28\02\00\21\06\0b\20\06\0b\02\00\0b\0e\00\10\a0\04" "\20\00\20\01\10\9d\04\10\39\0b\9c\01\01\01\7f\02\40\02\40" "\02\40\02\40\20\00\41\00\48\0d\00\20\03\41\80\20\47\0d\00" "\20\01\2d\00\00\0d\01\20\00\20\02\10\1d\21\00\0c\03\0b\02" "\40\02\40\20\00\41\9c\7f\46\0d\00\20\01\2d\00\00\21\04\02" "\40\20\03\0d\00\20\04\41\ff\01\71\41\2f\46\0d\02\0b\20\03" "\41\80\02\47\0d\02\20\04\41\ff\01\71\41\2f\47\0d\02\0c\03" "\0b\20\03\41\80\02\46\0d\02\20\03\0d\01\0b\20\01\20\02\10" "\1e\21\00\0c\02\0b\20\00\20\01\20\02\20\03\10\1f\21\00\0c" "\01\0b\20\01\20\02\10\20\21\00\0b\20\00\10\39\0b\1e\00\02" "\40\20\00\41\7f\4a\0d\00\41\78\10\39\0f\0b\20\00\41\85\0d" "\20\01\41\80\20\10\a2\04\0b\78\01\01\7f\02\40\20\05\42\ff" "\9f\80\80\80\80\7c\83\50\0d\00\10\24\41\1c\36\02\00\41\7f" "\0f\0b\02\40\20\01\41\ff\ff\ff\ff\07\49\0d\00\10\24\41\30" "\36\02\00\41\7f\0f\0b\41\50\21\06\02\40\20\03\41\10\71\45" "\0d\00\10\a0\04\41\41\21\06\0b\20\00\20\01\20\02\20\03\20" "\04\20\05\42\0c\88\10\9f\04\22\01\20\01\20\06\41\41\20\03" "\41\20\71\1b\20\01\41\41\47\1b\20\00\1b\10\39\0b\74\01\02" "\7f\23\00\41\e0\00\6b\22\02\24\00\41\00\21\03\02\40\41\9c" "\7f\20\00\41\80\90\22\41\00\10\1c\10\39\22\00\41\00\48\0d" "\00\41\7f\21\03\02\40\20\00\20\02\10\a3\04\0d\00\41\00\20" "\02\28\02\18\41\01\41\01\20\00\42\00\10\a4\04\21\03\20\01" "\20\02\29\03\18\3e\02\00\0b\20\00\10\04\1a\41\00\20\03\20" "\03\41\7f\46\1b\21\03\0b\20\02\41\e0\00\6a\24\00\20\03\0b" "\ae\0b\01\09\7f\23\00\41\c0\02\6b\22\00\24\00\20\00\41\e5" "\0b\10\fb\03\22\01\41\a7\0b\20\01\1b\22\01\41\d0\21\20\01" "\2d\00\00\1b\22\02\36\02\1c\02\40\02\40\41\00\28\02\8c\79" "\22\01\45\0d\00\20\02\20\01\10\26\45\0d\01\0b\20\00\41\38" "\6a\21\03\41\00\21\01\03\40\20\01\41\02\74\22\04\41\b0\9a" "\01\6a\41\00\36\02\00\20\04\41\90\9a\01\6a\41\00\36\02\00" "\20\01\41\01\6a\22\01\41\05\47\0d\00\0b\02\40\41\00\28\02" "\84\9a\01\22\01\45\0d\00\20\01\41\00\28\02\cc\9a\01\10\a1" "\04\1a\0b\02\40\20\02\10\28\22\01\41\82\20\49\0d\00\41\d0" "\21\21\02\20\00\41\d0\21\36\02\1c\41\03\21\01\0b\02\40\02" "\40\20\01\41\00\28\02\90\79\22\04\49\0d\00\41\00\20\04\41" "\01\74\22\04\20\01\41\01\6a\20\01\20\04\49\1b\22\04\41\82" "\20\20\04\41\82\20\49\1b\22\04\36\02\90\79\41\00\20\04\10" "\2b\22\04\36\02\8c\79\0c\01\0b\41\00\28\02\8c\79\21\04\0b" "\02\40\20\04\45\0d\00\20\04\20\02\20\01\41\01\6a\10\27\1a" "\0b\02\40\02\40\02\40\02\40\02\40\02\40\20\02\2d\00\00\22" "\01\41\3a\46\0d\00\20\00\20\02\36\02\18\20\00\41\11\6a\20" "\00\41\18\6a\10\a9\04\20\00\28\02\18\22\04\20\02\46\0d\01" "\02\40\20\04\2d\00\00\22\01\41\55\6a\0e\03\04\00\04\00\0b" "\20\01\c0\41\50\6a\41\0a\49\0d\03\20\00\41\11\6a\41\d0\21" "\10\26\45\0d\03\20\00\41\11\6a\41\83\0c\10\26\45\0d\03\20" "\02\2d\00\00\22\01\41\3a\47\0d\01\0b\20\00\20\02\41\01\6a" "\22\04\36\02\1c\20\02\2d\00\01\21\01\0c\01\0b\20\02\21\04" "\0b\02\40\02\40\02\40\20\01\41\fe\01\71\41\2e\47\0d\00\02" "\40\41\00\2d\00\96\7d\45\0d\00\41\d0\21\21\02\20\04\41\a7" "\0b\10\26\0d\04\0b\20\04\41\cc\9a\01\10\a5\04\22\04\0d\01" "\0c\02\0b\41\d0\21\21\02\20\04\10\28\22\01\41\ff\01\4b\0d" "\02\20\04\41\2e\10\38\0d\02\20\03\20\04\20\01\41\01\6a\10" "\27\1a\20\03\20\01\6a\41\00\3a\00\00\41\e0\21\21\01\03\40" "\20\01\2d\00\00\45\0d\03\20\03\20\01\10\28\22\04\6b\22\05" "\20\01\20\04\10\27\1a\20\04\20\01\6a\41\01\6a\21\01\20\05" "\41\cc\9a\01\10\a5\04\22\04\45\0d\00\0b\0b\02\40\41\00\28" "\02\cc\9a\01\22\01\41\2c\49\0d\00\20\04\41\84\0b\41\04\10" "\fe\03\45\0d\03\41\00\28\02\cc\9a\01\21\01\0b\20\04\20\01" "\10\a1\04\1a\0b\41\d0\21\21\02\0b\41\00\41\00\36\02\84\9a" "\01\0c\01\0b\41\00\20\04\36\02\84\9a\01\41\02\21\01\20\04" "\21\03\02\40\20\04\2d\00\04\41\31\46\0d\00\20\00\41\86\02" "\3b\00\0f\20\00\41\81\82\a0\28\36\00\0b\20\04\20\04\41\14" "\6a\20\00\41\0b\6a\10\aa\04\6a\41\2c\6a\21\03\41\03\21\01" "\0b\41\00\20\03\41\2c\6a\22\02\36\02\d0\9a\01\41\00\20\02" "\20\03\41\20\6a\10\a7\04\22\05\20\01\74\6a\22\01\36\02\d4" "\9a\01\41\00\20\01\20\05\6a\22\01\36\02\88\9a\01\41\00\20" "\01\20\03\41\24\6a\10\a7\04\41\06\6c\22\05\6a\22\02\36\02" "\8c\9a\01\41\00\20\02\20\03\41\28\6a\10\a7\04\6a\36\02\c8" "\9a\01\02\40\02\40\20\04\41\00\28\02\cc\9a\01\6a\22\04\41" "\7f\6a\2d\00\00\22\06\41\0a\47\0d\00\20\04\41\7e\6a\21\04" "\03\40\20\00\20\04\22\01\36\02\1c\20\01\41\7f\6a\21\04\20" "\01\2d\00\00\41\0a\47\0d\00\0b\20\00\20\01\41\01\6a\36\02" "\1c\0c\01\0b\41\00\21\07\41\00\42\00\37\02\f8\99\01\41\00" "\41\00\36\02\c4\9a\01\41\00\41\00\36\02\f0\99\01\41\00\41" "\00\36\02\f4\99\01\02\40\02\40\20\05\41\00\4c\0d\00\41\00" "\21\08\41\00\21\03\41\00\21\05\03\40\02\40\02\40\20\01\2d" "\00\04\22\04\0d\00\20\03\0d\00\41\00\20\02\20\01\2d\00\05" "\6a\22\03\36\02\f8\99\01\41\00\41\00\20\01\10\a7\04\6b\22" "\07\36\02\f0\99\01\0c\01\0b\20\04\45\0d\00\20\05\0d\00\41" "\f8\99\01\20\02\20\01\2d\00\05\6a\22\05\36\02\04\41\01\21" "\08\20\01\10\a7\04\21\04\41\00\41\01\36\02\f4\99\01\41\00" "\41\00\20\04\6b\36\02\c4\9a\01\0b\20\01\41\06\6a\22\01\20" "\02\49\0d\00\0b\02\40\20\03\0d\00\41\00\20\05\41\d0\21\20" "\05\1b\22\03\36\02\f8\99\01\0b\20\08\0d\02\0c\01\0b\41\d0" "\21\21\03\41\00\21\07\41\00\41\d0\21\36\02\f8\99\01\0b\41" "\00\20\07\36\02\c4\9a\01\41\f8\99\01\20\03\36\02\04\0b\20" "\06\41\0a\47\0d\01\20\00\28\02\1c\21\02\0b\20\00\20\02\41" "\d0\21\20\02\1b\36\02\1c\41\d8\9a\01\20\00\41\1c\6a\10\a9" "\04\41\00\41\d8\9a\01\36\02\f8\99\01\41\00\20\00\41\1c\6a" "\10\ab\04\22\01\36\02\f0\99\01\41\df\9a\01\20\00\41\1c\6a" "\10\a9\04\41\f8\99\01\41\df\9a\01\36\02\04\02\40\02\40\41" "\00\2d\00\df\9a\01\45\0d\00\41\00\41\01\36\02\f4\99\01\02" "\40\02\40\02\40\20\00\28\02\1c\2d\00\00\22\04\41\55\6a\0e" "\03\01\00\01\00\0b\20\04\c0\41\50\6a\41\09\4b\0d\01\0b\20" "\00\41\1c\6a\10\ab\04\21\01\0c\02\0b\20\01\41\f0\63\6a\21" "\01\0c\01\0b\41\00\41\00\36\02\f4\99\01\0b\41\00\20\01\36" "\02\c4\9a\01\20\00\28\02\1c\22\01\2d\00\00\41\2c\47\0d\00" "\20\00\20\01\41\01\6a\36\02\1c\20\00\41\1c\6a\41\90\9a\01" "\10\ac\04\20\00\28\02\1c\22\01\2d\00\00\41\2c\47\0d\00\20" "\00\20\01\41\01\6a\36\02\1c\20\00\41\1c\6a\41\b0\9a\01\10" "\ac\04\0b\20\00\41\c0\02\6a\24\00\0b\28\00\20\00\28\00\00" "\22\00\41\18\74\20\00\41\80\fe\03\71\41\08\74\72\20\00\41" "\08\76\41\80\fe\03\71\20\00\41\18\76\72\72\0b\7c\01\02\7f" "\20\00\28\02\28\21\00\41\80\9a\01\10\45\41\d0\21\21\01\10" "\a6\04\02\40\20\00\41\d0\21\46\0d\00\02\40\20\00\41\00\28" "\02\f8\99\01\46\0d\00\20\00\41\f8\99\01\28\02\04\46\0d\00" "\02\40\41\00\28\02\84\9a\01\45\0d\00\20\00\21\01\20\00\41" "\00\28\02\8c\9a\01\22\02\6b\41\00\28\02\c8\9a\01\20\02\6b" "\49\0d\02\0b\41\85\0d\21\01\0c\01\0b\20\00\21\01\0b\41\80" "\9a\01\10\46\20\01\0b\dc\01\01\03\7f\02\40\02\40\20\01\28" "\02\00\22\02\2d\00\00\22\03\41\3c\46\0d\00\41\00\21\04\20" "\03\41\20\72\c0\41\9f\7f\6a\41\1a\4f\0d\01\03\40\02\40\20" "\04\41\05\4b\0d\00\20\00\20\04\6a\20\03\3a\00\00\20\01\28" "\02\00\21\02\0b\20\02\20\04\41\01\6a\22\04\6a\2d\00\00\22" "\03\41\20\72\c0\41\9f\7f\6a\41\1a\49\0d\00\0c\02\0b\00\0b" "\20\01\20\02\41\01\6a\22\02\36\02\00\41\00\21\04\03\40\20" "\02\20\04\6a\2d\00\00\22\03\45\0d\01\02\40\20\03\41\3e\46" "\0d\00\02\40\20\04\41\05\4b\0d\00\20\00\20\04\6a\20\03\3a" "\00\00\20\01\28\02\00\21\02\0b\20\04\41\01\6a\21\04\0c\01" "\0b\0b\20\02\41\01\6a\21\02\0b\20\01\20\02\20\04\6a\36\02" "\00\20\00\20\04\41\06\20\04\41\06\49\1b\6a\41\00\3a\00\00" "\0b\38\01\02\7f\41\06\21\02\41\00\21\03\03\40\20\00\10\a7" "\04\20\01\2d\00\00\6c\20\03\6a\21\03\20\00\41\04\6a\21\00" "\20\01\41\01\6a\21\01\20\02\41\7f\6a\22\02\0d\00\0b\20\03" "\0b\8d\01\01\03\7f\02\40\02\40\20\00\28\02\00\22\01\2d\00" "\00\22\02\41\55\6a\0e\03\00\01\00\01\0b\20\00\20\01\41\01" "\6a\36\02\00\0b\20\00\10\ad\04\41\90\1c\6c\21\01\02\40\20" "\00\28\02\00\22\03\2d\00\00\41\3a\47\0d\00\20\00\20\03\41" "\01\6a\36\02\00\20\00\10\ad\04\41\3c\6c\20\01\6a\21\01\20" "\00\28\02\00\22\03\2d\00\00\41\3a\47\0d\00\20\00\20\03\41" "\01\6a\36\02\00\20\00\10\ad\04\20\01\6a\21\01\0b\41\00\20" "\01\6b\20\01\20\02\41\2d\46\1b\0b\c4\01\01\02\7f\20\01\20" "\00\28\02\00\22\02\2d\00\00\22\03\c0\36\02\00\02\40\02\40" "\02\40\02\40\20\03\41\b6\7f\6a\0e\04\00\01\01\02\01\0b\20" "\00\20\02\41\01\6a\36\02\00\41\04\21\03\0c\02\0b\20\01\41" "\00\36\02\00\41\04\21\03\0c\01\0b\20\00\20\02\41\01\6a\36" "\02\00\20\01\20\00\10\ad\04\36\02\04\20\00\20\00\28\02\00" "\41\01\6a\36\02\00\20\01\20\00\10\ad\04\36\02\08\20\00\20" "\00\28\02\00\41\01\6a\36\02\00\41\0c\21\03\0b\20\01\20\03" "\6a\20\00\10\ad\04\36\02\00\41\a0\38\21\03\02\40\20\00\28" "\02\00\22\02\2d\00\00\41\2f\47\0d\00\20\00\20\02\41\01\6a" "\36\02\00\20\00\10\ab\04\21\03\0b\20\01\20\03\36\02\10\0b" "\51\01\04\7f\41\00\21\01\02\40\20\00\28\02\00\22\02\2c\00" "\00\41\50\6a\22\03\41\09\4b\0d\00\03\40\20\00\20\02\41\01" "\6a\22\04\36\02\00\20\03\20\01\41\0a\6c\6a\21\01\20\02\2c" "\00\01\21\03\20\04\21\02\20\03\41\50\6a\22\03\41\0a\49\0d" "\00\0b\0b\20\01\0b\09\00\20\00\20\01\10\fc\03\0b\85\02\01" "\04\7f\02\40\20\00\41\0e\47\0d\00\41\ba\0c\41\a7\0c\20\01" "\28\02\00\1b\0f\0b\20\00\41\10\75\21\02\02\40\20\00\41\ff" "\ff\03\71\22\03\41\ff\ff\03\47\0d\00\20\02\41\05\4a\0d\00" "\20\01\20\02\41\02\74\6a\28\02\00\22\00\41\08\6a\41\b6\0c" "\20\00\1b\0f\0b\41\85\0d\21\04\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\20\02\41\7f\6a\0e\05\00\01\06\02\03\06\0b" "\41\96\22\21\00\20\03\41\01\4d\0d\03\0c\05\0b\41\a0\22\21" "\00\20\03\41\31\4d\0d\02\0c\04\0b\41\85\0d\21\04\20\03\45" "\0d\02\0c\03\0b\41\e0\24\21\00\20\03\41\03\4b\0d\02\0b\02" "\40\02\40\20\03\0d\00\20\00\21\04\0c\01\0b\03\40\20\00\2d" "\00\00\21\05\20\00\41\01\6a\22\04\21\00\20\05\0d\00\20\04" "\21\00\20\03\41\7f\6a\22\03\0d\00\0b\0b\20\02\41\01\46\0d" "\01\0b\20\04\2d\00\00\45\0d\00\20\04\20\01\20\02\41\02\74" "\6a\28\02\00\10\ae\04\21\04\0b\20\04\0b\0d\00\20\00\20\01" "\20\02\42\7f\10\b1\04\0b\bc\04\02\07\7f\04\7e\23\00\41\10" "\6b\22\04\24\00\02\40\02\40\02\40\02\40\20\02\41\24\4a\0d" "\00\41\00\21\05\20\00\2d\00\00\22\06\0d\01\20\00\21\07\0c" "\02\0b\10\24\41\1c\36\02\00\42\00\21\03\0c\02\0b\20\00\21" "\07\02\40\03\40\20\06\c0\10\b2\04\45\0d\01\20\07\2d\00\01" "\21\06\20\07\41\01\6a\22\08\21\07\20\06\0d\00\0b\20\08\21" "\07\0c\01\0b\02\40\20\06\41\ff\01\71\22\06\41\55\6a\0e\03" "\00\01\00\01\0b\41\7f\41\00\20\06\41\2d\46\1b\21\05\20\07" "\41\01\6a\21\07\0b\02\40\02\40\20\02\41\10\72\41\10\47\0d" "\00\20\07\2d\00\00\41\30\47\0d\00\41\01\21\09\02\40\20\07" "\2d\00\01\41\df\01\71\41\d8\00\47\0d\00\20\07\41\02\6a\21" "\07\41\10\21\0a\0c\02\0b\20\07\41\01\6a\21\07\20\02\41\08" "\20\02\1b\21\0a\0c\01\0b\20\02\41\0a\20\02\1b\21\0a\41\00" "\21\09\0b\20\0a\ad\21\0b\41\00\21\02\42\00\21\0c\02\40\03" "\40\02\40\20\07\2d\00\00\22\08\41\50\6a\22\06\41\ff\01\71" "\41\0a\49\0d\00\02\40\20\08\41\9f\7f\6a\41\ff\01\71\41\19" "\4b\0d\00\20\08\41\a9\7f\6a\21\06\0c\01\0b\20\08\41\bf\7f" "\6a\41\ff\01\71\41\19\4b\0d\02\20\08\41\49\6a\21\06\0b\20" "\0a\20\06\41\ff\01\71\4c\0d\01\20\04\20\0b\42\00\20\0c\42" "\00\10\e1\03\41\01\21\08\02\40\20\04\29\03\08\42\00\52\0d" "\00\20\0c\20\0b\7e\22\0d\20\06\ad\42\ff\01\83\22\0e\42\7f" "\85\56\0d\00\20\0d\20\0e\7c\21\0c\41\01\21\09\20\02\21\08" "\0b\20\07\41\01\6a\21\07\20\08\21\02\0c\00\0b\00\0b\02\40" "\20\01\45\0d\00\20\01\20\07\20\00\20\09\1b\36\02\00\0b\02" "\40\02\40\02\40\20\02\45\0d\00\10\24\41\c4\00\36\02\00\20" "\05\41\00\20\03\42\01\83\22\0b\50\1b\21\05\20\03\21\0c\0c" "\01\0b\20\0c\20\03\54\0d\01\20\03\42\01\83\21\0b\0b\02\40" "\20\0b\a7\0d\00\20\05\0d\00\10\24\41\c4\00\36\02\00\20\03" "\42\7f\7c\21\03\0c\02\0b\20\0c\20\03\58\0d\00\10\24\41\c4" "\00\36\02\00\0c\01\0b\20\0c\20\05\ac\22\0b\85\20\0b\7d\21" "\03\0b\20\04\41\10\6a\24\00\20\03\0b\10\00\20\00\41\20\46" "\20\00\41\77\6a\41\05\49\72\0b\16\00\20\00\20\01\20\02\42" "\80\80\80\80\80\80\80\80\80\7f\10\b1\04\0b\12\00\20\00\20" "\01\20\02\42\ff\ff\ff\ff\0f\10\b1\04\a7\0b\86\0a\02\05\7f" "\03\7e\23\00\41\d0\00\6b\22\06\24\00\41\dc\08\21\07\41\30" "\21\08\41\a8\80\08\21\09\41\00\21\0a\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\20\02\41\5b\6a\0e\56\20\2a\2a\2a\2a\2a\2a\2a\2a" "\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a\2a" "\01\03\04\27\2a\07\08\09\0a\2a\2a\2a\0d\2a\2a\2a\2a\0f\11" "\13\15\17\16\1b\1d\1f\2a\2a\2a\2a\2a\2a\00\02\26\06\05\2a" "\08\02\2a\0b\2a\2a\0c\0e\2a\22\2a\25\10\12\14\2a\18\1a\1c" "\1e\2a\0b\41\c2\0c\21\0a\20\03\28\02\18\22\00\41\06\4b\0d" "\23\20\00\41\80\80\08\72\21\0a\0c\22\0b\41\c2\0c\21\0a\20" "\03\28\02\18\22\00\41\06\4b\0d\22\20\00\41\87\80\08\6a\21" "\0a\0c\21\0b\41\c2\0c\21\0a\20\03\28\02\10\22\00\41\0b\4b" "\0d\21\20\00\41\8e\80\08\6a\21\0a\0c\20\0b\41\c2\0c\21\0a" "\20\03\28\02\10\22\00\41\0b\4b\0d\20\20\00\41\9a\80\08\6a" "\21\0a\0c\1f\0b\20\03\34\02\14\42\ec\0e\7c\42\e4\00\7f\21" "\0b\0c\23\0b\41\df\00\21\08\0b\20\03\34\02\0c\21\0b\41\02" "\21\0a\0c\22\0b\41\d4\0b\21\07\0c\1f\0b\20\03\34\02\14\22" "\0c\42\ec\0e\7c\21\0b\02\40\02\40\02\40\20\03\28\02\1c\22" "\0a\41\02\4a\0d\00\20\0c\42\eb\0e\7c\21\0d\20\03\10\b6\04" "\21\0a\0c\01\0b\20\0a\41\e9\02\49\0d\01\20\03\10\b6\04\21" "\0a\20\0b\21\0d\20\0c\42\ed\0e\7c\21\0b\0b\20\0b\20\0d\20" "\0a\41\01\46\1b\21\0b\0b\41\30\21\08\41\04\21\0a\20\02\41" "\e7\00\47\0d\20\20\0b\42\e4\00\81\21\0b\41\02\21\0a\0c\20" "\0b\20\03\34\02\08\21\0b\0c\1e\0b\41\30\21\08\41\02\21\0a" "\20\03\28\02\08\22\03\0d\16\42\0c\21\0b\0c\1e\0b\20\03\28" "\02\1c\41\01\6a\ac\21\0b\41\30\21\08\41\03\21\0a\0c\1d\0b" "\20\03\28\02\10\41\01\6a\ac\21\0b\0c\1b\0b\20\03\34\02\04" "\21\0b\0c\1a\0b\20\01\41\01\36\02\00\41\82\0d\21\0a\0c\1b" "\0b\41\9a\0c\21\07\0c\17\0b\20\03\10\9b\04\20\03\34\02\24" "\7d\21\0b\0c\08\0b\20\03\34\02\00\21\0b\0c\16\0b\20\01\41" "\01\36\02\00\41\84\0d\21\0a\0c\17\0b\41\87\0c\21\07\0c\13" "\0b\20\03\28\02\18\22\0a\41\07\20\0a\1b\ac\21\0b\0c\04\0b" "\20\03\28\02\1c\20\03\28\02\18\6b\41\07\6a\41\07\6e\ad\21" "\0b\0c\12\0b\20\03\28\02\1c\20\03\28\02\18\41\06\6a\41\07" "\70\6b\41\07\6a\41\07\6e\ad\21\0b\0c\11\0b\20\03\10\b6\04" "\ad\21\0b\0c\10\0b\20\03\34\02\18\21\0b\0b\41\30\21\08\41" "\01\21\0a\0c\0f\0b\41\a9\80\08\21\09\0c\0b\0b\41\aa\80\08" "\21\09\0c\0a\0b\20\03\34\02\14\42\ec\0e\7c\42\e4\00\81\22" "\0b\20\0b\42\3f\87\22\0b\85\20\0b\7d\21\0b\0c\0b\0b\20\03" "\34\02\14\22\0c\42\ec\0e\7c\21\0b\02\40\20\0c\42\a4\3f\59" "\0d\00\41\30\21\08\41\04\21\0a\0c\0c\0b\20\06\20\0b\37\03" "\30\20\01\20\00\41\e4\00\41\c3\0b\20\06\41\30\6a\10\9c\04" "\36\02\00\20\00\21\0a\0c\0c\0b\02\40\20\03\28\02\20\41\7f" "\4a\0d\00\20\01\41\00\36\02\00\41\85\0d\21\0a\0c\0c\0b\20" "\06\20\03\28\02\24\22\0a\41\90\1c\6d\22\03\41\e4\00\6c\20" "\0a\20\03\41\90\1c\6c\6b\c1\41\3c\6d\c1\6a\36\02\40\20\01" "\20\00\41\e4\00\41\c9\0b\20\06\41\c0\00\6a\10\9c\04\36\02" "\00\20\00\21\0a\0c\0b\0b\02\40\20\03\28\02\20\41\7f\4a\0d" "\00\20\01\41\00\36\02\00\41\85\0d\21\0a\0c\0b\0b\20\03\10" "\a8\04\21\0a\0c\04\0b\20\01\41\01\36\02\00\41\cb\0c\21\0a" "\0c\09\0b\20\03\ac\22\0b\42\74\7c\20\0b\20\03\41\0c\4a\1b" "\21\0b\0c\07\0b\41\a7\80\08\41\a6\80\08\20\03\28\02\08\41" "\0b\4a\1b\21\0a\0b\20\0a\20\04\10\af\04\21\0a\0b\20\01\20" "\0a\10\28\36\02\00\0c\05\0b\41\ab\80\08\21\09\0b\20\09\20" "\04\10\af\04\21\07\0b\20\01\20\00\41\e4\00\20\07\20\03\20" "\04\10\b7\04\22\0a\36\02\00\20\00\41\00\20\0a\1b\21\0a\0c" "\02\0b\41\30\21\08\41\02\21\0a\0b\02\40\02\40\20\05\20\08" "\20\05\1b\22\03\41\df\00\46\0d\00\20\03\41\2d\47\0d\01\20" "\06\20\0b\37\03\10\20\01\20\00\41\e4\00\41\c4\0b\20\06\41" "\10\6a\10\9c\04\36\02\00\20\00\21\0a\0c\02\0b\20\06\20\0b" "\37\03\28\20\06\20\0a\36\02\20\20\01\20\00\41\e4\00\41\bd" "\0b\20\06\41\20\6a\10\9c\04\36\02\00\20\00\21\0a\0c\01\0b" "\20\06\20\0b\37\03\08\20\06\20\0a\36\02\00\20\01\20\00\41" "\e4\00\41\b6\0b\20\06\10\9c\04\36\02\00\20\00\21\0a\0b\20" "\06\41\d0\00\6a\24\00\20\0a\0b\a0\01\01\03\7f\41\35\21\01" "\02\40\02\40\20\00\28\02\1c\22\02\20\00\28\02\18\22\03\41" "\06\6a\41\07\70\6b\41\07\6a\41\07\6e\20\03\20\02\6b\22\03" "\41\f1\02\6a\41\07\70\41\03\49\6a\22\02\41\35\46\0d\00\20" "\02\21\01\20\02\0d\01\41\34\21\01\02\40\02\40\20\03\41\06" "\6a\41\07\70\41\7c\6a\0e\02\01\00\03\0b\20\00\28\02\14\41" "\90\03\6f\41\7f\6a\10\b8\04\45\0d\02\0b\41\35\0f\0b\02\40" "\02\40\20\03\41\f3\02\6a\41\07\70\41\7d\6a\0e\02\00\02\01" "\0b\20\00\28\02\14\10\b8\04\0d\01\0b\41\01\21\01\0b\20\01" "\0b\e1\05\01\09\7f\23\00\41\80\01\6b\22\05\24\00\02\40\02" "\40\20\01\45\0d\00\41\00\21\06\02\40\02\40\03\40\02\40\02" "\40\20\02\2d\00\00\22\07\41\25\46\0d\00\02\40\20\07\0d\00" "\20\06\21\07\0c\05\0b\20\00\20\06\6a\20\07\3a\00\00\20\06" "\41\01\6a\21\06\0c\01\0b\41\00\21\08\41\01\21\09\41\00\21" "\0a\02\40\02\40\02\40\20\02\2d\00\01\22\07\41\53\6a\0e\04" "\01\02\02\01\00\0b\20\07\41\df\00\46\0d\00\41\00\21\0a\0c" "\01\0b\20\07\21\0a\20\02\2d\00\02\21\07\41\02\21\09\0b\20" "\02\20\09\6a\20\07\41\ff\01\71\22\0b\41\2b\46\6a\22\0c\20" "\05\41\0c\6a\41\0a\10\b4\04\21\0d\02\40\20\05\28\02\0c\22" "\09\2d\00\00\22\07\41\bd\7f\6a\22\02\41\16\4b\0d\00\41\01" "\20\02\74\41\99\80\80\02\71\45\0d\00\20\0d\21\08\20\0d\0d" "\00\20\09\20\0c\47\21\08\0b\02\40\02\40\20\07\41\cf\00\46" "\0d\00\20\07\41\c5\00\46\0d\00\20\09\21\02\0c\01\0b\20\09" "\41\01\6a\21\02\20\09\2d\00\01\21\07\0b\20\05\41\10\6a\20" "\05\41\fc\00\6a\20\07\c0\20\03\20\04\20\0a\10\b5\04\22\0a" "\45\0d\02\02\40\02\40\20\08\0d\00\20\05\28\02\7c\21\0d\0c" "\01\0b\02\40\02\40\02\40\20\0a\2d\00\00\22\07\41\55\6a\0e" "\03\01\00\01\00\0b\20\05\28\02\7c\21\0d\0c\01\0b\20\05\28" "\02\7c\41\7f\6a\21\0d\20\0a\2d\00\01\21\07\20\0a\41\01\6a" "\21\0a\0b\02\40\20\07\41\ff\01\71\41\30\47\0d\00\03\40\20" "\0a\2c\00\01\22\07\41\50\6a\41\09\4b\0d\01\20\0a\41\01\6a" "\21\0a\20\0d\41\7f\6a\21\0d\20\07\41\30\46\0d\00\0b\0b\20" "\05\20\0d\36\02\7c\41\00\21\07\03\40\20\07\22\09\41\01\6a" "\21\07\20\0a\20\09\6a\2c\00\00\41\50\6a\41\0a\49\0d\00\0b" "\20\08\20\0d\20\08\20\0d\4b\1b\21\07\41\2d\21\08\02\40\02" "\40\20\03\28\02\14\41\94\71\48\0d\00\20\0b\41\2b\47\0d\01" "\41\2b\21\08\20\07\20\0d\6b\20\09\6a\41\03\41\05\20\05\28" "\02\0c\2d\00\00\41\c3\00\46\1b\49\0d\01\0b\20\00\20\06\6a" "\20\08\3a\00\00\20\07\41\7f\6a\21\07\20\06\41\01\6a\21\06" "\0b\20\07\20\0d\4d\0d\00\20\06\20\01\4f\0d\00\03\40\20\00" "\20\06\6a\41\30\3a\00\00\20\06\41\01\6a\21\06\20\07\41\7f" "\6a\22\07\20\0d\4d\0d\01\20\06\20\01\49\0d\00\0b\0b\20\05" "\20\0d\20\01\20\06\6b\22\07\20\0d\20\07\49\1b\22\07\36\02" "\7c\20\00\20\06\6a\20\0a\20\07\10\27\1a\20\05\28\02\7c\20" "\06\6a\21\06\0b\20\02\41\01\6a\21\02\20\06\20\01\49\0d\00" "\0b\20\01\45\0d\02\0b\20\01\41\7f\6a\20\06\20\06\20\01\46" "\1b\21\06\41\00\21\07\0b\20\00\20\06\6a\41\00\3a\00\00\0c" "\01\0b\41\00\21\07\0b\20\05\41\80\01\6a\24\00\20\07\0b\41" "\01\01\7f\41\00\21\01\02\40\20\00\41\b0\70\6a\20\00\20\00" "\41\93\f1\ff\ff\07\4a\1b\22\00\41\03\71\0d\00\41\01\21\01" "\20\00\41\ec\0e\6a\22\00\41\e4\00\6f\0d\00\20\00\41\90\03" "\6f\45\21\01\0b\20\01\0b\28\01\01\7f\23\00\41\10\6b\22\03" "\24\00\20\03\20\02\36\02\0c\20\00\20\01\20\02\10\f5\03\21" "\02\20\03\41\10\6a\24\00\20\02\0b\62\01\03\7f\23\00\41\10" "\6b\22\03\24\00\20\03\20\02\36\02\0c\20\03\20\02\36\02\08" "\41\7f\21\04\02\40\41\00\41\00\20\01\20\02\10\93\04\22\02" "\41\00\48\0d\00\20\00\20\02\41\01\6a\22\05\10\2b\22\02\36" "\02\00\20\02\45\0d\00\20\02\20\05\20\01\20\03\28\02\0c\10" "\93\04\21\04\0b\20\03\41\10\6a\24\00\20\04\0b\11\00\02\40" "\20\00\10\ff\03\45\0d\00\20\00\10\2d\0b\0b\23\01\02\7f\20" "\00\21\01\03\40\20\01\22\02\41\04\6a\21\01\20\02\28\02\00" "\0d\00\0b\20\02\20\00\6b\41\02\75\0b\05\00\41\f4\24\0b\05" "\00\41\80\31\0b\d4\01\01\04\7f\23\00\41\10\6b\22\05\24\00" "\41\00\21\06\02\40\20\01\28\02\00\22\07\45\0d\00\20\02\45" "\0d\00\20\03\41\00\20\00\1b\21\08\41\00\21\06\03\40\02\40" "\20\05\41\0c\6a\20\00\20\08\41\04\49\1b\20\07\28\02\00\41" "\00\10\89\03\22\03\41\7f\47\0d\00\41\7f\21\06\0c\02\0b\02" "\40\02\40\20\00\0d\00\41\00\21\00\0c\01\0b\02\40\20\08\41" "\03\4b\0d\00\20\08\20\03\49\0d\03\20\00\20\05\41\0c\6a\20" "\03\10\27\1a\0b\20\08\20\03\6b\21\08\20\00\20\03\6a\21\00" "\0b\02\40\20\07\28\02\00\0d\00\41\00\21\07\0c\02\0b\20\03" "\20\06\6a\21\06\20\07\41\04\6a\21\07\20\02\41\7f\6a\22\02" "\0d\00\0b\0b\02\40\20\00\45\0d\00\20\01\20\07\36\02\00\0b" "\20\05\41\10\6a\24\00\20\06\0b\fe\08\01\06\7f\20\01\28\02" "\00\21\04\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\02\40\02\40\20\03\45\0d\00\20\03\28\02\00\22" "\05\45\0d\00\02\40\20\00\0d\00\20\02\21\03\0c\03\0b\20\03" "\41\00\36\02\00\20\02\21\03\0c\01\0b\02\40\02\40\10\f9\02" "\28\02\60\28\02\00\0d\00\20\00\45\0d\01\20\02\45\0d\0c\20" "\02\21\05\02\40\03\40\20\04\2c\00\00\22\03\45\0d\01\20\00" "\20\03\41\ff\bf\03\71\36\02\00\20\00\41\04\6a\21\00\20\04" "\41\01\6a\21\04\20\05\41\7f\6a\22\05\0d\00\0c\0e\0b\00\0b" "\20\00\41\00\36\02\00\20\01\41\00\36\02\00\20\02\20\05\6b" "\0f\0b\20\02\21\03\20\00\45\0d\03\20\02\21\03\41\00\21\06" "\0c\05\0b\20\04\10\28\0f\0b\41\01\21\06\0c\03\0b\41\00\21" "\06\0c\01\0b\41\01\21\06\0b\03\40\02\40\02\40\20\06\0e\02" "\00\01\01\0b\20\04\2d\00\00\41\03\76\22\06\41\70\6a\20\05" "\41\1a\75\20\06\6a\72\41\07\4b\0d\03\20\04\41\01\6a\21\06" "\02\40\02\40\20\05\41\80\80\80\10\71\0d\00\20\06\21\04\0c" "\01\0b\02\40\20\06\2d\00\00\41\c0\01\71\41\80\01\46\0d\00" "\20\04\41\7f\6a\21\04\0c\07\0b\20\04\41\02\6a\21\06\02\40" "\20\05\41\80\80\20\71\0d\00\20\06\21\04\0c\01\0b\02\40\20" "\06\2d\00\00\41\c0\01\71\41\80\01\46\0d\00\20\04\41\7f\6a" "\21\04\0c\07\0b\20\04\41\03\6a\21\04\0b\20\03\41\7f\6a\21" "\03\41\01\21\06\0c\01\0b\03\40\20\04\2d\00\00\21\05\02\40" "\20\04\41\03\71\0d\00\20\05\41\7f\6a\41\fe\00\4b\0d\00\20" "\04\28\02\00\22\05\41\ff\fd\fb\77\6a\20\05\72\41\80\81\82" "\84\78\71\0d\00\03\40\20\03\41\7c\6a\21\03\20\04\28\02\04" "\21\05\20\04\41\04\6a\22\06\21\04\20\05\20\05\41\ff\fd\fb" "\77\6a\72\41\80\81\82\84\78\71\45\0d\00\0b\20\06\21\04\0b" "\02\40\20\05\41\ff\01\71\22\06\41\7f\6a\41\fe\00\4b\0d\00" "\20\03\41\7f\6a\21\03\20\04\41\01\6a\21\04\0c\01\0b\0b\20" "\06\41\be\7e\6a\22\06\41\32\4b\0d\03\20\04\41\01\6a\21\04" "\20\06\41\02\74\41\a0\15\6a\28\02\00\21\05\41\00\21\06\0c" "\00\0b\00\0b\03\40\02\40\02\40\20\06\0e\02\00\01\01\0b\20" "\03\45\0d\07\02\40\03\40\02\40\02\40\02\40\20\04\2d\00\00" "\22\06\41\7f\6a\22\07\41\fe\00\4d\0d\00\20\06\21\05\0c\01" "\0b\20\03\41\05\49\0d\01\20\04\41\03\71\0d\01\02\40\03\40" "\20\04\28\02\00\22\05\41\ff\fd\fb\77\6a\20\05\72\41\80\81" "\82\84\78\71\0d\01\20\00\20\05\41\ff\01\71\36\02\00\20\00" "\20\04\2d\00\01\36\02\04\20\00\20\04\2d\00\02\36\02\08\20" "\00\20\04\2d\00\03\36\02\0c\20\00\41\10\6a\21\00\20\04\41" "\04\6a\21\04\20\03\41\7c\6a\22\03\41\04\4b\0d\00\0b\20\04" "\2d\00\00\21\05\0b\20\05\41\ff\01\71\22\06\41\7f\6a\21\07" "\0b\20\07\41\fe\00\4b\0d\02\0b\20\00\20\06\36\02\00\20\00" "\41\04\6a\21\00\20\04\41\01\6a\21\04\20\03\41\7f\6a\22\03" "\45\0d\09\0c\00\0b\00\0b\20\06\41\be\7e\6a\22\06\41\32\4b" "\0d\03\20\04\41\01\6a\21\04\20\06\41\02\74\41\a0\15\6a\28" "\02\00\21\05\41\01\21\06\0c\01\0b\20\04\2d\00\00\22\07\41" "\03\76\22\06\41\70\6a\20\06\20\05\41\1a\75\6a\72\41\07\4b" "\0d\01\20\04\41\01\6a\21\08\02\40\02\40\02\40\02\40\20\07" "\41\80\7f\6a\20\05\41\06\74\72\22\06\41\7f\4c\0d\00\20\08" "\21\04\0c\01\0b\20\08\2d\00\00\41\80\7f\6a\22\07\41\3f\4b" "\0d\01\20\04\41\02\6a\21\08\20\07\20\06\41\06\74\22\09\72" "\21\06\02\40\20\09\41\7f\4c\0d\00\20\08\21\04\0c\01\0b\20" "\08\2d\00\00\41\80\7f\6a\22\07\41\3f\4b\0d\01\20\04\41\03" "\6a\21\04\20\07\20\06\41\06\74\72\21\06\0b\20\00\20\06\36" "\02\00\20\03\41\7f\6a\21\03\20\00\41\04\6a\21\00\0c\01\0b" "\10\24\41\19\36\02\00\20\04\41\7f\6a\21\04\0c\05\0b\41\00" "\21\06\0c\00\0b\00\0b\20\04\41\7f\6a\21\04\20\05\0d\01\20" "\04\2d\00\00\21\05\0b\20\05\41\ff\01\71\0d\00\02\40\20\00" "\45\0d\00\20\00\41\00\36\02\00\20\01\41\00\36\02\00\0b\20" "\02\20\03\6b\0f\0b\10\24\41\19\36\02\00\20\00\45\0d\01\0b" "\20\01\20\04\36\02\00\0b\41\7f\0f\0b\20\01\20\04\36\02\00" "\20\02\0b\94\03\01\07\7f\23\00\41\90\08\6b\22\05\24\00\20" "\05\20\01\28\02\00\22\06\36\02\0c\20\03\41\80\02\20\00\1b" "\21\03\20\00\20\05\41\10\6a\20\00\1b\21\07\41\00\21\08\02" "\40\02\40\02\40\02\40\20\06\45\0d\00\20\03\45\0d\00\03\40" "\20\02\41\02\76\21\09\02\40\20\02\41\83\01\4b\0d\00\20\09" "\20\03\4f\0d\00\20\06\21\09\0c\04\0b\20\07\20\05\41\0c\6a" "\20\09\20\03\20\09\20\03\49\1b\20\04\10\c0\04\21\0a\20\05" "\28\02\0c\21\09\02\40\20\0a\41\7f\47\0d\00\41\00\21\03\41" "\7f\21\08\0c\03\0b\20\03\41\00\20\0a\20\07\20\05\41\10\6a" "\46\1b\22\0b\6b\21\03\20\07\20\0b\41\02\74\6a\21\07\20\02" "\20\06\6a\20\09\6b\41\00\20\09\1b\21\02\20\0a\20\08\6a\21" "\08\20\09\45\0d\02\20\09\21\06\20\03\0d\00\0c\02\0b\00\0b" "\20\06\21\09\0b\20\09\45\0d\01\0b\20\03\45\0d\00\20\02\45" "\0d\00\20\08\21\0a\03\40\02\40\02\40\02\40\20\07\20\09\20" "\02\20\04\10\84\03\22\08\41\02\6a\41\02\4b\0d\00\02\40\02" "\40\20\08\41\01\6a\0e\02\06\00\01\0b\20\05\41\00\36\02\0c" "\0c\02\0b\20\04\41\00\36\02\00\0c\01\0b\20\05\20\05\28\02" "\0c\20\08\6a\22\09\36\02\0c\20\0a\41\01\6a\21\0a\20\03\41" "\7f\6a\22\03\0d\01\0b\20\0a\21\08\0c\02\0b\20\07\41\04\6a" "\21\07\20\02\20\08\6b\21\02\20\0a\21\08\20\02\0d\00\0b\0b" "\02\40\20\00\45\0d\00\20\01\20\05\28\02\0c\36\02\00\0b\20" "\05\41\90\08\6a\24\00\20\08\0b\10\00\41\04\41\01\10\f9\02" "\28\02\60\28\02\00\1b\0b\14\00\41\00\20\00\20\01\20\02\41" "\90\9b\01\20\02\1b\10\84\03\0b\33\01\02\7f\10\f9\02\22\01" "\28\02\60\21\02\02\40\20\00\45\0d\00\20\01\41\b4\fd\00\20" "\00\20\00\41\7f\46\1b\36\02\60\0b\41\7f\20\02\20\02\41\b4" "\fd\00\46\1b\0b\2f\00\02\40\20\02\45\0d\00\03\40\02\40\20" "\00\28\02\00\20\01\47\0d\00\20\00\0f\0b\20\00\41\04\6a\21" "\00\20\02\41\7f\6a\22\02\0d\00\0b\0b\41\00\0b\35\02\01\7f" "\01\7d\23\00\41\10\6b\22\02\24\00\20\02\20\00\20\01\41\00" "\10\c7\04\20\02\29\03\00\20\02\41\08\6a\29\03\00\10\ed\03" "\21\03\20\02\41\10\6a\24\00\20\03\0b\86\01\02\01\7f\02\7e" "\23\00\41\a0\01\6b\22\04\24\00\20\04\20\01\36\02\3c\20\04" "\20\01\36\02\14\20\04\41\7f\36\02\18\20\04\41\10\6a\42\00" "\10\cf\03\20\04\20\04\41\10\6a\20\03\41\01\10\e6\03\20\04" "\41\08\6a\29\03\00\21\05\20\04\29\03\00\21\06\02\40\20\02" "\45\0d\00\20\02\20\01\20\04\28\02\14\20\04\28\02\3c\6b\6a" "\20\04\28\02\88\01\6a\36\02\00\0b\20\00\20\05\37\03\08\20" "\00\20\06\37\03\00\20\04\41\a0\01\6a\24\00\0b\35\02\01\7f" "\01\7c\23\00\41\10\6b\22\02\24\00\20\02\20\00\20\01\41\01" "\10\c7\04\20\02\29\03\00\20\02\41\08\6a\29\03\00\10\ee\03" "\21\03\20\02\41\10\6a\24\00\20\03\0b\3c\02\01\7f\01\7e\23" "\00\41\10\6b\22\03\24\00\20\03\20\01\20\02\41\02\10\c7\04" "\20\03\29\03\00\21\04\20\00\20\03\41\08\6a\29\03\00\37\03" "\08\20\00\20\04\37\03\00\20\03\41\10\6a\24\00\0b\09\00\20" "\00\20\01\10\c6\04\0b\09\00\20\00\20\01\10\c8\04\0b\3a\02" "\01\7f\01\7e\23\00\41\10\6b\22\04\24\00\20\04\20\01\20\02" "\10\c9\04\20\04\29\03\00\21\05\20\00\20\04\41\08\6a\29\03" "\00\37\03\08\20\00\20\05\37\03\00\20\04\41\10\6a\24\00\0b" "\07\00\20\00\10\ce\04\0b\07\00\20\00\10\80\0d\0b\0d\00\20" "\00\10\cd\04\1a\20\00\10\8b\0d\0b\61\01\04\7f\20\01\20\04" "\20\03\6b\6a\21\05\02\40\02\40\03\40\20\03\20\04\46\0d\01" "\41\7f\21\06\20\01\20\02\46\0d\02\20\01\2c\00\00\22\07\20" "\03\2c\00\00\22\08\48\0d\02\02\40\20\08\20\07\4e\0d\00\41" "\01\0f\0b\20\03\41\01\6a\21\03\20\01\41\01\6a\21\01\0c\00" "\0b\00\0b\20\05\20\02\47\21\06\0b\20\06\0b\0c\00\20\00\20" "\02\20\03\10\d2\04\1a\0b\2e\01\01\7f\23\00\41\10\6b\22\03" "\24\00\20\00\20\03\41\0f\6a\20\03\41\0e\6a\10\d4\01\22\00" "\20\01\20\02\10\d3\04\20\03\41\10\6a\24\00\20\00\0b\12\00" "\20\00\20\01\20\02\20\01\20\02\10\e4\0a\10\e5\0a\0b\42\01" "\02\7f\41\00\21\03\03\7f\02\40\20\01\20\02\47\0d\00\20\03" "\0f\0b\20\03\41\04\74\20\01\2c\00\00\6a\22\03\41\80\80\80" "\80\7f\71\22\04\41\18\76\20\04\72\20\03\73\21\03\20\01\41" "\01\6a\21\01\0c\00\0b\0b\07\00\20\00\10\ce\04\0b\0d\00\20" "\00\10\d5\04\1a\20\00\10\8b\0d\0b\57\01\03\7f\02\40\02\40" "\03\40\20\03\20\04\46\0d\01\41\7f\21\05\20\01\20\02\46\0d" "\02\20\01\28\02\00\22\06\20\03\28\02\00\22\07\48\0d\02\02" "\40\20\07\20\06\4e\0d\00\41\01\0f\0b\20\03\41\04\6a\21\03" "\20\01\41\04\6a\21\01\0c\00\0b\00\0b\20\01\20\02\47\21\05" "\0b\20\05\0b\0c\00\20\00\20\02\20\03\10\d9\04\1a\0b\2e\01" "\01\7f\23\00\41\10\6b\22\03\24\00\20\00\20\03\41\0f\6a\20" "\03\41\0e\6a\10\da\04\22\00\20\01\20\02\10\db\04\20\03\41" "\10\6a\24\00\20\00\0b\0a\00\20\00\10\e7\0a\10\e8\0a\0b\12" "\00\20\00\20\01\20\02\20\01\20\02\10\e9\0a\10\ea\0a\0b\42" "\01\02\7f\41\00\21\03\03\7f\02\40\20\01\20\02\47\0d\00\20" "\03\0f\0b\20\01\28\02\00\20\03\41\04\74\6a\22\03\41\80\80" "\80\80\7f\71\22\04\41\18\76\20\04\72\20\03\73\21\03\20\01" "\41\04\6a\21\01\0c\00\0b\0b\f3\01\01\01\7f\23\00\41\20\6b" "\22\06\24\00\20\06\20\01\36\02\1c\02\40\02\40\20\03\10\75" "\41\01\71\0d\00\20\06\41\7f\36\02\00\20\00\20\01\20\02\20" "\03\20\04\20\06\20\00\28\02\00\28\02\10\11\05\00\21\01\02" "\40\02\40\02\40\20\06\28\02\00\0e\02\00\01\02\0b\20\05\41" "\00\3a\00\00\0c\03\0b\20\05\41\01\3a\00\00\0c\02\0b\20\05" "\41\01\3a\00\00\20\04\41\04\36\02\00\0c\01\0b\20\06\20\03" "\10\e9\02\20\06\10\76\21\01\20\06\10\ad\09\1a\20\06\20\03" "\10\e9\02\20\06\10\de\04\21\03\20\06\10\ad\09\1a\20\06\20" "\03\10\df\04\20\06\41\0c\72\20\03\10\e0\04\20\05\20\06\41" "\1c\6a\20\02\20\06\20\06\41\18\6a\22\03\20\01\20\04\41\01" "\10\e1\04\20\06\46\3a\00\00\20\06\28\02\1c\21\01\03\40\20" "\03\41\74\6a\10\99\0d\22\03\20\06\47\0d\00\0b\0b\20\06\41" "\20\6a\24\00\20\01\0b\0b\00\20\00\41\98\9d\01\10\e2\04\0b" "\11\00\20\00\20\01\20\01\28\02\00\28\02\18\11\02\00\0b\11" "\00\20\00\20\01\20\01\28\02\00\28\02\1c\11\02\00\0b\d6\04" "\01\0b\7f\23\00\41\80\01\6b\22\07\24\00\20\07\20\01\36\02" "\7c\20\02\20\03\10\e3\04\21\08\20\07\41\d6\00\36\02\10\41" "\00\21\09\20\07\41\08\6a\41\00\20\07\41\10\6a\10\e4\04\21" "\0a\20\07\41\10\6a\21\0b\02\40\02\40\02\40\20\08\41\e5\00" "\49\0d\00\20\08\10\2b\22\0b\45\0d\01\20\0a\20\0b\10\e5\04" "\0b\20\0b\21\0c\20\02\21\01\03\40\02\40\20\01\20\03\47\0d" "\00\41\00\21\0d\03\40\02\40\02\40\20\00\20\07\41\fc\00\6a" "\10\77\0d\00\20\08\0d\01\0b\02\40\20\00\20\07\41\fc\00\6a" "\10\77\45\0d\00\20\05\20\05\28\02\00\41\02\72\36\02\00\0b" "\0c\05\0b\20\00\10\78\21\0e\02\40\20\06\0d\00\20\04\20\0e" "\10\e6\04\21\0e\0b\20\0d\41\01\6a\21\0f\41\00\21\10\20\0b" "\21\0c\20\02\21\01\03\40\02\40\20\01\20\03\47\0d\00\20\0f" "\21\0d\20\10\41\01\71\45\0d\02\20\00\10\7a\1a\20\0f\21\0d" "\20\0b\21\0c\20\02\21\01\20\09\20\08\6a\41\02\49\0d\02\03" "\40\02\40\20\01\20\03\47\0d\00\20\0f\21\0d\0c\04\0b\02\40" "\20\0c\2d\00\00\41\02\47\0d\00\20\01\10\e6\01\20\0f\46\0d" "\00\20\0c\41\00\3a\00\00\20\09\41\7f\6a\21\09\0b\20\0c\41" "\01\6a\21\0c\20\01\41\0c\6a\21\01\0c\00\0b\00\0b\02\40\20" "\0c\2d\00\00\41\01\47\0d\00\20\01\20\0d\10\e7\04\2c\00\00" "\21\11\02\40\20\06\0d\00\20\04\20\11\10\e6\04\21\11\0b\02" "\40\02\40\20\0e\20\11\47\0d\00\41\01\21\10\20\01\10\e6\01" "\20\0f\47\0d\02\20\0c\41\02\3a\00\00\41\01\21\10\20\09\41" "\01\6a\21\09\0c\01\0b\20\0c\41\00\3a\00\00\0b\20\08\41\7f" "\6a\21\08\0b\20\0c\41\01\6a\21\0c\20\01\41\0c\6a\21\01\0c" "\00\0b\00\0b\00\0b\20\0c\41\02\41\01\20\01\10\e8\04\22\11" "\1b\3a\00\00\20\0c\41\01\6a\21\0c\20\01\41\0c\6a\21\01\20" "\09\20\11\6a\21\09\20\08\20\11\6b\21\08\0c\00\0b\00\0b\10" "\91\0d\00\0b\02\40\02\40\03\40\20\02\20\03\46\0d\01\02\40" "\20\0b\2d\00\00\41\02\46\0d\00\20\0b\41\01\6a\21\0b\20\02" "\41\0c\6a\21\02\0c\01\0b\0b\20\02\21\03\0c\01\0b\20\05\20" "\05\28\02\00\41\04\72\36\02\00\0b\20\0a\10\e9\04\1a\20\07" "\41\80\01\6a\24\00\20\03\0b\0f\00\20\00\28\02\00\20\01\10" "\f5\08\10\96\09\0b\09\00\20\00\20\01\10\e4\0c\0b\2b\01\01" "\7f\23\00\41\10\6b\22\03\24\00\20\03\20\01\36\02\0c\20\00" "\20\03\41\0c\6a\20\02\10\df\0c\21\01\20\03\41\10\6a\24\00" "\20\01\0b\2d\01\01\7f\20\00\10\e0\0c\28\02\00\21\02\20\00" "\10\e0\0c\20\01\36\02\00\02\40\20\02\45\0d\00\20\02\20\00" "\10\e1\0c\28\02\00\11\04\00\0b\0b\11\00\20\00\20\01\20\00" "\28\02\00\28\02\0c\11\01\00\0b\0a\00\20\00\10\e5\01\20\01" "\6a\0b\08\00\20\00\10\e6\01\45\0b\0b\00\20\00\41\00\10\e5" "\04\20\00\0b\11\00\20\00\20\01\20\02\20\03\20\04\20\05\10" "\eb\04\0b\b6\03\01\02\7f\23\00\41\80\02\6b\22\06\24\00\20" "\06\20\02\36\02\f8\01\20\06\20\01\36\02\fc\01\20\03\10\ec" "\04\21\01\20\00\20\03\20\06\41\d0\01\6a\10\ed\04\21\00\20" "\06\41\c4\01\6a\20\03\20\06\41\f7\01\6a\10\ee\04\20\06\41" "\b8\01\6a\10\d3\01\21\03\20\03\20\03\10\e7\01\10\e8\01\20" "\06\20\03\41\00\10\ef\04\22\02\36\02\b4\01\20\06\20\06\41" "\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03\40\20\06\41" "\fc\01\6a\20\06\41\f8\01\6a\10\77\0d\01\02\40\20\06\28\02" "\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03\10\e6\01\21" "\07\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20\03\20\03\10" "\e7\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef\04\22\02\6a" "\36\02\b4\01\0b\20\06\41\fc\01\6a\10\78\20\01\20\02\20\06" "\41\b4\01\6a\20\06\41\08\6a\20\06\2c\00\f7\01\20\06\41\c4" "\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10\f0\04\0d\01" "\20\06\41\fc\01\6a\10\7a\1a\0c\00\0b\00\0b\02\40\20\06\41" "\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22\00\20\06\41" "\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04\6a\36\02\0c" "\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02\20\06\28\02" "\b4\01\20\04\20\01\10\f1\04\36\02\00\20\06\41\c4\01\6a\20" "\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20\06\41" "\fc\01\6a\20\06\41\f8\01\6a\10\77\45\0d\00\20\04\20\04\28" "\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\01\21\02\20\03" "\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20\06\41\80\02" "\6a\24\00\20\02\0b\32\00\02\40\02\40\20\00\10\75\41\ca\00" "\71\22\00\45\0d\00\02\40\20\00\41\c0\00\47\0d\00\41\08\0f" "\0b\20\00\41\08\47\0d\01\41\10\0f\0b\41\00\0f\0b\41\0a\0b" "\0b\00\20\00\20\01\20\02\10\bd\05\0b\40\01\01\7f\23\00\41" "\10\6b\22\03\24\00\20\03\41\0c\6a\20\01\10\e9\02\20\02\20" "\03\41\0c\6a\10\de\04\22\01\10\b9\05\3a\00\00\20\00\20\01" "\10\ba\05\20\03\41\0c\6a\10\ad\09\1a\20\03\41\10\6a\24\00" "\0b\0a\00\20\00\10\d9\01\20\01\6a\0b\f7\02\01\03\7f\23\00" "\41\10\6b\22\0a\24\00\20\0a\20\00\3a\00\0f\02\40\02\40\02" "\40\20\03\28\02\00\20\02\47\0d\00\41\2b\21\0b\02\40\20\09" "\2d\00\18\20\00\41\ff\01\71\22\0c\46\0d\00\41\2d\21\0b\20" "\09\2d\00\19\20\0c\47\0d\01\0b\20\03\20\02\41\01\6a\36\02" "\00\20\02\20\0b\3a\00\00\0c\01\0b\02\40\20\06\10\e6\01\45" "\0d\00\20\00\20\05\47\0d\00\41\00\21\00\20\08\28\02\00\22" "\09\20\07\6b\41\9f\01\4a\0d\02\20\04\28\02\00\21\00\20\08" "\20\09\41\04\6a\36\02\00\20\09\20\00\36\02\00\0c\01\0b\41" "\7f\21\00\20\09\20\09\41\1a\6a\20\0a\41\0f\6a\10\91\05\20" "\09\6b\22\09\41\17\4a\0d\01\02\40\02\40\02\40\20\01\41\78" "\6a\0e\03\00\02\00\01\0b\20\09\20\01\48\0d\01\0c\03\0b\20" "\01\41\10\47\0d\00\20\09\41\16\48\0d\00\20\03\28\02\00\22" "\06\20\02\46\0d\02\20\06\20\02\6b\41\02\4a\0d\02\41\7f\21" "\00\20\06\41\7f\6a\2d\00\00\41\30\47\0d\02\41\00\21\00\20" "\04\41\00\36\02\00\20\03\20\06\41\01\6a\36\02\00\20\06\41" "\90\3d\20\09\6a\2d\00\00\3a\00\00\0c\02\0b\20\03\20\03\28" "\02\00\22\00\41\01\6a\36\02\00\20\00\41\90\3d\20\09\6a\2d" "\00\00\3a\00\00\20\04\20\04\28\02\00\41\01\6a\36\02\00\41" "\00\21\00\0c\01\0b\41\00\21\00\20\04\41\00\36\02\00\0b\20" "\0a\41\10\6a\24\00\20\00\0b\d0\01\02\03\7f\01\7e\23\00\41" "\10\6b\22\04\24\00\02\40\02\40\02\40\02\40\02\40\20\00\20" "\01\46\0d\00\10\24\22\05\28\02\00\21\06\20\05\41\00\36\02" "\00\20\00\20\04\41\0c\6a\20\03\10\8f\05\10\e5\0c\21\07\02" "\40\02\40\20\05\28\02\00\22\00\45\0d\00\20\04\28\02\0c\20" "\01\47\0d\01\20\00\41\c4\00\46\0d\05\0c\04\0b\20\05\20\06" "\36\02\00\20\04\28\02\0c\20\01\46\0d\03\0b\20\02\41\04\36" "\02\00\0c\01\0b\20\02\41\04\36\02\00\0b\41\00\21\01\0c\02" "\0b\20\07\10\e6\0c\ac\53\0d\00\20\07\10\87\01\ac\55\0d\00" "\20\07\a7\21\01\0c\01\0b\20\02\41\04\36\02\00\02\40\20\07" "\42\01\53\0d\00\10\87\01\21\01\0c\01\0b\10\e6\0c\21\01\0b" "\20\04\41\10\6a\24\00\20\01\0b\ad\01\01\02\7f\20\00\10\e6" "\01\21\04\02\40\20\02\20\01\6b\41\05\48\0d\00\20\04\45\0d" "\00\20\01\20\02\10\c2\07\20\02\41\7c\6a\21\04\20\00\10\e5" "\01\22\02\20\00\10\e6\01\6a\21\05\02\40\02\40\03\40\20\02" "\2c\00\00\21\00\20\01\20\04\4f\0d\01\02\40\20\00\41\01\48" "\0d\00\20\00\10\d1\06\4e\0d\00\20\01\28\02\00\20\02\2c\00" "\00\47\0d\03\0b\20\01\41\04\6a\21\01\20\02\20\05\20\02\6b" "\41\01\4a\6a\21\02\0c\00\0b\00\0b\20\00\41\01\48\0d\01\20" "\00\10\d1\06\4e\0d\01\20\04\28\02\00\41\7f\6a\20\02\2c\00" "\00\49\0d\01\0b\20\03\41\04\36\02\00\0b\0b\11\00\20\00\20" "\01\20\02\20\03\20\04\20\05\10\f4\04\0b\b6\03\01\02\7f\23" "\00\41\80\02\6b\22\06\24\00\20\06\20\02\36\02\f8\01\20\06" "\20\01\36\02\fc\01\20\03\10\ec\04\21\01\20\00\20\03\20\06" "\41\d0\01\6a\10\ed\04\21\00\20\06\41\c4\01\6a\20\03\20\06" "\41\f7\01\6a\10\ee\04\20\06\41\b8\01\6a\10\d3\01\21\03\20" "\03\20\03\10\e7\01\10\e8\01\20\06\20\03\41\00\10\ef\04\22" "\02\36\02\b4\01\20\06\20\06\41\10\6a\36\02\0c\20\06\41\00" "\36\02\08\02\40\03\40\20\06\41\fc\01\6a\20\06\41\f8\01\6a" "\10\77\0d\01\02\40\20\06\28\02\b4\01\20\02\20\03\10\e6\01" "\6a\47\0d\00\20\03\10\e6\01\21\07\20\03\20\03\10\e6\01\41" "\01\74\10\e8\01\20\03\20\03\10\e7\01\10\e8\01\20\06\20\07" "\20\03\41\00\10\ef\04\22\02\6a\36\02\b4\01\0b\20\06\41\fc" "\01\6a\10\78\20\01\20\02\20\06\41\b4\01\6a\20\06\41\08\6a" "\20\06\2c\00\f7\01\20\06\41\c4\01\6a\20\06\41\10\6a\20\06" "\41\0c\6a\20\00\10\f0\04\0d\01\20\06\41\fc\01\6a\10\7a\1a" "\0c\00\0b\00\0b\02\40\20\06\41\c4\01\6a\10\e6\01\45\0d\00" "\20\06\28\02\0c\22\00\20\06\41\10\6a\6b\41\9f\01\4a\0d\00" "\20\06\20\00\41\04\6a\36\02\0c\20\00\20\06\28\02\08\36\02" "\00\0b\20\05\20\02\20\06\28\02\b4\01\20\04\20\01\10\f5\04" "\37\03\00\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\28\02\0c" "\20\04\10\f2\04\02\40\20\06\41\fc\01\6a\20\06\41\f8\01\6a" "\10\77\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b" "\20\06\28\02\fc\01\21\02\20\03\10\99\0d\1a\20\06\41\c4\01" "\6a\10\99\0d\1a\20\06\41\80\02\6a\24\00\20\02\0b\c7\01\02" "\03\7f\01\7e\23\00\41\10\6b\22\04\24\00\02\40\02\40\02\40" "\02\40\02\40\20\00\20\01\46\0d\00\10\24\22\05\28\02\00\21" "\06\20\05\41\00\36\02\00\20\00\20\04\41\0c\6a\20\03\10\8f" "\05\10\e5\0c\21\07\02\40\02\40\20\05\28\02\00\22\00\45\0d" "\00\20\04\28\02\0c\20\01\47\0d\01\20\00\41\c4\00\46\0d\05" "\0c\04\0b\20\05\20\06\36\02\00\20\04\28\02\0c\20\01\46\0d" "\03\0b\20\02\41\04\36\02\00\0c\01\0b\20\02\41\04\36\02\00" "\0b\42\00\21\07\0c\02\0b\20\07\10\e8\0c\53\0d\00\10\e9\0c" "\20\07\59\0d\01\0b\20\02\41\04\36\02\00\02\40\20\07\42\01" "\53\0d\00\10\e9\0c\21\07\0c\01\0b\10\e8\0c\21\07\0b\20\04" "\41\10\6a\24\00\20\07\0b\11\00\20\00\20\01\20\02\20\03\20" "\04\20\05\10\f7\04\0b\b6\03\01\02\7f\23\00\41\80\02\6b\22" "\06\24\00\20\06\20\02\36\02\f8\01\20\06\20\01\36\02\fc\01" "\20\03\10\ec\04\21\01\20\00\20\03\20\06\41\d0\01\6a\10\ed" "\04\21\00\20\06\41\c4\01\6a\20\03\20\06\41\f7\01\6a\10\ee" "\04\20\06\41\b8\01\6a\10\d3\01\21\03\20\03\20\03\10\e7\01" "\10\e8\01\20\06\20\03\41\00\10\ef\04\22\02\36\02\b4\01\20" "\06\20\06\41\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03" "\40\20\06\41\fc\01\6a\20\06\41\f8\01\6a\10\77\0d\01\02\40" "\20\06\28\02\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03" "\10\e6\01\21\07\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20" "\03\20\03\10\e7\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef" "\04\22\02\6a\36\02\b4\01\0b\20\06\41\fc\01\6a\10\78\20\01" "\20\02\20\06\41\b4\01\6a\20\06\41\08\6a\20\06\2c\00\f7\01" "\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10" "\f0\04\0d\01\20\06\41\fc\01\6a\10\7a\1a\0c\00\0b\00\0b\02" "\40\20\06\41\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22" "\00\20\06\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04" "\6a\36\02\0c\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02" "\20\06\28\02\b4\01\20\04\20\01\10\f8\04\3b\01\00\20\06\41" "\c4\01\6a\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02" "\40\20\06\41\fc\01\6a\20\06\41\f8\01\6a\10\77\45\0d\00\20" "\04\20\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\01" "\21\02\20\03\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20" "\06\41\80\02\6a\24\00\20\02\0b\ef\01\02\04\7f\01\7e\23\00" "\41\10\6b\22\04\24\00\02\40\02\40\02\40\02\40\02\40\02\40" "\20\00\20\01\46\0d\00\02\40\20\00\2d\00\00\22\05\41\2d\47" "\0d\00\20\00\41\01\6a\22\00\20\01\47\0d\00\20\02\41\04\36" "\02\00\0c\02\0b\10\24\22\06\28\02\00\21\07\20\06\41\00\36" "\02\00\20\00\20\04\41\0c\6a\20\03\10\8f\05\10\ec\0c\21\08" "\02\40\02\40\20\06\28\02\00\22\00\45\0d\00\20\04\28\02\0c" "\20\01\47\0d\01\20\00\41\c4\00\46\0d\05\0c\04\0b\20\06\20" "\07\36\02\00\20\04\28\02\0c\20\01\46\0d\03\0b\20\02\41\04" "\36\02\00\0c\01\0b\20\02\41\04\36\02\00\0b\41\00\21\00\0c" "\03\0b\20\08\10\ed\0c\ad\58\0d\01\0b\20\02\41\04\36\02\00" "\10\ed\0c\21\00\0c\01\0b\41\00\20\08\a7\22\00\6b\20\00\20" "\05\41\2d\46\1b\21\00\0b\20\04\41\10\6a\24\00\20\00\41\ff" "\ff\03\71\0b\11\00\20\00\20\01\20\02\20\03\20\04\20\05\10" "\fa\04\0b\b6\03\01\02\7f\23\00\41\80\02\6b\22\06\24\00\20" "\06\20\02\36\02\f8\01\20\06\20\01\36\02\fc\01\20\03\10\ec" "\04\21\01\20\00\20\03\20\06\41\d0\01\6a\10\ed\04\21\00\20" "\06\41\c4\01\6a\20\03\20\06\41\f7\01\6a\10\ee\04\20\06\41" "\b8\01\6a\10\d3\01\21\03\20\03\20\03\10\e7\01\10\e8\01\20" "\06\20\03\41\00\10\ef\04\22\02\36\02\b4\01\20\06\20\06\41" "\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03\40\20\06\41" "\fc\01\6a\20\06\41\f8\01\6a\10\77\0d\01\02\40\20\06\28\02" "\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03\10\e6\01\21" "\07\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20\03\20\03\10" "\e7\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef\04\22\02\6a" "\36\02\b4\01\0b\20\06\41\fc\01\6a\10\78\20\01\20\02\20\06" "\41\b4\01\6a\20\06\41\08\6a\20\06\2c\00\f7\01\20\06\41\c4" "\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10\f0\04\0d\01" "\20\06\41\fc\01\6a\10\7a\1a\0c\00\0b\00\0b\02\40\20\06\41" "\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22\00\20\06\41" "\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04\6a\36\02\0c" "\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02\20\06\28\02" "\b4\01\20\04\20\01\10\fb\04\36\02\00\20\06\41\c4\01\6a\20" "\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20\06\41" "\fc\01\6a\20\06\41\f8\01\6a\10\77\45\0d\00\20\04\20\04\28" "\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\01\21\02\20\03" "\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20\06\41\80\02" "\6a\24\00\20\02\0b\ea\01\02\04\7f\01\7e\23\00\41\10\6b\22" "\04\24\00\02\40\02\40\02\40\02\40\02\40\02\40\20\00\20\01" "\46\0d\00\02\40\20\00\2d\00\00\22\05\41\2d\47\0d\00\20\00" "\41\01\6a\22\00\20\01\47\0d\00\20\02\41\04\36\02\00\0c\02" "\0b\10\24\22\06\28\02\00\21\07\20\06\41\00\36\02\00\20\00" "\20\04\41\0c\6a\20\03\10\8f\05\10\ec\0c\21\08\02\40\02\40" "\20\06\28\02\00\22\00\45\0d\00\20\04\28\02\0c\20\01\47\0d" "\01\20\00\41\c4\00\46\0d\05\0c\04\0b\20\06\20\07\36\02\00" "\20\04\28\02\0c\20\01\46\0d\03\0b\20\02\41\04\36\02\00\0c" "\01\0b\20\02\41\04\36\02\00\0b\41\00\21\00\0c\03\0b\20\08" "\10\8d\08\ad\58\0d\01\0b\20\02\41\04\36\02\00\10\8d\08\21" "\00\0c\01\0b\41\00\20\08\a7\22\00\6b\20\00\20\05\41\2d\46" "\1b\21\00\0b\20\04\41\10\6a\24\00\20\00\0b\11\00\20\00\20" "\01\20\02\20\03\20\04\20\05\10\fd\04\0b\b6\03\01\02\7f\23" "\00\41\80\02\6b\22\06\24\00\20\06\20\02\36\02\f8\01\20\06" "\20\01\36\02\fc\01\20\03\10\ec\04\21\01\20\00\20\03\20\06" "\41\d0\01\6a\10\ed\04\21\00\20\06\41\c4\01\6a\20\03\20\06" "\41\f7\01\6a\10\ee\04\20\06\41\b8\01\6a\10\d3\01\21\03\20" "\03\20\03\10\e7\01\10\e8\01\20\06\20\03\41\00\10\ef\04\22" "\02\36\02\b4\01\20\06\20\06\41\10\6a\36\02\0c\20\06\41\00" "\36\02\08\02\40\03\40\20\06\41\fc\01\6a\20\06\41\f8\01\6a" "\10\77\0d\01\02\40\20\06\28\02\b4\01\20\02\20\03\10\e6\01" "\6a\47\0d\00\20\03\10\e6\01\21\07\20\03\20\03\10\e6\01\41" "\01\74\10\e8\01\20\03\20\03\10\e7\01\10\e8\01\20\06\20\07" "\20\03\41\00\10\ef\04\22\02\6a\36\02\b4\01\0b\20\06\41\fc" "\01\6a\10\78\20\01\20\02\20\06\41\b4\01\6a\20\06\41\08\6a" "\20\06\2c\00\f7\01\20\06\41\c4\01\6a\20\06\41\10\6a\20\06" "\41\0c\6a\20\00\10\f0\04\0d\01\20\06\41\fc\01\6a\10\7a\1a" "\0c\00\0b\00\0b\02\40\20\06\41\c4\01\6a\10\e6\01\45\0d\00" "\20\06\28\02\0c\22\00\20\06\41\10\6a\6b\41\9f\01\4a\0d\00" "\20\06\20\00\41\04\6a\36\02\0c\20\00\20\06\28\02\08\36\02" "\00\0b\20\05\20\02\20\06\28\02\b4\01\20\04\20\01\10\fe\04" "\36\02\00\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\28\02\0c" "\20\04\10\f2\04\02\40\20\06\41\fc\01\6a\20\06\41\f8\01\6a" "\10\77\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b" "\20\06\28\02\fc\01\21\02\20\03\10\99\0d\1a\20\06\41\c4\01" "\6a\10\99\0d\1a\20\06\41\80\02\6a\24\00\20\02\0b\ea\01\02" "\04\7f\01\7e\23\00\41\10\6b\22\04\24\00\02\40\02\40\02\40" "\02\40\02\40\02\40\20\00\20\01\46\0d\00\02\40\20\00\2d\00" "\00\22\05\41\2d\47\0d\00\20\00\41\01\6a\22\00\20\01\47\0d" "\00\20\02\41\04\36\02\00\0c\02\0b\10\24\22\06\28\02\00\21" "\07\20\06\41\00\36\02\00\20\00\20\04\41\0c\6a\20\03\10\8f" "\05\10\ec\0c\21\08\02\40\02\40\20\06\28\02\00\22\00\45\0d" "\00\20\04\28\02\0c\20\01\47\0d\01\20\00\41\c4\00\46\0d\05" "\0c\04\0b\20\06\20\07\36\02\00\20\04\28\02\0c\20\01\46\0d" "\03\0b\20\02\41\04\36\02\00\0c\01\0b\20\02\41\04\36\02\00" "\0b\41\00\21\00\0c\03\0b\20\08\10\d2\02\ad\58\0d\01\0b\20" "\02\41\04\36\02\00\10\d2\02\21\00\0c\01\0b\41\00\20\08\a7" "\22\00\6b\20\00\20\05\41\2d\46\1b\21\00\0b\20\04\41\10\6a" "\24\00\20\00\0b\11\00\20\00\20\01\20\02\20\03\20\04\20\05" "\10\80\05\0b\b6\03\01\02\7f\23\00\41\80\02\6b\22\06\24\00" "\20\06\20\02\36\02\f8\01\20\06\20\01\36\02\fc\01\20\03\10" "\ec\04\21\01\20\00\20\03\20\06\41\d0\01\6a\10\ed\04\21\00" "\20\06\41\c4\01\6a\20\03\20\06\41\f7\01\6a\10\ee\04\20\06" "\41\b8\01\6a\10\d3\01\21\03\20\03\20\03\10\e7\01\10\e8\01" "\20\06\20\03\41\00\10\ef\04\22\02\36\02\b4\01\20\06\20\06" "\41\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03\40\20\06" "\41\fc\01\6a\20\06\41\f8\01\6a\10\77\0d\01\02\40\20\06\28" "\02\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03\10\e6\01" "\21\07\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20\03\20\03" "\10\e7\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef\04\22\02" "\6a\36\02\b4\01\0b\20\06\41\fc\01\6a\10\78\20\01\20\02\20" "\06\41\b4\01\6a\20\06\41\08\6a\20\06\2c\00\f7\01\20\06\41" "\c4\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10\f0\04\0d" "\01\20\06\41\fc\01\6a\10\7a\1a\0c\00\0b\00\0b\02\40\20\06" "\41\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22\00\20\06" "\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04\6a\36\02" "\0c\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02\20\06\28" "\02\b4\01\20\04\20\01\10\81\05\37\03\00\20\06\41\c4\01\6a" "\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20\06" "\41\fc\01\6a\20\06\41\f8\01\6a\10\77\45\0d\00\20\04\20\04" "\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\01\21\02\20" "\03\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20\06\41\80" "\02\6a\24\00\20\02\0b\e6\01\02\04\7f\01\7e\23\00\41\10\6b" "\22\04\24\00\02\40\02\40\02\40\02\40\02\40\02\40\20\00\20" "\01\46\0d\00\02\40\20\00\2d\00\00\22\05\41\2d\47\0d\00\20" "\00\41\01\6a\22\00\20\01\47\0d\00\20\02\41\04\36\02\00\0c" "\02\0b\10\24\22\06\28\02\00\21\07\20\06\41\00\36\02\00\20" "\00\20\04\41\0c\6a\20\03\10\8f\05\10\ec\0c\21\08\02\40\02" "\40\20\06\28\02\00\22\00\45\0d\00\20\04\28\02\0c\20\01\47" "\0d\01\20\00\41\c4\00\46\0d\05\0c\04\0b\20\06\20\07\36\02" "\00\20\04\28\02\0c\20\01\46\0d\03\0b\20\02\41\04\36\02\00" "\0c\01\0b\20\02\41\04\36\02\00\0b\42\00\21\08\0c\03\0b\10" "\ef\0c\20\08\5a\0d\01\0b\20\02\41\04\36\02\00\10\ef\0c\21" "\08\0c\01\0b\42\00\20\08\7d\20\08\20\05\41\2d\46\1b\21\08" "\0b\20\04\41\10\6a\24\00\20\08\0b\11\00\20\00\20\01\20\02" "\20\03\20\04\20\05\10\83\05\0b\d7\03\01\01\7f\23\00\41\80" "\02\6b\22\06\24\00\20\06\20\02\36\02\f8\01\20\06\20\01\36" "\02\fc\01\20\06\41\c0\01\6a\20\03\20\06\41\d0\01\6a\20\06" "\41\cf\01\6a\20\06\41\ce\01\6a\10\84\05\20\06\41\b4\01\6a" "\10\d3\01\21\02\20\02\20\02\10\e7\01\10\e8\01\20\06\20\02" "\41\00\10\ef\04\22\01\36\02\b0\01\20\06\20\06\41\10\6a\36" "\02\0c\20\06\41\00\36\02\08\20\06\41\01\3a\00\07\20\06\41" "\c5\00\3a\00\06\02\40\03\40\20\06\41\fc\01\6a\20\06\41\f8" "\01\6a\10\77\0d\01\02\40\20\06\28\02\b0\01\20\01\20\02\10" "\e6\01\6a\47\0d\00\20\02\10\e6\01\21\03\20\02\20\02\10\e6" "\01\41\01\74\10\e8\01\20\02\20\02\10\e7\01\10\e8\01\20\06" "\20\03\20\02\41\00\10\ef\04\22\01\6a\36\02\b0\01\0b\20\06" "\41\fc\01\6a\10\78\20\06\41\07\6a\20\06\41\06\6a\20\01\20" "\06\41\b0\01\6a\20\06\2c\00\cf\01\20\06\2c\00\ce\01\20\06" "\41\c0\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\06\41\08\6a" "\20\06\41\d0\01\6a\10\85\05\0d\01\20\06\41\fc\01\6a\10\7a" "\1a\0c\00\0b\00\0b\02\40\20\06\41\c0\01\6a\10\e6\01\45\0d" "\00\20\06\2d\00\07\41\ff\01\71\45\0d\00\20\06\28\02\0c\22" "\03\20\06\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\03\41\04" "\6a\36\02\0c\20\03\20\06\28\02\08\36\02\00\0b\20\05\20\01" "\20\06\28\02\b0\01\20\04\10\86\05\38\02\00\20\06\41\c0\01" "\6a\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20" "\06\41\fc\01\6a\20\06\41\f8\01\6a\10\77\45\0d\00\20\04\20" "\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\01\21\01" "\20\02\10\99\0d\1a\20\06\41\c0\01\6a\10\99\0d\1a\20\06\41" "\80\02\6a\24\00\20\01\0b\60\01\01\7f\23\00\41\10\6b\22\05" "\24\00\20\05\41\0c\6a\20\01\10\e9\02\20\05\41\0c\6a\10\76" "\41\90\3d\41\90\3d\41\20\6a\20\02\10\8e\05\1a\20\03\20\05" "\41\0c\6a\10\de\04\22\01\10\b8\05\3a\00\00\20\04\20\01\10" "\b9\05\3a\00\00\20\00\20\01\10\ba\05\20\05\41\0c\6a\10\ad" "\09\1a\20\05\41\10\6a\24\00\0b\f3\03\01\01\7f\23\00\41\10" "\6b\22\0c\24\00\20\0c\20\00\3a\00\0f\02\40\02\40\02\40\20" "\00\20\05\47\0d\00\20\01\2d\00\00\45\0d\01\41\00\21\00\20" "\01\41\00\3a\00\00\20\04\20\04\28\02\00\22\0b\41\01\6a\36" "\02\00\20\0b\41\2e\3a\00\00\20\07\10\e6\01\45\0d\02\20\09" "\28\02\00\22\0b\20\08\6b\41\9f\01\4a\0d\02\20\0a\28\02\00" "\21\05\20\09\20\0b\41\04\6a\36\02\00\20\0b\20\05\36\02\00" "\0c\02\0b\02\40\20\00\20\06\47\0d\00\20\07\10\e6\01\45\0d" "\00\20\01\2d\00\00\45\0d\01\41\00\21\00\20\09\28\02\00\22" "\0b\20\08\6b\41\9f\01\4a\0d\02\20\0a\28\02\00\21\00\20\09" "\20\0b\41\04\6a\36\02\00\20\0b\20\00\36\02\00\41\00\21\00" "\20\0a\41\00\36\02\00\0c\02\0b\41\7f\21\00\20\0b\20\0b\41" "\20\6a\20\0c\41\0f\6a\10\bb\05\20\0b\6b\22\0b\41\1f\4a\0d" "\01\41\90\3d\20\0b\6a\2c\00\00\21\05\02\40\02\40\02\40\02" "\40\20\0b\41\7e\71\41\6a\6a\0e\03\01\02\00\02\0b\02\40\20" "\04\28\02\00\22\0b\20\03\46\0d\00\41\7f\21\00\20\0b\41\7f" "\6a\2c\00\00\10\82\04\20\02\2c\00\00\10\82\04\47\0d\05\0b" "\20\04\20\0b\41\01\6a\36\02\00\20\0b\20\05\3a\00\00\41\00" "\21\00\0c\04\0b\20\02\41\d0\00\3a\00\00\0c\01\0b\20\05\10" "\82\04\22\00\20\02\2c\00\00\47\0d\00\20\02\20\00\10\83\04" "\3a\00\00\20\01\2d\00\00\45\0d\00\20\01\41\00\3a\00\00\20" "\07\10\e6\01\45\0d\00\20\09\28\02\00\22\00\20\08\6b\41\9f" "\01\4a\0d\00\20\0a\28\02\00\21\01\20\09\20\00\41\04\6a\36" "\02\00\20\00\20\01\36\02\00\0b\20\04\20\04\28\02\00\22\00" "\41\01\6a\36\02\00\20\00\20\05\3a\00\00\41\00\21\00\20\0b" "\41\15\4a\0d\01\20\0a\20\0a\28\02\00\41\01\6a\36\02\00\0c" "\01\0b\41\7f\21\00\0b\20\0c\41\10\6a\24\00\20\00\0b\a3\01" "\02\03\7f\02\7d\23\00\41\10\6b\22\03\24\00\02\40\02\40\02" "\40\02\40\20\00\20\01\46\0d\00\10\24\22\04\28\02\00\21\05" "\20\04\41\00\36\02\00\20\00\20\03\41\0c\6a\10\f1\0c\21\06" "\20\04\28\02\00\22\00\45\0d\01\43\00\00\00\00\21\07\20\03" "\28\02\0c\20\01\47\0d\02\20\06\21\07\20\00\41\c4\00\47\0d" "\03\0c\02\0b\20\02\41\04\36\02\00\43\00\00\00\00\21\06\0c" "\02\0b\20\04\20\05\36\02\00\43\00\00\00\00\21\07\20\03\28" "\02\0c\20\01\46\0d\01\0b\20\02\41\04\36\02\00\20\07\21\06" "\0b\20\03\41\10\6a\24\00\20\06\0b\11\00\20\00\20\01\20\02" "\20\03\20\04\20\05\10\88\05\0b\d7\03\01\01\7f\23\00\41\80" "\02\6b\22\06\24\00\20\06\20\02\36\02\f8\01\20\06\20\01\36" "\02\fc\01\20\06\41\c0\01\6a\20\03\20\06\41\d0\01\6a\20\06" "\41\cf\01\6a\20\06\41\ce\01\6a\10\84\05\20\06\41\b4\01\6a" "\10\d3\01\21\02\20\02\20\02\10\e7\01\10\e8\01\20\06\20\02" "\41\00\10\ef\04\22\01\36\02\b0\01\20\06\20\06\41\10\6a\36" "\02\0c\20\06\41\00\36\02\08\20\06\41\01\3a\00\07\20\06\41" "\c5\00\3a\00\06\02\40\03\40\20\06\41\fc\01\6a\20\06\41\f8" "\01\6a\10\77\0d\01\02\40\20\06\28\02\b0\01\20\01\20\02\10" "\e6\01\6a\47\0d\00\20\02\10\e6\01\21\03\20\02\20\02\10\e6" "\01\41\01\74\10\e8\01\20\02\20\02\10\e7\01\10\e8\01\20\06" "\20\03\20\02\41\00\10\ef\04\22\01\6a\36\02\b0\01\0b\20\06" "\41\fc\01\6a\10\78\20\06\41\07\6a\20\06\41\06\6a\20\01\20" "\06\41\b0\01\6a\20\06\2c\00\cf\01\20\06\2c\00\ce\01\20\06" "\41\c0\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\06\41\08\6a" "\20\06\41\d0\01\6a\10\85\05\0d\01\20\06\41\fc\01\6a\10\7a" "\1a\0c\00\0b\00\0b\02\40\20\06\41\c0\01\6a\10\e6\01\45\0d" "\00\20\06\2d\00\07\41\ff\01\71\45\0d\00\20\06\28\02\0c\22" "\03\20\06\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\03\41\04" "\6a\36\02\0c\20\03\20\06\28\02\08\36\02\00\0b\20\05\20\01" "\20\06\28\02\b0\01\20\04\10\89\05\39\03\00\20\06\41\c0\01" "\6a\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20" "\06\41\fc\01\6a\20\06\41\f8\01\6a\10\77\45\0d\00\20\04\20" "\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\01\21\01" "\20\02\10\99\0d\1a\20\06\41\c0\01\6a\10\99\0d\1a\20\06\41" "\80\02\6a\24\00\20\01\0b\af\01\02\03\7f\02\7c\23\00\41\10" "\6b\22\03\24\00\02\40\02\40\02\40\02\40\20\00\20\01\46\0d" "\00\10\24\22\04\28\02\00\21\05\20\04\41\00\36\02\00\20\00" "\20\03\41\0c\6a\10\f2\0c\21\06\20\04\28\02\00\22\00\45\0d" "\01\44\00\00\00\00\00\00\00\00\21\07\20\03\28\02\0c\20\01" "\47\0d\02\20\06\21\07\20\00\41\c4\00\47\0d\03\0c\02\0b\20" "\02\41\04\36\02\00\44\00\00\00\00\00\00\00\00\21\06\0c\02" "\0b\20\04\20\05\36\02\00\44\00\00\00\00\00\00\00\00\21\07" "\20\03\28\02\0c\20\01\46\0d\01\0b\20\02\41\04\36\02\00\20" "\07\21\06\0b\20\03\41\10\6a\24\00\20\06\0b\11\00\20\00\20" "\01\20\02\20\03\20\04\20\05\10\8b\05\0b\f1\03\02\01\7f\01" "\7e\23\00\41\90\02\6b\22\06\24\00\20\06\20\02\36\02\88\02" "\20\06\20\01\36\02\8c\02\20\06\41\d0\01\6a\20\03\20\06\41" "\e0\01\6a\20\06\41\df\01\6a\20\06\41\de\01\6a\10\84\05\20" "\06\41\c4\01\6a\10\d3\01\21\02\20\02\20\02\10\e7\01\10\e8" "\01\20\06\20\02\41\00\10\ef\04\22\01\36\02\c0\01\20\06\20" "\06\41\20\6a\36\02\1c\20\06\41\00\36\02\18\20\06\41\01\3a" "\00\17\20\06\41\c5\00\3a\00\16\02\40\03\40\20\06\41\8c\02" "\6a\20\06\41\88\02\6a\10\77\0d\01\02\40\20\06\28\02\c0\01" "\20\01\20\02\10\e6\01\6a\47\0d\00\20\02\10\e6\01\21\03\20" "\02\20\02\10\e6\01\41\01\74\10\e8\01\20\02\20\02\10\e7\01" "\10\e8\01\20\06\20\03\20\02\41\00\10\ef\04\22\01\6a\36\02" "\c0\01\0b\20\06\41\8c\02\6a\10\78\20\06\41\17\6a\20\06\41" "\16\6a\20\01\20\06\41\c0\01\6a\20\06\2c\00\df\01\20\06\2c" "\00\de\01\20\06\41\d0\01\6a\20\06\41\20\6a\20\06\41\1c\6a" "\20\06\41\18\6a\20\06\41\e0\01\6a\10\85\05\0d\01\20\06\41" "\8c\02\6a\10\7a\1a\0c\00\0b\00\0b\02\40\20\06\41\d0\01\6a" "\10\e6\01\45\0d\00\20\06\2d\00\17\41\ff\01\71\45\0d\00\20" "\06\28\02\1c\22\03\20\06\41\20\6a\6b\41\9f\01\4a\0d\00\20" "\06\20\03\41\04\6a\36\02\1c\20\03\20\06\28\02\18\36\02\00" "\0b\20\06\20\01\20\06\28\02\c0\01\20\04\10\8c\05\20\06\29" "\03\00\21\07\20\05\20\06\41\08\6a\29\03\00\37\03\08\20\05" "\20\07\37\03\00\20\06\41\d0\01\6a\20\06\41\20\6a\20\06\28" "\02\1c\20\04\10\f2\04\02\40\20\06\41\8c\02\6a\20\06\41\88" "\02\6a\10\77\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02" "\00\0b\20\06\28\02\8c\02\21\01\20\02\10\99\0d\1a\20\06\41" "\d0\01\6a\10\99\0d\1a\20\06\41\90\02\6a\24\00\20\01\0b\ce" "\01\02\03\7f\04\7e\23\00\41\20\6b\22\04\24\00\02\40\02\40" "\02\40\02\40\20\01\20\02\46\0d\00\10\24\22\05\28\02\00\21" "\06\20\05\41\00\36\02\00\20\04\41\08\6a\20\01\20\04\41\1c" "\6a\10\f3\0c\20\04\41\10\6a\29\03\00\21\07\20\04\29\03\08" "\21\08\20\05\28\02\00\22\01\45\0d\01\42\00\21\09\42\00\21" "\0a\20\04\28\02\1c\20\02\47\0d\02\20\08\21\09\20\07\21\0a" "\20\01\41\c4\00\47\0d\03\0c\02\0b\20\03\41\04\36\02\00\42" "\00\21\08\42\00\21\07\0c\02\0b\20\05\20\06\36\02\00\42\00" "\21\09\42\00\21\0a\20\04\28\02\1c\20\02\46\0d\01\0b\20\03" "\41\04\36\02\00\20\09\21\08\20\0a\21\07\0b\20\00\20\08\37" "\03\00\20\00\20\07\37\03\08\20\04\41\20\6a\24\00\0b\9c\03" "\01\02\7f\23\00\41\80\02\6b\22\06\24\00\20\06\20\02\36\02" "\f8\01\20\06\20\01\36\02\fc\01\20\06\41\c4\01\6a\10\d3\01" "\21\07\20\06\41\10\6a\20\03\10\e9\02\20\06\41\10\6a\10\76" "\41\90\3d\41\90\3d\41\1a\6a\20\06\41\d0\01\6a\10\8e\05\1a" "\20\06\41\10\6a\10\ad\09\1a\20\06\41\b8\01\6a\10\d3\01\21" "\02\20\02\20\02\10\e7\01\10\e8\01\20\06\20\02\41\00\10\ef" "\04\22\01\36\02\b4\01\20\06\20\06\41\10\6a\36\02\0c\20\06" "\41\00\36\02\08\02\40\03\40\20\06\41\fc\01\6a\20\06\41\f8" "\01\6a\10\77\0d\01\02\40\20\06\28\02\b4\01\20\01\20\02\10" "\e6\01\6a\47\0d\00\20\02\10\e6\01\21\03\20\02\20\02\10\e6" "\01\41\01\74\10\e8\01\20\02\20\02\10\e7\01\10\e8\01\20\06" "\20\03\20\02\41\00\10\ef\04\22\01\6a\36\02\b4\01\0b\20\06" "\41\fc\01\6a\10\78\41\10\20\01\20\06\41\b4\01\6a\20\06\41" "\08\6a\41\00\20\07\20\06\41\10\6a\20\06\41\0c\6a\20\06\41" "\d0\01\6a\10\f0\04\0d\01\20\06\41\fc\01\6a\10\7a\1a\0c\00" "\0b\00\0b\20\02\20\06\28\02\b4\01\20\01\6b\10\e8\01\20\02" "\10\ed\01\21\01\10\8f\05\21\03\20\06\20\05\36\02\00\02\40" "\20\01\20\03\41\a7\0a\20\06\10\90\05\41\01\46\0d\00\20\04" "\41\04\36\02\00\0b\02\40\20\06\41\fc\01\6a\20\06\41\f8\01" "\6a\10\77\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02\00" "\0b\20\06\28\02\fc\01\21\01\20\02\10\99\0d\1a\20\07\10\99" "\0d\1a\20\06\41\80\02\6a\24\00\20\01\0b\15\00\20\00\20\01" "\20\02\20\03\20\00\28\02\00\28\02\20\11\0a\00\0b\3d\01\01" "\7f\02\40\41\00\2d\00\b8\9c\01\45\0d\00\41\00\28\02\b4\9c" "\01\0f\0b\41\ff\ff\ff\ff\07\41\b6\0c\41\00\10\80\04\21\00" "\41\00\41\01\3a\00\b8\9c\01\41\00\20\00\36\02\b4\9c\01\20" "\00\0b\47\01\01\7f\23\00\41\10\6b\22\04\24\00\20\04\20\01" "\36\02\0c\20\04\20\03\36\02\08\20\04\41\04\6a\20\04\41\0c" "\6a\10\92\05\21\03\20\00\20\02\20\04\28\02\08\10\f5\03\21" "\01\20\03\10\93\05\1a\20\04\41\10\6a\24\00\20\01\0b\31\01" "\01\7f\23\00\41\10\6b\22\03\24\00\20\00\20\00\10\88\02\20" "\01\10\88\02\20\02\20\03\41\0f\6a\10\be\05\10\8f\02\21\00" "\20\03\41\10\6a\24\00\20\00\0b\11\00\20\00\20\01\28\02\00" "\10\c4\04\36\02\00\20\00\0b\19\01\01\7f\02\40\20\00\28\02" "\00\22\01\45\0d\00\20\01\10\c4\04\1a\0b\20\00\0b\f4\01\01" "\01\7f\23\00\41\20\6b\22\06\24\00\20\06\20\01\36\02\1c\02" "\40\02\40\20\03\10\75\41\01\71\0d\00\20\06\41\7f\36\02\00" "\20\00\20\01\20\02\20\03\20\04\20\06\20\00\28\02\00\28\02" "\10\11\05\00\21\01\02\40\02\40\02\40\20\06\28\02\00\0e\02" "\00\01\02\0b\20\05\41\00\3a\00\00\0c\03\0b\20\05\41\01\3a" "\00\00\0c\02\0b\20\05\41\01\3a\00\00\20\04\41\04\36\02\00" "\0c\01\0b\20\06\20\03\10\e9\02\20\06\10\ba\01\21\01\20\06" "\10\ad\09\1a\20\06\20\03\10\e9\02\20\06\10\95\05\21\03\20" "\06\10\ad\09\1a\20\06\20\03\10\96\05\20\06\41\0c\72\20\03" "\10\97\05\20\05\20\06\41\1c\6a\20\02\20\06\20\06\41\18\6a" "\22\03\20\01\20\04\41\01\10\98\05\20\06\46\3a\00\00\20\06" "\28\02\1c\21\01\03\40\20\03\41\74\6a\10\a7\0d\22\03\20\06" "\47\0d\00\0b\0b\20\06\41\20\6a\24\00\20\01\0b\0b\00\20\00" "\41\a0\9d\01\10\e2\04\0b\11\00\20\00\20\01\20\01\28\02\00" "\28\02\18\11\02\00\0b\11\00\20\00\20\01\20\01\28\02\00\28" "\02\1c\11\02\00\0b\da\04\01\0b\7f\23\00\41\80\01\6b\22\07" "\24\00\20\07\20\01\36\02\7c\20\02\20\03\10\99\05\21\08\20" "\07\41\d6\00\36\02\10\41\00\21\09\20\07\41\08\6a\41\00\20" "\07\41\10\6a\10\e4\04\21\0a\20\07\41\10\6a\21\0b\02\40\02" "\40\02\40\20\08\41\e5\00\49\0d\00\20\08\10\2b\22\0b\45\0d" "\01\20\0a\20\0b\10\e5\04\0b\20\0b\21\0c\20\02\21\01\03\40" "\02\40\20\01\20\03\47\0d\00\41\00\21\0d\03\40\02\40\02\40" "\20\00\20\07\41\fc\00\6a\10\bb\01\0d\00\20\08\0d\01\0b\02" "\40\20\00\20\07\41\fc\00\6a\10\bb\01\45\0d\00\20\05\20\05" "\28\02\00\41\02\72\36\02\00\0b\0c\05\0b\20\00\10\bc\01\21" "\0e\02\40\20\06\0d\00\20\04\20\0e\10\9a\05\21\0e\0b\20\0d" "\41\01\6a\21\0f\41\00\21\10\20\0b\21\0c\20\02\21\01\03\40" "\02\40\20\01\20\03\47\0d\00\20\0f\21\0d\20\10\41\01\71\45" "\0d\02\20\00\10\be\01\1a\20\0f\21\0d\20\0b\21\0c\20\02\21" "\01\20\09\20\08\6a\41\02\49\0d\02\03\40\02\40\20\01\20\03" "\47\0d\00\20\0f\21\0d\0c\04\0b\02\40\20\0c\2d\00\00\41\02" "\47\0d\00\20\01\10\9b\05\20\0f\46\0d\00\20\0c\41\00\3a\00" "\00\20\09\41\7f\6a\21\09\0b\20\0c\41\01\6a\21\0c\20\01\41" "\0c\6a\21\01\0c\00\0b\00\0b\02\40\20\0c\2d\00\00\41\01\47" "\0d\00\20\01\20\0d\10\9c\05\28\02\00\21\11\02\40\20\06\0d" "\00\20\04\20\11\10\9a\05\21\11\0b\02\40\02\40\20\0e\20\11" "\47\0d\00\41\01\21\10\20\01\10\9b\05\20\0f\47\0d\02\20\0c" "\41\02\3a\00\00\41\01\21\10\20\09\41\01\6a\21\09\0c\01\0b" "\20\0c\41\00\3a\00\00\0b\20\08\41\7f\6a\21\08\0b\20\0c\41" "\01\6a\21\0c\20\01\41\0c\6a\21\01\0c\00\0b\00\0b\00\0b\20" "\0c\41\02\41\01\20\01\10\9d\05\22\11\1b\3a\00\00\20\0c\41" "\01\6a\21\0c\20\01\41\0c\6a\21\01\20\09\20\11\6a\21\09\20" "\08\20\11\6b\21\08\0c\00\0b\00\0b\10\91\0d\00\0b\02\40\02" "\40\03\40\20\02\20\03\46\0d\01\02\40\20\0b\2d\00\00\41\02" "\46\0d\00\20\0b\41\01\6a\21\0b\20\02\41\0c\6a\21\02\0c\01" "\0b\0b\20\02\21\03\0c\01\0b\20\05\20\05\28\02\00\41\04\72" "\36\02\00\0b\20\0a\10\e9\04\1a\20\07\41\80\01\6a\24\00\20" "\03\0b\09\00\20\00\20\01\10\f4\0c\0b\11\00\20\00\20\01\20" "\00\28\02\00\28\02\1c\11\01\00\0b\18\00\02\40\20\00\10\ac" "\06\45\0d\00\20\00\10\ad\06\0f\0b\20\00\10\ae\06\0b\0d\00" "\20\00\10\aa\06\20\01\41\02\74\6a\0b\08\00\20\00\10\9b\05" "\45\0b\11\00\20\00\20\01\20\02\20\03\20\04\20\05\10\9f\05" "\0b\ba\03\01\02\7f\23\00\41\d0\02\6b\22\06\24\00\20\06\20" "\02\36\02\c8\02\20\06\20\01\36\02\cc\02\20\03\10\ec\04\21" "\01\20\00\20\03\20\06\41\d0\01\6a\10\a0\05\21\00\20\06\41" "\c4\01\6a\20\03\20\06\41\c4\02\6a\10\a1\05\20\06\41\b8\01" "\6a\10\d3\01\21\03\20\03\20\03\10\e7\01\10\e8\01\20\06\20" "\03\41\00\10\ef\04\22\02\36\02\b4\01\20\06\20\06\41\10\6a" "\36\02\0c\20\06\41\00\36\02\08\02\40\03\40\20\06\41\cc\02" "\6a\20\06\41\c8\02\6a\10\bb\01\0d\01\02\40\20\06\28\02\b4" "\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03\10\e6\01\21\07" "\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20\03\20\03\10\e7" "\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef\04\22\02\6a\36" "\02\b4\01\0b\20\06\41\cc\02\6a\10\bc\01\20\01\20\02\20\06" "\41\b4\01\6a\20\06\41\08\6a\20\06\28\02\c4\02\20\06\41\c4" "\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10\a2\05\0d\01" "\20\06\41\cc\02\6a\10\be\01\1a\0c\00\0b\00\0b\02\40\20\06" "\41\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22\00\20\06" "\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04\6a\36\02" "\0c\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02\20\06\28" "\02\b4\01\20\04\20\01\10\f1\04\36\02\00\20\06\41\c4\01\6a" "\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20\06" "\41\cc\02\6a\20\06\41\c8\02\6a\10\bb\01\45\0d\00\20\04\20" "\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\cc\02\21\02" "\20\03\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20\06\41" "\d0\02\6a\24\00\20\02\0b\0b\00\20\00\20\01\20\02\10\c4\05" "\0b\40\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\41\0c\6a" "\20\01\10\e9\02\20\02\20\03\41\0c\6a\10\95\05\22\01\10\c0" "\05\36\02\00\20\00\20\01\10\c1\05\20\03\41\0c\6a\10\ad\09" "\1a\20\03\41\10\6a\24\00\0b\f5\02\01\02\7f\23\00\41\10\6b" "\22\0a\24\00\20\0a\20\00\36\02\0c\02\40\02\40\02\40\20\03" "\28\02\00\20\02\47\0d\00\41\2b\21\0b\02\40\20\09\28\02\60" "\20\00\46\0d\00\41\2d\21\0b\20\09\28\02\64\20\00\47\0d\01" "\0b\20\03\20\02\41\01\6a\36\02\00\20\02\20\0b\3a\00\00\0c" "\01\0b\02\40\20\06\10\e6\01\45\0d\00\20\00\20\05\47\0d\00" "\41\00\21\00\20\08\28\02\00\22\09\20\07\6b\41\9f\01\4a\0d" "\02\20\04\28\02\00\21\00\20\08\20\09\41\04\6a\36\02\00\20" "\09\20\00\36\02\00\0c\01\0b\41\7f\21\00\20\09\20\09\41\e8" "\00\6a\20\0a\41\0c\6a\10\b7\05\20\09\6b\41\02\75\22\09\41" "\17\4a\0d\01\02\40\02\40\02\40\20\01\41\78\6a\0e\03\00\02" "\00\01\0b\20\09\20\01\48\0d\01\0c\03\0b\20\01\41\10\47\0d" "\00\20\09\41\16\48\0d\00\20\03\28\02\00\22\06\20\02\46\0d" "\02\20\06\20\02\6b\41\02\4a\0d\02\41\7f\21\00\20\06\41\7f" "\6a\2d\00\00\41\30\47\0d\02\41\00\21\00\20\04\41\00\36\02" "\00\20\03\20\06\41\01\6a\36\02\00\20\06\41\90\3d\20\09\6a" "\2d\00\00\3a\00\00\0c\02\0b\20\03\20\03\28\02\00\22\00\41" "\01\6a\36\02\00\20\00\41\90\3d\20\09\6a\2d\00\00\3a\00\00" "\20\04\20\04\28\02\00\41\01\6a\36\02\00\41\00\21\00\0c\01" "\0b\41\00\21\00\20\04\41\00\36\02\00\0b\20\0a\41\10\6a\24" "\00\20\00\0b\11\00\20\00\20\01\20\02\20\03\20\04\20\05\10" "\a4\05\0b\ba\03\01\02\7f\23\00\41\d0\02\6b\22\06\24\00\20" "\06\20\02\36\02\c8\02\20\06\20\01\36\02\cc\02\20\03\10\ec" "\04\21\01\20\00\20\03\20\06\41\d0\01\6a\10\a0\05\21\00\20" "\06\41\c4\01\6a\20\03\20\06\41\c4\02\6a\10\a1\05\20\06\41" "\b8\01\6a\10\d3\01\21\03\20\03\20\03\10\e7\01\10\e8\01\20" "\06\20\03\41\00\10\ef\04\22\02\36\02\b4\01\20\06\20\06\41" "\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03\40\20\06\41" "\cc\02\6a\20\06\41\c8\02\6a\10\bb\01\0d\01\02\40\20\06\28" "\02\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03\10\e6\01" "\21\07\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20\03\20\03" "\10\e7\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef\04\22\02" "\6a\36\02\b4\01\0b\20\06\41\cc\02\6a\10\bc\01\20\01\20\02" "\20\06\41\b4\01\6a\20\06\41\08\6a\20\06\28\02\c4\02\20\06" "\41\c4\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10\a2\05" "\0d\01\20\06\41\cc\02\6a\10\be\01\1a\0c\00\0b\00\0b\02\40" "\20\06\41\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22\00" "\20\06\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04\6a" "\36\02\0c\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02\20" "\06\28\02\b4\01\20\04\20\01\10\f5\04\37\03\00\20\06\41\c4" "\01\6a\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40" "\20\06\41\cc\02\6a\20\06\41\c8\02\6a\10\bb\01\45\0d\00\20" "\04\20\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\cc\02" "\21\02\20\03\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20" "\06\41\d0\02\6a\24\00\20\02\0b\11\00\20\00\20\01\20\02\20" "\03\20\04\20\05\10\a6\05\0b\ba\03\01\02\7f\23\00\41\d0\02" "\6b\22\06\24\00\20\06\20\02\36\02\c8\02\20\06\20\01\36\02" "\cc\02\20\03\10\ec\04\21\01\20\00\20\03\20\06\41\d0\01\6a" "\10\a0\05\21\00\20\06\41\c4\01\6a\20\03\20\06\41\c4\02\6a" "\10\a1\05\20\06\41\b8\01\6a\10\d3\01\21\03\20\03\20\03\10" "\e7\01\10\e8\01\20\06\20\03\41\00\10\ef\04\22\02\36\02\b4" "\01\20\06\20\06\41\10\6a\36\02\0c\20\06\41\00\36\02\08\02" "\40\03\40\20\06\41\cc\02\6a\20\06\41\c8\02\6a\10\bb\01\0d" "\01\02\40\20\06\28\02\b4\01\20\02\20\03\10\e6\01\6a\47\0d" "\00\20\03\10\e6\01\21\07\20\03\20\03\10\e6\01\41\01\74\10" "\e8\01\20\03\20\03\10\e7\01\10\e8\01\20\06\20\07\20\03\41" "\00\10\ef\04\22\02\6a\36\02\b4\01\0b\20\06\41\cc\02\6a\10" "\bc\01\20\01\20\02\20\06\41\b4\01\6a\20\06\41\08\6a\20\06" "\28\02\c4\02\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\41\0c" "\6a\20\00\10\a2\05\0d\01\20\06\41\cc\02\6a\10\be\01\1a\0c" "\00\0b\00\0b\02\40\20\06\41\c4\01\6a\10\e6\01\45\0d\00\20" "\06\28\02\0c\22\00\20\06\41\10\6a\6b\41\9f\01\4a\0d\00\20" "\06\20\00\41\04\6a\36\02\0c\20\00\20\06\28\02\08\36\02\00" "\0b\20\05\20\02\20\06\28\02\b4\01\20\04\20\01\10\f8\04\3b" "\01\00\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\28\02\0c\20" "\04\10\f2\04\02\40\20\06\41\cc\02\6a\20\06\41\c8\02\6a\10" "\bb\01\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b" "\20\06\28\02\cc\02\21\02\20\03\10\99\0d\1a\20\06\41\c4\01" "\6a\10\99\0d\1a\20\06\41\d0\02\6a\24\00\20\02\0b\11\00\20" "\00\20\01\20\02\20\03\20\04\20\05\10\a8\05\0b\ba\03\01\02" "\7f\23\00\41\d0\02\6b\22\06\24\00\20\06\20\02\36\02\c8\02" "\20\06\20\01\36\02\cc\02\20\03\10\ec\04\21\01\20\00\20\03" "\20\06\41\d0\01\6a\10\a0\05\21\00\20\06\41\c4\01\6a\20\03" "\20\06\41\c4\02\6a\10\a1\05\20\06\41\b8\01\6a\10\d3\01\21" "\03\20\03\20\03\10\e7\01\10\e8\01\20\06\20\03\41\00\10\ef" "\04\22\02\36\02\b4\01\20\06\20\06\41\10\6a\36\02\0c\20\06" "\41\00\36\02\08\02\40\03\40\20\06\41\cc\02\6a\20\06\41\c8" "\02\6a\10\bb\01\0d\01\02\40\20\06\28\02\b4\01\20\02\20\03" "\10\e6\01\6a\47\0d\00\20\03\10\e6\01\21\07\20\03\20\03\10" "\e6\01\41\01\74\10\e8\01\20\03\20\03\10\e7\01\10\e8\01\20" "\06\20\07\20\03\41\00\10\ef\04\22\02\6a\36\02\b4\01\0b\20" "\06\41\cc\02\6a\10\bc\01\20\01\20\02\20\06\41\b4\01\6a\20" "\06\41\08\6a\20\06\28\02\c4\02\20\06\41\c4\01\6a\20\06\41" "\10\6a\20\06\41\0c\6a\20\00\10\a2\05\0d\01\20\06\41\cc\02" "\6a\10\be\01\1a\0c\00\0b\00\0b\02\40\20\06\41\c4\01\6a\10" "\e6\01\45\0d\00\20\06\28\02\0c\22\00\20\06\41\10\6a\6b\41" "\9f\01\4a\0d\00\20\06\20\00\41\04\6a\36\02\0c\20\00\20\06" "\28\02\08\36\02\00\0b\20\05\20\02\20\06\28\02\b4\01\20\04" "\20\01\10\fb\04\36\02\00\20\06\41\c4\01\6a\20\06\41\10\6a" "\20\06\28\02\0c\20\04\10\f2\04\02\40\20\06\41\cc\02\6a\20" "\06\41\c8\02\6a\10\bb\01\45\0d\00\20\04\20\04\28\02\00\41" "\02\72\36\02\00\0b\20\06\28\02\cc\02\21\02\20\03\10\99\0d" "\1a\20\06\41\c4\01\6a\10\99\0d\1a\20\06\41\d0\02\6a\24\00" "\20\02\0b\11\00\20\00\20\01\20\02\20\03\20\04\20\05\10\aa" "\05\0b\ba\03\01\02\7f\23\00\41\d0\02\6b\22\06\24\00\20\06" "\20\02\36\02\c8\02\20\06\20\01\36\02\cc\02\20\03\10\ec\04" "\21\01\20\00\20\03\20\06\41\d0\01\6a\10\a0\05\21\00\20\06" "\41\c4\01\6a\20\03\20\06\41\c4\02\6a\10\a1\05\20\06\41\b8" "\01\6a\10\d3\01\21\03\20\03\20\03\10\e7\01\10\e8\01\20\06" "\20\03\41\00\10\ef\04\22\02\36\02\b4\01\20\06\20\06\41\10" "\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03\40\20\06\41\cc" "\02\6a\20\06\41\c8\02\6a\10\bb\01\0d\01\02\40\20\06\28\02" "\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00\20\03\10\e6\01\21" "\07\20\03\20\03\10\e6\01\41\01\74\10\e8\01\20\03\20\03\10" "\e7\01\10\e8\01\20\06\20\07\20\03\41\00\10\ef\04\22\02\6a" "\36\02\b4\01\0b\20\06\41\cc\02\6a\10\bc\01\20\01\20\02\20" "\06\41\b4\01\6a\20\06\41\08\6a\20\06\28\02\c4\02\20\06\41" "\c4\01\6a\20\06\41\10\6a\20\06\41\0c\6a\20\00\10\a2\05\0d" "\01\20\06\41\cc\02\6a\10\be\01\1a\0c\00\0b\00\0b\02\40\20" "\06\41\c4\01\6a\10\e6\01\45\0d\00\20\06\28\02\0c\22\00\20" "\06\41\10\6a\6b\41\9f\01\4a\0d\00\20\06\20\00\41\04\6a\36" "\02\0c\20\00\20\06\28\02\08\36\02\00\0b\20\05\20\02\20\06" "\28\02\b4\01\20\04\20\01\10\fe\04\36\02\00\20\06\41\c4\01" "\6a\20\06\41\10\6a\20\06\28\02\0c\20\04\10\f2\04\02\40\20" "\06\41\cc\02\6a\20\06\41\c8\02\6a\10\bb\01\45\0d\00\20\04" "\20\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\cc\02\21" "\02\20\03\10\99\0d\1a\20\06\41\c4\01\6a\10\99\0d\1a\20\06" "\41\d0\02\6a\24\00\20\02\0b\11\00\20\00\20\01\20\02\20\03" "\20\04\20\05\10\ac\05\0b\ba\03\01\02\7f\23\00\41\d0\02\6b" "\22\06\24\00\20\06\20\02\36\02\c8\02\20\06\20\01\36\02\cc" "\02\20\03\10\ec\04\21\01\20\00\20\03\20\06\41\d0\01\6a\10" "\a0\05\21\00\20\06\41\c4\01\6a\20\03\20\06\41\c4\02\6a\10" "\a1\05\20\06\41\b8\01\6a\10\d3\01\21\03\20\03\20\03\10\e7" "\01\10\e8\01\20\06\20\03\41\00\10\ef\04\22\02\36\02\b4\01" "\20\06\20\06\41\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40" "\03\40\20\06\41\cc\02\6a\20\06\41\c8\02\6a\10\bb\01\0d\01" "\02\40\20\06\28\02\b4\01\20\02\20\03\10\e6\01\6a\47\0d\00" "\20\03\10\e6\01\21\07\20\03\20\03\10\e6\01\41\01\74\10\e8" "\01\20\03\20\03\10\e7\01\10\e8\01\20\06\20\07\20\03\41\00" "\10\ef\04\22\02\6a\36\02\b4\01\0b\20\06\41\cc\02\6a\10\bc" "\01\20\01\20\02\20\06\41\b4\01\6a\20\06\41\08\6a\20\06\28" "\02\c4\02\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\41\0c\6a" "\20\00\10\a2\05\0d\01\20\06\41\cc\02\6a\10\be\01\1a\0c\00" "\0b\00\0b\02\40\20\06\41\c4\01\6a\10\e6\01\45\0d\00\20\06" "\28\02\0c\22\00\20\06\41\10\6a\6b\41\9f\01\4a\0d\00\20\06" "\20\00\41\04\6a\36\02\0c\20\00\20\06\28\02\08\36\02\00\0b" "\20\05\20\02\20\06\28\02\b4\01\20\04\20\01\10\81\05\37\03" "\00\20\06\41\c4\01\6a\20\06\41\10\6a\20\06\28\02\0c\20\04" "\10\f2\04\02\40\20\06\41\cc\02\6a\20\06\41\c8\02\6a\10\bb" "\01\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b\20" "\06\28\02\cc\02\21\02\20\03\10\99\0d\1a\20\06\41\c4\01\6a" "\10\99\0d\1a\20\06\41\d0\02\6a\24\00\20\02\0b\11\00\20\00" "\20\01\20\02\20\03\20\04\20\05\10\ae\05\0b\db\03\01\01\7f" "\23\00\41\f0\02\6b\22\06\24\00\20\06\20\02\36\02\e8\02\20" "\06\20\01\36\02\ec\02\20\06\41\cc\01\6a\20\03\20\06\41\e0" "\01\6a\20\06\41\dc\01\6a\20\06\41\d8\01\6a\10\af\05\20\06" "\41\c0\01\6a\10\d3\01\21\02\20\02\20\02\10\e7\01\10\e8\01" "\20\06\20\02\41\00\10\ef\04\22\01\36\02\bc\01\20\06\20\06" "\41\10\6a\36\02\0c\20\06\41\00\36\02\08\20\06\41\01\3a\00" "\07\20\06\41\c5\00\3a\00\06\02\40\03\40\20\06\41\ec\02\6a" "\20\06\41\e8\02\6a\10\bb\01\0d\01\02\40\20\06\28\02\bc\01" "\20\01\20\02\10\e6\01\6a\47\0d\00\20\02\10\e6\01\21\03\20" "\02\20\02\10\e6\01\41\01\74\10\e8\01\20\02\20\02\10\e7\01" "\10\e8\01\20\06\20\03\20\02\41\00\10\ef\04\22\01\6a\36\02" "\bc\01\0b\20\06\41\ec\02\6a\10\bc\01\20\06\41\07\6a\20\06" "\41\06\6a\20\01\20\06\41\bc\01\6a\20\06\28\02\dc\01\20\06" "\28\02\d8\01\20\06\41\cc\01\6a\20\06\41\10\6a\20\06\41\0c" "\6a\20\06\41\08\6a\20\06\41\e0\01\6a\10\b0\05\0d\01\20\06" "\41\ec\02\6a\10\be\01\1a\0c\00\0b\00\0b\02\40\20\06\41\cc" "\01\6a\10\e6\01\45\0d\00\20\06\2d\00\07\41\ff\01\71\45\0d" "\00\20\06\28\02\0c\22\03\20\06\41\10\6a\6b\41\9f\01\4a\0d" "\00\20\06\20\03\41\04\6a\36\02\0c\20\03\20\06\28\02\08\36" "\02\00\0b\20\05\20\01\20\06\28\02\bc\01\20\04\10\86\05\38" "\02\00\20\06\41\cc\01\6a\20\06\41\10\6a\20\06\28\02\0c\20" "\04\10\f2\04\02\40\20\06\41\ec\02\6a\20\06\41\e8\02\6a\10" "\bb\01\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b" "\20\06\28\02\ec\02\21\01\20\02\10\99\0d\1a\20\06\41\cc\01" "\6a\10\99\0d\1a\20\06\41\f0\02\6a\24\00\20\01\0b\61\01\01" "\7f\23\00\41\10\6b\22\05\24\00\20\05\41\0c\6a\20\01\10\e9" "\02\20\05\41\0c\6a\10\ba\01\41\90\3d\41\90\3d\41\20\6a\20" "\02\10\b6\05\1a\20\03\20\05\41\0c\6a\10\95\05\22\01\10\bf" "\05\36\02\00\20\04\20\01\10\c0\05\36\02\00\20\00\20\01\10" "\c1\05\20\05\41\0c\6a\10\ad\09\1a\20\05\41\10\6a\24\00\0b" "\fd\03\01\01\7f\23\00\41\10\6b\22\0c\24\00\20\0c\20\00\36" "\02\0c\02\40\02\40\02\40\20\00\20\05\47\0d\00\20\01\2d\00" "\00\45\0d\01\41\00\21\00\20\01\41\00\3a\00\00\20\04\20\04" "\28\02\00\22\0b\41\01\6a\36\02\00\20\0b\41\2e\3a\00\00\20" "\07\10\e6\01\45\0d\02\20\09\28\02\00\22\0b\20\08\6b\41\9f" "\01\4a\0d\02\20\0a\28\02\00\21\01\20\09\20\0b\41\04\6a\36" "\02\00\20\0b\20\01\36\02\00\0c\02\0b\02\40\20\00\20\06\47" "\0d\00\20\07\10\e6\01\45\0d\00\20\01\2d\00\00\45\0d\01\41" "\00\21\00\20\09\28\02\00\22\0b\20\08\6b\41\9f\01\4a\0d\02" "\20\0a\28\02\00\21\00\20\09\20\0b\41\04\6a\36\02\00\20\0b" "\20\00\36\02\00\41\00\21\00\20\0a\41\00\36\02\00\0c\02\0b" "\41\7f\21\00\20\0b\20\0b\41\80\01\6a\20\0c\41\0c\6a\10\c2" "\05\20\0b\6b\22\05\41\02\75\22\0b\41\1f\4a\0d\01\41\90\3d" "\20\0b\6a\2c\00\00\21\06\02\40\02\40\02\40\20\05\41\7b\71" "\22\00\41\d8\00\46\0d\00\20\00\41\e0\00\47\0d\01\02\40\20" "\04\28\02\00\22\0b\20\03\46\0d\00\41\7f\21\00\20\0b\41\7f" "\6a\2c\00\00\10\82\04\20\02\2c\00\00\10\82\04\47\0d\05\0b" "\20\04\20\0b\41\01\6a\36\02\00\20\0b\20\06\3a\00\00\41\00" "\21\00\0c\04\0b\20\02\41\d0\00\3a\00\00\0c\01\0b\20\06\10" "\82\04\22\00\20\02\2c\00\00\47\0d\00\20\02\20\00\10\83\04" "\3a\00\00\20\01\2d\00\00\45\0d\00\20\01\41\00\3a\00\00\20" "\07\10\e6\01\45\0d\00\20\09\28\02\00\22\00\20\08\6b\41\9f" "\01\4a\0d\00\20\0a\28\02\00\21\01\20\09\20\00\41\04\6a\36" "\02\00\20\00\20\01\36\02\00\0b\20\04\20\04\28\02\00\22\00" "\41\01\6a\36\02\00\20\00\20\06\3a\00\00\41\00\21\00\20\0b" "\41\15\4a\0d\01\20\0a\20\0a\28\02\00\41\01\6a\36\02\00\0c" "\01\0b\41\7f\21\00\0b\20\0c\41\10\6a\24\00\20\00\0b\11\00" "\20\00\20\01\20\02\20\03\20\04\20\05\10\b2\05\0b\db\03\01" "\01\7f\23\00\41\f0\02\6b\22\06\24\00\20\06\20\02\36\02\e8" "\02\20\06\20\01\36\02\ec\02\20\06\41\cc\01\6a\20\03\20\06" "\41\e0\01\6a\20\06\41\dc\01\6a\20\06\41\d8\01\6a\10\af\05" "\20\06\41\c0\01\6a\10\d3\01\21\02\20\02\20\02\10\e7\01\10" "\e8\01\20\06\20\02\41\00\10\ef\04\22\01\36\02\bc\01\20\06" "\20\06\41\10\6a\36\02\0c\20\06\41\00\36\02\08\20\06\41\01" "\3a\00\07\20\06\41\c5\00\3a\00\06\02\40\03\40\20\06\41\ec" "\02\6a\20\06\41\e8\02\6a\10\bb\01\0d\01\02\40\20\06\28\02" "\bc\01\20\01\20\02\10\e6\01\6a\47\0d\00\20\02\10\e6\01\21" "\03\20\02\20\02\10\e6\01\41\01\74\10\e8\01\20\02\20\02\10" "\e7\01\10\e8\01\20\06\20\03\20\02\41\00\10\ef\04\22\01\6a" "\36\02\bc\01\0b\20\06\41\ec\02\6a\10\bc\01\20\06\41\07\6a" "\20\06\41\06\6a\20\01\20\06\41\bc\01\6a\20\06\28\02\dc\01" "\20\06\28\02\d8\01\20\06\41\cc\01\6a\20\06\41\10\6a\20\06" "\41\0c\6a\20\06\41\08\6a\20\06\41\e0\01\6a\10\b0\05\0d\01" "\20\06\41\ec\02\6a\10\be\01\1a\0c\00\0b\00\0b\02\40\20\06" "\41\cc\01\6a\10\e6\01\45\0d\00\20\06\2d\00\07\41\ff\01\71" "\45\0d\00\20\06\28\02\0c\22\03\20\06\41\10\6a\6b\41\9f\01" "\4a\0d\00\20\06\20\03\41\04\6a\36\02\0c\20\03\20\06\28\02" "\08\36\02\00\0b\20\05\20\01\20\06\28\02\bc\01\20\04\10\89" "\05\39\03\00\20\06\41\cc\01\6a\20\06\41\10\6a\20\06\28\02" "\0c\20\04\10\f2\04\02\40\20\06\41\ec\02\6a\20\06\41\e8\02" "\6a\10\bb\01\45\0d\00\20\04\20\04\28\02\00\41\02\72\36\02" "\00\0b\20\06\28\02\ec\02\21\01\20\02\10\99\0d\1a\20\06\41" "\cc\01\6a\10\99\0d\1a\20\06\41\f0\02\6a\24\00\20\01\0b\11" "\00\20\00\20\01\20\02\20\03\20\04\20\05\10\b4\05\0b\f5\03" "\02\01\7f\01\7e\23\00\41\80\03\6b\22\06\24\00\20\06\20\02" "\36\02\f8\02\20\06\20\01\36\02\fc\02\20\06\41\dc\01\6a\20" "\03\20\06\41\f0\01\6a\20\06\41\ec\01\6a\20\06\41\e8\01\6a" "\10\af\05\20\06\41\d0\01\6a\10\d3\01\21\02\20\02\20\02\10" "\e7\01\10\e8\01\20\06\20\02\41\00\10\ef\04\22\01\36\02\cc" "\01\20\06\20\06\41\20\6a\36\02\1c\20\06\41\00\36\02\18\20" "\06\41\01\3a\00\17\20\06\41\c5\00\3a\00\16\02\40\03\40\20" "\06\41\fc\02\6a\20\06\41\f8\02\6a\10\bb\01\0d\01\02\40\20" "\06\28\02\cc\01\20\01\20\02\10\e6\01\6a\47\0d\00\20\02\10" "\e6\01\21\03\20\02\20\02\10\e6\01\41\01\74\10\e8\01\20\02" "\20\02\10\e7\01\10\e8\01\20\06\20\03\20\02\41\00\10\ef\04" "\22\01\6a\36\02\cc\01\0b\20\06\41\fc\02\6a\10\bc\01\20\06" "\41\17\6a\20\06\41\16\6a\20\01\20\06\41\cc\01\6a\20\06\28" "\02\ec\01\20\06\28\02\e8\01\20\06\41\dc\01\6a\20\06\41\20" "\6a\20\06\41\1c\6a\20\06\41\18\6a\20\06\41\f0\01\6a\10\b0" "\05\0d\01\20\06\41\fc\02\6a\10\be\01\1a\0c\00\0b\00\0b\02" "\40\20\06\41\dc\01\6a\10\e6\01\45\0d\00\20\06\2d\00\17\41" "\ff\01\71\45\0d\00\20\06\28\02\1c\22\03\20\06\41\20\6a\6b" "\41\9f\01\4a\0d\00\20\06\20\03\41\04\6a\36\02\1c\20\03\20" "\06\28\02\18\36\02\00\0b\20\06\20\01\20\06\28\02\cc\01\20" "\04\10\8c\05\20\06\29\03\00\21\07\20\05\20\06\41\08\6a\29" "\03\00\37\03\08\20\05\20\07\37\03\00\20\06\41\dc\01\6a\20" "\06\41\20\6a\20\06\28\02\1c\20\04\10\f2\04\02\40\20\06\41" "\fc\02\6a\20\06\41\f8\02\6a\10\bb\01\45\0d\00\20\04\20\04" "\28\02\00\41\02\72\36\02\00\0b\20\06\28\02\fc\02\21\01\20" "\02\10\99\0d\1a\20\06\41\dc\01\6a\10\99\0d\1a\20\06\41\80" "\03\6a\24\00\20\01\0b\a1\03\01\02\7f\23\00\41\c0\02\6b\22" "\06\24\00\20\06\20\02\36\02\b8\02\20\06\20\01\36\02\bc\02" "\20\06\41\c4\01\6a\10\d3\01\21\07\20\06\41\10\6a\20\03\10" "\e9\02\20\06\41\10\6a\10\ba\01\41\90\3d\41\90\3d\41\1a\6a" "\20\06\41\d0\01\6a\10\b6\05\1a\20\06\41\10\6a\10\ad\09\1a" "\20\06\41\b8\01\6a\10\d3\01\21\02\20\02\20\02\10\e7\01\10" "\e8\01\20\06\20\02\41\00\10\ef\04\22\01\36\02\b4\01\20\06" "\20\06\41\10\6a\36\02\0c\20\06\41\00\36\02\08\02\40\03\40" "\20\06\41\bc\02\6a\20\06\41\b8\02\6a\10\bb\01\0d\01\02\40" "\20\06\28\02\b4\01\20\01\20\02\10\e6\01\6a\47\0d\00\20\02" "\10\e6\01\21\03\20\02\20\02\10\e6\01\41\01\74\10\e8\01\20" "\02\20\02\10\e7\01\10\e8\01\20\06\20\03\20\02\41\00\10\ef" "\04\22\01\6a\36\02\b4\01\0b\20\06\41\bc\02\6a\10\bc\01\41" "\10\20\01\20\06\41\b4\01\6a\20\06\41\08\6a\41\00\20\07\20" "\06\41\10\6a\20\06\41\0c\6a\20\06\41\d0\01\6a\10\a2\05\0d" "\01\20\06\41\bc\02\6a\10\be\01\1a\0c\00\0b\00\0b\20\02\20" "\06\28\02\b4\01\20\01\6b\10\e8\01\20\02\10\ed\01\21\01\10" "\8f\05\21\03\20\06\20\05\36\02\00\02\40\20\01\20\03\41\a7" "\0a\20\06\10\90\05\41\01\46\0d\00\20\04\41\04\36\02\00\0b" "\02\40\20\06\41\bc\02\6a\20\06\41\b8\02\6a\10\bb\01\45\0d" "\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b\20\06\28\02" "\bc\02\21\01\20\02\10\99\0d\1a\20\07\10\99\0d\1a\20\06\41" "\c0\02\6a\24\00\20\01\0b\15\00\20\00\20\01\20\02\20\03\20" "\00\28\02\00\28\02\30\11\0a\00\0b\31\01\01\7f\23\00\41\10" "\6b\22\03\24\00\20\00\20\00\10\a1\02\20\01\10\a1\02\20\02" "\20\03\41\0f\6a\10\c5\05\10\a9\02\21\00\20\03\41\10\6a\24" "\00\20\00\0b\0f\00\20\00\20\00\28\02\00\28\02\0c\11\00\00" "\0b\0f\00\20\00\20\00\28\02\00\28\02\10\11\00\00\0b\11\00" "\20\00\20\01\20\01\28\02\00\28\02\14\11\02\00\0b\31\01\01" "\7f\23\00\41\10\6b\22\03\24\00\20\00\20\00\10\fd\01\20\01" "\10\fd\01\20\02\20\03\41\0f\6a\10\bc\05\10\80\02\21\00\20" "\03\41\10\6a\24\00\20\00\0b\18\00\20\00\20\02\2c\00\00\20" "\01\20\00\6b\10\86\0b\22\00\20\01\20\00\1b\0b\05\00\41\90" "\3d\0b\18\00\20\00\20\02\2c\00\00\20\01\20\00\6b\10\87\0b" "\22\00\20\01\20\00\1b\0b\0f\00\20\00\20\00\28\02\00\28\02" "\0c\11\00\00\0b\0f\00\20\00\20\00\28\02\00\28\02\10\11\00" "\00\0b\11\00\20\00\20\01\20\01\28\02\00\28\02\14\11\02\00" "\0b\31\01\01\7f\23\00\41\10\6b\22\03\24\00\20\00\20\00\10" "\96\02\20\01\10\96\02\20\02\20\03\41\0f\6a\10\c3\05\10\99" "\02\21\00\20\03\41\10\6a\24\00\20\00\0b\1b\00\20\00\20\02" "\28\02\00\20\01\20\00\6b\41\02\75\10\88\0b\22\00\20\01\20" "\00\1b\0b\40\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\41" "\0c\6a\20\01\10\e9\02\20\03\41\0c\6a\10\ba\01\41\90\3d\41" "\90\3d\41\1a\6a\20\02\10\b6\05\1a\20\03\41\0c\6a\10\ad\09" "\1a\20\03\41\10\6a\24\00\20\02\0b\1b\00\20\00\20\02\28\02" "\00\20\01\20\00\6b\41\02\75\10\89\0b\22\00\20\01\20\00\1b" "\0b\f4\01\01\01\7f\23\00\41\20\6b\22\05\24\00\20\05\20\01" "\36\02\1c\02\40\02\40\20\02\10\75\41\01\71\0d\00\20\00\20" "\01\20\02\20\03\20\04\20\00\28\02\00\28\02\18\11\09\00\21" "\02\0c\01\0b\20\05\41\10\6a\20\02\10\e9\02\20\05\41\10\6a" "\10\de\04\21\02\20\05\41\10\6a\10\ad\09\1a\02\40\02\40\20" "\04\45\0d\00\20\05\41\10\6a\20\02\10\df\04\0c\01\0b\20\05" "\41\10\6a\20\02\10\e0\04\0b\20\05\20\05\41\10\6a\10\c7\05" "\36\02\0c\03\40\20\05\20\05\41\10\6a\10\c8\05\36\02\08\02" "\40\20\05\41\0c\6a\20\05\41\08\6a\10\c9\05\0d\00\20\05\28" "\02\1c\21\02\20\05\41\10\6a\10\99\0d\1a\0c\02\0b\20\05\41" "\0c\6a\10\ca\05\2c\00\00\21\02\20\05\41\1c\6a\10\97\01\20" "\02\10\98\01\1a\20\05\41\0c\6a\10\cb\05\1a\20\05\41\1c\6a" "\10\99\01\1a\0c\00\0b\00\0b\20\05\41\20\6a\24\00\20\02\0b" "\0c\00\20\00\20\00\10\d9\01\10\cc\05\0b\12\00\20\00\20\00" "\10\d9\01\20\00\10\e6\01\6a\10\cc\05\0b\0c\00\20\00\20\01" "\10\cd\05\41\01\73\0b\07\00\20\00\28\02\00\0b\11\00\20\00" "\20\00\28\02\00\41\01\6a\36\02\00\20\00\0b\25\01\01\7f\23" "\00\41\10\6b\22\02\24\00\20\02\41\0c\6a\20\01\10\8a\0b\28" "\02\00\21\01\20\02\41\10\6a\24\00\20\01\0b\0d\00\20\00\10" "\b7\07\20\01\10\b7\07\46\0b\12\00\20\00\20\01\20\02\20\03" "\20\04\41\e3\0a\10\cf\05\0b\c3\01\01\01\7f\23\00\41\c0\00" "\6b\22\06\24\00\20\06\41\3c\6a\41\00\36\00\00\20\06\41\00" "\36\00\39\20\06\41\25\3a\00\38\20\06\41\38\6a\41\01\6a\20" "\05\41\01\20\02\10\75\10\d0\05\10\8f\05\21\05\20\06\20\04" "\36\02\00\20\06\41\2b\6a\20\06\41\2b\6a\20\06\41\2b\6a\41" "\0d\20\05\20\06\41\38\6a\20\06\10\d1\05\6a\22\05\20\02\10" "\d2\05\21\04\20\06\41\04\6a\20\02\10\e9\02\20\06\41\2b\6a" "\20\04\20\05\20\06\41\10\6a\20\06\41\0c\6a\20\06\41\08\6a" "\20\06\41\04\6a\10\d3\05\20\06\41\04\6a\10\ad\09\1a\20\01" "\20\06\41\10\6a\20\06\28\02\0c\20\06\28\02\08\20\02\20\03" "\10\d4\05\21\02\20\06\41\c0\00\6a\24\00\20\02\0b\c3\01\01" "\01\7f\02\40\20\03\41\80\10\71\45\0d\00\20\03\41\ca\00\71" "\22\04\41\08\46\0d\00\20\04\41\c0\00\46\0d\00\20\02\45\0d" "\00\20\00\41\2b\3a\00\00\20\00\41\01\6a\21\00\0b\02\40\20" "\03\41\80\04\71\45\0d\00\20\00\41\23\3a\00\00\20\00\41\01" "\6a\21\00\0b\02\40\03\40\20\01\2d\00\00\22\04\45\0d\01\20" "\00\20\04\3a\00\00\20\00\41\01\6a\21\00\20\01\41\01\6a\21" "\01\0c\00\0b\00\0b\02\40\02\40\20\03\41\ca\00\71\22\01\41" "\c0\00\47\0d\00\41\ef\00\21\01\0c\01\0b\02\40\20\01\41\08" "\47\0d\00\41\d8\00\41\f8\00\20\03\41\80\80\01\71\1b\21\01" "\0c\01\0b\41\e4\00\41\f5\00\20\02\1b\21\01\0b\20\00\20\01" "\3a\00\00\0b\49\01\01\7f\23\00\41\10\6b\22\05\24\00\20\05" "\20\02\36\02\0c\20\05\20\04\36\02\08\20\05\41\04\6a\20\05" "\41\0c\6a\10\92\05\21\04\20\00\20\01\20\03\20\05\28\02\08" "\10\93\04\21\02\20\04\10\93\05\1a\20\05\41\10\6a\24\00\20" "\02\0b\65\00\02\40\20\02\10\75\41\b0\01\71\22\02\41\20\47" "\0d\00\20\01\0f\0b\02\40\20\02\41\10\47\0d\00\02\40\02\40" "\20\00\2d\00\00\22\02\41\55\6a\0e\03\00\01\00\01\0b\20\00" "\41\01\6a\0f\0b\20\01\20\00\6b\41\02\48\0d\00\20\02\41\30" "\47\0d\00\20\00\2d\00\01\41\20\72\41\f8\00\47\0d\00\20\00" "\41\02\6a\21\00\0b\20\00\0b\ef\03\01\08\7f\23\00\41\10\6b" "\22\07\24\00\20\06\10\76\21\08\20\07\41\04\6a\20\06\10\de" "\04\22\06\10\ba\05\02\40\02\40\20\07\41\04\6a\10\e8\04\45" "\0d\00\20\08\20\00\20\02\20\03\10\8e\05\1a\20\05\20\03\20" "\02\20\00\6b\6a\22\06\36\02\00\0c\01\0b\20\05\20\03\36\02" "\00\20\00\21\09\02\40\02\40\20\00\2d\00\00\22\0a\41\55\6a" "\0e\03\00\01\00\01\0b\20\08\20\0a\c0\10\e1\02\21\0a\20\05" "\20\05\28\02\00\22\0b\41\01\6a\36\02\00\20\0b\20\0a\3a\00" "\00\20\00\41\01\6a\21\09\0b\02\40\20\02\20\09\6b\41\02\48" "\0d\00\20\09\2d\00\00\41\30\47\0d\00\20\09\2d\00\01\41\20" "\72\41\f8\00\47\0d\00\20\08\41\30\10\e1\02\21\0a\20\05\20" "\05\28\02\00\22\0b\41\01\6a\36\02\00\20\0b\20\0a\3a\00\00" "\20\08\20\09\2c\00\01\10\e1\02\21\0a\20\05\20\05\28\02\00" "\22\0b\41\01\6a\36\02\00\20\0b\20\0a\3a\00\00\20\09\41\02" "\6a\21\09\0b\20\09\20\02\10\88\06\41\00\21\0a\20\06\10\b9" "\05\21\0c\41\00\21\0b\20\09\21\06\03\40\02\40\20\06\20\02" "\49\0d\00\20\03\20\09\20\00\6b\6a\20\05\28\02\00\10\88\06" "\20\05\28\02\00\21\06\0c\02\0b\02\40\20\07\41\04\6a\20\0b" "\10\ef\04\2d\00\00\45\0d\00\20\0a\20\07\41\04\6a\20\0b\10" "\ef\04\2c\00\00\47\0d\00\20\05\20\05\28\02\00\22\0a\41\01" "\6a\36\02\00\20\0a\20\0c\3a\00\00\20\0b\20\0b\20\07\41\04" "\6a\10\e6\01\41\7f\6a\49\6a\21\0b\41\00\21\0a\0b\20\08\20" "\06\2c\00\00\10\e1\02\21\0d\20\05\20\05\28\02\00\22\0e\41" "\01\6a\36\02\00\20\0e\20\0d\3a\00\00\20\06\41\01\6a\21\06" "\20\0a\41\01\6a\21\0a\0c\00\0b\00\0b\20\04\20\06\20\03\20" "\01\20\00\6b\6a\20\01\20\02\46\1b\36\02\00\20\07\41\04\6a" "\10\99\0d\1a\20\07\41\10\6a\24\00\0b\c2\01\01\04\7f\23\00" "\41\10\6b\22\06\24\00\02\40\02\40\20\00\0d\00\41\00\21\07" "\0c\01\0b\20\04\10\e7\05\21\08\41\00\21\07\02\40\20\02\20" "\01\6b\22\09\41\01\48\0d\00\20\00\20\01\20\09\10\9a\01\20" "\09\47\0d\01\0b\02\40\20\08\20\03\20\01\6b\22\07\6b\41\00" "\20\08\20\07\4a\1b\22\01\41\01\48\0d\00\20\00\20\06\41\04" "\6a\20\01\20\05\10\e8\05\22\07\10\d6\01\20\01\10\9a\01\21" "\08\20\07\10\99\0d\1a\41\00\21\07\20\08\20\01\47\0d\01\0b" "\02\40\20\03\20\02\6b\22\01\41\01\48\0d\00\41\00\21\07\20" "\00\20\02\20\01\10\9a\01\20\01\47\0d\01\0b\20\04\41\00\10" "\e9\05\1a\20\00\21\07\0b\20\06\41\10\6a\24\00\20\07\0b\12" "\00\20\00\20\01\20\02\20\03\20\04\41\dc\0a\10\d6\05\0b\ca" "\01\01\02\7f\23\00\41\f0\00\6b\22\06\24\00\20\06\41\ec\00" "\6a\41\00\36\00\00\20\06\41\00\36\00\69\20\06\41\25\3a\00" "\68\20\06\41\e8\00\6a\41\01\6a\20\05\41\01\20\02\10\75\10" "\d0\05\10\8f\05\21\05\20\06\20\04\37\03\00\20\06\41\d0\00" "\6a\20\06\41\d0\00\6a\20\06\41\d0\00\6a\41\18\20\05\20\06" "\41\e8\00\6a\20\06\10\d1\05\6a\22\05\20\02\10\d2\05\21\07" "\20\06\41\14\6a\20\02\10\e9\02\20\06\41\d0\00\6a\20\07\20" "\05\20\06\41\20\6a\20\06\41\1c\6a\20\06\41\18\6a\20\06\41" "\14\6a\10\d3\05\20\06\41\14\6a\10\ad\09\1a\20\01\20\06\41" "\20\6a\20\06\28\02\1c\20\06\28\02\18\20\02\20\03\10\d4\05" "\21\02\20\06\41\f0\00\6a\24\00\20\02\0b\12\00\20\00\20\01" "\20\02\20\03\20\04\41\e3\0a\10\d8\05\0b\c0\01\01\01\7f\23" "\00\41\c0\00\6b\22\06\24\00\20\06\41\3c\6a\41\00\36\00\00" "\20\06\41\00\36\00\39\20\06\41\25\3a\00\38\20\06\41\39\6a" "\20\05\41\00\20\02\10\75\10\d0\05\10\8f\05\21\05\20\06\20" "\04\36\02\00\20\06\41\2b\6a\20\06\41\2b\6a\20\06\41\2b\6a" "\41\0d\20\05\20\06\41\38\6a\20\06\10\d1\05\6a\22\05\20\02" "\10\d2\05\21\04\20\06\41\04\6a\20\02\10\e9\02\20\06\41\2b" "\6a\20\04\20\05\20\06\41\10\6a\20\06\41\0c\6a\20\06\41\08" "\6a\20\06\41\04\6a\10\d3\05\20\06\41\04\6a\10\ad\09\1a\20" "\01\20\06\41\10\6a\20\06\28\02\0c\20\06\28\02\08\20\02\20" "\03\10\d4\05\21\02\20\06\41\c0\00\6a\24\00\20\02\0b\12\00" "\20\00\20\01\20\02\20\03\20\04\41\dc\0a\10\da\05\0b\c7\01" "\01\02\7f\23\00\41\f0\00\6b\22\06\24\00\20\06\41\ec\00\6a" "\41\00\36\00\00\20\06\41\00\36\00\69\20\06\41\25\3a\00\68" "\20\06\41\e9\00\6a\20\05\41\00\20\02\10\75\10\d0\05\10\8f" "\05\21\05\20\06\20\04\37\03\00\20\06\41\d0\00\6a\20\06\41" "\d0\00\6a\20\06\41\d0\00\6a\41\18\20\05\20\06\41\e8\00\6a" "\20\06\10\d1\05\6a\22\05\20\02\10\d2\05\21\07\20\06\41\14" "\6a\20\02\10\e9\02\20\06\41\d0\00\6a\20\07\20\05\20\06\41" "\20\6a\20\06\41\1c\6a\20\06\41\18\6a\20\06\41\14\6a\10\d3" "\05\20\06\41\14\6a\10\ad\09\1a\20\01\20\06\41\20\6a\20\06" "\28\02\1c\20\06\28\02\18\20\02\20\03\10\d4\05\21\02\20\06" "\41\f0\00\6a\24\00\20\02\0b\12\00\20\00\20\01\20\02\20\03" "\20\04\41\85\0d\10\dc\05\0b\95\04\01\06\7f\23\00\41\d0\01" "\6b\22\06\24\00\20\06\41\cc\01\6a\41\00\36\00\00\20\06\41" "\00\36\00\c9\01\20\06\41\25\3a\00\c8\01\20\06\41\c9\01\6a" "\20\05\20\02\10\75\10\dd\05\21\07\20\06\20\06\41\a0\01\6a" "\36\02\9c\01\10\8f\05\21\05\02\40\02\40\20\07\45\0d\00\20" "\02\10\de\05\21\08\20\06\20\04\39\03\28\20\06\20\08\36\02" "\20\20\06\41\a0\01\6a\41\1e\20\05\20\06\41\c8\01\6a\20\06" "\41\20\6a\10\d1\05\21\05\0c\01\0b\20\06\20\04\39\03\30\20" "\06\41\a0\01\6a\41\1e\20\05\20\06\41\c8\01\6a\20\06\41\30" "\6a\10\d1\05\21\05\0b\20\06\41\d6\00\36\02\50\20\06\41\94" "\01\6a\41\00\20\06\41\d0\00\6a\10\df\05\21\09\20\06\41\a0" "\01\6a\22\0a\21\08\02\40\02\40\20\05\41\1e\48\0d\00\10\8f" "\05\21\05\02\40\02\40\20\07\45\0d\00\20\02\10\de\05\21\08" "\20\06\20\04\39\03\08\20\06\20\08\36\02\00\20\06\41\9c\01" "\6a\20\05\20\06\41\c8\01\6a\20\06\10\e0\05\21\05\0c\01\0b" "\20\06\20\04\39\03\10\20\06\41\9c\01\6a\20\05\20\06\41\c8" "\01\6a\20\06\41\10\6a\10\e0\05\21\05\0b\20\05\41\7f\46\0d" "\01\20\09\20\06\28\02\9c\01\10\e1\05\20\06\28\02\9c\01\21" "\08\0b\20\08\20\08\20\05\6a\22\07\20\02\10\d2\05\21\0b\20" "\06\41\d6\00\36\02\50\20\06\41\c8\00\6a\41\00\20\06\41\d0" "\00\6a\10\df\05\21\08\02\40\02\40\20\06\28\02\9c\01\20\06" "\41\a0\01\6a\47\0d\00\20\06\41\d0\00\6a\21\05\0c\01\0b\20" "\05\41\01\74\10\2b\22\05\45\0d\01\20\08\20\05\10\e1\05\20" "\06\28\02\9c\01\21\0a\0b\20\06\41\3c\6a\20\02\10\e9\02\20" "\0a\20\0b\20\07\20\05\20\06\41\c4\00\6a\20\06\41\c0\00\6a" "\20\06\41\3c\6a\10\e2\05\20\06\41\3c\6a\10\ad\09\1a\20\01" "\20\05\20\06\28\02\44\20\06\28\02\40\20\02\20\03\10\d4\05" "\21\02\20\08\10\e3\05\1a\20\09\10\e3\05\1a\20\06\41\d0\01" "\6a\24\00\20\02\0f\0b\10\91\0d\00\0b\ec\01\01\02\7f\02\40" "\20\02\41\80\10\71\45\0d\00\20\00\41\2b\3a\00\00\20\00\41" "\01\6a\21\00\0b\02\40\20\02\41\80\08\71\45\0d\00\20\00\41" "\23\3a\00\00\20\00\41\01\6a\21\00\0b\02\40\20\02\41\84\02" "\71\22\03\41\84\02\46\0d\00\20\00\41\ae\d4\00\3b\00\00\20" "\00\41\02\6a\21\00\0b\20\02\41\80\80\01\71\21\04\02\40\03" "\40\20\01\2d\00\00\22\02\45\0d\01\20\00\20\02\3a\00\00\20" "\00\41\01\6a\21\00\20\01\41\01\6a\21\01\0c\00\0b\00\0b\02" "\40\02\40\02\40\20\03\41\80\02\46\0d\00\20\03\41\04\47\0d" "\01\41\c6\00\41\e6\00\20\04\1b\21\01\0c\02\0b\41\c5\00\41" "\e5\00\20\04\1b\21\01\0c\01\0b\02\40\20\03\41\84\02\47\0d" "\00\41\c1\00\41\e1\00\20\04\1b\21\01\0c\01\0b\41\c7\00\41" "\e7\00\20\04\1b\21\01\0b\20\00\20\01\3a\00\00\20\03\41\84" "\02\47\0b\07\00\20\00\28\02\08\0b\2b\01\01\7f\23\00\41\10" "\6b\22\03\24\00\20\03\20\01\36\02\0c\20\00\20\03\41\0c\6a" "\20\02\10\89\07\21\01\20\03\41\10\6a\24\00\20\01\0b\47\01" "\01\7f\23\00\41\10\6b\22\04\24\00\20\04\20\01\36\02\0c\20" "\04\20\03\36\02\08\20\04\41\04\6a\20\04\41\0c\6a\10\92\05" "\21\03\20\00\20\02\20\04\28\02\08\10\ba\04\21\01\20\03\10" "\93\05\1a\20\04\41\10\6a\24\00\20\01\0b\2d\01\01\7f\20\00" "\10\9a\07\28\02\00\21\02\20\00\10\9a\07\20\01\36\02\00\02" "\40\20\02\45\0d\00\20\02\20\00\10\9b\07\28\02\00\11\04\00" "\0b\0b\d4\05\01\0a\7f\23\00\41\10\6b\22\07\24\00\20\06\10" "\76\21\08\20\07\41\04\6a\20\06\10\de\04\22\09\10\ba\05\20" "\05\20\03\36\02\00\20\00\21\0a\02\40\02\40\20\00\2d\00\00" "\22\06\41\55\6a\0e\03\00\01\00\01\0b\20\08\20\06\c0\10\e1" "\02\21\06\20\05\20\05\28\02\00\22\0b\41\01\6a\36\02\00\20" "\0b\20\06\3a\00\00\20\00\41\01\6a\21\0a\0b\20\0a\21\06\02" "\40\02\40\20\02\20\0a\6b\41\01\4c\0d\00\20\0a\21\06\20\0a" "\2d\00\00\41\30\47\0d\00\20\0a\21\06\20\0a\2d\00\01\41\20" "\72\41\f8\00\47\0d\00\20\08\41\30\10\e1\02\21\06\20\05\20" "\05\28\02\00\22\0b\41\01\6a\36\02\00\20\0b\20\06\3a\00\00" "\20\08\20\0a\2c\00\01\10\e1\02\21\06\20\05\20\05\28\02\00" "\22\0b\41\01\6a\36\02\00\20\0b\20\06\3a\00\00\20\0a\41\02" "\6a\22\0a\21\06\03\40\20\06\20\02\4f\0d\02\20\06\2c\00\00" "\10\8f\05\10\96\04\45\0d\02\20\06\41\01\6a\21\06\0c\00\0b" "\00\0b\03\40\20\06\20\02\4f\0d\01\20\06\2c\00\00\10\8f\05" "\10\98\04\45\0d\01\20\06\41\01\6a\21\06\0c\00\0b\00\0b\02" "\40\02\40\20\07\41\04\6a\10\e8\04\45\0d\00\20\08\20\0a\20" "\06\20\05\28\02\00\10\8e\05\1a\20\05\20\05\28\02\00\20\06" "\20\0a\6b\6a\36\02\00\0c\01\0b\20\0a\20\06\10\88\06\41\00" "\21\0c\20\09\10\b9\05\21\0d\41\00\21\0e\20\0a\21\0b\03\40" "\02\40\20\0b\20\06\49\0d\00\20\03\20\0a\20\00\6b\6a\20\05" "\28\02\00\10\88\06\0c\02\0b\02\40\20\07\41\04\6a\20\0e\10" "\ef\04\2c\00\00\41\01\48\0d\00\20\0c\20\07\41\04\6a\20\0e" "\10\ef\04\2c\00\00\47\0d\00\20\05\20\05\28\02\00\22\0c\41" "\01\6a\36\02\00\20\0c\20\0d\3a\00\00\20\0e\20\0e\20\07\41" "\04\6a\10\e6\01\41\7f\6a\49\6a\21\0e\41\00\21\0c\0b\20\08" "\20\0b\2c\00\00\10\e1\02\21\0f\20\05\20\05\28\02\00\22\10" "\41\01\6a\36\02\00\20\10\20\0f\3a\00\00\20\0b\41\01\6a\21" "\0b\20\0c\41\01\6a\21\0c\0c\00\0b\00\0b\03\40\02\40\02\40" "\02\40\20\06\20\02\49\0d\00\20\06\21\0b\0c\01\0b\20\06\41" "\01\6a\21\0b\20\06\2c\00\00\22\06\41\2e\47\0d\01\20\09\10" "\b8\05\21\06\20\05\20\05\28\02\00\22\0c\41\01\6a\36\02\00" "\20\0c\20\06\3a\00\00\0b\20\08\20\0b\20\02\20\05\28\02\00" "\10\8e\05\1a\20\05\20\05\28\02\00\20\02\20\0b\6b\6a\22\06" "\36\02\00\20\04\20\06\20\03\20\01\20\00\6b\6a\20\01\20\02" "\46\1b\36\02\00\20\07\41\04\6a\10\99\0d\1a\20\07\41\10\6a" "\24\00\0f\0b\20\08\20\06\10\e1\02\21\06\20\05\20\05\28\02" "\00\22\0c\41\01\6a\36\02\00\20\0c\20\06\3a\00\00\20\0b\21" "\06\0c\00\0b\00\0b\0b\00\20\00\41\00\10\e1\05\20\00\0b\14" "\00\20\00\20\01\20\02\20\03\20\04\20\05\41\a5\0c\10\e5\05" "\0b\be\04\01\06\7f\23\00\41\80\02\6b\22\07\24\00\20\07\41" "\fc\01\6a\41\00\36\00\00\20\07\41\00\36\00\f9\01\20\07\41" "\25\3a\00\f8\01\20\07\41\f9\01\6a\20\06\20\02\10\75\10\dd" "\05\21\08\20\07\20\07\41\d0\01\6a\36\02\cc\01\10\8f\05\21" "\06\02\40\02\40\20\08\45\0d\00\20\02\10\de\05\21\09\20\07" "\41\c0\00\6a\20\05\37\03\00\20\07\20\04\37\03\38\20\07\20" "\09\36\02\30\20\07\41\d0\01\6a\41\1e\20\06\20\07\41\f8\01" "\6a\20\07\41\30\6a\10\d1\05\21\06\0c\01\0b\20\07\20\04\37" "\03\50\20\07\20\05\37\03\58\20\07\41\d0\01\6a\41\1e\20\06" "\20\07\41\f8\01\6a\20\07\41\d0\00\6a\10\d1\05\21\06\0b\20" "\07\41\d6\00\36\02\80\01\20\07\41\c4\01\6a\41\00\20\07\41" "\80\01\6a\10\df\05\21\0a\20\07\41\d0\01\6a\22\0b\21\09\02" "\40\02\40\20\06\41\1e\48\0d\00\10\8f\05\21\06\02\40\02\40" "\20\08\45\0d\00\20\02\10\de\05\21\09\20\07\41\10\6a\20\05" "\37\03\00\20\07\20\04\37\03\08\20\07\20\09\36\02\00\20\07" "\41\cc\01\6a\20\06\20\07\41\f8\01\6a\20\07\10\e0\05\21\06" "\0c\01\0b\20\07\20\04\37\03\20\20\07\20\05\37\03\28\20\07" "\41\cc\01\6a\20\06\20\07\41\f8\01\6a\20\07\41\20\6a\10\e0" "\05\21\06\0b\20\06\41\7f\46\0d\01\20\0a\20\07\28\02\cc\01" "\10\e1\05\20\07\28\02\cc\01\21\09\0b\20\09\20\09\20\06\6a" "\22\08\20\02\10\d2\05\21\0c\20\07\41\d6\00\36\02\80\01\20" "\07\41\f8\00\6a\41\00\20\07\41\80\01\6a\10\df\05\21\09\02" "\40\02\40\20\07\28\02\cc\01\20\07\41\d0\01\6a\47\0d\00\20" "\07\41\80\01\6a\21\06\0c\01\0b\20\06\41\01\74\10\2b\22\06" "\45\0d\01\20\09\20\06\10\e1\05\20\07\28\02\cc\01\21\0b\0b" "\20\07\41\ec\00\6a\20\02\10\e9\02\20\0b\20\0c\20\08\20\06" "\20\07\41\f4\00\6a\20\07\41\f0\00\6a\20\07\41\ec\00\6a\10" "\e2\05\20\07\41\ec\00\6a\10\ad\09\1a\20\01\20\06\20\07\28" "\02\74\20\07\28\02\70\20\02\20\03\10\d4\05\21\02\20\09\10" "\e3\05\1a\20\0a\10\e3\05\1a\20\07\41\80\02\6a\24\00\20\02" "\0f\0b\10\91\0d\00\0b\ae\01\01\04\7f\23\00\41\e0\00\6b\22" "\05\24\00\10\8f\05\21\06\20\05\20\04\36\02\00\20\05\41\c0" "\00\6a\20\05\41\c0\00\6a\20\05\41\c0\00\6a\41\14\20\06\41" "\a7\0a\20\05\10\d1\05\22\07\6a\22\04\20\02\10\d2\05\21\06" "\20\05\41\10\6a\20\02\10\e9\02\20\05\41\10\6a\10\76\21\08" "\20\05\41\10\6a\10\ad\09\1a\20\08\20\05\41\c0\00\6a\20\04" "\20\05\41\10\6a\10\8e\05\1a\20\01\20\05\41\10\6a\20\07\20" "\05\41\10\6a\6a\22\07\20\05\41\10\6a\20\06\20\05\41\c0\00" "\6a\6b\6a\20\06\20\04\46\1b\20\07\20\02\20\03\10\d4\05\21" "\02\20\05\41\e0\00\6a\24\00\20\02\0b\07\00\20\00\28\02\0c" "\0b\2e\01\01\7f\23\00\41\10\6b\22\03\24\00\20\00\20\03\41" "\0f\6a\20\03\41\0e\6a\10\d4\01\22\00\20\01\20\02\10\a1\0d" "\20\03\41\10\6a\24\00\20\00\0b\14\01\01\7f\20\00\28\02\0c" "\21\02\20\00\20\01\36\02\0c\20\02\0b\f4\01\01\01\7f\23\00" "\41\20\6b\22\05\24\00\20\05\20\01\36\02\1c\02\40\02\40\20" "\02\10\75\41\01\71\0d\00\20\00\20\01\20\02\20\03\20\04\20" "\00\28\02\00\28\02\18\11\09\00\21\02\0c\01\0b\20\05\41\10" "\6a\20\02\10\e9\02\20\05\41\10\6a\10\95\05\21\02\20\05\41" "\10\6a\10\ad\09\1a\02\40\02\40\20\04\45\0d\00\20\05\41\10" "\6a\20\02\10\96\05\0c\01\0b\20\05\41\10\6a\20\02\10\97\05" "\0b\20\05\20\05\41\10\6a\10\eb\05\36\02\0c\03\40\20\05\20" "\05\41\10\6a\10\ec\05\36\02\08\02\40\20\05\41\0c\6a\20\05" "\41\08\6a\10\ed\05\0d\00\20\05\28\02\1c\21\02\20\05\41\10" "\6a\10\a7\0d\1a\0c\02\0b\20\05\41\0c\6a\10\ee\05\28\02\00" "\21\02\20\05\41\1c\6a\10\cf\01\20\02\10\d0\01\1a\20\05\41" "\0c\6a\10\ef\05\1a\20\05\41\1c\6a\10\d1\01\1a\0c\00\0b\00" "\0b\20\05\41\20\6a\24\00\20\02\0b\0c\00\20\00\20\00\10\f0" "\05\10\f1\05\0b\15\00\20\00\20\00\10\f0\05\20\00\10\9b\05" "\41\02\74\6a\10\f1\05\0b\0c\00\20\00\20\01\10\f2\05\41\01" "\73\0b\07\00\20\00\28\02\00\0b\11\00\20\00\20\00\28\02\00" "\41\04\6a\36\02\00\20\00\0b\18\00\02\40\20\00\10\ac\06\45" "\0d\00\20\00\10\d9\07\0f\0b\20\00\10\dc\07\0b\25\01\01\7f" "\23\00\41\10\6b\22\02\24\00\20\02\41\0c\6a\20\01\10\8b\0b" "\28\02\00\21\01\20\02\41\10\6a\24\00\20\01\0b\0d\00\20\00" "\10\f9\07\20\01\10\f9\07\46\0b\12\00\20\00\20\01\20\02\20" "\03\20\04\41\e3\0a\10\f4\05\0b\cc\01\01\01\7f\23\00\41\90" "\01\6b\22\06\24\00\20\06\41\8c\01\6a\41\00\36\00\00\20\06" "\41\00\36\00\89\01\20\06\41\25\3a\00\88\01\20\06\41\88\01" "\6a\41\01\6a\20\05\41\01\20\02\10\75\10\d0\05\10\8f\05\21" "\05\20\06\20\04\36\02\00\20\06\41\fb\00\6a\20\06\41\fb\00" "\6a\20\06\41\fb\00\6a\41\0d\20\05\20\06\41\88\01\6a\20\06" "\10\d1\05\6a\22\05\20\02\10\d2\05\21\04\20\06\41\04\6a\20" "\02\10\e9\02\20\06\41\fb\00\6a\20\04\20\05\20\06\41\10\6a" "\20\06\41\0c\6a\20\06\41\08\6a\20\06\41\04\6a\10\f5\05\20" "\06\41\04\6a\10\ad\09\1a\20\01\20\06\41\10\6a\20\06\28\02" "\0c\20\06\28\02\08\20\02\20\03\10\f6\05\21\02\20\06\41\90" "\01\6a\24\00\20\02\0b\f9\03\01\08\7f\23\00\41\10\6b\22\07" "\24\00\20\06\10\ba\01\21\08\20\07\41\04\6a\20\06\10\95\05" "\22\06\10\c1\05\02\40\02\40\20\07\41\04\6a\10\e8\04\45\0d" "\00\20\08\20\00\20\02\20\03\10\b6\05\1a\20\05\20\03\20\02" "\20\00\6b\41\02\74\6a\22\06\36\02\00\0c\01\0b\20\05\20\03" "\36\02\00\20\00\21\09\02\40\02\40\20\00\2d\00\00\22\0a\41" "\55\6a\0e\03\00\01\00\01\0b\20\08\20\0a\c0\10\e3\02\21\0a" "\20\05\20\05\28\02\00\22\0b\41\04\6a\36\02\00\20\0b\20\0a" "\36\02\00\20\00\41\01\6a\21\09\0b\02\40\20\02\20\09\6b\41" "\02\48\0d\00\20\09\2d\00\00\41\30\47\0d\00\20\09\2d\00\01" "\41\20\72\41\f8\00\47\0d\00\20\08\41\30\10\e3\02\21\0a\20" "\05\20\05\28\02\00\22\0b\41\04\6a\36\02\00\20\0b\20\0a\36" "\02\00\20\08\20\09\2c\00\01\10\e3\02\21\0a\20\05\20\05\28" "\02\00\22\0b\41\04\6a\36\02\00\20\0b\20\0a\36\02\00\20\09" "\41\02\6a\21\09\0b\20\09\20\02\10\88\06\41\00\21\0a\20\06" "\10\c0\05\21\0c\41\00\21\0b\20\09\21\06\03\40\02\40\20\06" "\20\02\49\0d\00\20\03\20\09\20\00\6b\41\02\74\6a\20\05\28" "\02\00\10\8a\06\20\05\28\02\00\21\06\0c\02\0b\02\40\20\07" "\41\04\6a\20\0b\10\ef\04\2d\00\00\45\0d\00\20\0a\20\07\41" "\04\6a\20\0b\10\ef\04\2c\00\00\47\0d\00\20\05\20\05\28\02" "\00\22\0a\41\04\6a\36\02\00\20\0a\20\0c\36\02\00\20\0b\20" "\0b\20\07\41\04\6a\10\e6\01\41\7f\6a\49\6a\21\0b\41\00\21" "\0a\0b\20\08\20\06\2c\00\00\10\e3\02\21\0d\20\05\20\05\28" "\02\00\22\0e\41\04\6a\36\02\00\20\0e\20\0d\36\02\00\20\06" "\41\01\6a\21\06\20\0a\41\01\6a\21\0a\0c\00\0b\00\0b\20\04" "\20\06\20\03\20\01\20\00\6b\41\02\74\6a\20\01\20\02\46\1b" "\36\02\00\20\07\41\04\6a\10\99\0d\1a\20\07\41\10\6a\24\00" "\0b\cb\01\01\04\7f\23\00\41\10\6b\22\06\24\00\02\40\02\40" "\20\00\0d\00\41\00\21\07\0c\01\0b\20\04\10\e7\05\21\08\41" "\00\21\07\02\40\20\02\20\01\6b\41\02\75\22\09\41\01\48\0d" "\00\20\00\20\01\20\09\10\d2\01\20\09\47\0d\01\0b\02\40\20" "\08\20\03\20\01\6b\41\02\75\22\07\6b\41\00\20\08\20\07\4a" "\1b\22\01\41\01\48\0d\00\20\00\20\06\41\04\6a\20\01\20\05" "\10\86\06\22\07\10\87\06\20\01\10\d2\01\21\08\20\07\10\a7" "\0d\1a\41\00\21\07\20\08\20\01\47\0d\01\0b\02\40\20\03\20" "\02\6b\41\02\75\22\01\41\01\48\0d\00\41\00\21\07\20\00\20" "\02\20\01\10\d2\01\20\01\47\0d\01\0b\20\04\41\00\10\e9\05" "\1a\20\00\21\07\0b\20\06\41\10\6a\24\00\20\07\0b\12\00\20" "\00\20\01\20\02\20\03\20\04\41\dc\0a\10\f8\05\0b\cc\01\01" "\02\7f\23\00\41\80\02\6b\22\06\24\00\20\06\41\fc\01\6a\41" "\00\36\00\00\20\06\41\00\36\00\f9\01\20\06\41\25\3a\00\f8" "\01\20\06\41\f8\01\6a\41\01\6a\20\05\41\01\20\02\10\75\10" "\d0\05\10\8f\05\21\05\20\06\20\04\37\03\00\20\06\41\e0\01" "\6a\20\06\41\e0\01\6a\20\06\41\e0\01\6a\41\18\20\05\20\06" "\41\f8\01\6a\20\06\10\d1\05\6a\22\05\20\02\10\d2\05\21\07" "\20\06\41\14\6a\20\02\10\e9\02\20\06\41\e0\01\6a\20\07\20" "\05\20\06\41\20\6a\20\06\41\1c\6a\20\06\41\18\6a\20\06\41" "\14\6a\10\f5\05\20\06\41\14\6a\10\ad\09\1a\20\01\20\06\41" "\20\6a\20\06\28\02\1c\20\06\28\02\18\20\02\20\03\10\f6\05" "\21\02\20\06\41\80\02\6a\24\00\20\02\0b\12\00\20\00\20\01" "\20\02\20\03\20\04\41\e3\0a\10\fa\05\0b\c9\01\01\01\7f\23" "\00\41\90\01\6b\22\06\24\00\20\06\41\8c\01\6a\41\00\36\00" "\00\20\06\41\00\36\00\89\01\20\06\41\25\3a\00\88\01\20\06" "\41\89\01\6a\20\05\41\00\20\02\10\75\10\d0\05\10\8f\05\21" "\05\20\06\20\04\36\02\00\20\06\41\fb\00\6a\20\06\41\fb\00" "\6a\20\06\41\fb\00\6a\41\0d\20\05\20\06\41\88\01\6a\20\06" "\10\d1\05\6a\22\05\20\02\10\d2\05\21\04\20\06\41\04\6a\20" "\02\10\e9\02\20\06\41\fb\00\6a\20\04\20\05\20\06\41\10\6a" "\20\06\41\0c\6a\20\06\41\08\6a\20\06\41\04\6a\10\f5\05\20" "\06\41\04\6a\10\ad\09\1a\20\01\20\06\41\10\6a\20\06\28\02" "\0c\20\06\28\02\08\20\02\20\03\10\f6\05\21\02\20\06\41\90" "\01\6a\24\00\20\02\0b\12\00\20\00\20\01\20\02\20\03\20\04" "\41\dc\0a\10\fc\05\0b\c9\01\01\02\7f\23\00\41\80\02\6b\22" "\06\24\00\20\06\41\fc\01\6a\41\00\36\00\00\20\06\41\00\36" "\00\f9\01\20\06\41\25\3a\00\f8\01\20\06\41\f9\01\6a\20\05" "\41\00\20\02\10\75\10\d0\05\10\8f\05\21\05\20\06\20\04\37" "\03\00\20\06\41\e0\01\6a\20\06\41\e0\01\6a\20\06\41\e0\01" "\6a\41\18\20\05\20\06\41\f8\01\6a\20\06\10\d1\05\6a\22\05" "\20\02\10\d2\05\21\07\20\06\41\14\6a\20\02\10\e9\02\20\06" "\41\e0\01\6a\20\07\20\05\20\06\41\20\6a\20\06\41\1c\6a\20" "\06\41\18\6a\20\06\41\14\6a\10\f5\05\20\06\41\14\6a\10\ad" "\09\1a\20\01\20\06\41\20\6a\20\06\28\02\1c\20\06\28\02\18" "\20\02\20\03\10\f6\05\21\02\20\06\41\80\02\6a\24\00\20\02" "\0b\12\00\20\00\20\01\20\02\20\03\20\04\41\85\0d\10\fe\05" "\0b\95\04\01\06\7f\23\00\41\f0\02\6b\22\06\24\00\20\06\41" "\ec\02\6a\41\00\36\00\00\20\06\41\00\36\00\e9\02\20\06\41" "\25\3a\00\e8\02\20\06\41\e9\02\6a\20\05\20\02\10\75\10\dd" "\05\21\07\20\06\20\06\41\c0\02\6a\36\02\bc\02\10\8f\05\21" "\05\02\40\02\40\20\07\45\0d\00\20\02\10\de\05\21\08\20\06" "\20\04\39\03\28\20\06\20\08\36\02\20\20\06\41\c0\02\6a\41" "\1e\20\05\20\06\41\e8\02\6a\20\06\41\20\6a\10\d1\05\21\05" "\0c\01\0b\20\06\20\04\39\03\30\20\06\41\c0\02\6a\41\1e\20" "\05\20\06\41\e8\02\6a\20\06\41\30\6a\10\d1\05\21\05\0b\20" "\06\41\d6\00\36\02\50\20\06\41\b4\02\6a\41\00\20\06\41\d0" "\00\6a\10\df\05\21\09\20\06\41\c0\02\6a\22\0a\21\08\02\40" "\02\40\20\05\41\1e\48\0d\00\10\8f\05\21\05\02\40\02\40\20" "\07\45\0d\00\20\02\10\de\05\21\08\20\06\20\04\39\03\08\20" "\06\20\08\36\02\00\20\06\41\bc\02\6a\20\05\20\06\41\e8\02" "\6a\20\06\10\e0\05\21\05\0c\01\0b\20\06\20\04\39\03\10\20" "\06\41\bc\02\6a\20\05\20\06\41\e8\02\6a\20\06\41\10\6a\10" "\e0\05\21\05\0b\20\05\41\7f\46\0d\01\20\09\20\06\28\02\bc" "\02\10\e1\05\20\06\28\02\bc\02\21\08\0b\20\08\20\08\20\05" "\6a\22\07\20\02\10\d2\05\21\0b\20\06\41\d6\00\36\02\50\20" "\06\41\c8\00\6a\41\00\20\06\41\d0\00\6a\10\ff\05\21\08\02" "\40\02\40\20\06\28\02\bc\02\20\06\41\c0\02\6a\47\0d\00\20" "\06\41\d0\00\6a\21\05\0c\01\0b\20\05\41\03\74\10\2b\22\05" "\45\0d\01\20\08\20\05\10\80\06\20\06\28\02\bc\02\21\0a\0b" "\20\06\41\3c\6a\20\02\10\e9\02\20\0a\20\0b\20\07\20\05\20" "\06\41\c4\00\6a\20\06\41\c0\00\6a\20\06\41\3c\6a\10\81\06" "\20\06\41\3c\6a\10\ad\09\1a\20\01\20\05\20\06\28\02\44\20" "\06\28\02\40\20\02\20\03\10\f6\05\21\02\20\08\10\82\06\1a" "\20\09\10\e3\05\1a\20\06\41\f0\02\6a\24\00\20\02\0f\0b\10" "\91\0d\00\0b\2b\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03" "\20\01\36\02\0c\20\00\20\03\41\0c\6a\20\02\10\c8\07\21\01" "\20\03\41\10\6a\24\00\20\01\0b\2d\01\01\7f\20\00\10\93\08" "\28\02\00\21\02\20\00\10\93\08\20\01\36\02\00\02\40\20\02" "\45\0d\00\20\02\20\00\10\94\08\28\02\00\11\04\00\0b\0b\e5" "\05\01\0a\7f\23\00\41\10\6b\22\07\24\00\20\06\10\ba\01\21" "\08\20\07\41\04\6a\20\06\10\95\05\22\09\10\c1\05\20\05\20" "\03\36\02\00\20\00\21\0a\02\40\02\40\20\00\2d\00\00\22\06" "\41\55\6a\0e\03\00\01\00\01\0b\20\08\20\06\c0\10\e3\02\21" "\06\20\05\20\05\28\02\00\22\0b\41\04\6a\36\02\00\20\0b\20" "\06\36\02\00\20\00\41\01\6a\21\0a\0b\20\0a\21\06\02\40\02" "\40\20\02\20\0a\6b\41\01\4c\0d\00\20\0a\21\06\20\0a\2d\00" "\00\41\30\47\0d\00\20\0a\21\06\20\0a\2d\00\01\41\20\72\41" "\f8\00\47\0d\00\20\08\41\30\10\e3\02\21\06\20\05\20\05\28" "\02\00\22\0b\41\04\6a\36\02\00\20\0b\20\06\36\02\00\20\08" "\20\0a\2c\00\01\10\e3\02\21\06\20\05\20\05\28\02\00\22\0b" "\41\04\6a\36\02\00\20\0b\20\06\36\02\00\20\0a\41\02\6a\22" "\0a\21\06\03\40\20\06\20\02\4f\0d\02\20\06\2c\00\00\10\8f" "\05\10\96\04\45\0d\02\20\06\41\01\6a\21\06\0c\00\0b\00\0b" "\03\40\20\06\20\02\4f\0d\01\20\06\2c\00\00\10\8f\05\10\98" "\04\45\0d\01\20\06\41\01\6a\21\06\0c\00\0b\00\0b\02\40\02" "\40\20\07\41\04\6a\10\e8\04\45\0d\00\20\08\20\0a\20\06\20" "\05\28\02\00\10\b6\05\1a\20\05\20\05\28\02\00\20\06\20\0a" "\6b\41\02\74\6a\36\02\00\0c\01\0b\20\0a\20\06\10\88\06\41" "\00\21\0c\20\09\10\c0\05\21\0d\41\00\21\0e\20\0a\21\0b\03" "\40\02\40\20\0b\20\06\49\0d\00\20\03\20\0a\20\00\6b\41\02" "\74\6a\20\05\28\02\00\10\8a\06\0c\02\0b\02\40\20\07\41\04" "\6a\20\0e\10\ef\04\2c\00\00\41\01\48\0d\00\20\0c\20\07\41" "\04\6a\20\0e\10\ef\04\2c\00\00\47\0d\00\20\05\20\05\28\02" "\00\22\0c\41\04\6a\36\02\00\20\0c\20\0d\36\02\00\20\0e\20" "\0e\20\07\41\04\6a\10\e6\01\41\7f\6a\49\6a\21\0e\41\00\21" "\0c\0b\20\08\20\0b\2c\00\00\10\e3\02\21\0f\20\05\20\05\28" "\02\00\22\10\41\04\6a\36\02\00\20\10\20\0f\36\02\00\20\0b" "\41\01\6a\21\0b\20\0c\41\01\6a\21\0c\0c\00\0b\00\0b\02\40" "\02\40\03\40\20\06\20\02\4f\0d\01\20\06\41\01\6a\21\0b\02" "\40\20\06\2c\00\00\22\06\41\2e\46\0d\00\20\08\20\06\10\e3" "\02\21\06\20\05\20\05\28\02\00\22\0c\41\04\6a\36\02\00\20" "\0c\20\06\36\02\00\20\0b\21\06\0c\01\0b\0b\20\09\10\bf\05" "\21\06\20\05\20\05\28\02\00\22\0e\41\04\6a\22\0c\36\02\00" "\20\0e\20\06\36\02\00\0c\01\0b\20\05\28\02\00\21\0c\20\06" "\21\0b\0b\20\08\20\0b\20\02\20\0c\10\b6\05\1a\20\05\20\05" "\28\02\00\20\02\20\0b\6b\41\02\74\6a\22\06\36\02\00\20\04" "\20\06\20\03\20\01\20\00\6b\41\02\74\6a\20\01\20\02\46\1b" "\36\02\00\20\07\41\04\6a\10\99\0d\1a\20\07\41\10\6a\24\00" "\0b\0b\00\20\00\41\00\10\80\06\20\00\0b\14\00\20\00\20\01" "\20\02\20\03\20\04\20\05\41\a5\0c\10\84\06\0b\be\04\01\06" "\7f\23\00\41\a0\03\6b\22\07\24\00\20\07\41\9c\03\6a\41\00" "\36\00\00\20\07\41\00\36\00\99\03\20\07\41\25\3a\00\98\03" "\20\07\41\99\03\6a\20\06\20\02\10\75\10\dd\05\21\08\20\07" "\20\07\41\f0\02\6a\36\02\ec\02\10\8f\05\21\06\02\40\02\40" "\20\08\45\0d\00\20\02\10\de\05\21\09\20\07\41\c0\00\6a\20" "\05\37\03\00\20\07\20\04\37\03\38\20\07\20\09\36\02\30\20" "\07\41\f0\02\6a\41\1e\20\06\20\07\41\98\03\6a\20\07\41\30" "\6a\10\d1\05\21\06\0c\01\0b\20\07\20\04\37\03\50\20\07\20" "\05\37\03\58\20\07\41\f0\02\6a\41\1e\20\06\20\07\41\98\03" "\6a\20\07\41\d0\00\6a\10\d1\05\21\06\0b\20\07\41\d6\00\36" "\02\80\01\20\07\41\e4\02\6a\41\00\20\07\41\80\01\6a\10\df" "\05\21\0a\20\07\41\f0\02\6a\22\0b\21\09\02\40\02\40\20\06" "\41\1e\48\0d\00\10\8f\05\21\06\02\40\02\40\20\08\45\0d\00" "\20\02\10\de\05\21\09\20\07\41\10\6a\20\05\37\03\00\20\07" "\20\04\37\03\08\20\07\20\09\36\02\00\20\07\41\ec\02\6a\20" "\06\20\07\41\98\03\6a\20\07\10\e0\05\21\06\0c\01\0b\20\07" "\20\04\37\03\20\20\07\20\05\37\03\28\20\07\41\ec\02\6a\20" "\06\20\07\41\98\03\6a\20\07\41\20\6a\10\e0\05\21\06\0b\20" "\06\41\7f\46\0d\01\20\0a\20\07\28\02\ec\02\10\e1\05\20\07" "\28\02\ec\02\21\09\0b\20\09\20\09\20\06\6a\22\08\20\02\10" "\d2\05\21\0c\20\07\41\d6\00\36\02\80\01\20\07\41\f8\00\6a" "\41\00\20\07\41\80\01\6a\10\ff\05\21\09\02\40\02\40\20\07" "\28\02\ec\02\20\07\41\f0\02\6a\47\0d\00\20\07\41\80\01\6a" "\21\06\0c\01\0b\20\06\41\03\74\10\2b\22\06\45\0d\01\20\09" "\20\06\10\80\06\20\07\28\02\ec\02\21\0b\0b\20\07\41\ec\00" "\6a\20\02\10\e9\02\20\0b\20\0c\20\08\20\06\20\07\41\f4\00" "\6a\20\07\41\f0\00\6a\20\07\41\ec\00\6a\10\81\06\20\07\41" "\ec\00\6a\10\ad\09\1a\20\01\20\06\20\07\28\02\74\20\07\28" "\02\70\20\02\20\03\10\f6\05\21\02\20\09\10\82\06\1a\20\0a" "\10\e3\05\1a\20\07\41\a0\03\6a\24\00\20\02\0f\0b\10\91\0d" "\00\0b\b5\01\01\04\7f\23\00\41\d0\01\6b\22\05\24\00\10\8f" "\05\21\06\20\05\20\04\36\02\00\20\05\41\b0\01\6a\20\05\41" "\b0\01\6a\20\05\41\b0\01\6a\41\14\20\06\41\a7\0a\20\05\10" "\d1\05\22\07\6a\22\04\20\02\10\d2\05\21\06\20\05\41\10\6a" "\20\02\10\e9\02\20\05\41\10\6a\10\ba\01\21\08\20\05\41\10" "\6a\10\ad\09\1a\20\08\20\05\41\b0\01\6a\20\04\20\05\41\10" "\6a\10\b6\05\1a\20\01\20\05\41\10\6a\20\05\41\10\6a\20\07" "\41\02\74\6a\22\07\20\05\41\10\6a\20\06\20\05\41\b0\01\6a" "\6b\41\02\74\6a\20\06\20\04\46\1b\20\07\20\02\20\03\10\f6" "\05\21\02\20\05\41\d0\01\6a\24\00\20\02\0b\2e\01\01\7f\23" "\00\41\10\6b\22\03\24\00\20\00\20\03\41\0f\6a\20\03\41\0e" "\6a\10\da\04\22\00\20\01\20\02\10\af\0d\20\03\41\10\6a\24" "\00\20\00\0b\0a\00\20\00\10\f0\05\10\a8\02\0b\09\00\20\00" "\20\01\10\89\06\0b\09\00\20\00\20\01\10\8c\0b\0b\09\00\20" "\00\20\01\10\8b\06\0b\09\00\20\00\20\01\10\8f\0b\0b\e6\03" "\01\04\7f\23\00\41\10\6b\22\08\24\00\20\08\20\02\36\02\08" "\20\08\20\01\36\02\0c\20\08\41\04\6a\20\03\10\e9\02\20\08" "\41\04\6a\10\76\21\02\20\08\41\04\6a\10\ad\09\1a\20\04\41" "\00\36\02\00\41\00\21\01\02\40\03\40\20\06\20\07\46\0d\01" "\20\01\0d\01\02\40\20\08\41\0c\6a\20\08\41\08\6a\10\77\0d" "\00\02\40\02\40\20\02\20\06\2c\00\00\41\00\10\8d\06\41\25" "\47\0d\00\20\06\41\01\6a\22\01\20\07\46\0d\02\41\00\21\09" "\02\40\02\40\20\02\20\01\2c\00\00\41\00\10\8d\06\22\01\41" "\c5\00\46\0d\00\41\01\21\0a\20\01\41\ff\01\71\41\30\46\0d" "\00\20\01\21\0b\0c\01\0b\20\06\41\02\6a\22\09\20\07\46\0d" "\03\41\02\21\0a\20\02\20\09\2c\00\00\41\00\10\8d\06\21\0b" "\20\01\21\09\0b\20\08\20\00\20\08\28\02\0c\20\08\28\02\08" "\20\03\20\04\20\05\20\0b\20\09\20\00\28\02\00\28\02\24\11" "\0d\00\36\02\0c\20\06\20\0a\6a\41\01\6a\21\06\0c\01\0b\02" "\40\20\02\41\01\20\06\2c\00\00\10\79\45\0d\00\02\40\03\40" "\02\40\20\06\41\01\6a\22\06\20\07\47\0d\00\20\07\21\06\0c" "\02\0b\20\02\41\01\20\06\2c\00\00\10\79\0d\00\0b\0b\03\40" "\20\08\41\0c\6a\20\08\41\08\6a\10\77\0d\02\20\02\41\01\20" "\08\41\0c\6a\10\78\10\79\45\0d\02\20\08\41\0c\6a\10\7a\1a" "\0c\00\0b\00\0b\02\40\20\02\20\08\41\0c\6a\10\78\10\e6\04" "\20\02\20\06\2c\00\00\10\e6\04\47\0d\00\20\06\41\01\6a\21" "\06\20\08\41\0c\6a\10\7a\1a\0c\01\0b\20\04\41\04\36\02\00" "\0b\20\04\28\02\00\21\01\0c\01\0b\0b\20\04\41\04\36\02\00" "\0b\02\40\20\08\41\0c\6a\20\08\41\08\6a\10\77\45\0d\00\20" "\04\20\04\28\02\00\41\02\72\36\02\00\0b\20\08\28\02\0c\21" "\06\20\08\41\10\6a\24\00\20\06\0b\13\00\20\00\20\01\20\02" "\20\00\28\02\00\28\02\24\11\03\00\0b\04\00\41\02\0b\41\01" "\01\7f\23\00\41\10\6b\22\06\24\00\20\06\42\a5\90\e9\a9\d2" "\c9\ce\92\d3\00\37\00\08\20\00\20\01\20\02\20\03\20\04\20" "\05\20\06\41\08\6a\20\06\41\10\6a\10\8c\06\21\05\20\06\41" "\10\6a\24\00\20\05\0b\33\01\01\7f\20\00\20\01\20\02\20\03" "\20\04\20\05\20\00\41\08\6a\20\00\28\02\08\28\02\14\11\00" "\00\22\06\10\e5\01\20\06\10\e5\01\20\06\10\e6\01\6a\10\8c" "\06\0b\55\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20\01" "\36\02\0c\20\06\41\08\6a\20\03\10\e9\02\20\06\41\08\6a\10" "\76\21\01\20\06\41\08\6a\10\ad\09\1a\20\00\20\05\41\18\6a" "\20\06\41\0c\6a\20\02\20\04\20\01\10\92\06\20\06\28\02\0c" "\21\01\20\06\41\10\6a\24\00\20\01\0b\42\00\02\40\20\02\20" "\03\20\00\41\08\6a\20\00\28\02\08\28\02\00\11\00\00\22\00" "\20\00\41\a8\01\6a\20\05\20\04\41\00\10\e1\04\20\00\6b\22" "\00\41\a7\01\4a\0d\00\20\01\20\00\41\0c\6d\41\07\6f\36\02" "\00\0b\0b\55\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20" "\01\36\02\0c\20\06\41\08\6a\20\03\10\e9\02\20\06\41\08\6a" "\10\76\21\01\20\06\41\08\6a\10\ad\09\1a\20\00\20\05\41\10" "\6a\20\06\41\0c\6a\20\02\20\04\20\01\10\94\06\20\06\28\02" "\0c\21\01\20\06\41\10\6a\24\00\20\01\0b\42\00\02\40\20\02" "\20\03\20\00\41\08\6a\20\00\28\02\08\28\02\04\11\00\00\22" "\00\20\00\41\a0\02\6a\20\05\20\04\41\00\10\e1\04\20\00\6b" "\22\00\41\9f\02\4a\0d\00\20\01\20\00\41\0c\6d\41\0c\6f\36" "\02\00\0b\0b\55\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06" "\20\01\36\02\0c\20\06\41\08\6a\20\03\10\e9\02\20\06\41\08" "\6a\10\76\21\01\20\06\41\08\6a\10\ad\09\1a\20\00\20\05\41" "\14\6a\20\06\41\0c\6a\20\02\20\04\20\01\10\96\06\20\06\28" "\02\0c\21\01\20\06\41\10\6a\24\00\20\01\0b\43\00\20\02\20" "\03\20\04\20\05\41\04\10\97\06\21\05\02\40\20\04\2d\00\00" "\41\04\71\0d\00\20\01\20\05\41\d0\0f\6a\20\05\41\ec\0e\6a" "\20\05\20\05\41\e4\00\49\1b\20\05\41\c5\00\48\1b\41\94\71" "\6a\36\02\00\0b\0b\c1\01\01\03\7f\23\00\41\10\6b\22\05\24" "\00\20\05\20\01\36\02\0c\41\00\21\01\41\06\21\06\02\40\02" "\40\20\00\20\05\41\0c\6a\10\77\0d\00\41\04\21\06\20\03\41" "\c0\00\20\00\10\78\22\07\10\79\45\0d\00\20\03\20\07\41\00" "\10\8d\06\21\01\02\40\03\40\20\00\10\7a\1a\20\01\41\50\6a" "\21\01\20\00\20\05\41\0c\6a\10\77\0d\01\20\04\41\02\48\0d" "\01\20\03\41\c0\00\20\00\10\78\22\06\10\79\45\0d\03\20\04" "\41\7f\6a\21\04\20\01\41\0a\6c\20\03\20\06\41\00\10\8d\06" "\6a\21\01\0c\00\0b\00\0b\41\02\21\06\20\00\20\05\41\0c\6a" "\10\77\45\0d\01\0b\20\02\20\02\28\02\00\20\06\72\36\02\00" "\0b\20\05\41\10\6a\24\00\20\01\0b\b7\07\01\02\7f\23\00\41" "\10\6b\22\08\24\00\20\08\20\01\36\02\0c\20\04\41\00\36\02" "\00\20\08\20\03\10\e9\02\20\08\10\76\21\09\20\08\10\ad\09" "\1a\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\20\06" "\41\bf\7f\6a\0e\39\00\01\17\04\17\05\17\06\07\17\17\17\0a" "\17\17\17\17\0e\0f\10\17\17\17\13\15\17\17\17\17\17\17\17" "\00\01\02\03\03\17\17\01\17\08\17\17\09\0b\17\0c\17\0d\17" "\0b\17\17\11\12\14\16\0b\20\00\20\05\41\18\6a\20\08\41\0c" "\6a\20\02\20\04\20\09\10\92\06\0c\18\0b\20\00\20\05\41\10" "\6a\20\08\41\0c\6a\20\02\20\04\20\09\10\94\06\0c\17\0b\20" "\00\41\08\6a\20\00\28\02\08\28\02\0c\11\00\00\21\01\20\08" "\20\00\20\08\28\02\0c\20\02\20\03\20\04\20\05\20\01\10\e5" "\01\20\01\10\e5\01\20\01\10\e6\01\6a\10\8c\06\36\02\0c\0c" "\16\0b\20\00\20\05\41\0c\6a\20\08\41\0c\6a\20\02\20\04\20" "\09\10\99\06\0c\15\0b\20\08\42\a5\da\bd\a9\c2\ec\cb\92\f9" "\00\37\00\00\20\08\20\00\20\01\20\02\20\03\20\04\20\05\20" "\08\20\08\41\08\6a\10\8c\06\36\02\0c\0c\14\0b\20\08\42\a5" "\b2\b5\a9\d2\ad\cb\92\e4\00\37\00\00\20\08\20\00\20\01\20" "\02\20\03\20\04\20\05\20\08\20\08\41\08\6a\10\8c\06\36\02" "\0c\0c\13\0b\20\00\20\05\41\08\6a\20\08\41\0c\6a\20\02\20" "\04\20\09\10\9a\06\0c\12\0b\20\00\20\05\41\08\6a\20\08\41" "\0c\6a\20\02\20\04\20\09\10\9b\06\0c\11\0b\20\00\20\05\41" "\1c\6a\20\08\41\0c\6a\20\02\20\04\20\09\10\9c\06\0c\10\0b" "\20\00\20\05\41\10\6a\20\08\41\0c\6a\20\02\20\04\20\09\10" "\9d\06\0c\0f\0b\20\00\20\05\41\04\6a\20\08\41\0c\6a\20\02" "\20\04\20\09\10\9e\06\0c\0e\0b\20\00\20\08\41\0c\6a\20\02" "\20\04\20\09\10\9f\06\0c\0d\0b\20\00\20\05\41\08\6a\20\08" "\41\0c\6a\20\02\20\04\20\09\10\a0\06\0c\0c\0b\20\08\41\f0" "\00\3a\00\0a\20\08\41\a0\ca\00\3b\00\08\20\08\42\a5\92\e9" "\a9\d2\c9\ce\92\d3\00\37\00\00\20\08\20\00\20\01\20\02\20" "\03\20\04\20\05\20\08\20\08\41\0b\6a\10\8c\06\36\02\0c\0c" "\0b\0b\20\08\41\cd\00\3a\00\04\20\08\41\a5\90\e9\a9\02\36" "\00\00\20\08\20\00\20\01\20\02\20\03\20\04\20\05\20\08\20" "\08\41\05\6a\10\8c\06\36\02\0c\0c\0a\0b\20\00\20\05\20\08" "\41\0c\6a\20\02\20\04\20\09\10\a1\06\0c\09\0b\20\08\42\a5" "\90\e9\a9\d2\c9\ce\92\d3\00\37\00\00\20\08\20\00\20\01\20" "\02\20\03\20\04\20\05\20\08\20\08\41\08\6a\10\8c\06\36\02" "\0c\0c\08\0b\20\00\20\05\41\18\6a\20\08\41\0c\6a\20\02\20" "\04\20\09\10\a2\06\0c\07\0b\20\00\20\01\20\02\20\03\20\04" "\20\05\20\00\28\02\00\28\02\14\11\05\00\21\04\0c\07\0b\20" "\00\41\08\6a\20\00\28\02\08\28\02\18\11\00\00\21\01\20\08" "\20\00\20\08\28\02\0c\20\02\20\03\20\04\20\05\20\01\10\e5" "\01\20\01\10\e5\01\20\01\10\e6\01\6a\10\8c\06\36\02\0c\0c" "\05\0b\20\00\20\05\41\14\6a\20\08\41\0c\6a\20\02\20\04\20" "\09\10\96\06\0c\04\0b\20\00\20\05\41\14\6a\20\08\41\0c\6a" "\20\02\20\04\20\09\10\a3\06\0c\03\0b\20\06\41\25\46\0d\01" "\0b\20\04\20\04\28\02\00\41\04\72\36\02\00\0c\01\0b\20\00" "\20\08\41\0c\6a\20\02\20\04\20\09\10\a4\06\0b\20\08\28\02" "\0c\21\04\0b\20\08\41\10\6a\24\00\20\04\0b\3e\00\20\02\20" "\03\20\04\20\05\41\02\10\97\06\21\05\20\04\28\02\00\21\03" "\02\40\20\05\41\7f\6a\41\1e\4b\0d\00\20\03\41\04\71\0d\00" "\20\01\20\05\36\02\00\0f\0b\20\04\20\03\41\04\72\36\02\00" "\0b\3b\00\20\02\20\03\20\04\20\05\41\02\10\97\06\21\05\20" "\04\28\02\00\21\03\02\40\20\05\41\17\4a\0d\00\20\03\41\04" "\71\0d\00\20\01\20\05\36\02\00\0f\0b\20\04\20\03\41\04\72" "\36\02\00\0b\3e\00\20\02\20\03\20\04\20\05\41\02\10\97\06" "\21\05\20\04\28\02\00\21\03\02\40\20\05\41\7f\6a\41\0b\4b" "\0d\00\20\03\41\04\71\0d\00\20\01\20\05\36\02\00\0f\0b\20" "\04\20\03\41\04\72\36\02\00\0b\3c\00\20\02\20\03\20\04\20" "\05\41\03\10\97\06\21\05\20\04\28\02\00\21\03\02\40\20\05" "\41\ed\02\4a\0d\00\20\03\41\04\71\0d\00\20\01\20\05\36\02" "\00\0f\0b\20\04\20\03\41\04\72\36\02\00\0b\40\00\20\02\20" "\03\20\04\20\05\41\02\10\97\06\21\03\20\04\28\02\00\21\05" "\02\40\20\03\41\7f\6a\22\03\41\0b\4b\0d\00\20\05\41\04\71" "\0d\00\20\01\20\03\36\02\00\0f\0b\20\04\20\05\41\04\72\36" "\02\00\0b\3b\00\20\02\20\03\20\04\20\05\41\02\10\97\06\21" "\05\20\04\28\02\00\21\03\02\40\20\05\41\3b\4a\0d\00\20\03" "\41\04\71\0d\00\20\01\20\05\36\02\00\0f\0b\20\04\20\03\41" "\04\72\36\02\00\0b\5d\01\01\7f\23\00\41\10\6b\22\05\24\00" "\20\05\20\02\36\02\0c\02\40\03\40\20\01\20\05\41\0c\6a\10" "\77\0d\01\20\04\41\01\20\01\10\78\10\79\45\0d\01\20\01\10" "\7a\1a\0c\00\0b\00\0b\02\40\20\01\20\05\41\0c\6a\10\77\45" "\0d\00\20\03\20\03\28\02\00\41\02\72\36\02\00\0b\20\05\41" "\10\6a\24\00\0b\8a\01\00\02\40\20\00\41\08\6a\20\00\28\02" "\08\28\02\08\11\00\00\22\00\10\e6\01\41\00\20\00\41\0c\6a" "\10\e6\01\6b\47\0d\00\20\04\20\04\28\02\00\41\04\72\36\02" "\00\0f\0b\20\02\20\03\20\00\20\00\41\18\6a\20\05\20\04\41" "\00\10\e1\04\21\04\20\01\28\02\00\21\05\02\40\20\04\20\00" "\47\0d\00\20\05\41\0c\47\0d\00\20\01\41\00\36\02\00\0f\0b" "\02\40\20\04\20\00\6b\41\0c\47\0d\00\20\05\41\0b\4a\0d\00" "\20\01\20\05\41\0c\6a\36\02\00\0b\0b\3b\00\20\02\20\03\20" "\04\20\05\41\02\10\97\06\21\05\20\04\28\02\00\21\03\02\40" "\20\05\41\3c\4a\0d\00\20\03\41\04\71\0d\00\20\01\20\05\36" "\02\00\0f\0b\20\04\20\03\41\04\72\36\02\00\0b\3b\00\20\02" "\20\03\20\04\20\05\41\01\10\97\06\21\05\20\04\28\02\00\21" "\03\02\40\20\05\41\06\4a\0d\00\20\03\41\04\71\0d\00\20\01" "\20\05\36\02\00\0f\0b\20\04\20\03\41\04\72\36\02\00\0b\29" "\00\20\02\20\03\20\04\20\05\41\04\10\97\06\21\05\02\40\20" "\04\2d\00\00\41\04\71\0d\00\20\01\20\05\41\94\71\6a\36\02" "\00\0b\0b\63\01\01\7f\23\00\41\10\6b\22\05\24\00\20\05\20" "\02\36\02\0c\41\06\21\02\02\40\02\40\20\01\20\05\41\0c\6a" "\10\77\0d\00\41\04\21\02\20\04\20\01\10\78\41\00\10\8d\06" "\41\25\47\0d\00\41\02\21\02\20\01\10\7a\20\05\41\0c\6a\10" "\77\45\0d\01\0b\20\03\20\03\28\02\00\20\02\72\36\02\00\0b" "\20\05\41\10\6a\24\00\0b\f1\03\01\04\7f\23\00\41\10\6b\22" "\08\24\00\20\08\20\02\36\02\08\20\08\20\01\36\02\0c\20\08" "\41\04\6a\20\03\10\e9\02\20\08\41\04\6a\10\ba\01\21\02\20" "\08\41\04\6a\10\ad\09\1a\20\04\41\00\36\02\00\41\00\21\01" "\02\40\03\40\20\06\20\07\46\0d\01\20\01\0d\01\02\40\20\08" "\41\0c\6a\20\08\41\08\6a\10\bb\01\0d\00\02\40\02\40\20\02" "\20\06\28\02\00\41\00\10\a6\06\41\25\47\0d\00\20\06\41\04" "\6a\22\01\20\07\46\0d\02\41\00\21\09\02\40\02\40\20\02\20" "\01\28\02\00\41\00\10\a6\06\22\01\41\c5\00\46\0d\00\41\04" "\21\0a\20\01\41\ff\01\71\41\30\46\0d\00\20\01\21\0b\0c\01" "\0b\20\06\41\08\6a\22\09\20\07\46\0d\03\41\08\21\0a\20\02" "\20\09\28\02\00\41\00\10\a6\06\21\0b\20\01\21\09\0b\20\08" "\20\00\20\08\28\02\0c\20\08\28\02\08\20\03\20\04\20\05\20" "\0b\20\09\20\00\28\02\00\28\02\24\11\0d\00\36\02\0c\20\06" "\20\0a\6a\41\04\6a\21\06\0c\01\0b\02\40\20\02\41\01\20\06" "\28\02\00\10\bd\01\45\0d\00\02\40\03\40\02\40\20\06\41\04" "\6a\22\06\20\07\47\0d\00\20\07\21\06\0c\02\0b\20\02\41\01" "\20\06\28\02\00\10\bd\01\0d\00\0b\0b\03\40\20\08\41\0c\6a" "\20\08\41\08\6a\10\bb\01\0d\02\20\02\41\01\20\08\41\0c\6a" "\10\bc\01\10\bd\01\45\0d\02\20\08\41\0c\6a\10\be\01\1a\0c" "\00\0b\00\0b\02\40\20\02\20\08\41\0c\6a\10\bc\01\10\9a\05" "\20\02\20\06\28\02\00\10\9a\05\47\0d\00\20\06\41\04\6a\21" "\06\20\08\41\0c\6a\10\be\01\1a\0c\01\0b\20\04\41\04\36\02" "\00\0b\20\04\28\02\00\21\01\0c\01\0b\0b\20\04\41\04\36\02" "\00\0b\02\40\20\08\41\0c\6a\20\08\41\08\6a\10\bb\01\45\0d" "\00\20\04\20\04\28\02\00\41\02\72\36\02\00\0b\20\08\28\02" "\0c\21\06\20\08\41\10\6a\24\00\20\06\0b\13\00\20\00\20\01" "\20\02\20\00\28\02\00\28\02\34\11\03\00\0b\04\00\41\02\0b" "\5e\01\01\7f\23\00\41\20\6b\22\06\24\00\20\06\42\a5\80\80" "\80\b0\0a\37\03\18\20\06\42\cd\80\80\80\a0\07\37\03\10\20" "\06\42\ba\80\80\80\d0\04\37\03\08\20\06\42\a5\80\80\80\80" "\09\37\03\00\20\00\20\01\20\02\20\03\20\04\20\05\20\06\20" "\06\41\20\6a\10\a5\06\21\05\20\06\41\20\6a\24\00\20\05\0b" "\36\01\01\7f\20\00\20\01\20\02\20\03\20\04\20\05\20\00\41" "\08\6a\20\00\28\02\08\28\02\14\11\00\00\22\06\10\aa\06\20" "\06\10\aa\06\20\06\10\9b\05\41\02\74\6a\10\a5\06\0b\0a\00" "\20\00\10\ab\06\10\a4\02\0b\18\00\02\40\20\00\10\ac\06\45" "\0d\00\20\00\10\83\07\0f\0b\20\00\10\93\0b\0b\0d\00\20\00" "\10\81\07\2d\00\0b\41\07\76\0b\0a\00\20\00\10\81\07\28\02" "\04\0b\0e\00\20\00\10\81\07\2d\00\0b\41\ff\00\71\0b\56\01" "\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20\01\36\02\0c\20" "\06\41\08\6a\20\03\10\e9\02\20\06\41\08\6a\10\ba\01\21\01" "\20\06\41\08\6a\10\ad\09\1a\20\00\20\05\41\18\6a\20\06\41" "\0c\6a\20\02\20\04\20\01\10\b0\06\20\06\28\02\0c\21\01\20" "\06\41\10\6a\24\00\20\01\0b\42\00\02\40\20\02\20\03\20\00" "\41\08\6a\20\00\28\02\08\28\02\00\11\00\00\22\00\20\00\41" "\a8\01\6a\20\05\20\04\41\00\10\98\05\20\00\6b\22\00\41\a7" "\01\4a\0d\00\20\01\20\00\41\0c\6d\41\07\6f\36\02\00\0b\0b" "\56\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20\01\36\02" "\0c\20\06\41\08\6a\20\03\10\e9\02\20\06\41\08\6a\10\ba\01" "\21\01\20\06\41\08\6a\10\ad\09\1a\20\00\20\05\41\10\6a\20" "\06\41\0c\6a\20\02\20\04\20\01\10\b2\06\20\06\28\02\0c\21" "\01\20\06\41\10\6a\24\00\20\01\0b\42\00\02\40\20\02\20\03" "\20\00\41\08\6a\20\00\28\02\08\28\02\04\11\00\00\22\00\20" "\00\41\a0\02\6a\20\05\20\04\41\00\10\98\05\20\00\6b\22\00" "\41\9f\02\4a\0d\00\20\01\20\00\41\0c\6d\41\0c\6f\36\02\00" "\0b\0b\56\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20\01" "\36\02\0c\20\06\41\08\6a\20\03\10\e9\02\20\06\41\08\6a\10" "\ba\01\21\01\20\06\41\08\6a\10\ad\09\1a\20\00\20\05\41\14" "\6a\20\06\41\0c\6a\20\02\20\04\20\01\10\b4\06\20\06\28\02" "\0c\21\01\20\06\41\10\6a\24\00\20\01\0b\43\00\20\02\20\03" "\20\04\20\05\41\04\10\b5\06\21\05\02\40\20\04\2d\00\00\41" "\04\71\0d\00\20\01\20\05\41\d0\0f\6a\20\05\41\ec\0e\6a\20" "\05\20\05\41\e4\00\49\1b\20\05\41\c5\00\48\1b\41\94\71\6a" "\36\02\00\0b\0b\c9\01\01\03\7f\23\00\41\10\6b\22\05\24\00" "\20\05\20\01\36\02\0c\41\00\21\01\41\06\21\06\02\40\02\40" "\20\00\20\05\41\0c\6a\10\bb\01\0d\00\41\04\21\06\20\03\41" "\c0\00\20\00\10\bc\01\22\07\10\bd\01\45\0d\00\20\03\20\07" "\41\00\10\a6\06\21\01\02\40\03\40\20\00\10\be\01\1a\20\01" "\41\50\6a\21\01\20\00\20\05\41\0c\6a\10\bb\01\0d\01\20\04" "\41\02\48\0d\01\20\03\41\c0\00\20\00\10\bc\01\22\06\10\bd" "\01\45\0d\03\20\04\41\7f\6a\21\04\20\01\41\0a\6c\20\03\20" "\06\41\00\10\a6\06\6a\21\01\0c\00\0b\00\0b\41\02\21\06\20" "\00\20\05\41\0c\6a\10\bb\01\45\0d\01\0b\20\02\20\02\28\02" "\00\20\06\72\36\02\00\0b\20\05\41\10\6a\24\00\20\01\0b\ce" "\08\01\02\7f\23\00\41\30\6b\22\08\24\00\20\08\20\01\36\02" "\2c\20\04\41\00\36\02\00\20\08\20\03\10\e9\02\20\08\10\ba" "\01\21\09\20\08\10\ad\09\1a\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\02\40\20\06\41\bf\7f\6a\0e\39\00\01\17\04\17" "\05\17\06\07\17\17\17\0a\17\17\17\17\0e\0f\10\17\17\17\13" "\15\17\17\17\17\17\17\17\00\01\02\03\03\17\17\01\17\08\17" "\17\09\0b\17\0c\17\0d\17\0b\17\17\11\12\14\16\0b\20\00\20" "\05\41\18\6a\20\08\41\2c\6a\20\02\20\04\20\09\10\b0\06\0c" "\18\0b\20\00\20\05\41\10\6a\20\08\41\2c\6a\20\02\20\04\20" "\09\10\b2\06\0c\17\0b\20\00\41\08\6a\20\00\28\02\08\28\02" "\0c\11\00\00\21\01\20\08\20\00\20\08\28\02\2c\20\02\20\03" "\20\04\20\05\20\01\10\aa\06\20\01\10\aa\06\20\01\10\9b\05" "\41\02\74\6a\10\a5\06\36\02\2c\0c\16\0b\20\00\20\05\41\0c" "\6a\20\08\41\2c\6a\20\02\20\04\20\09\10\b7\06\0c\15\0b\20" "\08\42\a5\80\80\80\90\0f\37\03\18\20\08\42\e4\80\80\80\f0" "\05\37\03\10\20\08\42\af\80\80\80\d0\04\37\03\08\20\08\42" "\a5\80\80\80\d0\0d\37\03\00\20\08\20\00\20\01\20\02\20\03" "\20\04\20\05\20\08\20\08\41\20\6a\10\a5\06\36\02\2c\0c\14" "\0b\20\08\42\a5\80\80\80\c0\0c\37\03\18\20\08\42\ed\80\80" "\80\d0\05\37\03\10\20\08\42\ad\80\80\80\d0\04\37\03\08\20" "\08\42\a5\80\80\80\90\0b\37\03\00\20\08\20\00\20\01\20\02" "\20\03\20\04\20\05\20\08\20\08\41\20\6a\10\a5\06\36\02\2c" "\0c\13\0b\20\00\20\05\41\08\6a\20\08\41\2c\6a\20\02\20\04" "\20\09\10\b8\06\0c\12\0b\20\00\20\05\41\08\6a\20\08\41\2c" "\6a\20\02\20\04\20\09\10\b9\06\0c\11\0b\20\00\20\05\41\1c" "\6a\20\08\41\2c\6a\20\02\20\04\20\09\10\ba\06\0c\10\0b\20" "\00\20\05\41\10\6a\20\08\41\2c\6a\20\02\20\04\20\09\10\bb" "\06\0c\0f\0b\20\00\20\05\41\04\6a\20\08\41\2c\6a\20\02\20" "\04\20\09\10\bc\06\0c\0e\0b\20\00\20\08\41\2c\6a\20\02\20" "\04\20\09\10\bd\06\0c\0d\0b\20\00\20\05\41\08\6a\20\08\41" "\2c\6a\20\02\20\04\20\09\10\be\06\0c\0c\0b\20\08\41\f0\00" "\36\02\28\20\08\42\a0\80\80\80\d0\04\37\03\20\20\08\42\a5" "\80\80\80\b0\0a\37\03\18\20\08\42\cd\80\80\80\a0\07\37\03" "\10\20\08\42\ba\80\80\80\d0\04\37\03\08\20\08\42\a5\80\80" "\80\90\09\37\03\00\20\08\20\00\20\01\20\02\20\03\20\04\20" "\05\20\08\20\08\41\2c\6a\10\a5\06\36\02\2c\0c\0b\0b\20\08" "\41\cd\00\36\02\10\20\08\42\ba\80\80\80\d0\04\37\03\08\20" "\08\42\a5\80\80\80\80\09\37\03\00\20\08\20\00\20\01\20\02" "\20\03\20\04\20\05\20\08\20\08\41\14\6a\10\a5\06\36\02\2c" "\0c\0a\0b\20\00\20\05\20\08\41\2c\6a\20\02\20\04\20\09\10" "\bf\06\0c\09\0b\20\08\42\a5\80\80\80\b0\0a\37\03\18\20\08" "\42\cd\80\80\80\a0\07\37\03\10\20\08\42\ba\80\80\80\d0\04" "\37\03\08\20\08\42\a5\80\80\80\80\09\37\03\00\20\08\20\00" "\20\01\20\02\20\03\20\04\20\05\20\08\20\08\41\20\6a\10\a5" "\06\36\02\2c\0c\08\0b\20\00\20\05\41\18\6a\20\08\41\2c\6a" "\20\02\20\04\20\09\10\c0\06\0c\07\0b\20\00\20\01\20\02\20" "\03\20\04\20\05\20\00\28\02\00\28\02\14\11\05\00\21\04\0c" "\07\0b\20\00\41\08\6a\20\00\28\02\08\28\02\18\11\00\00\21" "\01\20\08\20\00\20\08\28\02\2c\20\02\20\03\20\04\20\05\20" "\01\10\aa\06\20\01\10\aa\06\20\01\10\9b\05\41\02\74\6a\10" "\a5\06\36\02\2c\0c\05\0b\20\00\20\05\41\14\6a\20\08\41\2c" "\6a\20\02\20\04\20\09\10\b4\06\0c\04\0b\20\00\20\05\41\14" "\6a\20\08\41\2c\6a\20\02\20\04\20\09\10\c1\06\0c\03\0b\20" "\06\41\25\46\0d\01\0b\20\04\20\04\28\02\00\41\04\72\36\02" "\00\0c\01\0b\20\00\20\08\41\2c\6a\20\02\20\04\20\09\10\c2" "\06\0b\20\08\28\02\2c\21\04\0b\20\08\41\30\6a\24\00\20\04" "\0b\3e\00\20\02\20\03\20\04\20\05\41\02\10\b5\06\21\05\20" "\04\28\02\00\21\03\02\40\20\05\41\7f\6a\41\1e\4b\0d\00\20" "\03\41\04\71\0d\00\20\01\20\05\36\02\00\0f\0b\20\04\20\03" "\41\04\72\36\02\00\0b\3b\00\20\02\20\03\20\04\20\05\41\02" "\10\b5\06\21\05\20\04\28\02\00\21\03\02\40\20\05\41\17\4a" "\0d\00\20\03\41\04\71\0d\00\20\01\20\05\36\02\00\0f\0b\20" "\04\20\03\41\04\72\36\02\00\0b\3e\00\20\02\20\03\20\04\20" "\05\41\02\10\b5\06\21\05\20\04\28\02\00\21\03\02\40\20\05" "\41\7f\6a\41\0b\4b\0d\00\20\03\41\04\71\0d\00\20\01\20\05" "\36\02\00\0f\0b\20\04\20\03\41\04\72\36\02\00\0b\3c\00\20" "\02\20\03\20\04\20\05\41\03\10\b5\06\21\05\20\04\28\02\00" "\21\03\02\40\20\05\41\ed\02\4a\0d\00\20\03\41\04\71\0d\00" "\20\01\20\05\36\02\00\0f\0b\20\04\20\03\41\04\72\36\02\00" "\0b\40\00\20\02\20\03\20\04\20\05\41\02\10\b5\06\21\03\20" "\04\28\02\00\21\05\02\40\20\03\41\7f\6a\22\03\41\0b\4b\0d" "\00\20\05\41\04\71\0d\00\20\01\20\03\36\02\00\0f\0b\20\04" "\20\05\41\04\72\36\02\00\0b\3b\00\20\02\20\03\20\04\20\05" "\41\02\10\b5\06\21\05\20\04\28\02\00\21\03\02\40\20\05\41" "\3b\4a\0d\00\20\03\41\04\71\0d\00\20\01\20\05\36\02\00\0f" "\0b\20\04\20\03\41\04\72\36\02\00\0b\62\01\01\7f\23\00\41" "\10\6b\22\05\24\00\20\05\20\02\36\02\0c\02\40\03\40\20\01" "\20\05\41\0c\6a\10\bb\01\0d\01\20\04\41\01\20\01\10\bc\01" "\10\bd\01\45\0d\01\20\01\10\be\01\1a\0c\00\0b\00\0b\02\40" "\20\01\20\05\41\0c\6a\10\bb\01\45\0d\00\20\03\20\03\28\02" "\00\41\02\72\36\02\00\0b\20\05\41\10\6a\24\00\0b\8a\01\00" "\02\40\20\00\41\08\6a\20\00\28\02\08\28\02\08\11\00\00\22" "\00\10\9b\05\41\00\20\00\41\0c\6a\10\9b\05\6b\47\0d\00\20" "\04\20\04\28\02\00\41\04\72\36\02\00\0f\0b\20\02\20\03\20" "\00\20\00\41\18\6a\20\05\20\04\41\00\10\98\05\21\04\20\01" "\28\02\00\21\05\02\40\20\04\20\00\47\0d\00\20\05\41\0c\47" "\0d\00\20\01\41\00\36\02\00\0f\0b\02\40\20\04\20\00\6b\41" "\0c\47\0d\00\20\05\41\0b\4a\0d\00\20\01\20\05\41\0c\6a\36" "\02\00\0b\0b\3b\00\20\02\20\03\20\04\20\05\41\02\10\b5\06" "\21\05\20\04\28\02\00\21\03\02\40\20\05\41\3c\4a\0d\00\20" "\03\41\04\71\0d\00\20\01\20\05\36\02\00\0f\0b\20\04\20\03" "\41\04\72\36\02\00\0b\3b\00\20\02\20\03\20\04\20\05\41\01" "\10\b5\06\21\05\20\04\28\02\00\21\03\02\40\20\05\41\06\4a" "\0d\00\20\03\41\04\71\0d\00\20\01\20\05\36\02\00\0f\0b\20" "\04\20\03\41\04\72\36\02\00\0b\29\00\20\02\20\03\20\04\20" "\05\41\04\10\b5\06\21\05\02\40\20\04\2d\00\00\41\04\71\0d" "\00\20\01\20\05\41\94\71\6a\36\02\00\0b\0b\67\01\01\7f\23" "\00\41\10\6b\22\05\24\00\20\05\20\02\36\02\0c\41\06\21\02" "\02\40\02\40\20\01\20\05\41\0c\6a\10\bb\01\0d\00\41\04\21" "\02\20\04\20\01\10\bc\01\41\00\10\a6\06\41\25\47\0d\00\41" "\02\21\02\20\01\10\be\01\20\05\41\0c\6a\10\bb\01\45\0d\01" "\0b\20\03\20\03\28\02\00\20\02\72\36\02\00\0b\20\05\41\10" "\6a\24\00\0b\4c\01\01\7f\23\00\41\80\01\6b\22\07\24\00\20" "\07\20\07\41\f4\00\6a\36\02\0c\20\00\41\08\6a\20\07\41\10" "\6a\20\07\41\0c\6a\20\04\20\05\20\06\10\c4\06\20\07\41\10" "\6a\20\07\28\02\0c\20\01\10\c5\06\21\00\20\07\41\80\01\6a" "\24\00\20\00\0b\68\01\01\7f\23\00\41\10\6b\22\06\24\00\20" "\06\41\00\3a\00\0f\20\06\20\05\3a\00\0e\20\06\20\04\3a\00" "\0d\20\06\41\25\3a\00\0c\02\40\20\05\45\0d\00\20\06\41\0d" "\6a\20\06\41\0e\6a\10\c6\06\0b\20\02\20\01\20\01\20\01\20" "\02\28\02\00\10\c7\06\20\06\41\0c\6a\20\03\20\00\28\02\00" "\10\b7\04\6a\36\02\00\20\06\41\10\6a\24\00\0b\2b\01\01\7f" "\23\00\41\10\6b\22\03\24\00\20\03\41\08\6a\20\00\20\01\20" "\02\10\c8\06\20\03\28\02\0c\21\02\20\03\41\10\6a\24\00\20" "\02\0b\1c\01\01\7f\20\00\2d\00\00\21\02\20\00\20\01\2d\00" "\00\3a\00\00\20\01\20\02\3a\00\00\0b\07\00\20\01\20\00\6b" "\0b\0d\00\20\00\20\01\20\02\20\03\10\95\0b\0b\4c\01\01\7f" "\23\00\41\a0\03\6b\22\07\24\00\20\07\20\07\41\a0\03\6a\36" "\02\0c\20\00\41\08\6a\20\07\41\10\6a\20\07\41\0c\6a\20\04" "\20\05\20\06\10\ca\06\20\07\41\10\6a\20\07\28\02\0c\20\01" "\10\cb\06\21\00\20\07\41\a0\03\6a\24\00\20\00\0b\82\01\01" "\01\7f\23\00\41\90\01\6b\22\06\24\00\20\06\20\06\41\84\01" "\6a\36\02\1c\20\00\20\06\41\20\6a\20\06\41\1c\6a\20\03\20" "\04\20\05\10\c4\06\20\06\42\00\37\03\10\20\06\20\06\41\20" "\6a\36\02\0c\02\40\20\01\20\06\41\0c\6a\20\01\20\02\28\02" "\00\10\cc\06\20\06\41\10\6a\20\00\28\02\00\10\cd\06\22\00" "\41\7f\47\0d\00\20\06\10\ce\06\00\0b\20\02\20\01\20\00\41" "\02\74\6a\36\02\00\20\06\41\90\01\6a\24\00\0b\2b\01\01\7f" "\23\00\41\10\6b\22\03\24\00\20\03\41\08\6a\20\00\20\01\20" "\02\10\cf\06\20\03\28\02\0c\21\02\20\03\41\10\6a\24\00\20" "\02\0b\0a\00\20\01\20\00\6b\41\02\75\0b\3f\01\01\7f\23\00" "\41\10\6b\22\05\24\00\20\05\20\04\36\02\0c\20\05\41\08\6a" "\20\05\41\0c\6a\10\92\05\21\04\20\00\20\01\20\02\20\03\10" "\c0\04\21\03\20\04\10\93\05\1a\20\05\41\10\6a\24\00\20\03" "\0b\05\00\10\19\00\0b\0d\00\20\00\20\01\20\02\20\03\10\a3" "\0b\0b\05\00\10\d1\06\0b\05\00\10\d2\06\0b\05\00\41\ff\00" "\0b\05\00\10\d1\06\0b\08\00\20\00\10\d3\01\1a\0b\08\00\20" "\00\10\d3\01\1a\0b\08\00\20\00\10\d3\01\1a\0b\0c\00\20\00" "\41\01\41\2d\10\e8\05\1a\0b\04\00\41\00\0b\0c\00\20\00\41" "\82\86\80\20\36\00\00\0b\0c\00\20\00\41\82\86\80\20\36\00" "\00\0b\05\00\10\d1\06\0b\05\00\10\d1\06\0b\08\00\20\00\10" "\d3\01\1a\0b\08\00\20\00\10\d3\01\1a\0b\08\00\20\00\10\d3" "\01\1a\0b\0c\00\20\00\41\01\41\2d\10\e8\05\1a\0b\04\00\41" "\00\0b\0c\00\20\00\41\82\86\80\20\36\00\00\0b\0c\00\20\00" "\41\82\86\80\20\36\00\00\0b\05\00\10\e5\06\0b\05\00\10\e6" "\06\0b\08\00\41\ff\ff\ff\ff\07\0b\05\00\10\e5\06\0b\08\00" "\20\00\10\d3\01\1a\0b\08\00\20\00\10\ea\06\1a\0b\2a\01\01" "\7f\23\00\41\10\6b\22\01\24\00\20\00\20\01\41\0f\6a\20\01" "\41\0e\6a\10\da\04\22\00\10\eb\06\20\01\41\10\6a\24\00\20" "\00\0b\18\00\20\00\10\82\07\22\00\42\00\37\02\00\20\00\41" "\08\6a\41\00\36\02\00\0b\08\00\20\00\10\ea\06\1a\0b\0c\00" "\20\00\41\01\41\2d\10\86\06\1a\0b\04\00\41\00\0b\0c\00\20" "\00\41\82\86\80\20\36\00\00\0b\0c\00\20\00\41\82\86\80\20" "\36\00\00\0b\05\00\10\e5\06\0b\05\00\10\e5\06\0b\08\00\20" "\00\10\d3\01\1a\0b\08\00\20\00\10\ea\06\1a\0b\08\00\20\00" "\10\ea\06\1a\0b\0c\00\20\00\41\01\41\2d\10\86\06\1a\0b\04" "\00\41\00\0b\0c\00\20\00\41\82\86\80\20\36\00\00\0b\0c\00" "\20\00\41\82\86\80\20\36\00\00\0b\76\01\02\7f\23\00\41\10" "\6b\22\02\24\00\20\01\10\e0\01\10\fb\06\20\00\20\02\41\0f" "\6a\20\02\41\0e\6a\10\fc\06\21\00\02\40\02\40\20\01\10\e3" "\01\0d\00\20\01\10\e4\01\21\01\20\00\10\dd\01\22\03\41\08" "\6a\20\01\41\08\6a\28\02\00\36\02\00\20\03\20\01\29\02\00" "\37\02\00\0c\01\0b\20\00\20\01\10\dd\02\10\8b\02\20\01\10" "\eb\01\10\9d\0d\0b\20\02\41\10\6a\24\00\20\00\0b\02\00\0b" "\0c\00\20\00\10\ab\02\20\02\10\b1\0b\0b\76\01\02\7f\23\00" "\41\10\6b\22\02\24\00\20\01\10\fe\06\10\ff\06\20\00\20\02" "\41\0f\6a\20\02\41\0e\6a\10\80\07\21\00\02\40\02\40\20\01" "\10\ac\06\0d\00\20\01\10\81\07\21\01\20\00\10\82\07\22\03" "\41\08\6a\20\01\41\08\6a\28\02\00\36\02\00\20\03\20\01\29" "\02\00\37\02\00\0c\01\0b\20\00\20\01\10\83\07\10\a4\02\20" "\01\10\ad\06\10\ab\0d\0b\20\02\41\10\6a\24\00\20\00\0b\07" "\00\20\00\10\fb\0a\0b\02\00\0b\0c\00\20\00\10\e7\0a\20\02" "\10\b2\0b\0b\07\00\20\00\10\85\0b\0b\07\00\20\00\10\fd\0a" "\0b\0a\00\20\00\10\81\07\28\02\00\0b\8a\04\01\02\7f\23\00" "\41\90\02\6b\22\07\24\00\20\07\20\02\36\02\88\02\20\07\20" "\01\36\02\8c\02\20\07\41\d7\00\36\02\10\20\07\41\98\01\6a" "\20\07\41\a0\01\6a\20\07\41\10\6a\10\df\05\21\01\20\07\41" "\90\01\6a\20\04\10\e9\02\20\07\41\90\01\6a\10\76\21\08\20" "\07\41\00\3a\00\8f\01\02\40\20\07\41\8c\02\6a\20\02\20\03" "\20\07\41\90\01\6a\20\04\10\75\20\05\20\07\41\8f\01\6a\20" "\08\20\01\20\07\41\94\01\6a\20\07\41\84\02\6a\10\86\07\45" "\0d\00\20\07\41\00\3a\00\8e\01\20\07\41\b8\f2\00\3b\00\8c" "\01\20\07\42\b0\e2\c8\99\c3\a6\8d\9b\37\37\00\84\01\20\08" "\20\07\41\84\01\6a\20\07\41\8e\01\6a\20\07\41\fa\00\6a\10" "\8e\05\1a\20\07\41\d6\00\36\02\10\20\07\41\08\6a\41\00\20" "\07\41\10\6a\10\df\05\21\08\20\07\41\10\6a\21\04\02\40\02" "\40\20\07\28\02\94\01\20\01\10\87\07\6b\41\e3\00\48\0d\00" "\20\08\20\07\28\02\94\01\20\01\10\87\07\6b\41\02\6a\10\2b" "\10\e1\05\20\08\10\87\07\45\0d\01\20\08\10\87\07\21\04\0b" "\02\40\20\07\2d\00\8f\01\45\0d\00\20\04\41\2d\3a\00\00\20" "\04\41\01\6a\21\04\0b\20\01\10\87\07\21\02\02\40\03\40\02" "\40\20\02\20\07\28\02\94\01\49\0d\00\20\04\41\00\3a\00\00" "\20\07\20\06\36\02\00\20\07\41\10\6a\41\8f\0b\20\07\10\b9" "\04\41\01\47\0d\02\20\08\10\e3\05\1a\0c\04\0b\20\04\20\07" "\41\84\01\6a\20\07\41\fa\00\6a\20\07\41\fa\00\6a\10\88\07" "\20\02\10\bb\05\20\07\41\fa\00\6a\6b\6a\2d\00\00\3a\00\00" "\20\04\41\01\6a\21\04\20\02\41\01\6a\21\02\0c\00\0b\00\0b" "\20\07\10\ce\06\00\0b\10\91\0d\00\0b\02\40\20\07\41\8c\02" "\6a\20\07\41\88\02\6a\10\77\45\0d\00\20\05\20\05\28\02\00" "\41\02\72\36\02\00\0b\20\07\28\02\8c\02\21\02\20\07\41\90" "\01\6a\10\ad\09\1a\20\01\10\e3\05\1a\20\07\41\90\02\6a\24" "\00\20\02\0b\02\00\0b\8a\0e\01\08\7f\23\00\41\90\04\6b\22" "\0b\24\00\20\0b\20\0a\36\02\88\04\20\0b\20\01\36\02\8c\04" "\02\40\02\40\20\00\20\0b\41\8c\04\6a\10\77\45\0d\00\20\05" "\20\05\28\02\00\41\04\72\36\02\00\41\00\21\00\0c\01\0b\20" "\0b\41\d7\00\36\02\4c\20\0b\20\0b\41\e8\00\6a\20\0b\41\f0" "\00\6a\20\0b\41\cc\00\6a\10\8a\07\22\0c\10\8b\07\22\0a\36" "\02\64\20\0b\20\0a\41\90\03\6a\36\02\60\20\0b\41\cc\00\6a" "\10\d3\01\21\0d\20\0b\41\c0\00\6a\10\d3\01\21\0e\20\0b\41" "\34\6a\10\d3\01\21\0f\20\0b\41\28\6a\10\d3\01\21\10\20\0b" "\41\1c\6a\10\d3\01\21\11\20\02\20\03\20\0b\41\dc\00\6a\20" "\0b\41\db\00\6a\20\0b\41\da\00\6a\20\0d\20\0e\20\0f\20\10" "\20\0b\41\18\6a\10\8c\07\20\09\20\08\10\87\07\36\02\00\20" "\04\41\80\04\71\21\12\41\00\21\03\41\00\21\01\03\40\20\01" "\21\02\02\40\02\40\02\40\02\40\20\03\41\04\46\0d\00\20\00" "\20\0b\41\8c\04\6a\10\77\0d\00\41\00\21\0a\20\02\21\01\02" "\40\02\40\02\40\02\40\02\40\02\40\20\0b\41\dc\00\6a\20\03" "\6a\2d\00\00\0e\05\01\00\04\03\05\09\0b\20\03\41\03\46\0d" "\07\02\40\20\07\41\01\20\00\10\78\10\79\45\0d\00\20\0b\41" "\10\6a\20\00\41\00\10\8d\07\20\11\20\0b\41\10\6a\10\8e\07" "\10\a2\0d\0c\02\0b\20\05\20\05\28\02\00\41\04\72\36\02\00" "\41\00\21\00\0c\06\0b\20\03\41\03\46\0d\06\0b\03\40\20\00" "\20\0b\41\8c\04\6a\10\77\0d\06\20\07\41\01\20\00\10\78\10" "\79\45\0d\06\20\0b\41\10\6a\20\00\41\00\10\8d\07\20\11\20" "\0b\41\10\6a\10\8e\07\10\a2\0d\0c\00\0b\00\0b\02\40\20\0f" "\10\e6\01\45\0d\00\20\00\10\78\41\ff\01\71\20\0f\41\00\10" "\ef\04\2d\00\00\47\0d\00\20\00\10\7a\1a\20\06\41\00\3a\00" "\00\20\0f\20\02\20\0f\10\e6\01\41\01\4b\1b\21\01\0c\06\0b" "\02\40\20\10\10\e6\01\45\0d\00\20\00\10\78\41\ff\01\71\20" "\10\41\00\10\ef\04\2d\00\00\47\0d\00\20\00\10\7a\1a\20\06" "\41\01\3a\00\00\20\10\20\02\20\10\10\e6\01\41\01\4b\1b\21" "\01\0c\06\0b\02\40\20\0f\10\e6\01\45\0d\00\20\10\10\e6\01" "\45\0d\00\20\05\20\05\28\02\00\41\04\72\36\02\00\41\00\21" "\00\0c\04\0b\02\40\20\0f\10\e6\01\0d\00\20\10\10\e6\01\45" "\0d\05\0b\20\06\20\10\10\e6\01\45\3a\00\00\0c\04\0b\02\40" "\20\03\41\02\49\0d\00\20\02\0d\00\20\12\0d\00\41\00\21\01" "\20\03\41\02\46\20\0b\2d\00\5f\41\00\47\71\45\0d\05\0b\20" "\0b\20\0e\10\c7\05\36\02\0c\20\0b\41\10\6a\20\0b\41\0c\6a" "\41\00\10\8f\07\21\0a\02\40\20\03\45\0d\00\20\03\20\0b\41" "\dc\00\6a\6a\41\7f\6a\2d\00\00\41\01\4b\0d\00\02\40\03\40" "\20\0b\20\0e\10\c8\05\36\02\0c\20\0a\20\0b\41\0c\6a\10\90" "\07\45\0d\01\20\07\41\01\20\0a\10\91\07\2c\00\00\10\79\45" "\0d\01\20\0a\10\92\07\1a\0c\00\0b\00\0b\20\0b\20\0e\10\c7" "\05\36\02\0c\02\40\20\0a\20\0b\41\0c\6a\10\93\07\22\01\20" "\11\10\e6\01\4b\0d\00\20\0b\20\11\10\c8\05\36\02\0c\20\0b" "\41\0c\6a\20\01\10\94\07\20\11\10\c8\05\20\0e\10\c7\05\10" "\95\07\0d\01\0b\20\0b\20\0e\10\c7\05\36\02\08\20\0a\20\0b" "\41\0c\6a\20\0b\41\08\6a\41\00\10\8f\07\28\02\00\36\02\00" "\0b\20\0b\20\0a\28\02\00\36\02\0c\02\40\03\40\20\0b\20\0e" "\10\c8\05\36\02\08\20\0b\41\0c\6a\20\0b\41\08\6a\10\90\07" "\45\0d\01\20\00\20\0b\41\8c\04\6a\10\77\0d\01\20\00\10\78" "\41\ff\01\71\20\0b\41\0c\6a\10\91\07\2d\00\00\47\0d\01\20" "\00\10\7a\1a\20\0b\41\0c\6a\10\92\07\1a\0c\00\0b\00\0b\20" "\12\45\0d\03\20\0b\20\0e\10\c8\05\36\02\08\20\0b\41\0c\6a" "\20\0b\41\08\6a\10\90\07\45\0d\03\20\05\20\05\28\02\00\41" "\04\72\36\02\00\41\00\21\00\0c\02\0b\02\40\03\40\20\00\20" "\0b\41\8c\04\6a\10\77\0d\01\02\40\02\40\20\07\41\c0\00\20" "\00\10\78\22\01\10\79\45\0d\00\02\40\20\09\28\02\00\22\04" "\20\0b\28\02\88\04\47\0d\00\20\08\20\09\20\0b\41\88\04\6a" "\10\96\07\20\09\28\02\00\21\04\0b\20\09\20\04\41\01\6a\36" "\02\00\20\04\20\01\3a\00\00\20\0a\41\01\6a\21\0a\0c\01\0b" "\20\0d\10\e6\01\45\0d\02\20\0a\45\0d\02\20\01\41\ff\01\71" "\20\0b\2d\00\5a\41\ff\01\71\47\0d\02\02\40\20\0b\28\02\64" "\22\01\20\0b\28\02\60\47\0d\00\20\0c\20\0b\41\e4\00\6a\20" "\0b\41\e0\00\6a\10\97\07\20\0b\28\02\64\21\01\0b\20\0b\20" "\01\41\04\6a\36\02\64\20\01\20\0a\36\02\00\41\00\21\0a\0b" "\20\00\10\7a\1a\0c\00\0b\00\0b\02\40\20\0c\10\8b\07\20\0b" "\28\02\64\22\01\46\0d\00\20\0a\45\0d\00\02\40\20\01\20\0b" "\28\02\60\47\0d\00\20\0c\20\0b\41\e4\00\6a\20\0b\41\e0\00" "\6a\10\97\07\20\0b\28\02\64\21\01\0b\20\0b\20\01\41\04\6a" "\36\02\64\20\01\20\0a\36\02\00\0b\02\40\20\0b\28\02\18\41" "\01\48\0d\00\02\40\02\40\20\00\20\0b\41\8c\04\6a\10\77\0d" "\00\20\00\10\78\41\ff\01\71\20\0b\2d\00\5b\46\0d\01\0b\20" "\05\20\05\28\02\00\41\04\72\36\02\00\41\00\21\00\0c\03\0b" "\03\40\20\00\10\7a\1a\20\0b\28\02\18\41\01\48\0d\01\02\40" "\02\40\20\00\20\0b\41\8c\04\6a\10\77\0d\00\20\07\41\c0\00" "\20\00\10\78\10\79\0d\01\0b\20\05\20\05\28\02\00\41\04\72" "\36\02\00\41\00\21\00\0c\04\0b\02\40\20\09\28\02\00\20\0b" "\28\02\88\04\47\0d\00\20\08\20\09\20\0b\41\88\04\6a\10\96" "\07\0b\20\00\10\78\21\0a\20\09\20\09\28\02\00\22\01\41\01" "\6a\36\02\00\20\01\20\0a\3a\00\00\20\0b\20\0b\28\02\18\41" "\7f\6a\36\02\18\0c\00\0b\00\0b\20\02\21\01\20\09\28\02\00" "\20\08\10\87\07\47\0d\03\20\05\20\05\28\02\00\41\04\72\36" "\02\00\41\00\21\00\0c\01\0b\02\40\20\02\45\0d\00\41\01\21" "\0a\03\40\20\0a\20\02\10\e6\01\4f\0d\01\02\40\02\40\20\00" "\20\0b\41\8c\04\6a\10\77\0d\00\20\00\10\78\41\ff\01\71\20" "\02\20\0a\10\e7\04\2d\00\00\46\0d\01\0b\20\05\20\05\28\02" "\00\41\04\72\36\02\00\41\00\21\00\0c\03\0b\20\00\10\7a\1a" "\20\0a\41\01\6a\21\0a\0c\00\0b\00\0b\41\01\21\00\20\0c\10" "\8b\07\20\0b\28\02\64\46\0d\00\41\00\21\00\20\0b\41\00\36" "\02\10\20\0d\20\0c\10\8b\07\20\0b\28\02\64\20\0b\41\10\6a" "\10\f2\04\02\40\20\0b\28\02\10\45\0d\00\20\05\20\05\28\02" "\00\41\04\72\36\02\00\0c\01\0b\41\01\21\00\0b\20\11\10\99" "\0d\1a\20\10\10\99\0d\1a\20\0f\10\99\0d\1a\20\0e\10\99\0d" "\1a\20\0d\10\99\0d\1a\20\0c\10\98\07\1a\0c\03\0b\20\02\21" "\01\0b\20\03\41\01\6a\21\03\0c\00\0b\00\0b\20\0b\41\90\04" "\6a\24\00\20\00\0b\0a\00\20\00\10\99\07\28\02\00\0b\07\00" "\20\00\41\0a\6a\0b\16\00\20\00\20\01\10\f5\0c\22\01\41\04" "\6a\20\02\10\f2\02\1a\20\01\0b\2b\01\01\7f\23\00\41\10\6b" "\22\03\24\00\20\03\20\01\36\02\0c\20\00\20\03\41\0c\6a\20" "\02\10\a2\07\21\01\20\03\41\10\6a\24\00\20\01\0b\0a\00\20" "\00\10\a3\07\28\02\00\0b\80\03\01\01\7f\23\00\41\10\6b\22" "\0a\24\00\02\40\02\40\20\00\45\0d\00\20\0a\41\04\6a\20\01" "\10\a4\07\22\01\10\a5\07\20\02\20\0a\28\02\04\36\00\00\20" "\0a\41\04\6a\20\01\10\a6\07\20\08\20\0a\41\04\6a\10\d7\01" "\1a\20\0a\41\04\6a\10\99\0d\1a\20\0a\41\04\6a\20\01\10\a7" "\07\20\07\20\0a\41\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99" "\0d\1a\20\03\20\01\10\a8\07\3a\00\00\20\04\20\01\10\a9\07" "\3a\00\00\20\0a\41\04\6a\20\01\10\aa\07\20\05\20\0a\41\04" "\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\20\0a\41\04\6a" "\20\01\10\ab\07\20\06\20\0a\41\04\6a\10\d7\01\1a\20\0a\41" "\04\6a\10\99\0d\1a\20\01\10\ac\07\21\01\0c\01\0b\20\0a\41" "\04\6a\20\01\10\ad\07\22\01\10\ae\07\20\02\20\0a\28\02\04" "\36\00\00\20\0a\41\04\6a\20\01\10\af\07\20\08\20\0a\41\04" "\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\20\0a\41\04\6a" "\20\01\10\b0\07\20\07\20\0a\41\04\6a\10\d7\01\1a\20\0a\41" "\04\6a\10\99\0d\1a\20\03\20\01\10\b1\07\3a\00\00\20\04\20" "\01\10\b2\07\3a\00\00\20\0a\41\04\6a\20\01\10\b3\07\20\05" "\20\0a\41\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\20" "\0a\41\04\6a\20\01\10\b4\07\20\06\20\0a\41\04\6a\10\d7\01" "\1a\20\0a\41\04\6a\10\99\0d\1a\20\01\10\b5\07\21\01\0b\20" "\09\20\01\36\02\00\20\0a\41\10\6a\24\00\0b\16\00\20\00\20" "\01\28\02\00\10\82\01\c0\20\01\28\02\00\10\b6\07\1a\0b\07" "\00\20\00\2c\00\00\0b\0e\00\20\00\20\01\10\b7\07\36\02\00" "\20\00\0b\0c\00\20\00\20\01\10\b8\07\41\01\73\0b\07\00\20" "\00\28\02\00\0b\11\00\20\00\20\00\28\02\00\41\01\6a\36\02" "\00\20\00\0b\0d\00\20\00\10\b9\07\20\01\10\b7\07\6b\0b\0c" "\00\20\00\41\00\20\01\6b\10\bb\07\0b\0b\00\20\00\20\01\20" "\02\10\ba\07\0b\e3\01\01\06\7f\23\00\41\10\6b\22\03\24\00" "\20\00\10\bc\07\28\02\00\21\04\02\40\02\40\20\02\28\02\00" "\20\00\10\87\07\6b\22\05\10\d2\02\41\01\76\4f\0d\00\20\05" "\41\01\74\21\05\0c\01\0b\10\d2\02\21\05\0b\20\05\41\01\20" "\05\41\01\4b\1b\21\05\20\01\28\02\00\21\06\20\00\10\87\07" "\21\07\02\40\02\40\20\04\41\d7\00\47\0d\00\41\00\21\08\0c" "\01\0b\20\00\10\87\07\21\08\0b\02\40\20\08\20\05\10\2e\22" "\08\45\0d\00\02\40\20\04\41\d7\00\46\0d\00\20\00\10\bd\07" "\1a\0b\20\03\41\d6\00\36\02\04\20\00\20\03\41\08\6a\20\08" "\20\03\41\04\6a\10\df\05\22\04\10\be\07\1a\20\04\10\e3\05" "\1a\20\01\20\00\10\87\07\20\06\20\07\6b\6a\36\02\00\20\02" "\20\00\10\87\07\20\05\6a\36\02\00\20\03\41\10\6a\24\00\0f" "\0b\10\91\0d\00\0b\e3\01\01\06\7f\23\00\41\10\6b\22\03\24" "\00\20\00\10\bf\07\28\02\00\21\04\02\40\02\40\20\02\28\02" "\00\20\00\10\8b\07\6b\22\05\10\d2\02\41\01\76\4f\0d\00\20" "\05\41\01\74\21\05\0c\01\0b\10\d2\02\21\05\0b\20\05\41\04" "\20\05\1b\21\05\20\01\28\02\00\21\06\20\00\10\8b\07\21\07" "\02\40\02\40\20\04\41\d7\00\47\0d\00\41\00\21\08\0c\01\0b" "\20\00\10\8b\07\21\08\0b\02\40\20\08\20\05\10\2e\22\08\45" "\0d\00\02\40\20\04\41\d7\00\46\0d\00\20\00\10\c0\07\1a\0b" "\20\03\41\d6\00\36\02\04\20\00\20\03\41\08\6a\20\08\20\03" "\41\04\6a\10\8a\07\22\04\10\c1\07\1a\20\04\10\98\07\1a\20" "\01\20\00\10\8b\07\20\06\20\07\6b\6a\36\02\00\20\02\20\00" "\10\8b\07\20\05\41\7c\71\6a\36\02\00\20\03\41\10\6a\24\00" "\0f\0b\10\91\0d\00\0b\0b\00\20\00\41\00\10\c3\07\20\00\0b" "\07\00\20\00\10\f6\0c\0b\07\00\20\00\10\f7\0c\0b\0a\00\20" "\00\41\04\6a\10\f3\02\0b\b3\02\01\02\7f\23\00\41\90\01\6b" "\22\07\24\00\20\07\20\02\36\02\88\01\20\07\20\01\36\02\8c" "\01\20\07\41\d7\00\36\02\14\20\07\41\18\6a\20\07\41\20\6a" "\20\07\41\14\6a\10\df\05\21\08\20\07\41\10\6a\20\04\10\e9" "\02\20\07\41\10\6a\10\76\21\01\20\07\41\00\3a\00\0f\02\40" "\20\07\41\8c\01\6a\20\02\20\03\20\07\41\10\6a\20\04\10\75" "\20\05\20\07\41\0f\6a\20\01\20\08\20\07\41\14\6a\20\07\41" "\84\01\6a\10\86\07\45\0d\00\20\06\10\9d\07\02\40\20\07\2d" "\00\0f\45\0d\00\20\06\20\01\41\2d\10\e1\02\10\a2\0d\0b\20" "\01\41\30\10\e1\02\21\01\20\08\10\87\07\21\02\20\07\28\02" "\14\22\03\41\7f\6a\21\04\20\01\41\ff\01\71\21\01\02\40\03" "\40\20\02\20\04\4f\0d\01\20\02\2d\00\00\20\01\47\0d\01\20" "\02\41\01\6a\21\02\0c\00\0b\00\0b\20\06\20\02\20\03\10\9e" "\07\1a\0b\02\40\20\07\41\8c\01\6a\20\07\41\88\01\6a\10\77" "\45\0d\00\20\05\20\05\28\02\00\41\02\72\36\02\00\0b\20\07" "\28\02\8c\01\21\02\20\07\41\10\6a\10\ad\09\1a\20\08\10\e3" "\05\1a\20\07\41\90\01\6a\24\00\20\02\0b\62\01\02\7f\23\00" "\41\10\6b\22\01\24\00\02\40\02\40\20\00\10\e3\01\45\0d\00" "\20\00\10\b0\02\21\02\20\01\41\00\3a\00\0f\20\02\20\01\41" "\0f\6a\10\b7\02\20\00\41\00\10\cf\02\0c\01\0b\20\00\10\b1" "\02\21\02\20\01\41\00\3a\00\0e\20\02\20\01\41\0e\6a\10\b7" "\02\20\00\41\00\10\b6\02\0b\20\01\41\10\6a\24\00\0b\d3\01" "\01\04\7f\23\00\41\10\6b\22\03\24\00\20\00\10\e6\01\21\04" "\20\00\10\e7\01\21\05\02\40\20\01\20\02\10\c5\02\22\06\45" "\0d\00\02\40\20\00\20\01\10\9f\07\0d\00\02\40\20\05\20\04" "\6b\20\06\4f\0d\00\20\00\20\05\20\04\20\05\6b\20\06\6a\20" "\04\20\04\41\00\41\00\10\a0\07\0b\20\00\10\d9\01\20\04\6a" "\21\05\02\40\03\40\20\01\20\02\46\0d\01\20\05\20\01\10\b7" "\02\20\01\41\01\6a\21\01\20\05\41\01\6a\21\05\0c\00\0b\00" "\0b\20\03\41\00\3a\00\0f\20\05\20\03\41\0f\6a\10\b7\02\20" "\00\20\06\20\04\6a\10\a1\07\0c\01\0b\20\00\20\03\20\01\20" "\02\20\00\10\de\01\10\df\01\22\01\10\e5\01\20\01\10\e6\01" "\10\a0\0d\1a\20\01\10\99\0d\1a\0b\20\03\41\10\6a\24\00\20" "\00\0b\1a\00\20\00\10\e5\01\20\00\10\e5\01\20\00\10\e6\01" "\6a\41\01\6a\20\01\10\b3\0b\0b\20\00\20\00\20\01\20\02\20" "\03\20\04\20\05\20\06\10\81\0b\20\00\20\03\20\05\6b\20\06" "\6a\10\cf\02\0b\1c\00\02\40\20\00\10\e3\01\45\0d\00\20\00" "\20\01\10\cf\02\0f\0b\20\00\20\01\10\b6\02\0b\16\00\20\00" "\20\01\10\f8\0c\22\01\41\04\6a\20\02\10\f2\02\1a\20\01\0b" "\07\00\20\00\10\fc\0c\0b\0b\00\20\00\41\ec\9b\01\10\e2\04" "\0b\11\00\20\00\20\01\20\01\28\02\00\28\02\2c\11\02\00\0b" "\11\00\20\00\20\01\20\01\28\02\00\28\02\20\11\02\00\0b\11" "\00\20\00\20\01\20\01\28\02\00\28\02\1c\11\02\00\0b\0f\00" "\20\00\20\00\28\02\00\28\02\0c\11\00\00\0b\0f\00\20\00\20" "\00\28\02\00\28\02\10\11\00\00\0b\11\00\20\00\20\01\20\01" "\28\02\00\28\02\14\11\02\00\0b\11\00\20\00\20\01\20\01\28" "\02\00\28\02\18\11\02\00\0b\0f\00\20\00\20\00\28\02\00\28" "\02\24\11\00\00\0b\0b\00\20\00\41\e4\9b\01\10\e2\04\0b\11" "\00\20\00\20\01\20\01\28\02\00\28\02\2c\11\02\00\0b\11\00" "\20\00\20\01\20\01\28\02\00\28\02\20\11\02\00\0b\11\00\20" "\00\20\01\20\01\28\02\00\28\02\1c\11\02\00\0b\0f\00\20\00" "\20\00\28\02\00\28\02\0c\11\00\00\0b\0f\00\20\00\20\00\28" "\02\00\28\02\10\11\00\00\0b\11\00\20\00\20\01\20\01\28\02" "\00\28\02\14\11\02\00\0b\11\00\20\00\20\01\20\01\28\02\00" "\28\02\18\11\02\00\0b\0f\00\20\00\20\00\28\02\00\28\02\24" "\11\00\00\0b\12\00\20\00\20\02\36\02\04\20\00\20\01\3a\00" "\00\20\00\0b\07\00\20\00\28\02\00\0b\0d\00\20\00\10\b9\07" "\20\01\10\b7\07\46\0b\07\00\20\00\28\02\00\0b\2f\01\01\7f" "\23\00\41\10\6b\22\03\24\00\20\00\10\b5\0b\20\01\10\b5\0b" "\20\02\10\b5\0b\20\03\41\0f\6a\10\b6\0b\21\02\20\03\41\10" "\6a\24\00\20\02\0b\32\01\01\7f\23\00\41\10\6b\22\02\24\00" "\20\02\20\00\28\02\00\36\02\0c\20\02\41\0c\6a\20\01\10\bc" "\0b\1a\20\02\28\02\0c\21\00\20\02\41\10\6a\24\00\20\00\0b" "\07\00\20\00\10\9b\07\0b\1a\01\01\7f\20\00\10\9a\07\28\02" "\00\21\01\20\00\10\9a\07\41\00\36\02\00\20\01\0b\22\00\20" "\00\20\01\10\bd\07\10\e1\05\20\01\10\bc\07\28\02\00\21\01" "\20\00\10\9b\07\20\01\36\02\00\20\00\0b\07\00\20\00\10\fa" "\0c\0b\1a\01\01\7f\20\00\10\f9\0c\28\02\00\21\01\20\00\10" "\f9\0c\41\00\36\02\00\20\01\0b\22\00\20\00\20\01\10\c0\07" "\10\c3\07\20\01\10\bf\07\28\02\00\21\01\20\00\10\fa\0c\20" "\01\36\02\00\20\00\0b\09\00\20\00\20\01\10\a6\0a\0b\2d\01" "\01\7f\20\00\10\f9\0c\28\02\00\21\02\20\00\10\f9\0c\20\01" "\36\02\00\02\40\20\02\45\0d\00\20\02\20\00\10\fa\0c\28\02" "\00\11\04\00\0b\0b\92\04\01\02\7f\23\00\41\f0\04\6b\22\07" "\24\00\20\07\20\02\36\02\e8\04\20\07\20\01\36\02\ec\04\20" "\07\41\d7\00\36\02\10\20\07\41\c8\01\6a\20\07\41\d0\01\6a" "\20\07\41\10\6a\10\ff\05\21\01\20\07\41\c0\01\6a\20\04\10" "\e9\02\20\07\41\c0\01\6a\10\ba\01\21\08\20\07\41\00\3a\00" "\bf\01\02\40\20\07\41\ec\04\6a\20\02\20\03\20\07\41\c0\01" "\6a\20\04\10\75\20\05\20\07\41\bf\01\6a\20\08\20\01\20\07" "\41\c4\01\6a\20\07\41\e0\04\6a\10\c5\07\45\0d\00\20\07\41" "\00\3a\00\be\01\20\07\41\b8\f2\00\3b\00\bc\01\20\07\42\b0" "\e2\c8\99\c3\a6\8d\9b\37\37\00\b4\01\20\08\20\07\41\b4\01" "\6a\20\07\41\be\01\6a\20\07\41\80\01\6a\10\b6\05\1a\20\07" "\41\d6\00\36\02\10\20\07\41\08\6a\41\00\20\07\41\10\6a\10" "\df\05\21\08\20\07\41\10\6a\21\04\02\40\02\40\20\07\28\02" "\c4\01\20\01\10\c6\07\6b\41\89\03\48\0d\00\20\08\20\07\28" "\02\c4\01\20\01\10\c6\07\6b\41\02\75\41\02\6a\10\2b\10\e1" "\05\20\08\10\87\07\45\0d\01\20\08\10\87\07\21\04\0b\02\40" "\20\07\2d\00\bf\01\45\0d\00\20\04\41\2d\3a\00\00\20\04\41" "\01\6a\21\04\0b\20\01\10\c6\07\21\02\02\40\03\40\02\40\20" "\02\20\07\28\02\c4\01\49\0d\00\20\04\41\00\3a\00\00\20\07" "\20\06\36\02\00\20\07\41\10\6a\41\8f\0b\20\07\10\b9\04\41" "\01\47\0d\02\20\08\10\e3\05\1a\0c\04\0b\20\04\20\07\41\b4" "\01\6a\20\07\41\80\01\6a\20\07\41\80\01\6a\10\c7\07\20\02" "\10\c2\05\20\07\41\80\01\6a\6b\41\02\75\6a\2d\00\00\3a\00" "\00\20\04\41\01\6a\21\04\20\02\41\04\6a\21\02\0c\00\0b\00" "\0b\20\07\10\ce\06\00\0b\10\91\0d\00\0b\02\40\20\07\41\ec" "\04\6a\20\07\41\e8\04\6a\10\bb\01\45\0d\00\20\05\20\05\28" "\02\00\41\02\72\36\02\00\0b\20\07\28\02\ec\04\21\02\20\07" "\41\c0\01\6a\10\ad\09\1a\20\01\10\82\06\1a\20\07\41\f0\04" "\6a\24\00\20\02\0b\8a\0e\01\08\7f\23\00\41\90\04\6b\22\0b" "\24\00\20\0b\20\0a\36\02\88\04\20\0b\20\01\36\02\8c\04\02" "\40\02\40\20\00\20\0b\41\8c\04\6a\10\bb\01\45\0d\00\20\05" "\20\05\28\02\00\41\04\72\36\02\00\41\00\21\00\0c\01\0b\20" "\0b\41\d7\00\36\02\48\20\0b\20\0b\41\e8\00\6a\20\0b\41\f0" "\00\6a\20\0b\41\c8\00\6a\10\8a\07\22\0c\10\8b\07\22\0a\36" "\02\64\20\0b\20\0a\41\90\03\6a\36\02\60\20\0b\41\c8\00\6a" "\10\d3\01\21\0d\20\0b\41\3c\6a\10\ea\06\21\0e\20\0b\41\30" "\6a\10\ea\06\21\0f\20\0b\41\24\6a\10\ea\06\21\10\20\0b\41" "\18\6a\10\ea\06\21\11\20\02\20\03\20\0b\41\dc\00\6a\20\0b" "\41\d8\00\6a\20\0b\41\d4\00\6a\20\0d\20\0e\20\0f\20\10\20" "\0b\41\14\6a\10\c9\07\20\09\20\08\10\c6\07\36\02\00\20\04" "\41\80\04\71\21\12\41\00\21\03\41\00\21\01\03\40\20\01\21" "\02\02\40\02\40\02\40\02\40\20\03\41\04\46\0d\00\20\00\20" "\0b\41\8c\04\6a\10\bb\01\0d\00\41\00\21\0a\20\02\21\01\02" "\40\02\40\02\40\02\40\02\40\02\40\20\0b\41\dc\00\6a\20\03" "\6a\2d\00\00\0e\05\01\00\04\03\05\09\0b\20\03\41\03\46\0d" "\07\02\40\20\07\41\01\20\00\10\bc\01\10\bd\01\45\0d\00\20" "\0b\41\0c\6a\20\00\41\00\10\ca\07\20\11\20\0b\41\0c\6a\10" "\cb\07\10\b0\0d\0c\02\0b\20\05\20\05\28\02\00\41\04\72\36" "\02\00\41\00\21\00\0c\06\0b\20\03\41\03\46\0d\06\0b\03\40" "\20\00\20\0b\41\8c\04\6a\10\bb\01\0d\06\20\07\41\01\20\00" "\10\bc\01\10\bd\01\45\0d\06\20\0b\41\0c\6a\20\00\41\00\10" "\ca\07\20\11\20\0b\41\0c\6a\10\cb\07\10\b0\0d\0c\00\0b\00" "\0b\02\40\20\0f\10\9b\05\45\0d\00\20\00\10\bc\01\20\0f\41" "\00\10\cc\07\28\02\00\47\0d\00\20\00\10\be\01\1a\20\06\41" "\00\3a\00\00\20\0f\20\02\20\0f\10\9b\05\41\01\4b\1b\21\01" "\0c\06\0b\02\40\20\10\10\9b\05\45\0d\00\20\00\10\bc\01\20" "\10\41\00\10\cc\07\28\02\00\47\0d\00\20\00\10\be\01\1a\20" "\06\41\01\3a\00\00\20\10\20\02\20\10\10\9b\05\41\01\4b\1b" "\21\01\0c\06\0b\02\40\20\0f\10\9b\05\45\0d\00\20\10\10\9b" "\05\45\0d\00\20\05\20\05\28\02\00\41\04\72\36\02\00\41\00" "\21\00\0c\04\0b\02\40\20\0f\10\9b\05\0d\00\20\10\10\9b\05" "\45\0d\05\0b\20\06\20\10\10\9b\05\45\3a\00\00\0c\04\0b\02" "\40\20\03\41\02\49\0d\00\20\02\0d\00\20\12\0d\00\41\00\21" "\01\20\03\41\02\46\20\0b\2d\00\5f\41\00\47\71\45\0d\05\0b" "\20\0b\20\0e\10\eb\05\36\02\08\20\0b\41\0c\6a\20\0b\41\08" "\6a\41\00\10\cd\07\21\0a\02\40\20\03\45\0d\00\20\03\20\0b" "\41\dc\00\6a\6a\41\7f\6a\2d\00\00\41\01\4b\0d\00\02\40\03" "\40\20\0b\20\0e\10\ec\05\36\02\08\20\0a\20\0b\41\08\6a\10" "\ce\07\45\0d\01\20\07\41\01\20\0a\10\cf\07\28\02\00\10\bd" "\01\45\0d\01\20\0a\10\d0\07\1a\0c\00\0b\00\0b\20\0b\20\0e" "\10\eb\05\36\02\08\02\40\20\0a\20\0b\41\08\6a\10\d1\07\22" "\01\20\11\10\9b\05\4b\0d\00\20\0b\20\11\10\ec\05\36\02\08" "\20\0b\41\08\6a\20\01\10\d2\07\20\11\10\ec\05\20\0e\10\eb" "\05\10\d3\07\0d\01\0b\20\0b\20\0e\10\eb\05\36\02\04\20\0a" "\20\0b\41\08\6a\20\0b\41\04\6a\41\00\10\cd\07\28\02\00\36" "\02\00\0b\20\0b\20\0a\28\02\00\36\02\08\02\40\03\40\20\0b" "\20\0e\10\ec\05\36\02\04\20\0b\41\08\6a\20\0b\41\04\6a\10" "\ce\07\45\0d\01\20\00\20\0b\41\8c\04\6a\10\bb\01\0d\01\20" "\00\10\bc\01\20\0b\41\08\6a\10\cf\07\28\02\00\47\0d\01\20" "\00\10\be\01\1a\20\0b\41\08\6a\10\d0\07\1a\0c\00\0b\00\0b" "\20\12\45\0d\03\20\0b\20\0e\10\ec\05\36\02\04\20\0b\41\08" "\6a\20\0b\41\04\6a\10\ce\07\45\0d\03\20\05\20\05\28\02\00" "\41\04\72\36\02\00\41\00\21\00\0c\02\0b\02\40\03\40\20\00" "\20\0b\41\8c\04\6a\10\bb\01\0d\01\02\40\02\40\20\07\41\c0" "\00\20\00\10\bc\01\22\01\10\bd\01\45\0d\00\02\40\20\09\28" "\02\00\22\04\20\0b\28\02\88\04\47\0d\00\20\08\20\09\20\0b" "\41\88\04\6a\10\d4\07\20\09\28\02\00\21\04\0b\20\09\20\04" "\41\04\6a\36\02\00\20\04\20\01\36\02\00\20\0a\41\01\6a\21" "\0a\0c\01\0b\20\0d\10\e6\01\45\0d\02\20\0a\45\0d\02\20\01" "\20\0b\28\02\54\47\0d\02\02\40\20\0b\28\02\64\22\01\20\0b" "\28\02\60\47\0d\00\20\0c\20\0b\41\e4\00\6a\20\0b\41\e0\00" "\6a\10\97\07\20\0b\28\02\64\21\01\0b\20\0b\20\01\41\04\6a" "\36\02\64\20\01\20\0a\36\02\00\41\00\21\0a\0b\20\00\10\be" "\01\1a\0c\00\0b\00\0b\02\40\20\0c\10\8b\07\20\0b\28\02\64" "\22\01\46\0d\00\20\0a\45\0d\00\02\40\20\01\20\0b\28\02\60" "\47\0d\00\20\0c\20\0b\41\e4\00\6a\20\0b\41\e0\00\6a\10\97" "\07\20\0b\28\02\64\21\01\0b\20\0b\20\01\41\04\6a\36\02\64" "\20\01\20\0a\36\02\00\0b\02\40\20\0b\28\02\14\41\01\48\0d" "\00\02\40\02\40\20\00\20\0b\41\8c\04\6a\10\bb\01\0d\00\20" "\00\10\bc\01\20\0b\28\02\58\46\0d\01\0b\20\05\20\05\28\02" "\00\41\04\72\36\02\00\41\00\21\00\0c\03\0b\03\40\20\00\10" "\be\01\1a\20\0b\28\02\14\41\01\48\0d\01\02\40\02\40\20\00" "\20\0b\41\8c\04\6a\10\bb\01\0d\00\20\07\41\c0\00\20\00\10" "\bc\01\10\bd\01\0d\01\0b\20\05\20\05\28\02\00\41\04\72\36" "\02\00\41\00\21\00\0c\04\0b\02\40\20\09\28\02\00\20\0b\28" "\02\88\04\47\0d\00\20\08\20\09\20\0b\41\88\04\6a\10\d4\07" "\0b\20\00\10\bc\01\21\0a\20\09\20\09\28\02\00\22\01\41\04" "\6a\36\02\00\20\01\20\0a\36\02\00\20\0b\20\0b\28\02\14\41" "\7f\6a\36\02\14\0c\00\0b\00\0b\20\02\21\01\20\09\28\02\00" "\20\08\10\c6\07\47\0d\03\20\05\20\05\28\02\00\41\04\72\36" "\02\00\41\00\21\00\0c\01\0b\02\40\20\02\45\0d\00\41\01\21" "\0a\03\40\20\0a\20\02\10\9b\05\4f\0d\01\02\40\02\40\20\00" "\20\0b\41\8c\04\6a\10\bb\01\0d\00\20\00\10\bc\01\20\02\20" "\0a\10\9c\05\28\02\00\46\0d\01\0b\20\05\20\05\28\02\00\41" "\04\72\36\02\00\41\00\21\00\0c\03\0b\20\00\10\be\01\1a\20" "\0a\41\01\6a\21\0a\0c\00\0b\00\0b\41\01\21\00\20\0c\10\8b" "\07\20\0b\28\02\64\46\0d\00\41\00\21\00\20\0b\41\00\36\02" "\0c\20\0d\20\0c\10\8b\07\20\0b\28\02\64\20\0b\41\0c\6a\10" "\f2\04\02\40\20\0b\28\02\0c\45\0d\00\20\05\20\05\28\02\00" "\41\04\72\36\02\00\0c\01\0b\41\01\21\00\0b\20\11\10\a7\0d" "\1a\20\10\10\a7\0d\1a\20\0f\10\a7\0d\1a\20\0e\10\a7\0d\1a" "\20\0d\10\99\0d\1a\20\0c\10\98\07\1a\0c\03\0b\20\02\21\01" "\0b\20\03\41\01\6a\21\03\0c\00\0b\00\0b\20\0b\41\90\04\6a" "\24\00\20\00\0b\0a\00\20\00\10\d5\07\28\02\00\0b\07\00\20" "\00\41\28\6a\0b\16\00\20\00\20\01\10\fd\0c\22\01\41\04\6a" "\20\02\10\f2\02\1a\20\01\0b\80\03\01\01\7f\23\00\41\10\6b" "\22\0a\24\00\02\40\02\40\20\00\45\0d\00\20\0a\41\04\6a\20" "\01\10\e5\07\22\01\10\e6\07\20\02\20\0a\28\02\04\36\00\00" "\20\0a\41\04\6a\20\01\10\e7\07\20\08\20\0a\41\04\6a\10\e8" "\07\1a\20\0a\41\04\6a\10\a7\0d\1a\20\0a\41\04\6a\20\01\10" "\e9\07\20\07\20\0a\41\04\6a\10\e8\07\1a\20\0a\41\04\6a\10" "\a7\0d\1a\20\03\20\01\10\ea\07\36\02\00\20\04\20\01\10\eb" "\07\36\02\00\20\0a\41\04\6a\20\01\10\ec\07\20\05\20\0a\41" "\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\20\0a\41\04" "\6a\20\01\10\ed\07\20\06\20\0a\41\04\6a\10\e8\07\1a\20\0a" "\41\04\6a\10\a7\0d\1a\20\01\10\ee\07\21\01\0c\01\0b\20\0a" "\41\04\6a\20\01\10\ef\07\22\01\10\f0\07\20\02\20\0a\28\02" "\04\36\00\00\20\0a\41\04\6a\20\01\10\f1\07\20\08\20\0a\41" "\04\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d\1a\20\0a\41\04" "\6a\20\01\10\f2\07\20\07\20\0a\41\04\6a\10\e8\07\1a\20\0a" "\41\04\6a\10\a7\0d\1a\20\03\20\01\10\f3\07\36\02\00\20\04" "\20\01\10\f4\07\36\02\00\20\0a\41\04\6a\20\01\10\f5\07\20" "\05\20\0a\41\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a" "\20\0a\41\04\6a\20\01\10\f6\07\20\06\20\0a\41\04\6a\10\e8" "\07\1a\20\0a\41\04\6a\10\a7\0d\1a\20\01\10\f7\07\21\01\0b" "\20\09\20\01\36\02\00\20\0a\41\10\6a\24\00\0b\15\00\20\00" "\20\01\28\02\00\10\c5\01\20\01\28\02\00\10\f8\07\1a\0b\07" "\00\20\00\28\02\00\0b\0d\00\20\00\10\f0\05\20\01\41\02\74" "\6a\0b\0e\00\20\00\20\01\10\f9\07\36\02\00\20\00\0b\0c\00" "\20\00\20\01\10\fa\07\41\01\73\0b\07\00\20\00\28\02\00\0b" "\11\00\20\00\20\00\28\02\00\41\04\6a\36\02\00\20\00\0b\10" "\00\20\00\10\fb\07\20\01\10\f9\07\6b\41\02\75\0b\0c\00\20" "\00\41\00\20\01\6b\10\fd\07\0b\0b\00\20\00\20\01\20\02\10" "\fc\07\0b\e3\01\01\06\7f\23\00\41\10\6b\22\03\24\00\20\00" "\10\fe\07\28\02\00\21\04\02\40\02\40\20\02\28\02\00\20\00" "\10\c6\07\6b\22\05\10\d2\02\41\01\76\4f\0d\00\20\05\41\01" "\74\21\05\0c\01\0b\10\d2\02\21\05\0b\20\05\41\04\20\05\1b" "\21\05\20\01\28\02\00\21\06\20\00\10\c6\07\21\07\02\40\02" "\40\20\04\41\d7\00\47\0d\00\41\00\21\08\0c\01\0b\20\00\10" "\c6\07\21\08\0b\02\40\20\08\20\05\10\2e\22\08\45\0d\00\02" "\40\20\04\41\d7\00\46\0d\00\20\00\10\ff\07\1a\0b\20\03\41" "\d6\00\36\02\04\20\00\20\03\41\08\6a\20\08\20\03\41\04\6a" "\10\ff\05\22\04\10\80\08\1a\20\04\10\82\06\1a\20\01\20\00" "\10\c6\07\20\06\20\07\6b\6a\36\02\00\20\02\20\00\10\c6\07" "\20\05\41\7c\71\6a\36\02\00\20\03\41\10\6a\24\00\0f\0b\10" "\91\0d\00\0b\07\00\20\00\10\fe\0c\0b\ad\02\01\02\7f\23\00" "\41\c0\03\6b\22\07\24\00\20\07\20\02\36\02\b8\03\20\07\20" "\01\36\02\bc\03\20\07\41\d7\00\36\02\14\20\07\41\18\6a\20" "\07\41\20\6a\20\07\41\14\6a\10\ff\05\21\08\20\07\41\10\6a" "\20\04\10\e9\02\20\07\41\10\6a\10\ba\01\21\01\20\07\41\00" "\3a\00\0f\02\40\20\07\41\bc\03\6a\20\02\20\03\20\07\41\10" "\6a\20\04\10\75\20\05\20\07\41\0f\6a\20\01\20\08\20\07\41" "\14\6a\20\07\41\b0\03\6a\10\c5\07\45\0d\00\20\06\10\d7\07" "\02\40\20\07\2d\00\0f\45\0d\00\20\06\20\01\41\2d\10\e3\02" "\10\b0\0d\0b\20\01\41\30\10\e3\02\21\01\20\08\10\c6\07\21" "\02\20\07\28\02\14\22\03\41\7c\6a\21\04\02\40\03\40\20\02" "\20\04\4f\0d\01\20\02\28\02\00\20\01\47\0d\01\20\02\41\04" "\6a\21\02\0c\00\0b\00\0b\20\06\20\02\20\03\10\d8\07\1a\0b" "\02\40\20\07\41\bc\03\6a\20\07\41\b8\03\6a\10\bb\01\45\0d" "\00\20\05\20\05\28\02\00\41\02\72\36\02\00\0b\20\07\28\02" "\bc\03\21\02\20\07\41\10\6a\10\ad\09\1a\20\08\10\82\06\1a" "\20\07\41\c0\03\6a\24\00\20\02\0b\62\01\02\7f\23\00\41\10" "\6b\22\01\24\00\02\40\02\40\20\00\10\ac\06\45\0d\00\20\00" "\10\d9\07\21\02\20\01\41\00\36\02\0c\20\02\20\01\41\0c\6a" "\10\da\07\20\00\41\00\10\db\07\0c\01\0b\20\00\10\dc\07\21" "\02\20\01\41\00\36\02\08\20\02\20\01\41\08\6a\10\da\07\20" "\00\41\00\10\dd\07\0b\20\01\41\10\6a\24\00\0b\d9\01\01\04" "\7f\23\00\41\10\6b\22\03\24\00\20\00\10\9b\05\21\04\20\00" "\10\de\07\21\05\02\40\20\01\20\02\10\df\07\22\06\45\0d\00" "\02\40\20\00\20\01\10\e0\07\0d\00\02\40\20\05\20\04\6b\20" "\06\4f\0d\00\20\00\20\05\20\04\20\05\6b\20\06\6a\20\04\20" "\04\41\00\41\00\10\e1\07\0b\20\00\10\f0\05\20\04\41\02\74" "\6a\21\05\02\40\03\40\20\01\20\02\46\0d\01\20\05\20\01\10" "\da\07\20\01\41\04\6a\21\01\20\05\41\04\6a\21\05\0c\00\0b" "\00\0b\20\03\41\00\36\02\04\20\05\20\03\41\04\6a\10\da\07" "\20\00\20\06\20\04\6a\10\e2\07\0c\01\0b\20\00\20\03\41\04" "\6a\20\01\20\02\20\00\10\e3\07\10\e4\07\22\01\10\aa\06\20" "\01\10\9b\05\10\ae\0d\1a\20\01\10\a7\0d\1a\0b\20\03\41\10" "\6a\24\00\20\00\0b\0a\00\20\00\10\82\07\28\02\00\0b\0c\00" "\20\00\20\01\28\02\00\36\02\00\0b\0c\00\20\00\10\82\07\20" "\01\36\02\04\0b\0a\00\20\00\10\82\07\10\f7\0a\0b\31\01\01" "\7f\20\00\10\82\07\22\02\20\02\2d\00\0b\41\80\01\71\20\01" "\41\ff\00\71\72\3a\00\0b\20\00\10\82\07\22\00\20\00\2d\00" "\0b\41\ff\00\71\3a\00\0b\0b\1f\01\01\7f\41\01\21\01\02\40" "\20\00\10\ac\06\45\0d\00\20\00\10\84\0b\41\7f\6a\21\01\0b" "\20\01\0b\09\00\20\00\20\01\10\be\0b\0b\1d\00\20\00\10\aa" "\06\20\00\10\aa\06\20\00\10\9b\05\41\02\74\6a\41\04\6a\20" "\01\10\bf\0b\0b\20\00\20\00\20\01\20\02\20\03\20\04\20\05" "\20\06\10\bd\0b\20\00\20\03\20\05\6b\20\06\6a\10\db\07\0b" "\1c\00\02\40\20\00\10\ac\06\45\0d\00\20\00\20\01\10\db\07" "\0f\0b\20\00\20\01\10\dd\07\0b\07\00\20\00\10\f9\0a\0b\2b" "\01\01\7f\23\00\41\10\6b\22\04\24\00\20\00\20\04\41\0f\6a" "\20\03\10\c0\0b\22\03\20\01\20\02\10\c1\0b\20\04\41\10\6a" "\24\00\20\03\0b\0b\00\20\00\41\fc\9b\01\10\e2\04\0b\11\00" "\20\00\20\01\20\01\28\02\00\28\02\2c\11\02\00\0b\11\00\20" "\00\20\01\20\01\28\02\00\28\02\20\11\02\00\0b\0b\00\20\00" "\20\01\10\81\08\20\00\0b\11\00\20\00\20\01\20\01\28\02\00" "\28\02\1c\11\02\00\0b\0f\00\20\00\20\00\28\02\00\28\02\0c" "\11\00\00\0b\0f\00\20\00\20\00\28\02\00\28\02\10\11\00\00" "\0b\11\00\20\00\20\01\20\01\28\02\00\28\02\14\11\02\00\0b" "\11\00\20\00\20\01\20\01\28\02\00\28\02\18\11\02\00\0b\0f" "\00\20\00\20\00\28\02\00\28\02\24\11\00\00\0b\0b\00\20\00" "\41\f4\9b\01\10\e2\04\0b\11\00\20\00\20\01\20\01\28\02\00" "\28\02\2c\11\02\00\0b\11\00\20\00\20\01\20\01\28\02\00\28" "\02\20\11\02\00\0b\11\00\20\00\20\01\20\01\28\02\00\28\02" "\1c\11\02\00\0b\0f\00\20\00\20\00\28\02\00\28\02\0c\11\00" "\00\0b\0f\00\20\00\20\00\28\02\00\28\02\10\11\00\00\0b\11" "\00\20\00\20\01\20\01\28\02\00\28\02\14\11\02\00\0b\11\00" "\20\00\20\01\20\01\28\02\00\28\02\18\11\02\00\0b\0f\00\20" "\00\20\00\28\02\00\28\02\24\11\00\00\0b\12\00\20\00\20\02" "\36\02\04\20\00\20\01\36\02\00\20\00\0b\07\00\20\00\28\02" "\00\0b\0d\00\20\00\10\fb\07\20\01\10\f9\07\46\0b\07\00\20" "\00\28\02\00\0b\2f\01\01\7f\23\00\41\10\6b\22\03\24\00\20" "\00\10\c5\0b\20\01\10\c5\0b\20\02\10\c5\0b\20\03\41\0f\6a" "\10\c6\0b\21\02\20\03\41\10\6a\24\00\20\02\0b\32\01\01\7f" "\23\00\41\10\6b\22\02\24\00\20\02\20\00\28\02\00\36\02\0c" "\20\02\41\0c\6a\20\01\10\cc\0b\1a\20\02\28\02\0c\21\00\20" "\02\41\10\6a\24\00\20\00\0b\07\00\20\00\10\94\08\0b\1a\01" "\01\7f\20\00\10\93\08\28\02\00\21\01\20\00\10\93\08\41\00" "\36\02\00\20\01\0b\22\00\20\00\20\01\10\ff\07\10\80\06\20" "\01\10\fe\07\28\02\00\21\01\20\00\10\94\08\20\01\36\02\00" "\20\00\0b\7d\01\02\7f\23\00\41\10\6b\22\02\24\00\02\40\20" "\00\10\ac\06\45\0d\00\20\00\10\e3\07\20\00\10\d9\07\20\00" "\10\84\0b\10\82\0b\0b\20\00\20\01\10\cd\0b\20\01\10\82\07" "\21\03\20\00\10\82\07\22\00\41\08\6a\20\03\41\08\6a\28\02" "\00\36\02\00\20\00\20\03\29\02\00\37\02\00\20\01\41\00\10" "\dd\07\20\01\10\dc\07\21\00\20\02\41\00\36\02\0c\20\00\20" "\02\41\0c\6a\10\da\07\20\02\41\10\6a\24\00\0b\fe\04\01\0c" "\7f\23\00\41\c0\03\6b\22\07\24\00\20\07\20\05\37\03\10\20" "\07\20\06\37\03\18\20\07\20\07\41\d0\02\6a\36\02\cc\02\20" "\07\41\d0\02\6a\41\e4\00\41\89\0b\20\07\41\10\6a\10\9c\04" "\21\08\20\07\41\d6\00\36\02\e0\01\41\00\21\09\20\07\41\d8" "\01\6a\41\00\20\07\41\e0\01\6a\10\df\05\21\0a\20\07\41\d6" "\00\36\02\e0\01\20\07\41\d0\01\6a\41\00\20\07\41\e0\01\6a" "\10\df\05\21\0b\20\07\41\e0\01\6a\21\0c\02\40\02\40\20\08" "\41\e4\00\49\0d\00\10\8f\05\21\08\20\07\20\05\37\03\00\20" "\07\20\06\37\03\08\20\07\41\cc\02\6a\20\08\41\89\0b\20\07" "\10\e0\05\22\08\41\7f\46\0d\01\20\0a\20\07\28\02\cc\02\10" "\e1\05\20\0b\20\08\10\2b\10\e1\05\20\0b\41\00\10\83\08\0d" "\01\20\0b\10\87\07\21\0c\0b\20\07\41\cc\01\6a\20\03\10\e9" "\02\20\07\41\cc\01\6a\10\76\22\0d\20\07\28\02\cc\02\22\0e" "\20\0e\20\08\6a\20\0c\10\8e\05\1a\02\40\20\08\41\01\48\0d" "\00\20\07\28\02\cc\02\2d\00\00\41\2d\46\21\09\0b\20\02\20" "\09\20\07\41\cc\01\6a\20\07\41\c8\01\6a\20\07\41\c7\01\6a" "\20\07\41\c6\01\6a\20\07\41\b8\01\6a\10\d3\01\22\0f\20\07" "\41\ac\01\6a\10\d3\01\22\0e\20\07\41\a0\01\6a\10\d3\01\22" "\10\20\07\41\9c\01\6a\10\84\08\20\07\41\d6\00\36\02\30\20" "\07\41\28\6a\41\00\20\07\41\30\6a\10\df\05\21\11\02\40\02" "\40\20\08\20\07\28\02\9c\01\22\02\4c\0d\00\20\10\10\e6\01" "\20\08\20\02\6b\41\01\74\6a\20\0e\10\e6\01\6a\20\07\28\02" "\9c\01\6a\41\01\6a\21\12\0c\01\0b\20\10\10\e6\01\20\0e\10" "\e6\01\6a\20\07\28\02\9c\01\6a\41\02\6a\21\12\0b\20\07\41" "\30\6a\21\02\02\40\20\12\41\e5\00\49\0d\00\20\11\20\12\10" "\2b\10\e1\05\20\11\10\87\07\22\02\45\0d\01\0b\20\02\20\07" "\41\24\6a\20\07\41\20\6a\20\03\10\75\20\0c\20\0c\20\08\6a" "\20\0d\20\09\20\07\41\c8\01\6a\20\07\2c\00\c7\01\20\07\2c" "\00\c6\01\20\0f\20\0e\20\10\20\07\28\02\9c\01\10\85\08\20" "\01\20\02\20\07\28\02\24\20\07\28\02\20\20\03\20\04\10\d4" "\05\21\08\20\11\10\e3\05\1a\20\10\10\99\0d\1a\20\0e\10\99" "\0d\1a\20\0f\10\99\0d\1a\20\07\41\cc\01\6a\10\ad\09\1a\20" "\0b\10\e3\05\1a\20\0a\10\e3\05\1a\20\07\41\c0\03\6a\24\00" "\20\08\0f\0b\10\91\0d\00\0b\0a\00\20\00\10\86\08\41\01\73" "\0b\c6\03\01\01\7f\23\00\41\10\6b\22\0a\24\00\02\40\02\40" "\20\00\45\0d\00\20\02\10\a4\07\21\02\02\40\02\40\20\01\45" "\0d\00\20\0a\41\04\6a\20\02\10\a5\07\20\03\20\0a\28\02\04" "\36\00\00\20\0a\41\04\6a\20\02\10\a6\07\20\08\20\0a\41\04" "\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\0c\01\0b\20\0a" "\41\04\6a\20\02\10\87\08\20\03\20\0a\28\02\04\36\00\00\20" "\0a\41\04\6a\20\02\10\a7\07\20\08\20\0a\41\04\6a\10\d7\01" "\1a\20\0a\41\04\6a\10\99\0d\1a\0b\20\04\20\02\10\a8\07\3a" "\00\00\20\05\20\02\10\a9\07\3a\00\00\20\0a\41\04\6a\20\02" "\10\aa\07\20\06\20\0a\41\04\6a\10\d7\01\1a\20\0a\41\04\6a" "\10\99\0d\1a\20\0a\41\04\6a\20\02\10\ab\07\20\07\20\0a\41" "\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\20\02\10\ac" "\07\21\02\0c\01\0b\20\02\10\ad\07\21\02\02\40\02\40\20\01" "\45\0d\00\20\0a\41\04\6a\20\02\10\ae\07\20\03\20\0a\28\02" "\04\36\00\00\20\0a\41\04\6a\20\02\10\af\07\20\08\20\0a\41" "\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\0c\01\0b\20" "\0a\41\04\6a\20\02\10\88\08\20\03\20\0a\28\02\04\36\00\00" "\20\0a\41\04\6a\20\02\10\b0\07\20\08\20\0a\41\04\6a\10\d7" "\01\1a\20\0a\41\04\6a\10\99\0d\1a\0b\20\04\20\02\10\b1\07" "\3a\00\00\20\05\20\02\10\b2\07\3a\00\00\20\0a\41\04\6a\20" "\02\10\b3\07\20\06\20\0a\41\04\6a\10\d7\01\1a\20\0a\41\04" "\6a\10\99\0d\1a\20\0a\41\04\6a\20\02\10\b4\07\20\07\20\0a" "\41\04\6a\10\d7\01\1a\20\0a\41\04\6a\10\99\0d\1a\20\02\10" "\b5\07\21\02\0b\20\09\20\02\36\02\00\20\0a\41\10\6a\24\00" "\0b\9e\06\01\0a\7f\23\00\41\10\6b\22\0f\24\00\20\02\20\00" "\36\02\00\20\03\41\80\04\71\21\10\41\00\21\11\03\40\02\40" "\20\11\41\04\47\0d\00\02\40\20\0d\10\e6\01\41\01\4d\0d\00" "\20\0f\20\0d\10\89\08\36\02\0c\20\02\20\0f\41\0c\6a\41\01" "\10\8a\08\20\0d\10\8b\08\20\02\28\02\00\10\8c\08\36\02\00" "\0b\02\40\20\03\41\b0\01\71\22\12\41\10\46\0d\00\02\40\20" "\12\41\20\47\0d\00\20\02\28\02\00\21\00\0b\20\01\20\00\36" "\02\00\0b\20\0f\41\10\6a\24\00\0f\0b\02\40\02\40\02\40\02" "\40\02\40\02\40\20\08\20\11\6a\2d\00\00\0e\05\00\01\03\02" "\04\05\0b\20\01\20\02\28\02\00\36\02\00\0c\04\0b\20\01\20" "\02\28\02\00\36\02\00\20\06\41\20\10\e1\02\21\12\20\02\20" "\02\28\02\00\22\13\41\01\6a\36\02\00\20\13\20\12\3a\00\00" "\0c\03\0b\20\0d\10\e8\04\0d\02\20\0d\41\00\10\e7\04\2d\00" "\00\21\12\20\02\20\02\28\02\00\22\13\41\01\6a\36\02\00\20" "\13\20\12\3a\00\00\0c\02\0b\20\0c\10\e8\04\21\12\20\10\45" "\0d\01\20\12\0d\01\20\02\20\0c\10\89\08\20\0c\10\8b\08\20" "\02\28\02\00\10\8c\08\36\02\00\0c\01\0b\20\02\28\02\00\21" "\14\20\04\20\07\6a\22\04\21\12\02\40\03\40\20\12\20\05\4f" "\0d\01\20\06\41\c0\00\20\12\2c\00\00\10\79\45\0d\01\20\12" "\41\01\6a\21\12\0c\00\0b\00\0b\20\0e\21\13\02\40\20\0e\41" "\01\48\0d\00\02\40\03\40\20\12\20\04\4d\0d\01\20\13\41\00" "\46\0d\01\20\13\41\7f\6a\21\13\20\12\41\7f\6a\22\12\2d\00" "\00\21\15\20\02\20\02\28\02\00\22\16\41\01\6a\36\02\00\20" "\16\20\15\3a\00\00\0c\00\0b\00\0b\02\40\02\40\20\13\0d\00" "\41\00\21\16\0c\01\0b\20\06\41\30\10\e1\02\21\16\0b\02\40" "\03\40\20\02\20\02\28\02\00\22\15\41\01\6a\36\02\00\20\13" "\41\01\48\0d\01\20\15\20\16\3a\00\00\20\13\41\7f\6a\21\13" "\0c\00\0b\00\0b\20\15\20\09\3a\00\00\0b\02\40\02\40\20\12" "\20\04\47\0d\00\20\06\41\30\10\e1\02\21\12\20\02\20\02\28" "\02\00\22\13\41\01\6a\36\02\00\20\13\20\12\3a\00\00\0c\01" "\0b\02\40\02\40\20\0b\10\e8\04\45\0d\00\10\8d\08\21\17\0c" "\01\0b\20\0b\41\00\10\e7\04\2c\00\00\21\17\0b\41\00\21\13" "\41\00\21\18\03\40\20\12\20\04\46\0d\01\02\40\02\40\20\13" "\20\17\46\0d\00\20\13\21\15\0c\01\0b\20\02\20\02\28\02\00" "\22\15\41\01\6a\36\02\00\20\15\20\0a\3a\00\00\41\00\21\15" "\02\40\20\18\41\01\6a\22\18\20\0b\10\e6\01\49\0d\00\20\13" "\21\17\0c\01\0b\02\40\20\0b\20\18\10\e7\04\2d\00\00\10\d1" "\06\41\ff\01\71\47\0d\00\10\8d\08\21\17\0c\01\0b\20\0b\20" "\18\10\e7\04\2c\00\00\21\17\0b\20\12\41\7f\6a\22\12\2d\00" "\00\21\13\20\02\20\02\28\02\00\22\16\41\01\6a\36\02\00\20" "\16\20\13\3a\00\00\20\15\41\01\6a\21\13\0c\00\0b\00\0b\20" "\14\20\02\28\02\00\10\88\06\0b\20\11\41\01\6a\21\11\0c\00" "\0b\00\0b\0d\00\20\00\10\99\07\28\02\00\41\00\47\0b\11\00" "\20\00\20\01\20\01\28\02\00\28\02\28\11\02\00\0b\11\00\20" "\00\20\01\20\01\28\02\00\28\02\28\11\02\00\0b\0c\00\20\00" "\20\00\10\db\02\10\9e\08\0b\32\01\01\7f\23\00\41\10\6b\22" "\02\24\00\20\02\20\00\28\02\00\36\02\0c\20\02\41\0c\6a\20" "\01\10\a0\08\1a\20\02\28\02\0c\21\00\20\02\41\10\6a\24\00" "\20\00\0b\12\00\20\00\20\00\10\db\02\20\00\10\e6\01\6a\10" "\9e\08\0b\2b\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\41" "\08\6a\20\00\20\01\20\02\10\9d\08\20\03\28\02\0c\21\02\20" "\03\41\10\6a\24\00\20\02\0b\05\00\10\9f\08\0b\ad\03\01\08" "\7f\23\00\41\b0\01\6b\22\06\24\00\20\06\41\ac\01\6a\20\03" "\10\e9\02\20\06\41\ac\01\6a\10\76\21\07\41\00\21\08\02\40" "\20\05\10\e6\01\45\0d\00\20\05\41\00\10\e7\04\2d\00\00\20" "\07\41\2d\10\e1\02\41\ff\01\71\46\21\08\0b\20\02\20\08\20" "\06\41\ac\01\6a\20\06\41\a8\01\6a\20\06\41\a7\01\6a\20\06" "\41\a6\01\6a\20\06\41\98\01\6a\10\d3\01\22\09\20\06\41\8c" "\01\6a\10\d3\01\22\0a\20\06\41\80\01\6a\10\d3\01\22\0b\20" "\06\41\fc\00\6a\10\84\08\20\06\41\d6\00\36\02\10\20\06\41" "\08\6a\41\00\20\06\41\10\6a\10\df\05\21\0c\02\40\02\40\20" "\05\10\e6\01\20\06\28\02\7c\4c\0d\00\20\05\10\e6\01\21\02" "\20\06\28\02\7c\21\0d\20\0b\10\e6\01\20\02\20\0d\6b\41\01" "\74\6a\20\0a\10\e6\01\6a\20\06\28\02\7c\6a\41\01\6a\21\0d" "\0c\01\0b\20\0b\10\e6\01\20\0a\10\e6\01\6a\20\06\28\02\7c" "\6a\41\02\6a\21\0d\0b\20\06\41\10\6a\21\02\02\40\20\0d\41" "\e5\00\49\0d\00\20\0c\20\0d\10\2b\10\e1\05\20\0c\10\87\07" "\22\02\0d\00\10\91\0d\00\0b\20\02\20\06\41\04\6a\20\06\20" "\03\10\75\20\05\10\e5\01\20\05\10\e5\01\20\05\10\e6\01\6a" "\20\07\20\08\20\06\41\a8\01\6a\20\06\2c\00\a7\01\20\06\2c" "\00\a6\01\20\09\20\0a\20\0b\20\06\28\02\7c\10\85\08\20\01" "\20\02\20\06\28\02\04\20\06\28\02\00\20\03\20\04\10\d4\05" "\21\05\20\0c\10\e3\05\1a\20\0b\10\99\0d\1a\20\0a\10\99\0d" "\1a\20\09\10\99\0d\1a\20\06\41\ac\01\6a\10\ad\09\1a\20\06" "\41\b0\01\6a\24\00\20\05\0b\88\05\01\0c\7f\23\00\41\a0\08" "\6b\22\07\24\00\20\07\20\05\37\03\10\20\07\20\06\37\03\18" "\20\07\20\07\41\b0\07\6a\36\02\ac\07\20\07\41\b0\07\6a\41" "\e4\00\41\89\0b\20\07\41\10\6a\10\9c\04\21\08\20\07\41\d6" "\00\36\02\90\04\41\00\21\09\20\07\41\88\04\6a\41\00\20\07" "\41\90\04\6a\10\df\05\21\0a\20\07\41\d6\00\36\02\90\04\20" "\07\41\80\04\6a\41\00\20\07\41\90\04\6a\10\ff\05\21\0b\20" "\07\41\90\04\6a\21\0c\02\40\02\40\20\08\41\e4\00\49\0d\00" "\10\8f\05\21\08\20\07\20\05\37\03\00\20\07\20\06\37\03\08" "\20\07\41\ac\07\6a\20\08\41\89\0b\20\07\10\e0\05\22\08\41" "\7f\46\0d\01\20\0a\20\07\28\02\ac\07\10\e1\05\20\0b\20\08" "\41\02\74\10\2b\10\80\06\20\0b\41\00\10\90\08\0d\01\20\0b" "\10\c6\07\21\0c\0b\20\07\41\fc\03\6a\20\03\10\e9\02\20\07" "\41\fc\03\6a\10\ba\01\22\0d\20\07\28\02\ac\07\22\0e\20\0e" "\20\08\6a\20\0c\10\b6\05\1a\02\40\20\08\41\01\48\0d\00\20" "\07\28\02\ac\07\2d\00\00\41\2d\46\21\09\0b\20\02\20\09\20" "\07\41\fc\03\6a\20\07\41\f8\03\6a\20\07\41\f4\03\6a\20\07" "\41\f0\03\6a\20\07\41\e4\03\6a\10\d3\01\22\0f\20\07\41\d8" "\03\6a\10\ea\06\22\0e\20\07\41\cc\03\6a\10\ea\06\22\10\20" "\07\41\c8\03\6a\10\91\08\20\07\41\d6\00\36\02\30\20\07\41" "\28\6a\41\00\20\07\41\30\6a\10\ff\05\21\11\02\40\02\40\20" "\08\20\07\28\02\c8\03\22\02\4c\0d\00\20\10\10\9b\05\20\08" "\20\02\6b\41\01\74\6a\20\0e\10\9b\05\6a\20\07\28\02\c8\03" "\6a\41\01\6a\21\12\0c\01\0b\20\10\10\9b\05\20\0e\10\9b\05" "\6a\20\07\28\02\c8\03\6a\41\02\6a\21\12\0b\20\07\41\30\6a" "\21\02\02\40\20\12\41\e5\00\49\0d\00\20\11\20\12\41\02\74" "\10\2b\10\80\06\20\11\10\c6\07\22\02\45\0d\01\0b\20\02\20" "\07\41\24\6a\20\07\41\20\6a\20\03\10\75\20\0c\20\0c\20\08" "\41\02\74\6a\20\0d\20\09\20\07\41\f8\03\6a\20\07\28\02\f4" "\03\20\07\28\02\f0\03\20\0f\20\0e\20\10\20\07\28\02\c8\03" "\10\92\08\20\01\20\02\20\07\28\02\24\20\07\28\02\20\20\03" "\20\04\10\f6\05\21\08\20\11\10\82\06\1a\20\10\10\a7\0d\1a" "\20\0e\10\a7\0d\1a\20\0f\10\99\0d\1a\20\07\41\fc\03\6a\10" "\ad\09\1a\20\0b\10\82\06\1a\20\0a\10\e3\05\1a\20\07\41\a0" "\08\6a\24\00\20\08\0f\0b\10\91\0d\00\0b\0a\00\20\00\10\95" "\08\41\01\73\0b\c6\03\01\01\7f\23\00\41\10\6b\22\0a\24\00" "\02\40\02\40\20\00\45\0d\00\20\02\10\e5\07\21\02\02\40\02" "\40\20\01\45\0d\00\20\0a\41\04\6a\20\02\10\e6\07\20\03\20" "\0a\28\02\04\36\00\00\20\0a\41\04\6a\20\02\10\e7\07\20\08" "\20\0a\41\04\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d\1a\0c" "\01\0b\20\0a\41\04\6a\20\02\10\96\08\20\03\20\0a\28\02\04" "\36\00\00\20\0a\41\04\6a\20\02\10\e9\07\20\08\20\0a\41\04" "\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d\1a\0b\20\04\20\02" "\10\ea\07\36\02\00\20\05\20\02\10\eb\07\36\02\00\20\0a\41" "\04\6a\20\02\10\ec\07\20\06\20\0a\41\04\6a\10\d7\01\1a\20" "\0a\41\04\6a\10\99\0d\1a\20\0a\41\04\6a\20\02\10\ed\07\20" "\07\20\0a\41\04\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d\1a" "\20\02\10\ee\07\21\02\0c\01\0b\20\02\10\ef\07\21\02\02\40" "\02\40\20\01\45\0d\00\20\0a\41\04\6a\20\02\10\f0\07\20\03" "\20\0a\28\02\04\36\00\00\20\0a\41\04\6a\20\02\10\f1\07\20" "\08\20\0a\41\04\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d\1a" "\0c\01\0b\20\0a\41\04\6a\20\02\10\97\08\20\03\20\0a\28\02" "\04\36\00\00\20\0a\41\04\6a\20\02\10\f2\07\20\08\20\0a\41" "\04\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d\1a\0b\20\04\20" "\02\10\f3\07\36\02\00\20\05\20\02\10\f4\07\36\02\00\20\0a" "\41\04\6a\20\02\10\f5\07\20\06\20\0a\41\04\6a\10\d7\01\1a" "\20\0a\41\04\6a\10\99\0d\1a\20\0a\41\04\6a\20\02\10\f6\07" "\20\07\20\0a\41\04\6a\10\e8\07\1a\20\0a\41\04\6a\10\a7\0d" "\1a\20\02\10\f7\07\21\02\0b\20\09\20\02\36\02\00\20\0a\41" "\10\6a\24\00\0b\c3\06\01\0a\7f\23\00\41\10\6b\22\0f\24\00" "\20\02\20\00\36\02\00\41\04\41\00\20\07\1b\21\10\20\03\41" "\80\04\71\21\11\41\00\21\12\03\40\02\40\20\12\41\04\47\0d" "\00\02\40\20\0d\10\9b\05\41\01\4d\0d\00\20\0f\20\0d\10\98" "\08\36\02\0c\20\02\20\0f\41\0c\6a\41\01\10\99\08\20\0d\10" "\9a\08\20\02\28\02\00\10\9b\08\36\02\00\0b\02\40\20\03\41" "\b0\01\71\22\07\41\10\46\0d\00\02\40\20\07\41\20\47\0d\00" "\20\02\28\02\00\21\00\0b\20\01\20\00\36\02\00\0b\20\0f\41" "\10\6a\24\00\0f\0b\02\40\02\40\02\40\02\40\02\40\02\40\20" "\08\20\12\6a\2d\00\00\0e\05\00\01\03\02\04\05\0b\20\01\20" "\02\28\02\00\36\02\00\0c\04\0b\20\01\20\02\28\02\00\36\02" "\00\20\06\41\20\10\e3\02\21\07\20\02\20\02\28\02\00\22\13" "\41\04\6a\36\02\00\20\13\20\07\36\02\00\0c\03\0b\20\0d\10" "\9d\05\0d\02\20\0d\41\00\10\9c\05\28\02\00\21\07\20\02\20" "\02\28\02\00\22\13\41\04\6a\36\02\00\20\13\20\07\36\02\00" "\0c\02\0b\20\0c\10\9d\05\21\07\20\11\45\0d\01\20\07\0d\01" "\20\02\20\0c\10\98\08\20\0c\10\9a\08\20\02\28\02\00\10\9b" "\08\36\02\00\0c\01\0b\20\02\28\02\00\21\14\20\04\20\10\6a" "\22\04\21\07\02\40\03\40\20\07\20\05\4f\0d\01\20\06\41\c0" "\00\20\07\28\02\00\10\bd\01\45\0d\01\20\07\41\04\6a\21\07" "\0c\00\0b\00\0b\02\40\20\0e\41\01\48\0d\00\20\02\28\02\00" "\21\13\20\0e\21\15\02\40\03\40\20\07\20\04\4d\0d\01\20\15" "\41\00\46\0d\01\20\15\41\7f\6a\21\15\20\07\41\7c\6a\22\07" "\28\02\00\21\16\20\02\20\13\41\04\6a\22\17\36\02\00\20\13" "\20\16\36\02\00\20\17\21\13\0c\00\0b\00\0b\02\40\02\40\20" "\15\0d\00\41\00\21\17\0c\01\0b\20\06\41\30\10\e3\02\21\17" "\20\02\28\02\00\21\13\0b\02\40\03\40\20\13\41\04\6a\21\16" "\20\15\41\01\48\0d\01\20\13\20\17\36\02\00\20\15\41\7f\6a" "\21\15\20\16\21\13\0c\00\0b\00\0b\20\02\20\16\36\02\00\20" "\13\20\09\36\02\00\0b\02\40\02\40\20\07\20\04\47\0d\00\20" "\06\41\30\10\e3\02\21\13\20\02\20\02\28\02\00\22\15\41\04" "\6a\22\07\36\02\00\20\15\20\13\36\02\00\0c\01\0b\02\40\02" "\40\20\0b\10\e8\04\45\0d\00\10\8d\08\21\17\0c\01\0b\20\0b" "\41\00\10\e7\04\2c\00\00\21\17\0b\41\00\21\13\41\00\21\18" "\02\40\03\40\20\07\20\04\46\0d\01\02\40\02\40\20\13\20\17" "\46\0d\00\20\13\21\15\0c\01\0b\20\02\20\02\28\02\00\22\15" "\41\04\6a\36\02\00\20\15\20\0a\36\02\00\41\00\21\15\02\40" "\20\18\41\01\6a\22\18\20\0b\10\e6\01\49\0d\00\20\13\21\17" "\0c\01\0b\02\40\20\0b\20\18\10\e7\04\2d\00\00\10\d1\06\41" "\ff\01\71\47\0d\00\10\8d\08\21\17\0c\01\0b\20\0b\20\18\10" "\e7\04\2c\00\00\21\17\0b\20\07\41\7c\6a\22\07\28\02\00\21" "\13\20\02\20\02\28\02\00\22\16\41\04\6a\36\02\00\20\16\20" "\13\36\02\00\20\15\41\01\6a\21\13\0c\00\0b\00\0b\20\02\28" "\02\00\21\07\0b\20\14\20\07\10\8a\06\0b\20\12\41\01\6a\21" "\12\0c\00\0b\00\0b\07\00\20\00\10\ff\0c\0b\0a\00\20\00\41" "\04\6a\10\f3\02\0b\0d\00\20\00\10\d5\07\28\02\00\41\00\47" "\0b\11\00\20\00\20\01\20\01\28\02\00\28\02\28\11\02\00\0b" "\11\00\20\00\20\01\20\01\28\02\00\28\02\28\11\02\00\0b\0c" "\00\20\00\20\00\10\ab\06\10\a2\08\0b\32\01\01\7f\23\00\41" "\10\6b\22\02\24\00\20\02\20\00\28\02\00\36\02\0c\20\02\41" "\0c\6a\20\01\10\a3\08\1a\20\02\28\02\0c\21\00\20\02\41\10" "\6a\24\00\20\00\0b\15\00\20\00\20\00\10\ab\06\20\00\10\9b" "\05\41\02\74\6a\10\a2\08\0b\2b\01\01\7f\23\00\41\10\6b\22" "\03\24\00\20\03\41\08\6a\20\00\20\01\20\02\10\a1\08\20\03" "\28\02\0c\21\02\20\03\41\10\6a\24\00\20\02\0b\b5\03\01\08" "\7f\23\00\41\e0\03\6b\22\06\24\00\20\06\41\dc\03\6a\20\03" "\10\e9\02\20\06\41\dc\03\6a\10\ba\01\21\07\41\00\21\08\02" "\40\20\05\10\9b\05\45\0d\00\20\05\41\00\10\9c\05\28\02\00" "\20\07\41\2d\10\e3\02\46\21\08\0b\20\02\20\08\20\06\41\dc" "\03\6a\20\06\41\d8\03\6a\20\06\41\d4\03\6a\20\06\41\d0\03" "\6a\20\06\41\c4\03\6a\10\d3\01\22\09\20\06\41\b8\03\6a\10" "\ea\06\22\0a\20\06\41\ac\03\6a\10\ea\06\22\0b\20\06\41\a8" "\03\6a\10\91\08\20\06\41\d6\00\36\02\10\20\06\41\08\6a\41" "\00\20\06\41\10\6a\10\ff\05\21\0c\02\40\02\40\20\05\10\9b" "\05\20\06\28\02\a8\03\4c\0d\00\20\05\10\9b\05\21\02\20\06" "\28\02\a8\03\21\0d\20\0b\10\9b\05\20\02\20\0d\6b\41\01\74" "\6a\20\0a\10\9b\05\6a\20\06\28\02\a8\03\6a\41\01\6a\21\0d" "\0c\01\0b\20\0b\10\9b\05\20\0a\10\9b\05\6a\20\06\28\02\a8" "\03\6a\41\02\6a\21\0d\0b\20\06\41\10\6a\21\02\02\40\20\0d" "\41\e5\00\49\0d\00\20\0c\20\0d\41\02\74\10\2b\10\80\06\20" "\0c\10\c6\07\22\02\0d\00\10\91\0d\00\0b\20\02\20\06\41\04" "\6a\20\06\20\03\10\75\20\05\10\aa\06\20\05\10\aa\06\20\05" "\10\9b\05\41\02\74\6a\20\07\20\08\20\06\41\d8\03\6a\20\06" "\28\02\d4\03\20\06\28\02\d0\03\20\09\20\0a\20\0b\20\06\28" "\02\a8\03\10\92\08\20\01\20\02\20\06\28\02\04\20\06\28\02" "\00\20\03\20\04\10\f6\05\21\05\20\0c\10\82\06\1a\20\0b\10" "\a7\0d\1a\20\0a\10\a7\0d\1a\20\09\10\99\0d\1a\20\06\41\dc" "\03\6a\10\ad\09\1a\20\06\41\e0\03\6a\24\00\20\05\0b\0d\00" "\20\00\20\01\20\02\20\03\10\cf\0b\0b\25\01\01\7f\23\00\41" "\10\6b\22\02\24\00\20\02\41\0c\6a\20\01\10\de\0b\28\02\00" "\21\01\20\02\41\10\6a\24\00\20\01\0b\04\00\41\7f\0b\11\00" "\20\00\20\00\28\02\00\20\01\6a\36\02\00\20\00\0b\0d\00\20" "\00\20\01\20\02\20\03\10\df\0b\0b\25\01\01\7f\23\00\41\10" "\6b\22\02\24\00\20\02\41\0c\6a\20\01\10\ee\0b\28\02\00\21" "\01\20\02\41\10\6a\24\00\20\01\0b\14\00\20\00\20\00\28\02" "\00\20\01\41\02\74\6a\36\02\00\20\00\0b\04\00\41\7f\0b\0a" "\00\20\00\20\05\10\fa\06\1a\0b\02\00\0b\04\00\41\7f\0b\0a" "\00\20\00\20\05\10\fd\06\1a\0b\02\00\0b\29\00\20\00\41\80" "\c6\00\41\08\6a\36\02\00\02\40\20\00\28\02\08\10\8f\05\46" "\0d\00\20\00\28\02\08\10\bb\04\0b\20\00\10\ce\04\0b\9c\03" "\00\20\00\20\01\10\ac\08\22\01\41\b4\3d\41\08\6a\36\02\00" "\20\01\41\08\6a\41\1e\10\ad\08\21\00\20\01\41\98\01\6a\41" "\b6\0c\10\e6\02\1a\20\00\10\ae\08\10\af\08\20\01\41\e0\a6" "\01\10\b0\08\10\b1\08\20\01\41\e8\a6\01\10\b2\08\10\b3\08" "\20\01\41\f0\a6\01\10\b4\08\10\b5\08\20\01\41\80\a7\01\10" "\b6\08\10\b7\08\20\01\41\88\a7\01\10\b8\08\10\b9\08\20\01" "\41\90\a7\01\10\ba\08\10\bb\08\20\01\41\a0\a7\01\10\bc\08" "\10\bd\08\20\01\41\a8\a7\01\10\be\08\10\bf\08\20\01\41\b0" "\a7\01\10\c0\08\10\c1\08\20\01\41\b8\a7\01\10\c2\08\10\c3" "\08\20\01\41\c0\a7\01\10\c4\08\10\c5\08\20\01\41\d8\a7\01" "\10\c6\08\10\c7\08\20\01\41\f8\a7\01\10\c8\08\10\c9\08\20" "\01\41\80\a8\01\10\ca\08\10\cb\08\20\01\41\88\a8\01\10\cc" "\08\10\cd\08\20\01\41\90\a8\01\10\ce\08\10\cf\08\20\01\41" "\98\a8\01\10\d0\08\10\d1\08\20\01\41\a0\a8\01\10\d2\08\10" "\d3\08\20\01\41\a8\a8\01\10\d4\08\10\d5\08\20\01\41\b0\a8" "\01\10\d6\08\10\d7\08\20\01\41\b8\a8\01\10\d8\08\10\d9\08" "\20\01\41\c0\a8\01\10\da\08\10\db\08\20\01\41\c8\a8\01\10" "\dc\08\10\dd\08\20\01\41\d0\a8\01\10\de\08\10\df\08\20\01" "\41\d8\a8\01\10\e0\08\10\e1\08\20\01\41\e8\a8\01\10\e2\08" "\10\e3\08\20\01\41\f8\a8\01\10\e4\08\10\e5\08\20\01\41\88" "\a9\01\10\e6\08\10\e7\08\20\01\41\98\a9\01\10\e8\08\10\e9" "\08\20\01\41\a0\a9\01\10\ea\08\20\01\0b\1a\00\20\00\20\01" "\41\7f\6a\10\eb\08\22\01\41\f8\c8\00\41\08\6a\36\02\00\20" "\01\0b\6a\01\01\7f\23\00\41\10\6b\22\02\24\00\20\00\42\00" "\37\03\00\20\02\41\00\36\02\0c\20\00\41\08\6a\20\02\41\0c" "\6a\20\02\41\0b\6a\10\ec\08\1a\20\02\41\0a\6a\20\02\41\04" "\6a\20\00\10\ed\08\28\02\00\10\ee\08\02\40\20\01\45\0d\00" "\20\00\20\01\10\ef\08\20\00\20\01\10\f0\08\0b\20\02\41\0a" "\6a\10\f1\08\20\02\41\10\6a\24\00\20\00\0b\17\01\01\7f\20" "\00\10\f2\08\21\01\20\00\10\f3\08\20\00\20\01\10\f4\08\0b" "\0c\00\41\e0\a6\01\41\01\10\f7\08\1a\0b\10\00\20\00\20\01" "\41\94\9b\01\10\f5\08\10\f6\08\0b\0c\00\41\e8\a6\01\41\01" "\10\f8\08\1a\0b\10\00\20\00\20\01\41\9c\9b\01\10\f5\08\10" "\f6\08\0b\10\00\41\f0\a6\01\41\00\41\00\41\01\10\c7\09\1a" "\0b\10\00\20\00\20\01\41\e0\9c\01\10\f5\08\10\f6\08\0b\0c" "\00\41\80\a7\01\41\01\10\f9\08\1a\0b\10\00\20\00\20\01\41" "\d8\9c\01\10\f5\08\10\f6\08\0b\0c\00\41\88\a7\01\41\01\10" "\fa\08\1a\0b\10\00\20\00\20\01\41\e8\9c\01\10\f5\08\10\f6" "\08\0b\0c\00\41\90\a7\01\41\01\10\db\09\1a\0b\10\00\20\00" "\20\01\41\f0\9c\01\10\f5\08\10\f6\08\0b\0c\00\41\a0\a7\01" "\41\01\10\fb\08\1a\0b\10\00\20\00\20\01\41\f8\9c\01\10\f5" "\08\10\f6\08\0b\0c\00\41\a8\a7\01\41\01\10\fc\08\1a\0b\10" "\00\20\00\20\01\41\88\9d\01\10\f5\08\10\f6\08\0b\0c\00\41" "\b0\a7\01\41\01\10\fd\08\1a\0b\10\00\20\00\20\01\41\80\9d" "\01\10\f5\08\10\f6\08\0b\0c\00\41\b8\a7\01\41\01\10\fe\08" "\1a\0b\10\00\20\00\20\01\41\90\9d\01\10\f5\08\10\f6\08\0b" "\0c\00\41\c0\a7\01\41\01\10\92\0a\1a\0b\10\00\20\00\20\01" "\41\98\9d\01\10\f5\08\10\f6\08\0b\0c\00\41\d8\a7\01\41\01" "\10\93\0a\1a\0b\10\00\20\00\20\01\41\a0\9d\01\10\f5\08\10" "\f6\08\0b\0c\00\41\f8\a7\01\41\01\10\ff\08\1a\0b\10\00\20" "\00\20\01\41\a4\9b\01\10\f5\08\10\f6\08\0b\0c\00\41\80\a8" "\01\41\01\10\80\09\1a\0b\10\00\20\00\20\01\41\ac\9b\01\10" "\f5\08\10\f6\08\0b\0c\00\41\88\a8\01\41\01\10\81\09\1a\0b" "\10\00\20\00\20\01\41\b4\9b\01\10\f5\08\10\f6\08\0b\0c\00" "\41\90\a8\01\41\01\10\82\09\1a\0b\10\00\20\00\20\01\41\bc" "\9b\01\10\f5\08\10\f6\08\0b\0c\00\41\98\a8\01\41\01\10\83" "\09\1a\0b\10\00\20\00\20\01\41\e4\9b\01\10\f5\08\10\f6\08" "\0b\0c\00\41\a0\a8\01\41\01\10\84\09\1a\0b\10\00\20\00\20" "\01\41\ec\9b\01\10\f5\08\10\f6\08\0b\0c\00\41\a8\a8\01\41" "\01\10\85\09\1a\0b\10\00\20\00\20\01\41\f4\9b\01\10\f5\08" "\10\f6\08\0b\0c\00\41\b0\a8\01\41\01\10\86\09\1a\0b\10\00" "\20\00\20\01\41\fc\9b\01\10\f5\08\10\f6\08\0b\0c\00\41\b8" "\a8\01\41\01\10\87\09\1a\0b\10\00\20\00\20\01\41\84\9c\01" "\10\f5\08\10\f6\08\0b\0c\00\41\c0\a8\01\41\01\10\88\09\1a" "\0b\10\00\20\00\20\01\41\8c\9c\01\10\f5\08\10\f6\08\0b\0c" "\00\41\c8\a8\01\41\01\10\89\09\1a\0b\10\00\20\00\20\01\41" "\94\9c\01\10\f5\08\10\f6\08\0b\0c\00\41\d0\a8\01\41\01\10" "\8a\09\1a\0b\10\00\20\00\20\01\41\9c\9c\01\10\f5\08\10\f6" "\08\0b\0c\00\41\d8\a8\01\41\01\10\8b\09\1a\0b\10\00\20\00" "\20\01\41\c4\9b\01\10\f5\08\10\f6\08\0b\0c\00\41\e8\a8\01" "\41\01\10\8c\09\1a\0b\10\00\20\00\20\01\41\cc\9b\01\10\f5" "\08\10\f6\08\0b\0c\00\41\f8\a8\01\41\01\10\8d\09\1a\0b\10" "\00\20\00\20\01\41\d4\9b\01\10\f5\08\10\f6\08\0b\0c\00\41" "\88\a9\01\41\01\10\8e\09\1a\0b\10\00\20\00\20\01\41\dc\9b" "\01\10\f5\08\10\f6\08\0b\0c\00\41\98\a9\01\41\01\10\8f\09" "\1a\0b\10\00\20\00\20\01\41\a4\9c\01\10\f5\08\10\f6\08\0b" "\0c\00\41\a0\a9\01\41\01\10\90\09\1a\0b\10\00\20\00\20\01" "\41\ac\9c\01\10\f5\08\10\f6\08\0b\17\00\20\00\20\01\36\02" "\04\20\00\41\a0\f1\00\41\08\6a\36\02\00\20\00\0b\14\00\20" "\00\20\01\10\ef\0b\22\01\41\08\6a\10\f0\0b\1a\20\01\0b\0b" "\00\20\00\20\01\36\02\00\20\00\0b\0a\00\20\00\20\01\10\f1" "\0b\1a\0b\67\01\02\7f\23\00\41\10\6b\22\02\24\00\02\40\20" "\00\10\f2\0b\20\01\4f\0d\00\20\00\10\f3\0b\00\0b\20\02\41" "\08\6a\20\00\10\f4\0b\20\01\10\f5\0b\20\00\20\02\28\02\08" "\22\01\36\02\04\20\00\20\01\36\02\00\20\02\28\02\0c\21\03" "\20\00\10\f6\0b\20\01\20\03\41\02\74\6a\36\02\00\20\00\41" "\00\10\f7\0b\20\02\41\10\6a\24\00\0b\5e\01\03\7f\23\00\41" "\10\6b\22\02\24\00\20\02\41\04\6a\20\00\20\01\10\f8\0b\22" "\03\28\02\04\21\01\20\03\28\02\08\21\04\03\40\02\40\20\01" "\20\04\47\0d\00\20\03\10\f9\0b\1a\20\02\41\10\6a\24\00\0f" "\0b\20\00\10\f4\0b\20\01\10\fa\0b\10\fb\0b\20\03\20\01\41" "\04\6a\22\01\36\02\04\0c\00\0b\00\0b\09\00\20\00\41\01\3a" "\00\00\0b\10\00\20\00\28\02\04\20\00\28\02\00\6b\41\02\75" "\0b\0c\00\20\00\20\00\28\02\00\10\92\0c\0b\33\00\20\00\20" "\00\10\82\0c\20\00\10\82\0c\20\00\10\83\0c\41\02\74\6a\20" "\00\10\82\0c\20\01\41\02\74\6a\20\00\10\82\0c\20\00\10\f2" "\08\41\02\74\6a\10\84\0c\0b\4a\01\01\7f\23\00\41\20\6b\22" "\01\24\00\20\01\41\00\36\02\10\20\01\41\d8\00\36\02\0c\20" "\01\20\01\29\02\0c\37\03\00\20\00\20\01\41\14\6a\20\01\20" "\00\10\af\09\10\b0\09\20\00\28\02\04\21\00\20\01\41\20\6a" "\24\00\20\00\41\7f\6a\0b\78\01\02\7f\23\00\41\10\6b\22\03" "\24\00\20\01\10\93\09\20\03\41\0c\6a\20\01\10\97\09\21\04" "\02\40\20\00\41\08\6a\22\01\10\f2\08\20\02\4b\0d\00\20\01" "\20\02\41\01\6a\10\9a\09\0b\02\40\20\01\20\02\10\92\09\28" "\02\00\45\0d\00\20\01\20\02\10\92\09\28\02\00\10\9b\09\1a" "\0b\20\04\10\9c\09\21\00\20\01\20\02\10\92\09\20\00\36\02" "\00\20\04\10\98\09\1a\20\03\41\10\6a\24\00\0b\17\00\20\00" "\20\01\10\ac\08\22\01\41\cc\d1\00\41\08\6a\36\02\00\20\01" "\0b\17\00\20\00\20\01\10\ac\08\22\01\41\ec\d1\00\41\08\6a" "\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac\08\10\c8\09\22" "\01\41\b0\c9\00\41\08\6a\36\02\00\20\01\0b\1a\00\20\00\20" "\01\10\ac\08\10\dc\09\22\01\41\c4\ca\00\41\08\6a\36\02\00" "\20\01\0b\1a\00\20\00\20\01\10\ac\08\10\dc\09\22\01\41\d8" "\cb\00\41\08\6a\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac" "\08\10\dc\09\22\01\41\c0\cd\00\41\08\6a\36\02\00\20\01\0b" "\1a\00\20\00\20\01\10\ac\08\10\dc\09\22\01\41\cc\cc\00\41" "\08\6a\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac\08\10\dc" "\09\22\01\41\b4\ce\00\41\08\6a\36\02\00\20\01\0b\17\00\20" "\00\20\01\10\ac\08\22\01\41\8c\d2\00\41\08\6a\36\02\00\20" "\01\0b\17\00\20\00\20\01\10\ac\08\22\01\41\80\d4\00\41\08" "\6a\36\02\00\20\01\0b\17\00\20\00\20\01\10\ac\08\22\01\41" "\d4\d5\00\41\08\6a\36\02\00\20\01\0b\17\00\20\00\20\01\10" "\ac\08\22\01\41\bc\d7\00\41\08\6a\36\02\00\20\01\0b\1a\00" "\20\00\20\01\10\ac\08\10\cb\0c\22\01\41\94\df\00\41\08\6a" "\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac\08\10\cb\0c\22" "\01\41\a8\e0\00\41\08\6a\36\02\00\20\01\0b\1a\00\20\00\20" "\01\10\ac\08\10\cb\0c\22\01\41\9c\e1\00\41\08\6a\36\02\00" "\20\01\0b\1a\00\20\00\20\01\10\ac\08\10\cb\0c\22\01\41\90" "\e2\00\41\08\6a\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac" "\08\10\cc\0c\22\01\41\84\e3\00\41\08\6a\36\02\00\20\01\0b" "\1a\00\20\00\20\01\10\ac\08\10\cd\0c\22\01\41\a8\e4\00\41" "\08\6a\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac\08\10\ce" "\0c\22\01\41\cc\e5\00\41\08\6a\36\02\00\20\01\0b\1a\00\20" "\00\20\01\10\ac\08\10\cf\0c\22\01\41\f0\e6\00\41\08\6a\36" "\02\00\20\01\0b\2d\00\20\00\20\01\10\ac\08\22\01\41\08\6a" "\10\d0\0c\21\00\20\01\41\84\d9\00\41\08\6a\36\02\00\20\00" "\41\84\d9\00\41\38\6a\36\02\00\20\01\0b\2d\00\20\00\20\01" "\10\ac\08\22\01\41\08\6a\10\d1\0c\21\00\20\01\41\8c\db\00" "\41\08\6a\36\02\00\20\00\41\8c\db\00\41\38\6a\36\02\00\20" "\01\0b\20\00\20\00\20\01\10\ac\08\22\01\41\08\6a\10\d2\0c" "\1a\20\01\41\f8\dc\00\41\08\6a\36\02\00\20\01\0b\20\00\20" "\00\20\01\10\ac\08\22\01\41\08\6a\10\d2\0c\1a\20\01\41\94" "\de\00\41\08\6a\36\02\00\20\01\0b\1a\00\20\00\20\01\10\ac" "\08\10\d3\0c\22\01\41\94\e8\00\41\08\6a\36\02\00\20\01\0b" "\1a\00\20\00\20\01\10\ac\08\10\d3\0c\22\01\41\8c\e9\00\41" "\08\6a\36\02\00\20\01\0b\33\00\02\40\41\00\2d\00\c4\9c\01" "\45\0d\00\41\00\28\02\c0\9c\01\0f\0b\10\94\09\1a\41\00\41" "\01\3a\00\c4\9c\01\41\00\41\bc\9c\01\36\02\c0\9c\01\41\bc" "\9c\01\0b\0d\00\20\00\28\02\00\20\01\41\02\74\6a\0b\0b\00" "\20\00\41\04\6a\10\95\09\1a\0b\14\00\10\a8\09\41\00\41\a8" "\a9\01\36\02\bc\9c\01\41\bc\9c\01\0b\15\01\01\7f\20\00\20" "\00\28\02\00\41\01\6a\22\01\36\02\00\20\01\0b\1f\00\02\40" "\20\00\20\01\10\a6\09\0d\00\10\f2\01\00\0b\20\00\41\08\6a" "\20\01\10\a7\09\28\02\00\0b\29\01\01\7f\23\00\41\10\6b\22" "\02\24\00\20\02\20\01\36\02\0c\20\00\20\02\41\0c\6a\10\99" "\09\21\01\20\02\41\10\6a\24\00\20\01\0b\09\00\20\00\10\9d" "\09\20\00\0b\09\00\20\00\20\01\10\d4\0c\0b\38\01\01\7f\02" "\40\20\01\20\00\10\f2\08\22\02\4d\0d\00\20\00\20\01\20\02" "\6b\10\a3\09\0f\0b\02\40\20\01\20\02\4f\0d\00\20\00\20\00" "\28\02\00\20\01\41\02\74\6a\10\a4\09\0b\0b\28\01\01\7f\02" "\40\20\00\41\04\6a\10\a0\09\22\01\41\7f\47\0d\00\20\00\20" "\00\28\02\00\28\02\08\11\04\00\0b\20\01\41\7f\46\0b\1a\01" "\01\7f\20\00\10\a5\09\28\02\00\21\01\20\00\10\a5\09\41\00" "\36\02\00\20\01\0b\25\01\01\7f\20\00\10\a5\09\28\02\00\21" "\01\20\00\10\a5\09\41\00\36\02\00\02\40\20\01\45\0d\00\20" "\01\10\d5\0c\0b\0b\67\01\02\7f\20\00\41\b4\3d\41\08\6a\36" "\02\00\20\00\41\08\6a\21\01\41\00\21\02\02\40\03\40\20\02" "\20\01\10\f2\08\4f\0d\01\02\40\20\01\20\02\10\92\09\28\02" "\00\45\0d\00\20\01\20\02\10\92\09\28\02\00\10\9b\09\1a\0b" "\20\02\41\01\6a\21\02\0c\00\0b\00\0b\20\00\41\98\01\6a\10" "\99\0d\1a\20\01\10\9f\09\1a\20\00\10\ce\04\0b\23\01\01\7f" "\23\00\41\10\6b\22\01\24\00\20\01\41\0c\6a\20\00\10\ed\08" "\10\a1\09\20\01\41\10\6a\24\00\20\00\0b\15\01\01\7f\20\00" "\20\00\28\02\00\41\7f\6a\22\01\36\02\00\20\01\0b\3b\01\01" "\7f\02\40\20\00\28\02\00\22\01\28\02\00\45\0d\00\20\01\10" "\f3\08\20\00\28\02\00\10\97\0c\20\00\28\02\00\10\f4\0b\20" "\00\28\02\00\22\00\28\02\00\20\00\10\83\0c\10\98\0c\0b\0b" "\0d\00\20\00\10\9e\09\1a\20\00\10\8b\0d\0b\70\01\02\7f\23" "\00\41\20\6b\22\02\24\00\02\40\02\40\20\00\10\f6\0b\28\02" "\00\20\00\28\02\04\6b\41\02\75\20\01\49\0d\00\20\00\20\01" "\10\f0\08\0c\01\0b\20\00\10\f4\0b\21\03\20\02\41\0c\6a\20" "\00\20\00\10\f2\08\20\01\6a\10\96\0c\20\00\10\f2\08\20\03" "\10\9b\0c\22\03\20\01\10\9c\0c\20\00\20\03\10\9d\0c\20\03" "\10\9e\0c\1a\0b\20\02\41\20\6a\24\00\0b\19\01\01\7f\20\00" "\10\f2\08\21\02\20\00\20\01\10\92\0c\20\00\20\02\10\f4\08" "\0b\07\00\20\00\10\d6\0c\0b\2b\01\01\7f\41\00\21\02\02\40" "\20\00\41\08\6a\22\00\10\f2\08\20\01\4d\0d\00\20\00\20\01" "\10\a7\09\28\02\00\41\00\47\21\02\0b\20\02\0b\0d\00\20\00" "\28\02\00\20\01\41\02\74\6a\0b\0c\00\41\a8\a9\01\41\01\10" "\ab\08\1a\0b\11\00\41\c8\9c\01\10\91\09\10\ac\09\1a\41\c8" "\9c\01\0b\33\00\02\40\41\00\2d\00\d0\9c\01\45\0d\00\41\00" "\28\02\cc\9c\01\0f\0b\10\a9\09\1a\41\00\41\01\3a\00\d0\9c" "\01\41\00\41\c8\9c\01\36\02\cc\9c\01\41\c8\9c\01\0b\18\01" "\01\7f\20\00\10\aa\09\28\02\00\22\01\36\02\00\20\01\10\93" "\09\20\00\0b\15\00\20\00\20\01\28\02\00\22\01\36\02\00\20" "\01\10\93\09\20\00\0b\0d\00\20\00\28\02\00\10\9b\09\1a\20" "\00\0b\0a\00\20\00\10\b7\09\36\02\04\0b\15\00\20\00\20\01" "\29\02\00\37\02\04\20\00\20\02\36\02\00\20\00\0b\3b\01\01" "\7f\23\00\41\10\6b\22\02\24\00\02\40\20\00\10\b3\09\41\7f" "\46\0d\00\20\00\20\02\41\08\6a\20\02\41\0c\6a\20\01\10\b4" "\09\10\b5\09\41\d9\00\10\84\0d\0b\20\02\41\10\6a\24\00\0b" "\0d\00\20\00\10\ce\04\1a\20\00\10\8b\0d\0b\0f\00\20\00\20" "\00\28\02\00\28\02\04\11\04\00\0b\07\00\20\00\28\02\00\0b" "\09\00\20\00\20\01\10\d7\0c\0b\0b\00\20\00\20\01\36\02\00" "\20\00\0b\07\00\20\00\10\d8\0c\0b\19\01\01\7f\41\00\41\00" "\28\02\d4\9c\01\41\01\6a\22\00\36\02\d4\9c\01\20\00\0b\0d" "\00\20\00\10\ce\04\1a\20\00\10\8b\0d\0b\29\01\01\7f\41\00" "\21\03\02\40\20\02\41\ff\00\4b\0d\00\20\02\41\02\74\41\80" "\3e\6a\28\02\00\20\01\71\41\00\47\21\03\0b\20\03\0b\4d\01" "\02\7f\02\40\03\40\20\01\20\02\46\0d\01\41\00\21\04\02\40" "\20\01\28\02\00\22\05\41\ff\00\4b\0d\00\20\05\41\02\74\41" "\80\3e\6a\28\02\00\21\04\0b\20\03\20\04\36\02\00\20\03\41" "\04\6a\21\03\20\01\41\04\6a\21\01\0c\00\0b\00\0b\20\02\0b" "\43\01\01\7f\03\7f\02\40\02\40\20\02\20\03\46\0d\00\20\02" "\28\02\00\22\04\41\ff\00\4b\0d\01\20\04\41\02\74\41\80\3e" "\6a\28\02\00\20\01\71\45\0d\01\20\02\21\03\0b\20\03\0f\0b" "\20\02\41\04\6a\21\02\0c\00\0b\0b\42\01\01\7f\02\40\03\40" "\20\02\20\03\46\0d\01\02\40\20\02\28\02\00\22\04\41\ff\00" "\4b\0d\00\20\04\41\02\74\41\80\3e\6a\28\02\00\20\01\71\45" "\0d\00\20\02\41\04\6a\21\02\0c\01\0b\0b\20\02\21\03\0b\20" "\03\0b\1d\00\02\40\20\01\41\ff\00\4b\0d\00\10\be\09\20\01" "\41\02\74\6a\28\02\00\21\01\0b\20\01\0b\08\00\10\bd\04\28" "\02\00\0b\45\01\01\7f\02\40\03\40\20\01\20\02\46\0d\01\02" "\40\20\01\28\02\00\22\03\41\ff\00\4b\0d\00\10\be\09\20\01" "\28\02\00\41\02\74\6a\28\02\00\21\03\0b\20\01\20\03\36\02" "\00\20\01\41\04\6a\21\01\0c\00\0b\00\0b\20\02\0b\1d\00\02" "\40\20\01\41\ff\00\4b\0d\00\10\c1\09\20\01\41\02\74\6a\28" "\02\00\21\01\0b\20\01\0b\08\00\10\be\04\28\02\00\0b\45\01" "\01\7f\02\40\03\40\20\01\20\02\46\0d\01\02\40\20\01\28\02" "\00\22\03\41\ff\00\4b\0d\00\10\c1\09\20\01\28\02\00\41\02" "\74\6a\28\02\00\21\03\0b\20\01\20\03\36\02\00\20\01\41\04" "\6a\21\01\0c\00\0b\00\0b\20\02\0b\04\00\20\01\0b\2c\00\02" "\40\03\40\20\01\20\02\46\0d\01\20\03\20\01\2c\00\00\36\02" "\00\20\03\41\04\6a\21\03\20\01\41\01\6a\21\01\0c\00\0b\00" "\0b\20\02\0b\0e\00\20\01\20\02\20\01\41\80\01\49\1b\c0\0b" "\39\01\01\7f\02\40\03\40\20\01\20\02\46\0d\01\20\04\20\01" "\28\02\00\22\05\20\03\20\05\41\80\01\49\1b\3a\00\00\20\04" "\41\01\6a\21\04\20\01\41\04\6a\21\01\0c\00\0b\00\0b\20\02" "\0b\36\00\20\00\20\03\10\ac\08\10\c8\09\22\03\20\02\3a\00" "\0c\20\03\20\01\36\02\08\20\03\41\c8\3d\41\08\6a\36\02\00" "\02\40\20\01\0d\00\20\03\41\80\3e\36\02\08\0b\20\03\0b\04" "\00\20\00\0b\32\01\01\7f\20\00\41\c8\3d\41\08\6a\36\02\00" "\02\40\20\00\28\02\08\22\01\45\0d\00\20\00\2d\00\0c\41\ff" "\01\71\45\0d\00\20\01\10\8c\0d\0b\20\00\10\ce\04\0b\0d\00" "\20\00\10\c9\09\1a\20\00\10\8b\0d\0b\21\00\02\40\20\01\41" "\00\48\0d\00\10\be\09\20\01\41\ff\01\71\41\02\74\6a\28\02" "\00\21\01\0b\20\01\c0\0b\44\01\01\7f\02\40\03\40\20\01\20" "\02\46\0d\01\02\40\20\01\2c\00\00\22\03\41\00\48\0d\00\10" "\be\09\20\01\2c\00\00\41\02\74\6a\28\02\00\21\03\0b\20\01" "\20\03\3a\00\00\20\01\41\01\6a\21\01\0c\00\0b\00\0b\20\02" "\0b\21\00\02\40\20\01\41\00\48\0d\00\10\c1\09\20\01\41\ff" "\01\71\41\02\74\6a\28\02\00\21\01\0b\20\01\c0\0b\44\01\01" "\7f\02\40\03\40\20\01\20\02\46\0d\01\02\40\20\01\2c\00\00" "\22\03\41\00\48\0d\00\10\c1\09\20\01\2c\00\00\41\02\74\6a" "\28\02\00\21\03\0b\20\01\20\03\3a\00\00\20\01\41\01\6a\21" "\01\0c\00\0b\00\0b\20\02\0b\04\00\20\01\0b\2c\00\02\40\03" "\40\20\01\20\02\46\0d\01\20\03\20\01\2d\00\00\3a\00\00\20" "\03\41\01\6a\21\03\20\01\41\01\6a\21\01\0c\00\0b\00\0b\20" "\02\0b\0c\00\20\02\20\01\20\01\41\00\48\1b\0b\38\01\01\7f" "\02\40\03\40\20\01\20\02\46\0d\01\20\04\20\03\20\01\2c\00" "\00\22\05\20\05\41\00\48\1b\3a\00\00\20\04\41\01\6a\21\04" "\20\01\41\01\6a\21\01\0c\00\0b\00\0b\20\02\0b\0d\00\20\00" "\10\ce\04\1a\20\00\10\8b\0d\0b\12\00\20\04\20\02\36\02\00" "\20\07\20\05\36\02\00\41\03\0b\12\00\20\04\20\02\36\02\00" "\20\07\20\05\36\02\00\41\03\0b\0b\00\20\04\20\02\36\02\00" "\41\03\0b\04\00\41\01\0b\04\00\41\01\0b\39\01\01\7f\23\00" "\41\10\6b\22\05\24\00\20\05\20\04\36\02\0c\20\05\20\03\20" "\02\6b\36\02\08\20\05\41\0c\6a\20\05\41\08\6a\10\f0\01\28" "\02\00\21\04\20\05\41\10\6a\24\00\20\04\0b\04\00\41\01\0b" "\22\00\20\00\20\01\10\ac\08\10\dc\09\22\01\41\80\c6\00\41" "\08\6a\36\02\00\20\01\10\8f\05\36\02\08\20\01\0b\04\00\20" "\00\0b\0d\00\20\00\10\aa\08\1a\20\00\10\8b\0d\0b\ee\03\01" "\04\7f\23\00\41\10\6b\22\08\24\00\20\02\21\09\02\40\03\40" "\02\40\20\09\20\03\47\0d\00\20\03\21\09\0c\02\0b\20\09\28" "\02\00\45\0d\01\20\09\41\04\6a\21\09\0c\00\0b\00\0b\20\07" "\20\05\36\02\00\20\04\20\02\36\02\00\02\40\02\40\03\40\02" "\40\02\40\20\02\20\03\46\0d\00\20\05\20\06\46\0d\00\20\08" "\20\01\29\02\00\37\03\08\41\01\21\0a\02\40\02\40\02\40\02" "\40\20\05\20\04\20\09\20\02\6b\41\02\75\20\06\20\05\6b\20" "\01\20\00\28\02\08\10\df\09\22\0b\41\01\6a\0e\02\00\08\01" "\0b\20\07\20\05\36\02\00\03\40\20\02\20\04\28\02\00\46\0d" "\02\20\05\20\02\28\02\00\20\08\41\08\6a\20\00\28\02\08\10" "\e0\09\22\09\41\7f\46\0d\02\20\07\20\07\28\02\00\20\09\6a" "\22\05\36\02\00\20\02\41\04\6a\21\02\0c\00\0b\00\0b\20\07" "\20\07\28\02\00\20\0b\6a\22\05\36\02\00\20\05\20\06\46\0d" "\01\02\40\20\09\20\03\47\0d\00\20\04\28\02\00\21\02\20\03" "\21\09\0c\05\0b\20\08\41\04\6a\41\00\20\01\20\00\28\02\08" "\10\e0\09\22\09\41\7f\46\0d\05\20\08\41\04\6a\21\02\02\40" "\20\09\20\06\20\07\28\02\00\6b\4d\0d\00\41\01\21\0a\0c\07" "\0b\02\40\03\40\20\09\45\0d\01\20\02\2d\00\00\21\05\20\07" "\20\07\28\02\00\22\0a\41\01\6a\36\02\00\20\0a\20\05\3a\00" "\00\20\09\41\7f\6a\21\09\20\02\41\01\6a\21\02\0c\00\0b\00" "\0b\20\04\20\04\28\02\00\41\04\6a\22\02\36\02\00\20\02\21" "\09\03\40\02\40\20\09\20\03\47\0d\00\20\03\21\09\0c\05\0b" "\20\09\28\02\00\45\0d\04\20\09\41\04\6a\21\09\0c\00\0b\00" "\0b\20\04\20\02\36\02\00\0c\04\0b\20\04\28\02\00\21\02\0b" "\20\02\20\03\47\21\0a\0c\03\0b\20\07\28\02\00\21\05\0c\00" "\0b\00\0b\41\02\21\0a\0b\20\08\41\10\6a\24\00\20\0a\0b\41" "\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20\05\36\02\0c" "\20\06\41\08\6a\20\06\41\0c\6a\10\92\05\21\05\20\00\20\01" "\20\02\20\03\20\04\10\bf\04\21\04\20\05\10\93\05\1a\20\06" "\41\10\6a\24\00\20\04\0b\3d\01\01\7f\23\00\41\10\6b\22\04" "\24\00\20\04\20\03\36\02\0c\20\04\41\08\6a\20\04\41\0c\6a" "\10\92\05\21\03\20\00\20\01\20\02\10\89\03\21\02\20\03\10" "\93\05\1a\20\04\41\10\6a\24\00\20\02\0b\bb\03\01\03\7f\23" "\00\41\10\6b\22\08\24\00\20\02\21\09\02\40\03\40\02\40\20" "\09\20\03\47\0d\00\20\03\21\09\0c\02\0b\20\09\2d\00\00\45" "\0d\01\20\09\41\01\6a\21\09\0c\00\0b\00\0b\20\07\20\05\36" "\02\00\20\04\20\02\36\02\00\03\7f\02\40\02\40\02\40\20\02" "\20\03\46\0d\00\20\05\20\06\46\0d\00\20\08\20\01\29\02\00" "\37\03\08\02\40\02\40\02\40\02\40\02\40\20\05\20\04\20\09" "\20\02\6b\20\06\20\05\6b\41\02\75\20\01\20\00\28\02\08\10" "\e2\09\22\0a\41\7f\47\0d\00\03\40\20\07\20\05\36\02\00\20" "\02\20\04\28\02\00\46\0d\06\41\01\21\06\02\40\02\40\02\40" "\20\05\20\02\20\09\20\02\6b\20\08\41\08\6a\20\00\28\02\08" "\10\e3\09\22\05\41\02\6a\0e\03\07\00\02\01\0b\20\04\20\02" "\36\02\00\0c\04\0b\20\05\21\06\0b\20\02\20\06\6a\21\02\20" "\07\28\02\00\41\04\6a\21\05\0c\00\0b\00\0b\20\07\20\07\28" "\02\00\20\0a\41\02\74\6a\22\05\36\02\00\20\05\20\06\46\0d" "\03\20\04\28\02\00\21\02\02\40\20\09\20\03\47\0d\00\20\03" "\21\09\0c\08\0b\20\05\20\02\41\01\20\01\20\00\28\02\08\10" "\e3\09\45\0d\01\0b\41\02\21\09\0c\04\0b\20\07\20\07\28\02" "\00\41\04\6a\36\02\00\20\04\20\04\28\02\00\41\01\6a\22\02" "\36\02\00\20\02\21\09\03\40\02\40\20\09\20\03\47\0d\00\20" "\03\21\09\0c\06\0b\20\09\2d\00\00\45\0d\05\20\09\41\01\6a" "\21\09\0c\00\0b\00\0b\20\04\20\02\36\02\00\41\01\21\09\0c" "\02\0b\20\04\28\02\00\21\02\0b\20\02\20\03\47\21\09\0b\20" "\08\41\10\6a\24\00\20\09\0f\0b\20\07\28\02\00\21\05\0c\00" "\0b\0b\41\01\01\7f\23\00\41\10\6b\22\06\24\00\20\06\20\05" "\36\02\0c\20\06\41\08\6a\20\06\41\0c\6a\10\92\05\21\05\20" "\00\20\01\20\02\20\03\20\04\10\c1\04\21\04\20\05\10\93\05" "\1a\20\06\41\10\6a\24\00\20\04\0b\3f\01\01\7f\23\00\41\10" "\6b\22\05\24\00\20\05\20\04\36\02\0c\20\05\41\08\6a\20\05" "\41\0c\6a\10\92\05\21\04\20\00\20\01\20\02\20\03\10\84\03" "\21\03\20\04\10\93\05\1a\20\05\41\10\6a\24\00\20\03\0b\9a" "\01\01\02\7f\23\00\41\10\6b\22\05\24\00\20\04\20\02\36\02" "\00\41\02\21\06\02\40\20\05\41\0c\6a\41\00\20\01\20\00\28" "\02\08\10\e0\09\22\02\41\01\6a\41\02\49\0d\00\41\01\21\06" "\20\02\41\7f\6a\22\02\20\03\20\04\28\02\00\6b\4b\0d\00\20" "\05\41\0c\6a\21\06\03\40\02\40\20\02\0d\00\41\00\21\06\0c" "\02\0b\20\06\2d\00\00\21\00\20\04\20\04\28\02\00\22\01\41" "\01\6a\36\02\00\20\01\20\00\3a\00\00\20\02\41\7f\6a\21\02" "\20\06\41\01\6a\21\06\0c\00\0b\00\0b\20\05\41\10\6a\24\00" "\20\06\0b\36\01\01\7f\41\7f\21\01\02\40\41\00\41\00\41\04" "\20\00\28\02\08\10\e6\09\0d\00\02\40\20\00\28\02\08\22\00" "\0d\00\41\01\0f\0b\20\00\10\e7\09\41\01\46\21\01\0b\20\01" "\0b\3d\01\01\7f\23\00\41\10\6b\22\04\24\00\20\04\20\03\36" "\02\0c\20\04\41\08\6a\20\04\41\0c\6a\10\92\05\21\03\20\00" "\20\01\20\02\10\83\03\21\02\20\03\10\93\05\1a\20\04\41\10" "\6a\24\00\20\02\0b\37\01\02\7f\23\00\41\10\6b\22\01\24\00" "\20\01\20\00\36\02\0c\20\01\41\08\6a\20\01\41\0c\6a\10\92" "\05\21\00\10\c2\04\21\02\20\00\10\93\05\1a\20\01\41\10\6a" "\24\00\20\02\0b\04\00\41\00\0b\64\01\04\7f\41\00\21\05\41" "\00\21\06\02\40\03\40\20\06\20\04\4f\0d\01\20\02\20\03\46" "\0d\01\41\01\21\07\02\40\02\40\20\02\20\03\20\02\6b\20\01" "\20\00\28\02\08\10\ea\09\22\08\41\02\6a\0e\03\03\03\01\00" "\0b\20\08\21\07\0b\20\06\41\01\6a\21\06\20\07\20\05\6a\21" "\05\20\02\20\07\6a\21\02\0c\00\0b\00\0b\20\05\0b\3d\01\01" "\7f\23\00\41\10\6b\22\04\24\00\20\04\20\03\36\02\0c\20\04" "\41\08\6a\20\04\41\0c\6a\10\92\05\21\03\20\00\20\01\20\02" "\10\c3\04\21\02\20\03\10\93\05\1a\20\04\41\10\6a\24\00\20" "\02\0b\16\00\02\40\20\00\28\02\08\22\00\0d\00\41\01\0f\0b" "\20\00\10\e7\09\0b\0d\00\20\00\10\ce\04\1a\20\00\10\8b\0d" "\0b\56\01\01\7f\23\00\41\10\6b\22\08\24\00\20\08\20\02\36" "\02\0c\20\08\20\05\36\02\08\20\02\20\03\20\08\41\0c\6a\20" "\05\20\06\20\08\41\08\6a\41\ff\ff\c3\00\41\00\10\ee\09\21" "\02\20\04\20\08\28\02\0c\36\02\00\20\07\20\08\28\02\08\36" "\02\00\20\08\41\10\6a\24\00\20\02\0b\99\06\01\01\7f\20\02" "\20\00\36\02\00\20\05\20\03\36\02\00\02\40\02\40\20\07\41" "\02\71\45\0d\00\41\01\21\07\20\04\20\03\6b\41\03\48\0d\01" "\20\05\20\03\41\01\6a\36\02\00\20\03\41\ef\01\3a\00\00\20" "\05\20\05\28\02\00\22\03\41\01\6a\36\02\00\20\03\41\bb\01" "\3a\00\00\20\05\20\05\28\02\00\22\03\41\01\6a\36\02\00\20" "\03\41\bf\01\3a\00\00\0b\20\02\28\02\00\21\00\02\40\03\40" "\02\40\20\00\20\01\49\0d\00\41\00\21\07\0c\03\0b\41\02\21" "\07\20\00\2f\01\00\22\03\20\06\4b\0d\02\02\40\02\40\02\40" "\20\03\41\ff\00\4b\0d\00\41\01\21\07\20\04\20\05\28\02\00" "\22\00\6b\41\01\48\0d\05\20\05\20\00\41\01\6a\36\02\00\20" "\00\20\03\3a\00\00\0c\01\0b\02\40\20\03\41\ff\0f\4b\0d\00" "\20\04\20\05\28\02\00\22\00\6b\41\02\48\0d\04\20\05\20\00" "\41\01\6a\36\02\00\20\00\20\03\41\06\76\41\c0\01\72\3a\00" "\00\20\05\20\05\28\02\00\22\00\41\01\6a\36\02\00\20\00\20" "\03\41\3f\71\41\80\01\72\3a\00\00\0c\01\0b\02\40\20\03\41" "\ff\af\03\4b\0d\00\20\04\20\05\28\02\00\22\00\6b\41\03\48" "\0d\04\20\05\20\00\41\01\6a\36\02\00\20\00\20\03\41\0c\76" "\41\e0\01\72\3a\00\00\20\05\20\05\28\02\00\22\00\41\01\6a" "\36\02\00\20\00\20\03\41\06\76\41\3f\71\41\80\01\72\3a\00" "\00\20\05\20\05\28\02\00\22\00\41\01\6a\36\02\00\20\00\20" "\03\41\3f\71\41\80\01\72\3a\00\00\0c\01\0b\02\40\20\03\41" "\ff\b7\03\4b\0d\00\41\01\21\07\20\01\20\00\6b\41\04\48\0d" "\05\20\00\2f\01\02\22\08\41\80\f8\03\71\41\80\b8\03\47\0d" "\02\20\04\20\05\28\02\00\6b\41\04\48\0d\05\20\03\41\c0\07" "\71\22\07\41\0a\74\20\03\41\0a\74\41\80\f8\03\71\72\20\08" "\41\ff\07\71\72\41\80\80\04\6a\20\06\4b\0d\02\20\02\20\00" "\41\02\6a\36\02\00\20\05\20\05\28\02\00\22\00\41\01\6a\36" "\02\00\20\00\20\07\41\06\76\41\01\6a\22\07\41\02\76\41\f0" "\01\72\3a\00\00\20\05\20\05\28\02\00\22\00\41\01\6a\36\02" "\00\20\00\20\07\41\04\74\41\30\71\20\03\41\02\76\41\0f\71" "\72\41\80\01\72\3a\00\00\20\05\20\05\28\02\00\22\00\41\01" "\6a\36\02\00\20\00\20\08\41\06\76\41\0f\71\20\03\41\04\74" "\41\30\71\72\41\80\01\72\3a\00\00\20\05\20\05\28\02\00\22" "\03\41\01\6a\36\02\00\20\03\20\08\41\3f\71\41\80\01\72\3a" "\00\00\0c\01\0b\20\03\41\80\c0\03\49\0d\04\20\04\20\05\28" "\02\00\22\00\6b\41\03\48\0d\03\20\05\20\00\41\01\6a\36\02" "\00\20\00\20\03\41\0c\76\41\e0\01\72\3a\00\00\20\05\20\05" "\28\02\00\22\00\41\01\6a\36\02\00\20\00\20\03\41\06\76\41" "\bf\01\71\3a\00\00\20\05\20\05\28\02\00\22\00\41\01\6a\36" "\02\00\20\00\20\03\41\3f\71\41\80\01\72\3a\00\00\0b\20\02" "\20\02\28\02\00\41\02\6a\22\00\36\02\00\0c\01\0b\0b\41\02" "\0f\0b\41\01\0f\0b\20\07\0b\56\01\01\7f\23\00\41\10\6b\22" "\08\24\00\20\08\20\02\36\02\0c\20\08\20\05\36\02\08\20\02" "\20\03\20\08\41\0c\6a\20\05\20\06\20\08\41\08\6a\41\ff\ff" "\c3\00\41\00\10\f0\09\21\02\20\04\20\08\28\02\0c\36\02\00" "\20\07\20\08\28\02\08\36\02\00\20\08\41\10\6a\24\00\20\02" "\0b\e8\05\01\04\7f\20\02\20\00\36\02\00\20\05\20\03\36\02" "\00\02\40\20\07\41\04\71\45\0d\00\20\01\20\02\28\02\00\22" "\00\6b\41\03\48\0d\00\20\00\2d\00\00\41\ef\01\47\0d\00\20" "\00\2d\00\01\41\bb\01\47\0d\00\20\00\2d\00\02\41\bf\01\47" "\0d\00\20\02\20\00\41\03\6a\36\02\00\0b\02\40\02\40\02\40" "\02\40\03\40\20\02\28\02\00\22\03\20\01\4f\0d\01\20\05\28" "\02\00\22\07\20\04\4f\0d\01\41\02\21\08\20\03\2d\00\00\22" "\00\20\06\4b\0d\04\02\40\02\40\20\00\c0\41\00\48\0d\00\20" "\07\20\00\3b\01\00\20\03\41\01\6a\21\00\0c\01\0b\20\00\41" "\c2\01\49\0d\05\02\40\20\00\41\df\01\4b\0d\00\20\01\20\03" "\6b\41\02\48\0d\05\20\03\2d\00\01\22\09\41\c0\01\71\41\80" "\01\47\0d\04\41\02\21\08\20\09\41\3f\71\20\00\41\06\74\41" "\c0\0f\71\72\22\00\20\06\4b\0d\04\20\07\20\00\3b\01\00\20" "\03\41\02\6a\21\00\0c\01\0b\02\40\20\00\41\ef\01\4b\0d\00" "\20\01\20\03\6b\41\03\48\0d\05\20\03\2d\00\02\21\0a\20\03" "\2d\00\01\21\09\02\40\02\40\02\40\20\00\41\ed\01\46\0d\00" "\20\00\41\e0\01\47\0d\01\20\09\41\e0\01\71\41\a0\01\46\0d" "\02\0c\07\0b\20\09\41\e0\01\71\41\80\01\46\0d\01\0c\06\0b" "\20\09\41\c0\01\71\41\80\01\47\0d\05\0b\20\0a\41\c0\01\71" "\41\80\01\47\0d\04\41\02\21\08\20\09\41\3f\71\41\06\74\20" "\00\41\0c\74\72\20\0a\41\3f\71\72\22\00\41\ff\ff\03\71\20" "\06\4b\0d\04\20\07\20\00\3b\01\00\20\03\41\03\6a\21\00\0c" "\01\0b\20\00\41\f4\01\4b\0d\05\41\01\21\08\20\01\20\03\6b" "\41\04\48\0d\03\20\03\2d\00\03\21\0a\20\03\2d\00\02\21\09" "\20\03\2d\00\01\21\03\02\40\02\40\02\40\02\40\20\00\41\90" "\7e\6a\0e\05\00\02\02\02\01\02\0b\20\03\41\f0\00\6a\41\ff" "\01\71\41\30\4f\0d\08\0c\02\0b\20\03\41\f0\01\71\41\80\01" "\47\0d\07\0c\01\0b\20\03\41\c0\01\71\41\80\01\47\0d\06\0b" "\20\09\41\c0\01\71\41\80\01\47\0d\05\20\0a\41\c0\01\71\41" "\80\01\47\0d\05\20\04\20\07\6b\41\04\48\0d\03\41\02\21\08" "\20\03\41\0c\74\41\80\e0\0f\71\20\00\41\07\71\22\00\41\12" "\74\72\20\09\41\06\74\22\0b\41\c0\1f\71\72\20\0a\41\3f\71" "\22\0a\72\20\06\4b\0d\03\20\07\20\00\41\08\74\20\03\41\02" "\74\22\00\41\c0\01\71\72\20\00\41\3c\71\72\20\09\41\04\76" "\41\03\71\72\41\c0\ff\00\6a\41\80\b0\03\72\3b\01\00\20\05" "\20\07\41\02\6a\36\02\00\20\07\20\0b\41\c0\07\71\20\0a\72" "\41\80\b8\03\72\3b\01\02\20\02\28\02\00\41\04\6a\21\00\0b" "\20\02\20\00\36\02\00\20\05\20\05\28\02\00\41\02\6a\36\02" "\00\0c\00\0b\00\0b\20\03\20\01\49\21\08\0b\20\08\0f\0b\41" "\01\0f\0b\41\02\0b\0b\00\20\04\20\02\36\02\00\41\03\0b\04" "\00\41\00\0b\04\00\41\00\0b\12\00\20\02\20\03\20\04\41\ff" "\ff\c3\00\41\00\10\f5\09\0b\c3\04\01\05\7f\20\00\21\05\02" "\40\20\01\20\00\6b\41\03\48\0d\00\20\00\21\05\20\04\41\04" "\71\45\0d\00\20\00\21\05\20\00\2d\00\00\41\ef\01\47\0d\00" "\20\00\21\05\20\00\2d\00\01\41\bb\01\47\0d\00\20\00\41\03" "\41\00\20\00\2d\00\02\41\bf\01\46\1b\6a\21\05\0b\41\00\21" "\06\02\40\03\40\20\05\20\01\4f\0d\01\20\02\20\06\4d\0d\01" "\20\05\2d\00\00\22\04\20\03\4b\0d\01\02\40\02\40\20\04\c0" "\41\00\48\0d\00\20\05\41\01\6a\21\05\0c\01\0b\20\04\41\c2" "\01\49\0d\02\02\40\20\04\41\df\01\4b\0d\00\20\01\20\05\6b" "\41\02\48\0d\03\20\05\2d\00\01\22\07\41\c0\01\71\41\80\01" "\47\0d\03\20\07\41\3f\71\20\04\41\06\74\41\c0\0f\71\72\20" "\03\4b\0d\03\20\05\41\02\6a\21\05\0c\01\0b\02\40\20\04\41" "\ef\01\4b\0d\00\20\01\20\05\6b\41\03\48\0d\03\20\05\2d\00" "\02\21\08\20\05\2d\00\01\21\07\02\40\02\40\02\40\20\04\41" "\ed\01\46\0d\00\20\04\41\e0\01\47\0d\01\20\07\41\e0\01\71" "\41\a0\01\46\0d\02\0c\06\0b\20\07\41\e0\01\71\41\80\01\47" "\0d\05\0c\01\0b\20\07\41\c0\01\71\41\80\01\47\0d\04\0b\20" "\08\41\c0\01\71\41\80\01\47\0d\03\20\07\41\3f\71\41\06\74" "\20\04\41\0c\74\41\80\e0\03\71\72\20\08\41\3f\71\72\20\03" "\4b\0d\03\20\05\41\03\6a\21\05\0c\01\0b\20\04\41\f4\01\4b" "\0d\02\20\01\20\05\6b\41\04\48\0d\02\20\02\20\06\6b\41\02" "\49\0d\02\20\05\2d\00\03\21\09\20\05\2d\00\02\21\08\20\05" "\2d\00\01\21\07\02\40\02\40\02\40\02\40\20\04\41\90\7e\6a" "\0e\05\00\02\02\02\01\02\0b\20\07\41\f0\00\6a\41\ff\01\71" "\41\30\4f\0d\05\0c\02\0b\20\07\41\f0\01\71\41\80\01\47\0d" "\04\0c\01\0b\20\07\41\c0\01\71\41\80\01\47\0d\03\0b\20\08" "\41\c0\01\71\41\80\01\47\0d\02\20\09\41\c0\01\71\41\80\01" "\47\0d\02\20\07\41\3f\71\41\0c\74\20\04\41\12\74\41\80\80" "\f0\00\71\72\20\08\41\06\74\41\c0\1f\71\72\20\09\41\3f\71" "\72\20\03\4b\0d\02\20\05\41\04\6a\21\05\20\06\41\01\6a\21" "\06\0b\20\06\41\01\6a\21\06\0c\00\0b\00\0b\20\05\20\00\6b" "\0b\04\00\41\04\0b\0d\00\20\00\10\ce\04\1a\20\00\10\8b\0d" "\0b\56\01\01\7f\23\00\41\10\6b\22\08\24\00\20\08\20\02\36" "\02\0c\20\08\20\05\36\02\08\20\02\20\03\20\08\41\0c\6a\20" "\05\20\06\20\08\41\08\6a\41\ff\ff\c3\00\41\00\10\ee\09\21" "\02\20\04\20\08\28\02\0c\36\02\00\20\07\20\08\28\02\08\36" "\02\00\20\08\41\10\6a\24\00\20\02\0b\56\01\01\7f\23\00\41" "\10\6b\22\08\24\00\20\08\20\02\36\02\0c\20\08\20\05\36\02" "\08\20\02\20\03\20\08\41\0c\6a\20\05\20\06\20\08\41\08\6a" "\41\ff\ff\c3\00\41\00\10\f0\09\21\02\20\04\20\08\28\02\0c" "\36\02\00\20\07\20\08\28\02\08\36\02\00\20\08\41\10\6a\24" "\00\20\02\0b\0b\00\20\04\20\02\36\02\00\41\03\0b\04\00\41" "\00\0b\04\00\41\00\0b\12\00\20\02\20\03\20\04\41\ff\ff\c3" "\00\41\00\10\f5\09\0b\04\00\41\04\0b\0d\00\20\00\10\ce\04" "\1a\20\00\10\8b\0d\0b\56\01\01\7f\23\00\41\10\6b\22\08\24" "\00\20\08\20\02\36\02\0c\20\08\20\05\36\02\08\20\02\20\03" "\20\08\41\0c\6a\20\05\20\06\20\08\41\08\6a\41\ff\ff\c3\00" "\41\00\10\81\0a\21\02\20\04\20\08\28\02\0c\36\02\00\20\07" "\20\08\28\02\08\36\02\00\20\08\41\10\6a\24\00\20\02\0b\b3" "\04\00\20\02\20\00\36\02\00\20\05\20\03\36\02\00\02\40\02" "\40\20\07\41\02\71\45\0d\00\41\01\21\00\20\04\20\03\6b\41" "\03\48\0d\01\20\05\20\03\41\01\6a\36\02\00\20\03\41\ef\01" "\3a\00\00\20\05\20\05\28\02\00\22\03\41\01\6a\36\02\00\20" "\03\41\bb\01\3a\00\00\20\05\20\05\28\02\00\22\03\41\01\6a" "\36\02\00\20\03\41\bf\01\3a\00\00\0b\20\02\28\02\00\21\03" "\03\40\02\40\20\03\20\01\49\0d\00\41\00\21\00\0c\02\0b\41" "\02\21\00\20\03\28\02\00\22\03\20\06\4b\0d\01\20\03\41\80" "\70\71\41\80\b0\03\46\0d\01\02\40\02\40\02\40\20\03\41\ff" "\00\4b\0d\00\41\01\21\00\20\04\20\05\28\02\00\22\07\6b\41" "\01\48\0d\04\20\05\20\07\41\01\6a\36\02\00\20\07\20\03\3a" "\00\00\0c\01\0b\02\40\20\03\41\ff\0f\4b\0d\00\20\04\20\05" "\28\02\00\22\00\6b\41\02\48\0d\02\20\05\20\00\41\01\6a\36" "\02\00\20\00\20\03\41\06\76\41\c0\01\72\3a\00\00\20\05\20" "\05\28\02\00\22\00\41\01\6a\36\02\00\20\00\20\03\41\3f\71" "\41\80\01\72\3a\00\00\0c\01\0b\20\04\20\05\28\02\00\22\00" "\6b\21\07\02\40\20\03\41\ff\ff\03\4b\0d\00\20\07\41\03\48" "\0d\02\20\05\20\00\41\01\6a\36\02\00\20\00\20\03\41\0c\76" "\41\e0\01\72\3a\00\00\20\05\20\05\28\02\00\22\00\41\01\6a" "\36\02\00\20\00\20\03\41\06\76\41\3f\71\41\80\01\72\3a\00" "\00\20\05\20\05\28\02\00\22\00\41\01\6a\36\02\00\20\00\20" "\03\41\3f\71\41\80\01\72\3a\00\00\0c\01\0b\20\07\41\04\48" "\0d\01\20\05\20\00\41\01\6a\36\02\00\20\00\20\03\41\12\76" "\41\f0\01\72\3a\00\00\20\05\20\05\28\02\00\22\00\41\01\6a" "\36\02\00\20\00\20\03\41\0c\76\41\3f\71\41\80\01\72\3a\00" "\00\20\05\20\05\28\02\00\22\00\41\01\6a\36\02\00\20\00\20" "\03\41\06\76\41\3f\71\41\80\01\72\3a\00\00\20\05\20\05\28" "\02\00\22\00\41\01\6a\36\02\00\20\00\20\03\41\3f\71\41\80" "\01\72\3a\00\00\0b\20\02\20\02\28\02\00\41\04\6a\22\03\36" "\02\00\0c\01\0b\0b\41\01\0f\0b\20\00\0b\56\01\01\7f\23\00" "\41\10\6b\22\08\24\00\20\08\20\02\36\02\0c\20\08\20\05\36" "\02\08\20\02\20\03\20\08\41\0c\6a\20\05\20\06\20\08\41\08" "\6a\41\ff\ff\c3\00\41\00\10\83\0a\21\02\20\04\20\08\28\02" "\0c\36\02\00\20\07\20\08\28\02\08\36\02\00\20\08\41\10\6a" "\24\00\20\02\0b\ec\04\01\05\7f\20\02\20\00\36\02\00\20\05" "\20\03\36\02\00\02\40\20\07\41\04\71\45\0d\00\20\01\20\02" "\28\02\00\22\00\6b\41\03\48\0d\00\20\00\2d\00\00\41\ef\01" "\47\0d\00\20\00\2d\00\01\41\bb\01\47\0d\00\20\00\2d\00\02" "\41\bf\01\47\0d\00\20\02\20\00\41\03\6a\36\02\00\0b\02\40" "\02\40\02\40\03\40\20\02\28\02\00\22\00\20\01\4f\0d\01\20" "\05\28\02\00\22\08\20\04\4f\0d\01\20\00\2c\00\00\22\07\41" "\ff\01\71\21\03\02\40\02\40\20\07\41\00\48\0d\00\02\40\20" "\03\20\06\4b\0d\00\41\01\21\07\0c\02\0b\41\02\0f\0b\41\02" "\21\09\20\07\41\42\49\0d\03\02\40\20\07\41\5f\4b\0d\00\20" "\01\20\00\6b\41\02\48\0d\05\20\00\2d\00\01\22\0a\41\c0\01" "\71\41\80\01\47\0d\04\41\02\21\07\41\02\21\09\20\0a\41\3f" "\71\20\03\41\06\74\41\c0\0f\71\72\22\03\20\06\4d\0d\01\0c" "\04\0b\02\40\20\07\41\6f\4b\0d\00\20\01\20\00\6b\41\03\48" "\0d\05\20\00\2d\00\02\21\0b\20\00\2d\00\01\21\0a\02\40\02" "\40\02\40\20\03\41\ed\01\46\0d\00\20\03\41\e0\01\47\0d\01" "\20\0a\41\e0\01\71\41\a0\01\46\0d\02\0c\07\0b\20\0a\41\e0" "\01\71\41\80\01\46\0d\01\0c\06\0b\20\0a\41\c0\01\71\41\80" "\01\47\0d\05\0b\20\0b\41\c0\01\71\41\80\01\47\0d\04\41\03" "\21\07\20\0a\41\3f\71\41\06\74\20\03\41\0c\74\41\80\e0\03" "\71\72\20\0b\41\3f\71\72\22\03\20\06\4d\0d\01\0c\04\0b\20" "\07\41\74\4b\0d\03\20\01\20\00\6b\41\04\48\0d\04\20\00\2d" "\00\03\21\0c\20\00\2d\00\02\21\0b\20\00\2d\00\01\21\0a\02" "\40\02\40\02\40\02\40\20\03\41\90\7e\6a\0e\05\00\02\02\02" "\01\02\0b\20\0a\41\f0\00\6a\41\ff\01\71\41\30\49\0d\02\0c" "\06\0b\20\0a\41\f0\01\71\41\80\01\46\0d\01\0c\05\0b\20\0a" "\41\c0\01\71\41\80\01\47\0d\04\0b\20\0b\41\c0\01\71\41\80" "\01\47\0d\03\20\0c\41\c0\01\71\41\80\01\47\0d\03\41\04\21" "\07\20\0a\41\3f\71\41\0c\74\20\03\41\12\74\41\80\80\f0\00" "\71\72\20\0b\41\06\74\41\c0\1f\71\72\20\0c\41\3f\71\72\22" "\03\20\06\4b\0d\03\0b\20\08\20\03\36\02\00\20\02\20\00\20" "\07\6a\36\02\00\20\05\20\05\28\02\00\41\04\6a\36\02\00\0c" "\00\0b\00\0b\20\00\20\01\49\21\09\0b\20\09\0f\0b\41\01\0b" "\0b\00\20\04\20\02\36\02\00\41\03\0b\04\00\41\00\0b\04\00" "\41\00\0b\12\00\20\02\20\03\20\04\41\ff\ff\c3\00\41\00\10" "\88\0a\0b\b0\04\01\06\7f\20\00\21\05\02\40\20\01\20\00\6b" "\41\03\48\0d\00\20\00\21\05\20\04\41\04\71\45\0d\00\20\00" "\21\05\20\00\2d\00\00\41\ef\01\47\0d\00\20\00\21\05\20\00" "\2d\00\01\41\bb\01\47\0d\00\20\00\41\03\41\00\20\00\2d\00" "\02\41\bf\01\46\1b\6a\21\05\0b\41\00\21\06\02\40\03\40\20" "\05\20\01\4f\0d\01\20\06\20\02\4f\0d\01\20\05\2c\00\00\22" "\04\41\ff\01\71\21\07\02\40\02\40\20\04\41\00\48\0d\00\41" "\01\21\04\20\07\20\03\4b\0d\03\0c\01\0b\20\04\41\42\49\0d" "\02\02\40\20\04\41\5f\4b\0d\00\20\01\20\05\6b\41\02\48\0d" "\03\20\05\2d\00\01\22\08\41\c0\01\71\41\80\01\47\0d\03\41" "\02\21\04\20\08\41\3f\71\20\07\41\06\74\41\c0\0f\71\72\20" "\03\4b\0d\03\0c\01\0b\02\40\20\04\41\6f\4b\0d\00\20\01\20" "\05\6b\41\03\48\0d\03\20\05\2d\00\02\21\09\20\05\2d\00\01" "\21\08\02\40\02\40\02\40\20\07\41\ed\01\46\0d\00\20\07\41" "\e0\01\47\0d\01\20\08\41\e0\01\71\41\a0\01\46\0d\02\0c\06" "\0b\20\08\41\e0\01\71\41\80\01\47\0d\05\0c\01\0b\20\08\41" "\c0\01\71\41\80\01\47\0d\04\0b\20\09\41\c0\01\71\41\80\01" "\47\0d\03\41\03\21\04\20\08\41\3f\71\41\06\74\20\07\41\0c" "\74\41\80\e0\03\71\72\20\09\41\3f\71\72\20\03\4b\0d\03\0c" "\01\0b\20\04\41\74\4b\0d\02\20\01\20\05\6b\41\04\48\0d\02" "\20\05\2d\00\03\21\0a\20\05\2d\00\02\21\09\20\05\2d\00\01" "\21\08\02\40\02\40\02\40\02\40\20\07\41\90\7e\6a\0e\05\00" "\02\02\02\01\02\0b\20\08\41\f0\00\6a\41\ff\01\71\41\30\4f" "\0d\05\0c\02\0b\20\08\41\f0\01\71\41\80\01\47\0d\04\0c\01" "\0b\20\08\41\c0\01\71\41\80\01\47\0d\03\0b\20\09\41\c0\01" "\71\41\80\01\47\0d\02\20\0a\41\c0\01\71\41\80\01\47\0d\02" "\41\04\21\04\20\08\41\3f\71\41\0c\74\20\07\41\12\74\41\80" "\80\f0\00\71\72\20\09\41\06\74\41\c0\1f\71\72\20\0a\41\3f" "\71\72\20\03\4b\0d\02\0b\20\06\41\01\6a\21\06\20\05\20\04" "\6a\21\05\0c\00\0b\00\0b\20\05\20\00\6b\0b\04\00\41\04\0b" "\0d\00\20\00\10\ce\04\1a\20\00\10\8b\0d\0b\56\01\01\7f\23" "\00\41\10\6b\22\08\24\00\20\08\20\02\36\02\0c\20\08\20\05" "\36\02\08\20\02\20\03\20\08\41\0c\6a\20\05\20\06\20\08\41" "\08\6a\41\ff\ff\c3\00\41\00\10\81\0a\21\02\20\04\20\08\28" "\02\0c\36\02\00\20\07\20\08\28\02\08\36\02\00\20\08\41\10" "\6a\24\00\20\02\0b\56\01\01\7f\23\00\41\10\6b\22\08\24\00" "\20\08\20\02\36\02\0c\20\08\20\05\36\02\08\20\02\20\03\20" "\08\41\0c\6a\20\05\20\06\20\08\41\08\6a\41\ff\ff\c3\00\41" "\00\10\83\0a\21\02\20\04\20\08\28\02\0c\36\02\00\20\07\20" "\08\28\02\08\36\02\00\20\08\41\10\6a\24\00\20\02\0b\0b\00" "\20\04\20\02\36\02\00\41\03\0b\04\00\41\00\0b\04\00\41\00" "\0b\12\00\20\02\20\03\20\04\41\ff\ff\c3\00\41\00\10\88\0a" "\0b\04\00\41\04\0b\29\00\20\00\20\01\10\ac\08\22\01\41\ae" "\d8\00\3b\01\08\20\01\41\b0\c6\00\41\08\6a\36\02\00\20\01" "\41\0c\6a\10\d3\01\1a\20\01\0b\2c\00\20\00\20\01\10\ac\08" "\22\01\42\ae\80\80\80\c0\05\37\02\08\20\01\41\d8\c6\00\41" "\08\6a\36\02\00\20\01\41\10\6a\10\d3\01\1a\20\01\0b\1c\00" "\20\00\41\b0\c6\00\41\08\6a\36\02\00\20\00\41\0c\6a\10\99" "\0d\1a\20\00\10\ce\04\0b\0d\00\20\00\10\94\0a\1a\20\00\10" "\8b\0d\0b\1c\00\20\00\41\d8\c6\00\41\08\6a\36\02\00\20\00" "\41\10\6a\10\99\0d\1a\20\00\10\ce\04\0b\0d\00\20\00\10\96" "\0a\1a\20\00\10\8b\0d\0b\07\00\20\00\2c\00\08\0b\07\00\20" "\00\28\02\08\0b\07\00\20\00\2c\00\09\0b\07\00\20\00\28\02" "\0c\0b\0d\00\20\00\20\01\41\0c\6a\10\fa\06\1a\0b\0d\00\20" "\00\20\01\41\10\6a\10\fa\06\1a\0b\0b\00\20\00\41\93\0b\10" "\e6\02\1a\0b\0c\00\20\00\41\80\c7\00\10\a0\0a\1a\0b\31\01" "\01\7f\23\00\41\10\6b\22\02\24\00\20\00\20\02\41\0f\6a\20" "\02\41\0e\6a\10\da\04\22\00\20\01\20\01\10\a1\0a\10\aa\0d" "\20\02\41\10\6a\24\00\20\00\0b\07\00\20\00\10\c6\0c\0b\0b" "\00\20\00\41\9c\0b\10\e6\02\1a\0b\0c\00\20\00\41\94\c7\00" "\10\a0\0a\1a\0b\09\00\20\00\20\01\10\a5\0a\0b\09\00\20\00" "\20\01\10\9f\0d\0b\09\00\20\00\20\01\10\c7\0c\0b\32\00\02" "\40\41\00\2d\00\ac\9d\01\45\0d\00\41\00\28\02\a8\9d\01\0f" "\0b\10\a8\0a\41\00\41\01\3a\00\ac\9d\01\41\00\41\e0\9e\01" "\36\02\a8\9d\01\41\e0\9e\01\0b\bd\01\00\02\40\41\00\2d\00" "\88\a0\01\0d\00\41\da\00\41\00\41\80\08\10\e5\02\1a\41\00" "\41\01\3a\00\88\a0\01\0b\41\e0\9e\01\41\c3\08\10\a4\0a\1a" "\41\ec\9e\01\41\ca\08\10\a4\0a\1a\41\f8\9e\01\41\a8\08\10" "\a4\0a\1a\41\84\9f\01\41\b0\08\10\a4\0a\1a\41\90\9f\01\41" "\9f\08\10\a4\0a\1a\41\9c\9f\01\41\d1\08\10\a4\0a\1a\41\a8" "\9f\01\41\ba\08\10\a4\0a\1a\41\b4\9f\01\41\aa\0a\10\a4\0a" "\1a\41\c0\9f\01\41\c1\0a\10\a4\0a\1a\41\cc\9f\01\41\98\0b" "\10\a4\0a\1a\41\d8\9f\01\41\d0\0b\10\a4\0a\1a\41\e4\9f\01" "\41\86\09\10\a4\0a\1a\41\f0\9f\01\41\e5\0a\10\a4\0a\1a\41" "\fc\9f\01\41\c7\09\10\a4\0a\1a\0b\1e\01\01\7f\41\88\a0\01" "\21\01\03\40\20\01\41\74\6a\10\99\0d\22\01\41\e0\9e\01\47" "\0d\00\0b\0b\32\00\02\40\41\00\2d\00\b4\9d\01\45\0d\00\41" "\00\28\02\b0\9d\01\0f\0b\10\ab\0a\41\00\41\01\3a\00\b4\9d" "\01\41\00\41\90\a0\01\36\02\b0\9d\01\41\90\a0\01\0b\cb\01" "\00\02\40\41\00\2d\00\b8\a1\01\0d\00\41\db\00\41\00\41\80" "\08\10\e5\02\1a\41\00\41\01\3a\00\b8\a1\01\0b\41\90\a0\01" "\41\e4\e9\00\10\ad\0a\1a\41\9c\a0\01\41\80\ea\00\10\ad\0a" "\1a\41\a8\a0\01\41\9c\ea\00\10\ad\0a\1a\41\b4\a0\01\41\bc" "\ea\00\10\ad\0a\1a\41\c0\a0\01\41\e4\ea\00\10\ad\0a\1a\41" "\cc\a0\01\41\88\eb\00\10\ad\0a\1a\41\d8\a0\01\41\a4\eb\00" "\10\ad\0a\1a\41\e4\a0\01\41\c8\eb\00\10\ad\0a\1a\41\f0\a0" "\01\41\d8\eb\00\10\ad\0a\1a\41\fc\a0\01\41\e8\eb\00\10\ad" "\0a\1a\41\88\a1\01\41\f8\eb\00\10\ad\0a\1a\41\94\a1\01\41" "\88\ec\00\10\ad\0a\1a\41\a0\a1\01\41\98\ec\00\10\ad\0a\1a" "\41\ac\a1\01\41\a8\ec\00\10\ad\0a\1a\0b\1e\01\01\7f\41\b8" "\a1\01\21\01\03\40\20\01\41\74\6a\10\a7\0d\22\01\41\90\a0" "\01\47\0d\00\0b\0b\09\00\20\00\20\01\10\cb\0a\0b\32\00\02" "\40\41\00\2d\00\bc\9d\01\45\0d\00\41\00\28\02\b8\9d\01\0f" "\0b\10\af\0a\41\00\41\01\3a\00\bc\9d\01\41\00\41\c0\a1\01" "\36\02\b8\9d\01\41\c0\a1\01\0b\ab\02\00\02\40\41\00\2d\00" "\e0\a3\01\0d\00\41\dc\00\41\00\41\80\08\10\e5\02\1a\41\00" "\41\01\3a\00\e0\a3\01\0b\41\c0\a1\01\41\92\08\10\a4\0a\1a" "\41\cc\a1\01\41\89\08\10\a4\0a\1a\41\d8\a1\01\41\e9\0a\10" "\a4\0a\1a\41\e4\a1\01\41\df\0a\10\a4\0a\1a\41\f0\a1\01\41" "\d8\08\10\a4\0a\1a\41\fc\a1\01\41\a2\0b\10\a4\0a\1a\41\88" "\a2\01\41\9a\08\10\a4\0a\1a\41\94\a2\01\41\bc\09\10\a4\0a" "\1a\41\a0\a2\01\41\f3\09\10\a4\0a\1a\41\ac\a2\01\41\e2\09" "\10\a4\0a\1a\41\b8\a2\01\41\ea\09\10\a4\0a\1a\41\c4\a2\01" "\41\fd\09\10\a4\0a\1a\41\d0\a2\01\41\d4\0a\10\a4\0a\1a\41" "\dc\a2\01\41\e1\0b\10\a4\0a\1a\41\e8\a2\01\41\96\0a\10\a4" "\0a\1a\41\f4\a2\01\41\d7\09\10\a4\0a\1a\41\80\a3\01\41\d8" "\08\10\a4\0a\1a\41\8c\a3\01\41\ae\0a\10\a4\0a\1a\41\98\a3" "\01\41\d8\0a\10\a4\0a\1a\41\a4\a3\01\41\ef\0a\10\a4\0a\1a" "\41\b0\a3\01\41\9a\0a\10\a4\0a\1a\41\bc\a3\01\41\c3\09\10" "\a4\0a\1a\41\c8\a3\01\41\82\09\10\a4\0a\1a\41\d4\a3\01\41" "\dd\0b\10\a4\0a\1a\0b\1e\01\01\7f\41\e0\a3\01\21\01\03\40" "\20\01\41\74\6a\10\99\0d\22\01\41\c0\a1\01\47\0d\00\0b\0b" "\32\00\02\40\41\00\2d\00\c4\9d\01\45\0d\00\41\00\28\02\c0" "\9d\01\0f\0b\10\b2\0a\41\00\41\01\3a\00\c4\9d\01\41\00\41" "\f0\a3\01\36\02\c0\9d\01\41\f0\a3\01\0b\c3\02\00\02\40\41" "\00\2d\00\90\a6\01\0d\00\41\dd\00\41\00\41\80\08\10\e5\02" "\1a\41\00\41\01\3a\00\90\a6\01\0b\41\f0\a3\01\41\b8\ec\00" "\10\ad\0a\1a\41\fc\a3\01\41\d8\ec\00\10\ad\0a\1a\41\88\a4" "\01\41\fc\ec\00\10\ad\0a\1a\41\94\a4\01\41\94\ed\00\10\ad" "\0a\1a\41\a0\a4\01\41\ac\ed\00\10\ad\0a\1a\41\ac\a4\01\41" "\bc\ed\00\10\ad\0a\1a\41\b8\a4\01\41\d0\ed\00\10\ad\0a\1a" "\41\c4\a4\01\41\e4\ed\00\10\ad\0a\1a\41\d0\a4\01\41\80\ee" "\00\10\ad\0a\1a\41\dc\a4\01\41\a8\ee\00\10\ad\0a\1a\41\e8" "\a4\01\41\c8\ee\00\10\ad\0a\1a\41\f4\a4\01\41\ec\ee\00\10" "\ad\0a\1a\41\80\a5\01\41\90\ef\00\10\ad\0a\1a\41\8c\a5\01" "\41\a0\ef\00\10\ad\0a\1a\41\98\a5\01\41\b0\ef\00\10\ad\0a" "\1a\41\a4\a5\01\41\c0\ef\00\10\ad\0a\1a\41\b0\a5\01\41\ac" "\ed\00\10\ad\0a\1a\41\bc\a5\01\41\d0\ef\00\10\ad\0a\1a\41" "\c8\a5\01\41\e0\ef\00\10\ad\0a\1a\41\d4\a5\01\41\f0\ef\00" "\10\ad\0a\1a\41\e0\a5\01\41\80\f0\00\10\ad\0a\1a\41\ec\a5" "\01\41\90\f0\00\10\ad\0a\1a\41\f8\a5\01\41\a0\f0\00\10\ad" "\0a\1a\41\84\a6\01\41\b0\f0\00\10\ad\0a\1a\0b\1e\01\01\7f" "\41\90\a6\01\21\01\03\40\20\01\41\74\6a\10\a7\0d\22\01\41" "\f0\a3\01\47\0d\00\0b\0b\32\00\02\40\41\00\2d\00\cc\9d\01" "\45\0d\00\41\00\28\02\c8\9d\01\0f\0b\10\b5\0a\41\00\41\01" "\3a\00\cc\9d\01\41\00\41\a0\a6\01\36\02\c8\9d\01\41\a0\a6" "\01\0b\39\00\02\40\41\00\2d\00\b8\a6\01\0d\00\41\de\00\41" "\00\41\80\08\10\e5\02\1a\41\00\41\01\3a\00\b8\a6\01\0b\41" "\a0\a6\01\41\97\0c\10\a4\0a\1a\41\ac\a6\01\41\94\0c\10\a4" "\0a\1a\0b\1e\01\01\7f\41\b8\a6\01\21\01\03\40\20\01\41\74" "\6a\10\99\0d\22\01\41\a0\a6\01\47\0d\00\0b\0b\32\00\02\40" "\41\00\2d\00\d4\9d\01\45\0d\00\41\00\28\02\d0\9d\01\0f\0b" "\10\b8\0a\41\00\41\01\3a\00\d4\9d\01\41\00\41\c0\a6\01\36" "\02\d0\9d\01\41\c0\a6\01\0b\3b\00\02\40\41\00\2d\00\d8\a6" "\01\0d\00\41\df\00\41\00\41\80\08\10\e5\02\1a\41\00\41\01" "\3a\00\d8\a6\01\0b\41\c0\a6\01\41\c0\f0\00\10\ad\0a\1a\41" "\cc\a6\01\41\cc\f0\00\10\ad\0a\1a\0b\1e\01\01\7f\41\d8\a6" "\01\21\01\03\40\20\01\41\74\6a\10\a7\0d\22\01\41\c0\a6\01" "\47\0d\00\0b\0b\32\00\02\40\41\00\2d\00\e4\9d\01\0d\00\41" "\d8\9d\01\41\dc\08\10\e6\02\1a\41\e0\00\41\00\41\80\08\10" "\e5\02\1a\41\00\41\01\3a\00\e4\9d\01\0b\41\d8\9d\01\0b\0a" "\00\41\d8\9d\01\10\99\0d\1a\0b\33\00\02\40\41\00\2d\00\f4" "\9d\01\0d\00\41\e8\9d\01\41\ac\c7\00\10\a0\0a\1a\41\e1\00" "\41\00\41\80\08\10\e5\02\1a\41\00\41\01\3a\00\f4\9d\01\0b" "\41\e8\9d\01\0b\0a\00\41\e8\9d\01\10\a7\0d\1a\0b\32\00\02" "\40\41\00\2d\00\84\9e\01\0d\00\41\f8\9d\01\41\87\0c\10\e6" "\02\1a\41\e2\00\41\00\41\80\08\10\e5\02\1a\41\00\41\01\3a" "\00\84\9e\01\0b\41\f8\9d\01\0b\0a\00\41\f8\9d\01\10\99\0d" "\1a\0b\33\00\02\40\41\00\2d\00\94\9e\01\0d\00\41\88\9e\01" "\41\d0\c7\00\10\a0\0a\1a\41\e3\00\41\00\41\80\08\10\e5\02" "\1a\41\00\41\01\3a\00\94\9e\01\0b\41\88\9e\01\0b\0a\00\41" "\88\9e\01\10\a7\0d\1a\0b\32\00\02\40\41\00\2d\00\a4\9e\01" "\0d\00\41\98\9e\01\41\e8\0b\10\e6\02\1a\41\e4\00\41\00\41" "\80\08\10\e5\02\1a\41\00\41\01\3a\00\a4\9e\01\0b\41\98\9e" "\01\0b\0a\00\41\98\9e\01\10\99\0d\1a\0b\33\00\02\40\41\00" "\2d\00\b4\9e\01\0d\00\41\a8\9e\01\41\f4\c7\00\10\a0\0a\1a" "\41\e5\00\41\00\41\80\08\10\e5\02\1a\41\00\41\01\3a\00\b4" "\9e\01\0b\41\a8\9e\01\0b\0a\00\41\a8\9e\01\10\a7\0d\1a\0b" "\32\00\02\40\41\00\2d\00\c4\9e\01\0d\00\41\b8\9e\01\41\9e" "\0a\10\e6\02\1a\41\e6\00\41\00\41\80\08\10\e5\02\1a\41\00" "\41\01\3a\00\c4\9e\01\0b\41\b8\9e\01\0b\0a\00\41\b8\9e\01" "\10\99\0d\1a\0b\33\00\02\40\41\00\2d\00\d4\9e\01\0d\00\41" "\c8\9e\01\41\c8\c8\00\10\a0\0a\1a\41\e7\00\41\00\41\80\08" "\10\e5\02\1a\41\00\41\01\3a\00\d4\9e\01\0b\41\c8\9e\01\0b" "\0a\00\41\c8\9e\01\10\a7\0d\1a\0b\1a\00\02\40\20\00\28\02" "\00\10\8f\05\46\0d\00\20\00\28\02\00\10\bb\04\0b\20\00\0b" "\09\00\20\00\20\01\10\ad\0d\0b\0a\00\20\00\10\ce\04\10\8b" "\0d\0b\0a\00\20\00\10\ce\04\10\8b\0d\0b\0a\00\20\00\10\ce" "\04\10\8b\0d\0b\0a\00\20\00\10\ce\04\10\8b\0d\0b\10\00\20" "\00\41\08\6a\10\d1\0a\1a\20\00\10\ce\04\0b\04\00\20\00\0b" "\0a\00\20\00\10\d0\0a\10\8b\0d\0b\10\00\20\00\41\08\6a\10" "\d4\0a\1a\20\00\10\ce\04\0b\04\00\20\00\0b\0a\00\20\00\10" "\d3\0a\10\8b\0d\0b\0a\00\20\00\10\d7\0a\10\8b\0d\0b\10\00" "\20\00\41\08\6a\10\ca\0a\1a\20\00\10\ce\04\0b\0a\00\20\00" "\10\d9\0a\10\8b\0d\0b\10\00\20\00\41\08\6a\10\ca\0a\1a\20" "\00\10\ce\04\0b\0a\00\20\00\10\ce\04\10\8b\0d\0b\0a\00\20" "\00\10\ce\04\10\8b\0d\0b\0a\00\20\00\10\ce\04\10\8b\0d\0b" "\0a\00\20\00\10\ce\04\10\8b\0d\0b\0a\00\20\00\10\ce\04\10" "\8b\0d\0b\0a\00\20\00\10\ce\04\10\8b\0d\0b\0a\00\20\00\10" "\ce\04\10\8b\0d\0b\0a\00\20\00\10\ce\04\10\8b\0d\0b\0a\00" "\20\00\10\ce\04\10\8b\0d\0b\0a\00\20\00\10\ce\04\10\8b\0d" "\0b\09\00\20\00\20\01\10\e6\0a\0b\b8\01\01\02\7f\23\00\41" "\10\6b\22\04\24\00\02\40\20\00\10\c8\02\20\03\49\0d\00\02" "\40\02\40\20\03\10\c9\02\45\0d\00\20\00\20\03\10\b6\02\20" "\00\10\b1\02\21\05\0c\01\0b\20\04\41\08\6a\20\00\10\de\01" "\20\03\10\ca\02\41\01\6a\10\cb\02\20\04\28\02\08\22\05\20" "\04\28\02\0c\10\cc\02\20\00\20\05\10\cd\02\20\00\20\04\28" "\02\0c\10\ce\02\20\00\20\03\10\cf\02\0b\02\40\03\40\20\01" "\20\02\46\0d\01\20\05\20\01\10\b7\02\20\05\41\01\6a\21\05" "\20\01\41\01\6a\21\01\0c\00\0b\00\0b\20\04\41\00\3a\00\07" "\20\05\20\04\41\07\6a\10\b7\02\20\04\41\10\6a\24\00\0f\0b" "\20\00\10\d0\02\00\0b\07\00\20\01\20\00\6b\0b\04\00\20\00" "\0b\07\00\20\00\10\eb\0a\0b\09\00\20\00\20\01\10\ed\0a\0b" "\b8\01\01\02\7f\23\00\41\10\6b\22\04\24\00\02\40\20\00\10" "\ee\0a\20\03\49\0d\00\02\40\02\40\20\03\10\ef\0a\45\0d\00" "\20\00\20\03\10\dd\07\20\00\10\dc\07\21\05\0c\01\0b\20\04" "\41\08\6a\20\00\10\e3\07\20\03\10\f0\0a\41\01\6a\10\f1\0a" "\20\04\28\02\08\22\05\20\04\28\02\0c\10\f2\0a\20\00\20\05" "\10\f3\0a\20\00\20\04\28\02\0c\10\f4\0a\20\00\20\03\10\db" "\07\0b\02\40\03\40\20\01\20\02\46\0d\01\20\05\20\01\10\da" "\07\20\05\41\04\6a\21\05\20\01\41\04\6a\21\01\0c\00\0b\00" "\0b\20\04\41\00\36\02\04\20\05\20\04\41\04\6a\10\da\07\20" "\04\41\10\6a\24\00\0f\0b\20\00\10\f5\0a\00\0b\07\00\20\00" "\10\ec\0a\0b\04\00\20\00\0b\0a\00\20\01\20\00\6b\41\02\75" "\0b\19\00\20\00\10\fe\06\10\f6\0a\22\00\20\00\10\d2\02\41" "\01\76\4b\76\41\70\6a\0b\07\00\20\00\41\02\49\0b\2d\01\01" "\7f\41\01\21\01\02\40\20\00\41\02\49\0d\00\20\00\41\01\6a" "\10\fa\0a\22\00\20\00\41\7f\6a\22\00\20\00\41\02\46\1b\21" "\01\0b\20\01\0b\19\00\20\01\20\02\10\f8\0a\21\01\20\00\20" "\02\36\02\04\20\00\20\01\36\02\00\0b\02\00\0b\0c\00\20\00" "\10\82\07\20\01\36\02\00\0b\3a\01\01\7f\20\00\10\82\07\22" "\02\20\02\28\02\08\41\80\80\80\80\78\71\20\01\41\ff\ff\ff" "\ff\07\71\72\36\02\08\20\00\10\82\07\22\00\20\00\28\02\08" "\41\80\80\80\80\78\72\36\02\08\0b\09\00\41\f3\0a\10\d3\02" "\00\0b\08\00\10\d2\02\41\02\76\0b\04\00\20\00\0b\1d\00\02" "\40\20\00\10\f6\0a\20\01\4f\0d\00\10\d7\02\00\0b\20\01\41" "\02\74\41\04\10\d8\02\0b\07\00\20\00\10\fe\0a\0b\0a\00\20" "\00\41\03\6a\41\7c\71\0b\07\00\20\00\10\fc\0a\0b\04\00\20" "\00\0b\04\00\20\00\0b\04\00\20\00\0b\12\00\20\00\20\00\10" "\d9\01\10\da\01\20\01\10\80\0b\1a\0b\31\01\01\7f\23\00\41" "\10\6b\22\03\24\00\20\00\20\02\10\a1\07\20\03\41\00\3a\00" "\0f\20\01\20\02\6a\20\03\41\0f\6a\10\b7\02\20\03\41\10\6a" "\24\00\20\00\0b\fe\01\01\03\7f\23\00\41\10\6b\22\07\24\00" "\02\40\20\00\10\c8\02\22\08\20\01\6b\20\02\49\0d\00\20\00" "\10\d9\01\21\09\02\40\20\08\41\01\76\41\70\6a\20\01\4d\0d" "\00\20\07\20\01\41\01\74\36\02\0c\20\07\20\02\20\01\6a\36" "\02\04\20\07\41\04\6a\20\07\41\0c\6a\10\ea\02\28\02\00\10" "\ca\02\41\01\6a\21\08\0b\20\07\41\04\6a\20\00\10\de\01\20" "\08\10\cb\02\20\07\28\02\04\22\08\20\07\28\02\08\10\cc\02" "\02\40\20\04\45\0d\00\20\08\10\da\01\20\09\10\da\01\20\04" "\10\61\1a\0b\02\40\20\03\20\05\20\04\6a\22\02\46\0d\00\20" "\08\10\da\01\20\04\6a\20\06\6a\20\09\10\da\01\20\04\6a\20" "\05\6a\20\03\20\02\6b\10\61\1a\0b\02\40\20\01\41\01\6a\22" "\01\41\0b\46\0d\00\20\00\10\de\01\20\09\20\01\10\b4\02\0b" "\20\00\20\08\10\cd\02\20\00\20\07\28\02\08\10\ce\02\20\07" "\41\10\6a\24\00\0f\0b\20\00\10\d0\02\00\0b\0b\00\20\00\20" "\01\20\02\10\83\0b\0b\0e\00\20\01\20\02\41\02\74\41\04\10" "\bb\02\0b\11\00\20\00\10\81\07\28\02\08\41\ff\ff\ff\ff\07" "\71\0b\04\00\20\00\0b\0b\00\20\00\20\01\20\02\10\f4\03\0b" "\0b\00\20\00\20\01\20\02\10\f4\03\0b\0b\00\20\00\20\01\20" "\02\10\c5\04\0b\0b\00\20\00\20\01\20\02\10\c5\04\0b\0b\00" "\20\00\20\01\36\02\00\20\00\0b\0b\00\20\00\20\01\36\02\00" "\20\00\0b\61\01\01\7f\23\00\41\10\6b\22\02\24\00\20\02\20" "\00\36\02\0c\02\40\20\00\20\01\46\0d\00\03\40\20\02\20\01" "\41\7f\6a\22\01\36\02\08\20\00\20\01\4f\0d\01\20\02\41\0c" "\6a\20\02\41\08\6a\10\8d\0b\20\02\20\02\28\02\0c\41\01\6a" "\22\00\36\02\0c\20\02\28\02\08\21\01\0c\00\0b\00\0b\20\02" "\41\10\6a\24\00\0b\0f\00\20\00\28\02\00\20\01\28\02\00\10" "\8e\0b\0b\09\00\20\00\20\01\10\c6\06\0b\61\01\01\7f\23\00" "\41\10\6b\22\02\24\00\20\02\20\00\36\02\0c\02\40\20\00\20" "\01\46\0d\00\03\40\20\02\20\01\41\7c\6a\22\01\36\02\08\20" "\00\20\01\4f\0d\01\20\02\41\0c\6a\20\02\41\08\6a\10\90\0b" "\20\02\20\02\28\02\0c\41\04\6a\22\00\36\02\0c\20\02\28\02" "\08\21\01\0c\00\0b\00\0b\20\02\41\10\6a\24\00\0b\0f\00\20" "\00\28\02\00\20\01\28\02\00\10\91\0b\0b\09\00\20\00\20\01" "\10\92\0b\0b\1c\01\01\7f\20\00\28\02\00\21\02\20\00\20\01" "\28\02\00\36\02\00\20\01\20\02\36\02\00\0b\0a\00\20\00\10" "\81\07\10\94\0b\0b\04\00\20\00\0b\0d\00\20\00\20\01\20\02" "\20\03\10\96\0b\0b\69\01\01\7f\23\00\41\20\6b\22\04\24\00" "\20\04\41\18\6a\20\01\20\02\10\97\0b\20\04\41\10\6a\20\04" "\41\0c\6a\20\04\28\02\18\20\04\28\02\1c\20\03\10\98\0b\10" "\99\0b\20\04\20\01\20\04\28\02\10\10\9a\0b\36\02\0c\20\04" "\20\03\20\04\28\02\14\10\9b\0b\36\02\08\20\00\20\04\41\0c" "\6a\20\04\41\08\6a\10\9c\0b\20\04\41\20\6a\24\00\0b\0b\00" "\20\00\20\01\20\02\10\9d\0b\0b\07\00\20\00\10\9e\0b\0b\6b" "\01\01\7f\23\00\41\10\6b\22\05\24\00\20\05\20\02\36\02\08" "\20\05\20\04\36\02\0c\02\40\03\40\20\02\20\03\46\0d\01\20" "\02\2c\00\00\21\04\20\05\41\0c\6a\10\97\01\20\04\10\98\01" "\1a\20\05\20\02\41\01\6a\22\02\36\02\08\20\05\41\0c\6a\10" "\99\01\1a\0c\00\0b\00\0b\20\00\20\05\41\08\6a\20\05\41\0c" "\6a\10\9c\0b\20\05\41\10\6a\24\00\0b\09\00\20\00\20\01\10" "\a0\0b\0b\09\00\20\00\20\01\10\a1\0b\0b\0c\00\20\00\20\01" "\20\02\10\9f\0b\1a\0b\38\01\01\7f\23\00\41\10\6b\22\03\24" "\00\20\03\20\01\10\fd\01\36\02\0c\20\03\20\02\10\fd\01\36" "\02\08\20\00\20\03\41\0c\6a\20\03\41\08\6a\10\a2\0b\1a\20" "\03\41\10\6a\24\00\0b\04\00\20\00\0b\18\00\20\00\20\01\28" "\02\00\36\02\00\20\00\20\02\28\02\00\36\02\04\20\00\0b\09" "\00\20\00\20\01\10\80\02\0b\04\00\20\01\0b\18\00\20\00\20" "\01\28\02\00\36\02\00\20\00\20\02\28\02\00\36\02\04\20\00" "\0b\0d\00\20\00\20\01\20\02\20\03\10\a4\0b\0b\69\01\01\7f" "\23\00\41\20\6b\22\04\24\00\20\04\41\18\6a\20\01\20\02\10" "\a5\0b\20\04\41\10\6a\20\04\41\0c\6a\20\04\28\02\18\20\04" "\28\02\1c\20\03\10\a6\0b\10\a7\0b\20\04\20\01\20\04\28\02" "\10\10\a8\0b\36\02\0c\20\04\20\03\20\04\28\02\14\10\a9\0b" "\36\02\08\20\00\20\04\41\0c\6a\20\04\41\08\6a\10\aa\0b\20" "\04\41\20\6a\24\00\0b\0b\00\20\00\20\01\20\02\10\ab\0b\0b" "\07\00\20\00\10\ac\0b\0b\6b\01\01\7f\23\00\41\10\6b\22\05" "\24\00\20\05\20\02\36\02\08\20\05\20\04\36\02\0c\02\40\03" "\40\20\02\20\03\46\0d\01\20\02\28\02\00\21\04\20\05\41\0c" "\6a\10\cf\01\20\04\10\d0\01\1a\20\05\20\02\41\04\6a\22\02" "\36\02\08\20\05\41\0c\6a\10\d1\01\1a\0c\00\0b\00\0b\20\00" "\20\05\41\08\6a\20\05\41\0c\6a\10\aa\0b\20\05\41\10\6a\24" "\00\0b\09\00\20\00\20\01\10\ae\0b\0b\09\00\20\00\20\01\10" "\af\0b\0b\0c\00\20\00\20\01\20\02\10\ad\0b\1a\0b\38\01\01" "\7f\23\00\41\10\6b\22\03\24\00\20\03\20\01\10\96\02\36\02" "\0c\20\03\20\02\10\96\02\36\02\08\20\00\20\03\41\0c\6a\20" "\03\41\08\6a\10\b0\0b\1a\20\03\41\10\6a\24\00\0b\04\00\20" "\00\0b\18\00\20\00\20\01\28\02\00\36\02\00\20\00\20\02\28" "\02\00\36\02\04\20\00\0b\09\00\20\00\20\01\10\99\02\0b\04" "\00\20\01\0b\18\00\20\00\20\01\28\02\00\36\02\00\20\00\20" "\02\28\02\00\36\02\04\20\00\0b\04\00\20\00\0b\04\00\20\00" "\0b\5a\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\20\01\36" "\02\08\20\03\20\00\36\02\0c\20\03\20\02\36\02\04\41\00\21" "\01\02\40\20\03\41\03\6a\20\03\41\04\6a\20\03\41\0c\6a\10" "\b4\0b\0d\00\20\03\41\02\6a\20\03\41\04\6a\20\03\41\08\6a" "\10\b4\0b\21\01\0b\20\03\41\10\6a\24\00\20\01\0b\0d\00\20" "\01\28\02\00\20\02\28\02\00\49\0b\07\00\20\00\10\b8\0b\0b" "\0e\00\20\00\20\02\20\01\20\00\6b\10\b7\0b\0b\0c\00\20\00" "\20\01\20\02\10\fe\03\45\0b\27\01\01\7f\23\00\41\10\6b\22" "\01\24\00\20\01\20\00\36\02\0c\20\01\41\0c\6a\10\b9\0b\21" "\00\20\01\41\10\6a\24\00\20\00\0b\07\00\20\00\10\ba\0b\0b" "\0a\00\20\00\28\02\00\10\bb\0b\0b\2a\01\01\7f\23\00\41\10" "\6b\22\01\24\00\20\01\20\00\36\02\0c\20\01\41\0c\6a\10\b7" "\07\10\da\01\21\00\20\01\41\10\6a\24\00\20\00\0b\11\00\20" "\00\20\00\28\02\00\20\01\6a\36\02\00\20\00\0b\8b\02\01\03" "\7f\23\00\41\10\6b\22\07\24\00\02\40\20\00\10\ee\0a\22\08" "\20\01\6b\20\02\49\0d\00\20\00\10\f0\05\21\09\02\40\20\08" "\41\01\76\41\70\6a\20\01\4d\0d\00\20\07\20\01\41\01\74\36" "\02\0c\20\07\20\02\20\01\6a\36\02\04\20\07\41\04\6a\20\07" "\41\0c\6a\10\ea\02\28\02\00\10\f0\0a\41\01\6a\21\08\0b\20" "\07\41\04\6a\20\00\10\e3\07\20\08\10\f1\0a\20\07\28\02\04" "\22\08\20\07\28\02\08\10\f2\0a\02\40\20\04\45\0d\00\20\08" "\10\a8\02\20\09\10\a8\02\20\04\10\a7\01\1a\0b\02\40\20\03" "\20\05\20\04\6a\22\02\46\0d\00\20\08\10\a8\02\20\04\41\02" "\74\22\04\6a\20\06\41\02\74\6a\20\09\10\a8\02\20\04\6a\20" "\05\41\02\74\6a\20\03\20\02\6b\10\a7\01\1a\0b\02\40\20\01" "\41\01\6a\22\01\41\02\46\0d\00\20\00\10\e3\07\20\09\20\01" "\10\82\0b\0b\20\00\20\08\10\f3\0a\20\00\20\07\28\02\08\10" "\f4\0a\20\07\41\10\6a\24\00\0f\0b\20\00\10\f5\0a\00\0b\0a" "\00\20\01\20\00\6b\41\02\75\0b\5a\01\01\7f\23\00\41\10\6b" "\22\03\24\00\20\03\20\01\36\02\08\20\03\20\00\36\02\0c\20" "\03\20\02\36\02\04\41\00\21\01\02\40\20\03\41\03\6a\20\03" "\41\04\6a\20\03\41\0c\6a\10\c2\0b\0d\00\20\03\41\02\6a\20" "\03\41\04\6a\20\03\41\08\6a\10\c2\0b\21\01\0b\20\03\41\10" "\6a\24\00\20\01\0b\0c\00\20\00\10\e7\0a\20\02\10\c3\0b\0b" "\12\00\20\00\20\01\20\02\20\01\20\02\10\df\07\10\c4\0b\0b" "\0d\00\20\01\28\02\00\20\02\28\02\00\49\0b\04\00\20\00\0b" "\b8\01\01\02\7f\23\00\41\10\6b\22\04\24\00\02\40\20\00\10" "\ee\0a\20\03\49\0d\00\02\40\02\40\20\03\10\ef\0a\45\0d\00" "\20\00\20\03\10\dd\07\20\00\10\dc\07\21\05\0c\01\0b\20\04" "\41\08\6a\20\00\10\e3\07\20\03\10\f0\0a\41\01\6a\10\f1\0a" "\20\04\28\02\08\22\05\20\04\28\02\0c\10\f2\0a\20\00\20\05" "\10\f3\0a\20\00\20\04\28\02\0c\10\f4\0a\20\00\20\03\10\db" "\07\0b\02\40\03\40\20\01\20\02\46\0d\01\20\05\20\01\10\da" "\07\20\05\41\04\6a\21\05\20\01\41\04\6a\21\01\0c\00\0b\00" "\0b\20\04\41\00\36\02\04\20\05\20\04\41\04\6a\10\da\07\20" "\04\41\10\6a\24\00\0f\0b\20\00\10\f5\0a\00\0b\07\00\20\00" "\10\c8\0b\0b\11\00\20\00\20\02\20\01\20\00\6b\41\02\75\10" "\c7\0b\0b\0f\00\20\00\20\01\20\02\41\02\74\10\fe\03\45\0b" "\27\01\01\7f\23\00\41\10\6b\22\01\24\00\20\01\20\00\36\02" "\0c\20\01\41\0c\6a\10\c9\0b\21\00\20\01\41\10\6a\24\00\20" "\00\0b\07\00\20\00\10\ca\0b\0b\0a\00\20\00\28\02\00\10\cb" "\0b\0b\2a\01\01\7f\23\00\41\10\6b\22\01\24\00\20\01\20\00" "\36\02\0c\20\01\41\0c\6a\10\f9\07\10\a8\02\21\00\20\01\41" "\10\6a\24\00\20\00\0b\14\00\20\00\20\00\28\02\00\20\01\41" "\02\74\6a\36\02\00\20\00\0b\09\00\20\00\20\01\10\ce\0b\0b" "\0e\00\20\01\10\e3\07\1a\20\00\10\e3\07\1a\0b\0d\00\20\00" "\20\01\20\02\20\03\10\d0\0b\0b\69\01\01\7f\23\00\41\20\6b" "\22\04\24\00\20\04\41\18\6a\20\01\20\02\10\d1\0b\20\04\41" "\10\6a\20\04\41\0c\6a\20\04\28\02\18\20\04\28\02\1c\20\03" "\10\fd\01\10\fe\01\20\04\20\01\20\04\28\02\10\10\d2\0b\36" "\02\0c\20\04\20\03\20\04\28\02\14\10\80\02\36\02\08\20\00" "\20\04\41\0c\6a\20\04\41\08\6a\10\d3\0b\20\04\41\20\6a\24" "\00\0b\0b\00\20\00\20\01\20\02\10\d4\0b\0b\09\00\20\00\20" "\01\10\d6\0b\0b\0c\00\20\00\20\01\20\02\10\d5\0b\1a\0b\38" "\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\20\01\10\d7\0b" "\36\02\0c\20\03\20\02\10\d7\0b\36\02\08\20\00\20\03\41\0c" "\6a\20\03\41\08\6a\10\89\02\1a\20\03\41\10\6a\24\00\0b\18" "\00\20\00\20\01\28\02\00\36\02\00\20\00\20\02\28\02\00\36" "\02\04\20\00\0b\09\00\20\00\20\01\10\dc\0b\0b\07\00\20\00" "\10\d8\0b\0b\27\01\01\7f\23\00\41\10\6b\22\01\24\00\20\01" "\20\00\36\02\0c\20\01\41\0c\6a\10\d9\0b\21\00\20\01\41\10" "\6a\24\00\20\00\0b\07\00\20\00\10\da\0b\0b\0a\00\20\00\28" "\02\00\10\db\0b\0b\2a\01\01\7f\23\00\41\10\6b\22\01\24\00" "\20\01\20\00\36\02\0c\20\01\41\0c\6a\10\b9\07\10\8b\02\21" "\00\20\01\41\10\6a\24\00\20\00\0b\09\00\20\00\20\01\10\dd" "\0b\0b\32\01\01\7f\23\00\41\10\6b\22\02\24\00\20\02\20\00" "\36\02\0c\20\02\41\0c\6a\20\01\20\02\41\0c\6a\10\d9\0b\6b" "\10\8a\08\21\00\20\02\41\10\6a\24\00\20\00\0b\0b\00\20\00" "\20\01\36\02\00\20\00\0b\0d\00\20\00\20\01\20\02\20\03\10" "\e0\0b\0b\69\01\01\7f\23\00\41\20\6b\22\04\24\00\20\04\41" "\18\6a\20\01\20\02\10\e1\0b\20\04\41\10\6a\20\04\41\0c\6a" "\20\04\28\02\18\20\04\28\02\1c\20\03\10\96\02\10\97\02\20" "\04\20\01\20\04\28\02\10\10\e2\0b\36\02\0c\20\04\20\03\20" "\04\28\02\14\10\99\02\36\02\08\20\00\20\04\41\0c\6a\20\04" "\41\08\6a\10\e3\0b\20\04\41\20\6a\24\00\0b\0b\00\20\00\20" "\01\20\02\10\e4\0b\0b\09\00\20\00\20\01\10\e6\0b\0b\0c\00" "\20\00\20\01\20\02\10\e5\0b\1a\0b\38\01\01\7f\23\00\41\10" "\6b\22\03\24\00\20\03\20\01\10\e7\0b\36\02\0c\20\03\20\02" "\10\e7\0b\36\02\08\20\00\20\03\41\0c\6a\20\03\41\08\6a\10" "\a2\02\1a\20\03\41\10\6a\24\00\0b\18\00\20\00\20\01\28\02" "\00\36\02\00\20\00\20\02\28\02\00\36\02\04\20\00\0b\09\00" "\20\00\20\01\10\ec\0b\0b\07\00\20\00\10\e8\0b\0b\27\01\01" "\7f\23\00\41\10\6b\22\01\24\00\20\01\20\00\36\02\0c\20\01" "\41\0c\6a\10\e9\0b\21\00\20\01\41\10\6a\24\00\20\00\0b\07" "\00\20\00\10\ea\0b\0b\0a\00\20\00\28\02\00\10\eb\0b\0b\2a" "\01\01\7f\23\00\41\10\6b\22\01\24\00\20\01\20\00\36\02\0c" "\20\01\41\0c\6a\10\fb\07\10\a4\02\21\00\20\01\41\10\6a\24" "\00\20\00\0b\09\00\20\00\20\01\10\ed\0b\0b\35\01\01\7f\23" "\00\41\10\6b\22\02\24\00\20\02\20\00\36\02\0c\20\02\41\0c" "\6a\20\01\20\02\41\0c\6a\10\e9\0b\6b\41\02\75\10\99\08\21" "\00\20\02\41\10\6a\24\00\20\00\0b\0b\00\20\00\20\01\36\02" "\00\20\00\0b\0b\00\20\00\41\00\36\02\00\20\00\0b\07\00\20" "\00\10\fc\0b\0b\0b\00\20\00\41\00\3a\00\00\20\00\0b\3d\01" "\01\7f\23\00\41\10\6b\22\01\24\00\20\01\20\00\10\fd\0b\10" "\fe\0b\36\02\0c\20\01\10\87\01\36\02\08\20\01\41\0c\6a\20" "\01\41\08\6a\10\f0\01\28\02\00\21\00\20\01\41\10\6a\24\00" "\20\00\0b\09\00\41\db\09\10\d3\02\00\0b\0a\00\20\00\41\08" "\6a\10\80\0c\0b\1b\00\20\01\20\02\41\00\10\ff\0b\21\01\20" "\00\20\02\36\02\04\20\00\20\01\36\02\00\0b\0a\00\20\00\41" "\08\6a\10\81\0c\0b\33\00\20\00\20\00\10\82\0c\20\00\10\82" "\0c\20\00\10\83\0c\41\02\74\6a\20\00\10\82\0c\20\00\10\83" "\0c\41\02\74\6a\20\00\10\82\0c\20\01\41\02\74\6a\10\84\0c" "\0b\24\00\20\00\20\01\36\02\00\20\00\20\01\28\02\04\22\01" "\36\02\04\20\00\20\01\20\02\41\02\74\6a\36\02\08\20\00\0b" "\11\00\20\00\28\02\00\20\00\28\02\04\36\02\04\20\00\0b\04" "\00\20\00\0b\08\00\20\01\10\91\0c\1a\0b\0b\00\20\00\41\00" "\3a\00\78\20\00\0b\0a\00\20\00\41\08\6a\10\86\0c\0b\07\00" "\20\00\10\85\0c\0b\46\01\01\7f\23\00\41\10\6b\22\03\24\00" "\02\40\02\40\20\01\41\1e\4b\0d\00\20\00\2d\00\78\41\ff\01" "\71\0d\00\20\00\41\01\3a\00\78\0c\01\0b\20\03\41\0f\6a\10" "\88\0c\20\01\10\89\0c\21\00\0b\20\03\41\10\6a\24\00\20\00" "\0b\0a\00\20\00\41\08\6a\10\8c\0c\0b\07\00\20\00\10\8d\0c" "\0b\0a\00\20\00\28\02\00\10\fa\0b\0b\13\00\20\00\10\8e\0c" "\28\02\00\20\00\28\02\00\6b\41\02\75\0b\02\00\0b\08\00\41" "\ff\ff\ff\ff\03\0b\0a\00\20\00\41\08\6a\10\87\0c\0b\04\00" "\20\00\0b\07\00\20\00\10\8a\0c\0b\1d\00\02\40\20\00\10\8b" "\0c\20\01\4f\0d\00\10\d7\02\00\0b\20\01\41\02\74\41\04\10" "\d8\02\0b\04\00\20\00\0b\08\00\10\d2\02\41\02\76\0b\04\00" "\20\00\0b\04\00\20\00\0b\0a\00\20\00\41\08\6a\10\8f\0c\0b" "\07\00\20\00\10\90\0c\0b\04\00\20\00\0b\0b\00\20\00\41\00" "\36\02\00\20\00\0b\34\01\01\7f\20\00\28\02\04\21\02\02\40" "\03\40\20\02\20\01\46\0d\01\20\00\10\f4\0b\20\02\41\7c\6a" "\22\02\10\fa\0b\10\93\0c\0c\00\0b\00\0b\20\00\20\01\36\02" "\04\0b\07\00\20\01\10\94\0c\0b\07\00\20\00\10\95\0c\0b\02" "\00\0b\61\01\02\7f\23\00\41\10\6b\22\02\24\00\20\02\20\01" "\36\02\0c\02\40\20\00\10\f2\0b\22\03\20\01\49\0d\00\02\40" "\20\00\10\83\0c\22\01\20\03\41\01\76\4f\0d\00\20\02\20\01" "\41\01\74\36\02\08\20\02\41\08\6a\20\02\41\0c\6a\10\ea\02" "\28\02\00\21\03\0b\20\02\41\10\6a\24\00\20\03\0f\0b\20\00" "\10\f3\0b\00\0b\36\00\20\00\20\00\10\82\0c\20\00\10\82\0c" "\20\00\10\83\0c\41\02\74\6a\20\00\10\82\0c\20\00\10\f2\08" "\41\02\74\6a\20\00\10\82\0c\20\00\10\83\0c\41\02\74\6a\10" "\84\0c\0b\0b\00\20\00\20\01\20\02\10\99\0c\0b\39\01\01\7f" "\23\00\41\10\6b\22\03\24\00\02\40\02\40\20\01\20\00\47\0d" "\00\20\01\41\00\3a\00\78\0c\01\0b\20\03\41\0f\6a\10\88\0c" "\20\01\20\02\10\9a\0c\0b\20\03\41\10\6a\24\00\0b\0e\00\20" "\01\20\02\41\02\74\41\04\10\bb\02\0b\8b\01\01\02\7f\23\00" "\41\10\6b\22\04\24\00\41\00\21\05\20\04\41\00\36\02\0c\20" "\00\41\0c\6a\20\04\41\0c\6a\20\03\10\9f\0c\1a\02\40\02\40" "\20\01\0d\00\41\00\21\01\0c\01\0b\20\04\41\04\6a\20\00\10" "\a0\0c\20\01\10\f5\0b\20\04\28\02\08\21\01\20\04\28\02\04" "\21\05\0b\20\00\20\05\36\02\00\20\00\20\05\20\02\41\02\74" "\6a\22\03\36\02\08\20\00\20\03\36\02\04\20\00\10\a1\0c\20" "\05\20\01\41\02\74\6a\36\02\00\20\04\41\10\6a\24\00\20\00" "\0b\62\01\02\7f\23\00\41\10\6b\22\02\24\00\20\02\41\04\6a" "\20\00\41\08\6a\20\01\10\a2\0c\22\01\28\02\00\21\03\02\40" "\03\40\20\03\20\01\28\02\04\46\0d\01\20\00\10\a0\0c\20\01" "\28\02\00\10\fa\0b\10\fb\0b\20\01\20\01\28\02\00\41\04\6a" "\22\03\36\02\00\0c\00\0b\00\0b\20\01\10\a3\0c\1a\20\02\41" "\10\6a\24\00\0b\a8\01\01\05\7f\23\00\41\10\6b\22\02\24\00" "\20\00\10\97\0c\20\00\10\f4\0b\21\03\20\02\41\08\6a\20\00" "\28\02\04\10\a4\0c\21\04\20\02\41\04\6a\20\00\28\02\00\10" "\a4\0c\21\05\20\02\20\01\28\02\04\10\a4\0c\21\06\20\02\20" "\03\20\04\28\02\00\20\05\28\02\00\20\06\28\02\00\10\a5\0c" "\36\02\0c\20\01\20\02\41\0c\6a\10\a6\0c\36\02\04\20\00\20" "\01\41\04\6a\10\a7\0c\20\00\41\04\6a\20\01\41\08\6a\10\a7" "\0c\20\00\10\f6\0b\20\01\10\a1\0c\10\a7\0c\20\01\20\01\28" "\02\04\36\02\00\20\00\20\00\10\f2\08\10\f7\0b\20\02\41\10" "\6a\24\00\0b\26\00\20\00\10\a8\0c\02\40\20\00\28\02\00\45" "\0d\00\20\00\10\a0\0c\20\00\28\02\00\20\00\10\a9\0c\10\98" "\0c\0b\20\00\0b\16\00\20\00\20\01\10\ef\0b\22\01\41\04\6a" "\20\02\10\aa\0c\1a\20\01\0b\0a\00\20\00\41\0c\6a\10\ab\0c" "\0b\0a\00\20\00\41\0c\6a\10\ac\0c\0b\28\01\01\7f\20\01\28" "\02\00\21\03\20\00\20\01\36\02\08\20\00\20\03\36\02\00\20" "\00\20\03\20\02\41\02\74\6a\36\02\04\20\00\0b\11\00\20\00" "\28\02\08\20\00\28\02\00\36\02\00\20\00\0b\0b\00\20\00\20" "\01\36\02\00\20\00\0b\0b\00\20\01\20\02\20\03\10\ae\0c\0b" "\07\00\20\00\28\02\00\0b\1c\01\01\7f\20\00\28\02\00\21\02" "\20\00\20\01\28\02\00\36\02\00\20\01\20\02\36\02\00\0b\0c" "\00\20\00\20\00\28\02\04\10\c2\0c\0b\13\00\20\00\10\c3\0c" "\28\02\00\20\00\28\02\00\6b\41\02\75\0b\0b\00\20\00\20\01" "\36\02\00\20\00\0b\0a\00\20\00\41\04\6a\10\ad\0c\0b\07\00" "\20\00\10\8d\0c\0b\07\00\20\00\28\02\00\0b\2b\01\01\7f\23" "\00\41\10\6b\22\03\24\00\20\03\41\08\6a\20\00\20\01\20\02" "\10\af\0c\20\03\28\02\0c\21\02\20\03\41\10\6a\24\00\20\02" "\0b\0d\00\20\00\20\01\20\02\20\03\10\b0\0c\0b\0d\00\20\00" "\20\01\20\02\20\03\10\b1\0c\0b\69\01\01\7f\23\00\41\20\6b" "\22\04\24\00\20\04\41\18\6a\20\01\20\02\10\b2\0c\20\04\41" "\10\6a\20\04\41\0c\6a\20\04\28\02\18\20\04\28\02\1c\20\03" "\10\b3\0c\10\b4\0c\20\04\20\01\20\04\28\02\10\10\b5\0c\36" "\02\0c\20\04\20\03\20\04\28\02\14\10\b6\0c\36\02\08\20\00" "\20\04\41\0c\6a\20\04\41\08\6a\10\b7\0c\20\04\41\20\6a\24" "\00\0b\0b\00\20\00\20\01\20\02\10\b8\0c\0b\07\00\20\00\10" "\bd\0c\0b\7d\01\01\7f\23\00\41\10\6b\22\05\24\00\20\05\20" "\03\36\02\08\20\05\20\02\36\02\0c\20\05\20\04\36\02\04\02" "\40\03\40\20\05\41\0c\6a\20\05\41\08\6a\10\b9\0c\45\0d\01" "\20\05\41\0c\6a\10\ba\0c\28\02\00\21\03\20\05\41\04\6a\10" "\bb\0c\20\03\36\02\00\20\05\41\0c\6a\10\bc\0c\1a\20\05\41" "\04\6a\10\bc\0c\1a\0c\00\0b\00\0b\20\00\20\05\41\0c\6a\20" "\05\41\04\6a\10\b7\0c\20\05\41\10\6a\24\00\0b\09\00\20\00" "\20\01\10\bf\0c\0b\09\00\20\00\20\01\10\c0\0c\0b\0c\00\20" "\00\20\01\20\02\10\be\0c\1a\0b\38\01\01\7f\23\00\41\10\6b" "\22\03\24\00\20\03\20\01\10\b3\0c\36\02\0c\20\03\20\02\10" "\b3\0c\36\02\08\20\00\20\03\41\0c\6a\20\03\41\08\6a\10\be" "\0c\1a\20\03\41\10\6a\24\00\0b\0d\00\20\00\10\a6\0c\20\01" "\10\a6\0c\47\0b\0a\00\10\c1\0c\20\00\10\bb\0c\0b\0a\00\20" "\00\28\02\00\41\7c\6a\0b\11\00\20\00\20\00\28\02\00\41\7c" "\6a\36\02\00\20\00\0b\04\00\20\00\0b\18\00\20\00\20\01\28" "\02\00\36\02\00\20\00\20\02\28\02\00\36\02\04\20\00\0b\09" "\00\20\00\20\01\10\b6\0c\0b\04\00\20\01\0b\02\00\0b\09\00" "\20\00\20\01\10\c4\0c\0b\0a\00\20\00\41\0c\6a\10\c5\0c\0b" "\37\01\02\7f\02\40\03\40\20\00\28\02\08\20\01\46\0d\01\20" "\00\10\a0\0c\21\02\20\00\20\00\28\02\08\41\7c\6a\22\03\36" "\02\08\20\02\20\03\10\fa\0b\10\93\0c\0c\00\0b\00\0b\0b\07" "\00\20\00\10\90\0c\0b\07\00\20\00\10\bc\04\0b\61\01\01\7f" "\23\00\41\10\6b\22\02\24\00\20\02\20\00\36\02\0c\02\40\20" "\00\20\01\46\0d\00\03\40\20\02\20\01\41\7c\6a\22\01\36\02" "\08\20\00\20\01\4f\0d\01\20\02\41\0c\6a\20\02\41\08\6a\10" "\c8\0c\20\02\20\02\28\02\0c\41\04\6a\22\00\36\02\0c\20\02" "\28\02\08\21\01\0c\00\0b\00\0b\20\02\41\10\6a\24\00\0b\0f" "\00\20\00\28\02\00\20\01\28\02\00\10\c9\0c\0b\09\00\20\00" "\20\01\10\dc\01\0b\34\01\01\7f\23\00\41\10\6b\22\03\24\00" "\20\00\20\02\10\e2\07\20\03\41\00\36\02\0c\20\01\20\02\41" "\02\74\6a\20\03\41\0c\6a\10\da\07\20\03\41\10\6a\24\00\20" "\00\0b\04\00\20\00\0b\04\00\20\00\0b\04\00\20\00\0b\04\00" "\20\00\0b\04\00\20\00\0b\10\00\20\00\41\d8\f0\00\41\08\6a" "\36\02\00\20\00\0b\10\00\20\00\41\fc\f0\00\41\08\6a\36\02" "\00\20\00\0b\0c\00\20\00\10\8f\05\36\02\00\20\00\0b\04\00" "\20\00\0b\0e\00\20\00\20\01\28\02\00\36\02\00\20\00\0b\08" "\00\20\00\10\9b\09\1a\0b\04\00\20\00\0b\09\00\20\00\20\01" "\10\d9\0c\0b\07\00\20\00\10\da\0c\0b\0b\00\20\00\20\01\36" "\02\00\20\00\0b\0d\00\20\00\28\02\00\10\db\0c\10\dc\0c\0b" "\07\00\20\00\10\de\0c\0b\07\00\20\00\10\dd\0c\0b\3c\01\02" "\7f\20\00\28\02\00\20\00\28\02\08\22\01\41\01\75\6a\21\02" "\20\00\28\02\04\21\00\02\40\20\01\41\01\71\45\0d\00\20\02" "\28\02\00\20\00\6a\28\02\00\21\00\0b\20\02\20\00\11\04\00" "\0b\07\00\20\00\28\02\00\0b\16\00\20\00\20\01\10\e2\0c\22" "\01\41\04\6a\20\02\10\f2\02\1a\20\01\0b\07\00\20\00\10\e3" "\0c\0b\0a\00\20\00\41\04\6a\10\f3\02\0b\0e\00\20\00\20\01" "\28\02\00\36\02\00\20\00\0b\04\00\20\00\0b\0a\00\20\01\20" "\00\6b\41\0c\6d\0b\0b\00\20\00\20\01\20\02\10\b3\04\0b\05" "\00\10\e7\0c\0b\08\00\41\80\80\80\80\78\0b\05\00\10\ea\0c" "\0b\05\00\10\eb\0c\0b\0d\00\42\80\80\80\80\80\80\80\80\80" "\7f\0b\0d\00\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\0b\0b\00\20" "\00\20\01\20\02\10\b0\04\0b\05\00\10\ee\0c\0b\06\00\41\ff" "\ff\03\0b\05\00\10\f0\0c\0b\04\00\42\7f\0b\0c\00\20\00\20" "\01\10\8f\05\10\ca\04\0b\0c\00\20\00\20\01\10\8f\05\10\cb" "\04\0b\3d\02\01\7f\01\7e\23\00\41\10\6b\22\03\24\00\20\03" "\20\01\20\02\10\8f\05\10\cc\04\20\03\29\03\00\21\04\20\00" "\20\03\41\08\6a\29\03\00\37\03\08\20\00\20\04\37\03\00\20" "\03\41\10\6a\24\00\0b\0a\00\20\01\20\00\6b\41\0c\6d\0b\0e" "\00\20\00\20\01\28\02\00\36\02\00\20\00\0b\04\00\20\00\0b" "\04\00\20\00\0b\0e\00\20\00\20\01\28\02\00\36\02\00\20\00" "\0b\07\00\20\00\10\fb\0c\0b\0a\00\20\00\41\04\6a\10\f3\02" "\0b\04\00\20\00\0b\04\00\20\00\0b\0e\00\20\00\20\01\28\02" "\00\36\02\00\20\00\0b\04\00\20\00\0b\04\00\20\00\0b\04\00" "\20\00\0b\03\00\00\0b\06\00\20\00\10\41\0b\06\00\20\00\10" "\42\0b\6d\00\41\d0\aa\01\10\82\0d\1a\02\40\03\40\20\00\28" "\02\00\41\01\47\0d\01\41\e8\aa\01\41\d0\aa\01\10\85\0d\1a" "\0c\00\0b\00\0b\02\40\20\00\28\02\00\0d\00\20\00\10\86\0d" "\41\d0\aa\01\10\83\0d\1a\20\01\20\02\11\04\00\41\d0\aa\01" "\10\82\0d\1a\20\00\10\87\0d\41\d0\aa\01\10\83\0d\1a\41\e8" "\aa\01\10\88\0d\1a\0f\0b\41\d0\aa\01\10\83\0d\1a\0b\08\00" "\20\00\20\01\10\43\0b\09\00\20\00\41\01\36\02\00\0b\09\00" "\20\00\41\7f\36\02\00\0b\06\00\20\00\10\44\0b\44\01\02\7f" "\23\00\41\10\6b\22\02\24\00\41\00\21\03\02\40\20\00\41\03" "\71\0d\00\20\01\20\00\70\0d\00\20\02\41\0c\6a\20\00\20\01" "\10\32\21\00\41\00\20\02\28\02\0c\20\00\1b\21\03\0b\20\02" "\41\10\6a\24\00\20\03\0b\35\01\01\7f\20\00\41\01\20\00\41" "\01\4b\1b\21\01\02\40\03\40\20\01\10\2b\22\00\0d\01\02\40" "\10\b6\0d\22\00\45\0d\00\20\00\11\07\00\0c\01\0b\0b\10\19" "\00\0b\20\00\0b\06\00\20\00\10\2d\0b\07\00\20\00\10\8b\0d" "\0b\3f\01\02\7f\20\01\41\04\20\01\41\04\4b\1b\21\02\20\00" "\41\01\20\00\41\01\4b\1b\21\00\02\40\03\40\20\02\20\00\10" "\8e\0d\22\03\0d\01\10\b6\0d\22\01\45\0d\01\20\01\11\07\00" "\0c\00\0b\00\0b\20\03\0b\21\01\01\7f\20\00\20\00\20\01\6a" "\41\7f\6a\41\00\20\00\6b\71\22\02\20\01\20\02\20\01\4b\1b" "\10\89\0d\0b\07\00\20\00\10\90\0d\0b\06\00\20\00\10\2d\0b" "\05\00\10\19\00\0b\10\00\20\00\41\98\f4\00\41\08\6a\36\02" "\00\20\00\0b\3a\01\02\7f\20\01\10\28\22\02\41\0d\6a\10\8a" "\0d\22\03\41\00\36\02\08\20\03\20\02\36\02\04\20\03\20\02" "\36\02\00\20\00\20\03\10\94\0d\20\01\20\02\41\01\6a\10\27" "\36\02\00\20\00\0b\07\00\20\00\41\0c\6a\0b\20\00\20\00\10" "\92\0d\22\00\41\c4\f4\00\41\08\6a\36\02\00\20\00\41\04\6a" "\20\01\10\93\0d\1a\20\00\0b\04\00\41\01\0b\0b\00\20\00\20" "\01\20\02\10\8c\02\0b\bf\02\01\03\7f\23\00\41\10\6b\22\08" "\24\00\02\40\20\00\10\c8\02\22\09\20\01\41\7f\73\6a\20\02" "\49\0d\00\20\00\10\d9\01\21\0a\02\40\20\09\41\01\76\41\70" "\6a\20\01\4d\0d\00\20\08\20\01\41\01\74\36\02\0c\20\08\20" "\02\20\01\6a\36\02\04\20\08\41\04\6a\20\08\41\0c\6a\10\ea" "\02\28\02\00\10\ca\02\41\01\6a\21\09\0b\20\08\41\04\6a\20" "\00\10\de\01\20\09\10\cb\02\20\08\28\02\04\22\09\20\08\28" "\02\08\10\cc\02\02\40\20\04\45\0d\00\20\09\10\da\01\20\0a" "\10\da\01\20\04\10\61\1a\0b\02\40\20\06\45\0d\00\20\09\10" "\da\01\20\04\6a\20\07\20\06\10\61\1a\0b\20\03\20\05\20\04" "\6a\22\07\6b\21\02\02\40\20\03\20\07\46\0d\00\20\09\10\da" "\01\20\04\6a\20\06\6a\20\0a\10\da\01\20\04\6a\20\05\6a\20" "\02\10\61\1a\0b\02\40\20\01\41\01\6a\22\01\41\0b\46\0d\00" "\20\00\10\de\01\20\0a\20\01\10\b4\02\0b\20\00\20\09\10\cd" "\02\20\00\20\08\28\02\08\10\ce\02\20\00\20\06\20\04\6a\20" "\02\6a\22\04\10\cf\02\20\08\41\00\3a\00\0c\20\09\20\04\6a" "\20\08\41\0c\6a\10\b7\02\20\08\41\10\6a\24\00\0f\0b\20\00" "\10\d0\02\00\0b\21\00\02\40\20\00\10\e3\01\45\0d\00\20\00" "\10\de\01\20\00\10\b0\02\20\00\10\ea\01\10\b4\02\0b\20\00" "\0b\2a\01\01\7f\23\00\41\10\6b\22\03\24\00\20\03\20\02\3a" "\00\0f\20\00\20\01\20\03\41\0f\6a\10\9b\0d\1a\20\03\41\10" "\6a\24\00\20\00\0b\0e\00\20\00\20\01\10\b1\0d\20\02\10\b2" "\0d\0b\a2\01\01\02\7f\23\00\41\10\6b\22\03\24\00\02\40\20" "\00\10\c8\02\20\02\49\0d\00\02\40\02\40\20\02\10\c9\02\45" "\0d\00\20\00\20\02\10\b6\02\20\00\10\b1\02\21\04\0c\01\0b" "\20\03\41\08\6a\20\00\10\de\01\20\02\10\ca\02\41\01\6a\10" "\cb\02\20\03\28\02\08\22\04\20\03\28\02\0c\10\cc\02\20\00" "\20\04\10\cd\02\20\00\20\03\28\02\0c\10\ce\02\20\00\20\02" "\10\cf\02\0b\20\04\10\da\01\20\01\20\02\10\61\1a\20\03\41" "\00\3a\00\07\20\04\20\02\6a\20\03\41\07\6a\10\b7\02\20\03" "\41\10\6a\24\00\0f\0b\20\00\10\d0\02\00\0b\91\01\01\02\7f" "\23\00\41\10\6b\22\03\24\00\02\40\02\40\02\40\20\02\10\c9" "\02\45\0d\00\20\00\10\b1\02\21\04\20\00\20\02\10\b6\02\0c" "\01\0b\20\00\10\c8\02\20\02\49\0d\01\20\03\41\08\6a\20\00" "\10\de\01\20\02\10\ca\02\41\01\6a\10\cb\02\20\03\28\02\08" "\22\04\20\03\28\02\0c\10\cc\02\20\00\20\04\10\cd\02\20\00" "\20\03\28\02\0c\10\ce\02\20\00\20\02\10\cf\02\0b\20\04\10" "\da\01\20\01\20\02\41\01\6a\10\61\1a\20\03\41\10\6a\24\00" "\0f\0b\20\00\10\d0\02\00\0b\4c\01\02\7f\02\40\20\02\20\00" "\10\e7\01\22\03\4b\0d\00\20\00\10\d9\01\10\da\01\22\03\20" "\01\20\02\10\97\0d\1a\20\00\20\03\20\02\10\80\0b\0f\0b\20" "\00\20\03\20\02\20\03\6b\20\00\10\e6\01\22\04\41\00\20\04" "\20\02\20\01\10\98\0d\20\00\0b\0e\00\20\00\20\01\20\01\10" "\e7\02\10\9e\0d\0b\84\01\01\03\7f\23\00\41\10\6b\22\03\24" "\00\02\40\02\40\20\00\10\e7\01\22\04\20\00\10\e6\01\22\05" "\6b\20\02\49\0d\00\20\02\45\0d\01\20\00\10\d9\01\10\da\01" "\22\04\20\05\6a\20\01\20\02\10\61\1a\20\00\20\05\20\02\6a" "\22\02\10\a1\07\20\03\41\00\3a\00\0f\20\04\20\02\6a\20\03" "\41\0f\6a\10\b7\02\0c\01\0b\20\00\20\04\20\02\20\04\6b\20" "\05\6a\20\05\20\05\41\00\20\02\20\01\10\98\0d\0b\20\03\41" "\10\6a\24\00\20\00\0b\a3\01\01\02\7f\23\00\41\10\6b\22\03" "\24\00\02\40\20\00\10\c8\02\20\01\49\0d\00\02\40\02\40\20" "\01\10\c9\02\45\0d\00\20\00\20\01\10\b6\02\20\00\10\b1\02" "\21\04\0c\01\0b\20\03\41\08\6a\20\00\10\de\01\20\01\10\ca" "\02\41\01\6a\10\cb\02\20\03\28\02\08\22\04\20\03\28\02\0c" "\10\cc\02\20\00\20\04\10\cd\02\20\00\20\03\28\02\0c\10\ce" "\02\20\00\20\01\10\cf\02\0b\20\04\10\da\01\20\01\20\02\10" "\9a\0d\1a\20\03\41\00\3a\00\07\20\04\20\01\6a\20\03\41\07" "\6a\10\b7\02\20\03\41\10\6a\24\00\0f\0b\20\00\10\d0\02\00" "\0b\c2\01\01\03\7f\23\00\41\10\6b\22\02\24\00\20\02\20\01" "\3a\00\0f\02\40\02\40\20\00\10\e3\01\22\03\0d\00\41\0a\21" "\04\20\00\10\ec\01\21\01\0c\01\0b\20\00\10\ea\01\41\7f\6a" "\21\04\20\00\10\eb\01\21\01\0b\02\40\02\40\02\40\20\01\20" "\04\47\0d\00\20\00\20\04\41\01\20\04\20\04\41\00\41\00\10" "\a0\07\20\00\10\d9\01\1a\0c\01\0b\20\00\10\d9\01\1a\20\03" "\0d\00\20\00\10\b1\02\21\04\20\00\20\01\41\01\6a\10\b6\02" "\0c\01\0b\20\00\10\b0\02\21\04\20\00\20\01\41\01\6a\10\cf" "\02\0b\20\04\20\01\6a\22\00\20\02\41\0f\6a\10\b7\02\20\02" "\41\00\3a\00\0e\20\00\41\01\6a\20\02\41\0e\6a\10\b7\02\20" "\02\41\10\6a\24\00\0b\81\01\01\03\7f\23\00\41\10\6b\22\03" "\24\00\02\40\20\01\45\0d\00\02\40\20\00\10\e7\01\22\04\20" "\00\10\e6\01\22\05\6b\20\01\4f\0d\00\20\00\20\04\20\01\20" "\04\6b\20\05\6a\20\05\20\05\41\00\41\00\10\a0\07\0b\20\00" "\10\d9\01\22\04\10\da\01\20\05\6a\20\01\20\02\10\9a\0d\1a" "\20\00\20\05\20\01\6a\22\01\10\a1\07\20\03\41\00\3a\00\0f" "\20\04\20\01\6a\20\03\41\0f\6a\10\b7\02\0b\20\03\41\10\6a" "\24\00\20\00\0b\28\01\01\7f\02\40\20\01\20\00\10\e6\01\22" "\03\4d\0d\00\20\00\20\01\20\03\6b\20\02\10\a3\0d\1a\0f\0b" "\20\00\20\01\10\ff\0a\0b\0b\00\20\00\20\01\20\02\10\a5\02" "\0b\d3\02\01\03\7f\23\00\41\10\6b\22\08\24\00\02\40\20\00" "\10\ee\0a\22\09\20\01\41\7f\73\6a\20\02\49\0d\00\20\00\10" "\f0\05\21\0a\02\40\20\09\41\01\76\41\70\6a\20\01\4d\0d\00" "\20\08\20\01\41\01\74\36\02\0c\20\08\20\02\20\01\6a\36\02" "\04\20\08\41\04\6a\20\08\41\0c\6a\10\ea\02\28\02\00\10\f0" "\0a\41\01\6a\21\09\0b\20\08\41\04\6a\20\00\10\e3\07\20\09" "\10\f1\0a\20\08\28\02\04\22\09\20\08\28\02\08\10\f2\0a\02" "\40\20\04\45\0d\00\20\09\10\a8\02\20\0a\10\a8\02\20\04\10" "\a7\01\1a\0b\02\40\20\06\45\0d\00\20\09\10\a8\02\20\04\41" "\02\74\6a\20\07\20\06\10\a7\01\1a\0b\20\03\20\05\20\04\6a" "\22\07\6b\21\02\02\40\20\03\20\07\46\0d\00\20\09\10\a8\02" "\20\04\41\02\74\22\03\6a\20\06\41\02\74\6a\20\0a\10\a8\02" "\20\03\6a\20\05\41\02\74\6a\20\02\10\a7\01\1a\0b\02\40\20" "\01\41\01\6a\22\01\41\02\46\0d\00\20\00\10\e3\07\20\0a\20" "\01\10\82\0b\0b\20\00\20\09\10\f3\0a\20\00\20\08\28\02\08" "\10\f4\0a\20\00\20\06\20\04\6a\20\02\6a\22\04\10\db\07\20" "\08\41\00\36\02\0c\20\09\20\04\41\02\74\6a\20\08\41\0c\6a" "\10\da\07\20\08\41\10\6a\24\00\0f\0b\20\00\10\f5\0a\00\0b" "\21\00\02\40\20\00\10\ac\06\45\0d\00\20\00\10\e3\07\20\00" "\10\d9\07\20\00\10\84\0b\10\82\0b\0b\20\00\0b\2a\01\01\7f" "\23\00\41\10\6b\22\03\24\00\20\03\20\02\36\02\0c\20\00\20" "\01\20\03\41\0c\6a\10\a9\0d\1a\20\03\41\10\6a\24\00\20\00" "\0b\0e\00\20\00\20\01\10\b1\0d\20\02\10\b3\0d\0b\a6\01\01" "\02\7f\23\00\41\10\6b\22\03\24\00\02\40\20\00\10\ee\0a\20" "\02\49\0d\00\02\40\02\40\20\02\10\ef\0a\45\0d\00\20\00\20" "\02\10\dd\07\20\00\10\dc\07\21\04\0c\01\0b\20\03\41\08\6a" "\20\00\10\e3\07\20\02\10\f0\0a\41\01\6a\10\f1\0a\20\03\28" "\02\08\22\04\20\03\28\02\0c\10\f2\0a\20\00\20\04\10\f3\0a" "\20\00\20\03\28\02\0c\10\f4\0a\20\00\20\02\10\db\07\0b\20" "\04\10\a8\02\20\01\20\02\10\a7\01\1a\20\03\41\00\36\02\04" "\20\04\20\02\41\02\74\6a\20\03\41\04\6a\10\da\07\20\03\41" "\10\6a\24\00\0f\0b\20\00\10\f5\0a\00\0b\92\01\01\02\7f\23" "\00\41\10\6b\22\03\24\00\02\40\02\40\02\40\20\02\10\ef\0a" "\45\0d\00\20\00\10\dc\07\21\04\20\00\20\02\10\dd\07\0c\01" "\0b\20\00\10\ee\0a\20\02\49\0d\01\20\03\41\08\6a\20\00\10" "\e3\07\20\02\10\f0\0a\41\01\6a\10\f1\0a\20\03\28\02\08\22" "\04\20\03\28\02\0c\10\f2\0a\20\00\20\04\10\f3\0a\20\00\20" "\03\28\02\0c\10\f4\0a\20\00\20\02\10\db\07\0b\20\04\10\a8" "\02\20\01\20\02\41\01\6a\10\a7\01\1a\20\03\41\10\6a\24\00" "\0f\0b\20\00\10\f5\0a\00\0b\4c\01\02\7f\02\40\20\02\20\00" "\10\de\07\22\03\4b\0d\00\20\00\10\f0\05\10\a8\02\22\03\20" "\01\20\02\10\a5\0d\1a\20\00\20\03\20\02\10\ca\0c\0f\0b\20" "\00\20\03\20\02\20\03\6b\20\00\10\9b\05\22\04\41\00\20\04" "\20\02\20\01\10\a6\0d\20\00\0b\0e\00\20\00\20\01\20\01\10" "\a1\0a\10\ac\0d\0b\8b\01\01\03\7f\23\00\41\10\6b\22\03\24" "\00\02\40\02\40\20\00\10\de\07\22\04\20\00\10\9b\05\22\05" "\6b\20\02\49\0d\00\20\02\45\0d\01\20\00\10\f0\05\10\a8\02" "\22\04\20\05\41\02\74\6a\20\01\20\02\10\a7\01\1a\20\00\20" "\05\20\02\6a\22\02\10\e2\07\20\03\41\00\36\02\0c\20\04\20" "\02\41\02\74\6a\20\03\41\0c\6a\10\da\07\0c\01\0b\20\00\20" "\04\20\02\20\04\6b\20\05\6a\20\05\20\05\41\00\20\02\20\01" "\10\a6\0d\0b\20\03\41\10\6a\24\00\20\00\0b\a6\01\01\02\7f" "\23\00\41\10\6b\22\03\24\00\02\40\20\00\10\ee\0a\20\01\49" "\0d\00\02\40\02\40\20\01\10\ef\0a\45\0d\00\20\00\20\01\10" "\dd\07\20\00\10\dc\07\21\04\0c\01\0b\20\03\41\08\6a\20\00" "\10\e3\07\20\01\10\f0\0a\41\01\6a\10\f1\0a\20\03\28\02\08" "\22\04\20\03\28\02\0c\10\f2\0a\20\00\20\04\10\f3\0a\20\00" "\20\03\28\02\0c\10\f4\0a\20\00\20\01\10\db\07\0b\20\04\10" "\a8\02\20\01\20\02\10\a8\0d\1a\20\03\41\00\36\02\04\20\04" "\20\01\41\02\74\6a\20\03\41\04\6a\10\da\07\20\03\41\10\6a" "\24\00\0f\0b\20\00\10\f5\0a\00\0b\c5\01\01\03\7f\23\00\41" "\10\6b\22\02\24\00\20\02\20\01\36\02\0c\02\40\02\40\20\00" "\10\ac\06\22\03\0d\00\41\01\21\04\20\00\10\ae\06\21\01\0c" "\01\0b\20\00\10\84\0b\41\7f\6a\21\04\20\00\10\ad\06\21\01" "\0b\02\40\02\40\02\40\20\01\20\04\47\0d\00\20\00\20\04\41" "\01\20\04\20\04\41\00\41\00\10\e1\07\20\00\10\f0\05\1a\0c" "\01\0b\20\00\10\f0\05\1a\20\03\0d\00\20\00\10\dc\07\21\04" "\20\00\20\01\41\01\6a\10\dd\07\0c\01\0b\20\00\10\d9\07\21" "\04\20\00\20\01\41\01\6a\10\db\07\0b\20\04\20\01\41\02\74" "\6a\22\00\20\02\41\0c\6a\10\da\07\20\02\41\00\36\02\08\20" "\00\41\04\6a\20\02\41\08\6a\10\da\07\20\02\41\10\6a\24\00" "\0b\04\00\20\00\0b\2a\00\02\40\03\40\20\01\45\0d\01\20\00" "\20\02\2d\00\00\3a\00\00\20\01\41\7f\6a\21\01\20\00\41\01" "\6a\21\00\0c\00\0b\00\0b\20\00\0b\2a\00\02\40\03\40\20\01" "\45\0d\01\20\00\20\02\28\02\00\36\02\00\20\01\41\7f\6a\21" "\01\20\00\41\04\6a\21\00\0c\00\0b\00\0b\20\00\0b\05\00\10" "\19\00\0b\07\00\20\00\28\02\00\0b\09\00\41\98\ab\01\10\b5" "\0d\0b\04\00\41\00\0b\0e\00\20\00\41\d0\00\6a\10\2b\41\d0" "\00\6a\0b\0b\00\41\cd\0c\41\00\10\b4\0d\00\0b\07\00\20\00" "\10\df\0d\0b\02\00\0b\02\00\0b\0a\00\20\00\10\ba\0d\10\8b" "\0d\0b\0a\00\20\00\10\ba\0d\10\8b\0d\0b\0a\00\20\00\10\ba" "\0d\10\8b\0d\0b\2f\00\02\40\20\02\0d\00\20\00\28\02\04\20" "\01\28\02\04\46\0f\0b\02\40\20\00\20\01\47\0d\00\41\01\0f" "\0b\20\00\10\c1\0d\20\01\10\c1\0d\10\26\45\0b\07\00\20\00" "\28\02\04\0b\ac\01\01\02\7f\23\00\41\c0\00\6b\22\03\24\00" "\41\01\21\04\02\40\20\00\20\01\41\00\10\c0\0d\0d\00\41\00" "\21\04\20\01\45\0d\00\41\00\21\04\20\01\41\fc\f1\00\41\ac" "\f2\00\41\00\10\c3\0d\22\01\45\0d\00\20\03\41\0c\6a\41\00" "\41\34\10\15\1a\20\03\41\01\36\02\38\20\03\41\7f\36\02\14" "\20\03\20\00\36\02\10\20\03\20\01\36\02\08\20\01\20\03\41" "\08\6a\20\02\28\02\00\41\01\20\01\28\02\00\28\02\1c\11\08" "\00\02\40\20\03\28\02\20\22\04\41\01\47\0d\00\20\02\20\03" "\28\02\18\36\02\00\0b\20\04\41\01\46\21\04\0b\20\03\41\c0" "\00\6a\24\00\20\04\0b\fe\03\01\03\7f\23\00\41\f0\00\6b\22" "\04\24\00\20\00\28\02\00\22\05\41\7c\6a\28\02\00\21\06\20" "\05\41\78\6a\28\02\00\21\05\20\04\41\d0\00\6a\42\00\37\02" "\00\20\04\41\d8\00\6a\42\00\37\02\00\20\04\41\e0\00\6a\42" "\00\37\02\00\20\04\41\e7\00\6a\42\00\37\00\00\20\04\42\00" "\37\02\48\20\04\20\03\36\02\44\20\04\20\01\36\02\40\20\04" "\20\00\36\02\3c\20\04\20\02\36\02\38\20\00\20\05\6a\21\01" "\02\40\02\40\20\06\20\02\41\00\10\c0\0d\45\0d\00\02\40\20" "\03\41\00\48\0d\00\20\01\41\00\20\05\41\00\20\03\6b\46\1b" "\21\00\0c\02\0b\41\00\21\00\20\03\41\7e\46\0d\01\20\04\41" "\01\36\02\68\20\06\20\04\41\38\6a\20\01\20\01\41\01\41\00" "\20\06\28\02\00\28\02\14\11\0c\00\20\01\41\00\20\04\28\02" "\50\41\01\46\1b\21\00\0c\01\0b\02\40\20\03\41\00\48\0d\00" "\20\00\20\03\6b\22\00\20\01\48\0d\00\20\04\41\2f\6a\42\00" "\37\00\00\20\04\41\18\6a\22\05\42\00\37\02\00\20\04\41\20" "\6a\42\00\37\02\00\20\04\41\28\6a\42\00\37\02\00\20\04\42" "\00\37\02\10\20\04\20\03\36\02\0c\20\04\20\02\36\02\08\20" "\04\20\00\36\02\04\20\04\20\06\36\02\00\20\04\41\01\36\02" "\30\20\06\20\04\20\01\20\01\41\01\41\00\20\06\28\02\00\28" "\02\14\11\0c\00\20\05\28\02\00\0d\01\0b\41\00\21\00\20\06" "\20\04\41\38\6a\20\01\41\01\41\00\20\06\28\02\00\28\02\18" "\11\0e\00\02\40\02\40\20\04\28\02\5c\0e\02\00\01\02\0b\20" "\04\28\02\4c\41\00\20\04\28\02\58\41\01\46\1b\41\00\20\04" "\28\02\54\41\01\46\1b\41\00\20\04\28\02\60\41\01\46\1b\21" "\00\0c\01\0b\02\40\20\04\28\02\50\41\01\46\0d\00\20\04\28" "\02\60\0d\01\20\04\28\02\54\41\01\47\0d\01\20\04\28\02\58" "\41\01\47\0d\01\0b\20\04\28\02\48\21\00\0b\20\04\41\f0\00" "\6a\24\00\20\00\0b\60\01\01\7f\02\40\20\01\28\02\10\22\04" "\0d\00\20\01\41\01\36\02\24\20\01\20\03\36\02\18\20\01\20" "\02\36\02\10\0f\0b\02\40\02\40\20\04\20\02\47\0d\00\20\01" "\28\02\18\41\02\47\0d\01\20\01\20\03\36\02\18\0f\0b\20\01" "\41\01\3a\00\36\20\01\41\02\36\02\18\20\01\20\01\28\02\24" "\41\01\6a\36\02\24\0b\0b\1f\00\02\40\20\00\20\01\28\02\08" "\41\00\10\c0\0d\45\0d\00\20\01\20\01\20\02\20\03\10\c4\0d" "\0b\0b\38\00\02\40\20\00\20\01\28\02\08\41\00\10\c0\0d\45" "\0d\00\20\01\20\01\20\02\20\03\10\c4\0d\0f\0b\20\00\28\02" "\08\22\00\20\01\20\02\20\03\20\00\28\02\00\28\02\1c\11\08" "\00\0b\59\01\02\7f\20\00\28\02\04\21\04\02\40\02\40\20\02" "\0d\00\41\00\21\05\0c\01\0b\20\04\41\08\75\21\05\20\04\41" "\01\71\45\0d\00\20\02\28\02\00\20\05\10\c8\0d\21\05\0b\20" "\00\28\02\00\22\00\20\01\20\02\20\05\6a\20\03\41\02\20\04" "\41\02\71\1b\20\00\28\02\00\28\02\1c\11\08\00\0b\0a\00\20" "\00\20\01\6a\28\02\00\0b\75\01\02\7f\02\40\20\00\20\01\28" "\02\08\41\00\10\c0\0d\45\0d\00\20\00\20\01\20\02\20\03\10" "\c4\0d\0f\0b\20\00\28\02\0c\21\04\20\00\41\10\6a\22\05\20" "\01\20\02\20\03\10\c7\0d\02\40\20\04\41\02\48\0d\00\20\05" "\20\04\41\03\74\6a\21\04\20\00\41\18\6a\21\00\03\40\20\00" "\20\01\20\02\20\03\10\c7\0d\20\01\2d\00\36\0d\01\20\00\41" "\08\6a\22\00\20\04\49\0d\00\0b\0b\0b\9f\01\00\20\01\41\01" "\3a\00\35\02\40\20\01\28\02\04\20\03\47\0d\00\20\01\41\01" "\3a\00\34\02\40\02\40\20\01\28\02\10\22\03\0d\00\20\01\41" "\01\36\02\24\20\01\20\04\36\02\18\20\01\20\02\36\02\10\20" "\04\41\01\47\0d\02\20\01\28\02\30\41\01\46\0d\01\0c\02\0b" "\02\40\20\03\20\02\47\0d\00\02\40\20\01\28\02\18\22\03\41" "\02\47\0d\00\20\01\20\04\36\02\18\20\04\21\03\0b\20\01\28" "\02\30\41\01\47\0d\02\20\03\41\01\46\0d\01\0c\02\0b\20\01" "\20\01\28\02\24\41\01\6a\36\02\24\0b\20\01\41\01\3a\00\36" "\0b\0b\20\00\02\40\20\01\28\02\04\20\02\47\0d\00\20\01\28" "\02\1c\41\01\46\0d\00\20\01\20\03\36\02\1c\0b\0b\d0\04\01" "\03\7f\02\40\20\00\20\01\28\02\08\20\04\10\c0\0d\45\0d\00" "\20\01\20\01\20\02\20\03\10\cb\0d\0f\0b\02\40\02\40\02\40" "\20\00\20\01\28\02\00\20\04\10\c0\0d\45\0d\00\02\40\02\40" "\20\01\28\02\10\20\02\46\0d\00\20\01\28\02\14\20\02\47\0d" "\01\0b\20\03\41\01\47\0d\03\20\01\41\01\36\02\20\0f\0b\20" "\01\20\03\36\02\20\20\01\28\02\2c\41\04\46\0d\01\20\00\41" "\10\6a\22\05\20\00\28\02\0c\41\03\74\6a\21\03\41\00\21\06" "\41\00\21\07\03\40\02\40\02\40\02\40\02\40\20\05\20\03\4f" "\0d\00\20\01\41\00\3b\01\34\20\05\20\01\20\02\20\02\41\01" "\20\04\10\cd\0d\20\01\2d\00\36\0d\00\20\01\2d\00\35\45\0d" "\03\02\40\20\01\2d\00\34\45\0d\00\20\01\28\02\18\41\01\46" "\0d\03\41\01\21\06\41\01\21\07\20\00\2d\00\08\41\02\71\45" "\0d\03\0c\04\0b\41\01\21\06\20\00\2d\00\08\41\01\71\0d\03" "\41\03\21\05\0c\01\0b\41\03\41\04\20\06\41\01\71\1b\21\05" "\0b\20\01\20\05\36\02\2c\20\07\41\01\71\0d\05\0c\04\0b\20" "\01\41\03\36\02\2c\0c\04\0b\20\05\41\08\6a\21\05\0c\00\0b" "\00\0b\20\00\28\02\0c\21\05\20\00\41\10\6a\22\06\20\01\20" "\02\20\03\20\04\10\ce\0d\20\05\41\02\48\0d\01\20\06\20\05" "\41\03\74\6a\21\06\20\00\41\18\6a\21\05\02\40\02\40\20\00" "\28\02\08\22\00\41\02\71\0d\00\20\01\28\02\24\41\01\47\0d" "\01\0b\03\40\20\01\2d\00\36\0d\03\20\05\20\01\20\02\20\03" "\20\04\10\ce\0d\20\05\41\08\6a\22\05\20\06\49\0d\00\0c\03" "\0b\00\0b\02\40\20\00\41\01\71\0d\00\03\40\20\01\2d\00\36" "\0d\03\20\01\28\02\24\41\01\46\0d\03\20\05\20\01\20\02\20" "\03\20\04\10\ce\0d\20\05\41\08\6a\22\05\20\06\49\0d\00\0c" "\03\0b\00\0b\03\40\20\01\2d\00\36\0d\02\02\40\20\01\28\02" "\24\41\01\47\0d\00\20\01\28\02\18\41\01\46\0d\03\0b\20\05" "\20\01\20\02\20\03\20\04\10\ce\0d\20\05\41\08\6a\22\05\20" "\06\49\0d\00\0c\02\0b\00\0b\20\01\20\02\36\02\14\20\01\20" "\01\28\02\28\41\01\6a\36\02\28\20\01\28\02\24\41\01\47\0d" "\00\20\01\28\02\18\41\02\47\0d\00\20\01\41\01\3a\00\36\0f" "\0b\0b\4e\01\02\7f\20\00\28\02\04\22\06\41\08\75\21\07\02" "\40\20\06\41\01\71\45\0d\00\20\03\28\02\00\20\07\10\c8\0d" "\21\07\0b\20\00\28\02\00\22\00\20\01\20\02\20\03\20\07\6a" "\20\04\41\02\20\06\41\02\71\1b\20\05\20\00\28\02\00\28\02" "\14\11\0c\00\0b\4c\01\02\7f\20\00\28\02\04\22\05\41\08\75" "\21\06\02\40\20\05\41\01\71\45\0d\00\20\02\28\02\00\20\06" "\10\c8\0d\21\06\0b\20\00\28\02\00\22\00\20\01\20\02\20\06" "\6a\20\03\41\02\20\05\41\02\71\1b\20\04\20\00\28\02\00\28" "\02\18\11\0e\00\0b\82\02\00\02\40\20\00\20\01\28\02\08\20" "\04\10\c0\0d\45\0d\00\20\01\20\01\20\02\20\03\10\cb\0d\0f" "\0b\02\40\02\40\20\00\20\01\28\02\00\20\04\10\c0\0d\45\0d" "\00\02\40\02\40\20\01\28\02\10\20\02\46\0d\00\20\01\28\02" "\14\20\02\47\0d\01\0b\20\03\41\01\47\0d\02\20\01\41\01\36" "\02\20\0f\0b\20\01\20\03\36\02\20\02\40\20\01\28\02\2c\41" "\04\46\0d\00\20\01\41\00\3b\01\34\20\00\28\02\08\22\00\20" "\01\20\02\20\02\41\01\20\04\20\00\28\02\00\28\02\14\11\0c" "\00\02\40\20\01\2d\00\35\45\0d\00\20\01\41\03\36\02\2c\20" "\01\2d\00\34\45\0d\01\0c\03\0b\20\01\41\04\36\02\2c\0b\20" "\01\20\02\36\02\14\20\01\20\01\28\02\28\41\01\6a\36\02\28" "\20\01\28\02\24\41\01\47\0d\01\20\01\28\02\18\41\02\47\0d" "\01\20\01\41\01\3a\00\36\0f\0b\20\00\28\02\08\22\00\20\01" "\20\02\20\03\20\04\20\00\28\02\00\28\02\18\11\0e\00\0b\0b" "\9b\01\00\02\40\20\00\20\01\28\02\08\20\04\10\c0\0d\45\0d" "\00\20\01\20\01\20\02\20\03\10\cb\0d\0f\0b\02\40\20\00\20" "\01\28\02\00\20\04\10\c0\0d\45\0d\00\02\40\02\40\20\01\28" "\02\10\20\02\46\0d\00\20\01\28\02\14\20\02\47\0d\01\0b\20" "\03\41\01\47\0d\01\20\01\41\01\36\02\20\0f\0b\20\01\20\02" "\36\02\14\20\01\20\03\36\02\20\20\01\20\01\28\02\28\41\01" "\6a\36\02\28\02\40\20\01\28\02\24\41\01\47\0d\00\20\01\28" "\02\18\41\02\47\0d\00\20\01\41\01\3a\00\36\0b\20\01\41\04" "\36\02\2c\0b\0b\c1\02\01\06\7f\02\40\20\00\20\01\28\02\08" "\20\05\10\c0\0d\45\0d\00\20\01\20\01\20\02\20\03\20\04\10" "\ca\0d\0f\0b\20\01\2d\00\35\21\06\20\00\28\02\0c\21\07\20" "\01\41\00\3a\00\35\20\01\2d\00\34\21\08\20\01\41\00\3a\00" "\34\20\00\41\10\6a\22\09\20\01\20\02\20\03\20\04\20\05\10" "\cd\0d\20\08\20\01\2d\00\34\22\0a\72\41\ff\01\71\41\00\47" "\21\08\20\06\20\01\2d\00\35\22\0b\72\41\ff\01\71\41\00\47" "\21\06\02\40\20\07\41\02\48\0d\00\20\09\20\07\41\03\74\6a" "\21\09\20\00\41\18\6a\21\07\03\40\20\01\2d\00\36\0d\01\02" "\40\02\40\20\0a\41\ff\01\71\45\0d\00\20\01\28\02\18\41\01" "\46\0d\03\20\00\2d\00\08\41\02\71\0d\01\0c\03\0b\20\0b\41" "\ff\01\71\45\0d\00\20\00\2d\00\08\41\01\71\45\0d\02\0b\20" "\01\41\00\3b\01\34\20\07\20\01\20\02\20\03\20\04\20\05\10" "\cd\0d\20\01\2d\00\35\22\0b\20\06\41\01\71\72\41\ff\01\71" "\41\00\47\21\06\20\01\2d\00\34\22\0a\20\08\41\01\71\72\41" "\ff\01\71\41\00\47\21\08\20\07\41\08\6a\22\07\20\09\49\0d" "\00\0b\0b\20\01\20\06\41\01\71\3a\00\35\20\01\20\08\41\01" "\71\3a\00\34\0b\3e\00\02\40\20\00\20\01\28\02\08\20\05\10" "\c0\0d\45\0d\00\20\01\20\01\20\02\20\03\20\04\10\ca\0d\0f" "\0b\20\00\28\02\08\22\00\20\01\20\02\20\03\20\04\20\05\20" "\00\28\02\00\28\02\14\11\0c\00\0b\21\00\02\40\20\00\20\01" "\28\02\08\20\05\10\c0\0d\45\0d\00\20\01\20\01\20\02\20\03" "\20\04\10\ca\0d\0b\0b\04\00\20\00\0b\0d\00\20\00\10\d4\0d" "\1a\20\00\10\8b\0d\0b\05\00\41\b2\0a\0b\1c\00\20\00\41\c4" "\f4\00\41\08\6a\36\02\00\20\00\41\04\6a\10\d8\0d\1a\20\00" "\10\d4\0d\0b\2b\01\01\7f\02\40\20\00\10\96\0d\45\0d\00\20" "\00\28\02\00\10\d9\0d\22\01\41\08\6a\10\da\0d\41\7f\4a\0d" "\00\20\01\10\8b\0d\0b\20\00\0b\07\00\20\00\41\74\6a\0b\15" "\01\01\7f\20\00\20\00\28\02\00\41\7f\6a\22\01\36\02\00\20" "\01\0b\0d\00\20\00\10\d7\0d\1a\20\00\10\8b\0d\0b\0a\00\20" "\00\41\04\6a\10\dd\0d\0b\07\00\20\00\28\02\00\0b\0d\00\20" "\00\10\d7\0d\1a\20\00\10\8b\0d\0b\04\00\20\00\0b\04\00\23" "\00\0b\06\00\20\00\24\00\0b\0b\a4\71\02\00\41\80\08\0b\c0" "\6d\69\6e\66\69\6e\69\74\79\00\46\65\62\72\75\61\72\79\00" "\4a\61\6e\75\61\72\79\00\4a\75\6c\79\00\54\68\75\72\73\64" "\61\79\00\54\75\65\73\64\61\79\00\57\65\64\6e\65\73\64\61" "\79\00\53\61\74\75\72\64\61\79\00\53\75\6e\64\61\79\00\4d" "\6f\6e\64\61\79\00\46\72\69\64\61\79\00\4d\61\79\00\25\6d" "\2f\25\64\2f\25\79\00\2d\2b\20\20\20\30\58\30\78\00\2d\30" "\58\2b\30\58\20\30\58\2d\30\78\2b\30\78\20\30\78\00\4e\6f" "\76\00\54\68\75\00\75\6e\73\75\70\70\6f\72\74\65\64\20\6c" "\6f\63\61\6c\65\20\66\6f\72\20\73\74\61\6e\64\61\72\64\20" "\69\6e\70\75\74\00\2f\64\65\76\2f\73\74\64\6f\75\74\00\41" "\75\67\75\73\74\00\4f\63\74\00\53\61\74\00\2f\64\65\76\2f" "\73\74\64\65\72\72\00\41\70\72\00\76\65\63\74\6f\72\00\4f" "\63\74\6f\62\65\72\00\4e\6f\76\65\6d\62\65\72\00\53\65\70" "\74\65\6d\62\65\72\00\44\65\63\65\6d\62\65\72\00\69\6f\73" "\5f\62\61\73\65\3a\3a\63\6c\65\61\72\00\4d\61\72\00\53\65" "\70\00\25\49\3a\25\4d\3a\25\53\20\25\70\00\53\75\6e\00\4a" "\75\6e\00\73\74\64\3a\3a\65\78\63\65\70\74\69\6f\6e\00\4d" "\6f\6e\00\2f\64\65\76\2f\73\74\64\69\6e\00\6e\61\6e\00\4a" "\61\6e\00\4a\75\6c\00\6c\6c\00\41\70\72\69\6c\00\46\72\69" "\00\4d\61\72\63\68\00\41\75\67\00\62\61\73\69\63\5f\73\74" "\72\69\6e\67\00\69\6e\66\00\54\5a\69\66\00\25\2e\30\4c\66" "\00\25\4c\66\00\74\72\75\65\00\54\75\65\00\66\61\6c\73\65" "\00\4a\75\6e\65\00\2f\65\74\63\2f\6c\6f\63\61\6c\74\69\6d" "\65\00\25\30\2a\6c\6c\64\00\25\2a\6c\6c\64\00\2b\25\6c\6c" "\64\00\25\2b\2e\34\6c\64\00\57\65\64\00\25\59\2d\25\6d\2d" "\25\64\00\44\65\63\00\46\65\62\00\54\5a\00\25\61\20\25\62" "\20\25\64\20\25\48\3a\25\4d\3a\25\53\20\25\59\00\50\4f\53" "\49\58\00\47\4d\54\00\25\48\3a\25\4d\3a\25\53\00\4e\41\4e" "\00\50\4d\00\41\4d\00\25\48\3a\25\4d\00\4c\43\5f\41\4c\4c" "\00\41\53\43\49\49\00\4c\41\4e\47\00\49\4e\46\00\43\00\43" "\2e\55\54\46\2d\38\00\2e\00\2d\00\28\6e\75\6c\6c\29\00\25" "\00\50\75\72\65\20\76\69\72\74\75\61\6c\20\66\75\6e\63\74" "\69\6f\6e\20\63\61\6c\6c\65\64\21\00\54\68\65\20\6f\70\74" "\69\6d\61\6c\20\70\72\6f\66\69\74\20\69\73\20\00\0a\00\09" "\00\00\00\00\00\00\00\44\08\00\00\04\00\00\00\05\00\00\00" "\06\00\00\00\07\00\00\00\08\00\00\00\09\00\00\00\0a\00\00" "\00\0b\00\00\00\0c\00\00\00\0d\00\00\00\0e\00\00\00\0f\00" "\00\00\10\00\00\00\11\00\00\00\08\00\00\00\00\00\00\00\7c" "\08\00\00\12\00\00\00\13\00\00\00\f8\ff\ff\ff\f8\ff\ff\ff" "\7c\08\00\00\14\00\00\00\15\00\00\00\d4\06\00\00\e8\06\00" "\00\04\00\00\00\00\00\00\00\c4\08\00\00\16\00\00\00\17\00" "\00\00\fc\ff\ff\ff\fc\ff\ff\ff\c4\08\00\00\18\00\00\00\19" "\00\00\00\04\07\00\00\18\07\00\00\00\00\00\00\58\09\00\00" "\1a\00\00\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\1e\00\00" "\00\1f\00\00\00\20\00\00\00\21\00\00\00\22\00\00\00\23\00" "\00\00\24\00\00\00\25\00\00\00\26\00\00\00\27\00\00\00\08" "\00\00\00\00\00\00\00\90\09\00\00\28\00\00\00\29\00\00\00" "\f8\ff\ff\ff\f8\ff\ff\ff\90\09\00\00\2a\00\00\00\2b\00\00" "\00\74\07\00\00\88\07\00\00\04\00\00\00\00\00\00\00\d8\09" "\00\00\2c\00\00\00\2d\00\00\00\fc\ff\ff\ff\fc\ff\ff\ff\d8" "\09\00\00\2e\00\00\00\2f\00\00\00\a4\07\00\00\b8\07\00\00" "\00\00\00\00\04\08\00\00\30\00\00\00\31\00\00\00\4e\53\74" "\33\5f\5f\32\39\62\61\73\69\63\5f\69\6f\73\49\63\4e\53\5f" "\31\31\63\68\61\72\5f\74\72\61\69\74\73\49\63\45\45\45\45" "\00\00\00\68\39\00\00\d8\07\00\00\14\0a\00\00\4e\53\74\33" "\5f\5f\32\31\35\62\61\73\69\63\5f\73\74\72\65\61\6d\62\75" "\66\49\63\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74\73" "\49\63\45\45\45\45\00\00\00\00\40\39\00\00\10\08\00\00\4e" "\53\74\33\5f\5f\32\31\33\62\61\73\69\63\5f\69\73\74\72\65" "\61\6d\49\63\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74" "\73\49\63\45\45\45\45\00\00\c4\39\00\00\4c\08\00\00\00\00" "\00\00\01\00\00\00\04\08\00\00\03\f4\ff\ff\4e\53\74\33\5f" "\5f\32\31\33\62\61\73\69\63\5f\6f\73\74\72\65\61\6d\49\63" "\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74\73\49\63\45" "\45\45\45\00\00\c4\39\00\00\94\08\00\00\00\00\00\00\01\00" "\00\00\04\08\00\00\03\f4\ff\ff\00\00\00\00\18\09\00\00\32" "\00\00\00\33\00\00\00\4e\53\74\33\5f\5f\32\39\62\61\73\69" "\63\5f\69\6f\73\49\77\4e\53\5f\31\31\63\68\61\72\5f\74\72" "\61\69\74\73\49\77\45\45\45\45\00\00\00\68\39\00\00\ec\08" "\00\00\14\0a\00\00\4e\53\74\33\5f\5f\32\31\35\62\61\73\69" "\63\5f\73\74\72\65\61\6d\62\75\66\49\77\4e\53\5f\31\31\63" "\68\61\72\5f\74\72\61\69\74\73\49\77\45\45\45\45\00\00\00" "\00\40\39\00\00\24\09\00\00\4e\53\74\33\5f\5f\32\31\33\62" "\61\73\69\63\5f\69\73\74\72\65\61\6d\49\77\4e\53\5f\31\31" "\63\68\61\72\5f\74\72\61\69\74\73\49\77\45\45\45\45\00\00" "\c4\39\00\00\60\09\00\00\00\00\00\00\01\00\00\00\18\09\00" "\00\03\f4\ff\ff\4e\53\74\33\5f\5f\32\31\33\62\61\73\69\63" "\5f\6f\73\74\72\65\61\6d\49\77\4e\53\5f\31\31\63\68\61\72" "\5f\74\72\61\69\74\73\49\77\45\45\45\45\00\00\c4\39\00\00" "\a8\09\00\00\00\00\00\00\01\00\00\00\18\09\00\00\03\f4\ff" "\ff\00\00\00\00\14\0a\00\00\34\00\00\00\35\00\00\00\4e\53" "\74\33\5f\5f\32\38\69\6f\73\5f\62\61\73\65\45\00\00\00\40" "\39\00\00\00\0a\00\00\c8\3a\00\00\60\3b\00\00\f8\3b\00\00" "\00\00\00\00\00\00\00\00\de\12\04\95\00\00\00\00\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\30\0a\00\00\14\00\00\00\43\2e" "\55\54\46\2d\38\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\44\0a\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\02\00\00\c0\03\00\00\c0\04\00\00\c0\05" "\00\00\c0\06\00\00\c0\07\00\00\c0\08\00\00\c0\09\00\00\c0" "\0a\00\00\c0\0b\00\00\c0\0c\00\00\c0\0d\00\00\c0\0e\00\00" "\c0\0f\00\00\c0\10\00\00\c0\11\00\00\c0\12\00\00\c0\13\00" "\00\c0\14\00\00\c0\15\00\00\c0\16\00\00\c0\17\00\00\c0\18" "\00\00\c0\19\00\00\c0\1a\00\00\c0\1b\00\00\c0\1c\00\00\c0" "\1d\00\00\c0\1e\00\00\c0\1f\00\00\c0\00\00\00\b3\01\00\00" "\c3\02\00\00\c3\03\00\00\c3\04\00\00\c3\05\00\00\c3\06\00" "\00\c3\07\00\00\c3\08\00\00\c3\09\00\00\c3\0a\00\00\c3\0b" "\00\00\c3\0c\00\00\c3\0d\00\00\d3\0e\00\00\c3\0f\00\00\c3" "\00\00\0c\bb\01\00\0c\c3\02\00\0c\c3\03\00\0c\c3\04\00\0c" "\db\00\00\00\00\c4\0b\00\00\04\00\00\00\3e\00\00\00\3f\00" "\00\00\07\00\00\00\08\00\00\00\09\00\00\00\0a\00\00\00\0b" "\00\00\00\0c\00\00\00\40\00\00\00\41\00\00\00\42\00\00\00" "\10\00\00\00\11\00\00\00\4e\53\74\33\5f\5f\32\31\30\5f\5f" "\73\74\64\69\6e\62\75\66\49\63\45\45\00\68\39\00\00\ac\0b" "\00\00\44\08\00\00\00\00\00\00\2c\0c\00\00\04\00\00\00\43" "\00\00\00\44\00\00\00\07\00\00\00\08\00\00\00\09\00\00\00" "\45\00\00\00\0b\00\00\00\0c\00\00\00\0d\00\00\00\0e\00\00" "\00\0f\00\00\00\46\00\00\00\47\00\00\00\4e\53\74\33\5f\5f" "\32\31\31\5f\5f\73\74\64\6f\75\74\62\75\66\49\63\45\45\00" "\00\00\00\68\39\00\00\10\0c\00\00\44\08\00\00\00\00\00\00" "\90\0c\00\00\1a\00\00\00\48\00\00\00\49\00\00\00\1d\00\00" "\00\1e\00\00\00\1f\00\00\00\20\00\00\00\21\00\00\00\22\00" "\00\00\4a\00\00\00\4b\00\00\00\4c\00\00\00\26\00\00\00\27" "\00\00\00\4e\53\74\33\5f\5f\32\31\30\5f\5f\73\74\64\69\6e" "\62\75\66\49\77\45\45\00\68\39\00\00\78\0c\00\00\58\09\00" "\00\00\00\00\00\f8\0c\00\00\1a\00\00\00\4d\00\00\00\4e\00" "\00\00\1d\00\00\00\1e\00\00\00\1f\00\00\00\4f\00\00\00\21" "\00\00\00\22\00\00\00\23\00\00\00\24\00\00\00\25\00\00\00" "\50\00\00\00\51\00\00\00\4e\53\74\33\5f\5f\32\31\31\5f\5f" "\73\74\64\6f\75\74\62\75\66\49\77\45\45\00\00\00\00\68\39" "\00\00\dc\0c\00\00\58\09\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\d1\74\9e\00\57\9d\bd\2a\80\70\52\0f\ff\ff\3e\27" "\0a\00\00\00\64\00\00\00\e8\03\00\00\10\27\00\00\a0\86\01" "\00\40\42\0f\00\80\96\98\00\00\e1\f5\05\18\00\00\00\35\00" "\00\00\71\00\00\00\6b\ff\ff\ff\ce\fb\ff\ff\92\bf\ff\ff\00" "\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\00" "\01\02\03\04\05\06\07\08\09\ff\ff\ff\ff\ff\ff\ff\0a\0b\0c" "\0d\0e\0f\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\ff\ff\ff\ff\ff\ff\0a\0b\0c\0d\0e\0f\10\11\12" "\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f\20\21\22\23\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff" "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\01" "\02\04\07\03\06\05\00\00\00\00\00\00\00\4c\43\5f\43\54\59" "\50\45\00\00\00\00\4c\43\5f\4e\55\4d\45\52\49\43\00\00\4c" "\43\5f\54\49\4d\45\00\00\00\00\00\4c\43\5f\43\4f\4c\4c\41" "\54\45\00\00\4c\43\5f\4d\4f\4e\45\54\41\52\59\00\4c\43\5f" "\4d\45\53\53\41\47\45\53\00\00\00\00\00\00\00\00\00\19\00" "\0a\00\19\19\19\00\00\00\00\05\00\00\00\00\00\00\09\00\00" "\00\00\0b\00\00\00\00\00\00\00\00\19\00\11\0a\19\19\19\03" "\0a\07\00\01\00\09\0b\18\00\00\09\06\0b\00\00\0b\00\06\19" "\00\00\00\19\19\19\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\0e\00\00\00\00\00\00\00\00\19\00\0a\0d\19\19\19" "\00\0d\00\00\02\00\09\0e\00\00\00\09\00\0e\00\00\0e\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\13\00\00" "\00\00\13\00\00\00\00\09\0c\00\00\00\00\00\0c\00\00\0c\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\0f\00" "\00\00\04\0f\00\00\00\00\09\10\00\00\00\00\00\10\00\00\10" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00\11" "\00\00\00\00\11\00\00\00\00\09\12\00\00\00\00\00\12\00\00" "\12\00\00\1a\00\00\00\1a\1a\1a\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\1a\00\00" "\00\1a\1a\1a\00\00\00\00\00\00\09\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\14\00\00\00\00\00\00\00\00\00\00" "\00\17\00\00\00\00\17\00\00\00\00\09\14\00\00\00\00\00\14" "\00\00\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\00\00\00" "\00\00\15\00\00\00\00\15\00\00\00\00\09\16\00\00\00\00\00" "\16\00\00\16\00\00\30\31\32\33\34\35\36\37\38\39\41\42\43" "\44\45\46\00\00\00\00\80\de\28\00\80\c8\4d\00\00\a7\76\00" "\00\34\9e\00\80\12\c7\00\80\9f\ee\00\00\7e\17\01\80\5c\40" "\01\80\e9\67\01\00\c8\90\01\00\55\b8\01\55\54\43\00\00\00" "\00\00\00\00\00\00\00\00\00\00\2f\75\73\72\2f\73\68\61\72" "\65\2f\7a\6f\6e\65\69\6e\66\6f\2f\00\2f\73\68\61\72\65\2f" "\7a\6f\6e\65\69\6e\66\6f\2f\00\2f\65\74\63\2f\7a\6f\6e\65" "\69\6e\66\6f\2f\00\00\2e\00\00\00\00\00\00\00\00\00\53\75" "\6e\00\4d\6f\6e\00\54\75\65\00\57\65\64\00\54\68\75\00\46" "\72\69\00\53\61\74\00\53\75\6e\64\61\79\00\4d\6f\6e\64\61" "\79\00\54\75\65\73\64\61\79\00\57\65\64\6e\65\73\64\61\79" "\00\54\68\75\72\73\64\61\79\00\46\72\69\64\61\79\00\53\61" "\74\75\72\64\61\79\00\4a\61\6e\00\46\65\62\00\4d\61\72\00" "\41\70\72\00\4d\61\79\00\4a\75\6e\00\4a\75\6c\00\41\75\67" "\00\53\65\70\00\4f\63\74\00\4e\6f\76\00\44\65\63\00\4a\61" "\6e\75\61\72\79\00\46\65\62\72\75\61\72\79\00\4d\61\72\63" "\68\00\41\70\72\69\6c\00\4d\61\79\00\4a\75\6e\65\00\4a\75" "\6c\79\00\41\75\67\75\73\74\00\53\65\70\74\65\6d\62\65\72" "\00\4f\63\74\6f\62\65\72\00\4e\6f\76\65\6d\62\65\72\00\44" "\65\63\65\6d\62\65\72\00\41\4d\00\50\4d\00\25\61\20\25\62" "\20\25\65\20\25\54\20\25\59\00\25\6d\2f\25\64\2f\25\79\00" "\25\48\3a\25\4d\3a\25\53\00\25\49\3a\25\4d\3a\25\53\20\25" "\70\00\00\00\25\6d\2f\25\64\2f\25\79\00\30\31\32\33\34\35" "\36\37\38\39\00\25\61\20\25\62\20\25\65\20\25\54\20\25\59" "\00\25\48\3a\25\4d\3a\25\53\00\00\00\00\00\5e\5b\79\59\5d" "\00\5e\5b\6e\4e\5d\00\79\65\73\00\6e\6f\00\00\80\14\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00" "\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00" "\00\08\00\00\00\09\00\00\00\0a\00\00\00\0b\00\00\00\0c\00" "\00\00\0d\00\00\00\0e\00\00\00\0f\00\00\00\10\00\00\00\11" "\00\00\00\12\00\00\00\13\00\00\00\14\00\00\00\15\00\00\00" "\16\00\00\00\17\00\00\00\18\00\00\00\19\00\00\00\1a\00\00" "\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\1e\00\00\00\1f\00" "\00\00\20\00\00\00\21\00\00\00\22\00\00\00\23\00\00\00\24" "\00\00\00\25\00\00\00\26\00\00\00\27\00\00\00\28\00\00\00" "\29\00\00\00\2a\00\00\00\2b\00\00\00\2c\00\00\00\2d\00\00" "\00\2e\00\00\00\2f\00\00\00\30\00\00\00\31\00\00\00\32\00" "\00\00\33\00\00\00\34\00\00\00\35\00\00\00\36\00\00\00\37" "\00\00\00\38\00\00\00\39\00\00\00\3a\00\00\00\3b\00\00\00" "\3c\00\00\00\3d\00\00\00\3e\00\00\00\3f\00\00\00\40\00\00" "\00\41\00\00\00\42\00\00\00\43\00\00\00\44\00\00\00\45\00" "\00\00\46\00\00\00\47\00\00\00\48\00\00\00\49\00\00\00\4a" "\00\00\00\4b\00\00\00\4c\00\00\00\4d\00\00\00\4e\00\00\00" "\4f\00\00\00\50\00\00\00\51\00\00\00\52\00\00\00\53\00\00" "\00\54\00\00\00\55\00\00\00\56\00\00\00\57\00\00\00\58\00" "\00\00\59\00\00\00\5a\00\00\00\5b\00\00\00\5c\00\00\00\5d" "\00\00\00\5e\00\00\00\5f\00\00\00\60\00\00\00\41\00\00\00" "\42\00\00\00\43\00\00\00\44\00\00\00\45\00\00\00\46\00\00" "\00\47\00\00\00\48\00\00\00\49\00\00\00\4a\00\00\00\4b\00" "\00\00\4c\00\00\00\4d\00\00\00\4e\00\00\00\4f\00\00\00\50" "\00\00\00\51\00\00\00\52\00\00\00\53\00\00\00\54\00\00\00" "\55\00\00\00\56\00\00\00\57\00\00\00\58\00\00\00\59\00\00" "\00\5a\00\00\00\7b\00\00\00\7c\00\00\00\7d\00\00\00\7e\00" "\00\00\7f\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\90\1a\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00" "\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\09" "\00\00\00\0a\00\00\00\0b\00\00\00\0c\00\00\00\0d\00\00\00" "\0e\00\00\00\0f\00\00\00\10\00\00\00\11\00\00\00\12\00\00" "\00\13\00\00\00\14\00\00\00\15\00\00\00\16\00\00\00\17\00" "\00\00\18\00\00\00\19\00\00\00\1a\00\00\00\1b\00\00\00\1c" "\00\00\00\1d\00\00\00\1e\00\00\00\1f\00\00\00\20\00\00\00" "\21\00\00\00\22\00\00\00\23\00\00\00\24\00\00\00\25\00\00" "\00\26\00\00\00\27\00\00\00\28\00\00\00\29\00\00\00\2a\00" "\00\00\2b\00\00\00\2c\00\00\00\2d\00\00\00\2e\00\00\00\2f" "\00\00\00\30\00\00\00\31\00\00\00\32\00\00\00\33\00\00\00" "\34\00\00\00\35\00\00\00\36\00\00\00\37\00\00\00\38\00\00" "\00\39\00\00\00\3a\00\00\00\3b\00\00\00\3c\00\00\00\3d\00" "\00\00\3e\00\00\00\3f\00\00\00\40\00\00\00\61\00\00\00\62" "\00\00\00\63\00\00\00\64\00\00\00\65\00\00\00\66\00\00\00" "\67\00\00\00\68\00\00\00\69\00\00\00\6a\00\00\00\6b\00\00" "\00\6c\00\00\00\6d\00\00\00\6e\00\00\00\6f\00\00\00\70\00" "\00\00\71\00\00\00\72\00\00\00\73\00\00\00\74\00\00\00\75" "\00\00\00\76\00\00\00\77\00\00\00\78\00\00\00\79\00\00\00" "\7a\00\00\00\5b\00\00\00\5c\00\00\00\5d\00\00\00\5e\00\00" "\00\5f\00\00\00\60\00\00\00\61\00\00\00\62\00\00\00\63\00" "\00\00\64\00\00\00\65\00\00\00\66\00\00\00\67\00\00\00\68" "\00\00\00\69\00\00\00\6a\00\00\00\6b\00\00\00\6c\00\00\00" "\6d\00\00\00\6e\00\00\00\6f\00\00\00\70\00\00\00\71\00\00" "\00\72\00\00\00\73\00\00\00\74\00\00\00\75\00\00\00\76\00" "\00\00\77\00\00\00\78\00\00\00\79\00\00\00\7a\00\00\00\7b" "\00\00\00\7c\00\00\00\7d\00\00\00\7e\00\00\00\7f\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\30" "\31\32\33\34\35\36\37\38\39\61\62\63\64\65\66\41\42\43\44" "\45\46\78\58\2b\2d\70\50\69\49\6e\4e\00\00\00\00\00\00\00" "\00\04\28\00\00\68\00\00\00\69\00\00\00\6a\00\00\00\00\00" "\00\00\64\28\00\00\6b\00\00\00\6c\00\00\00\6a\00\00\00\6d" "\00\00\00\6e\00\00\00\6f\00\00\00\70\00\00\00\71\00\00\00" "\72\00\00\00\73\00\00\00\74\00\00\00\00\00\00\00\04\00\00" "\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00" "\00\00\04\00\00\00\04\00\00\00\04\00\00\00\05\02\00\00\05" "\00\00\00\05\00\00\00\05\00\00\00\05\00\00\00\04\00\00\00" "\04\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00\00" "\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00" "\00\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\04" "\00\00\00\04\00\00\00\04\00\00\00\03\02\00\00\82\00\00\00" "\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00" "\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00" "\00\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00\00\42" "\01\00\00\42\01\00\00\42\01\00\00\42\01\00\00\42\01\00\00" "\42\01\00\00\42\01\00\00\42\01\00\00\42\01\00\00\42\01\00" "\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00" "\00\00\82\00\00\00\82\00\00\00\2a\01\00\00\2a\01\00\00\2a" "\01\00\00\2a\01\00\00\2a\01\00\00\2a\01\00\00\2a\00\00\00" "\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a\00\00" "\00\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a\00" "\00\00\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a" "\00\00\00\2a\00\00\00\2a\00\00\00\2a\00\00\00\2a\00\00\00" "\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00\00\82\00\00" "\00\82\00\00\00\32\01\00\00\32\01\00\00\32\01\00\00\32\01" "\00\00\32\01\00\00\32\01\00\00\32\00\00\00\32\00\00\00\32" "\00\00\00\32\00\00\00\32\00\00\00\32\00\00\00\32\00\00\00" "\32\00\00\00\32\00\00\00\32\00\00\00\32\00\00\00\32\00\00" "\00\32\00\00\00\32\00\00\00\32\00\00\00\32\00\00\00\32\00" "\00\00\32\00\00\00\32\00\00\00\32\00\00\00\82\00\00\00\82" "\00\00\00\82\00\00\00\82\00\00\00\04\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\cc" "\27\00\00\75\00\00\00\76\00\00\00\6a\00\00\00\77\00\00\00" "\78\00\00\00\79\00\00\00\7a\00\00\00\7b\00\00\00\7c\00\00" "\00\7d\00\00\00\00\00\00\00\9c\28\00\00\7e\00\00\00\7f\00" "\00\00\6a\00\00\00\80\00\00\00\81\00\00\00\82\00\00\00\83" "\00\00\00\84\00\00\00\00\00\00\00\c0\28\00\00\85\00\00\00" "\86\00\00\00\6a\00\00\00\87\00\00\00\88\00\00\00\89\00\00" "\00\8a\00\00\00\8b\00\00\00\74\00\00\00\72\00\00\00\75\00" "\00\00\65\00\00\00\00\00\00\00\66\00\00\00\61\00\00\00\6c" "\00\00\00\73\00\00\00\65\00\00\00\00\00\00\00\25\00\00\00" "\6d\00\00\00\2f\00\00\00\25\00\00\00\64\00\00\00\2f\00\00" "\00\25\00\00\00\79\00\00\00\00\00\00\00\25\00\00\00\48\00" "\00\00\3a\00\00\00\25\00\00\00\4d\00\00\00\3a\00\00\00\25" "\00\00\00\53\00\00\00\00\00\00\00\25\00\00\00\61\00\00\00" "\20\00\00\00\25\00\00\00\62\00\00\00\20\00\00\00\25\00\00" "\00\64\00\00\00\20\00\00\00\25\00\00\00\48\00\00\00\3a\00" "\00\00\25\00\00\00\4d\00\00\00\3a\00\00\00\25\00\00\00\53" "\00\00\00\20\00\00\00\25\00\00\00\59\00\00\00\00\00\00\00" "\25\00\00\00\49\00\00\00\3a\00\00\00\25\00\00\00\4d\00\00" "\00\3a\00\00\00\25\00\00\00\53\00\00\00\20\00\00\00\25\00" "\00\00\70\00\00\00\00\00\00\00\00\00\00\00\a4\24\00\00\8c" "\00\00\00\8d\00\00\00\6a\00\00\00\4e\53\74\33\5f\5f\32\36" "\6c\6f\63\61\6c\65\35\66\61\63\65\74\45\00\00\00\68\39\00" "\00\8c\24\00\00\d0\38\00\00\00\00\00\00\24\25\00\00\8c\00" "\00\00\8e\00\00\00\6a\00\00\00\8f\00\00\00\90\00\00\00\91" "\00\00\00\92\00\00\00\93\00\00\00\94\00\00\00\95\00\00\00" "\96\00\00\00\97\00\00\00\98\00\00\00\99\00\00\00\9a\00\00" "\00\4e\53\74\33\5f\5f\32\35\63\74\79\70\65\49\77\45\45\00" "\4e\53\74\33\5f\5f\32\31\30\63\74\79\70\65\5f\62\61\73\65" "\45\00\00\40\39\00\00\06\25\00\00\c4\39\00\00\f4\24\00\00" "\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\1c\25\00" "\00\02\00\00\00\00\00\00\00\b8\25\00\00\8c\00\00\00\9b\00" "\00\00\6a\00\00\00\9c\00\00\00\9d\00\00\00\9e\00\00\00\9f" "\00\00\00\a0\00\00\00\a1\00\00\00\a2\00\00\00\4e\53\74\33" "\5f\5f\32\37\63\6f\64\65\63\76\74\49\63\63\31\31\5f\5f\6d" "\62\73\74\61\74\65\5f\74\45\45\00\4e\53\74\33\5f\5f\32\31" "\32\63\6f\64\65\63\76\74\5f\62\61\73\65\45\00\00\00\00\40" "\39\00\00\96\25\00\00\c4\39\00\00\74\25\00\00\00\00\00\00" "\02\00\00\00\a4\24\00\00\02\00\00\00\b0\25\00\00\02\00\00" "\00\00\00\00\00\2c\26\00\00\8c\00\00\00\a3\00\00\00\6a\00" "\00\00\a4\00\00\00\a5\00\00\00\a6\00\00\00\a7\00\00\00\a8" "\00\00\00\a9\00\00\00\aa\00\00\00\4e\53\74\33\5f\5f\32\37" "\63\6f\64\65\63\76\74\49\44\73\63\31\31\5f\5f\6d\62\73\74" "\61\74\65\5f\74\45\45\00\00\c4\39\00\00\08\26\00\00\00\00" "\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\b0\25\00\00\02" "\00\00\00\00\00\00\00\a0\26\00\00\8c\00\00\00\ab\00\00\00" "\6a\00\00\00\ac\00\00\00\ad\00\00\00\ae\00\00\00\af\00\00" "\00\b0\00\00\00\b1\00\00\00\b2\00\00\00\4e\53\74\33\5f\5f" "\32\37\63\6f\64\65\63\76\74\49\44\73\44\75\31\31\5f\5f\6d" "\62\73\74\61\74\65\5f\74\45\45\00\c4\39\00\00\7c\26\00\00" "\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\b0\25\00" "\00\02\00\00\00\00\00\00\00\14\27\00\00\8c\00\00\00\b3\00" "\00\00\6a\00\00\00\b4\00\00\00\b5\00\00\00\b6\00\00\00\b7" "\00\00\00\b8\00\00\00\b9\00\00\00\ba\00\00\00\4e\53\74\33" "\5f\5f\32\37\63\6f\64\65\63\76\74\49\44\69\63\31\31\5f\5f" "\6d\62\73\74\61\74\65\5f\74\45\45\00\00\c4\39\00\00\f0\26" "\00\00\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\b0" "\25\00\00\02\00\00\00\00\00\00\00\88\27\00\00\8c\00\00\00" "\bb\00\00\00\6a\00\00\00\bc\00\00\00\bd\00\00\00\be\00\00" "\00\bf\00\00\00\c0\00\00\00\c1\00\00\00\c2\00\00\00\4e\53" "\74\33\5f\5f\32\37\63\6f\64\65\63\76\74\49\44\69\44\75\31" "\31\5f\5f\6d\62\73\74\61\74\65\5f\74\45\45\00\c4\39\00\00" "\64\27\00\00\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00" "\00\b0\25\00\00\02\00\00\00\4e\53\74\33\5f\5f\32\37\63\6f" "\64\65\63\76\74\49\77\63\31\31\5f\5f\6d\62\73\74\61\74\65" "\5f\74\45\45\00\00\00\c4\39\00\00\a8\27\00\00\00\00\00\00" "\02\00\00\00\a4\24\00\00\02\00\00\00\b0\25\00\00\02\00\00" "\00\4e\53\74\33\5f\5f\32\36\6c\6f\63\61\6c\65\35\5f\5f\69" "\6d\70\45\00\00\00\68\39\00\00\ec\27\00\00\a4\24\00\00\4e" "\53\74\33\5f\5f\32\37\63\6f\6c\6c\61\74\65\49\63\45\45\00" "\68\39\00\00\10\28\00\00\a4\24\00\00\4e\53\74\33\5f\5f\32" "\37\63\6f\6c\6c\61\74\65\49\77\45\45\00\68\39\00\00\30\28" "\00\00\a4\24\00\00\4e\53\74\33\5f\5f\32\35\63\74\79\70\65" "\49\63\45\45\00\00\00\c4\39\00\00\50\28\00\00\00\00\00\00" "\02\00\00\00\a4\24\00\00\02\00\00\00\1c\25\00\00\02\00\00" "\00\4e\53\74\33\5f\5f\32\38\6e\75\6d\70\75\6e\63\74\49\63" "\45\45\00\00\00\00\68\39\00\00\84\28\00\00\a4\24\00\00\4e" "\53\74\33\5f\5f\32\38\6e\75\6d\70\75\6e\63\74\49\77\45\45" "\00\00\00\00\68\39\00\00\a8\28\00\00\a4\24\00\00\00\00\00" "\00\24\28\00\00\c3\00\00\00\c4\00\00\00\6a\00\00\00\c5\00" "\00\00\c6\00\00\00\c7\00\00\00\00\00\00\00\44\28\00\00\c8" "\00\00\00\c9\00\00\00\6a\00\00\00\ca\00\00\00\cb\00\00\00" "\cc\00\00\00\00\00\00\00\e0\29\00\00\8c\00\00\00\cd\00\00" "\00\6a\00\00\00\ce\00\00\00\cf\00\00\00\d0\00\00\00\d1\00" "\00\00\d2\00\00\00\d3\00\00\00\d4\00\00\00\d5\00\00\00\d6" "\00\00\00\d7\00\00\00\d8\00\00\00\4e\53\74\33\5f\5f\32\37" "\6e\75\6d\5f\67\65\74\49\63\4e\53\5f\31\39\69\73\74\72\65" "\61\6d\62\75\66\5f\69\74\65\72\61\74\6f\72\49\63\4e\53\5f" "\31\31\63\68\61\72\5f\74\72\61\69\74\73\49\63\45\45\45\45" "\45\45\00\4e\53\74\33\5f\5f\32\39\5f\5f\6e\75\6d\5f\67\65" "\74\49\63\45\45\00\4e\53\74\33\5f\5f\32\31\34\5f\5f\6e\75" "\6d\5f\67\65\74\5f\62\61\73\65\45\00\00\40\39\00\00\a6\29" "\00\00\c4\39\00\00\90\29\00\00\00\00\00\00\01\00\00\00\c0" "\29\00\00\00\00\00\00\c4\39\00\00\4c\29\00\00\00\00\00\00" "\02\00\00\00\a4\24\00\00\02\00\00\00\c8\29\00\00\00\00\00" "\00\00\00\00\00\b4\2a\00\00\8c\00\00\00\d9\00\00\00\6a\00" "\00\00\da\00\00\00\db\00\00\00\dc\00\00\00\dd\00\00\00\de" "\00\00\00\df\00\00\00\e0\00\00\00\e1\00\00\00\e2\00\00\00" "\e3\00\00\00\e4\00\00\00\4e\53\74\33\5f\5f\32\37\6e\75\6d" "\5f\67\65\74\49\77\4e\53\5f\31\39\69\73\74\72\65\61\6d\62" "\75\66\5f\69\74\65\72\61\74\6f\72\49\77\4e\53\5f\31\31\63" "\68\61\72\5f\74\72\61\69\74\73\49\77\45\45\45\45\45\45\00" "\4e\53\74\33\5f\5f\32\39\5f\5f\6e\75\6d\5f\67\65\74\49\77" "\45\45\00\00\00\c4\39\00\00\84\2a\00\00\00\00\00\00\01\00" "\00\00\c0\29\00\00\00\00\00\00\c4\39\00\00\40\2a\00\00\00" "\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\9c\2a\00\00" "\00\00\00\00\00\00\00\00\9c\2b\00\00\8c\00\00\00\e5\00\00" "\00\6a\00\00\00\e6\00\00\00\e7\00\00\00\e8\00\00\00\e9\00" "\00\00\ea\00\00\00\eb\00\00\00\ec\00\00\00\ed\00\00\00\4e" "\53\74\33\5f\5f\32\37\6e\75\6d\5f\70\75\74\49\63\4e\53\5f" "\31\39\6f\73\74\72\65\61\6d\62\75\66\5f\69\74\65\72\61\74" "\6f\72\49\63\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74" "\73\49\63\45\45\45\45\45\45\00\4e\53\74\33\5f\5f\32\39\5f" "\5f\6e\75\6d\5f\70\75\74\49\63\45\45\00\4e\53\74\33\5f\5f" "\32\31\34\5f\5f\6e\75\6d\5f\70\75\74\5f\62\61\73\65\45\00" "\00\40\39\00\00\62\2b\00\00\c4\39\00\00\4c\2b\00\00\00\00" "\00\00\01\00\00\00\7c\2b\00\00\00\00\00\00\c4\39\00\00\08" "\2b\00\00\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00" "\84\2b\00\00\00\00\00\00\00\00\00\00\64\2c\00\00\8c\00\00" "\00\ee\00\00\00\6a\00\00\00\ef\00\00\00\f0\00\00\00\f1\00" "\00\00\f2\00\00\00\f3\00\00\00\f4\00\00\00\f5\00\00\00\f6" "\00\00\00\4e\53\74\33\5f\5f\32\37\6e\75\6d\5f\70\75\74\49" "\77\4e\53\5f\31\39\6f\73\74\72\65\61\6d\62\75\66\5f\69\74" "\65\72\61\74\6f\72\49\77\4e\53\5f\31\31\63\68\61\72\5f\74" "\72\61\69\74\73\49\77\45\45\45\45\45\45\00\4e\53\74\33\5f" "\5f\32\39\5f\5f\6e\75\6d\5f\70\75\74\49\77\45\45\00\00\00" "\c4\39\00\00\34\2c\00\00\00\00\00\00\01\00\00\00\7c\2b\00" "\00\00\00\00\00\c4\39\00\00\f0\2b\00\00\00\00\00\00\02\00" "\00\00\a4\24\00\00\02\00\00\00\4c\2c\00\00\00\00\00\00\00" "\00\00\00\64\2d\00\00\f7\00\00\00\f8\00\00\00\6a\00\00\00" "\f9\00\00\00\fa\00\00\00\fb\00\00\00\fc\00\00\00\fd\00\00" "\00\fe\00\00\00\ff\00\00\00\f8\ff\ff\ff\64\2d\00\00\00\01" "\00\00\01\01\00\00\02\01\00\00\03\01\00\00\04\01\00\00\05" "\01\00\00\06\01\00\00\4e\53\74\33\5f\5f\32\38\74\69\6d\65" "\5f\67\65\74\49\63\4e\53\5f\31\39\69\73\74\72\65\61\6d\62" "\75\66\5f\69\74\65\72\61\74\6f\72\49\63\4e\53\5f\31\31\63" "\68\61\72\5f\74\72\61\69\74\73\49\63\45\45\45\45\45\45\00" "\4e\53\74\33\5f\5f\32\39\74\69\6d\65\5f\62\61\73\65\45\00" "\40\39\00\00\1d\2d\00\00\4e\53\74\33\5f\5f\32\32\30\5f\5f" "\74\69\6d\65\5f\67\65\74\5f\63\5f\73\74\6f\72\61\67\65\49" "\63\45\45\00\00\00\40\39\00\00\38\2d\00\00\c4\39\00\00\d8" "\2c\00\00\00\00\00\00\03\00\00\00\a4\24\00\00\02\00\00\00" "\30\2d\00\00\02\00\00\00\5c\2d\00\00\00\08\00\00\00\00\00" "\00\50\2e\00\00\07\01\00\00\08\01\00\00\6a\00\00\00\09\01" "\00\00\0a\01\00\00\0b\01\00\00\0c\01\00\00\0d\01\00\00\0e" "\01\00\00\0f\01\00\00\f8\ff\ff\ff\50\2e\00\00\10\01\00\00" "\11\01\00\00\12\01\00\00\13\01\00\00\14\01\00\00\15\01\00" "\00\16\01\00\00\4e\53\74\33\5f\5f\32\38\74\69\6d\65\5f\67" "\65\74\49\77\4e\53\5f\31\39\69\73\74\72\65\61\6d\62\75\66" "\5f\69\74\65\72\61\74\6f\72\49\77\4e\53\5f\31\31\63\68\61" "\72\5f\74\72\61\69\74\73\49\77\45\45\45\45\45\45\00\4e\53" "\74\33\5f\5f\32\32\30\5f\5f\74\69\6d\65\5f\67\65\74\5f\63" "\5f\73\74\6f\72\61\67\65\49\77\45\45\00\00\40\39\00\00\25" "\2e\00\00\c4\39\00\00\e0\2d\00\00\00\00\00\00\03\00\00\00" "\a4\24\00\00\02\00\00\00\30\2d\00\00\02\00\00\00\48\2e\00" "\00\00\08\00\00\00\00\00\00\f4\2e\00\00\17\01\00\00\18\01" "\00\00\6a\00\00\00\19\01\00\00\4e\53\74\33\5f\5f\32\38\74" "\69\6d\65\5f\70\75\74\49\63\4e\53\5f\31\39\6f\73\74\72\65" "\61\6d\62\75\66\5f\69\74\65\72\61\74\6f\72\49\63\4e\53\5f" "\31\31\63\68\61\72\5f\74\72\61\69\74\73\49\63\45\45\45\45" "\45\45\00\4e\53\74\33\5f\5f\32\31\30\5f\5f\74\69\6d\65\5f" "\70\75\74\45\00\00\00\40\39\00\00\d5\2e\00\00\c4\39\00\00" "\90\2e\00\00\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00" "\00\ec\2e\00\00\00\08\00\00\00\00\00\00\74\2f\00\00\1a\01" "\00\00\1b\01\00\00\6a\00\00\00\1c\01\00\00\4e\53\74\33\5f" "\5f\32\38\74\69\6d\65\5f\70\75\74\49\77\4e\53\5f\31\39\6f" "\73\74\72\65\61\6d\62\75\66\5f\69\74\65\72\61\74\6f\72\49" "\77\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74\73\49\77" "\45\45\45\45\45\45\00\00\00\00\c4\39\00\00\2c\2f\00\00\00" "\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\ec\2e\00\00" "\00\08\00\00\00\00\00\00\08\30\00\00\8c\00\00\00\1d\01\00" "\00\6a\00\00\00\1e\01\00\00\1f\01\00\00\20\01\00\00\21\01" "\00\00\22\01\00\00\23\01\00\00\24\01\00\00\25\01\00\00\26" "\01\00\00\4e\53\74\33\5f\5f\32\31\30\6d\6f\6e\65\79\70\75" "\6e\63\74\49\63\4c\62\30\45\45\45\00\4e\53\74\33\5f\5f\32" "\31\30\6d\6f\6e\65\79\5f\62\61\73\65\45\00\00\00\00\40\39" "\00\00\e8\2f\00\00\c4\39\00\00\cc\2f\00\00\00\00\00\00\02" "\00\00\00\a4\24\00\00\02\00\00\00\00\30\00\00\02\00\00\00" "\00\00\00\00\7c\30\00\00\8c\00\00\00\27\01\00\00\6a\00\00" "\00\28\01\00\00\29\01\00\00\2a\01\00\00\2b\01\00\00\2c\01" "\00\00\2d\01\00\00\2e\01\00\00\2f\01\00\00\30\01\00\00\4e" "\53\74\33\5f\5f\32\31\30\6d\6f\6e\65\79\70\75\6e\63\74\49" "\63\4c\62\31\45\45\45\00\c4\39\00\00\60\30\00\00\00\00\00" "\00\02\00\00\00\a4\24\00\00\02\00\00\00\00\30\00\00\02\00" "\00\00\00\00\00\00\f0\30\00\00\8c\00\00\00\31\01\00\00\6a" "\00\00\00\32\01\00\00\33\01\00\00\34\01\00\00\35\01\00\00" "\36\01\00\00\37\01\00\00\38\01\00\00\39\01\00\00\3a\01\00" "\00\4e\53\74\33\5f\5f\32\31\30\6d\6f\6e\65\79\70\75\6e\63" "\74\49\77\4c\62\30\45\45\45\00\c4\39\00\00\d4\30\00\00\00" "\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\00\30\00\00" "\02\00\00\00\00\00\00\00\64\31\00\00\8c\00\00\00\3b\01\00" "\00\6a\00\00\00\3c\01\00\00\3d\01\00\00\3e\01\00\00\3f\01" "\00\00\40\01\00\00\41\01\00\00\42\01\00\00\43\01\00\00\44" "\01\00\00\4e\53\74\33\5f\5f\32\31\30\6d\6f\6e\65\79\70\75" "\6e\63\74\49\77\4c\62\31\45\45\45\00\c4\39\00\00\48\31\00" "\00\00\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\00\30" "\00\00\02\00\00\00\00\00\00\00\08\32\00\00\8c\00\00\00\45" "\01\00\00\6a\00\00\00\46\01\00\00\47\01\00\00\4e\53\74\33" "\5f\5f\32\39\6d\6f\6e\65\79\5f\67\65\74\49\63\4e\53\5f\31" "\39\69\73\74\72\65\61\6d\62\75\66\5f\69\74\65\72\61\74\6f" "\72\49\63\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74\73" "\49\63\45\45\45\45\45\45\00\4e\53\74\33\5f\5f\32\31\31\5f" "\5f\6d\6f\6e\65\79\5f\67\65\74\49\63\45\45\00\00\40\39\00" "\00\e6\31\00\00\c4\39\00\00\a0\31\00\00\00\00\00\00\02\00" "\00\00\a4\24\00\00\02\00\00\00\00\32\00\00\00\00\00\00\00" "\00\00\00\ac\32\00\00\8c\00\00\00\48\01\00\00\6a\00\00\00" "\49\01\00\00\4a\01\00\00\4e\53\74\33\5f\5f\32\39\6d\6f\6e" "\65\79\5f\67\65\74\49\77\4e\53\5f\31\39\69\73\74\72\65\61" "\6d\62\75\66\5f\69\74\65\72\61\74\6f\72\49\77\4e\53\5f\31" "\31\63\68\61\72\5f\74\72\61\69\74\73\49\77\45\45\45\45\45" "\45\00\4e\53\74\33\5f\5f\32\31\31\5f\5f\6d\6f\6e\65\79\5f" "\67\65\74\49\77\45\45\00\00\40\39\00\00\8a\32\00\00\c4\39" "\00\00\44\32\00\00\00\00\00\00\02\00\00\00\a4\24\00\00\02" "\00\00\00\a4\32\00\00\00\00\00\00\00\00\00\00\50\33\00\00" "\8c\00\00\00\4b\01\00\00\6a\00\00\00\4c\01\00\00\4d\01\00" "\00\4e\53\74\33\5f\5f\32\39\6d\6f\6e\65\79\5f\70\75\74\49" "\63\4e\53\5f\31\39\6f\73\74\72\65\61\6d\62\75\66\5f\69\74" "\65\72\61\74\6f\72\49\63\4e\53\5f\31\31\63\68\61\72\5f\74" "\72\61\69\74\73\49\63\45\45\45\45\45\45\00\4e\53\74\33\5f" "\5f\32\31\31\5f\5f\6d\6f\6e\65\79\5f\70\75\74\49\63\45\45" "\00\00\40\39\00\00\2e\33\00\00\c4\39\00\00\e8\32\00\00\00" "\00\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\48\33\00\00" "\00\00\00\00\00\00\00\00\f4\33\00\00\8c\00\00\00\4e\01\00" "\00\6a\00\00\00\4f\01\00\00\50\01\00\00\4e\53\74\33\5f\5f" "\32\39\6d\6f\6e\65\79\5f\70\75\74\49\77\4e\53\5f\31\39\6f" "\73\74\72\65\61\6d\62\75\66\5f\69\74\65\72\61\74\6f\72\49" "\77\4e\53\5f\31\31\63\68\61\72\5f\74\72\61\69\74\73\49\77" "\45\45\45\45\45\45\00\4e\53\74\33\5f\5f\32\31\31\5f\5f\6d" "\6f\6e\65\79\5f\70\75\74\49\77\45\45\00\00\40\39\00\00\d2" "\33\00\00\c4\39\00\00\8c\33\00\00\00\00\00\00\02\00\00\00" "\a4\24\00\00\02\00\00\00\ec\33\00\00\00\00\00\00\00\00\00" "\00\6c\34\00\00\8c\00\00\00\51\01\00\00\6a\00\00\00\52\01" "\00\00\53\01\00\00\54\01\00\00\4e\53\74\33\5f\5f\32\38\6d" "\65\73\73\61\67\65\73\49\63\45\45\00\4e\53\74\33\5f\5f\32" "\31\33\6d\65\73\73\61\67\65\73\5f\62\61\73\65\45\00\00\00" "\00\40\39\00\00\49\34\00\00\c4\39\00\00\34\34\00\00\00\00" "\00\00\02\00\00\00\a4\24\00\00\02\00\00\00\64\34\00\00\02" "\00\00\00\00\00\00\00\c4\34\00\00\8c\00\00\00\55\01\00\00" "\6a\00\00\00\56\01\00\00\57\01\00\00\58\01\00\00\4e\53\74" "\33\5f\5f\32\38\6d\65\73\73\61\67\65\73\49\77\45\45\00\00" "\00\00\c4\39\00\00\ac\34\00\00\00\00\00\00\02\00\00\00\a4" "\24\00\00\02\00\00\00\64\34\00\00\02\00\00\00\53\00\00\00" "\75\00\00\00\6e\00\00\00\64\00\00\00\61\00\00\00\79\00\00" "\00\00\00\00\00\4d\00\00\00\6f\00\00\00\6e\00\00\00\64\00" "\00\00\61\00\00\00\79\00\00\00\00\00\00\00\54\00\00\00\75" "\00\00\00\65\00\00\00\73\00\00\00\64\00\00\00\61\00\00\00" "\79\00\00\00\00\00\00\00\57\00\00\00\65\00\00\00\64\00\00" "\00\6e\00\00\00\65\00\00\00\73\00\00\00\64\00\00\00\61\00" "\00\00\79\00\00\00\00\00\00\00\54\00\00\00\68\00\00\00\75" "\00\00\00\72\00\00\00\73\00\00\00\64\00\00\00\61\00\00\00" "\79\00\00\00\00\00\00\00\46\00\00\00\72\00\00\00\69\00\00" "\00\64\00\00\00\61\00\00\00\79\00\00\00\00\00\00\00\53\00" "\00\00\61\00\00\00\74\00\00\00\75\00\00\00\72\00\00\00\64" "\00\00\00\61\00\00\00\79\00\00\00\00\00\00\00\53\00\00\00" "\75\00\00\00\6e\00\00\00\00\00\00\00\4d\00\00\00\6f\00\00" "\00\6e\00\00\00\00\00\00\00\54\00\00\00\75\00\00\00\65\00" "\00\00\00\00\00\00\57\00\00\00\65\00\00\00\64\00\00\00\00" "\00\00\00\54\00\00\00\68\00\00\00\75\00\00\00\00\00\00\00" "\46\00\00\00\72\00\00\00\69\00\00\00\00\00\00\00\53\00\00" "\00\61\00\00\00\74\00\00\00\00\00\00\00\4a\00\00\00\61\00" "\00\00\6e\00\00\00\75\00\00\00\61\00\00\00\72\00\00\00\79" "\00\00\00\00\00\00\00\46\00\00\00\65\00\00\00\62\00\00\00" "\72\00\00\00\75\00\00\00\61\00\00\00\72\00\00\00\79\00\00" "\00\00\00\00\00\4d\00\00\00\61\00\00\00\72\00\00\00\63\00" "\00\00\68\00\00\00\00\00\00\00\41\00\00\00\70\00\00\00\72" "\00\00\00\69\00\00\00\6c\00\00\00\00\00\00\00\4d\00\00\00" "\61\00\00\00\79\00\00\00\00\00\00\00\4a\00\00\00\75\00\00" "\00\6e\00\00\00\65\00\00\00\00\00\00\00\4a\00\00\00\75\00" "\00\00\6c\00\00\00\79\00\00\00\00\00\00\00\41\00\00\00\75" "\00\00\00\67\00\00\00\75\00\00\00\73\00\00\00\74\00\00\00" "\00\00\00\00\53\00\00\00\65\00\00\00\70\00\00\00\74\00\00" "\00\65\00\00\00\6d\00\00\00\62\00\00\00\65\00\00\00\72\00" "\00\00\00\00\00\00\4f\00\00\00\63\00\00\00\74\00\00\00\6f" "\00\00\00\62\00\00\00\65\00\00\00\72\00\00\00\00\00\00\00" "\4e\00\00\00\6f\00\00\00\76\00\00\00\65\00\00\00\6d\00\00" "\00\62\00\00\00\65\00\00\00\72\00\00\00\00\00\00\00\44\00" "\00\00\65\00\00\00\63\00\00\00\65\00\00\00\6d\00\00\00\62" "\00\00\00\65\00\00\00\72\00\00\00\00\00\00\00\4a\00\00\00" "\61\00\00\00\6e\00\00\00\00\00\00\00\46\00\00\00\65\00\00" "\00\62\00\00\00\00\00\00\00\4d\00\00\00\61\00\00\00\72\00" "\00\00\00\00\00\00\41\00\00\00\70\00\00\00\72\00\00\00\00" "\00\00\00\4a\00\00\00\75\00\00\00\6e\00\00\00\00\00\00\00" "\4a\00\00\00\75\00\00\00\6c\00\00\00\00\00\00\00\41\00\00" "\00\75\00\00\00\67\00\00\00\00\00\00\00\53\00\00\00\65\00" "\00\00\70\00\00\00\00\00\00\00\4f\00\00\00\63\00\00\00\74" "\00\00\00\00\00\00\00\4e\00\00\00\6f\00\00\00\76\00\00\00" "\00\00\00\00\44\00\00\00\65\00\00\00\63\00\00\00\00\00\00" "\00\41\00\00\00\4d\00\00\00\00\00\00\00\50\00\00\00\4d\00" "\00\00\00\00\00\00\00\00\00\00\5c\2d\00\00\00\01\00\00\01" "\01\00\00\02\01\00\00\03\01\00\00\04\01\00\00\05\01\00\00" "\06\01\00\00\00\00\00\00\48\2e\00\00\10\01\00\00\11\01\00" "\00\12\01\00\00\13\01\00\00\14\01\00\00\15\01\00\00\16\01" "\00\00\00\00\00\00\d0\38\00\00\59\01\00\00\5a\01\00\00\5b" "\01\00\00\4e\53\74\33\5f\5f\32\31\34\5f\5f\73\68\61\72\65" "\64\5f\63\6f\75\6e\74\45\00\00\00\00\40\39\00\00\b4\38\00" "\00\4e\31\30\5f\5f\63\78\78\61\62\69\76\31\31\36\5f\5f\73" "\68\69\6d\5f\74\79\70\65\5f\69\6e\66\6f\45\00\00\00\00\68" "\39\00\00\d8\38\00\00\b8\3a\00\00\4e\31\30\5f\5f\63\78\78" "\61\62\69\76\31\31\37\5f\5f\63\6c\61\73\73\5f\74\79\70\65" "\5f\69\6e\66\6f\45\00\00\00\68\39\00\00\08\39\00\00\fc\38" "\00\00\00\00\00\00\2c\39\00\00\5c\01\00\00\5d\01\00\00\5e" "\01\00\00\5f\01\00\00\60\01\00\00\61\01\00\00\62\01\00\00" "\63\01\00\00\00\00\00\00\b0\39\00\00\5c\01\00\00\64\01\00" "\00\5e\01\00\00\5f\01\00\00\60\01\00\00\65\01\00\00\66\01" "\00\00\67\01\00\00\4e\31\30\5f\5f\63\78\78\61\62\69\76\31" "\32\30\5f\5f\73\69\5f\63\6c\61\73\73\5f\74\79\70\65\5f\69" "\6e\66\6f\45\00\00\00\00\68\39\00\00\88\39\00\00\2c\39\00" "\00\00\00\00\00\0c\3a\00\00\5c\01\00\00\68\01\00\00\5e\01" "\00\00\5f\01\00\00\60\01\00\00\69\01\00\00\6a\01\00\00\6b" "\01\00\00\4e\31\30\5f\5f\63\78\78\61\62\69\76\31\32\31\5f" "\5f\76\6d\69\5f\63\6c\61\73\73\5f\74\79\70\65\5f\69\6e\66" "\6f\45\00\00\00\68\39\00\00\e4\39\00\00\2c\39\00\00\00\00" "\00\00\3c\3a\00\00\6c\01\00\00\6d\01\00\00\6e\01\00\00\53" "\74\39\65\78\63\65\70\74\69\6f\6e\00\00\00\00\40\39\00\00" "\2c\3a\00\00\00\00\00\00\68\3a\00\00\02\00\00\00\6f\01\00" "\00\70\01\00\00\53\74\31\31\6c\6f\67\69\63\5f\65\72\72\6f" "\72\00\68\39\00\00\58\3a\00\00\3c\3a\00\00\00\00\00\00\9c" "\3a\00\00\02\00\00\00\71\01\00\00\70\01\00\00\53\74\31\32" "\6c\65\6e\67\74\68\5f\65\72\72\6f\72\00\00\00\00\68\39\00" "\00\88\3a\00\00\68\3a\00\00\53\74\39\74\79\70\65\5f\69\6e" "\66\6f\00\00\00\00\40\39\00\00\a8\3a\00\00\00\41\c0\f5\00" "\0b\d4\03\a0\55\01\00\00\00\00\00\09\00\00\00\00\00\00\00" "\00\00\00\00\36\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\37\00\00\00\00\00\00\00\38\00\00\00\f8\3f" "\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\ff\ff\ff\ff\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\c8\3a\00\00\00\00\00\00\05\00\00\00\00\00\00\00" "\00\00\00\00\39\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\3a\00\00\00\3b\00\00\00\08\44" "\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\ff\ff\ff\ff\0a\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\60\3b\00\00\00\00\00\00\05\00\00\00\00\00\00\00" "\00\00\00\00\36\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\3a\00\00\00\38\00\00\00\10\48" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" "\00\00\00\f8\3b\00\00\70\4d\00\00\20\00\00\00") (assert_trap (invoke "_start") "uninitialized element") ;; 383b: integerDivideByZeroOrOverflow trap (module binary "\00\61\73\6d\01\00\00\00\01\3b\0a\60\03\7f\7f\7f\01\7f\60" "\01\7f\00\60\01\7f\01\7f\60\03\7f\7f\7f\00\60\04\7f\7f\7f" "\7f\01\7f\60\00\00\60\03\7f\7e\7f\01\7e\60\05\7f\7f\7f\7f" "\7f\00\60\02\7f\7f\01\7f\60\00\01\7f\02\46\02\16\77\61\73" "\69\5f\73\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65\77\31" "\09\70\72\6f\63\5f\65\78\69\74\00\01\16\77\61\73\69\5f\73" "\6e\61\70\73\68\6f\74\5f\70\72\65\76\69\65\77\31\08\66\64" "\5f\77\72\69\74\65\00\04\03\11\10\05\05\00\02\06\03\01\02" "\04\03\02\03\07\08\09\01\04\05\01\70\01\05\05\05\06\01\01" "\80\02\80\02\06\08\01\7f\01\41\90\97\04\0b\07\4a\05\06\6d" "\65\6d\6f\72\79\02\00\19\5f\5f\69\6e\64\69\72\65\63\74\5f" "\66\75\6e\63\74\69\6f\6e\5f\74\61\62\6c\65\01\00\06\5f\73" "\74\61\72\74\00\03\09\73\74\61\63\6b\53\61\76\65\00\10\0c" "\73\74\61\63\6b\52\65\73\74\6f\72\65\00\11\09\0a\01\00\41" "\01\0b\04\02\05\04\06\0a\85\2b\10\13\00\41\e0\16\41\e8\15" "\36\02\00\41\98\16\41\2a\36\02\00\0b\ab\03\01\07\7f\41\e0" "\16\41\e8\15\36\02\00\41\98\16\41\2a\36\02\00\23\00\41\a2" "\01\6c\22\01\24\00\20\01\42\85\80\80\80\80\0f\37\03\00\23" "\00\41\10\6b\22\04\24\00\20\04\20\01\36\02\0c\23\00\41\d0" "\01\6b\22\00\24\00\20\00\20\01\36\02\cc\01\20\00\41\a0\01" "\6b\22\03\41\00\41\28\10\07\20\00\20\00\28\02\c8\01\36\02" "\c8\01\02\40\41\00\20\00\41\c8\01\6d\20\00\41\d0\00\6d\20" "\03\10\0a\41\00\4a\0d\00\41\dc\0c\28\02\00\41\00\48\41\a0" "\f9\00\41\a0\f9\00\28\02\00\22\05\41\5f\71\36\02\00\02\7f" "\02\40\02\40\41\c0\0c\28\02\00\45\04\40\41\c0\0c\41\d0\00" "\36\02\00\41\ac\0c\41\00\36\02\00\41\a0\0c\42\00\37\03\00" "\41\bc\0c\28\02\00\21\02\41\bc\0c\20\00\36\02\00\0c\01\0b" "\41\a0\0c\28\02\00\0d\01\0b\41\7f\41\90\0c\10\09\0d\01\1a" "\0b\41\90\0c\20\00\41\c8\01\6a\20\00\41\d0\00\6a\20\00\41" "\a0\01\6a\10\0a\0b\21\06\20\02\04\7f\41\90\0c\41\00\41\00" "\41\b4\0c\28\02\00\11\00\00\1a\41\c0\0c\41\00\36\02\00\41" "\bc\0c\20\02\36\02\00\41\ac\0c\41\00\36\02\00\41\a4\0c\28" "\02\00\1a\41\a0\0c\42\00\37\03\00\41\00\05\20\06\0b\1a\41" "\90\0c\41\90\0c\28\02\00\20\05\41\80\19\71\71\36\02\00\0d" "\00\0b\20\00\41\00\6d\24\00\20\04\41\10\6a\24\00\20\01\41" "\10\6d\24\00\41\c0\15\28\02\00\22\00\04\40\03\40\20\00\10" "\08\20\00\28\02\38\22\00\0d\00\0b\0b\41\c4\15\28\02\00\10" "\08\41\a0\0d\28\02\00\10\08\41\c4\15\28\02\00\10\08\41\00" "\10\00\00\0b\f0\02\01\07\7f\23\00\41\20\6b\22\03\24\00\20" "\03\20\00\28\02\1c\22\04\36\02\10\20\00\28\02\14\21\05\20" "\03\20\02\36\02\1c\20\03\20\01\36\02\18\20\03\20\05\20\04" "\6b\22\01\36\02\14\20\01\20\02\6a\21\05\41\02\21\07\02\7f" "\02\40\02\40\02\40\20\00\28\02\3c\20\03\41\10\6a\22\01\41" "\02\20\03\41\0c\6a\10\01\22\04\04\7f\41\b8\15\20\04\36\02" "\00\41\7f\05\41\00\0b\04\40\20\01\21\04\0c\01\0b\03\40\20" "\05\20\03\28\02\0c\22\06\46\0d\02\20\06\41\00\48\04\40\20" "\01\21\04\0c\04\0b\20\01\20\06\20\01\28\02\04\22\08\4b\22" "\09\41\03\74\6a\22\04\20\06\20\08\41\00\20\09\1b\6b\22\08" "\20\04\28\02\00\6a\36\02\00\20\01\41\0c\41\04\20\09\1b\6a" "\22\01\20\01\28\02\00\20\08\6b\36\02\00\20\05\20\06\6b\21" "\05\20\00\28\02\3c\20\04\22\01\20\07\20\09\6b\22\07\20\03" "\41\0c\6a\10\01\22\06\04\7f\41\b8\15\20\06\36\02\00\41\7f" "\05\41\00\0b\45\0d\00\0b\0b\20\05\41\7f\47\0d\01\0b\20\00" "\20\00\28\02\2c\22\01\36\02\1c\20\00\20\01\36\02\14\20\00" "\20\01\20\00\28\02\30\6a\36\02\10\20\02\0c\01\0b\20\00\41" "\00\36\02\1c\20\00\42\00\37\03\10\20\00\20\00\28\02\00\41" "\20\72\36\02\00\41\00\20\07\41\02\46\0d\00\1a\20\02\20\04" "\28\02\04\6b\0b\20\03\41\20\6a\24\00\0b\04\00\41\00\0b\04" "\00\42\00\0b\f0\02\02\02\7f\01\7e\02\40\20\02\45\0d\00\20" "\00\20\01\3a\00\00\20\00\20\02\6a\22\03\41\01\6b\20\01\3a" "\00\00\20\02\41\03\49\0d\00\20\00\20\01\3a\00\02\20\00\20" "\01\3a\00\01\20\03\41\03\6b\20\01\3a\00\00\20\03\41\02\6b" "\20\01\3a\00\00\20\02\41\07\49\0d\00\20\00\20\01\3a\00\03" "\20\03\41\04\6b\20\01\3a\00\00\20\02\41\09\49\0d\00\20\00" "\41\00\20\00\6b\41\03\71\22\04\6a\22\03\20\01\41\ff\01\71" "\41\81\82\84\08\6c\22\00\36\02\00\20\03\20\02\20\04\6b\41" "\7c\71\22\02\6a\22\01\41\04\6b\20\00\36\02\00\20\02\41\09" "\49\0d\00\20\03\20\00\36\02\08\20\03\20\00\36\02\04\20\01" "\41\08\6b\20\00\36\02\00\20\01\41\0c\6b\20\00\36\02\00\20" "\02\41\19\49\0d\00\20\03\20\00\36\02\18\20\03\20\00\36\02" "\14\20\03\20\00\36\02\10\20\03\20\00\36\02\0c\20\01\41\10" "\6b\20\00\36\02\00\20\01\41\14\6b\20\00\36\02\00\20\01\41" "\18\6b\20\00\36\02\00\20\01\41\1c\6b\20\00\36\02\00\20\02" "\20\03\41\04\71\41\18\72\22\01\6b\22\02\41\20\49\0d\00\20" "\00\ad\42\81\80\80\80\10\7e\21\05\20\01\20\03\6a\21\01\03" "\40\20\01\20\05\37\03\18\20\01\20\05\37\03\10\20\01\20\05" "\37\03\08\20\01\20\05\37\03\00\20\01\41\20\6a\21\01\20\02" "\41\20\6b\22\02\41\1f\4b\0d\00\0b\0b\0b\53\01\02\7f\02\40" "\20\00\45\0d\00\20\00\28\02\4c\1a\20\00\28\02\14\20\00\28" "\02\1c\47\04\40\20\00\41\00\41\00\20\00\28\02\24\11\00\00" "\1a\0b\20\00\28\02\04\22\01\20\00\28\02\08\22\02\46\0d\00" "\20\00\20\01\20\02\6b\ac\41\01\20\00\28\02\28\11\06\00\1a" "\0b\0b\59\01\01\7f\20\00\20\00\28\02\48\22\01\41\01\6b\20" "\01\72\36\02\48\20\00\28\02\00\22\01\41\08\71\04\40\20\00" "\20\01\41\20\72\36\02\00\41\7f\0f\0b\20\00\42\00\37\02\04" "\20\00\20\00\28\02\2c\22\01\36\02\1c\20\00\20\01\36\02\14" "\20\00\20\01\20\00\28\02\30\6a\36\02\10\41\00\0b\e4\14\02" "\13\7f\02\7e\41\8a\08\21\05\23\00\41\d0\00\6b\22\06\24\00" "\20\06\41\8a\08\36\02\4c\20\06\41\37\6a\21\14\20\06\41\38" "\6a\21\0f\02\40\02\40\02\40\02\40\03\40\41\00\21\04\03\40" "\20\05\21\09\20\04\20\0c\41\ff\ff\ff\ff\07\73\4a\0d\02\20" "\04\20\0c\6a\21\0c\02\40\02\40\02\40\20\05\22\04\2d\00\00" "\22\0a\04\40\03\40\02\40\02\40\20\0a\41\ff\01\71\22\05\45" "\04\40\20\04\21\05\0c\01\0b\20\05\41\25\47\0d\01\20\04\21" "\0a\03\40\20\0a\2d\00\01\41\25\47\04\40\20\0a\21\05\0c\02" "\0b\20\04\41\01\6a\21\04\20\0a\2d\00\02\20\0a\41\02\6a\22" "\05\21\0a\41\25\46\0d\00\0b\0b\20\04\20\09\6b\22\04\20\0c" "\41\ff\ff\ff\ff\07\73\22\15\4a\0d\08\20\00\04\40\20\00\20" "\09\20\04\10\0b\0b\20\04\0d\06\20\06\20\05\36\02\4c\20\05" "\41\01\6a\21\04\41\7f\21\0e\02\40\20\05\2c\00\01\41\30\6b" "\22\07\41\09\4b\0d\00\20\05\2d\00\02\41\24\47\0d\00\20\05" "\41\03\6a\21\04\41\01\21\10\20\07\21\0e\0b\20\06\20\04\36" "\02\4c\41\00\21\0b\02\40\20\04\2c\00\00\22\0a\41\20\6b\22" "\05\41\1f\4b\04\40\20\04\21\07\0c\01\0b\20\04\21\07\41\01" "\20\05\74\22\05\41\89\d1\04\71\45\0d\00\03\40\20\06\20\04" "\41\01\6a\22\07\36\02\4c\20\05\20\0b\72\21\0b\20\04\2c\00" "\01\22\0a\41\20\6b\22\05\41\20\4f\0d\01\20\07\21\04\41\01" "\20\05\74\22\05\41\89\d1\04\71\0d\00\0b\0b\02\40\20\0a\41" "\2a\46\04\40\02\7f\02\40\20\07\2c\00\01\41\30\6b\22\04\41" "\09\4b\0d\00\20\07\2d\00\02\41\24\47\0d\00\02\7f\20\00\45" "\04\40\20\03\20\04\41\02\74\6a\41\0a\36\02\00\41\00\0c\01" "\0b\20\02\20\04\41\03\74\6a\28\02\00\0b\21\0d\20\07\41\03" "\6a\21\05\41\01\0c\01\0b\20\10\0d\06\20\07\41\01\6a\21\05" "\20\00\45\04\40\20\06\20\05\36\02\4c\41\00\21\10\41\00\21" "\0d\0c\03\0b\20\01\20\01\28\02\00\22\04\41\04\6a\36\02\00" "\20\04\28\02\00\21\0d\41\00\0b\21\10\20\06\20\05\36\02\4c" "\20\0d\41\00\4e\0d\01\41\00\20\0d\6b\21\0d\20\0b\41\80\c0" "\00\72\21\0b\0c\01\0b\20\06\41\cc\00\6a\10\0c\22\0d\41\00" "\48\0d\09\20\06\28\02\4c\21\05\0b\41\00\21\04\41\7f\21\08" "\02\7f\41\00\20\05\2d\00\00\41\2e\47\0d\00\1a\20\05\2d\00" "\01\41\2a\46\04\40\02\7f\02\40\20\05\2c\00\02\41\30\6b\22" "\07\41\09\4b\0d\00\20\05\2d\00\03\41\24\47\0d\00\20\05\41" "\04\6a\21\05\02\7f\20\00\45\04\40\20\03\20\07\41\02\74\6a" "\41\0a\36\02\00\41\00\0c\01\0b\20\02\20\07\41\03\74\6a\28" "\02\00\0b\0c\01\0b\20\10\0d\06\20\05\41\02\6a\21\05\41\00" "\20\00\45\0d\00\1a\20\01\20\01\28\02\00\22\07\41\04\6a\36" "\02\00\20\07\28\02\00\0b\21\08\20\06\20\05\36\02\4c\20\08" "\41\00\4e\0c\01\0b\20\06\20\05\41\01\6a\36\02\4c\20\06\41" "\cc\00\6a\10\0c\21\08\20\06\28\02\4c\21\05\41\01\0b\21\11" "\03\40\20\04\21\12\41\1c\21\07\20\05\22\16\2c\00\00\22\04" "\41\fb\00\6b\41\46\49\0d\0a\20\05\41\01\6a\21\05\20\04\20" "\12\41\3a\6c\6a\2d\00\ef\07\22\04\41\01\6b\41\08\49\0d\00" "\0b\20\06\20\05\36\02\4c\02\40\20\04\41\1b\47\04\40\20\04" "\45\0d\0b\20\0e\41\00\4e\04\40\20\00\45\04\40\20\03\20\0e" "\41\02\74\6a\20\04\36\02\00\0c\0b\0b\20\06\20\02\20\0e\41" "\03\74\6a\29\03\00\37\03\40\0c\02\0b\20\00\45\0d\07\20\06" "\41\40\6b\20\04\20\01\10\0d\0c\01\0b\20\0e\41\00\4e\0d\0a" "\41\00\21\04\20\00\45\0d\07\0b\20\00\2d\00\00\41\20\71\0d" "\0a\20\0b\41\ff\ff\7b\71\22\0a\20\0b\20\0b\41\80\c0\00\71" "\1b\21\0b\41\00\21\0e\41\80\08\21\13\20\0f\21\07\02\40\02" "\40\02\40\02\7f\02\40\02\40\02\40\02\40\02\7f\02\40\02\40" "\02\40\02\40\02\40\02\40\02\40\20\16\2c\00\00\22\04\41\53" "\71\20\04\20\04\41\0f\71\41\03\46\1b\20\04\20\12\1b\22\04" "\41\d8\00\6b\0e\21\04\14\14\14\14\14\14\14\14\0e\14\0f\06" "\0e\0e\0e\14\06\14\14\14\14\02\05\03\14\14\09\14\01\14\14" "\04\00\0b\02\40\20\04\41\c1\00\6b\0e\07\0e\14\0b\14\0e\0e" "\0e\00\0b\20\04\41\d3\00\46\0d\09\0c\13\0b\20\06\29\03\40" "\21\17\41\80\08\0c\05\0b\41\00\21\04\02\40\02\40\02\40\02" "\40\02\40\02\40\02\40\20\12\41\ff\01\71\0e\08\00\01\02\03" "\04\1a\05\06\1a\0b\20\06\28\02\40\20\0c\36\02\00\0c\19\0b" "\20\06\28\02\40\20\0c\36\02\00\0c\18\0b\20\06\28\02\40\20" "\0c\ac\37\03\00\0c\17\0b\20\06\28\02\40\20\0c\3b\01\00\0c" "\16\0b\20\06\28\02\40\20\0c\3a\00\00\0c\15\0b\20\06\28\02" "\40\20\0c\36\02\00\0c\14\0b\20\06\28\02\40\20\0c\ac\37\03" "\00\0c\13\0b\41\08\20\08\20\08\41\08\4d\1b\21\08\20\0b\41" "\08\72\21\0b\41\f8\00\21\04\0b\20\0f\21\09\20\06\29\03\40" "\22\17\42\00\52\04\40\20\04\41\20\71\21\05\03\40\20\09\41" "\01\6b\22\09\20\17\a7\41\0f\71\41\80\0c\6a\2d\00\00\20\05" "\72\3a\00\00\20\17\42\0f\56\20\17\42\04\88\21\17\0d\00\0b" "\0b\20\06\29\03\40\50\0d\03\20\0b\41\08\71\45\0d\03\20\04" "\41\04\76\41\80\08\6a\21\13\41\02\21\0e\0c\03\0b\20\0f\21" "\04\20\06\29\03\40\22\17\42\00\52\04\40\03\40\20\04\41\01" "\6b\22\04\20\17\a7\41\07\71\41\30\72\3a\00\00\20\17\42\07" "\56\20\17\42\03\88\21\17\0d\00\0b\0b\20\04\21\09\20\0b\41" "\08\71\45\0d\02\20\08\20\0f\20\04\6b\22\04\41\01\6a\20\04" "\20\08\48\1b\21\08\0c\02\0b\20\06\29\03\40\22\17\42\00\53" "\04\40\20\06\42\00\20\17\7d\22\17\37\03\40\41\01\21\0e\41" "\80\08\0c\01\0b\20\0b\41\80\10\71\04\40\41\01\21\0e\41\81" "\08\0c\01\0b\41\82\08\41\80\08\20\0b\41\01\71\22\0e\1b\0b" "\21\13\20\0f\21\05\02\40\20\17\42\80\80\80\80\10\54\04\40" "\20\17\21\18\0c\01\0b\03\40\20\05\41\01\6b\22\05\20\17\20" "\17\42\0a\80\22\18\42\0a\7e\7d\a7\41\30\72\3a\00\00\20\17" "\42\ff\ff\ff\ff\9f\01\56\20\18\21\17\0d\00\0b\0b\20\18\a7" "\22\09\04\40\03\40\20\05\41\01\6b\22\05\20\09\20\09\41\0a" "\6e\22\04\41\0a\6c\6b\41\30\72\3a\00\00\20\09\41\09\4b\20" "\04\21\09\0d\00\0b\0b\20\05\21\09\0b\20\11\20\08\41\00\48" "\71\0d\0f\20\0b\41\ff\ff\7b\71\20\0b\20\11\1b\21\0b\02\40" "\20\06\29\03\40\22\17\42\00\52\0d\00\20\08\0d\00\20\0f\21" "\09\41\00\21\08\0c\0c\0b\20\08\20\17\50\20\0f\20\09\6b\6a" "\22\04\20\04\20\08\48\1b\21\08\0c\0b\0b\02\7f\41\ff\ff\ff" "\ff\07\20\08\20\08\41\ff\ff\ff\ff\07\4f\1b\22\0b\22\05\41" "\00\47\21\07\02\40\02\40\02\40\20\06\28\02\40\22\04\41\a0" "\08\20\04\1b\22\09\22\04\41\03\71\45\0d\00\20\05\45\0d\00" "\03\40\20\04\2d\00\00\45\0d\02\20\05\41\01\6b\22\05\41\00" "\47\21\07\20\04\41\01\6a\22\04\41\03\71\45\0d\01\20\05\0d" "\00\0b\0b\20\07\45\0d\01\02\40\20\04\2d\00\00\45\0d\00\20" "\05\41\04\49\0d\00\03\40\20\04\28\02\00\22\07\41\7f\73\20" "\07\41\81\82\84\08\6b\71\41\80\81\82\84\78\71\0d\02\20\04" "\41\04\6a\21\04\20\05\41\04\6b\22\05\41\03\4b\0d\00\0b\0b" "\20\05\45\0d\01\0b\03\40\20\04\20\04\2d\00\00\45\0d\02\1a" "\20\04\41\01\6a\21\04\20\05\41\01\6b\22\05\0d\00\0b\0b\41" "\00\0b\22\04\20\09\6b\20\0b\20\04\1b\22\04\20\09\6a\21\07" "\20\08\41\00\4e\04\40\20\0a\21\0b\20\04\21\08\0c\0b\0b\20" "\0a\21\0b\20\04\21\08\20\07\2d\00\00\0d\0e\0c\0a\0b\20\08" "\04\40\20\06\28\02\40\0c\02\0b\41\00\21\04\20\00\41\20\20" "\0d\41\00\20\0b\10\0e\0c\02\0b\20\06\41\00\36\02\0c\20\06" "\20\06\29\03\40\3e\02\08\20\06\20\06\41\08\6a\22\04\36\02" "\40\41\7f\21\08\20\04\0b\21\0a\41\00\21\04\03\40\02\40\20" "\0a\28\02\00\22\09\45\0d\00\20\06\41\04\6a\20\09\10\0f\22" "\09\41\00\48\0d\0f\20\09\20\08\20\04\6b\4b\0d\00\20\0a\41" "\04\6a\21\0a\20\04\20\09\6a\22\04\20\08\49\0d\01\0b\0b\41" "\3d\21\07\20\04\41\00\48\0d\0c\20\00\41\20\20\0d\20\04\20" "\0b\10\0e\20\04\45\04\40\41\00\21\04\0c\01\0b\41\00\21\07" "\20\06\28\02\40\21\0a\03\40\20\0a\28\02\00\22\09\45\0d\01" "\20\06\41\04\6a\22\08\20\09\10\0f\22\09\20\07\6a\22\07\20" "\04\4b\0d\01\20\00\20\08\20\09\10\0b\20\0a\41\04\6a\21\0a" "\20\04\20\07\4b\0d\00\0b\0b\20\00\41\20\20\0d\20\04\20\0b" "\41\80\c0\00\73\10\0e\20\0d\20\04\20\04\20\0d\48\1b\21\04" "\0c\08\0b\20\11\20\08\41\00\48\71\0d\09\41\3d\21\07\20\06" "\2b\03\40\1a\00\0b\20\06\20\06\29\03\40\3c\00\37\41\01\21" "\08\20\14\21\09\20\0a\21\0b\0c\04\0b\20\04\2d\00\01\21\0a" "\20\04\41\01\6a\21\04\0c\00\0b\00\0b\20\00\0d\08\20\10\45" "\0d\02\41\01\21\04\03\40\20\03\20\04\41\02\74\6a\28\02\00" "\22\00\04\40\20\02\20\04\41\03\74\6a\20\00\20\01\10\0d\41" "\01\21\0c\20\04\41\01\6a\22\04\41\0a\47\0d\01\0c\0a\0b\0b" "\41\01\21\0c\20\04\41\0a\4f\0d\08\03\40\20\03\20\04\41\02" "\74\6a\28\02\00\0d\01\20\04\41\01\6a\22\04\41\0a\47\0d\00" "\0b\0c\08\0b\41\1c\21\07\0c\05\0b\20\08\20\07\20\09\6b\22" "\0a\20\08\20\0a\4a\1b\22\08\20\0e\41\ff\ff\ff\ff\07\73\4a" "\0d\03\41\3d\21\07\20\0d\20\08\20\0e\6a\22\05\20\05\20\0d" "\48\1b\22\04\20\15\4a\0d\04\20\00\41\20\20\04\20\05\20\0b" "\10\0e\20\00\20\13\20\0e\10\0b\20\00\41\30\20\04\20\05\20" "\0b\41\80\80\04\73\10\0e\20\00\41\30\20\08\20\0a\41\00\10" "\0e\20\00\20\09\20\0a\10\0b\20\00\41\20\20\04\20\05\20\0b" "\41\80\c0\00\73\10\0e\20\06\28\02\4c\21\05\0c\01\0b\0b\0b" "\41\00\21\0c\0c\03\0b\41\3d\21\07\0b\41\b8\15\20\07\36\02" "\00\0b\41\7f\21\0c\0b\20\06\41\d0\00\6a\24\00\20\0c\0b\85" "\05\01\04\7f\20\00\2d\00\00\41\20\71\45\04\40\02\40\20\02" "\20\00\22\04\28\02\10\22\00\04\7f\20\00\05\20\04\10\09\0d" "\01\20\04\28\02\10\0b\20\04\28\02\14\22\00\6b\4b\04\40\20" "\04\20\01\20\02\20\04\28\02\24\11\00\00\1a\0c\01\0b\02\40" "\02\40\20\04\28\02\50\41\00\48\0d\00\20\02\45\0d\00\20\02" "\21\05\03\40\20\01\20\05\6a\22\03\41\01\6b\2d\00\00\41\0a" "\47\04\40\20\05\41\01\6b\22\05\0d\01\0c\02\0b\0b\20\04\20" "\01\20\05\20\04\28\02\24\11\00\00\20\05\49\0d\02\20\02\20" "\05\6b\21\02\20\04\28\02\14\21\00\0c\01\0b\20\01\21\03\0b" "\20\00\20\02\6a\21\06\02\40\02\40\20\00\20\03\73\41\03\71" "\45\04\40\20\00\41\03\71\45\0d\01\20\02\41\00\4c\0d\01\03" "\40\20\00\20\03\2d\00\00\3a\00\00\20\03\41\01\6a\21\03\20" "\00\41\01\6a\22\00\41\03\71\45\0d\02\20\00\20\06\49\0d\00" "\0b\0c\01\0b\02\40\20\06\41\04\49\0d\00\20\06\41\04\6b\22" "\01\20\00\49\0d\00\03\40\20\00\20\03\2d\00\00\3a\00\00\20" "\00\20\03\2d\00\01\3a\00\01\20\00\20\03\2d\00\02\3a\00\02" "\20\00\20\03\2d\00\03\3a\00\03\20\03\41\04\6a\21\03\20\00" "\41\04\6a\22\00\20\01\4d\0d\00\0b\0c\02\0b\0c\01\0b\02\40" "\20\06\41\7c\71\22\05\41\c0\00\49\0d\00\20\00\20\05\41\40" "\6a\22\01\4b\0d\00\03\40\20\00\20\03\28\02\00\36\02\00\20" "\00\20\03\28\02\04\36\02\04\20\00\20\03\28\02\08\36\02\08" "\20\00\20\03\28\02\0c\36\02\0c\20\00\20\03\28\02\10\36\02" "\10\20\00\20\03\28\02\14\36\02\14\20\00\20\03\28\02\18\36" "\02\18\20\00\20\03\28\02\1c\36\02\1c\20\00\20\03\28\02\20" "\36\02\20\20\00\20\03\28\02\24\36\02\24\20\00\20\03\28\02" "\28\36\02\28\20\00\20\03\28\02\2c\36\02\2c\20\00\20\03\28" "\02\30\36\02\30\20\00\20\03\28\02\34\36\02\34\20\00\20\03" "\28\02\38\36\02\38\20\00\20\03\28\02\3c\36\02\3c\20\03\41" "\40\6b\21\03\20\00\41\40\6b\22\00\20\01\4d\0d\00\0b\0b\20" "\00\20\05\4f\0d\00\03\40\20\00\20\03\28\02\00\36\02\00\20" "\03\41\04\6a\21\03\20\00\41\04\6a\22\00\20\05\49\0d\00\0b" "\0b\20\00\20\06\49\04\40\03\40\20\00\20\03\2d\00\00\3a\00" "\00\20\03\41\01\6a\21\03\20\00\41\01\6a\22\00\20\06\47\0d" "\00\0b\0b\20\04\20\04\28\02\14\20\02\6a\36\02\14\0b\0b\0b" "\6f\01\05\7f\20\00\28\02\00\22\03\2c\00\00\41\30\6b\22\01" "\41\09\4b\04\40\41\00\0f\0b\03\40\41\7f\21\04\20\02\41\cc" "\99\b3\e6\00\4d\04\40\41\7f\20\01\20\02\41\0a\6c\22\05\6a" "\20\01\20\05\41\ff\ff\ff\ff\07\73\4b\1b\21\04\0b\20\00\20" "\03\41\01\6a\22\05\36\02\00\20\03\2c\00\01\20\04\21\02\20" "\05\21\03\41\30\6b\22\01\41\0a\49\0d\00\0b\20\02\0b\b4\02" "\00\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40\02\40" "\02\40\02\40\20\01\41\09\6b\0e\12\00\08\09\0a\08\09\01\02" "\03\04\0a\09\0a\0a\08\09\05\06\07\0b\20\02\20\02\28\02\00" "\22\01\41\04\6a\36\02\00\20\00\20\01\28\02\00\36\02\00\0f" "\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20" "\01\32\01\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41" "\04\6a\36\02\00\20\00\20\01\33\01\00\37\03\00\0f\0b\20\02" "\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00\20\01\30\00" "\00\37\03\00\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36" "\02\00\20\00\20\01\31\00\00\37\03\00\0f\0b\20\02\20\02\28" "\02\00\41\07\6a\41\78\71\22\01\41\08\6a\36\02\00\20\00\20" "\01\2b\03\00\39\03\00\0f\0b\00\0b\0f\0b\20\02\20\02\28\02" "\00\22\01\41\04\6a\36\02\00\20\00\20\01\34\02\00\37\03\00" "\0f\0b\20\02\20\02\28\02\00\22\01\41\04\6a\36\02\00\20\00" "\20\01\35\02\00\37\03\00\0f\0b\20\02\20\02\28\02\00\41\07" "\6a\41\78\71\22\01\41\08\6a\36\02\00\20\00\20\01\29\03\00" "\37\03\00\0b\6e\01\01\7f\23\00\41\80\02\6b\22\05\24\00\02" "\40\20\02\20\03\4c\0d\00\20\04\41\80\c0\04\71\0d\00\20\05" "\20\01\41\ff\01\71\20\02\20\03\6b\22\03\41\80\02\20\03\41" "\80\02\49\22\01\1b\10\07\20\01\45\04\40\03\40\20\00\20\05" "\41\80\02\10\0b\20\03\41\80\02\6b\22\03\41\ff\01\4b\0d\00" "\0b\0b\20\00\20\05\20\03\10\0b\0b\20\05\41\80\02\6a\24\00" "\0b\97\02\00\20\00\45\04\40\41\00\0f\0b\02\7f\02\40\20\00" "\04\7f\20\01\41\ff\00\4d\0d\01\02\40\41\e0\16\28\02\00\28" "\02\00\45\04\40\20\01\41\80\7f\71\41\80\bf\03\46\0d\03\0c" "\01\0b\20\01\41\ff\0f\4d\04\40\20\00\20\01\41\3f\71\41\80" "\01\72\3a\00\01\20\00\20\01\41\06\76\41\c0\01\72\3a\00\00" "\41\02\0c\04\0b\20\01\41\80\40\71\41\80\c0\03\47\20\01\41" "\80\b0\03\4f\71\45\04\40\20\00\20\01\41\3f\71\41\80\01\72" "\3a\00\02\20\00\20\01\41\0c\76\41\e0\01\72\3a\00\00\20\00" "\20\01\41\06\76\41\3f\71\41\80\01\72\3a\00\01\41\03\0c\04" "\0b\20\01\41\80\80\04\6b\41\ff\ff\3f\4d\04\40\20\00\20\01" "\41\3f\71\41\80\01\72\3a\00\03\20\00\20\01\41\12\76\41\f0" "\01\72\3a\00\00\20\00\20\01\41\06\76\41\3f\71\41\80\01\72" "\3a\00\02\20\00\20\01\41\0c\76\41\3f\71\41\80\01\72\3a\00" "\01\41\04\0c\04\0b\0b\41\b8\15\41\19\36\02\00\41\7f\05\41" "\01\0b\0c\01\0b\20\00\20\01\3a\00\00\41\01\0b\0b\04\00\23" "\00\0b\06\00\20\00\24\00\0b\0b\b0\03\14\00\41\80\08\0b\26" "\2d\2b\20\20\20\30\58\30\78\00\46\61\63\74\6f\72\69\61\6c" "\20\6f\66\20\25\64\20\69\73\20\25\64\00\28\6e\75\6c\6c\29" "\00\41\b0\08\0b\41\19\00\0a\00\19\19\19\00\00\00\00\05\00" "\00\00\00\00\00\09\00\00\00\00\0b\00\00\00\00\00\00\00\00" "\19\00\11\0a\19\19\19\03\0a\07\00\01\00\09\0b\18\00\00\09" "\06\0b\00\00\0b\00\06\19\00\00\00\19\19\19\00\41\81\09\0b" "\21\0e\00\00\00\00\00\00\00\00\19\00\0a\0d\19\19\19\00\0d" "\00\00\02\00\09\0e\00\00\00\09\00\0e\00\00\0e\00\41\bb\09" "\0b\01\0c\00\41\c7\09\0b\15\13\00\00\00\00\13\00\00\00\00" "\09\0c\00\00\00\00\00\0c\00\00\0c\00\41\f5\09\0b\01\10\00" "\41\81\0a\0b\15\0f\00\00\00\04\0f\00\00\00\00\09\10\00\00" "\00\00\00\10\00\00\10\00\41\af\0a\0b\01\12\00\41\bb\0a\0b" "\1e\11\00\00\00\00\11\00\00\00\00\09\12\00\00\00\00\00\12" "\00\00\12\00\00\1a\00\00\00\1a\1a\1a\00\41\f2\0a\0b\0e\1a" "\00\00\00\1a\1a\1a\00\00\00\00\00\00\09\00\41\a3\0b\0b\01" "\14\00\41\af\0b\0b\15\17\00\00\00\00\17\00\00\00\00\09\14" "\00\00\00\00\00\14\00\00\14\00\41\dd\0b\0b\01\16\00\41\e9" "\0b\0b\27\15\00\00\00\00\15\00\00\00\00\09\16\00\00\00\00" "\00\16\00\00\16\00\00\30\31\32\33\34\35\36\37\38\39\41\42" "\43\44\45\46\00\41\90\0c\0b\01\05\00\41\9c\0c\0b\01\02\00" "\41\b4\0c\0b\0e\03\00\00\00\04\00\00\00\b8\06\00\00\00\04" "\00\41\cc\0c\0b\01\01\00\41\dc\0c\0b\05\ff\ff\ff\ff\0a\00" "\41\a0\0d\0b\02\10\06") (assert_trap (invoke "_start") "integer divide by zero") ================================================ FILE: Test/wavm/issues/issue-384.wast ================================================ ;; #384: A stack buffer overflow in serializeSection function (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\04\01\60\00\00\03\00\61\73\6d" "\01\00\00\00\01\04\01\60\00\00\03\00\00\00\0a\04\01\02\00" "\76\02\01\00\0a\04\01\02\00\76") "expected data but found end of stream") ================================================ FILE: Test/wavm/many_functions.wast ================================================ (module (memory 1) (func (export "f0") (result i32) (i32.const 0)) (func (export "f1") (result i32) (i32.const 1)) (func (export "f2") (result i32) (i32.const 2)) (func (export "f3") (result i32) (i32.const 3)) (func (export "f4") (result i32) (i32.const 4)) (func (export "f5") (result i32) (i32.const 5)) (func (export "f6") (result i32) (i32.const 6)) (func (export "f7") (result i32) (i32.const 7)) (func (export "f8") (result i32) (i32.const 8)) (func (export "f9") (result i32) (i32.const 9)) (func (export "f10") (result i32) (i32.const 10)) (func (export "f11") (result i32) (i32.const 11)) (func (export "f12") (result i32) (i32.const 12)) (func (export "f13") (result i32) (i32.const 13)) (func (export "f14") (result i32) (i32.const 14)) (func (export "f15") (result i32) (i32.const 15)) (func (export "f16") (result i32) (i32.const 16)) (func (export "f17") (result i32) (i32.const 17)) (func (export "f18") (result i32) (i32.const 18)) (func (export "f19") (result i32) (i32.const 19)) (func (export "f20") (result i32) (i32.const 20)) (func (export "f21") (result i32) (i32.const 21)) (func (export "f22") (result i32) (i32.const 22)) (func (export "f23") (result i32) (i32.const 23)) (func (export "f24") (result i32) (i32.const 24)) (func (export "f25") (result i32) (i32.const 25)) (func (export "f26") (result i32) (i32.const 26)) (func (export "f27") (result i32) (i32.const 27)) (func (export "f28") (result i32) (i32.const 28)) (func (export "f29") (result i32) (i32.const 29)) (func (export "f30") (result i32) (i32.const 30)) (func (export "f31") (result i32) (i32.const 31)) (func (export "f32") (result i32) (i32.const 32)) (func (export "f33") (result i32) (i32.const 33)) (func (export "f34") (result i32) (i32.const 34)) (func (export "f35") (result i32) (i32.const 35)) (func (export "f36") (result i32) (i32.const 36)) (func (export "f37") (result i32) (i32.const 37)) (func (export "f38") (result i32) (i32.const 38)) (func (export "f39") (result i32) (i32.const 39)) (func (export "f40") (result i32) (i32.const 40)) (func (export "f41") (result i32) (i32.const 41)) (func (export "f42") (result i32) (i32.const 42)) (func (export "f43") (result i32) (i32.const 43)) (func (export "f44") (result i32) (i32.const 44)) (func (export "f45") (result i32) (i32.const 45)) (func (export "f46") (result i32) (i32.const 46)) (func (export "f47") (result i32) (i32.const 47)) (func (export "f48") (result i32) (i32.const 48)) (func (export "f49") (result i32) (i32.const 49)) (func (export "f50") (result i32) (i32.const 50)) (func (export "f51") (result i32) (i32.const 51)) (func (export "f52") (result i32) (i32.const 52)) (func (export "f53") (result i32) (i32.const 53)) (func (export "f54") (result i32) (i32.const 54)) (func (export "f55") (result i32) (i32.const 55)) (func (export "f56") (result i32) (i32.const 56)) (func (export "f57") (result i32) (i32.const 57)) (func (export "f58") (result i32) (i32.const 58)) (func (export "f59") (result i32) (i32.const 59)) (func (export "f60") (result i32) (i32.const 60)) (func (export "f61") (result i32) (i32.const 61)) (func (export "f62") (result i32) (i32.const 62)) (func (export "f63") (result i32) (i32.const 63)) (func (export "f64") (result i32) (i32.const 64)) (func (export "f65") (result i32) (i32.const 65)) (func (export "f66") (result i32) (i32.const 66)) (func (export "f67") (result i32) (i32.const 67)) (func (export "f68") (result i32) (i32.const 68)) (func (export "f69") (result i32) (i32.const 69)) (func (export "f70") (result i32) (i32.const 70)) (func (export "f71") (result i32) (i32.const 71)) (func (export "f72") (result i32) (i32.const 72)) (func (export "f73") (result i32) (i32.const 73)) (func (export "f74") (result i32) (i32.const 74)) (func (export "f75") (result i32) (i32.const 75)) (func (export "f76") (result i32) (i32.const 76)) (func (export "f77") (result i32) (i32.const 77)) (func (export "f78") (result i32) (i32.const 78)) (func (export "f79") (result i32) (i32.const 79)) (func (export "f80") (result i32) (i32.const 80)) (func (export "f81") (result i32) (i32.const 81)) (func (export "f82") (result i32) (i32.const 82)) (func (export "f83") (result i32) (i32.const 83)) (func (export "f84") (result i32) (i32.const 84)) (func (export "f85") (result i32) (i32.const 85)) (func (export "f86") (result i32) (i32.const 86)) (func (export "f87") (result i32) (i32.const 87)) (func (export "f88") (result i32) (i32.const 88)) (func (export "f89") (result i32) (i32.const 89)) (func (export "f90") (result i32) (i32.const 90)) (func (export "f91") (result i32) (i32.const 91)) (func (export "f92") (result i32) (i32.const 92)) (func (export "f93") (result i32) (i32.const 93)) (func (export "f94") (result i32) (i32.const 94)) (func (export "f95") (result i32) (i32.const 95)) (func (export "f96") (result i32) (i32.const 96)) (func (export "f97") (result i32) (i32.const 97)) (func (export "f98") (result i32) (i32.const 98)) (func (export "f99") (result i32) (i32.const 99)) (func (export "f100") (result i32) (i32.const 100)) (func (export "f101") (result i32) (i32.const 101)) (func (export "f102") (result i32) (i32.const 102)) (func (export "f103") (result i32) (i32.const 103)) (func (export "f104") (result i32) (i32.const 104)) (func (export "f105") (result i32) (i32.const 105)) (func (export "f106") (result i32) (i32.const 106)) (func (export "f107") (result i32) (i32.const 107)) (func (export "f108") (result i32) (i32.const 108)) (func (export "f109") (result i32) (i32.const 109)) (func (export "f110") (result i32) (i32.const 110)) (func (export "f111") (result i32) (i32.const 111)) (func (export "f112") (result i32) (i32.const 112)) (func (export "f113") (result i32) (i32.const 113)) (func (export "f114") (result i32) (i32.const 114)) (func (export "f115") (result i32) (i32.const 115)) (func (export "f116") (result i32) (i32.const 116)) (func (export "f117") (result i32) (i32.const 117)) (func (export "f118") (result i32) (i32.const 118)) (func (export "f119") (result i32) (i32.const 119)) (func (export "f120") (result i32) (i32.const 120)) (func (export "f121") (result i32) (i32.const 121)) (func (export "f122") (result i32) (i32.const 122)) (func (export "f123") (result i32) (i32.const 123)) (func (export "f124") (result i32) (i32.const 124)) (func (export "f125") (result i32) (i32.const 125)) (func (export "f126") (result i32) (i32.const 126)) (func (export "f127") (result i32) (i32.const 127)) (func (export "f128") (result i32) (i32.const 128)) (func (export "f129") (result i32) (i32.const 129)) (func (export "f130") (result i32) (i32.const 130)) (func (export "f131") (result i32) (i32.const 131)) (func (export "f132") (result i32) (i32.const 132)) (func (export "f133") (result i32) (i32.const 133)) (func (export "f134") (result i32) (i32.const 134)) (func (export "f135") (result i32) (i32.const 135)) (func (export "f136") (result i32) (i32.const 136)) (func (export "f137") (result i32) (i32.const 137)) (func (export "f138") (result i32) (i32.const 138)) (func (export "f139") (result i32) (i32.const 139)) (func (export "f140") (result i32) (i32.const 140)) (func (export "f141") (result i32) (i32.const 141)) (func (export "f142") (result i32) (i32.const 142)) (func (export "f143") (result i32) (i32.const 143)) (func (export "f144") (result i32) (i32.const 144)) (func (export "f145") (result i32) (i32.const 145)) (func (export "f146") (result i32) (i32.const 146)) (func (export "f147") (result i32) (i32.const 147)) (func (export "f148") (result i32) (i32.const 148)) (func (export "f149") (result i32) (i32.const 149)) (func (export "f150") (result i32) (i32.const 150)) (func (export "f151") (result i32) (i32.const 151)) (func (export "f152") (result i32) (i32.const 152)) (func (export "f153") (result i32) (i32.const 153)) (func (export "f154") (result i32) (i32.const 154)) (func (export "f155") (result i32) (i32.const 155)) (func (export "f156") (result i32) (i32.const 156)) (func (export "f157") (result i32) (i32.const 157)) (func (export "f158") (result i32) (i32.const 158)) (func (export "f159") (result i32) (i32.const 159)) (func (export "f160") (result i32) (i32.const 160)) (func (export "f161") (result i32) (i32.const 161)) (func (export "f162") (result i32) (i32.const 162)) (func (export "f163") (result i32) (i32.const 163)) (func (export "f164") (result i32) (i32.const 164)) (func (export "f165") (result i32) (i32.const 165)) (func (export "f166") (result i32) (i32.const 166)) (func (export "f167") (result i32) (i32.const 167)) (func (export "f168") (result i32) (i32.const 168)) (func (export "f169") (result i32) (i32.const 169)) (func (export "f170") (result i32) (i32.const 170)) (func (export "f171") (result i32) (i32.const 171)) (func (export "f172") (result i32) (i32.const 172)) (func (export "f173") (result i32) (i32.const 173)) (func (export "f174") (result i32) (i32.const 174)) (func (export "f175") (result i32) (i32.const 175)) (func (export "f176") (result i32) (i32.const 176)) (func (export "f177") (result i32) (i32.const 177)) (func (export "f178") (result i32) (i32.const 178)) (func (export "f179") (result i32) (i32.const 179)) (func (export "f180") (result i32) (i32.const 180)) (func (export "f181") (result i32) (i32.const 181)) (func (export "f182") (result i32) (i32.const 182)) (func (export "f183") (result i32) (i32.const 183)) (func (export "f184") (result i32) (i32.const 184)) (func (export "f185") (result i32) (i32.const 185)) (func (export "f186") (result i32) (i32.const 186)) (func (export "f187") (result i32) (i32.const 187)) (func (export "f188") (result i32) (i32.const 188)) (func (export "f189") (result i32) (i32.const 189)) (func (export "f190") (result i32) (i32.const 190)) (func (export "f191") (result i32) (i32.const 191)) (func (export "f192") (result i32) (i32.const 192)) (func (export "f193") (result i32) (i32.const 193)) (func (export "f194") (result i32) (i32.const 194)) (func (export "f195") (result i32) (i32.const 195)) (func (export "f196") (result i32) (i32.const 196)) (func (export "f197") (result i32) (i32.const 197)) (func (export "f198") (result i32) (i32.const 198)) (func (export "f199") (result i32) (i32.const 199)) (func (export "f200") (result i32) (i32.const 200)) (func (export "f201") (result i32) (i32.const 201)) (func (export "f202") (result i32) (i32.const 202)) (func (export "f203") (result i32) (i32.const 203)) (func (export "f204") (result i32) (i32.const 204)) (func (export "f205") (result i32) (i32.const 205)) (func (export "f206") (result i32) (i32.const 206)) (func (export "f207") (result i32) (i32.const 207)) (func (export "f208") (result i32) (i32.const 208)) (func (export "f209") (result i32) (i32.const 209)) (func (export "f210") (result i32) (i32.const 210)) (func (export "f211") (result i32) (i32.const 211)) (func (export "f212") (result i32) (i32.const 212)) (func (export "f213") (result i32) (i32.const 213)) (func (export "f214") (result i32) (i32.const 214)) (func (export "f215") (result i32) (i32.const 215)) (func (export "f216") (result i32) (i32.const 216)) (func (export "f217") (result i32) (i32.const 217)) (func (export "f218") (result i32) (i32.const 218)) (func (export "f219") (result i32) (i32.const 219)) (func (export "f220") (result i32) (i32.const 220)) (func (export "f221") (result i32) (i32.const 221)) (func (export "f222") (result i32) (i32.const 222)) (func (export "f223") (result i32) (i32.const 223)) (func (export "f224") (result i32) (i32.const 224)) (func (export "f225") (result i32) (i32.const 225)) (func (export "f226") (result i32) (i32.const 226)) (func (export "f227") (result i32) (i32.const 227)) (func (export "f228") (result i32) (i32.const 228)) (func (export "f229") (result i32) (i32.const 229)) (func (export "f230") (result i32) (i32.const 230)) (func (export "f231") (result i32) (i32.const 231)) (func (export "f232") (result i32) (i32.const 232)) (func (export "f233") (result i32) (i32.const 233)) (func (export "f234") (result i32) (i32.const 234)) (func (export "f235") (result i32) (i32.const 235)) (func (export "f236") (result i32) (i32.const 236)) (func (export "f237") (result i32) (i32.const 237)) (func (export "f238") (result i32) (i32.const 238)) (func (export "f239") (result i32) (i32.const 239)) (func (export "f240") (result i32) (i32.const 240)) (func (export "f241") (result i32) (i32.const 241)) (func (export "f242") (result i32) (i32.const 242)) (func (export "f243") (result i32) (i32.const 243)) (func (export "f244") (result i32) (i32.const 244)) (func (export "f245") (result i32) (i32.const 245)) (func (export "f246") (result i32) (i32.const 246)) (func (export "f247") (result i32) (i32.const 247)) (func (export "f248") (result i32) (i32.const 248)) (func (export "f249") (result i32) (i32.const 249)) (func (export "f250") (result i32) (i32.const 250)) (func (export "f251") (result i32) (i32.const 251)) (func (export "f252") (result i32) (i32.const 252)) (func (export "f253") (result i32) (i32.const 253)) (func (export "f254") (result i32) (i32.const 254)) (func (export "f255") (result i32) (i32.const 255)) (func (export "f256") (result i32) (i32.const 256)) (func (export "f257") (result i32) (i32.const 257)) (func (export "f258") (result i32) (i32.const 258)) (func (export "f259") (result i32) (i32.const 259)) (func (export "f260") (result i32) (i32.const 260)) (func (export "f261") (result i32) (i32.const 261)) (func (export "f262") (result i32) (i32.const 262)) (func (export "f263") (result i32) (i32.const 263)) (func (export "f264") (result i32) (i32.const 264)) (func (export "f265") (result i32) (i32.const 265)) (func (export "f266") (result i32) (i32.const 266)) (func (export "f267") (result i32) (i32.const 267)) (func (export "f268") (result i32) (i32.const 268)) (func (export "f269") (result i32) (i32.const 269)) (func (export "f270") (result i32) (i32.const 270)) (func (export "f271") (result i32) (i32.const 271)) (func (export "f272") (result i32) (i32.const 272)) (func (export "f273") (result i32) (i32.const 273)) (func (export "f274") (result i32) (i32.const 274)) (func (export "f275") (result i32) (i32.const 275)) (func (export "f276") (result i32) (i32.const 276)) (func (export "f277") (result i32) (i32.const 277)) (func (export "f278") (result i32) (i32.const 278)) (func (export "f279") (result i32) (i32.const 279)) (func (export "f280") (result i32) (i32.const 280)) (func (export "f281") (result i32) (i32.const 281)) (func (export "f282") (result i32) (i32.const 282)) (func (export "f283") (result i32) (i32.const 283)) (func (export "f284") (result i32) (i32.const 284)) (func (export "f285") (result i32) (i32.const 285)) (func (export "f286") (result i32) (i32.const 286)) (func (export "f287") (result i32) (i32.const 287)) (func (export "f288") (result i32) (i32.const 288)) (func (export "f289") (result i32) (i32.const 289)) (func (export "f290") (result i32) (i32.const 290)) (func (export "f291") (result i32) (i32.const 291)) (func (export "f292") (result i32) (i32.const 292)) (func (export "f293") (result i32) (i32.const 293)) (func (export "f294") (result i32) (i32.const 294)) (func (export "f295") (result i32) (i32.const 295)) (func (export "f296") (result i32) (i32.const 296)) (func (export "f297") (result i32) (i32.const 297)) (func (export "f298") (result i32) (i32.const 298)) (func (export "f299") (result i32) (i32.const 299)) (func (export "f300") (result i32) (i32.const 300)) (func (export "f301") (result i32) (i32.const 301)) (func (export "f302") (result i32) (i32.const 302)) (func (export "f303") (result i32) (i32.const 303)) (func (export "f304") (result i32) (i32.const 304)) (func (export "f305") (result i32) (i32.const 305)) (func (export "f306") (result i32) (i32.const 306)) (func (export "f307") (result i32) (i32.const 307)) (func (export "f308") (result i32) (i32.const 308)) (func (export "f309") (result i32) (i32.const 309)) (func (export "f310") (result i32) (i32.const 310)) (func (export "f311") (result i32) (i32.const 311)) (func (export "f312") (result i32) (i32.const 312)) (func (export "f313") (result i32) (i32.const 313)) (func (export "f314") (result i32) (i32.const 314)) (func (export "f315") (result i32) (i32.const 315)) (func (export "f316") (result i32) (i32.const 316)) (func (export "f317") (result i32) (i32.const 317)) (func (export "f318") (result i32) (i32.const 318)) (func (export "f319") (result i32) (i32.const 319)) (func (export "f320") (result i32) (i32.const 320)) (func (export "f321") (result i32) (i32.const 321)) (func (export "f322") (result i32) (i32.const 322)) (func (export "f323") (result i32) (i32.const 323)) (func (export "f324") (result i32) (i32.const 324)) (func (export "f325") (result i32) (i32.const 325)) (func (export "f326") (result i32) (i32.const 326)) (func (export "f327") (result i32) (i32.const 327)) (func (export "f328") (result i32) (i32.const 328)) (func (export "f329") (result i32) (i32.const 329)) (func (export "f330") (result i32) (i32.const 330)) (func (export "f331") (result i32) (i32.const 331)) (func (export "f332") (result i32) (i32.const 332)) (func (export "f333") (result i32) (i32.const 333)) (func (export "f334") (result i32) (i32.const 334)) (func (export "f335") (result i32) (i32.const 335)) (func (export "f336") (result i32) (i32.const 336)) (func (export "f337") (result i32) (i32.const 337)) (func (export "f338") (result i32) (i32.const 338)) (func (export "f339") (result i32) (i32.const 339)) (func (export "f340") (result i32) (i32.const 340)) (func (export "f341") (result i32) (i32.const 341)) (func (export "f342") (result i32) (i32.const 342)) (func (export "f343") (result i32) (i32.const 343)) (func (export "f344") (result i32) (i32.const 344)) (func (export "f345") (result i32) (i32.const 345)) (func (export "f346") (result i32) (i32.const 346)) (func (export "f347") (result i32) (i32.const 347)) (func (export "f348") (result i32) (i32.const 348)) (func (export "f349") (result i32) (i32.const 349)) (func (export "f350") (result i32) (i32.const 350)) (func (export "f351") (result i32) (i32.const 351)) (func (export "f352") (result i32) (i32.const 352)) (func (export "f353") (result i32) (i32.const 353)) (func (export "f354") (result i32) (i32.const 354)) (func (export "f355") (result i32) (i32.const 355)) (func (export "f356") (result i32) (i32.const 356)) (func (export "f357") (result i32) (i32.const 357)) (func (export "f358") (result i32) (i32.const 358)) (func (export "f359") (result i32) (i32.const 359)) (func (export "f360") (result i32) (i32.const 360)) (func (export "f361") (result i32) (i32.const 361)) (func (export "f362") (result i32) (i32.const 362)) (func (export "f363") (result i32) (i32.const 363)) (func (export "f364") (result i32) (i32.const 364)) (func (export "f365") (result i32) (i32.const 365)) (func (export "f366") (result i32) (i32.const 366)) (func (export "f367") (result i32) (i32.const 367)) (func (export "f368") (result i32) (i32.const 368)) (func (export "f369") (result i32) (i32.const 369)) (func (export "f370") (result i32) (i32.const 370)) (func (export "f371") (result i32) (i32.const 371)) (func (export "f372") (result i32) (i32.const 372)) (func (export "f373") (result i32) (i32.const 373)) (func (export "f374") (result i32) (i32.const 374)) (func (export "f375") (result i32) (i32.const 375)) (func (export "f376") (result i32) (i32.const 376)) (func (export "f377") (result i32) (i32.const 377)) (func (export "f378") (result i32) (i32.const 378)) (func (export "f379") (result i32) (i32.const 379)) (func (export "f380") (result i32) (i32.const 380)) (func (export "f381") (result i32) (i32.const 381)) (func (export "f382") (result i32) (i32.const 382)) (func (export "f383") (result i32) (i32.const 383)) (func (export "f384") (result i32) (i32.const 384)) (func (export "f385") (result i32) (i32.const 385)) (func (export "f386") (result i32) (i32.const 386)) (func (export "f387") (result i32) (i32.const 387)) (func (export "f388") (result i32) (i32.const 388)) (func (export "f389") (result i32) (i32.const 389)) (func (export "f390") (result i32) (i32.const 390)) (func (export "f391") (result i32) (i32.const 391)) (func (export "f392") (result i32) (i32.const 392)) (func (export "f393") (result i32) (i32.const 393)) (func (export "f394") (result i32) (i32.const 394)) (func (export "f395") (result i32) (i32.const 395)) (func (export "f396") (result i32) (i32.const 396)) (func (export "f397") (result i32) (i32.const 397)) (func (export "f398") (result i32) (i32.const 398)) (func (export "f399") (result i32) (i32.const 399)) (func (export "f400") (result i32) (i32.const 400)) (func (export "f401") (result i32) (i32.const 401)) (func (export "f402") (result i32) (i32.const 402)) (func (export "f403") (result i32) (i32.const 403)) (func (export "f404") (result i32) (i32.const 404)) (func (export "f405") (result i32) (i32.const 405)) (func (export "f406") (result i32) (i32.const 406)) (func (export "f407") (result i32) (i32.const 407)) (func (export "f408") (result i32) (i32.const 408)) (func (export "f409") (result i32) (i32.const 409)) (func (export "f410") (result i32) (i32.const 410)) (func (export "f411") (result i32) (i32.const 411)) (func (export "f412") (result i32) (i32.const 412)) (func (export "f413") (result i32) (i32.const 413)) (func (export "f414") (result i32) (i32.const 414)) (func (export "f415") (result i32) (i32.const 415)) (func (export "f416") (result i32) (i32.const 416)) (func (export "f417") (result i32) (i32.const 417)) (func (export "f418") (result i32) (i32.const 418)) (func (export "f419") (result i32) (i32.const 419)) (func (export "f420") (result i32) (i32.const 420)) (func (export "f421") (result i32) (i32.const 421)) (func (export "f422") (result i32) (i32.const 422)) (func (export "f423") (result i32) (i32.const 423)) (func (export "f424") (result i32) (i32.const 424)) (func (export "f425") (result i32) (i32.const 425)) (func (export "f426") (result i32) (i32.const 426)) (func (export "f427") (result i32) (i32.const 427)) (func (export "f428") (result i32) (i32.const 428)) (func (export "f429") (result i32) (i32.const 429)) (func (export "f430") (result i32) (i32.const 430)) (func (export "f431") (result i32) (i32.const 431)) (func (export "f432") (result i32) (i32.const 432)) (func (export "f433") (result i32) (i32.const 433)) (func (export "f434") (result i32) (i32.const 434)) (func (export "f435") (result i32) (i32.const 435)) (func (export "f436") (result i32) (i32.const 436)) (func (export "f437") (result i32) (i32.const 437)) (func (export "f438") (result i32) (i32.const 438)) (func (export "f439") (result i32) (i32.const 439)) (func (export "f440") (result i32) (i32.const 440)) (func (export "f441") (result i32) (i32.const 441)) (func (export "f442") (result i32) (i32.const 442)) (func (export "f443") (result i32) (i32.const 443)) (func (export "f444") (result i32) (i32.const 444)) (func (export "f445") (result i32) (i32.const 445)) (func (export "f446") (result i32) (i32.const 446)) (func (export "f447") (result i32) (i32.const 447)) (func (export "f448") (result i32) (i32.const 448)) (func (export "f449") (result i32) (i32.const 449)) (func (export "f450") (result i32) (i32.const 450)) (func (export "f451") (result i32) (i32.const 451)) (func (export "f452") (result i32) (i32.const 452)) (func (export "f453") (result i32) (i32.const 453)) (func (export "f454") (result i32) (i32.const 454)) (func (export "f455") (result i32) (i32.const 455)) (func (export "f456") (result i32) (i32.const 456)) (func (export "f457") (result i32) (i32.const 457)) (func (export "f458") (result i32) (i32.const 458)) (func (export "f459") (result i32) (i32.const 459)) (func (export "f460") (result i32) (i32.const 460)) (func (export "f461") (result i32) (i32.const 461)) (func (export "f462") (result i32) (i32.const 462)) (func (export "f463") (result i32) (i32.const 463)) (func (export "f464") (result i32) (i32.const 464)) (func (export "f465") (result i32) (i32.const 465)) (func (export "f466") (result i32) (i32.const 466)) (func (export "f467") (result i32) (i32.const 467)) (func (export "f468") (result i32) (i32.const 468)) (func (export "f469") (result i32) (i32.const 469)) (func (export "f470") (result i32) (i32.const 470)) (func (export "f471") (result i32) (i32.const 471)) (func (export "f472") (result i32) (i32.const 472)) (func (export "f473") (result i32) (i32.const 473)) (func (export "f474") (result i32) (i32.const 474)) (func (export "f475") (result i32) (i32.const 475)) (func (export "f476") (result i32) (i32.const 476)) (func (export "f477") (result i32) (i32.const 477)) (func (export "f478") (result i32) (i32.const 478)) (func (export "f479") (result i32) (i32.const 479)) (func (export "f480") (result i32) (i32.const 480)) (func (export "f481") (result i32) (i32.const 481)) (func (export "f482") (result i32) (i32.const 482)) (func (export "f483") (result i32) (i32.const 483)) (func (export "f484") (result i32) (i32.const 484)) (func (export "f485") (result i32) (i32.const 485)) (func (export "f486") (result i32) (i32.const 486)) (func (export "f487") (result i32) (i32.const 487)) (func (export "f488") (result i32) (i32.const 488)) (func (export "f489") (result i32) (i32.const 489)) (func (export "f490") (result i32) (i32.const 490)) (func (export "f491") (result i32) (i32.const 491)) (func (export "f492") (result i32) (i32.const 492)) (func (export "f493") (result i32) (i32.const 493)) (func (export "f494") (result i32) (i32.const 494)) (func (export "f495") (result i32) (i32.const 495)) (func (export "f496") (result i32) (i32.const 496)) (func (export "f497") (result i32) (i32.const 497)) (func (export "f498") (result i32) (i32.const 498)) (func (export "f499") (result i32) (i32.const 499)) (func (export "f500") (result i32) (i32.const 500)) (func (export "f501") (result i32) (i32.const 501)) (func (export "f502") (result i32) (i32.const 502)) (func (export "f503") (result i32) (i32.const 503)) (func (export "f504") (result i32) (i32.const 504)) (func (export "f505") (result i32) (i32.const 505)) (func (export "f506") (result i32) (i32.const 506)) (func (export "f507") (result i32) (i32.const 507)) (func (export "f508") (result i32) (i32.const 508)) (func (export "f509") (result i32) (i32.const 509)) (func (export "f510") (result i32) (i32.const 510)) (func (export "f511") (result i32) (i32.const 511)) (func (export "f512") (result i32) (i32.const 512)) (func (export "f513") (result i32) (i32.const 513)) (func (export "f514") (result i32) (i32.const 514)) (func (export "f515") (result i32) (i32.const 515)) (func (export "f516") (result i32) (i32.const 516)) (func (export "f517") (result i32) (i32.const 517)) (func (export "f518") (result i32) (i32.const 518)) (func (export "f519") (result i32) (i32.const 519)) (func (export "f520") (result i32) (i32.const 520)) (func (export "f521") (result i32) (i32.const 521)) (func (export "f522") (result i32) (i32.const 522)) (func (export "f523") (result i32) (i32.const 523)) (func (export "f524") (result i32) (i32.const 524)) (func (export "f525") (result i32) (i32.const 525)) (func (export "f526") (result i32) (i32.const 526)) (func (export "f527") (result i32) (i32.const 527)) (func (export "f528") (result i32) (i32.const 528)) (func (export "f529") (result i32) (i32.const 529)) (func (export "f530") (result i32) (i32.const 530)) (func (export "f531") (result i32) (i32.const 531)) (func (export "f532") (result i32) (i32.const 532)) (func (export "f533") (result i32) (i32.const 533)) (func (export "f534") (result i32) (i32.const 534)) (func (export "f535") (result i32) (i32.const 535)) (func (export "f536") (result i32) (i32.const 536)) (func (export "f537") (result i32) (i32.const 537)) (func (export "f538") (result i32) (i32.const 538)) (func (export "f539") (result i32) (i32.const 539)) (func (export "f540") (result i32) (i32.const 540)) (func (export "f541") (result i32) (i32.const 541)) (func (export "f542") (result i32) (i32.const 542)) (func (export "f543") (result i32) (i32.const 543)) (func (export "f544") (result i32) (i32.const 544)) (func (export "f545") (result i32) (i32.const 545)) (func (export "f546") (result i32) (i32.const 546)) (func (export "f547") (result i32) (i32.const 547)) (func (export "f548") (result i32) (i32.const 548)) (func (export "f549") (result i32) (i32.const 549)) (func (export "f550") (result i32) (i32.const 550)) (func (export "f551") (result i32) (i32.const 551)) (func (export "f552") (result i32) (i32.const 552)) (func (export "f553") (result i32) (i32.const 553)) (func (export "f554") (result i32) (i32.const 554)) (func (export "f555") (result i32) (i32.const 555)) (func (export "f556") (result i32) (i32.const 556)) (func (export "f557") (result i32) (i32.const 557)) (func (export "f558") (result i32) (i32.const 558)) (func (export "f559") (result i32) (i32.const 559)) (func (export "f560") (result i32) (i32.const 560)) (func (export "f561") (result i32) (i32.const 561)) (func (export "f562") (result i32) (i32.const 562)) (func (export "f563") (result i32) (i32.const 563)) (func (export "f564") (result i32) (i32.const 564)) (func (export "f565") (result i32) (i32.const 565)) (func (export "f566") (result i32) (i32.const 566)) (func (export "f567") (result i32) (i32.const 567)) (func (export "f568") (result i32) (i32.const 568)) (func (export "f569") (result i32) (i32.const 569)) (func (export "f570") (result i32) (i32.const 570)) (func (export "f571") (result i32) (i32.const 571)) (func (export "f572") (result i32) (i32.const 572)) (func (export "f573") (result i32) (i32.const 573)) (func (export "f574") (result i32) (i32.const 574)) (func (export "f575") (result i32) (i32.const 575)) (func (export "f576") (result i32) (i32.const 576)) (func (export "f577") (result i32) (i32.const 577)) (func (export "f578") (result i32) (i32.const 578)) (func (export "f579") (result i32) (i32.const 579)) (func (export "f580") (result i32) (i32.const 580)) (func (export "f581") (result i32) (i32.const 581)) (func (export "f582") (result i32) (i32.const 582)) (func (export "f583") (result i32) (i32.const 583)) (func (export "f584") (result i32) (i32.const 584)) (func (export "f585") (result i32) (i32.const 585)) (func (export "f586") (result i32) (i32.const 586)) (func (export "f587") (result i32) (i32.const 587)) (func (export "f588") (result i32) (i32.const 588)) (func (export "f589") (result i32) (i32.const 589)) (func (export "f590") (result i32) (i32.const 590)) (func (export "f591") (result i32) (i32.const 591)) (func (export "f592") (result i32) (i32.const 592)) (func (export "f593") (result i32) (i32.const 593)) (func (export "f594") (result i32) (i32.const 594)) (func (export "f595") (result i32) (i32.const 595)) (func (export "f596") (result i32) (i32.const 596)) (func (export "f597") (result i32) (i32.const 597)) (func (export "f598") (result i32) (i32.const 598)) (func (export "f599") (result i32) (i32.const 599)) (func (export "trap") (unreachable)) ) (assert_return (invoke "f0") (i32.const 0)) (assert_return (invoke "f299") (i32.const 299)) (assert_return (invoke "f599") (i32.const 599)) (assert_trap (invoke "trap") "unreachable") ================================================ FILE: Test/wavm/misc.wast ================================================ ;; Unassigned single-byte opcodes must be rejected (#355, #356, #357) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; type section: (func) "\03\02\01\00" ;; function section: func 0 is type 0 "\0a\05\01\03\00\ec\0b" ;; code section: body contains opcode 0xec ) "unknown opcode" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; type section: (func) "\03\02\01\00" ;; function section: func 0 is type 0 "\0a\05\01\03\00\f9\0b" ;; code section: body contains opcode 0xf9 ) "unknown opcode" ) ;; Test that NaNs without any significand bits set are rejected (module quote "(func (f32.const +nan:0x1) drop)") (assert_malformed (module quote "(func (f32.const +nan:0x0))") "NaN significand must be non-zero") (assert_malformed (module quote "(func (f32.const -nan:0x0))") "NaN significand must be non-zero") (assert_malformed (module quote "(func (f64.const +nan:0x0))") "NaN significand must be non-zero") (assert_malformed (module quote "(func (f64.const -nan:0x0))") "NaN significand must be non-zero") ;; some tests omitted from the reference interpreter test suite because the reference interpreter ;; doesn't correctly implement them. ;; from https://github.com/WebAssembly/spec/issues/421 (module (func (export "f32.convert_s_i64") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f32.convert_u_i64") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) ) (assert_return (invoke "f32.convert_u_i64" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_u_i64" (i64.const 0x7fffffbfffffffff)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_u_i64" (i64.const 0x8000008000000001)) (f32.const 0x1.000002p+63)) (assert_return (invoke "f32.convert_u_i64" (i64.const 0xfffffe8000000001)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "f32.convert_s_i64" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62)) (assert_return (invoke "f32.convert_s_i64" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53)) (assert_return (invoke "f32.convert_s_i64" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_s_i64" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62)) ;; Test LLVM IRBuilder constant folding bug that translates: ;; ICmp(t X, bitcast(float Y to t)) to ;; to: ;; ICmp(bitcast(t X to float), float Y) ;; If the bug is present and not worked around, these modules should cause undefined behavior. ;; Hopefully, that means an error message and an abort(). (module (func (result v128) (i32x4.eq (v128.const i32x4 1 2 3 4) (f32x4.convert_i32x4_u (v128.const i32x4 5 6 7 8))) ) (func (result i32) (i32.eq (i32x4.extract_lane 0 (v128.const i32x4 1 2 3 4)) (i32x4.extract_lane 0 (f32x4.convert_i32x4_u (v128.const i32x4 5 6 7 8)))) ) ) (module (func (result v128) (i8x16.sub_sat_u (v128.const i32x4 9 10 11 12) (f32x4.convert_i32x4_u (v128.const i32x4 13 14 15 16))) ) ) (module (func (result v128) (i16x8.sub_sat_u (v128.const i32x4 17 18 19 20) (f32x4.convert_i32x4_u (v128.const i32x4 21 22 23 24))) ) ) (module (func (result i32) (i64.gt_u (i64.const 0) (i64.reinterpret_f64 (f64x2.extract_lane 0 (v128.const i32x4 25 26 27 28)))) ) ) (module (func (result i32) (i32.eq (i32.const 0x6c2964f6) (i32.reinterpret_f32 (f32x4.extract_lane 0 (v128.const f32x4 1.0 2.0 3.0 4.0)))) ) ) ;; Test LLVM IRBuilder constant folding bug that misfolds FCmpUNO(X, X) to false. (module (memory 1 1 shared) (func (export "test-misfold-FCmpUNO-self") (result i32) (block $0 (block $1 (block $default ;; If the table index is inferred to be undef, LLVM will branch to an ;; arbitrary successor of the basic block. (br_table $0 $1 $default (i32.trunc_f32_s (f32x4.extract_lane 0 (v128.const f32x4 nan 0 0 0))) ) ) (return (i32.const 100)) ) (return (i32.const 1)) ) (return (i32.const 0)) ) (func (export "test-misfold-FCmpUNO-self-sat") (param $i i32) (result i32) (block $0 (block $1 (block $default ;; If the table index is inferred to be undef, LLVM will branch to an ;; arbitrary successor of the basic block. (br_table $0 $1 $default (i32.add (local.get $i) (i32.trunc_sat_f32_s (f32x4.extract_lane 0 (v128.const f32x4 nan 0 0 0))) ) ) ) (return (i32.const 100)) ) (return (i32.const 1)) ) (return (i32.const 0)) ) (func (export "test-misfold-FCmpUNO-self-simd") (param $i i32) (result i32) (block $0 (block $1 (block $default ;; If the table index is inferred to be undef, LLVM will branch to an ;; arbitrary successor of the basic block. (br_table $0 $1 $default (i32.add (local.get $i) (i32x4.extract_lane 0 (i32x4.trunc_sat_f32x4_s (v128.const f32x4 nan 0 0 0)) ) ) ) ) (return (i32.const 100)) ) (return (i32.const 1)) ) (return (i32.const 0)) ) (func (export "test-misfold-FCmpEQ-self") (result i32) (f32.eq (f32x4.extract_lane 0 (v128.const f32x4 nan nan nan nan)) (f32x4.extract_lane 0 (v128.const f32x4 nan nan nan nan))) ) (func (export "test-misfold-FCmpNE-self") (result i32) (f32.ne (f32x4.extract_lane 0 (v128.const f32x4 nan nan nan nan)) (f32x4.extract_lane 0 (v128.const f32x4 nan nan nan nan))) ) ) (assert_trap (invoke "test-misfold-FCmpUNO-self") "invalid conversion to integer") (assert_return (invoke "test-misfold-FCmpUNO-self-sat" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test-misfold-FCmpUNO-self-sat" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test-misfold-FCmpUNO-self-simd" (i32.const 0)) (i32.const 0)) (assert_return (invoke "test-misfold-FCmpUNO-self-simd" (i32.const 1)) (i32.const 1)) (assert_return (invoke "test-misfold-FCmpEQ-self") (i32.const 0)) (assert_return (invoke "test-misfold-FCmpNE-self") (i32.const 1)) ;; This module hangs X86Isel in LLVM 6.0, but not LLVM 7+ (; (module (type $0 (func (param i64 f64 i64 f32 i32))) (type $1 (func (param v128))) (type $2 (func (param v128 i32 f64 f32 i32))) (memory $4 1024 65536 shared) (table $3 1024 4294967296 shared funcref) (global $5 (mut v128) (v128.const i32x4 0 1 2 3)) (global $7 (mut i32) (i32.const 1998782039)) (global $8 (mut i64) (i64.const 2173604684453082686)) (global $9 i32 (i32.const -2007124476)) (global $10 i64 (i64.const -2278033257057771354)) (func $13 (type $2) (param $0 v128) (param $1 i32) (param $2 f64) (param $3 f32) (param $4 i32) (local $5 i64) (local $6 i64) (local $7 v128) (local $8 f32) (local $9 f32) (local $10 v128) v128.const i32x4 1 1 1 1 i32x4.trunc_sat_f32x4_s v128.const i32x4 1 1 1 1 local.get $1 local.get $8 f64.promote/f32 global.get $5 f64.const 0x1.8dc8cb3e84082p+523 f64.ceil local.get $7 local.set $10 i32.trunc_f64_s i8x16.splat f32x4.lt local.set $10 local.tee $2 f64.ceil local.get $10 f32x4.convert_i32x4_s local.get $5 global.get $10 i64.rotr f64.convert_i64_u i32.trunc_f64_s i32.clz i64.load8_u offset=3353026027 (v128.store (i32.const 10000) (local.get $10)) local.get $9 local.set $9 local.set $6 global.set $5 local.set $2 i32x4.replace_lane 2 i16x8.le_s drop ) ) ;) ;; some other regression tests for bugs found by fuzz testing (assert_invalid (module binary "\00\61\73\6d\01\00\00\00\01\04\01\60\00\00\03\02" "\01\00\0a\07\01\05\00\00\0b\1b\6e" ) "error validating binary module: Expected non-empty control stack in select" ) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\84\00\01\60\00\00\03" "\84\00\03\00\00\00\0a\aa\00\03\87\80\80\80\00\02" "\02\40\0c\00\0b\0b\89\80\80\80\00\00\03\40\41\01" "\0d\00\0b\0b\8a\80\80\80\00\00\03\40\41\01\0d\00" "\0f\0b\0b" ) "error validating binary module: invalid value type (64)" ) (assert_invalid (module binary "\00\61\73\6d\01\00\00\00\01\0f\01\60\0a\7c\7c\7c" "\7c\7c\7c\7c\7c\7c\7c\01\7c\03\02\01\00\0a\31\01" "\2f\00\20\00\20\01\20\02\20\03\20\02\20\03\20\04" "\20\05\20\06\00\00\00\00\20\09\10\00\00\10\00\0b" "\00\0e\04\6e\61\6d\64\01\07\01\01\04\6d\27\69\6e" ) "error validating binary module: Expected non-empty control stack in unreachable" ) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\85\00\01\60\00\01\7f" "\03\82\00\01\00\05\84\00\01\29\00\00\0a\ae\00\01" "\2c\01\27\2e\03\7f\03\40\3f\00\41\80\80\01\48\04" "\40\20\00\28\00\00\04\40\20\04\41\80\87\00\2c\00" "\00\6a\03\7f\03\40\2f\00\41\41\2b\0b\0b" ) "error validating binary module: invalid value type (210)" ) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\88\80\80\80\00\01\60" "\03\7f\7f\7f\01\7f\03\82\80\80\80\00\01\00\05\84" "\80\80\80\00\01\01\10\20\06\86\80\80\80\00\01\7f" "\00\41\00\0b\07\88\80\80\80\00\01\04\6d\61\69\6e" "\00\00\0a\b0\85\80\80\00\01\ad\05\01\00\00\00\00" "\0b\05\43\00\00\00\00\0b\05\43\00\00\00\00\0b\05" "\43\00\00\00\00\0b\21\07\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\41\8e\9d\ba\f4\78\41\00\41\00\10\00\b2\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\60\41\00\41\00\10\00" "\b2\43\8e\8e\8e\8e\43\8e\00\0e\7d\41\ec\de\01\41" "\00\41\00\10\00\1a\41\00\41\8e\8c\8c\ab\07\75\41" "\00\0d\00\b2\43\73\74\00\00\60\41\00\41\00\10\00" "\b2\43\6f\6d\3a\3a\60\41\00\41\00\10\00\b2\20\07" "\a8\04\7d\20\07\a8\04\7d\20\07\a8\04\7d\20\07\a8" "\04\7d\20\07\a8\04\7d\20\07\a8\04\7d\02\7f\41\00" "\41\e3\00\6a\0b\41\f5\e6\d1\04\74\04\7d\43\00\00" "\00\00\05\43\00\00\00\00\0b\05\43\00\00\00\00\0b" "\05\43\00\00\00\00\0b\05\43\00\00\00\00\0b\05\43" "\00\00\00\00\0b\05\43\00\00\00\00\0b\05\43\00\00" "\00\00\0b\21\07\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\41\8e\9d" "\ba\f4\78\41\00\41\00\10\00\b2\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\60\41\00\41\00\10\00\b2\43\8e" "\8e\8e\8e\43\8e\00\00\00\60\41\00\41\00\10\00\b2" "\60\41\00\41\00\10\00\b2\20\00\2f\01\f4\de\b5\d3" "\03\20\04\a8\3a\00\e1\c8\81\70\20\07\a8\2e\01\ed" "\f4\e8\01\20\07\a8\77\20\07\a8\0d\00\b2\22\0e\a8" "\20\07\a8\20\07\a8\10\00\b2\60\41\ba\f4\e8\01\41" "\00\10\00\b2\20\07\a8\04\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03" "\7d\03\7d\43\6d\6d\6d\6d\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\05\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d\03\7d" "\43\6d\6d\8e\8e\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b" "\0b\0b\0b\60\0b" ) "error validating binary module: Expected non-empty control stack in else" ) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\88\80\80\80\00\01\60" "\03\7f\7f\7f\01\7f\03\82\80\80\80\00\01\00\05\84" "\80\80\00\01\2f\10\20\06\86\80\80\80\00\01\7f\00" "\41\00\0b\07\88\80\80\80\00\01\04\65\61\69\6e\00" "\00\0a\9a\81\80\80\00\01\97\01\0b\04\7f\41\00\05" "\41\00\0b\04\7f\41\00\05\41\00\0b\04\7f\41\00\05" "\41\00\0b\fb\04\7f\41\00\05\41\00\0b\04\7f\41\00" "\05\41\00\0b\04\7f\41\00\05\41\00\0b\04\7f\41\00" "\41\00\0b\04\7f\41\00\05\41\00\0b\04\7f\41\00\05" "\41\00\0b\04\7f\41\00\05\41\00\ff\ff\ff\ff\0b\04" "\7f\41\00\05\41\00\0b\04\7f\41\00\05\41\00\0b\04" "\7f\41\00\05\41\00\0b\04\7f\41\00\05\41\00\0b\04" "\7f\41\00\05\41\00\0b\04\7f\41\00\05\41\00\0b\04" "\7f\41\00\05\41\00\0b\04\7f\41\00\05\41\00\0b\41" "\00\0d\00\b7\62\0b" ) "error validating binary module: invalid value type (0)" ) (assert_malformed (module binary "\00\61\73\6d\01\00\00\00\01\04\01\60\00\00\03\02" "\01\00" ) "error validating binary module: Serialized module contained function declarations, but no corresponding function definition section" ) (assert_malformed (module quote "\80\61\73\6d\01\00\00\00\02\08\01\01\6d\01\66\03" "\7f\00" ) "expected '('" ) (assert_malformed (module quote "\00" ) "expected '('" ) ;; Test for the bug fixed by https://reviews.llvm.org/D57871 (module (func (export "testLLVM-D57871") (param $a v128) (result v128) (i16x8.eq (f32x4.convert_i32x4_s (local.get $a)) (v128.const i16x8 0 0 0 0 0 0 0 0)) ) ) (assert_return (invoke "testLLVM-D57871" (v128.const i32x4 0 0 0 0)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1)) (assert_return (invoke "testLLVM-D57871" (v128.const i32x4 1 1 1 1)) (v128.const i16x8 -1 0 -1 0 -1 0 -1 0)) ;; Test for the bug fixed by https://reviews.llvm.org/D58049 (module $m (func (export "f"))) (register "m" $m) (module (elem declare $f) (func $f (import "m" "f")) (func (export "testLLVM-D58049") (param $x i32) (result i32) (i32.or (i32.shr_u (ref.is_null (ref.func $f)) (local.get $x)) (i32.shl (ref.is_null (ref.func $f)) (i32.const 1)) ) ) ) (assert_return (invoke "testLLVM-D58049" (i32.const 0)) (i32.const 0)) ;; Test for the bug reported here: https://bugs.llvm.org/show_bug.cgi?id=40793 (module (type $2 (func (param funcref v128))) (memory $4 1024 65536 shared) ;;(global $11 (mut v128) (v128.const i32x4 0xb3ce8331 0x45c113c5 0xe339424d 0x743a15f1)) (global $11 (mut i32) (i32.const 0xb3ce)) (func $15 (type $2) (param $0 funcref) (param $1 v128) v128.const i32x4 0xc6046244 0xbdc49765 0x7fddc966 0x48629ec2 global.get $11 i16x8.shr_u f64x2.abs i16x8.extract_lane_s 5 i64.load8_u br 0 ) ) ;; Test V128 as a loop parameter, in particular that LLVM's "interpreted" V128 types (e.g. f64x2) ;; are correctly coerced to the canonical type the loop parameter PHI expects. (module (func (export "loop") (param $x f64) (result v128) local.get $x f64x2.splat loop $loop (param v128) (result v128) f64x2.neg end ) ) (assert_return (invoke "loop" (f64.const +1)) (v128.const f64x2 -1 -1)) (assert_return (invoke "loop" (f64.const -1)) (v128.const f64x2 +1 +1)) ;; Test V128 as an if parameter, in particular that LLVM's "interpreted" V128 types (e.g. f64x2) ;; are correctly coerced to the canonical type the if parameter PHI expects. (module (func (export "if-then") (param $x f64) (param $y i32) (result v128) local.get $x f64x2.splat local.get $y if (param v128) (result v128) f64x2.neg end ) ) (assert_return (invoke "if-then" (f64.const +1) (i32.const 0)) (v128.const f64x2 +1 +1)) (assert_return (invoke "if-then" (f64.const +1) (i32.const 1)) (v128.const f64x2 -1 -1)) (assert_return (invoke "if-then" (f64.const -1) (i32.const 0)) (v128.const f64x2 -1 -1)) (assert_return (invoke "if-then" (f64.const -1) (i32.const 1)) (v128.const f64x2 +1 +1)) (module (func (export "if-else") (param $x f64) (param $y i32) (result v128) local.get $x f64x2.splat local.get $y if (param v128) (result v128) f64x2.neg else f64x2.abs end ) ) (assert_return (invoke "if-else" (f64.const +1) (i32.const 0)) (v128.const f64x2 +1 +1)) (assert_return (invoke "if-else" (f64.const +1) (i32.const 1)) (v128.const f64x2 -1 -1)) (assert_return (invoke "if-else" (f64.const -1) (i32.const 0)) (v128.const f64x2 +1 +1)) (assert_return (invoke "if-else" (f64.const -1) (i32.const 1)) (v128.const f64x2 +1 +1)) ;; Test that this LLVM bug isn't triggered: https://bugs.llvm.org/show_bug.cgi?id=43514 (module (memory 1 1 shared) (func (param $2 i64) loop $loop (local.set $2 (i64.rem_s (local.get $2) (i64.load8_u offset=0 (i32.const 0)))) (br_if $loop (i32.const 0)) return end ;; $loop unreachable ) ) ;; Test that this LLVM bug isn't triggered: https://bugs.llvm.org/show_bug.cgi?id=43510 (module (func $8 (result v128) (result v128) (local $0 i32) (local $1 v128) v128.const i32x4 0xadbc5ab3 0x03c8f2fd 0x84d96029 0xf065dbc1 v128.const i32x4 0x9a8f38a3 0x09c641b2 0xc66a89ad 0x9be68049 f64x2.max local.set $1 loop $loop br $loop end ;; $loop unreachable ) ) ;; Test for this issue: https://github.com/WebAssembly/spec/issues/1224 (module (func (export "trunc") (result i32) (i32.trunc_f64_s (f64.const -2147483648.1) ) ) ) (assert_return (invoke "trunc") (i32.const -2147483648)) ================================================ FILE: Test/wavm/multi_memory.wast ================================================ ;; Test memory section structure (module (memory 0 0) (memory 0 0)) (module (memory 0 1) (memory 0 1)) (module (memory 1 256) (memory 1 256)) (module (memory 0 65536) (memory 0 65536)) (module (memory 0 0 shared) (memory 0 0 shared)) (module (memory 1 2 shared) (memory 1 2 shared)) (module (memory (import "spectest" "memory") 1 2) (memory 0 0)) (module (memory 1) (memory 1) (memory 1) (memory 1) (memory 1) (memory 1) (memory 1)) ;; Binary encoding (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\05\05\02" ;; memory section: 5 bytes, 2 entries "\00\01" ;; (memory 1) "\00\01" ;; (memory 1) ) (module binary "\00asm" "\01\00\00\00" ;; WebAssembly version 1 "\01\04\01" ;; Type section: 4 bytes, 1 entry "\60\00\00" ;; Function type () -> () "\03\02\01" ;; Function section: 2 bytes, 1 entry "\00" ;; Function 0: type 0 "\05\05\02" ;; memory section: 5 bytes, 2 entries "\00\01" ;; (memory 1) "\00\01" ;; (memory 1) "\0a\0c\01" ;; Code section "\0a\00" ;; function 0: 10 bytes, 0 local sets "\41\00" ;; i32.const 0 "\41\00" ;; i32.const 0 "\36\42\00\01" ;; i32.store 1 align=4 offset=0 "\0b" ;; end ) ;; Load/store (module (memory $a 1) (memory $b 2) (func (export "a.store32") (param $address i32) (param $value i32) (i32.store $a offset=0 align=4 (local.get $address) (local.get $value)) ) (func (export "b.store32") (param $address i32) (param $value i32) (i32.store $b offset=0 align=4 (local.get $address) (local.get $value)) ) (func (export "a.load32") (param $address i32) (result i32) (i32.load $a offset=0 align=4 (local.get $address)) ) (func (export "b.load32") (param $address i32) (result i32) (i32.load $b offset=0 align=4 (local.get $address)) ) ) (assert_return (invoke "a.load32" (i32.const 0)) (i32.const 0)) (assert_return (invoke "a.store32" (i32.const 0) (i32.const 0x01020304))) (assert_return (invoke "a.load32" (i32.const 0)) (i32.const 0x01020304)) (assert_return (invoke "b.load32" (i32.const 0)) (i32.const 0)) (assert_return (invoke "b.store32" (i32.const 0) (i32.const 0x05060708))) (assert_return (invoke "b.load32" (i32.const 0)) (i32.const 0x05060708)) (assert_return (invoke "a.load32" (i32.const 0)) (i32.const 0x01020304)) (assert_trap (invoke "a.load32" (i32.const 0x10000)) "out of bounds memory access") (assert_return (invoke "b.load32" (i32.const 0x10000)) (i32.const 0)) (assert_trap (invoke "b.load32" (i32.const 0x20000)) "out of bounds memory access") ;; Atomic load/store (module (memory $a 1 1 shared) (memory $b 2 2 shared) (func (export "a.atomic.store32") (param $address i32) (param $value i32) (i32.atomic.store $a offset=0 align=4 (local.get $address) (local.get $value)) ) (func (export "b.atomic.store32") (param $address i32) (param $value i32) (i32.atomic.store $b offset=0 align=4 (local.get $address) (local.get $value)) ) (func (export "a.atomic.load32") (param $address i32) (result i32) (i32.atomic.load $a offset=0 align=4 (local.get $address)) ) (func (export "b.atomic.load32") (param $address i32) (result i32) (i32.atomic.load $b offset=0 align=4 (local.get $address)) ) ) (assert_return (invoke "a.atomic.load32" (i32.const 0)) (i32.const 0)) (assert_return (invoke "a.atomic.store32" (i32.const 0) (i32.const 0x01020304))) (assert_return (invoke "a.atomic.load32" (i32.const 0)) (i32.const 0x01020304)) (assert_return (invoke "b.atomic.load32" (i32.const 0)) (i32.const 0)) (assert_return (invoke "b.atomic.store32" (i32.const 0) (i32.const 0x05060708))) (assert_return (invoke "b.atomic.load32" (i32.const 0)) (i32.const 0x05060708)) (assert_return (invoke "a.atomic.load32" (i32.const 0)) (i32.const 0x01020304)) (assert_trap (invoke "a.atomic.load32" (i32.const 0x10000)) "out of bounds memory access") (assert_return (invoke "b.atomic.load32" (i32.const 0x10000)) (i32.const 0)) (assert_trap (invoke "b.atomic.load32" (i32.const 0x20000)) "out of bounds memory access") ;; Active data segments (module (memory $a 1) (memory $b 1) (data (memory $a) (i32.const 0) "ABC\a7D") (data (memory $a) (i32.const 20) "WASM") (data (memory $b) (i32.const 0) "WASM") (data (memory $b) (i32.const 20) "ABC\a7D") (func (export "a.load8_u") (param $address i32) (result i32) (i32.load8_u $a (local.get $address)) ) (func (export "b.load8_u") (param $address i32) (result i32) (i32.load8_u $b (local.get $address)) ) ) (assert_return (invoke "a.load8_u" (i32.const 0)) (i32.const 65)) (assert_return (invoke "a.load8_u" (i32.const 1)) (i32.const 66)) (assert_return (invoke "a.load8_u" (i32.const 2)) (i32.const 67)) (assert_return (invoke "a.load8_u" (i32.const 3)) (i32.const 167)) (assert_return (invoke "a.load8_u" (i32.const 4)) (i32.const 68)) (assert_return (invoke "a.load8_u" (i32.const 5)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 6)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 7)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 16)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 17)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 18)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 19)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 20)) (i32.const 87)) (assert_return (invoke "a.load8_u" (i32.const 21)) (i32.const 65)) (assert_return (invoke "a.load8_u" (i32.const 22)) (i32.const 83)) (assert_return (invoke "a.load8_u" (i32.const 23)) (i32.const 77)) (assert_return (invoke "a.load8_u" (i32.const 24)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 0)) (i32.const 87)) (assert_return (invoke "b.load8_u" (i32.const 1)) (i32.const 65)) (assert_return (invoke "b.load8_u" (i32.const 2)) (i32.const 83)) (assert_return (invoke "b.load8_u" (i32.const 3)) (i32.const 77)) (assert_return (invoke "b.load8_u" (i32.const 4)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 5)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 6)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 7)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 16)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 17)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 18)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 19)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 20)) (i32.const 65)) (assert_return (invoke "b.load8_u" (i32.const 21)) (i32.const 66)) (assert_return (invoke "b.load8_u" (i32.const 22)) (i32.const 67)) (assert_return (invoke "b.load8_u" (i32.const 23)) (i32.const 167)) (assert_return (invoke "b.load8_u" (i32.const 24)) (i32.const 68)) ;; memory.size/memory.grow with multiple memories. (module (memory $a 0) (memory $b 0) (func (export "a.load_at_zero") (result i32) (i32.load $a (i32.const 0))) (func (export "a.store_at_zero") (i32.store $a (i32.const 0) (i32.const 2))) (func (export "a.load_at_page_size") (result i32) (i32.load $a (i32.const 0x10000))) (func (export "a.store_at_page_size") (i32.store $a (i32.const 0x10000) (i32.const 3))) (func (export "a.grow") (param $sz i32) (result i32) (memory.grow $a (local.get $sz))) (func (export "a.size") (result i32) (memory.size $a)) (func (export "b.load_at_zero") (result i32) (i32.load $b (i32.const 0))) (func (export "b.store_at_zero") (i32.store $b (i32.const 0) (i32.const 2))) (func (export "b.load_at_page_size") (result i32) (i32.load $b (i32.const 0x10000))) (func (export "b.store_at_page_size") (i32.store $b (i32.const 0x10000) (i32.const 3))) (func (export "b.grow") (param $sz i32) (result i32) (memory.grow $b (local.get $sz))) (func (export "b.size") (result i32) (memory.size $b)) ) (assert_return (invoke "a.size") (i32.const 0)) (assert_trap (invoke "a.store_at_zero") "out of bounds memory access") (assert_trap (invoke "a.load_at_zero") "out of bounds memory access") (assert_trap (invoke "a.store_at_page_size") "out of bounds memory access") (assert_trap (invoke "a.load_at_page_size") "out of bounds memory access") (assert_return (invoke "a.grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "a.size") (i32.const 1)) (assert_return (invoke "a.load_at_zero") (i32.const 0)) (assert_return (invoke "a.store_at_zero")) (assert_return (invoke "a.load_at_zero") (i32.const 2)) (assert_trap (invoke "a.store_at_page_size") "out of bounds memory access") (assert_trap (invoke "a.load_at_page_size") "out of bounds memory access") (assert_return (invoke "a.grow" (i32.const 4)) (i32.const 1)) (assert_return (invoke "a.size") (i32.const 5)) (assert_return (invoke "a.load_at_zero") (i32.const 2)) (assert_return (invoke "a.store_at_zero")) (assert_return (invoke "a.load_at_zero") (i32.const 2)) (assert_return (invoke "a.load_at_page_size") (i32.const 0)) (assert_return (invoke "a.store_at_page_size")) (assert_return (invoke "a.load_at_page_size") (i32.const 3)) (assert_return (invoke "b.size") (i32.const 0)) (assert_trap (invoke "b.store_at_zero") "out of bounds memory access") (assert_trap (invoke "b.load_at_zero") "out of bounds memory access") (assert_trap (invoke "b.store_at_page_size") "out of bounds memory access") (assert_trap (invoke "b.load_at_page_size") "out of bounds memory access") (assert_return (invoke "b.grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "b.size") (i32.const 1)) (assert_return (invoke "b.load_at_zero") (i32.const 0)) (assert_return (invoke "b.store_at_zero")) (assert_return (invoke "b.load_at_zero") (i32.const 2)) (assert_trap (invoke "b.store_at_page_size") "out of bounds memory access") (assert_trap (invoke "b.load_at_page_size") "out of bounds memory access") (assert_return (invoke "b.grow" (i32.const 4)) (i32.const 1)) (assert_return (invoke "b.size") (i32.const 5)) (assert_return (invoke "b.load_at_zero") (i32.const 2)) (assert_return (invoke "b.store_at_zero")) (assert_return (invoke "b.load_at_zero") (i32.const 2)) (assert_return (invoke "b.load_at_page_size") (i32.const 0)) (assert_return (invoke "b.store_at_page_size")) (assert_return (invoke "b.load_at_page_size") (i32.const 3)) (module (memory $a 0) (memory $b 0) (func (export "a.grow") (param i32) (result i32) (memory.grow $a (local.get 0))) (func (export "b.grow") (param i32) (result i32) (memory.grow $b (local.get 0))) ) (assert_return (invoke "a.grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "a.grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "a.grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "a.grow" (i32.const 2)) (i32.const 1)) (assert_return (invoke "a.grow" (i32.const 800)) (i32.const 3)) (assert_return (invoke "a.grow" (i32.const 0x10000)) (i32.const -1)) (assert_return (invoke "a.grow" (i32.const 64736)) (i32.const -1)) (assert_return (invoke "a.grow" (i32.const 1)) (i32.const 803)) (assert_return (invoke "b.grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "b.grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "b.grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "b.grow" (i32.const 2)) (i32.const 1)) (assert_return (invoke "b.grow" (i32.const 800)) (i32.const 3)) (assert_return (invoke "b.grow" (i32.const 0x10000)) (i32.const -1)) (assert_return (invoke "b.grow" (i32.const 64736)) (i32.const -1)) (assert_return (invoke "b.grow" (i32.const 1)) (i32.const 803)) (module (memory $a 0 10) (memory $b 0 10) (func (export "a.grow") (param i32) (result i32) (memory.grow $a (local.get 0))) (func (export "b.grow") (param i32) (result i32) (memory.grow $b (local.get 0))) ) (assert_return (invoke "a.grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "a.grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "a.grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "a.grow" (i32.const 2)) (i32.const 2)) (assert_return (invoke "a.grow" (i32.const 6)) (i32.const 4)) (assert_return (invoke "a.grow" (i32.const 0)) (i32.const 10)) (assert_return (invoke "a.grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "a.grow" (i32.const 0x10000)) (i32.const -1)) (assert_return (invoke "b.grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "b.grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "b.grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "b.grow" (i32.const 2)) (i32.const 2)) (assert_return (invoke "b.grow" (i32.const 6)) (i32.const 4)) (assert_return (invoke "b.grow" (i32.const 0)) (i32.const 10)) (assert_return (invoke "b.grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "b.grow" (i32.const 0x10000)) (i32.const -1)) ;; memory.fill (module (memory $a 1) (memory $b 1) (func (export "a.fill") (param i32 i32 i32) (memory.fill $a (local.get 0) (local.get 1) (local.get 2))) (func (export "b.fill") (param i32 i32 i32) (memory.fill $b (local.get 0) (local.get 1) (local.get 2))) (func (export "a.load8_u") (param i32) (result i32) (i32.load8_u $a (local.get 0))) (func (export "b.load8_u") (param i32) (result i32) (i32.load8_u $b (local.get 0))) ) ;; Basic fill test. (invoke "a.fill" (i32.const 1) (i32.const 0xff) (i32.const 3)) (assert_return (invoke "a.load8_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 1)) (i32.const 0xff)) (assert_return (invoke "a.load8_u" (i32.const 2)) (i32.const 0xff)) (assert_return (invoke "a.load8_u" (i32.const 3)) (i32.const 0xff)) (assert_return (invoke "a.load8_u" (i32.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "a.fill" (i32.const 0) (i32.const 0xbbaa) (i32.const 2)) (assert_return (invoke "a.load8_u" (i32.const 0)) (i32.const 0xaa)) (assert_return (invoke "a.load8_u" (i32.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "a.fill" (i32.const 0) (i32.const 0) (i32.const 0x10000)) ;; Out-of-bounds fills trap before executing any writes. (assert_trap (invoke "a.fill" (i32.const 0xff00) (i32.const 1) (i32.const 0x101)) "out of bounds memory access") (assert_return (invoke "a.load8_u" (i32.const 0xff00)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 0xffff)) (i32.const 0)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "a.fill" (i32.const 0x10000) (i32.const 0) (i32.const 0)) ;; Out-of-bounds zero-byte fills trap. (assert_trap (invoke "a.fill" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") ;; Basic fill test. (invoke "b.fill" (i32.const 1) (i32.const 0xff) (i32.const 3)) (assert_return (invoke "b.load8_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 1)) (i32.const 0xff)) (assert_return (invoke "b.load8_u" (i32.const 2)) (i32.const 0xff)) (assert_return (invoke "b.load8_u" (i32.const 3)) (i32.const 0xff)) (assert_return (invoke "b.load8_u" (i32.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "b.fill" (i32.const 0) (i32.const 0xbbaa) (i32.const 2)) (assert_return (invoke "b.load8_u" (i32.const 0)) (i32.const 0xaa)) (assert_return (invoke "b.load8_u" (i32.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "b.fill" (i32.const 0) (i32.const 0) (i32.const 0x10000)) ;; Out-of-bounds fills trap before executing any writes. (assert_trap (invoke "b.fill" (i32.const 0xff00) (i32.const 1) (i32.const 0x101)) "out of bounds memory access") (assert_return (invoke "b.load8_u" (i32.const 0xff00)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 0xffff)) (i32.const 0)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "b.fill" (i32.const 0x10000) (i32.const 0) (i32.const 0)) ;; Out-of-bounds zero-byte fills trap. (assert_trap (invoke "b.fill" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "out of bounds memory access") ;; memory.copy (module (memory $a (data "\aa\bb\cc\dd")) (memory $b (data "\11\22\33\44")) (func (export "aa.copy") (param i32 i32 i32) (memory.copy $a $a (local.get 0) (local.get 1) (local.get 2))) (func (export "ba.copy") (param i32 i32 i32) (memory.copy $b $a (local.get 0) (local.get 1) (local.get 2))) (func (export "bb.copy") (param i32 i32 i32) (memory.copy $b $b (local.get 0) (local.get 1) (local.get 2))) (func (export "a.load8_u") (param i32) (result i32) (i32.load8_u $a (local.get 0))) (func (export "b.load8_u") (param i32) (result i32) (i32.load8_u $b (local.get 0))) ) ;; Non-overlapping intra-memory copy. (invoke "aa.copy" (i32.const 10) (i32.const 0) (i32.const 4)) (assert_return (invoke "a.load8_u" (i32.const 9)) (i32.const 0)) (assert_return (invoke "a.load8_u" (i32.const 10)) (i32.const 0xaa)) (assert_return (invoke "a.load8_u" (i32.const 11)) (i32.const 0xbb)) (assert_return (invoke "a.load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "a.load8_u" (i32.const 13)) (i32.const 0xdd)) (assert_return (invoke "a.load8_u" (i32.const 14)) (i32.const 0)) ;; Non-overlapping intra-memory copy. (invoke "bb.copy" (i32.const 10) (i32.const 0) (i32.const 4)) (assert_return (invoke "b.load8_u" (i32.const 9)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 10)) (i32.const 0x11)) (assert_return (invoke "b.load8_u" (i32.const 11)) (i32.const 0x22)) (assert_return (invoke "b.load8_u" (i32.const 12)) (i32.const 0x33)) (assert_return (invoke "b.load8_u" (i32.const 13)) (i32.const 0x44)) (assert_return (invoke "b.load8_u" (i32.const 14)) (i32.const 0)) ;; Copy between memories (invoke "ba.copy" (i32.const 20) (i32.const 0) (i32.const 4)) (assert_return (invoke "b.load8_u" (i32.const 19)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 20)) (i32.const 0xaa)) (assert_return (invoke "b.load8_u" (i32.const 21)) (i32.const 0xbb)) (assert_return (invoke "b.load8_u" (i32.const 22)) (i32.const 0xcc)) (assert_return (invoke "b.load8_u" (i32.const 23)) (i32.const 0xdd)) (assert_return (invoke "b.load8_u" (i32.const 24)) (i32.const 0)) ;; memory.init (module (memory $a 1) (memory $b 1) (data $s "\aa\bb\cc\dd") (func (export "a.init") (param i32 i32 i32) (memory.init $a $s (local.get 0) (local.get 1) (local.get 2))) (func (export "b.init") (param i32 i32 i32) (memory.init $b $s (local.get 0) (local.get 1) (local.get 2))) (func (export "a.load8_u") (param i32) (result i32) (i32.load8_u $a (local.get 0))) (func (export "b.load8_u") (param i32) (result i32) (i32.load8_u $b (local.get 0))) ) (invoke "a.init" (i32.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "a.load8_u" (i32.const 0)) (i32.const 0xbb)) (assert_return (invoke "a.load8_u" (i32.const 1)) (i32.const 0xcc)) (assert_return (invoke "a.load8_u" (i32.const 2)) (i32.const 0)) (invoke "b.init" (i32.const 2) (i32.const 0) (i32.const 4)) (assert_return (invoke "b.load8_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 1)) (i32.const 0)) (assert_return (invoke "b.load8_u" (i32.const 2)) (i32.const 0xaa)) (assert_return (invoke "b.load8_u" (i32.const 3)) (i32.const 0xbb)) (assert_return (invoke "b.load8_u" (i32.const 4)) (i32.const 0xcc)) (assert_return (invoke "b.load8_u" (i32.const 5)) (i32.const 0xdd)) (assert_return (invoke "b.load8_u" (i32.const 6)) (i32.const 0)) ;; Init ending at memory limit and segment limit is ok. (invoke "a.init" (i32.const 0xfffc) (i32.const 0) (i32.const 4)) (invoke "b.init" (i32.const 0xfffc) (i32.const 0) (i32.const 4)) ================================================ FILE: Test/wavm/reference_types.wast ================================================ ;; multiple tables (module (table $t1 0 funcref) (table $t2 0 funcref) ) ;; element segments in multiple tables (module (table $t1 1 funcref) (table $t2 1 funcref) (elem (table $t1) (i32.const 0) $f) (elem (table $t2) (i32.const 0) $f) (func $f) ) ;; non-funcref tables (module (table $t 0 externref) ) ;; reference typed values (module (func (param externref))) (module (func (param funcref))) (module (func (result externref) ref.null extern)) (module (func (result funcref) ref.null func)) (module (global externref (ref.null extern))) (module (global funcref (ref.null func))) (module (global (mut externref) (ref.null extern))) (module (global (mut funcref) (ref.null func))) ;; table.get (module (table $t1 4 funcref) (table $t2 3 funcref) (elem (table $t1) (i32.const 0) $0 $1 $2 $3) (elem (table $t2) (i32.const 1) $4 $5) (func $0 (result i32) (i32.const 0)) (func $1 (result i32) (i32.const 1)) (func $2 (result i32) (i32.const 2)) (func $3 (result i32) (i32.const 3)) (func $4 (result i32) (i32.const 4)) (func $5 (result i32) (i32.const 5)) (func (export "table.get $t1") (param $index i32) (result funcref) (table.get $t1 (local.get $index)) ) (func (export "table.get $t2") (param $index i32) (result funcref) (table.get $t2 (local.get $index)) ) ) (invoke "table.get $t1" (i32.const 0)) (invoke "table.get $t1" (i32.const 1)) (invoke "table.get $t1" (i32.const 2)) (invoke "table.get $t1" (i32.const 3)) (assert_trap (invoke "table.get $t1" (i32.const 4)) "undefined element") (assert_trap (invoke "table.get $t1" (i32.const -1)) "undefined element") (invoke "table.get $t2" (i32.const 0)) (invoke "table.get $t2" (i32.const 1)) (invoke "table.get $t2" (i32.const 2)) (assert_trap (invoke "table.get $t2" (i32.const 3)) "undefined element") (assert_trap (invoke "table.get $t2" (i32.const -1)) "undefined element") ;; call_indirect with non-zero table index (module (table $t1 4 externref) (table $t2 4 funcref) (table $t3 4 funcref) (elem (table $t2) (i32.const 0) $0 $1 $2 $3) (elem (table $t3) (i32.const 0) $4 $5) (func $0 (result i32) (i32.const 0)) (func $1 (result i32) (i32.const 1)) (func $2 (result i32) (i32.const 2)) (func $3 (result i32) (i32.const 3)) (func $4 (result i32) (i32.const 4)) (func $5 (result i32) (i32.const 5)) (func (export "call_indirect $t2") (param $index i32) (result i32) (call_indirect $t2 (result i32) (local.get $index)) ) (func (export "call_indirect $t3") (param $index i32) (result i32) (call_indirect 2 (result i32) (local.get $index)) ) ) (assert_return (invoke "call_indirect $t2" (i32.const 0)) (i32.const 0)) (assert_return (invoke "call_indirect $t2" (i32.const 1)) (i32.const 1)) (assert_return (invoke "call_indirect $t2" (i32.const 2)) (i32.const 2)) (assert_return (invoke "call_indirect $t2" (i32.const 3)) (i32.const 3)) (assert_return (invoke "call_indirect $t3" (i32.const 0)) (i32.const 4)) (assert_return (invoke "call_indirect $t3" (i32.const 1)) (i32.const 5)) (assert_trap (invoke "call_indirect $t3" (i32.const 2)) "uninitialized") (assert_trap (invoke "call_indirect $t3" (i32.const 3)) "uninitialized") ================================================ FILE: Test/wavm/simd.wast ================================================ ;; v128 globals (module $M (global (export "a") v128 (v128.const f32x4 0 1 2 3)) (global (export "b") (mut v128) (v128.const f32x4 4 5 6 7)) ) (register "M" $M) (module (global $a (import "M" "a") v128) (global $b (import "M" "b") (mut v128)) (global $c v128 (global.get $a)) (global $d v128 (v128.const i32x4 8 9 10 11)) (global $e (mut v128) (global.get $a)) (global $f (mut v128) (v128.const i32x4 12 13 14 15)) (func (export "get-a") (result v128) (global.get $a)) (func (export "get-b") (result v128) (global.get $b)) (func (export "get-c") (result v128) (global.get $c)) (func (export "get-d") (result v128) (global.get $d)) (func (export "get-e") (result v128) (global.get $e)) (func (export "get-f") (result v128) (global.get $f)) (func (export "set-b") (param $value v128) (global.set $b (local.get $value))) (func (export "set-e") (param $value v128) (global.set $e (local.get $value))) (func (export "set-f") (param $value v128) (global.set $f (local.get $value))) ) (assert_return (invoke "get-a") (v128.const f32x4 0 1 2 3)) (assert_return (invoke "get-b") (v128.const f32x4 4 5 6 7)) (assert_return (invoke "get-c") (v128.const f32x4 0 1 2 3)) (assert_return (invoke "get-d") (v128.const i32x4 8 9 10 11)) (assert_return (invoke "get-e") (v128.const f32x4 0 1 2 3)) (assert_return (invoke "get-f") (v128.const i32x4 12 13 14 15)) (invoke "set-b" (v128.const f64x2 nan:0x1 nan:0x2)) (assert_return (invoke "get-b") (v128.const f64x2 nan:0x1 nan:0x2)) (invoke "set-e" (v128.const f64x2 -nan:0x3 +inf)) (assert_return (invoke "get-e") (v128.const f64x2 -nan:0x3 +inf)) (invoke "set-f" (v128.const f32x4 -inf +3.14 10.0e30 +nan:0x42)) (assert_return (invoke "get-f") (v128.const f32x4 -inf +3.14 10.0e30 +nan:0x42)) (assert_invalid (module (global v128 (i32.const 0))) "invalid initializer expression") (assert_invalid (module (global v128 (i64.const 0))) "invalid initializer expression") (assert_invalid (module (global v128 (f32.const 0))) "invalid initializer expression") (assert_invalid (module (global v128 (f64.const 0))) "invalid initializer expression") (assert_invalid (module (global $i32 i32 (i32.const 0)) (global v128 (global.get $i32))) "invalid initializer expression") ;; v128.const initializer decoded from binary (opcode 0xfd 0x0c) (module binary "\00asm\01\00\00\00" "\01\05" ;; type section, 5 bytes "\01" ;; 1 type "\60\00\01\7b" ;; () -> v128 "\03\02" ;; function section, 2 bytes "\01" ;; 1 function "\00" ;; type 0 "\06\16" ;; global section, 22 bytes "\01" ;; 1 global "\7b\00" ;; v128, immutable "\fd\0c" ;; v128.const "\00\01\02\03" ;; literal bytes 0-3 "\04\05\06\07" ;; literal bytes 4-7 "\08\09\0a\0b" ;; literal bytes 8-11 "\0c\0d\0e\0f" ;; literal bytes 12-15 "\0b" ;; end "\07\07" ;; export section, 7 bytes "\01" ;; 1 export "\03get" ;; name "\00\00" ;; function 0 "\0a\06" ;; code section, 6 bytes "\01" ;; 1 body "\04\00\23\00\0b" ;; body: no locals, global.get 0, end ) (assert_return (invoke "get") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (assert_malformed (module binary "\00asm" "\01\00\00\00" ;; 1 section "\06\86\80\80\80\00" ;; global section "\01" ;; 1 global "\7b" ;; v128 "\00" ;; immutable "\fd\00" ;; v128.load "\0b" ;; end ) "invalid initializer expression" ) ;; TODO: v128 parameters ;; TODO: v128 locals ;; TODO: v128 results ;; v128.const (module (func (export "v128.const/i8x16") (result v128) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (func (export "v128.const/i16x8") (result v128) (v128.const i16x8 16 17 18 19 20 21 22 23)) (func (export "v128.const/i32x4") (result v128) (v128.const i32x4 24 25 26 27)) (func (export "v128.const/i64x2") (result v128) (v128.const i64x2 28 29)) (func (export "v128.const/f32x4") (result v128) (v128.const f32x4 30.5 31.5 32.5 33.5)) (func (export "v128.const/f64x2") (result v128) (v128.const f64x2 34.5 35.5)) ) ;; v128.load/store (module (memory 1) (func (export "v128.load") (param $address i32) (result v128) (v128.load align=16 (local.get $address))) (func (export "v128.store") (param $address i32) (param $value v128) (v128.store align=16 (local.get $address) (local.get $value))) ) (assert_invalid (module (memory 1) (func (drop (v128.load align=32 (i32.const 0))))) "invalid alignment") (assert_invalid (module (memory 1) (func (drop (v128.store align=32 (i32.const 0))))) "invalid alignment") ;; *.splat (module (func (export "i8x16.splat") (param $a i32) (result v128) (i8x16.splat (local.get $a))) (func (export "i16x8.splat") (param $a i32) (result v128) (i16x8.splat (local.get $a))) (func (export "i32x4.splat") (param $a i32) (result v128) (i32x4.splat (local.get $a))) (func (export "i64x2.splat") (param $a i64) (result v128) (i64x2.splat (local.get $a))) (func (export "f32x4.splat") (param $a f32) (result v128) (f32x4.splat (local.get $a))) (func (export "f64x2.splat") (param $a f64) (result v128) (f64x2.splat (local.get $a))) ) ;; i*x*.load_splat (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a") (func (export "v128.load8_splat") (param $address i32) (result v128) (v128.load8_splat offset=0 align=1 (local.get $address))) ) (assert_return (invoke "v128.load8_splat" (i32.const 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "v128.load8_splat" (i32.const 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "v128.load8_splat" (i32.const 2)) (v128.const i8x16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)) (assert_return (invoke "v128.load8_splat" (i32.const 3)) (v128.const i8x16 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a") (func (export "v128.load16_splat") (param $address i32) (result v128) (v128.load16_splat offset=0 align=1 (local.get $address))) ) (assert_return (invoke "v128.load16_splat" (i32.const 0)) (v128.const i16x8 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 0x0100)) (assert_return (invoke "v128.load16_splat" (i32.const 1)) (v128.const i16x8 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201 0x0201)) (assert_return (invoke "v128.load16_splat" (i32.const 2)) (v128.const i16x8 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302 0x0302)) (assert_return (invoke "v128.load16_splat" (i32.const 3)) (v128.const i16x8 0x0403 0x0403 0x0403 0x0403 0x0403 0x0403 0x0403 0x0403)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a") (func (export "v128.load32_splat") (param $address i32) (result v128) (v128.load32_splat offset=0 align=1 (local.get $address))) ) (assert_return (invoke "v128.load32_splat" (i32.const 0)) (v128.const i32x4 0x03020100 0x03020100 0x03020100 0x03020100)) (assert_return (invoke "v128.load32_splat" (i32.const 1)) (v128.const i32x4 0x04030201 0x04030201 0x04030201 0x04030201)) (assert_return (invoke "v128.load32_splat" (i32.const 2)) (v128.const i32x4 0x05040302 0x05040302 0x05040302 0x05040302)) (assert_return (invoke "v128.load32_splat" (i32.const 3)) (v128.const i32x4 0x06050403 0x06050403 0x06050403 0x06050403)) (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a") (func (export "v128.load64_splat") (param $address i32) (result v128) (v128.load64_splat offset=0 align=1 (local.get $address))) ) (assert_return (invoke "v128.load64_splat" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x0706050403020100)) (assert_return (invoke "v128.load64_splat" (i32.const 1)) (v128.const i64x2 0x0807060504030201 0x0807060504030201)) (assert_return (invoke "v128.load64_splat" (i32.const 2)) (v128.const i64x2 0x0908070605040302 0x0908070605040302)) (assert_return (invoke "v128.load64_splat" (i32.const 3)) (v128.const i64x2 0x0a09080706050403 0x0a09080706050403)) ;; *.extract_lane* (module (func (export "i8x16.extract_lane_s/0") (param $a v128) (result i32) (i8x16.extract_lane_s 0 (local.get $a))) (func (export "i8x16.extract_lane_s/1") (param $a v128) (result i32) (i8x16.extract_lane_s 1 (local.get $a))) (func (export "i8x16.extract_lane_s/2") (param $a v128) (result i32) (i8x16.extract_lane_s 2 (local.get $a))) (func (export "i8x16.extract_lane_s/3") (param $a v128) (result i32) (i8x16.extract_lane_s 3 (local.get $a))) (func (export "i8x16.extract_lane_s/4") (param $a v128) (result i32) (i8x16.extract_lane_s 4 (local.get $a))) (func (export "i8x16.extract_lane_s/5") (param $a v128) (result i32) (i8x16.extract_lane_s 5 (local.get $a))) (func (export "i8x16.extract_lane_s/6") (param $a v128) (result i32) (i8x16.extract_lane_s 6 (local.get $a))) (func (export "i8x16.extract_lane_s/7") (param $a v128) (result i32) (i8x16.extract_lane_s 7 (local.get $a))) (func (export "i8x16.extract_lane_s/8") (param $a v128) (result i32) (i8x16.extract_lane_s 8 (local.get $a))) (func (export "i8x16.extract_lane_s/9") (param $a v128) (result i32) (i8x16.extract_lane_s 9 (local.get $a))) (func (export "i8x16.extract_lane_s/10") (param $a v128) (result i32) (i8x16.extract_lane_s 10 (local.get $a))) (func (export "i8x16.extract_lane_s/11") (param $a v128) (result i32) (i8x16.extract_lane_s 11 (local.get $a))) (func (export "i8x16.extract_lane_s/12") (param $a v128) (result i32) (i8x16.extract_lane_s 12 (local.get $a))) (func (export "i8x16.extract_lane_s/13") (param $a v128) (result i32) (i8x16.extract_lane_s 13 (local.get $a))) (func (export "i8x16.extract_lane_s/14") (param $a v128) (result i32) (i8x16.extract_lane_s 14 (local.get $a))) (func (export "i8x16.extract_lane_s/15") (param $a v128) (result i32) (i8x16.extract_lane_s 15 (local.get $a))) (func (export "i8x16.extract_lane_u/0") (param $a v128) (result i32) (i8x16.extract_lane_u 0 (local.get $a))) (func (export "i8x16.extract_lane_u/1") (param $a v128) (result i32) (i8x16.extract_lane_u 1 (local.get $a))) (func (export "i8x16.extract_lane_u/2") (param $a v128) (result i32) (i8x16.extract_lane_u 2 (local.get $a))) (func (export "i8x16.extract_lane_u/3") (param $a v128) (result i32) (i8x16.extract_lane_u 3 (local.get $a))) (func (export "i8x16.extract_lane_u/4") (param $a v128) (result i32) (i8x16.extract_lane_u 4 (local.get $a))) (func (export "i8x16.extract_lane_u/5") (param $a v128) (result i32) (i8x16.extract_lane_u 5 (local.get $a))) (func (export "i8x16.extract_lane_u/6") (param $a v128) (result i32) (i8x16.extract_lane_u 6 (local.get $a))) (func (export "i8x16.extract_lane_u/7") (param $a v128) (result i32) (i8x16.extract_lane_u 7 (local.get $a))) (func (export "i8x16.extract_lane_u/8") (param $a v128) (result i32) (i8x16.extract_lane_u 8 (local.get $a))) (func (export "i8x16.extract_lane_u/9") (param $a v128) (result i32) (i8x16.extract_lane_u 9 (local.get $a))) (func (export "i8x16.extract_lane_u/10") (param $a v128) (result i32) (i8x16.extract_lane_u 10 (local.get $a))) (func (export "i8x16.extract_lane_u/11") (param $a v128) (result i32) (i8x16.extract_lane_u 11 (local.get $a))) (func (export "i8x16.extract_lane_u/12") (param $a v128) (result i32) (i8x16.extract_lane_u 12 (local.get $a))) (func (export "i8x16.extract_lane_u/13") (param $a v128) (result i32) (i8x16.extract_lane_u 13 (local.get $a))) (func (export "i8x16.extract_lane_u/14") (param $a v128) (result i32) (i8x16.extract_lane_u 14 (local.get $a))) (func (export "i8x16.extract_lane_u/15") (param $a v128) (result i32) (i8x16.extract_lane_u 15 (local.get $a))) (func (export "i16x8.extract_lane_s/0") (param $a v128) (result i32) (i16x8.extract_lane_s 0 (local.get $a))) (func (export "i16x8.extract_lane_s/1") (param $a v128) (result i32) (i16x8.extract_lane_s 1 (local.get $a))) (func (export "i16x8.extract_lane_s/2") (param $a v128) (result i32) (i16x8.extract_lane_s 2 (local.get $a))) (func (export "i16x8.extract_lane_s/3") (param $a v128) (result i32) (i16x8.extract_lane_s 3 (local.get $a))) (func (export "i16x8.extract_lane_s/4") (param $a v128) (result i32) (i16x8.extract_lane_s 4 (local.get $a))) (func (export "i16x8.extract_lane_s/5") (param $a v128) (result i32) (i16x8.extract_lane_s 5 (local.get $a))) (func (export "i16x8.extract_lane_s/6") (param $a v128) (result i32) (i16x8.extract_lane_s 6 (local.get $a))) (func (export "i16x8.extract_lane_s/7") (param $a v128) (result i32) (i16x8.extract_lane_s 7 (local.get $a))) (func (export "i16x8.extract_lane_u/0") (param $a v128) (result i32) (i16x8.extract_lane_u 0 (local.get $a))) (func (export "i16x8.extract_lane_u/1") (param $a v128) (result i32) (i16x8.extract_lane_u 1 (local.get $a))) (func (export "i16x8.extract_lane_u/2") (param $a v128) (result i32) (i16x8.extract_lane_u 2 (local.get $a))) (func (export "i16x8.extract_lane_u/3") (param $a v128) (result i32) (i16x8.extract_lane_u 3 (local.get $a))) (func (export "i16x8.extract_lane_u/4") (param $a v128) (result i32) (i16x8.extract_lane_u 4 (local.get $a))) (func (export "i16x8.extract_lane_u/5") (param $a v128) (result i32) (i16x8.extract_lane_u 5 (local.get $a))) (func (export "i16x8.extract_lane_u/6") (param $a v128) (result i32) (i16x8.extract_lane_u 6 (local.get $a))) (func (export "i16x8.extract_lane_u/7") (param $a v128) (result i32) (i16x8.extract_lane_u 7 (local.get $a))) (func (export "i32x4.extract_lane/0") (param $a v128) (result i32) (i32x4.extract_lane 0 (local.get $a))) (func (export "i32x4.extract_lane/1") (param $a v128) (result i32) (i32x4.extract_lane 1 (local.get $a))) (func (export "i32x4.extract_lane/2") (param $a v128) (result i32) (i32x4.extract_lane 2 (local.get $a))) (func (export "i32x4.extract_lane/3") (param $a v128) (result i32) (i32x4.extract_lane 3 (local.get $a))) (func (export "i64x2.extract_lane/0") (param $a v128) (result i64) (i64x2.extract_lane 0 (local.get $a))) (func (export "i64x2.extract_lane/1") (param $a v128) (result i64) (i64x2.extract_lane 1 (local.get $a))) (func (export "f32x4.extract_lane/0") (param $a v128) (result f32) (f32x4.extract_lane 0 (local.get $a))) (func (export "f32x4.extract_lane/1") (param $a v128) (result f32) (f32x4.extract_lane 1 (local.get $a))) (func (export "f32x4.extract_lane/2") (param $a v128) (result f32) (f32x4.extract_lane 2 (local.get $a))) (func (export "f32x4.extract_lane/3") (param $a v128) (result f32) (f32x4.extract_lane 3 (local.get $a))) (func (export "f64x2.extract_lane/0") (param $a v128) (result f64) (f64x2.extract_lane 0 (local.get $a))) (func (export "f64x2.extract_lane/1") (param $a v128) (result f64) (f64x2.extract_lane 1 (local.get $a))) ) ;; *.replace_lane (module (func (export "i8x16.replace_lane/0") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 0 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/1") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 1 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/2") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 2 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/3") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 3 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/4") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 4 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/5") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 5 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/6") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 6 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/7") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 7 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/8") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 8 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/9") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 9 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/10") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 10 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/11") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 11 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/12") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 12 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/13") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 13 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/14") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 14 (local.get $a) (local.get $b))) (func (export "i8x16.replace_lane/15") (param $a v128) (param $b i32) (result v128) (i8x16.replace_lane 15 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/0") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 0 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/1") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 1 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/2") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 2 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/3") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 3 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/4") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 4 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/5") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 5 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/6") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 6 (local.get $a) (local.get $b))) (func (export "i16x8.replace_lane/7") (param $a v128) (param $b i32) (result v128) (i16x8.replace_lane 7 (local.get $a) (local.get $b))) (func (export "i32x4.replace_lane/0") (param $a v128) (param $b i32) (result v128) (i32x4.replace_lane 0 (local.get $a) (local.get $b))) (func (export "i32x4.replace_lane/1") (param $a v128) (param $b i32) (result v128) (i32x4.replace_lane 1 (local.get $a) (local.get $b))) (func (export "i32x4.replace_lane/2") (param $a v128) (param $b i32) (result v128) (i32x4.replace_lane 2 (local.get $a) (local.get $b))) (func (export "i32x4.replace_lane/3") (param $a v128) (param $b i32) (result v128) (i32x4.replace_lane 3 (local.get $a) (local.get $b))) (func (export "i64x2.replace_lane/0") (param $a v128) (param $b i64) (result v128) (i64x2.replace_lane 0 (local.get $a) (local.get $b))) (func (export "i64x2.replace_lane/1") (param $a v128) (param $b i64) (result v128) (i64x2.replace_lane 1 (local.get $a) (local.get $b))) (func (export "f32x4.replace_lane/0") (param $a v128) (param $b f32) (result v128) (f32x4.replace_lane 0 (local.get $a) (local.get $b))) (func (export "f32x4.replace_lane/1") (param $a v128) (param $b f32) (result v128) (f32x4.replace_lane 1 (local.get $a) (local.get $b))) (func (export "f32x4.replace_lane/2") (param $a v128) (param $b f32) (result v128) (f32x4.replace_lane 2 (local.get $a) (local.get $b))) (func (export "f32x4.replace_lane/3") (param $a v128) (param $b f32) (result v128) (f32x4.replace_lane 3 (local.get $a) (local.get $b))) (func (export "f64x2.replace_lane/0") (param $a v128) (param $b f64) (result v128) (f64x2.replace_lane 0 (local.get $a) (local.get $b))) (func (export "f64x2.replace_lane/1") (param $a v128) (param $b f64) (result v128) (f64x2.replace_lane 1 (local.get $a) (local.get $b))) ) ;; i8x16.swizzle (module (func (export "i8x16.swizzle") (param $elements v128) (param $indices v128) (result v128) (i8x16.swizzle (local.get $elements) (local.get $indices))) ) (assert_return (invoke "i8x16.swizzle" (v128.const i8x16 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) ) (v128.const i8x16 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100)) (assert_return (invoke "i8x16.swizzle" (v128.const i8x16 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115) (v128.const i8x16 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -7 7 -8 8) ) (v128.const i8x16 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108)) (assert_return (invoke "i8x16.swizzle" (v128.const i8x16 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115) (v128.const i8x16 9 16 10 17 11 18 12 19 13 20 14 21 15 22 16 23) ) (v128.const i8x16 109 0 110 0 111 0 112 0 113 0 114 0 115 0 0 0)) ;; i8x16.shuffle (module (func (export "i8x16.shuffle/0123456789abcdef") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (local.get $a) (local.get $b))) (func (export "i8x16.shuffle/ghijklmnopqrstuv") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 (local.get $a) (local.get $b))) (func (export "i8x16.shuffle/vutsrqponmlkjihg") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 (local.get $a) (local.get $b))) (func (export "i8x16.shuffle/fedcba9876543210") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (local.get $a) (local.get $b))) (func (export "i8x16.shuffle/0000000000000000") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (local.get $a) (local.get $b))) (func (export "i8x16.shuffle/gggggggggggggggg") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 (local.get $a) (local.get $b))) (func (export "i8x16.shuffle/00000000gggggggg") (param $a v128) (param $b v128) (result v128) (i8x16.shuffle 0 0 0 0 0 0 0 0 16 16 16 16 16 16 16 16 (local.get $a) (local.get $b))) ) ;; i*.narrow* (module (func (export "i8x16.narrow_i16x8_s") (param $a v128) (param $b v128) (result v128) (i8x16.narrow_i16x8_s (local.get $a) (local.get $b))) ) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 0 100 200 300 400 500 600 700) (v128.const i16x8 0 -100 -200 -300 -400 -500 -600 -700)) (v128.const i8x16 0 100 127 127 127 127 127 127 0 -100 -128 -128 -128 -128 -128 -128)) (module (func (export "i8x16.narrow_i16x8_u") (param $a v128) (param $b v128) (result v128) (i8x16.narrow_i16x8_u (local.get $a) (local.get $b))) ) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 0 100 200 300 400 500 600 700) (v128.const i16x8 0 -100 -200 -300 -400 -500 -600 -700)) (v128.const i8x16 0 100 200 255 255 255 255 255 0 0 0 0 0 0 0 0)) (module (func (export "i16x8.narrow_i32x4_s") (param $a v128) (param $b v128) (result v128) (i16x8.narrow_i32x4_s (local.get $a) (local.get $b))) ) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 0 15000 25000 35000) (v128.const i32x4 0 -15000 -25000 -35000)) (v128.const i16x8 0 15000 25000 32767 0 -15000 -25000 -32768)) (module (func (export "i16x8.narrow_i32x4_u") (param $a v128) (param $b v128) (result v128) (i16x8.narrow_i32x4_u (local.get $a) (local.get $b))) ) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 0 15000 25000 35000) (v128.const i32x4 0 -15000 -25000 -35000)) (v128.const i16x8 0 15000 25000 35000 0 0 0 0)) ;; i*.widen* (module (func (export "i16x8.extend_low_i8x16_s") (param $a v128) (result v128) (i16x8.extend_low_i8x16_s (local.get $a))) ) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 0 +1 -2 +3 -4 +5 -6 +7 -8 +9 -10 +11 -12 +13 -14 +15)) (v128.const i16x8 0 +1 -2 +3 -4 +5 -6 +7 )) (module (func (export "i16x8.extend_high_i8x16_s") (param $a v128) (result v128) (i16x8.extend_high_i8x16_s (local.get $a))) ) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 0 +1 -2 +3 -4 +5 -6 +7 -8 +9 -10 +11 -12 +13 -14 +15)) (v128.const i16x8 -8 +9 -10 +11 -12 +13 -14 +15)) (module (func (export "i16x8.extend_low_i8x16_u") (param $a v128) (result v128) (i16x8.extend_low_i8x16_u (local.get $a))) ) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 0xff 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i16x8 0xff 1 2 3 4 5 6 7 )) (module (func (export "i16x8.extend_high_i8x16_u") (param $a v128) (result v128) (i16x8.extend_high_i8x16_u (local.get $a))) ) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 0xff 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) (v128.const i16x8 8 9 10 11 12 13 14 15)) (module (func (export "i32x4.extend_low_i16x8_s") (param $a v128) (result v128) (i32x4.extend_low_i16x8_s (local.get $a))) ) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 0 +1 -2 +3 -4 +5 -6 +7)) (v128.const i32x4 0 +1 -2 +3 )) (module (func (export "i32x4.extend_high_i16x8_s") (param $a v128) (result v128) (i32x4.extend_high_i16x8_s (local.get $a))) ) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 0 +1 -2 +3 -4 +5 -6 +7)) (v128.const i32x4 -4 +5 -6 +7)) (module (func (export "i32x4.extend_low_i16x8_u") (param $a v128) (result v128) (i32x4.extend_low_i16x8_u (local.get $a))) ) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 0xff 1 2 3 4 5 6 7)) (v128.const i32x4 0xff 1 2 3 )) (module (func (export "i32x4.extend_high_i16x8_u") (param $a v128) (result v128) (i32x4.extend_high_i16x8_u (local.get $a))) ) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 0xff 1 2 3 4 5 6 7)) (v128.const i32x4 4 5 6 7)) ;; i*.add (module (func (export "i8x16.add") (param $a v128) (param $b v128) (result v128) (i8x16.add (local.get $a) (local.get $b))) (func (export "i16x8.add") (param $a v128) (param $b v128) (result v128) (i16x8.add (local.get $a) (local.get $b))) (func (export "i32x4.add") (param $a v128) (param $b v128) (result v128) (i32x4.add (local.get $a) (local.get $b))) (func (export "i64x2.add") (param $a v128) (param $b v128) (result v128) (i64x2.add (local.get $a) (local.get $b))) ) ;; i*.sub (module (func (export "i8x16.sub") (param $a v128) (param $b v128) (result v128) (i8x16.sub (local.get $a) (local.get $b))) (func (export "i16x8.sub") (param $a v128) (param $b v128) (result v128) (i16x8.sub (local.get $a) (local.get $b))) (func (export "i32x4.sub") (param $a v128) (param $b v128) (result v128) (i32x4.sub (local.get $a) (local.get $b))) (func (export "i64x2.sub") (param $a v128) (param $b v128) (result v128) (i64x2.sub (local.get $a) (local.get $b))) ) ;; i*.mul (module (func (export "i16x8.mul") (param $a v128) (param $b v128) (result v128) (i16x8.mul (local.get $a) (local.get $b))) (func (export "i32x4.mul") (param $a v128) (param $b v128) (result v128) (i32x4.mul (local.get $a) (local.get $b))) (func (export "i64x2.mul") (param $a v128) (param $b v128) (result v128) (i64x2.mul (local.get $a) (local.get $b))) ) ;; i*.neg (module (func (export "i8x16.neg") (param $a v128) (result v128) (i8x16.neg (local.get $a))) (func (export "i16x8.neg") (param $a v128) (result v128) (i16x8.neg (local.get $a))) (func (export "i32x4.neg") (param $a v128) (result v128) (i32x4.neg (local.get $a))) (func (export "i64x2.neg") (param $a v128) (result v128) (i64x2.neg (local.get $a))) ) ;; i*.add_sat* (module (func (export "i8x16.add_sat_s") (param $a v128) (param $b v128) (result v128) (i8x16.add_sat_s (local.get $a) (local.get $b))) (func (export "i8x16.add_sat_u") (param $a v128) (param $b v128) (result v128) (i8x16.add_sat_u (local.get $a) (local.get $b))) (func (export "i16x8.add_sat_s") (param $a v128) (param $b v128) (result v128) (i16x8.add_sat_s (local.get $a) (local.get $b))) (func (export "i16x8.add_sat_u") (param $a v128) (param $b v128) (result v128) (i16x8.add_sat_u (local.get $a) (local.get $b))) ) (assert_return (invoke "i8x16.add_sat_s" (v128.const i8x16 127 126 125 124 123 122 121 120 119 120 121 122 123 124 125 126) (v128.const i8x16 -7 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 +6 +7 +8)) (v128.const i8x16 120 120 120 120 120 120 120 120 120 122 124 126 127 127 127 127)) ;; i*.sub_sat* (module (func (export "i8x16.sub_sat_s") (param $a v128) (param $b v128) (result v128) (i8x16.sub_sat_s (local.get $a) (local.get $b))) (func (export "i8x16.sub_sat_u") (param $a v128) (param $b v128) (result v128) (i8x16.sub_sat_u (local.get $a) (local.get $b))) (func (export "i16x8.sub_sat_s") (param $a v128) (param $b v128) (result v128) (i16x8.sub_sat_s (local.get $a) (local.get $b))) (func (export "i16x8.sub_sat_u") (param $a v128) (param $b v128) (result v128) (i16x8.sub_sat_u (local.get $a) (local.get $b))) ) ;; v128.and/or/xor/not (module (func (export "v128.and") (param $a v128) (param $b v128) (result v128) (v128.and (local.get $a) (local.get $b))) (func (export "v128.or") (param $a v128) (param $b v128) (result v128) (v128.or (local.get $a) (local.get $b))) (func (export "v128.xor") (param $a v128) (param $b v128) (result v128) (v128.xor (local.get $a) (local.get $b))) (func (export "v128.not") (param $a v128) (result v128) (v128.not (local.get $a) )) ) (module (func (export "v128.bitselect") (param $a v128) (param $b v128) (param $c v128) (result v128) (v128.bitselect (local.get $a) (local.get $b) (local.get $c)))) (module (func (export "v128.any_true") (param $a v128) (result i32) (v128.any_true (local.get $a))) ) (module (func (export "i8x16.all_true") (param $a v128) (result i32) (i8x16.all_true (local.get $a))) (func (export "i16x8.all_true") (param $a v128) (result i32) (i16x8.all_true (local.get $a))) (func (export "i32x4.all_true") (param $a v128) (result i32) (i32x4.all_true (local.get $a))) ) (module (func (export "i8x16.eq") (param $a v128) (param $b v128) (result v128) (i8x16.eq (local.get $a) (local.get $b))) (func (export "i16x8.eq") (param $a v128) (param $b v128) (result v128) (i16x8.eq (local.get $a) (local.get $b))) (func (export "i32x4.eq") (param $a v128) (param $b v128) (result v128) (i32x4.eq (local.get $a) (local.get $b))) (func (export "f32x4.eq") (param $a v128) (param $b v128) (result v128) (f32x4.eq (local.get $a) (local.get $b))) (func (export "f64x2.eq") (param $a v128) (param $b v128) (result v128) (f64x2.eq (local.get $a) (local.get $b))) ) (module (func (export "i8x16.ne") (param $a v128) (param $b v128) (result v128) (i8x16.ne (local.get $a) (local.get $b))) (func (export "i16x8.ne") (param $a v128) (param $b v128) (result v128) (i16x8.ne (local.get $a) (local.get $b))) (func (export "i32x4.ne") (param $a v128) (param $b v128) (result v128) (i32x4.ne (local.get $a) (local.get $b))) (func (export "f32x4.ne") (param $a v128) (param $b v128) (result v128) (f32x4.ne (local.get $a) (local.get $b))) (func (export "f64x2.ne") (param $a v128) (param $b v128) (result v128) (f64x2.ne (local.get $a) (local.get $b))) ) (module (func (export "i8x16.lt_s") (param $a v128) (param $b v128) (result v128) (i8x16.lt_s (local.get $a) (local.get $b))) (func (export "i8x16.lt_u") (param $a v128) (param $b v128) (result v128) (i8x16.lt_u (local.get $a) (local.get $b))) (func (export "i16x8.lt_s") (param $a v128) (param $b v128) (result v128) (i16x8.lt_s (local.get $a) (local.get $b))) (func (export "i16x8.lt_u") (param $a v128) (param $b v128) (result v128) (i16x8.lt_u (local.get $a) (local.get $b))) (func (export "i32x4.lt_s") (param $a v128) (param $b v128) (result v128) (i32x4.lt_s (local.get $a) (local.get $b))) (func (export "i32x4.lt_u") (param $a v128) (param $b v128) (result v128) (i32x4.lt_u (local.get $a) (local.get $b))) (func (export "f32x4.lt") (param $a v128) (param $b v128) (result v128) (f32x4.lt (local.get $a) (local.get $b))) (func (export "f64x2.lt") (param $a v128) (param $b v128) (result v128) (f64x2.lt (local.get $a) (local.get $b))) ) (module (func (export "i8x16.le_s") (param $a v128) (param $b v128) (result v128) (i8x16.le_s (local.get $a) (local.get $b))) (func (export "i8x16.le_u") (param $a v128) (param $b v128) (result v128) (i8x16.le_u (local.get $a) (local.get $b))) (func (export "i16x8.le_s") (param $a v128) (param $b v128) (result v128) (i16x8.le_s (local.get $a) (local.get $b))) (func (export "i16x8.le_u") (param $a v128) (param $b v128) (result v128) (i16x8.le_u (local.get $a) (local.get $b))) (func (export "i32x4.le_s") (param $a v128) (param $b v128) (result v128) (i32x4.le_s (local.get $a) (local.get $b))) (func (export "i32x4.le_u") (param $a v128) (param $b v128) (result v128) (i32x4.le_u (local.get $a) (local.get $b))) (func (export "f32x4.le") (param $a v128) (param $b v128) (result v128) (f32x4.le (local.get $a) (local.get $b))) (func (export "f64x2.le") (param $a v128) (param $b v128) (result v128) (f64x2.le (local.get $a) (local.get $b))) ) (module (func (export "i8x16.gt_s") (param $a v128) (param $b v128) (result v128) (i8x16.gt_s (local.get $a) (local.get $b))) (func (export "i8x16.gt_u") (param $a v128) (param $b v128) (result v128) (i8x16.gt_u (local.get $a) (local.get $b))) (func (export "i16x8.gt_s") (param $a v128) (param $b v128) (result v128) (i16x8.gt_s (local.get $a) (local.get $b))) (func (export "i16x8.gt_u") (param $a v128) (param $b v128) (result v128) (i16x8.gt_u (local.get $a) (local.get $b))) (func (export "i32x4.gt_s") (param $a v128) (param $b v128) (result v128) (i32x4.gt_s (local.get $a) (local.get $b))) (func (export "i32x4.gt_u") (param $a v128) (param $b v128) (result v128) (i32x4.gt_u (local.get $a) (local.get $b))) (func (export "f32x4.gt") (param $a v128) (param $b v128) (result v128) (f32x4.gt (local.get $a) (local.get $b))) (func (export "f64x2.gt") (param $a v128) (param $b v128) (result v128) (f64x2.gt (local.get $a) (local.get $b))) ) (module (func (export "i8x16.ge_s") (param $a v128) (param $b v128) (result v128) (i8x16.ge_s (local.get $a) (local.get $b))) (func (export "i8x16.ge_u") (param $a v128) (param $b v128) (result v128) (i8x16.ge_u (local.get $a) (local.get $b))) (func (export "i16x8.ge_s") (param $a v128) (param $b v128) (result v128) (i16x8.ge_s (local.get $a) (local.get $b))) (func (export "i16x8.ge_u") (param $a v128) (param $b v128) (result v128) (i16x8.ge_u (local.get $a) (local.get $b))) (func (export "i32x4.ge_s") (param $a v128) (param $b v128) (result v128) (i32x4.ge_s (local.get $a) (local.get $b))) (func (export "i32x4.ge_u") (param $a v128) (param $b v128) (result v128) (i32x4.ge_u (local.get $a) (local.get $b))) (func (export "f32x4.ge") (param $a v128) (param $b v128) (result v128) (f32x4.ge (local.get $a) (local.get $b))) (func (export "f64x2.ge") (param $a v128) (param $b v128) (result v128) (f64x2.ge (local.get $a) (local.get $b))) ) (module (func (export "f32x4.min") (param $a v128) (param $b v128) (result v128) (f32x4.min (local.get $a) (local.get $b))) (func (export "f64x2.min") (param $a v128) (param $b v128) (result v128) (f64x2.min (local.get $a) (local.get $b))) (func (export "f32x4.max") (param $a v128) (param $b v128) (result v128) (f32x4.max (local.get $a) (local.get $b))) (func (export "f64x2.max") (param $a v128) (param $b v128) (result v128) (f64x2.max (local.get $a) (local.get $b))) ) (module (func (export "f32x4.add") (param $a v128) (param $b v128) (result v128) (f32x4.add (local.get $a) (local.get $b))) (func (export "f64x2.add") (param $a v128) (param $b v128) (result v128) (f64x2.add (local.get $a) (local.get $b))) (func (export "f32x4.sub") (param $a v128) (param $b v128) (result v128) (f32x4.sub (local.get $a) (local.get $b))) (func (export "f64x2.sub") (param $a v128) (param $b v128) (result v128) (f64x2.sub (local.get $a) (local.get $b))) (func (export "f32x4.div") (param $a v128) (param $b v128) (result v128) (f32x4.div (local.get $a) (local.get $b))) (func (export "f64x2.div") (param $a v128) (param $b v128) (result v128) (f64x2.div (local.get $a) (local.get $b))) (func (export "f32x4.mul") (param $a v128) (param $b v128) (result v128) (f32x4.mul (local.get $a) (local.get $b))) (func (export "f64x2.mul") (param $a v128) (param $b v128) (result v128) (f64x2.mul (local.get $a) (local.get $b))) ) (module (func (export "f32x4.neg") (param $a v128) (result v128) (f32x4.neg (local.get $a))) (func (export "f64x2.neg") (param $a v128) (result v128) (f64x2.neg (local.get $a))) (func (export "f32x4.abs") (param $a v128) (result v128) (f32x4.abs (local.get $a))) (func (export "f64x2.abs") (param $a v128) (result v128) (f64x2.abs (local.get $a))) (func (export "f32x4.sqrt") (param $a v128) (result v128) (f32x4.sqrt (local.get $a))) (func (export "f64x2.sqrt") (param $a v128) (result v128) (f64x2.sqrt (local.get $a))) ) (module (func (export "f32x4.convert_i32x4_s") (param $a v128) (result v128) (f32x4.convert_i32x4_s (local.get $a))) (func (export "f32x4.convert_i32x4_u") (param $a v128) (result v128) (f32x4.convert_i32x4_u (local.get $a))) ) ;; i32x4.trunc_sat_f32x4_s (module (func (export "i32x4.trunc_sat_f32x4_s") (param $a f32) (result v128) (i32x4.trunc_sat_f32x4_s (f32x4.splat (local.get $a))))) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const 1.0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const 1.9)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const 2.0)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -1.0)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -1.9)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -2)) (v128.const i32x4 -2 -2 -2 -2)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -2147483648.0)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -2147483648.0)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -3000000000.0)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -inf)) (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const +inf)) (v128.const i32x4 2147483647 2147483647 2147483647 2147483647)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const +nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (f32.const nan:0x444444)) (v128.const i32x4 0 0 0 0)) ;; i32x4.trunc_sat_f32x4_u (module (func (export "i32x4.trunc_sat_f32x4_u") (param $a f32) (result v128) (i32x4.trunc_sat_f32x4_u (f32x4.splat (local.get $a))))) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const 0.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const 1.0)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const 1.9)) (v128.const i32x4 1 1 1 1)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const 2.0)) (v128.const i32x4 2 2 2 2)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const -1.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const -2.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const -2147483648.0)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const -inf)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const +inf)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const -nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const +nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (f32.const nan:0x444444)) (v128.const i32x4 0 0 0 0)) ;; Test that LLVM undef isn't introduced by SIMD shifts greater than the scalar width. (module (memory 1 1 shared) (func (export "test-simd-shift-mask") (param $v v128) (result i32) (block $0 (block $1 (block $2 (block $3 (block $default ;; If the table index is inferred to be undef, LLVM will branch to an ;; arbitrary successor of the basic block. (br_table $0 $1 $2 $3 $default (i32x4.extract_lane 0 (i32x4.shr_s (local.get $v) (i32.const 32))) ) ) (return (i32.const 100)) ) (return (i32.const 3)) ) (return (i32.const 2)) ) (return (i32.const 1)) ) (return (i32.const 0)) ) ) (assert_return (invoke "test-simd-shift-mask" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "test-simd-shift-mask" (v128.const i32x4 1 0 0 0)) (i32.const 1)) (assert_return (invoke "test-simd-shift-mask" (v128.const i32x4 2 0 0 0)) (i32.const 2)) (assert_return (invoke "test-simd-shift-mask" (v128.const i32x4 3 0 0 0)) (i32.const 3)) (assert_return (invoke "test-simd-shift-mask" (v128.const i32x4 4 0 0 0)) (i32.const 100)) ;; Test that misaligned SIMD loads/stores don't trap (module (memory 1 1) (func (export "v128.load align=16") (param $address i32) (result v128) (v128.load align=16 (local.get $address)) ) (func (export "v128.store align=16") (param $address i32) (param $value v128) (v128.store align=16 (local.get $address) (local.get $value)) ) ) (assert_return (invoke "v128.load align=16" (i32.const 0)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load align=16" (i32.const 1)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.store align=16" (i32.const 1) (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) (assert_return (invoke "v128.load align=16" (i32.const 0)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) ;; v128.const format (module (func (result v128) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))) (module (func (result v128) (v128.const i16x8 0 1 2 3 4 5 6 7))) (module (func (result v128) (v128.const i32x4 0 1 2 3))) (module (func (result v128) (v128.const i64x2 0 1))) (module (func (result v128) (v128.const i64x2 -1 -2))) (module (func (result v128) (v128.const i32x4 0xa 0xb 0xc 0xd))) (module (func (result v128) (v128.const i32x4 0xa 0xb 0xc 0xd))) (module (func (result v128) (v128.const f32x4 0.0 1.0 2.0 3.0))) (module (func (result v128) (v128.const f64x2 0.0 1.0))) (module (func (result v128) (v128.const f32x4 0 1 2 3))) (module (func (result v128) (v128.const f32x4 0 1 2 -0x1.0p+10))) (assert_malformed (module quote "(func (result v128) (v128.const i32x4 0.0 1.0 2.0 3.0))") "expected i32 literal" ) (assert_malformed (module quote "(func (result v128) (v128.const i32 0 1 2 3))") "expected 'i8x6', 'i16x8', 'i32x4', 'i64x2', 'f32x4', or 'f64x2'" ) (assert_malformed (module quote "(func (result v128) (v128.const i16x4 0 1 2 3))") "expected 'i8x6', 'i16x8', 'i32x4', 'i64x2', 'f32x4', or 'f64x2'" ) (assert_malformed (module quote "(func (result v128) (v128.const f32 0 1 2 3))") "expected 'i8x6', 'i16x8', 'i32x4', 'i64x2', 'f32x4', or 'f64x2'" ) (assert_malformed (module quote "(func (result v128) (v128.const 0 1 2 3))") "expected 'i8x6', 'i16x8', 'i32x4', 'i64x2', 'f32x4', or 'f64x2'" ) ;; Test the assert_return_canonical_nan_fNxM and assert_return_arithmetic_nan_fNxM commands (module (func (export "f32x4.splat") (param $x f32) (result v128) (f32x4.splat (local.get $x))) (func (export "f64x2.splat") (param $x f64) (result v128) (f64x2.splat (local.get $x))) ) (assert_return (invoke "f32x4.splat" (f32.const +nan:0x400000)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.splat" (f32.const +nan:0x400000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.splat" (f32.const +nan:0x400001)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.splat" (f32.const -nan:0x400000)) (v128.const f32x4 nan:canonical nan:canonical nan:canonical nan:canonical)) (assert_return (invoke "f32x4.splat" (f32.const -nan:0x400000)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f32x4.splat" (f32.const -nan:0x400001)) (v128.const f32x4 nan:arithmetic nan:arithmetic nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.splat" (f64.const +nan:0x8000000000000)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.splat" (f64.const +nan:0x8000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.splat" (f64.const +nan:0x8000000000001)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.splat" (f64.const -nan:0x8000000000000)) (v128.const f64x2 nan:canonical nan:canonical)) (assert_return (invoke "f64x2.splat" (f64.const -nan:0x8000000000000)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) (assert_return (invoke "f64x2.splat" (f64.const -nan:0x8000000000001)) (v128.const f64x2 nan:arithmetic nan:arithmetic)) ;; Load and extend instructions (module (memory (data "\ff\fe\fd\fc\fb\fa\f9\f8")) (func (export "v128.load8x8_s") (result v128) (v128.load8x8_s (i32.const 0))) (func (export "v128.load8x8_u") (result v128) (v128.load8x8_u (i32.const 0))) (func (export "v128.load16x4_s") (result v128) (v128.load16x4_s (i32.const 0))) (func (export "v128.load16x4_u") (result v128) (v128.load16x4_u (i32.const 0))) (func (export "v128.load32x2_s") (result v128) (v128.load32x2_s (i32.const 0))) (func (export "v128.load32x2_u") (result v128) (v128.load32x2_u (i32.const 0))) ) (assert_return (invoke "v128.load8x8_s") (v128.const i16x8 0xffff 0xfffe 0xfffd 0xfffc 0xfffb 0xfffa 0xfff9 0xfff8)) (assert_return (invoke "v128.load8x8_u") (v128.const i16x8 0x00ff 0x00fe 0x00fd 0x00fc 0x00fb 0x00fa 0x00f9 0x00f8)) (assert_return (invoke "v128.load16x4_s") (v128.const i32x4 0xfffffeff 0xfffffcfd 0xfffffafb 0xfffff8f9)) (assert_return (invoke "v128.load16x4_u") (v128.const i32x4 0x0000feff 0x0000fcfd 0x0000fafb 0x0000f8f9)) (assert_return (invoke "v128.load32x2_s") (v128.const i64x2 0xfffffffffcfdfeff 0xfffffffff8f9fafb)) (assert_return (invoke "v128.load32x2_u") (v128.const i64x2 0x00000000fcfdfeff 0x00000000f8f9fafb)) ;; v128.andnot (module (func (export "v128.andnot") (param v128 v128) (result v128) (v128.andnot (local.get 0) (local.get 1))) ) (assert_return (invoke "v128.andnot" (v128.const i32x4 1 2 3 4) (v128.const i32x4 1 1 1 1)) (v128.const i32x4 0 2 2 4)) ;; Load interleaved instructions (module (memory 1) (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d\3e\3f") (func (export "v8x16.load_interleaved_2") (param i32) (result v128 v128) (v8x16.load_interleaved_2 (local.get 0))) (func (export "v8x16.load_interleaved_3") (param i32) (result v128 v128 v128) (v8x16.load_interleaved_3 (local.get 0))) (func (export "v8x16.load_interleaved_4") (param i32) (result v128 v128 v128 v128) (v8x16.load_interleaved_4 (local.get 0))) (func (export "v16x8.load_interleaved_2") (param i32) (result v128 v128) (v16x8.load_interleaved_2 (local.get 0))) (func (export "v16x8.load_interleaved_3") (param i32) (result v128 v128 v128) (v16x8.load_interleaved_3 (local.get 0))) (func (export "v16x8.load_interleaved_4") (param i32) (result v128 v128 v128 v128) (v16x8.load_interleaved_4 (local.get 0))) (func (export "v32x4.load_interleaved_2") (param i32) (result v128 v128) (v32x4.load_interleaved_2 (local.get 0))) (func (export "v32x4.load_interleaved_3") (param i32) (result v128 v128 v128) (v32x4.load_interleaved_3 (local.get 0))) (func (export "v32x4.load_interleaved_4") (param i32) (result v128 v128 v128 v128) (v32x4.load_interleaved_4 (local.get 0))) (func (export "v64x2.load_interleaved_2") (param i32) (result v128 v128) (v64x2.load_interleaved_2 (local.get 0))) (func (export "v64x2.load_interleaved_3") (param i32) (result v128 v128 v128) (v64x2.load_interleaved_3 (local.get 0))) (func (export "v64x2.load_interleaved_4") (param i32) (result v128 v128 v128 v128) (v64x2.load_interleaved_4 (local.get 0))) ) (assert_return (invoke "v8x16.load_interleaved_2" (i32.const 0)) (v128.const i8x16 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30) (v128.const i8x16 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31) ) (assert_return (invoke "v8x16.load_interleaved_3" (i32.const 0)) (v128.const i8x16 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45) (v128.const i8x16 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46) (v128.const i8x16 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47) ) (assert_return (invoke "v8x16.load_interleaved_4" (i32.const 0)) (v128.const i8x16 0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60) (v128.const i8x16 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61) (v128.const i8x16 2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62) (v128.const i8x16 3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63) ) (assert_return (invoke "v16x8.load_interleaved_2" (i32.const 0)) (v128.const i16x8 0x0100 0x0504 0x0908 0x0d0c 0x1110 0x1514 0x1918 0x1d1c) (v128.const i16x8 0x0302 0x0706 0x0b0a 0x0f0e 0x1312 0x1716 0x1b1a 0x1f1e) ) (assert_return (invoke "v16x8.load_interleaved_3" (i32.const 0)) (v128.const i16x8 0x0100 0x0706 0x0d0c 0x1312 0x1918 0x1f1e 0x2524 0x2b2a) (v128.const i16x8 0x0302 0x0908 0x0f0e 0x1514 0x1b1a 0x2120 0x2726 0x2d2c) (v128.const i16x8 0x0504 0x0b0a 0x1110 0x1716 0x1d1c 0x2322 0x2928 0x2f2e) ) (assert_return (invoke "v16x8.load_interleaved_4" (i32.const 0)) (v128.const i16x8 0x0100 0x0908 0x1110 0x1918 0x2120 0x2928 0x3130 0x3938) (v128.const i16x8 0x0302 0x0b0a 0x1312 0x1b1a 0x2322 0x2b2a 0x3332 0x3b3a) (v128.const i16x8 0x0504 0x0d0c 0x1514 0x1d1c 0x2524 0x2d2c 0x3534 0x3d3c) (v128.const i16x8 0x0706 0x0f0e 0x1716 0x1f1e 0x2726 0x2f2e 0x3736 0x3f3e) ) (assert_return (invoke "v32x4.load_interleaved_2" (i32.const 0)) (v128.const i32x4 0x03020100 0x0b0a0908 0x13121110 0x1b1a1918) (v128.const i32x4 0x07060504 0x0f0e0d0c 0x17161514 0x1f1e1d1c) ) (assert_return (invoke "v32x4.load_interleaved_3" (i32.const 0)) (v128.const i32x4 0x03020100 0x0f0e0d0c 0x1b1a1918 0x27262524) (v128.const i32x4 0x07060504 0x13121110 0x1f1e1d1c 0x2b2a2928) (v128.const i32x4 0x0b0a0908 0x17161514 0x23222120 0x2f2e2d2c) ) (assert_return (invoke "v32x4.load_interleaved_4" (i32.const 0)) (v128.const i32x4 0x03020100 0x13121110 0x23222120 0x33323130) (v128.const i32x4 0x07060504 0x17161514 0x27262524 0x37363534) (v128.const i32x4 0x0b0a0908 0x1b1a1918 0x2b2a2928 0x3b3a3938) (v128.const i32x4 0x0f0e0d0c 0x1f1e1d1c 0x2f2e2d2c 0x3f3e3d3c) ) (assert_return (invoke "v64x2.load_interleaved_2" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x1716151413121110) (v128.const i64x2 0x0f0e0d0c0b0a0908 0x1f1e1d1c1b1a1918) ) (assert_return (invoke "v64x2.load_interleaved_3" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x1f1e1d1c1b1a1918) (v128.const i64x2 0x0f0e0d0c0b0a0908 0x2726252423222120) (v128.const i64x2 0x1716151413121110 0x2f2e2d2c2b2a2928) ) (assert_return (invoke "v64x2.load_interleaved_4" (i32.const 0)) (v128.const i64x2 0x0706050403020100 0x2726252423222120) (v128.const i64x2 0x0f0e0d0c0b0a0908 0x2f2e2d2c2b2a2928) (v128.const i64x2 0x1716151413121110 0x3736353433323130) (v128.const i64x2 0x1f1e1d1c1b1a1918 0x3f3e3d3c3b3a3938) ) (module (memory 1) (func (export "v128.load") (param i32) (result v128) (v128.load (local.get 0))) (func (export "v8x16.store_interleaved_2") (param i32 v128 v128) (v8x16.store_interleaved_2 (local.get 0) (local.get 1) (local.get 2))) (func (export "v8x16.store_interleaved_3") (param i32 v128 v128 v128) (v8x16.store_interleaved_3 (local.get 0) (local.get 1) (local.get 2) (local.get 3))) (func (export "v8x16.store_interleaved_4") (param i32 v128 v128 v128 v128) (v8x16.store_interleaved_4 (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.get 4))) (func (export "v16x8.store_interleaved_2") (param i32 v128 v128) (v16x8.store_interleaved_2 (local.get 0) (local.get 1) (local.get 2))) (func (export "v16x8.store_interleaved_3") (param i32 v128 v128 v128) (v16x8.store_interleaved_3 (local.get 0) (local.get 1) (local.get 2) (local.get 3))) (func (export "v16x8.store_interleaved_4") (param i32 v128 v128 v128 v128) (v16x8.store_interleaved_4 (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.get 4))) (func (export "v32x4.store_interleaved_2") (param i32 v128 v128) (v32x4.store_interleaved_2 (local.get 0) (local.get 1) (local.get 2))) (func (export "v32x4.store_interleaved_3") (param i32 v128 v128 v128) (v32x4.store_interleaved_3 (local.get 0) (local.get 1) (local.get 2) (local.get 3))) (func (export "v32x4.store_interleaved_4") (param i32 v128 v128 v128 v128) (v32x4.store_interleaved_4 (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.get 4))) (func (export "v64x2.store_interleaved_2") (param i32 v128 v128) (v64x2.store_interleaved_2 (local.get 0) (local.get 1) (local.get 2))) (func (export "v64x2.store_interleaved_3") (param i32 v128 v128 v128) (v64x2.store_interleaved_3 (local.get 0) (local.get 1) (local.get 2) (local.get 3))) (func (export "v64x2.store_interleaved_4") (param i32 v128 v128 v128 v128) (v64x2.store_interleaved_4 (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.get 4))) ) (assert_return (invoke "v128.load" (i32.const 0 )) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 16)) (v128.const i64x2 0 0)) (assert_return (invoke "v8x16.store_interleaved_2" (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) )) (assert_return (invoke "v128.load" (i32.const 0 )) (v128.const i8x16 0 16 1 17 2 18 3 19 4 20 5 21 6 22 7 23)) (assert_return (invoke "v128.load" (i32.const 16)) (v128.const i8x16 8 24 9 25 10 26 11 27 12 28 13 29 14 30 15 31)) (assert_return (invoke "v128.load" (i32.const 32)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 48)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 64)) (v128.const i64x2 0 0)) (assert_return (invoke "v8x16.store_interleaved_3" (i32.const 32) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) (v128.const i8x16 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47) )) (assert_return (invoke "v128.load" (i32.const 32)) (v128.const i8x16 0 16 32 1 17 33 2 18 34 3 19 35 4 20 36 5)) (assert_return (invoke "v128.load" (i32.const 48)) (v128.const i8x16 21 37 6 22 38 7 23 39 8 24 40 9 25 41 10 26)) (assert_return (invoke "v128.load" (i32.const 64)) (v128.const i8x16 42 11 27 43 12 28 44 13 29 45 14 30 46 15 31 47)) (assert_return (invoke "v128.load" (i32.const 80)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 96)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 112)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 128)) (v128.const i64x2 0 0)) (assert_return (invoke "v8x16.store_interleaved_4" (i32.const 80) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) (v128.const i8x16 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47) (v128.const i8x16 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63) )) (assert_return (invoke "v128.load" (i32.const 80 )) (v128.const i8x16 0 16 32 48 1 17 33 49 2 18 34 50 3 19 35 51)) (assert_return (invoke "v128.load" (i32.const 96 )) (v128.const i8x16 4 20 36 52 5 21 37 53 6 22 38 54 7 23 39 55)) (assert_return (invoke "v128.load" (i32.const 112)) (v128.const i8x16 8 24 40 56 9 25 41 57 10 26 42 58 11 27 43 59)) (assert_return (invoke "v128.load" (i32.const 128)) (v128.const i8x16 12 28 44 60 13 29 45 61 14 30 46 62 15 31 47 63)) (assert_return (invoke "v128.load" (i32.const 144)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 160)) (v128.const i64x2 0 0)) (assert_return (invoke "v16x8.store_interleaved_2" (i32.const 144) (v128.const i16x8 1000 1001 1002 1003 1004 1005 1006 1007) (v128.const i16x8 1008 1009 1010 1011 1012 1013 1014 1015) )) (assert_return (invoke "v128.load" (i32.const 144)) (v128.const i16x8 1000 1008 1001 1009 1002 1010 1003 1011)) (assert_return (invoke "v128.load" (i32.const 160)) (v128.const i16x8 1004 1012 1005 1013 1006 1014 1007 1015)) (assert_return (invoke "v128.load" (i32.const 176)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 192)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 208)) (v128.const i64x2 0 0)) (assert_return (invoke "v16x8.store_interleaved_3" (i32.const 176) (v128.const i16x8 1000 1001 1002 1003 1004 1005 1006 1007) (v128.const i16x8 1008 1009 1010 1011 1012 1013 1014 1015) (v128.const i16x8 1016 1017 1018 1019 1020 1021 1022 1023) )) (assert_return (invoke "v128.load" (i32.const 176)) (v128.const i16x8 1000 1008 1016 1001 1009 1017 1002 1010)) (assert_return (invoke "v128.load" (i32.const 192)) (v128.const i16x8 1018 1003 1011 1019 1004 1012 1020 1005)) (assert_return (invoke "v128.load" (i32.const 208)) (v128.const i16x8 1013 1021 1006 1014 1022 1007 1015 1023)) (assert_return (invoke "v128.load" (i32.const 224)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 240)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 256)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 272)) (v128.const i64x2 0 0)) (assert_return (invoke "v16x8.store_interleaved_4" (i32.const 224) (v128.const i16x8 1000 1001 1002 1003 1004 1005 1006 1007) (v128.const i16x8 1008 1009 1010 1011 1012 1013 1014 1015) (v128.const i16x8 1016 1017 1018 1019 1020 1021 1022 1023) (v128.const i16x8 1024 1025 1026 1027 1028 1029 1030 1031) )) (assert_return (invoke "v128.load" (i32.const 224)) (v128.const i16x8 1000 1008 1016 1024 1001 1009 1017 1025)) (assert_return (invoke "v128.load" (i32.const 240)) (v128.const i16x8 1002 1010 1018 1026 1003 1011 1019 1027)) (assert_return (invoke "v128.load" (i32.const 256)) (v128.const i16x8 1004 1012 1020 1028 1005 1013 1021 1029)) (assert_return (invoke "v128.load" (i32.const 272)) (v128.const i16x8 1006 1014 1022 1030 1007 1015 1023 1031)) (assert_return (invoke "v128.load" (i32.const 288)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 304)) (v128.const i64x2 0 0)) (assert_return (invoke "v32x4.store_interleaved_2" (i32.const 288) (v128.const i32x4 100000 100001 100002 100003) (v128.const i32x4 100004 100005 100006 100007) )) (assert_return (invoke "v128.load" (i32.const 288)) (v128.const i32x4 100000 100004 100001 100005)) (assert_return (invoke "v128.load" (i32.const 304)) (v128.const i32x4 100002 100006 100003 100007)) (assert_return (invoke "v128.load" (i32.const 320)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 336)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 352)) (v128.const i64x2 0 0)) (assert_return (invoke "v32x4.store_interleaved_3" (i32.const 320) (v128.const i32x4 100000 100001 100002 100003) (v128.const i32x4 100004 100005 100006 100007) (v128.const i32x4 100008 100009 100010 100011) )) (assert_return (invoke "v128.load" (i32.const 320)) (v128.const i32x4 100000 100004 100008 100001)) (assert_return (invoke "v128.load" (i32.const 336)) (v128.const i32x4 100005 100009 100002 100006)) (assert_return (invoke "v128.load" (i32.const 352)) (v128.const i32x4 100010 100003 100007 100011)) (assert_return (invoke "v128.load" (i32.const 368)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 384)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 400)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 416)) (v128.const i64x2 0 0)) (assert_return (invoke "v32x4.store_interleaved_4" (i32.const 368) (v128.const i32x4 100000 100001 100002 100003) (v128.const i32x4 100004 100005 100006 100007) (v128.const i32x4 100008 100009 100010 100011) (v128.const i32x4 100012 100013 100014 100015) )) (assert_return (invoke "v128.load" (i32.const 368)) (v128.const i32x4 100000 100004 100008 100012)) (assert_return (invoke "v128.load" (i32.const 384)) (v128.const i32x4 100001 100005 100009 100013)) (assert_return (invoke "v128.load" (i32.const 400)) (v128.const i32x4 100002 100006 100010 100014)) (assert_return (invoke "v128.load" (i32.const 416)) (v128.const i32x4 100003 100007 100011 100015)) (assert_return (invoke "v128.load" (i32.const 432)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 448)) (v128.const i64x2 0 0)) (assert_return (invoke "v64x2.store_interleaved_2" (i32.const 432) (v128.const i64x2 10000000000 10000000001) (v128.const i64x2 10000000002 10000000003) )) (assert_return (invoke "v128.load" (i32.const 432)) (v128.const i64x2 10000000000 10000000002)) (assert_return (invoke "v128.load" (i32.const 448)) (v128.const i64x2 10000000001 10000000003)) (assert_return (invoke "v128.load" (i32.const 464)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 480)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 496)) (v128.const i64x2 0 0)) (assert_return (invoke "v64x2.store_interleaved_3" (i32.const 464) (v128.const i64x2 10000000000 10000000001) (v128.const i64x2 10000000002 10000000003) (v128.const i64x2 10000000004 10000000005) )) (assert_return (invoke "v128.load" (i32.const 464)) (v128.const i64x2 10000000000 10000000002)) (assert_return (invoke "v128.load" (i32.const 480)) (v128.const i64x2 10000000004 10000000001)) (assert_return (invoke "v128.load" (i32.const 496)) (v128.const i64x2 10000000003 10000000005)) (assert_return (invoke "v128.load" (i32.const 512)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 528)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 544)) (v128.const i64x2 0 0)) (assert_return (invoke "v128.load" (i32.const 560)) (v128.const i64x2 0 0)) (assert_return (invoke "v64x2.store_interleaved_4" (i32.const 512) (v128.const i64x2 10000000000 10000000001) (v128.const i64x2 10000000002 10000000003) (v128.const i64x2 10000000004 10000000005) (v128.const i64x2 10000000006 10000000007) )) (assert_return (invoke "v128.load" (i32.const 512)) (v128.const i64x2 10000000000 10000000002)) (assert_return (invoke "v128.load" (i32.const 528)) (v128.const i64x2 10000000004 10000000006)) (assert_return (invoke "v128.load" (i32.const 544)) (v128.const i64x2 10000000001 10000000003)) (assert_return (invoke "v128.load" (i32.const 560)) (v128.const i64x2 10000000005 10000000007)) ;; i8x16.bitmask (module (func (export "i8x16.bitmask") (param v128) (result i32) (i8x16.bitmask (local.get 0)) ) ) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0x0000) ) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80)) (i32.const 0xffff) ) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f)) (i32.const 0x0000) ) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff)) (i32.const 0xffff) ) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0x80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0x0001) ) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80)) (i32.const 0x0000aaaa) ) ;; i16x8.bitmask (module (func (export "i16x8.bitmask") (param v128) (result i32) (i16x8.bitmask (local.get 0)) ) ) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0 0 0 0 0 0 0 0)) (i32.const 0x00) ) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000)) (i32.const 0xff) ) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff)) (i32.const 0x00) ) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff)) (i32.const 0xff) ) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0x8000 0 0 0 0 0 0 0)) (i32.const 0x01) ) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 0x0000 0x8000 0x0000 0x8000 0x0000 0x8000 0x0000 0x8000)) (i32.const 0xaa) ) ;; i32x4.bitmask (module (func (export "i32x4.bitmask") (param v128) (result i32) (i32x4.bitmask (local.get 0)) ) ) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0 0 0 0)) (i32.const 0x0) ) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)) (i32.const 0xf) ) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) (i32.const 0x0) ) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff)) (i32.const 0xf) ) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0x80000000 0 0 0)) (i32.const 0x1) ) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 0x00000000 0x80000000 0x00000000 0x80000000)) (i32.const 0xa) ) ;; i8x16 min/max (module (func (export "i8x16.min_s") (param v128 v128) (result v128) (i8x16.min_s (local.get 0) (local.get 1))) (func (export "i8x16.min_u") (param v128 v128) (result v128) (i8x16.min_u (local.get 0) (local.get 1))) (func (export "i8x16.max_s") (param v128 v128) (result v128) (i8x16.max_s (local.get 0) (local.get 1))) (func (export "i8x16.max_u") (param v128 v128) (result v128) (i8x16.max_u (local.get 0) (local.get 1))) ) (assert_return (invoke "i8x16.min_s" (v128.const i8x16 -8 -7 -6 -5 -4 -3 -2 -1 +0 +1 +2 +3 +4 +5 +6 +7) (v128.const i8x16 +7 +6 +5 +4 +3 +2 +1 +0 -1 -2 -3 -4 -5 -6 -7 -8)) (v128.const i8x16 -8 -7 -6 -5 -4 -3 -2 -1 -1 -2 -3 -4 -5 -6 -7 -8) ) (assert_return (invoke "i8x16.min_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i8x16 0 1 2 3 4 5 6 7 7 6 5 4 3 2 1 0) ) (assert_return (invoke "i8x16.max_s" (v128.const i8x16 -8 -7 -6 -5 -4 -3 -2 -1 +0 +1 +2 +3 +4 +5 +6 +7) (v128.const i8x16 +7 +6 +5 +4 +3 +2 +1 +0 -1 -2 -3 -4 -5 -6 -7 -8)) (v128.const i8x16 +7 +6 +5 +4 +3 +2 +1 +0 +0 +1 +2 +3 +4 +5 +6 +7) ) (assert_return (invoke "i8x16.max_u" (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (v128.const i8x16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)) (v128.const i8x16 15 14 13 12 11 10 9 8 8 9 10 11 12 13 14 15) ) ;; i16x8 min/max (module (func (export "i16x8.min_s") (param v128 v128) (result v128) (i16x8.min_s (local.get 0) (local.get 1))) (func (export "i16x8.min_u") (param v128 v128) (result v128) (i16x8.min_u (local.get 0) (local.get 1))) (func (export "i16x8.max_s") (param v128 v128) (result v128) (i16x8.max_s (local.get 0) (local.get 1))) (func (export "i16x8.max_u") (param v128 v128) (result v128) (i16x8.max_u (local.get 0) (local.get 1))) ) (assert_return (invoke "i16x8.min_s" (v128.const i16x8 -4 -3 -2 -1 +0 +1 +2 +3) (v128.const i16x8 +3 +2 +1 +0 -1 -2 -3 -4)) (v128.const i16x8 -4 -3 -2 -1 -1 -2 -3 -4) ) (assert_return (invoke "i16x8.min_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 7 6 5 4 3 2 1 0)) (v128.const i16x8 0 1 2 3 3 2 1 0) ) (assert_return (invoke "i16x8.max_s" (v128.const i16x8 -4 -3 -2 -1 +0 +1 +2 +3) (v128.const i16x8 +3 +2 +1 +0 -1 -2 -3 -4)) (v128.const i16x8 +3 +2 +1 +0 +0 +1 +2 +3) ) (assert_return (invoke "i16x8.max_u" (v128.const i16x8 0 1 2 3 4 5 6 7) (v128.const i16x8 7 6 5 4 3 2 1 0)) (v128.const i16x8 7 6 5 4 4 5 6 7) ) ;; i32x4 min/max (module (func (export "i32x4.min_s") (param v128 v128) (result v128) (i32x4.min_s (local.get 0) (local.get 1))) (func (export "i32x4.min_u") (param v128 v128) (result v128) (i32x4.min_u (local.get 0) (local.get 1))) (func (export "i32x4.max_s") (param v128 v128) (result v128) (i32x4.max_s (local.get 0) (local.get 1))) (func (export "i32x4.max_u") (param v128 v128) (result v128) (i32x4.max_u (local.get 0) (local.get 1))) ) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -2 -1 +0 +1) (v128.const i32x4 +1 +0 -1 -2)) (v128.const i32x4 -2 -1 -1 -2) ) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0)) (v128.const i32x4 0 1 1 0) ) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -2 -1 +0 +1) (v128.const i32x4 +1 +0 -1 -2)) (v128.const i32x4 +1 +0 +0 +1) ) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0)) (v128.const i32x4 3 2 2 3) ) ;; i8x16.avgr_u (module (func (export "i8x16.avgr_u") (param v128 v128) (result v128) (i8x16.avgr_u (local.get 0) (local.get 1)))) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215) (v128.const i8x16 216 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246)) (v128.const i8x16 208 210 211 213 214 216 217 219 220 222 223 225 226 228 229 231) ) ;; i16x8.avgr_u (module (func (export "i16x8.avgr_u") (param v128 v128) (result v128) (i16x8.avgr_u (local.get 0) (local.get 1)))) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 40000 40001 40002 40003 40004 40005 40006 40007) (v128.const i16x8 40016 40018 40020 40022 40024 40026 40028 40030)) (v128.const i16x8 40008 40010 40011 40013 40014 40016 40017 40019) ) ;; Test for LLVM bug found by fuzzing: https://bugs.llvm.org/show_bug.cgi?id=43750 (module (func (param v128) (result f64) local.get 0 i8x16.bitmask i16x8.splat f64x2.extract_lane 1 ) ) ;; i8x16.abs (module (func (export "i8x16.abs") (param v128) (result v128) (i8x16.abs (local.get 0)))) (assert_return (invoke "i8x16.abs" (v128.const i8x16 +0 +1 -1 +3 -3 +7 -7 +15 -15 +31 -31 +63 -63 +127 -127 -128)) (v128.const i8x16 +0 +1 +1 +3 +3 +7 +7 +15 +15 +31 +31 +63 +63 +127 +127 -128)) ;; i16x8.abs (module (func (export "i16x8.abs") (param v128) (result v128) (i16x8.abs (local.get 0)))) (assert_return (invoke "i16x8.abs" (v128.const i16x8 +0 +1 +127 -127 -128 +32767 -32767 -32768)) (v128.const i16x8 +0 +1 +127 +127 +128 +32767 +32767 -32768)) ;; i32x4.abs (module (func (export "i32x4.abs") (param v128) (result v128) (i32x4.abs (local.get 0)))) (assert_return (invoke "i32x4.abs" (v128.const i32x4 +0 +2147483647 -2147483647 -2147483648)) (v128.const i32x4 +0 +2147483647 +2147483647 -2147483648)) ================================================ FILE: Test/wavm/simd_const_simple.wast ================================================ (module (func (export "return_v128") (result v128) (v128.const i32x4 0 1 2 3) ) ) (assert_return (invoke "return_v128") (v128.const i32x4 0 1 2 3)) ================================================ FILE: Test/wavm/skip-stack-guard-page.wast ================================================ ;; Like the spec skip-stack-guard-page test, but with enough locals to skip ;; a 16KB guard page (macOS AArch64 page size). ;; The spec test uses 1056 i64 locals (8448 bytes), which only exceeds the 4KB ;; page size on Linux. This test uses 2048 i64 locals (16384 bytes / 16KB) to also ;; cover macOS AArch64 with its 16KB pages. (module (memory 1) (export "test-guard-page-skip" (func $test-guard-page-skip)) (func $test-guard-page-skip (param $depth i32) (if (i32.eq (local.get $depth) (i32.const 0)) (then (call $function-with-many-locals)) (else (call $test-guard-page-skip (i32.sub (local.get $depth) (i32.const 1)))) ) ) (func $function-with-many-locals ;; 2048 i64 = 16384 bytes of locals (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x420-0x427 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x428-0x42f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x430-0x437 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x438-0x43f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x440-0x447 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x448-0x44f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x450-0x457 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x458-0x45f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x460-0x467 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x468-0x46f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x470-0x477 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x478-0x47f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x480-0x487 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x488-0x48f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x490-0x497 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x498-0x49f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4a0-0x4a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4a8-0x4af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4b0-0x4b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4b8-0x4bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4c0-0x4c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4c8-0x4cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4d0-0x4d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4d8-0x4df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4e0-0x4e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4e8-0x4ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4f0-0x4f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x4f8-0x4ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x500-0x507 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x508-0x50f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x510-0x517 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x518-0x51f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x520-0x527 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x528-0x52f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x530-0x537 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x538-0x53f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x540-0x547 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x548-0x54f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x550-0x557 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x558-0x55f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x560-0x567 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x568-0x56f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x570-0x577 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x578-0x57f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x580-0x587 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x588-0x58f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x590-0x597 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x598-0x59f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5a0-0x5a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5a8-0x5af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5b0-0x5b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5b8-0x5bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5c0-0x5c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5c8-0x5cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5d0-0x5d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5d8-0x5df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5e0-0x5e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5e8-0x5ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5f0-0x5f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x5f8-0x5ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x600-0x607 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x608-0x60f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x610-0x617 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x618-0x61f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x620-0x627 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x628-0x62f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x630-0x637 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x638-0x63f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x640-0x647 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x648-0x64f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x650-0x657 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x658-0x65f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x660-0x667 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x668-0x66f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x670-0x677 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x678-0x67f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x680-0x687 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x688-0x68f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x690-0x697 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x698-0x69f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6a0-0x6a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6a8-0x6af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6b0-0x6b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6b8-0x6bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6c0-0x6c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6c8-0x6cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6d0-0x6d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6d8-0x6df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6e0-0x6e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6e8-0x6ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6f0-0x6f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x6f8-0x6ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x700-0x707 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x708-0x70f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x710-0x717 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x718-0x71f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x720-0x727 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x728-0x72f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x730-0x737 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x738-0x73f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x740-0x747 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x748-0x74f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x750-0x757 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x758-0x75f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x760-0x767 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x768-0x76f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x770-0x777 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x778-0x77f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x780-0x787 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x788-0x78f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x790-0x797 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x798-0x79f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7a0-0x7a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7a8-0x7af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7b0-0x7b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7b8-0x7bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7c0-0x7c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7c8-0x7cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7d0-0x7d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7d8-0x7df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7e0-0x7e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7e8-0x7ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7f0-0x7f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x7f8-0x7ff ;; recurse first to try to make the callee access the stack below the space ;; allocated for the locals before the locals themselves have been initialized. (call $function-with-many-locals) ;; load from memory into the locals (local.set 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) (local.set 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) (local.set 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) (local.set 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) (local.set 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) (local.set 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) (local.set 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) (local.set 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) (local.set 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) (local.set 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) (local.set 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) (local.set 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) (local.set 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) (local.set 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) (local.set 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) (local.set 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) (local.set 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) (local.set 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) (local.set 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) (local.set 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) (local.set 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) (local.set 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) (local.set 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) (local.set 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) (local.set 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) (local.set 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) (local.set 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) (local.set 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) (local.set 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) (local.set 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) (local.set 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) (local.set 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) (local.set 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) (local.set 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) (local.set 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) (local.set 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) (local.set 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) (local.set 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) (local.set 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) (local.set 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) (local.set 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) (local.set 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) (local.set 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) (local.set 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) (local.set 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) (local.set 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) (local.set 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) (local.set 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) (local.set 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) (local.set 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) (local.set 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) (local.set 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) (local.set 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) (local.set 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) (local.set 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) (local.set 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) (local.set 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) (local.set 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) (local.set 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) (local.set 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) (local.set 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) (local.set 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) (local.set 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) (local.set 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) (local.set 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) (local.set 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) (local.set 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) (local.set 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) (local.set 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) (local.set 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) (local.set 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) (local.set 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) (local.set 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) (local.set 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) (local.set 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) (local.set 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) (local.set 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) (local.set 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) (local.set 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) (local.set 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) (local.set 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) (local.set 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) (local.set 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) (local.set 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) (local.set 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) (local.set 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) (local.set 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) (local.set 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) (local.set 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) (local.set 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) (local.set 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) (local.set 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) (local.set 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) (local.set 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) (local.set 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) (local.set 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) (local.set 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) (local.set 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) (local.set 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) (local.set 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) (local.set 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) (local.set 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) (local.set 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) (local.set 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) (local.set 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) (local.set 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) (local.set 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) (local.set 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) (local.set 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) (local.set 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) (local.set 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) (local.set 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) (local.set 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) (local.set 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) (local.set 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) (local.set 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) (local.set 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) (local.set 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) (local.set 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) (local.set 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) (local.set 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) (local.set 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) (local.set 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) (local.set 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) (local.set 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) (local.set 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) (local.set 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) (local.set 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) (local.set 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) (local.set 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) (local.set 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) (local.set 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) (local.set 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) (local.set 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) (local.set 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) (local.set 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) (local.set 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) (local.set 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) (local.set 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) (local.set 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) (local.set 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) (local.set 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) (local.set 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) (local.set 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) (local.set 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) (local.set 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) (local.set 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) (local.set 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) (local.set 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) (local.set 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) (local.set 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) (local.set 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) (local.set 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) (local.set 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) (local.set 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) (local.set 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) (local.set 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) (local.set 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) (local.set 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) (local.set 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) (local.set 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) (local.set 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) (local.set 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) (local.set 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) (local.set 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) (local.set 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) (local.set 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) (local.set 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) (local.set 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) (local.set 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) (local.set 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) (local.set 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) (local.set 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) (local.set 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) (local.set 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) (local.set 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) (local.set 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) (local.set 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) (local.set 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) (local.set 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) (local.set 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) (local.set 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) (local.set 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) (local.set 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) (local.set 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) (local.set 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) (local.set 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) (local.set 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) (local.set 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) (local.set 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) (local.set 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) (local.set 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) (local.set 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) (local.set 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) (local.set 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) (local.set 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) (local.set 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) (local.set 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) (local.set 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) (local.set 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) (local.set 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) (local.set 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) (local.set 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) (local.set 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) (local.set 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) (local.set 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) (local.set 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) (local.set 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) (local.set 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) (local.set 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) (local.set 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) (local.set 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) (local.set 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) (local.set 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) (local.set 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) (local.set 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) (local.set 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) (local.set 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) (local.set 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) (local.set 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) (local.set 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) (local.set 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) (local.set 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) (local.set 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) (local.set 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) (local.set 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) (local.set 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) (local.set 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) (local.set 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) (local.set 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) (local.set 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) (local.set 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) (local.set 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) (local.set 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) (local.set 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) (local.set 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) (local.set 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) (local.set 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) (local.set 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) (local.set 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) (local.set 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) (local.set 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) (local.set 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) (local.set 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) (local.set 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) (local.set 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) (local.set 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) (local.set 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) (local.set 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) (local.set 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) (local.set 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) (local.set 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) (local.set 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) (local.set 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) (local.set 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) (local.set 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) (local.set 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) (local.set 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) (local.set 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) (local.set 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) (local.set 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) (local.set 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) (local.set 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) (local.set 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) (local.set 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) (local.set 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) (local.set 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) (local.set 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) (local.set 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) (local.set 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) (local.set 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) (local.set 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) (local.set 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) (local.set 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) (local.set 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) (local.set 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) (local.set 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) (local.set 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) (local.set 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) (local.set 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) (local.set 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) (local.set 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) (local.set 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) (local.set 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) (local.set 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) (local.set 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) (local.set 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) (local.set 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) (local.set 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) (local.set 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) (local.set 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) (local.set 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) (local.set 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) (local.set 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) (local.set 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) (local.set 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) (local.set 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) (local.set 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) (local.set 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) (local.set 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) (local.set 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) (local.set 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) (local.set 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) (local.set 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) (local.set 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) (local.set 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) (local.set 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) (local.set 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) (local.set 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) (local.set 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) (local.set 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) (local.set 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) (local.set 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) (local.set 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) (local.set 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) (local.set 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) (local.set 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) (local.set 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) (local.set 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) (local.set 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) (local.set 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) (local.set 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) (local.set 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) (local.set 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) (local.set 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) (local.set 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) (local.set 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) (local.set 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) (local.set 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) (local.set 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) (local.set 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) (local.set 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) (local.set 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) (local.set 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) (local.set 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) (local.set 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) (local.set 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) (local.set 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) (local.set 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) (local.set 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) (local.set 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) (local.set 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) (local.set 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) (local.set 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) (local.set 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) (local.set 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) (local.set 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) (local.set 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) (local.set 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) (local.set 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) (local.set 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) (local.set 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) (local.set 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) (local.set 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) (local.set 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) (local.set 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) (local.set 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) (local.set 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) (local.set 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) (local.set 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) (local.set 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) (local.set 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) (local.set 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) (local.set 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) (local.set 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) (local.set 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) (local.set 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) (local.set 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) (local.set 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) (local.set 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) (local.set 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) (local.set 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) (local.set 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) (local.set 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) (local.set 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) (local.set 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) (local.set 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) (local.set 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) (local.set 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) (local.set 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) (local.set 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) (local.set 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) (local.set 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) (local.set 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) (local.set 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) (local.set 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) (local.set 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) (local.set 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) (local.set 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) (local.set 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) (local.set 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) (local.set 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) (local.set 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) (local.set 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) (local.set 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) (local.set 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) (local.set 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) (local.set 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) (local.set 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) (local.set 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) (local.set 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) (local.set 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) (local.set 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) (local.set 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) (local.set 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) (local.set 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) (local.set 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) (local.set 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) (local.set 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) (local.set 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) (local.set 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) (local.set 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) (local.set 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) (local.set 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) (local.set 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) (local.set 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) (local.set 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) (local.set 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) (local.set 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) (local.set 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) (local.set 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) (local.set 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) (local.set 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) (local.set 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) (local.set 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) (local.set 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) (local.set 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) (local.set 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) (local.set 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) (local.set 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) (local.set 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) (local.set 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) (local.set 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) (local.set 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) (local.set 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) (local.set 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) (local.set 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) (local.set 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) (local.set 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) (local.set 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) (local.set 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) (local.set 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) (local.set 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) (local.set 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) (local.set 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) (local.set 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) (local.set 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) (local.set 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) (local.set 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) (local.set 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) (local.set 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) (local.set 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) (local.set 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) (local.set 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) (local.set 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) (local.set 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) (local.set 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) (local.set 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) (local.set 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) (local.set 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) (local.set 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) (local.set 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) (local.set 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) (local.set 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) (local.set 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) (local.set 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) (local.set 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) (local.set 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) (local.set 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) (local.set 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) (local.set 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) (local.set 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) (local.set 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) (local.set 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) (local.set 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) (local.set 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) (local.set 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) (local.set 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) (local.set 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) (local.set 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) (local.set 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) (local.set 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) (local.set 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) (local.set 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) (local.set 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) (local.set 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) (local.set 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) (local.set 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) (local.set 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) (local.set 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) (local.set 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) (local.set 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) (local.set 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) (local.set 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) (local.set 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) (local.set 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) (local.set 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) (local.set 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) (local.set 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) (local.set 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) (local.set 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) (local.set 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) (local.set 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) (local.set 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) (local.set 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) (local.set 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) (local.set 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) (local.set 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) (local.set 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) (local.set 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) (local.set 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) (local.set 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) (local.set 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) (local.set 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) (local.set 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) (local.set 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) (local.set 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) (local.set 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) (local.set 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) (local.set 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) (local.set 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) (local.set 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) (local.set 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) (local.set 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) (local.set 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) (local.set 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) (local.set 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) (local.set 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) (local.set 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) (local.set 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) (local.set 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) (local.set 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) (local.set 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) (local.set 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) (local.set 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) (local.set 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) (local.set 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) (local.set 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) (local.set 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) (local.set 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) (local.set 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) (local.set 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) (local.set 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) (local.set 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) (local.set 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) (local.set 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) (local.set 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) (local.set 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) (local.set 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) (local.set 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) (local.set 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) (local.set 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) (local.set 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) (local.set 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) (local.set 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) (local.set 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) (local.set 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) (local.set 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) (local.set 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) (local.set 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) (local.set 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) (local.set 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) (local.set 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) (local.set 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) (local.set 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) (local.set 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) (local.set 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) (local.set 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) (local.set 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) (local.set 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) (local.set 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) (local.set 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) (local.set 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) (local.set 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) (local.set 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) (local.set 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) (local.set 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) (local.set 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) (local.set 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) (local.set 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) (local.set 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) (local.set 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) (local.set 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) (local.set 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) (local.set 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) (local.set 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) (local.set 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) (local.set 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) (local.set 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) (local.set 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) (local.set 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) (local.set 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) (local.set 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) (local.set 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) (local.set 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) (local.set 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) (local.set 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) (local.set 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) (local.set 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) (local.set 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) (local.set 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) (local.set 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) (local.set 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) (local.set 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) (local.set 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) (local.set 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) (local.set 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) (local.set 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) (local.set 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) (local.set 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) (local.set 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) (local.set 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) (local.set 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) (local.set 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) (local.set 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) (local.set 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) (local.set 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) (local.set 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) (local.set 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) (local.set 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) (local.set 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) (local.set 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) (local.set 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) (local.set 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) (local.set 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) (local.set 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) (local.set 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) (local.set 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) (local.set 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) (local.set 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) (local.set 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) (local.set 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) (local.set 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) (local.set 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) (local.set 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) (local.set 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) (local.set 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) (local.set 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) (local.set 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) (local.set 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) (local.set 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) (local.set 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) (local.set 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) (local.set 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) (local.set 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) (local.set 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) (local.set 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) (local.set 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) (local.set 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) (local.set 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) (local.set 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) (local.set 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) (local.set 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) (local.set 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) (local.set 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) (local.set 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) (local.set 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) (local.set 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) (local.set 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) (local.set 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) (local.set 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) (local.set 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) (local.set 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) (local.set 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) (local.set 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) (local.set 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) (local.set 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) (local.set 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) (local.set 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) (local.set 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) (local.set 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) (local.set 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) (local.set 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) (local.set 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) (local.set 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) (local.set 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) (local.set 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) (local.set 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) (local.set 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) (local.set 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) (local.set 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) (local.set 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) (local.set 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) (local.set 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) (local.set 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) (local.set 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) (local.set 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) (local.set 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) (local.set 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) (local.set 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) (local.set 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) (local.set 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) (local.set 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) (local.set 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) (local.set 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) (local.set 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) (local.set 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) (local.set 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) (local.set 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) (local.set 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) (local.set 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) (local.set 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) (local.set 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) (local.set 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) (local.set 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) (local.set 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) (local.set 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) (local.set 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) (local.set 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) (local.set 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) (local.set 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) (local.set 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) (local.set 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) (local.set 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) (local.set 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) (local.set 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) (local.set 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) (local.set 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) (local.set 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) (local.set 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) (local.set 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) (local.set 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) (local.set 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) (local.set 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) (local.set 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) (local.set 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) (local.set 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) (local.set 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) (local.set 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) (local.set 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) (local.set 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) (local.set 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) (local.set 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) (local.set 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) (local.set 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) (local.set 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) (local.set 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) (local.set 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) (local.set 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) (local.set 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) (local.set 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) (local.set 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) (local.set 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) (local.set 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) (local.set 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) (local.set 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) (local.set 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) (local.set 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) (local.set 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) (local.set 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) (local.set 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) (local.set 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) (local.set 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) (local.set 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) (local.set 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) (local.set 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) (local.set 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) (local.set 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) (local.set 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) (local.set 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) (local.set 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) (local.set 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) (local.set 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) (local.set 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) (local.set 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) (local.set 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) (local.set 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) (local.set 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) (local.set 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) (local.set 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) (local.set 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) (local.set 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) (local.set 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) (local.set 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) (local.set 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) (local.set 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) (local.set 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) (local.set 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) (local.set 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) (local.set 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) (local.set 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) (local.set 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) (local.set 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) (local.set 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) (local.set 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) (local.set 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) (local.set 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) (local.set 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) (local.set 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) (local.set 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) (local.set 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) (local.set 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) (local.set 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) (local.set 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) (local.set 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) (local.set 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) (local.set 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) (local.set 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) (local.set 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) (local.set 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) (local.set 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) (local.set 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) (local.set 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) (local.set 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) (local.set 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) (local.set 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) (local.set 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) (local.set 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) (local.set 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) (local.set 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) (local.set 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) (local.set 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) (local.set 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) (local.set 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) (local.set 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) (local.set 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) (local.set 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) (local.set 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) (local.set 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) (local.set 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) (local.set 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) (local.set 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) (local.set 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) (local.set 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) (local.set 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) (local.set 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) (local.set 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) (local.set 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) (local.set 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) (local.set 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) (local.set 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) (local.set 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) (local.set 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) (local.set 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) (local.set 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) (local.set 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) (local.set 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) (local.set 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) (local.set 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) (local.set 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) (local.set 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) (local.set 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) (local.set 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) (local.set 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) (local.set 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) (local.set 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) (local.set 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) (local.set 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) (local.set 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) (local.set 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) (local.set 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) (local.set 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) (local.set 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) (local.set 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) (local.set 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) (local.set 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) (local.set 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) (local.set 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) (local.set 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) (local.set 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) (local.set 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) (local.set 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) (local.set 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) (local.set 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) (local.set 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) (local.set 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) (local.set 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) (local.set 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) (local.set 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) (local.set 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) (local.set 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) (local.set 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) (local.set 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) (local.set 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) (local.set 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) (local.set 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) (local.set 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) (local.set 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) (local.set 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) (local.set 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) (local.set 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) (local.set 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) (local.set 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) (local.set 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) (local.set 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) (local.set 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) (local.set 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) (local.set 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) (local.set 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) (local.set 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) (local.set 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) (local.set 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) (local.set 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) (local.set 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) (local.set 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) (local.set 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) (local.set 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) (local.set 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) (local.set 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) (local.set 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) (local.set 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) (local.set 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) (local.set 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) (local.set 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) (local.set 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) (local.set 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) (local.set 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) (local.set 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) (local.set 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) (local.set 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) (local.set 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) (local.set 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) (local.set 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) (local.set 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) (local.set 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) (local.set 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) (local.set 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) (local.set 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) (local.set 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) (local.set 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) (local.set 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) (local.set 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) (local.set 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) (local.set 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) (local.set 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) (local.set 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) (local.set 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) (local.set 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) (local.set 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) (local.set 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) (local.set 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) (local.set 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) (local.set 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) (local.set 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) (local.set 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) (local.set 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) (local.set 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) (local.set 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) (local.set 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) (local.set 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) (local.set 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) (local.set 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) (local.set 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) (local.set 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) (local.set 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) (local.set 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) (local.set 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) (local.set 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) (local.set 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) (local.set 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) (local.set 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) (local.set 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) (local.set 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) (local.set 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) (local.set 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) (local.set 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) (local.set 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) (local.set 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) (local.set 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) (local.set 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) (local.set 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) (local.set 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) (local.set 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) (local.set 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) (local.set 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) (local.set 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) (local.set 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) (local.set 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) (local.set 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) (local.set 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) (local.set 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) (local.set 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) (local.set 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) (local.set 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) (local.set 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) (local.set 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) (local.set 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) (local.set 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) (local.set 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) (local.set 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) (local.set 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) (local.set 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) (local.set 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) (local.set 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) (local.set 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) (local.set 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) (local.set 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) (local.set 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) (local.set 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) (local.set 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) (local.set 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) (local.set 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) (local.set 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) (local.set 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) (local.set 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) (local.set 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) (local.set 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) (local.set 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) (local.set 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) (local.set 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) (local.set 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) (local.set 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) (local.set 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) (local.set 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) (local.set 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) (local.set 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) (local.set 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) (local.set 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) (local.set 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) (local.set 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) (local.set 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) (local.set 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) (local.set 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) (local.set 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) (local.set 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) (local.set 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) (local.set 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) (local.set 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) (local.set 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) (local.set 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) (local.set 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) (local.set 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) (local.set 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) (local.set 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) (local.set 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) (local.set 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) (local.set 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) (local.set 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) (local.set 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) (local.set 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) (local.set 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) (local.set 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) (local.set 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) (local.set 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) (local.set 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) (local.set 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) (local.set 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) (local.set 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) (local.set 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) (local.set 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) (local.set 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) (local.set 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) (local.set 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) (local.set 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) (local.set 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) (local.set 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) (local.set 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) (local.set 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) (local.set 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) (local.set 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) (local.set 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) (local.set 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) (local.set 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) (local.set 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) (local.set 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) (local.set 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) (local.set 0x420 (i64.load offset=0x420 align=1 (i32.const 0))) (local.set 0x421 (i64.load offset=0x421 align=1 (i32.const 0))) (local.set 0x422 (i64.load offset=0x422 align=1 (i32.const 0))) (local.set 0x423 (i64.load offset=0x423 align=1 (i32.const 0))) (local.set 0x424 (i64.load offset=0x424 align=1 (i32.const 0))) (local.set 0x425 (i64.load offset=0x425 align=1 (i32.const 0))) (local.set 0x426 (i64.load offset=0x426 align=1 (i32.const 0))) (local.set 0x427 (i64.load offset=0x427 align=1 (i32.const 0))) (local.set 0x428 (i64.load offset=0x428 align=1 (i32.const 0))) (local.set 0x429 (i64.load offset=0x429 align=1 (i32.const 0))) (local.set 0x42a (i64.load offset=0x42a align=1 (i32.const 0))) (local.set 0x42b (i64.load offset=0x42b align=1 (i32.const 0))) (local.set 0x42c (i64.load offset=0x42c align=1 (i32.const 0))) (local.set 0x42d (i64.load offset=0x42d align=1 (i32.const 0))) (local.set 0x42e (i64.load offset=0x42e align=1 (i32.const 0))) (local.set 0x42f (i64.load offset=0x42f align=1 (i32.const 0))) (local.set 0x430 (i64.load offset=0x430 align=1 (i32.const 0))) (local.set 0x431 (i64.load offset=0x431 align=1 (i32.const 0))) (local.set 0x432 (i64.load offset=0x432 align=1 (i32.const 0))) (local.set 0x433 (i64.load offset=0x433 align=1 (i32.const 0))) (local.set 0x434 (i64.load offset=0x434 align=1 (i32.const 0))) (local.set 0x435 (i64.load offset=0x435 align=1 (i32.const 0))) (local.set 0x436 (i64.load offset=0x436 align=1 (i32.const 0))) (local.set 0x437 (i64.load offset=0x437 align=1 (i32.const 0))) (local.set 0x438 (i64.load offset=0x438 align=1 (i32.const 0))) (local.set 0x439 (i64.load offset=0x439 align=1 (i32.const 0))) (local.set 0x43a (i64.load offset=0x43a align=1 (i32.const 0))) (local.set 0x43b (i64.load offset=0x43b align=1 (i32.const 0))) (local.set 0x43c (i64.load offset=0x43c align=1 (i32.const 0))) (local.set 0x43d (i64.load offset=0x43d align=1 (i32.const 0))) (local.set 0x43e (i64.load offset=0x43e align=1 (i32.const 0))) (local.set 0x43f (i64.load offset=0x43f align=1 (i32.const 0))) (local.set 0x440 (i64.load offset=0x440 align=1 (i32.const 0))) (local.set 0x441 (i64.load offset=0x441 align=1 (i32.const 0))) (local.set 0x442 (i64.load offset=0x442 align=1 (i32.const 0))) (local.set 0x443 (i64.load offset=0x443 align=1 (i32.const 0))) (local.set 0x444 (i64.load offset=0x444 align=1 (i32.const 0))) (local.set 0x445 (i64.load offset=0x445 align=1 (i32.const 0))) (local.set 0x446 (i64.load offset=0x446 align=1 (i32.const 0))) (local.set 0x447 (i64.load offset=0x447 align=1 (i32.const 0))) (local.set 0x448 (i64.load offset=0x448 align=1 (i32.const 0))) (local.set 0x449 (i64.load offset=0x449 align=1 (i32.const 0))) (local.set 0x44a (i64.load offset=0x44a align=1 (i32.const 0))) (local.set 0x44b (i64.load offset=0x44b align=1 (i32.const 0))) (local.set 0x44c (i64.load offset=0x44c align=1 (i32.const 0))) (local.set 0x44d (i64.load offset=0x44d align=1 (i32.const 0))) (local.set 0x44e (i64.load offset=0x44e align=1 (i32.const 0))) (local.set 0x44f (i64.load offset=0x44f align=1 (i32.const 0))) (local.set 0x450 (i64.load offset=0x450 align=1 (i32.const 0))) (local.set 0x451 (i64.load offset=0x451 align=1 (i32.const 0))) (local.set 0x452 (i64.load offset=0x452 align=1 (i32.const 0))) (local.set 0x453 (i64.load offset=0x453 align=1 (i32.const 0))) (local.set 0x454 (i64.load offset=0x454 align=1 (i32.const 0))) (local.set 0x455 (i64.load offset=0x455 align=1 (i32.const 0))) (local.set 0x456 (i64.load offset=0x456 align=1 (i32.const 0))) (local.set 0x457 (i64.load offset=0x457 align=1 (i32.const 0))) (local.set 0x458 (i64.load offset=0x458 align=1 (i32.const 0))) (local.set 0x459 (i64.load offset=0x459 align=1 (i32.const 0))) (local.set 0x45a (i64.load offset=0x45a align=1 (i32.const 0))) (local.set 0x45b (i64.load offset=0x45b align=1 (i32.const 0))) (local.set 0x45c (i64.load offset=0x45c align=1 (i32.const 0))) (local.set 0x45d (i64.load offset=0x45d align=1 (i32.const 0))) (local.set 0x45e (i64.load offset=0x45e align=1 (i32.const 0))) (local.set 0x45f (i64.load offset=0x45f align=1 (i32.const 0))) (local.set 0x460 (i64.load offset=0x460 align=1 (i32.const 0))) (local.set 0x461 (i64.load offset=0x461 align=1 (i32.const 0))) (local.set 0x462 (i64.load offset=0x462 align=1 (i32.const 0))) (local.set 0x463 (i64.load offset=0x463 align=1 (i32.const 0))) (local.set 0x464 (i64.load offset=0x464 align=1 (i32.const 0))) (local.set 0x465 (i64.load offset=0x465 align=1 (i32.const 0))) (local.set 0x466 (i64.load offset=0x466 align=1 (i32.const 0))) (local.set 0x467 (i64.load offset=0x467 align=1 (i32.const 0))) (local.set 0x468 (i64.load offset=0x468 align=1 (i32.const 0))) (local.set 0x469 (i64.load offset=0x469 align=1 (i32.const 0))) (local.set 0x46a (i64.load offset=0x46a align=1 (i32.const 0))) (local.set 0x46b (i64.load offset=0x46b align=1 (i32.const 0))) (local.set 0x46c (i64.load offset=0x46c align=1 (i32.const 0))) (local.set 0x46d (i64.load offset=0x46d align=1 (i32.const 0))) (local.set 0x46e (i64.load offset=0x46e align=1 (i32.const 0))) (local.set 0x46f (i64.load offset=0x46f align=1 (i32.const 0))) (local.set 0x470 (i64.load offset=0x470 align=1 (i32.const 0))) (local.set 0x471 (i64.load offset=0x471 align=1 (i32.const 0))) (local.set 0x472 (i64.load offset=0x472 align=1 (i32.const 0))) (local.set 0x473 (i64.load offset=0x473 align=1 (i32.const 0))) (local.set 0x474 (i64.load offset=0x474 align=1 (i32.const 0))) (local.set 0x475 (i64.load offset=0x475 align=1 (i32.const 0))) (local.set 0x476 (i64.load offset=0x476 align=1 (i32.const 0))) (local.set 0x477 (i64.load offset=0x477 align=1 (i32.const 0))) (local.set 0x478 (i64.load offset=0x478 align=1 (i32.const 0))) (local.set 0x479 (i64.load offset=0x479 align=1 (i32.const 0))) (local.set 0x47a (i64.load offset=0x47a align=1 (i32.const 0))) (local.set 0x47b (i64.load offset=0x47b align=1 (i32.const 0))) (local.set 0x47c (i64.load offset=0x47c align=1 (i32.const 0))) (local.set 0x47d (i64.load offset=0x47d align=1 (i32.const 0))) (local.set 0x47e (i64.load offset=0x47e align=1 (i32.const 0))) (local.set 0x47f (i64.load offset=0x47f align=1 (i32.const 0))) (local.set 0x480 (i64.load offset=0x480 align=1 (i32.const 0))) (local.set 0x481 (i64.load offset=0x481 align=1 (i32.const 0))) (local.set 0x482 (i64.load offset=0x482 align=1 (i32.const 0))) (local.set 0x483 (i64.load offset=0x483 align=1 (i32.const 0))) (local.set 0x484 (i64.load offset=0x484 align=1 (i32.const 0))) (local.set 0x485 (i64.load offset=0x485 align=1 (i32.const 0))) (local.set 0x486 (i64.load offset=0x486 align=1 (i32.const 0))) (local.set 0x487 (i64.load offset=0x487 align=1 (i32.const 0))) (local.set 0x488 (i64.load offset=0x488 align=1 (i32.const 0))) (local.set 0x489 (i64.load offset=0x489 align=1 (i32.const 0))) (local.set 0x48a (i64.load offset=0x48a align=1 (i32.const 0))) (local.set 0x48b (i64.load offset=0x48b align=1 (i32.const 0))) (local.set 0x48c (i64.load offset=0x48c align=1 (i32.const 0))) (local.set 0x48d (i64.load offset=0x48d align=1 (i32.const 0))) (local.set 0x48e (i64.load offset=0x48e align=1 (i32.const 0))) (local.set 0x48f (i64.load offset=0x48f align=1 (i32.const 0))) (local.set 0x490 (i64.load offset=0x490 align=1 (i32.const 0))) (local.set 0x491 (i64.load offset=0x491 align=1 (i32.const 0))) (local.set 0x492 (i64.load offset=0x492 align=1 (i32.const 0))) (local.set 0x493 (i64.load offset=0x493 align=1 (i32.const 0))) (local.set 0x494 (i64.load offset=0x494 align=1 (i32.const 0))) (local.set 0x495 (i64.load offset=0x495 align=1 (i32.const 0))) (local.set 0x496 (i64.load offset=0x496 align=1 (i32.const 0))) (local.set 0x497 (i64.load offset=0x497 align=1 (i32.const 0))) (local.set 0x498 (i64.load offset=0x498 align=1 (i32.const 0))) (local.set 0x499 (i64.load offset=0x499 align=1 (i32.const 0))) (local.set 0x49a (i64.load offset=0x49a align=1 (i32.const 0))) (local.set 0x49b (i64.load offset=0x49b align=1 (i32.const 0))) (local.set 0x49c (i64.load offset=0x49c align=1 (i32.const 0))) (local.set 0x49d (i64.load offset=0x49d align=1 (i32.const 0))) (local.set 0x49e (i64.load offset=0x49e align=1 (i32.const 0))) (local.set 0x49f (i64.load offset=0x49f align=1 (i32.const 0))) (local.set 0x4a0 (i64.load offset=0x4a0 align=1 (i32.const 0))) (local.set 0x4a1 (i64.load offset=0x4a1 align=1 (i32.const 0))) (local.set 0x4a2 (i64.load offset=0x4a2 align=1 (i32.const 0))) (local.set 0x4a3 (i64.load offset=0x4a3 align=1 (i32.const 0))) (local.set 0x4a4 (i64.load offset=0x4a4 align=1 (i32.const 0))) (local.set 0x4a5 (i64.load offset=0x4a5 align=1 (i32.const 0))) (local.set 0x4a6 (i64.load offset=0x4a6 align=1 (i32.const 0))) (local.set 0x4a7 (i64.load offset=0x4a7 align=1 (i32.const 0))) (local.set 0x4a8 (i64.load offset=0x4a8 align=1 (i32.const 0))) (local.set 0x4a9 (i64.load offset=0x4a9 align=1 (i32.const 0))) (local.set 0x4aa (i64.load offset=0x4aa align=1 (i32.const 0))) (local.set 0x4ab (i64.load offset=0x4ab align=1 (i32.const 0))) (local.set 0x4ac (i64.load offset=0x4ac align=1 (i32.const 0))) (local.set 0x4ad (i64.load offset=0x4ad align=1 (i32.const 0))) (local.set 0x4ae (i64.load offset=0x4ae align=1 (i32.const 0))) (local.set 0x4af (i64.load offset=0x4af align=1 (i32.const 0))) (local.set 0x4b0 (i64.load offset=0x4b0 align=1 (i32.const 0))) (local.set 0x4b1 (i64.load offset=0x4b1 align=1 (i32.const 0))) (local.set 0x4b2 (i64.load offset=0x4b2 align=1 (i32.const 0))) (local.set 0x4b3 (i64.load offset=0x4b3 align=1 (i32.const 0))) (local.set 0x4b4 (i64.load offset=0x4b4 align=1 (i32.const 0))) (local.set 0x4b5 (i64.load offset=0x4b5 align=1 (i32.const 0))) (local.set 0x4b6 (i64.load offset=0x4b6 align=1 (i32.const 0))) (local.set 0x4b7 (i64.load offset=0x4b7 align=1 (i32.const 0))) (local.set 0x4b8 (i64.load offset=0x4b8 align=1 (i32.const 0))) (local.set 0x4b9 (i64.load offset=0x4b9 align=1 (i32.const 0))) (local.set 0x4ba (i64.load offset=0x4ba align=1 (i32.const 0))) (local.set 0x4bb (i64.load offset=0x4bb align=1 (i32.const 0))) (local.set 0x4bc (i64.load offset=0x4bc align=1 (i32.const 0))) (local.set 0x4bd (i64.load offset=0x4bd align=1 (i32.const 0))) (local.set 0x4be (i64.load offset=0x4be align=1 (i32.const 0))) (local.set 0x4bf (i64.load offset=0x4bf align=1 (i32.const 0))) (local.set 0x4c0 (i64.load offset=0x4c0 align=1 (i32.const 0))) (local.set 0x4c1 (i64.load offset=0x4c1 align=1 (i32.const 0))) (local.set 0x4c2 (i64.load offset=0x4c2 align=1 (i32.const 0))) (local.set 0x4c3 (i64.load offset=0x4c3 align=1 (i32.const 0))) (local.set 0x4c4 (i64.load offset=0x4c4 align=1 (i32.const 0))) (local.set 0x4c5 (i64.load offset=0x4c5 align=1 (i32.const 0))) (local.set 0x4c6 (i64.load offset=0x4c6 align=1 (i32.const 0))) (local.set 0x4c7 (i64.load offset=0x4c7 align=1 (i32.const 0))) (local.set 0x4c8 (i64.load offset=0x4c8 align=1 (i32.const 0))) (local.set 0x4c9 (i64.load offset=0x4c9 align=1 (i32.const 0))) (local.set 0x4ca (i64.load offset=0x4ca align=1 (i32.const 0))) (local.set 0x4cb (i64.load offset=0x4cb align=1 (i32.const 0))) (local.set 0x4cc (i64.load offset=0x4cc align=1 (i32.const 0))) (local.set 0x4cd (i64.load offset=0x4cd align=1 (i32.const 0))) (local.set 0x4ce (i64.load offset=0x4ce align=1 (i32.const 0))) (local.set 0x4cf (i64.load offset=0x4cf align=1 (i32.const 0))) (local.set 0x4d0 (i64.load offset=0x4d0 align=1 (i32.const 0))) (local.set 0x4d1 (i64.load offset=0x4d1 align=1 (i32.const 0))) (local.set 0x4d2 (i64.load offset=0x4d2 align=1 (i32.const 0))) (local.set 0x4d3 (i64.load offset=0x4d3 align=1 (i32.const 0))) (local.set 0x4d4 (i64.load offset=0x4d4 align=1 (i32.const 0))) (local.set 0x4d5 (i64.load offset=0x4d5 align=1 (i32.const 0))) (local.set 0x4d6 (i64.load offset=0x4d6 align=1 (i32.const 0))) (local.set 0x4d7 (i64.load offset=0x4d7 align=1 (i32.const 0))) (local.set 0x4d8 (i64.load offset=0x4d8 align=1 (i32.const 0))) (local.set 0x4d9 (i64.load offset=0x4d9 align=1 (i32.const 0))) (local.set 0x4da (i64.load offset=0x4da align=1 (i32.const 0))) (local.set 0x4db (i64.load offset=0x4db align=1 (i32.const 0))) (local.set 0x4dc (i64.load offset=0x4dc align=1 (i32.const 0))) (local.set 0x4dd (i64.load offset=0x4dd align=1 (i32.const 0))) (local.set 0x4de (i64.load offset=0x4de align=1 (i32.const 0))) (local.set 0x4df (i64.load offset=0x4df align=1 (i32.const 0))) (local.set 0x4e0 (i64.load offset=0x4e0 align=1 (i32.const 0))) (local.set 0x4e1 (i64.load offset=0x4e1 align=1 (i32.const 0))) (local.set 0x4e2 (i64.load offset=0x4e2 align=1 (i32.const 0))) (local.set 0x4e3 (i64.load offset=0x4e3 align=1 (i32.const 0))) (local.set 0x4e4 (i64.load offset=0x4e4 align=1 (i32.const 0))) (local.set 0x4e5 (i64.load offset=0x4e5 align=1 (i32.const 0))) (local.set 0x4e6 (i64.load offset=0x4e6 align=1 (i32.const 0))) (local.set 0x4e7 (i64.load offset=0x4e7 align=1 (i32.const 0))) (local.set 0x4e8 (i64.load offset=0x4e8 align=1 (i32.const 0))) (local.set 0x4e9 (i64.load offset=0x4e9 align=1 (i32.const 0))) (local.set 0x4ea (i64.load offset=0x4ea align=1 (i32.const 0))) (local.set 0x4eb (i64.load offset=0x4eb align=1 (i32.const 0))) (local.set 0x4ec (i64.load offset=0x4ec align=1 (i32.const 0))) (local.set 0x4ed (i64.load offset=0x4ed align=1 (i32.const 0))) (local.set 0x4ee (i64.load offset=0x4ee align=1 (i32.const 0))) (local.set 0x4ef (i64.load offset=0x4ef align=1 (i32.const 0))) (local.set 0x4f0 (i64.load offset=0x4f0 align=1 (i32.const 0))) (local.set 0x4f1 (i64.load offset=0x4f1 align=1 (i32.const 0))) (local.set 0x4f2 (i64.load offset=0x4f2 align=1 (i32.const 0))) (local.set 0x4f3 (i64.load offset=0x4f3 align=1 (i32.const 0))) (local.set 0x4f4 (i64.load offset=0x4f4 align=1 (i32.const 0))) (local.set 0x4f5 (i64.load offset=0x4f5 align=1 (i32.const 0))) (local.set 0x4f6 (i64.load offset=0x4f6 align=1 (i32.const 0))) (local.set 0x4f7 (i64.load offset=0x4f7 align=1 (i32.const 0))) (local.set 0x4f8 (i64.load offset=0x4f8 align=1 (i32.const 0))) (local.set 0x4f9 (i64.load offset=0x4f9 align=1 (i32.const 0))) (local.set 0x4fa (i64.load offset=0x4fa align=1 (i32.const 0))) (local.set 0x4fb (i64.load offset=0x4fb align=1 (i32.const 0))) (local.set 0x4fc (i64.load offset=0x4fc align=1 (i32.const 0))) (local.set 0x4fd (i64.load offset=0x4fd align=1 (i32.const 0))) (local.set 0x4fe (i64.load offset=0x4fe align=1 (i32.const 0))) (local.set 0x4ff (i64.load offset=0x4ff align=1 (i32.const 0))) (local.set 0x500 (i64.load offset=0x500 align=1 (i32.const 0))) (local.set 0x501 (i64.load offset=0x501 align=1 (i32.const 0))) (local.set 0x502 (i64.load offset=0x502 align=1 (i32.const 0))) (local.set 0x503 (i64.load offset=0x503 align=1 (i32.const 0))) (local.set 0x504 (i64.load offset=0x504 align=1 (i32.const 0))) (local.set 0x505 (i64.load offset=0x505 align=1 (i32.const 0))) (local.set 0x506 (i64.load offset=0x506 align=1 (i32.const 0))) (local.set 0x507 (i64.load offset=0x507 align=1 (i32.const 0))) (local.set 0x508 (i64.load offset=0x508 align=1 (i32.const 0))) (local.set 0x509 (i64.load offset=0x509 align=1 (i32.const 0))) (local.set 0x50a (i64.load offset=0x50a align=1 (i32.const 0))) (local.set 0x50b (i64.load offset=0x50b align=1 (i32.const 0))) (local.set 0x50c (i64.load offset=0x50c align=1 (i32.const 0))) (local.set 0x50d (i64.load offset=0x50d align=1 (i32.const 0))) (local.set 0x50e (i64.load offset=0x50e align=1 (i32.const 0))) (local.set 0x50f (i64.load offset=0x50f align=1 (i32.const 0))) (local.set 0x510 (i64.load offset=0x510 align=1 (i32.const 0))) (local.set 0x511 (i64.load offset=0x511 align=1 (i32.const 0))) (local.set 0x512 (i64.load offset=0x512 align=1 (i32.const 0))) (local.set 0x513 (i64.load offset=0x513 align=1 (i32.const 0))) (local.set 0x514 (i64.load offset=0x514 align=1 (i32.const 0))) (local.set 0x515 (i64.load offset=0x515 align=1 (i32.const 0))) (local.set 0x516 (i64.load offset=0x516 align=1 (i32.const 0))) (local.set 0x517 (i64.load offset=0x517 align=1 (i32.const 0))) (local.set 0x518 (i64.load offset=0x518 align=1 (i32.const 0))) (local.set 0x519 (i64.load offset=0x519 align=1 (i32.const 0))) (local.set 0x51a (i64.load offset=0x51a align=1 (i32.const 0))) (local.set 0x51b (i64.load offset=0x51b align=1 (i32.const 0))) (local.set 0x51c (i64.load offset=0x51c align=1 (i32.const 0))) (local.set 0x51d (i64.load offset=0x51d align=1 (i32.const 0))) (local.set 0x51e (i64.load offset=0x51e align=1 (i32.const 0))) (local.set 0x51f (i64.load offset=0x51f align=1 (i32.const 0))) (local.set 0x520 (i64.load offset=0x520 align=1 (i32.const 0))) (local.set 0x521 (i64.load offset=0x521 align=1 (i32.const 0))) (local.set 0x522 (i64.load offset=0x522 align=1 (i32.const 0))) (local.set 0x523 (i64.load offset=0x523 align=1 (i32.const 0))) (local.set 0x524 (i64.load offset=0x524 align=1 (i32.const 0))) (local.set 0x525 (i64.load offset=0x525 align=1 (i32.const 0))) (local.set 0x526 (i64.load offset=0x526 align=1 (i32.const 0))) (local.set 0x527 (i64.load offset=0x527 align=1 (i32.const 0))) (local.set 0x528 (i64.load offset=0x528 align=1 (i32.const 0))) (local.set 0x529 (i64.load offset=0x529 align=1 (i32.const 0))) (local.set 0x52a (i64.load offset=0x52a align=1 (i32.const 0))) (local.set 0x52b (i64.load offset=0x52b align=1 (i32.const 0))) (local.set 0x52c (i64.load offset=0x52c align=1 (i32.const 0))) (local.set 0x52d (i64.load offset=0x52d align=1 (i32.const 0))) (local.set 0x52e (i64.load offset=0x52e align=1 (i32.const 0))) (local.set 0x52f (i64.load offset=0x52f align=1 (i32.const 0))) (local.set 0x530 (i64.load offset=0x530 align=1 (i32.const 0))) (local.set 0x531 (i64.load offset=0x531 align=1 (i32.const 0))) (local.set 0x532 (i64.load offset=0x532 align=1 (i32.const 0))) (local.set 0x533 (i64.load offset=0x533 align=1 (i32.const 0))) (local.set 0x534 (i64.load offset=0x534 align=1 (i32.const 0))) (local.set 0x535 (i64.load offset=0x535 align=1 (i32.const 0))) (local.set 0x536 (i64.load offset=0x536 align=1 (i32.const 0))) (local.set 0x537 (i64.load offset=0x537 align=1 (i32.const 0))) (local.set 0x538 (i64.load offset=0x538 align=1 (i32.const 0))) (local.set 0x539 (i64.load offset=0x539 align=1 (i32.const 0))) (local.set 0x53a (i64.load offset=0x53a align=1 (i32.const 0))) (local.set 0x53b (i64.load offset=0x53b align=1 (i32.const 0))) (local.set 0x53c (i64.load offset=0x53c align=1 (i32.const 0))) (local.set 0x53d (i64.load offset=0x53d align=1 (i32.const 0))) (local.set 0x53e (i64.load offset=0x53e align=1 (i32.const 0))) (local.set 0x53f (i64.load offset=0x53f align=1 (i32.const 0))) (local.set 0x540 (i64.load offset=0x540 align=1 (i32.const 0))) (local.set 0x541 (i64.load offset=0x541 align=1 (i32.const 0))) (local.set 0x542 (i64.load offset=0x542 align=1 (i32.const 0))) (local.set 0x543 (i64.load offset=0x543 align=1 (i32.const 0))) (local.set 0x544 (i64.load offset=0x544 align=1 (i32.const 0))) (local.set 0x545 (i64.load offset=0x545 align=1 (i32.const 0))) (local.set 0x546 (i64.load offset=0x546 align=1 (i32.const 0))) (local.set 0x547 (i64.load offset=0x547 align=1 (i32.const 0))) (local.set 0x548 (i64.load offset=0x548 align=1 (i32.const 0))) (local.set 0x549 (i64.load offset=0x549 align=1 (i32.const 0))) (local.set 0x54a (i64.load offset=0x54a align=1 (i32.const 0))) (local.set 0x54b (i64.load offset=0x54b align=1 (i32.const 0))) (local.set 0x54c (i64.load offset=0x54c align=1 (i32.const 0))) (local.set 0x54d (i64.load offset=0x54d align=1 (i32.const 0))) (local.set 0x54e (i64.load offset=0x54e align=1 (i32.const 0))) (local.set 0x54f (i64.load offset=0x54f align=1 (i32.const 0))) (local.set 0x550 (i64.load offset=0x550 align=1 (i32.const 0))) (local.set 0x551 (i64.load offset=0x551 align=1 (i32.const 0))) (local.set 0x552 (i64.load offset=0x552 align=1 (i32.const 0))) (local.set 0x553 (i64.load offset=0x553 align=1 (i32.const 0))) (local.set 0x554 (i64.load offset=0x554 align=1 (i32.const 0))) (local.set 0x555 (i64.load offset=0x555 align=1 (i32.const 0))) (local.set 0x556 (i64.load offset=0x556 align=1 (i32.const 0))) (local.set 0x557 (i64.load offset=0x557 align=1 (i32.const 0))) (local.set 0x558 (i64.load offset=0x558 align=1 (i32.const 0))) (local.set 0x559 (i64.load offset=0x559 align=1 (i32.const 0))) (local.set 0x55a (i64.load offset=0x55a align=1 (i32.const 0))) (local.set 0x55b (i64.load offset=0x55b align=1 (i32.const 0))) (local.set 0x55c (i64.load offset=0x55c align=1 (i32.const 0))) (local.set 0x55d (i64.load offset=0x55d align=1 (i32.const 0))) (local.set 0x55e (i64.load offset=0x55e align=1 (i32.const 0))) (local.set 0x55f (i64.load offset=0x55f align=1 (i32.const 0))) (local.set 0x560 (i64.load offset=0x560 align=1 (i32.const 0))) (local.set 0x561 (i64.load offset=0x561 align=1 (i32.const 0))) (local.set 0x562 (i64.load offset=0x562 align=1 (i32.const 0))) (local.set 0x563 (i64.load offset=0x563 align=1 (i32.const 0))) (local.set 0x564 (i64.load offset=0x564 align=1 (i32.const 0))) (local.set 0x565 (i64.load offset=0x565 align=1 (i32.const 0))) (local.set 0x566 (i64.load offset=0x566 align=1 (i32.const 0))) (local.set 0x567 (i64.load offset=0x567 align=1 (i32.const 0))) (local.set 0x568 (i64.load offset=0x568 align=1 (i32.const 0))) (local.set 0x569 (i64.load offset=0x569 align=1 (i32.const 0))) (local.set 0x56a (i64.load offset=0x56a align=1 (i32.const 0))) (local.set 0x56b (i64.load offset=0x56b align=1 (i32.const 0))) (local.set 0x56c (i64.load offset=0x56c align=1 (i32.const 0))) (local.set 0x56d (i64.load offset=0x56d align=1 (i32.const 0))) (local.set 0x56e (i64.load offset=0x56e align=1 (i32.const 0))) (local.set 0x56f (i64.load offset=0x56f align=1 (i32.const 0))) (local.set 0x570 (i64.load offset=0x570 align=1 (i32.const 0))) (local.set 0x571 (i64.load offset=0x571 align=1 (i32.const 0))) (local.set 0x572 (i64.load offset=0x572 align=1 (i32.const 0))) (local.set 0x573 (i64.load offset=0x573 align=1 (i32.const 0))) (local.set 0x574 (i64.load offset=0x574 align=1 (i32.const 0))) (local.set 0x575 (i64.load offset=0x575 align=1 (i32.const 0))) (local.set 0x576 (i64.load offset=0x576 align=1 (i32.const 0))) (local.set 0x577 (i64.load offset=0x577 align=1 (i32.const 0))) (local.set 0x578 (i64.load offset=0x578 align=1 (i32.const 0))) (local.set 0x579 (i64.load offset=0x579 align=1 (i32.const 0))) (local.set 0x57a (i64.load offset=0x57a align=1 (i32.const 0))) (local.set 0x57b (i64.load offset=0x57b align=1 (i32.const 0))) (local.set 0x57c (i64.load offset=0x57c align=1 (i32.const 0))) (local.set 0x57d (i64.load offset=0x57d align=1 (i32.const 0))) (local.set 0x57e (i64.load offset=0x57e align=1 (i32.const 0))) (local.set 0x57f (i64.load offset=0x57f align=1 (i32.const 0))) (local.set 0x580 (i64.load offset=0x580 align=1 (i32.const 0))) (local.set 0x581 (i64.load offset=0x581 align=1 (i32.const 0))) (local.set 0x582 (i64.load offset=0x582 align=1 (i32.const 0))) (local.set 0x583 (i64.load offset=0x583 align=1 (i32.const 0))) (local.set 0x584 (i64.load offset=0x584 align=1 (i32.const 0))) (local.set 0x585 (i64.load offset=0x585 align=1 (i32.const 0))) (local.set 0x586 (i64.load offset=0x586 align=1 (i32.const 0))) (local.set 0x587 (i64.load offset=0x587 align=1 (i32.const 0))) (local.set 0x588 (i64.load offset=0x588 align=1 (i32.const 0))) (local.set 0x589 (i64.load offset=0x589 align=1 (i32.const 0))) (local.set 0x58a (i64.load offset=0x58a align=1 (i32.const 0))) (local.set 0x58b (i64.load offset=0x58b align=1 (i32.const 0))) (local.set 0x58c (i64.load offset=0x58c align=1 (i32.const 0))) (local.set 0x58d (i64.load offset=0x58d align=1 (i32.const 0))) (local.set 0x58e (i64.load offset=0x58e align=1 (i32.const 0))) (local.set 0x58f (i64.load offset=0x58f align=1 (i32.const 0))) (local.set 0x590 (i64.load offset=0x590 align=1 (i32.const 0))) (local.set 0x591 (i64.load offset=0x591 align=1 (i32.const 0))) (local.set 0x592 (i64.load offset=0x592 align=1 (i32.const 0))) (local.set 0x593 (i64.load offset=0x593 align=1 (i32.const 0))) (local.set 0x594 (i64.load offset=0x594 align=1 (i32.const 0))) (local.set 0x595 (i64.load offset=0x595 align=1 (i32.const 0))) (local.set 0x596 (i64.load offset=0x596 align=1 (i32.const 0))) (local.set 0x597 (i64.load offset=0x597 align=1 (i32.const 0))) (local.set 0x598 (i64.load offset=0x598 align=1 (i32.const 0))) (local.set 0x599 (i64.load offset=0x599 align=1 (i32.const 0))) (local.set 0x59a (i64.load offset=0x59a align=1 (i32.const 0))) (local.set 0x59b (i64.load offset=0x59b align=1 (i32.const 0))) (local.set 0x59c (i64.load offset=0x59c align=1 (i32.const 0))) (local.set 0x59d (i64.load offset=0x59d align=1 (i32.const 0))) (local.set 0x59e (i64.load offset=0x59e align=1 (i32.const 0))) (local.set 0x59f (i64.load offset=0x59f align=1 (i32.const 0))) (local.set 0x5a0 (i64.load offset=0x5a0 align=1 (i32.const 0))) (local.set 0x5a1 (i64.load offset=0x5a1 align=1 (i32.const 0))) (local.set 0x5a2 (i64.load offset=0x5a2 align=1 (i32.const 0))) (local.set 0x5a3 (i64.load offset=0x5a3 align=1 (i32.const 0))) (local.set 0x5a4 (i64.load offset=0x5a4 align=1 (i32.const 0))) (local.set 0x5a5 (i64.load offset=0x5a5 align=1 (i32.const 0))) (local.set 0x5a6 (i64.load offset=0x5a6 align=1 (i32.const 0))) (local.set 0x5a7 (i64.load offset=0x5a7 align=1 (i32.const 0))) (local.set 0x5a8 (i64.load offset=0x5a8 align=1 (i32.const 0))) (local.set 0x5a9 (i64.load offset=0x5a9 align=1 (i32.const 0))) (local.set 0x5aa (i64.load offset=0x5aa align=1 (i32.const 0))) (local.set 0x5ab (i64.load offset=0x5ab align=1 (i32.const 0))) (local.set 0x5ac (i64.load offset=0x5ac align=1 (i32.const 0))) (local.set 0x5ad (i64.load offset=0x5ad align=1 (i32.const 0))) (local.set 0x5ae (i64.load offset=0x5ae align=1 (i32.const 0))) (local.set 0x5af (i64.load offset=0x5af align=1 (i32.const 0))) (local.set 0x5b0 (i64.load offset=0x5b0 align=1 (i32.const 0))) (local.set 0x5b1 (i64.load offset=0x5b1 align=1 (i32.const 0))) (local.set 0x5b2 (i64.load offset=0x5b2 align=1 (i32.const 0))) (local.set 0x5b3 (i64.load offset=0x5b3 align=1 (i32.const 0))) (local.set 0x5b4 (i64.load offset=0x5b4 align=1 (i32.const 0))) (local.set 0x5b5 (i64.load offset=0x5b5 align=1 (i32.const 0))) (local.set 0x5b6 (i64.load offset=0x5b6 align=1 (i32.const 0))) (local.set 0x5b7 (i64.load offset=0x5b7 align=1 (i32.const 0))) (local.set 0x5b8 (i64.load offset=0x5b8 align=1 (i32.const 0))) (local.set 0x5b9 (i64.load offset=0x5b9 align=1 (i32.const 0))) (local.set 0x5ba (i64.load offset=0x5ba align=1 (i32.const 0))) (local.set 0x5bb (i64.load offset=0x5bb align=1 (i32.const 0))) (local.set 0x5bc (i64.load offset=0x5bc align=1 (i32.const 0))) (local.set 0x5bd (i64.load offset=0x5bd align=1 (i32.const 0))) (local.set 0x5be (i64.load offset=0x5be align=1 (i32.const 0))) (local.set 0x5bf (i64.load offset=0x5bf align=1 (i32.const 0))) (local.set 0x5c0 (i64.load offset=0x5c0 align=1 (i32.const 0))) (local.set 0x5c1 (i64.load offset=0x5c1 align=1 (i32.const 0))) (local.set 0x5c2 (i64.load offset=0x5c2 align=1 (i32.const 0))) (local.set 0x5c3 (i64.load offset=0x5c3 align=1 (i32.const 0))) (local.set 0x5c4 (i64.load offset=0x5c4 align=1 (i32.const 0))) (local.set 0x5c5 (i64.load offset=0x5c5 align=1 (i32.const 0))) (local.set 0x5c6 (i64.load offset=0x5c6 align=1 (i32.const 0))) (local.set 0x5c7 (i64.load offset=0x5c7 align=1 (i32.const 0))) (local.set 0x5c8 (i64.load offset=0x5c8 align=1 (i32.const 0))) (local.set 0x5c9 (i64.load offset=0x5c9 align=1 (i32.const 0))) (local.set 0x5ca (i64.load offset=0x5ca align=1 (i32.const 0))) (local.set 0x5cb (i64.load offset=0x5cb align=1 (i32.const 0))) (local.set 0x5cc (i64.load offset=0x5cc align=1 (i32.const 0))) (local.set 0x5cd (i64.load offset=0x5cd align=1 (i32.const 0))) (local.set 0x5ce (i64.load offset=0x5ce align=1 (i32.const 0))) (local.set 0x5cf (i64.load offset=0x5cf align=1 (i32.const 0))) (local.set 0x5d0 (i64.load offset=0x5d0 align=1 (i32.const 0))) (local.set 0x5d1 (i64.load offset=0x5d1 align=1 (i32.const 0))) (local.set 0x5d2 (i64.load offset=0x5d2 align=1 (i32.const 0))) (local.set 0x5d3 (i64.load offset=0x5d3 align=1 (i32.const 0))) (local.set 0x5d4 (i64.load offset=0x5d4 align=1 (i32.const 0))) (local.set 0x5d5 (i64.load offset=0x5d5 align=1 (i32.const 0))) (local.set 0x5d6 (i64.load offset=0x5d6 align=1 (i32.const 0))) (local.set 0x5d7 (i64.load offset=0x5d7 align=1 (i32.const 0))) (local.set 0x5d8 (i64.load offset=0x5d8 align=1 (i32.const 0))) (local.set 0x5d9 (i64.load offset=0x5d9 align=1 (i32.const 0))) (local.set 0x5da (i64.load offset=0x5da align=1 (i32.const 0))) (local.set 0x5db (i64.load offset=0x5db align=1 (i32.const 0))) (local.set 0x5dc (i64.load offset=0x5dc align=1 (i32.const 0))) (local.set 0x5dd (i64.load offset=0x5dd align=1 (i32.const 0))) (local.set 0x5de (i64.load offset=0x5de align=1 (i32.const 0))) (local.set 0x5df (i64.load offset=0x5df align=1 (i32.const 0))) (local.set 0x5e0 (i64.load offset=0x5e0 align=1 (i32.const 0))) (local.set 0x5e1 (i64.load offset=0x5e1 align=1 (i32.const 0))) (local.set 0x5e2 (i64.load offset=0x5e2 align=1 (i32.const 0))) (local.set 0x5e3 (i64.load offset=0x5e3 align=1 (i32.const 0))) (local.set 0x5e4 (i64.load offset=0x5e4 align=1 (i32.const 0))) (local.set 0x5e5 (i64.load offset=0x5e5 align=1 (i32.const 0))) (local.set 0x5e6 (i64.load offset=0x5e6 align=1 (i32.const 0))) (local.set 0x5e7 (i64.load offset=0x5e7 align=1 (i32.const 0))) (local.set 0x5e8 (i64.load offset=0x5e8 align=1 (i32.const 0))) (local.set 0x5e9 (i64.load offset=0x5e9 align=1 (i32.const 0))) (local.set 0x5ea (i64.load offset=0x5ea align=1 (i32.const 0))) (local.set 0x5eb (i64.load offset=0x5eb align=1 (i32.const 0))) (local.set 0x5ec (i64.load offset=0x5ec align=1 (i32.const 0))) (local.set 0x5ed (i64.load offset=0x5ed align=1 (i32.const 0))) (local.set 0x5ee (i64.load offset=0x5ee align=1 (i32.const 0))) (local.set 0x5ef (i64.load offset=0x5ef align=1 (i32.const 0))) (local.set 0x5f0 (i64.load offset=0x5f0 align=1 (i32.const 0))) (local.set 0x5f1 (i64.load offset=0x5f1 align=1 (i32.const 0))) (local.set 0x5f2 (i64.load offset=0x5f2 align=1 (i32.const 0))) (local.set 0x5f3 (i64.load offset=0x5f3 align=1 (i32.const 0))) (local.set 0x5f4 (i64.load offset=0x5f4 align=1 (i32.const 0))) (local.set 0x5f5 (i64.load offset=0x5f5 align=1 (i32.const 0))) (local.set 0x5f6 (i64.load offset=0x5f6 align=1 (i32.const 0))) (local.set 0x5f7 (i64.load offset=0x5f7 align=1 (i32.const 0))) (local.set 0x5f8 (i64.load offset=0x5f8 align=1 (i32.const 0))) (local.set 0x5f9 (i64.load offset=0x5f9 align=1 (i32.const 0))) (local.set 0x5fa (i64.load offset=0x5fa align=1 (i32.const 0))) (local.set 0x5fb (i64.load offset=0x5fb align=1 (i32.const 0))) (local.set 0x5fc (i64.load offset=0x5fc align=1 (i32.const 0))) (local.set 0x5fd (i64.load offset=0x5fd align=1 (i32.const 0))) (local.set 0x5fe (i64.load offset=0x5fe align=1 (i32.const 0))) (local.set 0x5ff (i64.load offset=0x5ff align=1 (i32.const 0))) (local.set 0x600 (i64.load offset=0x600 align=1 (i32.const 0))) (local.set 0x601 (i64.load offset=0x601 align=1 (i32.const 0))) (local.set 0x602 (i64.load offset=0x602 align=1 (i32.const 0))) (local.set 0x603 (i64.load offset=0x603 align=1 (i32.const 0))) (local.set 0x604 (i64.load offset=0x604 align=1 (i32.const 0))) (local.set 0x605 (i64.load offset=0x605 align=1 (i32.const 0))) (local.set 0x606 (i64.load offset=0x606 align=1 (i32.const 0))) (local.set 0x607 (i64.load offset=0x607 align=1 (i32.const 0))) (local.set 0x608 (i64.load offset=0x608 align=1 (i32.const 0))) (local.set 0x609 (i64.load offset=0x609 align=1 (i32.const 0))) (local.set 0x60a (i64.load offset=0x60a align=1 (i32.const 0))) (local.set 0x60b (i64.load offset=0x60b align=1 (i32.const 0))) (local.set 0x60c (i64.load offset=0x60c align=1 (i32.const 0))) (local.set 0x60d (i64.load offset=0x60d align=1 (i32.const 0))) (local.set 0x60e (i64.load offset=0x60e align=1 (i32.const 0))) (local.set 0x60f (i64.load offset=0x60f align=1 (i32.const 0))) (local.set 0x610 (i64.load offset=0x610 align=1 (i32.const 0))) (local.set 0x611 (i64.load offset=0x611 align=1 (i32.const 0))) (local.set 0x612 (i64.load offset=0x612 align=1 (i32.const 0))) (local.set 0x613 (i64.load offset=0x613 align=1 (i32.const 0))) (local.set 0x614 (i64.load offset=0x614 align=1 (i32.const 0))) (local.set 0x615 (i64.load offset=0x615 align=1 (i32.const 0))) (local.set 0x616 (i64.load offset=0x616 align=1 (i32.const 0))) (local.set 0x617 (i64.load offset=0x617 align=1 (i32.const 0))) (local.set 0x618 (i64.load offset=0x618 align=1 (i32.const 0))) (local.set 0x619 (i64.load offset=0x619 align=1 (i32.const 0))) (local.set 0x61a (i64.load offset=0x61a align=1 (i32.const 0))) (local.set 0x61b (i64.load offset=0x61b align=1 (i32.const 0))) (local.set 0x61c (i64.load offset=0x61c align=1 (i32.const 0))) (local.set 0x61d (i64.load offset=0x61d align=1 (i32.const 0))) (local.set 0x61e (i64.load offset=0x61e align=1 (i32.const 0))) (local.set 0x61f (i64.load offset=0x61f align=1 (i32.const 0))) (local.set 0x620 (i64.load offset=0x620 align=1 (i32.const 0))) (local.set 0x621 (i64.load offset=0x621 align=1 (i32.const 0))) (local.set 0x622 (i64.load offset=0x622 align=1 (i32.const 0))) (local.set 0x623 (i64.load offset=0x623 align=1 (i32.const 0))) (local.set 0x624 (i64.load offset=0x624 align=1 (i32.const 0))) (local.set 0x625 (i64.load offset=0x625 align=1 (i32.const 0))) (local.set 0x626 (i64.load offset=0x626 align=1 (i32.const 0))) (local.set 0x627 (i64.load offset=0x627 align=1 (i32.const 0))) (local.set 0x628 (i64.load offset=0x628 align=1 (i32.const 0))) (local.set 0x629 (i64.load offset=0x629 align=1 (i32.const 0))) (local.set 0x62a (i64.load offset=0x62a align=1 (i32.const 0))) (local.set 0x62b (i64.load offset=0x62b align=1 (i32.const 0))) (local.set 0x62c (i64.load offset=0x62c align=1 (i32.const 0))) (local.set 0x62d (i64.load offset=0x62d align=1 (i32.const 0))) (local.set 0x62e (i64.load offset=0x62e align=1 (i32.const 0))) (local.set 0x62f (i64.load offset=0x62f align=1 (i32.const 0))) (local.set 0x630 (i64.load offset=0x630 align=1 (i32.const 0))) (local.set 0x631 (i64.load offset=0x631 align=1 (i32.const 0))) (local.set 0x632 (i64.load offset=0x632 align=1 (i32.const 0))) (local.set 0x633 (i64.load offset=0x633 align=1 (i32.const 0))) (local.set 0x634 (i64.load offset=0x634 align=1 (i32.const 0))) (local.set 0x635 (i64.load offset=0x635 align=1 (i32.const 0))) (local.set 0x636 (i64.load offset=0x636 align=1 (i32.const 0))) (local.set 0x637 (i64.load offset=0x637 align=1 (i32.const 0))) (local.set 0x638 (i64.load offset=0x638 align=1 (i32.const 0))) (local.set 0x639 (i64.load offset=0x639 align=1 (i32.const 0))) (local.set 0x63a (i64.load offset=0x63a align=1 (i32.const 0))) (local.set 0x63b (i64.load offset=0x63b align=1 (i32.const 0))) (local.set 0x63c (i64.load offset=0x63c align=1 (i32.const 0))) (local.set 0x63d (i64.load offset=0x63d align=1 (i32.const 0))) (local.set 0x63e (i64.load offset=0x63e align=1 (i32.const 0))) (local.set 0x63f (i64.load offset=0x63f align=1 (i32.const 0))) (local.set 0x640 (i64.load offset=0x640 align=1 (i32.const 0))) (local.set 0x641 (i64.load offset=0x641 align=1 (i32.const 0))) (local.set 0x642 (i64.load offset=0x642 align=1 (i32.const 0))) (local.set 0x643 (i64.load offset=0x643 align=1 (i32.const 0))) (local.set 0x644 (i64.load offset=0x644 align=1 (i32.const 0))) (local.set 0x645 (i64.load offset=0x645 align=1 (i32.const 0))) (local.set 0x646 (i64.load offset=0x646 align=1 (i32.const 0))) (local.set 0x647 (i64.load offset=0x647 align=1 (i32.const 0))) (local.set 0x648 (i64.load offset=0x648 align=1 (i32.const 0))) (local.set 0x649 (i64.load offset=0x649 align=1 (i32.const 0))) (local.set 0x64a (i64.load offset=0x64a align=1 (i32.const 0))) (local.set 0x64b (i64.load offset=0x64b align=1 (i32.const 0))) (local.set 0x64c (i64.load offset=0x64c align=1 (i32.const 0))) (local.set 0x64d (i64.load offset=0x64d align=1 (i32.const 0))) (local.set 0x64e (i64.load offset=0x64e align=1 (i32.const 0))) (local.set 0x64f (i64.load offset=0x64f align=1 (i32.const 0))) (local.set 0x650 (i64.load offset=0x650 align=1 (i32.const 0))) (local.set 0x651 (i64.load offset=0x651 align=1 (i32.const 0))) (local.set 0x652 (i64.load offset=0x652 align=1 (i32.const 0))) (local.set 0x653 (i64.load offset=0x653 align=1 (i32.const 0))) (local.set 0x654 (i64.load offset=0x654 align=1 (i32.const 0))) (local.set 0x655 (i64.load offset=0x655 align=1 (i32.const 0))) (local.set 0x656 (i64.load offset=0x656 align=1 (i32.const 0))) (local.set 0x657 (i64.load offset=0x657 align=1 (i32.const 0))) (local.set 0x658 (i64.load offset=0x658 align=1 (i32.const 0))) (local.set 0x659 (i64.load offset=0x659 align=1 (i32.const 0))) (local.set 0x65a (i64.load offset=0x65a align=1 (i32.const 0))) (local.set 0x65b (i64.load offset=0x65b align=1 (i32.const 0))) (local.set 0x65c (i64.load offset=0x65c align=1 (i32.const 0))) (local.set 0x65d (i64.load offset=0x65d align=1 (i32.const 0))) (local.set 0x65e (i64.load offset=0x65e align=1 (i32.const 0))) (local.set 0x65f (i64.load offset=0x65f align=1 (i32.const 0))) (local.set 0x660 (i64.load offset=0x660 align=1 (i32.const 0))) (local.set 0x661 (i64.load offset=0x661 align=1 (i32.const 0))) (local.set 0x662 (i64.load offset=0x662 align=1 (i32.const 0))) (local.set 0x663 (i64.load offset=0x663 align=1 (i32.const 0))) (local.set 0x664 (i64.load offset=0x664 align=1 (i32.const 0))) (local.set 0x665 (i64.load offset=0x665 align=1 (i32.const 0))) (local.set 0x666 (i64.load offset=0x666 align=1 (i32.const 0))) (local.set 0x667 (i64.load offset=0x667 align=1 (i32.const 0))) (local.set 0x668 (i64.load offset=0x668 align=1 (i32.const 0))) (local.set 0x669 (i64.load offset=0x669 align=1 (i32.const 0))) (local.set 0x66a (i64.load offset=0x66a align=1 (i32.const 0))) (local.set 0x66b (i64.load offset=0x66b align=1 (i32.const 0))) (local.set 0x66c (i64.load offset=0x66c align=1 (i32.const 0))) (local.set 0x66d (i64.load offset=0x66d align=1 (i32.const 0))) (local.set 0x66e (i64.load offset=0x66e align=1 (i32.const 0))) (local.set 0x66f (i64.load offset=0x66f align=1 (i32.const 0))) (local.set 0x670 (i64.load offset=0x670 align=1 (i32.const 0))) (local.set 0x671 (i64.load offset=0x671 align=1 (i32.const 0))) (local.set 0x672 (i64.load offset=0x672 align=1 (i32.const 0))) (local.set 0x673 (i64.load offset=0x673 align=1 (i32.const 0))) (local.set 0x674 (i64.load offset=0x674 align=1 (i32.const 0))) (local.set 0x675 (i64.load offset=0x675 align=1 (i32.const 0))) (local.set 0x676 (i64.load offset=0x676 align=1 (i32.const 0))) (local.set 0x677 (i64.load offset=0x677 align=1 (i32.const 0))) (local.set 0x678 (i64.load offset=0x678 align=1 (i32.const 0))) (local.set 0x679 (i64.load offset=0x679 align=1 (i32.const 0))) (local.set 0x67a (i64.load offset=0x67a align=1 (i32.const 0))) (local.set 0x67b (i64.load offset=0x67b align=1 (i32.const 0))) (local.set 0x67c (i64.load offset=0x67c align=1 (i32.const 0))) (local.set 0x67d (i64.load offset=0x67d align=1 (i32.const 0))) (local.set 0x67e (i64.load offset=0x67e align=1 (i32.const 0))) (local.set 0x67f (i64.load offset=0x67f align=1 (i32.const 0))) (local.set 0x680 (i64.load offset=0x680 align=1 (i32.const 0))) (local.set 0x681 (i64.load offset=0x681 align=1 (i32.const 0))) (local.set 0x682 (i64.load offset=0x682 align=1 (i32.const 0))) (local.set 0x683 (i64.load offset=0x683 align=1 (i32.const 0))) (local.set 0x684 (i64.load offset=0x684 align=1 (i32.const 0))) (local.set 0x685 (i64.load offset=0x685 align=1 (i32.const 0))) (local.set 0x686 (i64.load offset=0x686 align=1 (i32.const 0))) (local.set 0x687 (i64.load offset=0x687 align=1 (i32.const 0))) (local.set 0x688 (i64.load offset=0x688 align=1 (i32.const 0))) (local.set 0x689 (i64.load offset=0x689 align=1 (i32.const 0))) (local.set 0x68a (i64.load offset=0x68a align=1 (i32.const 0))) (local.set 0x68b (i64.load offset=0x68b align=1 (i32.const 0))) (local.set 0x68c (i64.load offset=0x68c align=1 (i32.const 0))) (local.set 0x68d (i64.load offset=0x68d align=1 (i32.const 0))) (local.set 0x68e (i64.load offset=0x68e align=1 (i32.const 0))) (local.set 0x68f (i64.load offset=0x68f align=1 (i32.const 0))) (local.set 0x690 (i64.load offset=0x690 align=1 (i32.const 0))) (local.set 0x691 (i64.load offset=0x691 align=1 (i32.const 0))) (local.set 0x692 (i64.load offset=0x692 align=1 (i32.const 0))) (local.set 0x693 (i64.load offset=0x693 align=1 (i32.const 0))) (local.set 0x694 (i64.load offset=0x694 align=1 (i32.const 0))) (local.set 0x695 (i64.load offset=0x695 align=1 (i32.const 0))) (local.set 0x696 (i64.load offset=0x696 align=1 (i32.const 0))) (local.set 0x697 (i64.load offset=0x697 align=1 (i32.const 0))) (local.set 0x698 (i64.load offset=0x698 align=1 (i32.const 0))) (local.set 0x699 (i64.load offset=0x699 align=1 (i32.const 0))) (local.set 0x69a (i64.load offset=0x69a align=1 (i32.const 0))) (local.set 0x69b (i64.load offset=0x69b align=1 (i32.const 0))) (local.set 0x69c (i64.load offset=0x69c align=1 (i32.const 0))) (local.set 0x69d (i64.load offset=0x69d align=1 (i32.const 0))) (local.set 0x69e (i64.load offset=0x69e align=1 (i32.const 0))) (local.set 0x69f (i64.load offset=0x69f align=1 (i32.const 0))) (local.set 0x6a0 (i64.load offset=0x6a0 align=1 (i32.const 0))) (local.set 0x6a1 (i64.load offset=0x6a1 align=1 (i32.const 0))) (local.set 0x6a2 (i64.load offset=0x6a2 align=1 (i32.const 0))) (local.set 0x6a3 (i64.load offset=0x6a3 align=1 (i32.const 0))) (local.set 0x6a4 (i64.load offset=0x6a4 align=1 (i32.const 0))) (local.set 0x6a5 (i64.load offset=0x6a5 align=1 (i32.const 0))) (local.set 0x6a6 (i64.load offset=0x6a6 align=1 (i32.const 0))) (local.set 0x6a7 (i64.load offset=0x6a7 align=1 (i32.const 0))) (local.set 0x6a8 (i64.load offset=0x6a8 align=1 (i32.const 0))) (local.set 0x6a9 (i64.load offset=0x6a9 align=1 (i32.const 0))) (local.set 0x6aa (i64.load offset=0x6aa align=1 (i32.const 0))) (local.set 0x6ab (i64.load offset=0x6ab align=1 (i32.const 0))) (local.set 0x6ac (i64.load offset=0x6ac align=1 (i32.const 0))) (local.set 0x6ad (i64.load offset=0x6ad align=1 (i32.const 0))) (local.set 0x6ae (i64.load offset=0x6ae align=1 (i32.const 0))) (local.set 0x6af (i64.load offset=0x6af align=1 (i32.const 0))) (local.set 0x6b0 (i64.load offset=0x6b0 align=1 (i32.const 0))) (local.set 0x6b1 (i64.load offset=0x6b1 align=1 (i32.const 0))) (local.set 0x6b2 (i64.load offset=0x6b2 align=1 (i32.const 0))) (local.set 0x6b3 (i64.load offset=0x6b3 align=1 (i32.const 0))) (local.set 0x6b4 (i64.load offset=0x6b4 align=1 (i32.const 0))) (local.set 0x6b5 (i64.load offset=0x6b5 align=1 (i32.const 0))) (local.set 0x6b6 (i64.load offset=0x6b6 align=1 (i32.const 0))) (local.set 0x6b7 (i64.load offset=0x6b7 align=1 (i32.const 0))) (local.set 0x6b8 (i64.load offset=0x6b8 align=1 (i32.const 0))) (local.set 0x6b9 (i64.load offset=0x6b9 align=1 (i32.const 0))) (local.set 0x6ba (i64.load offset=0x6ba align=1 (i32.const 0))) (local.set 0x6bb (i64.load offset=0x6bb align=1 (i32.const 0))) (local.set 0x6bc (i64.load offset=0x6bc align=1 (i32.const 0))) (local.set 0x6bd (i64.load offset=0x6bd align=1 (i32.const 0))) (local.set 0x6be (i64.load offset=0x6be align=1 (i32.const 0))) (local.set 0x6bf (i64.load offset=0x6bf align=1 (i32.const 0))) (local.set 0x6c0 (i64.load offset=0x6c0 align=1 (i32.const 0))) (local.set 0x6c1 (i64.load offset=0x6c1 align=1 (i32.const 0))) (local.set 0x6c2 (i64.load offset=0x6c2 align=1 (i32.const 0))) (local.set 0x6c3 (i64.load offset=0x6c3 align=1 (i32.const 0))) (local.set 0x6c4 (i64.load offset=0x6c4 align=1 (i32.const 0))) (local.set 0x6c5 (i64.load offset=0x6c5 align=1 (i32.const 0))) (local.set 0x6c6 (i64.load offset=0x6c6 align=1 (i32.const 0))) (local.set 0x6c7 (i64.load offset=0x6c7 align=1 (i32.const 0))) (local.set 0x6c8 (i64.load offset=0x6c8 align=1 (i32.const 0))) (local.set 0x6c9 (i64.load offset=0x6c9 align=1 (i32.const 0))) (local.set 0x6ca (i64.load offset=0x6ca align=1 (i32.const 0))) (local.set 0x6cb (i64.load offset=0x6cb align=1 (i32.const 0))) (local.set 0x6cc (i64.load offset=0x6cc align=1 (i32.const 0))) (local.set 0x6cd (i64.load offset=0x6cd align=1 (i32.const 0))) (local.set 0x6ce (i64.load offset=0x6ce align=1 (i32.const 0))) (local.set 0x6cf (i64.load offset=0x6cf align=1 (i32.const 0))) (local.set 0x6d0 (i64.load offset=0x6d0 align=1 (i32.const 0))) (local.set 0x6d1 (i64.load offset=0x6d1 align=1 (i32.const 0))) (local.set 0x6d2 (i64.load offset=0x6d2 align=1 (i32.const 0))) (local.set 0x6d3 (i64.load offset=0x6d3 align=1 (i32.const 0))) (local.set 0x6d4 (i64.load offset=0x6d4 align=1 (i32.const 0))) (local.set 0x6d5 (i64.load offset=0x6d5 align=1 (i32.const 0))) (local.set 0x6d6 (i64.load offset=0x6d6 align=1 (i32.const 0))) (local.set 0x6d7 (i64.load offset=0x6d7 align=1 (i32.const 0))) (local.set 0x6d8 (i64.load offset=0x6d8 align=1 (i32.const 0))) (local.set 0x6d9 (i64.load offset=0x6d9 align=1 (i32.const 0))) (local.set 0x6da (i64.load offset=0x6da align=1 (i32.const 0))) (local.set 0x6db (i64.load offset=0x6db align=1 (i32.const 0))) (local.set 0x6dc (i64.load offset=0x6dc align=1 (i32.const 0))) (local.set 0x6dd (i64.load offset=0x6dd align=1 (i32.const 0))) (local.set 0x6de (i64.load offset=0x6de align=1 (i32.const 0))) (local.set 0x6df (i64.load offset=0x6df align=1 (i32.const 0))) (local.set 0x6e0 (i64.load offset=0x6e0 align=1 (i32.const 0))) (local.set 0x6e1 (i64.load offset=0x6e1 align=1 (i32.const 0))) (local.set 0x6e2 (i64.load offset=0x6e2 align=1 (i32.const 0))) (local.set 0x6e3 (i64.load offset=0x6e3 align=1 (i32.const 0))) (local.set 0x6e4 (i64.load offset=0x6e4 align=1 (i32.const 0))) (local.set 0x6e5 (i64.load offset=0x6e5 align=1 (i32.const 0))) (local.set 0x6e6 (i64.load offset=0x6e6 align=1 (i32.const 0))) (local.set 0x6e7 (i64.load offset=0x6e7 align=1 (i32.const 0))) (local.set 0x6e8 (i64.load offset=0x6e8 align=1 (i32.const 0))) (local.set 0x6e9 (i64.load offset=0x6e9 align=1 (i32.const 0))) (local.set 0x6ea (i64.load offset=0x6ea align=1 (i32.const 0))) (local.set 0x6eb (i64.load offset=0x6eb align=1 (i32.const 0))) (local.set 0x6ec (i64.load offset=0x6ec align=1 (i32.const 0))) (local.set 0x6ed (i64.load offset=0x6ed align=1 (i32.const 0))) (local.set 0x6ee (i64.load offset=0x6ee align=1 (i32.const 0))) (local.set 0x6ef (i64.load offset=0x6ef align=1 (i32.const 0))) (local.set 0x6f0 (i64.load offset=0x6f0 align=1 (i32.const 0))) (local.set 0x6f1 (i64.load offset=0x6f1 align=1 (i32.const 0))) (local.set 0x6f2 (i64.load offset=0x6f2 align=1 (i32.const 0))) (local.set 0x6f3 (i64.load offset=0x6f3 align=1 (i32.const 0))) (local.set 0x6f4 (i64.load offset=0x6f4 align=1 (i32.const 0))) (local.set 0x6f5 (i64.load offset=0x6f5 align=1 (i32.const 0))) (local.set 0x6f6 (i64.load offset=0x6f6 align=1 (i32.const 0))) (local.set 0x6f7 (i64.load offset=0x6f7 align=1 (i32.const 0))) (local.set 0x6f8 (i64.load offset=0x6f8 align=1 (i32.const 0))) (local.set 0x6f9 (i64.load offset=0x6f9 align=1 (i32.const 0))) (local.set 0x6fa (i64.load offset=0x6fa align=1 (i32.const 0))) (local.set 0x6fb (i64.load offset=0x6fb align=1 (i32.const 0))) (local.set 0x6fc (i64.load offset=0x6fc align=1 (i32.const 0))) (local.set 0x6fd (i64.load offset=0x6fd align=1 (i32.const 0))) (local.set 0x6fe (i64.load offset=0x6fe align=1 (i32.const 0))) (local.set 0x6ff (i64.load offset=0x6ff align=1 (i32.const 0))) (local.set 0x700 (i64.load offset=0x700 align=1 (i32.const 0))) (local.set 0x701 (i64.load offset=0x701 align=1 (i32.const 0))) (local.set 0x702 (i64.load offset=0x702 align=1 (i32.const 0))) (local.set 0x703 (i64.load offset=0x703 align=1 (i32.const 0))) (local.set 0x704 (i64.load offset=0x704 align=1 (i32.const 0))) (local.set 0x705 (i64.load offset=0x705 align=1 (i32.const 0))) (local.set 0x706 (i64.load offset=0x706 align=1 (i32.const 0))) (local.set 0x707 (i64.load offset=0x707 align=1 (i32.const 0))) (local.set 0x708 (i64.load offset=0x708 align=1 (i32.const 0))) (local.set 0x709 (i64.load offset=0x709 align=1 (i32.const 0))) (local.set 0x70a (i64.load offset=0x70a align=1 (i32.const 0))) (local.set 0x70b (i64.load offset=0x70b align=1 (i32.const 0))) (local.set 0x70c (i64.load offset=0x70c align=1 (i32.const 0))) (local.set 0x70d (i64.load offset=0x70d align=1 (i32.const 0))) (local.set 0x70e (i64.load offset=0x70e align=1 (i32.const 0))) (local.set 0x70f (i64.load offset=0x70f align=1 (i32.const 0))) (local.set 0x710 (i64.load offset=0x710 align=1 (i32.const 0))) (local.set 0x711 (i64.load offset=0x711 align=1 (i32.const 0))) (local.set 0x712 (i64.load offset=0x712 align=1 (i32.const 0))) (local.set 0x713 (i64.load offset=0x713 align=1 (i32.const 0))) (local.set 0x714 (i64.load offset=0x714 align=1 (i32.const 0))) (local.set 0x715 (i64.load offset=0x715 align=1 (i32.const 0))) (local.set 0x716 (i64.load offset=0x716 align=1 (i32.const 0))) (local.set 0x717 (i64.load offset=0x717 align=1 (i32.const 0))) (local.set 0x718 (i64.load offset=0x718 align=1 (i32.const 0))) (local.set 0x719 (i64.load offset=0x719 align=1 (i32.const 0))) (local.set 0x71a (i64.load offset=0x71a align=1 (i32.const 0))) (local.set 0x71b (i64.load offset=0x71b align=1 (i32.const 0))) (local.set 0x71c (i64.load offset=0x71c align=1 (i32.const 0))) (local.set 0x71d (i64.load offset=0x71d align=1 (i32.const 0))) (local.set 0x71e (i64.load offset=0x71e align=1 (i32.const 0))) (local.set 0x71f (i64.load offset=0x71f align=1 (i32.const 0))) (local.set 0x720 (i64.load offset=0x720 align=1 (i32.const 0))) (local.set 0x721 (i64.load offset=0x721 align=1 (i32.const 0))) (local.set 0x722 (i64.load offset=0x722 align=1 (i32.const 0))) (local.set 0x723 (i64.load offset=0x723 align=1 (i32.const 0))) (local.set 0x724 (i64.load offset=0x724 align=1 (i32.const 0))) (local.set 0x725 (i64.load offset=0x725 align=1 (i32.const 0))) (local.set 0x726 (i64.load offset=0x726 align=1 (i32.const 0))) (local.set 0x727 (i64.load offset=0x727 align=1 (i32.const 0))) (local.set 0x728 (i64.load offset=0x728 align=1 (i32.const 0))) (local.set 0x729 (i64.load offset=0x729 align=1 (i32.const 0))) (local.set 0x72a (i64.load offset=0x72a align=1 (i32.const 0))) (local.set 0x72b (i64.load offset=0x72b align=1 (i32.const 0))) (local.set 0x72c (i64.load offset=0x72c align=1 (i32.const 0))) (local.set 0x72d (i64.load offset=0x72d align=1 (i32.const 0))) (local.set 0x72e (i64.load offset=0x72e align=1 (i32.const 0))) (local.set 0x72f (i64.load offset=0x72f align=1 (i32.const 0))) (local.set 0x730 (i64.load offset=0x730 align=1 (i32.const 0))) (local.set 0x731 (i64.load offset=0x731 align=1 (i32.const 0))) (local.set 0x732 (i64.load offset=0x732 align=1 (i32.const 0))) (local.set 0x733 (i64.load offset=0x733 align=1 (i32.const 0))) (local.set 0x734 (i64.load offset=0x734 align=1 (i32.const 0))) (local.set 0x735 (i64.load offset=0x735 align=1 (i32.const 0))) (local.set 0x736 (i64.load offset=0x736 align=1 (i32.const 0))) (local.set 0x737 (i64.load offset=0x737 align=1 (i32.const 0))) (local.set 0x738 (i64.load offset=0x738 align=1 (i32.const 0))) (local.set 0x739 (i64.load offset=0x739 align=1 (i32.const 0))) (local.set 0x73a (i64.load offset=0x73a align=1 (i32.const 0))) (local.set 0x73b (i64.load offset=0x73b align=1 (i32.const 0))) (local.set 0x73c (i64.load offset=0x73c align=1 (i32.const 0))) (local.set 0x73d (i64.load offset=0x73d align=1 (i32.const 0))) (local.set 0x73e (i64.load offset=0x73e align=1 (i32.const 0))) (local.set 0x73f (i64.load offset=0x73f align=1 (i32.const 0))) (local.set 0x740 (i64.load offset=0x740 align=1 (i32.const 0))) (local.set 0x741 (i64.load offset=0x741 align=1 (i32.const 0))) (local.set 0x742 (i64.load offset=0x742 align=1 (i32.const 0))) (local.set 0x743 (i64.load offset=0x743 align=1 (i32.const 0))) (local.set 0x744 (i64.load offset=0x744 align=1 (i32.const 0))) (local.set 0x745 (i64.load offset=0x745 align=1 (i32.const 0))) (local.set 0x746 (i64.load offset=0x746 align=1 (i32.const 0))) (local.set 0x747 (i64.load offset=0x747 align=1 (i32.const 0))) (local.set 0x748 (i64.load offset=0x748 align=1 (i32.const 0))) (local.set 0x749 (i64.load offset=0x749 align=1 (i32.const 0))) (local.set 0x74a (i64.load offset=0x74a align=1 (i32.const 0))) (local.set 0x74b (i64.load offset=0x74b align=1 (i32.const 0))) (local.set 0x74c (i64.load offset=0x74c align=1 (i32.const 0))) (local.set 0x74d (i64.load offset=0x74d align=1 (i32.const 0))) (local.set 0x74e (i64.load offset=0x74e align=1 (i32.const 0))) (local.set 0x74f (i64.load offset=0x74f align=1 (i32.const 0))) (local.set 0x750 (i64.load offset=0x750 align=1 (i32.const 0))) (local.set 0x751 (i64.load offset=0x751 align=1 (i32.const 0))) (local.set 0x752 (i64.load offset=0x752 align=1 (i32.const 0))) (local.set 0x753 (i64.load offset=0x753 align=1 (i32.const 0))) (local.set 0x754 (i64.load offset=0x754 align=1 (i32.const 0))) (local.set 0x755 (i64.load offset=0x755 align=1 (i32.const 0))) (local.set 0x756 (i64.load offset=0x756 align=1 (i32.const 0))) (local.set 0x757 (i64.load offset=0x757 align=1 (i32.const 0))) (local.set 0x758 (i64.load offset=0x758 align=1 (i32.const 0))) (local.set 0x759 (i64.load offset=0x759 align=1 (i32.const 0))) (local.set 0x75a (i64.load offset=0x75a align=1 (i32.const 0))) (local.set 0x75b (i64.load offset=0x75b align=1 (i32.const 0))) (local.set 0x75c (i64.load offset=0x75c align=1 (i32.const 0))) (local.set 0x75d (i64.load offset=0x75d align=1 (i32.const 0))) (local.set 0x75e (i64.load offset=0x75e align=1 (i32.const 0))) (local.set 0x75f (i64.load offset=0x75f align=1 (i32.const 0))) (local.set 0x760 (i64.load offset=0x760 align=1 (i32.const 0))) (local.set 0x761 (i64.load offset=0x761 align=1 (i32.const 0))) (local.set 0x762 (i64.load offset=0x762 align=1 (i32.const 0))) (local.set 0x763 (i64.load offset=0x763 align=1 (i32.const 0))) (local.set 0x764 (i64.load offset=0x764 align=1 (i32.const 0))) (local.set 0x765 (i64.load offset=0x765 align=1 (i32.const 0))) (local.set 0x766 (i64.load offset=0x766 align=1 (i32.const 0))) (local.set 0x767 (i64.load offset=0x767 align=1 (i32.const 0))) (local.set 0x768 (i64.load offset=0x768 align=1 (i32.const 0))) (local.set 0x769 (i64.load offset=0x769 align=1 (i32.const 0))) (local.set 0x76a (i64.load offset=0x76a align=1 (i32.const 0))) (local.set 0x76b (i64.load offset=0x76b align=1 (i32.const 0))) (local.set 0x76c (i64.load offset=0x76c align=1 (i32.const 0))) (local.set 0x76d (i64.load offset=0x76d align=1 (i32.const 0))) (local.set 0x76e (i64.load offset=0x76e align=1 (i32.const 0))) (local.set 0x76f (i64.load offset=0x76f align=1 (i32.const 0))) (local.set 0x770 (i64.load offset=0x770 align=1 (i32.const 0))) (local.set 0x771 (i64.load offset=0x771 align=1 (i32.const 0))) (local.set 0x772 (i64.load offset=0x772 align=1 (i32.const 0))) (local.set 0x773 (i64.load offset=0x773 align=1 (i32.const 0))) (local.set 0x774 (i64.load offset=0x774 align=1 (i32.const 0))) (local.set 0x775 (i64.load offset=0x775 align=1 (i32.const 0))) (local.set 0x776 (i64.load offset=0x776 align=1 (i32.const 0))) (local.set 0x777 (i64.load offset=0x777 align=1 (i32.const 0))) (local.set 0x778 (i64.load offset=0x778 align=1 (i32.const 0))) (local.set 0x779 (i64.load offset=0x779 align=1 (i32.const 0))) (local.set 0x77a (i64.load offset=0x77a align=1 (i32.const 0))) (local.set 0x77b (i64.load offset=0x77b align=1 (i32.const 0))) (local.set 0x77c (i64.load offset=0x77c align=1 (i32.const 0))) (local.set 0x77d (i64.load offset=0x77d align=1 (i32.const 0))) (local.set 0x77e (i64.load offset=0x77e align=1 (i32.const 0))) (local.set 0x77f (i64.load offset=0x77f align=1 (i32.const 0))) (local.set 0x780 (i64.load offset=0x780 align=1 (i32.const 0))) (local.set 0x781 (i64.load offset=0x781 align=1 (i32.const 0))) (local.set 0x782 (i64.load offset=0x782 align=1 (i32.const 0))) (local.set 0x783 (i64.load offset=0x783 align=1 (i32.const 0))) (local.set 0x784 (i64.load offset=0x784 align=1 (i32.const 0))) (local.set 0x785 (i64.load offset=0x785 align=1 (i32.const 0))) (local.set 0x786 (i64.load offset=0x786 align=1 (i32.const 0))) (local.set 0x787 (i64.load offset=0x787 align=1 (i32.const 0))) (local.set 0x788 (i64.load offset=0x788 align=1 (i32.const 0))) (local.set 0x789 (i64.load offset=0x789 align=1 (i32.const 0))) (local.set 0x78a (i64.load offset=0x78a align=1 (i32.const 0))) (local.set 0x78b (i64.load offset=0x78b align=1 (i32.const 0))) (local.set 0x78c (i64.load offset=0x78c align=1 (i32.const 0))) (local.set 0x78d (i64.load offset=0x78d align=1 (i32.const 0))) (local.set 0x78e (i64.load offset=0x78e align=1 (i32.const 0))) (local.set 0x78f (i64.load offset=0x78f align=1 (i32.const 0))) (local.set 0x790 (i64.load offset=0x790 align=1 (i32.const 0))) (local.set 0x791 (i64.load offset=0x791 align=1 (i32.const 0))) (local.set 0x792 (i64.load offset=0x792 align=1 (i32.const 0))) (local.set 0x793 (i64.load offset=0x793 align=1 (i32.const 0))) (local.set 0x794 (i64.load offset=0x794 align=1 (i32.const 0))) (local.set 0x795 (i64.load offset=0x795 align=1 (i32.const 0))) (local.set 0x796 (i64.load offset=0x796 align=1 (i32.const 0))) (local.set 0x797 (i64.load offset=0x797 align=1 (i32.const 0))) (local.set 0x798 (i64.load offset=0x798 align=1 (i32.const 0))) (local.set 0x799 (i64.load offset=0x799 align=1 (i32.const 0))) (local.set 0x79a (i64.load offset=0x79a align=1 (i32.const 0))) (local.set 0x79b (i64.load offset=0x79b align=1 (i32.const 0))) (local.set 0x79c (i64.load offset=0x79c align=1 (i32.const 0))) (local.set 0x79d (i64.load offset=0x79d align=1 (i32.const 0))) (local.set 0x79e (i64.load offset=0x79e align=1 (i32.const 0))) (local.set 0x79f (i64.load offset=0x79f align=1 (i32.const 0))) (local.set 0x7a0 (i64.load offset=0x7a0 align=1 (i32.const 0))) (local.set 0x7a1 (i64.load offset=0x7a1 align=1 (i32.const 0))) (local.set 0x7a2 (i64.load offset=0x7a2 align=1 (i32.const 0))) (local.set 0x7a3 (i64.load offset=0x7a3 align=1 (i32.const 0))) (local.set 0x7a4 (i64.load offset=0x7a4 align=1 (i32.const 0))) (local.set 0x7a5 (i64.load offset=0x7a5 align=1 (i32.const 0))) (local.set 0x7a6 (i64.load offset=0x7a6 align=1 (i32.const 0))) (local.set 0x7a7 (i64.load offset=0x7a7 align=1 (i32.const 0))) (local.set 0x7a8 (i64.load offset=0x7a8 align=1 (i32.const 0))) (local.set 0x7a9 (i64.load offset=0x7a9 align=1 (i32.const 0))) (local.set 0x7aa (i64.load offset=0x7aa align=1 (i32.const 0))) (local.set 0x7ab (i64.load offset=0x7ab align=1 (i32.const 0))) (local.set 0x7ac (i64.load offset=0x7ac align=1 (i32.const 0))) (local.set 0x7ad (i64.load offset=0x7ad align=1 (i32.const 0))) (local.set 0x7ae (i64.load offset=0x7ae align=1 (i32.const 0))) (local.set 0x7af (i64.load offset=0x7af align=1 (i32.const 0))) (local.set 0x7b0 (i64.load offset=0x7b0 align=1 (i32.const 0))) (local.set 0x7b1 (i64.load offset=0x7b1 align=1 (i32.const 0))) (local.set 0x7b2 (i64.load offset=0x7b2 align=1 (i32.const 0))) (local.set 0x7b3 (i64.load offset=0x7b3 align=1 (i32.const 0))) (local.set 0x7b4 (i64.load offset=0x7b4 align=1 (i32.const 0))) (local.set 0x7b5 (i64.load offset=0x7b5 align=1 (i32.const 0))) (local.set 0x7b6 (i64.load offset=0x7b6 align=1 (i32.const 0))) (local.set 0x7b7 (i64.load offset=0x7b7 align=1 (i32.const 0))) (local.set 0x7b8 (i64.load offset=0x7b8 align=1 (i32.const 0))) (local.set 0x7b9 (i64.load offset=0x7b9 align=1 (i32.const 0))) (local.set 0x7ba (i64.load offset=0x7ba align=1 (i32.const 0))) (local.set 0x7bb (i64.load offset=0x7bb align=1 (i32.const 0))) (local.set 0x7bc (i64.load offset=0x7bc align=1 (i32.const 0))) (local.set 0x7bd (i64.load offset=0x7bd align=1 (i32.const 0))) (local.set 0x7be (i64.load offset=0x7be align=1 (i32.const 0))) (local.set 0x7bf (i64.load offset=0x7bf align=1 (i32.const 0))) (local.set 0x7c0 (i64.load offset=0x7c0 align=1 (i32.const 0))) (local.set 0x7c1 (i64.load offset=0x7c1 align=1 (i32.const 0))) (local.set 0x7c2 (i64.load offset=0x7c2 align=1 (i32.const 0))) (local.set 0x7c3 (i64.load offset=0x7c3 align=1 (i32.const 0))) (local.set 0x7c4 (i64.load offset=0x7c4 align=1 (i32.const 0))) (local.set 0x7c5 (i64.load offset=0x7c5 align=1 (i32.const 0))) (local.set 0x7c6 (i64.load offset=0x7c6 align=1 (i32.const 0))) (local.set 0x7c7 (i64.load offset=0x7c7 align=1 (i32.const 0))) (local.set 0x7c8 (i64.load offset=0x7c8 align=1 (i32.const 0))) (local.set 0x7c9 (i64.load offset=0x7c9 align=1 (i32.const 0))) (local.set 0x7ca (i64.load offset=0x7ca align=1 (i32.const 0))) (local.set 0x7cb (i64.load offset=0x7cb align=1 (i32.const 0))) (local.set 0x7cc (i64.load offset=0x7cc align=1 (i32.const 0))) (local.set 0x7cd (i64.load offset=0x7cd align=1 (i32.const 0))) (local.set 0x7ce (i64.load offset=0x7ce align=1 (i32.const 0))) (local.set 0x7cf (i64.load offset=0x7cf align=1 (i32.const 0))) (local.set 0x7d0 (i64.load offset=0x7d0 align=1 (i32.const 0))) (local.set 0x7d1 (i64.load offset=0x7d1 align=1 (i32.const 0))) (local.set 0x7d2 (i64.load offset=0x7d2 align=1 (i32.const 0))) (local.set 0x7d3 (i64.load offset=0x7d3 align=1 (i32.const 0))) (local.set 0x7d4 (i64.load offset=0x7d4 align=1 (i32.const 0))) (local.set 0x7d5 (i64.load offset=0x7d5 align=1 (i32.const 0))) (local.set 0x7d6 (i64.load offset=0x7d6 align=1 (i32.const 0))) (local.set 0x7d7 (i64.load offset=0x7d7 align=1 (i32.const 0))) (local.set 0x7d8 (i64.load offset=0x7d8 align=1 (i32.const 0))) (local.set 0x7d9 (i64.load offset=0x7d9 align=1 (i32.const 0))) (local.set 0x7da (i64.load offset=0x7da align=1 (i32.const 0))) (local.set 0x7db (i64.load offset=0x7db align=1 (i32.const 0))) (local.set 0x7dc (i64.load offset=0x7dc align=1 (i32.const 0))) (local.set 0x7dd (i64.load offset=0x7dd align=1 (i32.const 0))) (local.set 0x7de (i64.load offset=0x7de align=1 (i32.const 0))) (local.set 0x7df (i64.load offset=0x7df align=1 (i32.const 0))) (local.set 0x7e0 (i64.load offset=0x7e0 align=1 (i32.const 0))) (local.set 0x7e1 (i64.load offset=0x7e1 align=1 (i32.const 0))) (local.set 0x7e2 (i64.load offset=0x7e2 align=1 (i32.const 0))) (local.set 0x7e3 (i64.load offset=0x7e3 align=1 (i32.const 0))) (local.set 0x7e4 (i64.load offset=0x7e4 align=1 (i32.const 0))) (local.set 0x7e5 (i64.load offset=0x7e5 align=1 (i32.const 0))) (local.set 0x7e6 (i64.load offset=0x7e6 align=1 (i32.const 0))) (local.set 0x7e7 (i64.load offset=0x7e7 align=1 (i32.const 0))) (local.set 0x7e8 (i64.load offset=0x7e8 align=1 (i32.const 0))) (local.set 0x7e9 (i64.load offset=0x7e9 align=1 (i32.const 0))) (local.set 0x7ea (i64.load offset=0x7ea align=1 (i32.const 0))) (local.set 0x7eb (i64.load offset=0x7eb align=1 (i32.const 0))) (local.set 0x7ec (i64.load offset=0x7ec align=1 (i32.const 0))) (local.set 0x7ed (i64.load offset=0x7ed align=1 (i32.const 0))) (local.set 0x7ee (i64.load offset=0x7ee align=1 (i32.const 0))) (local.set 0x7ef (i64.load offset=0x7ef align=1 (i32.const 0))) (local.set 0x7f0 (i64.load offset=0x7f0 align=1 (i32.const 0))) (local.set 0x7f1 (i64.load offset=0x7f1 align=1 (i32.const 0))) (local.set 0x7f2 (i64.load offset=0x7f2 align=1 (i32.const 0))) (local.set 0x7f3 (i64.load offset=0x7f3 align=1 (i32.const 0))) (local.set 0x7f4 (i64.load offset=0x7f4 align=1 (i32.const 0))) (local.set 0x7f5 (i64.load offset=0x7f5 align=1 (i32.const 0))) (local.set 0x7f6 (i64.load offset=0x7f6 align=1 (i32.const 0))) (local.set 0x7f7 (i64.load offset=0x7f7 align=1 (i32.const 0))) (local.set 0x7f8 (i64.load offset=0x7f8 align=1 (i32.const 0))) (local.set 0x7f9 (i64.load offset=0x7f9 align=1 (i32.const 0))) (local.set 0x7fa (i64.load offset=0x7fa align=1 (i32.const 0))) (local.set 0x7fb (i64.load offset=0x7fb align=1 (i32.const 0))) (local.set 0x7fc (i64.load offset=0x7fc align=1 (i32.const 0))) (local.set 0x7fd (i64.load offset=0x7fd align=1 (i32.const 0))) (local.set 0x7fe (i64.load offset=0x7fe align=1 (i32.const 0))) (local.set 0x7ff (i64.load offset=0x7ff align=1 (i32.const 0))) ;; store the locals back to memory (i64.store offset=0x000 align=1 (i32.const 0) (local.get 0x000)) (i64.store offset=0x001 align=1 (i32.const 0) (local.get 0x001)) (i64.store offset=0x002 align=1 (i32.const 0) (local.get 0x002)) (i64.store offset=0x003 align=1 (i32.const 0) (local.get 0x003)) (i64.store offset=0x004 align=1 (i32.const 0) (local.get 0x004)) (i64.store offset=0x005 align=1 (i32.const 0) (local.get 0x005)) (i64.store offset=0x006 align=1 (i32.const 0) (local.get 0x006)) (i64.store offset=0x007 align=1 (i32.const 0) (local.get 0x007)) (i64.store offset=0x008 align=1 (i32.const 0) (local.get 0x008)) (i64.store offset=0x009 align=1 (i32.const 0) (local.get 0x009)) (i64.store offset=0x00a align=1 (i32.const 0) (local.get 0x00a)) (i64.store offset=0x00b align=1 (i32.const 0) (local.get 0x00b)) (i64.store offset=0x00c align=1 (i32.const 0) (local.get 0x00c)) (i64.store offset=0x00d align=1 (i32.const 0) (local.get 0x00d)) (i64.store offset=0x00e align=1 (i32.const 0) (local.get 0x00e)) (i64.store offset=0x00f align=1 (i32.const 0) (local.get 0x00f)) (i64.store offset=0x010 align=1 (i32.const 0) (local.get 0x010)) (i64.store offset=0x011 align=1 (i32.const 0) (local.get 0x011)) (i64.store offset=0x012 align=1 (i32.const 0) (local.get 0x012)) (i64.store offset=0x013 align=1 (i32.const 0) (local.get 0x013)) (i64.store offset=0x014 align=1 (i32.const 0) (local.get 0x014)) (i64.store offset=0x015 align=1 (i32.const 0) (local.get 0x015)) (i64.store offset=0x016 align=1 (i32.const 0) (local.get 0x016)) (i64.store offset=0x017 align=1 (i32.const 0) (local.get 0x017)) (i64.store offset=0x018 align=1 (i32.const 0) (local.get 0x018)) (i64.store offset=0x019 align=1 (i32.const 0) (local.get 0x019)) (i64.store offset=0x01a align=1 (i32.const 0) (local.get 0x01a)) (i64.store offset=0x01b align=1 (i32.const 0) (local.get 0x01b)) (i64.store offset=0x01c align=1 (i32.const 0) (local.get 0x01c)) (i64.store offset=0x01d align=1 (i32.const 0) (local.get 0x01d)) (i64.store offset=0x01e align=1 (i32.const 0) (local.get 0x01e)) (i64.store offset=0x01f align=1 (i32.const 0) (local.get 0x01f)) (i64.store offset=0x020 align=1 (i32.const 0) (local.get 0x020)) (i64.store offset=0x021 align=1 (i32.const 0) (local.get 0x021)) (i64.store offset=0x022 align=1 (i32.const 0) (local.get 0x022)) (i64.store offset=0x023 align=1 (i32.const 0) (local.get 0x023)) (i64.store offset=0x024 align=1 (i32.const 0) (local.get 0x024)) (i64.store offset=0x025 align=1 (i32.const 0) (local.get 0x025)) (i64.store offset=0x026 align=1 (i32.const 0) (local.get 0x026)) (i64.store offset=0x027 align=1 (i32.const 0) (local.get 0x027)) (i64.store offset=0x028 align=1 (i32.const 0) (local.get 0x028)) (i64.store offset=0x029 align=1 (i32.const 0) (local.get 0x029)) (i64.store offset=0x02a align=1 (i32.const 0) (local.get 0x02a)) (i64.store offset=0x02b align=1 (i32.const 0) (local.get 0x02b)) (i64.store offset=0x02c align=1 (i32.const 0) (local.get 0x02c)) (i64.store offset=0x02d align=1 (i32.const 0) (local.get 0x02d)) (i64.store offset=0x02e align=1 (i32.const 0) (local.get 0x02e)) (i64.store offset=0x02f align=1 (i32.const 0) (local.get 0x02f)) (i64.store offset=0x030 align=1 (i32.const 0) (local.get 0x030)) (i64.store offset=0x031 align=1 (i32.const 0) (local.get 0x031)) (i64.store offset=0x032 align=1 (i32.const 0) (local.get 0x032)) (i64.store offset=0x033 align=1 (i32.const 0) (local.get 0x033)) (i64.store offset=0x034 align=1 (i32.const 0) (local.get 0x034)) (i64.store offset=0x035 align=1 (i32.const 0) (local.get 0x035)) (i64.store offset=0x036 align=1 (i32.const 0) (local.get 0x036)) (i64.store offset=0x037 align=1 (i32.const 0) (local.get 0x037)) (i64.store offset=0x038 align=1 (i32.const 0) (local.get 0x038)) (i64.store offset=0x039 align=1 (i32.const 0) (local.get 0x039)) (i64.store offset=0x03a align=1 (i32.const 0) (local.get 0x03a)) (i64.store offset=0x03b align=1 (i32.const 0) (local.get 0x03b)) (i64.store offset=0x03c align=1 (i32.const 0) (local.get 0x03c)) (i64.store offset=0x03d align=1 (i32.const 0) (local.get 0x03d)) (i64.store offset=0x03e align=1 (i32.const 0) (local.get 0x03e)) (i64.store offset=0x03f align=1 (i32.const 0) (local.get 0x03f)) (i64.store offset=0x040 align=1 (i32.const 0) (local.get 0x040)) (i64.store offset=0x041 align=1 (i32.const 0) (local.get 0x041)) (i64.store offset=0x042 align=1 (i32.const 0) (local.get 0x042)) (i64.store offset=0x043 align=1 (i32.const 0) (local.get 0x043)) (i64.store offset=0x044 align=1 (i32.const 0) (local.get 0x044)) (i64.store offset=0x045 align=1 (i32.const 0) (local.get 0x045)) (i64.store offset=0x046 align=1 (i32.const 0) (local.get 0x046)) (i64.store offset=0x047 align=1 (i32.const 0) (local.get 0x047)) (i64.store offset=0x048 align=1 (i32.const 0) (local.get 0x048)) (i64.store offset=0x049 align=1 (i32.const 0) (local.get 0x049)) (i64.store offset=0x04a align=1 (i32.const 0) (local.get 0x04a)) (i64.store offset=0x04b align=1 (i32.const 0) (local.get 0x04b)) (i64.store offset=0x04c align=1 (i32.const 0) (local.get 0x04c)) (i64.store offset=0x04d align=1 (i32.const 0) (local.get 0x04d)) (i64.store offset=0x04e align=1 (i32.const 0) (local.get 0x04e)) (i64.store offset=0x04f align=1 (i32.const 0) (local.get 0x04f)) (i64.store offset=0x050 align=1 (i32.const 0) (local.get 0x050)) (i64.store offset=0x051 align=1 (i32.const 0) (local.get 0x051)) (i64.store offset=0x052 align=1 (i32.const 0) (local.get 0x052)) (i64.store offset=0x053 align=1 (i32.const 0) (local.get 0x053)) (i64.store offset=0x054 align=1 (i32.const 0) (local.get 0x054)) (i64.store offset=0x055 align=1 (i32.const 0) (local.get 0x055)) (i64.store offset=0x056 align=1 (i32.const 0) (local.get 0x056)) (i64.store offset=0x057 align=1 (i32.const 0) (local.get 0x057)) (i64.store offset=0x058 align=1 (i32.const 0) (local.get 0x058)) (i64.store offset=0x059 align=1 (i32.const 0) (local.get 0x059)) (i64.store offset=0x05a align=1 (i32.const 0) (local.get 0x05a)) (i64.store offset=0x05b align=1 (i32.const 0) (local.get 0x05b)) (i64.store offset=0x05c align=1 (i32.const 0) (local.get 0x05c)) (i64.store offset=0x05d align=1 (i32.const 0) (local.get 0x05d)) (i64.store offset=0x05e align=1 (i32.const 0) (local.get 0x05e)) (i64.store offset=0x05f align=1 (i32.const 0) (local.get 0x05f)) (i64.store offset=0x060 align=1 (i32.const 0) (local.get 0x060)) (i64.store offset=0x061 align=1 (i32.const 0) (local.get 0x061)) (i64.store offset=0x062 align=1 (i32.const 0) (local.get 0x062)) (i64.store offset=0x063 align=1 (i32.const 0) (local.get 0x063)) (i64.store offset=0x064 align=1 (i32.const 0) (local.get 0x064)) (i64.store offset=0x065 align=1 (i32.const 0) (local.get 0x065)) (i64.store offset=0x066 align=1 (i32.const 0) (local.get 0x066)) (i64.store offset=0x067 align=1 (i32.const 0) (local.get 0x067)) (i64.store offset=0x068 align=1 (i32.const 0) (local.get 0x068)) (i64.store offset=0x069 align=1 (i32.const 0) (local.get 0x069)) (i64.store offset=0x06a align=1 (i32.const 0) (local.get 0x06a)) (i64.store offset=0x06b align=1 (i32.const 0) (local.get 0x06b)) (i64.store offset=0x06c align=1 (i32.const 0) (local.get 0x06c)) (i64.store offset=0x06d align=1 (i32.const 0) (local.get 0x06d)) (i64.store offset=0x06e align=1 (i32.const 0) (local.get 0x06e)) (i64.store offset=0x06f align=1 (i32.const 0) (local.get 0x06f)) (i64.store offset=0x070 align=1 (i32.const 0) (local.get 0x070)) (i64.store offset=0x071 align=1 (i32.const 0) (local.get 0x071)) (i64.store offset=0x072 align=1 (i32.const 0) (local.get 0x072)) (i64.store offset=0x073 align=1 (i32.const 0) (local.get 0x073)) (i64.store offset=0x074 align=1 (i32.const 0) (local.get 0x074)) (i64.store offset=0x075 align=1 (i32.const 0) (local.get 0x075)) (i64.store offset=0x076 align=1 (i32.const 0) (local.get 0x076)) (i64.store offset=0x077 align=1 (i32.const 0) (local.get 0x077)) (i64.store offset=0x078 align=1 (i32.const 0) (local.get 0x078)) (i64.store offset=0x079 align=1 (i32.const 0) (local.get 0x079)) (i64.store offset=0x07a align=1 (i32.const 0) (local.get 0x07a)) (i64.store offset=0x07b align=1 (i32.const 0) (local.get 0x07b)) (i64.store offset=0x07c align=1 (i32.const 0) (local.get 0x07c)) (i64.store offset=0x07d align=1 (i32.const 0) (local.get 0x07d)) (i64.store offset=0x07e align=1 (i32.const 0) (local.get 0x07e)) (i64.store offset=0x07f align=1 (i32.const 0) (local.get 0x07f)) (i64.store offset=0x080 align=1 (i32.const 0) (local.get 0x080)) (i64.store offset=0x081 align=1 (i32.const 0) (local.get 0x081)) (i64.store offset=0x082 align=1 (i32.const 0) (local.get 0x082)) (i64.store offset=0x083 align=1 (i32.const 0) (local.get 0x083)) (i64.store offset=0x084 align=1 (i32.const 0) (local.get 0x084)) (i64.store offset=0x085 align=1 (i32.const 0) (local.get 0x085)) (i64.store offset=0x086 align=1 (i32.const 0) (local.get 0x086)) (i64.store offset=0x087 align=1 (i32.const 0) (local.get 0x087)) (i64.store offset=0x088 align=1 (i32.const 0) (local.get 0x088)) (i64.store offset=0x089 align=1 (i32.const 0) (local.get 0x089)) (i64.store offset=0x08a align=1 (i32.const 0) (local.get 0x08a)) (i64.store offset=0x08b align=1 (i32.const 0) (local.get 0x08b)) (i64.store offset=0x08c align=1 (i32.const 0) (local.get 0x08c)) (i64.store offset=0x08d align=1 (i32.const 0) (local.get 0x08d)) (i64.store offset=0x08e align=1 (i32.const 0) (local.get 0x08e)) (i64.store offset=0x08f align=1 (i32.const 0) (local.get 0x08f)) (i64.store offset=0x090 align=1 (i32.const 0) (local.get 0x090)) (i64.store offset=0x091 align=1 (i32.const 0) (local.get 0x091)) (i64.store offset=0x092 align=1 (i32.const 0) (local.get 0x092)) (i64.store offset=0x093 align=1 (i32.const 0) (local.get 0x093)) (i64.store offset=0x094 align=1 (i32.const 0) (local.get 0x094)) (i64.store offset=0x095 align=1 (i32.const 0) (local.get 0x095)) (i64.store offset=0x096 align=1 (i32.const 0) (local.get 0x096)) (i64.store offset=0x097 align=1 (i32.const 0) (local.get 0x097)) (i64.store offset=0x098 align=1 (i32.const 0) (local.get 0x098)) (i64.store offset=0x099 align=1 (i32.const 0) (local.get 0x099)) (i64.store offset=0x09a align=1 (i32.const 0) (local.get 0x09a)) (i64.store offset=0x09b align=1 (i32.const 0) (local.get 0x09b)) (i64.store offset=0x09c align=1 (i32.const 0) (local.get 0x09c)) (i64.store offset=0x09d align=1 (i32.const 0) (local.get 0x09d)) (i64.store offset=0x09e align=1 (i32.const 0) (local.get 0x09e)) (i64.store offset=0x09f align=1 (i32.const 0) (local.get 0x09f)) (i64.store offset=0x0a0 align=1 (i32.const 0) (local.get 0x0a0)) (i64.store offset=0x0a1 align=1 (i32.const 0) (local.get 0x0a1)) (i64.store offset=0x0a2 align=1 (i32.const 0) (local.get 0x0a2)) (i64.store offset=0x0a3 align=1 (i32.const 0) (local.get 0x0a3)) (i64.store offset=0x0a4 align=1 (i32.const 0) (local.get 0x0a4)) (i64.store offset=0x0a5 align=1 (i32.const 0) (local.get 0x0a5)) (i64.store offset=0x0a6 align=1 (i32.const 0) (local.get 0x0a6)) (i64.store offset=0x0a7 align=1 (i32.const 0) (local.get 0x0a7)) (i64.store offset=0x0a8 align=1 (i32.const 0) (local.get 0x0a8)) (i64.store offset=0x0a9 align=1 (i32.const 0) (local.get 0x0a9)) (i64.store offset=0x0aa align=1 (i32.const 0) (local.get 0x0aa)) (i64.store offset=0x0ab align=1 (i32.const 0) (local.get 0x0ab)) (i64.store offset=0x0ac align=1 (i32.const 0) (local.get 0x0ac)) (i64.store offset=0x0ad align=1 (i32.const 0) (local.get 0x0ad)) (i64.store offset=0x0ae align=1 (i32.const 0) (local.get 0x0ae)) (i64.store offset=0x0af align=1 (i32.const 0) (local.get 0x0af)) (i64.store offset=0x0b0 align=1 (i32.const 0) (local.get 0x0b0)) (i64.store offset=0x0b1 align=1 (i32.const 0) (local.get 0x0b1)) (i64.store offset=0x0b2 align=1 (i32.const 0) (local.get 0x0b2)) (i64.store offset=0x0b3 align=1 (i32.const 0) (local.get 0x0b3)) (i64.store offset=0x0b4 align=1 (i32.const 0) (local.get 0x0b4)) (i64.store offset=0x0b5 align=1 (i32.const 0) (local.get 0x0b5)) (i64.store offset=0x0b6 align=1 (i32.const 0) (local.get 0x0b6)) (i64.store offset=0x0b7 align=1 (i32.const 0) (local.get 0x0b7)) (i64.store offset=0x0b8 align=1 (i32.const 0) (local.get 0x0b8)) (i64.store offset=0x0b9 align=1 (i32.const 0) (local.get 0x0b9)) (i64.store offset=0x0ba align=1 (i32.const 0) (local.get 0x0ba)) (i64.store offset=0x0bb align=1 (i32.const 0) (local.get 0x0bb)) (i64.store offset=0x0bc align=1 (i32.const 0) (local.get 0x0bc)) (i64.store offset=0x0bd align=1 (i32.const 0) (local.get 0x0bd)) (i64.store offset=0x0be align=1 (i32.const 0) (local.get 0x0be)) (i64.store offset=0x0bf align=1 (i32.const 0) (local.get 0x0bf)) (i64.store offset=0x0c0 align=1 (i32.const 0) (local.get 0x0c0)) (i64.store offset=0x0c1 align=1 (i32.const 0) (local.get 0x0c1)) (i64.store offset=0x0c2 align=1 (i32.const 0) (local.get 0x0c2)) (i64.store offset=0x0c3 align=1 (i32.const 0) (local.get 0x0c3)) (i64.store offset=0x0c4 align=1 (i32.const 0) (local.get 0x0c4)) (i64.store offset=0x0c5 align=1 (i32.const 0) (local.get 0x0c5)) (i64.store offset=0x0c6 align=1 (i32.const 0) (local.get 0x0c6)) (i64.store offset=0x0c7 align=1 (i32.const 0) (local.get 0x0c7)) (i64.store offset=0x0c8 align=1 (i32.const 0) (local.get 0x0c8)) (i64.store offset=0x0c9 align=1 (i32.const 0) (local.get 0x0c9)) (i64.store offset=0x0ca align=1 (i32.const 0) (local.get 0x0ca)) (i64.store offset=0x0cb align=1 (i32.const 0) (local.get 0x0cb)) (i64.store offset=0x0cc align=1 (i32.const 0) (local.get 0x0cc)) (i64.store offset=0x0cd align=1 (i32.const 0) (local.get 0x0cd)) (i64.store offset=0x0ce align=1 (i32.const 0) (local.get 0x0ce)) (i64.store offset=0x0cf align=1 (i32.const 0) (local.get 0x0cf)) (i64.store offset=0x0d0 align=1 (i32.const 0) (local.get 0x0d0)) (i64.store offset=0x0d1 align=1 (i32.const 0) (local.get 0x0d1)) (i64.store offset=0x0d2 align=1 (i32.const 0) (local.get 0x0d2)) (i64.store offset=0x0d3 align=1 (i32.const 0) (local.get 0x0d3)) (i64.store offset=0x0d4 align=1 (i32.const 0) (local.get 0x0d4)) (i64.store offset=0x0d5 align=1 (i32.const 0) (local.get 0x0d5)) (i64.store offset=0x0d6 align=1 (i32.const 0) (local.get 0x0d6)) (i64.store offset=0x0d7 align=1 (i32.const 0) (local.get 0x0d7)) (i64.store offset=0x0d8 align=1 (i32.const 0) (local.get 0x0d8)) (i64.store offset=0x0d9 align=1 (i32.const 0) (local.get 0x0d9)) (i64.store offset=0x0da align=1 (i32.const 0) (local.get 0x0da)) (i64.store offset=0x0db align=1 (i32.const 0) (local.get 0x0db)) (i64.store offset=0x0dc align=1 (i32.const 0) (local.get 0x0dc)) (i64.store offset=0x0dd align=1 (i32.const 0) (local.get 0x0dd)) (i64.store offset=0x0de align=1 (i32.const 0) (local.get 0x0de)) (i64.store offset=0x0df align=1 (i32.const 0) (local.get 0x0df)) (i64.store offset=0x0e0 align=1 (i32.const 0) (local.get 0x0e0)) (i64.store offset=0x0e1 align=1 (i32.const 0) (local.get 0x0e1)) (i64.store offset=0x0e2 align=1 (i32.const 0) (local.get 0x0e2)) (i64.store offset=0x0e3 align=1 (i32.const 0) (local.get 0x0e3)) (i64.store offset=0x0e4 align=1 (i32.const 0) (local.get 0x0e4)) (i64.store offset=0x0e5 align=1 (i32.const 0) (local.get 0x0e5)) (i64.store offset=0x0e6 align=1 (i32.const 0) (local.get 0x0e6)) (i64.store offset=0x0e7 align=1 (i32.const 0) (local.get 0x0e7)) (i64.store offset=0x0e8 align=1 (i32.const 0) (local.get 0x0e8)) (i64.store offset=0x0e9 align=1 (i32.const 0) (local.get 0x0e9)) (i64.store offset=0x0ea align=1 (i32.const 0) (local.get 0x0ea)) (i64.store offset=0x0eb align=1 (i32.const 0) (local.get 0x0eb)) (i64.store offset=0x0ec align=1 (i32.const 0) (local.get 0x0ec)) (i64.store offset=0x0ed align=1 (i32.const 0) (local.get 0x0ed)) (i64.store offset=0x0ee align=1 (i32.const 0) (local.get 0x0ee)) (i64.store offset=0x0ef align=1 (i32.const 0) (local.get 0x0ef)) (i64.store offset=0x0f0 align=1 (i32.const 0) (local.get 0x0f0)) (i64.store offset=0x0f1 align=1 (i32.const 0) (local.get 0x0f1)) (i64.store offset=0x0f2 align=1 (i32.const 0) (local.get 0x0f2)) (i64.store offset=0x0f3 align=1 (i32.const 0) (local.get 0x0f3)) (i64.store offset=0x0f4 align=1 (i32.const 0) (local.get 0x0f4)) (i64.store offset=0x0f5 align=1 (i32.const 0) (local.get 0x0f5)) (i64.store offset=0x0f6 align=1 (i32.const 0) (local.get 0x0f6)) (i64.store offset=0x0f7 align=1 (i32.const 0) (local.get 0x0f7)) (i64.store offset=0x0f8 align=1 (i32.const 0) (local.get 0x0f8)) (i64.store offset=0x0f9 align=1 (i32.const 0) (local.get 0x0f9)) (i64.store offset=0x0fa align=1 (i32.const 0) (local.get 0x0fa)) (i64.store offset=0x0fb align=1 (i32.const 0) (local.get 0x0fb)) (i64.store offset=0x0fc align=1 (i32.const 0) (local.get 0x0fc)) (i64.store offset=0x0fd align=1 (i32.const 0) (local.get 0x0fd)) (i64.store offset=0x0fe align=1 (i32.const 0) (local.get 0x0fe)) (i64.store offset=0x0ff align=1 (i32.const 0) (local.get 0x0ff)) (i64.store offset=0x100 align=1 (i32.const 0) (local.get 0x100)) (i64.store offset=0x101 align=1 (i32.const 0) (local.get 0x101)) (i64.store offset=0x102 align=1 (i32.const 0) (local.get 0x102)) (i64.store offset=0x103 align=1 (i32.const 0) (local.get 0x103)) (i64.store offset=0x104 align=1 (i32.const 0) (local.get 0x104)) (i64.store offset=0x105 align=1 (i32.const 0) (local.get 0x105)) (i64.store offset=0x106 align=1 (i32.const 0) (local.get 0x106)) (i64.store offset=0x107 align=1 (i32.const 0) (local.get 0x107)) (i64.store offset=0x108 align=1 (i32.const 0) (local.get 0x108)) (i64.store offset=0x109 align=1 (i32.const 0) (local.get 0x109)) (i64.store offset=0x10a align=1 (i32.const 0) (local.get 0x10a)) (i64.store offset=0x10b align=1 (i32.const 0) (local.get 0x10b)) (i64.store offset=0x10c align=1 (i32.const 0) (local.get 0x10c)) (i64.store offset=0x10d align=1 (i32.const 0) (local.get 0x10d)) (i64.store offset=0x10e align=1 (i32.const 0) (local.get 0x10e)) (i64.store offset=0x10f align=1 (i32.const 0) (local.get 0x10f)) (i64.store offset=0x110 align=1 (i32.const 0) (local.get 0x110)) (i64.store offset=0x111 align=1 (i32.const 0) (local.get 0x111)) (i64.store offset=0x112 align=1 (i32.const 0) (local.get 0x112)) (i64.store offset=0x113 align=1 (i32.const 0) (local.get 0x113)) (i64.store offset=0x114 align=1 (i32.const 0) (local.get 0x114)) (i64.store offset=0x115 align=1 (i32.const 0) (local.get 0x115)) (i64.store offset=0x116 align=1 (i32.const 0) (local.get 0x116)) (i64.store offset=0x117 align=1 (i32.const 0) (local.get 0x117)) (i64.store offset=0x118 align=1 (i32.const 0) (local.get 0x118)) (i64.store offset=0x119 align=1 (i32.const 0) (local.get 0x119)) (i64.store offset=0x11a align=1 (i32.const 0) (local.get 0x11a)) (i64.store offset=0x11b align=1 (i32.const 0) (local.get 0x11b)) (i64.store offset=0x11c align=1 (i32.const 0) (local.get 0x11c)) (i64.store offset=0x11d align=1 (i32.const 0) (local.get 0x11d)) (i64.store offset=0x11e align=1 (i32.const 0) (local.get 0x11e)) (i64.store offset=0x11f align=1 (i32.const 0) (local.get 0x11f)) (i64.store offset=0x120 align=1 (i32.const 0) (local.get 0x120)) (i64.store offset=0x121 align=1 (i32.const 0) (local.get 0x121)) (i64.store offset=0x122 align=1 (i32.const 0) (local.get 0x122)) (i64.store offset=0x123 align=1 (i32.const 0) (local.get 0x123)) (i64.store offset=0x124 align=1 (i32.const 0) (local.get 0x124)) (i64.store offset=0x125 align=1 (i32.const 0) (local.get 0x125)) (i64.store offset=0x126 align=1 (i32.const 0) (local.get 0x126)) (i64.store offset=0x127 align=1 (i32.const 0) (local.get 0x127)) (i64.store offset=0x128 align=1 (i32.const 0) (local.get 0x128)) (i64.store offset=0x129 align=1 (i32.const 0) (local.get 0x129)) (i64.store offset=0x12a align=1 (i32.const 0) (local.get 0x12a)) (i64.store offset=0x12b align=1 (i32.const 0) (local.get 0x12b)) (i64.store offset=0x12c align=1 (i32.const 0) (local.get 0x12c)) (i64.store offset=0x12d align=1 (i32.const 0) (local.get 0x12d)) (i64.store offset=0x12e align=1 (i32.const 0) (local.get 0x12e)) (i64.store offset=0x12f align=1 (i32.const 0) (local.get 0x12f)) (i64.store offset=0x130 align=1 (i32.const 0) (local.get 0x130)) (i64.store offset=0x131 align=1 (i32.const 0) (local.get 0x131)) (i64.store offset=0x132 align=1 (i32.const 0) (local.get 0x132)) (i64.store offset=0x133 align=1 (i32.const 0) (local.get 0x133)) (i64.store offset=0x134 align=1 (i32.const 0) (local.get 0x134)) (i64.store offset=0x135 align=1 (i32.const 0) (local.get 0x135)) (i64.store offset=0x136 align=1 (i32.const 0) (local.get 0x136)) (i64.store offset=0x137 align=1 (i32.const 0) (local.get 0x137)) (i64.store offset=0x138 align=1 (i32.const 0) (local.get 0x138)) (i64.store offset=0x139 align=1 (i32.const 0) (local.get 0x139)) (i64.store offset=0x13a align=1 (i32.const 0) (local.get 0x13a)) (i64.store offset=0x13b align=1 (i32.const 0) (local.get 0x13b)) (i64.store offset=0x13c align=1 (i32.const 0) (local.get 0x13c)) (i64.store offset=0x13d align=1 (i32.const 0) (local.get 0x13d)) (i64.store offset=0x13e align=1 (i32.const 0) (local.get 0x13e)) (i64.store offset=0x13f align=1 (i32.const 0) (local.get 0x13f)) (i64.store offset=0x140 align=1 (i32.const 0) (local.get 0x140)) (i64.store offset=0x141 align=1 (i32.const 0) (local.get 0x141)) (i64.store offset=0x142 align=1 (i32.const 0) (local.get 0x142)) (i64.store offset=0x143 align=1 (i32.const 0) (local.get 0x143)) (i64.store offset=0x144 align=1 (i32.const 0) (local.get 0x144)) (i64.store offset=0x145 align=1 (i32.const 0) (local.get 0x145)) (i64.store offset=0x146 align=1 (i32.const 0) (local.get 0x146)) (i64.store offset=0x147 align=1 (i32.const 0) (local.get 0x147)) (i64.store offset=0x148 align=1 (i32.const 0) (local.get 0x148)) (i64.store offset=0x149 align=1 (i32.const 0) (local.get 0x149)) (i64.store offset=0x14a align=1 (i32.const 0) (local.get 0x14a)) (i64.store offset=0x14b align=1 (i32.const 0) (local.get 0x14b)) (i64.store offset=0x14c align=1 (i32.const 0) (local.get 0x14c)) (i64.store offset=0x14d align=1 (i32.const 0) (local.get 0x14d)) (i64.store offset=0x14e align=1 (i32.const 0) (local.get 0x14e)) (i64.store offset=0x14f align=1 (i32.const 0) (local.get 0x14f)) (i64.store offset=0x150 align=1 (i32.const 0) (local.get 0x150)) (i64.store offset=0x151 align=1 (i32.const 0) (local.get 0x151)) (i64.store offset=0x152 align=1 (i32.const 0) (local.get 0x152)) (i64.store offset=0x153 align=1 (i32.const 0) (local.get 0x153)) (i64.store offset=0x154 align=1 (i32.const 0) (local.get 0x154)) (i64.store offset=0x155 align=1 (i32.const 0) (local.get 0x155)) (i64.store offset=0x156 align=1 (i32.const 0) (local.get 0x156)) (i64.store offset=0x157 align=1 (i32.const 0) (local.get 0x157)) (i64.store offset=0x158 align=1 (i32.const 0) (local.get 0x158)) (i64.store offset=0x159 align=1 (i32.const 0) (local.get 0x159)) (i64.store offset=0x15a align=1 (i32.const 0) (local.get 0x15a)) (i64.store offset=0x15b align=1 (i32.const 0) (local.get 0x15b)) (i64.store offset=0x15c align=1 (i32.const 0) (local.get 0x15c)) (i64.store offset=0x15d align=1 (i32.const 0) (local.get 0x15d)) (i64.store offset=0x15e align=1 (i32.const 0) (local.get 0x15e)) (i64.store offset=0x15f align=1 (i32.const 0) (local.get 0x15f)) (i64.store offset=0x160 align=1 (i32.const 0) (local.get 0x160)) (i64.store offset=0x161 align=1 (i32.const 0) (local.get 0x161)) (i64.store offset=0x162 align=1 (i32.const 0) (local.get 0x162)) (i64.store offset=0x163 align=1 (i32.const 0) (local.get 0x163)) (i64.store offset=0x164 align=1 (i32.const 0) (local.get 0x164)) (i64.store offset=0x165 align=1 (i32.const 0) (local.get 0x165)) (i64.store offset=0x166 align=1 (i32.const 0) (local.get 0x166)) (i64.store offset=0x167 align=1 (i32.const 0) (local.get 0x167)) (i64.store offset=0x168 align=1 (i32.const 0) (local.get 0x168)) (i64.store offset=0x169 align=1 (i32.const 0) (local.get 0x169)) (i64.store offset=0x16a align=1 (i32.const 0) (local.get 0x16a)) (i64.store offset=0x16b align=1 (i32.const 0) (local.get 0x16b)) (i64.store offset=0x16c align=1 (i32.const 0) (local.get 0x16c)) (i64.store offset=0x16d align=1 (i32.const 0) (local.get 0x16d)) (i64.store offset=0x16e align=1 (i32.const 0) (local.get 0x16e)) (i64.store offset=0x16f align=1 (i32.const 0) (local.get 0x16f)) (i64.store offset=0x170 align=1 (i32.const 0) (local.get 0x170)) (i64.store offset=0x171 align=1 (i32.const 0) (local.get 0x171)) (i64.store offset=0x172 align=1 (i32.const 0) (local.get 0x172)) (i64.store offset=0x173 align=1 (i32.const 0) (local.get 0x173)) (i64.store offset=0x174 align=1 (i32.const 0) (local.get 0x174)) (i64.store offset=0x175 align=1 (i32.const 0) (local.get 0x175)) (i64.store offset=0x176 align=1 (i32.const 0) (local.get 0x176)) (i64.store offset=0x177 align=1 (i32.const 0) (local.get 0x177)) (i64.store offset=0x178 align=1 (i32.const 0) (local.get 0x178)) (i64.store offset=0x179 align=1 (i32.const 0) (local.get 0x179)) (i64.store offset=0x17a align=1 (i32.const 0) (local.get 0x17a)) (i64.store offset=0x17b align=1 (i32.const 0) (local.get 0x17b)) (i64.store offset=0x17c align=1 (i32.const 0) (local.get 0x17c)) (i64.store offset=0x17d align=1 (i32.const 0) (local.get 0x17d)) (i64.store offset=0x17e align=1 (i32.const 0) (local.get 0x17e)) (i64.store offset=0x17f align=1 (i32.const 0) (local.get 0x17f)) (i64.store offset=0x180 align=1 (i32.const 0) (local.get 0x180)) (i64.store offset=0x181 align=1 (i32.const 0) (local.get 0x181)) (i64.store offset=0x182 align=1 (i32.const 0) (local.get 0x182)) (i64.store offset=0x183 align=1 (i32.const 0) (local.get 0x183)) (i64.store offset=0x184 align=1 (i32.const 0) (local.get 0x184)) (i64.store offset=0x185 align=1 (i32.const 0) (local.get 0x185)) (i64.store offset=0x186 align=1 (i32.const 0) (local.get 0x186)) (i64.store offset=0x187 align=1 (i32.const 0) (local.get 0x187)) (i64.store offset=0x188 align=1 (i32.const 0) (local.get 0x188)) (i64.store offset=0x189 align=1 (i32.const 0) (local.get 0x189)) (i64.store offset=0x18a align=1 (i32.const 0) (local.get 0x18a)) (i64.store offset=0x18b align=1 (i32.const 0) (local.get 0x18b)) (i64.store offset=0x18c align=1 (i32.const 0) (local.get 0x18c)) (i64.store offset=0x18d align=1 (i32.const 0) (local.get 0x18d)) (i64.store offset=0x18e align=1 (i32.const 0) (local.get 0x18e)) (i64.store offset=0x18f align=1 (i32.const 0) (local.get 0x18f)) (i64.store offset=0x190 align=1 (i32.const 0) (local.get 0x190)) (i64.store offset=0x191 align=1 (i32.const 0) (local.get 0x191)) (i64.store offset=0x192 align=1 (i32.const 0) (local.get 0x192)) (i64.store offset=0x193 align=1 (i32.const 0) (local.get 0x193)) (i64.store offset=0x194 align=1 (i32.const 0) (local.get 0x194)) (i64.store offset=0x195 align=1 (i32.const 0) (local.get 0x195)) (i64.store offset=0x196 align=1 (i32.const 0) (local.get 0x196)) (i64.store offset=0x197 align=1 (i32.const 0) (local.get 0x197)) (i64.store offset=0x198 align=1 (i32.const 0) (local.get 0x198)) (i64.store offset=0x199 align=1 (i32.const 0) (local.get 0x199)) (i64.store offset=0x19a align=1 (i32.const 0) (local.get 0x19a)) (i64.store offset=0x19b align=1 (i32.const 0) (local.get 0x19b)) (i64.store offset=0x19c align=1 (i32.const 0) (local.get 0x19c)) (i64.store offset=0x19d align=1 (i32.const 0) (local.get 0x19d)) (i64.store offset=0x19e align=1 (i32.const 0) (local.get 0x19e)) (i64.store offset=0x19f align=1 (i32.const 0) (local.get 0x19f)) (i64.store offset=0x1a0 align=1 (i32.const 0) (local.get 0x1a0)) (i64.store offset=0x1a1 align=1 (i32.const 0) (local.get 0x1a1)) (i64.store offset=0x1a2 align=1 (i32.const 0) (local.get 0x1a2)) (i64.store offset=0x1a3 align=1 (i32.const 0) (local.get 0x1a3)) (i64.store offset=0x1a4 align=1 (i32.const 0) (local.get 0x1a4)) (i64.store offset=0x1a5 align=1 (i32.const 0) (local.get 0x1a5)) (i64.store offset=0x1a6 align=1 (i32.const 0) (local.get 0x1a6)) (i64.store offset=0x1a7 align=1 (i32.const 0) (local.get 0x1a7)) (i64.store offset=0x1a8 align=1 (i32.const 0) (local.get 0x1a8)) (i64.store offset=0x1a9 align=1 (i32.const 0) (local.get 0x1a9)) (i64.store offset=0x1aa align=1 (i32.const 0) (local.get 0x1aa)) (i64.store offset=0x1ab align=1 (i32.const 0) (local.get 0x1ab)) (i64.store offset=0x1ac align=1 (i32.const 0) (local.get 0x1ac)) (i64.store offset=0x1ad align=1 (i32.const 0) (local.get 0x1ad)) (i64.store offset=0x1ae align=1 (i32.const 0) (local.get 0x1ae)) (i64.store offset=0x1af align=1 (i32.const 0) (local.get 0x1af)) (i64.store offset=0x1b0 align=1 (i32.const 0) (local.get 0x1b0)) (i64.store offset=0x1b1 align=1 (i32.const 0) (local.get 0x1b1)) (i64.store offset=0x1b2 align=1 (i32.const 0) (local.get 0x1b2)) (i64.store offset=0x1b3 align=1 (i32.const 0) (local.get 0x1b3)) (i64.store offset=0x1b4 align=1 (i32.const 0) (local.get 0x1b4)) (i64.store offset=0x1b5 align=1 (i32.const 0) (local.get 0x1b5)) (i64.store offset=0x1b6 align=1 (i32.const 0) (local.get 0x1b6)) (i64.store offset=0x1b7 align=1 (i32.const 0) (local.get 0x1b7)) (i64.store offset=0x1b8 align=1 (i32.const 0) (local.get 0x1b8)) (i64.store offset=0x1b9 align=1 (i32.const 0) (local.get 0x1b9)) (i64.store offset=0x1ba align=1 (i32.const 0) (local.get 0x1ba)) (i64.store offset=0x1bb align=1 (i32.const 0) (local.get 0x1bb)) (i64.store offset=0x1bc align=1 (i32.const 0) (local.get 0x1bc)) (i64.store offset=0x1bd align=1 (i32.const 0) (local.get 0x1bd)) (i64.store offset=0x1be align=1 (i32.const 0) (local.get 0x1be)) (i64.store offset=0x1bf align=1 (i32.const 0) (local.get 0x1bf)) (i64.store offset=0x1c0 align=1 (i32.const 0) (local.get 0x1c0)) (i64.store offset=0x1c1 align=1 (i32.const 0) (local.get 0x1c1)) (i64.store offset=0x1c2 align=1 (i32.const 0) (local.get 0x1c2)) (i64.store offset=0x1c3 align=1 (i32.const 0) (local.get 0x1c3)) (i64.store offset=0x1c4 align=1 (i32.const 0) (local.get 0x1c4)) (i64.store offset=0x1c5 align=1 (i32.const 0) (local.get 0x1c5)) (i64.store offset=0x1c6 align=1 (i32.const 0) (local.get 0x1c6)) (i64.store offset=0x1c7 align=1 (i32.const 0) (local.get 0x1c7)) (i64.store offset=0x1c8 align=1 (i32.const 0) (local.get 0x1c8)) (i64.store offset=0x1c9 align=1 (i32.const 0) (local.get 0x1c9)) (i64.store offset=0x1ca align=1 (i32.const 0) (local.get 0x1ca)) (i64.store offset=0x1cb align=1 (i32.const 0) (local.get 0x1cb)) (i64.store offset=0x1cc align=1 (i32.const 0) (local.get 0x1cc)) (i64.store offset=0x1cd align=1 (i32.const 0) (local.get 0x1cd)) (i64.store offset=0x1ce align=1 (i32.const 0) (local.get 0x1ce)) (i64.store offset=0x1cf align=1 (i32.const 0) (local.get 0x1cf)) (i64.store offset=0x1d0 align=1 (i32.const 0) (local.get 0x1d0)) (i64.store offset=0x1d1 align=1 (i32.const 0) (local.get 0x1d1)) (i64.store offset=0x1d2 align=1 (i32.const 0) (local.get 0x1d2)) (i64.store offset=0x1d3 align=1 (i32.const 0) (local.get 0x1d3)) (i64.store offset=0x1d4 align=1 (i32.const 0) (local.get 0x1d4)) (i64.store offset=0x1d5 align=1 (i32.const 0) (local.get 0x1d5)) (i64.store offset=0x1d6 align=1 (i32.const 0) (local.get 0x1d6)) (i64.store offset=0x1d7 align=1 (i32.const 0) (local.get 0x1d7)) (i64.store offset=0x1d8 align=1 (i32.const 0) (local.get 0x1d8)) (i64.store offset=0x1d9 align=1 (i32.const 0) (local.get 0x1d9)) (i64.store offset=0x1da align=1 (i32.const 0) (local.get 0x1da)) (i64.store offset=0x1db align=1 (i32.const 0) (local.get 0x1db)) (i64.store offset=0x1dc align=1 (i32.const 0) (local.get 0x1dc)) (i64.store offset=0x1dd align=1 (i32.const 0) (local.get 0x1dd)) (i64.store offset=0x1de align=1 (i32.const 0) (local.get 0x1de)) (i64.store offset=0x1df align=1 (i32.const 0) (local.get 0x1df)) (i64.store offset=0x1e0 align=1 (i32.const 0) (local.get 0x1e0)) (i64.store offset=0x1e1 align=1 (i32.const 0) (local.get 0x1e1)) (i64.store offset=0x1e2 align=1 (i32.const 0) (local.get 0x1e2)) (i64.store offset=0x1e3 align=1 (i32.const 0) (local.get 0x1e3)) (i64.store offset=0x1e4 align=1 (i32.const 0) (local.get 0x1e4)) (i64.store offset=0x1e5 align=1 (i32.const 0) (local.get 0x1e5)) (i64.store offset=0x1e6 align=1 (i32.const 0) (local.get 0x1e6)) (i64.store offset=0x1e7 align=1 (i32.const 0) (local.get 0x1e7)) (i64.store offset=0x1e8 align=1 (i32.const 0) (local.get 0x1e8)) (i64.store offset=0x1e9 align=1 (i32.const 0) (local.get 0x1e9)) (i64.store offset=0x1ea align=1 (i32.const 0) (local.get 0x1ea)) (i64.store offset=0x1eb align=1 (i32.const 0) (local.get 0x1eb)) (i64.store offset=0x1ec align=1 (i32.const 0) (local.get 0x1ec)) (i64.store offset=0x1ed align=1 (i32.const 0) (local.get 0x1ed)) (i64.store offset=0x1ee align=1 (i32.const 0) (local.get 0x1ee)) (i64.store offset=0x1ef align=1 (i32.const 0) (local.get 0x1ef)) (i64.store offset=0x1f0 align=1 (i32.const 0) (local.get 0x1f0)) (i64.store offset=0x1f1 align=1 (i32.const 0) (local.get 0x1f1)) (i64.store offset=0x1f2 align=1 (i32.const 0) (local.get 0x1f2)) (i64.store offset=0x1f3 align=1 (i32.const 0) (local.get 0x1f3)) (i64.store offset=0x1f4 align=1 (i32.const 0) (local.get 0x1f4)) (i64.store offset=0x1f5 align=1 (i32.const 0) (local.get 0x1f5)) (i64.store offset=0x1f6 align=1 (i32.const 0) (local.get 0x1f6)) (i64.store offset=0x1f7 align=1 (i32.const 0) (local.get 0x1f7)) (i64.store offset=0x1f8 align=1 (i32.const 0) (local.get 0x1f8)) (i64.store offset=0x1f9 align=1 (i32.const 0) (local.get 0x1f9)) (i64.store offset=0x1fa align=1 (i32.const 0) (local.get 0x1fa)) (i64.store offset=0x1fb align=1 (i32.const 0) (local.get 0x1fb)) (i64.store offset=0x1fc align=1 (i32.const 0) (local.get 0x1fc)) (i64.store offset=0x1fd align=1 (i32.const 0) (local.get 0x1fd)) (i64.store offset=0x1fe align=1 (i32.const 0) (local.get 0x1fe)) (i64.store offset=0x1ff align=1 (i32.const 0) (local.get 0x1ff)) (i64.store offset=0x200 align=1 (i32.const 0) (local.get 0x200)) (i64.store offset=0x201 align=1 (i32.const 0) (local.get 0x201)) (i64.store offset=0x202 align=1 (i32.const 0) (local.get 0x202)) (i64.store offset=0x203 align=1 (i32.const 0) (local.get 0x203)) (i64.store offset=0x204 align=1 (i32.const 0) (local.get 0x204)) (i64.store offset=0x205 align=1 (i32.const 0) (local.get 0x205)) (i64.store offset=0x206 align=1 (i32.const 0) (local.get 0x206)) (i64.store offset=0x207 align=1 (i32.const 0) (local.get 0x207)) (i64.store offset=0x208 align=1 (i32.const 0) (local.get 0x208)) (i64.store offset=0x209 align=1 (i32.const 0) (local.get 0x209)) (i64.store offset=0x20a align=1 (i32.const 0) (local.get 0x20a)) (i64.store offset=0x20b align=1 (i32.const 0) (local.get 0x20b)) (i64.store offset=0x20c align=1 (i32.const 0) (local.get 0x20c)) (i64.store offset=0x20d align=1 (i32.const 0) (local.get 0x20d)) (i64.store offset=0x20e align=1 (i32.const 0) (local.get 0x20e)) (i64.store offset=0x20f align=1 (i32.const 0) (local.get 0x20f)) (i64.store offset=0x210 align=1 (i32.const 0) (local.get 0x210)) (i64.store offset=0x211 align=1 (i32.const 0) (local.get 0x211)) (i64.store offset=0x212 align=1 (i32.const 0) (local.get 0x212)) (i64.store offset=0x213 align=1 (i32.const 0) (local.get 0x213)) (i64.store offset=0x214 align=1 (i32.const 0) (local.get 0x214)) (i64.store offset=0x215 align=1 (i32.const 0) (local.get 0x215)) (i64.store offset=0x216 align=1 (i32.const 0) (local.get 0x216)) (i64.store offset=0x217 align=1 (i32.const 0) (local.get 0x217)) (i64.store offset=0x218 align=1 (i32.const 0) (local.get 0x218)) (i64.store offset=0x219 align=1 (i32.const 0) (local.get 0x219)) (i64.store offset=0x21a align=1 (i32.const 0) (local.get 0x21a)) (i64.store offset=0x21b align=1 (i32.const 0) (local.get 0x21b)) (i64.store offset=0x21c align=1 (i32.const 0) (local.get 0x21c)) (i64.store offset=0x21d align=1 (i32.const 0) (local.get 0x21d)) (i64.store offset=0x21e align=1 (i32.const 0) (local.get 0x21e)) (i64.store offset=0x21f align=1 (i32.const 0) (local.get 0x21f)) (i64.store offset=0x220 align=1 (i32.const 0) (local.get 0x220)) (i64.store offset=0x221 align=1 (i32.const 0) (local.get 0x221)) (i64.store offset=0x222 align=1 (i32.const 0) (local.get 0x222)) (i64.store offset=0x223 align=1 (i32.const 0) (local.get 0x223)) (i64.store offset=0x224 align=1 (i32.const 0) (local.get 0x224)) (i64.store offset=0x225 align=1 (i32.const 0) (local.get 0x225)) (i64.store offset=0x226 align=1 (i32.const 0) (local.get 0x226)) (i64.store offset=0x227 align=1 (i32.const 0) (local.get 0x227)) (i64.store offset=0x228 align=1 (i32.const 0) (local.get 0x228)) (i64.store offset=0x229 align=1 (i32.const 0) (local.get 0x229)) (i64.store offset=0x22a align=1 (i32.const 0) (local.get 0x22a)) (i64.store offset=0x22b align=1 (i32.const 0) (local.get 0x22b)) (i64.store offset=0x22c align=1 (i32.const 0) (local.get 0x22c)) (i64.store offset=0x22d align=1 (i32.const 0) (local.get 0x22d)) (i64.store offset=0x22e align=1 (i32.const 0) (local.get 0x22e)) (i64.store offset=0x22f align=1 (i32.const 0) (local.get 0x22f)) (i64.store offset=0x230 align=1 (i32.const 0) (local.get 0x230)) (i64.store offset=0x231 align=1 (i32.const 0) (local.get 0x231)) (i64.store offset=0x232 align=1 (i32.const 0) (local.get 0x232)) (i64.store offset=0x233 align=1 (i32.const 0) (local.get 0x233)) (i64.store offset=0x234 align=1 (i32.const 0) (local.get 0x234)) (i64.store offset=0x235 align=1 (i32.const 0) (local.get 0x235)) (i64.store offset=0x236 align=1 (i32.const 0) (local.get 0x236)) (i64.store offset=0x237 align=1 (i32.const 0) (local.get 0x237)) (i64.store offset=0x238 align=1 (i32.const 0) (local.get 0x238)) (i64.store offset=0x239 align=1 (i32.const 0) (local.get 0x239)) (i64.store offset=0x23a align=1 (i32.const 0) (local.get 0x23a)) (i64.store offset=0x23b align=1 (i32.const 0) (local.get 0x23b)) (i64.store offset=0x23c align=1 (i32.const 0) (local.get 0x23c)) (i64.store offset=0x23d align=1 (i32.const 0) (local.get 0x23d)) (i64.store offset=0x23e align=1 (i32.const 0) (local.get 0x23e)) (i64.store offset=0x23f align=1 (i32.const 0) (local.get 0x23f)) (i64.store offset=0x240 align=1 (i32.const 0) (local.get 0x240)) (i64.store offset=0x241 align=1 (i32.const 0) (local.get 0x241)) (i64.store offset=0x242 align=1 (i32.const 0) (local.get 0x242)) (i64.store offset=0x243 align=1 (i32.const 0) (local.get 0x243)) (i64.store offset=0x244 align=1 (i32.const 0) (local.get 0x244)) (i64.store offset=0x245 align=1 (i32.const 0) (local.get 0x245)) (i64.store offset=0x246 align=1 (i32.const 0) (local.get 0x246)) (i64.store offset=0x247 align=1 (i32.const 0) (local.get 0x247)) (i64.store offset=0x248 align=1 (i32.const 0) (local.get 0x248)) (i64.store offset=0x249 align=1 (i32.const 0) (local.get 0x249)) (i64.store offset=0x24a align=1 (i32.const 0) (local.get 0x24a)) (i64.store offset=0x24b align=1 (i32.const 0) (local.get 0x24b)) (i64.store offset=0x24c align=1 (i32.const 0) (local.get 0x24c)) (i64.store offset=0x24d align=1 (i32.const 0) (local.get 0x24d)) (i64.store offset=0x24e align=1 (i32.const 0) (local.get 0x24e)) (i64.store offset=0x24f align=1 (i32.const 0) (local.get 0x24f)) (i64.store offset=0x250 align=1 (i32.const 0) (local.get 0x250)) (i64.store offset=0x251 align=1 (i32.const 0) (local.get 0x251)) (i64.store offset=0x252 align=1 (i32.const 0) (local.get 0x252)) (i64.store offset=0x253 align=1 (i32.const 0) (local.get 0x253)) (i64.store offset=0x254 align=1 (i32.const 0) (local.get 0x254)) (i64.store offset=0x255 align=1 (i32.const 0) (local.get 0x255)) (i64.store offset=0x256 align=1 (i32.const 0) (local.get 0x256)) (i64.store offset=0x257 align=1 (i32.const 0) (local.get 0x257)) (i64.store offset=0x258 align=1 (i32.const 0) (local.get 0x258)) (i64.store offset=0x259 align=1 (i32.const 0) (local.get 0x259)) (i64.store offset=0x25a align=1 (i32.const 0) (local.get 0x25a)) (i64.store offset=0x25b align=1 (i32.const 0) (local.get 0x25b)) (i64.store offset=0x25c align=1 (i32.const 0) (local.get 0x25c)) (i64.store offset=0x25d align=1 (i32.const 0) (local.get 0x25d)) (i64.store offset=0x25e align=1 (i32.const 0) (local.get 0x25e)) (i64.store offset=0x25f align=1 (i32.const 0) (local.get 0x25f)) (i64.store offset=0x260 align=1 (i32.const 0) (local.get 0x260)) (i64.store offset=0x261 align=1 (i32.const 0) (local.get 0x261)) (i64.store offset=0x262 align=1 (i32.const 0) (local.get 0x262)) (i64.store offset=0x263 align=1 (i32.const 0) (local.get 0x263)) (i64.store offset=0x264 align=1 (i32.const 0) (local.get 0x264)) (i64.store offset=0x265 align=1 (i32.const 0) (local.get 0x265)) (i64.store offset=0x266 align=1 (i32.const 0) (local.get 0x266)) (i64.store offset=0x267 align=1 (i32.const 0) (local.get 0x267)) (i64.store offset=0x268 align=1 (i32.const 0) (local.get 0x268)) (i64.store offset=0x269 align=1 (i32.const 0) (local.get 0x269)) (i64.store offset=0x26a align=1 (i32.const 0) (local.get 0x26a)) (i64.store offset=0x26b align=1 (i32.const 0) (local.get 0x26b)) (i64.store offset=0x26c align=1 (i32.const 0) (local.get 0x26c)) (i64.store offset=0x26d align=1 (i32.const 0) (local.get 0x26d)) (i64.store offset=0x26e align=1 (i32.const 0) (local.get 0x26e)) (i64.store offset=0x26f align=1 (i32.const 0) (local.get 0x26f)) (i64.store offset=0x270 align=1 (i32.const 0) (local.get 0x270)) (i64.store offset=0x271 align=1 (i32.const 0) (local.get 0x271)) (i64.store offset=0x272 align=1 (i32.const 0) (local.get 0x272)) (i64.store offset=0x273 align=1 (i32.const 0) (local.get 0x273)) (i64.store offset=0x274 align=1 (i32.const 0) (local.get 0x274)) (i64.store offset=0x275 align=1 (i32.const 0) (local.get 0x275)) (i64.store offset=0x276 align=1 (i32.const 0) (local.get 0x276)) (i64.store offset=0x277 align=1 (i32.const 0) (local.get 0x277)) (i64.store offset=0x278 align=1 (i32.const 0) (local.get 0x278)) (i64.store offset=0x279 align=1 (i32.const 0) (local.get 0x279)) (i64.store offset=0x27a align=1 (i32.const 0) (local.get 0x27a)) (i64.store offset=0x27b align=1 (i32.const 0) (local.get 0x27b)) (i64.store offset=0x27c align=1 (i32.const 0) (local.get 0x27c)) (i64.store offset=0x27d align=1 (i32.const 0) (local.get 0x27d)) (i64.store offset=0x27e align=1 (i32.const 0) (local.get 0x27e)) (i64.store offset=0x27f align=1 (i32.const 0) (local.get 0x27f)) (i64.store offset=0x280 align=1 (i32.const 0) (local.get 0x280)) (i64.store offset=0x281 align=1 (i32.const 0) (local.get 0x281)) (i64.store offset=0x282 align=1 (i32.const 0) (local.get 0x282)) (i64.store offset=0x283 align=1 (i32.const 0) (local.get 0x283)) (i64.store offset=0x284 align=1 (i32.const 0) (local.get 0x284)) (i64.store offset=0x285 align=1 (i32.const 0) (local.get 0x285)) (i64.store offset=0x286 align=1 (i32.const 0) (local.get 0x286)) (i64.store offset=0x287 align=1 (i32.const 0) (local.get 0x287)) (i64.store offset=0x288 align=1 (i32.const 0) (local.get 0x288)) (i64.store offset=0x289 align=1 (i32.const 0) (local.get 0x289)) (i64.store offset=0x28a align=1 (i32.const 0) (local.get 0x28a)) (i64.store offset=0x28b align=1 (i32.const 0) (local.get 0x28b)) (i64.store offset=0x28c align=1 (i32.const 0) (local.get 0x28c)) (i64.store offset=0x28d align=1 (i32.const 0) (local.get 0x28d)) (i64.store offset=0x28e align=1 (i32.const 0) (local.get 0x28e)) (i64.store offset=0x28f align=1 (i32.const 0) (local.get 0x28f)) (i64.store offset=0x290 align=1 (i32.const 0) (local.get 0x290)) (i64.store offset=0x291 align=1 (i32.const 0) (local.get 0x291)) (i64.store offset=0x292 align=1 (i32.const 0) (local.get 0x292)) (i64.store offset=0x293 align=1 (i32.const 0) (local.get 0x293)) (i64.store offset=0x294 align=1 (i32.const 0) (local.get 0x294)) (i64.store offset=0x295 align=1 (i32.const 0) (local.get 0x295)) (i64.store offset=0x296 align=1 (i32.const 0) (local.get 0x296)) (i64.store offset=0x297 align=1 (i32.const 0) (local.get 0x297)) (i64.store offset=0x298 align=1 (i32.const 0) (local.get 0x298)) (i64.store offset=0x299 align=1 (i32.const 0) (local.get 0x299)) (i64.store offset=0x29a align=1 (i32.const 0) (local.get 0x29a)) (i64.store offset=0x29b align=1 (i32.const 0) (local.get 0x29b)) (i64.store offset=0x29c align=1 (i32.const 0) (local.get 0x29c)) (i64.store offset=0x29d align=1 (i32.const 0) (local.get 0x29d)) (i64.store offset=0x29e align=1 (i32.const 0) (local.get 0x29e)) (i64.store offset=0x29f align=1 (i32.const 0) (local.get 0x29f)) (i64.store offset=0x2a0 align=1 (i32.const 0) (local.get 0x2a0)) (i64.store offset=0x2a1 align=1 (i32.const 0) (local.get 0x2a1)) (i64.store offset=0x2a2 align=1 (i32.const 0) (local.get 0x2a2)) (i64.store offset=0x2a3 align=1 (i32.const 0) (local.get 0x2a3)) (i64.store offset=0x2a4 align=1 (i32.const 0) (local.get 0x2a4)) (i64.store offset=0x2a5 align=1 (i32.const 0) (local.get 0x2a5)) (i64.store offset=0x2a6 align=1 (i32.const 0) (local.get 0x2a6)) (i64.store offset=0x2a7 align=1 (i32.const 0) (local.get 0x2a7)) (i64.store offset=0x2a8 align=1 (i32.const 0) (local.get 0x2a8)) (i64.store offset=0x2a9 align=1 (i32.const 0) (local.get 0x2a9)) (i64.store offset=0x2aa align=1 (i32.const 0) (local.get 0x2aa)) (i64.store offset=0x2ab align=1 (i32.const 0) (local.get 0x2ab)) (i64.store offset=0x2ac align=1 (i32.const 0) (local.get 0x2ac)) (i64.store offset=0x2ad align=1 (i32.const 0) (local.get 0x2ad)) (i64.store offset=0x2ae align=1 (i32.const 0) (local.get 0x2ae)) (i64.store offset=0x2af align=1 (i32.const 0) (local.get 0x2af)) (i64.store offset=0x2b0 align=1 (i32.const 0) (local.get 0x2b0)) (i64.store offset=0x2b1 align=1 (i32.const 0) (local.get 0x2b1)) (i64.store offset=0x2b2 align=1 (i32.const 0) (local.get 0x2b2)) (i64.store offset=0x2b3 align=1 (i32.const 0) (local.get 0x2b3)) (i64.store offset=0x2b4 align=1 (i32.const 0) (local.get 0x2b4)) (i64.store offset=0x2b5 align=1 (i32.const 0) (local.get 0x2b5)) (i64.store offset=0x2b6 align=1 (i32.const 0) (local.get 0x2b6)) (i64.store offset=0x2b7 align=1 (i32.const 0) (local.get 0x2b7)) (i64.store offset=0x2b8 align=1 (i32.const 0) (local.get 0x2b8)) (i64.store offset=0x2b9 align=1 (i32.const 0) (local.get 0x2b9)) (i64.store offset=0x2ba align=1 (i32.const 0) (local.get 0x2ba)) (i64.store offset=0x2bb align=1 (i32.const 0) (local.get 0x2bb)) (i64.store offset=0x2bc align=1 (i32.const 0) (local.get 0x2bc)) (i64.store offset=0x2bd align=1 (i32.const 0) (local.get 0x2bd)) (i64.store offset=0x2be align=1 (i32.const 0) (local.get 0x2be)) (i64.store offset=0x2bf align=1 (i32.const 0) (local.get 0x2bf)) (i64.store offset=0x2c0 align=1 (i32.const 0) (local.get 0x2c0)) (i64.store offset=0x2c1 align=1 (i32.const 0) (local.get 0x2c1)) (i64.store offset=0x2c2 align=1 (i32.const 0) (local.get 0x2c2)) (i64.store offset=0x2c3 align=1 (i32.const 0) (local.get 0x2c3)) (i64.store offset=0x2c4 align=1 (i32.const 0) (local.get 0x2c4)) (i64.store offset=0x2c5 align=1 (i32.const 0) (local.get 0x2c5)) (i64.store offset=0x2c6 align=1 (i32.const 0) (local.get 0x2c6)) (i64.store offset=0x2c7 align=1 (i32.const 0) (local.get 0x2c7)) (i64.store offset=0x2c8 align=1 (i32.const 0) (local.get 0x2c8)) (i64.store offset=0x2c9 align=1 (i32.const 0) (local.get 0x2c9)) (i64.store offset=0x2ca align=1 (i32.const 0) (local.get 0x2ca)) (i64.store offset=0x2cb align=1 (i32.const 0) (local.get 0x2cb)) (i64.store offset=0x2cc align=1 (i32.const 0) (local.get 0x2cc)) (i64.store offset=0x2cd align=1 (i32.const 0) (local.get 0x2cd)) (i64.store offset=0x2ce align=1 (i32.const 0) (local.get 0x2ce)) (i64.store offset=0x2cf align=1 (i32.const 0) (local.get 0x2cf)) (i64.store offset=0x2d0 align=1 (i32.const 0) (local.get 0x2d0)) (i64.store offset=0x2d1 align=1 (i32.const 0) (local.get 0x2d1)) (i64.store offset=0x2d2 align=1 (i32.const 0) (local.get 0x2d2)) (i64.store offset=0x2d3 align=1 (i32.const 0) (local.get 0x2d3)) (i64.store offset=0x2d4 align=1 (i32.const 0) (local.get 0x2d4)) (i64.store offset=0x2d5 align=1 (i32.const 0) (local.get 0x2d5)) (i64.store offset=0x2d6 align=1 (i32.const 0) (local.get 0x2d6)) (i64.store offset=0x2d7 align=1 (i32.const 0) (local.get 0x2d7)) (i64.store offset=0x2d8 align=1 (i32.const 0) (local.get 0x2d8)) (i64.store offset=0x2d9 align=1 (i32.const 0) (local.get 0x2d9)) (i64.store offset=0x2da align=1 (i32.const 0) (local.get 0x2da)) (i64.store offset=0x2db align=1 (i32.const 0) (local.get 0x2db)) (i64.store offset=0x2dc align=1 (i32.const 0) (local.get 0x2dc)) (i64.store offset=0x2dd align=1 (i32.const 0) (local.get 0x2dd)) (i64.store offset=0x2de align=1 (i32.const 0) (local.get 0x2de)) (i64.store offset=0x2df align=1 (i32.const 0) (local.get 0x2df)) (i64.store offset=0x2e0 align=1 (i32.const 0) (local.get 0x2e0)) (i64.store offset=0x2e1 align=1 (i32.const 0) (local.get 0x2e1)) (i64.store offset=0x2e2 align=1 (i32.const 0) (local.get 0x2e2)) (i64.store offset=0x2e3 align=1 (i32.const 0) (local.get 0x2e3)) (i64.store offset=0x2e4 align=1 (i32.const 0) (local.get 0x2e4)) (i64.store offset=0x2e5 align=1 (i32.const 0) (local.get 0x2e5)) (i64.store offset=0x2e6 align=1 (i32.const 0) (local.get 0x2e6)) (i64.store offset=0x2e7 align=1 (i32.const 0) (local.get 0x2e7)) (i64.store offset=0x2e8 align=1 (i32.const 0) (local.get 0x2e8)) (i64.store offset=0x2e9 align=1 (i32.const 0) (local.get 0x2e9)) (i64.store offset=0x2ea align=1 (i32.const 0) (local.get 0x2ea)) (i64.store offset=0x2eb align=1 (i32.const 0) (local.get 0x2eb)) (i64.store offset=0x2ec align=1 (i32.const 0) (local.get 0x2ec)) (i64.store offset=0x2ed align=1 (i32.const 0) (local.get 0x2ed)) (i64.store offset=0x2ee align=1 (i32.const 0) (local.get 0x2ee)) (i64.store offset=0x2ef align=1 (i32.const 0) (local.get 0x2ef)) (i64.store offset=0x2f0 align=1 (i32.const 0) (local.get 0x2f0)) (i64.store offset=0x2f1 align=1 (i32.const 0) (local.get 0x2f1)) (i64.store offset=0x2f2 align=1 (i32.const 0) (local.get 0x2f2)) (i64.store offset=0x2f3 align=1 (i32.const 0) (local.get 0x2f3)) (i64.store offset=0x2f4 align=1 (i32.const 0) (local.get 0x2f4)) (i64.store offset=0x2f5 align=1 (i32.const 0) (local.get 0x2f5)) (i64.store offset=0x2f6 align=1 (i32.const 0) (local.get 0x2f6)) (i64.store offset=0x2f7 align=1 (i32.const 0) (local.get 0x2f7)) (i64.store offset=0x2f8 align=1 (i32.const 0) (local.get 0x2f8)) (i64.store offset=0x2f9 align=1 (i32.const 0) (local.get 0x2f9)) (i64.store offset=0x2fa align=1 (i32.const 0) (local.get 0x2fa)) (i64.store offset=0x2fb align=1 (i32.const 0) (local.get 0x2fb)) (i64.store offset=0x2fc align=1 (i32.const 0) (local.get 0x2fc)) (i64.store offset=0x2fd align=1 (i32.const 0) (local.get 0x2fd)) (i64.store offset=0x2fe align=1 (i32.const 0) (local.get 0x2fe)) (i64.store offset=0x2ff align=1 (i32.const 0) (local.get 0x2ff)) (i64.store offset=0x300 align=1 (i32.const 0) (local.get 0x300)) (i64.store offset=0x301 align=1 (i32.const 0) (local.get 0x301)) (i64.store offset=0x302 align=1 (i32.const 0) (local.get 0x302)) (i64.store offset=0x303 align=1 (i32.const 0) (local.get 0x303)) (i64.store offset=0x304 align=1 (i32.const 0) (local.get 0x304)) (i64.store offset=0x305 align=1 (i32.const 0) (local.get 0x305)) (i64.store offset=0x306 align=1 (i32.const 0) (local.get 0x306)) (i64.store offset=0x307 align=1 (i32.const 0) (local.get 0x307)) (i64.store offset=0x308 align=1 (i32.const 0) (local.get 0x308)) (i64.store offset=0x309 align=1 (i32.const 0) (local.get 0x309)) (i64.store offset=0x30a align=1 (i32.const 0) (local.get 0x30a)) (i64.store offset=0x30b align=1 (i32.const 0) (local.get 0x30b)) (i64.store offset=0x30c align=1 (i32.const 0) (local.get 0x30c)) (i64.store offset=0x30d align=1 (i32.const 0) (local.get 0x30d)) (i64.store offset=0x30e align=1 (i32.const 0) (local.get 0x30e)) (i64.store offset=0x30f align=1 (i32.const 0) (local.get 0x30f)) (i64.store offset=0x310 align=1 (i32.const 0) (local.get 0x310)) (i64.store offset=0x311 align=1 (i32.const 0) (local.get 0x311)) (i64.store offset=0x312 align=1 (i32.const 0) (local.get 0x312)) (i64.store offset=0x313 align=1 (i32.const 0) (local.get 0x313)) (i64.store offset=0x314 align=1 (i32.const 0) (local.get 0x314)) (i64.store offset=0x315 align=1 (i32.const 0) (local.get 0x315)) (i64.store offset=0x316 align=1 (i32.const 0) (local.get 0x316)) (i64.store offset=0x317 align=1 (i32.const 0) (local.get 0x317)) (i64.store offset=0x318 align=1 (i32.const 0) (local.get 0x318)) (i64.store offset=0x319 align=1 (i32.const 0) (local.get 0x319)) (i64.store offset=0x31a align=1 (i32.const 0) (local.get 0x31a)) (i64.store offset=0x31b align=1 (i32.const 0) (local.get 0x31b)) (i64.store offset=0x31c align=1 (i32.const 0) (local.get 0x31c)) (i64.store offset=0x31d align=1 (i32.const 0) (local.get 0x31d)) (i64.store offset=0x31e align=1 (i32.const 0) (local.get 0x31e)) (i64.store offset=0x31f align=1 (i32.const 0) (local.get 0x31f)) (i64.store offset=0x320 align=1 (i32.const 0) (local.get 0x320)) (i64.store offset=0x321 align=1 (i32.const 0) (local.get 0x321)) (i64.store offset=0x322 align=1 (i32.const 0) (local.get 0x322)) (i64.store offset=0x323 align=1 (i32.const 0) (local.get 0x323)) (i64.store offset=0x324 align=1 (i32.const 0) (local.get 0x324)) (i64.store offset=0x325 align=1 (i32.const 0) (local.get 0x325)) (i64.store offset=0x326 align=1 (i32.const 0) (local.get 0x326)) (i64.store offset=0x327 align=1 (i32.const 0) (local.get 0x327)) (i64.store offset=0x328 align=1 (i32.const 0) (local.get 0x328)) (i64.store offset=0x329 align=1 (i32.const 0) (local.get 0x329)) (i64.store offset=0x32a align=1 (i32.const 0) (local.get 0x32a)) (i64.store offset=0x32b align=1 (i32.const 0) (local.get 0x32b)) (i64.store offset=0x32c align=1 (i32.const 0) (local.get 0x32c)) (i64.store offset=0x32d align=1 (i32.const 0) (local.get 0x32d)) (i64.store offset=0x32e align=1 (i32.const 0) (local.get 0x32e)) (i64.store offset=0x32f align=1 (i32.const 0) (local.get 0x32f)) (i64.store offset=0x330 align=1 (i32.const 0) (local.get 0x330)) (i64.store offset=0x331 align=1 (i32.const 0) (local.get 0x331)) (i64.store offset=0x332 align=1 (i32.const 0) (local.get 0x332)) (i64.store offset=0x333 align=1 (i32.const 0) (local.get 0x333)) (i64.store offset=0x334 align=1 (i32.const 0) (local.get 0x334)) (i64.store offset=0x335 align=1 (i32.const 0) (local.get 0x335)) (i64.store offset=0x336 align=1 (i32.const 0) (local.get 0x336)) (i64.store offset=0x337 align=1 (i32.const 0) (local.get 0x337)) (i64.store offset=0x338 align=1 (i32.const 0) (local.get 0x338)) (i64.store offset=0x339 align=1 (i32.const 0) (local.get 0x339)) (i64.store offset=0x33a align=1 (i32.const 0) (local.get 0x33a)) (i64.store offset=0x33b align=1 (i32.const 0) (local.get 0x33b)) (i64.store offset=0x33c align=1 (i32.const 0) (local.get 0x33c)) (i64.store offset=0x33d align=1 (i32.const 0) (local.get 0x33d)) (i64.store offset=0x33e align=1 (i32.const 0) (local.get 0x33e)) (i64.store offset=0x33f align=1 (i32.const 0) (local.get 0x33f)) (i64.store offset=0x340 align=1 (i32.const 0) (local.get 0x340)) (i64.store offset=0x341 align=1 (i32.const 0) (local.get 0x341)) (i64.store offset=0x342 align=1 (i32.const 0) (local.get 0x342)) (i64.store offset=0x343 align=1 (i32.const 0) (local.get 0x343)) (i64.store offset=0x344 align=1 (i32.const 0) (local.get 0x344)) (i64.store offset=0x345 align=1 (i32.const 0) (local.get 0x345)) (i64.store offset=0x346 align=1 (i32.const 0) (local.get 0x346)) (i64.store offset=0x347 align=1 (i32.const 0) (local.get 0x347)) (i64.store offset=0x348 align=1 (i32.const 0) (local.get 0x348)) (i64.store offset=0x349 align=1 (i32.const 0) (local.get 0x349)) (i64.store offset=0x34a align=1 (i32.const 0) (local.get 0x34a)) (i64.store offset=0x34b align=1 (i32.const 0) (local.get 0x34b)) (i64.store offset=0x34c align=1 (i32.const 0) (local.get 0x34c)) (i64.store offset=0x34d align=1 (i32.const 0) (local.get 0x34d)) (i64.store offset=0x34e align=1 (i32.const 0) (local.get 0x34e)) (i64.store offset=0x34f align=1 (i32.const 0) (local.get 0x34f)) (i64.store offset=0x350 align=1 (i32.const 0) (local.get 0x350)) (i64.store offset=0x351 align=1 (i32.const 0) (local.get 0x351)) (i64.store offset=0x352 align=1 (i32.const 0) (local.get 0x352)) (i64.store offset=0x353 align=1 (i32.const 0) (local.get 0x353)) (i64.store offset=0x354 align=1 (i32.const 0) (local.get 0x354)) (i64.store offset=0x355 align=1 (i32.const 0) (local.get 0x355)) (i64.store offset=0x356 align=1 (i32.const 0) (local.get 0x356)) (i64.store offset=0x357 align=1 (i32.const 0) (local.get 0x357)) (i64.store offset=0x358 align=1 (i32.const 0) (local.get 0x358)) (i64.store offset=0x359 align=1 (i32.const 0) (local.get 0x359)) (i64.store offset=0x35a align=1 (i32.const 0) (local.get 0x35a)) (i64.store offset=0x35b align=1 (i32.const 0) (local.get 0x35b)) (i64.store offset=0x35c align=1 (i32.const 0) (local.get 0x35c)) (i64.store offset=0x35d align=1 (i32.const 0) (local.get 0x35d)) (i64.store offset=0x35e align=1 (i32.const 0) (local.get 0x35e)) (i64.store offset=0x35f align=1 (i32.const 0) (local.get 0x35f)) (i64.store offset=0x360 align=1 (i32.const 0) (local.get 0x360)) (i64.store offset=0x361 align=1 (i32.const 0) (local.get 0x361)) (i64.store offset=0x362 align=1 (i32.const 0) (local.get 0x362)) (i64.store offset=0x363 align=1 (i32.const 0) (local.get 0x363)) (i64.store offset=0x364 align=1 (i32.const 0) (local.get 0x364)) (i64.store offset=0x365 align=1 (i32.const 0) (local.get 0x365)) (i64.store offset=0x366 align=1 (i32.const 0) (local.get 0x366)) (i64.store offset=0x367 align=1 (i32.const 0) (local.get 0x367)) (i64.store offset=0x368 align=1 (i32.const 0) (local.get 0x368)) (i64.store offset=0x369 align=1 (i32.const 0) (local.get 0x369)) (i64.store offset=0x36a align=1 (i32.const 0) (local.get 0x36a)) (i64.store offset=0x36b align=1 (i32.const 0) (local.get 0x36b)) (i64.store offset=0x36c align=1 (i32.const 0) (local.get 0x36c)) (i64.store offset=0x36d align=1 (i32.const 0) (local.get 0x36d)) (i64.store offset=0x36e align=1 (i32.const 0) (local.get 0x36e)) (i64.store offset=0x36f align=1 (i32.const 0) (local.get 0x36f)) (i64.store offset=0x370 align=1 (i32.const 0) (local.get 0x370)) (i64.store offset=0x371 align=1 (i32.const 0) (local.get 0x371)) (i64.store offset=0x372 align=1 (i32.const 0) (local.get 0x372)) (i64.store offset=0x373 align=1 (i32.const 0) (local.get 0x373)) (i64.store offset=0x374 align=1 (i32.const 0) (local.get 0x374)) (i64.store offset=0x375 align=1 (i32.const 0) (local.get 0x375)) (i64.store offset=0x376 align=1 (i32.const 0) (local.get 0x376)) (i64.store offset=0x377 align=1 (i32.const 0) (local.get 0x377)) (i64.store offset=0x378 align=1 (i32.const 0) (local.get 0x378)) (i64.store offset=0x379 align=1 (i32.const 0) (local.get 0x379)) (i64.store offset=0x37a align=1 (i32.const 0) (local.get 0x37a)) (i64.store offset=0x37b align=1 (i32.const 0) (local.get 0x37b)) (i64.store offset=0x37c align=1 (i32.const 0) (local.get 0x37c)) (i64.store offset=0x37d align=1 (i32.const 0) (local.get 0x37d)) (i64.store offset=0x37e align=1 (i32.const 0) (local.get 0x37e)) (i64.store offset=0x37f align=1 (i32.const 0) (local.get 0x37f)) (i64.store offset=0x380 align=1 (i32.const 0) (local.get 0x380)) (i64.store offset=0x381 align=1 (i32.const 0) (local.get 0x381)) (i64.store offset=0x382 align=1 (i32.const 0) (local.get 0x382)) (i64.store offset=0x383 align=1 (i32.const 0) (local.get 0x383)) (i64.store offset=0x384 align=1 (i32.const 0) (local.get 0x384)) (i64.store offset=0x385 align=1 (i32.const 0) (local.get 0x385)) (i64.store offset=0x386 align=1 (i32.const 0) (local.get 0x386)) (i64.store offset=0x387 align=1 (i32.const 0) (local.get 0x387)) (i64.store offset=0x388 align=1 (i32.const 0) (local.get 0x388)) (i64.store offset=0x389 align=1 (i32.const 0) (local.get 0x389)) (i64.store offset=0x38a align=1 (i32.const 0) (local.get 0x38a)) (i64.store offset=0x38b align=1 (i32.const 0) (local.get 0x38b)) (i64.store offset=0x38c align=1 (i32.const 0) (local.get 0x38c)) (i64.store offset=0x38d align=1 (i32.const 0) (local.get 0x38d)) (i64.store offset=0x38e align=1 (i32.const 0) (local.get 0x38e)) (i64.store offset=0x38f align=1 (i32.const 0) (local.get 0x38f)) (i64.store offset=0x390 align=1 (i32.const 0) (local.get 0x390)) (i64.store offset=0x391 align=1 (i32.const 0) (local.get 0x391)) (i64.store offset=0x392 align=1 (i32.const 0) (local.get 0x392)) (i64.store offset=0x393 align=1 (i32.const 0) (local.get 0x393)) (i64.store offset=0x394 align=1 (i32.const 0) (local.get 0x394)) (i64.store offset=0x395 align=1 (i32.const 0) (local.get 0x395)) (i64.store offset=0x396 align=1 (i32.const 0) (local.get 0x396)) (i64.store offset=0x397 align=1 (i32.const 0) (local.get 0x397)) (i64.store offset=0x398 align=1 (i32.const 0) (local.get 0x398)) (i64.store offset=0x399 align=1 (i32.const 0) (local.get 0x399)) (i64.store offset=0x39a align=1 (i32.const 0) (local.get 0x39a)) (i64.store offset=0x39b align=1 (i32.const 0) (local.get 0x39b)) (i64.store offset=0x39c align=1 (i32.const 0) (local.get 0x39c)) (i64.store offset=0x39d align=1 (i32.const 0) (local.get 0x39d)) (i64.store offset=0x39e align=1 (i32.const 0) (local.get 0x39e)) (i64.store offset=0x39f align=1 (i32.const 0) (local.get 0x39f)) (i64.store offset=0x3a0 align=1 (i32.const 0) (local.get 0x3a0)) (i64.store offset=0x3a1 align=1 (i32.const 0) (local.get 0x3a1)) (i64.store offset=0x3a2 align=1 (i32.const 0) (local.get 0x3a2)) (i64.store offset=0x3a3 align=1 (i32.const 0) (local.get 0x3a3)) (i64.store offset=0x3a4 align=1 (i32.const 0) (local.get 0x3a4)) (i64.store offset=0x3a5 align=1 (i32.const 0) (local.get 0x3a5)) (i64.store offset=0x3a6 align=1 (i32.const 0) (local.get 0x3a6)) (i64.store offset=0x3a7 align=1 (i32.const 0) (local.get 0x3a7)) (i64.store offset=0x3a8 align=1 (i32.const 0) (local.get 0x3a8)) (i64.store offset=0x3a9 align=1 (i32.const 0) (local.get 0x3a9)) (i64.store offset=0x3aa align=1 (i32.const 0) (local.get 0x3aa)) (i64.store offset=0x3ab align=1 (i32.const 0) (local.get 0x3ab)) (i64.store offset=0x3ac align=1 (i32.const 0) (local.get 0x3ac)) (i64.store offset=0x3ad align=1 (i32.const 0) (local.get 0x3ad)) (i64.store offset=0x3ae align=1 (i32.const 0) (local.get 0x3ae)) (i64.store offset=0x3af align=1 (i32.const 0) (local.get 0x3af)) (i64.store offset=0x3b0 align=1 (i32.const 0) (local.get 0x3b0)) (i64.store offset=0x3b1 align=1 (i32.const 0) (local.get 0x3b1)) (i64.store offset=0x3b2 align=1 (i32.const 0) (local.get 0x3b2)) (i64.store offset=0x3b3 align=1 (i32.const 0) (local.get 0x3b3)) (i64.store offset=0x3b4 align=1 (i32.const 0) (local.get 0x3b4)) (i64.store offset=0x3b5 align=1 (i32.const 0) (local.get 0x3b5)) (i64.store offset=0x3b6 align=1 (i32.const 0) (local.get 0x3b6)) (i64.store offset=0x3b7 align=1 (i32.const 0) (local.get 0x3b7)) (i64.store offset=0x3b8 align=1 (i32.const 0) (local.get 0x3b8)) (i64.store offset=0x3b9 align=1 (i32.const 0) (local.get 0x3b9)) (i64.store offset=0x3ba align=1 (i32.const 0) (local.get 0x3ba)) (i64.store offset=0x3bb align=1 (i32.const 0) (local.get 0x3bb)) (i64.store offset=0x3bc align=1 (i32.const 0) (local.get 0x3bc)) (i64.store offset=0x3bd align=1 (i32.const 0) (local.get 0x3bd)) (i64.store offset=0x3be align=1 (i32.const 0) (local.get 0x3be)) (i64.store offset=0x3bf align=1 (i32.const 0) (local.get 0x3bf)) (i64.store offset=0x3c0 align=1 (i32.const 0) (local.get 0x3c0)) (i64.store offset=0x3c1 align=1 (i32.const 0) (local.get 0x3c1)) (i64.store offset=0x3c2 align=1 (i32.const 0) (local.get 0x3c2)) (i64.store offset=0x3c3 align=1 (i32.const 0) (local.get 0x3c3)) (i64.store offset=0x3c4 align=1 (i32.const 0) (local.get 0x3c4)) (i64.store offset=0x3c5 align=1 (i32.const 0) (local.get 0x3c5)) (i64.store offset=0x3c6 align=1 (i32.const 0) (local.get 0x3c6)) (i64.store offset=0x3c7 align=1 (i32.const 0) (local.get 0x3c7)) (i64.store offset=0x3c8 align=1 (i32.const 0) (local.get 0x3c8)) (i64.store offset=0x3c9 align=1 (i32.const 0) (local.get 0x3c9)) (i64.store offset=0x3ca align=1 (i32.const 0) (local.get 0x3ca)) (i64.store offset=0x3cb align=1 (i32.const 0) (local.get 0x3cb)) (i64.store offset=0x3cc align=1 (i32.const 0) (local.get 0x3cc)) (i64.store offset=0x3cd align=1 (i32.const 0) (local.get 0x3cd)) (i64.store offset=0x3ce align=1 (i32.const 0) (local.get 0x3ce)) (i64.store offset=0x3cf align=1 (i32.const 0) (local.get 0x3cf)) (i64.store offset=0x3d0 align=1 (i32.const 0) (local.get 0x3d0)) (i64.store offset=0x3d1 align=1 (i32.const 0) (local.get 0x3d1)) (i64.store offset=0x3d2 align=1 (i32.const 0) (local.get 0x3d2)) (i64.store offset=0x3d3 align=1 (i32.const 0) (local.get 0x3d3)) (i64.store offset=0x3d4 align=1 (i32.const 0) (local.get 0x3d4)) (i64.store offset=0x3d5 align=1 (i32.const 0) (local.get 0x3d5)) (i64.store offset=0x3d6 align=1 (i32.const 0) (local.get 0x3d6)) (i64.store offset=0x3d7 align=1 (i32.const 0) (local.get 0x3d7)) (i64.store offset=0x3d8 align=1 (i32.const 0) (local.get 0x3d8)) (i64.store offset=0x3d9 align=1 (i32.const 0) (local.get 0x3d9)) (i64.store offset=0x3da align=1 (i32.const 0) (local.get 0x3da)) (i64.store offset=0x3db align=1 (i32.const 0) (local.get 0x3db)) (i64.store offset=0x3dc align=1 (i32.const 0) (local.get 0x3dc)) (i64.store offset=0x3dd align=1 (i32.const 0) (local.get 0x3dd)) (i64.store offset=0x3de align=1 (i32.const 0) (local.get 0x3de)) (i64.store offset=0x3df align=1 (i32.const 0) (local.get 0x3df)) (i64.store offset=0x3e0 align=1 (i32.const 0) (local.get 0x3e0)) (i64.store offset=0x3e1 align=1 (i32.const 0) (local.get 0x3e1)) (i64.store offset=0x3e2 align=1 (i32.const 0) (local.get 0x3e2)) (i64.store offset=0x3e3 align=1 (i32.const 0) (local.get 0x3e3)) (i64.store offset=0x3e4 align=1 (i32.const 0) (local.get 0x3e4)) (i64.store offset=0x3e5 align=1 (i32.const 0) (local.get 0x3e5)) (i64.store offset=0x3e6 align=1 (i32.const 0) (local.get 0x3e6)) (i64.store offset=0x3e7 align=1 (i32.const 0) (local.get 0x3e7)) (i64.store offset=0x3e8 align=1 (i32.const 0) (local.get 0x3e8)) (i64.store offset=0x3e9 align=1 (i32.const 0) (local.get 0x3e9)) (i64.store offset=0x3ea align=1 (i32.const 0) (local.get 0x3ea)) (i64.store offset=0x3eb align=1 (i32.const 0) (local.get 0x3eb)) (i64.store offset=0x3ec align=1 (i32.const 0) (local.get 0x3ec)) (i64.store offset=0x3ed align=1 (i32.const 0) (local.get 0x3ed)) (i64.store offset=0x3ee align=1 (i32.const 0) (local.get 0x3ee)) (i64.store offset=0x3ef align=1 (i32.const 0) (local.get 0x3ef)) (i64.store offset=0x3f0 align=1 (i32.const 0) (local.get 0x3f0)) (i64.store offset=0x3f1 align=1 (i32.const 0) (local.get 0x3f1)) (i64.store offset=0x3f2 align=1 (i32.const 0) (local.get 0x3f2)) (i64.store offset=0x3f3 align=1 (i32.const 0) (local.get 0x3f3)) (i64.store offset=0x3f4 align=1 (i32.const 0) (local.get 0x3f4)) (i64.store offset=0x3f5 align=1 (i32.const 0) (local.get 0x3f5)) (i64.store offset=0x3f6 align=1 (i32.const 0) (local.get 0x3f6)) (i64.store offset=0x3f7 align=1 (i32.const 0) (local.get 0x3f7)) (i64.store offset=0x3f8 align=1 (i32.const 0) (local.get 0x3f8)) (i64.store offset=0x3f9 align=1 (i32.const 0) (local.get 0x3f9)) (i64.store offset=0x3fa align=1 (i32.const 0) (local.get 0x3fa)) (i64.store offset=0x3fb align=1 (i32.const 0) (local.get 0x3fb)) (i64.store offset=0x3fc align=1 (i32.const 0) (local.get 0x3fc)) (i64.store offset=0x3fd align=1 (i32.const 0) (local.get 0x3fd)) (i64.store offset=0x3fe align=1 (i32.const 0) (local.get 0x3fe)) (i64.store offset=0x3ff align=1 (i32.const 0) (local.get 0x3ff)) (i64.store offset=0x400 align=1 (i32.const 0) (local.get 0x400)) (i64.store offset=0x401 align=1 (i32.const 0) (local.get 0x401)) (i64.store offset=0x402 align=1 (i32.const 0) (local.get 0x402)) (i64.store offset=0x403 align=1 (i32.const 0) (local.get 0x403)) (i64.store offset=0x404 align=1 (i32.const 0) (local.get 0x404)) (i64.store offset=0x405 align=1 (i32.const 0) (local.get 0x405)) (i64.store offset=0x406 align=1 (i32.const 0) (local.get 0x406)) (i64.store offset=0x407 align=1 (i32.const 0) (local.get 0x407)) (i64.store offset=0x408 align=1 (i32.const 0) (local.get 0x408)) (i64.store offset=0x409 align=1 (i32.const 0) (local.get 0x409)) (i64.store offset=0x40a align=1 (i32.const 0) (local.get 0x40a)) (i64.store offset=0x40b align=1 (i32.const 0) (local.get 0x40b)) (i64.store offset=0x40c align=1 (i32.const 0) (local.get 0x40c)) (i64.store offset=0x40d align=1 (i32.const 0) (local.get 0x40d)) (i64.store offset=0x40e align=1 (i32.const 0) (local.get 0x40e)) (i64.store offset=0x40f align=1 (i32.const 0) (local.get 0x40f)) (i64.store offset=0x410 align=1 (i32.const 0) (local.get 0x410)) (i64.store offset=0x411 align=1 (i32.const 0) (local.get 0x411)) (i64.store offset=0x412 align=1 (i32.const 0) (local.get 0x412)) (i64.store offset=0x413 align=1 (i32.const 0) (local.get 0x413)) (i64.store offset=0x414 align=1 (i32.const 0) (local.get 0x414)) (i64.store offset=0x415 align=1 (i32.const 0) (local.get 0x415)) (i64.store offset=0x416 align=1 (i32.const 0) (local.get 0x416)) (i64.store offset=0x417 align=1 (i32.const 0) (local.get 0x417)) (i64.store offset=0x418 align=1 (i32.const 0) (local.get 0x418)) (i64.store offset=0x419 align=1 (i32.const 0) (local.get 0x419)) (i64.store offset=0x41a align=1 (i32.const 0) (local.get 0x41a)) (i64.store offset=0x41b align=1 (i32.const 0) (local.get 0x41b)) (i64.store offset=0x41c align=1 (i32.const 0) (local.get 0x41c)) (i64.store offset=0x41d align=1 (i32.const 0) (local.get 0x41d)) (i64.store offset=0x41e align=1 (i32.const 0) (local.get 0x41e)) (i64.store offset=0x41f align=1 (i32.const 0) (local.get 0x41f)) (i64.store offset=0x420 align=1 (i32.const 0) (local.get 0x420)) (i64.store offset=0x421 align=1 (i32.const 0) (local.get 0x421)) (i64.store offset=0x422 align=1 (i32.const 0) (local.get 0x422)) (i64.store offset=0x423 align=1 (i32.const 0) (local.get 0x423)) (i64.store offset=0x424 align=1 (i32.const 0) (local.get 0x424)) (i64.store offset=0x425 align=1 (i32.const 0) (local.get 0x425)) (i64.store offset=0x426 align=1 (i32.const 0) (local.get 0x426)) (i64.store offset=0x427 align=1 (i32.const 0) (local.get 0x427)) (i64.store offset=0x428 align=1 (i32.const 0) (local.get 0x428)) (i64.store offset=0x429 align=1 (i32.const 0) (local.get 0x429)) (i64.store offset=0x42a align=1 (i32.const 0) (local.get 0x42a)) (i64.store offset=0x42b align=1 (i32.const 0) (local.get 0x42b)) (i64.store offset=0x42c align=1 (i32.const 0) (local.get 0x42c)) (i64.store offset=0x42d align=1 (i32.const 0) (local.get 0x42d)) (i64.store offset=0x42e align=1 (i32.const 0) (local.get 0x42e)) (i64.store offset=0x42f align=1 (i32.const 0) (local.get 0x42f)) (i64.store offset=0x430 align=1 (i32.const 0) (local.get 0x430)) (i64.store offset=0x431 align=1 (i32.const 0) (local.get 0x431)) (i64.store offset=0x432 align=1 (i32.const 0) (local.get 0x432)) (i64.store offset=0x433 align=1 (i32.const 0) (local.get 0x433)) (i64.store offset=0x434 align=1 (i32.const 0) (local.get 0x434)) (i64.store offset=0x435 align=1 (i32.const 0) (local.get 0x435)) (i64.store offset=0x436 align=1 (i32.const 0) (local.get 0x436)) (i64.store offset=0x437 align=1 (i32.const 0) (local.get 0x437)) (i64.store offset=0x438 align=1 (i32.const 0) (local.get 0x438)) (i64.store offset=0x439 align=1 (i32.const 0) (local.get 0x439)) (i64.store offset=0x43a align=1 (i32.const 0) (local.get 0x43a)) (i64.store offset=0x43b align=1 (i32.const 0) (local.get 0x43b)) (i64.store offset=0x43c align=1 (i32.const 0) (local.get 0x43c)) (i64.store offset=0x43d align=1 (i32.const 0) (local.get 0x43d)) (i64.store offset=0x43e align=1 (i32.const 0) (local.get 0x43e)) (i64.store offset=0x43f align=1 (i32.const 0) (local.get 0x43f)) (i64.store offset=0x440 align=1 (i32.const 0) (local.get 0x440)) (i64.store offset=0x441 align=1 (i32.const 0) (local.get 0x441)) (i64.store offset=0x442 align=1 (i32.const 0) (local.get 0x442)) (i64.store offset=0x443 align=1 (i32.const 0) (local.get 0x443)) (i64.store offset=0x444 align=1 (i32.const 0) (local.get 0x444)) (i64.store offset=0x445 align=1 (i32.const 0) (local.get 0x445)) (i64.store offset=0x446 align=1 (i32.const 0) (local.get 0x446)) (i64.store offset=0x447 align=1 (i32.const 0) (local.get 0x447)) (i64.store offset=0x448 align=1 (i32.const 0) (local.get 0x448)) (i64.store offset=0x449 align=1 (i32.const 0) (local.get 0x449)) (i64.store offset=0x44a align=1 (i32.const 0) (local.get 0x44a)) (i64.store offset=0x44b align=1 (i32.const 0) (local.get 0x44b)) (i64.store offset=0x44c align=1 (i32.const 0) (local.get 0x44c)) (i64.store offset=0x44d align=1 (i32.const 0) (local.get 0x44d)) (i64.store offset=0x44e align=1 (i32.const 0) (local.get 0x44e)) (i64.store offset=0x44f align=1 (i32.const 0) (local.get 0x44f)) (i64.store offset=0x450 align=1 (i32.const 0) (local.get 0x450)) (i64.store offset=0x451 align=1 (i32.const 0) (local.get 0x451)) (i64.store offset=0x452 align=1 (i32.const 0) (local.get 0x452)) (i64.store offset=0x453 align=1 (i32.const 0) (local.get 0x453)) (i64.store offset=0x454 align=1 (i32.const 0) (local.get 0x454)) (i64.store offset=0x455 align=1 (i32.const 0) (local.get 0x455)) (i64.store offset=0x456 align=1 (i32.const 0) (local.get 0x456)) (i64.store offset=0x457 align=1 (i32.const 0) (local.get 0x457)) (i64.store offset=0x458 align=1 (i32.const 0) (local.get 0x458)) (i64.store offset=0x459 align=1 (i32.const 0) (local.get 0x459)) (i64.store offset=0x45a align=1 (i32.const 0) (local.get 0x45a)) (i64.store offset=0x45b align=1 (i32.const 0) (local.get 0x45b)) (i64.store offset=0x45c align=1 (i32.const 0) (local.get 0x45c)) (i64.store offset=0x45d align=1 (i32.const 0) (local.get 0x45d)) (i64.store offset=0x45e align=1 (i32.const 0) (local.get 0x45e)) (i64.store offset=0x45f align=1 (i32.const 0) (local.get 0x45f)) (i64.store offset=0x460 align=1 (i32.const 0) (local.get 0x460)) (i64.store offset=0x461 align=1 (i32.const 0) (local.get 0x461)) (i64.store offset=0x462 align=1 (i32.const 0) (local.get 0x462)) (i64.store offset=0x463 align=1 (i32.const 0) (local.get 0x463)) (i64.store offset=0x464 align=1 (i32.const 0) (local.get 0x464)) (i64.store offset=0x465 align=1 (i32.const 0) (local.get 0x465)) (i64.store offset=0x466 align=1 (i32.const 0) (local.get 0x466)) (i64.store offset=0x467 align=1 (i32.const 0) (local.get 0x467)) (i64.store offset=0x468 align=1 (i32.const 0) (local.get 0x468)) (i64.store offset=0x469 align=1 (i32.const 0) (local.get 0x469)) (i64.store offset=0x46a align=1 (i32.const 0) (local.get 0x46a)) (i64.store offset=0x46b align=1 (i32.const 0) (local.get 0x46b)) (i64.store offset=0x46c align=1 (i32.const 0) (local.get 0x46c)) (i64.store offset=0x46d align=1 (i32.const 0) (local.get 0x46d)) (i64.store offset=0x46e align=1 (i32.const 0) (local.get 0x46e)) (i64.store offset=0x46f align=1 (i32.const 0) (local.get 0x46f)) (i64.store offset=0x470 align=1 (i32.const 0) (local.get 0x470)) (i64.store offset=0x471 align=1 (i32.const 0) (local.get 0x471)) (i64.store offset=0x472 align=1 (i32.const 0) (local.get 0x472)) (i64.store offset=0x473 align=1 (i32.const 0) (local.get 0x473)) (i64.store offset=0x474 align=1 (i32.const 0) (local.get 0x474)) (i64.store offset=0x475 align=1 (i32.const 0) (local.get 0x475)) (i64.store offset=0x476 align=1 (i32.const 0) (local.get 0x476)) (i64.store offset=0x477 align=1 (i32.const 0) (local.get 0x477)) (i64.store offset=0x478 align=1 (i32.const 0) (local.get 0x478)) (i64.store offset=0x479 align=1 (i32.const 0) (local.get 0x479)) (i64.store offset=0x47a align=1 (i32.const 0) (local.get 0x47a)) (i64.store offset=0x47b align=1 (i32.const 0) (local.get 0x47b)) (i64.store offset=0x47c align=1 (i32.const 0) (local.get 0x47c)) (i64.store offset=0x47d align=1 (i32.const 0) (local.get 0x47d)) (i64.store offset=0x47e align=1 (i32.const 0) (local.get 0x47e)) (i64.store offset=0x47f align=1 (i32.const 0) (local.get 0x47f)) (i64.store offset=0x480 align=1 (i32.const 0) (local.get 0x480)) (i64.store offset=0x481 align=1 (i32.const 0) (local.get 0x481)) (i64.store offset=0x482 align=1 (i32.const 0) (local.get 0x482)) (i64.store offset=0x483 align=1 (i32.const 0) (local.get 0x483)) (i64.store offset=0x484 align=1 (i32.const 0) (local.get 0x484)) (i64.store offset=0x485 align=1 (i32.const 0) (local.get 0x485)) (i64.store offset=0x486 align=1 (i32.const 0) (local.get 0x486)) (i64.store offset=0x487 align=1 (i32.const 0) (local.get 0x487)) (i64.store offset=0x488 align=1 (i32.const 0) (local.get 0x488)) (i64.store offset=0x489 align=1 (i32.const 0) (local.get 0x489)) (i64.store offset=0x48a align=1 (i32.const 0) (local.get 0x48a)) (i64.store offset=0x48b align=1 (i32.const 0) (local.get 0x48b)) (i64.store offset=0x48c align=1 (i32.const 0) (local.get 0x48c)) (i64.store offset=0x48d align=1 (i32.const 0) (local.get 0x48d)) (i64.store offset=0x48e align=1 (i32.const 0) (local.get 0x48e)) (i64.store offset=0x48f align=1 (i32.const 0) (local.get 0x48f)) (i64.store offset=0x490 align=1 (i32.const 0) (local.get 0x490)) (i64.store offset=0x491 align=1 (i32.const 0) (local.get 0x491)) (i64.store offset=0x492 align=1 (i32.const 0) (local.get 0x492)) (i64.store offset=0x493 align=1 (i32.const 0) (local.get 0x493)) (i64.store offset=0x494 align=1 (i32.const 0) (local.get 0x494)) (i64.store offset=0x495 align=1 (i32.const 0) (local.get 0x495)) (i64.store offset=0x496 align=1 (i32.const 0) (local.get 0x496)) (i64.store offset=0x497 align=1 (i32.const 0) (local.get 0x497)) (i64.store offset=0x498 align=1 (i32.const 0) (local.get 0x498)) (i64.store offset=0x499 align=1 (i32.const 0) (local.get 0x499)) (i64.store offset=0x49a align=1 (i32.const 0) (local.get 0x49a)) (i64.store offset=0x49b align=1 (i32.const 0) (local.get 0x49b)) (i64.store offset=0x49c align=1 (i32.const 0) (local.get 0x49c)) (i64.store offset=0x49d align=1 (i32.const 0) (local.get 0x49d)) (i64.store offset=0x49e align=1 (i32.const 0) (local.get 0x49e)) (i64.store offset=0x49f align=1 (i32.const 0) (local.get 0x49f)) (i64.store offset=0x4a0 align=1 (i32.const 0) (local.get 0x4a0)) (i64.store offset=0x4a1 align=1 (i32.const 0) (local.get 0x4a1)) (i64.store offset=0x4a2 align=1 (i32.const 0) (local.get 0x4a2)) (i64.store offset=0x4a3 align=1 (i32.const 0) (local.get 0x4a3)) (i64.store offset=0x4a4 align=1 (i32.const 0) (local.get 0x4a4)) (i64.store offset=0x4a5 align=1 (i32.const 0) (local.get 0x4a5)) (i64.store offset=0x4a6 align=1 (i32.const 0) (local.get 0x4a6)) (i64.store offset=0x4a7 align=1 (i32.const 0) (local.get 0x4a7)) (i64.store offset=0x4a8 align=1 (i32.const 0) (local.get 0x4a8)) (i64.store offset=0x4a9 align=1 (i32.const 0) (local.get 0x4a9)) (i64.store offset=0x4aa align=1 (i32.const 0) (local.get 0x4aa)) (i64.store offset=0x4ab align=1 (i32.const 0) (local.get 0x4ab)) (i64.store offset=0x4ac align=1 (i32.const 0) (local.get 0x4ac)) (i64.store offset=0x4ad align=1 (i32.const 0) (local.get 0x4ad)) (i64.store offset=0x4ae align=1 (i32.const 0) (local.get 0x4ae)) (i64.store offset=0x4af align=1 (i32.const 0) (local.get 0x4af)) (i64.store offset=0x4b0 align=1 (i32.const 0) (local.get 0x4b0)) (i64.store offset=0x4b1 align=1 (i32.const 0) (local.get 0x4b1)) (i64.store offset=0x4b2 align=1 (i32.const 0) (local.get 0x4b2)) (i64.store offset=0x4b3 align=1 (i32.const 0) (local.get 0x4b3)) (i64.store offset=0x4b4 align=1 (i32.const 0) (local.get 0x4b4)) (i64.store offset=0x4b5 align=1 (i32.const 0) (local.get 0x4b5)) (i64.store offset=0x4b6 align=1 (i32.const 0) (local.get 0x4b6)) (i64.store offset=0x4b7 align=1 (i32.const 0) (local.get 0x4b7)) (i64.store offset=0x4b8 align=1 (i32.const 0) (local.get 0x4b8)) (i64.store offset=0x4b9 align=1 (i32.const 0) (local.get 0x4b9)) (i64.store offset=0x4ba align=1 (i32.const 0) (local.get 0x4ba)) (i64.store offset=0x4bb align=1 (i32.const 0) (local.get 0x4bb)) (i64.store offset=0x4bc align=1 (i32.const 0) (local.get 0x4bc)) (i64.store offset=0x4bd align=1 (i32.const 0) (local.get 0x4bd)) (i64.store offset=0x4be align=1 (i32.const 0) (local.get 0x4be)) (i64.store offset=0x4bf align=1 (i32.const 0) (local.get 0x4bf)) (i64.store offset=0x4c0 align=1 (i32.const 0) (local.get 0x4c0)) (i64.store offset=0x4c1 align=1 (i32.const 0) (local.get 0x4c1)) (i64.store offset=0x4c2 align=1 (i32.const 0) (local.get 0x4c2)) (i64.store offset=0x4c3 align=1 (i32.const 0) (local.get 0x4c3)) (i64.store offset=0x4c4 align=1 (i32.const 0) (local.get 0x4c4)) (i64.store offset=0x4c5 align=1 (i32.const 0) (local.get 0x4c5)) (i64.store offset=0x4c6 align=1 (i32.const 0) (local.get 0x4c6)) (i64.store offset=0x4c7 align=1 (i32.const 0) (local.get 0x4c7)) (i64.store offset=0x4c8 align=1 (i32.const 0) (local.get 0x4c8)) (i64.store offset=0x4c9 align=1 (i32.const 0) (local.get 0x4c9)) (i64.store offset=0x4ca align=1 (i32.const 0) (local.get 0x4ca)) (i64.store offset=0x4cb align=1 (i32.const 0) (local.get 0x4cb)) (i64.store offset=0x4cc align=1 (i32.const 0) (local.get 0x4cc)) (i64.store offset=0x4cd align=1 (i32.const 0) (local.get 0x4cd)) (i64.store offset=0x4ce align=1 (i32.const 0) (local.get 0x4ce)) (i64.store offset=0x4cf align=1 (i32.const 0) (local.get 0x4cf)) (i64.store offset=0x4d0 align=1 (i32.const 0) (local.get 0x4d0)) (i64.store offset=0x4d1 align=1 (i32.const 0) (local.get 0x4d1)) (i64.store offset=0x4d2 align=1 (i32.const 0) (local.get 0x4d2)) (i64.store offset=0x4d3 align=1 (i32.const 0) (local.get 0x4d3)) (i64.store offset=0x4d4 align=1 (i32.const 0) (local.get 0x4d4)) (i64.store offset=0x4d5 align=1 (i32.const 0) (local.get 0x4d5)) (i64.store offset=0x4d6 align=1 (i32.const 0) (local.get 0x4d6)) (i64.store offset=0x4d7 align=1 (i32.const 0) (local.get 0x4d7)) (i64.store offset=0x4d8 align=1 (i32.const 0) (local.get 0x4d8)) (i64.store offset=0x4d9 align=1 (i32.const 0) (local.get 0x4d9)) (i64.store offset=0x4da align=1 (i32.const 0) (local.get 0x4da)) (i64.store offset=0x4db align=1 (i32.const 0) (local.get 0x4db)) (i64.store offset=0x4dc align=1 (i32.const 0) (local.get 0x4dc)) (i64.store offset=0x4dd align=1 (i32.const 0) (local.get 0x4dd)) (i64.store offset=0x4de align=1 (i32.const 0) (local.get 0x4de)) (i64.store offset=0x4df align=1 (i32.const 0) (local.get 0x4df)) (i64.store offset=0x4e0 align=1 (i32.const 0) (local.get 0x4e0)) (i64.store offset=0x4e1 align=1 (i32.const 0) (local.get 0x4e1)) (i64.store offset=0x4e2 align=1 (i32.const 0) (local.get 0x4e2)) (i64.store offset=0x4e3 align=1 (i32.const 0) (local.get 0x4e3)) (i64.store offset=0x4e4 align=1 (i32.const 0) (local.get 0x4e4)) (i64.store offset=0x4e5 align=1 (i32.const 0) (local.get 0x4e5)) (i64.store offset=0x4e6 align=1 (i32.const 0) (local.get 0x4e6)) (i64.store offset=0x4e7 align=1 (i32.const 0) (local.get 0x4e7)) (i64.store offset=0x4e8 align=1 (i32.const 0) (local.get 0x4e8)) (i64.store offset=0x4e9 align=1 (i32.const 0) (local.get 0x4e9)) (i64.store offset=0x4ea align=1 (i32.const 0) (local.get 0x4ea)) (i64.store offset=0x4eb align=1 (i32.const 0) (local.get 0x4eb)) (i64.store offset=0x4ec align=1 (i32.const 0) (local.get 0x4ec)) (i64.store offset=0x4ed align=1 (i32.const 0) (local.get 0x4ed)) (i64.store offset=0x4ee align=1 (i32.const 0) (local.get 0x4ee)) (i64.store offset=0x4ef align=1 (i32.const 0) (local.get 0x4ef)) (i64.store offset=0x4f0 align=1 (i32.const 0) (local.get 0x4f0)) (i64.store offset=0x4f1 align=1 (i32.const 0) (local.get 0x4f1)) (i64.store offset=0x4f2 align=1 (i32.const 0) (local.get 0x4f2)) (i64.store offset=0x4f3 align=1 (i32.const 0) (local.get 0x4f3)) (i64.store offset=0x4f4 align=1 (i32.const 0) (local.get 0x4f4)) (i64.store offset=0x4f5 align=1 (i32.const 0) (local.get 0x4f5)) (i64.store offset=0x4f6 align=1 (i32.const 0) (local.get 0x4f6)) (i64.store offset=0x4f7 align=1 (i32.const 0) (local.get 0x4f7)) (i64.store offset=0x4f8 align=1 (i32.const 0) (local.get 0x4f8)) (i64.store offset=0x4f9 align=1 (i32.const 0) (local.get 0x4f9)) (i64.store offset=0x4fa align=1 (i32.const 0) (local.get 0x4fa)) (i64.store offset=0x4fb align=1 (i32.const 0) (local.get 0x4fb)) (i64.store offset=0x4fc align=1 (i32.const 0) (local.get 0x4fc)) (i64.store offset=0x4fd align=1 (i32.const 0) (local.get 0x4fd)) (i64.store offset=0x4fe align=1 (i32.const 0) (local.get 0x4fe)) (i64.store offset=0x4ff align=1 (i32.const 0) (local.get 0x4ff)) (i64.store offset=0x500 align=1 (i32.const 0) (local.get 0x500)) (i64.store offset=0x501 align=1 (i32.const 0) (local.get 0x501)) (i64.store offset=0x502 align=1 (i32.const 0) (local.get 0x502)) (i64.store offset=0x503 align=1 (i32.const 0) (local.get 0x503)) (i64.store offset=0x504 align=1 (i32.const 0) (local.get 0x504)) (i64.store offset=0x505 align=1 (i32.const 0) (local.get 0x505)) (i64.store offset=0x506 align=1 (i32.const 0) (local.get 0x506)) (i64.store offset=0x507 align=1 (i32.const 0) (local.get 0x507)) (i64.store offset=0x508 align=1 (i32.const 0) (local.get 0x508)) (i64.store offset=0x509 align=1 (i32.const 0) (local.get 0x509)) (i64.store offset=0x50a align=1 (i32.const 0) (local.get 0x50a)) (i64.store offset=0x50b align=1 (i32.const 0) (local.get 0x50b)) (i64.store offset=0x50c align=1 (i32.const 0) (local.get 0x50c)) (i64.store offset=0x50d align=1 (i32.const 0) (local.get 0x50d)) (i64.store offset=0x50e align=1 (i32.const 0) (local.get 0x50e)) (i64.store offset=0x50f align=1 (i32.const 0) (local.get 0x50f)) (i64.store offset=0x510 align=1 (i32.const 0) (local.get 0x510)) (i64.store offset=0x511 align=1 (i32.const 0) (local.get 0x511)) (i64.store offset=0x512 align=1 (i32.const 0) (local.get 0x512)) (i64.store offset=0x513 align=1 (i32.const 0) (local.get 0x513)) (i64.store offset=0x514 align=1 (i32.const 0) (local.get 0x514)) (i64.store offset=0x515 align=1 (i32.const 0) (local.get 0x515)) (i64.store offset=0x516 align=1 (i32.const 0) (local.get 0x516)) (i64.store offset=0x517 align=1 (i32.const 0) (local.get 0x517)) (i64.store offset=0x518 align=1 (i32.const 0) (local.get 0x518)) (i64.store offset=0x519 align=1 (i32.const 0) (local.get 0x519)) (i64.store offset=0x51a align=1 (i32.const 0) (local.get 0x51a)) (i64.store offset=0x51b align=1 (i32.const 0) (local.get 0x51b)) (i64.store offset=0x51c align=1 (i32.const 0) (local.get 0x51c)) (i64.store offset=0x51d align=1 (i32.const 0) (local.get 0x51d)) (i64.store offset=0x51e align=1 (i32.const 0) (local.get 0x51e)) (i64.store offset=0x51f align=1 (i32.const 0) (local.get 0x51f)) (i64.store offset=0x520 align=1 (i32.const 0) (local.get 0x520)) (i64.store offset=0x521 align=1 (i32.const 0) (local.get 0x521)) (i64.store offset=0x522 align=1 (i32.const 0) (local.get 0x522)) (i64.store offset=0x523 align=1 (i32.const 0) (local.get 0x523)) (i64.store offset=0x524 align=1 (i32.const 0) (local.get 0x524)) (i64.store offset=0x525 align=1 (i32.const 0) (local.get 0x525)) (i64.store offset=0x526 align=1 (i32.const 0) (local.get 0x526)) (i64.store offset=0x527 align=1 (i32.const 0) (local.get 0x527)) (i64.store offset=0x528 align=1 (i32.const 0) (local.get 0x528)) (i64.store offset=0x529 align=1 (i32.const 0) (local.get 0x529)) (i64.store offset=0x52a align=1 (i32.const 0) (local.get 0x52a)) (i64.store offset=0x52b align=1 (i32.const 0) (local.get 0x52b)) (i64.store offset=0x52c align=1 (i32.const 0) (local.get 0x52c)) (i64.store offset=0x52d align=1 (i32.const 0) (local.get 0x52d)) (i64.store offset=0x52e align=1 (i32.const 0) (local.get 0x52e)) (i64.store offset=0x52f align=1 (i32.const 0) (local.get 0x52f)) (i64.store offset=0x530 align=1 (i32.const 0) (local.get 0x530)) (i64.store offset=0x531 align=1 (i32.const 0) (local.get 0x531)) (i64.store offset=0x532 align=1 (i32.const 0) (local.get 0x532)) (i64.store offset=0x533 align=1 (i32.const 0) (local.get 0x533)) (i64.store offset=0x534 align=1 (i32.const 0) (local.get 0x534)) (i64.store offset=0x535 align=1 (i32.const 0) (local.get 0x535)) (i64.store offset=0x536 align=1 (i32.const 0) (local.get 0x536)) (i64.store offset=0x537 align=1 (i32.const 0) (local.get 0x537)) (i64.store offset=0x538 align=1 (i32.const 0) (local.get 0x538)) (i64.store offset=0x539 align=1 (i32.const 0) (local.get 0x539)) (i64.store offset=0x53a align=1 (i32.const 0) (local.get 0x53a)) (i64.store offset=0x53b align=1 (i32.const 0) (local.get 0x53b)) (i64.store offset=0x53c align=1 (i32.const 0) (local.get 0x53c)) (i64.store offset=0x53d align=1 (i32.const 0) (local.get 0x53d)) (i64.store offset=0x53e align=1 (i32.const 0) (local.get 0x53e)) (i64.store offset=0x53f align=1 (i32.const 0) (local.get 0x53f)) (i64.store offset=0x540 align=1 (i32.const 0) (local.get 0x540)) (i64.store offset=0x541 align=1 (i32.const 0) (local.get 0x541)) (i64.store offset=0x542 align=1 (i32.const 0) (local.get 0x542)) (i64.store offset=0x543 align=1 (i32.const 0) (local.get 0x543)) (i64.store offset=0x544 align=1 (i32.const 0) (local.get 0x544)) (i64.store offset=0x545 align=1 (i32.const 0) (local.get 0x545)) (i64.store offset=0x546 align=1 (i32.const 0) (local.get 0x546)) (i64.store offset=0x547 align=1 (i32.const 0) (local.get 0x547)) (i64.store offset=0x548 align=1 (i32.const 0) (local.get 0x548)) (i64.store offset=0x549 align=1 (i32.const 0) (local.get 0x549)) (i64.store offset=0x54a align=1 (i32.const 0) (local.get 0x54a)) (i64.store offset=0x54b align=1 (i32.const 0) (local.get 0x54b)) (i64.store offset=0x54c align=1 (i32.const 0) (local.get 0x54c)) (i64.store offset=0x54d align=1 (i32.const 0) (local.get 0x54d)) (i64.store offset=0x54e align=1 (i32.const 0) (local.get 0x54e)) (i64.store offset=0x54f align=1 (i32.const 0) (local.get 0x54f)) (i64.store offset=0x550 align=1 (i32.const 0) (local.get 0x550)) (i64.store offset=0x551 align=1 (i32.const 0) (local.get 0x551)) (i64.store offset=0x552 align=1 (i32.const 0) (local.get 0x552)) (i64.store offset=0x553 align=1 (i32.const 0) (local.get 0x553)) (i64.store offset=0x554 align=1 (i32.const 0) (local.get 0x554)) (i64.store offset=0x555 align=1 (i32.const 0) (local.get 0x555)) (i64.store offset=0x556 align=1 (i32.const 0) (local.get 0x556)) (i64.store offset=0x557 align=1 (i32.const 0) (local.get 0x557)) (i64.store offset=0x558 align=1 (i32.const 0) (local.get 0x558)) (i64.store offset=0x559 align=1 (i32.const 0) (local.get 0x559)) (i64.store offset=0x55a align=1 (i32.const 0) (local.get 0x55a)) (i64.store offset=0x55b align=1 (i32.const 0) (local.get 0x55b)) (i64.store offset=0x55c align=1 (i32.const 0) (local.get 0x55c)) (i64.store offset=0x55d align=1 (i32.const 0) (local.get 0x55d)) (i64.store offset=0x55e align=1 (i32.const 0) (local.get 0x55e)) (i64.store offset=0x55f align=1 (i32.const 0) (local.get 0x55f)) (i64.store offset=0x560 align=1 (i32.const 0) (local.get 0x560)) (i64.store offset=0x561 align=1 (i32.const 0) (local.get 0x561)) (i64.store offset=0x562 align=1 (i32.const 0) (local.get 0x562)) (i64.store offset=0x563 align=1 (i32.const 0) (local.get 0x563)) (i64.store offset=0x564 align=1 (i32.const 0) (local.get 0x564)) (i64.store offset=0x565 align=1 (i32.const 0) (local.get 0x565)) (i64.store offset=0x566 align=1 (i32.const 0) (local.get 0x566)) (i64.store offset=0x567 align=1 (i32.const 0) (local.get 0x567)) (i64.store offset=0x568 align=1 (i32.const 0) (local.get 0x568)) (i64.store offset=0x569 align=1 (i32.const 0) (local.get 0x569)) (i64.store offset=0x56a align=1 (i32.const 0) (local.get 0x56a)) (i64.store offset=0x56b align=1 (i32.const 0) (local.get 0x56b)) (i64.store offset=0x56c align=1 (i32.const 0) (local.get 0x56c)) (i64.store offset=0x56d align=1 (i32.const 0) (local.get 0x56d)) (i64.store offset=0x56e align=1 (i32.const 0) (local.get 0x56e)) (i64.store offset=0x56f align=1 (i32.const 0) (local.get 0x56f)) (i64.store offset=0x570 align=1 (i32.const 0) (local.get 0x570)) (i64.store offset=0x571 align=1 (i32.const 0) (local.get 0x571)) (i64.store offset=0x572 align=1 (i32.const 0) (local.get 0x572)) (i64.store offset=0x573 align=1 (i32.const 0) (local.get 0x573)) (i64.store offset=0x574 align=1 (i32.const 0) (local.get 0x574)) (i64.store offset=0x575 align=1 (i32.const 0) (local.get 0x575)) (i64.store offset=0x576 align=1 (i32.const 0) (local.get 0x576)) (i64.store offset=0x577 align=1 (i32.const 0) (local.get 0x577)) (i64.store offset=0x578 align=1 (i32.const 0) (local.get 0x578)) (i64.store offset=0x579 align=1 (i32.const 0) (local.get 0x579)) (i64.store offset=0x57a align=1 (i32.const 0) (local.get 0x57a)) (i64.store offset=0x57b align=1 (i32.const 0) (local.get 0x57b)) (i64.store offset=0x57c align=1 (i32.const 0) (local.get 0x57c)) (i64.store offset=0x57d align=1 (i32.const 0) (local.get 0x57d)) (i64.store offset=0x57e align=1 (i32.const 0) (local.get 0x57e)) (i64.store offset=0x57f align=1 (i32.const 0) (local.get 0x57f)) (i64.store offset=0x580 align=1 (i32.const 0) (local.get 0x580)) (i64.store offset=0x581 align=1 (i32.const 0) (local.get 0x581)) (i64.store offset=0x582 align=1 (i32.const 0) (local.get 0x582)) (i64.store offset=0x583 align=1 (i32.const 0) (local.get 0x583)) (i64.store offset=0x584 align=1 (i32.const 0) (local.get 0x584)) (i64.store offset=0x585 align=1 (i32.const 0) (local.get 0x585)) (i64.store offset=0x586 align=1 (i32.const 0) (local.get 0x586)) (i64.store offset=0x587 align=1 (i32.const 0) (local.get 0x587)) (i64.store offset=0x588 align=1 (i32.const 0) (local.get 0x588)) (i64.store offset=0x589 align=1 (i32.const 0) (local.get 0x589)) (i64.store offset=0x58a align=1 (i32.const 0) (local.get 0x58a)) (i64.store offset=0x58b align=1 (i32.const 0) (local.get 0x58b)) (i64.store offset=0x58c align=1 (i32.const 0) (local.get 0x58c)) (i64.store offset=0x58d align=1 (i32.const 0) (local.get 0x58d)) (i64.store offset=0x58e align=1 (i32.const 0) (local.get 0x58e)) (i64.store offset=0x58f align=1 (i32.const 0) (local.get 0x58f)) (i64.store offset=0x590 align=1 (i32.const 0) (local.get 0x590)) (i64.store offset=0x591 align=1 (i32.const 0) (local.get 0x591)) (i64.store offset=0x592 align=1 (i32.const 0) (local.get 0x592)) (i64.store offset=0x593 align=1 (i32.const 0) (local.get 0x593)) (i64.store offset=0x594 align=1 (i32.const 0) (local.get 0x594)) (i64.store offset=0x595 align=1 (i32.const 0) (local.get 0x595)) (i64.store offset=0x596 align=1 (i32.const 0) (local.get 0x596)) (i64.store offset=0x597 align=1 (i32.const 0) (local.get 0x597)) (i64.store offset=0x598 align=1 (i32.const 0) (local.get 0x598)) (i64.store offset=0x599 align=1 (i32.const 0) (local.get 0x599)) (i64.store offset=0x59a align=1 (i32.const 0) (local.get 0x59a)) (i64.store offset=0x59b align=1 (i32.const 0) (local.get 0x59b)) (i64.store offset=0x59c align=1 (i32.const 0) (local.get 0x59c)) (i64.store offset=0x59d align=1 (i32.const 0) (local.get 0x59d)) (i64.store offset=0x59e align=1 (i32.const 0) (local.get 0x59e)) (i64.store offset=0x59f align=1 (i32.const 0) (local.get 0x59f)) (i64.store offset=0x5a0 align=1 (i32.const 0) (local.get 0x5a0)) (i64.store offset=0x5a1 align=1 (i32.const 0) (local.get 0x5a1)) (i64.store offset=0x5a2 align=1 (i32.const 0) (local.get 0x5a2)) (i64.store offset=0x5a3 align=1 (i32.const 0) (local.get 0x5a3)) (i64.store offset=0x5a4 align=1 (i32.const 0) (local.get 0x5a4)) (i64.store offset=0x5a5 align=1 (i32.const 0) (local.get 0x5a5)) (i64.store offset=0x5a6 align=1 (i32.const 0) (local.get 0x5a6)) (i64.store offset=0x5a7 align=1 (i32.const 0) (local.get 0x5a7)) (i64.store offset=0x5a8 align=1 (i32.const 0) (local.get 0x5a8)) (i64.store offset=0x5a9 align=1 (i32.const 0) (local.get 0x5a9)) (i64.store offset=0x5aa align=1 (i32.const 0) (local.get 0x5aa)) (i64.store offset=0x5ab align=1 (i32.const 0) (local.get 0x5ab)) (i64.store offset=0x5ac align=1 (i32.const 0) (local.get 0x5ac)) (i64.store offset=0x5ad align=1 (i32.const 0) (local.get 0x5ad)) (i64.store offset=0x5ae align=1 (i32.const 0) (local.get 0x5ae)) (i64.store offset=0x5af align=1 (i32.const 0) (local.get 0x5af)) (i64.store offset=0x5b0 align=1 (i32.const 0) (local.get 0x5b0)) (i64.store offset=0x5b1 align=1 (i32.const 0) (local.get 0x5b1)) (i64.store offset=0x5b2 align=1 (i32.const 0) (local.get 0x5b2)) (i64.store offset=0x5b3 align=1 (i32.const 0) (local.get 0x5b3)) (i64.store offset=0x5b4 align=1 (i32.const 0) (local.get 0x5b4)) (i64.store offset=0x5b5 align=1 (i32.const 0) (local.get 0x5b5)) (i64.store offset=0x5b6 align=1 (i32.const 0) (local.get 0x5b6)) (i64.store offset=0x5b7 align=1 (i32.const 0) (local.get 0x5b7)) (i64.store offset=0x5b8 align=1 (i32.const 0) (local.get 0x5b8)) (i64.store offset=0x5b9 align=1 (i32.const 0) (local.get 0x5b9)) (i64.store offset=0x5ba align=1 (i32.const 0) (local.get 0x5ba)) (i64.store offset=0x5bb align=1 (i32.const 0) (local.get 0x5bb)) (i64.store offset=0x5bc align=1 (i32.const 0) (local.get 0x5bc)) (i64.store offset=0x5bd align=1 (i32.const 0) (local.get 0x5bd)) (i64.store offset=0x5be align=1 (i32.const 0) (local.get 0x5be)) (i64.store offset=0x5bf align=1 (i32.const 0) (local.get 0x5bf)) (i64.store offset=0x5c0 align=1 (i32.const 0) (local.get 0x5c0)) (i64.store offset=0x5c1 align=1 (i32.const 0) (local.get 0x5c1)) (i64.store offset=0x5c2 align=1 (i32.const 0) (local.get 0x5c2)) (i64.store offset=0x5c3 align=1 (i32.const 0) (local.get 0x5c3)) (i64.store offset=0x5c4 align=1 (i32.const 0) (local.get 0x5c4)) (i64.store offset=0x5c5 align=1 (i32.const 0) (local.get 0x5c5)) (i64.store offset=0x5c6 align=1 (i32.const 0) (local.get 0x5c6)) (i64.store offset=0x5c7 align=1 (i32.const 0) (local.get 0x5c7)) (i64.store offset=0x5c8 align=1 (i32.const 0) (local.get 0x5c8)) (i64.store offset=0x5c9 align=1 (i32.const 0) (local.get 0x5c9)) (i64.store offset=0x5ca align=1 (i32.const 0) (local.get 0x5ca)) (i64.store offset=0x5cb align=1 (i32.const 0) (local.get 0x5cb)) (i64.store offset=0x5cc align=1 (i32.const 0) (local.get 0x5cc)) (i64.store offset=0x5cd align=1 (i32.const 0) (local.get 0x5cd)) (i64.store offset=0x5ce align=1 (i32.const 0) (local.get 0x5ce)) (i64.store offset=0x5cf align=1 (i32.const 0) (local.get 0x5cf)) (i64.store offset=0x5d0 align=1 (i32.const 0) (local.get 0x5d0)) (i64.store offset=0x5d1 align=1 (i32.const 0) (local.get 0x5d1)) (i64.store offset=0x5d2 align=1 (i32.const 0) (local.get 0x5d2)) (i64.store offset=0x5d3 align=1 (i32.const 0) (local.get 0x5d3)) (i64.store offset=0x5d4 align=1 (i32.const 0) (local.get 0x5d4)) (i64.store offset=0x5d5 align=1 (i32.const 0) (local.get 0x5d5)) (i64.store offset=0x5d6 align=1 (i32.const 0) (local.get 0x5d6)) (i64.store offset=0x5d7 align=1 (i32.const 0) (local.get 0x5d7)) (i64.store offset=0x5d8 align=1 (i32.const 0) (local.get 0x5d8)) (i64.store offset=0x5d9 align=1 (i32.const 0) (local.get 0x5d9)) (i64.store offset=0x5da align=1 (i32.const 0) (local.get 0x5da)) (i64.store offset=0x5db align=1 (i32.const 0) (local.get 0x5db)) (i64.store offset=0x5dc align=1 (i32.const 0) (local.get 0x5dc)) (i64.store offset=0x5dd align=1 (i32.const 0) (local.get 0x5dd)) (i64.store offset=0x5de align=1 (i32.const 0) (local.get 0x5de)) (i64.store offset=0x5df align=1 (i32.const 0) (local.get 0x5df)) (i64.store offset=0x5e0 align=1 (i32.const 0) (local.get 0x5e0)) (i64.store offset=0x5e1 align=1 (i32.const 0) (local.get 0x5e1)) (i64.store offset=0x5e2 align=1 (i32.const 0) (local.get 0x5e2)) (i64.store offset=0x5e3 align=1 (i32.const 0) (local.get 0x5e3)) (i64.store offset=0x5e4 align=1 (i32.const 0) (local.get 0x5e4)) (i64.store offset=0x5e5 align=1 (i32.const 0) (local.get 0x5e5)) (i64.store offset=0x5e6 align=1 (i32.const 0) (local.get 0x5e6)) (i64.store offset=0x5e7 align=1 (i32.const 0) (local.get 0x5e7)) (i64.store offset=0x5e8 align=1 (i32.const 0) (local.get 0x5e8)) (i64.store offset=0x5e9 align=1 (i32.const 0) (local.get 0x5e9)) (i64.store offset=0x5ea align=1 (i32.const 0) (local.get 0x5ea)) (i64.store offset=0x5eb align=1 (i32.const 0) (local.get 0x5eb)) (i64.store offset=0x5ec align=1 (i32.const 0) (local.get 0x5ec)) (i64.store offset=0x5ed align=1 (i32.const 0) (local.get 0x5ed)) (i64.store offset=0x5ee align=1 (i32.const 0) (local.get 0x5ee)) (i64.store offset=0x5ef align=1 (i32.const 0) (local.get 0x5ef)) (i64.store offset=0x5f0 align=1 (i32.const 0) (local.get 0x5f0)) (i64.store offset=0x5f1 align=1 (i32.const 0) (local.get 0x5f1)) (i64.store offset=0x5f2 align=1 (i32.const 0) (local.get 0x5f2)) (i64.store offset=0x5f3 align=1 (i32.const 0) (local.get 0x5f3)) (i64.store offset=0x5f4 align=1 (i32.const 0) (local.get 0x5f4)) (i64.store offset=0x5f5 align=1 (i32.const 0) (local.get 0x5f5)) (i64.store offset=0x5f6 align=1 (i32.const 0) (local.get 0x5f6)) (i64.store offset=0x5f7 align=1 (i32.const 0) (local.get 0x5f7)) (i64.store offset=0x5f8 align=1 (i32.const 0) (local.get 0x5f8)) (i64.store offset=0x5f9 align=1 (i32.const 0) (local.get 0x5f9)) (i64.store offset=0x5fa align=1 (i32.const 0) (local.get 0x5fa)) (i64.store offset=0x5fb align=1 (i32.const 0) (local.get 0x5fb)) (i64.store offset=0x5fc align=1 (i32.const 0) (local.get 0x5fc)) (i64.store offset=0x5fd align=1 (i32.const 0) (local.get 0x5fd)) (i64.store offset=0x5fe align=1 (i32.const 0) (local.get 0x5fe)) (i64.store offset=0x5ff align=1 (i32.const 0) (local.get 0x5ff)) (i64.store offset=0x600 align=1 (i32.const 0) (local.get 0x600)) (i64.store offset=0x601 align=1 (i32.const 0) (local.get 0x601)) (i64.store offset=0x602 align=1 (i32.const 0) (local.get 0x602)) (i64.store offset=0x603 align=1 (i32.const 0) (local.get 0x603)) (i64.store offset=0x604 align=1 (i32.const 0) (local.get 0x604)) (i64.store offset=0x605 align=1 (i32.const 0) (local.get 0x605)) (i64.store offset=0x606 align=1 (i32.const 0) (local.get 0x606)) (i64.store offset=0x607 align=1 (i32.const 0) (local.get 0x607)) (i64.store offset=0x608 align=1 (i32.const 0) (local.get 0x608)) (i64.store offset=0x609 align=1 (i32.const 0) (local.get 0x609)) (i64.store offset=0x60a align=1 (i32.const 0) (local.get 0x60a)) (i64.store offset=0x60b align=1 (i32.const 0) (local.get 0x60b)) (i64.store offset=0x60c align=1 (i32.const 0) (local.get 0x60c)) (i64.store offset=0x60d align=1 (i32.const 0) (local.get 0x60d)) (i64.store offset=0x60e align=1 (i32.const 0) (local.get 0x60e)) (i64.store offset=0x60f align=1 (i32.const 0) (local.get 0x60f)) (i64.store offset=0x610 align=1 (i32.const 0) (local.get 0x610)) (i64.store offset=0x611 align=1 (i32.const 0) (local.get 0x611)) (i64.store offset=0x612 align=1 (i32.const 0) (local.get 0x612)) (i64.store offset=0x613 align=1 (i32.const 0) (local.get 0x613)) (i64.store offset=0x614 align=1 (i32.const 0) (local.get 0x614)) (i64.store offset=0x615 align=1 (i32.const 0) (local.get 0x615)) (i64.store offset=0x616 align=1 (i32.const 0) (local.get 0x616)) (i64.store offset=0x617 align=1 (i32.const 0) (local.get 0x617)) (i64.store offset=0x618 align=1 (i32.const 0) (local.get 0x618)) (i64.store offset=0x619 align=1 (i32.const 0) (local.get 0x619)) (i64.store offset=0x61a align=1 (i32.const 0) (local.get 0x61a)) (i64.store offset=0x61b align=1 (i32.const 0) (local.get 0x61b)) (i64.store offset=0x61c align=1 (i32.const 0) (local.get 0x61c)) (i64.store offset=0x61d align=1 (i32.const 0) (local.get 0x61d)) (i64.store offset=0x61e align=1 (i32.const 0) (local.get 0x61e)) (i64.store offset=0x61f align=1 (i32.const 0) (local.get 0x61f)) (i64.store offset=0x620 align=1 (i32.const 0) (local.get 0x620)) (i64.store offset=0x621 align=1 (i32.const 0) (local.get 0x621)) (i64.store offset=0x622 align=1 (i32.const 0) (local.get 0x622)) (i64.store offset=0x623 align=1 (i32.const 0) (local.get 0x623)) (i64.store offset=0x624 align=1 (i32.const 0) (local.get 0x624)) (i64.store offset=0x625 align=1 (i32.const 0) (local.get 0x625)) (i64.store offset=0x626 align=1 (i32.const 0) (local.get 0x626)) (i64.store offset=0x627 align=1 (i32.const 0) (local.get 0x627)) (i64.store offset=0x628 align=1 (i32.const 0) (local.get 0x628)) (i64.store offset=0x629 align=1 (i32.const 0) (local.get 0x629)) (i64.store offset=0x62a align=1 (i32.const 0) (local.get 0x62a)) (i64.store offset=0x62b align=1 (i32.const 0) (local.get 0x62b)) (i64.store offset=0x62c align=1 (i32.const 0) (local.get 0x62c)) (i64.store offset=0x62d align=1 (i32.const 0) (local.get 0x62d)) (i64.store offset=0x62e align=1 (i32.const 0) (local.get 0x62e)) (i64.store offset=0x62f align=1 (i32.const 0) (local.get 0x62f)) (i64.store offset=0x630 align=1 (i32.const 0) (local.get 0x630)) (i64.store offset=0x631 align=1 (i32.const 0) (local.get 0x631)) (i64.store offset=0x632 align=1 (i32.const 0) (local.get 0x632)) (i64.store offset=0x633 align=1 (i32.const 0) (local.get 0x633)) (i64.store offset=0x634 align=1 (i32.const 0) (local.get 0x634)) (i64.store offset=0x635 align=1 (i32.const 0) (local.get 0x635)) (i64.store offset=0x636 align=1 (i32.const 0) (local.get 0x636)) (i64.store offset=0x637 align=1 (i32.const 0) (local.get 0x637)) (i64.store offset=0x638 align=1 (i32.const 0) (local.get 0x638)) (i64.store offset=0x639 align=1 (i32.const 0) (local.get 0x639)) (i64.store offset=0x63a align=1 (i32.const 0) (local.get 0x63a)) (i64.store offset=0x63b align=1 (i32.const 0) (local.get 0x63b)) (i64.store offset=0x63c align=1 (i32.const 0) (local.get 0x63c)) (i64.store offset=0x63d align=1 (i32.const 0) (local.get 0x63d)) (i64.store offset=0x63e align=1 (i32.const 0) (local.get 0x63e)) (i64.store offset=0x63f align=1 (i32.const 0) (local.get 0x63f)) (i64.store offset=0x640 align=1 (i32.const 0) (local.get 0x640)) (i64.store offset=0x641 align=1 (i32.const 0) (local.get 0x641)) (i64.store offset=0x642 align=1 (i32.const 0) (local.get 0x642)) (i64.store offset=0x643 align=1 (i32.const 0) (local.get 0x643)) (i64.store offset=0x644 align=1 (i32.const 0) (local.get 0x644)) (i64.store offset=0x645 align=1 (i32.const 0) (local.get 0x645)) (i64.store offset=0x646 align=1 (i32.const 0) (local.get 0x646)) (i64.store offset=0x647 align=1 (i32.const 0) (local.get 0x647)) (i64.store offset=0x648 align=1 (i32.const 0) (local.get 0x648)) (i64.store offset=0x649 align=1 (i32.const 0) (local.get 0x649)) (i64.store offset=0x64a align=1 (i32.const 0) (local.get 0x64a)) (i64.store offset=0x64b align=1 (i32.const 0) (local.get 0x64b)) (i64.store offset=0x64c align=1 (i32.const 0) (local.get 0x64c)) (i64.store offset=0x64d align=1 (i32.const 0) (local.get 0x64d)) (i64.store offset=0x64e align=1 (i32.const 0) (local.get 0x64e)) (i64.store offset=0x64f align=1 (i32.const 0) (local.get 0x64f)) (i64.store offset=0x650 align=1 (i32.const 0) (local.get 0x650)) (i64.store offset=0x651 align=1 (i32.const 0) (local.get 0x651)) (i64.store offset=0x652 align=1 (i32.const 0) (local.get 0x652)) (i64.store offset=0x653 align=1 (i32.const 0) (local.get 0x653)) (i64.store offset=0x654 align=1 (i32.const 0) (local.get 0x654)) (i64.store offset=0x655 align=1 (i32.const 0) (local.get 0x655)) (i64.store offset=0x656 align=1 (i32.const 0) (local.get 0x656)) (i64.store offset=0x657 align=1 (i32.const 0) (local.get 0x657)) (i64.store offset=0x658 align=1 (i32.const 0) (local.get 0x658)) (i64.store offset=0x659 align=1 (i32.const 0) (local.get 0x659)) (i64.store offset=0x65a align=1 (i32.const 0) (local.get 0x65a)) (i64.store offset=0x65b align=1 (i32.const 0) (local.get 0x65b)) (i64.store offset=0x65c align=1 (i32.const 0) (local.get 0x65c)) (i64.store offset=0x65d align=1 (i32.const 0) (local.get 0x65d)) (i64.store offset=0x65e align=1 (i32.const 0) (local.get 0x65e)) (i64.store offset=0x65f align=1 (i32.const 0) (local.get 0x65f)) (i64.store offset=0x660 align=1 (i32.const 0) (local.get 0x660)) (i64.store offset=0x661 align=1 (i32.const 0) (local.get 0x661)) (i64.store offset=0x662 align=1 (i32.const 0) (local.get 0x662)) (i64.store offset=0x663 align=1 (i32.const 0) (local.get 0x663)) (i64.store offset=0x664 align=1 (i32.const 0) (local.get 0x664)) (i64.store offset=0x665 align=1 (i32.const 0) (local.get 0x665)) (i64.store offset=0x666 align=1 (i32.const 0) (local.get 0x666)) (i64.store offset=0x667 align=1 (i32.const 0) (local.get 0x667)) (i64.store offset=0x668 align=1 (i32.const 0) (local.get 0x668)) (i64.store offset=0x669 align=1 (i32.const 0) (local.get 0x669)) (i64.store offset=0x66a align=1 (i32.const 0) (local.get 0x66a)) (i64.store offset=0x66b align=1 (i32.const 0) (local.get 0x66b)) (i64.store offset=0x66c align=1 (i32.const 0) (local.get 0x66c)) (i64.store offset=0x66d align=1 (i32.const 0) (local.get 0x66d)) (i64.store offset=0x66e align=1 (i32.const 0) (local.get 0x66e)) (i64.store offset=0x66f align=1 (i32.const 0) (local.get 0x66f)) (i64.store offset=0x670 align=1 (i32.const 0) (local.get 0x670)) (i64.store offset=0x671 align=1 (i32.const 0) (local.get 0x671)) (i64.store offset=0x672 align=1 (i32.const 0) (local.get 0x672)) (i64.store offset=0x673 align=1 (i32.const 0) (local.get 0x673)) (i64.store offset=0x674 align=1 (i32.const 0) (local.get 0x674)) (i64.store offset=0x675 align=1 (i32.const 0) (local.get 0x675)) (i64.store offset=0x676 align=1 (i32.const 0) (local.get 0x676)) (i64.store offset=0x677 align=1 (i32.const 0) (local.get 0x677)) (i64.store offset=0x678 align=1 (i32.const 0) (local.get 0x678)) (i64.store offset=0x679 align=1 (i32.const 0) (local.get 0x679)) (i64.store offset=0x67a align=1 (i32.const 0) (local.get 0x67a)) (i64.store offset=0x67b align=1 (i32.const 0) (local.get 0x67b)) (i64.store offset=0x67c align=1 (i32.const 0) (local.get 0x67c)) (i64.store offset=0x67d align=1 (i32.const 0) (local.get 0x67d)) (i64.store offset=0x67e align=1 (i32.const 0) (local.get 0x67e)) (i64.store offset=0x67f align=1 (i32.const 0) (local.get 0x67f)) (i64.store offset=0x680 align=1 (i32.const 0) (local.get 0x680)) (i64.store offset=0x681 align=1 (i32.const 0) (local.get 0x681)) (i64.store offset=0x682 align=1 (i32.const 0) (local.get 0x682)) (i64.store offset=0x683 align=1 (i32.const 0) (local.get 0x683)) (i64.store offset=0x684 align=1 (i32.const 0) (local.get 0x684)) (i64.store offset=0x685 align=1 (i32.const 0) (local.get 0x685)) (i64.store offset=0x686 align=1 (i32.const 0) (local.get 0x686)) (i64.store offset=0x687 align=1 (i32.const 0) (local.get 0x687)) (i64.store offset=0x688 align=1 (i32.const 0) (local.get 0x688)) (i64.store offset=0x689 align=1 (i32.const 0) (local.get 0x689)) (i64.store offset=0x68a align=1 (i32.const 0) (local.get 0x68a)) (i64.store offset=0x68b align=1 (i32.const 0) (local.get 0x68b)) (i64.store offset=0x68c align=1 (i32.const 0) (local.get 0x68c)) (i64.store offset=0x68d align=1 (i32.const 0) (local.get 0x68d)) (i64.store offset=0x68e align=1 (i32.const 0) (local.get 0x68e)) (i64.store offset=0x68f align=1 (i32.const 0) (local.get 0x68f)) (i64.store offset=0x690 align=1 (i32.const 0) (local.get 0x690)) (i64.store offset=0x691 align=1 (i32.const 0) (local.get 0x691)) (i64.store offset=0x692 align=1 (i32.const 0) (local.get 0x692)) (i64.store offset=0x693 align=1 (i32.const 0) (local.get 0x693)) (i64.store offset=0x694 align=1 (i32.const 0) (local.get 0x694)) (i64.store offset=0x695 align=1 (i32.const 0) (local.get 0x695)) (i64.store offset=0x696 align=1 (i32.const 0) (local.get 0x696)) (i64.store offset=0x697 align=1 (i32.const 0) (local.get 0x697)) (i64.store offset=0x698 align=1 (i32.const 0) (local.get 0x698)) (i64.store offset=0x699 align=1 (i32.const 0) (local.get 0x699)) (i64.store offset=0x69a align=1 (i32.const 0) (local.get 0x69a)) (i64.store offset=0x69b align=1 (i32.const 0) (local.get 0x69b)) (i64.store offset=0x69c align=1 (i32.const 0) (local.get 0x69c)) (i64.store offset=0x69d align=1 (i32.const 0) (local.get 0x69d)) (i64.store offset=0x69e align=1 (i32.const 0) (local.get 0x69e)) (i64.store offset=0x69f align=1 (i32.const 0) (local.get 0x69f)) (i64.store offset=0x6a0 align=1 (i32.const 0) (local.get 0x6a0)) (i64.store offset=0x6a1 align=1 (i32.const 0) (local.get 0x6a1)) (i64.store offset=0x6a2 align=1 (i32.const 0) (local.get 0x6a2)) (i64.store offset=0x6a3 align=1 (i32.const 0) (local.get 0x6a3)) (i64.store offset=0x6a4 align=1 (i32.const 0) (local.get 0x6a4)) (i64.store offset=0x6a5 align=1 (i32.const 0) (local.get 0x6a5)) (i64.store offset=0x6a6 align=1 (i32.const 0) (local.get 0x6a6)) (i64.store offset=0x6a7 align=1 (i32.const 0) (local.get 0x6a7)) (i64.store offset=0x6a8 align=1 (i32.const 0) (local.get 0x6a8)) (i64.store offset=0x6a9 align=1 (i32.const 0) (local.get 0x6a9)) (i64.store offset=0x6aa align=1 (i32.const 0) (local.get 0x6aa)) (i64.store offset=0x6ab align=1 (i32.const 0) (local.get 0x6ab)) (i64.store offset=0x6ac align=1 (i32.const 0) (local.get 0x6ac)) (i64.store offset=0x6ad align=1 (i32.const 0) (local.get 0x6ad)) (i64.store offset=0x6ae align=1 (i32.const 0) (local.get 0x6ae)) (i64.store offset=0x6af align=1 (i32.const 0) (local.get 0x6af)) (i64.store offset=0x6b0 align=1 (i32.const 0) (local.get 0x6b0)) (i64.store offset=0x6b1 align=1 (i32.const 0) (local.get 0x6b1)) (i64.store offset=0x6b2 align=1 (i32.const 0) (local.get 0x6b2)) (i64.store offset=0x6b3 align=1 (i32.const 0) (local.get 0x6b3)) (i64.store offset=0x6b4 align=1 (i32.const 0) (local.get 0x6b4)) (i64.store offset=0x6b5 align=1 (i32.const 0) (local.get 0x6b5)) (i64.store offset=0x6b6 align=1 (i32.const 0) (local.get 0x6b6)) (i64.store offset=0x6b7 align=1 (i32.const 0) (local.get 0x6b7)) (i64.store offset=0x6b8 align=1 (i32.const 0) (local.get 0x6b8)) (i64.store offset=0x6b9 align=1 (i32.const 0) (local.get 0x6b9)) (i64.store offset=0x6ba align=1 (i32.const 0) (local.get 0x6ba)) (i64.store offset=0x6bb align=1 (i32.const 0) (local.get 0x6bb)) (i64.store offset=0x6bc align=1 (i32.const 0) (local.get 0x6bc)) (i64.store offset=0x6bd align=1 (i32.const 0) (local.get 0x6bd)) (i64.store offset=0x6be align=1 (i32.const 0) (local.get 0x6be)) (i64.store offset=0x6bf align=1 (i32.const 0) (local.get 0x6bf)) (i64.store offset=0x6c0 align=1 (i32.const 0) (local.get 0x6c0)) (i64.store offset=0x6c1 align=1 (i32.const 0) (local.get 0x6c1)) (i64.store offset=0x6c2 align=1 (i32.const 0) (local.get 0x6c2)) (i64.store offset=0x6c3 align=1 (i32.const 0) (local.get 0x6c3)) (i64.store offset=0x6c4 align=1 (i32.const 0) (local.get 0x6c4)) (i64.store offset=0x6c5 align=1 (i32.const 0) (local.get 0x6c5)) (i64.store offset=0x6c6 align=1 (i32.const 0) (local.get 0x6c6)) (i64.store offset=0x6c7 align=1 (i32.const 0) (local.get 0x6c7)) (i64.store offset=0x6c8 align=1 (i32.const 0) (local.get 0x6c8)) (i64.store offset=0x6c9 align=1 (i32.const 0) (local.get 0x6c9)) (i64.store offset=0x6ca align=1 (i32.const 0) (local.get 0x6ca)) (i64.store offset=0x6cb align=1 (i32.const 0) (local.get 0x6cb)) (i64.store offset=0x6cc align=1 (i32.const 0) (local.get 0x6cc)) (i64.store offset=0x6cd align=1 (i32.const 0) (local.get 0x6cd)) (i64.store offset=0x6ce align=1 (i32.const 0) (local.get 0x6ce)) (i64.store offset=0x6cf align=1 (i32.const 0) (local.get 0x6cf)) (i64.store offset=0x6d0 align=1 (i32.const 0) (local.get 0x6d0)) (i64.store offset=0x6d1 align=1 (i32.const 0) (local.get 0x6d1)) (i64.store offset=0x6d2 align=1 (i32.const 0) (local.get 0x6d2)) (i64.store offset=0x6d3 align=1 (i32.const 0) (local.get 0x6d3)) (i64.store offset=0x6d4 align=1 (i32.const 0) (local.get 0x6d4)) (i64.store offset=0x6d5 align=1 (i32.const 0) (local.get 0x6d5)) (i64.store offset=0x6d6 align=1 (i32.const 0) (local.get 0x6d6)) (i64.store offset=0x6d7 align=1 (i32.const 0) (local.get 0x6d7)) (i64.store offset=0x6d8 align=1 (i32.const 0) (local.get 0x6d8)) (i64.store offset=0x6d9 align=1 (i32.const 0) (local.get 0x6d9)) (i64.store offset=0x6da align=1 (i32.const 0) (local.get 0x6da)) (i64.store offset=0x6db align=1 (i32.const 0) (local.get 0x6db)) (i64.store offset=0x6dc align=1 (i32.const 0) (local.get 0x6dc)) (i64.store offset=0x6dd align=1 (i32.const 0) (local.get 0x6dd)) (i64.store offset=0x6de align=1 (i32.const 0) (local.get 0x6de)) (i64.store offset=0x6df align=1 (i32.const 0) (local.get 0x6df)) (i64.store offset=0x6e0 align=1 (i32.const 0) (local.get 0x6e0)) (i64.store offset=0x6e1 align=1 (i32.const 0) (local.get 0x6e1)) (i64.store offset=0x6e2 align=1 (i32.const 0) (local.get 0x6e2)) (i64.store offset=0x6e3 align=1 (i32.const 0) (local.get 0x6e3)) (i64.store offset=0x6e4 align=1 (i32.const 0) (local.get 0x6e4)) (i64.store offset=0x6e5 align=1 (i32.const 0) (local.get 0x6e5)) (i64.store offset=0x6e6 align=1 (i32.const 0) (local.get 0x6e6)) (i64.store offset=0x6e7 align=1 (i32.const 0) (local.get 0x6e7)) (i64.store offset=0x6e8 align=1 (i32.const 0) (local.get 0x6e8)) (i64.store offset=0x6e9 align=1 (i32.const 0) (local.get 0x6e9)) (i64.store offset=0x6ea align=1 (i32.const 0) (local.get 0x6ea)) (i64.store offset=0x6eb align=1 (i32.const 0) (local.get 0x6eb)) (i64.store offset=0x6ec align=1 (i32.const 0) (local.get 0x6ec)) (i64.store offset=0x6ed align=1 (i32.const 0) (local.get 0x6ed)) (i64.store offset=0x6ee align=1 (i32.const 0) (local.get 0x6ee)) (i64.store offset=0x6ef align=1 (i32.const 0) (local.get 0x6ef)) (i64.store offset=0x6f0 align=1 (i32.const 0) (local.get 0x6f0)) (i64.store offset=0x6f1 align=1 (i32.const 0) (local.get 0x6f1)) (i64.store offset=0x6f2 align=1 (i32.const 0) (local.get 0x6f2)) (i64.store offset=0x6f3 align=1 (i32.const 0) (local.get 0x6f3)) (i64.store offset=0x6f4 align=1 (i32.const 0) (local.get 0x6f4)) (i64.store offset=0x6f5 align=1 (i32.const 0) (local.get 0x6f5)) (i64.store offset=0x6f6 align=1 (i32.const 0) (local.get 0x6f6)) (i64.store offset=0x6f7 align=1 (i32.const 0) (local.get 0x6f7)) (i64.store offset=0x6f8 align=1 (i32.const 0) (local.get 0x6f8)) (i64.store offset=0x6f9 align=1 (i32.const 0) (local.get 0x6f9)) (i64.store offset=0x6fa align=1 (i32.const 0) (local.get 0x6fa)) (i64.store offset=0x6fb align=1 (i32.const 0) (local.get 0x6fb)) (i64.store offset=0x6fc align=1 (i32.const 0) (local.get 0x6fc)) (i64.store offset=0x6fd align=1 (i32.const 0) (local.get 0x6fd)) (i64.store offset=0x6fe align=1 (i32.const 0) (local.get 0x6fe)) (i64.store offset=0x6ff align=1 (i32.const 0) (local.get 0x6ff)) (i64.store offset=0x700 align=1 (i32.const 0) (local.get 0x700)) (i64.store offset=0x701 align=1 (i32.const 0) (local.get 0x701)) (i64.store offset=0x702 align=1 (i32.const 0) (local.get 0x702)) (i64.store offset=0x703 align=1 (i32.const 0) (local.get 0x703)) (i64.store offset=0x704 align=1 (i32.const 0) (local.get 0x704)) (i64.store offset=0x705 align=1 (i32.const 0) (local.get 0x705)) (i64.store offset=0x706 align=1 (i32.const 0) (local.get 0x706)) (i64.store offset=0x707 align=1 (i32.const 0) (local.get 0x707)) (i64.store offset=0x708 align=1 (i32.const 0) (local.get 0x708)) (i64.store offset=0x709 align=1 (i32.const 0) (local.get 0x709)) (i64.store offset=0x70a align=1 (i32.const 0) (local.get 0x70a)) (i64.store offset=0x70b align=1 (i32.const 0) (local.get 0x70b)) (i64.store offset=0x70c align=1 (i32.const 0) (local.get 0x70c)) (i64.store offset=0x70d align=1 (i32.const 0) (local.get 0x70d)) (i64.store offset=0x70e align=1 (i32.const 0) (local.get 0x70e)) (i64.store offset=0x70f align=1 (i32.const 0) (local.get 0x70f)) (i64.store offset=0x710 align=1 (i32.const 0) (local.get 0x710)) (i64.store offset=0x711 align=1 (i32.const 0) (local.get 0x711)) (i64.store offset=0x712 align=1 (i32.const 0) (local.get 0x712)) (i64.store offset=0x713 align=1 (i32.const 0) (local.get 0x713)) (i64.store offset=0x714 align=1 (i32.const 0) (local.get 0x714)) (i64.store offset=0x715 align=1 (i32.const 0) (local.get 0x715)) (i64.store offset=0x716 align=1 (i32.const 0) (local.get 0x716)) (i64.store offset=0x717 align=1 (i32.const 0) (local.get 0x717)) (i64.store offset=0x718 align=1 (i32.const 0) (local.get 0x718)) (i64.store offset=0x719 align=1 (i32.const 0) (local.get 0x719)) (i64.store offset=0x71a align=1 (i32.const 0) (local.get 0x71a)) (i64.store offset=0x71b align=1 (i32.const 0) (local.get 0x71b)) (i64.store offset=0x71c align=1 (i32.const 0) (local.get 0x71c)) (i64.store offset=0x71d align=1 (i32.const 0) (local.get 0x71d)) (i64.store offset=0x71e align=1 (i32.const 0) (local.get 0x71e)) (i64.store offset=0x71f align=1 (i32.const 0) (local.get 0x71f)) (i64.store offset=0x720 align=1 (i32.const 0) (local.get 0x720)) (i64.store offset=0x721 align=1 (i32.const 0) (local.get 0x721)) (i64.store offset=0x722 align=1 (i32.const 0) (local.get 0x722)) (i64.store offset=0x723 align=1 (i32.const 0) (local.get 0x723)) (i64.store offset=0x724 align=1 (i32.const 0) (local.get 0x724)) (i64.store offset=0x725 align=1 (i32.const 0) (local.get 0x725)) (i64.store offset=0x726 align=1 (i32.const 0) (local.get 0x726)) (i64.store offset=0x727 align=1 (i32.const 0) (local.get 0x727)) (i64.store offset=0x728 align=1 (i32.const 0) (local.get 0x728)) (i64.store offset=0x729 align=1 (i32.const 0) (local.get 0x729)) (i64.store offset=0x72a align=1 (i32.const 0) (local.get 0x72a)) (i64.store offset=0x72b align=1 (i32.const 0) (local.get 0x72b)) (i64.store offset=0x72c align=1 (i32.const 0) (local.get 0x72c)) (i64.store offset=0x72d align=1 (i32.const 0) (local.get 0x72d)) (i64.store offset=0x72e align=1 (i32.const 0) (local.get 0x72e)) (i64.store offset=0x72f align=1 (i32.const 0) (local.get 0x72f)) (i64.store offset=0x730 align=1 (i32.const 0) (local.get 0x730)) (i64.store offset=0x731 align=1 (i32.const 0) (local.get 0x731)) (i64.store offset=0x732 align=1 (i32.const 0) (local.get 0x732)) (i64.store offset=0x733 align=1 (i32.const 0) (local.get 0x733)) (i64.store offset=0x734 align=1 (i32.const 0) (local.get 0x734)) (i64.store offset=0x735 align=1 (i32.const 0) (local.get 0x735)) (i64.store offset=0x736 align=1 (i32.const 0) (local.get 0x736)) (i64.store offset=0x737 align=1 (i32.const 0) (local.get 0x737)) (i64.store offset=0x738 align=1 (i32.const 0) (local.get 0x738)) (i64.store offset=0x739 align=1 (i32.const 0) (local.get 0x739)) (i64.store offset=0x73a align=1 (i32.const 0) (local.get 0x73a)) (i64.store offset=0x73b align=1 (i32.const 0) (local.get 0x73b)) (i64.store offset=0x73c align=1 (i32.const 0) (local.get 0x73c)) (i64.store offset=0x73d align=1 (i32.const 0) (local.get 0x73d)) (i64.store offset=0x73e align=1 (i32.const 0) (local.get 0x73e)) (i64.store offset=0x73f align=1 (i32.const 0) (local.get 0x73f)) (i64.store offset=0x740 align=1 (i32.const 0) (local.get 0x740)) (i64.store offset=0x741 align=1 (i32.const 0) (local.get 0x741)) (i64.store offset=0x742 align=1 (i32.const 0) (local.get 0x742)) (i64.store offset=0x743 align=1 (i32.const 0) (local.get 0x743)) (i64.store offset=0x744 align=1 (i32.const 0) (local.get 0x744)) (i64.store offset=0x745 align=1 (i32.const 0) (local.get 0x745)) (i64.store offset=0x746 align=1 (i32.const 0) (local.get 0x746)) (i64.store offset=0x747 align=1 (i32.const 0) (local.get 0x747)) (i64.store offset=0x748 align=1 (i32.const 0) (local.get 0x748)) (i64.store offset=0x749 align=1 (i32.const 0) (local.get 0x749)) (i64.store offset=0x74a align=1 (i32.const 0) (local.get 0x74a)) (i64.store offset=0x74b align=1 (i32.const 0) (local.get 0x74b)) (i64.store offset=0x74c align=1 (i32.const 0) (local.get 0x74c)) (i64.store offset=0x74d align=1 (i32.const 0) (local.get 0x74d)) (i64.store offset=0x74e align=1 (i32.const 0) (local.get 0x74e)) (i64.store offset=0x74f align=1 (i32.const 0) (local.get 0x74f)) (i64.store offset=0x750 align=1 (i32.const 0) (local.get 0x750)) (i64.store offset=0x751 align=1 (i32.const 0) (local.get 0x751)) (i64.store offset=0x752 align=1 (i32.const 0) (local.get 0x752)) (i64.store offset=0x753 align=1 (i32.const 0) (local.get 0x753)) (i64.store offset=0x754 align=1 (i32.const 0) (local.get 0x754)) (i64.store offset=0x755 align=1 (i32.const 0) (local.get 0x755)) (i64.store offset=0x756 align=1 (i32.const 0) (local.get 0x756)) (i64.store offset=0x757 align=1 (i32.const 0) (local.get 0x757)) (i64.store offset=0x758 align=1 (i32.const 0) (local.get 0x758)) (i64.store offset=0x759 align=1 (i32.const 0) (local.get 0x759)) (i64.store offset=0x75a align=1 (i32.const 0) (local.get 0x75a)) (i64.store offset=0x75b align=1 (i32.const 0) (local.get 0x75b)) (i64.store offset=0x75c align=1 (i32.const 0) (local.get 0x75c)) (i64.store offset=0x75d align=1 (i32.const 0) (local.get 0x75d)) (i64.store offset=0x75e align=1 (i32.const 0) (local.get 0x75e)) (i64.store offset=0x75f align=1 (i32.const 0) (local.get 0x75f)) (i64.store offset=0x760 align=1 (i32.const 0) (local.get 0x760)) (i64.store offset=0x761 align=1 (i32.const 0) (local.get 0x761)) (i64.store offset=0x762 align=1 (i32.const 0) (local.get 0x762)) (i64.store offset=0x763 align=1 (i32.const 0) (local.get 0x763)) (i64.store offset=0x764 align=1 (i32.const 0) (local.get 0x764)) (i64.store offset=0x765 align=1 (i32.const 0) (local.get 0x765)) (i64.store offset=0x766 align=1 (i32.const 0) (local.get 0x766)) (i64.store offset=0x767 align=1 (i32.const 0) (local.get 0x767)) (i64.store offset=0x768 align=1 (i32.const 0) (local.get 0x768)) (i64.store offset=0x769 align=1 (i32.const 0) (local.get 0x769)) (i64.store offset=0x76a align=1 (i32.const 0) (local.get 0x76a)) (i64.store offset=0x76b align=1 (i32.const 0) (local.get 0x76b)) (i64.store offset=0x76c align=1 (i32.const 0) (local.get 0x76c)) (i64.store offset=0x76d align=1 (i32.const 0) (local.get 0x76d)) (i64.store offset=0x76e align=1 (i32.const 0) (local.get 0x76e)) (i64.store offset=0x76f align=1 (i32.const 0) (local.get 0x76f)) (i64.store offset=0x770 align=1 (i32.const 0) (local.get 0x770)) (i64.store offset=0x771 align=1 (i32.const 0) (local.get 0x771)) (i64.store offset=0x772 align=1 (i32.const 0) (local.get 0x772)) (i64.store offset=0x773 align=1 (i32.const 0) (local.get 0x773)) (i64.store offset=0x774 align=1 (i32.const 0) (local.get 0x774)) (i64.store offset=0x775 align=1 (i32.const 0) (local.get 0x775)) (i64.store offset=0x776 align=1 (i32.const 0) (local.get 0x776)) (i64.store offset=0x777 align=1 (i32.const 0) (local.get 0x777)) (i64.store offset=0x778 align=1 (i32.const 0) (local.get 0x778)) (i64.store offset=0x779 align=1 (i32.const 0) (local.get 0x779)) (i64.store offset=0x77a align=1 (i32.const 0) (local.get 0x77a)) (i64.store offset=0x77b align=1 (i32.const 0) (local.get 0x77b)) (i64.store offset=0x77c align=1 (i32.const 0) (local.get 0x77c)) (i64.store offset=0x77d align=1 (i32.const 0) (local.get 0x77d)) (i64.store offset=0x77e align=1 (i32.const 0) (local.get 0x77e)) (i64.store offset=0x77f align=1 (i32.const 0) (local.get 0x77f)) (i64.store offset=0x780 align=1 (i32.const 0) (local.get 0x780)) (i64.store offset=0x781 align=1 (i32.const 0) (local.get 0x781)) (i64.store offset=0x782 align=1 (i32.const 0) (local.get 0x782)) (i64.store offset=0x783 align=1 (i32.const 0) (local.get 0x783)) (i64.store offset=0x784 align=1 (i32.const 0) (local.get 0x784)) (i64.store offset=0x785 align=1 (i32.const 0) (local.get 0x785)) (i64.store offset=0x786 align=1 (i32.const 0) (local.get 0x786)) (i64.store offset=0x787 align=1 (i32.const 0) (local.get 0x787)) (i64.store offset=0x788 align=1 (i32.const 0) (local.get 0x788)) (i64.store offset=0x789 align=1 (i32.const 0) (local.get 0x789)) (i64.store offset=0x78a align=1 (i32.const 0) (local.get 0x78a)) (i64.store offset=0x78b align=1 (i32.const 0) (local.get 0x78b)) (i64.store offset=0x78c align=1 (i32.const 0) (local.get 0x78c)) (i64.store offset=0x78d align=1 (i32.const 0) (local.get 0x78d)) (i64.store offset=0x78e align=1 (i32.const 0) (local.get 0x78e)) (i64.store offset=0x78f align=1 (i32.const 0) (local.get 0x78f)) (i64.store offset=0x790 align=1 (i32.const 0) (local.get 0x790)) (i64.store offset=0x791 align=1 (i32.const 0) (local.get 0x791)) (i64.store offset=0x792 align=1 (i32.const 0) (local.get 0x792)) (i64.store offset=0x793 align=1 (i32.const 0) (local.get 0x793)) (i64.store offset=0x794 align=1 (i32.const 0) (local.get 0x794)) (i64.store offset=0x795 align=1 (i32.const 0) (local.get 0x795)) (i64.store offset=0x796 align=1 (i32.const 0) (local.get 0x796)) (i64.store offset=0x797 align=1 (i32.const 0) (local.get 0x797)) (i64.store offset=0x798 align=1 (i32.const 0) (local.get 0x798)) (i64.store offset=0x799 align=1 (i32.const 0) (local.get 0x799)) (i64.store offset=0x79a align=1 (i32.const 0) (local.get 0x79a)) (i64.store offset=0x79b align=1 (i32.const 0) (local.get 0x79b)) (i64.store offset=0x79c align=1 (i32.const 0) (local.get 0x79c)) (i64.store offset=0x79d align=1 (i32.const 0) (local.get 0x79d)) (i64.store offset=0x79e align=1 (i32.const 0) (local.get 0x79e)) (i64.store offset=0x79f align=1 (i32.const 0) (local.get 0x79f)) (i64.store offset=0x7a0 align=1 (i32.const 0) (local.get 0x7a0)) (i64.store offset=0x7a1 align=1 (i32.const 0) (local.get 0x7a1)) (i64.store offset=0x7a2 align=1 (i32.const 0) (local.get 0x7a2)) (i64.store offset=0x7a3 align=1 (i32.const 0) (local.get 0x7a3)) (i64.store offset=0x7a4 align=1 (i32.const 0) (local.get 0x7a4)) (i64.store offset=0x7a5 align=1 (i32.const 0) (local.get 0x7a5)) (i64.store offset=0x7a6 align=1 (i32.const 0) (local.get 0x7a6)) (i64.store offset=0x7a7 align=1 (i32.const 0) (local.get 0x7a7)) (i64.store offset=0x7a8 align=1 (i32.const 0) (local.get 0x7a8)) (i64.store offset=0x7a9 align=1 (i32.const 0) (local.get 0x7a9)) (i64.store offset=0x7aa align=1 (i32.const 0) (local.get 0x7aa)) (i64.store offset=0x7ab align=1 (i32.const 0) (local.get 0x7ab)) (i64.store offset=0x7ac align=1 (i32.const 0) (local.get 0x7ac)) (i64.store offset=0x7ad align=1 (i32.const 0) (local.get 0x7ad)) (i64.store offset=0x7ae align=1 (i32.const 0) (local.get 0x7ae)) (i64.store offset=0x7af align=1 (i32.const 0) (local.get 0x7af)) (i64.store offset=0x7b0 align=1 (i32.const 0) (local.get 0x7b0)) (i64.store offset=0x7b1 align=1 (i32.const 0) (local.get 0x7b1)) (i64.store offset=0x7b2 align=1 (i32.const 0) (local.get 0x7b2)) (i64.store offset=0x7b3 align=1 (i32.const 0) (local.get 0x7b3)) (i64.store offset=0x7b4 align=1 (i32.const 0) (local.get 0x7b4)) (i64.store offset=0x7b5 align=1 (i32.const 0) (local.get 0x7b5)) (i64.store offset=0x7b6 align=1 (i32.const 0) (local.get 0x7b6)) (i64.store offset=0x7b7 align=1 (i32.const 0) (local.get 0x7b7)) (i64.store offset=0x7b8 align=1 (i32.const 0) (local.get 0x7b8)) (i64.store offset=0x7b9 align=1 (i32.const 0) (local.get 0x7b9)) (i64.store offset=0x7ba align=1 (i32.const 0) (local.get 0x7ba)) (i64.store offset=0x7bb align=1 (i32.const 0) (local.get 0x7bb)) (i64.store offset=0x7bc align=1 (i32.const 0) (local.get 0x7bc)) (i64.store offset=0x7bd align=1 (i32.const 0) (local.get 0x7bd)) (i64.store offset=0x7be align=1 (i32.const 0) (local.get 0x7be)) (i64.store offset=0x7bf align=1 (i32.const 0) (local.get 0x7bf)) (i64.store offset=0x7c0 align=1 (i32.const 0) (local.get 0x7c0)) (i64.store offset=0x7c1 align=1 (i32.const 0) (local.get 0x7c1)) (i64.store offset=0x7c2 align=1 (i32.const 0) (local.get 0x7c2)) (i64.store offset=0x7c3 align=1 (i32.const 0) (local.get 0x7c3)) (i64.store offset=0x7c4 align=1 (i32.const 0) (local.get 0x7c4)) (i64.store offset=0x7c5 align=1 (i32.const 0) (local.get 0x7c5)) (i64.store offset=0x7c6 align=1 (i32.const 0) (local.get 0x7c6)) (i64.store offset=0x7c7 align=1 (i32.const 0) (local.get 0x7c7)) (i64.store offset=0x7c8 align=1 (i32.const 0) (local.get 0x7c8)) (i64.store offset=0x7c9 align=1 (i32.const 0) (local.get 0x7c9)) (i64.store offset=0x7ca align=1 (i32.const 0) (local.get 0x7ca)) (i64.store offset=0x7cb align=1 (i32.const 0) (local.get 0x7cb)) (i64.store offset=0x7cc align=1 (i32.const 0) (local.get 0x7cc)) (i64.store offset=0x7cd align=1 (i32.const 0) (local.get 0x7cd)) (i64.store offset=0x7ce align=1 (i32.const 0) (local.get 0x7ce)) (i64.store offset=0x7cf align=1 (i32.const 0) (local.get 0x7cf)) (i64.store offset=0x7d0 align=1 (i32.const 0) (local.get 0x7d0)) (i64.store offset=0x7d1 align=1 (i32.const 0) (local.get 0x7d1)) (i64.store offset=0x7d2 align=1 (i32.const 0) (local.get 0x7d2)) (i64.store offset=0x7d3 align=1 (i32.const 0) (local.get 0x7d3)) (i64.store offset=0x7d4 align=1 (i32.const 0) (local.get 0x7d4)) (i64.store offset=0x7d5 align=1 (i32.const 0) (local.get 0x7d5)) (i64.store offset=0x7d6 align=1 (i32.const 0) (local.get 0x7d6)) (i64.store offset=0x7d7 align=1 (i32.const 0) (local.get 0x7d7)) (i64.store offset=0x7d8 align=1 (i32.const 0) (local.get 0x7d8)) (i64.store offset=0x7d9 align=1 (i32.const 0) (local.get 0x7d9)) (i64.store offset=0x7da align=1 (i32.const 0) (local.get 0x7da)) (i64.store offset=0x7db align=1 (i32.const 0) (local.get 0x7db)) (i64.store offset=0x7dc align=1 (i32.const 0) (local.get 0x7dc)) (i64.store offset=0x7dd align=1 (i32.const 0) (local.get 0x7dd)) (i64.store offset=0x7de align=1 (i32.const 0) (local.get 0x7de)) (i64.store offset=0x7df align=1 (i32.const 0) (local.get 0x7df)) (i64.store offset=0x7e0 align=1 (i32.const 0) (local.get 0x7e0)) (i64.store offset=0x7e1 align=1 (i32.const 0) (local.get 0x7e1)) (i64.store offset=0x7e2 align=1 (i32.const 0) (local.get 0x7e2)) (i64.store offset=0x7e3 align=1 (i32.const 0) (local.get 0x7e3)) (i64.store offset=0x7e4 align=1 (i32.const 0) (local.get 0x7e4)) (i64.store offset=0x7e5 align=1 (i32.const 0) (local.get 0x7e5)) (i64.store offset=0x7e6 align=1 (i32.const 0) (local.get 0x7e6)) (i64.store offset=0x7e7 align=1 (i32.const 0) (local.get 0x7e7)) (i64.store offset=0x7e8 align=1 (i32.const 0) (local.get 0x7e8)) (i64.store offset=0x7e9 align=1 (i32.const 0) (local.get 0x7e9)) (i64.store offset=0x7ea align=1 (i32.const 0) (local.get 0x7ea)) (i64.store offset=0x7eb align=1 (i32.const 0) (local.get 0x7eb)) (i64.store offset=0x7ec align=1 (i32.const 0) (local.get 0x7ec)) (i64.store offset=0x7ed align=1 (i32.const 0) (local.get 0x7ed)) (i64.store offset=0x7ee align=1 (i32.const 0) (local.get 0x7ee)) (i64.store offset=0x7ef align=1 (i32.const 0) (local.get 0x7ef)) (i64.store offset=0x7f0 align=1 (i32.const 0) (local.get 0x7f0)) (i64.store offset=0x7f1 align=1 (i32.const 0) (local.get 0x7f1)) (i64.store offset=0x7f2 align=1 (i32.const 0) (local.get 0x7f2)) (i64.store offset=0x7f3 align=1 (i32.const 0) (local.get 0x7f3)) (i64.store offset=0x7f4 align=1 (i32.const 0) (local.get 0x7f4)) (i64.store offset=0x7f5 align=1 (i32.const 0) (local.get 0x7f5)) (i64.store offset=0x7f6 align=1 (i32.const 0) (local.get 0x7f6)) (i64.store offset=0x7f7 align=1 (i32.const 0) (local.get 0x7f7)) (i64.store offset=0x7f8 align=1 (i32.const 0) (local.get 0x7f8)) (i64.store offset=0x7f9 align=1 (i32.const 0) (local.get 0x7f9)) (i64.store offset=0x7fa align=1 (i32.const 0) (local.get 0x7fa)) (i64.store offset=0x7fb align=1 (i32.const 0) (local.get 0x7fb)) (i64.store offset=0x7fc align=1 (i32.const 0) (local.get 0x7fc)) (i64.store offset=0x7fd align=1 (i32.const 0) (local.get 0x7fd)) (i64.store offset=0x7fe align=1 (i32.const 0) (local.get 0x7fe)) (i64.store offset=0x7ff align=1 (i32.const 0) (local.get 0x7ff)) ) ) (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") ================================================ FILE: Test/wavm/syntax_recursion.wast ================================================ (module (func (export "(block)") (result i32) (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block (block i32.const 1000 return )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) unreachable ) ) (assert_return (invoke "(block)") (i32.const 1000)) (module (func (export "(loop)") (result i32) (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop i32.const 2000 return )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) unreachable ) ) (assert_return (invoke "(loop)") (i32.const 2000)) (module (func (export "block") (result i32) block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block block i32.const 3000 return end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end unreachable ) ) (assert_return (invoke "block") (i32.const 3000)) (module (func (export "loop") (result i32) loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop loop i32.const 4000 return end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end unreachable ) ) (assert_return (invoke "loop") (i32.const 4000)) (module (func (export "(br_table)") (result i32) (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (return (i32.const 5000)) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) unreachable ) ) (assert_return (invoke "(br_table)") (i32.const 5000)) (assert_malformed (module quote "(func (export \"(block)\") (result i32)" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block (block (block (block (block (block (block (block (block (block" " (block" " i32.const 1000" " return" " )" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " unreachable" ")" ) "exceeded maximum recursion depth") (assert_malformed (module quote "(func (export \"(loop)\") (result i32)" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop (loop (loop (loop (loop (loop (loop (loop (loop (loop" " (loop" " i32.const 2000" " return" " )" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " unreachable" ")" ) "exceeded maximum recursion depth") (assert_malformed (module quote "(func (export \"block\") (result i32)" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block block block block block block block block block block" " block" " i32.const 3000" " return" " end" " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " unreachable" ")" ) "exceeded maximum recursion depth") (assert_malformed (module quote "(func (export \"loop\") (result i32)" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " loop loop loop loop loop loop loop loop loop loop" " block" " i32.const 3000" " return" " end" " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end " " unreachable" ")" ) "exceeded maximum recursion depth") (assert_malformed (module quote "(func (export \"(br_table)\") (result i32)" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0 (br_table 0" " (return (i32.const 5000))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" " unreachable" ")" ) "exceeded maximum recursion depth") ================================================ FILE: Test/wavm/threads.wast ================================================ (module (import "threadTest" "createThread" (func $threadTest.createThread (param funcref i32) (result i64))) (import "threadTest" "exitThread" (func $threadTest.exitThread (param i64))) (import "threadTest" "detachThread" (func $threadTest.detachThread (param i64))) (import "threadTest" "joinThread" (func $threadTest.joinThread (param i64) (result i64))) (memory 1 1 shared) (elem declare $createThreadEntry $createThreadEntry2) (data "x") (global $atomicAccumulatorAddress i32 (i32.const 0)) (func $initAccumulator (i64.atomic.store (global.get $atomicAccumulatorAddress) (i64.const 0)) ) (func $atomicAccumulate (param $addend i64) (drop (i64.atomic.rmw.add (global.get $atomicAccumulatorAddress) (local.get $addend))) ) (func $getAccumulator (result i64) (i64.atomic.load (global.get $atomicAccumulatorAddress))) (func $createThreadEntry (param $argument i32) (result i64) (call $atomicAccumulate (i64.extend_i32_u (local.get $argument))) i64.const 100 ) (func (export "createThreadWithReturn") (result i64) (call $initAccumulator) (call $threadTest.joinThread (call $threadTest.createThread (ref.func $createThreadEntry) (i32.const 11))) (return (call $getAccumulator)) ) (func $createThreadEntry2 (param $argument i32) (result i64) (call $atomicAccumulate (i64.extend_i32_u (local.get $argument))) (call $threadTest.exitThread (i64.const 200)) unreachable ) (func (export "createThreadWithExit") (result i64) (call $initAccumulator) (call $threadTest.joinThread (call $threadTest.createThread (ref.func $createThreadEntry2) (i32.const 11))) (return (call $getAccumulator)) ) (func (export "memory.atomic.notify") (param $numWaiters i32) (param $address i32) (result i32) (memory.atomic.notify (local.get $numWaiters) (local.get $address)) ) (func (export "memory.atomic.wait32") (param $address i32) (param $expectedValue i32) (param $timeout i64) (result i32) (memory.atomic.wait32 (local.get $address) (local.get $expectedValue) (local.get $timeout)) ) (func (export "memory.atomic.wait64") (param $address i32) (param $expectedValue i64) (param $timeout i64) (result i32) (memory.atomic.wait64 (local.get $address) (local.get $expectedValue) (local.get $timeout)) ) ) (assert_return (invoke "createThreadWithReturn") (i64.const 11)) (assert_return (invoke "createThreadWithExit") (i64.const 11)) ;; Cross-thread wait/notify tests (module (import "threadTest" "createThread" (func $threadTest.createThread (param funcref i32) (result i64))) (import "threadTest" "joinThread" (func $threadTest.joinThread (param i64) (result i64))) (memory 1 1 shared) (elem declare $wait32ThreadEntry $wait64ThreadEntry) ;; Memory layout: ;; addr 0: value being waited on (i32 for wait32, i64 for wait64) ;; addr 16: ready flag (i32, set to 1 by thread before calling wait) ;; Thread entry: sets ready flag, then waits on addr 0 expecting i32 value 0 (func $wait32ThreadEntry (param $argument i32) (result i64) ;; Set the ready flag to signal we're about to wait (i32.atomic.store (i32.const 16) (i32.const 1)) ;; Wait on address 0, expecting value 0, with infinite timeout (i64.extend_i32_u (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const -1))) ) ;; Thread entry: sets ready flag, then waits on addr 0 expecting i64 value 0 (func $wait64ThreadEntry (param $argument i32) (result i64) ;; Set the ready flag to signal we're about to wait (i32.atomic.store (i32.const 16) (i32.const 1)) ;; Wait on address 0, expecting value 0, with infinite timeout (i64.extend_i32_u (memory.atomic.wait64 (i32.const 0) (i64.const 0) (i64.const -1))) ) (func (export "testWait32Notify") (result i64) (local $thread i64) ;; Initialize: clear wait address and ready flag (i32.atomic.store (i32.const 0) (i32.const 0)) (i32.atomic.store (i32.const 16) (i32.const 0)) ;; Create thread that will wait on addr 0 (local.set $thread (call $threadTest.createThread (ref.func $wait32ThreadEntry) (i32.const 0))) ;; Spin until the ready flag is set (block $break (loop $spin (br_if $break (i32.atomic.load (i32.const 16))) (br $spin) ) ) ;; Spin-notify until a waiter is woken (block $done (loop $notify_loop (br_if $done (i32.gt_u (memory.atomic.notify (i32.const 0) (i32.const 1)) (i32.const 0))) (br $notify_loop) ) ) ;; Join thread and return its result (should be 0 = "woken") (call $threadTest.joinThread (local.get $thread)) ) (func (export "testWait64Notify") (result i64) (local $thread i64) ;; Initialize: clear wait address and ready flag (i64.atomic.store (i32.const 0) (i64.const 0)) (i32.atomic.store (i32.const 16) (i32.const 0)) ;; Create thread that will wait on addr 0 (local.set $thread (call $threadTest.createThread (ref.func $wait64ThreadEntry) (i32.const 0))) ;; Spin until the ready flag is set (block $break (loop $spin (br_if $break (i32.atomic.load (i32.const 16))) (br $spin) ) ) ;; Spin-notify until a waiter is woken (block $done (loop $notify_loop (br_if $done (i32.gt_u (memory.atomic.notify (i32.const 0) (i32.const 1)) (i32.const 0))) (br $notify_loop) ) ) ;; Join thread and return its result (should be 0 = "woken") (call $threadTest.joinThread (local.get $thread)) ) ) ;; wait32 + notify: thread should return 0 (woken) (assert_return (invoke "testWait32Notify") (i64.const 0)) ;; wait64 + notify: thread should return 0 (woken) (assert_return (invoke "testWait64Notify") (i64.const 0)) ================================================ FILE: Test/wavm/trunc_sat.wast ================================================ (module (import "spectest" "print_f32" (func $spectest_print_f32 (param f32))) (import "spectest" "print_f64" (func $spectest_print_f64 (param f64))) (import "spectest" "print_i32" (func $spectest_print_i32 (param i32))) (import "spectest" "print_i64" (func $spectest_print_i64 (param i64))) (table 4 funcref) (elem (i32.const 0) (; 0 ;) $i32_trunc_s_sat_f32 (; 1 ;) $emulated_i32_trunc_s_sat_f32 (; 2 ;) $i32_trunc_u_sat_f32 (; 3 ;) $emulated_i32_trunc_u_sat_f32 ) (type $f32_to_i32 (func (param f32) (result i32))) (func $i32_trunc_s_sat_f32 (export "i32.trunc_sat_f32_s") (param $a f32) (result i32) (i32.trunc_sat_f32_s (local.get $a))) (func $i32_trunc_u_sat_f32 (export "i32.trunc_sat_f32_u") (param $a f32) (result i32) (i32.trunc_sat_f32_u (local.get $a))) (func $i32_trunc_s_sat_f64 (export "i32.trunc_sat_f64_s") (param $a f64) (result i32) (i32.trunc_sat_f64_s (local.get $a))) (func $i32_trunc_u_sat_f64 (export "i32.trunc_sat_f64_u") (param $a f64) (result i32) (i32.trunc_sat_f64_u (local.get $a))) (func $i64_trunc_s_sat_f32 (export "i64.trunc_sat_f32_s") (param $a f32) (result i64) (i64.trunc_sat_f32_s (local.get $a))) (func $i64_trunc_u_sat_f32 (export "i64.trunc_sat_f32_u") (param $a f32) (result i64) (i64.trunc_sat_f32_u (local.get $a))) (func $i64_trunc_s_sat_f64 (export "i64.trunc_sat_f64_s") (param $a f64) (result i64) (i64.trunc_sat_f64_s (local.get $a))) (func $i64_trunc_u_sat_f64 (export "i64.trunc_sat_f64_u") (param $a f64) (result i64) (i64.trunc_sat_f64_u (local.get $a))) (func $emulated_i32_trunc_s_sat_f32 (param $f f32) (result i32) ;; return 0 if the input is a NaN (br_if 0 (i32.const 0) (f32.ne (local.get $f) (local.get $f))) ;; return INT32_MIN if the input is less than it. (br_if 0 (i32.const -2147483648) (f32.le (local.get $f) (f32.const -2147483648.0))) ;; return INT32_MAX if the input is greater than it. (br_if 0 (i32.const 2147483647) (f32.ge (local.get $f) (f32.const 2147483647.0))) ;; otherwise, return the result of the non-saturating trunc instruction. (return (i32.trunc_f32_s (local.get $f))) ) (func $emulated_i32_trunc_u_sat_f32 (param $f f32) (result i32) ;; return 0 if the input is a NaN (br_if 0 (i32.const 0) (f32.ne (local.get $f) (local.get $f))) ;; return UINT32_MIN if the input is less than it. (br_if 0 (i32.const 0) (f32.le (local.get $f) (f32.const 0.0))) ;; return UINT32_MAX if the input is greater than it. (br_if 0 (i32.const 4294967295) (f32.ge (local.get $f) (f32.const 4294967295.0))) ;; otherwise, return the result of the non-saturating trunc instruction. (return (i32.trunc_f32_u (local.get $f))) ) (func $test_all_f32_to_i32 (param $funcA i32) (param $funcB i32) (result i32) ;; loop over all 32-bit values and compare the result of the emulated instruction with the actual instruction. (local $i i32) loop $loop (i32.ne (call_indirect (type $f32_to_i32) (f32.reinterpret_i32 (local.get $i)) (local.get $funcA)) (call_indirect (type $f32_to_i32) (f32.reinterpret_i32 (local.get $i)) (local.get $funcB)) ) if (call $spectest_print_f32 (f32.reinterpret_i32 (local.get $i))) (call $spectest_print_i32 (call_indirect (type $f32_to_i32) (f32.reinterpret_i32 (local.get $i)) (local.get $funcA))) (call $spectest_print_i32 (call_indirect (type $f32_to_i32) (f32.reinterpret_i32 (local.get $i)) (local.get $funcB))) (return (i32.const 0)) end (local.set $i (i32.add (i32.const 1) (local.get $i))) (br_if $loop (i32.ne (local.get $i) (i32.const 0))) end (return (i32.const 1)) ) (func (export "test all i32.trunc_sat_f32_s") (result i32) (return (call $test_all_f32_to_i32 (i32.const 0) (i32.const 1)))) (func (export "test all i32.trunc_sat_f32_u") (result i32) (return (call $test_all_f32_to_i32 (i32.const 2) (i32.const 3)))) ) ;; i32.trunc_sat_f32_s ;;(assert_return (invoke "test all i32.trunc_sat_f32_s") (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const 2147483648.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -2147483904.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const inf)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -inf)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i32.const 0)) ;; i32.trunc_sat_f32_u ;;(assert_return (invoke "test all i32.trunc_sat_f32_u") (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967040.0)) (i32.const 4294967040)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967295.0)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const 4294967296.0)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -1.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const inf)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -inf)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const 2147483648.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -2147483649.0)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const inf)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -inf)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 4294967296.0)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -1.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e16)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 1e30)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const inf)) (i32.const 4294967295)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -inf)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan)) (i32.const 0)) (assert_return (invoke "i32.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const 9223372036854775808.0)) (i64.const 9223372036854775807)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -9223373136366403584.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const inf)) (i64.const 9223372036854775807)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -inf)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_s" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const 18446744073709551616.0)) (i64.const 18446744073709551615)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -1.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const inf)) (i64.const 18446744073709551615)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -inf)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f32_u" (f32.const -nan:0x200000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const 9223372036854775808.0)) (i64.const 9223372036854775807)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -9223372036854777856.0)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const inf)) (i64.const 9223372036854775807)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -inf)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_s" (f64.const -nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const 18446744073709551616.0)) (i64.const 18446744073709551615)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -1.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const inf)) (i64.const 18446744073709551615)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -inf)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const nan:0x4000000000000)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan)) (i64.const 0)) (assert_return (invoke "i64.trunc_sat_f64_u" (f64.const -nan:0x4000000000000)) (i64.const 0)) ================================================ FILE: Test/wavm/wat_custom_section.wast ================================================ (module (custom_section "a" "") ) (module (type (func)) (custom_section "b" (after type) "") ) (module (import "spectest" "print_i32" (func (param i32))) (custom_section "c" (after import) "") ) (module (func) (custom_section "d" (after func) "") ) (module (table 0 0 funcref) (custom_section "e" (after table) "") ) (module (memory 1) (custom_section "f" (after memory) "") ) (module (global i32 (i32.const 0)) (custom_section "g" (after global) "") ) (module (exception_type) (custom_section "h" (after exception_type) "") ) (module (func) (export "func" (func 0)) (custom_section "i" (after export) "") ) (module (func) (start 0) (custom_section "j" (after start) "") ) (module (elem) (custom_section "j" (after elem) "") ) (module (data) (custom_section "k" (after data_count) "") ) (module (func) (custom_section "l" (after code) "") ) (module (data) (custom_section "m" (after data) "") ) ;; Custom sections after non-present virtual sections (assert_malformed (module quote "(custom_section \"b\" (after type) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"c\" (after import) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"d\" (after func) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"e\" (after table) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"f\" (after memory) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"g\" (after global) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"h\" (after exception_type) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"i\" (after export) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"j\" (after start) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"j\" (after elem) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"k\" (after data_count) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"l\" (after code) \"\")") "custom section is after a virtual section that is not present" ) (assert_malformed (module quote "(custom_section \"m\" (after data) \"\")") "custom section is after a virtual section that is not present" ) ;; Out-of-order custom sections (assert_malformed (module quote "(custom_section \"a\" (after type) \"\")" "(custom_section \"b\" \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after import) \"\")" "(custom_section \"b\" (after type) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after func) \"\")" "(custom_section \"b\" (after import) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after table) \"\")" "(custom_section \"b\" (after func) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after memory) \"\")" "(custom_section \"b\" (after table) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after global) \"\")" "(custom_section \"b\" (after memory) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after exception_type) \"\")" "(custom_section \"b\" (after global) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after export) \"\")" "(custom_section \"b\" (after exception_type) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after start) \"\")" "(custom_section \"b\" (after export) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after elem) \"\")" "(custom_section \"b\" (after start) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after data_count) \"\")" "(custom_section \"b\" (after elem) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after code) \"\")" "(custom_section \"b\" (after data_count) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after data) \"\")" "(custom_section \"b\" (after code) \"\")" ) "out-of-order custom section" ) (assert_malformed (module quote "(custom_section \"a\" (after data) \"\")" "(custom_section \"b\" (after code) \"\")" ) "out-of-order custom section" ) ;; non UTF-8 custom section name (assert_malformed (module quote "(custom_section \"\\80\" \"\")") "invalid UTF-8 encoding" ) ;; non UTF-8 custom section contents (module (custom_section "a" "\80")) ================================================ FILE: Test/wavm/wavm_atomic.wast ================================================ ;; atomic operations (module (memory 1 1 shared) (func (export "init") (param $value i64) (i64.store (i32.const 8) (local.get $value))) (func (export "i32.atomic.load") (param $addr i32) (result i32) (i32.atomic.load offset=1 (local.get $addr))) (func (export "i64.atomic.load") (param $addr i32) (result i64) (i64.atomic.load offset=1 (local.get $addr))) (func (export "i32.atomic.load8_u") (param $addr i32) (result i32) (i32.atomic.load8_u offset=1 (local.get $addr))) (func (export "i32.atomic.load16_u") (param $addr i32) (result i32) (i32.atomic.load16_u offset=1 (local.get $addr))) (func (export "i64.atomic.load8_u") (param $addr i32) (result i64) (i64.atomic.load8_u offset=1 (local.get $addr))) (func (export "i64.atomic.load16_u") (param $addr i32) (result i64) (i64.atomic.load16_u offset=1 (local.get $addr))) (func (export "i64.atomic.load32_u") (param $addr i32) (result i64) (i64.atomic.load32_u offset=1 (local.get $addr))) (func (export "i32.atomic.store") (param $addr i32) (param $value i32) (i32.atomic.store offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store") (param $addr i32) (param $value i64) (i64.atomic.store offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.store8") (param $addr i32) (param $value i32) (i32.atomic.store8 offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.store16") (param $addr i32) (param $value i32) (i32.atomic.store16 offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store8") (param $addr i32) (param $value i64) (i64.atomic.store8 offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store16") (param $addr i32) (param $value i64) (i64.atomic.store16 offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.store32") (param $addr i32) (param $value i64) (i64.atomic.store32 offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.add") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.add offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.add") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.add offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.add_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.add_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.add_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.add_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.add_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.add_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.add_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.sub") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.sub offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.sub") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.sub offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.sub_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.sub_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.sub_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.sub_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.sub_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.sub_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.sub_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.and") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.and offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.and") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.and offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.and_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.and_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.and_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.and_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.and_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.and_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.and_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.or") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.or offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.or") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.or offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.or_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.or_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.or_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.or_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.or_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.or_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.or_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.xor") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.xor offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.xor") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.xor offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.xor_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.xor_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.xor_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.xor_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.xor_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.xor_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.xor_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.xchg") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.xchg offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw.xchg") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.xchg offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw8.xchg_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.xchg_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw16.xchg_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.xchg_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw8.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.xchg_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw16.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.xchg_u offset=1 (local.get $addr) (local.get $value))) (func (export "i64.atomic.rmw32.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.xchg_u offset=1 (local.get $addr) (local.get $value))) (func (export "i32.atomic.rmw.cmpxchg") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw.cmpxchg offset=1 (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw.cmpxchg") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw.cmpxchg offset=1 (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i32.atomic.rmw8.cmpxchg_u") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw8.cmpxchg_u offset=1 (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i32.atomic.rmw16.cmpxchg_u") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw16.cmpxchg_u offset=1 (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw8.cmpxchg_u") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw8.cmpxchg_u offset=1 (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw16.cmpxchg_u") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw16.cmpxchg_u offset=1 (local.get $addr) (local.get $expected) (local.get $value))) (func (export "i64.atomic.rmw32.cmpxchg_u") (param $addr i32) (param $expected i64) (param $value i64) (result i64) (i64.atomic.rmw32.cmpxchg_u offset=1 (local.get $addr) (local.get $expected) (local.get $value))) ) ;; *.atomic.load* (invoke "init" (i64.const 0x0706050403020100)) (assert_return (invoke "i32.atomic.load" (i32.const 7)) (i32.const 0x03020100)) (assert_return (invoke "i32.atomic.load" (i32.const 11)) (i32.const 0x07060504)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0706050403020100)) (assert_return (invoke "i32.atomic.load8_u" (i32.const 7)) (i32.const 0x00)) (assert_return (invoke "i32.atomic.load8_u" (i32.const 12)) (i32.const 0x05)) (assert_return (invoke "i32.atomic.load16_u" (i32.const 7)) (i32.const 0x0100)) (assert_return (invoke "i32.atomic.load16_u" (i32.const 13)) (i32.const 0x0706)) (assert_return (invoke "i64.atomic.load8_u" (i32.const 7)) (i64.const 0x00)) (assert_return (invoke "i64.atomic.load8_u" (i32.const 12)) (i64.const 0x05)) (assert_return (invoke "i64.atomic.load16_u" (i32.const 7)) (i64.const 0x0100)) (assert_return (invoke "i64.atomic.load16_u" (i32.const 13)) (i64.const 0x0706)) (assert_return (invoke "i64.atomic.load32_u" (i32.const 7)) (i64.const 0x03020100)) (assert_return (invoke "i64.atomic.load32_u" (i32.const 11)) (i64.const 0x07060504)) ;; *.atomic.store* (invoke "init" (i64.const 0x0000000000000000)) (assert_return (invoke "i32.atomic.store" (i32.const 7) (i32.const 0xffeeddcc))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x00000000ffeeddcc)) (assert_return (invoke "i64.atomic.store" (i32.const 7) (i64.const 0x0123456789abcdef))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0123456789abcdef)) (assert_return (invoke "i32.atomic.store8" (i32.const 8) (i32.const 0x42))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0123456789ab42ef)) (assert_return (invoke "i32.atomic.store16" (i32.const 11) (i32.const 0x8844))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0123884489ab42ef)) (assert_return (invoke "i64.atomic.store8" (i32.const 8) (i64.const 0x99))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0123884489ab99ef)) (assert_return (invoke "i64.atomic.store16" (i32.const 11) (i64.const 0xcafe))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0123cafe89ab99ef)) (assert_return (invoke "i64.atomic.store32" (i32.const 11) (i64.const 0xdeadbeef))) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0xdeadbeef89ab99ef)) ;; *.atomic.rmw*.add (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.add" (i32.const 7) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111123456789)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.add" (i32.const 7) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1212121213131313)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.add_u" (i32.const 7) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111111111de)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.add_u" (i32.const 7) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111dc0f)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.add_u" (i32.const 7) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111153)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.add_u" (i32.const 7) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111d000)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.add_u" (i32.const 7) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111dbccb7f6)) ;; *.atomic.rmw*.sub (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.sub" (i32.const 7) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111fedcba99)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.sub" (i32.const 7) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x101010100f0f0f0f)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.sub_u" (i32.const 7) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111144)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.sub_u" (i32.const 7) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111114613)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.sub_u" (i32.const 7) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111111111cf)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.sub_u" (i32.const 7) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111115222)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.sub_u" (i32.const 7) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111146556a2c)) ;; *.atomic.rmw*.and (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.and" (i32.const 7) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111110101010)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.and" (i32.const 7) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0101010100000000)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.and_u" (i32.const 7) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111101)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.and_u" (i32.const 7) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111110010)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.and_u" (i32.const 7) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111100)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.and_u" (i32.const 7) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111001)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.and_u" (i32.const 7) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111100110001)) ;; *.atomic.rmw*.or (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.or" (i32.const 7) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111113355779)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.or" (i32.const 7) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111113131313)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.or_u" (i32.const 7) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111111111dd)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.or_u" (i32.const 7) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111dbff)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.or_u" (i32.const 7) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111153)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.or_u" (i32.const 7) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111bfff)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.or_u" (i32.const 7) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111dbbbb7f5)) ;; *.atomic.rmw*.xor (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.xor" (i32.const 7) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111103254769)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.xor" (i32.const 7) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1010101013131313)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.xor_u" (i32.const 7) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111111111dc)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.xor_u" (i32.const 7) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111dbef)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.xor_u" (i32.const 7) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111153)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.xor_u" (i32.const 7) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111affe)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.xor_u" (i32.const 7) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111dbaab7f4)) ;; *.atomic.rmw*.xchg (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.xchg" (i32.const 7) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111112345678)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.xchg" (i32.const 7) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0101010102020202)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.xchg_u" (i32.const 7) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111111111cd)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.xchg_u" (i32.const 7) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111cafe)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.xchg_u" (i32.const 7) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111142)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.xchg_u" (i32.const 7) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111beef)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.xchg_u" (i32.const 7) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111cabba6e5)) ;; *.atomic.rmw*.cmpxchg (compare false) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.cmpxchg" (i32.const 7) (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.cmpxchg" (i32.const 7) (i64.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.cmpxchg_u" (i32.const 7) (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 7) (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.cmpxchg_u" (i32.const 7) (i64.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 7) (i64.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 7) (i64.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111111)) ;; *.atomic.rmw*.cmpxchg (compare true) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw.cmpxchg" (i32.const 7) (i32.const 0x11111111) (i32.const 0x12345678)) (i32.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111112345678)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw.cmpxchg" (i32.const 7) (i64.const 0x1111111111111111) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x0101010102020202)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw8.cmpxchg_u" (i32.const 7) (i32.const 0x11) (i32.const 0xcdcdcdcd)) (i32.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111111111cd)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 7) (i32.const 0x1111) (i32.const 0xcafecafe)) (i32.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111cafe)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw8.cmpxchg_u" (i32.const 7) (i64.const 0x11) (i64.const 0x4242424242424242)) (i64.const 0x11)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x1111111111111142)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 7) (i64.const 0x1111) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x111111111111beef)) (invoke "init" (i64.const 0x1111111111111111)) (assert_return (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 7) (i64.const 0x11111111) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111)) (assert_return (invoke "i64.atomic.load" (i32.const 7)) (i64.const 0x11111111cabba6e5)) ;; unaligned accesses (assert_trap (invoke "i32.atomic.load" (i32.const 8)) "unaligned atomic") (assert_trap (invoke "i64.atomic.load" (i32.const 8)) "unaligned atomic") (assert_trap (invoke "i32.atomic.load16_u" (i32.const 8)) "unaligned atomic") (assert_trap (invoke "i64.atomic.load16_u" (i32.const 8)) "unaligned atomic") (assert_trap (invoke "i64.atomic.load32_u" (i32.const 8)) "unaligned atomic") (assert_trap (invoke "i32.atomic.store" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.store" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.store16" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.store16" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.store32" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.add" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.add" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.add_u" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.add_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.add_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.sub" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.sub" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.sub_u" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.sub_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.sub_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.and" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.and" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.and_u" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.and_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.and_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.or" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.or" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.or_u" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.or_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.or_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.xor" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.xor" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.xor_u" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.xor_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.xor_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.xchg" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.xchg" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.xchg_u" (i32.const 8) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.xchg_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.xchg_u" (i32.const 8) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw.cmpxchg" (i32.const 8) (i32.const 0) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw.cmpxchg" (i32.const 8) (i64.const 0) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 8) (i32.const 0) (i32.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 8) (i64.const 0) (i64.const 0)) "unaligned atomic") (assert_trap (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 8) (i64.const 0) (i64.const 0)) "unaligned atomic") ;; unshared memory (module (memory 1 1) (func (drop (i32.atomic.load (i32.const 7))))) (module (memory 1 1) (func (drop (i64.atomic.load (i32.const 7))))) (module (memory 1 1) (func (drop (i32.atomic.load16_u (i32.const 7))))) (module (memory 1 1) (func (drop (i64.atomic.load16_u (i32.const 7))))) (module (memory 1 1) (func (drop (i64.atomic.load32_u (i32.const 7))))) (module (memory 1 1) (func (i32.atomic.store (i32.const 7) (i32.const 0)))) (module (memory 1 1) (func (i64.atomic.store (i32.const 7) (i64.const 0)))) (module (memory 1 1) (func (i32.atomic.store16 (i32.const 7) (i32.const 0)))) (module (memory 1 1) (func (i64.atomic.store16 (i32.const 7) (i64.const 0)))) (module (memory 1 1) (func (i64.atomic.store32 (i32.const 7) (i64.const 0)))) (module (memory 1 1) (func (drop (i32.atomic.rmw.add (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.add (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.add_u (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.add_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.add_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw.sub (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.sub (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.sub_u (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.sub_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.sub_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw.and (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.and (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.and_u (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.and_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.and_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw.or (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.or (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.or_u (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.or_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.or_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw.xor (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.xor (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.xor_u (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.xor_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.xor_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw.xchg (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.xchg (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.xchg_u (i32.const 7) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.xchg_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.xchg_u (i32.const 7) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw.cmpxchg (i32.const 7) (i32.const 0) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw.cmpxchg (i32.const 7) (i64.const 0) (i64.const 0))))) (module (memory 1 1) (func (drop (i32.atomic.rmw16.cmpxchg_u (i32.const 7) (i32.const 0) (i32.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw16.cmpxchg_u (i32.const 7) (i64.const 0) (i64.const 0))))) (module (memory 1 1) (func (drop (i64.atomic.rmw32.cmpxchg_u (i32.const 7) (i64.const 0) (i64.const 0))))) ;; wait/wake operators (module (memory 1 1 shared) (func (export "memory.atomic.wait32") (param $addr i32) (param $expected i32) (param $timeout i64) (result i32) (memory.atomic.wait32 (local.get $addr) (local.get $expected) (local.get $timeout))) (func (export "memory.atomic.wait64") (param $addr i32) (param $expected i64) (param $timeout i64) (result i32) (memory.atomic.wait64 (local.get $addr) (local.get $expected) (local.get $timeout))) (func (export "memory.atomic.notify") (param $addr i32) (param $numWaiters i32) (result i32) (memory.atomic.notify (local.get $addr) (local.get $numWaiters))) (func (export "i32.atomic.store") (param $addr i32) (param $value i32) (i32.atomic.store (local.get $addr) (local.get $value))) (func (export "i64.atomic.store") (param $addr i32) (param $value i64) (i64.atomic.store (local.get $addr) (local.get $value))) ) ;; wait32 value mismatch returns 1 (assert_return (invoke "i32.atomic.store" (i32.const 0) (i32.const 0))) (assert_return (invoke "memory.atomic.wait32" (i32.const 0) (i32.const 99) (i64.const -1)) (i32.const 1)) ;; wait64 value mismatch returns 1 (assert_return (invoke "i64.atomic.store" (i32.const 0) (i64.const 0))) (assert_return (invoke "memory.atomic.wait64" (i32.const 0) (i64.const 99) (i64.const -1)) (i32.const 1)) ;; wait32 value match with timeout=0 returns 2 (timed out) (assert_return (invoke "i32.atomic.store" (i32.const 0) (i32.const 0))) (assert_return (invoke "memory.atomic.wait32" (i32.const 0) (i32.const 0) (i64.const 0)) (i32.const 2)) ;; wait64 value match with timeout=0 returns 2 (timed out) (assert_return (invoke "i64.atomic.store" (i32.const 0) (i64.const 0))) (assert_return (invoke "memory.atomic.wait64" (i32.const 0) (i64.const 0) (i64.const 0)) (i32.const 2)) ;; notify with count=0 returns 0 (assert_return (invoke "memory.atomic.notify" (i32.const 0) (i32.const 0)) (i32.const 0)) ;; notify with count=1 and no waiters returns 0 (assert_return (invoke "memory.atomic.notify" (i32.const 0) (i32.const 1)) (i32.const 0)) ;; notify with out-of-bounds address traps (assert_trap (invoke "memory.atomic.notify" (i32.const 65536) (i32.const 1)) "out of bounds") ;; wait on unshared memory traps (module (memory 1 1) (func (export "memory.atomic.wait32") (param $addr i32) (param $expected i32) (param $timeout i64) (result i32) (memory.atomic.wait32 (local.get $addr) (local.get $expected) (local.get $timeout))) (func (export "memory.atomic.wait64") (param $addr i32) (param $expected i64) (param $timeout i64) (result i32) (memory.atomic.wait64 (local.get $addr) (local.get $expected) (local.get $timeout))) ) (assert_trap (invoke "memory.atomic.wait32" (i32.const 0) (i32.const 0) (i64.const 0)) "atomic wait on unshared memory") (assert_trap (invoke "memory.atomic.wait64" (i32.const 0) (i64.const 0) (i64.const 0)) "atomic wait on unshared memory") ================================================ FILE: ThirdParty/BLAKE2/.gitignore ================================================ b2sum/b2sum bench/blake2b bench/blake2b.data bench/blake2s bench/blake2s.data bench/md5 bench/md5.data bench/plotcycles.pdf ref/blake2b ref/blake2bp ref/blake2s ref/blake2sp sse/blake2b sse/blake2bp sse/blake2s sse/blake2sp ref/blake2xs ref/blake2xb sse/blake2xs sse/blake2xb neon/blake2s neon/blake2b neon/blake2sp neon/blake2bp neon/blake2xs neon/blake2xb **tags ================================================ FILE: ThirdParty/BLAKE2/CMakeLists.txt ================================================ set(BLAKE2_COMPILER_OPTIONS) set(BLAKE2_PRIVATE_DEFINITIONS) set(RefSources ref/blake2bp-ref.c ref/blake2b-ref.c ref/blake2-impl.h ref/blake2sp-ref.c ref/blake2s-ref.c ref/blake2xb-ref.c ref/blake2xs-ref.c ) set(SSESources sse/blake2b.c sse/blake2b-load-sse2.h sse/blake2b-load-sse41.h sse/blake2bp.c sse/blake2b-round.h sse/blake2-config.h sse/blake2-impl.h sse/blake2s.c sse/blake2s-load-sse2.h sse/blake2s-load-sse41.h sse/blake2s-load-xop.h sse/blake2sp.c sse/blake2s-round.h sse/blake2xb.c sse/blake2xs.c ) set(NeonSources neon/blake2b.c neon/blake2b-load-neon.h neon/blake2b-neon.c neon/blake2bp.c neon/blake2b-round.h neon/blake2-impl.h neon/blake2s.c neon/blake2s-load-neon.h neon/blake2s-neon.c neon/blake2sp.c neon/blake2s-round.h neon/blake2xb.c neon/blake2xs.c ) if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") set(Sources ${SSESources}) list(APPEND BLAKE2_PRIVATE_DEFINITIONS "__SSE2__") list(APPEND BLAKE2_PRIVATE_DEFINITIONS "__SSE4_1__") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") list(APPEND BLAKE2_COMPILER_OPTIONS "-msse4.1") endif() elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") set(Sources ${NeonSources}) else() set(Sources ${RefSources}) endif() set(PublicHeaders include/blake2.h ) WAVM_ADD_THIRD_PARTY_LIBRARY(WAVMBLAKE2 SOURCES ${Sources} ${PublicHeaders} PUBLIC_INCLUDE_DIRECTORIES $ PRIVATE_COMPILE_OPTIONS ${BLAKE2_COMPILER_OPTIONS} PRIVATE_DEFINITIONS ${BLAKE2_PRIVATE_DEFINITIONS}) ================================================ FILE: ThirdParty/BLAKE2/COPYING ================================================ Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. ================================================ FILE: ThirdParty/BLAKE2/README.md ================================================ # BLAKE2 This is the reference source code package of BLAKE2, which includes * `ref/`: C implementations of BLAKE2b, BLAKE2bp, BLAKE2s, BLAKE2sp, aimed at portability and simplicity. * `sse/`: C implementations of BLAKE2b, BLAKE2bp, BLAKE2s, BLAKE2sp, optimized for speed on CPUs supporting SSE2, SSSE3, SSE4.1, AVX, or XOP. * `csharp/`: C# implementation of BLAKE2b. * `b2sum/`: Command line utility to hash files, based on the `sse/` implementations. * `bench/`: Benchmark tool to measure cycles-per-byte speeds and produce graphs copyright. All code is triple-licensed under the [CC0](http://creativecommons.org/publicdomain/zero/1.0), the [OpenSSL Licence](https://www.openssl.org/source/license.html), or the [Apache Public License 2.0](http://www.apache.org/licenses/LICENSE-2.0), at your choosing. More: [https://blake2.net](https://blake2.net). Contact: contact@blake2.net ================================================ FILE: ThirdParty/BLAKE2/include/blake2.h ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2_H #define BLAKE2_H #include #include #if defined(_MSC_VER) #define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop)) #else #define BLAKE2_PACKED(x) x __attribute__((packed)) #endif #if defined(__cplusplus) extern "C" { #endif enum blake2s_constant { BLAKE2S_BLOCKBYTES = 64, BLAKE2S_OUTBYTES = 32, BLAKE2S_KEYBYTES = 32, BLAKE2S_SALTBYTES = 8, BLAKE2S_PERSONALBYTES = 8 }; enum blake2b_constant { BLAKE2B_BLOCKBYTES = 128, BLAKE2B_OUTBYTES = 64, BLAKE2B_KEYBYTES = 64, BLAKE2B_SALTBYTES = 16, BLAKE2B_PERSONALBYTES = 16 }; typedef struct blake2s_state__ { uint32_t h[8]; uint32_t t[2]; uint32_t f[2]; uint8_t buf[BLAKE2S_BLOCKBYTES]; size_t buflen; size_t outlen; uint8_t last_node; } blake2s_state; typedef struct blake2b_state__ { uint64_t h[8]; uint64_t t[2]; uint64_t f[2]; uint8_t buf[BLAKE2B_BLOCKBYTES]; size_t buflen; size_t outlen; uint8_t last_node; } blake2b_state; typedef struct blake2sp_state__ { blake2s_state S[8][1]; blake2s_state R[1]; uint8_t buf[8 * BLAKE2S_BLOCKBYTES]; size_t buflen; size_t outlen; } blake2sp_state; typedef struct blake2bp_state__ { blake2b_state S[4][1]; blake2b_state R[1]; uint8_t buf[4 * BLAKE2B_BLOCKBYTES]; size_t buflen; size_t outlen; } blake2bp_state; BLAKE2_PACKED(struct blake2s_param__ { uint8_t digest_length; /* 1 */ uint8_t key_length; /* 2 */ uint8_t fanout; /* 3 */ uint8_t depth; /* 4 */ uint32_t leaf_length; /* 8 */ uint32_t node_offset; /* 12 */ uint16_t xof_length; /* 14 */ uint8_t node_depth; /* 15 */ uint8_t inner_length; /* 16 */ /* uint8_t reserved[0]; */ uint8_t salt[BLAKE2S_SALTBYTES]; /* 24 */ uint8_t personal[BLAKE2S_PERSONALBYTES]; /* 32 */ }); typedef struct blake2s_param__ blake2s_param; BLAKE2_PACKED(struct blake2b_param__ { uint8_t digest_length; /* 1 */ uint8_t key_length; /* 2 */ uint8_t fanout; /* 3 */ uint8_t depth; /* 4 */ uint32_t leaf_length; /* 8 */ uint32_t node_offset; /* 12 */ uint32_t xof_length; /* 16 */ uint8_t node_depth; /* 17 */ uint8_t inner_length; /* 18 */ uint8_t reserved[14]; /* 32 */ uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ }); typedef struct blake2b_param__ blake2b_param; typedef struct blake2xs_state__ { blake2s_state S[1]; blake2s_param P[1]; } blake2xs_state; typedef struct blake2xb_state__ { blake2b_state S[1]; blake2b_param P[1]; } blake2xb_state; /* Padded structs result in a compile-time error */ enum { BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES), BLAKE2_DUMMY_2 = 1/(sizeof(blake2b_param) == BLAKE2B_OUTBYTES) }; /* Streaming API */ int blake2s_init( blake2s_state *S, size_t outlen ); int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ); int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); int blake2s_update( blake2s_state *S, const void *in, size_t inlen ); int blake2s_final( blake2s_state *S, void *out, size_t outlen ); int blake2b_init( blake2b_state *S, size_t outlen ); int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ); int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); int blake2b_update( blake2b_state *S, const void *in, size_t inlen ); int blake2b_final( blake2b_state *S, void *out, size_t outlen ); int blake2sp_init( blake2sp_state *S, size_t outlen ); int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ); int blake2sp_update( blake2sp_state *S, const void *in, size_t inlen ); int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ); int blake2bp_init( blake2bp_state *S, size_t outlen ); int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ); int blake2bp_update( blake2bp_state *S, const void *in, size_t inlen ); int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ); /* Variable output length API */ int blake2xs_init( blake2xs_state *S, const size_t outlen ); int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen ); int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen ); int blake2xs_final(blake2xs_state *S, void *out, size_t outlen); int blake2xb_init( blake2xb_state *S, const size_t outlen ); int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen ); int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen ); int blake2xb_final(blake2xb_state *S, void *out, size_t outlen); /* Simple API */ int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2xs( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); /* This is simply an alias for blake2b */ int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); #if defined(__cplusplus) } #endif #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2-impl.h ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2_IMPL_H #define BLAKE2_IMPL_H #include #include #if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) #if defined(_MSC_VER) #define BLAKE2_INLINE __inline #elif defined(__GNUC__) #define BLAKE2_INLINE __inline__ #else #define BLAKE2_INLINE #endif #else #define BLAKE2_INLINE inline #endif static BLAKE2_INLINE uint32_t load32( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint32_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return (( uint32_t )( p[0] ) << 0) | (( uint32_t )( p[1] ) << 8) | (( uint32_t )( p[2] ) << 16) | (( uint32_t )( p[3] ) << 24) ; #endif } static BLAKE2_INLINE uint64_t load64( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint64_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return (( uint64_t )( p[0] ) << 0) | (( uint64_t )( p[1] ) << 8) | (( uint64_t )( p[2] ) << 16) | (( uint64_t )( p[3] ) << 24) | (( uint64_t )( p[4] ) << 32) | (( uint64_t )( p[5] ) << 40) | (( uint64_t )( p[6] ) << 48) | (( uint64_t )( p[7] ) << 56) ; #endif } static BLAKE2_INLINE uint16_t load16( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint16_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return ( uint16_t )((( uint32_t )( p[0] ) << 0) | (( uint32_t )( p[1] ) << 8)); #endif } static BLAKE2_INLINE void store16( void *dst, uint16_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; *p++ = ( uint8_t )w; w >>= 8; *p++ = ( uint8_t )w; #endif } static BLAKE2_INLINE void store32( void *dst, uint32_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); #endif } static BLAKE2_INLINE void store64( void *dst, uint64_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); p[4] = (uint8_t)(w >> 32); p[5] = (uint8_t)(w >> 40); p[6] = (uint8_t)(w >> 48); p[7] = (uint8_t)(w >> 56); #endif } static BLAKE2_INLINE uint64_t load48( const void *src ) { const uint8_t *p = ( const uint8_t * )src; return (( uint64_t )( p[0] ) << 0) | (( uint64_t )( p[1] ) << 8) | (( uint64_t )( p[2] ) << 16) | (( uint64_t )( p[3] ) << 24) | (( uint64_t )( p[4] ) << 32) | (( uint64_t )( p[5] ) << 40) ; } static BLAKE2_INLINE void store48( void *dst, uint64_t w ) { uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); p[4] = (uint8_t)(w >> 32); p[5] = (uint8_t)(w >> 40); } static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) { return ( w >> c ) | ( w << ( 32 - c ) ); } static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) { return ( w >> c ) | ( w << ( 64 - c ) ); } /* prevents compiler optimizing out memset() */ static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) { static void *(*const volatile memset_v)(void *, int, size_t) = &memset; memset_v(v, 0, n); } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2b-load-neon.h ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2B_LOAD_NEON_H #define BLAKE2B_LOAD_NEON_H #define LOAD_MSG_0_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m1)); \ b1 = vcombine_u64(vget_low_u64(m2), vget_low_u64(m3)); #define LOAD_MSG_0_2(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m0), vget_high_u64(m1)); \ b1 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m3)); #define LOAD_MSG_0_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m5)); \ b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m7)); #define LOAD_MSG_0_4(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m5)); \ b1 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m7)); #define LOAD_MSG_1_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m2)); \ b1 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m6)); #define LOAD_MSG_1_2(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m5), vget_low_u64(m4)); \ b1 = vextq_u64(m7, m3, 1); #define LOAD_MSG_1_3(b0, b1) \ b0 = vextq_u64(m0, m0, 1); \ b1 = vcombine_u64(vget_high_u64(m5), vget_high_u64(m2)); #define LOAD_MSG_1_4(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m1)); \ b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); #define LOAD_MSG_2_1(b0, b1) \ b0 = vextq_u64(m5, m6, 1); \ b1 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m7)); #define LOAD_MSG_2_2(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m0)); \ b1 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m6)); #define LOAD_MSG_2_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m5), vget_high_u64(m1)); \ b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m4)); #define LOAD_MSG_2_4(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m3)); \ b1 = vextq_u64(m0, m2, 1); #define LOAD_MSG_3_1(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); \ b1 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m5)); #define LOAD_MSG_3_2(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m0)); \ b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m7)); #define LOAD_MSG_3_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m2)); \ b1 = vcombine_u64(vget_low_u64(m2), vget_high_u64(m7)); #define LOAD_MSG_3_4(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m3), vget_low_u64(m5)); \ b1 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m4)); #define LOAD_MSG_4_1(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m2)); \ b1 = vcombine_u64(vget_low_u64(m1), vget_low_u64(m5)); #define LOAD_MSG_4_2(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m0), vget_high_u64(m3)); \ b1 = vcombine_u64(vget_low_u64(m2), vget_high_u64(m7)); #define LOAD_MSG_4_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m7), vget_high_u64(m5)); \ b1 = vcombine_u64(vget_low_u64(m3), vget_high_u64(m1)); #define LOAD_MSG_4_4(b0, b1) \ b0 = vextq_u64(m0, m6, 1); \ b1 = vcombine_u64(vget_low_u64(m4), vget_high_u64(m6)); #define LOAD_MSG_5_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m1), vget_low_u64(m3)); \ b1 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m4)); #define LOAD_MSG_5_2(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m5)); \ b1 = vcombine_u64(vget_high_u64(m5), vget_high_u64(m1)); #define LOAD_MSG_5_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m2), vget_high_u64(m3)); \ b1 = vcombine_u64(vget_high_u64(m7), vget_high_u64(m0)); #define LOAD_MSG_5_4(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m2)); \ b1 = vcombine_u64(vget_low_u64(m7), vget_high_u64(m4)); #define LOAD_MSG_6_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m6), vget_high_u64(m0)); \ b1 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m2)); #define LOAD_MSG_6_2(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m7)); \ b1 = vextq_u64(m6, m5, 1); #define LOAD_MSG_6_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m3)); \ b1 = vextq_u64(m4, m4, 1); #define LOAD_MSG_6_4(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); \ b1 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m5)); #define LOAD_MSG_7_1(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m3)); \ b1 = vcombine_u64(vget_low_u64(m6), vget_high_u64(m1)); #define LOAD_MSG_7_2(b0, b1) \ b0 = vextq_u64(m5, m7, 1); \ b1 = vcombine_u64(vget_high_u64(m0), vget_high_u64(m4)); #define LOAD_MSG_7_3(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m7)); \ b1 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m1)); #define LOAD_MSG_7_4(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m2)); \ b1 = vcombine_u64(vget_low_u64(m3), vget_low_u64(m5)); #define LOAD_MSG_8_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m3), vget_low_u64(m7)); \ b1 = vextq_u64(m5, m0, 1); #define LOAD_MSG_8_2(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m7), vget_high_u64(m4)); \ b1 = vextq_u64(m1, m4, 1); #define LOAD_MSG_8_3(b0, b1) \ b0 = m6; \ b1 = vextq_u64(m0, m5, 1); #define LOAD_MSG_8_4(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m3)); \ b1 = m2; #define LOAD_MSG_9_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m5), vget_low_u64(m4)); \ b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m0)); #define LOAD_MSG_9_2(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m1), vget_low_u64(m2)); \ b1 = vcombine_u64(vget_low_u64(m3), vget_high_u64(m2)); #define LOAD_MSG_9_3(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m7), vget_high_u64(m4)); \ b1 = vcombine_u64(vget_high_u64(m1), vget_high_u64(m6)); #define LOAD_MSG_9_4(b0, b1) \ b0 = vextq_u64(m5, m7, 1); \ b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m0)); #define LOAD_MSG_10_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m1)); \ b1 = vcombine_u64(vget_low_u64(m2), vget_low_u64(m3)); #define LOAD_MSG_10_2(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m0), vget_high_u64(m1)); \ b1 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m3)); #define LOAD_MSG_10_3(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m5)); \ b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m7)); #define LOAD_MSG_10_4(b0, b1) \ b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m5)); \ b1 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m7)); #define LOAD_MSG_11_1(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m2)); \ b1 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m6)); #define LOAD_MSG_11_2(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m5), vget_low_u64(m4)); \ b1 = vextq_u64(m7, m3, 1); #define LOAD_MSG_11_3(b0, b1) \ b0 = vextq_u64(m0, m0, 1); \ b1 = vcombine_u64(vget_high_u64(m5), vget_high_u64(m2)); #define LOAD_MSG_11_4(b0, b1) \ b0 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m1)); \ b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2b-neon.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #include "blake2.h" #include "blake2-impl.h" static const uint64_t blake2b_IV[8] = { 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; /* static const uint8_t blake2b_sigma[12][16] = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } }; */ static void blake2b_set_lastnode( blake2b_state *S ) { S->f[1] = (uint64_t)-1; } /* Some helper functions, not necessarily useful */ static int blake2b_is_lastblock( const blake2b_state *S ) { return S->f[0] != 0; } static void blake2b_set_lastblock( blake2b_state *S ) { if( S->last_node ) blake2b_set_lastnode( S ); S->f[0] = (uint64_t)-1; } static void blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } static void blake2b_init0( blake2b_state *S ) { size_t i; memset( S, 0, sizeof( blake2b_state ) ); for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; } /* init xors IV with input parameter block */ int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) { const uint8_t *p = ( const uint8_t * )( P ); size_t i; blake2b_init0( S ); /* IV XOR ParamBlock */ for( i = 0; i < 8; ++i ) S->h[i] ^= load64( p + sizeof( S->h[i] ) * i ); S->outlen = P->digest_length; return 0; } int blake2b_init( blake2b_state *S, size_t outlen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2b_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); blake2b_update( S, block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } #undef LOAD_MSG_0_1 #define LOAD_MSG_0_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m1)); b1 = vcombine_u64(vget_low_u64(m2), vget_low_u64(m3)); } while(0) #undef LOAD_MSG_0_2 #define LOAD_MSG_0_2(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m0), vget_high_u64(m1)); b1 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m3)); } while(0) #undef LOAD_MSG_0_3 #define LOAD_MSG_0_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m5)); b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m7)); } while(0) #undef LOAD_MSG_0_4 #define LOAD_MSG_0_4(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m5)); b1 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m7)); } while(0) #undef LOAD_MSG_1_1 #define LOAD_MSG_1_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m2)); b1 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m6)); } while(0) #undef LOAD_MSG_1_2 #define LOAD_MSG_1_2(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m5), vget_low_u64(m4)); b1 = vextq_u64(m7, m3, 1); } while(0) #undef LOAD_MSG_1_3 #define LOAD_MSG_1_3(b0, b1) \ do { b0 = vextq_u64(m0, m0, 1); b1 = vcombine_u64(vget_high_u64(m5), vget_high_u64(m2)); } while(0) #undef LOAD_MSG_1_4 #define LOAD_MSG_1_4(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m1)); b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); } while(0) #undef LOAD_MSG_2_1 #define LOAD_MSG_2_1(b0, b1) \ do { b0 = vextq_u64(m5, m6, 1); b1 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m7)); } while(0) #undef LOAD_MSG_2_2 #define LOAD_MSG_2_2(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m0)); b1 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m6)); } while(0) #undef LOAD_MSG_2_3 #define LOAD_MSG_2_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m5), vget_high_u64(m1)); b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m4)); } while(0) #undef LOAD_MSG_2_4 #define LOAD_MSG_2_4(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m3)); b1 = vextq_u64(m0, m2, 1); } while(0) #undef LOAD_MSG_3_1 #define LOAD_MSG_3_1(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); b1 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m5)); } while(0) #undef LOAD_MSG_3_2 #define LOAD_MSG_3_2(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m0)); b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m7)); } while(0) #undef LOAD_MSG_3_3 #define LOAD_MSG_3_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m2)); b1 = vcombine_u64(vget_low_u64(m2), vget_high_u64(m7)); } while(0) #undef LOAD_MSG_3_4 #define LOAD_MSG_3_4(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m3), vget_low_u64(m5)); b1 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m4)); } while(0) #undef LOAD_MSG_4_1 #define LOAD_MSG_4_1(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m2)); b1 = vcombine_u64(vget_low_u64(m1), vget_low_u64(m5)); } while(0) #undef LOAD_MSG_4_2 #define LOAD_MSG_4_2(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m0), vget_high_u64(m3)); b1 = vcombine_u64(vget_low_u64(m2), vget_high_u64(m7)); } while(0) #undef LOAD_MSG_4_3 #define LOAD_MSG_4_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m7), vget_high_u64(m5)); b1 = vcombine_u64(vget_low_u64(m3), vget_high_u64(m1)); } while(0) #undef LOAD_MSG_4_4 #define LOAD_MSG_4_4(b0, b1) \ do { b0 = vextq_u64(m0, m6, 1); b1 = vcombine_u64(vget_low_u64(m4), vget_high_u64(m6)); } while(0) #undef LOAD_MSG_5_1 #define LOAD_MSG_5_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m1), vget_low_u64(m3)); b1 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m4)); } while(0) #undef LOAD_MSG_5_2 #define LOAD_MSG_5_2(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m5)); b1 = vcombine_u64(vget_high_u64(m5), vget_high_u64(m1)); } while(0) #undef LOAD_MSG_5_3 #define LOAD_MSG_5_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m2), vget_high_u64(m3)); b1 = vcombine_u64(vget_high_u64(m7), vget_high_u64(m0)); } while(0) #undef LOAD_MSG_5_4 #define LOAD_MSG_5_4(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m2)); b1 = vcombine_u64(vget_low_u64(m7), vget_high_u64(m4)); } while(0) #undef LOAD_MSG_6_1 #define LOAD_MSG_6_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m6), vget_high_u64(m0)); b1 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m2)); } while(0) #undef LOAD_MSG_6_2 #define LOAD_MSG_6_2(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m7)); b1 = vextq_u64(m6, m5, 1); } while(0) #undef LOAD_MSG_6_3 #define LOAD_MSG_6_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m3)); b1 = vextq_u64(m4, m4, 1); } while(0) #undef LOAD_MSG_6_4 #define LOAD_MSG_6_4(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); b1 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m5)); } while(0) #undef LOAD_MSG_7_1 #define LOAD_MSG_7_1(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m3)); b1 = vcombine_u64(vget_low_u64(m6), vget_high_u64(m1)); } while(0) #undef LOAD_MSG_7_2 #define LOAD_MSG_7_2(b0, b1) \ do { b0 = vextq_u64(m5, m7, 1); b1 = vcombine_u64(vget_high_u64(m0), vget_high_u64(m4)); } while(0) #undef LOAD_MSG_7_3 #define LOAD_MSG_7_3(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m7)); b1 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m1)); } while(0) #undef LOAD_MSG_7_4 #define LOAD_MSG_7_4(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m2)); b1 = vcombine_u64(vget_low_u64(m3), vget_low_u64(m5)); } while(0) #undef LOAD_MSG_8_1 #define LOAD_MSG_8_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m3), vget_low_u64(m7)); b1 = vextq_u64(m5, m0, 1); } while(0) #undef LOAD_MSG_8_2 #define LOAD_MSG_8_2(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m7), vget_high_u64(m4)); b1 = vextq_u64(m1, m4, 1); } while(0) #undef LOAD_MSG_8_3 #define LOAD_MSG_8_3(b0, b1) \ do { b0 = m6; b1 = vextq_u64(m0, m5, 1); } while(0) #undef LOAD_MSG_8_4 #define LOAD_MSG_8_4(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m1), vget_high_u64(m3)); b1 = m2; } while(0) #undef LOAD_MSG_9_1 #define LOAD_MSG_9_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m5), vget_low_u64(m4)); b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m0)); } while(0) #undef LOAD_MSG_9_2 #define LOAD_MSG_9_2(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m1), vget_low_u64(m2)); b1 = vcombine_u64(vget_low_u64(m3), vget_high_u64(m2)); } while(0) #undef LOAD_MSG_9_3 #define LOAD_MSG_9_3(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m7), vget_high_u64(m4)); b1 = vcombine_u64(vget_high_u64(m1), vget_high_u64(m6)); } while(0) #undef LOAD_MSG_9_4 #define LOAD_MSG_9_4(b0, b1) \ do { b0 = vextq_u64(m5, m7, 1); b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m0)); } while(0) #undef LOAD_MSG_10_1 #define LOAD_MSG_10_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m0), vget_low_u64(m1)); b1 = vcombine_u64(vget_low_u64(m2), vget_low_u64(m3)); } while(0) #undef LOAD_MSG_10_2 #define LOAD_MSG_10_2(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m0), vget_high_u64(m1)); b1 = vcombine_u64(vget_high_u64(m2), vget_high_u64(m3)); } while(0) #undef LOAD_MSG_10_3 #define LOAD_MSG_10_3(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m4), vget_low_u64(m5)); b1 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m7)); } while(0) #undef LOAD_MSG_10_4 #define LOAD_MSG_10_4(b0, b1) \ do { b0 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m5)); b1 = vcombine_u64(vget_high_u64(m6), vget_high_u64(m7)); } while(0) #undef LOAD_MSG_11_1 #define LOAD_MSG_11_1(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m7), vget_low_u64(m2)); b1 = vcombine_u64(vget_high_u64(m4), vget_high_u64(m6)); } while(0) #undef LOAD_MSG_11_2 #define LOAD_MSG_11_2(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m5), vget_low_u64(m4)); b1 = vextq_u64(m7, m3, 1); } while(0) #undef LOAD_MSG_11_3 #define LOAD_MSG_11_3(b0, b1) \ do { b0 = vextq_u64(m0, m0, 1); b1 = vcombine_u64(vget_high_u64(m5), vget_high_u64(m2)); } while(0) #undef LOAD_MSG_11_4 #define LOAD_MSG_11_4(b0, b1) \ do { b0 = vcombine_u64(vget_low_u64(m6), vget_low_u64(m1)); b1 = vcombine_u64(vget_high_u64(m3), vget_high_u64(m1)); } while(0) #define vrorq_n_u64_32(x) vreinterpretq_u64_u32(vrev64q_u32(vreinterpretq_u32_u64((x)))) #define vrorq_n_u64_24(x) vcombine_u64( \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_low_u64(x)), vreinterpret_u8_u64(vget_low_u64(x)), 3)), \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_high_u64(x)), vreinterpret_u8_u64(vget_high_u64(x)), 3))) #define vrorq_n_u64_16(x) vcombine_u64( \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_low_u64(x)), vreinterpret_u8_u64(vget_low_u64(x)), 2)), \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_high_u64(x)), vreinterpret_u8_u64(vget_high_u64(x)), 2))) #define vrorq_n_u64_63(x) veorq_u64(vaddq_u64(x, x), vshrq_n_u64(x, 63)) #undef G1 #define G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ do { \ row1l = vaddq_u64(vaddq_u64(row1l, b0), row2l); \ row1h = vaddq_u64(vaddq_u64(row1h, b1), row2h); \ row4l = veorq_u64(row4l, row1l); row4h = veorq_u64(row4h, row1h); \ row4l = vrorq_n_u64_32(row4l); row4h = vrorq_n_u64_32(row4h); \ row3l = vaddq_u64(row3l, row4l); row3h = vaddq_u64(row3h, row4h); \ row2l = veorq_u64(row2l, row3l); row2h = veorq_u64(row2h, row3h); \ row2l = vrorq_n_u64_24(row2l); row2h = vrorq_n_u64_24(row2h); \ } while(0) #undef G2 #define G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ do { \ row1l = vaddq_u64(vaddq_u64(row1l, b0), row2l); \ row1h = vaddq_u64(vaddq_u64(row1h, b1), row2h); \ row4l = veorq_u64(row4l, row1l); row4h = veorq_u64(row4h, row1h); \ row4l = vrorq_n_u64_16(row4l); row4h = vrorq_n_u64_16(row4h); \ row3l = vaddq_u64(row3l, row4l); row3h = vaddq_u64(row3h, row4h); \ row2l = veorq_u64(row2l, row3l); row2h = veorq_u64(row2h, row3h); \ row2l = vrorq_n_u64_63(row2l); row2h = vrorq_n_u64_63(row2h); \ } while(0) #define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ do { \ uint64x2_t t0 = vextq_u64(row2l, row2h, 1); \ uint64x2_t t1 = vextq_u64(row2h, row2l, 1); \ row2l = t0; row2h = t1; t0 = row3l; row3l = row3h; row3h = t0; \ t0 = vextq_u64(row4h, row4l, 1); t1 = vextq_u64(row4l, row4h, 1); \ row4l = t0; row4h = t1; \ } while(0) #define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ do { \ uint64x2_t t0 = vextq_u64(row2h, row2l, 1); \ uint64x2_t t1 = vextq_u64(row2l, row2h, 1); \ row2l = t0; row2h = t1; t0 = row3l; row3l = row3h; row3h = t0; \ t0 = vextq_u64(row4l, row4h, 1); t1 = vextq_u64(row4h, row4l, 1); \ row4l = t0; row4h = t1; \ } while(0) #undef ROUND #define ROUND(r) \ do { \ uint64x2_t b0, b1; \ LOAD_MSG_ ##r ##_1(b0, b1); \ G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ LOAD_MSG_ ##r ##_2(b0, b1); \ G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); \ LOAD_MSG_ ##r ##_3(b0, b1); \ G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ LOAD_MSG_ ##r ##_4(b0, b1); \ G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); \ } while(0) static void blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) { const uint64x2_t m0 = vreinterpretq_u64_u8(vld1q_u8(&block[ 0])); const uint64x2_t m1 = vreinterpretq_u64_u8(vld1q_u8(&block[ 16])); const uint64x2_t m2 = vreinterpretq_u64_u8(vld1q_u8(&block[ 32])); const uint64x2_t m3 = vreinterpretq_u64_u8(vld1q_u8(&block[ 48])); const uint64x2_t m4 = vreinterpretq_u64_u8(vld1q_u8(&block[ 64])); const uint64x2_t m5 = vreinterpretq_u64_u8(vld1q_u8(&block[ 80])); const uint64x2_t m6 = vreinterpretq_u64_u8(vld1q_u8(&block[ 96])); const uint64x2_t m7 = vreinterpretq_u64_u8(vld1q_u8(&block[112])); uint64x2_t row1l, row1h, row2l, row2h; uint64x2_t row3l, row3h, row4l, row4h; const uint64x2_t h0 = row1l = vld1q_u64(&S->h[0]); const uint64x2_t h1 = row1h = vld1q_u64(&S->h[2]); const uint64x2_t h2 = row2l = vld1q_u64(&S->h[4]); const uint64x2_t h3 = row2h = vld1q_u64(&S->h[6]); row3l = vld1q_u64(&blake2b_IV[0]); row3h = vld1q_u64(&blake2b_IV[2]); row4l = veorq_u64(vld1q_u64(&blake2b_IV[4]), vld1q_u64(&S->t[0])); row4h = veorq_u64(vld1q_u64(&blake2b_IV[6]), vld1q_u64(&S->f[0])); ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); ROUND( 10 ); ROUND( 11 ); vst1q_u64(&S->h[0], veorq_u64(h0, veorq_u64(row1l, row3l))); vst1q_u64(&S->h[2], veorq_u64(h1, veorq_u64(row1h, row3h))); vst1q_u64(&S->h[4], veorq_u64(h2, veorq_u64(row2l, row4l))); vst1q_u64(&S->h[6], veorq_u64(h3, veorq_u64(row2h, row4h))); } #undef G #undef ROUND int blake2b_update( blake2b_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2B_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2B_BLOCKBYTES) { blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); blake2b_compress( S, in ); in += BLAKE2B_BLOCKBYTES; inlen -= BLAKE2B_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2b_final( blake2b_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2b_is_lastblock( S ) ) return -1; blake2b_increment_counter( S, S->buflen ); blake2b_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ blake2b_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store64( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, S->outlen ); secure_zero_memory(buffer, sizeof(buffer)); return 0; } /* inlen, at least, should be uint64_t. Others can be size_t. */ int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2b_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2b_init( S, outlen ) < 0 ) return -1; } blake2b_update( S, ( const uint8_t * )in, inlen ); blake2b_final( S, out, outlen ); return 0; } int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { return blake2b(out, outlen, in, inlen, key, keylen); } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2b( out, BLAKE2B_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2B_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2b_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2b_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2b_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2b_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2b-round.h ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2B_ROUND_H #define BLAKE2B_ROUND_H #define vrorq_n_u64_32(x) vreinterpretq_u64_u32(vrev64q_u32(vreinterpretq_u32_u64((x)))) #define vrorq_n_u64_24(x) vcombine_u64( \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_low_u64(x)), vreinterpret_u8_u64(vget_low_u64(x)), 3)), \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_high_u64(x)), vreinterpret_u8_u64(vget_high_u64(x)), 3))) #define vrorq_n_u64_16(x) vcombine_u64( \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_low_u64(x)), vreinterpret_u8_u64(vget_low_u64(x)), 2)), \ vreinterpret_u64_u8(vext_u8(vreinterpret_u8_u64(vget_high_u64(x)), vreinterpret_u8_u64(vget_high_u64(x)), 2))) #define vrorq_n_u64_63(x) veorq_u64(vaddq_u64(x, x), vshrq_n_u64(x, 63)) #define G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ row1l = vaddq_u64(vaddq_u64(row1l, b0), row2l); \ row1h = vaddq_u64(vaddq_u64(row1h, b1), row2h); \ row4l = veorq_u64(row4l, row1l); row4h = veorq_u64(row4h, row1h); \ row4l = vrorq_n_u64_32(row4l); row4h = vrorq_n_u64_32(row4h); \ row3l = vaddq_u64(row3l, row4l); row3h = vaddq_u64(row3h, row4h); \ row2l = veorq_u64(row2l, row3l); row2h = veorq_u64(row2h, row3h); \ row2l = vrorq_n_u64_24(row2l); row2h = vrorq_n_u64_24(row2h); #define G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ row1l = vaddq_u64(vaddq_u64(row1l, b0), row2l); \ row1h = vaddq_u64(vaddq_u64(row1h, b1), row2h); \ row4l = veorq_u64(row4l, row1l); row4h = veorq_u64(row4h, row1h); \ row4l = vrorq_n_u64_16(row4l); row4h = vrorq_n_u64_16(row4h); \ row3l = vaddq_u64(row3l, row4l); row3h = vaddq_u64(row3h, row4h); \ row2l = veorq_u64(row2l, row3l); row2h = veorq_u64(row2h, row3h); \ row2l = vrorq_n_u64_63(row2l); row2h = vrorq_n_u64_63(row2h); #define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ t0 = vextq_u64(row2l, row2h, 1); \ t1 = vextq_u64(row2h, row2l, 1); \ row2l = t0; row2h = t1; t0 = row3l; row3l = row3h; row3h = t0; \ t0 = vextq_u64(row4h, row4l, 1); t1 = vextq_u64(row4l, row4h, 1); \ row4l = t0; row4h = t1; #define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ t0 = vextq_u64(row2h, row2l, 1); \ t1 = vextq_u64(row2l, row2h, 1); \ row2l = t0; row2h = t1; t0 = row3l; row3l = row3h; row3h = t0; \ t0 = vextq_u64(row4l, row4h, 1); t1 = vextq_u64(row4h, row4l, 1); \ row4l = t0; row4h = t1; #include "blake2b-load-neon.h" #define ROUND(r) \ LOAD_MSG_ ##r ##_1(b0, b1); \ G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ LOAD_MSG_ ##r ##_2(b0, b1); \ G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); \ LOAD_MSG_ ##r ##_3(b0, b1); \ G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ LOAD_MSG_ ##r ##_4(b0, b1); \ G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2b.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #include "blake2.h" #include "blake2-impl.h" #include "blake2b-round.h" static const uint64_t blake2b_IV[8] = { 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; /* Some helper functions */ static void blake2b_set_lastnode( blake2b_state *S ) { S->f[1] = (uint64_t)-1; } static int blake2b_is_lastblock( const blake2b_state *S ) { return S->f[0] != 0; } static void blake2b_set_lastblock( blake2b_state *S ) { if( S->last_node ) blake2b_set_lastnode( S ); S->f[0] = (uint64_t)-1; } static void blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } static void blake2b_init0( blake2b_state *S ) { size_t i; memset( S, 0, sizeof( blake2b_state ) ); for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; } /* init xors IV with input parameter block */ int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) { const uint8_t *p = ( const uint8_t * )( P ); size_t i; blake2b_init0( S ); /* IV XOR ParamBlock */ for( i = 0; i < 8; ++i ) S->h[i] ^= load64( p + sizeof( S->h[i] ) * i ); S->outlen = P->digest_length; return 0; } int blake2b_init( blake2b_state *S, size_t outlen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2b_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); blake2b_update( S, block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } static void blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) { const uint64x2_t m0 = vreinterpretq_u64_u8(vld1q_u8(&block[ 0])); const uint64x2_t m1 = vreinterpretq_u64_u8(vld1q_u8(&block[ 16])); const uint64x2_t m2 = vreinterpretq_u64_u8(vld1q_u8(&block[ 32])); const uint64x2_t m3 = vreinterpretq_u64_u8(vld1q_u8(&block[ 48])); const uint64x2_t m4 = vreinterpretq_u64_u8(vld1q_u8(&block[ 64])); const uint64x2_t m5 = vreinterpretq_u64_u8(vld1q_u8(&block[ 80])); const uint64x2_t m6 = vreinterpretq_u64_u8(vld1q_u8(&block[ 96])); const uint64x2_t m7 = vreinterpretq_u64_u8(vld1q_u8(&block[112])); uint64x2_t row1l, row1h, row2l, row2h; uint64x2_t row3l, row3h, row4l, row4h; uint64x2_t t0, t1, b0, b1; const uint64x2_t h0 = row1l = vld1q_u64(&S->h[0]); const uint64x2_t h1 = row1h = vld1q_u64(&S->h[2]); const uint64x2_t h2 = row2l = vld1q_u64(&S->h[4]); const uint64x2_t h3 = row2h = vld1q_u64(&S->h[6]); row3l = vld1q_u64(&blake2b_IV[0]); row3h = vld1q_u64(&blake2b_IV[2]); row4l = veorq_u64(vld1q_u64(&blake2b_IV[4]), vld1q_u64(&S->t[0])); row4h = veorq_u64(vld1q_u64(&blake2b_IV[6]), vld1q_u64(&S->f[0])); ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); ROUND( 10 ); ROUND( 11 ); vst1q_u64(&S->h[0], veorq_u64(h0, veorq_u64(row1l, row3l))); vst1q_u64(&S->h[2], veorq_u64(h1, veorq_u64(row1h, row3h))); vst1q_u64(&S->h[4], veorq_u64(h2, veorq_u64(row2l, row4l))); vst1q_u64(&S->h[6], veorq_u64(h3, veorq_u64(row2h, row4h))); } int blake2b_update( blake2b_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2B_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2B_BLOCKBYTES) { blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); blake2b_compress( S, in ); in += BLAKE2B_BLOCKBYTES; inlen -= BLAKE2B_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2b_final( blake2b_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2b_is_lastblock( S ) ) return -1; blake2b_increment_counter( S, S->buflen ); blake2b_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ blake2b_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store64( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, S->outlen ); secure_zero_memory(buffer, sizeof(buffer)); return 0; } /* inlen, at least, should be uint64_t. Others can be size_t. */ int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2b_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2b_init( S, outlen ) < 0 ) return -1; } blake2b_update( S, ( const uint8_t * )in, inlen ); blake2b_final( S, out, outlen ); return 0; } int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { return blake2b(out, outlen, in, inlen, key, keylen); } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2b( out, BLAKE2B_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2B_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2b_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2b_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2b_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2b_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2bp.c ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #if defined(_OPENMP) #include #endif #include "blake2.h" #include "blake2-impl.h" #define PARALLELISM_DEGREE 4 /* blake2b_init_param defaults to setting the expecting output length from the digest_length parameter block field. In some cases, however, we do not want this, as the output length of these instances is given by inner_length instead. */ static int blake2bp_init_leaf_param( blake2b_state *S, const blake2b_param *P ) { int err = blake2b_init_param(S, P); S->outlen = P->inner_length; return err; } static int blake2bp_init_leaf( blake2b_state *S, size_t outlen, size_t keylen, uint64_t offset ) { blake2b_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = offset; P->xof_length = 0; P->node_depth = 0; P->inner_length = BLAKE2B_OUTBYTES; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2bp_init_leaf_param( S, P ); } static int blake2bp_init_root( blake2b_state *S, size_t outlen, size_t keylen ) { blake2b_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = 0; P->xof_length = 0; P->node_depth = 1; P->inner_length = BLAKE2B_OUTBYTES; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2bp_init( blake2bp_state *S, size_t outlen ) { size_t i; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2bp_init_root( S->R, outlen, 0 ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; return 0; } int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ) { size_t i; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2bp_init_root( S->R, outlen, keylen ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->S[i], block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } int blake2bp_update( blake2bp_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; size_t left = S->buflen; size_t fill = sizeof( S->buf ) - left; size_t i; if( left && inlen >= fill ) { memcpy( S->buf + left, in, fill ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); in += fill; inlen -= fill; left = 0; } #if defined(_OPENMP) #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2B_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) { blake2b_update( S->S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; } } in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ); inlen %= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; if( inlen > 0 ) memcpy( S->buf + left, in, inlen ); S->buflen = left + inlen; return 0; } int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES]; size_t i; if(out == NULL || outlen < S->outlen) { return -1; } for( i = 0; i < PARALLELISM_DEGREE; ++i ) { if( S->buflen > i * BLAKE2B_BLOCKBYTES ) { size_t left = S->buflen - i * BLAKE2B_BLOCKBYTES; if( left > BLAKE2B_BLOCKBYTES ) left = BLAKE2B_BLOCKBYTES; blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, left ); } blake2b_final( S->S[i], hash[i], BLAKE2B_OUTBYTES ); } for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->R, hash[i], BLAKE2B_OUTBYTES ); return blake2b_final( S->R, out, S->outlen ); } int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES]; blake2b_state S[PARALLELISM_DEGREE][1]; blake2b_state FS[1]; size_t i; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ if( keylen > 0 ) { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S[i], block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } #if defined(_OPENMP) #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2B_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) { blake2b_update( S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; } if( inlen__ > i * BLAKE2B_BLOCKBYTES ) { const size_t left = inlen__ - i * BLAKE2B_BLOCKBYTES; const size_t len = left <= BLAKE2B_BLOCKBYTES ? left : BLAKE2B_BLOCKBYTES; blake2b_update( S[i], in__, len ); } blake2b_final( S[i], hash[i], BLAKE2B_OUTBYTES ); } if( blake2bp_init_root( FS, outlen, keylen ) < 0 ) return -1; FS->last_node = 1; /* Mark as last node */ for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( FS, hash[i], BLAKE2B_OUTBYTES ); return blake2b_final( FS, out, outlen ); } #if defined(BLAKE2BP_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2bp( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2bp_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2bp_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2bp_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2bp_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2bp_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2s-load-neon.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2S_LOAD_NEON_H #define BLAKE2S_LOAD_NEON_H #define LOAD_MSG_0_1(buf) \ t1 = vzip_u32(m0, m1); \ t2 = vzip_u32(m2, m3); \ buf = vcombine_u32(t1.val[0], t2.val[0]); #define LOAD_MSG_0_2(buf) \ t1 = vzip_u32(m0, m1); \ t2 = vzip_u32(m2, m3); \ buf = vcombine_u32(t1.val[1], t2.val[1]); #define LOAD_MSG_0_3(buf) \ t1 = vzip_u32(m4, m5); \ t2 = vzip_u32(m6, m7); \ buf = vcombine_u32(t1.val[0], t2.val[0]); #define LOAD_MSG_0_4(buf) \ t1 = vzip_u32(m4, m5); \ t2 = vzip_u32(m6, m7); \ buf = vcombine_u32(t1.val[1], t2.val[1]); #define LOAD_MSG_1_1(buf) \ t1 = vzip_u32(m7, m2); \ t2 = vzip_u32(m4, m6); \ buf = vcombine_u32(t1.val[0], t2.val[1]); #define LOAD_MSG_1_2(buf) \ t1 = vzip_u32(m5, m4); \ buf = vcombine_u32(t1.val[0], vext_u32(m7, m3, 1)); #define LOAD_MSG_1_3(buf) \ t2 = vzip_u32(m5, m2); \ buf = vcombine_u32(vrev64_u32(m0), t2.val[1]); #define LOAD_MSG_1_4(buf) \ t1 = vzip_u32(m6, m1); \ t2 = vzip_u32(m3, m1); \ buf = vcombine_u32(t1.val[0], t2.val[1]); #define LOAD_MSG_2_1(buf) \ t2 = vzip_u32(m2, m7); \ buf = vcombine_u32(vext_u32(m5, m6, 1), t2.val[1]); #define LOAD_MSG_2_2(buf) \ t1 = vzip_u32(m4, m0); \ buf = vcombine_u32(t1.val[0], vrev64_u32(vext_u32(m6, m1, 1))); #define LOAD_MSG_2_3(buf) \ t2 = vzip_u32(m3, m4); \ buf = vcombine_u32(vrev64_u32(vext_u32(m1, m5, 1)), t2.val[1]); #define LOAD_MSG_2_4(buf) \ t1 = vzip_u32(m7, m3); \ buf = vcombine_u32(t1.val[0], vext_u32(m0, m2, 1)); #define LOAD_MSG_3_1(buf) \ t1 = vzip_u32(m3, m1); \ t2 = vzip_u32(m6, m5); \ buf = vcombine_u32(t1.val[1], t2.val[1]); #define LOAD_MSG_3_2(buf) \ t1 = vzip_u32(m4, m0); \ t2 = vzip_u32(m6, m7); \ buf = vcombine_u32(t1.val[1], t2.val[0]); #define LOAD_MSG_3_3(buf) \ buf = vcombine_u32(vrev64_u32(vext_u32(m2, m1, 1)), \ vrev64_u32(vext_u32(m7, m2, 1))); #define LOAD_MSG_3_4(buf) \ t1 = vzip_u32(m3, m5); \ t2 = vzip_u32(m0, m4); \ buf = vcombine_u32(t1.val[0], t2.val[0]); #define LOAD_MSG_4_1(buf) \ t1 = vzip_u32(m4, m2); \ t2 = vzip_u32(m1, m5); \ buf = vcombine_u32(t1.val[1], t2.val[0]); #define LOAD_MSG_4_2(buf) \ buf = vcombine_u32(vrev64_u32(vext_u32(m3, m0, 1)), \ vrev64_u32(vext_u32(m7, m2, 1))); #define LOAD_MSG_4_3(buf) \ buf = vcombine_u32(vrev64_u32(vext_u32(m5, m7, 1)), \ vrev64_u32(vext_u32(m1, m3, 1))); #define LOAD_MSG_4_4(buf) \ buf = vcombine_u32(vext_u32(m0, m6, 1), \ vrev64_u32(vext_u32(m6, m4, 1))); #define LOAD_MSG_5_1(buf) \ t1 = vzip_u32(m1, m3); \ t2 = vzip_u32(m0, m4); \ buf = vcombine_u32(t1.val[0], t2.val[0]); #define LOAD_MSG_5_2(buf) \ t1 = vzip_u32(m6, m5); \ t2 = vzip_u32(m5, m1); \ buf = vcombine_u32(t1.val[0], t2.val[1]); #define LOAD_MSG_5_3(buf) \ t2 = vzip_u32(m7, m0); \ buf = vcombine_u32(vrev64_u32(vext_u32(m3, m2, 1)), t2.val[1]); #define LOAD_MSG_5_4(buf) \ t1 = vzip_u32(m6, m2); \ buf = vcombine_u32(t1.val[1], vrev64_u32(vext_u32(m4, m7, 1))); #define LOAD_MSG_6_1(buf) \ t2 = vzip_u32(m7, m2); \ buf = vcombine_u32(vrev64_u32(vext_u32(m0, m6, 1)), t2.val[0]); #define LOAD_MSG_6_2(buf) \ t1 = vzip_u32(m2, m7); \ buf = vcombine_u32(t1.val[1], vext_u32(m6, m5, 1)); #define LOAD_MSG_6_3(buf) \ t1 = vzip_u32(m0, m3); \ buf = vcombine_u32(t1.val[0], vrev64_u32(m4)); #define LOAD_MSG_6_4(buf) \ t1 = vzip_u32(m3, m1); \ buf = vcombine_u32(t1.val[1], vrev64_u32(vext_u32(m5, m1, 1))); #define LOAD_MSG_7_1(buf) \ t1 = vzip_u32(m6, m3); \ buf = vcombine_u32(t1.val[1], vrev64_u32(vext_u32(m1, m6, 1))); #define LOAD_MSG_7_2(buf) \ t2 = vzip_u32(m0, m4); \ buf = vcombine_u32(vext_u32(m5, m7, 1), t2.val[1]); #define LOAD_MSG_7_3(buf) \ t1 = vzip_u32(m2, m7); \ t2 = vzip_u32(m4, m1); \ buf = vcombine_u32(t1.val[1], t2.val[0]); #define LOAD_MSG_7_4(buf) \ t1 = vzip_u32(m0, m2); \ t2 = vzip_u32(m3, m5); \ buf = vcombine_u32(t1.val[0], t2.val[0]); #define LOAD_MSG_8_1(buf) \ t1 = vzip_u32(m3, m7); \ buf = vcombine_u32(t1.val[0], vext_u32(m5, m0, 1)); #define LOAD_MSG_8_2(buf) \ t1 = vzip_u32(m7, m4); \ buf = vcombine_u32(t1.val[1], vext_u32(m1, m4, 1)); #define LOAD_MSG_8_3(buf) \ buf = vcombine_u32(m6, vext_u32(m0, m5, 1)); #define LOAD_MSG_8_4(buf) \ buf = vcombine_u32(vrev64_u32(vext_u32(m3, m1, 1)), m2); #define LOAD_MSG_9_1(buf) \ t1 = vzip_u32(m5, m4); \ t2 = vzip_u32(m3, m0); \ buf = vcombine_u32(t1.val[0], t2.val[1]); #define LOAD_MSG_9_2(buf) \ t1 = vzip_u32(m1, m2); \ buf = vcombine_u32(t1.val[0], vrev64_u32(vext_u32(m2, m3, 1))); #define LOAD_MSG_9_3(buf) \ t1 = vzip_u32(m7, m4); \ t2 = vzip_u32(m1, m6); \ buf = vcombine_u32(t1.val[1], t2.val[1]); #define LOAD_MSG_9_4(buf) \ t2 = vzip_u32(m6, m0); \ buf = vcombine_u32(vext_u32(m5, m7, 1), t2.val[0]); #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2s-neon.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #include "blake2.h" #include "blake2-impl.h" static const uint32_t blake2s_IV[8] = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL }; static void blake2s_set_lastnode( blake2s_state *S ) { S->f[1] = (uint32_t)-1; } /* Some helper functions, not necessarily useful */ static int blake2s_is_lastblock( const blake2s_state *S ) { return S->f[0] != 0; } static void blake2s_set_lastblock( blake2s_state *S ) { if( S->last_node ) blake2s_set_lastnode( S ); S->f[0] = (uint32_t)-1; } static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } static void blake2s_init0( blake2s_state *S ) { size_t i; memset( S, 0, sizeof( blake2s_state ) ); for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; } /* init2 xors IV with input parameter block */ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) { const unsigned char *p = ( const unsigned char * )( P ); size_t i; blake2s_init0( S ); /* IV XOR ParamBlock */ for( i = 0; i < 8; ++i ) S->h[i] ^= load32( &p[i * 4] ); S->outlen = P->digest_length; return 0; } /* Sequential blake2s initialization */ int blake2s_init( blake2s_state *S, size_t outlen ) { blake2s_param P[1]; /* Move interval verification here? */ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) { blake2s_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2s_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } /* Round 0 */ #undef LOAD_MSG_0_1_ #define LOAD_MSG_0_1_(x) \ do { \ t1 = vzip_u32(m0, m1); \ t2 = vzip_u32(m2, m3); \ x = vcombine_u32(t1.val[0], t2.val[0]); \ } while(0) #undef LOAD_MSG_0_2_ #define LOAD_MSG_0_2_(x) \ do { \ t1 = vzip_u32(m0, m1); \ t2 = vzip_u32(m2, m3); \ x = vcombine_u32(t1.val[1], t2.val[1]); \ } while(0) #undef LOAD_MSG_0_3_ #define LOAD_MSG_0_3_(x) \ do { \ t1 = vzip_u32(m4, m5); \ t2 = vzip_u32(m6, m7); \ x = vcombine_u32(t1.val[0], t2.val[0]); \ } while(0) #undef LOAD_MSG_0_4_ #define LOAD_MSG_0_4_(x) \ do { \ t1 = vzip_u32(m4, m5); \ t2 = vzip_u32(m6, m7); \ x = vcombine_u32(t1.val[1], t2.val[1]); \ } while(0) /* Round 1 */ #undef LOAD_MSG_1_1_ #define LOAD_MSG_1_1_(x) \ do { \ t1 = vzip_u32(m7, m2); \ t2 = vzip_u32(m4, m6); \ x = vcombine_u32(t1.val[0], t2.val[1]); \ } while(0) #undef LOAD_MSG_1_2_ #define LOAD_MSG_1_2_(x) \ do { \ t1 = vzip_u32(m5, m4); \ x = vcombine_u32(t1.val[0], vext_u32(m7, m3, 1)); \ } while(0) #undef LOAD_MSG_1_3_ #define LOAD_MSG_1_3_(x) \ do { \ t2 = vzip_u32(m5, m2); \ x = vcombine_u32(vrev64_u32(m0), t2.val[1]); \ } while(0) #undef LOAD_MSG_1_4_ #define LOAD_MSG_1_4_(x) \ do { \ t1 = vzip_u32(m6, m1); \ t2 = vzip_u32(m3, m1); \ x = vcombine_u32(t1.val[0], t2.val[1]); \ } while(0) /* Round 2 */ #undef LOAD_MSG_2_1_ #define LOAD_MSG_2_1_(x) \ do { \ t2 = vzip_u32(m2, m7); \ x = vcombine_u32(vext_u32(m5, m6, 1), t2.val[1]); \ } while(0) #undef LOAD_MSG_2_2_ #define LOAD_MSG_2_2_(x) \ do { \ t1 = vzip_u32(m4, m0); \ x = vcombine_u32(t1.val[0], vrev64_u32(vext_u32(m6, m1, 1))); \ } while(0) #undef LOAD_MSG_2_3_ #define LOAD_MSG_2_3_(x) \ do { \ t2 = vzip_u32(m3, m4); \ x = vcombine_u32(vrev64_u32(vext_u32(m1, m5, 1)), t2.val[1]); \ } while(0) #undef LOAD_MSG_2_4_ #define LOAD_MSG_2_4_(x) \ do { \ t1 = vzip_u32(m7, m3); \ x = vcombine_u32(t1.val[0], vext_u32(m0, m2, 1)); \ } while(0) /* Round 3 */ #undef LOAD_MSG_3_1_ #define LOAD_MSG_3_1_(x) \ do { \ t1 = vzip_u32(m3, m1); \ t2 = vzip_u32(m6, m5); \ x = vcombine_u32(t1.val[1], t2.val[1]); \ } while(0) #undef LOAD_MSG_3_2_ #define LOAD_MSG_3_2_(x) \ do { \ t1 = vzip_u32(m4, m0); \ t2 = vzip_u32(m6, m7); \ x = vcombine_u32(t1.val[1], t2.val[0]); \ } while(0) #undef LOAD_MSG_3_3_ #define LOAD_MSG_3_3_(x) \ do { \ x = vcombine_u32(vrev64_u32(vext_u32(m2, m1, 1)), \ vrev64_u32(vext_u32(m7, m2, 1))); \ } while(0) #undef LOAD_MSG_3_4_ #define LOAD_MSG_3_4_(x) \ do { \ t1 = vzip_u32(m3, m5); \ t2 = vzip_u32(m0, m4); \ x = vcombine_u32(t1.val[0], t2.val[0]); \ } while(0) /* Round 4 */ #undef LOAD_MSG_4_1_ #define LOAD_MSG_4_1_(x) \ do { \ t1 = vzip_u32(m4, m2); \ t2 = vzip_u32(m1, m5); \ x = vcombine_u32(t1.val[1], t2.val[0]); \ } while(0) #undef LOAD_MSG_4_2_ #define LOAD_MSG_4_2_(x) \ do { \ x = vcombine_u32(vrev64_u32(vext_u32(m3, m0, 1)), \ vrev64_u32(vext_u32(m7, m2, 1))); \ } while(0) #undef LOAD_MSG_4_3_ #define LOAD_MSG_4_3_(x) \ do { \ x = vcombine_u32(vrev64_u32(vext_u32(m5, m7, 1)), \ vrev64_u32(vext_u32(m1, m3, 1))); \ } while(0) #undef LOAD_MSG_4_4_ #define LOAD_MSG_4_4_(x) \ do { \ x = vcombine_u32(vext_u32(m0, m6, 1), \ vrev64_u32(vext_u32(m6, m4, 1))); \ } while(0) /* Round 5 */ #undef LOAD_MSG_5_1_ #define LOAD_MSG_5_1_(x) \ do { \ t1 = vzip_u32(m1, m3); \ t2 = vzip_u32(m0, m4); \ x = vcombine_u32(t1.val[0], t2.val[0]); \ } while(0) #undef LOAD_MSG_5_2_ #define LOAD_MSG_5_2_(x) \ do { \ t1 = vzip_u32(m6, m5); \ t2 = vzip_u32(m5, m1); \ x = vcombine_u32(t1.val[0], t2.val[1]); \ } while(0) #undef LOAD_MSG_5_3_ #define LOAD_MSG_5_3_(x) \ do { \ t2 = vzip_u32(m7, m0); \ x = vcombine_u32(vrev64_u32(vext_u32(m3, m2, 1)), t2.val[1]); \ } while(0) #undef LOAD_MSG_5_4_ #define LOAD_MSG_5_4_(x) \ do { \ t1 = vzip_u32(m6, m2); \ x = vcombine_u32(t1.val[1], vrev64_u32(vext_u32(m4, m7, 1))); \ } while(0) /* Round 6 */ #undef LOAD_MSG_6_1_ #define LOAD_MSG_6_1_(x) \ do { \ t2 = vzip_u32(m7, m2); \ x = vcombine_u32(vrev64_u32(vext_u32(m0, m6, 1)), t2.val[0]); \ } while(0) #undef LOAD_MSG_6_2_ #define LOAD_MSG_6_2_(x) \ do { \ t1 = vzip_u32(m2, m7); \ x = vcombine_u32(t1.val[1], vext_u32(m6, m5, 1)); \ } while(0) #undef LOAD_MSG_6_3_ #define LOAD_MSG_6_3_(x) \ do { \ t1 = vzip_u32(m0, m3); \ x = vcombine_u32(t1.val[0], vrev64_u32(m4)); \ } while(0) #undef LOAD_MSG_6_4_ #define LOAD_MSG_6_4_(x) \ do { \ t1 = vzip_u32(m3, m1); \ x = vcombine_u32(t1.val[1], vrev64_u32(vext_u32(m5, m1, 1))); \ } while(0) /* Round 7 */ #undef LOAD_MSG_7_1_ #define LOAD_MSG_7_1_(x) \ do { \ t1 = vzip_u32(m6, m3); \ x = vcombine_u32(t1.val[1], vrev64_u32(vext_u32(m1, m6, 1))); \ } while(0) #undef LOAD_MSG_7_2_ #define LOAD_MSG_7_2_(x) \ do { \ t2 = vzip_u32(m0, m4); \ x = vcombine_u32(vext_u32(m5, m7, 1), t2.val[1]); \ } while(0) #undef LOAD_MSG_7_3_ #define LOAD_MSG_7_3_(x) \ do { \ t1 = vzip_u32(m2, m7); \ t2 = vzip_u32(m4, m1); \ x = vcombine_u32(t1.val[1], t2.val[0]); \ } while(0) #undef LOAD_MSG_7_4_ #define LOAD_MSG_7_4_(x) \ do { \ t1 = vzip_u32(m0, m2); \ t2 = vzip_u32(m3, m5); \ x = vcombine_u32(t1.val[0], t2.val[0]); \ } while(0) /* Round 8 */ #undef LOAD_MSG_8_1_ #define LOAD_MSG_8_1_(x) \ do { \ t1 = vzip_u32(m3, m7); \ x = vcombine_u32(t1.val[0], vext_u32(m5, m0, 1)); \ } while(0) #undef LOAD_MSG_8_2_ #define LOAD_MSG_8_2_(x) \ do { \ t1 = vzip_u32(m7, m4); \ x = vcombine_u32(t1.val[1], vext_u32(m1, m4, 1)); \ } while(0) #undef LOAD_MSG_8_3_ #define LOAD_MSG_8_3_(x) \ do { \ x = vcombine_u32(m6, vext_u32(m0, m5, 1)); \ } while(0) #undef LOAD_MSG_8_4_ #define LOAD_MSG_8_4_(x) \ do { \ x = vcombine_u32(vrev64_u32(vext_u32(m3, m1, 1)), m2); \ } while(0) /* Round 9 */ #undef LOAD_MSG_9_1_ #define LOAD_MSG_9_1_(x) \ do { \ t1 = vzip_u32(m5, m4); \ t2 = vzip_u32(m3, m0); \ x = vcombine_u32(t1.val[0], t2.val[1]); \ } while(0) #undef LOAD_MSG_9_2_ #define LOAD_MSG_9_2_(x) \ do { \ t1 = vzip_u32(m1, m2); \ x = vcombine_u32(t1.val[0], vrev64_u32(vext_u32(m2, m3, 1))); \ } while(0) #undef LOAD_MSG_9_3_ #define LOAD_MSG_9_3_(x) \ do { \ t1 = vzip_u32(m7, m4); \ t2 = vzip_u32(m1, m6); \ x = vcombine_u32(t1.val[1], t2.val[1]); \ } while(0) #undef LOAD_MSG_9_4_ #define LOAD_MSG_9_4_(x) \ do { \ t2 = vzip_u32(m6, m0); \ x = vcombine_u32(vext_u32(m5, m7, 1), t2.val[0]); \ } while(0) #define vrorq_n_u32_16(x) vreinterpretq_u32_u16( \ vrev32q_u16( \ vreinterpretq_u16_u32(x))) #define vrorq_n_u32_12(x) vorrq_u32( \ vshrq_n_u32(x, 12), \ vshlq_n_u32(x, 20)); #define vrorq_n_u32_8(x) vorrq_u32( \ vshrq_n_u32(x, 8), \ vshlq_n_u32(x, 24)); #define vrorq_n_u32_7(x) vorrq_u32( \ vshrq_n_u32(x, 7), \ vshlq_n_u32(x, 25)); #define DIAGONALIZE(row1, row2, row3, row4) \ do { \ /* do nothing to row1 */ \ row2 = vextq_u32(row2, row2, 1); \ row3 = vextq_u32(row3, row3, 2); \ row4 = vextq_u32(row4, row4, 3); \ } while(0) #define UNDIAGONALIZE(row1, row2, row3, row4) \ do { \ /* do nothing to row1 */ \ row2 = vextq_u32(row2, row2, 3); \ row3 = vextq_u32(row3, row3, 2); \ row4 = vextq_u32(row4, row4, 1); \ } while(0) #define G1(r, i, row1, row2, row3, row4) \ do { \ LOAD_MSG_##r##_##i##_(e1234); \ row1 = vaddq_u32(row1, vaddq_u32(row2, e1234)); \ row4 = vrorq_n_u32_16(veorq_u32(row4, row1)); \ row3 = vaddq_u32(row3, row4); \ row2 = vrorq_n_u32_12(veorq_u32(row2, row3)); \ } while(0) #define G2(r, i, row1, row2, row3, row4) \ do { \ LOAD_MSG_##r##_##i##_(e1234); \ row1 = vaddq_u32(row1, vaddq_u32(row2, e1234)); \ row4 = vrorq_n_u32_8(veorq_u32(row4, row1)); \ row3 = vaddq_u32(row3, row4); \ row2 = vrorq_n_u32_7(veorq_u32(row2, row3)); \ } while(0) #define ROUND(r) \ do { \ G1(r, 1, row1, row2, row3, row4); \ G2(r, 2, row1, row2, row3, row4); \ DIAGONALIZE(row1, row2, row3, row4); \ G1(r, 3, row1, row2, row3, row4); \ G2(r, 4, row1, row2, row3, row4); \ UNDIAGONALIZE(row1, row2, row3, row4); \ } while(0) static void blake2s_compress( blake2s_state *S, const uint8_t in[BLAKE2S_BLOCKBYTES] ) { uint32x4_t row1, row2, row3, row4, e1234; uint32x2x2_t t1, t2; const uint32x4_t h1234 = row1 = vld1q_u32(&S->h[0]); const uint32x4_t h5678 = row2 = vld1q_u32(&S->h[4]); const uint32x2_t m0 = vreinterpret_u32_u8(vld1_u8(&in[ 0])); const uint32x2_t m1 = vreinterpret_u32_u8(vld1_u8(&in[ 8])); const uint32x2_t m2 = vreinterpret_u32_u8(vld1_u8(&in[16])); const uint32x2_t m3 = vreinterpret_u32_u8(vld1_u8(&in[24])); const uint32x2_t m4 = vreinterpret_u32_u8(vld1_u8(&in[32])); const uint32x2_t m5 = vreinterpret_u32_u8(vld1_u8(&in[40])); const uint32x2_t m6 = vreinterpret_u32_u8(vld1_u8(&in[48])); const uint32x2_t m7 = vreinterpret_u32_u8(vld1_u8(&in[56])); row3 = vld1q_u32(&blake2s_IV[0]); row4 = veorq_u32(vcombine_u32(vld1_u32(&S->t[0]), vld1_u32(&S->f[0])), vld1q_u32(&blake2s_IV[4])); ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); vst1q_u32(&S->h[0], veorq_u32(h1234, veorq_u32(row1, row3))); vst1q_u32(&S->h[4], veorq_u32(h5678, veorq_u32(row2, row4))); } #undef G1234 #undef ROUND int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2S_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2S_BLOCKBYTES) { blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES); blake2s_compress( S, in ); in += BLAKE2S_BLOCKBYTES; inlen -= BLAKE2S_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2s_final( blake2s_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2s_is_lastblock( S ) ) return -1; blake2s_increment_counter( S, ( uint32_t )S->buflen ); blake2s_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ blake2s_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, outlen ); secure_zero_memory(buffer, sizeof(buffer)); return 0; } int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2s_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2s_init( S, outlen ) < 0 ) return -1; } blake2s_update( S, ( const uint8_t * )in, inlen ); blake2s_final( S, out, outlen ); return 0; } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2S_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2s_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2s_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2s-round.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2S_ROUND_H #define BLAKE2S_ROUND_H #define vrorq_n_u32_16(x) vreinterpretq_u32_u16( \ vrev32q_u16( \ vreinterpretq_u16_u32(x))) #define vrorq_n_u32_12(x) vorrq_u32( \ vshrq_n_u32(x, 12), \ vshlq_n_u32(x, 20)); #define vrorq_n_u32_8(x) vorrq_u32( \ vshrq_n_u32(x, 8), \ vshlq_n_u32(x, 24)); #define vrorq_n_u32_7(x) vorrq_u32( \ vshrq_n_u32(x, 7), \ vshlq_n_u32(x, 25)); #define G1(row1,row2,row3,row4,buf) \ row1 = vaddq_u32(row1, vaddq_u32(row2, buf)); \ row4 = vrorq_n_u32_16(veorq_u32(row4, row1)); \ row3 = vaddq_u32(row3, row4); \ row2 = vrorq_n_u32_12(veorq_u32(row2, row3)); #define G2(row1, row2, row3, row4,buf) \ row1 = vaddq_u32(row1, vaddq_u32(row2, buf)); \ row4 = vrorq_n_u32_8(veorq_u32(row4, row1)); \ row3 = vaddq_u32(row3, row4); \ row2 = vrorq_n_u32_7(veorq_u32(row2, row3)); #define DIAGONALIZE(row1,row2,row3,row4) \ row2 = vextq_u32(row2, row2, 1); \ row3 = vextq_u32(row3, row3, 2); \ row4 = vextq_u32(row4, row4, 3); #define UNDIAGONALIZE(row1,row2,row3,row4) \ row2 = vextq_u32(row2, row2, 3); \ row3 = vextq_u32(row3, row3, 2); \ row4 = vextq_u32(row4, row4, 1); #include "blake2s-load-neon.h" #define ROUND(r) \ LOAD_MSG_ ##r ##_1(buf1); \ G1(row1, row2, row3, row4, buf1); \ LOAD_MSG_ ##r ##_2(buf2); \ G2(row1, row2, row3, row4, buf2); \ DIAGONALIZE(row1, row2, row3, row4); \ LOAD_MSG_ ##r ##_3(buf3); \ G1(row1, row2, row3, row4, buf3); \ LOAD_MSG_ ##r ##_4(buf4); \ G2(row1, row2, row3, row4, buf4); \ UNDIAGONALIZE(row1, row2, row3, row4); #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2s.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #include "blake2.h" #include "blake2-impl.h" #include "blake2s-round.h" static const uint32_t blake2s_IV[8] = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL }; static void blake2s_set_lastnode( blake2s_state *S ) { S->f[1] = (uint32_t)-1; } /* Some helper functions, not necessarily useful */ static int blake2s_is_lastblock( const blake2s_state *S ) { return S->f[0] != 0; } static void blake2s_set_lastblock( blake2s_state *S ) { if( S->last_node ) blake2s_set_lastnode( S ); S->f[0] = (uint32_t)-1; } static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } static void blake2s_init0( blake2s_state *S ) { size_t i; memset( S, 0, sizeof( blake2s_state ) ); for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; } /* init2 xors IV with input parameter block */ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) { const unsigned char *p = ( const unsigned char * )( P ); size_t i; blake2s_init0( S ); /* IV XOR ParamBlock */ for( i = 0; i < 8; ++i ) S->h[i] ^= load32( &p[i * 4] ); S->outlen = P->digest_length; return 0; } /* Sequential blake2s initialization */ int blake2s_init( blake2s_state *S, size_t outlen ) { blake2s_param P[1]; /* Move interval verification here? */ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) { blake2s_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2s_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } static void blake2s_compress( blake2s_state *S, const uint8_t in[BLAKE2S_BLOCKBYTES] ) { uint32x4_t row1, row2, row3, row4; uint32x4_t buf1, buf2, buf3, buf4; uint32x2x2_t t1, t2; const uint32x4_t h1234 = row1 = vld1q_u32(&S->h[0]); const uint32x4_t h5678 = row2 = vld1q_u32(&S->h[4]); const uint32x2_t m0 = vreinterpret_u32_u8(vld1_u8(&in[ 0])); const uint32x2_t m1 = vreinterpret_u32_u8(vld1_u8(&in[ 8])); const uint32x2_t m2 = vreinterpret_u32_u8(vld1_u8(&in[16])); const uint32x2_t m3 = vreinterpret_u32_u8(vld1_u8(&in[24])); const uint32x2_t m4 = vreinterpret_u32_u8(vld1_u8(&in[32])); const uint32x2_t m5 = vreinterpret_u32_u8(vld1_u8(&in[40])); const uint32x2_t m6 = vreinterpret_u32_u8(vld1_u8(&in[48])); const uint32x2_t m7 = vreinterpret_u32_u8(vld1_u8(&in[56])); row3 = vld1q_u32(&blake2s_IV[0]); row4 = veorq_u32(vcombine_u32(vld1_u32(&S->t[0]), vld1_u32(&S->f[0])), vld1q_u32(&blake2s_IV[4])); ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); vst1q_u32(&S->h[0], veorq_u32(h1234, veorq_u32(row1, row3))); vst1q_u32(&S->h[4], veorq_u32(h5678, veorq_u32(row2, row4))); } int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2S_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2S_BLOCKBYTES) { blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES); blake2s_compress( S, in ); in += BLAKE2S_BLOCKBYTES; inlen -= BLAKE2S_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2s_final( blake2s_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2s_is_lastblock( S ) ) return -1; blake2s_increment_counter( S, ( uint32_t )S->buflen ); blake2s_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ blake2s_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, outlen ); secure_zero_memory(buffer, sizeof(buffer)); return 0; } int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2s_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2s_init( S, outlen ) < 0 ) return -1; } blake2s_update( S, ( const uint8_t * )in, inlen ); blake2s_final( S, out, outlen ); return 0; } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2S_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2s_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2s_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2sp.c ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #if defined(_OPENMP) #include #endif #include "blake2.h" #include "blake2-impl.h" #define PARALLELISM_DEGREE 8 /* blake2sp_init_param defaults to setting the expecting output length from the digest_length parameter block field. In some cases, however, we do not want this, as the output length of these instances is given by inner_length instead. */ static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P ) { int err = blake2s_init_param(S, P); S->outlen = P->inner_length; return err; } static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint64_t offset ) { blake2s_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = offset; P->xof_length = 0; P->node_depth = 0; P->inner_length = BLAKE2S_OUTBYTES; memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2sp_init_leaf_param( S, P ); } static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen ) { blake2s_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = 0; P->xof_length = 0; P->node_depth = 1; P->inner_length = BLAKE2S_OUTBYTES; memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2sp_init( blake2sp_state *S, size_t outlen ) { size_t i; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2sp_init_root( S->R, outlen, 0 ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; return 0; } int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ) { size_t i; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2sp_init_root( S->R, outlen, keylen ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; size_t left = S->buflen; size_t fill = sizeof( S->buf ) - left; size_t i; if( left && inlen >= fill ) { memcpy( S->buf + left, in, fill ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); in += fill; inlen -= fill; left = 0; } #if defined(_OPENMP) #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2S_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) { blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; } } in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); inlen %= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; if( inlen > 0 ) memcpy( S->buf + left, in, inlen ); S->buflen = left + inlen; return 0; } int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; size_t i; if(out == NULL || outlen < S->outlen) { return -1; } for( i = 0; i < PARALLELISM_DEGREE; ++i ) { if( S->buflen > i * BLAKE2S_BLOCKBYTES ) { size_t left = S->buflen - i * BLAKE2S_BLOCKBYTES; if( left > BLAKE2S_BLOCKBYTES ) left = BLAKE2S_BLOCKBYTES; blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, left ); } blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES ); } for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES ); return blake2s_final( S->R, out, S->outlen ); } int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; blake2s_state S[PARALLELISM_DEGREE][1]; blake2s_state FS[1]; size_t i; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ if( keylen > 0 ) { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } #if defined(_OPENMP) #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2S_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) { blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; } if( inlen__ > i * BLAKE2S_BLOCKBYTES ) { const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES; const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES; blake2s_update( S[i], in__, len ); } blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES ); } if( blake2sp_init_root( FS, outlen, keylen ) < 0 ) return -1; FS->last_node = 1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES ); return blake2s_final( FS, out, outlen ); } #if defined(BLAKE2SP_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2sp_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2sp_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2sp_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2xb.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2016, JP Aumasson . Copyright 2016, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" int blake2xb_init( blake2xb_state *S, const size_t outlen ) { return blake2xb_init_key(S, outlen, NULL, 0); } int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen) { if ( outlen == 0 || outlen > 0xFFFFFFFFUL ) { return -1; } if (NULL != key && keylen > BLAKE2B_KEYBYTES) { return -1; } if (NULL == key && keylen > 0) { return -1; } /* Initialize parameter block */ S->P->digest_length = BLAKE2B_OUTBYTES; S->P->key_length = keylen; S->P->fanout = 1; S->P->depth = 1; store32( &S->P->leaf_length, 0 ); store32( &S->P->node_offset, 0 ); store32( &S->P->xof_length, outlen ); S->P->node_depth = 0; S->P->inner_length = 0; memset( S->P->reserved, 0, sizeof( S->P->reserved ) ); memset( S->P->salt, 0, sizeof( S->P->salt ) ); memset( S->P->personal, 0, sizeof( S->P->personal ) ); if( blake2b_init_param( S->S, S->P ) < 0 ) { return -1; } if (keylen > 0) { uint8_t block[BLAKE2B_BLOCKBYTES]; memset(block, 0, BLAKE2B_BLOCKBYTES); memcpy(block, key, keylen); blake2b_update(S->S, block, BLAKE2B_BLOCKBYTES); secure_zero_memory(block, BLAKE2B_BLOCKBYTES); } return 0; } int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen ) { return blake2b_update( S->S, in, inlen ); } int blake2xb_final( blake2xb_state *S, void *out, size_t outlen) { blake2b_state C[1]; blake2b_param P[1]; uint32_t xof_length = load32(&S->P->xof_length); uint8_t root[BLAKE2B_BLOCKBYTES]; size_t i; if (NULL == out) { return -1; } /* outlen must match the output size defined in xof_length, */ /* unless it was -1, in which case anything goes except 0. */ if(xof_length == 0xFFFFFFFFUL) { if(outlen == 0) { return -1; } } else { if(outlen != xof_length) { return -1; } } /* Finalize the root hash */ if (blake2b_final(S->S, root, BLAKE2B_OUTBYTES) < 0) { return -1; } /* Set common block structure values */ /* Copy values from parent instance, and only change the ones below */ memcpy(P, S->P, sizeof(blake2b_param)); P->key_length = 0; P->fanout = 0; P->depth = 0; store32(&P->leaf_length, BLAKE2B_OUTBYTES); P->inner_length = BLAKE2B_OUTBYTES; P->node_depth = 0; for (i = 0; outlen > 0; ++i) { const size_t block_size = (outlen < BLAKE2B_OUTBYTES) ? outlen : BLAKE2B_OUTBYTES; /* Initialize state */ P->digest_length = block_size; store32(&P->node_offset, i); blake2b_init_param(C, P); /* Process key if needed */ blake2b_update(C, root, BLAKE2B_OUTBYTES); if (blake2b_final(C, (uint8_t *)out + i * BLAKE2B_OUTBYTES, block_size) < 0 ) { return -1; } outlen -= block_size; } secure_zero_memory(root, sizeof(root)); secure_zero_memory(P, sizeof(P)); secure_zero_memory(C, sizeof(C)); /* Put blake2xb in an invalid state? cf. blake2s_is_lastblock */ return 0; } int blake2xb(void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen) { blake2xb_state S[1]; /* Verify parameters */ if (NULL == in && inlen > 0) return -1; if (NULL == out) return -1; if (NULL == key && keylen > 0) return -1; if (keylen > BLAKE2B_KEYBYTES) return -1; if (outlen == 0) return -1; /* Initialize the root block structure */ if (blake2xb_init_key(S, outlen, key, keylen) < 0) { return -1; } /* Absorb the input message */ blake2xb_update(S, in, inlen); /* Compute the root node of the tree and the final hash using the counter construction */ return blake2xb_final(S, out, outlen); } #if defined(BLAKE2XB_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step, outlen; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) { key[i] = ( uint8_t )i; } for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { buf[i] = ( uint8_t )i; } /* Testing length of ouputs rather than inputs */ /* (Test of input lengths mostly covered by blake2s tests) */ /* Test simple API */ for( outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen ) { uint8_t hash[BLAKE2_KAT_LENGTH] = {0}; if( blake2xb( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2B_KEYBYTES ) < 0 ) { goto fail; } if( 0 != memcmp( hash, blake2xb_keyed_kat[outlen-1], outlen ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) { uint8_t hash[BLAKE2_KAT_LENGTH]; blake2xb_state S; uint8_t * p = buf; size_t mlen = BLAKE2_KAT_LENGTH; int err = 0; if( (err = blake2xb_init_key(&S, outlen, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2xb_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2xb_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2xb_final(&S, hash, outlen)) < 0) { goto fail; } if (0 != memcmp(hash, blake2xb_keyed_kat[outlen-1], outlen)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/neon/blake2xs.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2016, JP Aumasson . Copyright 2016, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" int blake2xs_init( blake2xs_state *S, const size_t outlen ) { return blake2xs_init_key(S, outlen, NULL, 0); } int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen ) { if ( outlen == 0 || outlen > 0xFFFFUL ) { return -1; } if (NULL != key && keylen > BLAKE2B_KEYBYTES) { return -1; } if (NULL == key && keylen > 0) { return -1; } /* Initialize parameter block */ S->P->digest_length = BLAKE2S_OUTBYTES; S->P->key_length = keylen; S->P->fanout = 1; S->P->depth = 1; store32( &S->P->leaf_length, 0 ); store32( &S->P->node_offset, 0 ); store16( &S->P->xof_length, outlen ); S->P->node_depth = 0; S->P->inner_length = 0; memset( S->P->salt, 0, sizeof( S->P->salt ) ); memset( S->P->personal, 0, sizeof( S->P->personal ) ); if( blake2s_init_param( S->S, S->P ) < 0 ) { return -1; } if (keylen > 0) { uint8_t block[BLAKE2S_BLOCKBYTES]; memset(block, 0, BLAKE2S_BLOCKBYTES); memcpy(block, key, keylen); blake2s_update(S->S, block, BLAKE2S_BLOCKBYTES); secure_zero_memory(block, BLAKE2S_BLOCKBYTES); } return 0; } int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen ) { return blake2s_update( S->S, in, inlen ); } int blake2xs_final(blake2xs_state *S, void *out, size_t outlen) { blake2s_state C[1]; blake2s_param P[1]; uint16_t xof_length = load16(&S->P->xof_length); uint8_t root[BLAKE2S_BLOCKBYTES]; size_t i; if (NULL == out) { return -1; } /* outlen must match the output size defined in xof_length, */ /* unless it was -1, in which case anything goes except 0. */ if(xof_length == 0xFFFFUL) { if(outlen == 0) { return -1; } } else { if(outlen != xof_length) { return -1; } } /* Finalize the root hash */ if (blake2s_final(S->S, root, BLAKE2S_OUTBYTES) < 0) { return -1; } /* Set common block structure values */ /* Copy values from parent instance, and only change the ones below */ memcpy(P, S->P, sizeof(blake2s_param)); P->key_length = 0; P->fanout = 0; P->depth = 0; store32(&P->leaf_length, BLAKE2S_OUTBYTES); P->inner_length = BLAKE2S_OUTBYTES; P->node_depth = 0; for (i = 0; outlen > 0; ++i) { const size_t block_size = (outlen < BLAKE2S_OUTBYTES) ? outlen : BLAKE2S_OUTBYTES; /* Initialize state */ P->digest_length = block_size; store32(&P->node_offset, i); blake2s_init_param(C, P); /* Process key if needed */ blake2s_update(C, root, BLAKE2S_OUTBYTES); if (blake2s_final(C, (uint8_t *)out + i * BLAKE2S_OUTBYTES, block_size) < 0) { return -1; } outlen -= block_size; } secure_zero_memory(root, sizeof(root)); secure_zero_memory(P, sizeof(P)); secure_zero_memory(C, sizeof(C)); /* Put blake2xs in an invalid state? cf. blake2s_is_lastblock */ return 0; } int blake2xs(void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen) { blake2xs_state S[1]; /* Verify parameters */ if (NULL == in && inlen > 0) return -1; if (NULL == out) return -1; if (NULL == key && keylen > 0) return -1; if (keylen > BLAKE2S_KEYBYTES) return -1; if (outlen == 0) return -1; /* Initialize the root block structure */ if (blake2xs_init_key(S, outlen, key, keylen) < 0) { return -1; } /* Absorb the input message */ blake2xs_update(S, in, inlen); /* Compute the root node of the tree and the final hash using the counter construction */ return blake2xs_final(S, out, outlen); } #if defined(BLAKE2XS_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step, outlen; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) { key[i] = ( uint8_t )i; } for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { buf[i] = ( uint8_t )i; } /* Testing length of ouputs rather than inputs */ /* (Test of input lengths mostly covered by blake2s tests) */ /* Test simple API */ for( outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen ) { uint8_t hash[BLAKE2_KAT_LENGTH] = {0}; if( blake2xs( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2S_KEYBYTES ) < 0 ) { goto fail; } if( 0 != memcmp( hash, blake2xs_keyed_kat[outlen-1], outlen ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) { uint8_t hash[BLAKE2_KAT_LENGTH]; blake2xs_state S; uint8_t * p = buf; size_t mlen = BLAKE2_KAT_LENGTH; int err = 0; if( (err = blake2xs_init_key(&S, outlen, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2xs_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2xs_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2xs_final(&S, hash, outlen)) < 0) { goto fail; } if (0 != memcmp(hash, blake2xs_keyed_kat[outlen-1], outlen)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2-impl.h ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2_IMPL_H #define BLAKE2_IMPL_H #include #include #if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) #if defined(_MSC_VER) #define BLAKE2_INLINE __inline #elif defined(__GNUC__) #define BLAKE2_INLINE __inline__ #else #define BLAKE2_INLINE #endif #else #define BLAKE2_INLINE inline #endif static BLAKE2_INLINE uint32_t load32( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint32_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return (( uint32_t )( p[0] ) << 0) | (( uint32_t )( p[1] ) << 8) | (( uint32_t )( p[2] ) << 16) | (( uint32_t )( p[3] ) << 24) ; #endif } static BLAKE2_INLINE uint64_t load64( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint64_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return (( uint64_t )( p[0] ) << 0) | (( uint64_t )( p[1] ) << 8) | (( uint64_t )( p[2] ) << 16) | (( uint64_t )( p[3] ) << 24) | (( uint64_t )( p[4] ) << 32) | (( uint64_t )( p[5] ) << 40) | (( uint64_t )( p[6] ) << 48) | (( uint64_t )( p[7] ) << 56) ; #endif } static BLAKE2_INLINE uint16_t load16( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint16_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return ( uint16_t )((( uint32_t )( p[0] ) << 0) | (( uint32_t )( p[1] ) << 8)); #endif } static BLAKE2_INLINE void store16( void *dst, uint16_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; *p++ = ( uint8_t )w; w >>= 8; *p++ = ( uint8_t )w; #endif } static BLAKE2_INLINE void store32( void *dst, uint32_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); #endif } static BLAKE2_INLINE void store64( void *dst, uint64_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); p[4] = (uint8_t)(w >> 32); p[5] = (uint8_t)(w >> 40); p[6] = (uint8_t)(w >> 48); p[7] = (uint8_t)(w >> 56); #endif } static BLAKE2_INLINE uint64_t load48( const void *src ) { const uint8_t *p = ( const uint8_t * )src; return (( uint64_t )( p[0] ) << 0) | (( uint64_t )( p[1] ) << 8) | (( uint64_t )( p[2] ) << 16) | (( uint64_t )( p[3] ) << 24) | (( uint64_t )( p[4] ) << 32) | (( uint64_t )( p[5] ) << 40) ; } static BLAKE2_INLINE void store48( void *dst, uint64_t w ) { uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); p[4] = (uint8_t)(w >> 32); p[5] = (uint8_t)(w >> 40); } static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) { return ( w >> c ) | ( w << ( 32 - c ) ); } static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) { return ( w >> c ) | ( w << ( 64 - c ) ); } /* prevents compiler optimizing out memset() */ static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) { static void *(*const volatile memset_v)(void *, int, size_t) = &memset; memset_v(v, 0, n); } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2b-ref.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" static const uint64_t blake2b_IV[8] = { 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; static const uint8_t blake2b_sigma[12][16] = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } }; static void blake2b_set_lastnode( blake2b_state *S ) { S->f[1] = (uint64_t)-1; } /* Some helper functions, not necessarily useful */ static int blake2b_is_lastblock( const blake2b_state *S ) { return S->f[0] != 0; } static void blake2b_set_lastblock( blake2b_state *S ) { if( S->last_node ) blake2b_set_lastnode( S ); S->f[0] = (uint64_t)-1; } static void blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } static void blake2b_init0( blake2b_state *S ) { size_t i; memset( S, 0, sizeof( blake2b_state ) ); for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; } /* init xors IV with input parameter block */ int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) { const uint8_t *p = ( const uint8_t * )( P ); size_t i; blake2b_init0( S ); /* IV XOR ParamBlock */ for( i = 0; i < 8; ++i ) S->h[i] ^= load64( p + sizeof( S->h[i] ) * i ); S->outlen = P->digest_length; return 0; } int blake2b_init( blake2b_state *S, size_t outlen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2b_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); blake2b_update( S, block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } #define G(r,i,a,b,c,d) \ do { \ a = a + b + m[blake2b_sigma[r][2*i+0]]; \ d = rotr64(d ^ a, 32); \ c = c + d; \ b = rotr64(b ^ c, 24); \ a = a + b + m[blake2b_sigma[r][2*i+1]]; \ d = rotr64(d ^ a, 16); \ c = c + d; \ b = rotr64(b ^ c, 63); \ } while(0) #define ROUND(r) \ do { \ G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ G(r,2,v[ 2],v[ 6],v[10],v[14]); \ G(r,3,v[ 3],v[ 7],v[11],v[15]); \ G(r,4,v[ 0],v[ 5],v[10],v[15]); \ G(r,5,v[ 1],v[ 6],v[11],v[12]); \ G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ } while(0) static void blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) { uint64_t m[16]; uint64_t v[16]; size_t i; for( i = 0; i < 16; ++i ) { m[i] = load64( block + i * sizeof( m[i] ) ); } for( i = 0; i < 8; ++i ) { v[i] = S->h[i]; } v[ 8] = blake2b_IV[0]; v[ 9] = blake2b_IV[1]; v[10] = blake2b_IV[2]; v[11] = blake2b_IV[3]; v[12] = blake2b_IV[4] ^ S->t[0]; v[13] = blake2b_IV[5] ^ S->t[1]; v[14] = blake2b_IV[6] ^ S->f[0]; v[15] = blake2b_IV[7] ^ S->f[1]; ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); ROUND( 10 ); ROUND( 11 ); for( i = 0; i < 8; ++i ) { S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; } } #undef G #undef ROUND int blake2b_update( blake2b_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2B_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2B_BLOCKBYTES) { blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); blake2b_compress( S, in ); in += BLAKE2B_BLOCKBYTES; inlen -= BLAKE2B_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2b_final( blake2b_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2b_is_lastblock( S ) ) return -1; blake2b_increment_counter( S, S->buflen ); blake2b_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ blake2b_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store64( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, S->outlen ); secure_zero_memory(buffer, sizeof(buffer)); return 0; } /* inlen, at least, should be uint64_t. Others can be size_t. */ int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2b_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2b_init( S, outlen ) < 0 ) return -1; } blake2b_update( S, ( const uint8_t * )in, inlen ); blake2b_final( S, out, outlen ); return 0; } int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { return blake2b(out, outlen, in, inlen, key, keylen); } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2b( out, BLAKE2B_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2B_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2b_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2b_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2b_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2b_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2bp-ref.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #if defined(_OPENMP) #include #endif #include "blake2.h" #include "blake2-impl.h" #define PARALLELISM_DEGREE 4 /* blake2b_init_param defaults to setting the expecting output length from the digest_length parameter block field. In some cases, however, we do not want this, as the output length of these instances is given by inner_length instead. */ static int blake2bp_init_leaf_param( blake2b_state *S, const blake2b_param *P ) { int err = blake2b_init_param(S, P); S->outlen = P->inner_length; return err; } static int blake2bp_init_leaf( blake2b_state *S, size_t outlen, size_t keylen, uint64_t offset ) { blake2b_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; store32( &P->leaf_length, 0 ); store32( &P->node_offset, offset ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = BLAKE2B_OUTBYTES; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2bp_init_leaf_param( S, P ); } static int blake2bp_init_root( blake2b_state *S, size_t outlen, size_t keylen ) { blake2b_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 1; P->inner_length = BLAKE2B_OUTBYTES; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2bp_init( blake2bp_state *S, size_t outlen ) { size_t i; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2bp_init_root( S->R, outlen, 0 ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; return 0; } int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ) { size_t i; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2bp_init_root( S->R, outlen, keylen ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->S[i], block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } int blake2bp_update( blake2bp_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; size_t left = S->buflen; size_t fill = sizeof( S->buf ) - left; size_t i; if( left && inlen >= fill ) { memcpy( S->buf + left, in, fill ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); in += fill; inlen -= fill; left = 0; } #if defined(_OPENMP) #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2B_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) { blake2b_update( S->S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; } } in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ); inlen %= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; if( inlen > 0 ) memcpy( S->buf + left, in, inlen ); S->buflen = left + inlen; return 0; } int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES]; size_t i; if(out == NULL || outlen < S->outlen) { return -1; } for( i = 0; i < PARALLELISM_DEGREE; ++i ) { if( S->buflen > i * BLAKE2B_BLOCKBYTES ) { size_t left = S->buflen - i * BLAKE2B_BLOCKBYTES; if( left > BLAKE2B_BLOCKBYTES ) left = BLAKE2B_BLOCKBYTES; blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, left ); } blake2b_final( S->S[i], hash[i], BLAKE2B_OUTBYTES ); } for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->R, hash[i], BLAKE2B_OUTBYTES ); return blake2b_final( S->R, out, S->outlen ); } int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES]; blake2b_state S[PARALLELISM_DEGREE][1]; blake2b_state FS[1]; size_t i; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ if( keylen > 0 ) { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S[i], block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } #if defined(_OPENMP) #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2B_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) { blake2b_update( S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; } if( inlen__ > i * BLAKE2B_BLOCKBYTES ) { const size_t left = inlen__ - i * BLAKE2B_BLOCKBYTES; const size_t len = left <= BLAKE2B_BLOCKBYTES ? left : BLAKE2B_BLOCKBYTES; blake2b_update( S[i], in__, len ); } blake2b_final( S[i], hash[i], BLAKE2B_OUTBYTES ); } if( blake2bp_init_root( FS, outlen, keylen ) < 0 ) return -1; FS->last_node = 1; /* Mark as last node */ for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( FS, hash[i], BLAKE2B_OUTBYTES ); return blake2b_final( FS, out, outlen );; } #if defined(BLAKE2BP_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2bp( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2bp_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2bp_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2bp_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2bp_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2bp_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2s-ref.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" static const uint32_t blake2s_IV[8] = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL }; static const uint8_t blake2s_sigma[10][16] = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , }; static void blake2s_set_lastnode( blake2s_state *S ) { S->f[1] = (uint32_t)-1; } /* Some helper functions, not necessarily useful */ static int blake2s_is_lastblock( const blake2s_state *S ) { return S->f[0] != 0; } static void blake2s_set_lastblock( blake2s_state *S ) { if( S->last_node ) blake2s_set_lastnode( S ); S->f[0] = (uint32_t)-1; } static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } static void blake2s_init0( blake2s_state *S ) { size_t i; memset( S, 0, sizeof( blake2s_state ) ); for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; } /* init2 xors IV with input parameter block */ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) { const unsigned char *p = ( const unsigned char * )( P ); size_t i; blake2s_init0( S ); /* IV XOR ParamBlock */ for( i = 0; i < 8; ++i ) S->h[i] ^= load32( &p[i * 4] ); S->outlen = P->digest_length; return 0; } /* Sequential blake2s initialization */ int blake2s_init( blake2s_state *S, size_t outlen ) { blake2s_param P[1]; /* Move interval verification here? */ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) { blake2s_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2s_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } #define G(r,i,a,b,c,d) \ do { \ a = a + b + m[blake2s_sigma[r][2*i+0]]; \ d = rotr32(d ^ a, 16); \ c = c + d; \ b = rotr32(b ^ c, 12); \ a = a + b + m[blake2s_sigma[r][2*i+1]]; \ d = rotr32(d ^ a, 8); \ c = c + d; \ b = rotr32(b ^ c, 7); \ } while(0) #define ROUND(r) \ do { \ G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ G(r,2,v[ 2],v[ 6],v[10],v[14]); \ G(r,3,v[ 3],v[ 7],v[11],v[15]); \ G(r,4,v[ 0],v[ 5],v[10],v[15]); \ G(r,5,v[ 1],v[ 6],v[11],v[12]); \ G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ } while(0) static void blake2s_compress( blake2s_state *S, const uint8_t in[BLAKE2S_BLOCKBYTES] ) { uint32_t m[16]; uint32_t v[16]; size_t i; for( i = 0; i < 16; ++i ) { m[i] = load32( in + i * sizeof( m[i] ) ); } for( i = 0; i < 8; ++i ) { v[i] = S->h[i]; } v[ 8] = blake2s_IV[0]; v[ 9] = blake2s_IV[1]; v[10] = blake2s_IV[2]; v[11] = blake2s_IV[3]; v[12] = S->t[0] ^ blake2s_IV[4]; v[13] = S->t[1] ^ blake2s_IV[5]; v[14] = S->f[0] ^ blake2s_IV[6]; v[15] = S->f[1] ^ blake2s_IV[7]; ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); for( i = 0; i < 8; ++i ) { S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; } } #undef G #undef ROUND int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2S_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2S_BLOCKBYTES) { blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES); blake2s_compress( S, in ); in += BLAKE2S_BLOCKBYTES; inlen -= BLAKE2S_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2s_final( blake2s_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2s_is_lastblock( S ) ) return -1; blake2s_increment_counter( S, ( uint32_t )S->buflen ); blake2s_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ blake2s_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, outlen ); secure_zero_memory(buffer, sizeof(buffer)); return 0; } int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2s_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2s_init( S, outlen ) < 0 ) return -1; } blake2s_update( S, ( const uint8_t * )in, inlen ); blake2s_final( S, out, outlen ); return 0; } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2S_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2s_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2s_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2sp-ref.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #if defined(_OPENMP) #include #endif #include "blake2.h" #include "blake2-impl.h" #define PARALLELISM_DEGREE 8 /* blake2sp_init_param defaults to setting the expecting output length from the digest_length parameter block field. In some cases, however, we do not want this, as the output length of these instances is given by inner_length instead. */ static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P ) { int err = blake2s_init_param(S, P); S->outlen = P->inner_length; return err; } static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint64_t offset ) { blake2s_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; store32( &P->leaf_length, 0 ); store32( &P->node_offset, offset ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = BLAKE2S_OUTBYTES; memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2sp_init_leaf_param( S, P ); } static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen ) { blake2s_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 1; P->inner_length = BLAKE2S_OUTBYTES; memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2sp_init( blake2sp_state *S, size_t outlen ) { size_t i; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2sp_init_root( S->R, outlen, 0 ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; return 0; } int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ) { size_t i; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2sp_init_root( S->R, outlen, keylen ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; size_t left = S->buflen; size_t fill = sizeof( S->buf ) - left; size_t i; if( left && inlen >= fill ) { memcpy( S->buf + left, in, fill ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); in += fill; inlen -= fill; left = 0; } #if defined(_OPENMP) #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2S_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) { blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; } } in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); inlen %= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; if( inlen > 0 ) memcpy( S->buf + left, in, inlen ); S->buflen = left + inlen; return 0; } int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; size_t i; if(out == NULL || outlen < S->outlen) { return -1; } for( i = 0; i < PARALLELISM_DEGREE; ++i ) { if( S->buflen > i * BLAKE2S_BLOCKBYTES ) { size_t left = S->buflen - i * BLAKE2S_BLOCKBYTES; if( left > BLAKE2S_BLOCKBYTES ) left = BLAKE2S_BLOCKBYTES; blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, left ); } blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES ); } for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES ); return blake2s_final( S->R, out, S->outlen ); } int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; blake2s_state S[PARALLELISM_DEGREE][1]; blake2s_state FS[1]; size_t i; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ if( keylen > 0 ) { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } #if defined(_OPENMP) #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2S_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) { blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; } if( inlen__ > i * BLAKE2S_BLOCKBYTES ) { const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES; const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES; blake2s_update( S[i], in__, len ); } blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES ); } if( blake2sp_init_root( FS, outlen, keylen ) < 0 ) return -1; FS->last_node = 1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES ); return blake2s_final( FS, out, outlen ); } #if defined(BLAKE2SP_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2sp_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2sp_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2sp_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2xb-ref.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2016, JP Aumasson . Copyright 2016, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" int blake2xb_init( blake2xb_state *S, const size_t outlen ) { return blake2xb_init_key(S, outlen, NULL, 0); } int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen) { if ( outlen == 0 || outlen > 0xFFFFFFFFUL ) { return -1; } if (NULL != key && keylen > BLAKE2B_KEYBYTES) { return -1; } if (NULL == key && keylen > 0) { return -1; } /* Initialize parameter block */ S->P->digest_length = BLAKE2B_OUTBYTES; S->P->key_length = keylen; S->P->fanout = 1; S->P->depth = 1; store32( &S->P->leaf_length, 0 ); store32( &S->P->node_offset, 0 ); store32( &S->P->xof_length, outlen ); S->P->node_depth = 0; S->P->inner_length = 0; memset( S->P->reserved, 0, sizeof( S->P->reserved ) ); memset( S->P->salt, 0, sizeof( S->P->salt ) ); memset( S->P->personal, 0, sizeof( S->P->personal ) ); if( blake2b_init_param( S->S, S->P ) < 0 ) { return -1; } if (keylen > 0) { uint8_t block[BLAKE2B_BLOCKBYTES]; memset(block, 0, BLAKE2B_BLOCKBYTES); memcpy(block, key, keylen); blake2b_update(S->S, block, BLAKE2B_BLOCKBYTES); secure_zero_memory(block, BLAKE2B_BLOCKBYTES); } return 0; } int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen ) { return blake2b_update( S->S, in, inlen ); } int blake2xb_final( blake2xb_state *S, void *out, size_t outlen) { blake2b_state C[1]; blake2b_param P[1]; uint32_t xof_length = load32(&S->P->xof_length); uint8_t root[BLAKE2B_BLOCKBYTES]; size_t i; if (NULL == out) { return -1; } /* outlen must match the output size defined in xof_length, */ /* unless it was -1, in which case anything goes except 0. */ if(xof_length == 0xFFFFFFFFUL) { if(outlen == 0) { return -1; } } else { if(outlen != xof_length) { return -1; } } /* Finalize the root hash */ if (blake2b_final(S->S, root, BLAKE2B_OUTBYTES) < 0) { return -1; } /* Set common block structure values */ /* Copy values from parent instance, and only change the ones below */ memcpy(P, S->P, sizeof(blake2b_param)); P->key_length = 0; P->fanout = 0; P->depth = 0; store32(&P->leaf_length, BLAKE2B_OUTBYTES); P->inner_length = BLAKE2B_OUTBYTES; P->node_depth = 0; for (i = 0; outlen > 0; ++i) { const size_t block_size = (outlen < BLAKE2B_OUTBYTES) ? outlen : BLAKE2B_OUTBYTES; /* Initialize state */ P->digest_length = block_size; store32(&P->node_offset, i); blake2b_init_param(C, P); /* Process key if needed */ blake2b_update(C, root, BLAKE2B_OUTBYTES); if (blake2b_final(C, (uint8_t *)out + i * BLAKE2B_OUTBYTES, block_size) < 0 ) { return -1; } outlen -= block_size; } secure_zero_memory(root, sizeof(root)); secure_zero_memory(P, sizeof(P)); secure_zero_memory(C, sizeof(C)); /* Put blake2xb in an invalid state? cf. blake2s_is_lastblock */ return 0; } int blake2xb(void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen) { blake2xb_state S[1]; /* Verify parameters */ if (NULL == in && inlen > 0) return -1; if (NULL == out) return -1; if (NULL == key && keylen > 0) return -1; if (keylen > BLAKE2B_KEYBYTES) return -1; if (outlen == 0) return -1; /* Initialize the root block structure */ if (blake2xb_init_key(S, outlen, key, keylen) < 0) { return -1; } /* Absorb the input message */ blake2xb_update(S, in, inlen); /* Compute the root node of the tree and the final hash using the counter construction */ return blake2xb_final(S, out, outlen); } #if defined(BLAKE2XB_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step, outlen; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) { key[i] = ( uint8_t )i; } for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { buf[i] = ( uint8_t )i; } /* Testing length of outputs rather than inputs */ /* (Test of input lengths mostly covered by blake2b tests) */ /* Test simple API */ for( outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen ) { uint8_t hash[BLAKE2_KAT_LENGTH] = {0}; if( blake2xb( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2B_KEYBYTES ) < 0 ) { goto fail; } if( 0 != memcmp( hash, blake2xb_keyed_kat[outlen-1], outlen ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) { uint8_t hash[BLAKE2_KAT_LENGTH]; blake2xb_state S; uint8_t * p = buf; size_t mlen = BLAKE2_KAT_LENGTH; int err = 0; if( (err = blake2xb_init_key(&S, outlen, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2xb_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2xb_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2xb_final(&S, hash, outlen)) < 0) { goto fail; } if (0 != memcmp(hash, blake2xb_keyed_kat[outlen-1], outlen)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/ref/blake2xs-ref.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2016, JP Aumasson . Copyright 2016, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" int blake2xs_init( blake2xs_state *S, const size_t outlen ) { return blake2xs_init_key(S, outlen, NULL, 0); } int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen ) { if ( outlen == 0 || outlen > 0xFFFFUL ) { return -1; } if (NULL != key && keylen > BLAKE2B_KEYBYTES) { return -1; } if (NULL == key && keylen > 0) { return -1; } /* Initialize parameter block */ S->P->digest_length = BLAKE2S_OUTBYTES; S->P->key_length = keylen; S->P->fanout = 1; S->P->depth = 1; store32( &S->P->leaf_length, 0 ); store32( &S->P->node_offset, 0 ); store16( &S->P->xof_length, outlen ); S->P->node_depth = 0; S->P->inner_length = 0; memset( S->P->salt, 0, sizeof( S->P->salt ) ); memset( S->P->personal, 0, sizeof( S->P->personal ) ); if( blake2s_init_param( S->S, S->P ) < 0 ) { return -1; } if (keylen > 0) { uint8_t block[BLAKE2S_BLOCKBYTES]; memset(block, 0, BLAKE2S_BLOCKBYTES); memcpy(block, key, keylen); blake2s_update(S->S, block, BLAKE2S_BLOCKBYTES); secure_zero_memory(block, BLAKE2S_BLOCKBYTES); } return 0; } int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen ) { return blake2s_update( S->S, in, inlen ); } int blake2xs_final(blake2xs_state *S, void *out, size_t outlen) { blake2s_state C[1]; blake2s_param P[1]; uint16_t xof_length = load16(&S->P->xof_length); uint8_t root[BLAKE2S_BLOCKBYTES]; size_t i; if (NULL == out) { return -1; } /* outlen must match the output size defined in xof_length, */ /* unless it was -1, in which case anything goes except 0. */ if(xof_length == 0xFFFFUL) { if(outlen == 0) { return -1; } } else { if(outlen != xof_length) { return -1; } } /* Finalize the root hash */ if (blake2s_final(S->S, root, BLAKE2S_OUTBYTES) < 0) { return -1; } /* Set common block structure values */ /* Copy values from parent instance, and only change the ones below */ memcpy(P, S->P, sizeof(blake2s_param)); P->key_length = 0; P->fanout = 0; P->depth = 0; store32(&P->leaf_length, BLAKE2S_OUTBYTES); P->inner_length = BLAKE2S_OUTBYTES; P->node_depth = 0; for (i = 0; outlen > 0; ++i) { const size_t block_size = (outlen < BLAKE2S_OUTBYTES) ? outlen : BLAKE2S_OUTBYTES; /* Initialize state */ P->digest_length = block_size; store32(&P->node_offset, i); blake2s_init_param(C, P); /* Process key if needed */ blake2s_update(C, root, BLAKE2S_OUTBYTES); if (blake2s_final(C, (uint8_t *)out + i * BLAKE2S_OUTBYTES, block_size) < 0) { return -1; } outlen -= block_size; } secure_zero_memory(root, sizeof(root)); secure_zero_memory(P, sizeof(P)); secure_zero_memory(C, sizeof(C)); /* Put blake2xs in an invalid state? cf. blake2s_is_lastblock */ return 0; } int blake2xs(void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen) { blake2xs_state S[1]; /* Verify parameters */ if (NULL == in && inlen > 0) return -1; if (NULL == out) return -1; if (NULL == key && keylen > 0) return -1; if (keylen > BLAKE2S_KEYBYTES) return -1; if (outlen == 0) return -1; /* Initialize the root block structure */ if (blake2xs_init_key(S, outlen, key, keylen) < 0) { return -1; } /* Absorb the input message */ blake2xs_update(S, in, inlen); /* Compute the root node of the tree and the final hash using the counter construction */ return blake2xs_final(S, out, outlen); } #if defined(BLAKE2XS_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step, outlen; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) { key[i] = ( uint8_t )i; } for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { buf[i] = ( uint8_t )i; } /* Testing length of outputs rather than inputs */ /* (Test of input lengths mostly covered by blake2s tests) */ /* Test simple API */ for( outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen ) { uint8_t hash[BLAKE2_KAT_LENGTH] = {0}; if( blake2xs( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2S_KEYBYTES ) < 0 ) { goto fail; } if( 0 != memcmp( hash, blake2xs_keyed_kat[outlen-1], outlen ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) { uint8_t hash[BLAKE2_KAT_LENGTH]; blake2xs_state S; uint8_t * p = buf; size_t mlen = BLAKE2_KAT_LENGTH; int err = 0; if( (err = blake2xs_init_key(&S, outlen, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2xs_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2xs_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2xs_final(&S, hash, outlen)) < 0) { goto fail; } if (0 != memcmp(hash, blake2xs_keyed_kat[outlen-1], outlen)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2-config.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2_CONFIG_H #define BLAKE2_CONFIG_H /* These don't work everywhere */ #if defined(__SSE2__) || defined(__x86_64__) || defined(__amd64__) #define HAVE_SSE2 #endif #if defined(__SSSE3__) #define HAVE_SSSE3 #endif #if defined(__SSE4_1__) #define HAVE_SSE41 #endif #if defined(__AVX__) #define HAVE_AVX #endif #if defined(__XOP__) #define HAVE_XOP #endif #ifdef HAVE_AVX2 #ifndef HAVE_AVX #define HAVE_AVX #endif #endif #ifdef HAVE_XOP #ifndef HAVE_AVX #define HAVE_AVX #endif #endif #ifdef HAVE_AVX #ifndef HAVE_SSE41 #define HAVE_SSE41 #endif #endif #ifdef HAVE_SSE41 #ifndef HAVE_SSSE3 #define HAVE_SSSE3 #endif #endif #ifdef HAVE_SSSE3 #define HAVE_SSE2 #endif #if !defined(HAVE_SSE2) #error "This code requires at least SSE2." #endif #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2-impl.h ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2_IMPL_H #define BLAKE2_IMPL_H #include #include #if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) #if defined(_MSC_VER) #define BLAKE2_INLINE __inline #elif defined(__GNUC__) #define BLAKE2_INLINE __inline__ #else #define BLAKE2_INLINE #endif #else #define BLAKE2_INLINE inline #endif static BLAKE2_INLINE uint32_t load32( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint32_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return (( uint32_t )( p[0] ) << 0) | (( uint32_t )( p[1] ) << 8) | (( uint32_t )( p[2] ) << 16) | (( uint32_t )( p[3] ) << 24) ; #endif } static BLAKE2_INLINE uint64_t load64( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint64_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return (( uint64_t )( p[0] ) << 0) | (( uint64_t )( p[1] ) << 8) | (( uint64_t )( p[2] ) << 16) | (( uint64_t )( p[3] ) << 24) | (( uint64_t )( p[4] ) << 32) | (( uint64_t )( p[5] ) << 40) | (( uint64_t )( p[6] ) << 48) | (( uint64_t )( p[7] ) << 56) ; #endif } static BLAKE2_INLINE uint16_t load16( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN) uint16_t w; memcpy(&w, src, sizeof w); return w; #else const uint8_t *p = ( const uint8_t * )src; return ( uint16_t )((( uint32_t )( p[0] ) << 0) | (( uint32_t )( p[1] ) << 8)); #endif } static BLAKE2_INLINE void store16( void *dst, uint16_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; *p++ = ( uint8_t )w; w >>= 8; *p++ = ( uint8_t )w; #endif } static BLAKE2_INLINE void store32( void *dst, uint32_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); #endif } static BLAKE2_INLINE void store64( void *dst, uint64_t w ) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); #else uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); p[4] = (uint8_t)(w >> 32); p[5] = (uint8_t)(w >> 40); p[6] = (uint8_t)(w >> 48); p[7] = (uint8_t)(w >> 56); #endif } static BLAKE2_INLINE uint64_t load48( const void *src ) { const uint8_t *p = ( const uint8_t * )src; return (( uint64_t )( p[0] ) << 0) | (( uint64_t )( p[1] ) << 8) | (( uint64_t )( p[2] ) << 16) | (( uint64_t )( p[3] ) << 24) | (( uint64_t )( p[4] ) << 32) | (( uint64_t )( p[5] ) << 40) ; } static BLAKE2_INLINE void store48( void *dst, uint64_t w ) { uint8_t *p = ( uint8_t * )dst; p[0] = (uint8_t)(w >> 0); p[1] = (uint8_t)(w >> 8); p[2] = (uint8_t)(w >> 16); p[3] = (uint8_t)(w >> 24); p[4] = (uint8_t)(w >> 32); p[5] = (uint8_t)(w >> 40); } static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) { return ( w >> c ) | ( w << ( 32 - c ) ); } static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) { return ( w >> c ) | ( w << ( 64 - c ) ); } /* prevents compiler optimizing out memset() */ static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) { static void *(*const volatile memset_v)(void *, int, size_t) = &memset; memset_v(v, 0, n); } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2b-load-sse2.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2B_LOAD_SSE2_H #define BLAKE2B_LOAD_SSE2_H #define LOAD_MSG_0_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4) #define LOAD_MSG_0_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5) #define LOAD_MSG_0_3(b0, b1) b0 = _mm_set_epi64x(m10, m8); b1 = _mm_set_epi64x(m14, m12) #define LOAD_MSG_0_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13) #define LOAD_MSG_1_1(b0, b1) b0 = _mm_set_epi64x(m4, m14); b1 = _mm_set_epi64x(m13, m9) #define LOAD_MSG_1_2(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m6, m15) #define LOAD_MSG_1_3(b0, b1) b0 = _mm_set_epi64x(m0, m1); b1 = _mm_set_epi64x(m5, m11) #define LOAD_MSG_1_4(b0, b1) b0 = _mm_set_epi64x(m2, m12); b1 = _mm_set_epi64x(m3, m7) #define LOAD_MSG_2_1(b0, b1) b0 = _mm_set_epi64x(m12, m11); b1 = _mm_set_epi64x(m15, m5) #define LOAD_MSG_2_2(b0, b1) b0 = _mm_set_epi64x(m0, m8); b1 = _mm_set_epi64x(m13, m2) #define LOAD_MSG_2_3(b0, b1) b0 = _mm_set_epi64x(m3, m10); b1 = _mm_set_epi64x(m9, m7) #define LOAD_MSG_2_4(b0, b1) b0 = _mm_set_epi64x(m6, m14); b1 = _mm_set_epi64x(m4, m1) #define LOAD_MSG_3_1(b0, b1) b0 = _mm_set_epi64x(m3, m7); b1 = _mm_set_epi64x(m11, m13) #define LOAD_MSG_3_2(b0, b1) b0 = _mm_set_epi64x(m1, m9); b1 = _mm_set_epi64x(m14, m12) #define LOAD_MSG_3_3(b0, b1) b0 = _mm_set_epi64x(m5, m2); b1 = _mm_set_epi64x(m15, m4) #define LOAD_MSG_3_4(b0, b1) b0 = _mm_set_epi64x(m10, m6); b1 = _mm_set_epi64x(m8, m0) #define LOAD_MSG_4_1(b0, b1) b0 = _mm_set_epi64x(m5, m9); b1 = _mm_set_epi64x(m10, m2) #define LOAD_MSG_4_2(b0, b1) b0 = _mm_set_epi64x(m7, m0); b1 = _mm_set_epi64x(m15, m4) #define LOAD_MSG_4_3(b0, b1) b0 = _mm_set_epi64x(m11, m14); b1 = _mm_set_epi64x(m3, m6) #define LOAD_MSG_4_4(b0, b1) b0 = _mm_set_epi64x(m12, m1); b1 = _mm_set_epi64x(m13, m8) #define LOAD_MSG_5_1(b0, b1) b0 = _mm_set_epi64x(m6, m2); b1 = _mm_set_epi64x(m8, m0) #define LOAD_MSG_5_2(b0, b1) b0 = _mm_set_epi64x(m10, m12); b1 = _mm_set_epi64x(m3, m11) #define LOAD_MSG_5_3(b0, b1) b0 = _mm_set_epi64x(m7, m4); b1 = _mm_set_epi64x(m1, m15) #define LOAD_MSG_5_4(b0, b1) b0 = _mm_set_epi64x(m5, m13); b1 = _mm_set_epi64x(m9, m14) #define LOAD_MSG_6_1(b0, b1) b0 = _mm_set_epi64x(m1, m12); b1 = _mm_set_epi64x(m4, m14) #define LOAD_MSG_6_2(b0, b1) b0 = _mm_set_epi64x(m15, m5); b1 = _mm_set_epi64x(m10, m13) #define LOAD_MSG_6_3(b0, b1) b0 = _mm_set_epi64x(m6, m0); b1 = _mm_set_epi64x(m8, m9) #define LOAD_MSG_6_4(b0, b1) b0 = _mm_set_epi64x(m3, m7); b1 = _mm_set_epi64x(m11, m2) #define LOAD_MSG_7_1(b0, b1) b0 = _mm_set_epi64x(m7, m13); b1 = _mm_set_epi64x(m3, m12) #define LOAD_MSG_7_2(b0, b1) b0 = _mm_set_epi64x(m14, m11); b1 = _mm_set_epi64x(m9, m1) #define LOAD_MSG_7_3(b0, b1) b0 = _mm_set_epi64x(m15, m5); b1 = _mm_set_epi64x(m2, m8) #define LOAD_MSG_7_4(b0, b1) b0 = _mm_set_epi64x(m4, m0); b1 = _mm_set_epi64x(m10, m6) #define LOAD_MSG_8_1(b0, b1) b0 = _mm_set_epi64x(m14, m6); b1 = _mm_set_epi64x(m0, m11) #define LOAD_MSG_8_2(b0, b1) b0 = _mm_set_epi64x(m9, m15); b1 = _mm_set_epi64x(m8, m3) #define LOAD_MSG_8_3(b0, b1) b0 = _mm_set_epi64x(m13, m12); b1 = _mm_set_epi64x(m10, m1) #define LOAD_MSG_8_4(b0, b1) b0 = _mm_set_epi64x(m7, m2); b1 = _mm_set_epi64x(m5, m4) #define LOAD_MSG_9_1(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m1, m7) #define LOAD_MSG_9_2(b0, b1) b0 = _mm_set_epi64x(m4, m2); b1 = _mm_set_epi64x(m5, m6) #define LOAD_MSG_9_3(b0, b1) b0 = _mm_set_epi64x(m9, m15); b1 = _mm_set_epi64x(m13, m3) #define LOAD_MSG_9_4(b0, b1) b0 = _mm_set_epi64x(m14, m11); b1 = _mm_set_epi64x(m0, m12) #define LOAD_MSG_10_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4) #define LOAD_MSG_10_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5) #define LOAD_MSG_10_3(b0, b1) b0 = _mm_set_epi64x(m10, m8); b1 = _mm_set_epi64x(m14, m12) #define LOAD_MSG_10_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13) #define LOAD_MSG_11_1(b0, b1) b0 = _mm_set_epi64x(m4, m14); b1 = _mm_set_epi64x(m13, m9) #define LOAD_MSG_11_2(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m6, m15) #define LOAD_MSG_11_3(b0, b1) b0 = _mm_set_epi64x(m0, m1); b1 = _mm_set_epi64x(m5, m11) #define LOAD_MSG_11_4(b0, b1) b0 = _mm_set_epi64x(m2, m12); b1 = _mm_set_epi64x(m3, m7) #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2b-load-sse41.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2B_LOAD_SSE41_H #define BLAKE2B_LOAD_SSE41_H #define LOAD_MSG_0_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m0, m1); \ b1 = _mm_unpacklo_epi64(m2, m3); \ } while(0) #define LOAD_MSG_0_2(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m0, m1); \ b1 = _mm_unpackhi_epi64(m2, m3); \ } while(0) #define LOAD_MSG_0_3(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m4, m5); \ b1 = _mm_unpacklo_epi64(m6, m7); \ } while(0) #define LOAD_MSG_0_4(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m4, m5); \ b1 = _mm_unpackhi_epi64(m6, m7); \ } while(0) #define LOAD_MSG_1_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m7, m2); \ b1 = _mm_unpackhi_epi64(m4, m6); \ } while(0) #define LOAD_MSG_1_2(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m5, m4); \ b1 = _mm_alignr_epi8(m3, m7, 8); \ } while(0) #define LOAD_MSG_1_3(b0, b1) \ do \ { \ b0 = _mm_shuffle_epi32(m0, _MM_SHUFFLE(1,0,3,2)); \ b1 = _mm_unpackhi_epi64(m5, m2); \ } while(0) #define LOAD_MSG_1_4(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m6, m1); \ b1 = _mm_unpackhi_epi64(m3, m1); \ } while(0) #define LOAD_MSG_2_1(b0, b1) \ do \ { \ b0 = _mm_alignr_epi8(m6, m5, 8); \ b1 = _mm_unpackhi_epi64(m2, m7); \ } while(0) #define LOAD_MSG_2_2(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m4, m0); \ b1 = _mm_blend_epi16(m1, m6, 0xF0); \ } while(0) #define LOAD_MSG_2_3(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m5, m1, 0xF0); \ b1 = _mm_unpackhi_epi64(m3, m4); \ } while(0) #define LOAD_MSG_2_4(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m7, m3); \ b1 = _mm_alignr_epi8(m2, m0, 8); \ } while(0) #define LOAD_MSG_3_1(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m3, m1); \ b1 = _mm_unpackhi_epi64(m6, m5); \ } while(0) #define LOAD_MSG_3_2(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m4, m0); \ b1 = _mm_unpacklo_epi64(m6, m7); \ } while(0) #define LOAD_MSG_3_3(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m1, m2, 0xF0); \ b1 = _mm_blend_epi16(m2, m7, 0xF0); \ } while(0) #define LOAD_MSG_3_4(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m3, m5); \ b1 = _mm_unpacklo_epi64(m0, m4); \ } while(0) #define LOAD_MSG_4_1(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m4, m2); \ b1 = _mm_unpacklo_epi64(m1, m5); \ } while(0) #define LOAD_MSG_4_2(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m0, m3, 0xF0); \ b1 = _mm_blend_epi16(m2, m7, 0xF0); \ } while(0) #define LOAD_MSG_4_3(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m7, m5, 0xF0); \ b1 = _mm_blend_epi16(m3, m1, 0xF0); \ } while(0) #define LOAD_MSG_4_4(b0, b1) \ do \ { \ b0 = _mm_alignr_epi8(m6, m0, 8); \ b1 = _mm_blend_epi16(m4, m6, 0xF0); \ } while(0) #define LOAD_MSG_5_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m1, m3); \ b1 = _mm_unpacklo_epi64(m0, m4); \ } while(0) #define LOAD_MSG_5_2(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m6, m5); \ b1 = _mm_unpackhi_epi64(m5, m1); \ } while(0) #define LOAD_MSG_5_3(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m2, m3, 0xF0); \ b1 = _mm_unpackhi_epi64(m7, m0); \ } while(0) #define LOAD_MSG_5_4(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m6, m2); \ b1 = _mm_blend_epi16(m7, m4, 0xF0); \ } while(0) #define LOAD_MSG_6_1(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m6, m0, 0xF0); \ b1 = _mm_unpacklo_epi64(m7, m2); \ } while(0) #define LOAD_MSG_6_2(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m2, m7); \ b1 = _mm_alignr_epi8(m5, m6, 8); \ } while(0) #define LOAD_MSG_6_3(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m0, m3); \ b1 = _mm_shuffle_epi32(m4, _MM_SHUFFLE(1,0,3,2)); \ } while(0) #define LOAD_MSG_6_4(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m3, m1); \ b1 = _mm_blend_epi16(m1, m5, 0xF0); \ } while(0) #define LOAD_MSG_7_1(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m6, m3); \ b1 = _mm_blend_epi16(m6, m1, 0xF0); \ } while(0) #define LOAD_MSG_7_2(b0, b1) \ do \ { \ b0 = _mm_alignr_epi8(m7, m5, 8); \ b1 = _mm_unpackhi_epi64(m0, m4); \ } while(0) #define LOAD_MSG_7_3(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m2, m7); \ b1 = _mm_unpacklo_epi64(m4, m1); \ } while(0) #define LOAD_MSG_7_4(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m0, m2); \ b1 = _mm_unpacklo_epi64(m3, m5); \ } while(0) #define LOAD_MSG_8_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m3, m7); \ b1 = _mm_alignr_epi8(m0, m5, 8); \ } while(0) #define LOAD_MSG_8_2(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m7, m4); \ b1 = _mm_alignr_epi8(m4, m1, 8); \ } while(0) #define LOAD_MSG_8_3(b0, b1) \ do \ { \ b0 = m6; \ b1 = _mm_alignr_epi8(m5, m0, 8); \ } while(0) #define LOAD_MSG_8_4(b0, b1) \ do \ { \ b0 = _mm_blend_epi16(m1, m3, 0xF0); \ b1 = m2; \ } while(0) #define LOAD_MSG_9_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m5, m4); \ b1 = _mm_unpackhi_epi64(m3, m0); \ } while(0) #define LOAD_MSG_9_2(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m1, m2); \ b1 = _mm_blend_epi16(m3, m2, 0xF0); \ } while(0) #define LOAD_MSG_9_3(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m7, m4); \ b1 = _mm_unpackhi_epi64(m1, m6); \ } while(0) #define LOAD_MSG_9_4(b0, b1) \ do \ { \ b0 = _mm_alignr_epi8(m7, m5, 8); \ b1 = _mm_unpacklo_epi64(m6, m0); \ } while(0) #define LOAD_MSG_10_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m0, m1); \ b1 = _mm_unpacklo_epi64(m2, m3); \ } while(0) #define LOAD_MSG_10_2(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m0, m1); \ b1 = _mm_unpackhi_epi64(m2, m3); \ } while(0) #define LOAD_MSG_10_3(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m4, m5); \ b1 = _mm_unpacklo_epi64(m6, m7); \ } while(0) #define LOAD_MSG_10_4(b0, b1) \ do \ { \ b0 = _mm_unpackhi_epi64(m4, m5); \ b1 = _mm_unpackhi_epi64(m6, m7); \ } while(0) #define LOAD_MSG_11_1(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m7, m2); \ b1 = _mm_unpackhi_epi64(m4, m6); \ } while(0) #define LOAD_MSG_11_2(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m5, m4); \ b1 = _mm_alignr_epi8(m3, m7, 8); \ } while(0) #define LOAD_MSG_11_3(b0, b1) \ do \ { \ b0 = _mm_shuffle_epi32(m0, _MM_SHUFFLE(1,0,3,2)); \ b1 = _mm_unpackhi_epi64(m5, m2); \ } while(0) #define LOAD_MSG_11_4(b0, b1) \ do \ { \ b0 = _mm_unpacklo_epi64(m6, m1); \ b1 = _mm_unpackhi_epi64(m3, m1); \ } while(0) #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2b-round.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2B_ROUND_H #define BLAKE2B_ROUND_H #define LOADU(p) _mm_loadu_si128( (const __m128i *)(p) ) #define STOREU(p,r) _mm_storeu_si128((__m128i *)(p), r) #define TOF(reg) _mm_castsi128_ps((reg)) #define TOI(reg) _mm_castps_si128((reg)) #define LIKELY(x) __builtin_expect((x),1) /* Microarchitecture-specific macros */ #ifndef HAVE_XOP #ifdef HAVE_SSSE3 #define _mm_roti_epi64(x, c) \ (-(c) == 32) ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2,3,0,1)) \ : (-(c) == 24) ? _mm_shuffle_epi8((x), r24) \ : (-(c) == 16) ? _mm_shuffle_epi8((x), r16) \ : (-(c) == 63) ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), _mm_add_epi64((x), (x))) \ : _mm_xor_si128(_mm_srli_epi64((x), -(c)), _mm_slli_epi64((x), 64-(-(c)))) #else #define _mm_roti_epi64(r, c) _mm_xor_si128(_mm_srli_epi64( (r), -(c) ),_mm_slli_epi64( (r), 64-(-(c)) )) #endif #else /* ... */ #endif #define G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \ row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \ \ row4l = _mm_xor_si128(row4l, row1l); \ row4h = _mm_xor_si128(row4h, row1h); \ \ row4l = _mm_roti_epi64(row4l, -32); \ row4h = _mm_roti_epi64(row4h, -32); \ \ row3l = _mm_add_epi64(row3l, row4l); \ row3h = _mm_add_epi64(row3h, row4h); \ \ row2l = _mm_xor_si128(row2l, row3l); \ row2h = _mm_xor_si128(row2h, row3h); \ \ row2l = _mm_roti_epi64(row2l, -24); \ row2h = _mm_roti_epi64(row2h, -24); \ #define G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \ row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \ \ row4l = _mm_xor_si128(row4l, row1l); \ row4h = _mm_xor_si128(row4h, row1h); \ \ row4l = _mm_roti_epi64(row4l, -16); \ row4h = _mm_roti_epi64(row4h, -16); \ \ row3l = _mm_add_epi64(row3l, row4l); \ row3h = _mm_add_epi64(row3h, row4h); \ \ row2l = _mm_xor_si128(row2l, row3l); \ row2h = _mm_xor_si128(row2h, row3h); \ \ row2l = _mm_roti_epi64(row2l, -63); \ row2h = _mm_roti_epi64(row2h, -63); \ #if defined(HAVE_SSSE3) #define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ t0 = _mm_alignr_epi8(row2h, row2l, 8); \ t1 = _mm_alignr_epi8(row2l, row2h, 8); \ row2l = t0; \ row2h = t1; \ \ t0 = row3l; \ row3l = row3h; \ row3h = t0; \ \ t0 = _mm_alignr_epi8(row4h, row4l, 8); \ t1 = _mm_alignr_epi8(row4l, row4h, 8); \ row4l = t1; \ row4h = t0; #define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ t0 = _mm_alignr_epi8(row2l, row2h, 8); \ t1 = _mm_alignr_epi8(row2h, row2l, 8); \ row2l = t0; \ row2h = t1; \ \ t0 = row3l; \ row3l = row3h; \ row3h = t0; \ \ t0 = _mm_alignr_epi8(row4l, row4h, 8); \ t1 = _mm_alignr_epi8(row4h, row4l, 8); \ row4l = t1; \ row4h = t0; #else #define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ t0 = row4l;\ t1 = row2l;\ row4l = row3l;\ row3l = row3h;\ row3h = row4l;\ row4l = _mm_unpackhi_epi64(row4h, _mm_unpacklo_epi64(t0, t0)); \ row4h = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(row4h, row4h)); \ row2l = _mm_unpackhi_epi64(row2l, _mm_unpacklo_epi64(row2h, row2h)); \ row2h = _mm_unpackhi_epi64(row2h, _mm_unpacklo_epi64(t1, t1)) #define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ t0 = row3l;\ row3l = row3h;\ row3h = t0;\ t0 = row2l;\ t1 = row4l;\ row2l = _mm_unpackhi_epi64(row2h, _mm_unpacklo_epi64(row2l, row2l)); \ row2h = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(row2h, row2h)); \ row4l = _mm_unpackhi_epi64(row4l, _mm_unpacklo_epi64(row4h, row4h)); \ row4h = _mm_unpackhi_epi64(row4h, _mm_unpacklo_epi64(t1, t1)) #endif #if defined(HAVE_SSE41) #include "blake2b-load-sse41.h" #else #include "blake2b-load-sse2.h" #endif #define ROUND(r) \ LOAD_MSG_ ##r ##_1(b0, b1); \ G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ LOAD_MSG_ ##r ##_2(b0, b1); \ G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); \ LOAD_MSG_ ##r ##_3(b0, b1); \ G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ LOAD_MSG_ ##r ##_4(b0, b1); \ G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2b.c ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" #include "blake2-config.h" #ifdef _MSC_VER #include /* for _mm_set_epi64x */ #endif #include #if defined(HAVE_SSSE3) #include #endif #if defined(HAVE_SSE41) #include #endif #if defined(HAVE_AVX) #include #endif #if defined(HAVE_XOP) #include #endif #include "blake2b-round.h" static const uint64_t blake2b_IV[8] = { 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; /* Some helper functions */ static void blake2b_set_lastnode( blake2b_state *S ) { S->f[1] = (uint64_t)-1; } static int blake2b_is_lastblock( const blake2b_state *S ) { return S->f[0] != 0; } static void blake2b_set_lastblock( blake2b_state *S ) { if( S->last_node ) blake2b_set_lastnode( S ); S->f[0] = (uint64_t)-1; } static void blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) { S->t[0] += inc; S->t[1] += ( S->t[0] < inc ); } /* init xors IV with input parameter block */ int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) { size_t i; /*blake2b_init0( S ); */ const unsigned char * v = ( const unsigned char * )( blake2b_IV ); const unsigned char * p = ( const unsigned char * )( P ); unsigned char * h = ( unsigned char * )( S->h ); /* IV XOR ParamBlock */ memset( S, 0, sizeof( blake2b_state ) ); for( i = 0; i < BLAKE2B_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; S->outlen = P->digest_length; return 0; } /* Some sort of default parameter block initialization, for sequential blake2b */ int blake2b_init( blake2b_state *S, size_t outlen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ) { blake2b_param P[1]; if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; if ( ( !keylen ) || keylen > BLAKE2B_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store32( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2b_init_param( S, P ) < 0 ) return 0; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); blake2b_update( S, block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } static void blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) { __m128i row1l, row1h; __m128i row2l, row2h; __m128i row3l, row3h; __m128i row4l, row4h; __m128i b0, b1; __m128i t0, t1; #if defined(HAVE_SSSE3) && !defined(HAVE_XOP) const __m128i r16 = _mm_setr_epi8( 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9 ); const __m128i r24 = _mm_setr_epi8( 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10 ); #endif #if defined(HAVE_SSE41) const __m128i m0 = LOADU( block + 00 ); const __m128i m1 = LOADU( block + 16 ); const __m128i m2 = LOADU( block + 32 ); const __m128i m3 = LOADU( block + 48 ); const __m128i m4 = LOADU( block + 64 ); const __m128i m5 = LOADU( block + 80 ); const __m128i m6 = LOADU( block + 96 ); const __m128i m7 = LOADU( block + 112 ); #else const uint64_t m0 = load64(block + 0 * sizeof(uint64_t)); const uint64_t m1 = load64(block + 1 * sizeof(uint64_t)); const uint64_t m2 = load64(block + 2 * sizeof(uint64_t)); const uint64_t m3 = load64(block + 3 * sizeof(uint64_t)); const uint64_t m4 = load64(block + 4 * sizeof(uint64_t)); const uint64_t m5 = load64(block + 5 * sizeof(uint64_t)); const uint64_t m6 = load64(block + 6 * sizeof(uint64_t)); const uint64_t m7 = load64(block + 7 * sizeof(uint64_t)); const uint64_t m8 = load64(block + 8 * sizeof(uint64_t)); const uint64_t m9 = load64(block + 9 * sizeof(uint64_t)); const uint64_t m10 = load64(block + 10 * sizeof(uint64_t)); const uint64_t m11 = load64(block + 11 * sizeof(uint64_t)); const uint64_t m12 = load64(block + 12 * sizeof(uint64_t)); const uint64_t m13 = load64(block + 13 * sizeof(uint64_t)); const uint64_t m14 = load64(block + 14 * sizeof(uint64_t)); const uint64_t m15 = load64(block + 15 * sizeof(uint64_t)); #endif row1l = LOADU( &S->h[0] ); row1h = LOADU( &S->h[2] ); row2l = LOADU( &S->h[4] ); row2h = LOADU( &S->h[6] ); row3l = LOADU( &blake2b_IV[0] ); row3h = LOADU( &blake2b_IV[2] ); row4l = _mm_xor_si128( LOADU( &blake2b_IV[4] ), LOADU( &S->t[0] ) ); row4h = _mm_xor_si128( LOADU( &blake2b_IV[6] ), LOADU( &S->f[0] ) ); ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); ROUND( 10 ); ROUND( 11 ); row1l = _mm_xor_si128( row3l, row1l ); row1h = _mm_xor_si128( row3h, row1h ); STOREU( &S->h[0], _mm_xor_si128( LOADU( &S->h[0] ), row1l ) ); STOREU( &S->h[2], _mm_xor_si128( LOADU( &S->h[2] ), row1h ) ); row2l = _mm_xor_si128( row4l, row2l ); row2h = _mm_xor_si128( row4h, row2h ); STOREU( &S->h[4], _mm_xor_si128( LOADU( &S->h[4] ), row2l ) ); STOREU( &S->h[6], _mm_xor_si128( LOADU( &S->h[6] ), row2h ) ); } int blake2b_update( blake2b_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2B_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2B_BLOCKBYTES) { blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); blake2b_compress( S, in ); in += BLAKE2B_BLOCKBYTES; inlen -= BLAKE2B_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2b_final( blake2b_state *S, void *out, size_t outlen ) { if( out == NULL || outlen < S->outlen ) return -1; if( blake2b_is_lastblock( S ) ) return -1; blake2b_increment_counter( S, S->buflen ); blake2b_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ blake2b_compress( S, S->buf ); memcpy( out, &S->h[0], S->outlen ); return 0; } int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2b_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; if( keylen ) { if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2b_init( S, outlen ) < 0 ) return -1; } blake2b_update( S, ( const uint8_t * )in, inlen ); blake2b_final( S, out, outlen ); return 0; } int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { return blake2b(out, outlen, in, inlen, key, keylen); } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2b( out, BLAKE2B_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2B_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2b_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2b_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2b_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2b_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2bp.c ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include #if defined(_OPENMP) #include #endif #include "blake2.h" #include "blake2-impl.h" #define PARALLELISM_DEGREE 4 /* blake2b_init_param defaults to setting the expecting output length from the digest_length parameter block field. In some cases, however, we do not want this, as the output length of these instances is given by inner_length instead. */ static int blake2bp_init_leaf_param( blake2b_state *S, const blake2b_param *P ) { int err = blake2b_init_param(S, P); S->outlen = P->inner_length; return err; } static int blake2bp_init_leaf( blake2b_state *S, size_t outlen, size_t keylen, uint64_t offset ) { blake2b_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = offset; P->xof_length = 0; P->node_depth = 0; P->inner_length = BLAKE2B_OUTBYTES; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2bp_init_leaf_param( S, P ); } static int blake2bp_init_root( blake2b_state *S, size_t outlen, size_t keylen ) { blake2b_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = 0; P->xof_length = 0; P->node_depth = 1; P->inner_length = BLAKE2B_OUTBYTES; memset( P->reserved, 0, sizeof( P->reserved ) ); memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2b_init_param( S, P ); } int blake2bp_init( blake2bp_state *S, size_t outlen ) { size_t i; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2bp_init_root( S->R, outlen, 0 ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; return 0; } int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ) { size_t i; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2bp_init_root( S->R, outlen, keylen ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->S[i], block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } int blake2bp_update( blake2bp_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; size_t left = S->buflen; size_t fill = sizeof( S->buf ) - left; size_t i; if( left && inlen >= fill ) { memcpy( S->buf + left, in, fill ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); in += fill; inlen -= fill; left = 0; } #if defined(_OPENMP) #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2B_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) { blake2b_update( S->S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; } } in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ); inlen %= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; if( inlen > 0 ) memcpy( S->buf + left, in, inlen ); S->buflen = left + inlen; return 0; } int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES]; size_t i; if(out == NULL || outlen < S->outlen) { return -1; } for( i = 0; i < PARALLELISM_DEGREE; ++i ) { if( S->buflen > i * BLAKE2B_BLOCKBYTES ) { size_t left = S->buflen - i * BLAKE2B_BLOCKBYTES; if( left > BLAKE2B_BLOCKBYTES ) left = BLAKE2B_BLOCKBYTES; blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, left ); } blake2b_final( S->S[i], hash[i], BLAKE2B_OUTBYTES ); } for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S->R, hash[i], BLAKE2B_OUTBYTES ); return blake2b_final( S->R, out, S->outlen ); } int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES]; blake2b_state S[PARALLELISM_DEGREE][1]; blake2b_state FS[1]; size_t i; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if( NULL == key && keylen > 0 ) return -1; if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; if( keylen > BLAKE2B_KEYBYTES ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2bp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ if( keylen > 0 ) { uint8_t block[BLAKE2B_BLOCKBYTES]; memset( block, 0, BLAKE2B_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( S[i], block, BLAKE2B_BLOCKBYTES ); secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ } #if defined(_OPENMP) #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2B_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) { blake2b_update( S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; } if( inlen__ > i * BLAKE2B_BLOCKBYTES ) { const size_t left = inlen__ - i * BLAKE2B_BLOCKBYTES; const size_t len = left <= BLAKE2B_BLOCKBYTES ? left : BLAKE2B_BLOCKBYTES; blake2b_update( S[i], in__, len ); } blake2b_final( S[i], hash[i], BLAKE2B_OUTBYTES ); } if( blake2bp_init_root( FS, outlen, keylen ) < 0 ) return -1; FS->last_node = 1; /* Mark as last node */ for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2b_update( FS, hash[i], BLAKE2B_OUTBYTES ); return blake2b_final( FS, out, outlen ); } #if defined(BLAKE2BP_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2bp( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES ); if( 0 != memcmp( hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2bp_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2bp_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2bp_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2bp_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2bp_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2s-load-sse2.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2S_LOAD_SSE2_H #define BLAKE2S_LOAD_SSE2_H #define LOAD_MSG_0_1(buf) buf = _mm_set_epi32(m6,m4,m2,m0) #define LOAD_MSG_0_2(buf) buf = _mm_set_epi32(m7,m5,m3,m1) #define LOAD_MSG_0_3(buf) buf = _mm_set_epi32(m12,m10,m8,m14) #define LOAD_MSG_0_4(buf) buf = _mm_set_epi32(m13,m11,m9,m15) #define LOAD_MSG_1_1(buf) buf = _mm_set_epi32(m13,m9,m4,m14) #define LOAD_MSG_1_2(buf) buf = _mm_set_epi32(m6,m15,m8,m10) #define LOAD_MSG_1_3(buf) buf = _mm_set_epi32(m11,m0,m1,m5) #define LOAD_MSG_1_4(buf) buf = _mm_set_epi32(m7,m2,m12,m3) #define LOAD_MSG_2_1(buf) buf = _mm_set_epi32(m15,m5,m12,m11) #define LOAD_MSG_2_2(buf) buf = _mm_set_epi32(m13,m2,m0,m8) #define LOAD_MSG_2_3(buf) buf = _mm_set_epi32(m7,m3,m10,m9) #define LOAD_MSG_2_4(buf) buf = _mm_set_epi32(m1,m6,m14,m4) #define LOAD_MSG_3_1(buf) buf = _mm_set_epi32(m11,m13,m3,m7) #define LOAD_MSG_3_2(buf) buf = _mm_set_epi32(m14,m12,m1,m9) #define LOAD_MSG_3_3(buf) buf = _mm_set_epi32(m4,m5,m2,m15) #define LOAD_MSG_3_4(buf) buf = _mm_set_epi32(m0,m10,m6,m8) #define LOAD_MSG_4_1(buf) buf = _mm_set_epi32(m10,m2,m5,m9) #define LOAD_MSG_4_2(buf) buf = _mm_set_epi32(m15,m4,m7,m0) #define LOAD_MSG_4_3(buf) buf = _mm_set_epi32(m6,m11,m14,m3) #define LOAD_MSG_4_4(buf) buf = _mm_set_epi32(m8,m12,m1,m13) #define LOAD_MSG_5_1(buf) buf = _mm_set_epi32(m8,m0,m6,m2) #define LOAD_MSG_5_2(buf) buf = _mm_set_epi32(m3,m11,m10,m12) #define LOAD_MSG_5_3(buf) buf = _mm_set_epi32(m15,m7,m4,m1) #define LOAD_MSG_5_4(buf) buf = _mm_set_epi32(m14,m5,m13,m9) #define LOAD_MSG_6_1(buf) buf = _mm_set_epi32(m4,m14,m1,m12) #define LOAD_MSG_6_2(buf) buf = _mm_set_epi32(m10,m13,m15,m5) #define LOAD_MSG_6_3(buf) buf = _mm_set_epi32(m9,m6,m0,m8) #define LOAD_MSG_6_4(buf) buf = _mm_set_epi32(m2,m3,m7,m11) #define LOAD_MSG_7_1(buf) buf = _mm_set_epi32(m3,m12,m7,m13) #define LOAD_MSG_7_2(buf) buf = _mm_set_epi32(m9,m1,m14,m11) #define LOAD_MSG_7_3(buf) buf = _mm_set_epi32(m8,m15,m5,m2) #define LOAD_MSG_7_4(buf) buf = _mm_set_epi32(m6,m4,m0,m10) #define LOAD_MSG_8_1(buf) buf = _mm_set_epi32(m0,m11,m14,m6) #define LOAD_MSG_8_2(buf) buf = _mm_set_epi32(m8,m3,m9,m15) #define LOAD_MSG_8_3(buf) buf = _mm_set_epi32(m1,m13,m12,m10) #define LOAD_MSG_8_4(buf) buf = _mm_set_epi32(m4,m7,m2,m5) #define LOAD_MSG_9_1(buf) buf = _mm_set_epi32(m1,m7,m8,m10) #define LOAD_MSG_9_2(buf) buf = _mm_set_epi32(m5,m6,m4,m2) #define LOAD_MSG_9_3(buf) buf = _mm_set_epi32(m3,m9,m15,m13) #define LOAD_MSG_9_4(buf) buf = _mm_set_epi32(m12,m14,m11,m0) #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2s-load-sse41.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2S_LOAD_SSE41_H #define BLAKE2S_LOAD_SSE41_H #define LOAD_MSG_0_1(buf) \ buf = TOI(_mm_shuffle_ps(TOF(m0), TOF(m1), _MM_SHUFFLE(2,0,2,0))); #define LOAD_MSG_0_2(buf) \ buf = TOI(_mm_shuffle_ps(TOF(m0), TOF(m1), _MM_SHUFFLE(3,1,3,1))); #define LOAD_MSG_0_3(buf) \ t0 = _mm_shuffle_epi32(m2, _MM_SHUFFLE(3,2,0,1)); \ t1 = _mm_shuffle_epi32(m3, _MM_SHUFFLE(0,1,3,2)); \ buf = _mm_blend_epi16(t0, t1, 0xC3); #define LOAD_MSG_0_4(buf) \ t0 = _mm_blend_epi16(t0, t1, 0x3C); \ buf = _mm_shuffle_epi32(t0, _MM_SHUFFLE(2,3,0,1)); #define LOAD_MSG_1_1(buf) \ t0 = _mm_blend_epi16(m1, m2, 0x0C); \ t1 = _mm_slli_si128(m3, 4); \ t2 = _mm_blend_epi16(t0, t1, 0xF0); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,1,0,3)); #define LOAD_MSG_1_2(buf) \ t0 = _mm_shuffle_epi32(m2,_MM_SHUFFLE(0,0,2,0)); \ t1 = _mm_blend_epi16(m1,m3,0xC0); \ t2 = _mm_blend_epi16(t0, t1, 0xF0); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,3,0,1)); #define LOAD_MSG_1_3(buf) \ t0 = _mm_slli_si128(m1, 4); \ t1 = _mm_blend_epi16(m2, t0, 0x30); \ t2 = _mm_blend_epi16(m0, t1, 0xF0); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,0,1,2)); #define LOAD_MSG_1_4(buf) \ t0 = _mm_unpackhi_epi32(m0,m1); \ t1 = _mm_slli_si128(m3, 4); \ t2 = _mm_blend_epi16(t0, t1, 0x0C); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,0,1,2)); #define LOAD_MSG_2_1(buf) \ t0 = _mm_unpackhi_epi32(m2,m3); \ t1 = _mm_blend_epi16(m3,m1,0x0C); \ t2 = _mm_blend_epi16(t0, t1, 0x0F); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,1,0,2)); #define LOAD_MSG_2_2(buf) \ t0 = _mm_unpacklo_epi32(m2,m0); \ t1 = _mm_blend_epi16(t0, m0, 0xF0); \ t2 = _mm_slli_si128(m3, 8); \ buf = _mm_blend_epi16(t1, t2, 0xC0); #define LOAD_MSG_2_3(buf) \ t0 = _mm_blend_epi16(m0, m2, 0x3C); \ t1 = _mm_srli_si128(m1, 12); \ t2 = _mm_blend_epi16(t0,t1,0x03); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(0,3,2,1)); #define LOAD_MSG_2_4(buf) \ t0 = _mm_slli_si128(m3, 4); \ t1 = _mm_blend_epi16(m0, m1, 0x33); \ t2 = _mm_blend_epi16(t1, t0, 0xC0); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,2,3,0)); #define LOAD_MSG_3_1(buf) \ t0 = _mm_unpackhi_epi32(m0,m1); \ t1 = _mm_unpackhi_epi32(t0, m2); \ t2 = _mm_blend_epi16(t1, m3, 0x0C); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,1,0,2)); #define LOAD_MSG_3_2(buf) \ t0 = _mm_slli_si128(m2, 8); \ t1 = _mm_blend_epi16(m3,m0,0x0C); \ t2 = _mm_blend_epi16(t1, t0, 0xC0); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,0,1,3)); #define LOAD_MSG_3_3(buf) \ t0 = _mm_blend_epi16(m0,m1,0x0F); \ t1 = _mm_blend_epi16(t0, m3, 0xC0); \ buf = _mm_shuffle_epi32(t1, _MM_SHUFFLE(0,1,2,3)); #define LOAD_MSG_3_4(buf) \ t0 = _mm_alignr_epi8(m0, m1, 4); \ buf = _mm_blend_epi16(t0, m2, 0x33); #define LOAD_MSG_4_1(buf) \ t0 = _mm_unpacklo_epi64(m1,m2); \ t1 = _mm_unpackhi_epi64(m0,m2); \ t2 = _mm_blend_epi16(t0,t1,0x33); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,0,1,3)); #define LOAD_MSG_4_2(buf) \ t0 = _mm_unpackhi_epi64(m1,m3); \ t1 = _mm_unpacklo_epi64(m0,m1); \ buf = _mm_blend_epi16(t0,t1,0x33); #define LOAD_MSG_4_3(buf) \ t0 = _mm_unpackhi_epi64(m3,m1); \ t1 = _mm_unpackhi_epi64(m2,m0); \ t2 = _mm_blend_epi16(t1,t0,0x33); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,1,0,3)); #define LOAD_MSG_4_4(buf) \ t0 = _mm_blend_epi16(m0,m2,0x03); \ t1 = _mm_slli_si128(t0, 8); \ t2 = _mm_blend_epi16(t1,m3,0x0F); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,0,3,1)); #define LOAD_MSG_5_1(buf) \ t0 = _mm_unpackhi_epi32(m0,m1); \ t1 = _mm_unpacklo_epi32(m0,m2); \ buf = _mm_unpacklo_epi64(t0,t1); #define LOAD_MSG_5_2(buf) \ t0 = _mm_srli_si128(m2, 4); \ t1 = _mm_blend_epi16(m0,m3,0x03); \ buf = _mm_blend_epi16(t1,t0,0x3C); #define LOAD_MSG_5_3(buf) \ t0 = _mm_blend_epi16(m1,m0,0x0C); \ t1 = _mm_srli_si128(m3, 4); \ t2 = _mm_blend_epi16(t0,t1,0x30); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,3,0,1)); #define LOAD_MSG_5_4(buf) \ t0 = _mm_unpacklo_epi64(m2,m1); \ t1 = _mm_shuffle_epi32(m3, _MM_SHUFFLE(2,0,1,0)); \ t2 = _mm_srli_si128(t0, 4); \ buf = _mm_blend_epi16(t1,t2,0x33); #define LOAD_MSG_6_1(buf) \ t0 = _mm_slli_si128(m1, 12); \ t1 = _mm_blend_epi16(m0,m3,0x33); \ buf = _mm_blend_epi16(t1,t0,0xC0); #define LOAD_MSG_6_2(buf) \ t0 = _mm_blend_epi16(m3,m2,0x30); \ t1 = _mm_srli_si128(m1, 4); \ t2 = _mm_blend_epi16(t0,t1,0x03); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,1,3,0)); #define LOAD_MSG_6_3(buf) \ t0 = _mm_unpacklo_epi64(m0,m2); \ t1 = _mm_srli_si128(m1, 4); \ t2 = _mm_blend_epi16(t0,t1,0x0C); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,1,0,2)); #define LOAD_MSG_6_4(buf) \ t0 = _mm_unpackhi_epi32(m1,m2); \ t1 = _mm_unpackhi_epi64(m0,t0); \ buf = _mm_shuffle_epi32(t1, _MM_SHUFFLE(0,1,2,3)); #define LOAD_MSG_7_1(buf) \ t0 = _mm_unpackhi_epi32(m0,m1); \ t1 = _mm_blend_epi16(t0,m3,0x0F); \ buf = _mm_shuffle_epi32(t1,_MM_SHUFFLE(2,0,3,1)); #define LOAD_MSG_7_2(buf) \ t0 = _mm_blend_epi16(m2,m3,0x30); \ t1 = _mm_srli_si128(m0,4); \ t2 = _mm_blend_epi16(t0,t1,0x03); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,0,2,3)); #define LOAD_MSG_7_3(buf) \ t0 = _mm_unpackhi_epi64(m0,m3); \ t1 = _mm_unpacklo_epi64(m1,m2); \ t2 = _mm_blend_epi16(t0,t1,0x3C); \ buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(2,3,1,0)); #define LOAD_MSG_7_4(buf) \ t0 = _mm_unpacklo_epi32(m0,m1); \ t1 = _mm_unpackhi_epi32(m1,m2); \ t2 = _mm_unpacklo_epi64(t0,t1); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,1,0,3)); #define LOAD_MSG_8_1(buf) \ t0 = _mm_unpackhi_epi32(m1,m3); \ t1 = _mm_unpacklo_epi64(t0,m0); \ t2 = _mm_blend_epi16(t1,m2,0xC0); \ buf = _mm_shufflehi_epi16(t2,_MM_SHUFFLE(1,0,3,2)); #define LOAD_MSG_8_2(buf) \ t0 = _mm_unpackhi_epi32(m0,m3); \ t1 = _mm_blend_epi16(m2,t0,0xF0); \ buf = _mm_shuffle_epi32(t1,_MM_SHUFFLE(0,2,1,3)); #define LOAD_MSG_8_3(buf) \ t0 = _mm_unpacklo_epi64(m0,m3); \ t1 = _mm_srli_si128(m2,8); \ t2 = _mm_blend_epi16(t0,t1,0x03); \ buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,3,2,0)); #define LOAD_MSG_8_4(buf) \ t0 = _mm_blend_epi16(m1,m0,0x30); \ buf = _mm_shuffle_epi32(t0,_MM_SHUFFLE(0,3,2,1)); #define LOAD_MSG_9_1(buf) \ t0 = _mm_blend_epi16(m0,m2,0x03); \ t1 = _mm_blend_epi16(m1,m2,0x30); \ t2 = _mm_blend_epi16(t1,t0,0x0F); \ buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(1,3,0,2)); #define LOAD_MSG_9_2(buf) \ t0 = _mm_slli_si128(m0,4); \ t1 = _mm_blend_epi16(m1,t0,0xC0); \ buf = _mm_shuffle_epi32(t1,_MM_SHUFFLE(1,2,0,3)); #define LOAD_MSG_9_3(buf) \ t0 = _mm_unpackhi_epi32(m0,m3); \ t1 = _mm_unpacklo_epi32(m2,m3); \ t2 = _mm_unpackhi_epi64(t0,t1); \ buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(0,2,1,3)); #define LOAD_MSG_9_4(buf) \ t0 = _mm_blend_epi16(m3,m2,0xC0); \ t1 = _mm_unpacklo_epi32(m0,m3); \ t2 = _mm_blend_epi16(t0,t1,0x0F); \ buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(1,2,3,0)); #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2s-load-xop.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2S_LOAD_XOP_H #define BLAKE2S_LOAD_XOP_H #define TOB(x) ((x)*4*0x01010101 + 0x03020100) /* ..or not TOB */ #if 0 /* Basic VPPERM emulation, for testing purposes */ static __m128i _mm_perm_epi8(const __m128i src1, const __m128i src2, const __m128i sel) { const __m128i sixteen = _mm_set1_epi8(16); const __m128i t0 = _mm_shuffle_epi8(src1, sel); const __m128i s1 = _mm_shuffle_epi8(src2, _mm_sub_epi8(sel, sixteen)); const __m128i mask = _mm_or_si128(_mm_cmpeq_epi8(sel, sixteen), _mm_cmpgt_epi8(sel, sixteen)); /* (>=16) = 0xff : 00 */ return _mm_blendv_epi8(t0, s1, mask); } #endif #define LOAD_MSG_0_1(buf) \ buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(6),TOB(4),TOB(2),TOB(0)) ); #define LOAD_MSG_0_2(buf) \ buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(7),TOB(5),TOB(3),TOB(1)) ); #define LOAD_MSG_0_3(buf) \ buf = _mm_perm_epi8(m2, m3, _mm_set_epi32(TOB(4),TOB(2),TOB(0),TOB(6)) ); #define LOAD_MSG_0_4(buf) \ buf = _mm_perm_epi8(m2, m3, _mm_set_epi32(TOB(5),TOB(3),TOB(1),TOB(7)) ); #define LOAD_MSG_1_1(buf) \ t0 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(0),TOB(5),TOB(0),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(5),TOB(2),TOB(1),TOB(6)) ); #define LOAD_MSG_1_2(buf) \ t1 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(2),TOB(0),TOB(4),TOB(6)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(7),TOB(1),TOB(0)) ); #define LOAD_MSG_1_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(5),TOB(0),TOB(0),TOB(1)) ); \ buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(7),TOB(1),TOB(0),TOB(3)) ); #define LOAD_MSG_1_4(buf) \ t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(3),TOB(7),TOB(2),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(2),TOB(1),TOB(4),TOB(3)) ); #define LOAD_MSG_2_1(buf) \ t0 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(0),TOB(1),TOB(0),TOB(7)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(7),TOB(2),TOB(4),TOB(0)) ); #define LOAD_MSG_2_2(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(2),TOB(0),TOB(4)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(5),TOB(2),TOB(1),TOB(0)) ); #define LOAD_MSG_2_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(7),TOB(3),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(2),TOB(1),TOB(6),TOB(5)) ); #define LOAD_MSG_2_4(buf) \ t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(4),TOB(1),TOB(6),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(2),TOB(1),TOB(6),TOB(3)) ); #define LOAD_MSG_3_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(3),TOB(7)) ); \ t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(7),TOB(2),TOB(1),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(5),TOB(1),TOB(0)) ); #define LOAD_MSG_3_2(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(0),TOB(1),TOB(5)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(6),TOB(4),TOB(1),TOB(0)) ); #define LOAD_MSG_3_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(4),TOB(5),TOB(2)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(2),TOB(1),TOB(0),TOB(7)) ); #define LOAD_MSG_3_4(buf) \ t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(0),TOB(6)) ); \ buf = _mm_perm_epi8(t1, m2, _mm_set_epi32(TOB(2),TOB(6),TOB(0),TOB(4)) ); #define LOAD_MSG_4_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(2),TOB(5),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(6),TOB(2),TOB(1),TOB(5)) ); #define LOAD_MSG_4_2(buf) \ t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(4),TOB(7),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(7),TOB(2),TOB(1),TOB(0)) ); #define LOAD_MSG_4_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(3),TOB(6),TOB(0),TOB(0)) ); \ t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(2),TOB(7),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(2),TOB(1),TOB(6),TOB(3)) ); #define LOAD_MSG_4_4(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(4),TOB(0),TOB(1)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(2),TOB(4),TOB(0),TOB(5)) ); #define LOAD_MSG_5_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(6),TOB(2)) ); \ buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(4),TOB(2),TOB(1),TOB(0)) ); #define LOAD_MSG_5_2(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(3),TOB(7),TOB(6),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(4)) ); #define LOAD_MSG_5_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(1),TOB(0),TOB(7),TOB(4)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(7),TOB(1),TOB(0),TOB(3)) ); #define LOAD_MSG_5_4(buf) \ t1 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(5),TOB(0),TOB(1),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(6),TOB(1),TOB(5),TOB(3)) ); #define LOAD_MSG_6_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(4),TOB(0),TOB(1),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(6),TOB(1),TOB(4)) ); #define LOAD_MSG_6_2(buf) \ t1 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(6),TOB(0),TOB(0),TOB(1)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(5),TOB(7),TOB(0)) ); #define LOAD_MSG_6_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(6),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(5),TOB(1),TOB(0),TOB(4)) ); #define LOAD_MSG_6_4(buf) \ t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(2),TOB(3),TOB(7)) ); \ buf = _mm_perm_epi8(t1, m2, _mm_set_epi32(TOB(2),TOB(1),TOB(0),TOB(7)) ); #define LOAD_MSG_7_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(3),TOB(0),TOB(7),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(4),TOB(1),TOB(5)) ); #define LOAD_MSG_7_2(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(5),TOB(1),TOB(0),TOB(7)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(6),TOB(0)) ); #define LOAD_MSG_7_3(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(2),TOB(0),TOB(0),TOB(5)) ); \ t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(4),TOB(1),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(2),TOB(7),TOB(0),TOB(3)) ); #define LOAD_MSG_7_4(buf) \ t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(6),TOB(4),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m2, _mm_set_epi32(TOB(2),TOB(1),TOB(0),TOB(6)) ); #define LOAD_MSG_8_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(0),TOB(6)) ); \ t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(7),TOB(1),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(6),TOB(0)) ); #define LOAD_MSG_8_2(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(4),TOB(3),TOB(5),TOB(0)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(7)) ); #define LOAD_MSG_8_3(buf) \ t0 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(6),TOB(1),TOB(0),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(2),TOB(5),TOB(4),TOB(3)) ); \ #define LOAD_MSG_8_4(buf) \ buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(4),TOB(7),TOB(2),TOB(5)) ); #define LOAD_MSG_9_1(buf) \ t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(1),TOB(7),TOB(0),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(2),TOB(4),TOB(6)) ); #define LOAD_MSG_9_2(buf) \ buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(5),TOB(6),TOB(4),TOB(2)) ); #define LOAD_MSG_9_3(buf) \ t0 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(3),TOB(5),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(2),TOB(1),TOB(7),TOB(5)) ); #define LOAD_MSG_9_4(buf) \ t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(0),TOB(0),TOB(7)) ); \ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(4),TOB(6),TOB(0),TOB(3)) ); #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2s-round.h ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #ifndef BLAKE2S_ROUND_H #define BLAKE2S_ROUND_H #define LOADU(p) _mm_loadu_si128( (const __m128i *)(p) ) #define STOREU(p,r) _mm_storeu_si128((__m128i *)(p), r) #define TOF(reg) _mm_castsi128_ps((reg)) #define TOI(reg) _mm_castps_si128((reg)) #define LIKELY(x) __builtin_expect((x),1) /* Microarchitecture-specific macros */ #ifndef HAVE_XOP #ifdef HAVE_SSSE3 #define _mm_roti_epi32(r, c) ( \ (8==-(c)) ? _mm_shuffle_epi8(r,r8) \ : (16==-(c)) ? _mm_shuffle_epi8(r,r16) \ : _mm_xor_si128(_mm_srli_epi32( (r), -(c) ),_mm_slli_epi32( (r), 32-(-(c)) )) ) #else #define _mm_roti_epi32(r, c) _mm_xor_si128(_mm_srli_epi32( (r), -(c) ),_mm_slli_epi32( (r), 32-(-(c)) )) #endif #else /* ... */ #endif #define G1(row1,row2,row3,row4,buf) \ row1 = _mm_add_epi32( _mm_add_epi32( row1, buf), row2 ); \ row4 = _mm_xor_si128( row4, row1 ); \ row4 = _mm_roti_epi32(row4, -16); \ row3 = _mm_add_epi32( row3, row4 ); \ row2 = _mm_xor_si128( row2, row3 ); \ row2 = _mm_roti_epi32(row2, -12); #define G2(row1,row2,row3,row4,buf) \ row1 = _mm_add_epi32( _mm_add_epi32( row1, buf), row2 ); \ row4 = _mm_xor_si128( row4, row1 ); \ row4 = _mm_roti_epi32(row4, -8); \ row3 = _mm_add_epi32( row3, row4 ); \ row2 = _mm_xor_si128( row2, row3 ); \ row2 = _mm_roti_epi32(row2, -7); #define DIAGONALIZE(row1,row2,row3,row4) \ row1 = _mm_shuffle_epi32( row1, _MM_SHUFFLE(2,1,0,3) ); \ row4 = _mm_shuffle_epi32( row4, _MM_SHUFFLE(1,0,3,2) ); \ row3 = _mm_shuffle_epi32( row3, _MM_SHUFFLE(0,3,2,1) ); #define UNDIAGONALIZE(row1,row2,row3,row4) \ row1 = _mm_shuffle_epi32( row1, _MM_SHUFFLE(0,3,2,1) ); \ row4 = _mm_shuffle_epi32( row4, _MM_SHUFFLE(1,0,3,2) ); \ row3 = _mm_shuffle_epi32( row3, _MM_SHUFFLE(2,1,0,3) ); #if defined(HAVE_XOP) #include "blake2s-load-xop.h" #elif defined(HAVE_SSE41) #include "blake2s-load-sse41.h" #else #include "blake2s-load-sse2.h" #endif #define ROUND(r) \ LOAD_MSG_ ##r ##_1(buf1); \ G1(row1,row2,row3,row4,buf1); \ LOAD_MSG_ ##r ##_2(buf2); \ G2(row1,row2,row3,row4,buf2); \ DIAGONALIZE(row1,row2,row3,row4); \ LOAD_MSG_ ##r ##_3(buf3); \ G1(row1,row2,row3,row4,buf3); \ LOAD_MSG_ ##r ##_4(buf4); \ G2(row1,row2,row3,row4,buf4); \ UNDIAGONALIZE(row1,row2,row3,row4); \ #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2s.c ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" #include "blake2-config.h" #include #if defined(HAVE_SSSE3) #include #endif #if defined(HAVE_SSE41) #include #endif #if defined(HAVE_AVX) #include #endif #if defined(HAVE_XOP) #include #endif #include "blake2s-round.h" static const uint32_t blake2s_IV[8] = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL }; /* Some helper functions */ static void blake2s_set_lastnode( blake2s_state *S ) { S->f[1] = (uint32_t)-1; } static int blake2s_is_lastblock( const blake2s_state *S ) { return S->f[0] != 0; } static void blake2s_set_lastblock( blake2s_state *S ) { if( S->last_node ) blake2s_set_lastnode( S ); S->f[0] = (uint32_t)-1; } static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) { uint64_t t = ( ( uint64_t )S->t[1] << 32 ) | S->t[0]; t += inc; S->t[0] = ( uint32_t )( t >> 0 ); S->t[1] = ( uint32_t )( t >> 32 ); } /* init2 xors IV with input parameter block */ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) { size_t i; /*blake2s_init0( S ); */ const uint8_t * v = ( const uint8_t * )( blake2s_IV ); const uint8_t * p = ( const uint8_t * )( P ); uint8_t * h = ( uint8_t * )( S->h ); /* IV XOR ParamBlock */ memset( S, 0, sizeof( blake2s_state ) ); for( i = 0; i < BLAKE2S_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; S->outlen = P->digest_length; return 0; } /* Some sort of default parameter block initialization, for sequential blake2s */ int blake2s_init( blake2s_state *S, size_t outlen ) { blake2s_param P[1]; /* Move interval verification here? */ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = 0; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) { blake2s_param P[1]; /* Move interval verification here? */ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; if ( ( !key ) || ( !keylen ) || keylen > BLAKE2S_KEYBYTES ) return -1; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = 1; P->depth = 1; store32( &P->leaf_length, 0 ); store32( &P->node_offset, 0 ); store16( &P->xof_length, 0 ); P->node_depth = 0; P->inner_length = 0; /* memset(P->reserved, 0, sizeof(P->reserved) ); */ memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); if( blake2s_init_param( S, P ) < 0 ) return -1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } static void blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] ) { __m128i row1, row2, row3, row4; __m128i buf1, buf2, buf3, buf4; #if defined(HAVE_SSE41) __m128i t0, t1; #if !defined(HAVE_XOP) __m128i t2; #endif #endif __m128i ff0, ff1; #if defined(HAVE_SSSE3) && !defined(HAVE_XOP) const __m128i r8 = _mm_set_epi8( 12, 15, 14, 13, 8, 11, 10, 9, 4, 7, 6, 5, 0, 3, 2, 1 ); const __m128i r16 = _mm_set_epi8( 13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2 ); #endif #if defined(HAVE_SSE41) const __m128i m0 = LOADU( block + 00 ); const __m128i m1 = LOADU( block + 16 ); const __m128i m2 = LOADU( block + 32 ); const __m128i m3 = LOADU( block + 48 ); #else const uint32_t m0 = load32(block + 0 * sizeof(uint32_t)); const uint32_t m1 = load32(block + 1 * sizeof(uint32_t)); const uint32_t m2 = load32(block + 2 * sizeof(uint32_t)); const uint32_t m3 = load32(block + 3 * sizeof(uint32_t)); const uint32_t m4 = load32(block + 4 * sizeof(uint32_t)); const uint32_t m5 = load32(block + 5 * sizeof(uint32_t)); const uint32_t m6 = load32(block + 6 * sizeof(uint32_t)); const uint32_t m7 = load32(block + 7 * sizeof(uint32_t)); const uint32_t m8 = load32(block + 8 * sizeof(uint32_t)); const uint32_t m9 = load32(block + 9 * sizeof(uint32_t)); const uint32_t m10 = load32(block + 10 * sizeof(uint32_t)); const uint32_t m11 = load32(block + 11 * sizeof(uint32_t)); const uint32_t m12 = load32(block + 12 * sizeof(uint32_t)); const uint32_t m13 = load32(block + 13 * sizeof(uint32_t)); const uint32_t m14 = load32(block + 14 * sizeof(uint32_t)); const uint32_t m15 = load32(block + 15 * sizeof(uint32_t)); #endif row1 = ff0 = LOADU( &S->h[0] ); row2 = ff1 = LOADU( &S->h[4] ); row3 = _mm_loadu_si128( (__m128i const *)&blake2s_IV[0] ); row4 = _mm_xor_si128( _mm_loadu_si128( (__m128i const *)&blake2s_IV[4] ), LOADU( &S->t[0] ) ); ROUND( 0 ); ROUND( 1 ); ROUND( 2 ); ROUND( 3 ); ROUND( 4 ); ROUND( 5 ); ROUND( 6 ); ROUND( 7 ); ROUND( 8 ); ROUND( 9 ); STOREU( &S->h[0], _mm_xor_si128( ff0, _mm_xor_si128( row1, row3 ) ) ); STOREU( &S->h[4], _mm_xor_si128( ff1, _mm_xor_si128( row2, row4 ) ) ); } int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; if( inlen > 0 ) { size_t left = S->buflen; size_t fill = BLAKE2S_BLOCKBYTES - left; if( inlen > fill ) { S->buflen = 0; memcpy( S->buf + left, in, fill ); /* Fill buffer */ blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S->buf ); /* Compress */ in += fill; inlen -= fill; while(inlen > BLAKE2S_BLOCKBYTES) { blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES); blake2s_compress( S, in ); in += BLAKE2S_BLOCKBYTES; inlen -= BLAKE2S_BLOCKBYTES; } } memcpy( S->buf + S->buflen, in, inlen ); S->buflen += inlen; } return 0; } int blake2s_final( blake2s_state *S, void *out, size_t outlen ) { uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; size_t i; if( out == NULL || outlen < S->outlen ) return -1; if( blake2s_is_lastblock( S ) ) return -1; blake2s_increment_counter( S, (uint32_t)S->buflen ); blake2s_set_lastblock( S ); memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ blake2s_compress( S, S->buf ); for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, S->outlen ); secure_zero_memory( buffer, sizeof(buffer) ); return 0; } /* inlen, at least, should be uint64_t. Others can be size_t. */ int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { blake2s_state S[1]; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; if( keylen > 0 ) { if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; } else { if( blake2s_init( S, outlen ) < 0 ) return -1; } blake2s_update( S, ( const uint8_t * )in, inlen ); blake2s_final( S, out, outlen ); return 0; } #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) { return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 ); } #endif #if defined(BLAKE2S_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2s_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2s_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2sp.c ================================================ /* BLAKE2 reference source code package - optimized C implementations Copyright 2012, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #if defined(_OPENMP) #include #endif #include "blake2.h" #include "blake2-impl.h" #define PARALLELISM_DEGREE 8 /* blake2sp_init_param defaults to setting the expecting output length from the digest_length parameter block field. In some cases, however, we do not want this, as the output length of these instances is given by inner_length instead. */ static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P ) { int err = blake2s_init_param(S, P); S->outlen = P->inner_length; return err; } static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint64_t offset ) { blake2s_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = offset; P->xof_length = 0; P->node_depth = 0; P->inner_length = BLAKE2S_OUTBYTES; memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2sp_init_leaf_param( S, P ); } static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen ) { blake2s_param P[1]; P->digest_length = (uint8_t)outlen; P->key_length = (uint8_t)keylen; P->fanout = PARALLELISM_DEGREE; P->depth = 2; P->leaf_length = 0; P->node_offset = 0; P->xof_length = 0; P->node_depth = 1; P->inner_length = BLAKE2S_OUTBYTES; memset( P->salt, 0, sizeof( P->salt ) ); memset( P->personal, 0, sizeof( P->personal ) ); return blake2s_init_param( S, P ); } int blake2sp_init( blake2sp_state *S, size_t outlen ) { size_t i; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2sp_init_root( S->R, outlen, 0 ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; return 0; } int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ) { size_t i; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; memset( S->buf, 0, sizeof( S->buf ) ); S->buflen = 0; S->outlen = outlen; if( blake2sp_init_root( S->R, outlen, keylen ) < 0 ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; S->R->last_node = 1; S->S[PARALLELISM_DEGREE - 1]->last_node = 1; { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } return 0; } int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen ) { const unsigned char * in = (const unsigned char *)pin; size_t left = S->buflen; size_t fill = sizeof( S->buf ) - left; size_t i; if( left && inlen >= fill ) { memcpy( S->buf + left, in, fill ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); in += fill; inlen -= fill; left = 0; } #if defined(_OPENMP) #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2S_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) { blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; } } in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); inlen %= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; if( inlen > 0 ) memcpy( S->buf + left, in, inlen ); S->buflen = left + inlen; return 0; } int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; size_t i; if(out == NULL || outlen < S->outlen) { return -1; } for( i = 0; i < PARALLELISM_DEGREE; ++i ) { if( S->buflen > i * BLAKE2S_BLOCKBYTES ) { size_t left = S->buflen - i * BLAKE2S_BLOCKBYTES; if( left > BLAKE2S_BLOCKBYTES ) left = BLAKE2S_BLOCKBYTES; blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, left ); } blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES ); } for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES ); return blake2s_final( S->R, out, S->outlen ); } int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) { uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; blake2s_state S[PARALLELISM_DEGREE][1]; blake2s_state FS[1]; size_t i; /* Verify parameters */ if ( NULL == in && inlen > 0 ) return -1; if ( NULL == out ) return -1; if ( NULL == key && keylen > 0) return -1; if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; if( keylen > BLAKE2S_KEYBYTES ) return -1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ if( keylen > 0 ) { uint8_t block[BLAKE2S_BLOCKBYTES]; memset( block, 0, BLAKE2S_BLOCKBYTES ); memcpy( block, key, keylen ); for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES ); secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ } #if defined(_OPENMP) #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif { #if defined(_OPENMP) size_t i = omp_get_thread_num(); #endif size_t inlen__ = inlen; const unsigned char *in__ = ( const unsigned char * )in; in__ += i * BLAKE2S_BLOCKBYTES; while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) { blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; } if( inlen__ > i * BLAKE2S_BLOCKBYTES ) { const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES; const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES; blake2s_update( S[i], in__, len ); } blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES ); } if( blake2sp_init_root( FS, outlen, keylen ) < 0 ) return -1; FS->last_node = 1; for( i = 0; i < PARALLELISM_DEGREE; ++i ) blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES ); return blake2s_final( FS, out, outlen ); } #if defined(BLAKE2SP_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; /* Test simple API */ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2sp_state S; uint8_t * p = buf; size_t mlen = i; int err = 0; if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2sp_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2sp_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { goto fail; } if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2xb.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2016, JP Aumasson . Copyright 2016, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" int blake2xb_init( blake2xb_state *S, const size_t outlen ) { return blake2xb_init_key(S, outlen, NULL, 0); } int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen) { if ( outlen == 0 || outlen > 0xFFFFFFFFUL ) { return -1; } if (NULL != key && keylen > BLAKE2B_KEYBYTES) { return -1; } if (NULL == key && keylen > 0) { return -1; } /* Initialize parameter block */ S->P->digest_length = BLAKE2B_OUTBYTES; S->P->key_length = keylen; S->P->fanout = 1; S->P->depth = 1; store32( &S->P->leaf_length, 0 ); store32( &S->P->node_offset, 0 ); store32( &S->P->xof_length, outlen ); S->P->node_depth = 0; S->P->inner_length = 0; memset( S->P->reserved, 0, sizeof( S->P->reserved ) ); memset( S->P->salt, 0, sizeof( S->P->salt ) ); memset( S->P->personal, 0, sizeof( S->P->personal ) ); if( blake2b_init_param( S->S, S->P ) < 0 ) { return -1; } if (keylen > 0) { uint8_t block[BLAKE2B_BLOCKBYTES]; memset(block, 0, BLAKE2B_BLOCKBYTES); memcpy(block, key, keylen); blake2b_update(S->S, block, BLAKE2B_BLOCKBYTES); secure_zero_memory(block, BLAKE2B_BLOCKBYTES); } return 0; } int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen ) { return blake2b_update( S->S, in, inlen ); } int blake2xb_final( blake2xb_state *S, void *out, size_t outlen) { blake2b_state C[1]; blake2b_param P[1]; uint32_t xof_length = load32(&S->P->xof_length); uint8_t root[BLAKE2B_BLOCKBYTES]; size_t i; if (NULL == out) { return -1; } /* outlen must match the output size defined in xof_length, */ /* unless it was -1, in which case anything goes except 0. */ if(xof_length == 0xFFFFFFFFUL) { if(outlen == 0) { return -1; } } else { if(outlen != xof_length) { return -1; } } /* Finalize the root hash */ if (blake2b_final(S->S, root, BLAKE2B_OUTBYTES) < 0) { return -1; } /* Set common block structure values */ /* Copy values from parent instance, and only change the ones below */ memcpy(P, S->P, sizeof(blake2b_param)); P->key_length = 0; P->fanout = 0; P->depth = 0; store32(&P->leaf_length, BLAKE2B_OUTBYTES); P->inner_length = BLAKE2B_OUTBYTES; P->node_depth = 0; for (i = 0; outlen > 0; ++i) { const size_t block_size = (outlen < BLAKE2B_OUTBYTES) ? outlen : BLAKE2B_OUTBYTES; /* Initialize state */ P->digest_length = block_size; store32(&P->node_offset, i); blake2b_init_param(C, P); /* Process key if needed */ blake2b_update(C, root, BLAKE2B_OUTBYTES); if (blake2b_final(C, (uint8_t *)out + i * BLAKE2B_OUTBYTES, block_size) < 0 ) { return -1; } outlen -= block_size; } secure_zero_memory(root, sizeof(root)); secure_zero_memory(P, sizeof(P)); secure_zero_memory(C, sizeof(C)); /* Put blake2xb in an invalid state? cf. blake2s_is_lastblock */ return 0; } int blake2xb(void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen) { blake2xb_state S[1]; /* Verify parameters */ if (NULL == in && inlen > 0) return -1; if (NULL == out) return -1; if (NULL == key && keylen > 0) return -1; if (keylen > BLAKE2B_KEYBYTES) return -1; if (outlen == 0) return -1; /* Initialize the root block structure */ if (blake2xb_init_key(S, outlen, key, keylen) < 0) { return -1; } /* Absorb the input message */ blake2xb_update(S, in, inlen); /* Compute the root node of the tree and the final hash using the counter construction */ return blake2xb_final(S, out, outlen); } #if defined(BLAKE2XB_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step, outlen; for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) { key[i] = ( uint8_t )i; } for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { buf[i] = ( uint8_t )i; } /* Testing length of ouputs rather than inputs */ /* (Test of input lengths mostly covered by blake2s tests) */ /* Test simple API */ for( outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen ) { uint8_t hash[BLAKE2_KAT_LENGTH] = {0}; if( blake2xb( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2B_KEYBYTES ) < 0 ) { goto fail; } if( 0 != memcmp( hash, blake2xb_keyed_kat[outlen-1], outlen ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) { for (outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) { uint8_t hash[BLAKE2_KAT_LENGTH]; blake2xb_state S; uint8_t * p = buf; size_t mlen = BLAKE2_KAT_LENGTH; int err = 0; if( (err = blake2xb_init_key(&S, outlen, key, BLAKE2B_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2xb_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2xb_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2xb_final(&S, hash, outlen)) < 0) { goto fail; } if (0 != memcmp(hash, blake2xb_keyed_kat[outlen-1], outlen)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/BLAKE2/sse/blake2xs.c ================================================ /* BLAKE2 reference source code package - reference C implementations Copyright 2016, JP Aumasson . Copyright 2016, Samuel Neves . You may use this under the terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at your option. The terms of these licenses can be found at: - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - OpenSSL license : https://www.openssl.org/source/license.html - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 More information about the BLAKE2 hash function can be found at https://blake2.net. */ #include #include #include #include "blake2.h" #include "blake2-impl.h" int blake2xs_init( blake2xs_state *S, const size_t outlen ) { return blake2xs_init_key(S, outlen, NULL, 0); } int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen ) { if ( outlen == 0 || outlen > 0xFFFFUL ) { return -1; } if (NULL != key && keylen > BLAKE2B_KEYBYTES) { return -1; } if (NULL == key && keylen > 0) { return -1; } /* Initialize parameter block */ S->P->digest_length = BLAKE2S_OUTBYTES; S->P->key_length = keylen; S->P->fanout = 1; S->P->depth = 1; store32( &S->P->leaf_length, 0 ); store32( &S->P->node_offset, 0 ); store16( &S->P->xof_length, outlen ); S->P->node_depth = 0; S->P->inner_length = 0; memset( S->P->salt, 0, sizeof( S->P->salt ) ); memset( S->P->personal, 0, sizeof( S->P->personal ) ); if( blake2s_init_param( S->S, S->P ) < 0 ) { return -1; } if (keylen > 0) { uint8_t block[BLAKE2S_BLOCKBYTES]; memset(block, 0, BLAKE2S_BLOCKBYTES); memcpy(block, key, keylen); blake2s_update(S->S, block, BLAKE2S_BLOCKBYTES); secure_zero_memory(block, BLAKE2S_BLOCKBYTES); } return 0; } int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen ) { return blake2s_update( S->S, in, inlen ); } int blake2xs_final(blake2xs_state *S, void *out, size_t outlen) { blake2s_state C[1]; blake2s_param P[1]; uint16_t xof_length = load16(&S->P->xof_length); uint8_t root[BLAKE2S_BLOCKBYTES]; size_t i; if (NULL == out) { return -1; } /* outlen must match the output size defined in xof_length, */ /* unless it was -1, in which case anything goes except 0. */ if(xof_length == 0xFFFFUL) { if(outlen == 0) { return -1; } } else { if(outlen != xof_length) { return -1; } } /* Finalize the root hash */ if (blake2s_final(S->S, root, BLAKE2S_OUTBYTES) < 0) { return -1; } /* Set common block structure values */ /* Copy values from parent instance, and only change the ones below */ memcpy(P, S->P, sizeof(blake2s_param)); P->key_length = 0; P->fanout = 0; P->depth = 0; store32(&P->leaf_length, BLAKE2S_OUTBYTES); P->inner_length = BLAKE2S_OUTBYTES; P->node_depth = 0; for (i = 0; outlen > 0; ++i) { const size_t block_size = (outlen < BLAKE2S_OUTBYTES) ? outlen : BLAKE2S_OUTBYTES; /* Initialize state */ P->digest_length = block_size; store32(&P->node_offset, i); blake2s_init_param(C, P); /* Process key if needed */ blake2s_update(C, root, BLAKE2S_OUTBYTES); if (blake2s_final(C, (uint8_t *)out + i * BLAKE2S_OUTBYTES, block_size) < 0) { return -1; } outlen -= block_size; } secure_zero_memory(root, sizeof(root)); secure_zero_memory(P, sizeof(P)); secure_zero_memory(C, sizeof(C)); /* Put blake2xs in an invalid state? cf. blake2s_is_lastblock */ return 0; } int blake2xs(void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen) { blake2xs_state S[1]; /* Verify parameters */ if (NULL == in && inlen > 0) return -1; if (NULL == out) return -1; if (NULL == key && keylen > 0) return -1; if (keylen > BLAKE2S_KEYBYTES) return -1; if (outlen == 0) return -1; /* Initialize the root block structure */ if (blake2xs_init_key(S, outlen, key, keylen) < 0) { return -1; } /* Absorb the input message */ blake2xs_update(S, in, inlen); /* Compute the root node of the tree and the final hash using the counter construction */ return blake2xs_final(S, out, outlen); } #if defined(BLAKE2XS_SELFTEST) #include #include "blake2-kat.h" int main( void ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[BLAKE2_KAT_LENGTH]; size_t i, step, outlen; for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) { key[i] = ( uint8_t )i; } for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) { buf[i] = ( uint8_t )i; } /* Testing length of ouputs rather than inputs */ /* (Test of input lengths mostly covered by blake2s tests) */ /* Test simple API */ for( outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen ) { uint8_t hash[BLAKE2_KAT_LENGTH] = {0}; if( blake2xs( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2S_KEYBYTES ) < 0 ) { goto fail; } if( 0 != memcmp( hash, blake2xs_keyed_kat[outlen-1], outlen ) ) { goto fail; } } /* Test streaming API */ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { for (outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) { uint8_t hash[BLAKE2_KAT_LENGTH]; blake2xs_state S; uint8_t * p = buf; size_t mlen = BLAKE2_KAT_LENGTH; int err = 0; if( (err = blake2xs_init_key(&S, outlen, key, BLAKE2S_KEYBYTES)) < 0 ) { goto fail; } while (mlen >= step) { if ( (err = blake2xs_update(&S, p, step)) < 0 ) { goto fail; } mlen -= step; p += step; } if ( (err = blake2xs_update(&S, p, mlen)) < 0) { goto fail; } if ( (err = blake2xs_final(&S, hash, outlen)) < 0) { goto fail; } if (0 != memcmp(hash, blake2xs_keyed_kat[outlen-1], outlen)) { goto fail; } } } puts( "ok" ); return 0; fail: puts("error"); return -1; } #endif ================================================ FILE: ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame/LICENSE ================================================ Revised BSD License Copyright (c) 2004-2008 Brent Fulgham, 2005-2025 Isaac Gouy All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of "The Computer Language Benchmarks Game" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Source: https://benchmarksgame-team.pages.debian.net/benchmarksgame/ ================================================ FILE: ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame/binary-trees/binary-trees.c ================================================ /* The Computer Language Benchmarks Game * https://salsa.debian.org/benchmarksgame-team/benchmarksgame/ contributed by Kevin Carson compilation: gcc -O3 -fomit-frame-pointer -funroll-loops -static binary-trees.c -lm icc -O3 -ip -unroll -static binary-trees.c -lm *reset* */ #include #include #include typedef struct tn { struct tn* left; struct tn* right; } treeNode; treeNode* NewTreeNode(treeNode* left, treeNode* right) { treeNode* new; new = (treeNode*)malloc(sizeof(treeNode)); new->left = left; new->right = right; return new; } /* NewTreeNode() */ long ItemCheck(treeNode* tree) { if (tree->left == NULL) return 1; else return 1 + ItemCheck(tree->left) + ItemCheck(tree->right); } /* ItemCheck() */ treeNode* BottomUpTree(unsigned depth) { if (depth > 0) return NewTreeNode ( BottomUpTree(depth - 1), BottomUpTree(depth - 1) ); else return NewTreeNode(NULL, NULL); } /* BottomUpTree() */ void DeleteTree(treeNode* tree) { if (tree->left != NULL) { DeleteTree(tree->left); DeleteTree(tree->right); } free(tree); } /* DeleteTree() */ int main(int argc, char* argv[]) { unsigned N, depth, minDepth, maxDepth, stretchDepth; treeNode *stretchTree, *longLivedTree, *tempTree; N = atol(argv[1]); minDepth = 4; if ((minDepth + 2) > N) maxDepth = minDepth + 2; else maxDepth = N; stretchDepth = maxDepth + 1; stretchTree = BottomUpTree(stretchDepth); printf ( "stretch tree of depth %u\t check: %li\n", stretchDepth, ItemCheck(stretchTree) ); DeleteTree(stretchTree); longLivedTree = BottomUpTree(maxDepth); for (depth = minDepth; depth <= maxDepth; depth += 2) { long i, iterations, check; iterations = pow(2, maxDepth - depth + minDepth); check = 0; for (i = 1; i <= iterations; i++) { tempTree = BottomUpTree(depth); check += ItemCheck(tempTree); DeleteTree(tempTree); } /* for(i = 1...) */ printf ( "%li\t trees of depth %u\t check: %li\n", iterations, depth, check ); } /* for(depth = minDepth...) */ printf ( "long lived tree of depth %u\t check: %li\n", maxDepth, ItemCheck(longLivedTree) ); return 0; } /* main() */ ================================================ FILE: ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame/fannkuch-redux/fannkuch-redux.c ================================================ /* The Computer Language Benchmarks Game * https://salsa.debian.org/benchmarksgame-team/benchmarksgame/ * * converted to C by Joseph Piché * from Java version by Oleg Mazurov and Isaac Gouy * */ #include #include inline static int max(int a, int b) { return a > b ? a : b; } int fannkuchredux(int n) { int perm[n]; int perm1[n]; int count[n]; int maxFlipsCount = 0; int permCount = 0; int checksum = 0; int i; for (i=0; i> 1; for (i=0; i 0) break; r++; } permCount++; } } int main(int argc, char *argv[]) { int n = argc > 1 ? atoi(argv[1]) : 7; printf("Pfannkuchen(%d) = %d\n", n, fannkuchredux(n)); return 0; } ================================================ FILE: ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame/fasta/fasta.c ================================================ /* The Computer Language Benchmarks Game * https://salsa.debian.org/benchmarksgame-team/benchmarksgame/ * * by Drake Diedrich */ #include #include #include #include #define IM 139968 #define IA 3877 #define IC 29573 #define SEED 42 static uint32_t seed = SEED; #define fasta_rand(max) ( seed = (seed * IA + IC ) % IM, max * seed / IM ) #ifndef LOOKUP #define LOOKUP linear_lookup #endif static const char *alu = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; static const char *iub = "acgtBDHKMNRSVWY"; static const double iub_p[] = { 0.27, 0.12, 0.12, 0.27, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02 }; static const char *homosapiens = "acgt"; static const double homosapiens_p[] = { 0.3029549426680, 0.1979883004921, 0.1975473066391, 0.3015094502008 }; #define LINELEN 60 static void repeat_fasta(const char *seq, const int n) { const int len = strlen(seq); char *buffer = malloc(len + LINELEN); int i; if (LINELEN < len) { memcpy(buffer,seq,len); memcpy(buffer+len, seq, LINELEN); } else { for (i=0; i < LINELEN/len; i++) memcpy(buffer+i*len,seq, len); memcpy(buffer+i*len, seq, n - i*n); } int t = 0; int whole_lines = n / LINELEN; for (i=0; i p[j]) i++; return i; } static int linear_lookup2(const int len, const double *p, const double v) { int j; for (j=0; j p[j]) break; return j; } static int bisect_lookup(const int len, const double *p, const double v) { int low = 0; int high = len-1; int mid; if (v low+1) { mid = (low+high)/2; if (v < p[mid]) { high = mid; } else { low = mid; } } return high; } static void random_fasta(const char *symb, const double *probability, const int n) { const int len = strlen(symb); double *p = malloc(sizeof(*p) * len); int i,k; char *buffer = malloc(LINELEN+2); buffer[LINELEN] = '\n'; p[0] = probability[0]; for (i=1; i1) n = atoi(argv[1]); printf(">ONE Homo sapiens alu\n"); repeat_fasta(alu, n*2); printf(">TWO IUB ambiguity codes\n"); random_fasta(iub, iub_p, n*3); printf(">THREE Homo sapiens frequency\n"); random_fasta(homosapiens, homosapiens_p, n*5); return 0; } ================================================ FILE: ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame/mandelbrot/mandelbrot.c ================================================ /* The Computer Language Benchmarks Game * https://salsa.debian.org/benchmarksgame-team/benchmarksgame/ contributed by Greg Buchholz */ #include #include int main (int argc, char **argv) { int w, h, bit_num = 0; char byte_acc = 0; int i, iter = 50; double x, y, limit = 2.0; double Zr, Zi, Cr, Ci, Tr, Ti; w = h = atoi(argv[1]); printf("P4\n%d %d\n",w,h); for(y=0;y #include #include #define pi 3.141592653589793 #define solar_mass (4 * pi * pi) #define year 365.24 #define for_k for(k = 0; k < 3; k++) typedef struct planet { double x[3], v[3], mass; } planet; void advance(int nbodies, struct planet *bodies, double dt, int steps) { int i, j; register planet *a, *b; double d[3], d2, mag; while (steps--) { for (a = bodies, i = 0; i < nbodies; a++, i++) { for (b = a + 1, j = i + 1; j < nbodies; b++, j++) { d[0] = a->x[0] - b->x[0]; d[1] = a->x[1] - b->x[1]; d[2] = a->x[2] - b->x[2]; d2 = d[0] * d[0] + d[1] * d[1] + d[2] * d[2]; mag = dt / (d2 * sqrt(d2)); a->v[0] -= d[0] * b->mass * mag; a->v[1] -= d[1] * b->mass * mag; a->v[2] -= d[2] * b->mass * mag; b->v[0] += d[0] * a->mass * mag; b->v[1] += d[1] * a->mass * mag; b->v[2] += d[2] * a->mass * mag; } } for (a = bodies, i = 0; i < nbodies; i++, a++) { a->x[0] += dt * a->v[0]; a->x[1] += dt * a->v[1]; a->x[2] += dt * a->v[2]; } } } double energy(int nbodies, planet *bodies) { double e, d[3]; int i, j, k; planet *a, *b; e = 0.0; for (i = 0, a = bodies; i < nbodies; a++, i++) { for_k { e += a->mass * a->v[k] * a->v[k] / 2; } for (j = i + 1, b = a + 1; j < nbodies; b++, j++) { for_k { d[k] = a->x[k] - b->x[k]; } e -= (a->mass * b->mass) / sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); } } return e; } void offset_momentum(int nbodies, planet *bodies) { int i, k; for (i = 0; i < nbodies; i++) for_k { bodies[0].v[k] -= bodies[i].v[k] * bodies[i].mass / solar_mass; } } struct planet bodies[] = { { /* sun */ {0, 0, 0}, {0, 0, 0}, solar_mass }, { /* jupiter */ { 4.84143144246472090e+00, -1.16032004402742839e+00, -1.03622044471123109e-01 }, { 1.66007664274403694e-03 * year, 7.69901118419740425e-03 * year, -6.90460016972063023e-05 * year }, 9.54791938424326609e-04 * solar_mass }, { /* saturn */ { 8.34336671824457987e+00, 4.12479856412430479e+00, -4.03523417114321381e-01 }, { -2.76742510726862411e-03 * year, 4.99852801234917238e-03 * year, 2.30417297573763929e-05 * year }, 2.85885980666130812e-04 * solar_mass }, { /* uranus */ { 1.28943695621391310e+01, -1.51111514016986312e+01, -2.23307578892655734e-01 }, { 2.96460137564761618e-03 * year, 2.37847173959480950e-03 * year, -2.96589568540237556e-05 * year }, 4.36624404335156298e-05 * solar_mass }, { /* neptune */ { 1.53796971148509165e+01, -2.59193146099879641e+01, 1.79258772950371181e-01 }, { 2.68067772490389322e-03 * year, 1.62824170038242295e-03 * year, -9.51592254519715870e-05 * year }, 5.15138902046611451e-05 * solar_mass } }; #define N sizeof(bodies)/sizeof(planet) int main(int argc, char **argv) { int n = atoi(argv[1]); offset_momentum(N, bodies); printf("%.9f\n", energy(N, bodies)); advance(N, bodies, 0.01, n); printf("%.9f\n", energy(N, bodies)); return 0; } ================================================ FILE: ThirdParty/Benchmarks/ComputerLanguageBenchmarksGame/spectral-norm/spectral-norm.c ================================================ /* The Computer Language Benchmarks Game * https://salsa.debian.org/benchmarksgame-team/benchmarksgame/ * * Contributed by Sebastien Loisel */ #include #include #include double eval_A(int i, int j) { return 1.0/((i+j)*(i+j+1)/2+i+1); } void eval_A_times_u(int N, const double u[], double Au[]) { int i,j; for(i=0;i /dev/null; then uname ; fi) ifneq (,$(findstring CYGWIN,$(UNAME))) PORT_DIR=cygwin endif ifneq (,$(findstring Darwin,$(UNAME))) PORT_DIR=macos endif ifneq (,$(findstring FreeBSD,$(UNAME))) PORT_DIR=freebsd endif ifneq (,$(findstring Linux,$(UNAME))) PORT_DIR=linux endif endif ifndef PORT_DIR $(error PLEASE define PORT_DIR! (e.g. make PORT_DIR=simple)) endif vpath %.c $(PORT_DIR) vpath %.h $(PORT_DIR) vpath %.mak $(PORT_DIR) include $(PORT_DIR)/core_portme.mak ifndef ITERATIONS ITERATIONS=0 endif ifdef REBUILD FORCE_REBUILD=force_rebuild endif CFLAGS += -DITERATIONS=$(ITERATIONS) CORE_FILES = core_list_join core_main core_matrix core_state core_util ORIG_SRCS = $(addsuffix .c,$(CORE_FILES)) SRCS = $(ORIG_SRCS) $(PORT_SRCS) OBJS = $(addprefix $(OPATH),$(addsuffix $(OEXT),$(CORE_FILES)) $(PORT_OBJS)) OUTNAME = coremark$(EXE) OUTFILE = $(OPATH)$(OUTNAME) LOUTCMD = $(OFLAG) $(OUTFILE) $(LFLAGS_END) OUTCMD = $(OUTFLAG) $(OUTFILE) $(LFLAGS_END) HEADERS = coremark.h CHECK_FILES = $(ORIG_SRCS) $(HEADERS) $(OPATH): $(MKDIR) $(OPATH) .PHONY: compile link ifdef SEPARATE_COMPILE $(OPATH)$(PORT_DIR): $(MKDIR) $(OPATH)$(PORT_DIR) compile: $(OPATH) $(OPATH)$(PORT_DIR) $(OBJS) $(HEADERS) link: compile $(LD) $(LFLAGS) $(XLFLAGS) $(OBJS) $(LOUTCMD) else compile: $(OPATH) $(SRCS) $(HEADERS) $(CC) $(CFLAGS) $(XCFLAGS) $(SRCS) $(OUTCMD) link: compile @echo "Link performed along with compile" endif $(OUTFILE): $(SRCS) $(HEADERS) Makefile core_portme.mak $(EXTRA_DEPENDS) $(FORCE_REBUILD) $(MAKE) port_prebuild $(MAKE) link $(MAKE) port_postbuild .PHONY: rerun rerun: $(MAKE) XCFLAGS="$(XCFLAGS) -DPERFORMANCE_RUN=1" load run1.log $(MAKE) XCFLAGS="$(XCFLAGS) -DVALIDATION_RUN=1" load run2.log PARAM1=$(PORT_PARAMS) 0x0 0x0 0x66 $(ITERATIONS) PARAM2=$(PORT_PARAMS) 0x3415 0x3415 0x66 $(ITERATIONS) PARAM3=$(PORT_PARAMS) 8 8 8 $(ITERATIONS) run1.log-PARAM=$(PARAM1) 7 1 2000 run2.log-PARAM=$(PARAM2) 7 1 2000 run3.log-PARAM=$(PARAM3) 7 1 1200 run1.log run2.log run3.log: load $(MAKE) port_prerun $(RUN) $(OUTFILE) $($(@)-PARAM) > $(OPATH)$@ $(MAKE) port_postrun .PHONY: gen_pgo_data gen_pgo_data: run3.log .PHONY: load load: $(OUTFILE) $(MAKE) port_preload $(LOAD) $(OUTFILE) $(MAKE) port_postload .PHONY: clean clean: rm -f $(OUTFILE) $(OBJS) $(OPATH)*.log *.info $(OPATH)index.html $(PORT_CLEAN) .PHONY: force_rebuild force_rebuild: echo "Forcing Rebuild" .PHONY: check check: md5sum -c coremark.md5 ifdef ETC # Targets related to testing and releasing CoreMark. Not part of the general release! include Makefile.internal endif ================================================ FILE: ThirdParty/Benchmarks/coremark/README.md ================================================ # Introduction CoreMark's primary goals are simplicity and providing a method for testing only a processor's core features. For more information about EEMBC's comprehensive embedded benchmark suites, please see www.eembc.org. For a more compute-intensive version of CoreMark that uses larger datasets and execution loops taken from common applications, please check out EEMBC's [CoreMark-PRO](https://www.github.com/eembc/coremark-pro) benchmark, also on GitHub. # Building and Running In a typical Linux system, to build and run the benchmark, type `> make` Full results are available in the files `run1.log` and `run2.log`. CoreMark result can be found in `run1.log`. For information on using CoreMark with microcontrollers or embedded processor systems without an OS, please see [barebones_porting.md](./barebones_porting.md). ## Cross Compiling For cross compile platforms please adjust `core_portme.mak`, `core_portme.h` (and possibly `core_portme.c`) according to the specific platform used. When porting to a new platform, it is recommended to copy one of the default port folders (e.g. `mkdir && cp linux/* `), adjust the porting files, and run: ~~~ % make PORT_DIR= ~~~ ## Make Targets * `run` - Default target, creates `run1.log` and `run2.log`. * `run1.log` - Run the benchmark with performance parameters, and output to `run1.log` * `run2.log` - Run the benchmark with validation parameters, and output to `run2.log` * `run3.log` - Run the benchmark with profile generation parameters, and output to `run3.log` * `compile` - compile the benchmark executable * `link` - link the benchmark executable * `check` - test MD5 of sources that may not be modified * `clean` - clean temporary files ### Make flag: `ITERATIONS` By default, the benchmark will run between 10-100 seconds. To override, use `ITERATIONS=N` ~~~ % make ITERATIONS=10 ~~~ Will run the benchmark for 10 iterations. It is recommended to set a specific number of iterations in certain situations e.g.: * Running with a simulator * Measuring power/energy * Timing cannot be restarted Minimum required run time: **Results are only valid for reporting if the benchmark ran for at least 10 secs!** ### Make flag: `XCFLAGS` To add compiler flags from the command line, use `XCFLAGS` e.g.: ~~~ % make XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK" ~~~ ### Make flag: `CORE_DEBUG` Define to compile for a debug run if you get incorrect CRC. ~~~ % make XCFLAGS="-DCORE_DEBUG=1" ~~~ ### Make flag: `REBUILD` Force a rebuild of the executable. ## Systems Without `make` The following files need to be compiled: * `core_list_join.c` * `core_main.c` * `core_matrix.c` * `core_state.c` * `core_util.c` * `PORT_DIR/core_portme.c` For example: ~~~ % gcc -O2 -o coremark.exe core_list_join.c core_main.c core_matrix.c core_state.c core_util.c simple/core_portme.c -DPERFORMANCE_RUN=1 -DITERATIONS=1000 % ./coremark.exe > run1.log ~~~ The above will compile the benchmark for a performance run and 1000 iterations. Output is redirected to `run1.log`. # Parallel Execution Use `XCFLAGS=-DMULTITHREAD=N` where N is number of threads to run in parallel. Several implementations are available to execute in multiple contexts, or you can implement your own in `core_portme.c`. ~~~ % make XCFLAGS="-DMULTITHREAD=4 -DUSE_PTHREAD -pthread" ~~~ The above will compile the benchmark for execution on 4 cores, using POSIX Threads API. Forking is also supported: ~~~ % make XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK" ~~~ Note: linking may fail on the previous command if your linker does not automatically add the `pthread` library. If you encounter `undefined reference` errors, please modify the `core_portme.mak` file for your platform, (e.g. `linux/core_portme.mak`) and add `-pthread` to the `LFLAGS_END` parameter. # Run Parameters for the Benchmark Executable CoreMark's executable takes several parameters as follows (but only if `main()` accepts arguments): 1st - A seed value used for initialization of data. 2nd - A seed value used for initialization of data. 3rd - A seed value used for initialization of data. 4th - Number of iterations (0 for auto : default value) 5th - Reserved for internal use. 6th - Reserved for internal use. 7th - For malloc users only, ovreride the size of the input data buffer. The run target from make will run coremark with 2 different data initialization seeds. ## Alternative parameters: If not using `malloc` or command line arguments are not supported, the buffer size for the algorithms must be defined via the compiler define `TOTAL_DATA_SIZE`. `TOTAL_DATA_SIZE` must be set to 2000 bytes (default) for standard runs. The default for such a target when testing different configurations could be: ~~~ % make XCFLAGS="-DTOTAL_DATA_SIZE=6000 -DMAIN_HAS_NOARGC=1" ~~~ # Submitting Results CoreMark results can be submitted on the web. Open a web browser and go to the [submission page](https://www.eembc.org/coremark/submit.php). After registering an account you may enter a score. # Run Rules What is and is not allowed. ## Required 1. The benchmark needs to run for at least 10 seconds. 2. All validation must succeed for seeds `0,0,0x66` and `0x3415,0x3415,0x66`, buffer size of 2000 bytes total. * If not using command line arguments to main: ~~~ % make XCFLAGS="-DPERFORMANCE_RUN=1" REBUILD=1 run1.log % make XCFLAGS="-DVALIDATION_RUN=1" REBUILD=1 run2.log ~~~ 3. If using profile guided optimization, profile must be generated using seeds of `8,8,8`, and buffer size of 1200 bytes total. ~~~ % make XCFLAGS="-DTOTAL_DATA_SIZE=1200 -DPROFILE_RUN=1" REBUILD=1 run3.log ~~~ 4. All source files must be compiled with the same flags. 5. All data type sizes must match size in bits such that: * `ee_u8` is an unsigned 8-bit datatype. * `ee_s16` is a signed 16-bit datatype. * `ee_u16` is an unsigned 16-bit datatype. * `ee_s32` is a signed 32-bit datatype. * `ee_u32` is an unsigned 32-bit datatype. ## Allowed 1. Changing number of iterations 2. Changing toolchain and build/load/run options 3. Changing method of acquiring a data memory block 5. Changing the method of acquiring seed values 6. Changing implementation `in core_portme.c` 7. Changing configuration values in `core_portme.h` 8. Changing `core_portme.mak` ## NOT ALLOWED 1. Changing of source file other then `core_portme*` (use `make check` to validate) # Reporting rules Use the following syntax to report results on a data sheet: CoreMark 1.0 : N / C [/ P] [/ M] N - Number of iterations per second with seeds 0,0,0x66,size=2000) C - Compiler version and flags P - Parameters such as data and code allocation specifics * This parameter *may* be omitted if all data was allocated on the heap in RAM. * This parameter *may not* be omitted when reporting CoreMark/MHz M - Type of parallel execution (if used) and number of contexts * This parameter may be omitted if parallel execution was not used. e.g.: ~~~ CoreMark 1.0 : 128 / GCC 4.1.2 -O2 -fprofile-use / Heap in TCRAM / FORK:2 ~~~ or ~~~ CoreMark 1.0 : 1400 / GCC 3.4 -O4 ~~~ If reporting scaling results, the results must be reported as follows: CoreMark/MHz 1.0 : N / C / P [/ M] P - When reporting scaling results, memory parameter must also indicate memory frequency:core frequency ratio. 1. If the core has cache and cache frequency to core frequency ratio is configurable, that must also be included. e.g.: ~~~ CoreMark/MHz 1.0 : 1.47 / GCC 4.1.2 -O2 / DDR3(Heap) 30:1 Memory 1:1 Cache ~~~ # Log File Format The log files have the following format ~~~ 2K performance run parameters for coremark. (Run type) CoreMark Size : 666 (Buffer size) Total ticks : 25875 (platform dependent value) Total time (secs) : 25.875000 (actual time in seconds) Iterations/Sec : 3864.734300 (Performance value to report) Iterations : 100000 (number of iterations used) Compiler version : GCC3.4.4 (Compiler and version) Compiler flags : -O2 (Compiler and linker flags) Memory location : Code in flash, data in on chip RAM seedcrc : 0xe9f5 (identifier for the input seeds) [0]crclist : 0xe714 (validation for list part) [0]crcmatrix : 0x1fd7 (validation for matrix part) [0]crcstate : 0x8e3a (validation for state part) [0]crcfinal : 0x33ff (iteration dependent output) Correct operation validated. See README.md for run and reporting rules. (*Only when run is successful*) CoreMark 1.0 : 6508.490622 / GCC3.4.4 -O2 / Heap (*Only on a successful performance run*) ~~~ # Theory of Operation This section describes the initial goals of CoreMark and their implementation. ## Small and easy to understand * X number of source code lines for timed portion of the benchmark. * Meaningful names for variables and functions. * Comments for each block of code more than 10 lines long. ## Portability A thin abstraction layer will be provided for I/O and timing in a separate file. All I/O and timing of the benchmark will be done through this layer. ### Code / data size * Compile with gcc on x86 and make sure all sizes are according to requirements. * If dynamic memory allocation is used, take total memory allocated into account as well. * Avoid recursive functions and keep track of stack usage. * Use the same memory block as data site for all algorithms, and initialize the data before each algorithm – while this means that initialization with data happens during the timed portion, it will only happen once during the timed portion and so have negligible effect on the results. ## Controlled output This may be the most difficult goal. Compilers are constantly improving and getting better at analyzing code. To create work that cannot be computed at compile time and must be computed at run time, we will rely on two assumptions: * Some system functions (e.g. time, scanf) and parameters cannot be computed at compile time. In most cases, marking a variable volatile means the compiler is force to read this variable every time it is read. This will be used to introduce a factor into the input that cannot be precomputed at compile time. Since the results are input dependent, that will make sure that computation has to happen at run time. * Either a system function or I/O (e.g. scanf) or command line parameters or volatile variables will be used before the timed portion to generate data which is not available at compile time. Specific method used is not relevant as long as it can be controlled, and that it cannot be computed or eliminated by the compiler at compile time. E.g. if the clock() functions is a compiler stub, it may not be used. The derived values will be reported on the output so that verification can be done on a different machine. * We cannot rely on command line parameters since some embedded systems do not have the capability to provide command line parameters. All 3 methods above will be implemented (time based, scanf and command line parameters) and all 3 are valid if the compiler cannot determine the value at compile time. * It is important to note that The actual values that are to be supplied at run time will be standardized. The methodology is not intended to provide random data, but simply to provide controlled data that cannot be precomputed at compile time. * Printed results must be valid at run time. This will be used to make sure the computation has been executed. * Some embedded systems do not provide “printf” or other I/O functionality. All I/O will be done through a thin abstraction interface to allow execution on such systems (e.g. allow output via JTAG). ## Key Algorithms ### Linked List The following linked list structure will be used: ~~~ typedef struct list_data_s { ee_s16 data16; ee_s16 idx; } list_data; typedef struct list_head_s { struct list_head_s *next; struct list_data_s *info; } list_head; ~~~ While adding a level of indirection accessing the data, this structure is realistic and used in many embedded applications for small to medium lists. The list itself will be initialized on a block of memory that will be passed in to the initialization function. While in general linked lists use malloc for new nodes, embedded applications sometime control the memory for small data structures such as arrays and lists directly to avoid the overhead of system calls, so this approach is realistic. The linked list will be initialized such that 1/4 of the list pointers point to sequential areas in memory, and 3/4 of the list pointers are distributed in a non sequential manner. This is done to emulate a linked list that had add/remove happen for a while disrupting the neat order, and then a series of adds that are likely to come from sequential memory locations. For the benchmark itself: - Multiple find operations are going to be performed. These find operations may result in the whole list being traversed. The result of each find will become part of the output chain. - The list will be sorted using merge sort based on the data16 value, and then derive CRC of the data16 item in order for part of the list. The CRC will become part of the output chain. - The list will be sorted again using merge sort based on the idx value. This sort will guarantee that the list is returned to the primary state before leaving the function, so that multiple iterations of the function will have the same result. CRC of the data16 for part of the list will again be calculated and become part of the output chain. The actual `data16` in each cell will be pseudo random based on a single 16b input that cannot be determined at compile time. In addition, the part of the list which is used for CRC will also be passed to the function, and determined based on an input that cannot be determined at run time. ### Matrix Multiply This very simple algorithm forms the basis of many more complex algorithms. The tight inner loop is the focus of many optimizations (compiler as well as hardware based) and is thus relevant for embedded processing. The total available data space will be divided to 3 parts: 1. NxN matrix A. 2. NxN matrix B. 3. NxN matrix C. E.g. for 2K we will have 3 12x12 matrices (assuming data type of 32b 12(len)*12(wid)*4(size)*3(num) =1728 bytes). Matrix A will be initialized with small values (upper 3/4 of the bits all zero). Matrix B will be initialized with medium values (upper half of the bits all zero). Matrix C will be used for the result. For the benchmark itself: - Multiple A by a constant into C, add the upper bits of each of the values in the result matrix. The result will become part of the output chain. - Multiple A by column X of B into C, add the upper bits of each of the values in the result matrix. The result will become part of the output chain. - Multiple A by B into C, add the upper bits of each of the values in the result matrix. The result will become part of the output chain. The actual values for A and B must be derived based on input that is not available at compile time. ### State Machine This part of the code needs to exercise switch and if statements. As such, we will use a small Moore state machine. In particular, this will be a state machine that identifies string input as numbers and divides them according to format. The state machine will parse the input string until either a “,” separator or end of input is encountered. An invalid number will cause the state machine to return invalid state and a valid number will cause the state machine to return with type of number format (int/float/scientific). This code will perform a realistic task, be small enough to easily understand, and exercise the required functionality. The other option used in embedded systems is a mealy based state machine, which is driven by a table. The table then determines the number of states and complexity of transitions. This approach, however, tests mainly the load/store and function call mechanisms and less the handling of branches. If analysis of the final results shows that the load/store functionality of the processor is not exercised thoroughly, it may be a good addition to the benchmark (codesize allowing). For input, the memory block will be initialized with comma separated values of mixed formats, as well as invalid inputs. For the benchmark itself: - Invoke the state machine on all of the input and count final states and state transitions. CRC of all final states and transitions will become part of the output chain. - Modify the input at intervals (inject errors) and repeat the state machine operation. - Modify the input back to original form. The actual input must be initialized based on data that cannot be determined at compile time. In addition the intervals for modification of the input and the actual modification must be based on input that cannot be determined at compile time. # Validation This release was tested on the following platforms: * x86 cygwin and gcc 3.4 (Quad, dual and single core systems) * x86 linux (Ubuntu/Fedora) and gcc (4.2/4.1) (Quad and single core systems) * MIPS64 BE linux and gcc 3.4 16 cores system * MIPS32 BE linux with CodeSourcery compiler 4.2-177 on Malta/Linux with a 1004K 3-core system * PPC simulator with gcc 4.2.2 (No OS) * PPC 64b BE linux (yellowdog) with gcc 3.4 and 4.1 (Dual core system) * BF533 with VDSP50 * Renesas R8C/H8 MCU with HEW 4.05 * NXP LPC1700 armcc v4.0.0.524 * NEC 78K with IAR v4.61 * ARM simulator with armcc v4 # Memory Analysis Valgrind 3.4.0 used and no errors reported. # Balance Analysis Number of instructions executed for each function tested with cachegrind and found balanced with gcc and -O0. # Statistics Lines: ~~~ Lines Blank Cmnts Source AESL ===== ===== ===== ===== ========== ======================================= 469 66 170 251 627.5 core_list_join.c (C) 330 18 54 268 670.0 core_main.c (C) 256 32 80 146 365.0 core_matrix.c (C) 240 16 51 186 465.0 core_state.c (C) 165 11 20 134 335.0 core_util.c (C) 150 23 36 98 245.0 coremark.h (C) 1610 166 411 1083 2707.5 ----- Benchmark ----- (6 files) 293 15 74 212 530.0 linux/core_portme.c (C) 235 30 104 104 260.0 linux/core_portme.h (C) 528 45 178 316 790.0 ----- Porting ----- (2 files) * For comparison, here are the stats for Dhrystone Lines Blank Cmnts Source AESL ===== ===== ===== ===== ========== ======================================= 311 15 242 54 135.0 dhry.h (C) 789 132 119 553 1382.5 dhry_1.c (C) 186 26 68 107 267.5 dhry_2.c (C) 1286 173 429 714 1785.0 ----- C ----- (3 files) ~~~ # Credits Many thanks to all of the individuals who helped with the development or testing of CoreMark including (Sorted by company name; note that company names may no longer be accurate as this was written in 2009). * Alan Anderson, ADI * Adhikary Rajiv, ADI * Elena Stohr, ARM * Ian Rickards, ARM * Andrew Pickard, ARM * Trent Parker, CAVIUM * Shay Gal-On, EEMBC * Markus Levy, EEMBC * Peter Torelli, EEMBC * Ron Olson, IBM * Eyal Barzilay, MIPS * Jens Eltze, NEC * Hirohiko Ono, NEC * Ulrich Drees, NEC * Frank Roscheda, NEC * Rob Cosaro, NXP * Shumpei Kawasaki, RENESAS # Legal Please refer to LICENSE.md in this repository for a description of your rights to use this code. # Copyright Copyright © 2009 EEMBC All rights reserved. CoreMark is a trademark of EEMBC and EEMBC is a registered trademark of the Embedded Microprocessor Benchmark Consortium. ================================================ FILE: ThirdParty/Benchmarks/coremark/barebones/core_portme.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include "coremark.h" #include "core_portme.h" #if VALIDATION_RUN volatile ee_s32 seed1_volatile = 0x3415; volatile ee_s32 seed2_volatile = 0x3415; volatile ee_s32 seed3_volatile = 0x66; #endif #if PERFORMANCE_RUN volatile ee_s32 seed1_volatile = 0x0; volatile ee_s32 seed2_volatile = 0x0; volatile ee_s32 seed3_volatile = 0x66; #endif #if PROFILE_RUN volatile ee_s32 seed1_volatile = 0x8; volatile ee_s32 seed2_volatile = 0x8; volatile ee_s32 seed3_volatile = 0x8; #endif volatile ee_s32 seed4_volatile = ITERATIONS; volatile ee_s32 seed5_volatile = 0; /* Porting : Timing functions How to capture time and convert to seconds must be ported to whatever is supported by the platform. e.g. Read value from on board RTC, read value from cpu clock cycles performance counter etc. Sample implementation for standard time.h and windows.h definitions included. */ CORETIMETYPE barebones_clock() { #error \ "You must implement a method to measure time in barebones_clock()! This function should return current time.\n" } /* Define : TIMER_RES_DIVIDER Divider to trade off timer resolution and total time that can be measured. Use lower values to increase resolution, but make sure that overflow does not occur. If there are issues with the return value overflowing, increase this value. */ #define GETMYTIME(_t) (*_t = barebones_clock()) #define MYTIMEDIFF(fin, ini) ((fin) - (ini)) #define TIMER_RES_DIVIDER 1 #define SAMPLE_TIME_IMPLEMENTATION 1 #define EE_TICKS_PER_SEC (CLOCKS_PER_SEC / TIMER_RES_DIVIDER) /** Define Host specific (POSIX), or target specific global time variables. */ static CORETIMETYPE start_time_val, stop_time_val; /* Function : start_time This function will be called right before starting the timed portion of the benchmark. Implementation may be capturing a system timer (as implemented in the example code) or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0. */ void start_time(void) { GETMYTIME(&start_time_val); } /* Function : stop_time This function will be called right after ending the timed portion of the benchmark. Implementation may be capturing a system timer (as implemented in the example code) or other system parameters - e.g. reading the current value of cpu cycles counter. */ void stop_time(void) { GETMYTIME(&stop_time_val); } /* Function : get_time Return an abstract "ticks" number that signifies time on the system. Actual value returned may be cpu cycles, milliseconds or any other value, as long as it can be converted to seconds by . This methodology is taken to accommodate any hardware or simulated platform. The sample implementation returns millisecs by default, and the resolution is controlled by */ CORE_TICKS get_time(void) { CORE_TICKS elapsed = (CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val)); return elapsed; } /* Function : time_in_secs Convert the value returned by get_time to seconds. The type is used to accommodate systems with no support for floating point. Default implementation implemented by the EE_TICKS_PER_SEC macro above. */ secs_ret time_in_secs(CORE_TICKS ticks) { secs_ret retval = ((secs_ret)ticks) / (secs_ret)EE_TICKS_PER_SEC; return retval; } ee_u32 default_num_contexts = 1; /* Function : portable_init Target specific initialization code Test for some common mistakes. */ void portable_init(core_portable *p, int *argc, char *argv[]) { #error \ "Call board initialization routines in portable init (if needed), in particular initialize UART!\n" (void)argc; // prevent unused warning (void)argv; // prevent unused warning if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) { ee_printf( "ERROR! Please define ee_ptr_int to a type that holds a " "pointer!\n"); } if (sizeof(ee_u32) != 4) { ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n"); } p->portable_id = 1; } /* Function : portable_fini Target specific final code */ void portable_fini(core_portable *p) { p->portable_id = 0; } ================================================ FILE: ThirdParty/Benchmarks/coremark/barebones/core_portme.h ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ /* Topic : Description This file contains configuration constants required to execute on different platforms */ #ifndef CORE_PORTME_H #define CORE_PORTME_H /************************/ /* Data types and settings */ /************************/ /* Configuration : HAS_FLOAT Define to 1 if the platform supports floating point. */ #ifndef HAS_FLOAT #define HAS_FLOAT 1 #endif /* Configuration : HAS_TIME_H Define to 1 if platform has the time.h header file, and implementation of functions thereof. */ #ifndef HAS_TIME_H #define HAS_TIME_H 1 #endif /* Configuration : USE_CLOCK Define to 1 if platform has the time.h header file, and implementation of functions thereof. */ #ifndef USE_CLOCK #define USE_CLOCK 1 #endif /* Configuration : HAS_STDIO Define to 1 if the platform has stdio.h. */ #ifndef HAS_STDIO #define HAS_STDIO 0 #endif /* Configuration : HAS_PRINTF Define to 1 if the platform has stdio.h and implements the printf function. */ #ifndef HAS_PRINTF #define HAS_PRINTF 0 #endif /* Definitions : COMPILER_VERSION, COMPILER_FLAGS, MEM_LOCATION Initialize these strings per platform */ #ifndef COMPILER_VERSION #ifdef __GNUC__ #define COMPILER_VERSION "GCC"__VERSION__ #else #define COMPILER_VERSION "Please put compiler version here (e.g. gcc 4.1)" #endif #endif #ifndef COMPILER_FLAGS #define COMPILER_FLAGS \ FLAGS_STR /* "Please put compiler flags here (e.g. -o3)" */ #endif #ifndef MEM_LOCATION #define MEM_LOCATION "STACK" #endif /* Data Types : To avoid compiler issues, define the data types that need ot be used for 8b, 16b and 32b in . *Imprtant* : ee_ptr_int needs to be the data type used to hold pointers, otherwise coremark may fail!!! */ typedef signed short ee_s16; typedef unsigned short ee_u16; typedef signed int ee_s32; typedef double ee_f32; typedef unsigned char ee_u8; typedef unsigned int ee_u32; typedef ee_u32 ee_ptr_int; typedef size_t ee_size_t; #define NULL ((void *)0) /* align_mem : This macro is used to align an offset to point to a 32b value. It is used in the Matrix algorithm to initialize the input memory blocks. */ #define align_mem(x) (void *)(4 + (((ee_ptr_int)(x)-1) & ~3)) /* Configuration : CORE_TICKS Define type of return from the timing functions. */ #define CORETIMETYPE ee_u32 typedef ee_u32 CORE_TICKS; /* Configuration : SEED_METHOD Defines method to get seed values that cannot be computed at compile time. Valid values : SEED_ARG - from command line. SEED_FUNC - from a system function. SEED_VOLATILE - from volatile variables. */ #ifndef SEED_METHOD #define SEED_METHOD SEED_VOLATILE #endif /* Configuration : MEM_METHOD Defines method to get a block of memry. Valid values : MEM_MALLOC - for platforms that implement malloc and have malloc.h. MEM_STATIC - to use a static memory array. MEM_STACK - to allocate the data block on the stack (NYI). */ #ifndef MEM_METHOD #define MEM_METHOD MEM_STACK #endif /* Configuration : MULTITHREAD Define for parallel execution Valid values : 1 - only one context (default). N>1 - will execute N copies in parallel. Note : If this flag is defined to more then 1, an implementation for launching parallel contexts must be defined. Two sample implementations are provided. Use or to enable them. It is valid to have a different implementation of and in , to fit a particular architecture. */ #ifndef MULTITHREAD #define MULTITHREAD 1 #define USE_PTHREAD 0 #define USE_FORK 0 #define USE_SOCKET 0 #endif /* Configuration : MAIN_HAS_NOARGC Needed if platform does not support getting arguments to main. Valid values : 0 - argc/argv to main is supported 1 - argc/argv to main is not supported Note : This flag only matters if MULTITHREAD has been defined to a value greater then 1. */ #ifndef MAIN_HAS_NOARGC #define MAIN_HAS_NOARGC 0 #endif /* Configuration : MAIN_HAS_NORETURN Needed if platform does not support returning a value from main. Valid values : 0 - main returns an int, and return value will be 0. 1 - platform does not support returning a value from main */ #ifndef MAIN_HAS_NORETURN #define MAIN_HAS_NORETURN 0 #endif /* Variable : default_num_contexts Not used for this simple port, must contain the value 1. */ extern ee_u32 default_num_contexts; typedef struct CORE_PORTABLE_S { ee_u8 portable_id; } core_portable; /* target specific init/fini */ void portable_init(core_portable *p, int *argc, char *argv[]); void portable_fini(core_portable *p); #if !defined(PROFILE_RUN) && !defined(PERFORMANCE_RUN) \ && !defined(VALIDATION_RUN) #if (TOTAL_DATA_SIZE == 1200) #define PROFILE_RUN 1 #elif (TOTAL_DATA_SIZE == 2000) #define PERFORMANCE_RUN 1 #else #define VALIDATION_RUN 1 #endif #endif int ee_printf(const char *fmt, ...); #endif /* CORE_PORTME_H */ ================================================ FILE: ThirdParty/Benchmarks/coremark/barebones/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on #File : core_portme.mak # Flag : OUTFLAG # Use this flag to define how to to get an executable (e.g -o) OUTFLAG= -o # Flag : CC # Use this flag to define compiler to use CC = gcc # Flag : LD # Use this flag to define compiler to use LD = gld # Flag : AS # Use this flag to define compiler to use AS = gas # Flag : CFLAGS # Use this flag to define compiler options. Note, you can add compiler options from the command line using XCFLAGS="other flags" PORT_CFLAGS = -O0 -g FLAGS_STR = "$(PORT_CFLAGS) $(XCFLAGS) $(XLFLAGS) $(LFLAGS_END)" CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR=\"$(FLAGS_STR)\" #Flag : LFLAGS_END # Define any libraries needed for linking or other flags that should come at the end of the link line (e.g. linker scripts). # Note : On certain platforms, the default clock_gettime implementation is supported but requires linking of librt. SEPARATE_COMPILE=1 # Flag : SEPARATE_COMPILE # You must also define below how to create an object file, and how to link. OBJOUT = -o LFLAGS = ASFLAGS = OFLAG = -o COUT = -c LFLAGS_END = # Flag : PORT_SRCS # Port specific source files can be added here # You may also need cvt.c if the fcvt functions are not provided as intrinsics by your compiler! PORT_SRCS = $(PORT_DIR)/core_portme.c $(PORT_DIR)/ee_printf.c vpath %.c $(PORT_DIR) vpath %.s $(PORT_DIR) # Flag : LOAD # For a simple port, we assume self hosted compile and run, no load needed. # Flag : RUN # For a simple port, we assume self hosted compile and run, simple invocation of the executable LOAD = echo "Please set LOAD to the process of loading the executable to the flash" RUN = echo "Please set LOAD to the process of running the executable (e.g. via jtag, or board reset)" OEXT = .o EXE = .bin $(OPATH)$(PORT_DIR)/%$(OEXT) : %.c $(CC) $(CFLAGS) $(XCFLAGS) $(COUT) $< $(OBJOUT) $@ $(OPATH)%$(OEXT) : %.c $(CC) $(CFLAGS) $(XCFLAGS) $(COUT) $< $(OBJOUT) $@ $(OPATH)$(PORT_DIR)/%$(OEXT) : %.s $(AS) $(ASFLAGS) $< $(OBJOUT) $@ # Target : port_pre% and port_post% # For the purpose of this simple port, no pre or post steps needed. .PHONY : port_prebuild port_postbuild port_prerun port_postrun port_preload port_postload port_pre% port_post% : # FLAG : OPATH # Path to the output folder. Default - current folder. OPATH = ./ MKDIR = mkdir -p ================================================ FILE: ThirdParty/Benchmarks/coremark/barebones/cvt.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include #define CVTBUFSIZE 80 static char CVTBUF[CVTBUFSIZE]; static char * cvt(double arg, int ndigits, int *decpt, int *sign, char *buf, int eflag) { int r2; double fi, fj; char * p, *p1; if (ndigits < 0) ndigits = 0; if (ndigits >= CVTBUFSIZE - 1) ndigits = CVTBUFSIZE - 2; r2 = 0; *sign = 0; p = &buf[0]; if (arg < 0) { *sign = 1; arg = -arg; } arg = modf(arg, &fi); p1 = &buf[CVTBUFSIZE]; if (fi != 0) { p1 = &buf[CVTBUFSIZE]; while (fi != 0) { fj = modf(fi / 10, &fi); *--p1 = (int)((fj + .03) * 10) + '0'; r2++; } while (p1 < &buf[CVTBUFSIZE]) *p++ = *p1++; } else if (arg > 0) { while ((fj = arg * 10) < 1) { arg = fj; r2--; } } p1 = &buf[ndigits]; if (eflag == 0) p1 += r2; *decpt = r2; if (p1 < &buf[0]) { buf[0] = '\0'; return buf; } while (p <= p1 && p < &buf[CVTBUFSIZE]) { arg *= 10; arg = modf(arg, &fj); *p++ = (int)fj + '0'; } if (p1 >= &buf[CVTBUFSIZE]) { buf[CVTBUFSIZE - 1] = '\0'; return buf; } p = p1; *p1 += 5; while (*p1 > '9') { *p1 = '0'; if (p1 > buf) ++*--p1; else { *p1 = '1'; (*decpt)++; if (eflag == 0) { if (p > buf) *p = '0'; p++; } } } *p = '\0'; return buf; } char * ecvt(double arg, int ndigits, int *decpt, int *sign) { return cvt(arg, ndigits, decpt, sign, CVTBUF, 1); } char * ecvtbuf(double arg, int ndigits, int *decpt, int *sign, char *buf) { return cvt(arg, ndigits, decpt, sign, buf, 1); } char * fcvt(double arg, int ndigits, int *decpt, int *sign) { return cvt(arg, ndigits, decpt, sign, CVTBUF, 0); } char * fcvtbuf(double arg, int ndigits, int *decpt, int *sign, char *buf) { return cvt(arg, ndigits, decpt, sign, buf, 0); } ================================================ FILE: ThirdParty/Benchmarks/coremark/barebones/ee_printf.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include #include #define ZEROPAD (1 << 0) /* Pad with zero */ #define SIGN (1 << 1) /* Unsigned/signed long */ #define PLUS (1 << 2) /* Show plus */ #define SPACE (1 << 3) /* Spacer */ #define LEFT (1 << 4) /* Left justified */ #define HEX_PREP (1 << 5) /* 0x */ #define UPPERCASE (1 << 6) /* 'ABCDEF' */ #define is_digit(c) ((c) >= '0' && (c) <= '9') static char * digits = "0123456789abcdefghijklmnopqrstuvwxyz"; static char * upper_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static ee_size_t strnlen(const char *s, ee_size_t count); static ee_size_t strnlen(const char *s, ee_size_t count) { const char *sc; for (sc = s; *sc != '\0' && count--; ++sc) ; return sc - s; } static int skip_atoi(const char **s) { int i = 0; while (is_digit(**s)) i = i * 10 + *((*s)++) - '0'; return i; } static char * number(char *str, long num, int base, int size, int precision, int type) { char c, sign, tmp[66]; char *dig = digits; int i; if (type & UPPERCASE) dig = upper_digits; if (type & LEFT) type &= ~ZEROPAD; if (base < 2 || base > 36) return 0; c = (type & ZEROPAD) ? '0' : ' '; sign = 0; if (type & SIGN) { if (num < 0) { sign = '-'; num = -num; size--; } else if (type & PLUS) { sign = '+'; size--; } else if (type & SPACE) { sign = ' '; size--; } } if (type & HEX_PREP) { if (base == 16) size -= 2; else if (base == 8) size--; } i = 0; if (num == 0) tmp[i++] = '0'; else { while (num != 0) { tmp[i++] = dig[((unsigned long)num) % (unsigned)base]; num = ((unsigned long)num) / (unsigned)base; } } if (i > precision) precision = i; size -= precision; if (!(type & (ZEROPAD | LEFT))) while (size-- > 0) *str++ = ' '; if (sign) *str++ = sign; if (type & HEX_PREP) { if (base == 8) *str++ = '0'; else if (base == 16) { *str++ = '0'; *str++ = digits[33]; } } if (!(type & LEFT)) while (size-- > 0) *str++ = c; while (i < precision--) *str++ = '0'; while (i-- > 0) *str++ = tmp[i]; while (size-- > 0) *str++ = ' '; return str; } static char * eaddr(char *str, unsigned char *addr, int size, int precision, int type) { char tmp[24]; char *dig = digits; int i, len; if (type & UPPERCASE) dig = upper_digits; len = 0; for (i = 0; i < 6; i++) { if (i != 0) tmp[len++] = ':'; tmp[len++] = dig[addr[i] >> 4]; tmp[len++] = dig[addr[i] & 0x0F]; } if (!(type & LEFT)) while (len < size--) *str++ = ' '; for (i = 0; i < len; ++i) *str++ = tmp[i]; while (len < size--) *str++ = ' '; return str; } static char * iaddr(char *str, unsigned char *addr, int size, int precision, int type) { char tmp[24]; int i, n, len; len = 0; for (i = 0; i < 4; i++) { if (i != 0) tmp[len++] = '.'; n = addr[i]; if (n == 0) tmp[len++] = digits[0]; else { if (n >= 100) { tmp[len++] = digits[n / 100]; n = n % 100; tmp[len++] = digits[n / 10]; n = n % 10; } else if (n >= 10) { tmp[len++] = digits[n / 10]; n = n % 10; } tmp[len++] = digits[n]; } } if (!(type & LEFT)) while (len < size--) *str++ = ' '; for (i = 0; i < len; ++i) *str++ = tmp[i]; while (len < size--) *str++ = ' '; return str; } #if HAS_FLOAT char * ecvtbuf(double arg, int ndigits, int *decpt, int *sign, char *buf); char * fcvtbuf(double arg, int ndigits, int *decpt, int *sign, char *buf); static void ee_bufcpy(char *d, char *s, int count); void ee_bufcpy(char *pd, char *ps, int count) { char *pe = ps + count; while (ps != pe) *pd++ = *ps++; } static void parse_float(double value, char *buffer, char fmt, int precision) { int decpt, sign, exp, pos; char *digits = NULL; char cvtbuf[80]; int capexp = 0; int magnitude; if (fmt == 'G' || fmt == 'E') { capexp = 1; fmt += 'a' - 'A'; } if (fmt == 'g') { digits = ecvtbuf(value, precision, &decpt, &sign, cvtbuf); magnitude = decpt - 1; if (magnitude < -4 || magnitude > precision - 1) { fmt = 'e'; precision -= 1; } else { fmt = 'f'; precision -= decpt; } } if (fmt == 'e') { digits = ecvtbuf(value, precision + 1, &decpt, &sign, cvtbuf); if (sign) *buffer++ = '-'; *buffer++ = *digits; if (precision > 0) *buffer++ = '.'; ee_bufcpy(buffer, digits + 1, precision); buffer += precision; *buffer++ = capexp ? 'E' : 'e'; if (decpt == 0) { if (value == 0.0) exp = 0; else exp = -1; } else exp = decpt - 1; if (exp < 0) { *buffer++ = '-'; exp = -exp; } else *buffer++ = '+'; buffer[2] = (exp % 10) + '0'; exp = exp / 10; buffer[1] = (exp % 10) + '0'; exp = exp / 10; buffer[0] = (exp % 10) + '0'; buffer += 3; } else if (fmt == 'f') { digits = fcvtbuf(value, precision, &decpt, &sign, cvtbuf); if (sign) *buffer++ = '-'; if (*digits) { if (decpt <= 0) { *buffer++ = '0'; *buffer++ = '.'; for (pos = 0; pos < -decpt; pos++) *buffer++ = '0'; while (*digits) *buffer++ = *digits++; } else { pos = 0; while (*digits) { if (pos++ == decpt) *buffer++ = '.'; *buffer++ = *digits++; } } } else { *buffer++ = '0'; if (precision > 0) { *buffer++ = '.'; for (pos = 0; pos < precision; pos++) *buffer++ = '0'; } } } *buffer = '\0'; } static void decimal_point(char *buffer) { while (*buffer) { if (*buffer == '.') return; if (*buffer == 'e' || *buffer == 'E') break; buffer++; } if (*buffer) { int n = strnlen(buffer, 256); while (n > 0) { buffer[n + 1] = buffer[n]; n--; } *buffer = '.'; } else { *buffer++ = '.'; *buffer = '\0'; } } static void cropzeros(char *buffer) { char *stop; while (*buffer && *buffer != '.') buffer++; if (*buffer++) { while (*buffer && *buffer != 'e' && *buffer != 'E') buffer++; stop = buffer--; while (*buffer == '0') buffer--; if (*buffer == '.') buffer--; while (buffer != stop) *++buffer = 0; } } static char * flt(char *str, double num, int size, int precision, char fmt, int flags) { char tmp[80]; char c, sign; int n, i; // Left align means no zero padding if (flags & LEFT) flags &= ~ZEROPAD; // Determine padding and sign char c = (flags & ZEROPAD) ? '0' : ' '; sign = 0; if (flags & SIGN) { if (num < 0.0) { sign = '-'; num = -num; size--; } else if (flags & PLUS) { sign = '+'; size--; } else if (flags & SPACE) { sign = ' '; size--; } } // Compute the precision value if (precision < 0) precision = 6; // Default precision: 6 // Convert floating point number to text parse_float(num, tmp, fmt, precision); if ((flags & HEX_PREP) && precision == 0) decimal_point(tmp); if (fmt == 'g' && !(flags & HEX_PREP)) cropzeros(tmp); n = strnlen(tmp, 256); // Output number with alignment and padding size -= n; if (!(flags & (ZEROPAD | LEFT))) while (size-- > 0) *str++ = ' '; if (sign) *str++ = sign; if (!(flags & LEFT)) while (size-- > 0) *str++ = c; for (i = 0; i < n; i++) *str++ = tmp[i]; while (size-- > 0) *str++ = ' '; return str; } #endif static int ee_vsprintf(char *buf, const char *fmt, va_list args) { int len; unsigned long num; int i, base; char * str; char * s; int flags; // Flags to number() int field_width; // Width of output field int precision; // Min. # of digits for integers; max number of chars for // from string int qualifier; // 'h', 'l', or 'L' for integer fields for (str = buf; *fmt; fmt++) { if (*fmt != '%') { *str++ = *fmt; continue; } // Process flags flags = 0; repeat: fmt++; // This also skips first '%' switch (*fmt) { case '-': flags |= LEFT; goto repeat; case '+': flags |= PLUS; goto repeat; case ' ': flags |= SPACE; goto repeat; case '#': flags |= HEX_PREP; goto repeat; case '0': flags |= ZEROPAD; goto repeat; } // Get field width field_width = -1; if (is_digit(*fmt)) field_width = skip_atoi(&fmt); else if (*fmt == '*') { fmt++; field_width = va_arg(args, int); if (field_width < 0) { field_width = -field_width; flags |= LEFT; } } // Get the precision precision = -1; if (*fmt == '.') { ++fmt; if (is_digit(*fmt)) precision = skip_atoi(&fmt); else if (*fmt == '*') { ++fmt; precision = va_arg(args, int); } if (precision < 0) precision = 0; } // Get the conversion qualifier qualifier = -1; if (*fmt == 'l' || *fmt == 'L') { qualifier = *fmt; fmt++; } // Default base base = 10; switch (*fmt) { case 'c': if (!(flags & LEFT)) while (--field_width > 0) *str++ = ' '; *str++ = (unsigned char)va_arg(args, int); while (--field_width > 0) *str++ = ' '; continue; case 's': s = va_arg(args, char *); if (!s) s = ""; len = strnlen(s, precision); if (!(flags & LEFT)) while (len < field_width--) *str++ = ' '; for (i = 0; i < len; ++i) *str++ = *s++; while (len < field_width--) *str++ = ' '; continue; case 'p': if (field_width == -1) { field_width = 2 * sizeof(void *); flags |= ZEROPAD; } str = number(str, (unsigned long)va_arg(args, void *), 16, field_width, precision, flags); continue; case 'A': flags |= UPPERCASE; case 'a': if (qualifier == 'l') str = eaddr(str, va_arg(args, unsigned char *), field_width, precision, flags); else str = iaddr(str, va_arg(args, unsigned char *), field_width, precision, flags); continue; // Integer number formats - set up the flags and "break" case 'o': base = 8; break; case 'X': flags |= UPPERCASE; case 'x': base = 16; break; case 'd': case 'i': flags |= SIGN; case 'u': break; #if HAS_FLOAT case 'f': str = flt(str, va_arg(args, double), field_width, precision, *fmt, flags | SIGN); continue; #endif default: if (*fmt != '%') *str++ = '%'; if (*fmt) *str++ = *fmt; else --fmt; continue; } if (qualifier == 'l') num = va_arg(args, unsigned long); else if (flags & SIGN) num = va_arg(args, int); else num = va_arg(args, unsigned int); str = number(str, num, base, field_width, precision, flags); } *str = '\0'; return str - buf; } void uart_send_char(char c) { #error "You must implement the method uart_send_char to use this file!\n"; /* Output of a char to a UART usually follows the following model: Wait until UART is ready Write char to UART Wait until UART is done Or in code: while (*UART_CONTROL_ADDRESS != UART_READY); *UART_DATA_ADDRESS = c; while (*UART_CONTROL_ADDRESS != UART_READY); Check the UART sample code on your platform or the board documentation. */ } int ee_printf(const char *fmt, ...) { char buf[1024], *p; va_list args; int n = 0; va_start(args, fmt); ee_vsprintf(buf, fmt, args); va_end(args); p = buf; while (*p) { uart_send_char(*p); n++; p++; } return n; } ================================================ FILE: ThirdParty/Benchmarks/coremark/barebones_porting.md ================================================ # Using CoreMark with bare-bone systems This file only contain information for porting CoreMark to bare-bone systems. For other information (e.g. run rules) please see [README.md](README.md). ## Definition of bare-bone systems The term bare-bones here mean systems that are bare minimum, and only provide the essential parts. A bare-bone processor system might not have an rich-OS (e.g. Linux, Windows), and in that case the system can also be referred as bare-metal. The bare-bones folder in the CoreMark repository provides the bare minimum to allow CoreMark to be ported to a processor system. As the code inside does not have any dependency on OS, it is the best starting point for porting CoreMark to a baremetal system where OS is not used, such as a microcontroller or an embedded processor. ## Overview CoreMark can be used with microcontrollers / embedded processor devices. Before you start porting CoreMark, please setup a project environment that provides: - printf support - timer support (e.g. base on a reference that has a constant clock frequency) The CoreMark execution needs to execute for at least 10 seconds. Therefore when selecting a timer peripheral for timing measurement, you need to ensure that the timer can measure the whole duration of the coremark execution. For example, let's say you are using a microcontroller and that has a 24-bit timer, and use the 24-bit timer as the timing reference. If the device is running at 100MHz and the timer is setup to run using the processor's clock, the longest time that the timer can count is 0.16777 second before it overflows or reaches zero. To measure the execution time, you could setup that timer to interrupt at a rate of 1KHz, and increment a counter variable inside the interrupt service routine. With this arrangement, there is some software overhead but the result should still be quite accurate. If the timer is 32-bit, and providing that: - the number of iterations is not too high, and - the timer's frequency is not too high, then it is possible to measure the entire execution period without timer overflow/underflow. For example, if a 32-bit timer increment/decrement at 100MHz, it takes 42.95 seconds to overflow/underflow. So it is possible to use the timer's value directly if the execution time is between 10 to 42.95 seconds. You also need to estimate a minimum number of iterations before your start. The number of iterations can be set using a C preprocessing macro "ITERATIONS". For a processor with around 4 CoreMark/MHz and running at 100MHz, you need an iteration count of at least 4 (CoreMark/MHz) x100 (MHz) x 10 (seconds) = 4000 iterations. Incorrect timing reference is a common error, therefore, please test your timing measurement code. For example, by creating a small program that wait for 10 seconds and compare that to an external timing measurement tool (e.g. stopwatch). Once that are ready, you can then port the CoreMark project. The following files are required: - Source files that are used without modifications - [coremark/core_main.c](https://github.com/eembc/coremark/blob/main/core_main.c) - [coremark/core_list_join.c](https://github.com/eembc/coremark/blob/main/core_list_join.c) - [coremark/core_matrix.c](https://github.com/eembc/coremark/blob/main/core_matrix.c) - [coremark/core_state.c](https://github.com/eembc/coremark/blob/main/core_state.c) - [coremark/core_util.c](https://github.com/eembc/coremark/blob/main/core_util.c) - [coremark/coremark.h](https://github.com/eembc/coremark/blob/main/coremark.h) - Source files that need modifications - [coremark/barebones/core_portme.c](https://github.com/eembc/coremark/blob/main/barebones/core_portme.c) - [coremark/barebones/core_portme.h](https://github.com/eembc/coremark/blob/main/barebones/core_portme.h) And of course you need to include the support files for timer and printf support. In your project setup you also need to define pre-processing macros: | Preprocessing macro | Description / value | |---|---| |ITERATIONS| Set to the number of iterations the CoreMark workload will execute for at least 10 seconds. | |STANDALONE| Set to indicate Standalone environment | |PERFORMANCE_RUN / VALIDATION_RUN | Set to 1 | ## Modifications of core_portme.h Several C macros require update: | Preprocessing macro | Value | |---|---| |HAS_FLOAT| 0 or 1 based on the processor/device| |HAS_TIME_H| 0 | |USE_CLOCK| 0 | |HAS_STDIO| 1 | |HAS_PRINTF| 1 | The next section in the file is dependent on the C compiler that you are using. The original code below utilizes compiler predefine macros for GCC **\_\_GNUC\_\_** and **\_\_VERSION\_\_** to provides printed message of compiler's version. (See [GCC documentation page](https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html) for additional information.) ```C #ifndef COMPILER_VERSION #ifdef __GNUC__ #define COMPILER_VERSION "GCC"__VERSION__ #else #define COMPILER_VERSION "Please put compiler version here (e.g. gcc 4.1)" #endif #endif #ifndef COMPILER_FLAGS #define COMPILER_FLAGS \ FLAGS_STR /* "Please put compiler flags here (e.g. -o3)" */ #endif ``` You can insert additional compiler specific information using compiler predefine macros for the toolchain that you use. For example, information about LLVM predefined macros is available [here](https://clang.llvm.org/docs/LanguageExtensions.html#builtin-macros). And finally, set MAIN_HAS_NOARGC: ```C #ifndef MAIN_HAS_NOARGC #define MAIN_HAS_NOARGC 1 #endif ``` ## Modifications of core_portme.c Note: The following codes are example. You can change the codes in other ways. In this file, first you might need to declare external functions for printf, timer and cache support. For example, in my project I declared the following external functions: ```C extern void timer_config(void); /* Initialize a timer peripheral */ extern void stdio_init(void); /* Initialize printf support (e.g. UART) */ extern void cache_init(void); /* Initialize processor's cache if available */ extern unsigned long get_100Hz_value(void); /* Read a timer value with 0.01 sec resolution */ ``` Then I modified the barebones_clock() function as: ```C CORETIMETYPE barebones_clock() { /*#error \ "You must implement a method to measure time in barebones_clock()! This function should return current time.\n" */ return get_100Hz_value(); } ``` In this example, the timer value increments at 100Hz. So I need to tell the score calculation code with the following settings: ```C /* Define : TIMER_RES_DIVIDER Divider to trade off timer resolution and total time that can be measured. Use lower values to increase resolution, but make sure that overflow does not occur. If there are issues with the return value overflowing, increase this value. */ #define CLOCKS_PER_SEC 100 #define GETMYTIME(_t) (*_t = barebones_clock()) #define MYTIMEDIFF(fin, ini) ((fin) - (ini)) #define TIMER_RES_DIVIDER 1 #define SAMPLE_TIME_IMPLEMENTATION 1 #define EE_TICKS_PER_SEC (CLOCKS_PER_SEC / TIMER_RES_DIVIDER) ``` Finally, the platform initialization code is updated as follow: ```C /* Function : portable_init Target specific initialization code Test for some common mistakes. */ void portable_init(core_portable *p, int *argc, char *argv[]) { /* #error \ "Call board initialization routines in portable init (if needed), in particular initialize UART!\n" (void)argc; // prevent unused warning (void)argv; // prevent unused warning */ /* Hardware initialization */ stdio_init(); cache_init(); timer_config(); if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) { ee_printf( "ERROR! Please define ee_ptr_int to a type that holds a " "pointer!\n"); } if (sizeof(ee_u32) != 4) { ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n"); } p->portable_id = 1; } ``` ## Additional considerations CoreMark demonstrate some performance aspects of the processors, but it might not reflect the performance of your applications in the real world. For example, the critical workloads in CoreMark does not contain floating-point operations, and is not data intensive. Also, because the memory footprint is quite small (This is necessary to allow CoreMark to be used in small, low-cost microcontrollers with limited memory sizes), when using CoreMark on a high-end processor system, the benchmark can easily fit into the level 1 caches and the performance of the memory system outside the L1 cache is not tested. [SPEC](https://spec.org) has other benchmarks that are suitable for testing the performance of high-end processor systems. If you are using a microcontroller with flash memory for program storage, and if the processor inside comes with Instruction and Data caches, in most cases you need to enable both I and D caches to get the best performance. This is because the program image contains both program instructions and constant data. Typically the CoreMark project fit within 32KB of ROM/flash and use less than 32KB of RAM. The stack and heap sizes inside the RAM is dependent on the processor architecture as well as the toolchain being used. For example, some toolchains could use more RAM for printf and floating-point library (Note: floating-point operations could be used for benchmark result calculation). In toolchains for typical 32-bit microcontrollers, usually the CoreMark uses less than 4KB of stack and 4KB of heap space. Many microcontroller vendors and some toolchain vendors provide application notes to explain to their customers how to setup CoreMark project to get the best performance. ================================================ FILE: ThirdParty/Benchmarks/coremark/core_list_join.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include "coremark.h" /* Topic: Description Benchmark using a linked list. Linked list is a common data structure used in many applications. For our purposes, this will excercise the memory units of the processor. In particular, usage of the list pointers to find and alter data. We are not using Malloc since some platforms do not support this library. Instead, the memory block being passed in is used to create a list, and the benchmark takes care not to add more items then can be accommodated by the memory block. The porting layer will make sure that we have a valid memory block. All operations are done in place, without using any extra memory. The list itself contains list pointers and pointers to data items. Data items contain the following: idx - An index that captures the initial order of the list. data - Variable data initialized based on the input parameters. The 16b are divided as follows: o Upper 8b are backup of original data. o Bit 7 indicates if the lower 7 bits are to be used as is or calculated. o Bits 0-2 indicate type of operation to perform to get a 7b value. o Bits 3-6 provide input for the operation. */ /* local functions */ list_head *core_list_find(list_head *list, list_data *info); list_head *core_list_reverse(list_head *list); list_head *core_list_remove(list_head *item); list_head *core_list_undo_remove(list_head *item_removed, list_head *item_modified); list_head *core_list_insert_new(list_head * insert_point, list_data * info, list_head **memblock, list_data **datablock, list_head * memblock_end, list_data * datablock_end); typedef ee_s32 (*list_cmp)(list_data *a, list_data *b, core_results *res); list_head *core_list_mergesort(list_head * list, list_cmp cmp, core_results *res); ee_s16 calc_func(ee_s16 *pdata, core_results *res) { ee_s16 data = *pdata; ee_s16 retval; ee_u8 optype = (data >> 7) & 1; /* bit 7 indicates if the function result has been cached */ if (optype) /* if cached, use cache */ return (data & 0x007f); else { /* otherwise calculate and cache the result */ ee_s16 flag = data & 0x7; /* bits 0-2 is type of function to perform */ ee_s16 dtype = ((data >> 3) & 0xf); /* bits 3-6 is specific data for the operation */ dtype |= dtype << 4; /* replicate the lower 4 bits to get an 8b value */ switch (flag) { case 0: if (dtype < 0x22) /* set min period for bit corruption */ dtype = 0x22; retval = core_bench_state(res->size, res->memblock[3], res->seed1, res->seed2, dtype, res->crc); if (res->crcstate == 0) res->crcstate = retval; break; case 1: retval = core_bench_matrix(&(res->mat), dtype, res->crc); if (res->crcmatrix == 0) res->crcmatrix = retval; break; default: retval = data; break; } res->crc = crcu16(retval, res->crc); retval &= 0x007f; *pdata = (data & 0xff00) | 0x0080 | retval; /* cache the result */ return retval; } } /* Function: cmp_complex Compare the data item in a list cell. Can be used by mergesort. */ ee_s32 cmp_complex(list_data *a, list_data *b, core_results *res) { ee_s16 val1 = calc_func(&(a->data16), res); ee_s16 val2 = calc_func(&(b->data16), res); return val1 - val2; } /* Function: cmp_idx Compare the idx item in a list cell, and regen the data. Can be used by mergesort. */ ee_s32 cmp_idx(list_data *a, list_data *b, core_results *res) { if (res == NULL) { a->data16 = (a->data16 & 0xff00) | (0x00ff & (a->data16 >> 8)); b->data16 = (b->data16 & 0xff00) | (0x00ff & (b->data16 >> 8)); } return a->idx - b->idx; } void copy_info(list_data *to, list_data *from) { to->data16 = from->data16; to->idx = from->idx; } /* Benchmark for linked list: - Try to find multiple data items. - List sort - Operate on data from list (crc) - Single remove/reinsert * At the end of this function, the list is back to original state */ ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx) { ee_u16 retval = 0; ee_u16 found = 0, missed = 0; list_head *list = res->list; ee_s16 find_num = res->seed3; list_head *this_find; list_head *finder, *remover; list_data info = {0}; ee_s16 i; info.idx = finder_idx; /* find values in the list, and change the list each time * (reverse and cache if value found) */ for (i = 0; i < find_num; i++) { info.data16 = (i & 0xff); this_find = core_list_find(list, &info); list = core_list_reverse(list); if (this_find == NULL) { missed++; retval += (list->next->info->data16 >> 8) & 1; } else { found++; if (this_find->info->data16 & 0x1) /* use found value */ retval += (this_find->info->data16 >> 9) & 1; /* and cache next item at the head of the list (if any) */ if (this_find->next != NULL) { finder = this_find->next; this_find->next = finder->next; finder->next = list->next; list->next = finder; } } if (info.idx >= 0) info.idx++; #if CORE_DEBUG ee_printf("List find %d: [%d,%d,%d]\n", i, retval, missed, found); #endif } retval += found * 4 - missed; /* sort the list by data content and remove one item*/ if (finder_idx > 0) list = core_list_mergesort(list, cmp_complex, res); remover = core_list_remove(list->next); /* CRC data content of list from location of index N forward, and then undo * remove */ finder = core_list_find(list, &info); if (!finder) finder = list->next; while (finder) { retval = crc16(list->info->data16, retval); finder = finder->next; } #if CORE_DEBUG ee_printf("List sort 1: %04x\n", retval); #endif remover = core_list_undo_remove(remover, list->next); /* sort the list by index, in effect returning the list to original state */ list = core_list_mergesort(list, cmp_idx, NULL); /* CRC data content of list */ finder = list->next; while (finder) { retval = crc16(list->info->data16, retval); finder = finder->next; } #if CORE_DEBUG ee_printf("List sort 2: %04x\n", retval); #endif return retval; } /* Function: core_list_init Initialize list with data. Parameters: blksize - Size of memory to be initialized. memblock - Pointer to memory block. seed - Actual values chosen depend on the seed parameter. The seed parameter MUST be supplied from a source that cannot be determined at compile time Returns: Pointer to the head of the list. */ list_head * core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed) { /* calculated pointers for the list */ ee_u32 per_item = 16 + sizeof(struct list_data_s); ee_u32 size = (blksize / per_item) - 2; /* to accommodate systems with 64b pointers, and make sure same code is executed, set max list elements */ list_head *memblock_end = memblock + size; list_data *datablock = (list_data *)(memblock_end); list_data *datablock_end = datablock + size; /* some useful variables */ ee_u32 i; list_head *finder, *list = memblock; list_data info; /* create a fake items for the list head and tail */ list->next = NULL; list->info = datablock; list->info->idx = 0x0000; list->info->data16 = (ee_s16)0x8080; memblock++; datablock++; info.idx = 0x7fff; info.data16 = (ee_s16)0xffff; core_list_insert_new( list, &info, &memblock, &datablock, memblock_end, datablock_end); /* then insert size items */ for (i = 0; i < size; i++) { ee_u16 datpat = ((ee_u16)(seed ^ i) & 0xf); ee_u16 dat = (datpat << 3) | (i & 0x7); /* alternate between algorithms */ info.data16 = (dat << 8) | dat; /* fill the data with actual data and upper bits with rebuild value */ core_list_insert_new( list, &info, &memblock, &datablock, memblock_end, datablock_end); } /* and now index the list so we know initial seed order of the list */ finder = list->next; i = 1; while (finder->next != NULL) { if (i < size / 5) /* first 20% of the list in order */ finder->info->idx = i++; else { ee_u16 pat = (ee_u16)(i++ ^ seed); /* get a pseudo random number */ finder->info->idx = 0x3fff & (((i & 0x07) << 8) | pat); /* make sure the mixed items end up after the ones in sequence */ } finder = finder->next; } list = core_list_mergesort(list, cmp_idx, NULL); #if CORE_DEBUG ee_printf("Initialized list:\n"); finder = list; while (finder) { ee_printf( "[%04x,%04x]", finder->info->idx, (ee_u16)finder->info->data16); finder = finder->next; } ee_printf("\n"); #endif return list; } /* Function: core_list_insert Insert an item to the list Parameters: insert_point - where to insert the item. info - data for the cell. memblock - pointer for the list header datablock - pointer for the list data memblock_end - end of region for list headers datablock_end - end of region for list data Returns: Pointer to new item. */ list_head * core_list_insert_new(list_head * insert_point, list_data * info, list_head **memblock, list_data **datablock, list_head * memblock_end, list_data * datablock_end) { list_head *newitem; if ((*memblock + 1) >= memblock_end) return NULL; if ((*datablock + 1) >= datablock_end) return NULL; newitem = *memblock; (*memblock)++; newitem->next = insert_point->next; insert_point->next = newitem; newitem->info = *datablock; (*datablock)++; copy_info(newitem->info, info); return newitem; } /* Function: core_list_remove Remove an item from the list. Operation: For a singly linked list, remove by copying the data from the next item over to the current cell, and unlinking the next item. Note: since there is always a fake item at the end of the list, no need to check for NULL. Returns: Removed item. */ list_head * core_list_remove(list_head *item) { list_data *tmp; list_head *ret = item->next; /* swap data pointers */ tmp = item->info; item->info = ret->info; ret->info = tmp; /* and eliminate item */ item->next = item->next->next; ret->next = NULL; return ret; } /* Function: core_list_undo_remove Undo a remove operation. Operation: Since we want each iteration of the benchmark to be exactly the same, we need to be able to undo a remove. Link the removed item back into the list, and switch the info items. Parameters: item_removed - Return value from the item_modified - List item that was modified during Returns: The item that was linked back to the list. */ list_head * core_list_undo_remove(list_head *item_removed, list_head *item_modified) { list_data *tmp; /* swap data pointers */ tmp = item_removed->info; item_removed->info = item_modified->info; item_modified->info = tmp; /* and insert item */ item_removed->next = item_modified->next; item_modified->next = item_removed; return item_removed; } /* Function: core_list_find Find an item in the list Operation: Find an item by idx (if not 0) or specific data value Parameters: list - list head info - idx or data to find Returns: Found item, or NULL if not found. */ list_head * core_list_find(list_head *list, list_data *info) { if (info->idx >= 0) { while (list && (list->info->idx != info->idx)) list = list->next; return list; } else { while (list && ((list->info->data16 & 0xff) != info->data16)) list = list->next; return list; } } /* Function: core_list_reverse Reverse a list Operation: Rearrange the pointers so the list is reversed. Parameters: list - list head info - idx or data to find Returns: Found item, or NULL if not found. */ list_head * core_list_reverse(list_head *list) { list_head *next = NULL, *tmp; while (list) { tmp = list->next; list->next = next; next = list; list = tmp; } return next; } /* Function: core_list_mergesort Sort the list in place without recursion. Description: Use mergesort, as for linked list this is a realistic solution. Also, since this is aimed at embedded, care was taken to use iterative rather then recursive algorithm. The sort can either return the list to original order (by idx) , or use the data item to invoke other other algorithms and change the order of the list. Parameters: list - list to be sorted. cmp - cmp function to use Returns: New head of the list. Note: We have a special header for the list that will always be first, but the algorithm could theoretically modify where the list starts. */ list_head * core_list_mergesort(list_head *list, list_cmp cmp, core_results *res) { list_head *p, *q, *e, *tail; ee_s32 insize, nmerges, psize, qsize, i; insize = 1; while (1) { p = list; list = NULL; tail = NULL; nmerges = 0; /* count number of merges we do in this pass */ while (p) { nmerges++; /* there exists a merge to be done */ /* step `insize' places along from p */ q = p; psize = 0; for (i = 0; i < insize; i++) { psize++; q = q->next; if (!q) break; } /* if q hasn't fallen off end, we have two lists to merge */ qsize = insize; /* now we have two lists; merge them */ while (psize > 0 || (qsize > 0 && q)) { /* decide whether next element of merge comes from p or q */ if (psize == 0) { /* p is empty; e must come from q. */ e = q; q = q->next; qsize--; } else if (qsize == 0 || !q) { /* q is empty; e must come from p. */ e = p; p = p->next; psize--; } else if (cmp(p->info, q->info, res) <= 0) { /* First element of p is lower (or same); e must come from * p. */ e = p; p = p->next; psize--; } else { /* First element of q is lower; e must come from q. */ e = q; q = q->next; qsize--; } /* add the next element to the merged list */ if (tail) { tail->next = e; } else { list = e; } tail = e; } /* now p has stepped `insize' places along, and q has too */ p = q; } tail->next = NULL; /* If we have done only one merge, we're finished. */ if (nmerges <= 1) /* allow for nmerges==0, the empty list case */ return list; /* Otherwise repeat, merging lists twice the size */ insize *= 2; } #if COMPILER_REQUIRES_SORT_RETURN return list; #endif } ================================================ FILE: ThirdParty/Benchmarks/coremark/core_main.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ /* File: core_main.c This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results. */ #include "coremark.h" /* Function: iterate Run the benchmark for a specified number of iterations. Operation: For each type of benchmarked algorithm: a - Initialize the data block for the algorithm. b - Execute the algorithm N times. Returns: NULL. */ static ee_u16 list_known_crc[] = { (ee_u16)0xd4b0, (ee_u16)0x3340, (ee_u16)0x6a79, (ee_u16)0xe714, (ee_u16)0xe3c1 }; static ee_u16 matrix_known_crc[] = { (ee_u16)0xbe52, (ee_u16)0x1199, (ee_u16)0x5608, (ee_u16)0x1fd7, (ee_u16)0x0747 }; static ee_u16 state_known_crc[] = { (ee_u16)0x5e47, (ee_u16)0x39bf, (ee_u16)0xe5a4, (ee_u16)0x8e3a, (ee_u16)0x8d84 }; void * iterate(void *pres) { ee_u32 i; ee_u16 crc; core_results *res = (core_results *)pres; ee_u32 iterations = res->iterations; res->crc = 0; res->crclist = 0; res->crcmatrix = 0; res->crcstate = 0; for (i = 0; i < iterations; i++) { crc = core_bench_list(res, 1); res->crc = crcu16(crc, res->crc); crc = core_bench_list(res, -1); res->crc = crcu16(crc, res->crc); if (i == 0) res->crclist = res->crc; } return NULL; } #if (SEED_METHOD == SEED_ARG) ee_s32 get_seed_args(int i, int argc, char *argv[]); #define get_seed(x) (ee_s16) get_seed_args(x, argc, argv) #define get_seed_32(x) get_seed_args(x, argc, argv) #else /* via function or volatile */ ee_s32 get_seed_32(int i); #define get_seed(x) (ee_s16) get_seed_32(x) #endif #if (MEM_METHOD == MEM_STATIC) ee_u8 static_memblk[TOTAL_DATA_SIZE]; #endif char *mem_name[3] = { "Static", "Heap", "Stack" }; /* Function: main Main entry routine for the benchmark. This function is responsible for the following steps: 1 - Initialize input seeds from a source that cannot be determined at compile time. 2 - Initialize memory block for use. 3 - Run and time the benchmark. 4 - Report results, testing the validity of the output if the seeds are known. Arguments: 1 - first seed : Any value 2 - second seed : Must be identical to first for iterations to be identical 3 - third seed : Any value, should be at least an order of magnitude less then the input size, but bigger then 32. 4 - Iterations : Special, if set to 0, iterations will be automatically determined such that the benchmark will run between 10 to 100 secs */ #if MAIN_HAS_NOARGC MAIN_RETURN_TYPE main(void) { int argc = 0; char *argv[1]; #else MAIN_RETURN_TYPE main(int argc, char *argv[]) { #endif ee_u16 i, j = 0, num_algorithms = 0; ee_s16 known_id = -1, total_errors = 0; ee_u16 seedcrc = 0; CORE_TICKS total_time; core_results results[MULTITHREAD]; #if (MEM_METHOD == MEM_STACK) ee_u8 stack_memblock[TOTAL_DATA_SIZE * MULTITHREAD]; #endif /* first call any initializations needed */ portable_init(&(results[0].port), &argc, argv); /* First some checks to make sure benchmark will run ok */ if (sizeof(struct list_head_s) > 128) { ee_printf("list_head structure too big for comparable data!\n"); return MAIN_RETURN_VAL; } results[0].seed1 = get_seed(1); results[0].seed2 = get_seed(2); results[0].seed3 = get_seed(3); results[0].iterations = get_seed_32(4); #if CORE_DEBUG results[0].iterations = 1; #endif results[0].execs = get_seed_32(5); if (results[0].execs == 0) { /* if not supplied, execute all algorithms */ results[0].execs = ALL_ALGORITHMS_MASK; } /* put in some default values based on one seed only for easy testing */ if ((results[0].seed1 == 0) && (results[0].seed2 == 0) && (results[0].seed3 == 0)) { /* performance run */ results[0].seed1 = 0; results[0].seed2 = 0; results[0].seed3 = 0x66; } if ((results[0].seed1 == 1) && (results[0].seed2 == 0) && (results[0].seed3 == 0)) { /* validation run */ results[0].seed1 = 0x3415; results[0].seed2 = 0x3415; results[0].seed3 = 0x66; } #if (MEM_METHOD == MEM_STATIC) results[0].memblock[0] = (void *)static_memblk; results[0].size = TOTAL_DATA_SIZE; results[0].err = 0; #if (MULTITHREAD > 1) #error "Cannot use a static data area with multiple contexts!" #endif #elif (MEM_METHOD == MEM_MALLOC) for (i = 0; i < MULTITHREAD; i++) { ee_s32 malloc_override = get_seed(7); if (malloc_override != 0) results[i].size = malloc_override; else results[i].size = TOTAL_DATA_SIZE; results[i].memblock[0] = portable_malloc(results[i].size); results[i].seed1 = results[0].seed1; results[i].seed2 = results[0].seed2; results[i].seed3 = results[0].seed3; results[i].err = 0; results[i].execs = results[0].execs; } #elif (MEM_METHOD == MEM_STACK) for (i = 0; i < MULTITHREAD; i++) { results[i].memblock[0] = stack_memblock + i * TOTAL_DATA_SIZE; results[i].size = TOTAL_DATA_SIZE; results[i].seed1 = results[0].seed1; results[i].seed2 = results[0].seed2; results[i].seed3 = results[0].seed3; results[i].err = 0; results[i].execs = results[0].execs; } #else #error "Please define a way to initialize a memory block." #endif /* Data init */ /* Find out how space much we have based on number of algorithms */ for (i = 0; i < NUM_ALGORITHMS; i++) { if ((1 << (ee_u32)i) & results[0].execs) num_algorithms++; } for (i = 0; i < MULTITHREAD; i++) results[i].size = results[i].size / num_algorithms; /* Assign pointers */ for (i = 0; i < NUM_ALGORITHMS; i++) { ee_u32 ctx; if ((1 << (ee_u32)i) & results[0].execs) { for (ctx = 0; ctx < MULTITHREAD; ctx++) results[ctx].memblock[i + 1] = (char *)(results[ctx].memblock[0]) + results[0].size * j; j++; } } /* call inits */ for (i = 0; i < MULTITHREAD; i++) { if (results[i].execs & ID_LIST) { results[i].list = core_list_init( results[0].size, results[i].memblock[1], results[i].seed1); } if (results[i].execs & ID_MATRIX) { core_init_matrix(results[0].size, results[i].memblock[2], (ee_s32)results[i].seed1 | (((ee_s32)results[i].seed2) << 16), &(results[i].mat)); } if (results[i].execs & ID_STATE) { core_init_state( results[0].size, results[i].seed1, results[i].memblock[3]); } } /* automatically determine number of iterations if not set */ if (results[0].iterations == 0) { secs_ret secs_passed = 0; ee_u32 divisor; results[0].iterations = 1; while (secs_passed < (secs_ret)1) { results[0].iterations *= 10; start_time(); iterate(&results[0]); stop_time(); secs_passed = time_in_secs(get_time()); } /* now we know it executes for at least 1 sec, set actual run time at * about 10 secs */ divisor = (ee_u32)secs_passed; if (divisor == 0) /* some machines cast float to int as 0 since this conversion is not defined by ANSI, but we know at least one second passed */ divisor = 1; results[0].iterations *= 1 + 10 / divisor; } /* perform actual benchmark */ start_time(); #if (MULTITHREAD > 1) if (default_num_contexts > MULTITHREAD) { default_num_contexts = MULTITHREAD; } for (i = 0; i < default_num_contexts; i++) { results[i].iterations = results[0].iterations; results[i].execs = results[0].execs; core_start_parallel(&results[i]); } for (i = 0; i < default_num_contexts; i++) { core_stop_parallel(&results[i]); } #else iterate(&results[0]); #endif stop_time(); total_time = get_time(); /* get a function of the input to report */ seedcrc = crc16(results[0].seed1, seedcrc); seedcrc = crc16(results[0].seed2, seedcrc); seedcrc = crc16(results[0].seed3, seedcrc); seedcrc = crc16(results[0].size, seedcrc); switch (seedcrc) { /* test known output for common seeds */ case 0x8a02: /* seed1=0, seed2=0, seed3=0x66, size 2000 per algorithm */ known_id = 0; ee_printf("6k performance run parameters for coremark.\n"); break; case 0x7b05: /* seed1=0x3415, seed2=0x3415, seed3=0x66, size 2000 per algorithm */ known_id = 1; ee_printf("6k validation run parameters for coremark.\n"); break; case 0x4eaf: /* seed1=0x8, seed2=0x8, seed3=0x8, size 400 per algorithm */ known_id = 2; ee_printf("Profile generation run parameters for coremark.\n"); break; case 0xe9f5: /* seed1=0, seed2=0, seed3=0x66, size 666 per algorithm */ known_id = 3; ee_printf("2K performance run parameters for coremark.\n"); break; case 0x18f2: /* seed1=0x3415, seed2=0x3415, seed3=0x66, size 666 per algorithm */ known_id = 4; ee_printf("2K validation run parameters for coremark.\n"); break; default: total_errors = -1; break; } if (known_id >= 0) { for (i = 0; i < default_num_contexts; i++) { results[i].err = 0; if ((results[i].execs & ID_LIST) && (results[i].crclist != list_known_crc[known_id])) { ee_printf("[%u]ERROR! list crc 0x%04x - should be 0x%04x\n", i, results[i].crclist, list_known_crc[known_id]); results[i].err++; } if ((results[i].execs & ID_MATRIX) && (results[i].crcmatrix != matrix_known_crc[known_id])) { ee_printf("[%u]ERROR! matrix crc 0x%04x - should be 0x%04x\n", i, results[i].crcmatrix, matrix_known_crc[known_id]); results[i].err++; } if ((results[i].execs & ID_STATE) && (results[i].crcstate != state_known_crc[known_id])) { ee_printf("[%u]ERROR! state crc 0x%04x - should be 0x%04x\n", i, results[i].crcstate, state_known_crc[known_id]); results[i].err++; } total_errors += results[i].err; } } total_errors += check_data_types(); /* and report results */ ee_printf("CoreMark Size : %lu\n", (long unsigned)results[0].size); ee_printf("Total ticks : %lu\n", (long unsigned)total_time); #if HAS_FLOAT ee_printf("Total time (secs): %f\n", time_in_secs(total_time)); if (time_in_secs(total_time) > 0) ee_printf("Iterations/Sec : %f\n", default_num_contexts * results[0].iterations / time_in_secs(total_time)); #else ee_printf("Total time (secs): %d\n", time_in_secs(total_time)); if (time_in_secs(total_time) > 0) ee_printf("Iterations/Sec : %d\n", default_num_contexts * results[0].iterations / time_in_secs(total_time)); #endif if (time_in_secs(total_time) < 10) { ee_printf( "ERROR! Must execute for at least 10 secs for a valid result!\n"); total_errors++; } ee_printf("Iterations : %lu\n", (long unsigned)default_num_contexts * results[0].iterations); ee_printf("Compiler version : %s\n", COMPILER_VERSION); ee_printf("Compiler flags : %s\n", COMPILER_FLAGS); #if (MULTITHREAD > 1) ee_printf("Parallel %s : %d\n", PARALLEL_METHOD, default_num_contexts); #endif ee_printf("Memory location : %s\n", MEM_LOCATION); /* output for verification */ ee_printf("seedcrc : 0x%04x\n", seedcrc); if (results[0].execs & ID_LIST) for (i = 0; i < default_num_contexts; i++) ee_printf("[%d]crclist : 0x%04x\n", i, results[i].crclist); if (results[0].execs & ID_MATRIX) for (i = 0; i < default_num_contexts; i++) ee_printf("[%d]crcmatrix : 0x%04x\n", i, results[i].crcmatrix); if (results[0].execs & ID_STATE) for (i = 0; i < default_num_contexts; i++) ee_printf("[%d]crcstate : 0x%04x\n", i, results[i].crcstate); for (i = 0; i < default_num_contexts; i++) ee_printf("[%d]crcfinal : 0x%04x\n", i, results[i].crc); if (total_errors == 0) { ee_printf( "Correct operation validated. See README.md for run and reporting " "rules.\n"); #if HAS_FLOAT if (known_id == 3) { ee_printf("CoreMark 1.0 : %f / %s %s", default_num_contexts * results[0].iterations / time_in_secs(total_time), COMPILER_VERSION, COMPILER_FLAGS); #if defined(MEM_LOCATION) && !defined(MEM_LOCATION_UNSPEC) ee_printf(" / %s", MEM_LOCATION); #else ee_printf(" / %s", mem_name[MEM_METHOD]); #endif #if (MULTITHREAD > 1) ee_printf(" / %d:%s", default_num_contexts, PARALLEL_METHOD); #endif ee_printf("\n"); } #endif } if (total_errors > 0) ee_printf("Errors detected\n"); if (total_errors < 0) ee_printf( "Cannot validate operation for these seed values, please compare " "with results on a known platform.\n"); #if (MEM_METHOD == MEM_MALLOC) for (i = 0; i < MULTITHREAD; i++) portable_free(results[i].memblock[0]); #endif /* And last call any target specific code for finalizing */ portable_fini(&(results[0].port)); return MAIN_RETURN_VAL; } ================================================ FILE: ThirdParty/Benchmarks/coremark/core_matrix.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include "coremark.h" /* Topic: Description Matrix manipulation benchmark This very simple algorithm forms the basis of many more complex algorithms. The tight inner loop is the focus of many optimizations (compiler as well as hardware based) and is thus relevant for embedded processing. The total available data space will be divided to 3 parts: NxN Matrix A - initialized with small values (upper 3/4 of the bits all zero). NxN Matrix B - initialized with medium values (upper half of the bits all zero). NxN Matrix C - used for the result. The actual values for A and B must be derived based on input that is not available at compile time. */ ee_s16 matrix_test(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B, MATDAT val); ee_s16 matrix_sum(ee_u32 N, MATRES *C, MATDAT clipval); void matrix_mul_const(ee_u32 N, MATRES *C, MATDAT *A, MATDAT val); void matrix_mul_vect(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B); void matrix_mul_matrix(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B); void matrix_mul_matrix_bitextract(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B); void matrix_add_const(ee_u32 N, MATDAT *A, MATDAT val); #define matrix_test_next(x) (x + 1) #define matrix_clip(x, y) ((y) ? (x)&0x0ff : (x)&0x0ffff) #define matrix_big(x) (0xf000 | (x)) #define bit_extract(x, from, to) (((x) >> (from)) & (~(0xffffffff << (to)))) #if CORE_DEBUG void printmat(MATDAT *A, ee_u32 N, char *name) { ee_u32 i, j; ee_printf("Matrix %s [%dx%d]:\n", name, N, N); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (j != 0) ee_printf(","); ee_printf("%d", A[i * N + j]); } ee_printf("\n"); } } void printmatC(MATRES *C, ee_u32 N, char *name) { ee_u32 i, j; ee_printf("Matrix %s [%dx%d]:\n", name, N, N); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (j != 0) ee_printf(","); ee_printf("%d", C[i * N + j]); } ee_printf("\n"); } } #endif /* Function: core_bench_matrix Benchmark function Iterate N times, changing the matrix values slightly by a constant amount each time. */ ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc) { ee_u32 N = p->N; MATRES *C = p->C; MATDAT *A = p->A; MATDAT *B = p->B; MATDAT val = (MATDAT)seed; crc = crc16(matrix_test(N, C, A, B, val), crc); return crc; } /* Function: matrix_test Perform matrix manipulation. Parameters: N - Dimensions of the matrix. C - memory for result matrix. A - input matrix B - operator matrix (not changed during operations) Returns: A CRC value that captures all results calculated in the function. In particular, crc of the value calculated on the result matrix after each step by . Operation: 1 - Add a constant value to all elements of a matrix. 2 - Multiply a matrix by a constant. 3 - Multiply a matrix by a vector. 4 - Multiply a matrix by a matrix. 5 - Add a constant value to all elements of a matrix. After the last step, matrix A is back to original contents. */ ee_s16 matrix_test(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B, MATDAT val) { ee_u16 crc = 0; MATDAT clipval = matrix_big(val); matrix_add_const(N, A, val); /* make sure data changes */ #if CORE_DEBUG printmat(A, N, "matrix_add_const"); #endif matrix_mul_const(N, C, A, val); crc = crc16(matrix_sum(N, C, clipval), crc); #if CORE_DEBUG printmatC(C, N, "matrix_mul_const"); #endif matrix_mul_vect(N, C, A, B); crc = crc16(matrix_sum(N, C, clipval), crc); #if CORE_DEBUG printmatC(C, N, "matrix_mul_vect"); #endif matrix_mul_matrix(N, C, A, B); crc = crc16(matrix_sum(N, C, clipval), crc); #if CORE_DEBUG printmatC(C, N, "matrix_mul_matrix"); #endif matrix_mul_matrix_bitextract(N, C, A, B); crc = crc16(matrix_sum(N, C, clipval), crc); #if CORE_DEBUG printmatC(C, N, "matrix_mul_matrix_bitextract"); #endif matrix_add_const(N, A, -val); /* return matrix to initial value */ return crc; } /* Function : matrix_init Initialize the memory block for matrix benchmarking. Parameters: blksize - Size of memory to be initialized. memblk - Pointer to memory block. seed - Actual values chosen depend on the seed parameter. p - pointers to containing initialized matrixes. Returns: Matrix dimensions. Note: The seed parameter MUST be supplied from a source that cannot be determined at compile time */ ee_u32 core_init_matrix(ee_u32 blksize, void *memblk, ee_s32 seed, mat_params *p) { ee_u32 N = 0; MATDAT *A; MATDAT *B; ee_s32 order = 1; MATDAT val; ee_u32 i = 0, j = 0; if (seed == 0) seed = 1; while (j < blksize) { i++; j = i * i * 2 * 4; } N = i - 1; A = (MATDAT *)align_mem(memblk); B = A + N * N; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { seed = ((order * seed) % 65536); val = (seed + order); val = matrix_clip(val, 0); B[i * N + j] = val; val = (val + order); val = matrix_clip(val, 1); A[i * N + j] = val; order++; } } p->A = A; p->B = B; p->C = (MATRES *)align_mem(B + N * N); p->N = N; #if CORE_DEBUG printmat(A, N, "A"); printmat(B, N, "B"); #endif return N; } /* Function: matrix_sum Calculate a function that depends on the values of elements in the matrix. For each element, accumulate into a temporary variable. As long as this value is under the parameter clipval, add 1 to the result if the element is bigger then the previous. Otherwise, reset the accumulator and add 10 to the result. */ ee_s16 matrix_sum(ee_u32 N, MATRES *C, MATDAT clipval) { MATRES tmp = 0, prev = 0, cur = 0; ee_s16 ret = 0; ee_u32 i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { cur = C[i * N + j]; tmp += cur; if (tmp > clipval) { ret += 10; tmp = 0; } else { ret += (cur > prev) ? 1 : 0; } prev = cur; } } return ret; } /* Function: matrix_mul_const Multiply a matrix by a constant. This could be used as a scaler for instance. */ void matrix_mul_const(ee_u32 N, MATRES *C, MATDAT *A, MATDAT val) { ee_u32 i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { C[i * N + j] = (MATRES)A[i * N + j] * (MATRES)val; } } } /* Function: matrix_add_const Add a constant value to all elements of a matrix. */ void matrix_add_const(ee_u32 N, MATDAT *A, MATDAT val) { ee_u32 i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { A[i * N + j] += val; } } } /* Function: matrix_mul_vect Multiply a matrix by a vector. This is common in many simple filters (e.g. fir where a vector of coefficients is applied to the matrix.) */ void matrix_mul_vect(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) { ee_u32 i, j; for (i = 0; i < N; i++) { C[i] = 0; for (j = 0; j < N; j++) { C[i] += (MATRES)A[i * N + j] * (MATRES)B[j]; } } } /* Function: matrix_mul_matrix Multiply a matrix by a matrix. Basic code is used in many algorithms, mostly with minor changes such as scaling. */ void matrix_mul_matrix(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) { ee_u32 i, j, k; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { C[i * N + j] = 0; for (k = 0; k < N; k++) { C[i * N + j] += (MATRES)A[i * N + k] * (MATRES)B[k * N + j]; } } } } /* Function: matrix_mul_matrix_bitextract Multiply a matrix by a matrix, and extract some bits from the result. Basic code is used in many algorithms, mostly with minor changes such as scaling. */ void matrix_mul_matrix_bitextract(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) { ee_u32 i, j, k; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { C[i * N + j] = 0; for (k = 0; k < N; k++) { MATRES tmp = (MATRES)A[i * N + k] * (MATRES)B[k * N + j]; C[i * N + j] += bit_extract(tmp, 2, 4) * bit_extract(tmp, 5, 7); } } } } ================================================ FILE: ThirdParty/Benchmarks/coremark/core_state.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include "coremark.h" /* local functions */ enum CORE_STATE core_state_transition(ee_u8 **instr, ee_u32 *transition_count); /* Topic: Description Simple state machines like this one are used in many embedded products. For more complex state machines, sometimes a state transition table implementation is used instead, trading speed of direct coding for ease of maintenance. Since the main goal of using a state machine in CoreMark is to excercise the switch/if behaviour, we are using a small moore machine. In particular, this machine tests type of string input, trying to determine whether the input is a number or something else. (see core_state.png). */ /* Function: core_bench_state Benchmark function Go over the input twice, once direct, and once after introducing some corruption. */ ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock, ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc) { ee_u32 final_counts[NUM_CORE_STATES]; ee_u32 track_counts[NUM_CORE_STATES]; ee_u8 *p = memblock; ee_u32 i; #if CORE_DEBUG ee_printf("State Bench: %d,%d,%d,%04x\n", seed1, seed2, step, crc); #endif for (i = 0; i < NUM_CORE_STATES; i++) { final_counts[i] = track_counts[i] = 0; } /* run the state machine over the input */ while (*p != 0) { enum CORE_STATE fstate = core_state_transition(&p, track_counts); final_counts[fstate]++; #if CORE_DEBUG ee_printf("%d,", fstate); } ee_printf("\n"); #else } #endif p = memblock; while (p < (memblock + blksize)) { /* insert some corruption */ if (*p != ',') *p ^= (ee_u8)seed1; p += step; } p = memblock; /* run the state machine over the input again */ while (*p != 0) { enum CORE_STATE fstate = core_state_transition(&p, track_counts); final_counts[fstate]++; #if CORE_DEBUG ee_printf("%d,", fstate); } ee_printf("\n"); #else } #endif p = memblock; while (p < (memblock + blksize)) { /* undo corruption is seed1 and seed2 are equal */ if (*p != ',') *p ^= (ee_u8)seed2; p += step; } /* end timing */ for (i = 0; i < NUM_CORE_STATES; i++) { crc = crcu32(final_counts[i], crc); crc = crcu32(track_counts[i], crc); } return crc; } /* Default initialization patterns */ static ee_u8 *intpat[4] = { (ee_u8 *)"5012", (ee_u8 *)"1234", (ee_u8 *)"-874", (ee_u8 *)"+122" }; static ee_u8 *floatpat[4] = { (ee_u8 *)"35.54400", (ee_u8 *)".1234500", (ee_u8 *)"-110.700", (ee_u8 *)"+0.64400" }; static ee_u8 *scipat[4] = { (ee_u8 *)"5.500e+3", (ee_u8 *)"-.123e-2", (ee_u8 *)"-87e+832", (ee_u8 *)"+0.6e-12" }; static ee_u8 *errpat[4] = { (ee_u8 *)"T0.3e-1F", (ee_u8 *)"-T.T++Tq", (ee_u8 *)"1T3.4e4z", (ee_u8 *)"34.0e-T^" }; /* Function: core_init_state Initialize the input data for the state machine. Populate the input with several predetermined strings, interspersed. Actual patterns chosen depend on the seed parameter. Note: The seed parameter MUST be supplied from a source that cannot be determined at compile time */ void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p) { ee_u32 total = 0, next = 0, i; ee_u8 *buf = 0; #if CORE_DEBUG ee_u8 *start = p; ee_printf("State: %d,%d\n", size, seed); #endif size--; next = 0; while ((total + next + 1) < size) { if (next > 0) { for (i = 0; i < next; i++) *(p + total + i) = buf[i]; *(p + total + i) = ','; total += next + 1; } seed++; switch (seed & 0x7) { case 0: /* int */ case 1: /* int */ case 2: /* int */ buf = intpat[(seed >> 3) & 0x3]; next = 4; break; case 3: /* float */ case 4: /* float */ buf = floatpat[(seed >> 3) & 0x3]; next = 8; break; case 5: /* scientific */ case 6: /* scientific */ buf = scipat[(seed >> 3) & 0x3]; next = 8; break; case 7: /* invalid */ buf = errpat[(seed >> 3) & 0x3]; next = 8; break; default: /* Never happen, just to make some compilers happy */ break; } } size++; while (total < size) { /* fill the rest with 0 */ *(p + total) = 0; total++; } #if CORE_DEBUG ee_printf("State Input: %s\n", start); #endif } static ee_u8 ee_isdigit(ee_u8 c) { ee_u8 retval; retval = ((c >= '0') & (c <= '9')) ? 1 : 0; return retval; } /* Function: core_state_transition Actual state machine. The state machine will continue scanning until either: 1 - an invalid input is detected. 2 - a valid number has been detected. The input pointer is updated to point to the end of the token, and the end state is returned (either specific format determined or invalid). */ enum CORE_STATE core_state_transition(ee_u8 **instr, ee_u32 *transition_count) { ee_u8 * str = *instr; ee_u8 NEXT_SYMBOL; enum CORE_STATE state = CORE_START; for (; *str && state != CORE_INVALID; str++) { NEXT_SYMBOL = *str; if (NEXT_SYMBOL == ',') /* end of this input */ { str++; break; } switch (state) { case CORE_START: if (ee_isdigit(NEXT_SYMBOL)) { state = CORE_INT; } else if (NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-') { state = CORE_S1; } else if (NEXT_SYMBOL == '.') { state = CORE_FLOAT; } else { state = CORE_INVALID; transition_count[CORE_INVALID]++; } transition_count[CORE_START]++; break; case CORE_S1: if (ee_isdigit(NEXT_SYMBOL)) { state = CORE_INT; transition_count[CORE_S1]++; } else if (NEXT_SYMBOL == '.') { state = CORE_FLOAT; transition_count[CORE_S1]++; } else { state = CORE_INVALID; transition_count[CORE_S1]++; } break; case CORE_INT: if (NEXT_SYMBOL == '.') { state = CORE_FLOAT; transition_count[CORE_INT]++; } else if (!ee_isdigit(NEXT_SYMBOL)) { state = CORE_INVALID; transition_count[CORE_INT]++; } break; case CORE_FLOAT: if (NEXT_SYMBOL == 'E' || NEXT_SYMBOL == 'e') { state = CORE_S2; transition_count[CORE_FLOAT]++; } else if (!ee_isdigit(NEXT_SYMBOL)) { state = CORE_INVALID; transition_count[CORE_FLOAT]++; } break; case CORE_S2: if (NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-') { state = CORE_EXPONENT; transition_count[CORE_S2]++; } else { state = CORE_INVALID; transition_count[CORE_S2]++; } break; case CORE_EXPONENT: if (ee_isdigit(NEXT_SYMBOL)) { state = CORE_SCIENTIFIC; transition_count[CORE_EXPONENT]++; } else { state = CORE_INVALID; transition_count[CORE_EXPONENT]++; } break; case CORE_SCIENTIFIC: if (!ee_isdigit(NEXT_SYMBOL)) { state = CORE_INVALID; transition_count[CORE_INVALID]++; } break; default: break; } } *instr = str; return state; } ================================================ FILE: ThirdParty/Benchmarks/coremark/core_util.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include "coremark.h" /* Function: get_seed Get a values that cannot be determined at compile time. Since different embedded systems and compilers are used, 3 different methods are provided: 1 - Using a volatile variable. This method is only valid if the compiler is forced to generate code that reads the value of a volatile variable from memory at run time. Please note, if using this method, you would need to modify core_portme.c to generate training profile. 2 - Command line arguments. This is the preferred method if command line arguments are supported. 3 - System function. If none of the first 2 methods is available on the platform, a system function which is not a stub can be used. e.g. read the value on GPIO pins connected to switches, or invoke special simulator functions. */ #if (SEED_METHOD == SEED_VOLATILE) extern volatile ee_s32 seed1_volatile; extern volatile ee_s32 seed2_volatile; extern volatile ee_s32 seed3_volatile; extern volatile ee_s32 seed4_volatile; extern volatile ee_s32 seed5_volatile; ee_s32 get_seed_32(int i) { ee_s32 retval; switch (i) { case 1: retval = seed1_volatile; break; case 2: retval = seed2_volatile; break; case 3: retval = seed3_volatile; break; case 4: retval = seed4_volatile; break; case 5: retval = seed5_volatile; break; default: retval = 0; break; } return retval; } #elif (SEED_METHOD == SEED_ARG) ee_s32 parseval(char *valstring) { ee_s32 retval = 0; ee_s32 neg = 1; int hexmode = 0; if (*valstring == '-') { neg = -1; valstring++; } if ((valstring[0] == '0') && (valstring[1] == 'x')) { hexmode = 1; valstring += 2; } /* first look for digits */ if (hexmode) { while (((*valstring >= '0') && (*valstring <= '9')) || ((*valstring >= 'a') && (*valstring <= 'f'))) { ee_s32 digit = *valstring - '0'; if (digit > 9) digit = 10 + *valstring - 'a'; retval *= 16; retval += digit; valstring++; } } else { while ((*valstring >= '0') && (*valstring <= '9')) { ee_s32 digit = *valstring - '0'; retval *= 10; retval += digit; valstring++; } } /* now add qualifiers */ if (*valstring == 'K') retval *= 1024; if (*valstring == 'M') retval *= 1024 * 1024; retval *= neg; return retval; } ee_s32 get_seed_args(int i, int argc, char *argv[]) { if (argc > i) return parseval(argv[i]); return 0; } #elif (SEED_METHOD == SEED_FUNC) /* If using OS based function, you must define and implement the functions below * in core_portme.h and core_portme.c ! */ ee_s32 get_seed_32(int i) { ee_s32 retval; switch (i) { case 1: retval = portme_sys1(); break; case 2: retval = portme_sys2(); break; case 3: retval = portme_sys3(); break; case 4: retval = portme_sys4(); break; case 5: retval = portme_sys5(); break; default: retval = 0; break; } return retval; } #endif /* Function: crc* Service functions to calculate 16b CRC code. */ ee_u16 crcu8(ee_u8 data, ee_u16 crc) { ee_u8 i = 0, x16 = 0, carry = 0; for (i = 0; i < 8; i++) { x16 = (ee_u8)((data & 1) ^ ((ee_u8)crc & 1)); data >>= 1; if (x16 == 1) { crc ^= 0x4002; carry = 1; } else carry = 0; crc >>= 1; if (carry) crc |= 0x8000; else crc &= 0x7fff; } return crc; } ee_u16 crcu16(ee_u16 newval, ee_u16 crc) { crc = crcu8((ee_u8)(newval), crc); crc = crcu8((ee_u8)((newval) >> 8), crc); return crc; } ee_u16 crcu32(ee_u32 newval, ee_u16 crc) { crc = crc16((ee_s16)newval, crc); crc = crc16((ee_s16)(newval >> 16), crc); return crc; } ee_u16 crc16(ee_s16 newval, ee_u16 crc) { return crcu16((ee_u16)newval, crc); } ee_u8 check_data_types() { ee_u8 retval = 0; if (sizeof(ee_u8) != 1) { ee_printf("ERROR: ee_u8 is not an 8b datatype!\n"); retval++; } if (sizeof(ee_u16) != 2) { ee_printf("ERROR: ee_u16 is not a 16b datatype!\n"); retval++; } if (sizeof(ee_s16) != 2) { ee_printf("ERROR: ee_s16 is not a 16b datatype!\n"); retval++; } if (sizeof(ee_s32) != 4) { ee_printf("ERROR: ee_s32 is not a 32b datatype!\n"); retval++; } if (sizeof(ee_u32) != 4) { ee_printf("ERROR: ee_u32 is not a 32b datatype!\n"); retval++; } if (sizeof(ee_ptr_int) != sizeof(int *)) { ee_printf( "ERROR: ee_ptr_int is not a datatype that holds an int pointer!\n"); retval++; } if (retval > 0) { ee_printf("ERROR: Please modify the datatypes in core_portme.h!\n"); } return retval; } ================================================ FILE: ThirdParty/Benchmarks/coremark/coremark.h ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ /* Topic: Description This file contains declarations of the various benchmark functions. */ /* Configuration: TOTAL_DATA_SIZE Define total size for data algorithms will operate on */ #ifndef TOTAL_DATA_SIZE #define TOTAL_DATA_SIZE 2 * 1000 #endif #define SEED_ARG 0 #define SEED_FUNC 1 #define SEED_VOLATILE 2 #define MEM_STATIC 0 #define MEM_MALLOC 1 #define MEM_STACK 2 #include "core_portme.h" #if HAS_STDIO #include #endif #if HAS_PRINTF #define ee_printf printf #endif /* Actual benchmark execution in iterate */ void *iterate(void *pres); /* Typedef: secs_ret For machines that have floating point support, get number of seconds as a double. Otherwise an unsigned int. */ #if HAS_FLOAT typedef double secs_ret; #else typedef ee_u32 secs_ret; #endif #if MAIN_HAS_NORETURN #define MAIN_RETURN_VAL #define MAIN_RETURN_TYPE void #else #define MAIN_RETURN_VAL 0 #define MAIN_RETURN_TYPE int #endif void start_time(void); void stop_time(void); CORE_TICKS get_time(void); secs_ret time_in_secs(CORE_TICKS ticks); /* Misc useful functions */ ee_u16 crcu8(ee_u8 data, ee_u16 crc); ee_u16 crc16(ee_s16 newval, ee_u16 crc); ee_u16 crcu16(ee_u16 newval, ee_u16 crc); ee_u16 crcu32(ee_u32 newval, ee_u16 crc); ee_u8 check_data_types(void); void * portable_malloc(ee_size_t size); void portable_free(void *p); ee_s32 parseval(char *valstring); /* Algorithm IDS */ #define ID_LIST (1 << 0) #define ID_MATRIX (1 << 1) #define ID_STATE (1 << 2) #define ALL_ALGORITHMS_MASK (ID_LIST | ID_MATRIX | ID_STATE) #define NUM_ALGORITHMS 3 /* list data structures */ typedef struct list_data_s { ee_s16 data16; ee_s16 idx; } list_data; typedef struct list_head_s { struct list_head_s *next; struct list_data_s *info; } list_head; /*matrix benchmark related stuff */ #define MATDAT_INT 1 #if MATDAT_INT typedef ee_s16 MATDAT; typedef ee_s32 MATRES; #else typedef ee_f16 MATDAT; typedef ee_f32 MATRES; #endif typedef struct MAT_PARAMS_S { int N; MATDAT *A; MATDAT *B; MATRES *C; } mat_params; /* state machine related stuff */ /* List of all the possible states for the FSM */ typedef enum CORE_STATE { CORE_START = 0, CORE_INVALID, CORE_S1, CORE_S2, CORE_INT, CORE_FLOAT, CORE_EXPONENT, CORE_SCIENTIFIC, NUM_CORE_STATES } core_state_e; /* Helper structure to hold results */ typedef struct RESULTS_S { /* inputs */ ee_s16 seed1; /* Initializing seed */ ee_s16 seed2; /* Initializing seed */ ee_s16 seed3; /* Initializing seed */ void * memblock[4]; /* Pointer to safe memory location */ ee_u32 size; /* Size of the data */ ee_u32 iterations; /* Number of iterations to execute */ ee_u32 execs; /* Bitmask of operations to execute */ struct list_head_s *list; mat_params mat; /* outputs */ ee_u16 crc; ee_u16 crclist; ee_u16 crcmatrix; ee_u16 crcstate; ee_s16 err; /* multithread specific */ core_portable port; } core_results; /* Multicore execution handling */ #if (MULTITHREAD > 1) ee_u8 core_start_parallel(core_results *res); ee_u8 core_stop_parallel(core_results *res); #endif /* list benchmark functions */ list_head *core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed); ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx); /* state benchmark functions */ void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p); ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock, ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc); /* matrix benchmark functions */ ee_u32 core_init_matrix(ee_u32 blksize, void * memblk, ee_s32 seed, mat_params *p); ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc); ================================================ FILE: ThirdParty/Benchmarks/coremark/coremark.md5 ================================================ 9007fe7861b60ee6f210d156b62974c8 core_list_join.c 4a9e6dadce1ac3866381021fbe843fc9 core_main.c 5fa21a0f7c3964167c9691db531ca652 core_matrix.c fb49e7605c125306575a83f14f5798ac core_state.c 45540ba2145adea1ec7ea2c72a1fbbcb core_util.c 8ca974c013b380dc7f0d6d1afb76eb2d coremark.h ================================================ FILE: ThirdParty/Benchmarks/coremark/cygwin/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on include posix/core_portme.mak ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/READM.md ================================================ This folder contains the original, unaltered documents from the CoreMark V1.0 release. ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/PIC32/core_portme-mak.html ================================================ core_portme.mak - CoreMark

core_portme.mak

Summary
core_portme.mak
Variables
OUTFLAGUse this flag to define how to to get an executable (e.g -o)
CFLAGSUse this flag to define compiler options.
LFLAGS_ENDDefine any libraries needed for linking or other flags that should come at the end of the link line (e.g.
SEPARATE_COMPILEDefine if you need to separate compilation from link stage.
PORT_OBJSPort specific object files can be added here
Build Targets
port_prebuildGenerate any files that are needed before actual build starts.
port_postbuildGenerate any files that are needed after actual build end.
port_postrunDo platform specific after run stuff.
port_prerunDo platform specific after run stuff.
port_postloadDo platform specific after load stuff.
port_preloadDo platform specific before load stuff.
Variables
OPATH
PERLDefine perl executable to calculate the geomean if running separate.

Variables

OUTFLAG

Use this flag to define how to to get an executable (e.g -o)

CFLAGS

Use this flag to define compiler options.  Note, you can add compiler options from the command line using XCFLAGS=”other flags”

LFLAGS_END

Define any libraries needed for linking or other flags that should come at the end of the link line (e.g. linker scripts).  Note: On certain platforms, the default clock_gettime implementation is supported but requires linking of librt.

SEPARATE_COMPILE

Define if you need to separate compilation from link stage.  In this case, you also need to define below how to create an object file, and how to link.

PORT_OBJS

Port specific object files can be added here

Build Targets

port_prebuild

Generate any files that are needed before actual build starts.  E.g. generate profile guidance files.  Sample PGO generation for gcc enabled with PGO=1

  • First, check if PGO was defined on the command line, if so, need to add -fprofile-use to compile line.
  • Second, if PGO reference has not yet been generated, add a step to the prebuild that will build a profile-generate version and run it.
NoteUsing REBUILD=1

Use make PGO=1 to invoke this sample processing.

port_postbuild

Generate any files that are needed after actual build end.  E.g. change format to srec, bin, zip in order to be able to load into flash

port_postrun

Do platform specific after run stuff.  E.g. reset the board, backup the logfiles etc.

port_prerun

Do platform specific after run stuff.  E.g. reset the board, backup the logfiles etc.

port_postload

Do platform specific after load stuff.  E.g. reset the reset power to the flash eraser

port_preload

Do platform specific before load stuff.  E.g. reset the reset power to the flash eraser

Variables

OPATH

Path to the output folder.  Defaultcurrent folder.

PERL

Define perl executable to calculate the geomean if running separate.

================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/core_list_join-c.html ================================================ /cygdrive/d/dev/code/coremark/core_list_join.c - CoreMark

core_list_join.c

Summary
core_list_join.c
DescriptionBenchmark using a linked list.
Functions
cmp_complexCompare the data item in a list cell.
cmp_idxCompare the idx item in a list cell, and regen the data.
core_list_initInitialize list with data.
core_list_insertInsert an item to the list
core_list_removeRemove an item from the list.
core_list_undo_removeUndo a remove operation.
core_list_findFind an item in the list
core_list_reverseReverse a list
core_list_mergesortSort the list in place without recursion.

Description

Benchmark using a linked list.

Linked list is a common data structure used in many applications.

For our purposes, this will excercise the memory units of the processor.  In particular, usage of the list pointers to find and alter data.

We are not using Malloc since some platforms do not support this library.

Instead, the memory block being passed in is used to create a list, and the benchmark takes care not to add more items then can be accomodated by the memory block.  The porting layer will make sure that we have a valid memory block.

All operations are done in place, without using any extra memory.

The list itself contains list pointers and pointers to data items.  Data items contain the following:

idxAn index that captures the initial order of the list.
dataVariable data initialized based on the input parameters.  The 16b are divided as follows:
  • Upper 8b are backup of original data.
  • Bit 7 indicates if the lower 7 bits are to be used as is or calculated.
  • Bits 0-2 indicate type of operation to perform to get a 7b value.
  • Bits 3-6 provide input for the operation.

Functions

cmp_complex

ee_s32 cmp_complex(list_data *a,
list_data *b,
core_results *res)

Compare the data item in a list cell.

Can be used by mergesort.

cmp_idx

ee_s32 cmp_idx(list_data *a,
list_data *b,
core_results *res)

Compare the idx item in a list cell, and regen the data.

Can be used by mergesort.

core_list_init

list_head *core_list_init(ee_u32 blksize,
list_head *memblock,
ee_s16 seed)

Initialize list with data.

Parameters

blksizeSize of memory to be initialized.
memblockPointer to memory block.
seedActual values chosen depend on the seed parameter.  The seed parameter MUST be supplied from a source that cannot be determined at compile time

Returns

Pointer to the head of the list.

core_list_insert

list_head *core_list_insert_new(list_head *insert_point,
list_data *info,
list_head **memblock,
list_data **datablock ,
list_head *memblock_end,
list_data *datablock_end)

Insert an item to the list

Parameters

insert_pointwhere to insert the item.
infodata for the cell.
memblockpointer for the list header
datablockpointer for the list data
memblock_endend of region for list headers
datablock_endend of region for list data

Returns

Pointer to new item.

core_list_remove

list_head *core_list_remove(list_head *item)

Remove an item from the list.

Operation

For a singly linked list, remove by copying the data from the next item over to the current cell, and unlinking the next item.

Note

since there is always a fake item at the end of the list, no need to check for NULL.

Returns

Removed item.

core_list_undo_remove

list_head *core_list_undo_remove(list_head *item_removed,
list_head *item_modified)

Undo a remove operation.

Operation

Since we want each iteration of the benchmark to be exactly the same, we need to be able to undo a remove.  Link the removed item back into the list, and switch the info items.

Parameters

item_removedReturn value from the core_list_remove
item_modifiedList item that was modified during core_list_remove

Returns

The item that was linked back to the list.

core_list_find

list_head *core_list_find(list_head *list,
list_data *info)

Find an item in the list

Operation

Find an item by idx (if not 0) or specific data value

Parameters

listlist head
infoidx or data to find

Returns

Found item, or NULL if not found.

core_list_reverse

list_head *core_list_reverse(list_head *list)

Reverse a list

Operation

Rearrange the pointers so the list is reversed.

Parameters

listlist head
infoidx or data to find

Returns

Found item, or NULL if not found.

core_list_mergesort

list_head *core_list_mergesort(list_head *list,
list_cmp cmp,
core_results *res)

Sort the list in place without recursion.

Description

Use mergesort, as for linked list this is a realistic solution.  Also, since this is aimed at embedded, care was taken to use iterative rather then recursive algorithm.  The sort can either return the list to original order (by idx) , or use the data item to invoke other other algorithms and change the order of the list.

Parameters

listlist to be sorted.
cmpcmp function to use

Returns

New head of the list.

Note

We have a special header for the list that will always be first, but the algorithm could theoretically modify where the list starts.

ee_s32 cmp_complex(list_data *a,
list_data *b,
core_results *res)
Compare the data item in a list cell.
ee_s32 cmp_idx(list_data *a,
list_data *b,
core_results *res)
Compare the idx item in a list cell, and regen the data.
list_head *core_list_init(ee_u32 blksize,
list_head *memblock,
ee_s16 seed)
Initialize list with data.
list_head *core_list_insert_new(list_head *insert_point,
list_data *info,
list_head **memblock,
list_data **datablock ,
list_head *memblock_end,
list_data *datablock_end)
Insert an item to the list
list_head *core_list_remove(list_head *item)
Remove an item from the list.
list_head *core_list_undo_remove(list_head *item_removed,
list_head *item_modified)
Undo a remove operation.
list_head *core_list_find(list_head *list,
list_data *info)
Find an item in the list
list_head *core_list_reverse(list_head *list)
Reverse a list
list_head *core_list_mergesort(list_head *list,
list_cmp cmp,
core_results *res)
Sort the list in place without recursion.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/core_main-c.html ================================================ core_main.c - CoreMark

core_main.c

This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.

Summary
core_main.cThis file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
Functions
iterateRun the benchmark for a specified number of iterations.
mainMain entry routine for the benchmark.

Functions

iterate

Run the benchmark for a specified number of iterations.

Operation

For each type of benchmarked algorithm: a - Initialize the data block for the algorithm. b - Execute the algorithm N times.

Returns

NULL.

main

#if MAIN_HAS_NOARGC MAIN_RETURN_TYPE main(void)

Main entry routine for the benchmark.  This function is responsible for the following steps:

1Initialize input seeds from a source that cannot be determined at compile time.
2Initialize memory block for use.
3Run and time the benchmark.
4Report results, testing the validity of the output if the seeds are known.

Arguments

1first seed : Any value
2second seed : Must be identical to first for iterations to be identical
3third seed : Any value, should be at least an order of magnitude less then the input size, but bigger then 32.
4Iterations : Special, if set to 0, iterations will be automatically determined such that the benchmark will run between 10 to 100 secs
#if MAIN_HAS_NOARGC MAIN_RETURN_TYPE main(void)
Main entry routine for the benchmark.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/core_matrix-c.html ================================================ /cygdrive/d/dev/code/coremark/core_matrix.c - CoreMark

core_matrix.c

Summary
core_matrix.c
DescriptionMatrix manipulation benchmark
Functions
core_bench_matrixBenchmark function
matrix_testPerform matrix manipulation.
matrix_sumCalculate a function that depends on the values of elements in the matrix.
matrix_mul_constMultiply a matrix by a constant.
matrix_add_constAdd a constant value to all elements of a matrix.
matrix_mul_vectMultiply a matrix by a vector.
matrix_mul_matrixMultiply a matrix by a matrix.
matrix_mul_matrix_bitextractMultiply a matrix by a matrix, and extract some bits from the result.

Description

Matrix manipulation benchmark

This very simple algorithm forms the basis of many more complex algorithms.

The tight inner loop is the focus of many optimizations (compiler as well as hardware based) and is thus relevant for embedded processing.

The total available data space will be divided to 3 parts

NxN Matrix Ainitialized with small values (upper 3/4 of the bits all zero).
NxN Matrix Binitialized with medium values (upper half of the bits all zero).
NxN Matrix Cused for the result.

The actual values for A and B must be derived based on input that is not available at compile time.

Functions

core_bench_matrix

ee_u16 core_bench_matrix(mat_params *p,
ee_s16 seed,
ee_u16 crc)

Benchmark function

Iterate matrix_test N times, changing the matrix values slightly by a constant amount each time.

matrix_test

ee_s16 matrix_test(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B,
MATDAT val)

Perform matrix manipulation.

Parameters

NDimensions of the matrix.
Cmemory for result matrix.
Ainput matrix
Boperator matrix (not changed during operations)

Returns

A CRC value that captures all results calculated in the function.  In particular, crc of the value calculated on the result matrix after each step by matrix_sum.

Operation

1Add a constant value to all elements of a matrix.
2Multiply a matrix by a constant.
3Multiply a matrix by a vector.
4Multiply a matrix by a matrix.
5Add a constant value to all elements of a matrix.

After the last step, matrix A is back to original contents.

matrix_sum

ee_s16 matrix_sum(ee_u32 N,
MATRES *C,
MATDAT clipval)

Calculate a function that depends on the values of elements in the matrix.

For each element, accumulate into a temporary variable.

As long as this value is under the parameter clipval, add 1 to the result if the element is bigger then the previous.

Otherwise, reset the accumulator and add 10 to the result.

matrix_mul_const

void matrix_mul_const(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT val)

Multiply a matrix by a constant.  This could be used as a scaler for instance.

matrix_add_const

void matrix_add_const(ee_u32 N,
MATDAT *A,
MATDAT val)

Add a constant value to all elements of a matrix.

matrix_mul_vect

void matrix_mul_vect(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)

Multiply a matrix by a vector.  This is common in many simple filters (e.g. fir where a vector of coefficients is applied to the matrix.)

matrix_mul_matrix

void matrix_mul_matrix(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)

Multiply a matrix by a matrix.  Basic code is used in many algorithms, mostly with minor changes such as scaling.

matrix_mul_matrix_bitextract

void matrix_mul_matrix_bitextract(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)

Multiply a matrix by a matrix, and extract some bits from the result.  Basic code is used in many algorithms, mostly with minor changes such as scaling.

ee_u16 core_bench_matrix(mat_params *p,
ee_s16 seed,
ee_u16 crc)
Benchmark function
ee_s16 matrix_test(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B,
MATDAT val)
Perform matrix manipulation.
ee_s16 matrix_sum(ee_u32 N,
MATRES *C,
MATDAT clipval)
Calculate a function that depends on the values of elements in the matrix.
void matrix_mul_const(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT val)
Multiply a matrix by a constant.
void matrix_add_const(ee_u32 N,
MATDAT *A,
MATDAT val)
Add a constant value to all elements of a matrix.
void matrix_mul_vect(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a vector.
void matrix_mul_matrix(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a matrix.
void matrix_mul_matrix_bitextract(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a matrix, and extract some bits from the result.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/core_state-c.html ================================================ /cygdrive/d/dev/code/coremark/core_state.c - CoreMark

core_state.c

Summary
core_state.c
DescriptionSimple state machines like this one are used in many embedded products.
Functions
core_bench_stateBenchmark function
core_init_stateInitialize the input data for the state machine.
core_state_transitionActual state machine.

Description

Simple state machines like this one are used in many embedded products.

For more complex state machines, sometimes a state transition table implementation is used instead, trading speed of direct coding for ease of maintenance.

Since the main goal of using a state machine in CoreMark is to excercise the switch/if behaviour, we are using a small moore machine.

In particular, this machine tests type of string input, trying to determine whether the input is a number or something else.  (see core_state).

core_state

Functions

core_bench_state

ee_u16 core_bench_state(ee_u32 blksize,
ee_u8 *memblock,
ee_s16 seed1,
ee_s16 seed2,
ee_s16 step,
ee_u16 crc)

Benchmark function

Go over the input twice, once direct, and once after introducing some corruption.

core_init_state

void core_init_state(ee_u32 size,
ee_s16 seed,
ee_u8 *p)

Initialize the input data for the state machine.

Populate the input with several predetermined strings, interspersed.  Actual patterns chosen depend on the seed parameter.

Note

The seed parameter MUST be supplied from a source that cannot be determined at compile time

core_state_transition

enum CORE_STATE core_state_transition(ee_u8 **instr ,
ee_u32 *transition_count)

Actual state machine.

The state machine will continue scanning until either

1an invalid input is detcted.
2a valid number has been detected.

The input pointer is updated to point to the end of the token, and the end state is returned (either specific format determined or invalid).

ee_u16 core_bench_state(ee_u32 blksize,
ee_u8 *memblock,
ee_s16 seed1,
ee_s16 seed2,
ee_s16 step,
ee_u16 crc)
Benchmark function
void core_init_state(ee_u32 size,
ee_s16 seed,
ee_u8 *p)
Initialize the input data for the state machine.
enum CORE_STATE core_state_transition(ee_u8 **instr ,
ee_u32 *transition_count)
Actual state machine.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/core_util-c.html ================================================ /cygdrive/d/dev/code/coremark/core_util.c - CoreMark

core_util.c

Summary
core_util.c
Functions
get_seedGet a values that cannot be determined at compile time.
crc*Service functions to calculate 16b CRC code.

Functions

get_seed

Get a values that cannot be determined at compile time.

Since different embedded systems and compilers are used, 3 different methods are provided

1Using a volatile variable.  This method is only valid if the compiler is forced to generate code that reads the value of a volatile variable from memory at run time.  Please note, if using this method, you would need to modify core_portme.c to generate training profile.
2Command line arguments.  This is the preferred method if command line arguments are supported.
3System function.  If none of the first 2 methods is available on the platform, a system function which is not a stub can be used.

e.g. read the value on GPIO pins connected to switches, or invoke special simulator functions.

crc*

Service functions to calculate 16b CRC code.

================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/coremark-h.html ================================================ /cygdrive/d/dev/code/coremark/coremark.h - CoreMark

coremark.h

Summary
coremark.h
DescriptionThis file contains declarations of the various benchmark functions.
Configuration
TOTAL_DATA_SIZEDefine total size for data algorithms will operate on
Types
secs_retFor machines that have floating point support, get number of seconds as a double.

Description

This file contains declarations of the various benchmark functions.

Configuration

TOTAL_DATA_SIZE

Define total size for data algorithms will operate on

Types

secs_ret

For machines that have floating point support, get number of seconds as a double.  Otherwise an unsigned int.

================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/linux/core_portme-c.html ================================================ core_portme.c - CoreMark

core_portme.c

Summary
core_portme.c
portable_mallocProvide malloc() functionality in a platform specific way.
portable_freeProvide free() functionality in a platform specific way.
TIMER_RES_DIVIDERDivider to trade off timer resolution and total time that can be measured.
start_timeThis function will be called right before starting the timed portion of the benchmark.
stop_timeThis function will be called right after ending the timed portion of the benchmark.
get_timeReturn an abstract “ticks” number that signifies time on the system.
time_in_secsConvert the value returned by get_time to seconds.
portable_initTarget specific initialization code Test for some common mistakes.
portable_finiTarget specific final code
core_start_parallelStart benchmarking in a parallel context.
core_stop_parallelStop a parallel context execution of coremark, and gather the results.

portable_malloc

void *portable_malloc(size_t size)

Provide malloc() functionality in a platform specific way.

portable_free

void portable_free(void *p)

Provide free() functionality in a platform specific way.

TIMER_RES_DIVIDER

Divider to trade off timer resolution and total time that can be measured.

Use lower values to increase resolution, but make sure that overflow does not occur.  If there are issues with the return value overflowing, increase this value.

start_time

void start_time(void)

This function will be called right before starting the timed portion of the benchmark.

Implementation may be capturing a system timer (as implemented in the example code) or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0.

stop_time

void stop_time(void)

This function will be called right after ending the timed portion of the benchmark.

Implementation may be capturing a system timer (as implemented in the example code) or other system parameters - e.g. reading the current value of cpu cycles counter.

get_time

CORE_TICKS get_time(void)

Return an abstract “ticks” number that signifies time on the system.

Actual value returned may be cpu cycles, milliseconds or any other value, as long as it can be converted to seconds by time_in_secs.  This methodology is taken to accomodate any hardware or simulated platform.  The sample implementation returns millisecs by default, and the resolution is controlled by TIMER_RES_DIVIDER

time_in_secs

secs_ret time_in_secs(CORE_TICKS ticks)

Convert the value returned by get_time to seconds.

The secs_ret type is used to accomodate systems with no support for floating point.  Default implementation implemented by the EE_TICKS_PER_SEC macro above.

portable_init

void portable_init(core_portable *p,
int *argc,
char *argv[])

Target specific initialization code Test for some common mistakes.

portable_fini

void portable_fini(core_portable *p)

Target specific final code

core_start_parallel

Start benchmarking in a parallel context.

Three implementations are provided, one using pthreads, one using fork and shared mem, and one using fork and sockets.  Other implementations using MCAPI or other standards can easily be devised.

core_stop_parallel

Stop a parallel context execution of coremark, and gather the results.

Three implementations are provided, one using pthreads, one using fork and shared mem, and one using fork and sockets.  Other implementations using MCAPI or other standards can easily be devised.

void *portable_malloc(size_t size)
Provide malloc() functionality in a platform specific way.
void portable_free(void *p)
Provide free() functionality in a platform specific way.
void start_time(void)
This function will be called right before starting the timed portion of the benchmark.
void stop_time(void)
This function will be called right after ending the timed portion of the benchmark.
CORE_TICKS get_time(void)
Return an abstract “ticks” number that signifies time on the system.
secs_ret time_in_secs(CORE_TICKS ticks)
Convert the value returned by get_time to seconds.
void portable_init(core_portable *p,
int *argc,
char *argv[])
Target specific initialization code Test for some common mistakes.
void portable_fini(core_portable *p)
Target specific final code
Divider to trade off timer resolution and total time that can be measured.
For machines that have floating point support, get number of seconds as a double.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/linux/core_portme-h.html ================================================ core_portme.h - CoreMark

core_portme.h

Summary
core_portme.h
DescriptionThis file contains configuration constants required to execute on different platforms
Configuration
HAS_FLOATDefine to 1 if the platform supports floating point.
HAS_TIME_HDefine to 1 if platform has the time.h header file, and implementation of functions thereof.
USE_CLOCKDefine to 1 if platform has the time.h header file, and implementation of functions thereof.
HAS_STDIODefine to 1 if the platform has stdio.h.
HAS_PRINTFDefine to 1 if the platform has stdio.h and implements the printf function.
CORE_TICKSDefine type of return from the timing functions.
SEED_METHODDefines method to get seed values that cannot be computed at compile time.
MEM_METHODDefines method to get a block of memry.
MULTITHREADDefine for parallel execution
USE_PTHREADSample implementation for launching parallel contexts This implementation uses pthread_thread_create and pthread_join.
USE_FORKSample implementation for launching parallel contexts This implementation uses fork, waitpid, shmget,shmat and shmdt.
USE_SOCKETSample implementation for launching parallel contexts This implementation uses fork, socket, sendto and recvfrom
MAIN_HAS_NOARGCNeeded if platform does not support getting arguments to main.
MAIN_HAS_NORETURNNeeded if platform does not support returning a value from main.
Variables
default_num_contextsNumber of contexts to spawn in multicore context.

Description

This file contains configuration constants required to execute on different platforms

Configuration

HAS_FLOAT

Define to 1 if the platform supports floating point.

HAS_TIME_H

Define to 1 if platform has the time.h header file, and implementation of functions thereof.

USE_CLOCK

Define to 1 if platform has the time.h header file, and implementation of functions thereof.

HAS_STDIO

Define to 1 if the platform has stdio.h.

HAS_PRINTF

Define to 1 if the platform has stdio.h and implements the printf function.

CORE_TICKS

Define type of return from the timing functions.

SEED_METHOD

Defines method to get seed values that cannot be computed at compile time.

Valid values

SEED_ARGfrom command line.
SEED_FUNCfrom a system function.
SEED_VOLATILEfrom volatile variables.

MEM_METHOD

Defines method to get a block of memry.

Valid values

MEM_MALLOCfor platforms that implement malloc and have malloc.h.
MEM_STATICto use a static memory array.
MEM_STACKto allocate the data block on the stack (NYI).

MULTITHREAD

Define for parallel execution

Valid values

1only one context (default).
N>1will execute N copies in parallel.

Note

If this flag is defined to more then 1, an implementation for launching parallel contexts must be defined.

Two sample implementations are provided.  Use USE_PTHREAD or USE_FORK to enable them.

It is valid to have a different implementation of core_start_parallel and <core_end_parallel> in core_portme.c, to fit a particular architecture.

USE_PTHREAD

Sample implementation for launching parallel contexts This implementation uses pthread_thread_create and pthread_join.

Valid values

0Do not use pthreads API.
1Use pthreads API

Note

This flag only matters if MULTITHREAD has been defined to a value greater then 1.

USE_FORK

Sample implementation for launching parallel contexts This implementation uses fork, waitpid, shmget,shmat and shmdt.

Valid values

0Do not use fork API.
1Use fork API

Note

This flag only matters if MULTITHREAD has been defined to a value greater then 1.

USE_SOCKET

Sample implementation for launching parallel contexts This implementation uses fork, socket, sendto and recvfrom

Valid values

0Do not use fork and sockets API.
1Use fork and sockets API

Note

This flag only matters if MULTITHREAD has been defined to a value greater then 1.

MAIN_HAS_NOARGC

Needed if platform does not support getting arguments to main.

Valid values

0argc/argv to main is supported
1argc/argv to main is not supported

MAIN_HAS_NORETURN

Needed if platform does not support returning a value from main.

Valid values

0main returns an int, and return value will be 0.
1platform does not support returning a value from main

Variables

default_num_contexts

extern ee_u32 default_num_contexts

Number of contexts to spawn in multicore context.  Override this global value to change number of contexts used.

Note

This value may not be set higher then the MULTITHREAD define.

To experiment, you can set the MULTITHREAD define to the highest value expected, and use argc/argv in the portable_init to set this value from the command line.

extern ee_u32 default_num_contexts
Number of contexts to spawn in multicore context.
Sample implementation for launching parallel contexts This implementation uses pthread_thread_create and pthread_join.
Sample implementation for launching parallel contexts This implementation uses fork, waitpid, shmget,shmat and shmdt.
Start benchmarking in a parallel context.
Define for parallel execution
void portable_init(core_portable *p,
int *argc,
char *argv[])
Target specific initialization code Test for some common mistakes.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/linux/core_portme-mak.html ================================================ core_portme.mak - CoreMark

core_portme.mak

Summary
core_portme.mak
Variables
OUTFLAGUse this flag to define how to to get an executable (e.g -o)
CCUse this flag to define compiler to use
CFLAGSUse this flag to define compiler options.
LFLAGS_ENDDefine any libraries needed for linking or other flags that should come at the end of the link line (e.g.
PORT_SRCSPort specific source files can be added here
LOADDefine this flag if you need to load to a target, as in a cross compile environment.
RUNDefine this flag if running does not consist of simple invocation of the binary.
SEPARATE_COMPILEDefine if you need to separate compilation from link stage.
PORT_OBJSPort specific object files can be added here
Build Targets
port_prebuildGenerate any files that are needed before actual build starts.
port_postbuildGenerate any files that are needed after actual build end.
port_postrunDo platform specific after run stuff.
port_prerunDo platform specific after run stuff.
port_postloadDo platform specific after load stuff.
port_preloadDo platform specific before load stuff.
Variables
OPATH
PERLDefine perl executable to calculate the geomean if running separate.

Variables

OUTFLAG

Use this flag to define how to to get an executable (e.g -o)

CC

Use this flag to define compiler to use

CFLAGS

Use this flag to define compiler options.  Note, you can add compiler options from the command line using XCFLAGS=”other flags”

LFLAGS_END

Define any libraries needed for linking or other flags that should come at the end of the link line (e.g. linker scripts).  Note: On certain platforms, the default clock_gettime implementation is supported but requires linking of librt.

PORT_SRCS

Port specific source files can be added here

LOAD

Define this flag if you need to load to a target, as in a cross compile environment.

RUN

Define this flag if running does not consist of simple invocation of the binary.  In a cross compile environment, you need to define this.

SEPARATE_COMPILE

Define if you need to separate compilation from link stage.  In this case, you also need to define below how to create an object file, and how to link.

PORT_OBJS

Port specific object files can be added here

Build Targets

port_prebuild

Generate any files that are needed before actual build starts.  E.g. generate profile guidance files.  Sample PGO generation for gcc enabled with PGO=1

  • First, check if PGO was defined on the command line, if so, need to add -fprofile-use to compile line.
  • Second, if PGO reference has not yet been generated, add a step to the prebuild that will build a profile-generate version and run it.
NoteUsing REBUILD=1

Use make PGO=1 to invoke this sample processing.

port_postbuild

Generate any files that are needed after actual build end.  E.g. change format to srec, bin, zip in order to be able to load into flash

port_postrun

Do platform specific after run stuff.  E.g. reset the board, backup the logfiles etc.

port_prerun

Do platform specific after run stuff.  E.g. reset the board, backup the logfiles etc.

port_postload

Do platform specific after load stuff.  E.g. reset the reset power to the flash eraser

port_preload

Do platform specific before load stuff.  E.g. reset the reset power to the flash eraser

Variables

OPATH

Path to the output folder.  Defaultcurrent folder.

PERL

Define perl executable to calculate the geomean if running separate.

================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/readme-txt.html ================================================ CoreMark

CoreMark

Summary
CoreMark
WelcomeCopyright © 2009 EEMBC All rights reserved.
Building and runningDownload the release files from the www.coremark.org.
DocumentationWhen you unpack the documentation (tar -vzxf coremark_<version>_docs.tgz) a docs folder will be created.
Submitting resultsCoreMark results can be submitted on the web.
Run rulesWhat is and is not allowed.
Reporting rulesHow to report results on a data sheet?
Log File FormatThe log files have the following format
LegalSee LICENSE.txt or the word document file under docs/LICENSE.doc.
CreditsMany thanks to all of the individuals who helped with the development or testing of CoreMark including (Sorted by company name)

Welcome

Copyright © 2009 EEMBC All rights reserved.  CoreMark is a trademark of EEMBC and EEMBC is a registered trademark of the Embedded Microprocessor Benchmark Consortium.

CoreMark’s primary goals are simplicity and providing a method for testing only a processor’s core features.

For more information about EEMBC’s comprehensive embedded benchmark suites, please see www.eembc.org.

Building and running

Download the release files from the www.coremark.org.  You can verify the download using the coremark_<version>.md5 file

md5sum -c coremark_<version>.md5

Unpack the distribution (tar -vzxf coremark_<version>.tgz && tar -vzxf coremark_<version>_docs.tgz) then change to the coremark_<version> folder.

To build and run the benchmark, type

make

Full results are available in the files run1.log and run2.log.  CoreMark result can be found in run1.log.

For self hosted Linux or Cygwin platforms, a simple make should work.

Cross Compile

For cross compile platforms please adjust core_portme.mak, core_portme.h (and possibly core_portme.c) according to the specific platform used.  When porting to a new platform, it is recommended to copy one of the default port folders (e.g. mkdir <platform> && cp linux/* <platform>), adjust the porting files, and run

make PORT_DIR=<platform>

Systems without make

The following files need to be compiled:

For example

gcc -O2 -o coremark.exe core_list_join.c core_main.c core_matrix.c core_state.c core_util.c simple/core_portme.c -DPERFORMANCE_RUN=1 -DITERATIONS=1000
./coremark.exe > run1.log

The above will compile the benchmark for a performance run and 1000 iterations.  Output is redirected to run1.log.

Make targets

runDefault target, creates run1.log and run2.log.
run1.logRun the benchmark with performance parameters, and output to run1.log
run2.logRun the benchmark with validation parameters, and output to run2.log
run3.logRun the benchmark with profile generation parameters, and output to run3.log
compilecompile the benchmark executable
linklink the benchmark executable
checktest MD5 of sources that may not be modified
cleanclean temporary files

ITERATIONS

By default, the benchmark will run between 10-100 seconds.  To override, use ITERATIONS=N

make ITERATIONS=10

Will run the benchmark for 10 iterations.  It is recommended to set a specific number of iterations in certain situations e.g.:

  • Running with a simulator
  • Measuring power/energy
  • Timing cannot be restarted

Minimum required run time

Results are only valid for reporting if the benchmark ran for at least 10 secs!

XCFLAGS

To add compiler flags from the command line, use XCFLAGS e.g.

make XCFLAGS="-g -DMULTITHREAD=4 -DUSE_FORK=1"
  • CORE_DEBUG

Define to compile for a debug run if you get incorrect CRC.

make XCFLAGS="-DCORE_DEBUG=1"
  • Parallel Execution

Use XCFLAGS=-DMULTITHREAD=N where N is number of threads to run in parallel.  Several implementations are available to execute in multiple contexts, or you can implement your own in core_portme.c.

make XCFLAGS="-DMULTITHREAD=4 -DUSE_PTHREAD"

Above will compile the benchmark for execution on 4 cores, using POSIX Threads API.

REBUILD

To force rebuild, add the flag REBUILD to the command line

make REBUILD=1

Check core_portme.mak for more important options.

Run parameters for the benchmark executable

Coremark executable takes several parameters as follows (if main accepts arguments).  1st - A seed value used for initialization of data.  2nd - A seed value used for initialization of data.  3rd - A seed value used for initialization of data.  4th - Number of iterations (0 for auto : default value) 5th - Reserved for internal use.  6th - Reserved for internal use.  7th - For malloc users only, ovreride the size of the input data buffer.

The run target from make will run coremark with 2 different data initialization seeds.

Alternative parameters

If not using malloc or command line arguments are not supported, the buffer size for the algorithms must be defined via the compiler define TOTAL_DATA_SIZE.  TOTAL_DATA_SIZE must be set to 2000 bytes (default) for standard runs.  The default for such a target when testing different configurations could be ...

make XCFLAGS="-DTOTAL_DATA_SIZE=6000 -DMAIN_HAS_NOARGC=1"

Documentation

When you unpack the documentation (tar -vzxf coremark_<version>_docs.tgz) a docs folder will be created.  Check the file docs/html/index.html and the website http://www.coremark.org for more info.

Submitting results

CoreMark results can be submitted on the web.

Open a web browser and go to http://www.coremark.org- /benchmark- /index.php?pg=benchmark Select the link to add a new score and follow the instructions.

Run rules

What is and is not allowed.

Required

1The benchmark needs to run for at least 10 seconds.
2All validation must succeed for seeds 0,0,0x66 and 0x3415,0x3415,0x66, buffer size of 2000 bytes total.
  • If not using command line arguments to main:
make XCFLAGS="-DPERFORMANCE_RUN=1" REBUILD=1 run1.log
make XCFLAGS="-DVALIDATION_RUN=1" REBUILD=1 run2.log
3If using profile guided optimization, profile must be generated using seeds of 8,8,8, and buffer size of 1200 bytes total.
make XCFLAGS="-DTOTAL_DATA_SIZE=1200 -DPROFILE_RUN=1" REBUILD=1 run3.log
4All source files must be compiled with the same flags.
5All data type sizes must match size in bits such that:
  • ee_u8 is an 8 bits datatype.
  • ee_s16 is an 16 bits datatype.
  • ee_u16 is an 16 bits datatype.
  • ee_s32 is an 32 bits datatype.
  • ee_u32 is an 32 bits datatype.

Allowed

  • Changing number of iterations
  • Changing toolchain and build/load/run options
  • Changing method of acquiring a data memory block
  • Changing the method of acquiring seed values
  • Changing implementation in core_portme.c
  • Changing configuration values in core_portme.h
  • Changing core_portme.mak

Not allowed

  • Changing of source file other then core_portme* (use make check to validate)

Reporting rules

How to report results on a data sheet?

CoreMark 1.0 : N / C [/ P] [/ M]

NNumber of iterations per second with seeds 0,0,0x66,size=2000)
CCompiler version and flags
PParameters such as data and code allocation specifics
  • This parameter may be omitted if all data was allocated on the heap in RAM.
  • This parameter may not be omitted when reporting CoreMark/MHz
MType of parallel execution (if used) and number of contexts This parameter may be omitted if parallel execution was not used.

e.g.

CoreMark 1.0 : 128 / GCC 4.1.2 -O2 -fprofile-use / Heap in TCRAM / FORK:2

or

CoreMark 1.0 : 1400 / GCC 3.4 -O4

If reporting scaling results, the results must be reported as follows

CoreMark/MHz 1.0 : N / C / P [/ M]

PWhen reporting scaling results, memory parameter must also indicate memory frequency:core frequency ratio.
  • If the core has cache and cache frequency to core frequency ratio is configurable, that must also be included.

e.g.

CoreMark/MHz 1.0 : 1.47 / GCC 4.1.2 -O2 / DDR3(Heap) 30:1 Memory 1:1 Cache

Log File Format

The log files have the following format

2K performance run parameters for coremark. (Run type)
CoreMark Size       : 666                   (Buffer size)
Total ticks         : 25875                 (platform dependent value)
Total time (secs)   : 25.875000             (actual time in seconds)
Iterations/Sec      : 3864.734300           (Performance value to report)
Iterations          : 100000                (number of iterations used)
Compiler version    : GCC3.4.4              (Compiler and version)
Compiler flags      : -O2                   (Compiler and linker flags)
Memory location     : Code in flash, data in on chip RAM
seedcrc             : 0xe9f5                (identifier for the input seeds)
[0]crclist          : 0xe714                (validation for list part)
[0]crcmatrix        : 0x1fd7                (validation for matrix part)
[0]crcstate         : 0x8e3a                (validation for state part)
[0]crcfinal         : 0x33ff                (iteration dependent output)
Correct operation validated. See README.md for run and reporting rules.  (*Only when run is successful*)
CoreMark 1.0 : 6508.490622 / GCC3.4.4 -O2 / Heap                          (*Only on a successful performance run*)

Legal

See LICENSE.txt or the word document file under docs/LICENSE.doc.  For more information on your legal rights to use this benchmark, please see http://www.coremark.org- /download- /register.php?pg=register

Credits

Many thanks to all of the individuals who helped with the development or testing of CoreMark including (Sorted by company name)

  • Alan Anderson, ADI
  • Adhikary Rajiv, ADI
  • Elena Stohr, ARM
  • Ian Rickards, ARM
  • Andrew Pickard, ARM
  • Trent Parker, CAVIUM
  • Shay Gal-On, EEMBC
  • Markus Levy, EEMBC
  • Ron Olson, IBM
  • Eyal Barzilay, MIPS
  • Jens Eltze, NEC
  • Hirohiko Ono, NEC
  • Ulrich Drees, NEC
  • Frank Roscheda, NEC
  • Rob Cosaro, NXP
  • Shumpei Kawasaki, RENESAS
This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/files/release_notes-txt.html ================================================ Release Notes - CoreMark

Release Notes

Version: 1.01

History

Version 1.01

  • Added validation testing the sizes of datatypes.

Version 1.00

  • First public version.

Validation

This release was tested on the following platforms

  • x86 cygwin and gcc 3.4 (Quad, dual and single core systems)
  • x86 linux (Ubuntu/Fedora) and gcc (4.2/4.1) (Quad and single core systems)
  • MIPS64 BE linux and gcc 3.4 16 cores system
  • MIPS32 BE linux with CodeSourcery compiler 4.2-177 on Malta/Linux with a 1004K 3-core system
  • PPC simulator with gcc 4.2.2 (No OS)
  • PPC 64b BE linux (yellowdog) with gcc 3.4 and 4.1 (Dual core system)
  • BF533 with VDSP50
  • Renesas R8C/H8 MCU with HEW 4.05
  • NXP LPC1700 armcc v4.0.0.524
  • NEC 78K with IAR v4.61
  • ARM simulator with armcc v4

Coverage

GCOV results can be found on SVN under cover.

Memory analysis

Valgrind 3.4.0 used and no errors reported.

Balance analysis

Number of instructions executed for each function tested with cachegrind and found balanced with gcc and -O0.

Statistics

Lines

Lines  Blank  Cmnts  Source     AESL
=====  =====  =====  =====  ==========  =======================================
  469     66    170    251       627.5  core_list_join.c  (C)
  330     18     54    268       670.0  core_main.c  (C)
  256     32     80    146       365.0  core_matrix.c  (C)
  240     16     51    186       465.0  core_state.c  (C)
  165     11     20    134       335.0  core_util.c  (C)
  150     23     36     98       245.0  coremark.h  (C)
 1610    166    411   1083      2707.5  ----- Benchmark -----  (6 files)
  293     15     74    212       530.0  linux/core_portme.c  (C)
  235     30    104    104       260.0  linux/core_portme.h  (C)
  528     45    178    316       790.0  ----- Porting -----  (2 files)


* For comparison, here are the stats for Dhrystone
Lines  Blank  Cmnts  Source     AESL
=====  =====  =====  =====  ==========  =======================================
  311     15    242     54       135.0  dhry.h  (C)
  789    132    119    553      1382.5  dhry_1.c  (C)
  186     26     68    107       267.5  dhry_2.c  (C)
 1286    173    429    714      1785.0  ----- C -----  (3 files)
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/BuildTargets.html ================================================ Build Target Index - CoreMark
Build Target Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
P
 port_postbuild
 port_postload
 port_postrun
 port_prebuild
 port_preload
 port_prerun
Generate any files that are needed after actual build end.
Do platform specific after load stuff.
Do platform specific after run stuff.
Generate any files that are needed before actual build starts.
Do platform specific before load stuff.
Do platform specific after run stuff.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/Configuration.html ================================================ Configuration Index - CoreMark
Configuration Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 CORE_TICKS
H
 HAS_FLOAT
 HAS_PRINTF
 HAS_STDIO
 HAS_TIME_H
M
 MAIN_HAS_NOARGC
 MAIN_HAS_NORETURN
 MEM_METHOD
 MULTITHREAD
S
 SEED_METHOD
T
 TOTAL_DATA_SIZE
U
 USE_CLOCK
 USE_FORK
 USE_PTHREAD
 USE_SOCKET
Define type of return from the timing functions.
Define to 1 if the platform supports floating point.
Define to 1 if the platform has stdio.h and implements the printf function.
Define to 1 if the platform has stdio.h.
Define to 1 if platform has the time.h header file, and implementation of functions thereof.
Needed if platform does not support getting arguments to main.
Needed if platform does not support returning a value from main.
Defines method to get a block of memry.
Define for parallel execution
Defines method to get seed values that cannot be computed at compile time.
Define total size for data algorithms will operate on
Define to 1 if platform has the time.h header file, and implementation of functions thereof.
Sample implementation for launching parallel contexts This implementation uses fork, waitpid, shmget,shmat and shmdt.
Sample implementation for launching parallel contexts This implementation uses pthread_thread_create and pthread_join.
Sample implementation for launching parallel contexts This implementation uses fork, socket, sendto and recvfrom
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/Configurations.html ================================================ Configuration Index
Configuration Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
H
 HAS_FLOAT
 HAS_STDIO
 HAS_TIME_H
M
 MEM_METHOD
S
 SEED_METHOD
T
 TOTAL_DATA_SIZE
Define to 1 if the platform supports floating point.
Define to 1 if the platform has stdio.h and implements the printf function.
Define to 1 if platform has the time.h header file, and implementation of functions thereof.
Defines method to get a block of memry.
Defines method to get seed values that cannot be computed at compile time.
Define total size for data algorithms will operate on
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/Files.html ================================================ File Index - CoreMark
File Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 core_list_join.c
 core_main.c
 core_matrix.c
 core_portme.c
 core_portme.h
 core_portme.mak
 core_state.c
 core_util.c
 CoreMark
 coremark.h
R
 Release Notes
This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
Version: 1.01
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/Functions.html ================================================ Function Index - CoreMark
Function Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 cmp_complex
 cmp_idx
 core_bench_matrix
 core_bench_state
 core_init_state
 core_list_find
 core_list_init
 core_list_insert
 core_list_mergesort
 core_list_remove
 core_list_reverse
 core_list_undo_remove
 core_start_parallel
 core_state_transition
 core_stop_parallel
 crc*
G
 get_seed
 get_time
I
 iterate
M
 main
 matrix_add_const
 matrix_mul_const
 matrix_mul_matrix
 matrix_mul_matrix_bitextract
 matrix_mul_vect
 matrix_sum
 matrix_test
P
 portable_fini
 portable_free
 portable_init
 portable_malloc
S
 start_time
 stop_time
T
 time_in_secs
ee_s32 cmp_complex(list_data *a,
list_data *b,
core_results *res)
Compare the data item in a list cell.
ee_s32 cmp_idx(list_data *a,
list_data *b,
core_results *res)
Compare the idx item in a list cell, and regen the data.
ee_u16 core_bench_matrix(mat_params *p,
ee_s16 seed,
ee_u16 crc)
Benchmark function
ee_u16 core_bench_state(ee_u32 blksize,
ee_u8 *memblock,
ee_s16 seed1,
ee_s16 seed2,
ee_s16 step,
ee_u16 crc)
Benchmark function
void core_init_state(ee_u32 size,
ee_s16 seed,
ee_u8 *p)
Initialize the input data for the state machine.
list_head *core_list_find(list_head *list,
list_data *info)
Find an item in the list
list_head *core_list_init(ee_u32 blksize,
list_head *memblock,
ee_s16 seed)
Initialize list with data.
list_head *core_list_insert_new(list_head *insert_point,
list_data *info,
list_head **memblock,
list_data **datablock ,
list_head *memblock_end,
list_data *datablock_end)
Insert an item to the list
list_head *core_list_mergesort(list_head *list,
list_cmp cmp,
core_results *res)
Sort the list in place without recursion.
list_head *core_list_remove(list_head *item)
Remove an item from the list.
list_head *core_list_reverse(list_head *list)
Reverse a list
list_head *core_list_undo_remove(list_head *item_removed,
list_head *item_modified)
Undo a remove operation.
Start benchmarking in a parallel context.
enum CORE_STATE core_state_transition(ee_u8 **instr ,
ee_u32 *transition_count)
Actual state machine.
Stop a parallel context execution of coremark, and gather the results.
Service functions to calculate 16b CRC code.
Get a values that cannot be determined at compile time.
CORE_TICKS get_time(void)
Return an abstract “ticks” number that signifies time on the system.
Run the benchmark for a specified number of iterations.
#if MAIN_HAS_NOARGC MAIN_RETURN_TYPE main(void)
Main entry routine for the benchmark.
void matrix_add_const(ee_u32 N,
MATDAT *A,
MATDAT val)
Add a constant value to all elements of a matrix.
void matrix_mul_const(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT val)
Multiply a matrix by a constant.
void matrix_mul_matrix(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a matrix.
void matrix_mul_matrix_bitextract(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a matrix, and extract some bits from the result.
void matrix_mul_vect(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a vector.
ee_s16 matrix_sum(ee_u32 N,
MATRES *C,
MATDAT clipval)
Calculate a function that depends on the values of elements in the matrix.
ee_s16 matrix_test(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B,
MATDAT val)
Perform matrix manipulation.
void portable_fini(core_portable *p)
Target specific final code
void portable_free(void *p)
Provide free() functionality in a platform specific way.
void portable_init(core_portable *p,
int *argc,
char *argv[])
Target specific initialization code Test for some common mistakes.
void *portable_malloc(size_t size)
Provide malloc() functionality in a platform specific way.
void start_time(void)
This function will be called right before starting the timed portion of the benchmark.
void stop_time(void)
This function will be called right after ending the timed portion of the benchmark.
secs_ret time_in_secs(CORE_TICKS ticks)
Convert the value returned by get_time to seconds.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/General.html ================================================ Index - CoreMark
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
B
 Build Targets
 Building and running
C
 CC
 CFLAGS
 cmp_complex
 cmp_idx
 Configuration
 core_bench_matrix
 core_bench_state
 core_init_state
 core_list_find
 core_list_init
 core_list_insert
 core_list_join.c
 core_list_mergesort
 core_list_remove
 core_list_reverse
 core_list_undo_remove
 core_main.c
 core_matrix.c
 core_portme.c
 core_portme.h
 core_portme.mak
 core_start_parallel
 core_state.c
 core_state_transition
 core_stop_parallel
 CORE_TICKS
 core_util.c
 CoreMark
 coremark.h
 crc*
 Credits
D
 default_num_contexts
 Description
 Documentation
F
 Functions
G
 get_seed
 get_time
H
 HAS_FLOAT
 HAS_PRINTF
 HAS_STDIO
 HAS_TIME_H
I
 iterate
L
 Legal
 LFLAGS_END
 LOAD
 Log File Format
M
 main
 MAIN_HAS_NOARGC
 MAIN_HAS_NORETURN
 matrix_add_const
 matrix_mul_const
 matrix_mul_matrix
 matrix_mul_matrix_bitextract
 matrix_mul_vect
 matrix_sum
 matrix_test
 MEM_METHOD
 MULTITHREAD
O
 OPATH
 OUTFLAG
P
 PERL
 PORT_OBJS
 port_postbuild
 port_postload
 port_postrun
 port_prebuild
 port_preload
 port_prerun
 PORT_SRCS
 portable_fini
 portable_free
 portable_init
 portable_malloc
R
 Release Notes
 Reporting rules
 RUN
 Run rules
Download the release files from the www.coremark.org.
Use this flag to define compiler to use
Use this flag to define compiler options.
ee_s32 cmp_complex(list_data *a,
list_data *b,
core_results *res)
Compare the data item in a list cell.
ee_s32 cmp_idx(list_data *a,
list_data *b,
core_results *res)
Compare the idx item in a list cell, and regen the data.
ee_u16 core_bench_matrix(mat_params *p,
ee_s16 seed,
ee_u16 crc)
Benchmark function
ee_u16 core_bench_state(ee_u32 blksize,
ee_u8 *memblock,
ee_s16 seed1,
ee_s16 seed2,
ee_s16 step,
ee_u16 crc)
Benchmark function
void core_init_state(ee_u32 size,
ee_s16 seed,
ee_u8 *p)
Initialize the input data for the state machine.
list_head *core_list_find(list_head *list,
list_data *info)
Find an item in the list
list_head *core_list_init(ee_u32 blksize,
list_head *memblock,
ee_s16 seed)
Initialize list with data.
list_head *core_list_insert_new(list_head *insert_point,
list_data *info,
list_head **memblock,
list_data **datablock ,
list_head *memblock_end,
list_data *datablock_end)
Insert an item to the list
list_head *core_list_mergesort(list_head *list,
list_cmp cmp,
core_results *res)
Sort the list in place without recursion.
list_head *core_list_remove(list_head *item)
Remove an item from the list.
list_head *core_list_reverse(list_head *list)
Reverse a list
list_head *core_list_undo_remove(list_head *item_removed,
list_head *item_modified)
Undo a remove operation.
This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
Start benchmarking in a parallel context.
enum CORE_STATE core_state_transition(ee_u8 **instr ,
ee_u32 *transition_count)
Actual state machine.
Stop a parallel context execution of coremark, and gather the results.
Define type of return from the timing functions.
Service functions to calculate 16b CRC code.
Many thanks to all of the individuals who helped with the development or testing of CoreMark including (Sorted by company name)
extern ee_u32 default_num_contexts
Number of contexts to spawn in multicore context.
Benchmark using a linked list.
When you unpack the documentation (tar -vzxf coremark_version_docs.tgz) a docs folder will be created.
Get a values that cannot be determined at compile time.
CORE_TICKS get_time(void)
Return an abstract “ticks” number that signifies time on the system.
Define to 1 if the platform supports floating point.
Define to 1 if the platform has stdio.h and implements the printf function.
Define to 1 if the platform has stdio.h.
Define to 1 if platform has the time.h header file, and implementation of functions thereof.
Run the benchmark for a specified number of iterations.
See LICENSE.txt or the word document file under docs/LICENSE.doc.
Define any libraries needed for linking or other flags that should come at the end of the link line (e.g.
Define this flag if you need to load to a target, as in a cross compile environment.
The log files have the following format
#if MAIN_HAS_NOARGC MAIN_RETURN_TYPE main(void)
Main entry routine for the benchmark.
Needed if platform does not support getting arguments to main.
Needed if platform does not support returning a value from main.
void matrix_add_const(ee_u32 N,
MATDAT *A,
MATDAT val)
Add a constant value to all elements of a matrix.
void matrix_mul_const(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT val)
Multiply a matrix by a constant.
void matrix_mul_matrix(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a matrix.
void matrix_mul_matrix_bitextract(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a matrix, and extract some bits from the result.
void matrix_mul_vect(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B)
Multiply a matrix by a vector.
ee_s16 matrix_sum(ee_u32 N,
MATRES *C,
MATDAT clipval)
Calculate a function that depends on the values of elements in the matrix.
ee_s16 matrix_test(ee_u32 N,
MATRES *C,
MATDAT *A,
MATDAT *B,
MATDAT val)
Perform matrix manipulation.
Defines method to get a block of memry.
Define for parallel execution
Use this flag to define how to to get an executable (e.g -o)
Define perl executable to calculate the geomean if running separate.
Port specific object files can be added here
Generate any files that are needed after actual build end.
Do platform specific after load stuff.
Do platform specific after run stuff.
Generate any files that are needed before actual build starts.
Do platform specific before load stuff.
Do platform specific after run stuff.
Port specific source files can be added here
void portable_fini(core_portable *p)
Target specific final code
void portable_free(void *p)
Provide free() functionality in a platform specific way.
void portable_init(core_portable *p,
int *argc,
char *argv[])
Target specific initialization code Test for some common mistakes.
void *portable_malloc(size_t size)
Provide malloc() functionality in a platform specific way.
Version: 1.01
How to report results on a data sheet?
Define this flag if running does not consist of simple invocation of the binary.
What is and is not allowed.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/General2.html ================================================ Index - CoreMark
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
S
 secs_ret
 SEED_METHOD
 SEPARATE_COMPILE
 start_time
 stop_time
 Submitting results
T
 time_in_secs
 TIMER_RES_DIVIDER
 TOTAL_DATA_SIZE
 Types
U
 USE_CLOCK
 USE_FORK
 USE_PTHREAD
 USE_SOCKET
V
 Variables
W
 Welcome
For machines that have floating point support, get number of seconds as a double.
Defines method to get seed values that cannot be computed at compile time.
Define if you need to separate compilation from link stage.
void start_time(void)
This function will be called right before starting the timed portion of the benchmark.
void stop_time(void)
This function will be called right after ending the timed portion of the benchmark.
CoreMark results can be submitted on the web.
secs_ret time_in_secs(CORE_TICKS ticks)
Convert the value returned by get_time to seconds.
Divider to trade off timer resolution and total time that can be measured.
Define total size for data algorithms will operate on
Define to 1 if platform has the time.h header file, and implementation of functions thereof.
Sample implementation for launching parallel contexts This implementation uses fork, waitpid, shmget,shmat and shmdt.
Sample implementation for launching parallel contexts This implementation uses pthread_thread_create and pthread_join.
Sample implementation for launching parallel contexts This implementation uses fork, socket, sendto and recvfrom
Copyright 2009 EEMBC All rights reserved.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/Types.html ================================================ Type Index - CoreMark
Type Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
S
 secs_ret
For machines that have floating point support, get number of seconds as a double.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index/Variables.html ================================================ Variable Index - CoreMark
Variable Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 CC
 CFLAGS
D
 default_num_contexts
L
 LFLAGS_END
 LOAD
O
 OPATH
 OUTFLAG
P
 PERL
 PORT_OBJS
 PORT_SRCS
R
 RUN
S
 SEPARATE_COMPILE
Use this flag to define compiler to use
Use this flag to define compiler options.
extern ee_u32 default_num_contexts
Number of contexts to spawn in multicore context.
Define any libraries needed for linking or other flags that should come at the end of the link line (e.g.
Define this flag if you need to load to a target, as in a cross compile environment.
Use this flag to define how to to get an executable (e.g -o)
Define perl executable to calculate the geomean if running separate.
Port specific object files can be added here
Port specific source files can be added here
Define this flag if running does not consist of simple invocation of the binary.
Define if you need to separate compilation from link stage.
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/index.html ================================================ ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/javascript/main.js ================================================ // This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure // Natural Docs is licensed under the GPL // // Browser Styles // ____________________________________________________________________________ var agt=navigator.userAgent.toLowerCase(); var browserType; var browserVer; if (agt.indexOf("opera") != -1) { browserType = "Opera"; if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1) { browserVer = "Opera7"; } else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1) { browserVer = "Opera8"; } else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1) { browserVer = "Opera9"; } } else if (agt.indexOf("applewebkit") != -1) { browserType = "Safari"; if (agt.indexOf("version/3") != -1) { browserVer = "Safari3"; } else if (agt.indexOf("safari/4") != -1) { browserVer = "Safari2"; } } else if (agt.indexOf("khtml") != -1) { browserType = "Konqueror"; } else if (agt.indexOf("msie") != -1) { browserType = "IE"; if (agt.indexOf("msie 6") != -1) { browserVer = "IE6"; } else if (agt.indexOf("msie 7") != -1) { browserVer = "IE7"; } } else if (agt.indexOf("gecko") != -1) { browserType = "Firefox"; if (agt.indexOf("rv:1.7") != -1) { browserVer = "Firefox1"; } else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1) { browserVer = "Firefox15"; } else if (agt.indexOf("rv:1.8.1") != -1) { browserVer = "Firefox2"; } } // // Support Functions // ____________________________________________________________________________ function GetXPosition(item) { var position = 0; if (item.offsetWidth != null) { while (item != document.body && item != null) { position += item.offsetLeft; item = item.offsetParent; }; }; return position; }; function GetYPosition(item) { var position = 0; if (item.offsetWidth != null) { while (item != document.body && item != null) { position += item.offsetTop; item = item.offsetParent; }; }; return position; }; function MoveToPosition(item, x, y) { // Opera 5 chokes on the px extension, so it can use the Microsoft one instead. if (item.style.left != null) { item.style.left = x + "px"; item.style.top = y + "px"; } else if (item.style.pixelLeft != null) { item.style.pixelLeft = x; item.style.pixelTop = y; }; }; // // Menu // ____________________________________________________________________________ function ToggleMenu(id) { if (!window.document.getElementById) { return; }; var display = window.document.getElementById(id).style.display; if (display == "none") { display = "block"; } else { display = "none"; } window.document.getElementById(id).style.display = display; } function HideAllBut(ids, max) { if (document.getElementById) { ids.sort( function(a,b) { return a - b; } ); var number = 1; while (number < max) { if (ids.length > 0 && number == ids[0]) { ids.shift(); } else { document.getElementById("MGroupContent" + number).style.display = "none"; }; number++; }; }; } // // Tooltips // ____________________________________________________________________________ var tooltipTimer = 0; function ShowTip(event, tooltipID, linkID) { if (tooltipTimer) { clearTimeout(tooltipTimer); }; var docX = event.clientX + window.pageXOffset; var docY = event.clientY + window.pageYOffset; var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")"; tooltipTimer = setTimeout(showCommand, 1000); } function ReallyShowTip(tooltipID, linkID, docX, docY) { tooltipTimer = 0; var tooltip; var link; if (document.getElementById) { tooltip = document.getElementById(tooltipID); link = document.getElementById(linkID); } /* else if (document.all) { tooltip = eval("document.all['" + tooltipID + "']"); link = eval("document.all['" + linkID + "']"); } */ if (tooltip) { var left = GetXPosition(link); var top = GetYPosition(link); top += link.offsetHeight; // The fallback method is to use the mouse X and Y relative to the document. We use a separate if and test if its a number // in case some browser snuck through the above if statement but didn't support everything. if (!isFinite(top) || top == 0) { left = docX; top = docY; } // Some spacing to get it out from under the cursor. top += 10; // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the // page. We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right. if (tooltip.offsetWidth != null) { var width = tooltip.offsetWidth; var docWidth = document.body.clientWidth; if (left + width > docWidth) { left = docWidth - width - 1; } // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width. if (left < 0) { left = 0; }; } MoveToPosition(tooltip, left, top); tooltip.style.visibility = "visible"; } } function HideTip(tooltipID) { if (tooltipTimer) { clearTimeout(tooltipTimer); tooltipTimer = 0; } var tooltip; if (document.getElementById) { tooltip = document.getElementById(tooltipID); } else if (document.all) { tooltip = eval("document.all['" + tooltipID + "']"); } if (tooltip) { tooltip.style.visibility = "hidden"; } } // // Blockquote fix for IE // ____________________________________________________________________________ function NDOnLoad() { if (browserVer == "IE6") { var scrollboxes = document.getElementsByTagName('blockquote'); if (scrollboxes.item(0)) { NDDoResize(); window.onresize=NDOnResize; }; }; }; var resizeTimer = 0; function NDOnResize() { if (resizeTimer != 0) { clearTimeout(resizeTimer); }; resizeTimer = setTimeout(NDDoResize, 250); }; function NDDoResize() { var scrollboxes = document.getElementsByTagName('blockquote'); var i; var item; i = 0; while (item = scrollboxes.item(i)) { item.style.width = 100; i++; }; i = 0; while (item = scrollboxes.item(i)) { item.style.width = item.parentNode.offsetWidth; i++; }; clearTimeout(resizeTimer); resizeTimer = 0; } /* ________________________________________________________________________________________________________ Class: SearchPanel ________________________________________________________________________________________________________ A class handling everything associated with the search panel. Parameters: name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts. mode - The mode the search is going to work in. Pass CommandLineOption()>, so the value will be something like "HTML" or "FramedHTML". ________________________________________________________________________________________________________ */ function SearchPanel(name, mode, resultsPath) { if (!name || !mode || !resultsPath) { alert("Incorrect parameters to SearchPanel."); }; // Group: Variables // ________________________________________________________________________ /* var: name The name of the global variable that will be storing this instance of the class. */ this.name = name; /* var: mode The mode the search is going to work in, such as "HTML" or "FramedHTML". */ this.mode = mode; /* var: resultsPath The relative path from the current HTML page to the results page directory. */ this.resultsPath = resultsPath; /* var: keyTimeout The timeout used between a keystroke and when a search is performed. */ this.keyTimeout = 0; /* var: keyTimeoutLength The length of in thousandths of a second. */ this.keyTimeoutLength = 500; /* var: lastSearchValue The last search string executed, or an empty string if none. */ this.lastSearchValue = ""; /* var: lastResultsPage The last results page. The value is only relevant if is set. */ this.lastResultsPage = ""; /* var: deactivateTimeout The timeout used between when a control is deactivated and when the entire panel is deactivated. Is necessary because a control may be deactivated in favor of another control in the same panel, in which case it should stay active. */ this.deactivateTimout = 0; /* var: deactivateTimeoutLength The length of in thousandths of a second. */ this.deactivateTimeoutLength = 200; // Group: DOM Elements // ________________________________________________________________________ // Function: DOMSearchField this.DOMSearchField = function() { return document.getElementById("MSearchField"); }; // Function: DOMSearchType this.DOMSearchType = function() { return document.getElementById("MSearchType"); }; // Function: DOMPopupSearchResults this.DOMPopupSearchResults = function() { return document.getElementById("MSearchResults"); }; // Function: DOMPopupSearchResultsWindow this.DOMPopupSearchResultsWindow = function() { return document.getElementById("MSearchResultsWindow"); }; // Function: DOMSearchPanel this.DOMSearchPanel = function() { return document.getElementById("MSearchPanel"); }; // Group: Event Handlers // ________________________________________________________________________ /* Function: OnSearchFieldFocus Called when focus is added or removed from the search field. */ this.OnSearchFieldFocus = function(isActive) { this.Activate(isActive); }; /* Function: OnSearchFieldChange Called when the content of the search field is changed. */ this.OnSearchFieldChange = function() { if (this.keyTimeout) { clearTimeout(this.keyTimeout); this.keyTimeout = 0; }; var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); if (searchValue != this.lastSearchValue) { if (searchValue != "") { this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength); } else { if (this.mode == "HTML") { this.DOMPopupSearchResultsWindow().style.display = "none"; }; this.lastSearchValue = ""; }; }; }; /* Function: OnSearchTypeFocus Called when focus is added or removed from the search type. */ this.OnSearchTypeFocus = function(isActive) { this.Activate(isActive); }; /* Function: OnSearchTypeChange Called when the search type is changed. */ this.OnSearchTypeChange = function() { var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); if (searchValue != "") { this.Search(); }; }; // Group: Action Functions // ________________________________________________________________________ /* Function: CloseResultsWindow Closes the results window. */ this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = "none"; this.Activate(false, true); }; /* Function: Search Performs a search. */ this.Search = function() { this.keyTimeout = 0; var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var searchTopic = this.DOMSearchType().value; var pageExtension = searchValue.substr(0,1); if (pageExtension.match(/^[a-z]/i)) { pageExtension = pageExtension.toUpperCase(); } else if (pageExtension.match(/^[0-9]/)) { pageExtension = 'Numbers'; } else { pageExtension = "Symbols"; }; var resultsPage; var resultsPageWithSearch; var hasResultsPage; // indexSectionsWithContent is defined in searchdata.js if (indexSectionsWithContent[searchTopic][pageExtension] == true) { resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html'; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else { resultsPage = this.resultsPath + '/NoResults.html'; resultsPageWithSearch = resultsPage; hasResultsPage = false; }; var resultsFrame; if (this.mode == "HTML") { resultsFrame = window.frames.MSearchResults; } else if (this.mode == "FramedHTML") { resultsFrame = window.top.frames['Content']; }; if (resultsPage != this.lastResultsPage || // Bug in IE. If everything becomes hidden in a run, none of them will be able to be reshown in the next for some // reason. It counts the right number of results, and you can even read the display as "block" after setting it, but it // just doesn't work in IE 6 or IE 7. So if we're on the right page but the previous search had no results, reload the // page anyway to get around the bug. (browserType == "IE" && hasResultsPage && (!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) ) { resultsFrame.location.href = resultsPageWithSearch; } // So if the results page is right and there's no IE bug, reperform the search on the existing page. We have to check if there // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even // if it did. else if (hasResultsPage) { // We need to check if this exists in case the frame is present but didn't finish loading. if (resultsFrame.searchResults) { resultsFrame.searchResults.Search(searchValue); } // Otherwise just reload instead of waiting. else { resultsFrame.location.href = resultsPageWithSearch; }; }; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block") { var domSearchType = this.DOMSearchType(); var left = GetXPosition(domSearchType); var top = GetYPosition(domSearchType) + domSearchType.offsetHeight; MoveToPosition(domPopupSearchResultsWindow, left, top); domPopupSearchResultsWindow.style.display = 'block'; }; this.lastSearchValue = searchValue; this.lastResultsPage = resultsPage; }; // Group: Activation Functions // Functions that handle whether the entire panel is active or not. // ________________________________________________________________________ /* Function: Activate Activates or deactivates the search panel, resetting things to their default values if necessary. You can call this on every control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently. Parameters: isActive - Whether you're activating or deactivating the panel. ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay. */ this.Activate = function(isActive, ignoreDeactivateDelay) { // We want to ignore isActive being false while the results window is open. if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block")) { if (this.inactivateTimeout) { clearTimeout(this.inactivateTimeout); this.inactivateTimeout = 0; }; this.DOMSearchPanel().className = 'MSearchPanelActive'; var searchField = this.DOMSearchField(); if (searchField.value == 'Search') { searchField.value = ""; } } else if (!ignoreDeactivateDelay) { this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength); } else { this.InactivateAfterTimeout(); }; }; /* Function: InactivateAfterTimeout Called by , which is set by . Inactivation occurs on a timeout because a control may receive OnBlur() when focus is really transferring to another control in the search panel. In this case we don't want to actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value. So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation. */ this.InactivateAfterTimeout = function() { this.inactivateTimeout = 0; this.DOMSearchPanel().className = 'MSearchPanelInactive'; this.DOMSearchField().value = "Search"; this.lastSearchValue = ""; this.lastResultsPage = ""; }; }; /* ________________________________________________________________________________________________________ Class: SearchResults _________________________________________________________________________________________________________ The class that handles everything on the search results page. _________________________________________________________________________________________________________ */ function SearchResults(name, mode) { /* var: mode The mode the search is going to work in, such as "HTML" or "FramedHTML". */ this.mode = mode; /* var: lastMatchCount The number of matches from the last run of . */ this.lastMatchCount = 0; /* Function: Toggle Toggles the visibility of the passed element ID. */ this.Toggle = function(id) { if (this.mode == "FramedHTML") { return; }; var parentElement = document.getElementById(id); var element = parentElement.firstChild; while (element && element != parentElement) { if (element.nodeName == 'DIV' && element.className == 'ISubIndex') { if (element.style.display == 'block') { element.style.display = "none"; } else { element.style.display = 'block'; } }; if (element.nodeName == 'DIV' && element.hasChildNodes()) { element = element.firstChild; } else if (element.nextSibling) { element = element.nextSibling; } else { do { element = element.parentNode; } while (element && element != parentElement && !element.nextSibling); if (element && element != parentElement) { element = element.nextSibling; }; }; }; }; /* Function: Search Searches for the passed string. If there is no parameter, it takes it from the URL query. Always returns true, since other documents may try to call it and that may or may not be possible. */ this.Search = function(search) { if (!search) { search = window.location.search; search = search.substring(1); // Remove the leading ? search = unescape(search); }; search = search.replace(/^ +/, ""); search = search.replace(/ +$/, ""); search = search.toLowerCase(); if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily. { search = search.replace(/\_/g, "_und"); search = search.replace(/\ +/gi, "_spc"); search = search.replace(/\~/g, "_til"); search = search.replace(/\!/g, "_exc"); search = search.replace(/\@/g, "_att"); search = search.replace(/\#/g, "_num"); search = search.replace(/\$/g, "_dol"); search = search.replace(/\%/g, "_pct"); search = search.replace(/\^/g, "_car"); search = search.replace(/\&/g, "_amp"); search = search.replace(/\*/g, "_ast"); search = search.replace(/\(/g, "_lpa"); search = search.replace(/\)/g, "_rpa"); search = search.replace(/\-/g, "_min"); search = search.replace(/\+/g, "_plu"); search = search.replace(/\=/g, "_equ"); search = search.replace(/\{/g, "_lbc"); search = search.replace(/\}/g, "_rbc"); search = search.replace(/\[/g, "_lbk"); search = search.replace(/\]/g, "_rbk"); search = search.replace(/\:/g, "_col"); search = search.replace(/\;/g, "_sco"); search = search.replace(/\"/g, "_quo"); search = search.replace(/\'/g, "_apo"); search = search.replace(/\/g, "_ran"); search = search.replace(/\,/g, "_com"); search = search.replace(/\./g, "_per"); search = search.replace(/\?/g, "_que"); search = search.replace(/\//g, "_sla"); search = search.replace(/[^a-z0-9\_]i/gi, "_zzz"); }; var resultRows = document.getElementsByTagName("div"); var matches = 0; var i = 0; while (i < resultRows.length) { var row = resultRows.item(i); if (row.className == "SRResult") { var rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search) { row.style.display = "block"; matches++; } else { row.style.display = "none"; }; }; i++; }; document.getElementById("Searching").style.display="none"; if (matches == 0) { document.getElementById("NoMatches").style.display="block"; } else { document.getElementById("NoMatches").style.display="none"; } this.lastMatchCount = matches; return true; }; }; ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/javascript/searchdata.js ================================================ var indexSectionsWithContent = { "General": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": true, "D": true, "E": false, "F": true, "G": true, "H": false, "I": true, "J": false, "K": false, "L": false, "M": true, "N": false, "O": false, "P": false, "Q": false, "R": false, "S": true, "T": true, "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false }, "Variables": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": true, "D": true, "E": false, "F": false, "G": false, "H": false, "I": false, "J": false, "K": false, "L": true, "M": false, "N": false, "O": true, "P": true, "Q": false, "R": true, "S": true, "T": false, "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false }, "Functions": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": true, "D": false, "E": false, "F": false, "G": true, "H": false, "I": true, "J": false, "K": false, "L": false, "M": true, "N": false, "O": false, "P": true, "Q": false, "R": false, "S": true, "T": true, "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false }, "Files": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": true, "D": false, "E": false, "F": false, "G": false, "H": false, "I": false, "J": false, "K": false, "L": false, "M": false, "N": false, "O": false, "P": false, "Q": false, "R": true, "S": false, "T": false, "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false }, "Configuration": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": true, "D": false, "E": false, "F": false, "G": false, "H": true, "I": false, "J": false, "K": false, "L": false, "M": true, "N": false, "O": false, "P": false, "Q": false, "R": false, "S": true, "T": true, "U": true, "V": false, "W": false, "X": false, "Y": false, "Z": false }, "Types": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": false, "D": false, "E": false, "F": false, "G": false, "H": false, "I": false, "J": false, "K": false, "L": false, "M": false, "N": false, "O": false, "P": false, "Q": false, "R": false, "S": true, "T": false, "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false }, "BuildTargets": { "Symbols": false, "Numbers": false, "A": false, "B": false, "C": false, "D": false, "E": false, "F": false, "G": false, "H": false, "I": false, "J": false, "K": false, "L": false, "M": false, "N": false, "O": false, "P": true, "Q": false, "R": false, "S": false, "T": false, "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false } } ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/BuildTargetsP.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationC.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationH.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationM.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationS.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationT.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationU.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationsH.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationsM.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationsS.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/ConfigurationsT.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FilesC.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FilesR.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsC.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsG.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsI.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsM.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsP.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsS.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/FunctionsT.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralB.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralC.html ================================================ ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralD.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralF.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralG.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralH.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralI.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralL.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralM.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralO.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralP.html ================================================ ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralR.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralS.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralT.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralU.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralV.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/GeneralW.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/NoResults.html ================================================
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/TypesS.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesC.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesD.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesL.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesO.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesP.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesR.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/search/VariablesS.html ================================================
Loading...
Searching...
No Matches
================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/styles/1.css ================================================ /* IMPORTANT: If you're editing this file in the output directory of one of your projects, your changes will be overwritten the next time you run Natural Docs. Instead, copy this file to your project directory, make your changes, and you can use it with -s. Even better would be to make a CSS file in your project directory with only your changes, which you can then use with -s [original style] [your changes]. On the other hand, if you're editing this file in the Natural Docs styles directory, the changes will automatically be applied to all your projects that use this style the next time Natural Docs is run on them. This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure Natural Docs is licensed under the GPL */ body { font: 10pt Verdana, Arial, sans-serif; color: #000000; margin: 0; padding: 0; } .ContentPage, .IndexPage, .FramedMenuPage { background-color: #E8E8E8; } .FramedContentPage, .FramedIndexPage, .FramedSearchResultsPage, .PopupSearchResultsPage { background-color: #FFFFFF; } a:link, a:visited { color: #900000; text-decoration: none } a:hover { color: #900000; text-decoration: underline } a:active { color: #FF0000; text-decoration: underline } td { vertical-align: top } img { border: 0; } /* Comment out this line to use web-style paragraphs (blank line between paragraphs, no indent) instead of print-style paragraphs (no blank line, indented.) */ p { text-indent: 5ex; margin: 0 } /* Can't use something like display: none or it won't break. */ .HB { font-size: 1px; visibility: hidden; } /* Blockquotes are used as containers for things that may need to scroll. */ blockquote { padding: 0; margin: 0; overflow: auto; } .Firefox1 blockquote { padding-bottom: .5em; } /* Turn off scrolling when printing. */ @media print { blockquote { overflow: visible; } .IE blockquote { width: auto; } } #Menu { font-size: 9pt; padding: 10px 0 0 0; } .ContentPage #Menu, .IndexPage #Menu { position: absolute; top: 0; left: 0; width: 31ex; overflow: hidden; } .ContentPage .Firefox #Menu, .IndexPage .Firefox #Menu { width: 27ex; } .MTitle { font-size: 16pt; font-weight: bold; font-variant: small-caps; text-align: center; padding: 5px 10px 15px 10px; border-bottom: 1px dotted #000000; margin-bottom: 15px } .MSubTitle { font-size: 9pt; font-weight: normal; font-variant: normal; margin-top: 1ex; margin-bottom: 5px } .MEntry a:link, .MEntry a:hover, .MEntry a:visited { color: #606060; margin-right: 0 } .MEntry a:active { color: #A00000; margin-right: 0 } .MGroup { font-variant: small-caps; font-weight: bold; margin: 1em 0 1em 10px; } .MGroupContent { font-variant: normal; font-weight: normal } .MGroup a:link, .MGroup a:hover, .MGroup a:visited { color: #545454; margin-right: 10px } .MGroup a:active { color: #A00000; margin-right: 10px } .MFile, .MText, .MLink, .MIndex { padding: 1px 17px 2px 10px; margin: .25em 0 .25em 0; } .MText { font-size: 8pt; font-style: italic } .MLink { font-style: italic } #MSelected { color: #000000; background-color: #FFFFFF; /* Replace padding with border. */ padding: 0 10px 0 10px; border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000; margin-right: 5px; } /* Close off the left side when its in a group. */ .MGroup #MSelected { padding-left: 9px; border-left-width: 1px } /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ .Firefox #MSelected { -moz-border-radius-topright: 10px; -moz-border-radius-bottomright: 10px } .Firefox .MGroup #MSelected { -moz-border-radius-topleft: 10px; -moz-border-radius-bottomleft: 10px } #MSearchPanel { padding: 0px 6px; margin: .25em 0; } #MSearchField { font: italic 9pt Verdana, sans-serif; color: #606060; background-color: #E8E8E8; border: none; padding: 2px 4px; width: 100%; } /* Only Opera gets it right. */ .Firefox #MSearchField, .IE #MSearchField, .Safari #MSearchField { width: 94%; } .Opera9 #MSearchField, .Konqueror #MSearchField { width: 97%; } .FramedMenuPage .Firefox #MSearchField, .FramedMenuPage .Safari #MSearchField, .FramedMenuPage .Konqueror #MSearchField { width: 98%; } /* Firefox doesn't do this right in frames without #MSearchPanel added on. It's presence doesn't hurt anything other browsers. */ #MSearchPanel.MSearchPanelInactive:hover #MSearchField { background-color: #FFFFFF; border: 1px solid #C0C0C0; padding: 1px 3px; } .MSearchPanelActive #MSearchField { background-color: #FFFFFF; border: 1px solid #C0C0C0; font-style: normal; padding: 1px 3px; } #MSearchType { visibility: hidden; font: 8pt Verdana, sans-serif; width: 98%; padding: 0; border: 1px solid #C0C0C0; } .MSearchPanelActive #MSearchType, /* As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */ #MSearchPanel.MSearchPanelInactive:hover #MSearchType, #MSearchType:focus { visibility: visible; color: #606060; } #MSearchType option#MSearchEverything { font-weight: bold; } .Opera8 .MSearchPanelInactive:hover, .Opera8 .MSearchPanelActive { margin-left: -1px; } iframe#MSearchResults { width: 60ex; height: 15em; } #MSearchResultsWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #000000; background-color: #E8E8E8; } #MSearchResultsWindowClose { font-weight: bold; font-size: 8pt; display: block; padding: 2px 5px; } #MSearchResultsWindowClose:link, #MSearchResultsWindowClose:visited { color: #000000; text-decoration: none; } #MSearchResultsWindowClose:active, #MSearchResultsWindowClose:hover { color: #800000; text-decoration: none; background-color: #F4F4F4; } #Content { padding-bottom: 15px; } .ContentPage #Content { border-width: 0 0 1px 1px; border-style: solid; border-color: #000000; background-color: #FFFFFF; font-size: 9pt; /* To make 31ex match the menu's 31ex. */ margin-left: 31ex; } .ContentPage .Firefox #Content { margin-left: 27ex; } .CTopic { font-size: 10pt; margin-bottom: 3em; } .CTitle { font-size: 12pt; font-weight: bold; border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0; margin: 0 15px .5em 15px } .CGroup .CTitle { font-size: 16pt; font-variant: small-caps; padding-left: 15px; padding-right: 15px; border-width: 0 0 2px 0; border-color: #000000; margin-left: 0; margin-right: 0 } .CClass .CTitle, .CInterface .CTitle, .CDatabase .CTitle, .CDatabaseTable .CTitle, .CSection .CTitle { font-size: 18pt; color: #FFFFFF; background-color: #A0A0A0; padding: 10px 15px 10px 15px; border-width: 2px 0; border-color: #000000; margin-left: 0; margin-right: 0 } #MainTopic .CTitle { font-size: 20pt; color: #FFFFFF; background-color: #7070C0; padding: 10px 15px 10px 15px; border-width: 0 0 3px 0; border-color: #000000; margin-left: 0; margin-right: 0 } .CBody { margin-left: 15px; margin-right: 15px } .CToolTip { position: absolute; visibility: hidden; left: 0; top: 0; background-color: #FFFFE0; padding: 5px; border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000; font-size: 8pt; } .Opera .CToolTip { max-width: 98%; } /* Scrollbars would be useless. */ .CToolTip blockquote { overflow: hidden; } .IE6 .CToolTip blockquote { overflow: visible; } .CHeading { font-weight: bold; font-size: 10pt; margin: 1.5em 0 .5em 0; } .CBody pre { font: 10pt "Courier New", Courier, monospace; margin: 1em 0; } .CBody ul { /* I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever. Reapply it here as padding. */ padding-left: 15px; padding-right: 15px; margin: .5em 5ex .5em 5ex; } .CDescriptionList { margin: .5em 5ex 0 5ex } .CDLEntry { font: 10pt "Courier New", Courier, monospace; color: #808080; padding-bottom: .25em; white-space: nowrap } .CDLDescription { font-size: 10pt; /* For browsers that don't inherit correctly, like Opera 5. */ padding-bottom: .5em; padding-left: 5ex } .CTopic img { text-align: center; display: block; margin: 1em auto; } .CImageCaption { font-variant: small-caps; font-size: 8pt; color: #808080; text-align: center; position: relative; top: 1em; } .CImageLink { color: #808080; font-style: italic; } a.CImageLink:link, a.CImageLink:visited, a.CImageLink:hover { color: #808080 } .Prototype { font: 10pt "Courier New", Courier, monospace; padding: 5px 3ex; border-width: 1px; border-style: solid; margin: 0 5ex 1.5em 5ex; } .Prototype td { font-size: 10pt; } .PDefaultValue, .PDefaultValuePrefix, .PTypePrefix { color: #8F8F8F; } .PTypePrefix { text-align: right; } .PAfterParameters { vertical-align: bottom; } .IE .Prototype table { padding: 0; } .CFunction .Prototype { background-color: #F4F4F4; border-color: #D0D0D0 } .CProperty .Prototype { background-color: #F4F4FF; border-color: #C0C0E8 } .CVariable .Prototype { background-color: #FFFFF0; border-color: #E0E0A0 } .CClass .Prototype { border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; background-color: #F4F4F4; } .CInterface .Prototype { border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0D0; background-color: #F4F4FF; } .CDatabaseIndex .Prototype, .CConstant .Prototype { background-color: #D0D0D0; border-color: #000000 } .CType .Prototype, .CEnumeration .Prototype { background-color: #FAF0F0; border-color: #E0B0B0; } .CDatabaseTrigger .Prototype, .CEvent .Prototype, .CDelegate .Prototype { background-color: #F0FCF0; border-color: #B8E4B8 } .CToolTip .Prototype { margin: 0 0 .5em 0; white-space: nowrap; } .Summary { margin: 1.5em 5ex 0 5ex } .STitle { font-size: 12pt; font-weight: bold; margin-bottom: .5em } .SBorder { background-color: #FFFFF0; padding: 15px; border: 1px solid #C0C060 } /* In a frame IE 6 will make them too long unless you set the width to 100%. Without frames it will be correct without a width or slightly too long (but not enough to scroll) with a width. This arbitrary weirdness simply astounds me. IE 7 has the same problem with frames, haven't tested it without. */ .FramedContentPage .IE .SBorder { width: 100% } /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ .Firefox .SBorder { -moz-border-radius: 20px } .STable { font-size: 9pt; width: 100% } .SEntry { width: 30% } .SDescription { width: 70% } .SMarked { background-color: #F8F8D8 } .SDescription { padding-left: 2ex } .SIndent1 .SEntry { padding-left: 1.5ex } .SIndent1 .SDescription { padding-left: 3.5ex } .SIndent2 .SEntry { padding-left: 3.0ex } .SIndent2 .SDescription { padding-left: 5.0ex } .SIndent3 .SEntry { padding-left: 4.5ex } .SIndent3 .SDescription { padding-left: 6.5ex } .SIndent4 .SEntry { padding-left: 6.0ex } .SIndent4 .SDescription { padding-left: 8.0ex } .SIndent5 .SEntry { padding-left: 7.5ex } .SIndent5 .SDescription { padding-left: 9.5ex } .SDescription a { color: #800000} .SDescription a:active { color: #A00000 } .SGroup td { padding-top: .5em; padding-bottom: .25em } .SGroup .SEntry { font-weight: bold; font-variant: small-caps } .SGroup .SEntry a { color: #800000 } .SGroup .SEntry a:active { color: #F00000 } .SMain td, .SClass td, .SDatabase td, .SDatabaseTable td, .SSection td { font-size: 10pt; padding-bottom: .25em } .SClass td, .SDatabase td, .SDatabaseTable td, .SSection td { padding-top: 1em } .SMain .SEntry, .SClass .SEntry, .SDatabase .SEntry, .SDatabaseTable .SEntry, .SSection .SEntry { font-weight: bold; } .SMain .SEntry a, .SClass .SEntry a, .SDatabase .SEntry a, .SDatabaseTable .SEntry a, .SSection .SEntry a { color: #000000 } .SMain .SEntry a:active, .SClass .SEntry a:active, .SDatabase .SEntry a:active, .SDatabaseTable .SEntry a:active, .SSection .SEntry a:active { color: #A00000 } .ClassHierarchy { margin: 0 15px 1em 15px } .CHEntry { border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; margin-bottom: 3px; padding: 2px 2ex; font-size: 10pt; background-color: #F4F4F4; color: #606060; } .Firefox .CHEntry { -moz-border-radius: 4px; } .CHCurrent .CHEntry { font-weight: bold; border-color: #000000; color: #000000; } .CHChildNote .CHEntry { font-style: italic; font-size: 8pt; } .CHIndent { margin-left: 3ex; } .CHEntry a:link, .CHEntry a:visited, .CHEntry a:hover { color: #606060; } .CHEntry a:active { color: #800000; } #Index { background-color: #FFFFFF; } /* As opposed to .PopupSearchResultsPage #Index */ .IndexPage #Index, .FramedIndexPage #Index, .FramedSearchResultsPage #Index { padding: 15px; } .IndexPage #Index { border-width: 0 0 1px 1px; border-style: solid; border-color: #000000; font-size: 9pt; /* To make 27ex match the menu's 27ex. */ margin-left: 27ex; } .IPageTitle { font-size: 20pt; font-weight: bold; color: #FFFFFF; background-color: #7070C0; padding: 10px 15px 10px 15px; border-width: 0 0 3px 0; border-color: #000000; border-style: solid; margin: -15px -15px 0 -15px } .FramedSearchResultsPage .IPageTitle { margin-bottom: 15px; } .INavigationBar { font-size: 10pt; text-align: center; background-color: #FFFFF0; padding: 5px; border-bottom: solid 1px black; margin: 0 -15px 15px -15px; } .INavigationBar a { font-weight: bold } .IHeading { font-size: 16pt; font-weight: bold; padding: 2.5em 0 .5em 0; text-align: center; width: 3.5ex; } #IFirstHeading { padding-top: 0; } .IEntry { font-size: 10pt; padding-left: 1ex; } .PopupSearchResultsPage .IEntry { font-size: 8pt; padding: 1px 5px; } .PopupSearchResultsPage .Opera9 .IEntry, .FramedSearchResultsPage .Opera9 .IEntry { text-align: left; } .FramedSearchResultsPage .IEntry { padding: 0; } .ISubIndex { padding-left: 3ex; padding-bottom: .5em } .PopupSearchResultsPage .ISubIndex { display: none; } /* While it may cause some entries to look like links when they aren't, I found it's much easier to read the index if everything's the same color. */ .ISymbol { font-weight: bold; color: #900000 } .IndexPage .ISymbolPrefix, .FramedIndexPage .ISymbolPrefix { font-size: 10pt; text-align: right; color: #C47C7C; background-color: #F8F8F8; border-right: 3px solid #E0E0E0; border-left: 1px solid #E0E0E0; padding: 0 1px 0 2px; } .PopupSearchResultsPage .ISymbolPrefix, .FramedSearchResultsPage .ISymbolPrefix { color: #900000; } .PopupSearchResultsPage .ISymbolPrefix { font-size: 8pt; } .IndexPage #IFirstSymbolPrefix, .FramedIndexPage #IFirstSymbolPrefix { border-top: 1px solid #E0E0E0; } .IndexPage #ILastSymbolPrefix, .FramedIndexPage #ILastSymbolPrefix { border-bottom: 1px solid #E0E0E0; } .IndexPage #IOnlySymbolPrefix, .FramedIndexPage #IOnlySymbolPrefix { border-top: 1px solid #E0E0E0; border-bottom: 1px solid #E0E0E0; } a.IParent, a.IFile { display: block; } .PopupSearchResultsPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; } .FramedSearchResultsPage .SRStatus { font-size: 10pt; font-style: italic; } .SRResult { display: none; } #Footer { font-size: 8pt; color: #989898; text-align: right; } #Footer p { text-indent: 0; margin-bottom: .5em; } .ContentPage #Footer, .IndexPage #Footer { text-align: right; margin: 2px; } .FramedMenuPage #Footer { text-align: center; margin: 5em 10px 10px 10px; padding-top: 1em; border-top: 1px solid #C8C8C8; } #Footer a:link, #Footer a:hover, #Footer a:visited { color: #989898 } #Footer a:active { color: #A00000 } ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/styles/2.css ================================================ #Menu { padding: 48px 0 0 0; background: url(file:../../coremark_logo.jpg) no-repeat; background-position: 30px 10px; } ================================================ FILE: ThirdParty/Benchmarks/coremark/docs/html/styles/main.css ================================================ @import URL("1.css"); @import URL("2.css"); ================================================ FILE: ThirdParty/Benchmarks/coremark/freebsd/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on include posix/core_portme.mak ================================================ FILE: ThirdParty/Benchmarks/coremark/linux/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on include posix/core_portme.mak ================================================ FILE: ThirdParty/Benchmarks/coremark/macos/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on NO_LIBRT = 1 include posix/core_portme.mak ================================================ FILE: ThirdParty/Benchmarks/coremark/posix/core_portme.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include #include #include "coremark.h" #if CALLGRIND_RUN #include #endif #if (MEM_METHOD == MEM_MALLOC) /* Function: portable_malloc Provide malloc() functionality in a platform specific way. */ void * portable_malloc(size_t size) { return malloc(size); } /* Function: portable_free Provide free() functionality in a platform specific way. */ void portable_free(void *p) { free(p); } #else void * portable_malloc(size_t size) { return NULL; } void portable_free(void *p) { p = NULL; } #endif #if (SEED_METHOD == SEED_VOLATILE) #if VALIDATION_RUN volatile ee_s32 seed1_volatile = 0x3415; volatile ee_s32 seed2_volatile = 0x3415; volatile ee_s32 seed3_volatile = 0x66; #endif #if PERFORMANCE_RUN volatile ee_s32 seed1_volatile = 0x0; volatile ee_s32 seed2_volatile = 0x0; volatile ee_s32 seed3_volatile = 0x66; #endif #if PROFILE_RUN volatile ee_s32 seed1_volatile = 0x8; volatile ee_s32 seed2_volatile = 0x8; volatile ee_s32 seed3_volatile = 0x8; #endif volatile ee_s32 seed4_volatile = ITERATIONS; volatile ee_s32 seed5_volatile = 0; #endif /* Porting: Timing functions How to capture time and convert to seconds must be ported to whatever is supported by the platform. e.g. Read value from on board RTC, read value from cpu clock cycles performance counter etc. Sample implementation for standard time.h and windows.h definitions included. */ /* Define: TIMER_RES_DIVIDER Divider to trade off timer resolution and total time that can be measured. Use lower values to increase resolution, but make sure that overflow does not occur. If there are issues with the return value overflowing, increase this value. */ #if USE_CLOCK #define NSECS_PER_SEC CLOCKS_PER_SEC #define EE_TIMER_TICKER_RATE 1000 #define CORETIMETYPE clock_t #define GETMYTIME(_t) (*_t = clock()) #define MYTIMEDIFF(fin, ini) ((fin) - (ini)) #define TIMER_RES_DIVIDER 1 #define SAMPLE_TIME_IMPLEMENTATION 1 #elif defined(_MSC_VER) #define NSECS_PER_SEC 10000000 #define EE_TIMER_TICKER_RATE 1000 #define CORETIMETYPE FILETIME #define GETMYTIME(_t) GetSystemTimeAsFileTime(_t) #define MYTIMEDIFF(fin, ini) \ (((*(__int64 *)&fin) - (*(__int64 *)&ini)) / TIMER_RES_DIVIDER) /* setting to millisces resolution by default with MSDEV */ #ifndef TIMER_RES_DIVIDER #define TIMER_RES_DIVIDER 1000 #endif #define SAMPLE_TIME_IMPLEMENTATION 1 #elif HAS_TIME_H #define NSECS_PER_SEC 1000000000 #define EE_TIMER_TICKER_RATE 1000 #define CORETIMETYPE struct timespec #define GETMYTIME(_t) clock_gettime(CLOCK_REALTIME, _t) #define MYTIMEDIFF(fin, ini) \ ((fin.tv_sec - ini.tv_sec) * (NSECS_PER_SEC / TIMER_RES_DIVIDER) \ + (fin.tv_nsec - ini.tv_nsec) / TIMER_RES_DIVIDER) /* setting to 1/1000 of a second resolution by default with linux */ #ifndef TIMER_RES_DIVIDER #define TIMER_RES_DIVIDER 1000000 #endif #define SAMPLE_TIME_IMPLEMENTATION 1 #else #define SAMPLE_TIME_IMPLEMENTATION 0 #endif #define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER) #if SAMPLE_TIME_IMPLEMENTATION /** Define Host specific (POSIX), or target specific global time variables. */ static CORETIMETYPE start_time_val, stop_time_val; /* Function: start_time This function will be called right before starting the timed portion of the benchmark. Implementation may be capturing a system timer (as implemented in the example code) or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0. */ void start_time(void) { GETMYTIME(&start_time_val); #if CALLGRIND_RUN CALLGRIND_START_INSTRUMENTATION #endif #if MICA asm volatile("int3"); /*1 */ #endif } /* Function: stop_time This function will be called right after ending the timed portion of the benchmark. Implementation may be capturing a system timer (as implemented in the example code) or other system parameters - e.g. reading the current value of cpu cycles counter. */ void stop_time(void) { #if CALLGRIND_RUN CALLGRIND_STOP_INSTRUMENTATION #endif #if MICA asm volatile("int3"); /*1 */ #endif GETMYTIME(&stop_time_val); } /* Function: get_time Return an abstract "ticks" number that signifies time on the system. Actual value returned may be cpu cycles, milliseconds or any other value, as long as it can be converted to seconds by . This methodology is taken to accommodate any hardware or simulated platform. The sample implementation returns millisecs by default, and the resolution is controlled by */ CORE_TICKS get_time(void) { CORE_TICKS elapsed = (CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val)); return elapsed; } /* Function: time_in_secs Convert the value returned by get_time to seconds. The type is used to accommodate systems with no support for floating point. Default implementation implemented by the EE_TICKS_PER_SEC macro above. */ secs_ret time_in_secs(CORE_TICKS ticks) { secs_ret retval = ((secs_ret)ticks) / (secs_ret)EE_TICKS_PER_SEC; return retval; } #else #error "Please implement timing functionality in core_portme.c" #endif /* SAMPLE_TIME_IMPLEMENTATION */ ee_u32 default_num_contexts = MULTITHREAD; /* Function: portable_init Target specific initialization code Test for some common mistakes. */ void portable_init(core_portable *p, int *argc, char *argv[]) { #if PRINT_ARGS int i; for (i = 0; i < *argc; i++) { ee_printf("Arg[%d]=%s\n", i, argv[i]); } #endif (void)argc; // prevent unused warning (void)argv; // prevent unused warning if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) { ee_printf( "ERROR! Please define ee_ptr_int to a type that holds a " "pointer!\n"); } if (sizeof(ee_u32) != 4) { ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n"); } #if (MAIN_HAS_NOARGC && (SEED_METHOD == SEED_ARG)) ee_printf( "ERROR! Main has no argc, but SEED_METHOD defined to SEED_ARG!\n"); #endif #if (MULTITHREAD > 1) && (SEED_METHOD == SEED_ARG) int nargs = *argc, i; if ((nargs > 1) && (*argv[1] == 'M')) { default_num_contexts = parseval(argv[1] + 1); if (default_num_contexts > MULTITHREAD) default_num_contexts = MULTITHREAD; /* Shift args since first arg is directed to the portable part and not * to coremark main */ --nargs; for (i = 1; i < nargs; i++) argv[i] = argv[i + 1]; *argc = nargs; } #endif /* sample of potential platform specific init via command line, reset \ the number of contexts being used if first argument is M*/ p->portable_id = 1; } /* Function: portable_fini Target specific final code */ void portable_fini(core_portable *p) { p->portable_id = 0; } #if (MULTITHREAD > 1) /* Function: core_start_parallel Start benchmarking in a parallel context. Three implementations are provided, one using pthreads, one using fork and shared mem, and one using fork and sockets. Other implementations using MCAPI or other standards can easily be devised. */ /* Function: core_stop_parallel Stop a parallel context execution of coremark, and gather the results. Three implementations are provided, one using pthreads, one using fork and shared mem, and one using fork and sockets. Other implementations using MCAPI or other standards can easily be devised. */ #if USE_PTHREAD ee_u8 core_start_parallel(core_results *res) { return (ee_u8)pthread_create( &(res->port.thread), NULL, iterate, (void *)res); } ee_u8 core_stop_parallel(core_results *res) { void *retval; return (ee_u8)pthread_join(res->port.thread, &retval); } #elif USE_FORK static int key_id = 0; ee_u8 core_start_parallel(core_results *res) { key_t key = 4321 + key_id; key_id++; res->port.pid = fork(); res->port.shmid = shmget(key, 8, IPC_CREAT | 0666); if (res->port.shmid < 0) { ee_printf("ERROR in shmget!\n"); } if (res->port.pid == 0) { iterate(res); res->port.shm = shmat(res->port.shmid, NULL, 0); /* copy the validation values to the shared memory area and quit*/ if (res->port.shm == (char *)-1) { ee_printf("ERROR in child shmat!\n"); } else { memcpy(res->port.shm, &(res->crc), 8); shmdt(res->port.shm); } exit(0); } return 1; } ee_u8 core_stop_parallel(core_results *res) { int status; pid_t wpid = waitpid(res->port.pid, &status, WUNTRACED); if (wpid != res->port.pid) { ee_printf("ERROR waiting for child.\n"); if (errno == ECHILD) ee_printf("errno=No such child %d\n", res->port.pid); if (errno == EINTR) ee_printf("errno=Interrupted\n"); return 0; } /* after process is done, get the values from the shared memory area */ res->port.shm = shmat(res->port.shmid, NULL, 0); if (res->port.shm == (char *)-1) { ee_printf("ERROR in parent shmat!\n"); return 0; } memcpy(&(res->crc), res->port.shm, 8); shmdt(res->port.shm); return 1; } #elif USE_SOCKET static int key_id = 0; ee_u8 core_start_parallel(core_results *res) { int bound, buffer_length = 8; res->port.sa.sin_family = AF_INET; res->port.sa.sin_addr.s_addr = htonl(0x7F000001); res->port.sa.sin_port = htons(7654 + key_id); key_id++; res->port.pid = fork(); if (res->port.pid == 0) { /* benchmark child */ iterate(res); res->port.sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (-1 == res->port.sock) /* if socket failed to initialize, exit */ { ee_printf("Error Creating Socket"); } else { int bytes_sent = sendto(res->port.sock, &(res->crc), buffer_length, 0, (struct sockaddr *)&(res->port.sa), sizeof(struct sockaddr_in)); if (bytes_sent < 0) ee_printf("Error sending packet: %s\n", strerror(errno)); close(res->port.sock); /* close the socket */ } exit(0); } /* parent process, open the socket */ res->port.sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); bound = bind(res->port.sock, (struct sockaddr *)&(res->port.sa), sizeof(struct sockaddr)); if (bound < 0) ee_printf("bind(): %s\n", strerror(errno)); return 1; } ee_u8 core_stop_parallel(core_results *res) { int status; int fromlen = sizeof(struct sockaddr); int recsize = recvfrom(res->port.sock, &(res->crc), 8, 0, (struct sockaddr *)&(res->port.sa), &fromlen); if (recsize < 0) { ee_printf("Error in receive: %s\n", strerror(errno)); return 0; } pid_t wpid = waitpid(res->port.pid, &status, WUNTRACED); if (wpid != res->port.pid) { ee_printf("ERROR waiting for child.\n"); if (errno == ECHILD) ee_printf("errno=No such child %d\n", res->port.pid); if (errno == EINTR) ee_printf("errno=Interrupted\n"); return 0; } return 1; } #else /* no standard multicore implementation */ #error \ "Please implement multicore functionality in core_portme.c to use multiple contexts." #endif /* multithread implementations */ #endif ================================================ FILE: ThirdParty/Benchmarks/coremark/posix/core_portme.h ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ /* Topic: Description This file contains configuration constants required to execute on different platforms */ #ifndef CORE_PORTME_H #define CORE_PORTME_H #include "core_portme_posix_overrides.h" /************************/ /* Data types and settings */ /************************/ /* Configuration: HAS_FLOAT Define to 1 if the platform supports floating point. */ #ifndef HAS_FLOAT #define HAS_FLOAT 1 #endif /* Configuration: HAS_TIME_H Define to 1 if platform has the time.h header file, and implementation of functions thereof. */ #ifndef HAS_TIME_H #define HAS_TIME_H 1 #endif /* Configuration: USE_CLOCK Define to 1 if platform has the time.h header file, and implementation of functions thereof. */ #ifndef USE_CLOCK #define USE_CLOCK 0 #endif /* Configuration: HAS_STDIO Define to 1 if the platform has stdio.h. */ #ifndef HAS_STDIO #define HAS_STDIO 1 #endif /* Configuration: HAS_PRINTF Define to 1 if the platform has stdio.h and implements the printf function. */ #ifndef HAS_PRINTF #define HAS_PRINTF 1 #endif /* Configuration: CORE_TICKS Define type of return from the timing functions. */ #if defined(_MSC_VER) #include typedef size_t CORE_TICKS; #elif HAS_TIME_H #include typedef clock_t CORE_TICKS; #else #error \ "Please define type of CORE_TICKS and implement start_time, end_time get_time and time_in_secs functions!" #endif /* Definitions: COMPILER_VERSION, COMPILER_FLAGS, MEM_LOCATION Initialize these strings per platform */ #ifndef COMPILER_VERSION #if defined(__clang__) #define COMPILER_VERSION __VERSION__ #elif defined(__GNUC__) #define COMPILER_VERSION "GCC"__VERSION__ #else #define COMPILER_VERSION "Please put compiler version here (e.g. gcc 4.1)" #endif #endif #ifndef COMPILER_FLAGS #define COMPILER_FLAGS \ FLAGS_STR /* "Please put compiler flags here (e.g. -o3)" */ #endif #ifndef MEM_LOCATION #define MEM_LOCATION \ "Please put data memory location here\n\t\t\t(e.g. code in flash, data " \ "on heap etc)" #define MEM_LOCATION_UNSPEC 1 #endif #include /* Data Types: To avoid compiler issues, define the data types that need ot be used for 8b, 16b and 32b in . *Imprtant*: ee_ptr_int needs to be the data type used to hold pointers, otherwise coremark may fail!!! */ typedef signed short ee_s16; typedef unsigned short ee_u16; typedef signed int ee_s32; typedef double ee_f32; typedef unsigned char ee_u8; typedef unsigned int ee_u32; typedef uintptr_t ee_ptr_int; typedef size_t ee_size_t; /* align an offset to point to a 32b value */ #define align_mem(x) (void *)(4 + (((ee_ptr_int)(x)-1) & ~3)) /* Configuration: SEED_METHOD Defines method to get seed values that cannot be computed at compile time. Valid values: SEED_ARG - from command line. SEED_FUNC - from a system function. SEED_VOLATILE - from volatile variables. */ #ifndef SEED_METHOD #define SEED_METHOD SEED_ARG #endif /* Configuration: MEM_METHOD Defines method to get a block of memry. Valid values: MEM_MALLOC - for platforms that implement malloc and have malloc.h. MEM_STATIC - to use a static memory array. MEM_STACK - to allocate the data block on the stack (NYI). */ #ifndef MEM_METHOD #define MEM_METHOD MEM_MALLOC #endif /* Configuration: MULTITHREAD Define for parallel execution Valid values: 1 - only one context (default). N>1 - will execute N copies in parallel. Note: If this flag is defined to more then 1, an implementation for launching parallel contexts must be defined. Two sample implementations are provided. Use or to enable them. It is valid to have a different implementation of and in , to fit a particular architecture. */ #ifndef MULTITHREAD #define MULTITHREAD 1 #endif /* Configuration: USE_PTHREAD Sample implementation for launching parallel contexts This implementation uses pthread_thread_create and pthread_join. Valid values: 0 - Do not use pthreads API. 1 - Use pthreads API Note: This flag only matters if MULTITHREAD has been defined to a value greater then 1. */ #ifndef USE_PTHREAD #define USE_PTHREAD 0 #endif /* Configuration: USE_FORK Sample implementation for launching parallel contexts This implementation uses fork, waitpid, shmget,shmat and shmdt. Valid values: 0 - Do not use fork API. 1 - Use fork API Note: This flag only matters if MULTITHREAD has been defined to a value greater then 1. */ #ifndef USE_FORK #define USE_FORK 0 #endif /* Configuration: USE_SOCKET Sample implementation for launching parallel contexts This implementation uses fork, socket, sendto and recvfrom Valid values: 0 - Do not use fork and sockets API. 1 - Use fork and sockets API Note: This flag only matters if MULTITHREAD has been defined to a value greater then 1. */ #ifndef USE_SOCKET #define USE_SOCKET 0 #endif /* Configuration: MAIN_HAS_NOARGC Needed if platform does not support getting arguments to main. Valid values: 0 - argc/argv to main is supported 1 - argc/argv to main is not supported */ #ifndef MAIN_HAS_NOARGC #define MAIN_HAS_NOARGC 0 #endif /* Configuration: MAIN_HAS_NORETURN Needed if platform does not support returning a value from main. Valid values: 0 - main returns an int, and return value will be 0. 1 - platform does not support returning a value from main */ #ifndef MAIN_HAS_NORETURN #define MAIN_HAS_NORETURN 0 #endif /* Variable: default_num_contexts Number of contexts to spawn in multicore context. Override this global value to change number of contexts used. Note: This value may not be set higher then the define. To experiment, you can set the define to the highest value expected, and use argc/argv in the to set this value from the command line. */ extern ee_u32 default_num_contexts; #if (MULTITHREAD > 1) #if USE_PTHREAD #include #define PARALLEL_METHOD "PThreads" #elif USE_FORK #include #include #include #include #include /* for memcpy */ #define PARALLEL_METHOD "Fork" #elif USE_SOCKET #include #include #include #include #include #include #include #include #include #include #define PARALLEL_METHOD "Sockets" #else #define PARALLEL_METHOD "Proprietary" #error \ "Please implement multicore functionality in core_portme.c to use multiple contexts." #endif /* Method for multithreading */ #endif /* MULTITHREAD > 1 */ typedef struct CORE_PORTABLE_S { #if (MULTITHREAD > 1) #if USE_PTHREAD pthread_t thread; #elif USE_FORK pid_t pid; int shmid; void *shm; #elif USE_SOCKET pid_t pid; int sock; struct sockaddr_in sa; #endif /* Method for multithreading */ #endif /* MULTITHREAD>1 */ ee_u8 portable_id; } core_portable; /* target specific init/fini */ void portable_init(core_portable *p, int *argc, char *argv[]); void portable_fini(core_portable *p); #if (SEED_METHOD == SEED_VOLATILE) #if (VALIDATION_RUN || PERFORMANCE_RUN || PROFILE_RUN) #define RUN_TYPE_FLAG 1 #else #if (TOTAL_DATA_SIZE == 1200) #define PROFILE_RUN 1 #else #define PERFORMANCE_RUN 1 #endif #endif #endif /* SEED_METHOD==SEED_VOLATILE */ #endif /* CORE_PORTME_H */ ================================================ FILE: ThirdParty/Benchmarks/coremark/posix/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on #File: core_portme.mak # Flag: OUTFLAG # Use this flag to define how to to get an executable (e.g -o) OUTFLAG= -o # Flag: CC # Use this flag to define compiler to use CC?= cc # Flag: CFLAGS # Use this flag to define compiler options. Note, you can add compiler options from the command line using XCFLAGS="other flags" PORT_CFLAGS = -O2 FLAGS_STR = "$(PORT_CFLAGS) $(XCFLAGS) $(XLFLAGS) $(LFLAGS_END)" CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -Iposix -I. -DFLAGS_STR=\"$(FLAGS_STR)\" # Flag: NO_LIBRT # Define if the platform does not provide a librt ifndef NO_LIBRT #Flag: LFLAGS_END # Define any libraries needed for linking or other flags that should come at the end of the link line (e.g. linker scripts). # Note: On certain platforms, the default clock_gettime implementation is supported but requires linking of librt. LFLAGS_END += -lrt endif # Flag: PORT_SRCS # Port specific source files can be added here PORT_SRCS = posix/core_portme.c vpath %.c posix vpath %.h posix vpath %.mak posix # Flag: EXTRA_DEPENDS # Port specific extra build dependencies. # Some ports inherit from us, so ensure this Makefile is always a dependency. EXTRA_DEPENDS += posix/core_portme.mak # Flag: LOAD # Define this flag if you need to load to a target, as in a cross compile environment. # Flag: RUN # Define this flag if running does not consist of simple invocation of the binary. # In a cross compile environment, you need to define this. #For flashing and using a tera term macro, you could use #LOAD = flash ADDR #RUN = ttpmacro coremark.ttl #For copying to target and executing via SSH connection, you could use #LOAD = scp $(OUTFILE) user@target:~ #RUN = ssh user@target -c #For native compilation and execution LOAD = echo Loading done RUN = OEXT = .o EXE = .exe # Flag: SEPARATE_COMPILE # Define if you need to separate compilation from link stage. # In this case, you also need to define below how to create an object file, and how to link. ifdef SEPARATE_COMPILE LD = gcc OBJOUT = -o LFLAGS = OFLAG = -o COUT = -c # Flag: PORT_OBJS # Port specific object files can be added here PORT_OBJS = $(PORT_DIR)/core_portme$(OEXT) PORT_CLEAN = *$(OEXT) $(OPATH)%$(OEXT) : %.c $(CC) $(CFLAGS) $(XCFLAGS) $(COUT) $< $(OBJOUT) $@ $(OPATH)$(PORT_DIR)/%$(OEXT) : posix/%.c $(CC) $(CFLAGS) $(XCFLAGS) $(COUT) $< $(OBJOUT) $@ endif # Target: port_prebuild # Generate any files that are needed before actual build starts. # E.g. generate profile guidance files. Sample PGO generation for gcc enabled with PGO=1 # - First, check if PGO was defined on the command line, if so, need to add -fprofile-use to compile line. # - Second, if PGO reference has not yet been generated, add a step to the prebuild that will build a profile-generate version and run it. # Note - Using REBUILD=1 # # Use make PGO=1 to invoke this sample processing. ifdef PGO ifeq (,$(findstring $(PGO),gen)) PGO_STAGE=build_pgo_gcc CFLAGS+=-fprofile-use endif PORT_CLEAN+=*.gcda *.gcno gmon.out endif .PHONY: port_prebuild port_prebuild: $(PGO_STAGE) .PHONY: build_pgo_gcc build_pgo_gcc: $(MAKE) PGO=gen XCFLAGS="$(XCFLAGS) -fprofile-generate -DTOTAL_DATA_SIZE=1200" ITERATIONS=10 gen_pgo_data REBUILD=1 # Target: port_postbuild # Generate any files that are needed after actual build end. # E.g. change format to srec, bin, zip in order to be able to load into flash .PHONY: port_postbuild port_postbuild: # Target: port_postrun # Do platform specific after run stuff. # E.g. reset the board, backup the logfiles etc. .PHONY: port_postrun port_postrun: # Target: port_prerun # Do platform specific after run stuff. # E.g. reset the board, backup the logfiles etc. .PHONY: port_prerun port_prerun: # Target: port_postload # Do platform specific after load stuff. # E.g. reset the reset power to the flash eraser .PHONY: port_postload port_postload: # Target: port_preload # Do platform specific before load stuff. # E.g. reset the reset power to the flash eraser .PHONY: port_preload port_preload: # FLAG: OPATH # Path to the output folder. Default - current folder. OPATH = ./ MKDIR = mkdir -p # FLAG: PERL # Define perl executable to calculate the geomean if running separate. PERL=/usr/bin/perl ================================================ FILE: ThirdParty/Benchmarks/coremark/posix/core_portme_posix_overrides.h ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ /* Topic: Description This file contains additional configuration constants required to execute on different platforms over and above the POSIX defaults */ #ifndef CORE_PORTME_POSIX_OVERRIDES_H #define CORE_PORTME_POSIX_OVERRIDES_H /* None by default */ #endif ================================================ FILE: ThirdParty/Benchmarks/coremark/rtems/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on NO_LIBRT = 1 include posix/core_portme.mak ================================================ FILE: ThirdParty/Benchmarks/coremark/rtems/init.c ================================================ /*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2021 Hesham Almatary * * This software was developed by SRI International and the University of * Cambridge Computer Laboratory (Department of Computer Science and * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the * DARPA SSITH research programme. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include int main( int argc, void **args ); rtems_task Init( rtems_task_argument ignored ); rtems_task Init( rtems_task_argument ignored ) { int ret = main(0, NULL); exit(ret); } /* configuration information */ #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_TASKS 20 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT #include ================================================ FILE: ThirdParty/Benchmarks/coremark/simple/core_portme.c ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ #include #include #include "coremark.h" #if VALIDATION_RUN volatile ee_s32 seed1_volatile = 0x3415; volatile ee_s32 seed2_volatile = 0x3415; volatile ee_s32 seed3_volatile = 0x66; #endif #if PERFORMANCE_RUN volatile ee_s32 seed1_volatile = 0x0; volatile ee_s32 seed2_volatile = 0x0; volatile ee_s32 seed3_volatile = 0x66; #endif #if PROFILE_RUN volatile ee_s32 seed1_volatile = 0x8; volatile ee_s32 seed2_volatile = 0x8; volatile ee_s32 seed3_volatile = 0x8; #endif volatile ee_s32 seed4_volatile = ITERATIONS; volatile ee_s32 seed5_volatile = 0; /* Porting : Timing functions How to capture time and convert to seconds must be ported to whatever is supported by the platform. e.g. Read value from on board RTC, read value from cpu clock cycles performance counter etc. Sample implementation for standard time.h and windows.h definitions included. */ /* Define : TIMER_RES_DIVIDER Divider to trade off timer resolution and total time that can be measured. Use lower values to increase resolution, but make sure that overflow does not occur. If there are issues with the return value overflowing, increase this value. */ #define NSECS_PER_SEC CLOCKS_PER_SEC #define CORETIMETYPE clock_t #define GETMYTIME(_t) (*_t = clock()) #define MYTIMEDIFF(fin, ini) ((fin) - (ini)) #define TIMER_RES_DIVIDER 1 #define SAMPLE_TIME_IMPLEMENTATION 1 #define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER) /** Define Host specific (POSIX), or target specific global time variables. */ static CORETIMETYPE start_time_val, stop_time_val; /* Function : start_time This function will be called right before starting the timed portion of the benchmark. Implementation may be capturing a system timer (as implemented in the example code) or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0. */ void start_time(void) { GETMYTIME(&start_time_val); } /* Function : stop_time This function will be called right after ending the timed portion of the benchmark. Implementation may be capturing a system timer (as implemented in the example code) or other system parameters - e.g. reading the current value of cpu cycles counter. */ void stop_time(void) { GETMYTIME(&stop_time_val); } /* Function : get_time Return an abstract "ticks" number that signifies time on the system. Actual value returned may be cpu cycles, milliseconds or any other value, as long as it can be converted to seconds by . This methodology is taken to accommodate any hardware or simulated platform. The sample implementation returns millisecs by default, and the resolution is controlled by */ CORE_TICKS get_time(void) { CORE_TICKS elapsed = (CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val)); return elapsed; } /* Function : time_in_secs Convert the value returned by get_time to seconds. The type is used to accommodate systems with no support for floating point. Default implementation implemented by the EE_TICKS_PER_SEC macro above. */ secs_ret time_in_secs(CORE_TICKS ticks) { secs_ret retval = ((secs_ret)ticks) / (secs_ret)EE_TICKS_PER_SEC; return retval; } ee_u32 default_num_contexts = 1; /* Function : portable_init Target specific initialization code Test for some common mistakes. */ void portable_init(core_portable *p, int *argc, char *argv[]) { (void)argc; // prevent unused warning (void)argv; // prevent unused warning if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) { ee_printf( "ERROR! Please define ee_ptr_int to a type that holds a " "pointer!\n"); } if (sizeof(ee_u32) != 4) { ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n"); } p->portable_id = 1; } /* Function : portable_fini Target specific final code */ void portable_fini(core_portable *p) { p->portable_id = 0; } ================================================ FILE: ThirdParty/Benchmarks/coremark/simple/core_portme.h ================================================ /* Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Original Author: Shay Gal-on */ /* Topic : Description This file contains configuration constants required to execute on different platforms */ #ifndef CORE_PORTME_H #define CORE_PORTME_H /************************/ /* Data types and settings */ /************************/ /* Configuration : HAS_FLOAT Define to 1 if the platform supports floating point. */ #ifndef HAS_FLOAT #define HAS_FLOAT 1 #endif /* Configuration : HAS_TIME_H Define to 1 if platform has the time.h header file, and implementation of functions thereof. */ #ifndef HAS_TIME_H #define HAS_TIME_H 1 #endif /* Configuration : USE_CLOCK Define to 1 if platform has the time.h header file, and implementation of functions thereof. */ #ifndef USE_CLOCK #define USE_CLOCK 1 #endif /* Configuration : HAS_STDIO Define to 1 if the platform has stdio.h. */ #ifndef HAS_STDIO #define HAS_STDIO 1 #endif /* Configuration : HAS_PRINTF Define to 1 if the platform has stdio.h and implements the printf function. */ #ifndef HAS_PRINTF #define HAS_PRINTF 1 #endif /* Configuration : CORE_TICKS Define type of return from the timing functions. */ #include typedef clock_t CORE_TICKS; /* Definitions : COMPILER_VERSION, COMPILER_FLAGS, MEM_LOCATION Initialize these strings per platform */ #ifndef COMPILER_VERSION #ifdef __GNUC__ #define COMPILER_VERSION "GCC"__VERSION__ #else #define COMPILER_VERSION "Please put compiler version here (e.g. gcc 4.1)" #endif #endif #ifndef COMPILER_FLAGS #define COMPILER_FLAGS \ FLAGS_STR /* "Please put compiler flags here (e.g. -o3)" */ #endif #ifndef MEM_LOCATION #define MEM_LOCATION "STACK" #endif /* Data Types : To avoid compiler issues, define the data types that need ot be used for 8b, 16b and 32b in . *Imprtant* : ee_ptr_int needs to be the data type used to hold pointers, otherwise coremark may fail!!! */ typedef signed short ee_s16; typedef unsigned short ee_u16; typedef signed int ee_s32; typedef double ee_f32; typedef unsigned char ee_u8; typedef unsigned int ee_u32; typedef ee_u32 ee_ptr_int; typedef size_t ee_size_t; /* align_mem : This macro is used to align an offset to point to a 32b value. It is used in the Matrix algorithm to initialize the input memory blocks. */ #define align_mem(x) (void *)(4 + (((ee_ptr_int)(x)-1) & ~3)) /* Configuration : SEED_METHOD Defines method to get seed values that cannot be computed at compile time. Valid values : SEED_ARG - from command line. SEED_FUNC - from a system function. SEED_VOLATILE - from volatile variables. */ #ifndef SEED_METHOD #define SEED_METHOD SEED_VOLATILE #endif /* Configuration : MEM_METHOD Defines method to get a block of memry. Valid values : MEM_MALLOC - for platforms that implement malloc and have malloc.h. MEM_STATIC - to use a static memory array. MEM_STACK - to allocate the data block on the stack (NYI). */ #ifndef MEM_METHOD #define MEM_METHOD MEM_STACK #endif /* Configuration : MULTITHREAD Define for parallel execution Valid values : 1 - only one context (default). N>1 - will execute N copies in parallel. Note : If this flag is defined to more then 1, an implementation for launching parallel contexts must be defined. Two sample implementations are provided. Use or to enable them. It is valid to have a different implementation of and in , to fit a particular architecture. */ #ifndef MULTITHREAD #define MULTITHREAD 1 #define USE_PTHREAD 0 #define USE_FORK 0 #define USE_SOCKET 0 #endif /* Configuration : MAIN_HAS_NOARGC Needed if platform does not support getting arguments to main. Valid values : 0 - argc/argv to main is supported 1 - argc/argv to main is not supported Note : This flag only matters if MULTITHREAD has been defined to a value greater then 1. */ #ifndef MAIN_HAS_NOARGC #define MAIN_HAS_NOARGC 0 #endif /* Configuration : MAIN_HAS_NORETURN Needed if platform does not support returning a value from main. Valid values : 0 - main returns an int, and return value will be 0. 1 - platform does not support returning a value from main */ #ifndef MAIN_HAS_NORETURN #define MAIN_HAS_NORETURN 0 #endif /* Variable : default_num_contexts Not used for this simple port, must contain the value 1. */ extern ee_u32 default_num_contexts; typedef struct CORE_PORTABLE_S { ee_u8 portable_id; } core_portable; /* target specific init/fini */ void portable_init(core_portable *p, int *argc, char *argv[]); void portable_fini(core_portable *p); #if !defined(PROFILE_RUN) && !defined(PERFORMANCE_RUN) \ && !defined(VALIDATION_RUN) #if (TOTAL_DATA_SIZE == 1200) #define PROFILE_RUN 1 #elif (TOTAL_DATA_SIZE == 2000) #define PERFORMANCE_RUN 1 #else #define VALIDATION_RUN 1 #endif #endif #endif /* CORE_PORTME_H */ ================================================ FILE: ThirdParty/Benchmarks/coremark/simple/core_portme.mak ================================================ # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Original Author: Shay Gal-on #File : core_portme.mak # Flag : OUTFLAG # Use this flag to define how to to get an executable (e.g -o) OUTFLAG= -o # Flag : CC # Use this flag to define compiler to use CC = gcc # Flag : CFLAGS # Use this flag to define compiler options. Note, you can add compiler options from the command line using XCFLAGS="other flags" PORT_CFLAGS = -O2 FLAGS_STR = "$(PORT_CFLAGS) $(XCFLAGS) $(XLFLAGS) $(LFLAGS_END)" CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR=\"$(FLAGS_STR)\" #Flag : LFLAGS_END # Define any libraries needed for linking or other flags that should come at the end of the link line (e.g. linker scripts). # Note : On certain platforms, the default clock_gettime implementation is supported but requires linking of librt. LFLAGS_END = # Flag : PORT_SRCS # Port specific source files can be added here PORT_SRCS = $(PORT_DIR)/core_portme.c # Flag : LOAD # For a simple port, we assume self hosted compile and run, no load needed. # Flag : RUN # For a simple port, we assume self hosted compile and run, simple invocation of the executable #For native compilation and execution LOAD = echo Loading done RUN = OEXT = .o EXE = .exe # Target : port_pre% and port_post% # For the purpose of this simple port, no pre or post steps needed. .PHONY : port_prebuild port_postbuild port_prerun port_postrun port_preload port_postload port_pre% port_post% : # FLAG : OPATH # Path to the output folder. Default - current folder. OPATH = ./ MKDIR = mkdir -p ================================================ FILE: ThirdParty/Benchmarks/coremark/zephyr/module.yml ================================================ name: coremark build: cmake-ext: True kconfig-ext: True ================================================ FILE: ThirdParty/liblmdb/.gitignore ================================================ mtest mtest[23456] testdb mdb_copy mdb_stat mdb_dump mdb_load *.lo *.[ao] *.so *.exe *[~#] *.bak *.orig *.rej *.gcov *.gcda *.gcno core core.* valgrind.* man/ html/ ================================================ FILE: ThirdParty/liblmdb/CMakeLists.txt ================================================ set(LMDB_PRIVATE_DEFINITIONS) if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") list(APPEND LMDB_PRIVATE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS") endif() WAVM_ADD_THIRD_PARTY_LIBRARY(WAVMlmdb SOURCES lmdb.h mdb.c midl.c midl.h PUBLIC_INCLUDE_DIRECTORIES $ PRIVATE_DEFINITIONS ${LMDB_PRIVATE_DEFINITIONS} ) ================================================ FILE: ThirdParty/liblmdb/COPYRIGHT ================================================ Copyright 2011-2019 Howard Chu, Symas Corp. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted only as authorized by the OpenLDAP Public License. A copy of this license is available in the file LICENSE in the top-level directory of the distribution or, alternatively, at . OpenLDAP is a registered trademark of the OpenLDAP Foundation. Individual files and/or contributed packages may be copyright by other parties and/or subject to additional restrictions. This work also contains materials derived from public sources. Additional information about OpenLDAP can be obtained at . ================================================ FILE: ThirdParty/liblmdb/Doxyfile ================================================ # Doxyfile 1.7.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = LMDB # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES INLINE_GROUPED_CLASSES = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = YES # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = lmdb.h midl.h mdb.c midl.c intro.doc # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvances is that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = YES # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DEBUG=2 __GNUC__=1 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = tooltag=./man1 # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES ================================================ FILE: ThirdParty/liblmdb/LICENSE ================================================ The OpenLDAP Public License Version 2.8, 17 August 2003 Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met: 1. Redistributions in source form must retain copyright statements and notices, 2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution, and 3. Redistributions must contain a verbatim copy of this document. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use this Software under terms of this license revision or under the terms of any subsequent revision of the license. THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The names of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission. Title to copyright in this Software shall at all times remain with copyright holders. OpenLDAP is a registered trademark of the OpenLDAP Foundation. Copyright 1999-2003 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distribute verbatim copies of this document is granted. ================================================ FILE: ThirdParty/liblmdb/Makefile ================================================ # Makefile for liblmdb (Lightning memory-mapped database library). ######################################################################## # Configuration. The compiler options must enable threaded compilation. # # Preprocessor macros (for CPPFLAGS) of interest... # Note that the defaults should already be correct for most # platforms; you should not need to change any of these. # Read their descriptions in mdb.c if you do: # # - MDB_USE_POSIX_MUTEX, MDB_USE_POSIX_SEM, MDB_USE_SYSV_SEM # - MDB_DSYNC # - MDB_FDATASYNC # - MDB_FDATASYNC_WORKS # - MDB_USE_PWRITEV # - MDB_USE_ROBUST # # There may be other macros in mdb.c of interest. You should # read mdb.c before changing any of them. # CC = gcc AR = ar W = -W -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized THREADS = -pthread OPT = -O2 -g CFLAGS = $(THREADS) $(OPT) $(W) $(XCFLAGS) LDLIBS = SOLIBS = SOEXT = .so prefix = /usr/local exec_prefix = $(prefix) bindir = $(exec_prefix)/bin libdir = $(exec_prefix)/lib includedir = $(prefix)/include datarootdir = $(prefix)/share mandir = $(datarootdir)/man ######################################################################## IHDRS = lmdb.h ILIBS = liblmdb.a liblmdb$(SOEXT) IPROGS = mdb_stat mdb_copy mdb_dump mdb_load mdb_drop IDOCS = mdb_stat.1 mdb_copy.1 mdb_dump.1 mdb_load.1 mdb_drop.1 PROGS = $(IPROGS) mtest mtest2 mtest3 mtest4 mtest5 all: $(ILIBS) $(PROGS) install: $(ILIBS) $(IPROGS) $(IHDRS) mkdir -p $(DESTDIR)$(bindir) mkdir -p $(DESTDIR)$(libdir) mkdir -p $(DESTDIR)$(includedir) mkdir -p $(DESTDIR)$(mandir)/man1 for f in $(IPROGS); do cp $$f $(DESTDIR)$(bindir); done for f in $(ILIBS); do cp $$f $(DESTDIR)$(libdir); done for f in $(IHDRS); do cp $$f $(DESTDIR)$(includedir); done for f in $(IDOCS); do cp $$f $(DESTDIR)$(mandir)/man1; done clean: rm -rf $(PROGS) *.[ao] *.[ls]o *~ testdb test: all rm -rf testdb && mkdir testdb ./mtest && ./mdb_stat testdb liblmdb.a: mdb.o midl.o $(AR) rs $@ mdb.o midl.o liblmdb$(SOEXT): mdb.lo midl.lo # $(CC) $(LDFLAGS) -pthread -shared -Wl,-Bsymbolic -o $@ mdb.o midl.o $(SOLIBS) $(CC) $(LDFLAGS) -pthread -shared -o $@ mdb.lo midl.lo $(SOLIBS) mdb_stat: mdb_stat.o liblmdb.a mdb_copy: mdb_copy.o liblmdb.a mdb_dump: mdb_dump.o liblmdb.a mdb_load: mdb_load.o liblmdb.a mdb_drop: mdb_drop.o liblmdb.a mtest: mtest.o liblmdb.a mtest2: mtest2.o liblmdb.a mtest3: mtest3.o liblmdb.a mtest4: mtest4.o liblmdb.a mtest5: mtest5.o liblmdb.a mtest6: mtest6.o liblmdb.a mdb.o: mdb.c lmdb.h midl.h $(CC) $(CFLAGS) $(CPPFLAGS) -c mdb.c midl.o: midl.c midl.h $(CC) $(CFLAGS) $(CPPFLAGS) -c midl.c mdb.lo: mdb.c lmdb.h midl.h $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c mdb.c -o $@ midl.lo: midl.c midl.h $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c midl.c -o $@ %: %.o $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ %.o: %.c lmdb.h $(CC) $(CFLAGS) $(CPPFLAGS) -c $< COV_FLAGS=-fprofile-arcs -ftest-coverage COV_OBJS=xmdb.o xmidl.o coverage: xmtest for i in mtest*.c [0-9]*.c; do j=`basename \$$i .c`; $(MAKE) $$j.o; \ gcc -o x$$j $$j.o $(COV_OBJS) -pthread $(COV_FLAGS); \ rm -rf testdb; mkdir testdb; ./x$$j; done gcov xmdb.c gcov xmidl.c xmtest: mtest.o xmdb.o xmidl.o gcc -o xmtest mtest.o xmdb.o xmidl.o -pthread $(COV_FLAGS) xmdb.o: mdb.c lmdb.h midl.h $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -O0 $(COV_FLAGS) -c mdb.c -o $@ xmidl.o: midl.c midl.h $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -O0 $(COV_FLAGS) -c midl.c -o $@ ================================================ FILE: ThirdParty/liblmdb/intro.doc ================================================ /* * Copyright 2015-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ /** @page starting Getting Started LMDB is compact, fast, powerful, and robust and implements a simplified variant of the BerkeleyDB (BDB) API. (BDB is also very powerful, and verbosely documented in its own right.) After reading this page, the main \ref mdb documentation should make sense. Thanks to Bert Hubert for creating the initial version of this writeup. Everything starts with an environment, created by #mdb_env_create(). Once created, this environment must also be opened with #mdb_env_open(). #mdb_env_open() gets passed a name which is interpreted as a directory path. Note that this directory must exist already, it is not created for you. Within that directory, a lock file and a storage file will be generated. If you don't want to use a directory, you can pass the #MDB_NOSUBDIR option, in which case the path you provided is used directly as the data file, and another file with a "-lock" suffix added will be used for the lock file. Once the environment is open, a transaction can be created within it using #mdb_txn_begin(). Transactions may be read-write or read-only, and read-write transactions may be nested. A transaction must only be used by one thread at a time. Transactions are always required, even for read-only access. The transaction provides a consistent view of the data. Once a transaction has been created, a database can be opened within it using #mdb_dbi_open(). If only one database will ever be used in the environment, a NULL can be passed as the database name. For named databases, the #MDB_CREATE flag must be used to create the database if it doesn't already exist. Also, #mdb_env_set_maxdbs() must be called after #mdb_env_create() and before #mdb_env_open() to set the maximum number of named databases you want to support. Note: a single transaction can open multiple databases. Generally databases should only be opened once, by the first transaction in the process. After the first transaction completes, the database handles can freely be used by all subsequent transactions. Within a transaction, #mdb_get() and #mdb_put() can store single key/value pairs if that is all you need to do (but see \ref Cursors below if you want to do more). A key/value pair is expressed as two #MDB_val structures. This struct has two fields, \c mv_size and \c mv_data. The data is a \c void pointer to an array of \c mv_size bytes. Because LMDB is very efficient (and usually zero-copy), the data returned in an #MDB_val structure may be memory-mapped straight from disk. In other words look but do not touch (or free() for that matter). Once a transaction is closed, the values can no longer be used, so make a copy if you need to keep them after that. @section Cursors Cursors To do more powerful things, we must use a cursor. Within the transaction, a cursor can be created with #mdb_cursor_open(). With this cursor we can store/retrieve/delete (multiple) values using #mdb_cursor_get(), #mdb_cursor_put(), and #mdb_cursor_del(). #mdb_cursor_get() positions itself depending on the cursor operation requested, and for some operations, on the supplied key. For example, to list all key/value pairs in a database, use operation #MDB_FIRST for the first call to #mdb_cursor_get(), and #MDB_NEXT on subsequent calls, until the end is hit. To retrieve all keys starting from a specified key value, use #MDB_SET. For more cursor operations, see the \ref mdb docs. When using #mdb_cursor_put(), either the function will position the cursor for you based on the \b key, or you can use operation #MDB_CURRENT to use the current position of the cursor. Note that \b key must then match the current position's key. @subsection summary Summarizing the Opening So we have a cursor in a transaction which opened a database in an environment which is opened from a filesystem after it was separately created. Or, we create an environment, open it from a filesystem, create a transaction within it, open a database within that transaction, and create a cursor within all of the above. Got it? @section thrproc Threads and Processes LMDB uses POSIX locks on files, and these locks have issues if one process opens a file multiple times. Because of this, do not #mdb_env_open() a file multiple times from a single process. Instead, share the LMDB environment that has opened the file across all threads. Otherwise, if a single process opens the same environment multiple times, closing it once will remove all the locks held on it, and the other instances will be vulnerable to corruption from other processes. Also note that a transaction is tied to one thread by default using Thread Local Storage. If you want to pass read-only transactions across threads, you can use the #MDB_NOTLS option on the environment. @section txns Transactions, Rollbacks, etc. To actually get anything done, a transaction must be committed using #mdb_txn_commit(). Alternatively, all of a transaction's operations can be discarded using #mdb_txn_abort(). In a read-only transaction, any cursors will \b not automatically be freed. In a read-write transaction, all cursors will be freed and must not be used again. For read-only transactions, obviously there is nothing to commit to storage. The transaction still must eventually be aborted to close any database handle(s) opened in it, or committed to keep the database handles around for reuse in new transactions. In addition, as long as a transaction is open, a consistent view of the database is kept alive, which requires storage. A read-only transaction that no longer requires this consistent view should be terminated (committed or aborted) when the view is no longer needed (but see below for an optimization). There can be multiple simultaneously active read-only transactions but only one that can write. Once a single read-write transaction is opened, all further attempts to begin one will block until the first one is committed or aborted. This has no effect on read-only transactions, however, and they may continue to be opened at any time. @section dupkeys Duplicate Keys #mdb_get() and #mdb_put() respectively have no and only some support for multiple key/value pairs with identical keys. If there are multiple values for a key, #mdb_get() will only return the first value. When multiple values for one key are required, pass the #MDB_DUPSORT flag to #mdb_dbi_open(). In an #MDB_DUPSORT database, by default #mdb_put() will not replace the value for a key if the key existed already. Instead it will add the new value to the key. In addition, #mdb_del() will pay attention to the value field too, allowing for specific values of a key to be deleted. Finally, additional cursor operations become available for traversing through and retrieving duplicate values. @section optim Some Optimization If you frequently begin and abort read-only transactions, as an optimization, it is possible to only reset and renew a transaction. #mdb_txn_reset() releases any old copies of data kept around for a read-only transaction. To reuse this reset transaction, call #mdb_txn_renew() on it. Any cursors in this transaction must also be renewed using #mdb_cursor_renew(). Note that #mdb_txn_reset() is similar to #mdb_txn_abort() and will close any databases you opened within the transaction. To permanently free a transaction, reset or not, use #mdb_txn_abort(). @section cleanup Cleaning Up For read-only transactions, any cursors created within it must be closed using #mdb_cursor_close(). It is very rarely necessary to close a database handle, and in general they should just be left open. @section onward The Full API The full \ref mdb documentation lists further details, like how to: \li size a database (the default limits are intentionally small) \li drop and clean a database \li detect and report errors \li optimize (bulk) loading speed \li (temporarily) reduce robustness to gain even more speed \li gather statistics about the database \li define custom sort orders */ ================================================ FILE: ThirdParty/liblmdb/lmdb.h ================================================ /** @file lmdb.h * @brief Lightning memory-mapped database library * * @mainpage Lightning Memory-Mapped Database Manager (LMDB) * * @section intro_sec Introduction * LMDB is a Btree-based database management library modeled loosely on the * BerkeleyDB API, but much simplified. The entire database is exposed * in a memory map, and all data fetches return data directly * from the mapped memory, so no malloc's or memcpy's occur during * data fetches. As such, the library is extremely simple because it * requires no page caching layer of its own, and it is extremely high * performance and memory-efficient. It is also fully transactional with * full ACID semantics, and when the memory map is read-only, the * database integrity cannot be corrupted by stray pointer writes from * application code. * * The library is fully thread-aware and supports concurrent read/write * access from multiple processes and threads. Data pages use a copy-on- * write strategy so no active data pages are ever overwritten, which * also provides resistance to corruption and eliminates the need of any * special recovery procedures after a system crash. Writes are fully * serialized; only one write transaction may be active at a time, which * guarantees that writers can never deadlock. The database structure is * multi-versioned so readers run with no locks; writers cannot block * readers, and readers don't block writers. * * Unlike other well-known database mechanisms which use either write-ahead * transaction logs or append-only data writes, LMDB requires no maintenance * during operation. Both write-ahead loggers and append-only databases * require periodic checkpointing and/or compaction of their log or database * files otherwise they grow without bound. LMDB tracks free pages within * the database and re-uses them for new write operations, so the database * size does not grow without bound in normal use. * * The memory map can be used as a read-only or read-write map. It is * read-only by default as this provides total immunity to corruption. * Using read-write mode offers much higher write performance, but adds * the possibility for stray application writes thru pointers to silently * corrupt the database. Of course if your application code is known to * be bug-free (...) then this is not an issue. * * If this is your first time using a transactional embedded key/value * store, you may find the \ref starting page to be helpful. * * @section caveats_sec Caveats * Troubleshooting the lock file, plus semaphores on BSD systems: * * - A broken lockfile can cause sync issues. * Stale reader transactions left behind by an aborted program * cause further writes to grow the database quickly, and * stale locks can block further operation. * * Fix: Check for stale readers periodically, using the * #mdb_reader_check function or the \ref mdb_stat_1 "mdb_stat" tool. * Stale writers will be cleared automatically on most systems: * - Windows - automatic * - BSD, systems using SysV semaphores - automatic * - Linux, systems using POSIX mutexes with Robust option - automatic * Otherwise just make all programs using the database close it; * the lockfile is always reset on first open of the environment. * * - On BSD systems or others configured with MDB_USE_SYSV_SEM or * MDB_USE_POSIX_SEM, * startup can fail due to semaphores owned by another userid. * * Fix: Open and close the database as the user which owns the * semaphores (likely last user) or as root, while no other * process is using the database. * * Restrictions/caveats (in addition to those listed for some functions): * * - Only the database owner should normally use the database on * BSD systems or when otherwise configured with MDB_USE_POSIX_SEM. * Multiple users can cause startup to fail later, as noted above. * * - There is normally no pure read-only mode, since readers need write * access to locks and lock file. Exceptions: On read-only filesystems * or with the #MDB_NOLOCK flag described under #mdb_env_open(). * * - An LMDB configuration will often reserve considerable \b unused * memory address space and maybe file size for future growth. * This does not use actual memory or disk space, but users may need * to understand the difference so they won't be scared off. * * - By default, in versions before 0.9.10, unused portions of the data * file might receive garbage data from memory freed by other code. * (This does not happen when using the #MDB_WRITEMAP flag.) As of * 0.9.10 the default behavior is to initialize such memory before * writing to the data file. Since there may be a slight performance * cost due to this initialization, applications may disable it using * the #MDB_NOMEMINIT flag. Applications handling sensitive data * which must not be written should not use this flag. This flag is * irrelevant when using #MDB_WRITEMAP. * * - A thread can only use one transaction at a time, plus any child * transactions. Each transaction belongs to one thread. See below. * The #MDB_NOTLS flag changes this for read-only transactions. * * - Use an MDB_env* in the process which opened it, not after fork(). * * - Do not have open an LMDB database twice in the same process at * the same time. Not even from a plain open() call - close()ing it * breaks fcntl() advisory locking. (It is OK to reopen it after * fork() - exec*(), since the lockfile has FD_CLOEXEC set.) * * - Avoid long-lived transactions. Read transactions prevent * reuse of pages freed by newer write transactions, thus the * database can grow quickly. Write transactions prevent * other write transactions, since writes are serialized. * * - Avoid suspending a process with active transactions. These * would then be "long-lived" as above. Also read transactions * suspended when writers commit could sometimes see wrong data. * * ...when several processes can use a database concurrently: * * - Avoid aborting a process with an active transaction. * The transaction becomes "long-lived" as above until a check * for stale readers is performed or the lockfile is reset, * since the process may not remove it from the lockfile. * * This does not apply to write transactions if the system clears * stale writers, see above. * * - If you do that anyway, do a periodic check for stale readers. Or * close the environment once in a while, so the lockfile can get reset. * * - Do not use LMDB databases on remote filesystems, even between * processes on the same host. This breaks flock() on some OSes, * possibly memory map sync, and certainly sync between programs * on different hosts. * * - Opening a database can fail if another process is opening or * closing it at exactly the same time. * * @author Howard Chu, Symas Corporation. * * @copyright Copyright 2011-2019 Howard Chu, Symas Corp. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . * * @par Derived From: * This code is derived from btree.c written by Martin Hedenfalk. * * Copyright (c) 2009, 2010 Martin Hedenfalk * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _LMDB_H_ #define _LMDB_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif /** Unix permissions for creating files, or dummy definition for Windows */ #ifdef _MSC_VER typedef int mdb_mode_t; #else typedef mode_t mdb_mode_t; #endif #ifdef _WIN32 # define MDB_FMT_Z "I" #else # define MDB_FMT_Z "z" /**< printf/scanf format modifier for size_t */ #endif #ifndef MDB_VL32 /** Unsigned type used for mapsize, entry counts and page/transaction IDs. * * It is normally size_t, hence the name. Defining MDB_VL32 makes it * uint64_t, but do not try this unless you know what you are doing. */ typedef size_t mdb_size_t; # define MDB_SIZE_MAX SIZE_MAX /**< max #mdb_size_t */ /** #mdb_size_t printf formats, \b t = one of [diouxX] without quotes */ # define MDB_PRIy(t) MDB_FMT_Z #t /** #mdb_size_t scanf formats, \b t = one of [dioux] without quotes */ # define MDB_SCNy(t) MDB_FMT_Z #t #else typedef uint64_t mdb_size_t; # define MDB_SIZE_MAX UINT64_MAX # define MDB_PRIy(t) PRI##t##64 # define MDB_SCNy(t) SCN##t##64 # define mdb_env_create mdb_env_create_vl32 /**< Prevent mixing with non-VL32 builds */ #endif /** An abstraction for a file handle. * On POSIX systems file handles are small integers. On Windows * they're opaque pointers. */ #ifdef _WIN32 typedef void *mdb_filehandle_t; #else typedef int mdb_filehandle_t; #endif /** @defgroup mdb LMDB API * @{ * @brief OpenLDAP Lightning Memory-Mapped Database Manager */ /** @defgroup Version Version Macros * @{ */ /** Library major version */ #define MDB_VERSION_MAJOR 0 /** Library minor version */ #define MDB_VERSION_MINOR 9 /** Library patch version */ #define MDB_VERSION_PATCH 70 /** Combine args a,b,c into a single integer for easy version comparisons */ #define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c)) /** The full library version as a single integer */ #define MDB_VERSION_FULL \ MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH) /** The release date of this library version */ #define MDB_VERSION_DATE "December 19, 2015" /** A stringifier for the version info */ #define MDB_VERSTR(a,b,c,d) "LMDB " #a "." #b "." #c ": (" d ")" /** A helper for the stringifier macro */ #define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d) /** The full library version as a C string */ #define MDB_VERSION_STRING \ MDB_VERFOO(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH,MDB_VERSION_DATE) /** @} */ /** @brief Opaque structure for a database environment. * * A DB environment supports multiple databases, all residing in the same * shared-memory map. */ typedef struct MDB_env MDB_env; /** @brief Opaque structure for a transaction handle. * * All database operations require a transaction handle. Transactions may be * read-only or read-write. */ typedef struct MDB_txn MDB_txn; /** @brief A handle for an individual database in the DB environment. */ typedef unsigned int MDB_dbi; /** @brief Opaque structure for navigating through a database */ typedef struct MDB_cursor MDB_cursor; /** @brief Generic structure used for passing keys and data in and out * of the database. * * Values returned from the database are valid only until a subsequent * update operation, or the end of the transaction. Do not modify or * free them, they commonly point into the database itself. * * Key sizes must be between 1 and #mdb_env_get_maxkeysize() inclusive. * The same applies to data sizes in databases with the #MDB_DUPSORT flag. * Other data items can in theory be from 0 to 0xffffffff bytes long. */ typedef struct MDB_val { size_t mv_size; /**< size of the data item */ void *mv_data; /**< address of the data item */ } MDB_val; /** @brief A callback function used to compare two keys in a database */ typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b); /** @brief A callback function used to relocate a position-dependent data item * in a fixed-address database. * * The \b newptr gives the item's desired address in * the memory map, and \b oldptr gives its previous address. The item's actual * data resides at the address in \b item. This callback is expected to walk * through the fields of the record in \b item and modify any * values based at the \b oldptr address to be relative to the \b newptr address. * @param[in,out] item The item that is to be relocated. * @param[in] oldptr The previous address. * @param[in] newptr The new address to relocate to. * @param[in] relctx An application-provided context, set by #mdb_set_relctx(). * @todo This feature is currently unimplemented. */ typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *relctx); /** @defgroup mdb_env Environment Flags * @{ */ /** mmap at a fixed address (experimental) */ #define MDB_FIXEDMAP 0x01 /** no environment directory */ #define MDB_NOSUBDIR 0x4000 /** don't fsync after commit */ #define MDB_NOSYNC 0x10000 /** read only */ #define MDB_RDONLY 0x20000 /** don't fsync metapage after commit */ #define MDB_NOMETASYNC 0x40000 /** use writable mmap */ #define MDB_WRITEMAP 0x80000 /** use asynchronous msync when #MDB_WRITEMAP is used */ #define MDB_MAPASYNC 0x100000 /** tie reader locktable slots to #MDB_txn objects instead of to threads */ #define MDB_NOTLS 0x200000 /** don't do any locking, caller must manage their own locks */ #define MDB_NOLOCK 0x400000 /** don't do readahead (no effect on Windows) */ #define MDB_NORDAHEAD 0x800000 /** don't initialize malloc'd memory before writing to datafile */ #define MDB_NOMEMINIT 0x1000000 /** use the previous snapshot rather than the latest one */ #define MDB_PREVSNAPSHOT 0x2000000 /** @} */ /** @defgroup mdb_dbi_open Database Flags * @{ */ /** use reverse string keys */ #define MDB_REVERSEKEY 0x02 /** use sorted duplicates */ #define MDB_DUPSORT 0x04 /** numeric keys in native byte order, either unsigned int or #mdb_size_t. * (lmdb expects 32-bit int <= size_t <= 32/64-bit mdb_size_t.) * The keys must all be of the same size. */ #define MDB_INTEGERKEY 0x08 /** with #MDB_DUPSORT, sorted dup items have fixed size */ #define MDB_DUPFIXED 0x10 /** with #MDB_DUPSORT, dups are #MDB_INTEGERKEY-style integers */ #define MDB_INTEGERDUP 0x20 /** with #MDB_DUPSORT, use reverse string dups */ #define MDB_REVERSEDUP 0x40 /** create DB if not already existing */ #define MDB_CREATE 0x40000 /** @} */ /** @defgroup mdb_put Write Flags * @{ */ /** For put: Don't write if the key already exists. */ #define MDB_NOOVERWRITE 0x10 /** Only for #MDB_DUPSORT
* For put: don't write if the key and data pair already exist.
* For mdb_cursor_del: remove all duplicate data items. */ #define MDB_NODUPDATA 0x20 /** For mdb_cursor_put: overwrite the current key/data pair */ #define MDB_CURRENT 0x40 /** For put: Just reserve space for data, don't copy it. Return a * pointer to the reserved space. */ #define MDB_RESERVE 0x10000 /** Data is being appended, don't split full pages. */ #define MDB_APPEND 0x20000 /** Duplicate data is being appended, don't split full pages. */ #define MDB_APPENDDUP 0x40000 /** Store multiple data items in one call. Only for #MDB_DUPFIXED. */ #define MDB_MULTIPLE 0x80000 /* @} */ /** @defgroup mdb_copy Copy Flags * @{ */ /** Compacting copy: Omit free space from copy, and renumber all * pages sequentially. */ #define MDB_CP_COMPACT 0x01 /* @} */ /** @brief Cursor Get operations. * * This is the set of all operations for retrieving data * using a cursor. */ typedef enum MDB_cursor_op { MDB_FIRST, /**< Position at first key/data item */ MDB_FIRST_DUP, /**< Position at first data item of current key. Only for #MDB_DUPSORT */ MDB_GET_BOTH, /**< Position at key/data pair. Only for #MDB_DUPSORT */ MDB_GET_BOTH_RANGE, /**< position at key, nearest data. Only for #MDB_DUPSORT */ MDB_GET_CURRENT, /**< Return key/data at current cursor position */ MDB_GET_MULTIPLE, /**< Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for #MDB_NEXT_MULTIPLE. Only for #MDB_DUPFIXED */ MDB_LAST, /**< Position at last key/data item */ MDB_LAST_DUP, /**< Position at last data item of current key. Only for #MDB_DUPSORT */ MDB_NEXT, /**< Position at next data item */ MDB_NEXT_DUP, /**< Position at next data item of current key. Only for #MDB_DUPSORT */ MDB_NEXT_MULTIPLE, /**< Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for #MDB_NEXT_MULTIPLE. Only for #MDB_DUPFIXED */ MDB_NEXT_NODUP, /**< Position at first data item of next key */ MDB_PREV, /**< Position at previous data item */ MDB_PREV_DUP, /**< Position at previous data item of current key. Only for #MDB_DUPSORT */ MDB_PREV_NODUP, /**< Position at last data item of previous key */ MDB_SET, /**< Position at specified key */ MDB_SET_KEY, /**< Position at specified key, return key + data */ MDB_SET_RANGE, /**< Position at first key greater than or equal to specified key. */ MDB_PREV_MULTIPLE /**< Position at previous page and return up to a page of duplicate data items. Only for #MDB_DUPFIXED */ } MDB_cursor_op; /** @defgroup errors Return Codes * * BerkeleyDB uses -30800 to -30999, we'll go under them * @{ */ /** Successful result */ #define MDB_SUCCESS 0 /** key/data pair already exists */ #define MDB_KEYEXIST (-30799) /** key/data pair not found (EOF) */ #define MDB_NOTFOUND (-30798) /** Requested page not found - this usually indicates corruption */ #define MDB_PAGE_NOTFOUND (-30797) /** Located page was wrong type */ #define MDB_CORRUPTED (-30796) /** Update of meta page failed or environment had fatal error */ #define MDB_PANIC (-30795) /** Environment version mismatch */ #define MDB_VERSION_MISMATCH (-30794) /** File is not a valid LMDB file */ #define MDB_INVALID (-30793) /** Environment mapsize reached */ #define MDB_MAP_FULL (-30792) /** Environment maxdbs reached */ #define MDB_DBS_FULL (-30791) /** Environment maxreaders reached */ #define MDB_READERS_FULL (-30790) /** Too many TLS keys in use - Windows only */ #define MDB_TLS_FULL (-30789) /** Txn has too many dirty pages */ #define MDB_TXN_FULL (-30788) /** Cursor stack too deep - internal error */ #define MDB_CURSOR_FULL (-30787) /** Page has not enough space - internal error */ #define MDB_PAGE_FULL (-30786) /** Database contents grew beyond environment mapsize */ #define MDB_MAP_RESIZED (-30785) /** Operation and DB incompatible, or DB type changed. This can mean: *
    *
  • The operation expects an #MDB_DUPSORT / #MDB_DUPFIXED database. *
  • Opening a named DB when the unnamed DB has #MDB_DUPSORT / #MDB_INTEGERKEY. *
  • Accessing a data record as a database, or vice versa. *
  • The database was dropped and recreated with different flags. *
*/ #define MDB_INCOMPATIBLE (-30784) /** Invalid reuse of reader locktable slot */ #define MDB_BAD_RSLOT (-30783) /** Transaction must abort, has a child, or is invalid */ #define MDB_BAD_TXN (-30782) /** Unsupported size of key/DB name/data, or wrong DUPFIXED size */ #define MDB_BAD_VALSIZE (-30781) /** The specified DBI was changed unexpectedly */ #define MDB_BAD_DBI (-30780) /** Unexpected problem - txn should abort */ #define MDB_PROBLEM (-30779) /** The last defined error code */ #define MDB_LAST_ERRCODE MDB_PROBLEM /** @} */ /** @brief Statistics for a database in the environment */ typedef struct MDB_stat { unsigned int ms_psize; /**< Size of a database page. This is currently the same for all databases. */ unsigned int ms_depth; /**< Depth (height) of the B-tree */ mdb_size_t ms_branch_pages; /**< Number of internal (non-leaf) pages */ mdb_size_t ms_leaf_pages; /**< Number of leaf pages */ mdb_size_t ms_overflow_pages; /**< Number of overflow pages */ mdb_size_t ms_entries; /**< Number of data items */ } MDB_stat; /** @brief Information about the environment */ typedef struct MDB_envinfo { void *me_mapaddr; /**< Address of map, if fixed */ mdb_size_t me_mapsize; /**< Size of the data memory map */ mdb_size_t me_last_pgno; /**< ID of the last used page */ mdb_size_t me_last_txnid; /**< ID of the last committed transaction */ unsigned int me_maxreaders; /**< max reader slots in the environment */ unsigned int me_numreaders; /**< max reader slots used in the environment */ } MDB_envinfo; /** @brief Return the LMDB library version information. * * @param[out] major if non-NULL, the library major version number is copied here * @param[out] minor if non-NULL, the library minor version number is copied here * @param[out] patch if non-NULL, the library patch version number is copied here * @retval "version string" The library version as a string */ char *mdb_version(int *major, int *minor, int *patch); /** @brief Return a string describing a given error code. * * This function is a superset of the ANSI C X3.159-1989 (ANSI C) strerror(3) * function. If the error code is greater than or equal to 0, then the string * returned by the system function strerror(3) is returned. If the error code * is less than 0, an error string corresponding to the LMDB library error is * returned. See @ref errors for a list of LMDB-specific error codes. * @param[in] err The error code * @retval "error message" The description of the error */ char *mdb_strerror(int err); /** @brief Create an LMDB environment handle. * * This function allocates memory for a #MDB_env structure. To release * the allocated memory and discard the handle, call #mdb_env_close(). * Before the handle may be used, it must be opened using #mdb_env_open(). * Various other options may also need to be set before opening the handle, * e.g. #mdb_env_set_mapsize(), #mdb_env_set_maxreaders(), #mdb_env_set_maxdbs(), * depending on usage requirements. * @param[out] env The address where the new handle will be stored * @return A non-zero error value on failure and 0 on success. */ int mdb_env_create(MDB_env **env); /** @brief Open an environment handle. * * If this function fails, #mdb_env_close() must be called to discard the #MDB_env handle. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] path The directory in which the database files reside. This * directory must already exist and be writable. * @param[in] flags Special options for this environment. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. * Flags set by mdb_env_set_flags() are also used. *
    *
  • #MDB_FIXEDMAP * use a fixed address for the mmap region. This flag must be specified * when creating the environment, and is stored persistently in the environment. * If successful, the memory map will always reside at the same virtual address * and pointers used to reference data items in the database will be constant * across multiple invocations. This option may not always work, depending on * how the operating system has allocated memory to shared libraries and other uses. * The feature is highly experimental. *
  • #MDB_NOSUBDIR * By default, LMDB creates its environment in a directory whose * pathname is given in \b path, and creates its data and lock files * under that directory. With this option, \b path is used as-is for * the database main data file. The database lock file is the \b path * with "-lock" appended. *
  • #MDB_RDONLY * Open the environment in read-only mode. No write operations will be * allowed. LMDB will still modify the lock file - except on read-only * filesystems, where LMDB does not use locks. *
  • #MDB_WRITEMAP * Use a writeable memory map unless MDB_RDONLY is set. This uses * fewer mallocs but loses protection from application bugs * like wild pointer writes and other bad updates into the database. * This may be slightly faster for DBs that fit entirely in RAM, but * is slower for DBs larger than RAM. * Incompatible with nested transactions. * Do not mix processes with and without MDB_WRITEMAP on the same * environment. This can defeat durability (#mdb_env_sync etc). *
  • #MDB_NOMETASYNC * Flush system buffers to disk only once per transaction, omit the * metadata flush. Defer that until the system flushes files to disk, * or next non-MDB_RDONLY commit or #mdb_env_sync(). This optimization * maintains database integrity, but a system crash may undo the last * committed transaction. I.e. it preserves the ACI (atomicity, * consistency, isolation) but not D (durability) database property. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_NOSYNC * Don't flush system buffers to disk when committing a transaction. * This optimization means a system crash can corrupt the database or * lose the last transactions if buffers are not yet flushed to disk. * The risk is governed by how often the system flushes dirty buffers * to disk and how often #mdb_env_sync() is called. However, if the * filesystem preserves write order and the #MDB_WRITEMAP flag is not * used, transactions exhibit ACI (atomicity, consistency, isolation) * properties and only lose D (durability). I.e. database integrity * is maintained, but a system crash may undo the final transactions. * Note that (#MDB_NOSYNC | #MDB_WRITEMAP) leaves the system with no * hint for when to write transactions to disk, unless #mdb_env_sync() * is called. (#MDB_MAPASYNC | #MDB_WRITEMAP) may be preferable. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_MAPASYNC * When using #MDB_WRITEMAP, use asynchronous flushes to disk. * As with #MDB_NOSYNC, a system crash can then corrupt the * database or lose the last transactions. Calling #mdb_env_sync() * ensures on-disk database integrity until next commit. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_NOTLS * Don't use Thread-Local Storage. Tie reader locktable slots to * #MDB_txn objects instead of to threads. I.e. #mdb_txn_reset() keeps * the slot reseved for the #MDB_txn object. A thread may use parallel * read-only transactions. A read-only transaction may span threads if * the user synchronizes its use. Applications that multiplex many * user threads over individual OS threads need this option. Such an * application must also serialize the write transactions in an OS * thread, since LMDB's write locking is unaware of the user threads. *
  • #MDB_NOLOCK * Don't do any locking. If concurrent access is anticipated, the * caller must manage all concurrency itself. For proper operation * the caller must enforce single-writer semantics, and must ensure * that no readers are using old transactions while a writer is * active. The simplest approach is to use an exclusive lock so that * no readers may be active at all when a writer begins. *
  • #MDB_NORDAHEAD * Turn off readahead. Most operating systems perform readahead on * read requests by default. This option turns it off if the OS * supports it. Turning it off may help random read performance * when the DB is larger than RAM and system RAM is full. * The option is not implemented on Windows. *
  • #MDB_NOMEMINIT * Don't initialize malloc'd memory before writing to unused spaces * in the data file. By default, memory for pages written to the data * file is obtained using malloc. While these pages may be reused in * subsequent transactions, freshly malloc'd pages will be initialized * to zeroes before use. This avoids persisting leftover data from other * code (that used the heap and subsequently freed the memory) into the * data file. Note that many other system libraries may allocate * and free memory from the heap for arbitrary uses. E.g., stdio may * use the heap for file I/O buffers. This initialization step has a * modest performance cost so some applications may want to disable * it using this flag. This option can be a problem for applications * which handle sensitive data like passwords, and it makes memory * checkers like Valgrind noisy. This flag is not needed with #MDB_WRITEMAP, * which writes directly to the mmap instead of using malloc for pages. The * initialization is also skipped if #MDB_RESERVE is used; the * caller is expected to overwrite all of the memory that was * reserved in that case. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_PREVSNAPSHOT * Open the environment with the previous snapshot rather than the latest * one. This loses the latest transaction, but may help work around some * types of corruption. If opened with write access, this must be the * only process using the environment. This flag is automatically reset * after a write transaction is successfully committed. *
* @param[in] mode The UNIX permissions to set on created files and semaphores. * This parameter is ignored on Windows. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_VERSION_MISMATCH - the version of the LMDB library doesn't match the * version that created the database environment. *
  • #MDB_INVALID - the environment file headers are corrupted. *
  • ENOENT - the directory specified by the path parameter doesn't exist. *
  • EACCES - the user didn't have permission to access the environment files. *
  • EAGAIN - the environment was locked by another process. *
*/ int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode); /** @brief Copy an LMDB environment to the specified path. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] path The directory in which the copy will reside. This * directory must already exist and be writable but must otherwise be * empty. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copy(MDB_env *env, const char *path); /** @brief Copy an LMDB environment to the specified file descriptor. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] fd The filedescriptor to write the copy to. It must * have already been opened for Write access. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd); /** @brief Copy an LMDB environment to the specified path, with options. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] path The directory in which the copy will reside. This * directory must already exist and be writable but must otherwise be * empty. * @param[in] flags Special options for this operation. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_CP_COMPACT - Perform compaction while copying: omit free * pages and sequentially renumber all pages in output. This option * consumes more CPU and runs more slowly than the default. * Currently it fails if the environment has suffered a page leak. *
* @return A non-zero error value on failure and 0 on success. */ int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags); /** @brief Copy an LMDB environment to the specified file descriptor, * with options. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. See * #mdb_env_copy2() for further details. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] fd The filedescriptor to write the copy to. It must * have already been opened for Write access. * @param[in] flags Special options for this operation. * See #mdb_env_copy2() for options. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copyfd2(MDB_env *env, mdb_filehandle_t fd, unsigned int flags); /** @brief Return statistics about the LMDB environment. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] stat The address of an #MDB_stat structure * where the statistics will be copied */ int mdb_env_stat(MDB_env *env, MDB_stat *stat); /** @brief Return information about the LMDB environment. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] stat The address of an #MDB_envinfo structure * where the information will be copied */ int mdb_env_info(MDB_env *env, MDB_envinfo *stat); /** @brief Flush the data buffers to disk. * * Data is always written to disk when #mdb_txn_commit() is called, * but the operating system may keep it buffered. LMDB always flushes * the OS buffers upon commit as well, unless the environment was * opened with #MDB_NOSYNC or in part #MDB_NOMETASYNC. This call is * not valid if the environment was opened with #MDB_RDONLY. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] force If non-zero, force a synchronous flush. Otherwise * if the environment has the #MDB_NOSYNC flag set the flushes * will be omitted, and with #MDB_MAPASYNC they will be asynchronous. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EACCES - the environment is read-only. *
  • EINVAL - an invalid parameter was specified. *
  • EIO - an error occurred during synchronization. *
*/ int mdb_env_sync(MDB_env *env, int force); /** @brief Close the environment and release the memory map. * * Only a single thread may call this function. All transactions, databases, * and cursors must already be closed before calling this function. Attempts to * use any such handles after calling this function will cause a SIGSEGV. * The environment handle will be freed and must not be used again after this call. * @param[in] env An environment handle returned by #mdb_env_create() */ void mdb_env_close(MDB_env *env); /** @brief Set environment flags. * * This may be used to set some flags in addition to those from * #mdb_env_open(), or to unset these flags. If several threads * change the flags at the same time, the result is undefined. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] flags The flags to change, bitwise OR'ed together * @param[in] onoff A non-zero value sets the flags, zero clears them. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff); /** @brief Get environment flags. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] flags The address of an integer to store the flags * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_flags(MDB_env *env, unsigned int *flags); /** @brief Return the path that was used in #mdb_env_open(). * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] path Address of a string pointer to contain the path. This * is the actual string in the environment, not a copy. It should not be * altered in any way. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_path(MDB_env *env, const char **path); /** @brief Return the filedescriptor for the given environment. * * This function may be called after fork(), so the descriptor can be * closed before exec*(). Other LMDB file descriptors have FD_CLOEXEC. * (Until LMDB 0.9.18, only the lockfile had that.) * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] fd Address of a mdb_filehandle_t to contain the descriptor. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *fd); /** @brief Set the size of the memory map to use for this environment. * * The size should be a multiple of the OS page size. The default is * 10485760 bytes. The size of the memory map is also the maximum size * of the database. The value should be chosen as large as possible, * to accommodate future growth of the database. * This function should be called after #mdb_env_create() and before #mdb_env_open(). * It may be called at later times if no transactions are active in * this process. Note that the library does not check for this condition, * the caller must ensure it explicitly. * * The new size takes effect immediately for the current process but * will not be persisted to any others until a write transaction has been * committed by the current process. Also, only mapsize increases are * persisted into the environment. * * If the mapsize is increased by another process, and data has grown * beyond the range of the current mapsize, #mdb_txn_begin() will * return #MDB_MAP_RESIZED. This function may be called with a size * of zero to adopt the new size. * * Any attempt to set a size smaller than the space already consumed * by the environment will be silently changed to the current size of the used space. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] size The size in bytes * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified, or the environment has * an active write transaction. *
*/ int mdb_env_set_mapsize(MDB_env *env, mdb_size_t size); /** @brief Set the maximum number of threads/reader slots for the environment. * * This defines the number of slots in the lock table that is used to track readers in the * the environment. The default is 126. * Starting a read-only transaction normally ties a lock table slot to the * current thread until the environment closes or the thread exits. If * MDB_NOTLS is in use, #mdb_txn_begin() instead ties the slot to the * MDB_txn object until it or the #MDB_env object is destroyed. * This function may only be called after #mdb_env_create() and before #mdb_env_open(). * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] readers The maximum number of reader lock table slots * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified, or the environment is already open. *
*/ int mdb_env_set_maxreaders(MDB_env *env, unsigned int readers); /** @brief Get the maximum number of threads/reader slots for the environment. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] readers Address of an integer to store the number of readers * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers); /** @brief Set the maximum number of named databases for the environment. * * This function is only needed if multiple databases will be used in the * environment. Simpler applications that use the environment as a single * unnamed database can ignore this option. * This function may only be called after #mdb_env_create() and before #mdb_env_open(). * * Currently a moderate number of slots are cheap but a huge number gets * expensive: 7-120 words per transaction, and every #mdb_dbi_open() * does a linear search of the opened slots. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] dbs The maximum number of databases * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified, or the environment is already open. *
*/ int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs); /** @brief Get the maximum size of keys and #MDB_DUPSORT data we can write. * * Depends on the compile-time constant #MDB_MAXKEYSIZE. Default 511. * See @ref MDB_val. * @param[in] env An environment handle returned by #mdb_env_create() * @return The maximum size of a key we can write */ int mdb_env_get_maxkeysize(MDB_env *env); /** @brief Set application information associated with the #MDB_env. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] ctx An arbitrary pointer for whatever the application needs. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_set_userctx(MDB_env *env, void *ctx); /** @brief Get the application information associated with the #MDB_env. * * @param[in] env An environment handle returned by #mdb_env_create() * @return The pointer set by #mdb_env_set_userctx(). */ void *mdb_env_get_userctx(MDB_env *env); /** @brief A callback function for most LMDB assert() failures, * called before printing the message and aborting. * * @param[in] env An environment handle returned by #mdb_env_create(). * @param[in] msg The assertion message, not including newline. */ typedef void MDB_assert_func(MDB_env *env, const char *msg); /** Set or reset the assert() callback of the environment. * Disabled if liblmdb is buillt with NDEBUG. * @note This hack should become obsolete as lmdb's error handling matures. * @param[in] env An environment handle returned by #mdb_env_create(). * @param[in] func An #MDB_assert_func function, or 0. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_set_assert(MDB_env *env, MDB_assert_func *func); /** @brief Create a transaction for use with the environment. * * The transaction handle may be discarded using #mdb_txn_abort() or #mdb_txn_commit(). * @note A transaction and its cursors must only be used by a single * thread, and a thread may only have a single transaction at a time. * If #MDB_NOTLS is in use, this does not apply to read-only transactions. * @note Cursors may not span transactions. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] parent If this parameter is non-NULL, the new transaction * will be a nested transaction, with the transaction indicated by \b parent * as its parent. Transactions may be nested to any level. A parent * transaction and its cursors may not issue any other operations than * mdb_txn_commit and mdb_txn_abort while it has active child transactions. * @param[in] flags Special options for this transaction. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_RDONLY * This transaction will not perform any write operations. *
  • #MDB_NOSYNC * Don't flush system buffers to disk when committing this transaction. *
  • #MDB_NOMETASYNC * Flush system buffers but omit metadata flush when committing this transaction. *
* @param[out] txn Address where the new #MDB_txn handle will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_PANIC - a fatal error occurred earlier and the environment * must be shut down. *
  • #MDB_MAP_RESIZED - another process wrote data beyond this MDB_env's * mapsize and this environment's map must be resized as well. * See #mdb_env_set_mapsize(). *
  • #MDB_READERS_FULL - a read-only transaction was requested and * the reader lock table is full. See #mdb_env_set_maxreaders(). *
  • ENOMEM - out of memory. *
*/ int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **txn); /** @brief Returns the transaction's #MDB_env * * @param[in] txn A transaction handle returned by #mdb_txn_begin() */ MDB_env *mdb_txn_env(MDB_txn *txn); /** @brief Return the transaction's ID. * * This returns the identifier associated with this transaction. For a * read-only transaction, this corresponds to the snapshot being read; * concurrent readers will frequently have the same transaction ID. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @return A transaction ID, valid if input is an active transaction. */ mdb_size_t mdb_txn_id(MDB_txn *txn); /** @brief Commit all the operations of a transaction into the database. * * The transaction handle is freed. It and its cursors must not be used * again after this call, except with #mdb_cursor_renew(). * @note Earlier documentation incorrectly said all cursors would be freed. * Only write-transactions free cursors. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
  • ENOSPC - no more disk space. *
  • EIO - a low-level I/O error occurred while writing. *
  • ENOMEM - out of memory. *
*/ int mdb_txn_commit(MDB_txn *txn); /** @brief Abandon all the operations of the transaction instead of saving them. * * The transaction handle is freed. It and its cursors must not be used * again after this call, except with #mdb_cursor_renew(). * @note Earlier documentation incorrectly said all cursors would be freed. * Only write-transactions free cursors. * @param[in] txn A transaction handle returned by #mdb_txn_begin() */ void mdb_txn_abort(MDB_txn *txn); /** @brief Reset a read-only transaction. * * Abort the transaction like #mdb_txn_abort(), but keep the transaction * handle. #mdb_txn_renew() may reuse the handle. This saves allocation * overhead if the process will start a new read-only transaction soon, * and also locking overhead if #MDB_NOTLS is in use. The reader table * lock is released, but the table slot stays tied to its thread or * #MDB_txn. Use mdb_txn_abort() to discard a reset handle, and to free * its lock table slot if MDB_NOTLS is in use. * Cursors opened within the transaction must not be used * again after this call, except with #mdb_cursor_renew(). * Reader locks generally don't interfere with writers, but they keep old * versions of database pages allocated. Thus they prevent the old pages * from being reused when writers commit new data, and so under heavy load * the database size may grow much more rapidly than otherwise. * @param[in] txn A transaction handle returned by #mdb_txn_begin() */ void mdb_txn_reset(MDB_txn *txn); /** @brief Renew a read-only transaction. * * This acquires a new reader lock for a transaction handle that had been * released by #mdb_txn_reset(). It must be called before a reset transaction * may be used again. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_PANIC - a fatal error occurred earlier and the environment * must be shut down. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_txn_renew(MDB_txn *txn); /** Compat with version <= 0.9.4, avoid clash with libmdb from MDB Tools project */ #define mdb_open(txn,name,flags,dbi) mdb_dbi_open(txn,name,flags,dbi) /** Compat with version <= 0.9.4, avoid clash with libmdb from MDB Tools project */ #define mdb_close(env,dbi) mdb_dbi_close(env,dbi) /** @brief Open a database in the environment. * * A database handle denotes the name and parameters of a database, * independently of whether such a database exists. * The database handle may be discarded by calling #mdb_dbi_close(). * The old database handle is returned if the database was already open. * The handle may only be closed once. * * The database handle will be private to the current transaction until * the transaction is successfully committed. If the transaction is * aborted the handle will be closed automatically. * After a successful commit the handle will reside in the shared * environment, and may be used by other transactions. * * This function must not be called from multiple concurrent * transactions in the same process. A transaction that uses * this function must finish (either commit or abort) before * any other transaction in the process may use this function. * * To use named databases (with name != NULL), #mdb_env_set_maxdbs() * must be called before opening the environment. Database names are * keys in the unnamed database, and may be read but not written. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] name The name of the database to open. If only a single * database is needed in the environment, this value may be NULL. * @param[in] flags Special options for this database. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_REVERSEKEY * Keys are strings to be compared in reverse order, from the end * of the strings to the beginning. By default, Keys are treated as strings and * compared from beginning to end. *
  • #MDB_DUPSORT * Duplicate keys may be used in the database. (Or, from another perspective, * keys may have multiple data items, stored in sorted order.) By default * keys must be unique and may have only a single data item. *
  • #MDB_INTEGERKEY * Keys are binary integers in native byte order, either unsigned int * or #mdb_size_t, and will be sorted as such. * (lmdb expects 32-bit int <= size_t <= 32/64-bit mdb_size_t.) * The keys must all be of the same size. *
  • #MDB_DUPFIXED * This flag may only be used in combination with #MDB_DUPSORT. This option * tells the library that the data items for this database are all the same * size, which allows further optimizations in storage and retrieval. When * all data items are the same size, the #MDB_GET_MULTIPLE, #MDB_NEXT_MULTIPLE * and #MDB_PREV_MULTIPLE cursor operations may be used to retrieve multiple * items at once. *
  • #MDB_INTEGERDUP * This option specifies that duplicate data items are binary integers, * similar to #MDB_INTEGERKEY keys. *
  • #MDB_REVERSEDUP * This option specifies that duplicate data items should be compared as * strings in reverse order. *
  • #MDB_CREATE * Create the named database if it doesn't exist. This option is not * allowed in a read-only transaction or a read-only environment. *
* @param[out] dbi Address where the new #MDB_dbi handle will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_NOTFOUND - the specified database doesn't exist in the environment * and #MDB_CREATE was not specified. *
  • #MDB_DBS_FULL - too many databases have been opened. See #mdb_env_set_maxdbs(). *
*/ int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi); /** @brief Retrieve statistics for a database. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] stat The address of an #MDB_stat structure * where the statistics will be copied * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat); /** @brief Retrieve the DB flags for a database handle. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] flags Address where the flags will be returned. * @return A non-zero error value on failure and 0 on success. */ int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags); /** @brief Close a database handle. Normally unnecessary. Use with care: * * This call is not mutex protected. Handles should only be closed by * a single thread, and only if no other threads are going to reference * the database handle or one of its cursors any further. Do not close * a handle if an existing transaction has modified its database. * Doing so can cause misbehavior from database corruption to errors * like MDB_BAD_VALSIZE (since the DB name is gone). * * Closing a database handle is not necessary, but lets #mdb_dbi_open() * reuse the handle value. Usually it's better to set a bigger * #mdb_env_set_maxdbs(), unless that value would be large. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] dbi A database handle returned by #mdb_dbi_open() */ void mdb_dbi_close(MDB_env *env, MDB_dbi dbi); /** @brief Empty or delete+close a database. * * See #mdb_dbi_close() for restrictions about closing the DB handle. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] del 0 to empty the DB, 1 to delete it from the * environment and close the DB handle. * @return A non-zero error value on failure and 0 on success. */ int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del); /** @brief Set a custom key comparison function for a database. * * The comparison function is called whenever it is necessary to compare a * key specified by the application with a key currently stored in the database. * If no comparison function is specified, and no special key flags were specified * with #mdb_dbi_open(), the keys are compared lexically, with shorter keys collating * before longer keys. * @warning This function must be called before any data access functions are used, * otherwise data corruption may occur. The same comparison function must be used by every * program accessing the database, every time the database is used. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] cmp A #MDB_cmp_func function * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp); /** @brief Set a custom data comparison function for a #MDB_DUPSORT database. * * This comparison function is called whenever it is necessary to compare a data * item specified by the application with a data item currently stored in the database. * This function only takes effect if the database was opened with the #MDB_DUPSORT * flag. * If no comparison function is specified, and no special key flags were specified * with #mdb_dbi_open(), the data items are compared lexically, with shorter items collating * before longer items. * @warning This function must be called before any data access functions are used, * otherwise data corruption may occur. The same comparison function must be used by every * program accessing the database, every time the database is used. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] cmp A #MDB_cmp_func function * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp); /** @brief Set a relocation function for a #MDB_FIXEDMAP database. * * @todo The relocation function is called whenever it is necessary to move the data * of an item to a different position in the database (e.g. through tree * balancing operations, shifts as a result of adds or deletes, etc.). It is * intended to allow address/position-dependent data items to be stored in * a database in an environment opened with the #MDB_FIXEDMAP option. * Currently the relocation feature is unimplemented and setting * this function has no effect. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] rel A #MDB_rel_func function * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel); /** @brief Set a context pointer for a #MDB_FIXEDMAP database's relocation function. * * See #mdb_set_relfunc and #MDB_rel_func for more details. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] ctx An arbitrary pointer for whatever the application needs. * It will be passed to the callback function set by #mdb_set_relfunc * as its \b relctx parameter whenever the callback is invoked. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx); /** @brief Get items from a database. * * This function retrieves key/data pairs from the database. The address * and length of the data associated with the specified \b key are returned * in the structure to which \b data refers. * If the database supports duplicate keys (#MDB_DUPSORT) then the * first data item for the key will be returned. Retrieval of other * items requires the use of #mdb_cursor_get(). * * @note The memory pointed to by the returned values is owned by the * database. The caller need not dispose of the memory, and may not * modify it in any way. For values returned in a read-only transaction * any modification attempts will cause a SIGSEGV. * @note Values returned from the database are valid only until a * subsequent update operation, or the end of the transaction. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] key The key to search for in the database * @param[out] data The data corresponding to the key * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_NOTFOUND - the key was not in the database. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); /** @brief Store items into a database. * * This function stores key/data pairs in the database. The default behavior * is to enter the new key/data pair, replacing any previously existing key * if duplicates are disallowed, or adding a duplicate data item if * duplicates are allowed (#MDB_DUPSORT). * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] key The key to store in the database * @param[in,out] data The data to store * @param[in] flags Special options for this operation. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_NODUPDATA - enter the new key/data pair only if it does not * already appear in the database. This flag may only be specified * if the database was opened with #MDB_DUPSORT. The function will * return #MDB_KEYEXIST if the key/data pair already appears in the * database. *
  • #MDB_NOOVERWRITE - enter the new key/data pair only if the key * does not already appear in the database. The function will return * #MDB_KEYEXIST if the key already appears in the database, even if * the database supports duplicates (#MDB_DUPSORT). The \b data * parameter will be set to point to the existing item. *
  • #MDB_RESERVE - reserve space for data of the given size, but * don't copy the given data. Instead, return a pointer to the * reserved space, which the caller can fill in later - before * the next update operation or the transaction ends. This saves * an extra memcpy if the data is being generated later. * LMDB does nothing else with this memory, the caller is expected * to modify all of the space requested. This flag must not be * specified if the database was opened with #MDB_DUPSORT. *
  • #MDB_APPEND - append the given key/data pair to the end of the * database. This option allows fast bulk loading when keys are * already known to be in the correct order. Loading unsorted keys * with this flag will cause a #MDB_KEYEXIST error. *
  • #MDB_APPENDDUP - as above, but for sorted dup data. *
* @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize(). *
  • #MDB_TXN_FULL - the transaction has too many dirty pages. *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned int flags); /** @brief Delete items from a database. * * This function removes key/data pairs from the database. * If the database does not support sorted duplicate data items * (#MDB_DUPSORT) the data parameter is ignored. * If the database supports sorted duplicates and the data parameter * is NULL, all of the duplicate data items for the key will be * deleted. Otherwise, if the data parameter is non-NULL * only the matching data item will be deleted. * This function will return #MDB_NOTFOUND if the specified key/data * pair is not in the database. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] key The key to delete from the database * @param[in] data The data to delete * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); /** @brief Create a cursor handle. * * A cursor is associated with a specific transaction and database. * A cursor cannot be used when its database handle is closed. Nor * when its transaction has ended, except with #mdb_cursor_renew(). * It can be discarded with #mdb_cursor_close(). * A cursor in a write-transaction can be closed before its transaction * ends, and will otherwise be closed when its transaction ends. * A cursor in a read-only transaction must be closed explicitly, before * or after its transaction ends. It can be reused with * #mdb_cursor_renew() before finally closing it. * @note Earlier documentation said that cursors in every transaction * were closed when the transaction committed or aborted. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] cursor Address where the new #MDB_cursor handle will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor); /** @brief Close a cursor handle. * * The cursor handle will be freed and must not be used again after this call. * Its transaction must still be live if it is a write-transaction. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() */ void mdb_cursor_close(MDB_cursor *cursor); /** @brief Renew a cursor handle. * * A cursor is associated with a specific transaction and database. * Cursors that are only used in read-only * transactions may be re-used, to avoid unnecessary malloc/free overhead. * The cursor may be associated with a new read-only transaction, and * referencing the same database handle as it was created with. * This may be done whether the previous transaction is live or dead. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *cursor); /** @brief Return the cursor's transaction handle. * * @param[in] cursor A cursor handle returned by #mdb_cursor_open() */ MDB_txn *mdb_cursor_txn(MDB_cursor *cursor); /** @brief Return the cursor's database handle. * * @param[in] cursor A cursor handle returned by #mdb_cursor_open() */ MDB_dbi mdb_cursor_dbi(MDB_cursor *cursor); /** @brief Retrieve by cursor. * * This function retrieves key/data pairs from the database. The address and length * of the key are returned in the object to which \b key refers (except for the * case of the #MDB_SET option, in which the \b key object is unchanged), and * the address and length of the data are returned in the object to which \b data * refers. * See #mdb_get() for restrictions on using the output values. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[in,out] key The key for a retrieved item * @param[in,out] data The data of a retrieved item * @param[in] op A cursor operation #MDB_cursor_op * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_NOTFOUND - no matching key found. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data, MDB_cursor_op op); /** @brief Store by cursor. * * This function stores key/data pairs into the database. * The cursor is positioned at the new item, or on failure usually near it. * @note Earlier documentation incorrectly said errors would leave the * state of the cursor unchanged. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[in] key The key operated on. * @param[in] data The data operated on. * @param[in] flags Options for this operation. This parameter * must be set to 0 or one of the values described here. *
    *
  • #MDB_CURRENT - replace the item at the current cursor position. * The \b key parameter must still be provided, and must match it. * If using sorted duplicates (#MDB_DUPSORT) the data item must still * sort into the same place. This is intended to be used when the * new data is the same size as the old. Otherwise it will simply * perform a delete of the old record followed by an insert. *
  • #MDB_NODUPDATA - enter the new key/data pair only if it does not * already appear in the database. This flag may only be specified * if the database was opened with #MDB_DUPSORT. The function will * return #MDB_KEYEXIST if the key/data pair already appears in the * database. *
  • #MDB_NOOVERWRITE - enter the new key/data pair only if the key * does not already appear in the database. The function will return * #MDB_KEYEXIST if the key already appears in the database, even if * the database supports duplicates (#MDB_DUPSORT). *
  • #MDB_RESERVE - reserve space for data of the given size, but * don't copy the given data. Instead, return a pointer to the * reserved space, which the caller can fill in later - before * the next update operation or the transaction ends. This saves * an extra memcpy if the data is being generated later. This flag * must not be specified if the database was opened with #MDB_DUPSORT. *
  • #MDB_APPEND - append the given key/data pair to the end of the * database. No key comparisons are performed. This option allows * fast bulk loading when keys are already known to be in the * correct order. Loading unsorted keys with this flag will cause * a #MDB_KEYEXIST error. *
  • #MDB_APPENDDUP - as above, but for sorted dup data. *
  • #MDB_MULTIPLE - store multiple contiguous data elements in a * single request. This flag may only be specified if the database * was opened with #MDB_DUPFIXED. The \b data argument must be an * array of two MDB_vals. The mv_size of the first MDB_val must be * the size of a single data element. The mv_data of the first MDB_val * must point to the beginning of the array of contiguous data elements. * The mv_size of the second MDB_val must be the count of the number * of data elements to store. On return this field will be set to * the count of the number of elements actually written. The mv_data * of the second MDB_val is unused. *
* @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize(). *
  • #MDB_TXN_FULL - the transaction has too many dirty pages. *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data, unsigned int flags); /** @brief Delete current key/data pair * * This function deletes the key/data pair to which the cursor refers. * This does not invalidate the cursor, so operations such as MDB_NEXT * can still be used on it. * Both MDB_NEXT and MDB_GET_CURRENT will return the same record after * this operation. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[in] flags Options for this operation. This parameter * must be set to 0 or one of the values described here. *
    *
  • #MDB_NODUPDATA - delete all of the data items for the current key. * This flag may only be specified if the database was opened with #MDB_DUPSORT. *
* @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_del(MDB_cursor *cursor, unsigned int flags); /** @brief Return count of duplicates for current key. * * This call is only valid on databases that support sorted duplicate * data items #MDB_DUPSORT. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[out] countp Address where the count will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - cursor is not initialized, or an invalid parameter was specified. *
*/ int mdb_cursor_count(MDB_cursor *cursor, mdb_size_t *countp); /** @brief Compare two data items according to a particular database. * * This returns a comparison as if the two data items were keys in the * specified database. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] a The first item to compare * @param[in] b The second item to compare * @return < 0 if a < b, 0 if a == b, > 0 if a > b */ int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b); /** @brief Compare two data items according to a particular database. * * This returns a comparison as if the two items were data items of * the specified database. The database must have the #MDB_DUPSORT flag. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] a The first item to compare * @param[in] b The second item to compare * @return < 0 if a < b, 0 if a == b, > 0 if a > b */ int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b); /** @brief A callback function used to print a message from the library. * * @param[in] msg The string to be printed. * @param[in] ctx An arbitrary context pointer for the callback. * @return < 0 on failure, >= 0 on success. */ typedef int (MDB_msg_func)(const char *msg, void *ctx); /** @brief Dump the entries in the reader lock table. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] func A #MDB_msg_func function * @param[in] ctx Anything the message function needs * @return < 0 on failure, >= 0 on success. */ int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx); /** @brief Check for stale entries in the reader lock table. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] dead Number of stale slots that were cleared * @return 0 on success, non-zero on failure. */ int mdb_reader_check(MDB_env *env, int *dead); /** @} */ #ifdef __cplusplus } #endif /** @page tools LMDB Command Line Tools The following describes the command line tools that are available for LMDB. \li \ref mdb_copy_1 \li \ref mdb_dump_1 \li \ref mdb_load_1 \li \ref mdb_stat_1 */ #endif /* _LMDB_H_ */ ================================================ FILE: ThirdParty/liblmdb/mdb.c ================================================ /** @file mdb.c * @brief Lightning memory-mapped database library * * A Btree-based database management library modeled loosely on the * BerkeleyDB API, but much simplified. */ /* * Copyright 2011-2019 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . * * This code is derived from btree.c written by Martin Hedenfalk. * * Copyright (c) 2009, 2010 Martin Hedenfalk * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #if defined(MDB_VL32) || defined(__WIN64__) #define _FILE_OFFSET_BITS 64 #endif #ifdef _WIN32 #include #include #include /* get wcscpy() */ /* We use native NT APIs to setup the memory map, so that we can * let the DB file grow incrementally instead of always preallocating * the full size. These APIs are defined in and * but those headers are meant for driver-level development and * conflict with the regular user-level headers, so we explicitly * declare them here. We get pointers to these functions from * NTDLL.DLL at runtime, to avoid buildtime dependencies on any * NTDLL import libraries. */ typedef NTSTATUS (WINAPI NtCreateSectionFunc) (OUT PHANDLE sh, IN ACCESS_MASK acc, IN void * oa OPTIONAL, IN PLARGE_INTEGER ms OPTIONAL, IN ULONG pp, IN ULONG aa, IN HANDLE fh OPTIONAL); static NtCreateSectionFunc *NtCreateSection; typedef enum _SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 } SECTION_INHERIT; typedef NTSTATUS (WINAPI NtMapViewOfSectionFunc) (IN PHANDLE sh, IN HANDLE ph, IN OUT PVOID *addr, IN ULONG_PTR zbits, IN SIZE_T cs, IN OUT PLARGE_INTEGER off OPTIONAL, IN OUT PSIZE_T vs, IN SECTION_INHERIT ih, IN ULONG at, IN ULONG pp); static NtMapViewOfSectionFunc *NtMapViewOfSection; typedef NTSTATUS (WINAPI NtCloseFunc)(HANDLE h); static NtCloseFunc *NtClose; /** getpid() returns int; MinGW defines pid_t but MinGW64 typedefs it * as int64 which is wrong. MSVC doesn't define it at all, so just * don't use it. */ #define MDB_PID_T int #define MDB_THR_T DWORD #include #include #ifdef __GNUC__ # include #else # define LITTLE_ENDIAN 1234 # define BIG_ENDIAN 4321 # define BYTE_ORDER LITTLE_ENDIAN # ifndef SSIZE_MAX # define SSIZE_MAX INT_MAX # endif #endif #else #include #include #define MDB_PID_T pid_t #define MDB_THR_T pthread_t #include #include #include #ifdef HAVE_SYS_FILE_H #include #endif #include #endif #if defined(__mips) && defined(__linux) /* MIPS has cache coherency issues, requires explicit cache control */ #include extern int cacheflush(char *addr, int nbytes, int cache); #define CACHEFLUSH(addr, bytes, cache) cacheflush(addr, bytes, cache) #else #define CACHEFLUSH(addr, bytes, cache) #endif #if defined(__linux) && !defined(MDB_FDATASYNC_WORKS) /** fdatasync is broken on ext3/ext4fs on older kernels, see * description in #mdb_env_open2 comments. You can safely * define MDB_FDATASYNC_WORKS if this code will only be run * on kernels 3.6 and newer. */ #define BROKEN_FDATASYNC #endif #include #include #include #include #include #include #include #include #ifdef _MSC_VER #include typedef SSIZE_T ssize_t; #else #include #endif #if defined(__sun) || defined(__ANDROID__) /* Most platforms have posix_memalign, older may only have memalign */ #define HAVE_MEMALIGN 1 #include /* On Solaris, we need the POSIX sigwait function */ #if defined (__sun) # define _POSIX_PTHREAD_SEMANTICS 1 #endif #endif #if !(defined(BYTE_ORDER) || defined(__BYTE_ORDER)) #include #include /* defines BYTE_ORDER on HPUX and Solaris */ #endif #if defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__) # if !(defined(MDB_USE_POSIX_MUTEX) || defined(MDB_USE_POSIX_SEM)) # define MDB_USE_SYSV_SEM 1 # endif # define MDB_FDATASYNC fsync #elif defined(__ANDROID__) # define MDB_FDATASYNC fsync #endif #ifndef _WIN32 #include #include #ifdef MDB_USE_POSIX_SEM # define MDB_USE_HASH 1 #include #elif defined(MDB_USE_SYSV_SEM) #include #include #ifdef _SEM_SEMUN_UNDEFINED union semun { int val; struct semid_ds *buf; unsigned short *array; }; #endif /* _SEM_SEMUN_UNDEFINED */ #else #define MDB_USE_POSIX_MUTEX 1 #endif /* MDB_USE_POSIX_SEM */ #endif /* !_WIN32 */ #if defined(_WIN32) + defined(MDB_USE_POSIX_SEM) + defined(MDB_USE_SYSV_SEM) \ + defined(MDB_USE_POSIX_MUTEX) != 1 # error "Ambiguous shared-lock implementation" #endif #ifdef USE_VALGRIND #include #define VGMEMP_CREATE(h,r,z) VALGRIND_CREATE_MEMPOOL(h,r,z) #define VGMEMP_ALLOC(h,a,s) VALGRIND_MEMPOOL_ALLOC(h,a,s) #define VGMEMP_FREE(h,a) VALGRIND_MEMPOOL_FREE(h,a) #define VGMEMP_DESTROY(h) VALGRIND_DESTROY_MEMPOOL(h) #define VGMEMP_DEFINED(a,s) VALGRIND_MAKE_MEM_DEFINED(a,s) #else #define VGMEMP_CREATE(h,r,z) #define VGMEMP_ALLOC(h,a,s) #define VGMEMP_FREE(h,a) #define VGMEMP_DESTROY(h) #define VGMEMP_DEFINED(a,s) #endif #ifndef BYTE_ORDER # if (defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN)) && !(defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)) /* Solaris just defines one or the other */ # define LITTLE_ENDIAN 1234 # define BIG_ENDIAN 4321 # ifdef _LITTLE_ENDIAN # define BYTE_ORDER LITTLE_ENDIAN # else # define BYTE_ORDER BIG_ENDIAN # endif # else # define BYTE_ORDER __BYTE_ORDER # endif #endif #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN __LITTLE_ENDIAN #endif #ifndef BIG_ENDIAN #define BIG_ENDIAN __BIG_ENDIAN #endif #if defined(__i386) || defined(__x86_64) || defined(_M_IX86) #define MISALIGNED_OK 1 #endif #include "lmdb.h" #include "midl.h" #if (BYTE_ORDER == LITTLE_ENDIAN) == (BYTE_ORDER == BIG_ENDIAN) # error "Unknown or unsupported endianness (BYTE_ORDER)" #elif (-6 & 5) || CHAR_BIT!=8 || UINT_MAX!=0xffffffff || MDB_SIZE_MAX%UINT_MAX # error "Two's complement, reasonably sized integer types, please" #endif #ifdef __GNUC__ /** Put infrequently used env functions in separate section */ # ifdef __APPLE__ # define ESECT __attribute__ ((section("__TEXT,text_env"))) # else # define ESECT __attribute__ ((section("text_env"))) # endif #else #define ESECT #endif #ifdef _WIN32 #define CALL_CONV WINAPI #else #define CALL_CONV #endif /** @defgroup internal LMDB Internals * @{ */ /** @defgroup compat Compatibility Macros * A bunch of macros to minimize the amount of platform-specific ifdefs * needed throughout the rest of the code. When the features this library * needs are similar enough to POSIX to be hidden in a one-or-two line * replacement, this macro approach is used. * @{ */ /** Features under development */ #ifndef MDB_DEVEL #define MDB_DEVEL 0 #endif /** Wrapper around __func__, which is a C99 feature */ #if __STDC_VERSION__ >= 199901L # define mdb_func_ __func__ #elif __GNUC__ >= 2 || _MSC_VER >= 1300 # define mdb_func_ __FUNCTION__ #else /* If a debug message says (), update the #if statements above */ # define mdb_func_ "" #endif /* Internal error codes, not exposed outside liblmdb */ #define MDB_NO_ROOT (MDB_LAST_ERRCODE + 10) #ifdef _WIN32 #define MDB_OWNERDEAD ((int) WAIT_ABANDONED) #elif defined MDB_USE_SYSV_SEM #define MDB_OWNERDEAD (MDB_LAST_ERRCODE + 11) #elif defined(MDB_USE_POSIX_MUTEX) && defined(EOWNERDEAD) #define MDB_OWNERDEAD EOWNERDEAD /**< #LOCK_MUTEX0() result if dead owner */ #endif #ifdef __GLIBC__ #define GLIBC_VER ((__GLIBC__ << 16 )| __GLIBC_MINOR__) #endif /** Some platforms define the EOWNERDEAD error code * even though they don't support Robust Mutexes. * Compile with -DMDB_USE_ROBUST=0, or use some other * mechanism like -DMDB_USE_SYSV_SEM instead of * -DMDB_USE_POSIX_MUTEX. (SysV semaphores are * also Robust, but some systems don't support them * either.) */ #ifndef MDB_USE_ROBUST /* Android currently lacks Robust Mutex support. So does glibc < 2.4. */ # if defined(MDB_USE_POSIX_MUTEX) && (defined(__ANDROID__) || \ (defined(__GLIBC__) && GLIBC_VER < 0x020004)) # define MDB_USE_ROBUST 0 # else # define MDB_USE_ROBUST 1 # endif #endif /* !MDB_USE_ROBUST */ #if defined(MDB_USE_POSIX_MUTEX) && (MDB_USE_ROBUST) /* glibc < 2.12 only provided _np API */ # if (defined(__GLIBC__) && GLIBC_VER < 0x02000c) || \ (defined(PTHREAD_MUTEX_ROBUST_NP) && !defined(PTHREAD_MUTEX_ROBUST)) # define PTHREAD_MUTEX_ROBUST PTHREAD_MUTEX_ROBUST_NP # define pthread_mutexattr_setrobust(attr, flag) pthread_mutexattr_setrobust_np(attr, flag) # define pthread_mutex_consistent(mutex) pthread_mutex_consistent_np(mutex) # endif #endif /* MDB_USE_POSIX_MUTEX && MDB_USE_ROBUST */ #if defined(MDB_OWNERDEAD) && (MDB_USE_ROBUST) #define MDB_ROBUST_SUPPORTED 1 #endif #ifdef _WIN32 #define MDB_USE_HASH 1 #define MDB_PIDLOCK 0 #define THREAD_RET DWORD #define pthread_t HANDLE #define pthread_mutex_t HANDLE #define pthread_cond_t HANDLE typedef HANDLE mdb_mutex_t, mdb_mutexref_t; #define pthread_key_t DWORD #define pthread_self() GetCurrentThreadId() #define pthread_key_create(x,y) \ ((*(x) = TlsAlloc()) == TLS_OUT_OF_INDEXES ? ErrCode() : 0) #define pthread_key_delete(x) TlsFree(x) #define pthread_getspecific(x) TlsGetValue(x) #define pthread_setspecific(x,y) (TlsSetValue(x,y) ? 0 : ErrCode()) #define pthread_mutex_unlock(x) ReleaseMutex(*x) #define pthread_mutex_lock(x) WaitForSingleObject(*x, INFINITE) #define pthread_cond_signal(x) SetEvent(*x) #define pthread_cond_wait(cond,mutex) do{SignalObjectAndWait(*mutex, *cond, INFINITE, FALSE); WaitForSingleObject(*mutex, INFINITE);}while(0) #define THREAD_CREATE(thr,start,arg) \ (((thr) = CreateThread(NULL, 0, start, arg, 0, NULL)) ? 0 : ErrCode()) #define THREAD_FINISH(thr) \ (WaitForSingleObject(thr, INFINITE) ? ErrCode() : 0) #define LOCK_MUTEX0(mutex) WaitForSingleObject(mutex, INFINITE) #define UNLOCK_MUTEX(mutex) ReleaseMutex(mutex) #define mdb_mutex_consistent(mutex) 0 #define getpid() GetCurrentProcessId() #define MDB_FDATASYNC(fd) (!FlushFileBuffers(fd)) #define MDB_MSYNC(addr,len,flags) (!FlushViewOfFile(addr,len)) #define ErrCode() GetLastError() #define GET_PAGESIZE(x) {SYSTEM_INFO si; GetSystemInfo(&si); (x) = si.dwPageSize;} #define close(fd) (CloseHandle(fd) ? 0 : -1) #define munmap(ptr,len) UnmapViewOfFile(ptr) #ifdef PROCESS_QUERY_LIMITED_INFORMATION #define MDB_PROCESS_QUERY_LIMITED_INFORMATION PROCESS_QUERY_LIMITED_INFORMATION #else #define MDB_PROCESS_QUERY_LIMITED_INFORMATION 0x1000 #endif #else #define THREAD_RET void * #define THREAD_CREATE(thr,start,arg) pthread_create(&thr,NULL,start,arg) #define THREAD_FINISH(thr) pthread_join(thr,NULL) /** For MDB_LOCK_FORMAT: True if readers take a pid lock in the lockfile */ #define MDB_PIDLOCK 1 #ifdef MDB_USE_POSIX_SEM typedef sem_t *mdb_mutex_t, *mdb_mutexref_t; #define LOCK_MUTEX0(mutex) mdb_sem_wait(mutex) #define UNLOCK_MUTEX(mutex) sem_post(mutex) static int mdb_sem_wait(sem_t *sem) { int rc; while ((rc = sem_wait(sem)) && (rc = errno) == EINTR) ; return rc; } #elif defined MDB_USE_SYSV_SEM typedef struct mdb_mutex { int semid; int semnum; int *locked; } mdb_mutex_t[1], *mdb_mutexref_t; #define LOCK_MUTEX0(mutex) mdb_sem_wait(mutex) #define UNLOCK_MUTEX(mutex) do { \ struct sembuf sb = { 0, 1, SEM_UNDO }; \ sb.sem_num = (mutex)->semnum; \ *(mutex)->locked = 0; \ semop((mutex)->semid, &sb, 1); \ } while(0) static int mdb_sem_wait(mdb_mutexref_t sem) { int rc, *locked = sem->locked; struct sembuf sb = { 0, -1, SEM_UNDO }; sb.sem_num = sem->semnum; do { if (!semop(sem->semid, &sb, 1)) { rc = *locked ? MDB_OWNERDEAD : MDB_SUCCESS; *locked = 1; break; } } while ((rc = errno) == EINTR); return rc; } #define mdb_mutex_consistent(mutex) 0 #else /* MDB_USE_POSIX_MUTEX: */ /** Shared mutex/semaphore as the original is stored. * * Not for copies. Instead it can be assigned to an #mdb_mutexref_t. * When mdb_mutexref_t is a pointer and mdb_mutex_t is not, then it * is array[size 1] so it can be assigned to the pointer. */ typedef pthread_mutex_t mdb_mutex_t[1]; /** Reference to an #mdb_mutex_t */ typedef pthread_mutex_t *mdb_mutexref_t; /** Lock the reader or writer mutex. * Returns 0 or a code to give #mdb_mutex_failed(), as in #LOCK_MUTEX(). */ #define LOCK_MUTEX0(mutex) pthread_mutex_lock(mutex) /** Unlock the reader or writer mutex. */ #define UNLOCK_MUTEX(mutex) pthread_mutex_unlock(mutex) /** Mark mutex-protected data as repaired, after death of previous owner. */ #define mdb_mutex_consistent(mutex) pthread_mutex_consistent(mutex) #endif /* MDB_USE_POSIX_SEM || MDB_USE_SYSV_SEM */ /** Get the error code for the last failed system function. */ #define ErrCode() errno /** An abstraction for a file handle. * On POSIX systems file handles are small integers. On Windows * they're opaque pointers. */ #define HANDLE int /** A value for an invalid file handle. * Mainly used to initialize file variables and signify that they are * unused. */ #define INVALID_HANDLE_VALUE (-1) /** Get the size of a memory page for the system. * This is the basic size that the platform's memory manager uses, and is * fundamental to the use of memory-mapped files. */ #define GET_PAGESIZE(x) ((x) = sysconf(_SC_PAGE_SIZE)) #endif #define Z MDB_FMT_Z /**< printf/scanf format modifier for size_t */ #define Yu MDB_PRIy(u) /**< printf format for #mdb_size_t */ #define Yd MDB_PRIy(d) /**< printf format for 'signed #mdb_size_t' */ #ifdef MDB_USE_SYSV_SEM #define MNAME_LEN (sizeof(int)) #else #define MNAME_LEN (sizeof(pthread_mutex_t)) #endif /** Initial part of #MDB_env.me_mutexname[]. * Changes to this code must be reflected in #MDB_LOCK_FORMAT. */ #ifdef _WIN32 #define MUTEXNAME_PREFIX "Global\\MDB" #elif defined MDB_USE_POSIX_SEM #define MUTEXNAME_PREFIX "/MDB" #endif /** @} */ #ifdef MDB_ROBUST_SUPPORTED /** Lock mutex, handle any error, set rc = result. * Return 0 on success, nonzero (not rc) on error. */ #define LOCK_MUTEX(rc, env, mutex) \ (((rc) = LOCK_MUTEX0(mutex)) && \ ((rc) = mdb_mutex_failed(env, mutex, rc))) static int mdb_mutex_failed(MDB_env *env, mdb_mutexref_t mutex, int rc); #else #define LOCK_MUTEX(rc, env, mutex) ((rc) = LOCK_MUTEX0(mutex)) #define mdb_mutex_failed(env, mutex, rc) (rc) #endif #ifndef _WIN32 /** A flag for opening a file and requesting synchronous data writes. * This is only used when writing a meta page. It's not strictly needed; * we could just do a normal write and then immediately perform a flush. * But if this flag is available it saves us an extra system call. * * @note If O_DSYNC is undefined but exists in /usr/include, * preferably set some compiler flag to get the definition. */ #ifndef MDB_DSYNC # ifdef O_DSYNC # define MDB_DSYNC O_DSYNC # else # define MDB_DSYNC O_SYNC # endif #endif #endif /** Function for flushing the data of a file. Define this to fsync * if fdatasync() is not supported. */ #ifndef MDB_FDATASYNC # define MDB_FDATASYNC fdatasync #endif #ifndef MDB_MSYNC # define MDB_MSYNC(addr,len,flags) msync(addr,len,flags) #endif #ifndef MS_SYNC #define MS_SYNC 1 #endif #ifndef MS_ASYNC #define MS_ASYNC 0 #endif /** A page number in the database. * Note that 64 bit page numbers are overkill, since pages themselves * already represent 12-13 bits of addressable memory, and the OS will * always limit applications to a maximum of 63 bits of address space. * * @note In the #MDB_node structure, we only store 48 bits of this value, * which thus limits us to only 60 bits of addressable data. */ typedef MDB_ID pgno_t; /** A transaction ID. * See struct MDB_txn.mt_txnid for details. */ typedef MDB_ID txnid_t; /** @defgroup debug Debug Macros * @{ */ #ifndef MDB_DEBUG /** Enable debug output. Needs variable argument macros (a C99 feature). * Set this to 1 for copious tracing. Set to 2 to add dumps of all IDLs * read from and written to the database (used for free space management). */ #define MDB_DEBUG 0 #endif #if MDB_DEBUG static int mdb_debug; static txnid_t mdb_debug_start; /** Print a debug message with printf formatting. * Requires double parenthesis around 2 or more args. */ # define DPRINTF(args) ((void) ((mdb_debug) && DPRINTF0 args)) # define DPRINTF0(fmt, ...) \ fprintf(stderr, "%s:%d " fmt "\n", mdb_func_, __LINE__, __VA_ARGS__) #else # define DPRINTF(args) ((void) 0) #endif /** Print a debug string. * The string is printed literally, with no format processing. */ #define DPUTS(arg) DPRINTF(("%s", arg)) /** Debuging output value of a cursor DBI: Negative in a sub-cursor. */ #define DDBI(mc) \ (((mc)->mc_flags & C_SUB) ? -(int)(mc)->mc_dbi : (int)(mc)->mc_dbi) /** @} */ /** @brief The maximum size of a database page. * * It is 32k or 64k, since value-PAGEBASE must fit in * #MDB_page.%mp_upper. * * LMDB will use database pages < OS pages if needed. * That causes more I/O in write transactions: The OS must * know (read) the whole page before writing a partial page. * * Note that we don't currently support Huge pages. On Linux, * regular data files cannot use Huge pages, and in general * Huge pages aren't actually pageable. We rely on the OS * demand-pager to read our data and page it out when memory * pressure from other processes is high. So until OSs have * actual paging support for Huge pages, they're not viable. */ #define MAX_PAGESIZE (PAGEBASE ? 0x10000 : 0x8000) /** The minimum number of keys required in a database page. * Setting this to a larger value will place a smaller bound on the * maximum size of a data item. Data items larger than this size will * be pushed into overflow pages instead of being stored directly in * the B-tree node. This value used to default to 4. With a page size * of 4096 bytes that meant that any item larger than 1024 bytes would * go into an overflow page. That also meant that on average 2-3KB of * each overflow page was wasted space. The value cannot be lower than * 2 because then there would no longer be a tree structure. With this * value, items larger than 2KB will go into overflow pages, and on * average only 1KB will be wasted. */ #define MDB_MINKEYS 2 /** A stamp that identifies a file as an LMDB file. * There's nothing special about this value other than that it is easily * recognizable, and it will reflect any byte order mismatches. */ #define MDB_MAGIC 0xBEEFC0DE /** The version number for a database's datafile format. */ #define MDB_DATA_VERSION ((MDB_DEVEL) ? 999 : 1) /** The version number for a database's lockfile format. */ #define MDB_LOCK_VERSION ((MDB_DEVEL) ? 999 : 2) /** Number of bits representing #MDB_LOCK_VERSION in #MDB_LOCK_FORMAT. * The remaining bits must leave room for #MDB_lock_desc. */ #define MDB_LOCK_VERSION_BITS 12 /** @brief The max size of a key we can write, or 0 for computed max. * * This macro should normally be left alone or set to 0. * Note that a database with big keys or dupsort data cannot be * reliably modified by a liblmdb which uses a smaller max. * The default is 511 for backwards compat, or 0 when #MDB_DEVEL. * * Other values are allowed, for backwards compat. However: * A value bigger than the computed max can break if you do not * know what you are doing, and liblmdb <= 0.9.10 can break when * modifying a DB with keys/dupsort data bigger than its max. * * Data items in an #MDB_DUPSORT database are also limited to * this size, since they're actually keys of a sub-DB. Keys and * #MDB_DUPSORT data items must fit on a node in a regular page. */ #ifndef MDB_MAXKEYSIZE #define MDB_MAXKEYSIZE ((MDB_DEVEL) ? 0 : 511) #endif /** The maximum size of a key we can write to the environment. */ #if MDB_MAXKEYSIZE #define ENV_MAXKEY(env) (MDB_MAXKEYSIZE) #else #define ENV_MAXKEY(env) ((env)->me_maxkey) #endif /** @brief The maximum size of a data item. * * We only store a 32 bit value for node sizes. */ #define MAXDATASIZE 0xffffffffUL #if MDB_DEBUG /** Key size which fits in a #DKBUF. * @ingroup debug */ #define DKBUF_MAXKEYSIZE ((MDB_MAXKEYSIZE) > 0 ? (MDB_MAXKEYSIZE) : 511) /** A key buffer. * @ingroup debug * This is used for printing a hex dump of a key's contents. */ #define DKBUF char kbuf[DKBUF_MAXKEYSIZE*2+1] /** Display a key in hex. * @ingroup debug * Invoke a function to display a key in hex. */ #define DKEY(x) mdb_dkey(x, kbuf) #else #define DKBUF #define DKEY(x) 0 #endif /** An invalid page number. * Mainly used to denote an empty tree. */ #define P_INVALID (~(pgno_t)0) /** Test if the flags \b f are set in a flag word \b w. */ #define F_ISSET(w, f) (((w) & (f)) == (f)) /** Round \b n up to an even number. */ #define EVEN(n) (((n) + 1U) & -2) /* sign-extending -2 to match n+1U */ /** Least significant 1-bit of \b n. n must be of an unsigned type. */ #define LOW_BIT(n) ((n) & (-(n))) /** (log2(\b p2) % \b n), for p2 = power of 2 and 0 < n < 8. */ #define LOG2_MOD(p2, n) (7 - 86 / ((p2) % ((1U<<(n))-1) + 11)) /* Explanation: Let p2 = 2**(n*y + x), x> (CACHELINE>64), 5)) + 6 * (sizeof(MDB_PID_T)/4 % 3) /* legacy(2) to word(4/8)? */ + 18 * (sizeof(pthread_t)/4 % 5) /* can be struct{id, active data} */ + 90 * (sizeof(MDB_txbody) / CACHELINE % 3) + 270 * (MDB_LOCK_TYPE % 120) /* The above is < 270*120 < 2**15 */ + ((sizeof(txnid_t) == 8) << 15) /* 32bit/64bit */ + ((sizeof(MDB_reader) > CACHELINE) << 16) /* Not really needed - implied by MDB_LOCK_TYPE != (_WIN32 locking) */ + (((MDB_PIDLOCK) != 0) << 17) /* 18 bits total: Must be <= (32 - MDB_LOCK_VERSION_BITS). */ }; /** @} */ /** Common header for all page types. The page type depends on #mp_flags. * * #P_BRANCH and #P_LEAF pages have unsorted '#MDB_node's at the end, with * sorted #mp_ptrs[] entries referring to them. Exception: #P_LEAF2 pages * omit mp_ptrs and pack sorted #MDB_DUPFIXED values after the page header. * * #P_OVERFLOW records occupy one or more contiguous pages where only the * first has a page header. They hold the real data of #F_BIGDATA nodes. * * #P_SUBP sub-pages are small leaf "pages" with duplicate data. * A node with flag #F_DUPDATA but not #F_SUBDATA contains a sub-page. * (Duplicate data can also go in sub-databases, which use normal pages.) * * #P_META pages contain #MDB_meta, the start point of an LMDB snapshot. * * Each non-metapage up to #MDB_meta.%mm_last_pg is reachable exactly once * in the snapshot: Either used by a database or listed in a freeDB record. */ typedef struct MDB_page { #define mp_pgno mp_p.p_pgno #define mp_next mp_p.p_next union { pgno_t p_pgno; /**< page number */ struct MDB_page *p_next; /**< for in-memory list of freed pages */ } mp_p; uint16_t mp_pad; /**< key size if this is a LEAF2 page */ /** @defgroup mdb_page Page Flags * @ingroup internal * Flags for the page headers. * @{ */ #define P_BRANCH 0x01 /**< branch page */ #define P_LEAF 0x02 /**< leaf page */ #define P_OVERFLOW 0x04 /**< overflow page */ #define P_META 0x08 /**< meta page */ #define P_DIRTY 0x10 /**< dirty page, also set for #P_SUBP pages */ #define P_LEAF2 0x20 /**< for #MDB_DUPFIXED records */ #define P_SUBP 0x40 /**< for #MDB_DUPSORT sub-pages */ #define P_LOOSE 0x4000 /**< page was dirtied then freed, can be reused */ #define P_KEEP 0x8000 /**< leave this page alone during spill */ /** @} */ uint16_t mp_flags; /**< @ref mdb_page */ #define mp_lower mp_pb.pb.pb_lower #define mp_upper mp_pb.pb.pb_upper #define mp_pages mp_pb.pb_pages union { struct { indx_t pb_lower; /**< lower bound of free space */ indx_t pb_upper; /**< upper bound of free space */ } pb; uint32_t pb_pages; /**< number of overflow pages */ } mp_pb; indx_t mp_ptrs[1]; /**< dynamic size */ } MDB_page; /** Size of the page header, excluding dynamic data at the end */ #define PAGEHDRSZ ((unsigned) offsetof(MDB_page, mp_ptrs)) /** Address of first usable data byte in a page, after the header */ #define METADATA(p) ((void *)((char *)(p) + PAGEHDRSZ)) /** ITS#7713, change PAGEBASE to handle 65536 byte pages */ #define PAGEBASE ((MDB_DEVEL) ? PAGEHDRSZ : 0) /** Number of nodes on a page */ #define NUMKEYS(p) (((p)->mp_lower - (PAGEHDRSZ-PAGEBASE)) >> 1) /** The amount of space remaining in the page */ #define SIZELEFT(p) (indx_t)((p)->mp_upper - (p)->mp_lower) /** The percentage of space used in the page, in tenths of a percent. */ #define PAGEFILL(env, p) (1000L * ((env)->me_psize - PAGEHDRSZ - SIZELEFT(p)) / \ ((env)->me_psize - PAGEHDRSZ)) /** The minimum page fill factor, in tenths of a percent. * Pages emptier than this are candidates for merging. */ #define FILL_THRESHOLD 250 /** Test if a page is a leaf page */ #define IS_LEAF(p) F_ISSET((p)->mp_flags, P_LEAF) /** Test if a page is a LEAF2 page */ #define IS_LEAF2(p) F_ISSET((p)->mp_flags, P_LEAF2) /** Test if a page is a branch page */ #define IS_BRANCH(p) F_ISSET((p)->mp_flags, P_BRANCH) /** Test if a page is an overflow page */ #define IS_OVERFLOW(p) F_ISSET((p)->mp_flags, P_OVERFLOW) /** Test if a page is a sub page */ #define IS_SUBP(p) F_ISSET((p)->mp_flags, P_SUBP) /** The number of overflow pages needed to store the given size. */ #define OVPAGES(size, psize) ((PAGEHDRSZ-1 + (size)) / (psize) + 1) /** Link in #MDB_txn.%mt_loose_pgs list. * Kept outside the page header, which is needed when reusing the page. */ #define NEXT_LOOSE_PAGE(p) (*(MDB_page **)((p) + 2)) /** Header for a single key/data pair within a page. * Used in pages of type #P_BRANCH and #P_LEAF without #P_LEAF2. * We guarantee 2-byte alignment for 'MDB_node's. * * #mn_lo and #mn_hi are used for data size on leaf nodes, and for child * pgno on branch nodes. On 64 bit platforms, #mn_flags is also used * for pgno. (Branch nodes have no flags). Lo and hi are in host byte * order in case some accesses can be optimized to 32-bit word access. * * Leaf node flags describe node contents. #F_BIGDATA says the node's * data part is the page number of an overflow page with actual data. * #F_DUPDATA and #F_SUBDATA can be combined giving duplicate data in * a sub-page/sub-database, and named databases (just #F_SUBDATA). */ typedef struct MDB_node { /** part of data size or pgno * @{ */ #if BYTE_ORDER == LITTLE_ENDIAN unsigned short mn_lo, mn_hi; #else unsigned short mn_hi, mn_lo; #endif /** @} */ /** @defgroup mdb_node Node Flags * @ingroup internal * Flags for node headers. * @{ */ #define F_BIGDATA 0x01 /**< data put on overflow page */ #define F_SUBDATA 0x02 /**< data is a sub-database */ #define F_DUPDATA 0x04 /**< data has duplicates */ /** valid flags for #mdb_node_add() */ #define NODE_ADD_FLAGS (F_DUPDATA|F_SUBDATA|MDB_RESERVE|MDB_APPEND) /** @} */ unsigned short mn_flags; /**< @ref mdb_node */ unsigned short mn_ksize; /**< key size */ char mn_data[1]; /**< key and data are appended here */ } MDB_node; /** Size of the node header, excluding dynamic data at the end */ #define NODESIZE offsetof(MDB_node, mn_data) /** Bit position of top word in page number, for shifting mn_flags */ #define PGNO_TOPWORD ((pgno_t)-1 > 0xffffffffu ? 32 : 0) /** Size of a node in a branch page with a given key. * This is just the node header plus the key, there is no data. */ #define INDXSIZE(k) (NODESIZE + ((k) == NULL ? 0 : (k)->mv_size)) /** Size of a node in a leaf page with a given key and data. * This is node header plus key plus data size. */ #define LEAFSIZE(k, d) (NODESIZE + (k)->mv_size + (d)->mv_size) /** Address of node \b i in page \b p */ #define NODEPTR(p, i) ((MDB_node *)((char *)(p) + (p)->mp_ptrs[i] + PAGEBASE)) /** Address of the key for the node */ #define NODEKEY(node) (void *)((node)->mn_data) /** Address of the data for a node */ #define NODEDATA(node) (void *)((char *)(node)->mn_data + (node)->mn_ksize) /** Get the page number pointed to by a branch node */ #define NODEPGNO(node) \ ((node)->mn_lo | ((pgno_t) (node)->mn_hi << 16) | \ (PGNO_TOPWORD ? ((pgno_t) (node)->mn_flags << PGNO_TOPWORD) : 0)) /** Set the page number in a branch node */ #define SETPGNO(node,pgno) do { \ (node)->mn_lo = (pgno) & 0xffff; (node)->mn_hi = (pgno) >> 16; \ if (PGNO_TOPWORD) (node)->mn_flags = (pgno) >> PGNO_TOPWORD; } while(0) /** Get the size of the data in a leaf node */ #define NODEDSZ(node) ((node)->mn_lo | ((unsigned)(node)->mn_hi << 16)) /** Set the size of the data for a leaf node */ #define SETDSZ(node,size) do { \ (node)->mn_lo = (size) & 0xffff; (node)->mn_hi = (size) >> 16;} while(0) /** The size of a key in a node */ #define NODEKSZ(node) ((node)->mn_ksize) /** Copy a page number from src to dst */ #ifdef MISALIGNED_OK #define COPY_PGNO(dst,src) dst = src #else #if MDB_SIZE_MAX > 0xffffffffU #define COPY_PGNO(dst,src) do { \ unsigned short *s, *d; \ s = (unsigned short *)&(src); \ d = (unsigned short *)&(dst); \ *d++ = *s++; \ *d++ = *s++; \ *d++ = *s++; \ *d = *s; \ } while (0) #else #define COPY_PGNO(dst,src) do { \ unsigned short *s, *d; \ s = (unsigned short *)&(src); \ d = (unsigned short *)&(dst); \ *d++ = *s++; \ *d = *s; \ } while (0) #endif #endif /** The address of a key in a LEAF2 page. * LEAF2 pages are used for #MDB_DUPFIXED sorted-duplicate sub-DBs. * There are no node headers, keys are stored contiguously. */ #define LEAF2KEY(p, i, ks) ((char *)(p) + PAGEHDRSZ + ((i)*(ks))) /** Set the \b node's key into \b keyptr, if requested. */ #define MDB_GET_KEY(node, keyptr) { if ((keyptr) != NULL) { \ (keyptr)->mv_size = NODEKSZ(node); (keyptr)->mv_data = NODEKEY(node); } } /** Set the \b node's key into \b key. */ #define MDB_GET_KEY2(node, key) { key.mv_size = NODEKSZ(node); key.mv_data = NODEKEY(node); } /** Information about a single database in the environment. */ typedef struct MDB_db { uint32_t md_pad; /**< also ksize for LEAF2 pages */ uint16_t md_flags; /**< @ref mdb_dbi_open */ uint16_t md_depth; /**< depth of this tree */ pgno_t md_branch_pages; /**< number of internal pages */ pgno_t md_leaf_pages; /**< number of leaf pages */ pgno_t md_overflow_pages; /**< number of overflow pages */ mdb_size_t md_entries; /**< number of data items */ pgno_t md_root; /**< the root page of this tree */ } MDB_db; #define MDB_VALID 0x8000 /**< DB handle is valid, for me_dbflags */ #define PERSISTENT_FLAGS (0xffff & ~(MDB_VALID)) /** #mdb_dbi_open() flags */ #define VALID_FLAGS (MDB_REVERSEKEY|MDB_DUPSORT|MDB_INTEGERKEY|MDB_DUPFIXED|\ MDB_INTEGERDUP|MDB_REVERSEDUP|MDB_CREATE) /** Handle for the DB used to track free pages. */ #define FREE_DBI 0 /** Handle for the default DB. */ #define MAIN_DBI 1 /** Number of DBs in metapage (free and main) - also hardcoded elsewhere */ #define CORE_DBS 2 /** Number of meta pages - also hardcoded elsewhere */ #define NUM_METAS 2 /** Meta page content. * A meta page is the start point for accessing a database snapshot. * Pages 0-1 are meta pages. Transaction N writes meta page #(N % 2). */ typedef struct MDB_meta { /** Stamp identifying this as an LMDB file. It must be set * to #MDB_MAGIC. */ uint32_t mm_magic; /** Version number of this file. Must be set to #MDB_DATA_VERSION. */ uint32_t mm_version; #ifdef MDB_VL32 union { /* always zero since we don't support fixed mapping in MDB_VL32 */ MDB_ID mmun_ull; void *mmun_address; } mm_un; #define mm_address mm_un.mmun_address #else void *mm_address; /**< address for fixed mapping */ #endif mdb_size_t mm_mapsize; /**< size of mmap region */ MDB_db mm_dbs[CORE_DBS]; /**< first is free space, 2nd is main db */ /** The size of pages used in this DB */ #define mm_psize mm_dbs[FREE_DBI].md_pad /** Any persistent environment flags. @ref mdb_env */ #define mm_flags mm_dbs[FREE_DBI].md_flags /** Last used page in the datafile. * Actually the file may be shorter if the freeDB lists the final pages. */ pgno_t mm_last_pg; volatile txnid_t mm_txnid; /**< txnid that committed this page */ } MDB_meta; /** Buffer for a stack-allocated meta page. * The members define size and alignment, and silence type * aliasing warnings. They are not used directly; that could * mean incorrectly using several union members in parallel. */ typedef union MDB_metabuf { MDB_page mb_page; struct { char mm_pad[PAGEHDRSZ]; MDB_meta mm_meta; } mb_metabuf; } MDB_metabuf; /** Auxiliary DB info. * The information here is mostly static/read-only. There is * only a single copy of this record in the environment. */ typedef struct MDB_dbx { MDB_val md_name; /**< name of the database */ MDB_cmp_func *md_cmp; /**< function for comparing keys */ MDB_cmp_func *md_dcmp; /**< function for comparing data items */ MDB_rel_func *md_rel; /**< user relocate function */ void *md_relctx; /**< user-provided context for md_rel */ } MDB_dbx; /** A database transaction. * Every operation requires a transaction handle. */ struct MDB_txn { MDB_txn *mt_parent; /**< parent of a nested txn */ /** Nested txn under this txn, set together with flag #MDB_TXN_HAS_CHILD */ MDB_txn *mt_child; pgno_t mt_next_pgno; /**< next unallocated page */ #ifdef MDB_VL32 pgno_t mt_last_pgno; /**< last written page */ #endif /** The ID of this transaction. IDs are integers incrementing from 1. * Only committed write transactions increment the ID. If a transaction * aborts, the ID may be re-used by the next writer. */ txnid_t mt_txnid; MDB_env *mt_env; /**< the DB environment */ /** The list of pages that became unused during this transaction. */ MDB_IDL mt_free_pgs; /** The list of loose pages that became unused and may be reused * in this transaction, linked through #NEXT_LOOSE_PAGE(page). */ MDB_page *mt_loose_pgs; /** Number of loose pages (#mt_loose_pgs) */ int mt_loose_count; /** The sorted list of dirty pages we temporarily wrote to disk * because the dirty list was full. page numbers in here are * shifted left by 1, deleted slots have the LSB set. */ MDB_IDL mt_spill_pgs; union { /** For write txns: Modified pages. Sorted when not MDB_WRITEMAP. */ MDB_ID2L dirty_list; /** For read txns: This thread/txn's reader table slot, or NULL. */ MDB_reader *reader; } mt_u; /** Array of records for each DB known in the environment. */ MDB_dbx *mt_dbxs; /** Array of MDB_db records for each known DB */ MDB_db *mt_dbs; /** Array of sequence numbers for each DB handle */ unsigned int *mt_dbiseqs; /** @defgroup mt_dbflag Transaction DB Flags * @ingroup internal * @{ */ #define DB_DIRTY 0x01 /**< DB was written in this txn */ #define DB_STALE 0x02 /**< Named-DB record is older than txnID */ #define DB_NEW 0x04 /**< Named-DB handle opened in this txn */ #define DB_VALID 0x08 /**< DB handle is valid, see also #MDB_VALID */ #define DB_USRVALID 0x10 /**< As #DB_VALID, but not set for #FREE_DBI */ #define DB_DUPDATA 0x20 /**< DB is #MDB_DUPSORT data */ /** @} */ /** In write txns, array of cursors for each DB */ MDB_cursor **mt_cursors; /** Array of flags for each DB */ unsigned char *mt_dbflags; #ifdef MDB_VL32 /** List of read-only pages (actually chunks) */ MDB_ID3L mt_rpages; /** We map chunks of 16 pages. Even though Windows uses 4KB pages, all * mappings must begin on 64KB boundaries. So we round off all pgnos to * a chunk boundary. We do the same on Linux for symmetry, and also to * reduce the frequency of mmap/munmap calls. */ #define MDB_RPAGE_CHUNK 16 #define MDB_TRPAGE_SIZE 4096 /**< size of #mt_rpages array of chunks */ #define MDB_TRPAGE_MAX (MDB_TRPAGE_SIZE-1) /**< maximum chunk index */ unsigned int mt_rpcheck; /**< threshold for reclaiming unref'd chunks */ #endif /** Number of DB records in use, or 0 when the txn is finished. * This number only ever increments until the txn finishes; we * don't decrement it when individual DB handles are closed. */ MDB_dbi mt_numdbs; /** @defgroup mdb_txn Transaction Flags * @ingroup internal * @{ */ /** #mdb_txn_begin() flags */ #define MDB_TXN_BEGIN_FLAGS (MDB_NOMETASYNC|MDB_NOSYNC|MDB_RDONLY) #define MDB_TXN_NOMETASYNC MDB_NOMETASYNC /**< don't sync meta for this txn on commit */ #define MDB_TXN_NOSYNC MDB_NOSYNC /**< don't sync this txn on commit */ #define MDB_TXN_RDONLY MDB_RDONLY /**< read-only transaction */ /* internal txn flags */ #define MDB_TXN_WRITEMAP MDB_WRITEMAP /**< copy of #MDB_env flag in writers */ #define MDB_TXN_FINISHED 0x01 /**< txn is finished or never began */ #define MDB_TXN_ERROR 0x02 /**< txn is unusable after an error */ #define MDB_TXN_DIRTY 0x04 /**< must write, even if dirty list is empty */ #define MDB_TXN_SPILLS 0x08 /**< txn or a parent has spilled pages */ #define MDB_TXN_HAS_CHILD 0x10 /**< txn has an #MDB_txn.%mt_child */ /** most operations on the txn are currently illegal */ #define MDB_TXN_BLOCKED (MDB_TXN_FINISHED|MDB_TXN_ERROR|MDB_TXN_HAS_CHILD) /** @} */ unsigned int mt_flags; /**< @ref mdb_txn */ /** #dirty_list room: Array size - \#dirty pages visible to this txn. * Includes ancestor txns' dirty pages not hidden by other txns' * dirty/spilled pages. Thus commit(nested txn) has room to merge * dirty_list into mt_parent after freeing hidden mt_parent pages. */ unsigned int mt_dirty_room; }; /** Enough space for 2^32 nodes with minimum of 2 keys per node. I.e., plenty. * At 4 keys per node, enough for 2^64 nodes, so there's probably no need to * raise this on a 64 bit machine. */ #define CURSOR_STACK 32 struct MDB_xcursor; /** Cursors are used for all DB operations. * A cursor holds a path of (page pointer, key index) from the DB * root to a position in the DB, plus other state. #MDB_DUPSORT * cursors include an xcursor to the current data item. Write txns * track their cursors and keep them up to date when data moves. * Exception: An xcursor's pointer to a #P_SUBP page can be stale. * (A node with #F_DUPDATA but no #F_SUBDATA contains a subpage). */ struct MDB_cursor { /** Next cursor on this DB in this txn */ MDB_cursor *mc_next; /** Backup of the original cursor if this cursor is a shadow */ MDB_cursor *mc_backup; /** Context used for databases with #MDB_DUPSORT, otherwise NULL */ struct MDB_xcursor *mc_xcursor; /** The transaction that owns this cursor */ MDB_txn *mc_txn; /** The database handle this cursor operates on */ MDB_dbi mc_dbi; /** The database record for this cursor */ MDB_db *mc_db; /** The database auxiliary record for this cursor */ MDB_dbx *mc_dbx; /** The @ref mt_dbflag for this database */ unsigned char *mc_dbflag; unsigned short mc_snum; /**< number of pushed pages */ unsigned short mc_top; /**< index of top page, normally mc_snum-1 */ /** @defgroup mdb_cursor Cursor Flags * @ingroup internal * Cursor state flags. * @{ */ #define C_INITIALIZED 0x01 /**< cursor has been initialized and is valid */ #define C_EOF 0x02 /**< No more data */ #define C_SUB 0x04 /**< Cursor is a sub-cursor */ #define C_DEL 0x08 /**< last op was a cursor_del */ #define C_UNTRACK 0x40 /**< Un-track cursor when closing */ #define C_WRITEMAP MDB_TXN_WRITEMAP /**< Copy of txn flag */ /** Read-only cursor into the txn's original snapshot in the map. * Set for read-only txns, and in #mdb_page_alloc() for #FREE_DBI when * #MDB_DEVEL & 2. Only implements code which is necessary for this. */ #define C_ORIG_RDONLY MDB_TXN_RDONLY /** @} */ unsigned int mc_flags; /**< @ref mdb_cursor */ MDB_page *mc_pg[CURSOR_STACK]; /**< stack of pushed pages */ indx_t mc_ki[CURSOR_STACK]; /**< stack of page indices */ #ifdef MDB_VL32 MDB_page *mc_ovpg; /**< a referenced overflow page */ # define MC_OVPG(mc) ((mc)->mc_ovpg) # define MC_SET_OVPG(mc, pg) ((mc)->mc_ovpg = (pg)) #else # define MC_OVPG(mc) ((MDB_page *)0) # define MC_SET_OVPG(mc, pg) ((void)0) #endif }; /** Context for sorted-dup records. * We could have gone to a fully recursive design, with arbitrarily * deep nesting of sub-databases. But for now we only handle these * levels - main DB, optional sub-DB, sorted-duplicate DB. */ typedef struct MDB_xcursor { /** A sub-cursor for traversing the Dup DB */ MDB_cursor mx_cursor; /** The database record for this Dup DB */ MDB_db mx_db; /** The auxiliary DB record for this Dup DB */ MDB_dbx mx_dbx; /** The @ref mt_dbflag for this Dup DB */ unsigned char mx_dbflag; } MDB_xcursor; /** Check if there is an inited xcursor */ #define XCURSOR_INITED(mc) \ ((mc)->mc_xcursor && ((mc)->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) /** Update the xcursor's sub-page pointer, if any, in \b mc. Needed * when the node which contains the sub-page may have moved. Called * with leaf page \b mp = mc->mc_pg[\b top]. */ #define XCURSOR_REFRESH(mc, top, mp) do { \ MDB_page *xr_pg = (mp); \ MDB_node *xr_node; \ if (!XCURSOR_INITED(mc) || (mc)->mc_ki[top] >= NUMKEYS(xr_pg)) break; \ xr_node = NODEPTR(xr_pg, (mc)->mc_ki[top]); \ if ((xr_node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) \ (mc)->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(xr_node); \ } while (0) /** State of FreeDB old pages, stored in the MDB_env */ typedef struct MDB_pgstate { pgno_t *mf_pghead; /**< Reclaimed freeDB pages, or NULL before use */ txnid_t mf_pglast; /**< ID of last used record, or 0 if !mf_pghead */ } MDB_pgstate; /** The database environment. */ struct MDB_env { HANDLE me_fd; /**< The main data file */ HANDLE me_lfd; /**< The lock file */ HANDLE me_mfd; /**< For writing and syncing the meta pages */ #if defined(MDB_VL32) && defined(_WIN32) HANDLE me_fmh; /**< File Mapping handle */ #endif /** Failed to update the meta page. Probably an I/O error. */ #define MDB_FATAL_ERROR 0x80000000U /** Some fields are initialized. */ #define MDB_ENV_ACTIVE 0x20000000U /** me_txkey is set */ #define MDB_ENV_TXKEY 0x10000000U /** fdatasync is unreliable */ #define MDB_FSYNCONLY 0x08000000U uint32_t me_flags; /**< @ref mdb_env */ unsigned int me_psize; /**< DB page size, inited from me_os_psize */ unsigned int me_os_psize; /**< OS page size, from #GET_PAGESIZE */ unsigned int me_maxreaders; /**< size of the reader table */ /** Max #MDB_txninfo.%mti_numreaders of interest to #mdb_env_close() */ volatile int me_close_readers; MDB_dbi me_numdbs; /**< number of DBs opened */ MDB_dbi me_maxdbs; /**< size of the DB table */ MDB_PID_T me_pid; /**< process ID of this env */ char *me_path; /**< path to the DB files */ char *me_map; /**< the memory map of the data file */ MDB_txninfo *me_txns; /**< the memory map of the lock file or NULL */ MDB_meta *me_metas[NUM_METAS]; /**< pointers to the two meta pages */ void *me_pbuf; /**< scratch area for DUPSORT put() */ MDB_txn *me_txn; /**< current write transaction */ MDB_txn *me_txn0; /**< prealloc'd write transaction */ mdb_size_t me_mapsize; /**< size of the data memory map */ off_t me_size; /**< current file size */ pgno_t me_maxpg; /**< me_mapsize / me_psize */ MDB_dbx *me_dbxs; /**< array of static DB info */ uint16_t *me_dbflags; /**< array of flags from MDB_db.md_flags */ unsigned int *me_dbiseqs; /**< array of dbi sequence numbers */ pthread_key_t me_txkey; /**< thread-key for readers */ txnid_t me_pgoldest; /**< ID of oldest reader last time we looked */ MDB_pgstate me_pgstate; /**< state of old pages from freeDB */ # define me_pglast me_pgstate.mf_pglast # define me_pghead me_pgstate.mf_pghead MDB_page *me_dpages; /**< list of malloc'd blocks for re-use */ /** IDL of pages that became unused in a write txn */ MDB_IDL me_free_pgs; /** ID2L of pages written during a write txn. Length MDB_IDL_UM_SIZE. */ MDB_ID2L me_dirty_list; /** Max number of freelist items that can fit in a single overflow page */ int me_maxfree_1pg; /** Max size of a node on a page */ unsigned int me_nodemax; #if !(MDB_MAXKEYSIZE) unsigned int me_maxkey; /**< max size of a key */ #endif int me_live_reader; /**< have liveness lock in reader table */ #ifdef _WIN32 int me_pidquery; /**< Used in OpenProcess */ #endif #ifdef MDB_USE_POSIX_MUTEX /* Posix mutexes reside in shared mem */ # define me_rmutex me_txns->mti_rmutex /**< Shared reader lock */ # define me_wmutex me_txns->mti_wmutex /**< Shared writer lock */ #else mdb_mutex_t me_rmutex; mdb_mutex_t me_wmutex; # if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) /** Half-initialized name of mutexes, to be completed by #MUTEXNAME() */ char me_mutexname[sizeof(MUTEXNAME_PREFIX) + 11]; # endif #endif #ifdef MDB_VL32 MDB_ID3L me_rpages; /**< like #mt_rpages, but global to env */ pthread_mutex_t me_rpmutex; /**< control access to #me_rpages */ #define MDB_ERPAGE_SIZE 16384 #define MDB_ERPAGE_MAX (MDB_ERPAGE_SIZE-1) unsigned int me_rpcheck; #endif void *me_userctx; /**< User-settable context */ MDB_assert_func *me_assert_func; /**< Callback for assertion failures */ }; /** Nested transaction */ typedef struct MDB_ntxn { MDB_txn mnt_txn; /**< the transaction */ MDB_pgstate mnt_pgstate; /**< parent transaction's saved freestate */ } MDB_ntxn; /** max number of pages to commit in one writev() call */ #define MDB_COMMIT_PAGES 64 #if defined(IOV_MAX) && IOV_MAX < MDB_COMMIT_PAGES #undef MDB_COMMIT_PAGES #define MDB_COMMIT_PAGES IOV_MAX #endif /** max bytes to write in one call */ #define MAX_WRITE (0x40000000U >> (sizeof(ssize_t) == 4)) /** Check \b txn and \b dbi arguments to a function */ #define TXN_DBI_EXIST(txn, dbi, validity) \ ((txn) && (dbi)<(txn)->mt_numdbs && ((txn)->mt_dbflags[dbi] & (validity))) /** Check for misused \b dbi handles */ #define TXN_DBI_CHANGED(txn, dbi) \ ((txn)->mt_dbiseqs[dbi] != (txn)->mt_env->me_dbiseqs[dbi]) static int mdb_page_alloc(MDB_cursor *mc, int num, MDB_page **mp); static int mdb_page_new(MDB_cursor *mc, uint32_t flags, int num, MDB_page **mp); static int mdb_page_touch(MDB_cursor *mc); #define MDB_END_NAMES {"committed", "empty-commit", "abort", "reset", \ "reset-tmp", "fail-begin", "fail-beginchild"} enum { /* mdb_txn_end operation number, for logging */ MDB_END_COMMITTED, MDB_END_EMPTY_COMMIT, MDB_END_ABORT, MDB_END_RESET, MDB_END_RESET_TMP, MDB_END_FAIL_BEGIN, MDB_END_FAIL_BEGINCHILD }; #define MDB_END_OPMASK 0x0F /**< mask for #mdb_txn_end() operation number */ #define MDB_END_UPDATE 0x10 /**< update env state (DBIs) */ #define MDB_END_FREE 0x20 /**< free txn unless it is #MDB_env.%me_txn0 */ #define MDB_END_SLOT MDB_NOTLS /**< release any reader slot if #MDB_NOTLS */ static void mdb_txn_end(MDB_txn *txn, unsigned mode); static int mdb_page_get(MDB_cursor *mc, pgno_t pgno, MDB_page **mp, int *lvl); static int mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int modify); #define MDB_PS_MODIFY 1 #define MDB_PS_ROOTONLY 2 #define MDB_PS_FIRST 4 #define MDB_PS_LAST 8 static int mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags); static int mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst); #define MDB_SPLIT_REPLACE MDB_APPENDDUP /**< newkey is not new */ static int mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno, unsigned int nflags); static int mdb_env_read_header(MDB_env *env, int prev, MDB_meta *meta); static MDB_meta *mdb_env_pick_meta(const MDB_env *env); static int mdb_env_write_meta(MDB_txn *txn); #ifdef MDB_USE_POSIX_MUTEX /* Drop unused excl arg */ # define mdb_env_close0(env, excl) mdb_env_close1(env) #endif static void mdb_env_close0(MDB_env *env, int excl); static MDB_node *mdb_node_search(MDB_cursor *mc, MDB_val *key, int *exactp); static int mdb_node_add(MDB_cursor *mc, indx_t indx, MDB_val *key, MDB_val *data, pgno_t pgno, unsigned int flags); static void mdb_node_del(MDB_cursor *mc, int ksize); static void mdb_node_shrink(MDB_page *mp, indx_t indx); static int mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft); static int mdb_node_read(MDB_cursor *mc, MDB_node *leaf, MDB_val *data); static size_t mdb_leaf_size(MDB_env *env, MDB_val *key, MDB_val *data); static size_t mdb_branch_size(MDB_env *env, MDB_val *key); static int mdb_rebalance(MDB_cursor *mc); static int mdb_update_key(MDB_cursor *mc, MDB_val *key); static void mdb_cursor_pop(MDB_cursor *mc); static int mdb_cursor_push(MDB_cursor *mc, MDB_page *mp); static int mdb_cursor_del0(MDB_cursor *mc); static int mdb_del0(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned flags); static int mdb_cursor_sibling(MDB_cursor *mc, int move_right); static int mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op); static int mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op); static int mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op, int *exactp); static int mdb_cursor_first(MDB_cursor *mc, MDB_val *key, MDB_val *data); static int mdb_cursor_last(MDB_cursor *mc, MDB_val *key, MDB_val *data); static void mdb_cursor_init(MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx); static void mdb_xcursor_init0(MDB_cursor *mc); static void mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node); static void mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int force); static int mdb_drop0(MDB_cursor *mc, int subs); static void mdb_default_cmp(MDB_txn *txn, MDB_dbi dbi); static int mdb_reader_check0(MDB_env *env, int rlocked, int *dead); /** @cond */ static MDB_cmp_func mdb_cmp_memn, mdb_cmp_memnr, mdb_cmp_int, mdb_cmp_cint, mdb_cmp_long; /** @endcond */ /** Compare two items pointing at '#mdb_size_t's of unknown alignment. */ #ifdef MISALIGNED_OK # define mdb_cmp_clong mdb_cmp_long #else # define mdb_cmp_clong mdb_cmp_cint #endif /** True if we need #mdb_cmp_clong() instead of \b cmp for #MDB_INTEGERDUP */ #define NEED_CMP_CLONG(cmp, ksize) \ (UINT_MAX < MDB_SIZE_MAX && \ (cmp) == mdb_cmp_int && (ksize) == sizeof(mdb_size_t)) #ifdef _WIN32 static SECURITY_DESCRIPTOR mdb_null_sd; static SECURITY_ATTRIBUTES mdb_all_sa; static int mdb_sec_inited; struct MDB_name; static int utf8_to_utf16(const char *src, struct MDB_name *dst, int xtra); #endif /** Return the library version info. */ char * ESECT mdb_version(int *major, int *minor, int *patch) { if (major) *major = MDB_VERSION_MAJOR; if (minor) *minor = MDB_VERSION_MINOR; if (patch) *patch = MDB_VERSION_PATCH; return MDB_VERSION_STRING; } /** Table of descriptions for LMDB @ref errors */ static char *const mdb_errstr[] = { "MDB_KEYEXIST: Key/data pair already exists", "MDB_NOTFOUND: No matching key/data pair found", "MDB_PAGE_NOTFOUND: Requested page not found", "MDB_CORRUPTED: Located page was wrong type", "MDB_PANIC: Update of meta page failed or environment had fatal error", "MDB_VERSION_MISMATCH: Database environment version mismatch", "MDB_INVALID: File is not an LMDB file", "MDB_MAP_FULL: Environment mapsize limit reached", "MDB_DBS_FULL: Environment maxdbs limit reached", "MDB_READERS_FULL: Environment maxreaders limit reached", "MDB_TLS_FULL: Thread-local storage keys full - too many environments open", "MDB_TXN_FULL: Transaction has too many dirty pages - transaction too big", "MDB_CURSOR_FULL: Internal error - cursor stack limit reached", "MDB_PAGE_FULL: Internal error - page has no more space", "MDB_MAP_RESIZED: Database contents grew beyond environment mapsize", "MDB_INCOMPATIBLE: Operation and DB incompatible, or DB flags changed", "MDB_BAD_RSLOT: Invalid reuse of reader locktable slot", "MDB_BAD_TXN: Transaction must abort, has a child, or is invalid", "MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size", "MDB_BAD_DBI: The specified DBI handle was closed/changed unexpectedly", "MDB_PROBLEM: Unexpected problem - txn should abort", }; char * mdb_strerror(int err) { #ifdef _WIN32 /** HACK: pad 4KB on stack over the buf. Return system msgs in buf. * This works as long as no function between the call to mdb_strerror * and the actual use of the message uses more than 4K of stack. */ #define MSGSIZE 1024 #define PADSIZE 4096 char buf[MSGSIZE+PADSIZE], *ptr = buf; #endif int i; if (!err) return ("Successful return: 0"); if (err >= MDB_KEYEXIST && err <= MDB_LAST_ERRCODE) { i = err - MDB_KEYEXIST; return mdb_errstr[i]; } #ifdef _WIN32 /* These are the C-runtime error codes we use. The comment indicates * their numeric value, and the Win32 error they would correspond to * if the error actually came from a Win32 API. A major mess, we should * have used LMDB-specific error codes for everything. */ switch(err) { case ENOENT: /* 2, FILE_NOT_FOUND */ case EIO: /* 5, ACCESS_DENIED */ case ENOMEM: /* 12, INVALID_ACCESS */ case EACCES: /* 13, INVALID_DATA */ case EBUSY: /* 16, CURRENT_DIRECTORY */ case EINVAL: /* 22, BAD_COMMAND */ case ENOSPC: /* 28, OUT_OF_PAPER */ return strerror(err); default: ; } buf[0] = 0; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, ptr, MSGSIZE, (va_list *)buf+MSGSIZE); return ptr; #else return strerror(err); #endif } /** assert(3) variant in cursor context */ #define mdb_cassert(mc, expr) mdb_assert0((mc)->mc_txn->mt_env, expr, #expr) /** assert(3) variant in transaction context */ #define mdb_tassert(txn, expr) mdb_assert0((txn)->mt_env, expr, #expr) /** assert(3) variant in environment context */ #define mdb_eassert(env, expr) mdb_assert0(env, expr, #expr) #ifndef NDEBUG # define mdb_assert0(env, expr, expr_txt) ((expr) ? (void)0 : \ mdb_assert_fail(env, expr_txt, mdb_func_, __FILE__, __LINE__)) static void ESECT mdb_assert_fail(MDB_env *env, const char *expr_txt, const char *func, const char *file, int line) { char buf[400]; sprintf(buf, "%.100s:%d: Assertion '%.200s' failed in %.40s()", file, line, expr_txt, func); if (env->me_assert_func) env->me_assert_func(env, buf); fprintf(stderr, "%s\n", buf); abort(); } #else # define mdb_assert0(env, expr, expr_txt) ((void) 0) #endif /* NDEBUG */ #if MDB_DEBUG /** Return the page number of \b mp which may be sub-page, for debug output */ static pgno_t mdb_dbg_pgno(MDB_page *mp) { pgno_t ret; COPY_PGNO(ret, mp->mp_pgno); return ret; } /** Display a key in hexadecimal and return the address of the result. * @param[in] key the key to display * @param[in] buf the buffer to write into. Should always be #DKBUF. * @return The key in hexadecimal form. */ char * mdb_dkey(MDB_val *key, char *buf) { char *ptr = buf; unsigned char *c = key->mv_data; unsigned int i; if (!key) return ""; if (key->mv_size > DKBUF_MAXKEYSIZE) return "MDB_MAXKEYSIZE"; /* may want to make this a dynamic check: if the key is mostly * printable characters, print it as-is instead of converting to hex. */ #if 1 buf[0] = '\0'; for (i=0; imv_size; i++) ptr += sprintf(ptr, "%02x", *c++); #else sprintf(buf, "%.*s", key->mv_size, key->mv_data); #endif return buf; } static const char * mdb_leafnode_type(MDB_node *n) { static char *const tp[2][2] = {{"", ": DB"}, {": sub-page", ": sub-DB"}}; return F_ISSET(n->mn_flags, F_BIGDATA) ? ": overflow page" : tp[F_ISSET(n->mn_flags, F_DUPDATA)][F_ISSET(n->mn_flags, F_SUBDATA)]; } /** Display all the keys in the page. */ void mdb_page_list(MDB_page *mp) { pgno_t pgno = mdb_dbg_pgno(mp); const char *type, *state = (mp->mp_flags & P_DIRTY) ? ", dirty" : ""; MDB_node *node; unsigned int i, nkeys, nsize, total = 0; MDB_val key; DKBUF; switch (mp->mp_flags & (P_BRANCH|P_LEAF|P_LEAF2|P_META|P_OVERFLOW|P_SUBP)) { case P_BRANCH: type = "Branch page"; break; case P_LEAF: type = "Leaf page"; break; case P_LEAF|P_SUBP: type = "Sub-page"; break; case P_LEAF|P_LEAF2: type = "LEAF2 page"; break; case P_LEAF|P_LEAF2|P_SUBP: type = "LEAF2 sub-page"; break; case P_OVERFLOW: fprintf(stderr, "Overflow page %"Yu" pages %u%s\n", pgno, mp->mp_pages, state); return; case P_META: fprintf(stderr, "Meta-page %"Yu" txnid %"Yu"\n", pgno, ((MDB_meta *)METADATA(mp))->mm_txnid); return; default: fprintf(stderr, "Bad page %"Yu" flags 0x%X\n", pgno, mp->mp_flags); return; } nkeys = NUMKEYS(mp); fprintf(stderr, "%s %"Yu" numkeys %d%s\n", type, pgno, nkeys, state); for (i=0; imp_pad; key.mv_data = LEAF2KEY(mp, i, nsize); total += nsize; fprintf(stderr, "key %d: nsize %d, %s\n", i, nsize, DKEY(&key)); continue; } node = NODEPTR(mp, i); key.mv_size = node->mn_ksize; key.mv_data = node->mn_data; nsize = NODESIZE + key.mv_size; if (IS_BRANCH(mp)) { fprintf(stderr, "key %d: page %"Yu", %s\n", i, NODEPGNO(node), DKEY(&key)); total += nsize; } else { if (F_ISSET(node->mn_flags, F_BIGDATA)) nsize += sizeof(pgno_t); else nsize += NODEDSZ(node); total += nsize; nsize += sizeof(indx_t); fprintf(stderr, "key %d: nsize %d, %s%s\n", i, nsize, DKEY(&key), mdb_leafnode_type(node)); } total = EVEN(total); } fprintf(stderr, "Total: header %d + contents %d + unused %d\n", IS_LEAF2(mp) ? PAGEHDRSZ : PAGEBASE + mp->mp_lower, total, SIZELEFT(mp)); } void mdb_cursor_chk(MDB_cursor *mc) { unsigned int i; MDB_node *node; MDB_page *mp; if (!mc->mc_snum || !(mc->mc_flags & C_INITIALIZED)) return; for (i=0; imc_top; i++) { mp = mc->mc_pg[i]; node = NODEPTR(mp, mc->mc_ki[i]); if (NODEPGNO(node) != mc->mc_pg[i+1]->mp_pgno) printf("oops!\n"); } if (mc->mc_ki[i] >= NUMKEYS(mc->mc_pg[i])) printf("ack!\n"); if (XCURSOR_INITED(mc)) { node = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) && mc->mc_xcursor->mx_cursor.mc_pg[0] != NODEDATA(node)) { printf("blah!\n"); } } } #endif #if (MDB_DEBUG) > 2 /** Count all the pages in each DB and in the freelist * and make sure it matches the actual number of pages * being used. * All named DBs must be open for a correct count. */ static void mdb_audit(MDB_txn *txn) { MDB_cursor mc; MDB_val key, data; MDB_ID freecount, count; MDB_dbi i; int rc; freecount = 0; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); while ((rc = mdb_cursor_get(&mc, &key, &data, MDB_NEXT)) == 0) freecount += *(MDB_ID *)data.mv_data; mdb_tassert(txn, rc == MDB_NOTFOUND); count = 0; for (i = 0; imt_numdbs; i++) { MDB_xcursor mx; if (!(txn->mt_dbflags[i] & DB_VALID)) continue; mdb_cursor_init(&mc, txn, i, &mx); if (txn->mt_dbs[i].md_root == P_INVALID) continue; count += txn->mt_dbs[i].md_branch_pages + txn->mt_dbs[i].md_leaf_pages + txn->mt_dbs[i].md_overflow_pages; if (txn->mt_dbs[i].md_flags & MDB_DUPSORT) { rc = mdb_page_search(&mc, NULL, MDB_PS_FIRST); for (; rc == MDB_SUCCESS; rc = mdb_cursor_sibling(&mc, 1)) { unsigned j; MDB_page *mp; mp = mc.mc_pg[mc.mc_top]; for (j=0; jmn_flags & F_SUBDATA) { MDB_db db; memcpy(&db, NODEDATA(leaf), sizeof(db)); count += db.md_branch_pages + db.md_leaf_pages + db.md_overflow_pages; } } } mdb_tassert(txn, rc == MDB_NOTFOUND); } } if (freecount + count + NUM_METAS != txn->mt_next_pgno) { fprintf(stderr, "audit: %"Yu" freecount: %"Yu" count: %"Yu" total: %"Yu" next_pgno: %"Yu"\n", txn->mt_txnid, freecount, count+NUM_METAS, freecount+count+NUM_METAS, txn->mt_next_pgno); } } #endif int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) { return txn->mt_dbxs[dbi].md_cmp(a, b); } int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) { MDB_cmp_func *dcmp = txn->mt_dbxs[dbi].md_dcmp; if (NEED_CMP_CLONG(dcmp, a->mv_size)) dcmp = mdb_cmp_clong; return dcmp(a, b); } /** Allocate memory for a page. * Re-use old malloc'd pages first for singletons, otherwise just malloc. * Set #MDB_TXN_ERROR on failure. */ static MDB_page * mdb_page_malloc(MDB_txn *txn, unsigned num) { MDB_env *env = txn->mt_env; MDB_page *ret = env->me_dpages; size_t psize = env->me_psize, sz = psize, off; /* For ! #MDB_NOMEMINIT, psize counts how much to init. * For a single page alloc, we init everything after the page header. * For multi-page, we init the final page; if the caller needed that * many pages they will be filling in at least up to the last page. */ if (num == 1) { if (ret) { VGMEMP_ALLOC(env, ret, sz); VGMEMP_DEFINED(ret, sizeof(ret->mp_next)); env->me_dpages = ret->mp_next; return ret; } psize -= off = PAGEHDRSZ; } else { sz *= num; off = sz - psize; } if ((ret = malloc(sz)) != NULL) { VGMEMP_ALLOC(env, ret, sz); if (!(env->me_flags & MDB_NOMEMINIT)) { memset((char *)ret + off, 0, psize); ret->mp_pad = 0; } } else { txn->mt_flags |= MDB_TXN_ERROR; } return ret; } /** Free a single page. * Saves single pages to a list, for future reuse. * (This is not used for multi-page overflow pages.) */ static void mdb_page_free(MDB_env *env, MDB_page *mp) { mp->mp_next = env->me_dpages; VGMEMP_FREE(env, mp); env->me_dpages = mp; } /** Free a dirty page */ static void mdb_dpage_free(MDB_env *env, MDB_page *dp) { if (!IS_OVERFLOW(dp) || dp->mp_pages == 1) { mdb_page_free(env, dp); } else { /* large pages just get freed directly */ VGMEMP_FREE(env, dp); free(dp); } } /** Return all dirty pages to dpage list */ static void mdb_dlist_free(MDB_txn *txn) { MDB_env *env = txn->mt_env; MDB_ID2L dl = txn->mt_u.dirty_list; unsigned i, n = dl[0].mid; for (i = 1; i <= n; i++) { mdb_dpage_free(env, dl[i].mptr); } dl[0].mid = 0; } #ifdef MDB_VL32 static void mdb_page_unref(MDB_txn *txn, MDB_page *mp) { pgno_t pgno; MDB_ID3L tl = txn->mt_rpages; unsigned x, rem; if (mp->mp_flags & (P_SUBP|P_DIRTY)) return; rem = mp->mp_pgno & (MDB_RPAGE_CHUNK-1); pgno = mp->mp_pgno ^ rem; x = mdb_mid3l_search(tl, pgno); if (x != tl[0].mid && tl[x+1].mid == mp->mp_pgno) x++; if (tl[x].mref) tl[x].mref--; } #define MDB_PAGE_UNREF(txn, mp) mdb_page_unref(txn, mp) static void mdb_cursor_unref(MDB_cursor *mc) { int i; if (mc->mc_txn->mt_rpages[0].mid) { if (!mc->mc_snum || !mc->mc_pg[0] || IS_SUBP(mc->mc_pg[0])) return; for (i=0; imc_snum; i++) mdb_page_unref(mc->mc_txn, mc->mc_pg[i]); if (mc->mc_ovpg) { mdb_page_unref(mc->mc_txn, mc->mc_ovpg); mc->mc_ovpg = 0; } } mc->mc_snum = mc->mc_top = 0; mc->mc_pg[0] = NULL; mc->mc_flags &= ~C_INITIALIZED; } #define MDB_CURSOR_UNREF(mc, force) \ (((force) || ((mc)->mc_flags & C_INITIALIZED)) \ ? mdb_cursor_unref(mc) \ : (void)0) #else #define MDB_PAGE_UNREF(txn, mp) #define MDB_CURSOR_UNREF(mc, force) ((void)0) #endif /* MDB_VL32 */ /** Loosen or free a single page. * Saves single pages to a list for future reuse * in this same txn. It has been pulled from the freeDB * and already resides on the dirty list, but has been * deleted. Use these pages first before pulling again * from the freeDB. * * If the page wasn't dirtied in this txn, just add it * to this txn's free list. */ static int mdb_page_loose(MDB_cursor *mc, MDB_page *mp) { int loose = 0; pgno_t pgno = mp->mp_pgno; MDB_txn *txn = mc->mc_txn; if ((mp->mp_flags & P_DIRTY) && mc->mc_dbi != FREE_DBI) { if (txn->mt_parent) { MDB_ID2 *dl = txn->mt_u.dirty_list; /* If txn has a parent, make sure the page is in our * dirty list. */ if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { if (mp != dl[x].mptr) { /* bad cursor? */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); txn->mt_flags |= MDB_TXN_ERROR; return MDB_PROBLEM; } /* ok, it's ours */ loose = 1; } } } else { /* no parent txn, so it's just ours */ loose = 1; } } if (loose) { DPRINTF(("loosen db %d page %"Yu, DDBI(mc), mp->mp_pgno)); NEXT_LOOSE_PAGE(mp) = txn->mt_loose_pgs; txn->mt_loose_pgs = mp; txn->mt_loose_count++; mp->mp_flags |= P_LOOSE; } else { int rc = mdb_midl_append(&txn->mt_free_pgs, pgno); if (rc) return rc; } return MDB_SUCCESS; } /** Set or clear P_KEEP in dirty, non-overflow, non-sub pages watched by txn. * @param[in] mc A cursor handle for the current operation. * @param[in] pflags Flags of the pages to update: * P_DIRTY to set P_KEEP, P_DIRTY|P_KEEP to clear it. * @param[in] all No shortcuts. Needed except after a full #mdb_page_flush(). * @return 0 on success, non-zero on failure. */ static int mdb_pages_xkeep(MDB_cursor *mc, unsigned pflags, int all) { enum { Mask = P_SUBP|P_DIRTY|P_LOOSE|P_KEEP }; MDB_txn *txn = mc->mc_txn; MDB_cursor *m3, *m0 = mc; MDB_xcursor *mx; MDB_page *dp, *mp; MDB_node *leaf; unsigned i, j; int rc = MDB_SUCCESS, level; /* Mark pages seen by cursors: First m0, then tracked cursors */ for (i = txn->mt_numdbs;; ) { if (mc->mc_flags & C_INITIALIZED) { for (m3 = mc;; m3 = &mx->mx_cursor) { mp = NULL; for (j=0; jmc_snum; j++) { mp = m3->mc_pg[j]; if ((mp->mp_flags & Mask) == pflags) mp->mp_flags ^= P_KEEP; } mx = m3->mc_xcursor; /* Proceed to mx if it is at a sub-database */ if (! (mx && (mx->mx_cursor.mc_flags & C_INITIALIZED))) break; if (! (mp && (mp->mp_flags & P_LEAF))) break; leaf = NODEPTR(mp, m3->mc_ki[j-1]); if (!(leaf->mn_flags & F_SUBDATA)) break; } } mc = mc->mc_next; for (; !mc || mc == m0; mc = txn->mt_cursors[--i]) if (i == 0) goto mark_done; } mark_done: if (all) { /* Mark dirty root pages */ for (i=0; imt_numdbs; i++) { if (txn->mt_dbflags[i] & DB_DIRTY) { pgno_t pgno = txn->mt_dbs[i].md_root; if (pgno == P_INVALID) continue; if ((rc = mdb_page_get(m0, pgno, &dp, &level)) != MDB_SUCCESS) break; if ((dp->mp_flags & Mask) == pflags && level <= 1) dp->mp_flags ^= P_KEEP; } } } return rc; } static int mdb_page_flush(MDB_txn *txn, int keep); /** Spill pages from the dirty list back to disk. * This is intended to prevent running into #MDB_TXN_FULL situations, * but note that they may still occur in a few cases: * 1) our estimate of the txn size could be too small. Currently this * seems unlikely, except with a large number of #MDB_MULTIPLE items. * 2) child txns may run out of space if their parents dirtied a * lot of pages and never spilled them. TODO: we probably should do * a preemptive spill during #mdb_txn_begin() of a child txn, if * the parent's dirty_room is below a given threshold. * * Otherwise, if not using nested txns, it is expected that apps will * not run into #MDB_TXN_FULL any more. The pages are flushed to disk * the same way as for a txn commit, e.g. their P_DIRTY flag is cleared. * If the txn never references them again, they can be left alone. * If the txn only reads them, they can be used without any fuss. * If the txn writes them again, they can be dirtied immediately without * going thru all of the work of #mdb_page_touch(). Such references are * handled by #mdb_page_unspill(). * * Also note, we never spill DB root pages, nor pages of active cursors, * because we'll need these back again soon anyway. And in nested txns, * we can't spill a page in a child txn if it was already spilled in a * parent txn. That would alter the parent txns' data even though * the child hasn't committed yet, and we'd have no way to undo it if * the child aborted. * * @param[in] m0 cursor A cursor handle identifying the transaction and * database for which we are checking space. * @param[in] key For a put operation, the key being stored. * @param[in] data For a put operation, the data being stored. * @return 0 on success, non-zero on failure. */ static int mdb_page_spill(MDB_cursor *m0, MDB_val *key, MDB_val *data) { MDB_txn *txn = m0->mc_txn; MDB_page *dp; MDB_ID2L dl = txn->mt_u.dirty_list; unsigned int i, j, need; int rc; if (m0->mc_flags & C_SUB) return MDB_SUCCESS; /* Estimate how much space this op will take */ i = m0->mc_db->md_depth; /* Named DBs also dirty the main DB */ if (m0->mc_dbi >= CORE_DBS) i += txn->mt_dbs[MAIN_DBI].md_depth; /* For puts, roughly factor in the key+data size */ if (key) i += (LEAFSIZE(key, data) + txn->mt_env->me_psize) / txn->mt_env->me_psize; i += i; /* double it for good measure */ need = i; if (txn->mt_dirty_room > i) return MDB_SUCCESS; if (!txn->mt_spill_pgs) { txn->mt_spill_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX); if (!txn->mt_spill_pgs) return ENOMEM; } else { /* purge deleted slots */ MDB_IDL sl = txn->mt_spill_pgs; unsigned int num = sl[0]; j=0; for (i=1; i<=num; i++) { if (!(sl[i] & 1)) sl[++j] = sl[i]; } sl[0] = j; } /* Preserve pages which may soon be dirtied again */ if ((rc = mdb_pages_xkeep(m0, P_DIRTY, 1)) != MDB_SUCCESS) goto done; /* Less aggressive spill - we originally spilled the entire dirty list, * with a few exceptions for cursor pages and DB root pages. But this * turns out to be a lot of wasted effort because in a large txn many * of those pages will need to be used again. So now we spill only 1/8th * of the dirty pages. Testing revealed this to be a good tradeoff, * better than 1/2, 1/4, or 1/10. */ if (need < MDB_IDL_UM_MAX / 8) need = MDB_IDL_UM_MAX / 8; /* Save the page IDs of all the pages we're flushing */ /* flush from the tail forward, this saves a lot of shifting later on. */ for (i=dl[0].mid; i && need; i--) { MDB_ID pn = dl[i].mid << 1; dp = dl[i].mptr; if (dp->mp_flags & (P_LOOSE|P_KEEP)) continue; /* Can't spill twice, make sure it's not already in a parent's * spill list. */ if (txn->mt_parent) { MDB_txn *tx2; for (tx2 = txn->mt_parent; tx2; tx2 = tx2->mt_parent) { if (tx2->mt_spill_pgs) { j = mdb_midl_search(tx2->mt_spill_pgs, pn); if (j <= tx2->mt_spill_pgs[0] && tx2->mt_spill_pgs[j] == pn) { dp->mp_flags |= P_KEEP; break; } } } if (tx2) continue; } if ((rc = mdb_midl_append(&txn->mt_spill_pgs, pn))) goto done; need--; } mdb_midl_sort(txn->mt_spill_pgs); /* Flush the spilled part of dirty list */ if ((rc = mdb_page_flush(txn, i)) != MDB_SUCCESS) goto done; /* Reset any dirty pages we kept that page_flush didn't see */ rc = mdb_pages_xkeep(m0, P_DIRTY|P_KEEP, i); done: txn->mt_flags |= rc ? MDB_TXN_ERROR : MDB_TXN_SPILLS; return rc; } /** Find oldest txnid still referenced. Expects txn->mt_txnid > 0. */ static txnid_t mdb_find_oldest(MDB_txn *txn) { int i; txnid_t mr, oldest = txn->mt_txnid - 1; if (txn->mt_env->me_txns) { MDB_reader *r = txn->mt_env->me_txns->mti_readers; for (i = txn->mt_env->me_txns->mti_numreaders; --i >= 0; ) { if (r[i].mr_pid) { mr = r[i].mr_txnid; if (oldest > mr) oldest = mr; } } } return oldest; } /** Add a page to the txn's dirty list */ static void mdb_page_dirty(MDB_txn *txn, MDB_page *mp) { MDB_ID2 mid; int rc, (*insert)(MDB_ID2L, MDB_ID2 *); if (txn->mt_flags & MDB_TXN_WRITEMAP) { insert = mdb_mid2l_append; } else { insert = mdb_mid2l_insert; } mid.mid = mp->mp_pgno; mid.mptr = mp; rc = insert(txn->mt_u.dirty_list, &mid); mdb_tassert(txn, rc == 0); txn->mt_dirty_room--; } /** Allocate page numbers and memory for writing. Maintain me_pglast, * me_pghead and mt_next_pgno. Set #MDB_TXN_ERROR on failure. * * If there are free pages available from older transactions, they * are re-used first. Otherwise allocate a new page at mt_next_pgno. * Do not modify the freedB, just merge freeDB records into me_pghead[] * and move me_pglast to say which records were consumed. Only this * function can create me_pghead and move me_pglast/mt_next_pgno. * When #MDB_DEVEL & 2, it is not affected by #mdb_freelist_save(): it * then uses the transaction's original snapshot of the freeDB. * @param[in] mc cursor A cursor handle identifying the transaction and * database for which we are allocating. * @param[in] num the number of pages to allocate. * @param[out] mp Address of the allocated page(s). Requests for multiple pages * will always be satisfied by a single contiguous chunk of memory. * @return 0 on success, non-zero on failure. */ static int mdb_page_alloc(MDB_cursor *mc, int num, MDB_page **mp) { #ifdef MDB_PARANOID /* Seems like we can ignore this now */ /* Get at most more freeDB records once me_pghead * has enough pages. If not enough, use new pages from the map. * If and mc is updating the freeDB, only get new * records if me_pghead is empty. Then the freelist cannot play * catch-up with itself by growing while trying to save it. */ enum { Paranoid = 1, Max_retries = 500 }; #else enum { Paranoid = 0, Max_retries = INT_MAX /*infinite*/ }; #endif int rc, retry = num * 60; MDB_txn *txn = mc->mc_txn; MDB_env *env = txn->mt_env; pgno_t pgno, *mop = env->me_pghead; unsigned i, j, mop_len = mop ? mop[0] : 0, n2 = num-1; MDB_page *np; txnid_t oldest = 0, last; MDB_cursor_op op; MDB_cursor m2; int found_old = 0; /* If there are any loose pages, just use them */ if (num == 1 && txn->mt_loose_pgs) { np = txn->mt_loose_pgs; txn->mt_loose_pgs = NEXT_LOOSE_PAGE(np); txn->mt_loose_count--; DPRINTF(("db %d use loose page %"Yu, DDBI(mc), np->mp_pgno)); *mp = np; return MDB_SUCCESS; } *mp = NULL; /* If our dirty list is already full, we can't do anything */ if (txn->mt_dirty_room == 0) { rc = MDB_TXN_FULL; goto fail; } for (op = MDB_FIRST;; op = MDB_NEXT) { MDB_val key, data; MDB_node *leaf; pgno_t *idl; /* Seek a big enough contiguous page range. Prefer * pages at the tail, just truncating the list. */ if (mop_len > n2) { i = mop_len; do { pgno = mop[i]; if (mop[i-n2] == pgno+n2) goto search_done; } while (--i > n2); if (--retry < 0) break; } if (op == MDB_FIRST) { /* 1st iteration */ /* Prepare to fetch more and coalesce */ last = env->me_pglast; oldest = env->me_pgoldest; mdb_cursor_init(&m2, txn, FREE_DBI, NULL); #if (MDB_DEVEL) & 2 /* "& 2" so MDB_DEVEL=1 won't hide bugs breaking freeDB */ /* Use original snapshot. TODO: Should need less care in code * which modifies the database. Maybe we can delete some code? */ m2.mc_flags |= C_ORIG_RDONLY; m2.mc_db = &env->me_metas[(txn->mt_txnid-1) & 1]->mm_dbs[FREE_DBI]; m2.mc_dbflag = (unsigned char *)""; /* probably unnecessary */ #endif if (last) { op = MDB_SET_RANGE; key.mv_data = &last; /* will look up last+1 */ key.mv_size = sizeof(last); } if (Paranoid && mc->mc_dbi == FREE_DBI) retry = -1; } if (Paranoid && retry < 0 && mop_len) break; last++; /* Do not fetch more if the record will be too recent */ if (oldest <= last) { if (!found_old) { oldest = mdb_find_oldest(txn); env->me_pgoldest = oldest; found_old = 1; } if (oldest <= last) break; } rc = mdb_cursor_get(&m2, &key, NULL, op); if (rc) { if (rc == MDB_NOTFOUND) break; goto fail; } last = *(txnid_t*)key.mv_data; if (oldest <= last) { if (!found_old) { oldest = mdb_find_oldest(txn); env->me_pgoldest = oldest; found_old = 1; } if (oldest <= last) break; } np = m2.mc_pg[m2.mc_top]; leaf = NODEPTR(np, m2.mc_ki[m2.mc_top]); if ((rc = mdb_node_read(&m2, leaf, &data)) != MDB_SUCCESS) goto fail; idl = (MDB_ID *) data.mv_data; i = idl[0]; if (!mop) { if (!(env->me_pghead = mop = mdb_midl_alloc(i))) { rc = ENOMEM; goto fail; } } else { if ((rc = mdb_midl_need(&env->me_pghead, i)) != 0) goto fail; mop = env->me_pghead; } env->me_pglast = last; #if (MDB_DEBUG) > 1 DPRINTF(("IDL read txn %"Yu" root %"Yu" num %u", last, txn->mt_dbs[FREE_DBI].md_root, i)); for (j = i; j; j--) DPRINTF(("IDL %"Yu, idl[j])); #endif /* Merge in descending sorted order */ mdb_midl_xmerge(mop, idl); mop_len = mop[0]; } /* Use new pages from the map when nothing suitable in the freeDB */ i = 0; pgno = txn->mt_next_pgno; if (pgno + num >= env->me_maxpg) { DPUTS("DB size maxed out"); rc = MDB_MAP_FULL; goto fail; } #if defined(_WIN32) && !defined(MDB_VL32) if (!(env->me_flags & MDB_RDONLY)) { void *p; p = (MDB_page *)(env->me_map + env->me_psize * pgno); p = VirtualAlloc(p, env->me_psize * num, MEM_COMMIT, (env->me_flags & MDB_WRITEMAP) ? PAGE_READWRITE: PAGE_READONLY); if (!p) { DPUTS("VirtualAlloc failed"); rc = ErrCode(); goto fail; } } #endif search_done: if (env->me_flags & MDB_WRITEMAP) { np = (MDB_page *)(env->me_map + env->me_psize * pgno); } else { if (!(np = mdb_page_malloc(txn, num))) { rc = ENOMEM; goto fail; } } if (i) { mop[0] = mop_len -= num; /* Move any stragglers down */ for (j = i-num; j < mop_len; ) mop[++j] = mop[++i]; } else { txn->mt_next_pgno = pgno + num; } np->mp_pgno = pgno; mdb_page_dirty(txn, np); *mp = np; return MDB_SUCCESS; fail: txn->mt_flags |= MDB_TXN_ERROR; return rc; } /** Copy the used portions of a non-overflow page. * @param[in] dst page to copy into * @param[in] src page to copy from * @param[in] psize size of a page */ static void mdb_page_copy(MDB_page *dst, MDB_page *src, unsigned int psize) { enum { Align = sizeof(pgno_t) }; indx_t upper = src->mp_upper, lower = src->mp_lower, unused = upper-lower; /* If page isn't full, just copy the used portion. Adjust * alignment so memcpy may copy words instead of bytes. */ if ((unused &= -Align) && !IS_LEAF2(src)) { upper = (upper + PAGEBASE) & -Align; memcpy(dst, src, (lower + PAGEBASE + (Align-1)) & -Align); memcpy((pgno_t *)((char *)dst+upper), (pgno_t *)((char *)src+upper), psize - upper); } else { memcpy(dst, src, psize - unused); } } /** Pull a page off the txn's spill list, if present. * If a page being referenced was spilled to disk in this txn, bring * it back and make it dirty/writable again. * @param[in] txn the transaction handle. * @param[in] mp the page being referenced. It must not be dirty. * @param[out] ret the writable page, if any. ret is unchanged if * mp wasn't spilled. */ static int mdb_page_unspill(MDB_txn *txn, MDB_page *mp, MDB_page **ret) { MDB_env *env = txn->mt_env; const MDB_txn *tx2; unsigned x; pgno_t pgno = mp->mp_pgno, pn = pgno << 1; for (tx2 = txn; tx2; tx2=tx2->mt_parent) { if (!tx2->mt_spill_pgs) continue; x = mdb_midl_search(tx2->mt_spill_pgs, pn); if (x <= tx2->mt_spill_pgs[0] && tx2->mt_spill_pgs[x] == pn) { MDB_page *np; int num; if (txn->mt_dirty_room == 0) return MDB_TXN_FULL; if (IS_OVERFLOW(mp)) num = mp->mp_pages; else num = 1; if (env->me_flags & MDB_WRITEMAP) { np = mp; } else { np = mdb_page_malloc(txn, num); if (!np) return ENOMEM; if (num > 1) memcpy(np, mp, num * env->me_psize); else mdb_page_copy(np, mp, env->me_psize); } if (tx2 == txn) { /* If in current txn, this page is no longer spilled. * If it happens to be the last page, truncate the spill list. * Otherwise mark it as deleted by setting the LSB. */ if (x == txn->mt_spill_pgs[0]) txn->mt_spill_pgs[0]--; else txn->mt_spill_pgs[x] |= 1; } /* otherwise, if belonging to a parent txn, the * page remains spilled until child commits */ mdb_page_dirty(txn, np); np->mp_flags |= P_DIRTY; *ret = np; break; } } return MDB_SUCCESS; } /** Touch a page: make it dirty and re-insert into tree with updated pgno. * Set #MDB_TXN_ERROR on failure. * @param[in] mc cursor pointing to the page to be touched * @return 0 on success, non-zero on failure. */ static int mdb_page_touch(MDB_cursor *mc) { MDB_page *mp = mc->mc_pg[mc->mc_top], *np; MDB_txn *txn = mc->mc_txn; MDB_cursor *m2, *m3; pgno_t pgno; int rc; if (!F_ISSET(mp->mp_flags, P_DIRTY)) { if (txn->mt_flags & MDB_TXN_SPILLS) { np = NULL; rc = mdb_page_unspill(txn, mp, &np); if (rc) goto fail; if (np) goto done; } if ((rc = mdb_midl_need(&txn->mt_free_pgs, 1)) || (rc = mdb_page_alloc(mc, 1, &np))) goto fail; pgno = np->mp_pgno; DPRINTF(("touched db %d page %"Yu" -> %"Yu, DDBI(mc), mp->mp_pgno, pgno)); mdb_cassert(mc, mp->mp_pgno != pgno); mdb_midl_xappend(txn->mt_free_pgs, mp->mp_pgno); /* Update the parent page, if any, to point to the new page */ if (mc->mc_top) { MDB_page *parent = mc->mc_pg[mc->mc_top-1]; MDB_node *node = NODEPTR(parent, mc->mc_ki[mc->mc_top-1]); SETPGNO(node, pgno); } else { mc->mc_db->md_root = pgno; } } else if (txn->mt_parent && !IS_SUBP(mp)) { MDB_ID2 mid, *dl = txn->mt_u.dirty_list; pgno = mp->mp_pgno; /* If txn has a parent, make sure the page is in our * dirty list. */ if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { if (mp != dl[x].mptr) { /* bad cursor? */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); txn->mt_flags |= MDB_TXN_ERROR; return MDB_PROBLEM; } return 0; } } mdb_cassert(mc, dl[0].mid < MDB_IDL_UM_MAX); /* No - copy it */ np = mdb_page_malloc(txn, 1); if (!np) return ENOMEM; mid.mid = pgno; mid.mptr = np; rc = mdb_mid2l_insert(dl, &mid); mdb_cassert(mc, rc == 0); } else { return 0; } mdb_page_copy(np, mp, txn->mt_env->me_psize); np->mp_pgno = pgno; np->mp_flags |= P_DIRTY; done: /* Adjust cursors pointing to mp */ mc->mc_pg[mc->mc_top] = np; m2 = txn->mt_cursors[mc->mc_dbi]; if (mc->mc_flags & C_SUB) { for (; m2; m2=m2->mc_next) { m3 = &m2->mc_xcursor->mx_cursor; if (m3->mc_snum < mc->mc_snum) continue; if (m3->mc_pg[mc->mc_top] == mp) m3->mc_pg[mc->mc_top] = np; } } else { for (; m2; m2=m2->mc_next) { if (m2->mc_snum < mc->mc_snum) continue; if (m2 == mc) continue; if (m2->mc_pg[mc->mc_top] == mp) { m2->mc_pg[mc->mc_top] = np; if (IS_LEAF(np)) XCURSOR_REFRESH(m2, mc->mc_top, np); } } } MDB_PAGE_UNREF(mc->mc_txn, mp); return 0; fail: txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_env_sync0(MDB_env *env, int force, pgno_t numpgs) { int rc = 0; if (env->me_flags & MDB_RDONLY) return EACCES; if (force || !F_ISSET(env->me_flags, MDB_NOSYNC)) { if (env->me_flags & MDB_WRITEMAP) { int flags = ((env->me_flags & MDB_MAPASYNC) && !force) ? MS_ASYNC : MS_SYNC; if (MDB_MSYNC(env->me_map, env->me_psize * numpgs, flags)) rc = ErrCode(); #ifdef _WIN32 else if (flags == MS_SYNC && MDB_FDATASYNC(env->me_fd)) rc = ErrCode(); #endif } else { #ifdef BROKEN_FDATASYNC if (env->me_flags & MDB_FSYNCONLY) { if (fsync(env->me_fd)) rc = ErrCode(); } else #endif if (MDB_FDATASYNC(env->me_fd)) rc = ErrCode(); } } return rc; } int mdb_env_sync(MDB_env *env, int force) { MDB_meta *m = mdb_env_pick_meta(env); return mdb_env_sync0(env, force, m->mm_last_pg+1); } /** Back up parent txn's cursors, then grab the originals for tracking */ static int mdb_cursor_shadow(MDB_txn *src, MDB_txn *dst) { MDB_cursor *mc, *bk; MDB_xcursor *mx; size_t size; int i; for (i = src->mt_numdbs; --i >= 0; ) { if ((mc = src->mt_cursors[i]) != NULL) { size = sizeof(MDB_cursor); if (mc->mc_xcursor) size += sizeof(MDB_xcursor); for (; mc; mc = bk->mc_next) { bk = malloc(size); if (!bk) return ENOMEM; *bk = *mc; mc->mc_backup = bk; mc->mc_db = &dst->mt_dbs[i]; /* Kill pointers into src to reduce abuse: The * user may not use mc until dst ends. But we need a valid * txn pointer here for cursor fixups to keep working. */ mc->mc_txn = dst; mc->mc_dbflag = &dst->mt_dbflags[i]; if ((mx = mc->mc_xcursor) != NULL) { *(MDB_xcursor *)(bk+1) = *mx; mx->mx_cursor.mc_txn = dst; } mc->mc_next = dst->mt_cursors[i]; dst->mt_cursors[i] = mc; } } } return MDB_SUCCESS; } /** Close this write txn's cursors, give parent txn's cursors back to parent. * @param[in] txn the transaction handle. * @param[in] merge true to keep changes to parent cursors, false to revert. * @return 0 on success, non-zero on failure. */ static void mdb_cursors_close(MDB_txn *txn, unsigned merge) { MDB_cursor **cursors = txn->mt_cursors, *mc, *next, *bk; MDB_xcursor *mx; int i; for (i = txn->mt_numdbs; --i >= 0; ) { for (mc = cursors[i]; mc; mc = next) { next = mc->mc_next; if ((bk = mc->mc_backup) != NULL) { if (merge) { /* Commit changes to parent txn */ mc->mc_next = bk->mc_next; mc->mc_backup = bk->mc_backup; mc->mc_txn = bk->mc_txn; mc->mc_db = bk->mc_db; mc->mc_dbflag = bk->mc_dbflag; if ((mx = mc->mc_xcursor) != NULL) mx->mx_cursor.mc_txn = bk->mc_txn; } else { /* Abort nested txn */ *mc = *bk; if ((mx = mc->mc_xcursor) != NULL) *mx = *(MDB_xcursor *)(bk+1); } mc = bk; } /* Only malloced cursors are permanently tracked. */ free(mc); } cursors[i] = NULL; } } #if !(MDB_PIDLOCK) /* Currently the same as defined(_WIN32) */ enum Pidlock_op { Pidset, Pidcheck }; #else enum Pidlock_op { Pidset = F_SETLK, Pidcheck = F_GETLK }; #endif /** Set or check a pid lock. Set returns 0 on success. * Check returns 0 if the process is certainly dead, nonzero if it may * be alive (the lock exists or an error happened so we do not know). * * On Windows Pidset is a no-op, we merely check for the existence * of the process with the given pid. On POSIX we use a single byte * lock on the lockfile, set at an offset equal to the pid. */ static int mdb_reader_pid(MDB_env *env, enum Pidlock_op op, MDB_PID_T pid) { #if !(MDB_PIDLOCK) /* Currently the same as defined(_WIN32) */ int ret = 0; HANDLE h; if (op == Pidcheck) { h = OpenProcess(env->me_pidquery, FALSE, pid); /* No documented "no such process" code, but other program use this: */ if (!h) return ErrCode() != ERROR_INVALID_PARAMETER; /* A process exists until all handles to it close. Has it exited? */ ret = WaitForSingleObject(h, 0) != 0; CloseHandle(h); } return ret; #else for (;;) { int rc; struct flock lock_info; memset(&lock_info, 0, sizeof(lock_info)); lock_info.l_type = F_WRLCK; lock_info.l_whence = SEEK_SET; lock_info.l_start = pid; lock_info.l_len = 1; if ((rc = fcntl(env->me_lfd, op, &lock_info)) == 0) { if (op == F_GETLK && lock_info.l_type != F_UNLCK) rc = -1; } else if ((rc = ErrCode()) == EINTR) { continue; } return rc; } #endif } /** Common code for #mdb_txn_begin() and #mdb_txn_renew(). * @param[in] txn the transaction handle to initialize * @return 0 on success, non-zero on failure. */ static int mdb_txn_renew0(MDB_txn *txn) { MDB_env *env = txn->mt_env; MDB_txninfo *ti = env->me_txns; MDB_meta *meta; unsigned int i, nr, flags = txn->mt_flags; uint16_t x; int rc, new_notls = 0; if ((flags &= MDB_TXN_RDONLY) != 0) { if (!ti) { meta = mdb_env_pick_meta(env); txn->mt_txnid = meta->mm_txnid; txn->mt_u.reader = NULL; } else { MDB_reader *r = (env->me_flags & MDB_NOTLS) ? txn->mt_u.reader : pthread_getspecific(env->me_txkey); if (r) { if (r->mr_pid != env->me_pid || r->mr_txnid != (txnid_t)-1) return MDB_BAD_RSLOT; } else { MDB_PID_T pid = env->me_pid; MDB_THR_T tid = pthread_self(); mdb_mutexref_t rmutex = env->me_rmutex; if (!env->me_live_reader) { rc = mdb_reader_pid(env, Pidset, pid); if (rc) return rc; env->me_live_reader = 1; } if (LOCK_MUTEX(rc, env, rmutex)) return rc; nr = ti->mti_numreaders; for (i=0; imti_readers[i].mr_pid == 0) break; if (i == env->me_maxreaders) { UNLOCK_MUTEX(rmutex); return MDB_READERS_FULL; } r = &ti->mti_readers[i]; /* Claim the reader slot, carefully since other code * uses the reader table un-mutexed: First reset the * slot, next publish it in mti_numreaders. After * that, it is safe for mdb_env_close() to touch it. * When it will be closed, we can finally claim it. */ r->mr_pid = 0; r->mr_txnid = (txnid_t)-1; r->mr_tid = tid; if (i == nr) ti->mti_numreaders = ++nr; env->me_close_readers = nr; r->mr_pid = pid; UNLOCK_MUTEX(rmutex); new_notls = (env->me_flags & MDB_NOTLS); if (!new_notls && (rc=pthread_setspecific(env->me_txkey, r))) { r->mr_pid = 0; return rc; } } do /* LY: Retry on a race, ITS#7970. */ r->mr_txnid = ti->mti_txnid; while(r->mr_txnid != ti->mti_txnid); txn->mt_txnid = r->mr_txnid; txn->mt_u.reader = r; meta = env->me_metas[txn->mt_txnid & 1]; } } else { /* Not yet touching txn == env->me_txn0, it may be active */ if (ti) { if (LOCK_MUTEX(rc, env, env->me_wmutex)) return rc; txn->mt_txnid = ti->mti_txnid; meta = env->me_metas[txn->mt_txnid & 1]; } else { meta = mdb_env_pick_meta(env); txn->mt_txnid = meta->mm_txnid; } txn->mt_txnid++; #if MDB_DEBUG if (txn->mt_txnid == mdb_debug_start) mdb_debug = 1; #endif txn->mt_child = NULL; txn->mt_loose_pgs = NULL; txn->mt_loose_count = 0; txn->mt_dirty_room = MDB_IDL_UM_MAX; txn->mt_u.dirty_list = env->me_dirty_list; txn->mt_u.dirty_list[0].mid = 0; txn->mt_free_pgs = env->me_free_pgs; txn->mt_free_pgs[0] = 0; txn->mt_spill_pgs = NULL; env->me_txn = txn; memcpy(txn->mt_dbiseqs, env->me_dbiseqs, env->me_maxdbs * sizeof(unsigned int)); } /* Copy the DB info and flags */ memcpy(txn->mt_dbs, meta->mm_dbs, CORE_DBS * sizeof(MDB_db)); /* Moved to here to avoid a data race in read TXNs */ txn->mt_next_pgno = meta->mm_last_pg+1; #ifdef MDB_VL32 txn->mt_last_pgno = txn->mt_next_pgno - 1; #endif txn->mt_flags = flags; /* Setup db info */ txn->mt_numdbs = env->me_numdbs; for (i=CORE_DBS; imt_numdbs; i++) { x = env->me_dbflags[i]; txn->mt_dbs[i].md_flags = x & PERSISTENT_FLAGS; txn->mt_dbflags[i] = (x & MDB_VALID) ? DB_VALID|DB_USRVALID|DB_STALE : 0; } txn->mt_dbflags[MAIN_DBI] = DB_VALID|DB_USRVALID; txn->mt_dbflags[FREE_DBI] = DB_VALID; if (env->me_flags & MDB_FATAL_ERROR) { DPUTS("environment had fatal error, must shutdown!"); rc = MDB_PANIC; } else if (env->me_maxpg < txn->mt_next_pgno) { rc = MDB_MAP_RESIZED; } else { return MDB_SUCCESS; } mdb_txn_end(txn, new_notls /*0 or MDB_END_SLOT*/ | MDB_END_FAIL_BEGIN); return rc; } int mdb_txn_renew(MDB_txn *txn) { int rc; if (!txn || !F_ISSET(txn->mt_flags, MDB_TXN_RDONLY|MDB_TXN_FINISHED)) return EINVAL; rc = mdb_txn_renew0(txn); if (rc == MDB_SUCCESS) { DPRINTF(("renew txn %"Yu"%c %p on mdbenv %p, root page %"Yu, txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', (void *)txn, (void *)txn->mt_env, txn->mt_dbs[MAIN_DBI].md_root)); } return rc; } int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret) { MDB_txn *txn; MDB_ntxn *ntxn; int rc, size, tsize; flags &= MDB_TXN_BEGIN_FLAGS; flags |= env->me_flags & MDB_WRITEMAP; if (env->me_flags & MDB_RDONLY & ~flags) /* write txn in RDONLY env */ return EACCES; if (parent) { /* Nested transactions: Max 1 child, write txns only, no writemap */ flags |= parent->mt_flags; if (flags & (MDB_RDONLY|MDB_WRITEMAP|MDB_TXN_BLOCKED)) { return (parent->mt_flags & MDB_TXN_RDONLY) ? EINVAL : MDB_BAD_TXN; } /* Child txns save MDB_pgstate and use own copy of cursors */ size = env->me_maxdbs * (sizeof(MDB_db)+sizeof(MDB_cursor *)+1); size += tsize = sizeof(MDB_ntxn); } else if (flags & MDB_RDONLY) { size = env->me_maxdbs * (sizeof(MDB_db)+1); size += tsize = sizeof(MDB_txn); } else { /* Reuse preallocated write txn. However, do not touch it until * mdb_txn_renew0() succeeds, since it currently may be active. */ txn = env->me_txn0; goto renew; } if ((txn = calloc(1, size)) == NULL) { DPRINTF(("calloc: %s", strerror(errno))); return ENOMEM; } #ifdef MDB_VL32 if (!parent) { txn->mt_rpages = malloc(MDB_TRPAGE_SIZE * sizeof(MDB_ID3)); if (!txn->mt_rpages) { free(txn); return ENOMEM; } txn->mt_rpages[0].mid = 0; txn->mt_rpcheck = MDB_TRPAGE_SIZE/2; } #endif txn->mt_dbxs = env->me_dbxs; /* static */ txn->mt_dbs = (MDB_db *) ((char *)txn + tsize); txn->mt_dbflags = (unsigned char *)txn + size - env->me_maxdbs; txn->mt_flags = flags; txn->mt_env = env; if (parent) { unsigned int i; txn->mt_cursors = (MDB_cursor **)(txn->mt_dbs + env->me_maxdbs); txn->mt_dbiseqs = parent->mt_dbiseqs; txn->mt_u.dirty_list = malloc(sizeof(MDB_ID2)*MDB_IDL_UM_SIZE); if (!txn->mt_u.dirty_list || !(txn->mt_free_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX))) { free(txn->mt_u.dirty_list); free(txn); return ENOMEM; } txn->mt_txnid = parent->mt_txnid; txn->mt_dirty_room = parent->mt_dirty_room; txn->mt_u.dirty_list[0].mid = 0; txn->mt_spill_pgs = NULL; txn->mt_next_pgno = parent->mt_next_pgno; parent->mt_flags |= MDB_TXN_HAS_CHILD; parent->mt_child = txn; txn->mt_parent = parent; txn->mt_numdbs = parent->mt_numdbs; #ifdef MDB_VL32 txn->mt_rpages = parent->mt_rpages; #endif memcpy(txn->mt_dbs, parent->mt_dbs, txn->mt_numdbs * sizeof(MDB_db)); /* Copy parent's mt_dbflags, but clear DB_NEW */ for (i=0; imt_numdbs; i++) txn->mt_dbflags[i] = parent->mt_dbflags[i] & ~DB_NEW; rc = 0; ntxn = (MDB_ntxn *)txn; ntxn->mnt_pgstate = env->me_pgstate; /* save parent me_pghead & co */ if (env->me_pghead) { size = MDB_IDL_SIZEOF(env->me_pghead); env->me_pghead = mdb_midl_alloc(env->me_pghead[0]); if (env->me_pghead) memcpy(env->me_pghead, ntxn->mnt_pgstate.mf_pghead, size); else rc = ENOMEM; } if (!rc) rc = mdb_cursor_shadow(parent, txn); if (rc) mdb_txn_end(txn, MDB_END_FAIL_BEGINCHILD); } else { /* MDB_RDONLY */ txn->mt_dbiseqs = env->me_dbiseqs; renew: rc = mdb_txn_renew0(txn); } if (rc) { if (txn != env->me_txn0) { #ifdef MDB_VL32 free(txn->mt_rpages); #endif free(txn); } } else { txn->mt_flags |= flags; /* could not change txn=me_txn0 earlier */ *ret = txn; DPRINTF(("begin txn %"Yu"%c %p on mdbenv %p, root page %"Yu, txn->mt_txnid, (flags & MDB_RDONLY) ? 'r' : 'w', (void *) txn, (void *) env, txn->mt_dbs[MAIN_DBI].md_root)); } return rc; } MDB_env * mdb_txn_env(MDB_txn *txn) { if(!txn) return NULL; return txn->mt_env; } mdb_size_t mdb_txn_id(MDB_txn *txn) { if(!txn) return 0; return txn->mt_txnid; } /** Export or close DBI handles opened in this txn. */ static void mdb_dbis_update(MDB_txn *txn, int keep) { int i; MDB_dbi n = txn->mt_numdbs; MDB_env *env = txn->mt_env; unsigned char *tdbflags = txn->mt_dbflags; for (i = n; --i >= CORE_DBS;) { if (tdbflags[i] & DB_NEW) { if (keep) { env->me_dbflags[i] = txn->mt_dbs[i].md_flags | MDB_VALID; } else { char *ptr = env->me_dbxs[i].md_name.mv_data; if (ptr) { env->me_dbxs[i].md_name.mv_data = NULL; env->me_dbxs[i].md_name.mv_size = 0; env->me_dbflags[i] = 0; env->me_dbiseqs[i]++; free(ptr); } } } } if (keep && env->me_numdbs < n) env->me_numdbs = n; } /** End a transaction, except successful commit of a nested transaction. * May be called twice for readonly txns: First reset it, then abort. * @param[in] txn the transaction handle to end * @param[in] mode why and how to end the transaction */ static void mdb_txn_end(MDB_txn *txn, unsigned mode) { MDB_env *env = txn->mt_env; #if MDB_DEBUG static const char *const names[] = MDB_END_NAMES; #endif /* Export or close DBI handles opened in this txn */ mdb_dbis_update(txn, mode & MDB_END_UPDATE); DPRINTF(("%s txn %"Yu"%c %p on mdbenv %p, root page %"Yu, names[mode & MDB_END_OPMASK], txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', (void *) txn, (void *)env, txn->mt_dbs[MAIN_DBI].md_root)); if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { if (txn->mt_u.reader) { txn->mt_u.reader->mr_txnid = (txnid_t)-1; if (!(env->me_flags & MDB_NOTLS)) { txn->mt_u.reader = NULL; /* txn does not own reader */ } else if (mode & MDB_END_SLOT) { txn->mt_u.reader->mr_pid = 0; txn->mt_u.reader = NULL; } /* else txn owns the slot until it does MDB_END_SLOT */ } txn->mt_numdbs = 0; /* prevent further DBI activity */ txn->mt_flags |= MDB_TXN_FINISHED; } else if (!F_ISSET(txn->mt_flags, MDB_TXN_FINISHED)) { pgno_t *pghead = env->me_pghead; if (!(mode & MDB_END_UPDATE)) /* !(already closed cursors) */ mdb_cursors_close(txn, 0); if (!(env->me_flags & MDB_WRITEMAP)) { mdb_dlist_free(txn); } txn->mt_numdbs = 0; txn->mt_flags = MDB_TXN_FINISHED; if (!txn->mt_parent) { mdb_midl_shrink(&txn->mt_free_pgs); env->me_free_pgs = txn->mt_free_pgs; /* me_pgstate: */ env->me_pghead = NULL; env->me_pglast = 0; env->me_txn = NULL; mode = 0; /* txn == env->me_txn0, do not free() it */ /* The writer mutex was locked in mdb_txn_begin. */ if (env->me_txns) UNLOCK_MUTEX(env->me_wmutex); } else { txn->mt_parent->mt_child = NULL; txn->mt_parent->mt_flags &= ~MDB_TXN_HAS_CHILD; env->me_pgstate = ((MDB_ntxn *)txn)->mnt_pgstate; mdb_midl_free(txn->mt_free_pgs); mdb_midl_free(txn->mt_spill_pgs); free(txn->mt_u.dirty_list); } mdb_midl_free(pghead); } #ifdef MDB_VL32 if (!txn->mt_parent) { MDB_ID3L el = env->me_rpages, tl = txn->mt_rpages; unsigned i, x, n = tl[0].mid; pthread_mutex_lock(&env->me_rpmutex); for (i = 1; i <= n; i++) { if (tl[i].mid & (MDB_RPAGE_CHUNK-1)) { /* tmp overflow pages that we didn't share in env */ munmap(tl[i].mptr, tl[i].mcnt * env->me_psize); } else { x = mdb_mid3l_search(el, tl[i].mid); if (tl[i].mptr == el[x].mptr) { el[x].mref--; } else { /* another tmp overflow page */ munmap(tl[i].mptr, tl[i].mcnt * env->me_psize); } } } pthread_mutex_unlock(&env->me_rpmutex); tl[0].mid = 0; if (mode & MDB_END_FREE) free(tl); } #endif if (mode & MDB_END_FREE) free(txn); } void mdb_txn_reset(MDB_txn *txn) { if (txn == NULL) return; /* This call is only valid for read-only txns */ if (!(txn->mt_flags & MDB_TXN_RDONLY)) return; mdb_txn_end(txn, MDB_END_RESET); } void mdb_txn_abort(MDB_txn *txn) { if (txn == NULL) return; if (txn->mt_child) mdb_txn_abort(txn->mt_child); mdb_txn_end(txn, MDB_END_ABORT|MDB_END_SLOT|MDB_END_FREE); } /** Save the freelist as of this transaction to the freeDB. * This changes the freelist. Keep trying until it stabilizes. * * When (MDB_DEVEL) & 2, the changes do not affect #mdb_page_alloc(), * it then uses the transaction's original snapshot of the freeDB. */ static int mdb_freelist_save(MDB_txn *txn) { /* env->me_pghead[] can grow and shrink during this call. * env->me_pglast and txn->mt_free_pgs[] can only grow. * Page numbers cannot disappear from txn->mt_free_pgs[]. */ MDB_cursor mc; MDB_env *env = txn->mt_env; int rc, maxfree_1pg = env->me_maxfree_1pg, more = 1; txnid_t pglast = 0, head_id = 0; pgno_t freecnt = 0, *free_pgs, *mop; ssize_t head_room = 0, total_room = 0, mop_len, clean_limit; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); if (env->me_pghead) { /* Make sure first page of freeDB is touched and on freelist */ rc = mdb_page_search(&mc, NULL, MDB_PS_FIRST|MDB_PS_MODIFY); if (rc && rc != MDB_NOTFOUND) return rc; } if (!env->me_pghead && txn->mt_loose_pgs) { /* Put loose page numbers in mt_free_pgs, since * we may be unable to return them to me_pghead. */ MDB_page *mp = txn->mt_loose_pgs; MDB_ID2 *dl = txn->mt_u.dirty_list; unsigned x; if ((rc = mdb_midl_need(&txn->mt_free_pgs, txn->mt_loose_count)) != 0) return rc; for (; mp; mp = NEXT_LOOSE_PAGE(mp)) { mdb_midl_xappend(txn->mt_free_pgs, mp->mp_pgno); /* must also remove from dirty list */ if (txn->mt_flags & MDB_TXN_WRITEMAP) { for (x=1; x<=dl[0].mid; x++) if (dl[x].mid == mp->mp_pgno) break; mdb_tassert(txn, x <= dl[0].mid); } else { x = mdb_mid2l_search(dl, mp->mp_pgno); mdb_tassert(txn, dl[x].mid == mp->mp_pgno); mdb_dpage_free(env, mp); } dl[x].mptr = NULL; } { /* squash freed slots out of the dirty list */ unsigned y; for (y=1; dl[y].mptr && y <= dl[0].mid; y++); if (y <= dl[0].mid) { for(x=y, y++;;) { while (!dl[y].mptr && y <= dl[0].mid) y++; if (y > dl[0].mid) break; dl[x++] = dl[y++]; } dl[0].mid = x-1; } else { /* all slots freed */ dl[0].mid = 0; } } txn->mt_loose_pgs = NULL; txn->mt_loose_count = 0; } /* MDB_RESERVE cancels meminit in ovpage malloc (when no WRITEMAP) */ clean_limit = (env->me_flags & (MDB_NOMEMINIT|MDB_WRITEMAP)) ? SSIZE_MAX : maxfree_1pg; for (;;) { /* Come back here after each Put() in case freelist changed */ MDB_val key, data; pgno_t *pgs; ssize_t j; /* If using records from freeDB which we have not yet * deleted, delete them and any we reserved for me_pghead. */ while (pglast < env->me_pglast) { rc = mdb_cursor_first(&mc, &key, NULL); if (rc) return rc; pglast = head_id = *(txnid_t *)key.mv_data; total_room = head_room = 0; mdb_tassert(txn, pglast <= env->me_pglast); rc = mdb_cursor_del(&mc, 0); if (rc) return rc; } /* Save the IDL of pages freed by this txn, to a single record */ if (freecnt < txn->mt_free_pgs[0]) { if (!freecnt) { /* Make sure last page of freeDB is touched and on freelist */ rc = mdb_page_search(&mc, NULL, MDB_PS_LAST|MDB_PS_MODIFY); if (rc && rc != MDB_NOTFOUND) return rc; } free_pgs = txn->mt_free_pgs; /* Write to last page of freeDB */ key.mv_size = sizeof(txn->mt_txnid); key.mv_data = &txn->mt_txnid; do { freecnt = free_pgs[0]; data.mv_size = MDB_IDL_SIZEOF(free_pgs); rc = mdb_cursor_put(&mc, &key, &data, MDB_RESERVE); if (rc) return rc; /* Retry if mt_free_pgs[] grew during the Put() */ free_pgs = txn->mt_free_pgs; } while (freecnt < free_pgs[0]); mdb_midl_sort(free_pgs); memcpy(data.mv_data, free_pgs, data.mv_size); #if (MDB_DEBUG) > 1 { unsigned int i = free_pgs[0]; DPRINTF(("IDL write txn %"Yu" root %"Yu" num %u", txn->mt_txnid, txn->mt_dbs[FREE_DBI].md_root, i)); for (; i; i--) DPRINTF(("IDL %"Yu, free_pgs[i])); } #endif continue; } mop = env->me_pghead; mop_len = (mop ? mop[0] : 0) + txn->mt_loose_count; /* Reserve records for me_pghead[]. Split it if multi-page, * to avoid searching freeDB for a page range. Use keys in * range [1,me_pglast]: Smaller than txnid of oldest reader. */ if (total_room >= mop_len) { if (total_room == mop_len || --more < 0) break; } else if (head_room >= maxfree_1pg && head_id > 1) { /* Keep current record (overflow page), add a new one */ head_id--; head_room = 0; } /* (Re)write {key = head_id, IDL length = head_room} */ total_room -= head_room; head_room = mop_len - total_room; if (head_room > maxfree_1pg && head_id > 1) { /* Overflow multi-page for part of me_pghead */ head_room /= head_id; /* amortize page sizes */ head_room += maxfree_1pg - head_room % (maxfree_1pg + 1); } else if (head_room < 0) { /* Rare case, not bothering to delete this record */ head_room = 0; } key.mv_size = sizeof(head_id); key.mv_data = &head_id; data.mv_size = (head_room + 1) * sizeof(pgno_t); rc = mdb_cursor_put(&mc, &key, &data, MDB_RESERVE); if (rc) return rc; /* IDL is initially empty, zero out at least the length */ pgs = (pgno_t *)data.mv_data; j = head_room > clean_limit ? head_room : 0; do { pgs[j] = 0; } while (--j >= 0); total_room += head_room; } /* Return loose page numbers to me_pghead, though usually none are * left at this point. The pages themselves remain in dirty_list. */ if (txn->mt_loose_pgs) { MDB_page *mp = txn->mt_loose_pgs; unsigned count = txn->mt_loose_count; MDB_IDL loose; /* Room for loose pages + temp IDL with same */ if ((rc = mdb_midl_need(&env->me_pghead, 2*count+1)) != 0) return rc; mop = env->me_pghead; loose = mop + MDB_IDL_ALLOCLEN(mop) - count; for (count = 0; mp; mp = NEXT_LOOSE_PAGE(mp)) loose[ ++count ] = mp->mp_pgno; loose[0] = count; mdb_midl_sort(loose); mdb_midl_xmerge(mop, loose); txn->mt_loose_pgs = NULL; txn->mt_loose_count = 0; mop_len = mop[0]; } /* Fill in the reserved me_pghead records */ rc = MDB_SUCCESS; if (mop_len) { MDB_val key, data; mop += mop_len; rc = mdb_cursor_first(&mc, &key, &data); for (; !rc; rc = mdb_cursor_next(&mc, &key, &data, MDB_NEXT)) { txnid_t id = *(txnid_t *)key.mv_data; ssize_t len = (ssize_t)(data.mv_size / sizeof(MDB_ID)) - 1; MDB_ID save; mdb_tassert(txn, len >= 0 && id <= env->me_pglast); key.mv_data = &id; if (len > mop_len) { len = mop_len; data.mv_size = (len + 1) * sizeof(MDB_ID); } data.mv_data = mop -= len; save = mop[0]; mop[0] = len; rc = mdb_cursor_put(&mc, &key, &data, MDB_CURRENT); mop[0] = save; if (rc || !(mop_len -= len)) break; } } return rc; } /** Flush (some) dirty pages to the map, after clearing their dirty flag. * @param[in] txn the transaction that's being committed * @param[in] keep number of initial pages in dirty_list to keep dirty. * @return 0 on success, non-zero on failure. */ static int mdb_page_flush(MDB_txn *txn, int keep) { MDB_env *env = txn->mt_env; MDB_ID2L dl = txn->mt_u.dirty_list; unsigned psize = env->me_psize, j; int i, pagecount = dl[0].mid, rc; size_t size = 0; off_t pos = 0; pgno_t pgno = 0; MDB_page *dp = NULL; #ifdef _WIN32 OVERLAPPED ov; #else struct iovec iov[MDB_COMMIT_PAGES]; ssize_t wsize = 0, wres; off_t wpos = 0, next_pos = 1; /* impossible pos, so pos != next_pos */ int n = 0; #endif j = i = keep; if (env->me_flags & MDB_WRITEMAP) { /* Clear dirty flags */ while (++i <= pagecount) { dp = dl[i].mptr; /* Don't flush this page yet */ if (dp->mp_flags & (P_LOOSE|P_KEEP)) { dp->mp_flags &= ~P_KEEP; dl[++j] = dl[i]; continue; } dp->mp_flags &= ~P_DIRTY; } goto done; } /* Write the pages */ for (;;) { if (++i <= pagecount) { dp = dl[i].mptr; /* Don't flush this page yet */ if (dp->mp_flags & (P_LOOSE|P_KEEP)) { dp->mp_flags &= ~P_KEEP; dl[i].mid = 0; continue; } pgno = dl[i].mid; /* clear dirty flag */ dp->mp_flags &= ~P_DIRTY; pos = pgno * psize; size = psize; if (IS_OVERFLOW(dp)) size *= dp->mp_pages; } #ifdef _WIN32 else break; /* Windows actually supports scatter/gather I/O, but only on * unbuffered file handles. Since we're relying on the OS page * cache for all our data, that's self-defeating. So we just * write pages one at a time. We use the ov structure to set * the write offset, to at least save the overhead of a Seek * system call. */ DPRINTF(("committing page %"Yu, pgno)); memset(&ov, 0, sizeof(ov)); ov.Offset = pos & 0xffffffff; ov.OffsetHigh = pos >> 16 >> 16; if (!WriteFile(env->me_fd, dp, size, NULL, &ov)) { rc = ErrCode(); DPRINTF(("WriteFile: %d", rc)); return rc; } #else /* Write up to MDB_COMMIT_PAGES dirty pages at a time. */ if (pos!=next_pos || n==MDB_COMMIT_PAGES || wsize+size>MAX_WRITE) { if (n) { retry_write: /* Write previous page(s) */ #ifdef MDB_USE_PWRITEV wres = pwritev(env->me_fd, iov, n, wpos); #else if (n == 1) { wres = pwrite(env->me_fd, iov[0].iov_base, wsize, wpos); } else { retry_seek: if (lseek(env->me_fd, wpos, SEEK_SET) == -1) { rc = ErrCode(); if (rc == EINTR) goto retry_seek; DPRINTF(("lseek: %s", strerror(rc))); return rc; } wres = writev(env->me_fd, iov, n); } #endif if (wres != wsize) { if (wres < 0) { rc = ErrCode(); if (rc == EINTR) goto retry_write; DPRINTF(("Write error: %s", strerror(rc))); } else { rc = EIO; /* TODO: Use which error code? */ DPUTS("short write, filesystem full?"); } return rc; } n = 0; } if (i > pagecount) break; wpos = pos; wsize = 0; } DPRINTF(("committing page %"Yu, pgno)); next_pos = pos + size; iov[n].iov_len = size; iov[n].iov_base = (char *)dp; wsize += size; n++; #endif /* _WIN32 */ } #ifdef MDB_VL32 if (pgno > txn->mt_last_pgno) txn->mt_last_pgno = pgno; #endif /* MIPS has cache coherency issues, this is a no-op everywhere else * Note: for any size >= on-chip cache size, entire on-chip cache is * flushed. */ CACHEFLUSH(env->me_map, txn->mt_next_pgno * env->me_psize, DCACHE); for (i = keep; ++i <= pagecount; ) { dp = dl[i].mptr; /* This is a page we skipped above */ if (!dl[i].mid) { dl[++j] = dl[i]; dl[j].mid = dp->mp_pgno; continue; } mdb_dpage_free(env, dp); } done: i--; txn->mt_dirty_room += i - j; dl[0].mid = j; return MDB_SUCCESS; } static int ESECT mdb_env_share_locks(MDB_env *env, int *excl); int mdb_txn_commit(MDB_txn *txn) { int rc; unsigned int i, end_mode; MDB_env *env; if (txn == NULL) return EINVAL; /* mdb_txn_end() mode for a commit which writes nothing */ end_mode = MDB_END_EMPTY_COMMIT|MDB_END_UPDATE|MDB_END_SLOT|MDB_END_FREE; if (txn->mt_child) { rc = mdb_txn_commit(txn->mt_child); if (rc) goto fail; } env = txn->mt_env; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { goto done; } if (txn->mt_flags & (MDB_TXN_FINISHED|MDB_TXN_ERROR)) { DPUTS("txn has failed/finished, can't commit"); if (txn->mt_parent) txn->mt_parent->mt_flags |= MDB_TXN_ERROR; rc = MDB_BAD_TXN; goto fail; } if (txn->mt_parent) { MDB_txn *parent = txn->mt_parent; MDB_page **lp; MDB_ID2L dst, src; MDB_IDL pspill; unsigned x, y, len, ps_len; /* Append our free list to parent's */ rc = mdb_midl_append_list(&parent->mt_free_pgs, txn->mt_free_pgs); if (rc) goto fail; mdb_midl_free(txn->mt_free_pgs); /* Failures after this must either undo the changes * to the parent or set MDB_TXN_ERROR in the parent. */ parent->mt_next_pgno = txn->mt_next_pgno; parent->mt_flags = txn->mt_flags; /* Merge our cursors into parent's and close them */ mdb_cursors_close(txn, 1); /* Update parent's DB table. */ memcpy(parent->mt_dbs, txn->mt_dbs, txn->mt_numdbs * sizeof(MDB_db)); parent->mt_numdbs = txn->mt_numdbs; parent->mt_dbflags[FREE_DBI] = txn->mt_dbflags[FREE_DBI]; parent->mt_dbflags[MAIN_DBI] = txn->mt_dbflags[MAIN_DBI]; for (i=CORE_DBS; imt_numdbs; i++) { /* preserve parent's DB_NEW status */ x = parent->mt_dbflags[i] & DB_NEW; parent->mt_dbflags[i] = txn->mt_dbflags[i] | x; } dst = parent->mt_u.dirty_list; src = txn->mt_u.dirty_list; /* Remove anything in our dirty list from parent's spill list */ if ((pspill = parent->mt_spill_pgs) && (ps_len = pspill[0])) { x = y = ps_len; pspill[0] = (pgno_t)-1; /* Mark our dirty pages as deleted in parent spill list */ for (i=0, len=src[0].mid; ++i <= len; ) { MDB_ID pn = src[i].mid << 1; while (pn > pspill[x]) x--; if (pn == pspill[x]) { pspill[x] = 1; y = --x; } } /* Squash deleted pagenums if we deleted any */ for (x=y; ++x <= ps_len; ) if (!(pspill[x] & 1)) pspill[++y] = pspill[x]; pspill[0] = y; } /* Remove anything in our spill list from parent's dirty list */ if (txn->mt_spill_pgs && txn->mt_spill_pgs[0]) { for (i=1; i<=txn->mt_spill_pgs[0]; i++) { MDB_ID pn = txn->mt_spill_pgs[i]; if (pn & 1) continue; /* deleted spillpg */ pn >>= 1; y = mdb_mid2l_search(dst, pn); if (y <= dst[0].mid && dst[y].mid == pn) { free(dst[y].mptr); while (y < dst[0].mid) { dst[y] = dst[y+1]; y++; } dst[0].mid--; } } } /* Find len = length of merging our dirty list with parent's */ x = dst[0].mid; dst[0].mid = 0; /* simplify loops */ if (parent->mt_parent) { len = x + src[0].mid; y = mdb_mid2l_search(src, dst[x].mid + 1) - 1; for (i = x; y && i; y--) { pgno_t yp = src[y].mid; while (yp < dst[i].mid) i--; if (yp == dst[i].mid) { i--; len--; } } } else { /* Simplify the above for single-ancestor case */ len = MDB_IDL_UM_MAX - txn->mt_dirty_room; } /* Merge our dirty list with parent's */ y = src[0].mid; for (i = len; y; dst[i--] = src[y--]) { pgno_t yp = src[y].mid; while (yp < dst[x].mid) dst[i--] = dst[x--]; if (yp == dst[x].mid) free(dst[x--].mptr); } mdb_tassert(txn, i == x); dst[0].mid = len; free(txn->mt_u.dirty_list); parent->mt_dirty_room = txn->mt_dirty_room; if (txn->mt_spill_pgs) { if (parent->mt_spill_pgs) { /* TODO: Prevent failure here, so parent does not fail */ rc = mdb_midl_append_list(&parent->mt_spill_pgs, txn->mt_spill_pgs); if (rc) parent->mt_flags |= MDB_TXN_ERROR; mdb_midl_free(txn->mt_spill_pgs); mdb_midl_sort(parent->mt_spill_pgs); } else { parent->mt_spill_pgs = txn->mt_spill_pgs; } } /* Append our loose page list to parent's */ for (lp = &parent->mt_loose_pgs; *lp; lp = &NEXT_LOOSE_PAGE(*lp)) ; *lp = txn->mt_loose_pgs; parent->mt_loose_count += txn->mt_loose_count; parent->mt_child = NULL; mdb_midl_free(((MDB_ntxn *)txn)->mnt_pgstate.mf_pghead); free(txn); return rc; } if (txn != env->me_txn) { DPUTS("attempt to commit unknown transaction"); rc = EINVAL; goto fail; } mdb_cursors_close(txn, 0); if (!txn->mt_u.dirty_list[0].mid && !(txn->mt_flags & (MDB_TXN_DIRTY|MDB_TXN_SPILLS))) goto done; DPRINTF(("committing txn %"Yu" %p on mdbenv %p, root page %"Yu, txn->mt_txnid, (void*)txn, (void*)env, txn->mt_dbs[MAIN_DBI].md_root)); /* Update DB root pointers */ if (txn->mt_numdbs > CORE_DBS) { MDB_cursor mc; MDB_dbi i; MDB_val data; data.mv_size = sizeof(MDB_db); mdb_cursor_init(&mc, txn, MAIN_DBI, NULL); for (i = CORE_DBS; i < txn->mt_numdbs; i++) { if (txn->mt_dbflags[i] & DB_DIRTY) { if (TXN_DBI_CHANGED(txn, i)) { rc = MDB_BAD_DBI; goto fail; } data.mv_data = &txn->mt_dbs[i]; rc = mdb_cursor_put(&mc, &txn->mt_dbxs[i].md_name, &data, F_SUBDATA); if (rc) goto fail; } } } rc = mdb_freelist_save(txn); if (rc) goto fail; mdb_midl_free(env->me_pghead); env->me_pghead = NULL; mdb_midl_shrink(&txn->mt_free_pgs); #if (MDB_DEBUG) > 2 mdb_audit(txn); #endif if ((rc = mdb_page_flush(txn, 0))) goto fail; if (!F_ISSET(txn->mt_flags, MDB_TXN_NOSYNC) && (rc = mdb_env_sync0(env, 0, txn->mt_next_pgno))) goto fail; if ((rc = mdb_env_write_meta(txn))) goto fail; end_mode = MDB_END_COMMITTED|MDB_END_UPDATE; if (env->me_flags & MDB_PREVSNAPSHOT) { if (!(env->me_flags & MDB_NOLOCK)) { int excl; rc = mdb_env_share_locks(env, &excl); if (rc) goto fail; } env->me_flags ^= MDB_PREVSNAPSHOT; } done: mdb_txn_end(txn, end_mode); return MDB_SUCCESS; fail: mdb_txn_abort(txn); return rc; } /** Read the environment parameters of a DB environment before * mapping it into memory. * @param[in] env the environment handle * @param[in] prev whether to read the backup meta page * @param[out] meta address of where to store the meta information * @return 0 on success, non-zero on failure. */ static int ESECT mdb_env_read_header(MDB_env *env, int prev, MDB_meta *meta) { MDB_metabuf pbuf; MDB_page *p; MDB_meta *m; int i, rc, off; enum { Size = sizeof(pbuf) }; /* We don't know the page size yet, so use a minimum value. * Read both meta pages so we can use the latest one. */ for (i=off=0; imm_psize) { #ifdef _WIN32 DWORD len; OVERLAPPED ov; memset(&ov, 0, sizeof(ov)); ov.Offset = off; rc = ReadFile(env->me_fd, &pbuf, Size, &len, &ov) ? (int)len : -1; if (rc == -1 && ErrCode() == ERROR_HANDLE_EOF) rc = 0; #else rc = pread(env->me_fd, &pbuf, Size, off); #endif if (rc != Size) { if (rc == 0 && off == 0) return ENOENT; rc = rc < 0 ? (int) ErrCode() : MDB_INVALID; DPRINTF(("read: %s", mdb_strerror(rc))); return rc; } p = (MDB_page *)&pbuf; if (!F_ISSET(p->mp_flags, P_META)) { DPRINTF(("page %"Yu" not a meta page", p->mp_pgno)); return MDB_INVALID; } m = METADATA(p); if (m->mm_magic != MDB_MAGIC) { DPUTS("meta has invalid magic"); return MDB_INVALID; } if (m->mm_version != MDB_DATA_VERSION) { DPRINTF(("database is version %u, expected version %u", m->mm_version, MDB_DATA_VERSION)); return MDB_VERSION_MISMATCH; } if (off == 0 || (prev ? m->mm_txnid < meta->mm_txnid : m->mm_txnid > meta->mm_txnid)) *meta = *m; } return 0; } /** Fill in most of the zeroed #MDB_meta for an empty database environment */ static void ESECT mdb_env_init_meta0(MDB_env *env, MDB_meta *meta) { meta->mm_magic = MDB_MAGIC; meta->mm_version = MDB_DATA_VERSION; meta->mm_mapsize = env->me_mapsize; meta->mm_psize = env->me_psize; meta->mm_last_pg = NUM_METAS-1; meta->mm_flags = env->me_flags & 0xffff; meta->mm_flags |= MDB_INTEGERKEY; /* this is mm_dbs[FREE_DBI].md_flags */ meta->mm_dbs[FREE_DBI].md_root = P_INVALID; meta->mm_dbs[MAIN_DBI].md_root = P_INVALID; } /** Write the environment parameters of a freshly created DB environment. * @param[in] env the environment handle * @param[in] meta the #MDB_meta to write * @return 0 on success, non-zero on failure. */ static int ESECT mdb_env_init_meta(MDB_env *env, MDB_meta *meta) { MDB_page *p, *q; int rc; unsigned int psize; #ifdef _WIN32 DWORD len; OVERLAPPED ov; memset(&ov, 0, sizeof(ov)); #define DO_PWRITE(rc, fd, ptr, size, len, pos) do { \ ov.Offset = pos; \ rc = WriteFile(fd, ptr, size, &len, &ov); } while(0) #else int len; #define DO_PWRITE(rc, fd, ptr, size, len, pos) do { \ len = pwrite(fd, ptr, size, pos); \ if (len == -1 && ErrCode() == EINTR) continue; \ rc = (len >= 0); break; } while(1) #endif DPUTS("writing new meta page"); psize = env->me_psize; p = calloc(NUM_METAS, psize); if (!p) return ENOMEM; p->mp_pgno = 0; p->mp_flags = P_META; *(MDB_meta *)METADATA(p) = *meta; q = (MDB_page *)((char *)p + psize); q->mp_pgno = 1; q->mp_flags = P_META; *(MDB_meta *)METADATA(q) = *meta; DO_PWRITE(rc, env->me_fd, p, psize * NUM_METAS, len, 0); if (!rc) rc = ErrCode(); else if ((unsigned) len == psize * NUM_METAS) rc = MDB_SUCCESS; else rc = ENOSPC; free(p); return rc; } /** Update the environment info to commit a transaction. * @param[in] txn the transaction that's being committed * @return 0 on success, non-zero on failure. */ static int mdb_env_write_meta(MDB_txn *txn) { MDB_env *env; MDB_meta meta, metab, *mp; unsigned flags; mdb_size_t mapsize; off_t off; int rc, len, toggle; char *ptr; HANDLE mfd; #ifdef _WIN32 OVERLAPPED ov; #else int r2; #endif toggle = txn->mt_txnid & 1; DPRINTF(("writing meta page %d for root page %"Yu, toggle, txn->mt_dbs[MAIN_DBI].md_root)); env = txn->mt_env; flags = txn->mt_flags | env->me_flags; mp = env->me_metas[toggle]; mapsize = env->me_metas[toggle ^ 1]->mm_mapsize; /* Persist any increases of mapsize config */ if (mapsize < env->me_mapsize) mapsize = env->me_mapsize; if (flags & MDB_WRITEMAP) { mp->mm_mapsize = mapsize; mp->mm_dbs[FREE_DBI] = txn->mt_dbs[FREE_DBI]; mp->mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; mp->mm_last_pg = txn->mt_next_pgno - 1; #if (__GNUC__ * 100 + __GNUC_MINOR__ >= 404) && /* TODO: portability */ \ !(defined(__i386__) || defined(__x86_64__)) /* LY: issue a memory barrier, if not x86. ITS#7969 */ __sync_synchronize(); #endif mp->mm_txnid = txn->mt_txnid; if (!(flags & (MDB_NOMETASYNC|MDB_NOSYNC))) { unsigned meta_size = env->me_psize; rc = (env->me_flags & MDB_MAPASYNC) ? MS_ASYNC : MS_SYNC; ptr = (char *)mp - PAGEHDRSZ; #ifndef _WIN32 /* POSIX msync() requires ptr = start of OS page */ r2 = (ptr - env->me_map) & (env->me_os_psize - 1); ptr -= r2; meta_size += r2; #endif if (MDB_MSYNC(ptr, meta_size, rc)) { rc = ErrCode(); goto fail; } } goto done; } metab.mm_txnid = mp->mm_txnid; metab.mm_last_pg = mp->mm_last_pg; meta.mm_mapsize = mapsize; meta.mm_dbs[FREE_DBI] = txn->mt_dbs[FREE_DBI]; meta.mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; meta.mm_last_pg = txn->mt_next_pgno - 1; meta.mm_txnid = txn->mt_txnid; off = offsetof(MDB_meta, mm_mapsize); ptr = (char *)&meta + off; len = sizeof(MDB_meta) - off; off += (char *)mp - env->me_map; /* Write to the SYNC fd unless MDB_NOSYNC/MDB_NOMETASYNC. * (me_mfd goes to the same file as me_fd, but writing to it * also syncs to disk. Avoids a separate fdatasync() call.) */ mfd = (flags & (MDB_NOSYNC|MDB_NOMETASYNC)) ? env->me_fd : env->me_mfd; #ifdef _WIN32 { memset(&ov, 0, sizeof(ov)); ov.Offset = off; if (!WriteFile(mfd, ptr, len, (DWORD *)&rc, &ov)) rc = -1; } #else retry_write: rc = pwrite(mfd, ptr, len, off); #endif if (rc != len) { rc = rc < 0 ? ErrCode() : EIO; #ifndef _WIN32 if (rc == EINTR) goto retry_write; #endif DPUTS("write failed, disk error?"); /* On a failure, the pagecache still contains the new data. * Write some old data back, to prevent it from being used. * Use the non-SYNC fd; we know it will fail anyway. */ meta.mm_last_pg = metab.mm_last_pg; meta.mm_txnid = metab.mm_txnid; #ifdef _WIN32 memset(&ov, 0, sizeof(ov)); ov.Offset = off; WriteFile(env->me_fd, ptr, len, NULL, &ov); #else r2 = pwrite(env->me_fd, ptr, len, off); (void)r2; /* Silence warnings. We don't care about pwrite's return value */ #endif fail: env->me_flags |= MDB_FATAL_ERROR; return rc; } /* MIPS has cache coherency issues, this is a no-op everywhere else */ CACHEFLUSH(env->me_map + off, len, DCACHE); done: /* Memory ordering issues are irrelevant; since the entire writer * is wrapped by wmutex, all of these changes will become visible * after the wmutex is unlocked. Since the DB is multi-version, * readers will get consistent data regardless of how fresh or * how stale their view of these values is. */ if (env->me_txns) env->me_txns->mti_txnid = txn->mt_txnid; return MDB_SUCCESS; } /** Check both meta pages to see which one is newer. * @param[in] env the environment handle * @return newest #MDB_meta. */ static MDB_meta * mdb_env_pick_meta(const MDB_env *env) { MDB_meta *const *metas = env->me_metas; return metas[ (metas[0]->mm_txnid < metas[1]->mm_txnid) ^ ((env->me_flags & MDB_PREVSNAPSHOT) != 0) ]; } int ESECT mdb_env_create(MDB_env **env) { MDB_env *e; e = calloc(1, sizeof(MDB_env)); if (!e) return ENOMEM; e->me_maxreaders = DEFAULT_READERS; e->me_maxdbs = e->me_numdbs = CORE_DBS; e->me_fd = INVALID_HANDLE_VALUE; e->me_lfd = INVALID_HANDLE_VALUE; e->me_mfd = INVALID_HANDLE_VALUE; #ifdef MDB_USE_POSIX_SEM e->me_rmutex = SEM_FAILED; e->me_wmutex = SEM_FAILED; #elif defined MDB_USE_SYSV_SEM e->me_rmutex->semid = -1; e->me_wmutex->semid = -1; #endif e->me_pid = getpid(); GET_PAGESIZE(e->me_os_psize); VGMEMP_CREATE(e,0,0); *env = e; return MDB_SUCCESS; } #ifdef _WIN32 /** @brief Map a result from an NTAPI call to WIN32. */ static DWORD mdb_nt2win32(NTSTATUS st) { OVERLAPPED o = {0}; DWORD br; o.Internal = st; GetOverlappedResult(NULL, &o, &br, FALSE); return GetLastError(); } #endif static int ESECT mdb_env_map(MDB_env *env, void *addr) { MDB_page *p; unsigned int flags = env->me_flags; #ifdef _WIN32 int rc; int access = SECTION_MAP_READ; HANDLE mh; void *map; SIZE_T msize; ULONG pageprot = PAGE_READONLY, secprot, alloctype; if (flags & MDB_WRITEMAP) { access |= SECTION_MAP_WRITE; pageprot = PAGE_READWRITE; } if (flags & MDB_RDONLY) { secprot = PAGE_READONLY; msize = 0; alloctype = 0; } else { secprot = PAGE_READWRITE; msize = env->me_mapsize; alloctype = MEM_RESERVE; } rc = NtCreateSection(&mh, access, NULL, NULL, secprot, SEC_RESERVE, env->me_fd); if (rc) return mdb_nt2win32(rc); map = addr; #ifdef MDB_VL32 msize = NUM_METAS * env->me_psize; #endif rc = NtMapViewOfSection(mh, GetCurrentProcess(), &map, 0, 0, NULL, &msize, ViewUnmap, alloctype, pageprot); #ifdef MDB_VL32 env->me_fmh = mh; #else NtClose(mh); #endif if (rc) return mdb_nt2win32(rc); env->me_map = map; #else #ifdef MDB_VL32 (void) flags; env->me_map = mmap(addr, NUM_METAS * env->me_psize, PROT_READ, MAP_SHARED, env->me_fd, 0); if (env->me_map == MAP_FAILED) { env->me_map = NULL; return ErrCode(); } #else int prot = PROT_READ; if (flags & MDB_WRITEMAP) { prot |= PROT_WRITE; if (ftruncate(env->me_fd, env->me_mapsize) < 0) return ErrCode(); } env->me_map = mmap(addr, env->me_mapsize, prot, MAP_SHARED, env->me_fd, 0); if (env->me_map == MAP_FAILED) { env->me_map = NULL; return ErrCode(); } if (flags & MDB_NORDAHEAD) { /* Turn off readahead. It's harmful when the DB is larger than RAM. */ #ifdef MADV_RANDOM madvise(env->me_map, env->me_mapsize, MADV_RANDOM); #else #ifdef POSIX_MADV_RANDOM posix_madvise(env->me_map, env->me_mapsize, POSIX_MADV_RANDOM); #endif /* POSIX_MADV_RANDOM */ #endif /* MADV_RANDOM */ } #endif /* _WIN32 */ /* Can happen because the address argument to mmap() is just a * hint. mmap() can pick another, e.g. if the range is in use. * The MAP_FIXED flag would prevent that, but then mmap could * instead unmap existing pages to make room for the new map. */ if (addr && env->me_map != addr) return EBUSY; /* TODO: Make a new MDB_* error code? */ #endif p = (MDB_page *)env->me_map; env->me_metas[0] = METADATA(p); env->me_metas[1] = (MDB_meta *)((char *)env->me_metas[0] + env->me_psize); return MDB_SUCCESS; } int ESECT mdb_env_set_mapsize(MDB_env *env, mdb_size_t size) { /* If env is already open, caller is responsible for making * sure there are no active txns. */ if (env->me_map) { MDB_meta *meta; #ifndef MDB_VL32 void *old; int rc; #endif if (env->me_txn) return EINVAL; meta = mdb_env_pick_meta(env); if (!size) size = meta->mm_mapsize; { /* Silently round up to minimum if the size is too small */ mdb_size_t minsize = (meta->mm_last_pg + 1) * env->me_psize; if (size < minsize) size = minsize; } #ifndef MDB_VL32 /* For MDB_VL32 this bit is a noop since we dynamically remap * chunks of the DB anyway. */ munmap(env->me_map, env->me_mapsize); env->me_mapsize = size; old = (env->me_flags & MDB_FIXEDMAP) ? env->me_map : NULL; rc = mdb_env_map(env, old); if (rc) return rc; #endif /* !MDB_VL32 */ } env->me_mapsize = size; if (env->me_psize) env->me_maxpg = env->me_mapsize / env->me_psize; return MDB_SUCCESS; } int ESECT mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs) { if (env->me_map) return EINVAL; env->me_maxdbs = dbs + CORE_DBS; return MDB_SUCCESS; } int ESECT mdb_env_set_maxreaders(MDB_env *env, unsigned int readers) { if (env->me_map || readers < 1) return EINVAL; env->me_maxreaders = readers; return MDB_SUCCESS; } int ESECT mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers) { if (!env || !readers) return EINVAL; *readers = env->me_maxreaders; return MDB_SUCCESS; } static int ESECT mdb_fsize(HANDLE fd, mdb_size_t *size) { #ifdef _WIN32 LARGE_INTEGER fsize; if (!GetFileSizeEx(fd, &fsize)) return ErrCode(); *size = fsize.QuadPart; #else struct stat st; if (fstat(fd, &st)) return ErrCode(); *size = st.st_size; #endif return MDB_SUCCESS; } #ifdef _WIN32 typedef wchar_t mdb_nchar_t; # define MDB_NAME(str) L##str # define mdb_name_cpy wcscpy #else /** Character type for file names: char on Unix, wchar_t on Windows */ typedef char mdb_nchar_t; # define MDB_NAME(str) str /**< #mdb_nchar_t[] string literal */ # define mdb_name_cpy strcpy /**< Copy name (#mdb_nchar_t string) */ #endif /** Filename - string of #mdb_nchar_t[] */ typedef struct MDB_name { int mn_len; /**< Length */ int mn_alloced; /**< True if #mn_val was malloced */ mdb_nchar_t *mn_val; /**< Contents */ } MDB_name; /** Filename suffixes [datafile,lockfile][without,with MDB_NOSUBDIR] */ static const mdb_nchar_t *const mdb_suffixes[2][2] = { { MDB_NAME("/data.mdb"), MDB_NAME("") }, { MDB_NAME("/lock.mdb"), MDB_NAME("-lock") } }; #define MDB_SUFFLEN 9 /**< Max string length in #mdb_suffixes[] */ /** Set up filename + scratch area for filename suffix, for opening files. * It should be freed with #mdb_fname_destroy(). * On Windows, paths are converted from char *UTF-8 to wchar_t *UTF-16. * * @param[in] path Pathname for #mdb_env_open(). * @param[in] envflags Whether a subdir and/or lockfile will be used. * @param[out] fname Resulting filename, with room for a suffix if necessary. */ static int ESECT mdb_fname_init(const char *path, unsigned envflags, MDB_name *fname) { int no_suffix = F_ISSET(envflags, MDB_NOSUBDIR|MDB_NOLOCK); fname->mn_alloced = 0; #ifdef _WIN32 return utf8_to_utf16(path, fname, no_suffix ? 0 : MDB_SUFFLEN); #else fname->mn_len = strlen(path); if (no_suffix) fname->mn_val = (char *) path; else if ((fname->mn_val = malloc(fname->mn_len + MDB_SUFFLEN+1)) != NULL) { fname->mn_alloced = 1; strcpy(fname->mn_val, path); } else return ENOMEM; return MDB_SUCCESS; #endif } /** Destroy \b fname from #mdb_fname_init() */ #define mdb_fname_destroy(fname) \ do { if ((fname).mn_alloced) free((fname).mn_val); } while (0) #ifdef O_CLOEXEC /* POSIX.1-2008: Set FD_CLOEXEC atomically at open() */ # define MDB_CLOEXEC O_CLOEXEC #else # define MDB_CLOEXEC 0 #endif /** File type, access mode etc. for #mdb_fopen() */ enum mdb_fopen_type { #ifdef _WIN32 MDB_O_RDONLY, MDB_O_RDWR, MDB_O_META, MDB_O_COPY, MDB_O_LOCKS #else /* A comment in mdb_fopen() explains some O_* flag choices. */ MDB_O_RDONLY= O_RDONLY, /**< for RDONLY me_fd */ MDB_O_RDWR = O_RDWR |O_CREAT, /**< for me_fd */ MDB_O_META = O_WRONLY|MDB_DSYNC |MDB_CLOEXEC, /**< for me_mfd */ MDB_O_COPY = O_WRONLY|O_CREAT|O_EXCL|MDB_CLOEXEC, /**< for #mdb_env_copy() */ /** Bitmask for open() flags in enum #mdb_fopen_type. The other bits * distinguish otherwise-equal MDB_O_* constants from each other. */ MDB_O_MASK = MDB_O_RDWR|MDB_CLOEXEC | MDB_O_RDONLY|MDB_O_META|MDB_O_COPY, MDB_O_LOCKS = MDB_O_RDWR|MDB_CLOEXEC | ((MDB_O_MASK+1) & ~MDB_O_MASK) /**< for me_lfd */ #endif }; /** Open an LMDB file. * @param[in] env The LMDB environment. * @param[in,out] fname Path from from #mdb_fname_init(). A suffix is * appended if necessary to create the filename, without changing mn_len. * @param[in] which Determines file type, access mode, etc. * @param[in] mode The Unix permissions for the file, if we create it. * @param[out] res Resulting file handle. * @return 0 on success, non-zero on failure. */ static int ESECT mdb_fopen(const MDB_env *env, MDB_name *fname, enum mdb_fopen_type which, mdb_mode_t mode, HANDLE *res) { int rc = MDB_SUCCESS; HANDLE fd; #ifdef _WIN32 DWORD acc, share, disp, attrs; #else int flags; #endif if (fname->mn_alloced) /* modifiable copy */ mdb_name_cpy(fname->mn_val + fname->mn_len, mdb_suffixes[which==MDB_O_LOCKS][F_ISSET(env->me_flags, MDB_NOSUBDIR)]); /* The directory must already exist. Usually the file need not. * MDB_O_META requires the file because we already created it using * MDB_O_RDWR. MDB_O_COPY must not overwrite an existing file. * * With MDB_O_COPY we do not want the OS to cache the writes, since * the source data is already in the OS cache. * * The lockfile needs FD_CLOEXEC (close file descriptor on exec*()) * to avoid the flock() issues noted under Caveats in lmdb.h. * Also set it for other filehandles which the user cannot get at * and close himself, which he may need after fork(). I.e. all but * me_fd, which programs do use via mdb_env_get_fd(). */ #ifdef _WIN32 acc = GENERIC_READ|GENERIC_WRITE; share = FILE_SHARE_READ|FILE_SHARE_WRITE; disp = OPEN_ALWAYS; attrs = FILE_ATTRIBUTE_NORMAL; switch (which) { case MDB_O_RDONLY: /* read-only datafile */ acc = GENERIC_READ; disp = OPEN_EXISTING; break; case MDB_O_META: /* for writing metapages */ acc = GENERIC_WRITE; disp = OPEN_EXISTING; attrs = FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH; break; case MDB_O_COPY: /* mdb_env_copy() & co */ acc = GENERIC_WRITE; share = 0; disp = CREATE_NEW; attrs = FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH; break; default: break; /* silence gcc -Wswitch (not all enum values handled) */ } fd = CreateFileW(fname->mn_val, acc, share, NULL, disp, attrs, NULL); #else fd = open(fname->mn_val, which & MDB_O_MASK, mode); #endif if (fd == INVALID_HANDLE_VALUE) rc = ErrCode(); #ifndef _WIN32 else { if (which != MDB_O_RDONLY && which != MDB_O_RDWR) { /* Set CLOEXEC if we could not pass it to open() */ if (!MDB_CLOEXEC && (flags = fcntl(fd, F_GETFD)) != -1) (void) fcntl(fd, F_SETFD, flags | FD_CLOEXEC); } if (which == MDB_O_COPY && env->me_psize >= env->me_os_psize) { /* This may require buffer alignment. There is no portable * way to ask how much, so we require OS pagesize alignment. */ # ifdef F_NOCACHE /* __APPLE__ */ (void) fcntl(fd, F_NOCACHE, 1); # elif defined O_DIRECT /* open(...O_DIRECT...) would break on filesystems without * O_DIRECT support (ITS#7682). Try to set it here instead. */ if ((flags = fcntl(fd, F_GETFL)) != -1) (void) fcntl(fd, F_SETFL, flags | O_DIRECT); # endif } } #endif /* !_WIN32 */ *res = fd; return rc; } #ifdef BROKEN_FDATASYNC #include #include #endif /** Further setup required for opening an LMDB environment */ static int ESECT mdb_env_open2(MDB_env *env, int prev) { unsigned int flags = env->me_flags; int i, newenv = 0, rc; MDB_meta meta; #ifdef _WIN32 /* See if we should use QueryLimited */ rc = GetVersion(); if ((rc & 0xff) > 5) env->me_pidquery = MDB_PROCESS_QUERY_LIMITED_INFORMATION; else env->me_pidquery = PROCESS_QUERY_INFORMATION; /* Grab functions we need from NTDLL */ if (!NtCreateSection) { HMODULE h = GetModuleHandleW(L"NTDLL.DLL"); if (!h) return MDB_PROBLEM; NtClose = (NtCloseFunc *)GetProcAddress(h, "NtClose"); if (!NtClose) return MDB_PROBLEM; NtMapViewOfSection = (NtMapViewOfSectionFunc *)GetProcAddress(h, "NtMapViewOfSection"); if (!NtMapViewOfSection) return MDB_PROBLEM; NtCreateSection = (NtCreateSectionFunc *)GetProcAddress(h, "NtCreateSection"); if (!NtCreateSection) return MDB_PROBLEM; } #endif /* _WIN32 */ #ifdef BROKEN_FDATASYNC /* ext3/ext4 fdatasync is broken on some older Linux kernels. * https://lkml.org/lkml/2012/9/3/83 * Kernels after 3.6-rc6 are known good. * https://lkml.org/lkml/2012/9/10/556 * See if the DB is on ext3/ext4, then check for new enough kernel * Kernels 2.6.32.60, 2.6.34.15, 3.2.30, and 3.5.4 are also known * to be patched. */ { struct statfs st; fstatfs(env->me_fd, &st); while (st.f_type == 0xEF53) { struct utsname uts; int i; uname(&uts); if (uts.release[0] < '3') { if (!strncmp(uts.release, "2.6.32.", 7)) { i = atoi(uts.release+7); if (i >= 60) break; /* 2.6.32.60 and newer is OK */ } else if (!strncmp(uts.release, "2.6.34.", 7)) { i = atoi(uts.release+7); if (i >= 15) break; /* 2.6.34.15 and newer is OK */ } } else if (uts.release[0] == '3') { i = atoi(uts.release+2); if (i > 5) break; /* 3.6 and newer is OK */ if (i == 5) { i = atoi(uts.release+4); if (i >= 4) break; /* 3.5.4 and newer is OK */ } else if (i == 2) { i = atoi(uts.release+4); if (i >= 30) break; /* 3.2.30 and newer is OK */ } } else { /* 4.x and newer is OK */ break; } env->me_flags |= MDB_FSYNCONLY; break; } } #endif if ((i = mdb_env_read_header(env, prev, &meta)) != 0) { if (i != ENOENT) return i; DPUTS("new mdbenv"); newenv = 1; env->me_psize = env->me_os_psize; if (env->me_psize > MAX_PAGESIZE) env->me_psize = MAX_PAGESIZE; memset(&meta, 0, sizeof(meta)); mdb_env_init_meta0(env, &meta); meta.mm_mapsize = DEFAULT_MAPSIZE; } else { env->me_psize = meta.mm_psize; } /* Was a mapsize configured? */ if (!env->me_mapsize) { env->me_mapsize = meta.mm_mapsize; } { /* Make sure mapsize >= committed data size. Even when using * mm_mapsize, which could be broken in old files (ITS#7789). */ mdb_size_t minsize = (meta.mm_last_pg + 1) * meta.mm_psize; if (env->me_mapsize < minsize) env->me_mapsize = minsize; } meta.mm_mapsize = env->me_mapsize; if (newenv && !(flags & MDB_FIXEDMAP)) { /* mdb_env_map() may grow the datafile. Write the metapages * first, so the file will be valid if initialization fails. * Except with FIXEDMAP, since we do not yet know mm_address. * We could fill in mm_address later, but then a different * program might end up doing that - one with a memory layout * and map address which does not suit the main program. */ rc = mdb_env_init_meta(env, &meta); if (rc) return rc; newenv = 0; } #ifdef _WIN32 /* For FIXEDMAP, make sure the file is non-empty before we attempt to map it */ if (newenv) { char dummy = 0; DWORD len; rc = WriteFile(env->me_fd, &dummy, 1, &len, NULL); if (!rc) { rc = ErrCode(); return rc; } } #endif rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta.mm_address : NULL); if (rc) return rc; if (newenv) { if (flags & MDB_FIXEDMAP) meta.mm_address = env->me_map; i = mdb_env_init_meta(env, &meta); if (i != MDB_SUCCESS) { return i; } } env->me_maxfree_1pg = (env->me_psize - PAGEHDRSZ) / sizeof(pgno_t) - 1; env->me_nodemax = (((env->me_psize - PAGEHDRSZ) / MDB_MINKEYS) & -2) - sizeof(indx_t); #if !(MDB_MAXKEYSIZE) env->me_maxkey = env->me_nodemax - (NODESIZE + sizeof(MDB_db)); #endif env->me_maxpg = env->me_mapsize / env->me_psize; if (env->me_txns) env->me_txns->mti_txnid = meta.mm_txnid; #if MDB_DEBUG { MDB_meta *meta = mdb_env_pick_meta(env); MDB_db *db = &meta->mm_dbs[MAIN_DBI]; DPRINTF(("opened database version %u, pagesize %u", meta->mm_version, env->me_psize)); DPRINTF(("using meta page %d", (int) (meta->mm_txnid & 1))); DPRINTF(("depth: %u", db->md_depth)); DPRINTF(("entries: %"Yu, db->md_entries)); DPRINTF(("branch pages: %"Yu, db->md_branch_pages)); DPRINTF(("leaf pages: %"Yu, db->md_leaf_pages)); DPRINTF(("overflow pages: %"Yu, db->md_overflow_pages)); DPRINTF(("root: %"Yu, db->md_root)); } #endif return MDB_SUCCESS; } /** Release a reader thread's slot in the reader lock table. * This function is called automatically when a thread exits. * @param[in] ptr This points to the slot in the reader lock table. */ static void mdb_env_reader_dest(void *ptr) { MDB_reader *reader = ptr; #ifndef _WIN32 if (reader->mr_pid == getpid()) /* catch pthread_exit() in child process */ #endif /* We omit the mutex, so do this atomically (i.e. skip mr_txnid) */ reader->mr_pid = 0; } #ifdef _WIN32 /** Junk for arranging thread-specific callbacks on Windows. This is * necessarily platform and compiler-specific. Windows supports up * to 1088 keys. Let's assume nobody opens more than 64 environments * in a single process, for now. They can override this if needed. */ #ifndef MAX_TLS_KEYS #define MAX_TLS_KEYS 64 #endif static pthread_key_t mdb_tls_keys[MAX_TLS_KEYS]; static int mdb_tls_nkeys; static void NTAPI mdb_tls_callback(PVOID module, DWORD reason, PVOID ptr) { int i; switch(reason) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: for (i=0; ime_lfd, 0, 0, 1, 0, &ov)) { rc = ErrCode(); } else { UnlockFile(env->me_lfd, 0, 0, 1, 0); *excl = 0; } } #else { struct flock lock_info; /* The shared lock replaces the existing lock */ memset((void *)&lock_info, 0, sizeof(lock_info)); lock_info.l_type = F_RDLCK; lock_info.l_whence = SEEK_SET; lock_info.l_start = 0; lock_info.l_len = 1; while ((rc = fcntl(env->me_lfd, F_SETLK, &lock_info)) && (rc = ErrCode()) == EINTR) ; *excl = rc ? -1 : 0; /* error may mean we lost the lock */ } #endif return rc; } /** Try to get exclusive lock, otherwise shared. * Maintain *excl = -1: no/unknown lock, 0: shared, 1: exclusive. */ static int ESECT mdb_env_excl_lock(MDB_env *env, int *excl) { int rc = 0; #ifdef _WIN32 if (LockFile(env->me_lfd, 0, 0, 1, 0)) { *excl = 1; } else { OVERLAPPED ov; memset(&ov, 0, sizeof(ov)); if (LockFileEx(env->me_lfd, 0, 0, 1, 0, &ov)) { *excl = 0; } else { rc = ErrCode(); } } #else struct flock lock_info; memset((void *)&lock_info, 0, sizeof(lock_info)); lock_info.l_type = F_WRLCK; lock_info.l_whence = SEEK_SET; lock_info.l_start = 0; lock_info.l_len = 1; while ((rc = fcntl(env->me_lfd, F_SETLK, &lock_info)) && (rc = ErrCode()) == EINTR) ; if (!rc) { *excl = 1; } else # ifndef MDB_USE_POSIX_MUTEX if (*excl < 0) /* always true when MDB_USE_POSIX_MUTEX */ # endif { lock_info.l_type = F_RDLCK; while ((rc = fcntl(env->me_lfd, F_SETLKW, &lock_info)) && (rc = ErrCode()) == EINTR) ; if (rc == 0) *excl = 0; } #endif return rc; } #ifdef MDB_USE_HASH /* * hash_64 - 64 bit Fowler/Noll/Vo-0 FNV-1a hash code * * @(#) $Revision: 5.1 $ * @(#) $Id: hash_64a.c,v 5.1 2009/06/30 09:01:38 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/fnv/RCS/hash_64a.c,v $ * * http://www.isthe.com/chongo/tech/comp/fnv/index.html * *** * * Please do not copyright this code. This code is in the public domain. * * LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO * EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * By: * chongo /\oo/\ * http://www.isthe.com/chongo/ * * Share and Enjoy! :-) */ /** perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer * @param[in] val value to hash * @param[in] len length of value * @return 64 bit hash */ static mdb_hash_t mdb_hash(const void *val, size_t len) { const unsigned char *s = (const unsigned char *) val, *end = s + len; mdb_hash_t hval = 0xcbf29ce484222325ULL; /* * FNV-1a hash each octet of the buffer */ while (s < end) { hval = (hval ^ *s++) * 0x100000001b3ULL; } /* return our new hash value */ return hval; } /** Hash the string and output the encoded hash. * This uses modified RFC1924 Ascii85 encoding to accommodate systems with * very short name limits. We don't care about the encoding being reversible, * we just want to preserve as many bits of the input as possible in a * small printable string. * @param[in] str string to hash * @param[out] encbuf an array of 11 chars to hold the hash */ static const char mdb_a85[]= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"; static void ESECT mdb_pack85(unsigned long long l, char *out) { int i; for (i=0; i<10 && l; i++) { *out++ = mdb_a85[l % 85]; l /= 85; } *out = '\0'; } /** Init #MDB_env.me_mutexname[] except the char which #MUTEXNAME() will set. * Changes to this code must be reflected in #MDB_LOCK_FORMAT. */ static void ESECT mdb_env_mname_init(MDB_env *env) { char *nm = env->me_mutexname; strcpy(nm, MUTEXNAME_PREFIX); mdb_pack85(env->me_txns->mti_mutexid, nm + sizeof(MUTEXNAME_PREFIX)); } /** Return env->me_mutexname after filling in ch ('r'/'w') for convenience */ #define MUTEXNAME(env, ch) ( \ (void) ((env)->me_mutexname[sizeof(MUTEXNAME_PREFIX)-1] = (ch)), \ (env)->me_mutexname) #endif /** Open and/or initialize the lock region for the environment. * @param[in] env The LMDB environment. * @param[in] fname Filename + scratch area, from #mdb_fname_init(). * @param[in] mode The Unix permissions for the file, if we create it. * @param[in,out] excl In -1, out lock type: -1 none, 0 shared, 1 exclusive * @return 0 on success, non-zero on failure. */ static int ESECT mdb_env_setup_locks(MDB_env *env, MDB_name *fname, int mode, int *excl) { #ifdef _WIN32 # define MDB_ERRCODE_ROFS ERROR_WRITE_PROTECT #else # define MDB_ERRCODE_ROFS EROFS #endif #ifdef MDB_USE_SYSV_SEM int semid; union semun semu; #endif int rc; off_t size, rsize; rc = mdb_fopen(env, fname, MDB_O_LOCKS, mode, &env->me_lfd); if (rc) { /* Omit lockfile if read-only env on read-only filesystem */ if (rc == MDB_ERRCODE_ROFS && (env->me_flags & MDB_RDONLY)) { return MDB_SUCCESS; } goto fail; } if (!(env->me_flags & MDB_NOTLS)) { rc = pthread_key_create(&env->me_txkey, mdb_env_reader_dest); if (rc) goto fail; env->me_flags |= MDB_ENV_TXKEY; #ifdef _WIN32 /* Windows TLS callbacks need help finding their TLS info. */ if (mdb_tls_nkeys >= MAX_TLS_KEYS) { rc = MDB_TLS_FULL; goto fail; } mdb_tls_keys[mdb_tls_nkeys++] = env->me_txkey; #endif } /* Try to get exclusive lock. If we succeed, then * nobody is using the lock region and we should initialize it. */ if ((rc = mdb_env_excl_lock(env, excl))) goto fail; #ifdef _WIN32 size = GetFileSize(env->me_lfd, NULL); #else size = lseek(env->me_lfd, 0, SEEK_END); if (size == -1) goto fail_errno; #endif rsize = (env->me_maxreaders-1) * sizeof(MDB_reader) + sizeof(MDB_txninfo); if (size < rsize && *excl > 0) { #ifdef _WIN32 if (SetFilePointer(env->me_lfd, rsize, NULL, FILE_BEGIN) != (DWORD)rsize || !SetEndOfFile(env->me_lfd)) goto fail_errno; #else if (ftruncate(env->me_lfd, rsize) != 0) goto fail_errno; #endif } else { rsize = size; size = rsize - sizeof(MDB_txninfo); env->me_maxreaders = size/sizeof(MDB_reader) + 1; } { #ifdef _WIN32 HANDLE mh; mh = CreateFileMapping(env->me_lfd, NULL, PAGE_READWRITE, 0, 0, NULL); if (!mh) goto fail_errno; env->me_txns = MapViewOfFileEx(mh, FILE_MAP_WRITE, 0, 0, rsize, NULL); CloseHandle(mh); if (!env->me_txns) goto fail_errno; #else void *m = mmap(NULL, rsize, PROT_READ|PROT_WRITE, MAP_SHARED, env->me_lfd, 0); if (m == MAP_FAILED) goto fail_errno; env->me_txns = m; #endif } if (*excl > 0) { #ifdef _WIN32 BY_HANDLE_FILE_INFORMATION stbuf; struct { DWORD volume; DWORD nhigh; DWORD nlow; } idbuf; if (!mdb_sec_inited) { InitializeSecurityDescriptor(&mdb_null_sd, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(&mdb_null_sd, TRUE, 0, FALSE); mdb_all_sa.nLength = sizeof(SECURITY_ATTRIBUTES); mdb_all_sa.bInheritHandle = FALSE; mdb_all_sa.lpSecurityDescriptor = &mdb_null_sd; mdb_sec_inited = 1; } if (!GetFileInformationByHandle(env->me_lfd, &stbuf)) goto fail_errno; idbuf.volume = stbuf.dwVolumeSerialNumber; idbuf.nhigh = stbuf.nFileIndexHigh; idbuf.nlow = stbuf.nFileIndexLow; env->me_txns->mti_mutexid = mdb_hash(&idbuf, sizeof(idbuf)); mdb_env_mname_init(env); env->me_rmutex = CreateMutexA(&mdb_all_sa, FALSE, MUTEXNAME(env, 'r')); if (!env->me_rmutex) goto fail_errno; env->me_wmutex = CreateMutexA(&mdb_all_sa, FALSE, MUTEXNAME(env, 'w')); if (!env->me_wmutex) goto fail_errno; #elif defined(MDB_USE_POSIX_SEM) struct stat stbuf; struct { dev_t dev; ino_t ino; } idbuf; #if defined(__NetBSD__) #define MDB_SHORT_SEMNAMES 1 /* limited to 14 chars */ #endif if (fstat(env->me_lfd, &stbuf)) goto fail_errno; memset(&idbuf, 0, sizeof(idbuf)); idbuf.dev = stbuf.st_dev; idbuf.ino = stbuf.st_ino; env->me_txns->mti_mutexid = mdb_hash(&idbuf, sizeof(idbuf)) #ifdef MDB_SHORT_SEMNAMES /* Max 9 base85-digits. We truncate here instead of in * mdb_env_mname_init() to keep the latter portable. */ % ((mdb_hash_t)85*85*85*85*85*85*85*85*85) #endif ; mdb_env_mname_init(env); /* Clean up after a previous run, if needed: Try to * remove both semaphores before doing anything else. */ sem_unlink(MUTEXNAME(env, 'r')); sem_unlink(MUTEXNAME(env, 'w')); env->me_rmutex = sem_open(MUTEXNAME(env, 'r'), O_CREAT|O_EXCL, mode, 1); if (env->me_rmutex == SEM_FAILED) goto fail_errno; env->me_wmutex = sem_open(MUTEXNAME(env, 'w'), O_CREAT|O_EXCL, mode, 1); if (env->me_wmutex == SEM_FAILED) goto fail_errno; #elif defined(MDB_USE_SYSV_SEM) unsigned short vals[2] = {1, 1}; key_t key = ftok(fname->mn_val, 'M'); /* fname is lockfile path now */ if (key == -1) goto fail_errno; semid = semget(key, 2, (mode & 0777) | IPC_CREAT); if (semid < 0) goto fail_errno; semu.array = vals; if (semctl(semid, 0, SETALL, semu) < 0) goto fail_errno; env->me_txns->mti_semid = semid; env->me_txns->mti_rlocked = 0; env->me_txns->mti_wlocked = 0; #else /* MDB_USE_POSIX_MUTEX: */ pthread_mutexattr_t mattr; /* Solaris needs this before initing a robust mutex. Otherwise * it may skip the init and return EBUSY "seems someone already * inited" or EINVAL "it was inited differently". */ memset(env->me_txns->mti_rmutex, 0, sizeof(*env->me_txns->mti_rmutex)); memset(env->me_txns->mti_wmutex, 0, sizeof(*env->me_txns->mti_wmutex)); if ((rc = pthread_mutexattr_init(&mattr)) != 0) goto fail; rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); #ifdef MDB_ROBUST_SUPPORTED if (!rc) rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST); #endif if (!rc) rc = pthread_mutex_init(env->me_txns->mti_rmutex, &mattr); if (!rc) rc = pthread_mutex_init(env->me_txns->mti_wmutex, &mattr); pthread_mutexattr_destroy(&mattr); if (rc) goto fail; #endif /* _WIN32 || ... */ env->me_txns->mti_magic = MDB_MAGIC; env->me_txns->mti_format = MDB_LOCK_FORMAT; env->me_txns->mti_txnid = 0; env->me_txns->mti_numreaders = 0; } else { #ifdef MDB_USE_SYSV_SEM struct semid_ds buf; #endif if (env->me_txns->mti_magic != MDB_MAGIC) { DPUTS("lock region has invalid magic"); rc = MDB_INVALID; goto fail; } if (env->me_txns->mti_format != MDB_LOCK_FORMAT) { DPRINTF(("lock region has format+version 0x%x, expected 0x%x", env->me_txns->mti_format, MDB_LOCK_FORMAT)); rc = MDB_VERSION_MISMATCH; goto fail; } rc = ErrCode(); if (rc && rc != EACCES && rc != EAGAIN) { goto fail; } #ifdef _WIN32 mdb_env_mname_init(env); env->me_rmutex = OpenMutexA(SYNCHRONIZE, FALSE, MUTEXNAME(env, 'r')); if (!env->me_rmutex) goto fail_errno; env->me_wmutex = OpenMutexA(SYNCHRONIZE, FALSE, MUTEXNAME(env, 'w')); if (!env->me_wmutex) goto fail_errno; #elif defined(MDB_USE_POSIX_SEM) mdb_env_mname_init(env); env->me_rmutex = sem_open(MUTEXNAME(env, 'r'), 0); if (env->me_rmutex == SEM_FAILED) goto fail_errno; env->me_wmutex = sem_open(MUTEXNAME(env, 'w'), 0); if (env->me_wmutex == SEM_FAILED) goto fail_errno; #elif defined(MDB_USE_SYSV_SEM) semid = env->me_txns->mti_semid; semu.buf = &buf; /* check for read access */ if (semctl(semid, 0, IPC_STAT, semu) < 0) goto fail_errno; /* check for write access */ if (semctl(semid, 0, IPC_SET, semu) < 0) goto fail_errno; #endif } #ifdef MDB_USE_SYSV_SEM env->me_rmutex->semid = semid; env->me_wmutex->semid = semid; env->me_rmutex->semnum = 0; env->me_wmutex->semnum = 1; env->me_rmutex->locked = &env->me_txns->mti_rlocked; env->me_wmutex->locked = &env->me_txns->mti_wlocked; #endif return MDB_SUCCESS; fail_errno: rc = ErrCode(); fail: return rc; } /** Only a subset of the @ref mdb_env flags can be changed * at runtime. Changing other flags requires closing the * environment and re-opening it with the new flags. */ #define CHANGEABLE (MDB_NOSYNC|MDB_NOMETASYNC|MDB_MAPASYNC|MDB_NOMEMINIT) #define CHANGELESS (MDB_FIXEDMAP|MDB_NOSUBDIR|MDB_RDONLY| \ MDB_WRITEMAP|MDB_NOTLS|MDB_NOLOCK|MDB_NORDAHEAD|MDB_PREVSNAPSHOT) #if VALID_FLAGS & PERSISTENT_FLAGS & (CHANGEABLE|CHANGELESS) # error "Persistent DB flags & env flags overlap, but both go in mm_flags" #endif int ESECT mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode) { int rc, excl = -1; MDB_name fname; if (env->me_fd!=INVALID_HANDLE_VALUE || (flags & ~(CHANGEABLE|CHANGELESS))) return EINVAL; #ifdef MDB_VL32 if (flags & MDB_WRITEMAP) { /* silently ignore WRITEMAP in 32 bit mode */ flags ^= MDB_WRITEMAP; } if (flags & MDB_FIXEDMAP) { /* cannot support FIXEDMAP */ return EINVAL; } #endif flags |= env->me_flags; rc = mdb_fname_init(path, flags, &fname); if (rc) return rc; #ifdef MDB_VL32 #ifdef _WIN32 env->me_rpmutex = CreateMutex(NULL, FALSE, NULL); if (!env->me_rpmutex) { rc = ErrCode(); goto leave; } #else rc = pthread_mutex_init(&env->me_rpmutex, NULL); if (rc) goto leave; #endif #endif flags |= MDB_ENV_ACTIVE; /* tell mdb_env_close0() to clean up */ if (flags & MDB_RDONLY) { /* silently ignore WRITEMAP when we're only getting read access */ flags &= ~MDB_WRITEMAP; } else { if (!((env->me_free_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX)) && (env->me_dirty_list = calloc(MDB_IDL_UM_SIZE, sizeof(MDB_ID2))))) rc = ENOMEM; } env->me_flags = flags; if (rc) goto leave; #ifdef MDB_VL32 { env->me_rpages = malloc(MDB_ERPAGE_SIZE * sizeof(MDB_ID3)); if (!env->me_rpages) { rc = ENOMEM; goto leave; } env->me_rpages[0].mid = 0; env->me_rpcheck = MDB_ERPAGE_SIZE/2; } #endif env->me_path = strdup(path); env->me_dbxs = calloc(env->me_maxdbs, sizeof(MDB_dbx)); env->me_dbflags = calloc(env->me_maxdbs, sizeof(uint16_t)); env->me_dbiseqs = calloc(env->me_maxdbs, sizeof(unsigned int)); if (!(env->me_dbxs && env->me_path && env->me_dbflags && env->me_dbiseqs)) { rc = ENOMEM; goto leave; } env->me_dbxs[FREE_DBI].md_cmp = mdb_cmp_long; /* aligned MDB_INTEGERKEY */ /* For RDONLY, get lockfile after we know datafile exists */ if (!(flags & (MDB_RDONLY|MDB_NOLOCK))) { rc = mdb_env_setup_locks(env, &fname, mode, &excl); if (rc) goto leave; if ((flags & MDB_PREVSNAPSHOT) && !excl) { rc = EAGAIN; goto leave; } } rc = mdb_fopen(env, &fname, (flags & MDB_RDONLY) ? MDB_O_RDONLY : MDB_O_RDWR, mode, &env->me_fd); if (rc) goto leave; if ((flags & (MDB_RDONLY|MDB_NOLOCK)) == MDB_RDONLY) { rc = mdb_env_setup_locks(env, &fname, mode, &excl); if (rc) goto leave; } if ((rc = mdb_env_open2(env, flags & MDB_PREVSNAPSHOT)) == MDB_SUCCESS) { if (!(flags & (MDB_RDONLY|MDB_WRITEMAP))) { /* Synchronous fd for meta writes. Needed even with * MDB_NOSYNC/MDB_NOMETASYNC, in case these get reset. */ rc = mdb_fopen(env, &fname, MDB_O_META, mode, &env->me_mfd); if (rc) goto leave; } DPRINTF(("opened dbenv %p", (void *) env)); if (excl > 0 && !(flags & MDB_PREVSNAPSHOT)) { rc = mdb_env_share_locks(env, &excl); if (rc) goto leave; } if (!(flags & MDB_RDONLY)) { MDB_txn *txn; int tsize = sizeof(MDB_txn), size = tsize + env->me_maxdbs * (sizeof(MDB_db)+sizeof(MDB_cursor *)+sizeof(unsigned int)+1); if ((env->me_pbuf = calloc(1, env->me_psize)) && (txn = calloc(1, size))) { txn->mt_dbs = (MDB_db *)((char *)txn + tsize); txn->mt_cursors = (MDB_cursor **)(txn->mt_dbs + env->me_maxdbs); txn->mt_dbiseqs = (unsigned int *)(txn->mt_cursors + env->me_maxdbs); txn->mt_dbflags = (unsigned char *)(txn->mt_dbiseqs + env->me_maxdbs); txn->mt_env = env; #ifdef MDB_VL32 txn->mt_rpages = malloc(MDB_TRPAGE_SIZE * sizeof(MDB_ID3)); if (!txn->mt_rpages) { free(txn); rc = ENOMEM; goto leave; } txn->mt_rpages[0].mid = 0; txn->mt_rpcheck = MDB_TRPAGE_SIZE/2; #endif txn->mt_dbxs = env->me_dbxs; txn->mt_flags = MDB_TXN_FINISHED; env->me_txn0 = txn; } else { rc = ENOMEM; } } } leave: if (rc) { mdb_env_close0(env, excl); } mdb_fname_destroy(fname); return rc; } /** Destroy resources from mdb_env_open(), clear our readers & DBIs */ static void ESECT mdb_env_close0(MDB_env *env, int excl) { int i; if (!(env->me_flags & MDB_ENV_ACTIVE)) return; /* Doing this here since me_dbxs may not exist during mdb_env_close */ if (env->me_dbxs) { for (i = env->me_maxdbs; --i >= CORE_DBS; ) free(env->me_dbxs[i].md_name.mv_data); free(env->me_dbxs); } free(env->me_pbuf); free(env->me_dbiseqs); free(env->me_dbflags); free(env->me_path); free(env->me_dirty_list); #ifdef MDB_VL32 if (env->me_txn0 && env->me_txn0->mt_rpages) free(env->me_txn0->mt_rpages); if (env->me_rpages) { MDB_ID3L el = env->me_rpages; unsigned int x; for (x=1; x<=el[0].mid; x++) munmap(el[x].mptr, el[x].mcnt * env->me_psize); free(el); } #endif free(env->me_txn0); mdb_midl_free(env->me_free_pgs); if (env->me_flags & MDB_ENV_TXKEY) { pthread_key_delete(env->me_txkey); #ifdef _WIN32 /* Delete our key from the global list */ for (i=0; ime_txkey) { mdb_tls_keys[i] = mdb_tls_keys[mdb_tls_nkeys-1]; mdb_tls_nkeys--; break; } #endif } if (env->me_map) { #ifdef MDB_VL32 munmap(env->me_map, NUM_METAS*env->me_psize); #else munmap(env->me_map, env->me_mapsize); #endif } if (env->me_mfd != INVALID_HANDLE_VALUE) (void) close(env->me_mfd); if (env->me_fd != INVALID_HANDLE_VALUE) (void) close(env->me_fd); if (env->me_txns) { MDB_PID_T pid = getpid(); /* Clearing readers is done in this function because * me_txkey with its destructor must be disabled first. * * We skip the the reader mutex, so we touch only * data owned by this process (me_close_readers and * our readers), and clear each reader atomically. */ for (i = env->me_close_readers; --i >= 0; ) if (env->me_txns->mti_readers[i].mr_pid == pid) env->me_txns->mti_readers[i].mr_pid = 0; #ifdef _WIN32 if (env->me_rmutex) { CloseHandle(env->me_rmutex); if (env->me_wmutex) CloseHandle(env->me_wmutex); } /* Windows automatically destroys the mutexes when * the last handle closes. */ #elif defined(MDB_USE_POSIX_SEM) if (env->me_rmutex != SEM_FAILED) { sem_close(env->me_rmutex); if (env->me_wmutex != SEM_FAILED) sem_close(env->me_wmutex); /* If we have the filelock: If we are the * only remaining user, clean up semaphores. */ if (excl == 0) mdb_env_excl_lock(env, &excl); if (excl > 0) { sem_unlink(MUTEXNAME(env, 'r')); sem_unlink(MUTEXNAME(env, 'w')); } } #elif defined(MDB_USE_SYSV_SEM) if (env->me_rmutex->semid != -1) { /* If we have the filelock: If we are the * only remaining user, clean up semaphores. */ if (excl == 0) mdb_env_excl_lock(env, &excl); if (excl > 0) semctl(env->me_rmutex->semid, 0, IPC_RMID); } #endif munmap((void *)env->me_txns, (env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo)); } if (env->me_lfd != INVALID_HANDLE_VALUE) { #ifdef _WIN32 if (excl >= 0) { /* Unlock the lockfile. Windows would have unlocked it * after closing anyway, but not necessarily at once. */ UnlockFile(env->me_lfd, 0, 0, 1, 0); } #endif (void) close(env->me_lfd); } #ifdef MDB_VL32 #ifdef _WIN32 if (env->me_fmh) CloseHandle(env->me_fmh); if (env->me_rpmutex) CloseHandle(env->me_rpmutex); #else pthread_mutex_destroy(&env->me_rpmutex); #endif #endif env->me_flags &= ~(MDB_ENV_ACTIVE|MDB_ENV_TXKEY); } void ESECT mdb_env_close(MDB_env *env) { MDB_page *dp; if (env == NULL) return; VGMEMP_DESTROY(env); while ((dp = env->me_dpages) != NULL) { VGMEMP_DEFINED(&dp->mp_next, sizeof(dp->mp_next)); env->me_dpages = dp->mp_next; free(dp); } mdb_env_close0(env, 0); free(env); } /** Compare two items pointing at aligned #mdb_size_t's */ static int mdb_cmp_long(const MDB_val *a, const MDB_val *b) { return (*(mdb_size_t *)a->mv_data < *(mdb_size_t *)b->mv_data) ? -1 : *(mdb_size_t *)a->mv_data > *(mdb_size_t *)b->mv_data; } /** Compare two items pointing at aligned unsigned int's. * * This is also set as #MDB_INTEGERDUP|#MDB_DUPFIXED's #MDB_dbx.%md_dcmp, * but #mdb_cmp_clong() is called instead if the data type is #mdb_size_t. */ static int mdb_cmp_int(const MDB_val *a, const MDB_val *b) { return (*(unsigned int *)a->mv_data < *(unsigned int *)b->mv_data) ? -1 : *(unsigned int *)a->mv_data > *(unsigned int *)b->mv_data; } /** Compare two items pointing at unsigned ints of unknown alignment. * Nodes and keys are guaranteed to be 2-byte aligned. */ static int mdb_cmp_cint(const MDB_val *a, const MDB_val *b) { #if BYTE_ORDER == LITTLE_ENDIAN unsigned short *u, *c; int x; u = (unsigned short *) ((char *) a->mv_data + a->mv_size); c = (unsigned short *) ((char *) b->mv_data + a->mv_size); do { x = *--u - *--c; } while(!x && u > (unsigned short *)a->mv_data); return x; #else unsigned short *u, *c, *end; int x; end = (unsigned short *) ((char *) a->mv_data + a->mv_size); u = (unsigned short *)a->mv_data; c = (unsigned short *)b->mv_data; do { x = *u++ - *c++; } while(!x && u < end); return x; #endif } /** Compare two items lexically */ static int mdb_cmp_memn(const MDB_val *a, const MDB_val *b) { int diff; ssize_t len_diff; unsigned int len; len = a->mv_size; len_diff = (ssize_t) a->mv_size - (ssize_t) b->mv_size; if (len_diff > 0) { len = b->mv_size; len_diff = 1; } diff = memcmp(a->mv_data, b->mv_data, len); return diff ? diff : len_diff<0 ? -1 : len_diff; } /** Compare two items in reverse byte order */ static int mdb_cmp_memnr(const MDB_val *a, const MDB_val *b) { const unsigned char *p1, *p2, *p1_lim; ssize_t len_diff; int diff; p1_lim = (const unsigned char *)a->mv_data; p1 = (const unsigned char *)a->mv_data + a->mv_size; p2 = (const unsigned char *)b->mv_data + b->mv_size; len_diff = (ssize_t) a->mv_size - (ssize_t) b->mv_size; if (len_diff > 0) { p1_lim += len_diff; len_diff = 1; } while (p1 > p1_lim) { diff = *--p1 - *--p2; if (diff) return diff; } return len_diff<0 ? -1 : len_diff; } /** Search for key within a page, using binary search. * Returns the smallest entry larger or equal to the key. * If exactp is non-null, stores whether the found entry was an exact match * in *exactp (1 or 0). * Updates the cursor index with the index of the found entry. * If no entry larger or equal to the key is found, returns NULL. */ static MDB_node * mdb_node_search(MDB_cursor *mc, MDB_val *key, int *exactp) { unsigned int i = 0, nkeys; int low, high; int rc = 0; MDB_page *mp = mc->mc_pg[mc->mc_top]; MDB_node *node = NULL; MDB_val nodekey; MDB_cmp_func *cmp; DKBUF; nkeys = NUMKEYS(mp); DPRINTF(("searching %u keys in %s %spage %"Yu, nkeys, IS_LEAF(mp) ? "leaf" : "branch", IS_SUBP(mp) ? "sub-" : "", mdb_dbg_pgno(mp))); low = IS_LEAF(mp) ? 0 : 1; high = nkeys - 1; cmp = mc->mc_dbx->md_cmp; /* Branch pages have no data, so if using integer keys, * alignment is guaranteed. Use faster mdb_cmp_int. */ if (cmp == mdb_cmp_cint && IS_BRANCH(mp)) { if (NODEPTR(mp, 1)->mn_ksize == sizeof(mdb_size_t)) cmp = mdb_cmp_long; else cmp = mdb_cmp_int; } if (IS_LEAF2(mp)) { nodekey.mv_size = mc->mc_db->md_pad; node = NODEPTR(mp, 0); /* fake */ while (low <= high) { i = (low + high) >> 1; nodekey.mv_data = LEAF2KEY(mp, i, nodekey.mv_size); rc = cmp(key, &nodekey); DPRINTF(("found leaf index %u [%s], rc = %i", i, DKEY(&nodekey), rc)); if (rc == 0) break; if (rc > 0) low = i + 1; else high = i - 1; } } else { while (low <= high) { i = (low + high) >> 1; node = NODEPTR(mp, i); nodekey.mv_size = NODEKSZ(node); nodekey.mv_data = NODEKEY(node); rc = cmp(key, &nodekey); #if MDB_DEBUG if (IS_LEAF(mp)) DPRINTF(("found leaf index %u [%s], rc = %i", i, DKEY(&nodekey), rc)); else DPRINTF(("found branch index %u [%s -> %"Yu"], rc = %i", i, DKEY(&nodekey), NODEPGNO(node), rc)); #endif if (rc == 0) break; if (rc > 0) low = i + 1; else high = i - 1; } } if (rc > 0) { /* Found entry is less than the key. */ i++; /* Skip to get the smallest entry larger than key. */ if (!IS_LEAF2(mp)) node = NODEPTR(mp, i); } if (exactp) *exactp = (rc == 0 && nkeys > 0); /* store the key index */ mc->mc_ki[mc->mc_top] = i; if (i >= nkeys) /* There is no entry larger or equal to the key. */ return NULL; /* nodeptr is fake for LEAF2 */ return node; } #if 0 static void mdb_cursor_adjust(MDB_cursor *mc, func) { MDB_cursor *m2; for (m2 = mc->mc_txn->mt_cursors[mc->mc_dbi]; m2; m2=m2->mc_next) { if (m2->mc_pg[m2->mc_top] == mc->mc_pg[mc->mc_top]) { func(mc, m2); } } } #endif /** Pop a page off the top of the cursor's stack. */ static void mdb_cursor_pop(MDB_cursor *mc) { if (mc->mc_snum) { DPRINTF(("popping page %"Yu" off db %d cursor %p", mc->mc_pg[mc->mc_top]->mp_pgno, DDBI(mc), (void *) mc)); mc->mc_snum--; if (mc->mc_snum) { mc->mc_top--; } else { mc->mc_flags &= ~C_INITIALIZED; } } } /** Push a page onto the top of the cursor's stack. * Set #MDB_TXN_ERROR on failure. */ static int mdb_cursor_push(MDB_cursor *mc, MDB_page *mp) { DPRINTF(("pushing page %"Yu" on db %d cursor %p", mp->mp_pgno, DDBI(mc), (void *) mc)); if (mc->mc_snum >= CURSOR_STACK) { mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return MDB_CURSOR_FULL; } mc->mc_top = mc->mc_snum++; mc->mc_pg[mc->mc_top] = mp; mc->mc_ki[mc->mc_top] = 0; return MDB_SUCCESS; } #ifdef MDB_VL32 /** Map a read-only page. * There are two levels of tracking in use, a per-txn list and a per-env list. * ref'ing and unref'ing the per-txn list is faster since it requires no * locking. Pages are cached in the per-env list for global reuse, and a lock * is required. Pages are not immediately unmapped when their refcnt goes to * zero; they hang around in case they will be reused again soon. * * When the per-txn list gets full, all pages with refcnt=0 are purged from the * list and their refcnts in the per-env list are decremented. * * When the per-env list gets full, all pages with refcnt=0 are purged from the * list and their pages are unmapped. * * @note "full" means the list has reached its respective rpcheck threshold. * This threshold slowly raises if no pages could be purged on a given check, * and returns to its original value when enough pages were purged. * * If purging doesn't free any slots, filling the per-txn list will return * MDB_TXN_FULL, and filling the per-env list returns MDB_MAP_FULL. * * Reference tracking in a txn is imperfect, pages can linger with non-zero * refcnt even without active references. It was deemed to be too invasive * to add unrefs in every required location. However, all pages are unref'd * at the end of the transaction. This guarantees that no stale references * linger in the per-env list. * * Usually we map chunks of 16 pages at a time, but if an overflow page begins * at the tail of the chunk we extend the chunk to include the entire overflow * page. Unfortunately, pages can be turned into overflow pages after their * chunk was already mapped. In that case we must remap the chunk if the * overflow page is referenced. If the chunk's refcnt is 0 we can just remap * it, otherwise we temporarily map a new chunk just for the overflow page. * * @note this chunk handling means we cannot guarantee that a data item * returned from the DB will stay alive for the duration of the transaction: * We unref pages as soon as a cursor moves away from the page * A subsequent op may cause a purge, which may unmap any unref'd chunks * The caller must copy the data if it must be used later in the same txn. * * Also - our reference counting revolves around cursors, but overflow pages * aren't pointed to by a cursor's page stack. We have to remember them * explicitly, in the added mc_ovpg field. A single cursor can only hold a * reference to one overflow page at a time. * * @param[in] txn the transaction for this access. * @param[in] pgno the page number for the page to retrieve. * @param[out] ret address of a pointer where the page's address will be stored. * @return 0 on success, non-zero on failure. */ static int mdb_rpage_get(MDB_txn *txn, pgno_t pg0, MDB_page **ret) { MDB_env *env = txn->mt_env; MDB_page *p; MDB_ID3L tl = txn->mt_rpages; MDB_ID3L el = env->me_rpages; MDB_ID3 id3; unsigned x, rem; pgno_t pgno; int rc, retries = 1; #ifdef _WIN32 LARGE_INTEGER off; SIZE_T len; #define SET_OFF(off,val) off.QuadPart = val #define MAP(rc,env,addr,len,off) \ addr = NULL; \ rc = NtMapViewOfSection(env->me_fmh, GetCurrentProcess(), &addr, 0, \ len, &off, &len, ViewUnmap, (env->me_flags & MDB_RDONLY) ? 0 : MEM_RESERVE, PAGE_READONLY); \ if (rc) rc = mdb_nt2win32(rc) #else off_t off; size_t len; #define SET_OFF(off,val) off = val #define MAP(rc,env,addr,len,off) \ addr = mmap(NULL, len, PROT_READ, MAP_SHARED, env->me_fd, off); \ rc = (addr == MAP_FAILED) ? errno : 0 #endif /* remember the offset of the actual page number, so we can * return the correct pointer at the end. */ rem = pg0 & (MDB_RPAGE_CHUNK-1); pgno = pg0 ^ rem; id3.mid = 0; x = mdb_mid3l_search(tl, pgno); if (x <= tl[0].mid && tl[x].mid == pgno) { if (x != tl[0].mid && tl[x+1].mid == pg0) x++; /* check for overflow size */ p = (MDB_page *)((char *)tl[x].mptr + rem * env->me_psize); if (IS_OVERFLOW(p) && p->mp_pages + rem > tl[x].mcnt) { id3.mcnt = p->mp_pages + rem; len = id3.mcnt * env->me_psize; SET_OFF(off, pgno * env->me_psize); MAP(rc, env, id3.mptr, len, off); if (rc) return rc; /* check for local-only page */ if (rem) { mdb_tassert(txn, tl[x].mid != pg0); /* hope there's room to insert this locally. * setting mid here tells later code to just insert * this id3 instead of searching for a match. */ id3.mid = pg0; goto notlocal; } else { /* ignore the mapping we got from env, use new one */ tl[x].mptr = id3.mptr; tl[x].mcnt = id3.mcnt; /* if no active ref, see if we can replace in env */ if (!tl[x].mref) { unsigned i; pthread_mutex_lock(&env->me_rpmutex); i = mdb_mid3l_search(el, tl[x].mid); if (el[i].mref == 1) { /* just us, replace it */ munmap(el[i].mptr, el[i].mcnt * env->me_psize); el[i].mptr = tl[x].mptr; el[i].mcnt = tl[x].mcnt; } else { /* there are others, remove ourself */ el[i].mref--; } pthread_mutex_unlock(&env->me_rpmutex); } } } id3.mptr = tl[x].mptr; id3.mcnt = tl[x].mcnt; tl[x].mref++; goto ok; } notlocal: if (tl[0].mid >= MDB_TRPAGE_MAX - txn->mt_rpcheck) { unsigned i, y; /* purge unref'd pages from our list and unref in env */ pthread_mutex_lock(&env->me_rpmutex); retry: y = 0; for (i=1; i<=tl[0].mid; i++) { if (!tl[i].mref) { if (!y) y = i; /* tmp overflow pages don't go to env */ if (tl[i].mid & (MDB_RPAGE_CHUNK-1)) { munmap(tl[i].mptr, tl[i].mcnt * env->me_psize); continue; } x = mdb_mid3l_search(el, tl[i].mid); el[x].mref--; } } pthread_mutex_unlock(&env->me_rpmutex); if (!y) { /* we didn't find any unref'd chunks. * if we're out of room, fail. */ if (tl[0].mid >= MDB_TRPAGE_MAX) return MDB_TXN_FULL; /* otherwise, raise threshold for next time around * and let this go. */ txn->mt_rpcheck /= 2; } else { /* we found some unused; consolidate the list */ for (i=y+1; i<= tl[0].mid; i++) if (tl[i].mref) tl[y++] = tl[i]; tl[0].mid = y-1; /* decrease the check threshold toward its original value */ if (!txn->mt_rpcheck) txn->mt_rpcheck = 1; while (txn->mt_rpcheck < tl[0].mid && txn->mt_rpcheck < MDB_TRPAGE_SIZE/2) txn->mt_rpcheck *= 2; } } if (tl[0].mid < MDB_TRPAGE_SIZE) { id3.mref = 1; if (id3.mid) goto found; /* don't map past last written page in read-only envs */ if ((env->me_flags & MDB_RDONLY) && pgno + MDB_RPAGE_CHUNK-1 > txn->mt_last_pgno) id3.mcnt = txn->mt_last_pgno + 1 - pgno; else id3.mcnt = MDB_RPAGE_CHUNK; len = id3.mcnt * env->me_psize; id3.mid = pgno; /* search for page in env */ pthread_mutex_lock(&env->me_rpmutex); x = mdb_mid3l_search(el, pgno); if (x <= el[0].mid && el[x].mid == pgno) { id3.mptr = el[x].mptr; id3.mcnt = el[x].mcnt; /* check for overflow size */ p = (MDB_page *)((char *)id3.mptr + rem * env->me_psize); if (IS_OVERFLOW(p) && p->mp_pages + rem > id3.mcnt) { id3.mcnt = p->mp_pages + rem; len = id3.mcnt * env->me_psize; SET_OFF(off, pgno * env->me_psize); MAP(rc, env, id3.mptr, len, off); if (rc) goto fail; if (!el[x].mref) { munmap(el[x].mptr, env->me_psize * el[x].mcnt); el[x].mptr = id3.mptr; el[x].mcnt = id3.mcnt; } else { id3.mid = pg0; pthread_mutex_unlock(&env->me_rpmutex); goto found; } } el[x].mref++; pthread_mutex_unlock(&env->me_rpmutex); goto found; } if (el[0].mid >= MDB_ERPAGE_MAX - env->me_rpcheck) { /* purge unref'd pages */ unsigned i, y = 0; for (i=1; i<=el[0].mid; i++) { if (!el[i].mref) { if (!y) y = i; munmap(el[i].mptr, env->me_psize * el[i].mcnt); } } if (!y) { if (retries) { /* see if we can unref some local pages */ retries--; id3.mid = 0; goto retry; } if (el[0].mid >= MDB_ERPAGE_MAX) { pthread_mutex_unlock(&env->me_rpmutex); return MDB_MAP_FULL; } env->me_rpcheck /= 2; } else { for (i=y+1; i<= el[0].mid; i++) if (el[i].mref) el[y++] = el[i]; el[0].mid = y-1; if (!env->me_rpcheck) env->me_rpcheck = 1; while (env->me_rpcheck < el[0].mid && env->me_rpcheck < MDB_ERPAGE_SIZE/2) env->me_rpcheck *= 2; } } SET_OFF(off, pgno * env->me_psize); MAP(rc, env, id3.mptr, len, off); if (rc) { fail: pthread_mutex_unlock(&env->me_rpmutex); return rc; } /* check for overflow size */ p = (MDB_page *)((char *)id3.mptr + rem * env->me_psize); if (IS_OVERFLOW(p) && p->mp_pages + rem > id3.mcnt) { id3.mcnt = p->mp_pages + rem; munmap(id3.mptr, len); len = id3.mcnt * env->me_psize; MAP(rc, env, id3.mptr, len, off); if (rc) goto fail; } mdb_mid3l_insert(el, &id3); pthread_mutex_unlock(&env->me_rpmutex); found: mdb_mid3l_insert(tl, &id3); } else { return MDB_TXN_FULL; } ok: p = (MDB_page *)((char *)id3.mptr + rem * env->me_psize); #if MDB_DEBUG /* we don't need this check any more */ if (IS_OVERFLOW(p)) { mdb_tassert(txn, p->mp_pages + rem <= id3.mcnt); } #endif *ret = p; return MDB_SUCCESS; } #endif /** Find the address of the page corresponding to a given page number. * Set #MDB_TXN_ERROR on failure. * @param[in] mc the cursor accessing the page. * @param[in] pgno the page number for the page to retrieve. * @param[out] ret address of a pointer where the page's address will be stored. * @param[out] lvl dirty_list inheritance level of found page. 1=current txn, 0=mapped page. * @return 0 on success, non-zero on failure. */ static int mdb_page_get(MDB_cursor *mc, pgno_t pgno, MDB_page **ret, int *lvl) { MDB_txn *txn = mc->mc_txn; MDB_page *p = NULL; int level; if (! (mc->mc_flags & (C_ORIG_RDONLY|C_WRITEMAP))) { MDB_txn *tx2 = txn; level = 1; do { MDB_ID2L dl = tx2->mt_u.dirty_list; unsigned x; /* Spilled pages were dirtied in this txn and flushed * because the dirty list got full. Bring this page * back in from the map (but don't unspill it here, * leave that unless page_touch happens again). */ if (tx2->mt_spill_pgs) { MDB_ID pn = pgno << 1; x = mdb_midl_search(tx2->mt_spill_pgs, pn); if (x <= tx2->mt_spill_pgs[0] && tx2->mt_spill_pgs[x] == pn) { goto mapped; } } if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { p = dl[x].mptr; goto done; } } level++; } while ((tx2 = tx2->mt_parent) != NULL); } if (pgno >= txn->mt_next_pgno) { DPRINTF(("page %"Yu" not found", pgno)); txn->mt_flags |= MDB_TXN_ERROR; return MDB_PAGE_NOTFOUND; } level = 0; mapped: { #ifdef MDB_VL32 int rc = mdb_rpage_get(txn, pgno, &p); if (rc) { txn->mt_flags |= MDB_TXN_ERROR; return rc; } #else MDB_env *env = txn->mt_env; p = (MDB_page *)(env->me_map + env->me_psize * pgno); #endif } done: *ret = p; if (lvl) *lvl = level; return MDB_SUCCESS; } /** Finish #mdb_page_search() / #mdb_page_search_lowest(). * The cursor is at the root page, set up the rest of it. */ static int mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int flags) { MDB_page *mp = mc->mc_pg[mc->mc_top]; int rc; DKBUF; while (IS_BRANCH(mp)) { MDB_node *node; indx_t i; DPRINTF(("branch page %"Yu" has %u keys", mp->mp_pgno, NUMKEYS(mp))); /* Don't assert on branch pages in the FreeDB. We can get here * while in the process of rebalancing a FreeDB branch page; we must * let that proceed. ITS#8336 */ mdb_cassert(mc, !mc->mc_dbi || NUMKEYS(mp) > 1); DPRINTF(("found index 0 to page %"Yu, NODEPGNO(NODEPTR(mp, 0)))); if (flags & (MDB_PS_FIRST|MDB_PS_LAST)) { i = 0; if (flags & MDB_PS_LAST) { i = NUMKEYS(mp) - 1; /* if already init'd, see if we're already in right place */ if (mc->mc_flags & C_INITIALIZED) { if (mc->mc_ki[mc->mc_top] == i) { mc->mc_top = mc->mc_snum++; mp = mc->mc_pg[mc->mc_top]; goto ready; } } } } else { int exact; node = mdb_node_search(mc, key, &exact); if (node == NULL) i = NUMKEYS(mp) - 1; else { i = mc->mc_ki[mc->mc_top]; if (!exact) { mdb_cassert(mc, i > 0); i--; } } DPRINTF(("following index %u for key [%s]", i, DKEY(key))); } mdb_cassert(mc, i < NUMKEYS(mp)); node = NODEPTR(mp, i); if ((rc = mdb_page_get(mc, NODEPGNO(node), &mp, NULL)) != 0) return rc; mc->mc_ki[mc->mc_top] = i; if ((rc = mdb_cursor_push(mc, mp))) return rc; ready: if (flags & MDB_PS_MODIFY) { if ((rc = mdb_page_touch(mc)) != 0) return rc; mp = mc->mc_pg[mc->mc_top]; } } if (!IS_LEAF(mp)) { DPRINTF(("internal error, index points to a %02X page!?", mp->mp_flags)); mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return MDB_CORRUPTED; } DPRINTF(("found leaf page %"Yu" for key [%s]", mp->mp_pgno, key ? DKEY(key) : "null")); mc->mc_flags |= C_INITIALIZED; mc->mc_flags &= ~C_EOF; return MDB_SUCCESS; } /** Search for the lowest key under the current branch page. * This just bypasses a NUMKEYS check in the current page * before calling mdb_page_search_root(), because the callers * are all in situations where the current page is known to * be underfilled. */ static int mdb_page_search_lowest(MDB_cursor *mc) { MDB_page *mp = mc->mc_pg[mc->mc_top]; MDB_node *node = NODEPTR(mp, 0); int rc; if ((rc = mdb_page_get(mc, NODEPGNO(node), &mp, NULL)) != 0) return rc; mc->mc_ki[mc->mc_top] = 0; if ((rc = mdb_cursor_push(mc, mp))) return rc; return mdb_page_search_root(mc, NULL, MDB_PS_FIRST); } /** Search for the page a given key should be in. * Push it and its parent pages on the cursor stack. * @param[in,out] mc the cursor for this operation. * @param[in] key the key to search for, or NULL for first/last page. * @param[in] flags If MDB_PS_MODIFY is set, visited pages in the DB * are touched (updated with new page numbers). * If MDB_PS_FIRST or MDB_PS_LAST is set, find first or last leaf. * This is used by #mdb_cursor_first() and #mdb_cursor_last(). * If MDB_PS_ROOTONLY set, just fetch root node, no further lookups. * @return 0 on success, non-zero on failure. */ static int mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags) { int rc; pgno_t root; /* Make sure the txn is still viable, then find the root from * the txn's db table and set it as the root of the cursor's stack. */ if (mc->mc_txn->mt_flags & MDB_TXN_BLOCKED) { DPUTS("transaction may not be used now"); return MDB_BAD_TXN; } else { /* Make sure we're using an up-to-date root */ if (*mc->mc_dbflag & DB_STALE) { MDB_cursor mc2; if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi)) return MDB_BAD_DBI; mdb_cursor_init(&mc2, mc->mc_txn, MAIN_DBI, NULL); rc = mdb_page_search(&mc2, &mc->mc_dbx->md_name, 0); if (rc) return rc; { MDB_val data; int exact = 0; uint16_t flags; MDB_node *leaf = mdb_node_search(&mc2, &mc->mc_dbx->md_name, &exact); if (!exact) return MDB_NOTFOUND; if ((leaf->mn_flags & (F_DUPDATA|F_SUBDATA)) != F_SUBDATA) return MDB_INCOMPATIBLE; /* not a named DB */ rc = mdb_node_read(&mc2, leaf, &data); if (rc) return rc; memcpy(&flags, ((char *) data.mv_data + offsetof(MDB_db, md_flags)), sizeof(uint16_t)); /* The txn may not know this DBI, or another process may * have dropped and recreated the DB with other flags. */ if ((mc->mc_db->md_flags & PERSISTENT_FLAGS) != flags) return MDB_INCOMPATIBLE; memcpy(mc->mc_db, data.mv_data, sizeof(MDB_db)); } *mc->mc_dbflag &= ~DB_STALE; } root = mc->mc_db->md_root; if (root == P_INVALID) { /* Tree is empty. */ DPUTS("tree is empty"); return MDB_NOTFOUND; } } mdb_cassert(mc, root > 1); if (!mc->mc_pg[0] || mc->mc_pg[0]->mp_pgno != root) { #ifdef MDB_VL32 if (mc->mc_pg[0]) MDB_PAGE_UNREF(mc->mc_txn, mc->mc_pg[0]); #endif if ((rc = mdb_page_get(mc, root, &mc->mc_pg[0], NULL)) != 0) return rc; } #ifdef MDB_VL32 { int i; for (i=1; imc_snum; i++) MDB_PAGE_UNREF(mc->mc_txn, mc->mc_pg[i]); } #endif mc->mc_snum = 1; mc->mc_top = 0; DPRINTF(("db %d root page %"Yu" has flags 0x%X", DDBI(mc), root, mc->mc_pg[0]->mp_flags)); if (flags & MDB_PS_MODIFY) { if ((rc = mdb_page_touch(mc))) return rc; } if (flags & MDB_PS_ROOTONLY) return MDB_SUCCESS; return mdb_page_search_root(mc, key, flags); } static int mdb_ovpage_free(MDB_cursor *mc, MDB_page *mp) { MDB_txn *txn = mc->mc_txn; pgno_t pg = mp->mp_pgno; unsigned x = 0, ovpages = mp->mp_pages; MDB_env *env = txn->mt_env; MDB_IDL sl = txn->mt_spill_pgs; MDB_ID pn = pg << 1; int rc; DPRINTF(("free ov page %"Yu" (%d)", pg, ovpages)); /* If the page is dirty or on the spill list we just acquired it, * so we should give it back to our current free list, if any. * Otherwise put it onto the list of pages we freed in this txn. * * Won't create me_pghead: me_pglast must be inited along with it. * Unsupported in nested txns: They would need to hide the page * range in ancestor txns' dirty and spilled lists. */ if (env->me_pghead && !txn->mt_parent && ((mp->mp_flags & P_DIRTY) || (sl && (x = mdb_midl_search(sl, pn)) <= sl[0] && sl[x] == pn))) { unsigned i, j; pgno_t *mop; MDB_ID2 *dl, ix, iy; rc = mdb_midl_need(&env->me_pghead, ovpages); if (rc) return rc; if (!(mp->mp_flags & P_DIRTY)) { /* This page is no longer spilled */ if (x == sl[0]) sl[0]--; else sl[x] |= 1; goto release; } /* Remove from dirty list */ dl = txn->mt_u.dirty_list; x = dl[0].mid--; for (ix = dl[x]; ix.mptr != mp; ix = iy) { if (x > 1) { x--; iy = dl[x]; dl[x] = ix; } else { mdb_cassert(mc, x > 1); j = ++(dl[0].mid); dl[j] = ix; /* Unsorted. OK when MDB_TXN_ERROR. */ txn->mt_flags |= MDB_TXN_ERROR; return MDB_PROBLEM; } } txn->mt_dirty_room++; if (!(env->me_flags & MDB_WRITEMAP)) mdb_dpage_free(env, mp); release: /* Insert in me_pghead */ mop = env->me_pghead; j = mop[0] + ovpages; for (i = mop[0]; i && mop[i] < pg; i--) mop[j--] = mop[i]; while (j>i) mop[j--] = pg++; mop[0] += ovpages; } else { rc = mdb_midl_append_range(&txn->mt_free_pgs, pg, ovpages); if (rc) return rc; } #ifdef MDB_VL32 if (mc->mc_ovpg == mp) mc->mc_ovpg = NULL; #endif mc->mc_db->md_overflow_pages -= ovpages; return 0; } /** Return the data associated with a given node. * @param[in] mc The cursor for this operation. * @param[in] leaf The node being read. * @param[out] data Updated to point to the node's data. * @return 0 on success, non-zero on failure. */ static int mdb_node_read(MDB_cursor *mc, MDB_node *leaf, MDB_val *data) { MDB_page *omp; /* overflow page */ pgno_t pgno; int rc; if (MC_OVPG(mc)) { MDB_PAGE_UNREF(mc->mc_txn, MC_OVPG(mc)); MC_SET_OVPG(mc, NULL); } if (!F_ISSET(leaf->mn_flags, F_BIGDATA)) { data->mv_size = NODEDSZ(leaf); data->mv_data = NODEDATA(leaf); return MDB_SUCCESS; } /* Read overflow data. */ data->mv_size = NODEDSZ(leaf); memcpy(&pgno, NODEDATA(leaf), sizeof(pgno)); if ((rc = mdb_page_get(mc, pgno, &omp, NULL)) != 0) { DPRINTF(("read overflow page %"Yu" failed", pgno)); return rc; } data->mv_data = METADATA(omp); MC_SET_OVPG(mc, omp); return MDB_SUCCESS; } int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data) { MDB_cursor mc; MDB_xcursor mx; int exact = 0, rc; DKBUF; DPRINTF(("===> get db %u key [%s]", dbi, DKEY(key))); if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; mdb_cursor_init(&mc, txn, dbi, &mx); rc = mdb_cursor_set(&mc, key, data, MDB_SET, &exact); /* unref all the pages when MDB_VL32 - caller must copy the data * before doing anything else */ MDB_CURSOR_UNREF(&mc, 1); return rc; } /** Find a sibling for a page. * Replaces the page at the top of the cursor's stack with the * specified sibling, if one exists. * @param[in] mc The cursor for this operation. * @param[in] move_right Non-zero if the right sibling is requested, * otherwise the left sibling. * @return 0 on success, non-zero on failure. */ static int mdb_cursor_sibling(MDB_cursor *mc, int move_right) { int rc; MDB_node *indx; MDB_page *mp; #ifdef MDB_VL32 MDB_page *op; #endif if (mc->mc_snum < 2) { return MDB_NOTFOUND; /* root has no siblings */ } #ifdef MDB_VL32 op = mc->mc_pg[mc->mc_top]; #endif mdb_cursor_pop(mc); DPRINTF(("parent page is page %"Yu", index %u", mc->mc_pg[mc->mc_top]->mp_pgno, mc->mc_ki[mc->mc_top])); if (move_right ? (mc->mc_ki[mc->mc_top] + 1u >= NUMKEYS(mc->mc_pg[mc->mc_top])) : (mc->mc_ki[mc->mc_top] == 0)) { DPRINTF(("no more keys left, moving to %s sibling", move_right ? "right" : "left")); if ((rc = mdb_cursor_sibling(mc, move_right)) != MDB_SUCCESS) { /* undo cursor_pop before returning */ mc->mc_top++; mc->mc_snum++; return rc; } } else { if (move_right) mc->mc_ki[mc->mc_top]++; else mc->mc_ki[mc->mc_top]--; DPRINTF(("just moving to %s index key %u", move_right ? "right" : "left", mc->mc_ki[mc->mc_top])); } mdb_cassert(mc, IS_BRANCH(mc->mc_pg[mc->mc_top])); MDB_PAGE_UNREF(mc->mc_txn, op); indx = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if ((rc = mdb_page_get(mc, NODEPGNO(indx), &mp, NULL)) != 0) { /* mc will be inconsistent if caller does mc_snum++ as above */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); return rc; } mdb_cursor_push(mc, mp); if (!move_right) mc->mc_ki[mc->mc_top] = NUMKEYS(mp)-1; return MDB_SUCCESS; } /** Move the cursor to the next data item. */ static int mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) { MDB_page *mp; MDB_node *leaf; int rc; if ((mc->mc_flags & C_DEL && op == MDB_NEXT_DUP)) return MDB_NOTFOUND; if (!(mc->mc_flags & C_INITIALIZED)) return mdb_cursor_first(mc, key, data); mp = mc->mc_pg[mc->mc_top]; if (mc->mc_flags & C_EOF) { if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mp)-1) return MDB_NOTFOUND; mc->mc_flags ^= C_EOF; } if (mc->mc_db->md_flags & MDB_DUPSORT) { leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (op == MDB_NEXT || op == MDB_NEXT_DUP) { rc = mdb_cursor_next(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_NEXT); if (op != MDB_NEXT || rc != MDB_NOTFOUND) { if (rc == MDB_SUCCESS) MDB_GET_KEY(leaf, key); return rc; } } else { MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0); } } else { mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if (op == MDB_NEXT_DUP) return MDB_NOTFOUND; } } DPRINTF(("cursor_next: top page is %"Yu" in cursor %p", mdb_dbg_pgno(mp), (void *) mc)); if (mc->mc_flags & C_DEL) { mc->mc_flags ^= C_DEL; goto skip; } if (mc->mc_ki[mc->mc_top] + 1u >= NUMKEYS(mp)) { DPUTS("=====> move to next sibling page"); if ((rc = mdb_cursor_sibling(mc, 1)) != MDB_SUCCESS) { mc->mc_flags |= C_EOF; return rc; } mp = mc->mc_pg[mc->mc_top]; DPRINTF(("next page is %"Yu", key index %u", mp->mp_pgno, mc->mc_ki[mc->mc_top])); } else mc->mc_ki[mc->mc_top]++; skip: DPRINTF(("==> cursor points to page %"Yu" with %u keys, key index %u", mdb_dbg_pgno(mp), NUMKEYS(mp), mc->mc_ki[mc->mc_top])); if (IS_LEAF2(mp)) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); return MDB_SUCCESS; } mdb_cassert(mc, IS_LEAF(mp)); leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); } if (data) { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc != MDB_SUCCESS) return rc; } } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } /** Move the cursor to the previous data item. */ static int mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) { MDB_page *mp; MDB_node *leaf; int rc; if (!(mc->mc_flags & C_INITIALIZED)) { rc = mdb_cursor_last(mc, key, data); if (rc) return rc; mc->mc_ki[mc->mc_top]++; } mp = mc->mc_pg[mc->mc_top]; if (mc->mc_db->md_flags & MDB_DUPSORT) { leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (op == MDB_PREV || op == MDB_PREV_DUP) { rc = mdb_cursor_prev(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_PREV); if (op != MDB_PREV || rc != MDB_NOTFOUND) { if (rc == MDB_SUCCESS) { MDB_GET_KEY(leaf, key); mc->mc_flags &= ~C_EOF; } return rc; } } else { MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0); } } else { mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if (op == MDB_PREV_DUP) return MDB_NOTFOUND; } } DPRINTF(("cursor_prev: top page is %"Yu" in cursor %p", mdb_dbg_pgno(mp), (void *) mc)); mc->mc_flags &= ~(C_EOF|C_DEL); if (mc->mc_ki[mc->mc_top] == 0) { DPUTS("=====> move to prev sibling page"); if ((rc = mdb_cursor_sibling(mc, 0)) != MDB_SUCCESS) { return rc; } mp = mc->mc_pg[mc->mc_top]; mc->mc_ki[mc->mc_top] = NUMKEYS(mp) - 1; DPRINTF(("prev page is %"Yu", key index %u", mp->mp_pgno, mc->mc_ki[mc->mc_top])); } else mc->mc_ki[mc->mc_top]--; DPRINTF(("==> cursor points to page %"Yu" with %u keys, key index %u", mdb_dbg_pgno(mp), NUMKEYS(mp), mc->mc_ki[mc->mc_top])); if (IS_LEAF2(mp)) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); return MDB_SUCCESS; } mdb_cassert(mc, IS_LEAF(mp)); leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); } if (data) { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { rc = mdb_cursor_last(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc != MDB_SUCCESS) return rc; } } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } /** Set the cursor on a specific data item. */ static int mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op, int *exactp) { int rc; MDB_page *mp; MDB_node *leaf = NULL; DKBUF; if (key->mv_size == 0) return MDB_BAD_VALSIZE; if (mc->mc_xcursor) { MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0); mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); } /* See if we're already on the right page */ if (mc->mc_flags & C_INITIALIZED) { MDB_val nodekey; mp = mc->mc_pg[mc->mc_top]; if (!NUMKEYS(mp)) { mc->mc_ki[mc->mc_top] = 0; return MDB_NOTFOUND; } if (mp->mp_flags & P_LEAF2) { nodekey.mv_size = mc->mc_db->md_pad; nodekey.mv_data = LEAF2KEY(mp, 0, nodekey.mv_size); } else { leaf = NODEPTR(mp, 0); MDB_GET_KEY2(leaf, nodekey); } rc = mc->mc_dbx->md_cmp(key, &nodekey); if (rc == 0) { /* Probably happens rarely, but first node on the page * was the one we wanted. */ mc->mc_ki[mc->mc_top] = 0; if (exactp) *exactp = 1; goto set1; } if (rc > 0) { unsigned int i; unsigned int nkeys = NUMKEYS(mp); if (nkeys > 1) { if (mp->mp_flags & P_LEAF2) { nodekey.mv_data = LEAF2KEY(mp, nkeys-1, nodekey.mv_size); } else { leaf = NODEPTR(mp, nkeys-1); MDB_GET_KEY2(leaf, nodekey); } rc = mc->mc_dbx->md_cmp(key, &nodekey); if (rc == 0) { /* last node was the one we wanted */ mc->mc_ki[mc->mc_top] = nkeys-1; if (exactp) *exactp = 1; goto set1; } if (rc < 0) { if (mc->mc_ki[mc->mc_top] < NUMKEYS(mp)) { /* This is definitely the right page, skip search_page */ if (mp->mp_flags & P_LEAF2) { nodekey.mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], nodekey.mv_size); } else { leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); MDB_GET_KEY2(leaf, nodekey); } rc = mc->mc_dbx->md_cmp(key, &nodekey); if (rc == 0) { /* current node was the one we wanted */ if (exactp) *exactp = 1; goto set1; } } rc = 0; mc->mc_flags &= ~C_EOF; goto set2; } } /* If any parents have right-sibs, search. * Otherwise, there's nothing further. */ for (i=0; imc_top; i++) if (mc->mc_ki[i] < NUMKEYS(mc->mc_pg[i])-1) break; if (i == mc->mc_top) { /* There are no other pages */ mc->mc_ki[mc->mc_top] = nkeys; return MDB_NOTFOUND; } } if (!mc->mc_top) { /* There are no other pages */ mc->mc_ki[mc->mc_top] = 0; if (op == MDB_SET_RANGE && !exactp) { rc = 0; goto set1; } else return MDB_NOTFOUND; } } else { mc->mc_pg[0] = 0; } rc = mdb_page_search(mc, key, 0); if (rc != MDB_SUCCESS) return rc; mp = mc->mc_pg[mc->mc_top]; mdb_cassert(mc, IS_LEAF(mp)); set2: leaf = mdb_node_search(mc, key, exactp); if (exactp != NULL && !*exactp) { /* MDB_SET specified and not an exact match. */ return MDB_NOTFOUND; } if (leaf == NULL) { DPUTS("===> inexact leaf not found, goto sibling"); if ((rc = mdb_cursor_sibling(mc, 1)) != MDB_SUCCESS) { mc->mc_flags |= C_EOF; return rc; /* no entries matched */ } mp = mc->mc_pg[mc->mc_top]; mdb_cassert(mc, IS_LEAF(mp)); leaf = NODEPTR(mp, 0); } set1: mc->mc_flags |= C_INITIALIZED; mc->mc_flags &= ~C_EOF; if (IS_LEAF2(mp)) { if (op == MDB_SET_RANGE || op == MDB_SET_KEY) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); } return MDB_SUCCESS; } if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); } if (data) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (op == MDB_SET || op == MDB_SET_KEY || op == MDB_SET_RANGE) { rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); } else { int ex2, *ex2p; if (op == MDB_GET_BOTH) { ex2p = &ex2; ex2 = 0; } else { ex2p = NULL; } rc = mdb_cursor_set(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_SET_RANGE, ex2p); if (rc != MDB_SUCCESS) return rc; } } else if (op == MDB_GET_BOTH || op == MDB_GET_BOTH_RANGE) { MDB_val olddata; MDB_cmp_func *dcmp; if ((rc = mdb_node_read(mc, leaf, &olddata)) != MDB_SUCCESS) return rc; dcmp = mc->mc_dbx->md_dcmp; if (NEED_CMP_CLONG(dcmp, olddata.mv_size)) dcmp = mdb_cmp_clong; rc = dcmp(data, &olddata); if (rc) { if (op == MDB_GET_BOTH || rc > 0) return MDB_NOTFOUND; rc = 0; } *data = olddata; } else { if (mc->mc_xcursor) mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } /* The key already matches in all other cases */ if (op == MDB_SET_RANGE || op == MDB_SET_KEY) MDB_GET_KEY(leaf, key); DPRINTF(("==> cursor placed on key [%s]", DKEY(key))); return rc; } /** Move the cursor to the first item in the database. */ static int mdb_cursor_first(MDB_cursor *mc, MDB_val *key, MDB_val *data) { int rc; MDB_node *leaf; if (mc->mc_xcursor) { MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0); mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); } if (!(mc->mc_flags & C_INITIALIZED) || mc->mc_top) { rc = mdb_page_search(mc, NULL, MDB_PS_FIRST); if (rc != MDB_SUCCESS) return rc; } mdb_cassert(mc, IS_LEAF(mc->mc_pg[mc->mc_top])); leaf = NODEPTR(mc->mc_pg[mc->mc_top], 0); mc->mc_flags |= C_INITIALIZED; mc->mc_flags &= ~C_EOF; mc->mc_ki[mc->mc_top] = 0; if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], 0, key->mv_size); return MDB_SUCCESS; } if (data) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc) return rc; } else { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } /** Move the cursor to the last item in the database. */ static int mdb_cursor_last(MDB_cursor *mc, MDB_val *key, MDB_val *data) { int rc; MDB_node *leaf; if (mc->mc_xcursor) { MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0); mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); } if (!(mc->mc_flags & C_INITIALIZED) || mc->mc_top) { rc = mdb_page_search(mc, NULL, MDB_PS_LAST); if (rc != MDB_SUCCESS) return rc; } mdb_cassert(mc, IS_LEAF(mc->mc_pg[mc->mc_top])); mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]) - 1; mc->mc_flags |= C_INITIALIZED|C_EOF; leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top], key->mv_size); return MDB_SUCCESS; } if (data) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); rc = mdb_cursor_last(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc) return rc; } else { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } int mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) { int rc; int exact = 0; int (*mfunc)(MDB_cursor *mc, MDB_val *key, MDB_val *data); if (mc == NULL) return EINVAL; if (mc->mc_txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; switch (op) { case MDB_GET_CURRENT: if (!(mc->mc_flags & C_INITIALIZED)) { rc = EINVAL; } else { MDB_page *mp = mc->mc_pg[mc->mc_top]; int nkeys = NUMKEYS(mp); if (!nkeys || mc->mc_ki[mc->mc_top] >= nkeys) { mc->mc_ki[mc->mc_top] = nkeys; rc = MDB_NOTFOUND; break; } rc = MDB_SUCCESS; if (IS_LEAF2(mp)) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); } else { MDB_node *leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); MDB_GET_KEY(leaf, key); if (data) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { rc = mdb_cursor_get(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_GET_CURRENT); } else { rc = mdb_node_read(mc, leaf, data); } } } } break; case MDB_GET_BOTH: case MDB_GET_BOTH_RANGE: if (data == NULL) { rc = EINVAL; break; } if (mc->mc_xcursor == NULL) { rc = MDB_INCOMPATIBLE; break; } /* FALLTHRU */ case MDB_SET: case MDB_SET_KEY: case MDB_SET_RANGE: if (key == NULL) { rc = EINVAL; } else { rc = mdb_cursor_set(mc, key, data, op, op == MDB_SET_RANGE ? NULL : &exact); } break; case MDB_GET_MULTIPLE: if (data == NULL || !(mc->mc_flags & C_INITIALIZED)) { rc = EINVAL; break; } if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { rc = MDB_INCOMPATIBLE; break; } rc = MDB_SUCCESS; if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) || (mc->mc_xcursor->mx_cursor.mc_flags & C_EOF)) break; goto fetchm; case MDB_NEXT_MULTIPLE: if (data == NULL) { rc = EINVAL; break; } if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { rc = MDB_INCOMPATIBLE; break; } rc = mdb_cursor_next(mc, key, data, MDB_NEXT_DUP); if (rc == MDB_SUCCESS) { if (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) { MDB_cursor *mx; fetchm: mx = &mc->mc_xcursor->mx_cursor; data->mv_size = NUMKEYS(mx->mc_pg[mx->mc_top]) * mx->mc_db->md_pad; data->mv_data = METADATA(mx->mc_pg[mx->mc_top]); mx->mc_ki[mx->mc_top] = NUMKEYS(mx->mc_pg[mx->mc_top])-1; } else { rc = MDB_NOTFOUND; } } break; case MDB_PREV_MULTIPLE: if (data == NULL) { rc = EINVAL; break; } if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { rc = MDB_INCOMPATIBLE; break; } if (!(mc->mc_flags & C_INITIALIZED)) rc = mdb_cursor_last(mc, key, data); else rc = MDB_SUCCESS; if (rc == MDB_SUCCESS) { MDB_cursor *mx = &mc->mc_xcursor->mx_cursor; if (mx->mc_flags & C_INITIALIZED) { rc = mdb_cursor_sibling(mx, 0); if (rc == MDB_SUCCESS) goto fetchm; } else { rc = MDB_NOTFOUND; } } break; case MDB_NEXT: case MDB_NEXT_DUP: case MDB_NEXT_NODUP: rc = mdb_cursor_next(mc, key, data, op); break; case MDB_PREV: case MDB_PREV_DUP: case MDB_PREV_NODUP: rc = mdb_cursor_prev(mc, key, data, op); break; case MDB_FIRST: rc = mdb_cursor_first(mc, key, data); break; case MDB_FIRST_DUP: mfunc = mdb_cursor_first; mmove: if (data == NULL || !(mc->mc_flags & C_INITIALIZED)) { rc = EINVAL; break; } if (mc->mc_xcursor == NULL) { rc = MDB_INCOMPATIBLE; break; } if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mc->mc_pg[mc->mc_top])) { mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]); rc = MDB_NOTFOUND; break; } { MDB_node *leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { MDB_GET_KEY(leaf, key); rc = mdb_node_read(mc, leaf, data); break; } } if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) { rc = EINVAL; break; } rc = mfunc(&mc->mc_xcursor->mx_cursor, data, NULL); break; case MDB_LAST: rc = mdb_cursor_last(mc, key, data); break; case MDB_LAST_DUP: mfunc = mdb_cursor_last; goto mmove; default: DPRINTF(("unhandled/unimplemented cursor operation %u", op)); rc = EINVAL; break; } if (mc->mc_flags & C_DEL) mc->mc_flags ^= C_DEL; return rc; } /** Touch all the pages in the cursor stack. Set mc_top. * Makes sure all the pages are writable, before attempting a write operation. * @param[in] mc The cursor to operate on. */ static int mdb_cursor_touch(MDB_cursor *mc) { int rc = MDB_SUCCESS; if (mc->mc_dbi >= CORE_DBS && !(*mc->mc_dbflag & (DB_DIRTY|DB_DUPDATA))) { /* Touch DB record of named DB */ MDB_cursor mc2; MDB_xcursor mcx; if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi)) return MDB_BAD_DBI; mdb_cursor_init(&mc2, mc->mc_txn, MAIN_DBI, &mcx); rc = mdb_page_search(&mc2, &mc->mc_dbx->md_name, MDB_PS_MODIFY); if (rc) return rc; *mc->mc_dbflag |= DB_DIRTY; } mc->mc_top = 0; if (mc->mc_snum) { do { rc = mdb_page_touch(mc); } while (!rc && ++(mc->mc_top) < mc->mc_snum); mc->mc_top = mc->mc_snum-1; } return rc; } /** Do not spill pages to disk if txn is getting full, may fail instead */ #define MDB_NOSPILL 0x8000 int mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data, unsigned int flags) { MDB_env *env; MDB_node *leaf = NULL; MDB_page *fp, *mp, *sub_root = NULL; uint16_t fp_flags; MDB_val xdata, *rdata, dkey, olddata; MDB_db dummy; int do_sub = 0, insert_key, insert_data; unsigned int mcount = 0, dcount = 0, nospill; size_t nsize; int rc, rc2; unsigned int nflags; DKBUF; if (mc == NULL || key == NULL) return EINVAL; env = mc->mc_txn->mt_env; /* Check this first so counter will always be zero on any * early failures. */ if (flags & MDB_MULTIPLE) { dcount = data[1].mv_size; data[1].mv_size = 0; if (!F_ISSET(mc->mc_db->md_flags, MDB_DUPFIXED)) return MDB_INCOMPATIBLE; } nospill = flags & MDB_NOSPILL; flags &= ~MDB_NOSPILL; if (mc->mc_txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (mc->mc_txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; if (key->mv_size-1 >= ENV_MAXKEY(env)) return MDB_BAD_VALSIZE; #if SIZE_MAX > MAXDATASIZE if (data->mv_size > ((mc->mc_db->md_flags & MDB_DUPSORT) ? ENV_MAXKEY(env) : MAXDATASIZE)) return MDB_BAD_VALSIZE; #else if ((mc->mc_db->md_flags & MDB_DUPSORT) && data->mv_size > ENV_MAXKEY(env)) return MDB_BAD_VALSIZE; #endif DPRINTF(("==> put db %d key [%s], size %"Z"u, data size %"Z"u", DDBI(mc), DKEY(key), key ? key->mv_size : 0, data->mv_size)); dkey.mv_size = 0; if (flags & MDB_CURRENT) { if (!(mc->mc_flags & C_INITIALIZED)) return EINVAL; rc = MDB_SUCCESS; } else if (mc->mc_db->md_root == P_INVALID) { /* new database, cursor has nothing to point to */ mc->mc_snum = 0; mc->mc_top = 0; mc->mc_flags &= ~C_INITIALIZED; rc = MDB_NO_ROOT; } else { int exact = 0; MDB_val d2; if (flags & MDB_APPEND) { MDB_val k2; rc = mdb_cursor_last(mc, &k2, &d2); if (rc == 0) { rc = mc->mc_dbx->md_cmp(key, &k2); if (rc > 0) { rc = MDB_NOTFOUND; mc->mc_ki[mc->mc_top]++; } else { /* new key is <= last key */ rc = MDB_KEYEXIST; } } } else { rc = mdb_cursor_set(mc, key, &d2, MDB_SET, &exact); } if ((flags & MDB_NOOVERWRITE) && rc == 0) { DPRINTF(("duplicate key [%s]", DKEY(key))); *data = d2; return MDB_KEYEXIST; } if (rc && rc != MDB_NOTFOUND) return rc; } if (mc->mc_flags & C_DEL) mc->mc_flags ^= C_DEL; /* Cursor is positioned, check for room in the dirty list */ if (!nospill) { if (flags & MDB_MULTIPLE) { rdata = &xdata; xdata.mv_size = data->mv_size * dcount; } else { rdata = data; } if ((rc2 = mdb_page_spill(mc, key, rdata))) return rc2; } if (rc == MDB_NO_ROOT) { MDB_page *np; /* new database, write a root leaf page */ DPUTS("allocating new root leaf page"); if ((rc2 = mdb_page_new(mc, P_LEAF, 1, &np))) { return rc2; } mdb_cursor_push(mc, np); mc->mc_db->md_root = np->mp_pgno; mc->mc_db->md_depth++; *mc->mc_dbflag |= DB_DIRTY; if ((mc->mc_db->md_flags & (MDB_DUPSORT|MDB_DUPFIXED)) == MDB_DUPFIXED) np->mp_flags |= P_LEAF2; mc->mc_flags |= C_INITIALIZED; } else { /* make sure all cursor pages are writable */ rc2 = mdb_cursor_touch(mc); if (rc2) return rc2; } insert_key = insert_data = rc; if (insert_key) { /* The key does not exist */ DPRINTF(("inserting key at index %i", mc->mc_ki[mc->mc_top])); if ((mc->mc_db->md_flags & MDB_DUPSORT) && LEAFSIZE(key, data) > env->me_nodemax) { /* Too big for a node, insert in sub-DB. Set up an empty * "old sub-page" for prep_subDB to expand to a full page. */ fp_flags = P_LEAF|P_DIRTY; fp = env->me_pbuf; fp->mp_pad = data->mv_size; /* used if MDB_DUPFIXED */ fp->mp_lower = fp->mp_upper = (PAGEHDRSZ-PAGEBASE); olddata.mv_size = PAGEHDRSZ; goto prep_subDB; } } else { /* there's only a key anyway, so this is a no-op */ if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { char *ptr; unsigned int ksize = mc->mc_db->md_pad; if (key->mv_size != ksize) return MDB_BAD_VALSIZE; ptr = LEAF2KEY(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top], ksize); memcpy(ptr, key->mv_data, ksize); fix_parent: /* if overwriting slot 0 of leaf, need to * update branch key if there is a parent page */ if (mc->mc_top && !mc->mc_ki[mc->mc_top]) { unsigned short dtop = 1; mc->mc_top--; /* slot 0 is always an empty key, find real slot */ while (mc->mc_top && !mc->mc_ki[mc->mc_top]) { mc->mc_top--; dtop++; } if (mc->mc_ki[mc->mc_top]) rc2 = mdb_update_key(mc, key); else rc2 = MDB_SUCCESS; mc->mc_top += dtop; if (rc2) return rc2; } return MDB_SUCCESS; } more: leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); olddata.mv_size = NODEDSZ(leaf); olddata.mv_data = NODEDATA(leaf); /* DB has dups? */ if (F_ISSET(mc->mc_db->md_flags, MDB_DUPSORT)) { /* Prepare (sub-)page/sub-DB to accept the new item, * if needed. fp: old sub-page or a header faking * it. mp: new (sub-)page. offset: growth in page * size. xdata: node data with new page or DB. */ unsigned i, offset = 0; mp = fp = xdata.mv_data = env->me_pbuf; mp->mp_pgno = mc->mc_pg[mc->mc_top]->mp_pgno; /* Was a single item before, must convert now */ if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { MDB_cmp_func *dcmp; /* Just overwrite the current item */ if (flags == MDB_CURRENT) goto current; dcmp = mc->mc_dbx->md_dcmp; if (NEED_CMP_CLONG(dcmp, olddata.mv_size)) dcmp = mdb_cmp_clong; /* does data match? */ if (!dcmp(data, &olddata)) { if (flags & (MDB_NODUPDATA|MDB_APPENDDUP)) return MDB_KEYEXIST; /* overwrite it */ goto current; } /* Back up original data item */ dkey.mv_size = olddata.mv_size; dkey.mv_data = memcpy(fp+1, olddata.mv_data, olddata.mv_size); /* Make sub-page header for the dup items, with dummy body */ fp->mp_flags = P_LEAF|P_DIRTY|P_SUBP; fp->mp_lower = (PAGEHDRSZ-PAGEBASE); xdata.mv_size = PAGEHDRSZ + dkey.mv_size + data->mv_size; if (mc->mc_db->md_flags & MDB_DUPFIXED) { fp->mp_flags |= P_LEAF2; fp->mp_pad = data->mv_size; xdata.mv_size += 2 * data->mv_size; /* leave space for 2 more */ } else { xdata.mv_size += 2 * (sizeof(indx_t) + NODESIZE) + (dkey.mv_size & 1) + (data->mv_size & 1); } fp->mp_upper = xdata.mv_size - PAGEBASE; olddata.mv_size = xdata.mv_size; /* pretend olddata is fp */ } else if (leaf->mn_flags & F_SUBDATA) { /* Data is on sub-DB, just store it */ flags |= F_DUPDATA|F_SUBDATA; goto put_sub; } else { /* Data is on sub-page */ fp = olddata.mv_data; switch (flags) { default: if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { offset = EVEN(NODESIZE + sizeof(indx_t) + data->mv_size); break; } offset = fp->mp_pad; if (SIZELEFT(fp) < offset) { offset *= 4; /* space for 4 more */ break; } /* FALLTHRU: Big enough MDB_DUPFIXED sub-page */ case MDB_CURRENT: fp->mp_flags |= P_DIRTY; COPY_PGNO(fp->mp_pgno, mp->mp_pgno); mc->mc_xcursor->mx_cursor.mc_pg[0] = fp; flags |= F_DUPDATA; goto put_sub; } xdata.mv_size = olddata.mv_size + offset; } fp_flags = fp->mp_flags; if (NODESIZE + NODEKSZ(leaf) + xdata.mv_size > env->me_nodemax) { /* Too big for a sub-page, convert to sub-DB */ fp_flags &= ~P_SUBP; prep_subDB: if (mc->mc_db->md_flags & MDB_DUPFIXED) { fp_flags |= P_LEAF2; dummy.md_pad = fp->mp_pad; dummy.md_flags = MDB_DUPFIXED; if (mc->mc_db->md_flags & MDB_INTEGERDUP) dummy.md_flags |= MDB_INTEGERKEY; } else { dummy.md_pad = 0; dummy.md_flags = 0; } dummy.md_depth = 1; dummy.md_branch_pages = 0; dummy.md_leaf_pages = 1; dummy.md_overflow_pages = 0; dummy.md_entries = NUMKEYS(fp); xdata.mv_size = sizeof(MDB_db); xdata.mv_data = &dummy; if ((rc = mdb_page_alloc(mc, 1, &mp))) return rc; offset = env->me_psize - olddata.mv_size; flags |= F_DUPDATA|F_SUBDATA; dummy.md_root = mp->mp_pgno; sub_root = mp; } if (mp != fp) { mp->mp_flags = fp_flags | P_DIRTY; mp->mp_pad = fp->mp_pad; mp->mp_lower = fp->mp_lower; mp->mp_upper = fp->mp_upper + offset; if (fp_flags & P_LEAF2) { memcpy(METADATA(mp), METADATA(fp), NUMKEYS(fp) * fp->mp_pad); } else { memcpy((char *)mp + mp->mp_upper + PAGEBASE, (char *)fp + fp->mp_upper + PAGEBASE, olddata.mv_size - fp->mp_upper - PAGEBASE); memcpy((char *)(&mp->mp_ptrs), (char *)(&fp->mp_ptrs), NUMKEYS(fp) * sizeof(mp->mp_ptrs[0])); for (i=0; imp_ptrs[i] += offset; } } rdata = &xdata; flags |= F_DUPDATA; do_sub = 1; if (!insert_key) mdb_node_del(mc, 0); goto new_sub; } current: /* LMDB passes F_SUBDATA in 'flags' to write a DB record */ if ((leaf->mn_flags ^ flags) & F_SUBDATA) return MDB_INCOMPATIBLE; /* overflow page overwrites need special handling */ if (F_ISSET(leaf->mn_flags, F_BIGDATA)) { MDB_page *omp; pgno_t pg; int level, ovpages, dpages = OVPAGES(data->mv_size, env->me_psize); memcpy(&pg, olddata.mv_data, sizeof(pg)); if ((rc2 = mdb_page_get(mc, pg, &omp, &level)) != 0) return rc2; ovpages = omp->mp_pages; /* Is the ov page large enough? */ if (ovpages >= dpages) { if (!(omp->mp_flags & P_DIRTY) && (level || (env->me_flags & MDB_WRITEMAP))) { rc = mdb_page_unspill(mc->mc_txn, omp, &omp); if (rc) return rc; level = 0; /* dirty in this txn or clean */ } /* Is it dirty? */ if (omp->mp_flags & P_DIRTY) { /* yes, overwrite it. Note in this case we don't * bother to try shrinking the page if the new data * is smaller than the overflow threshold. */ if (level > 1) { /* It is writable only in a parent txn */ size_t sz = (size_t) env->me_psize * ovpages, off; MDB_page *np = mdb_page_malloc(mc->mc_txn, ovpages); MDB_ID2 id2; if (!np) return ENOMEM; id2.mid = pg; id2.mptr = np; /* Note - this page is already counted in parent's dirty_room */ rc2 = mdb_mid2l_insert(mc->mc_txn->mt_u.dirty_list, &id2); mdb_cassert(mc, rc2 == 0); /* Currently we make the page look as with put() in the * parent txn, in case the user peeks at MDB_RESERVEd * or unused parts. Some users treat ovpages specially. */ if (!(flags & MDB_RESERVE)) { /* Skip the part where LMDB will put *data. * Copy end of page, adjusting alignment so * compiler may copy words instead of bytes. */ off = (PAGEHDRSZ + data->mv_size) & -sizeof(size_t); memcpy((size_t *)((char *)np + off), (size_t *)((char *)omp + off), sz - off); sz = PAGEHDRSZ; } memcpy(np, omp, sz); /* Copy beginning of page */ omp = np; } SETDSZ(leaf, data->mv_size); if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = METADATA(omp); else memcpy(METADATA(omp), data->mv_data, data->mv_size); return MDB_SUCCESS; } } if ((rc2 = mdb_ovpage_free(mc, omp)) != MDB_SUCCESS) return rc2; } else if (data->mv_size == olddata.mv_size) { /* same size, just replace it. Note that we could * also reuse this node if the new data is smaller, * but instead we opt to shrink the node in that case. */ if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = olddata.mv_data; else if (!(mc->mc_flags & C_SUB)) memcpy(olddata.mv_data, data->mv_data, data->mv_size); else { memcpy(NODEKEY(leaf), key->mv_data, key->mv_size); goto fix_parent; } return MDB_SUCCESS; } mdb_node_del(mc, 0); } rdata = data; new_sub: nflags = flags & NODE_ADD_FLAGS; nsize = IS_LEAF2(mc->mc_pg[mc->mc_top]) ? key->mv_size : mdb_leaf_size(env, key, rdata); if (SIZELEFT(mc->mc_pg[mc->mc_top]) < nsize) { if (( flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA ) nflags &= ~MDB_APPEND; /* sub-page may need room to grow */ if (!insert_key) nflags |= MDB_SPLIT_REPLACE; rc = mdb_page_split(mc, key, rdata, P_INVALID, nflags); } else { /* There is room already in this leaf page. */ rc = mdb_node_add(mc, mc->mc_ki[mc->mc_top], key, rdata, 0, nflags); if (rc == 0) { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; unsigned i = mc->mc_top; MDB_page *mp = mc->mc_pg[i]; for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == mc || m3->mc_snum < mc->mc_snum || m3->mc_pg[i] != mp) continue; if (m3->mc_ki[i] >= mc->mc_ki[i] && insert_key) { m3->mc_ki[i]++; } XCURSOR_REFRESH(m3, i, mp); } } } if (rc == MDB_SUCCESS) { /* Now store the actual data in the child DB. Note that we're * storing the user data in the keys field, so there are strict * size limits on dupdata. The actual data fields of the child * DB are all zero size. */ if (do_sub) { int xflags, new_dupdata; mdb_size_t ecount; put_sub: xdata.mv_size = 0; xdata.mv_data = ""; leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (flags == MDB_CURRENT) { xflags = MDB_CURRENT|MDB_NOSPILL; } else { mdb_xcursor_init1(mc, leaf); xflags = (flags & MDB_NODUPDATA) ? MDB_NOOVERWRITE|MDB_NOSPILL : MDB_NOSPILL; } if (sub_root) mc->mc_xcursor->mx_cursor.mc_pg[0] = sub_root; new_dupdata = (int)dkey.mv_size; /* converted, write the original data first */ if (dkey.mv_size) { rc = mdb_cursor_put(&mc->mc_xcursor->mx_cursor, &dkey, &xdata, xflags); if (rc) goto bad_sub; /* we've done our job */ dkey.mv_size = 0; } if (!(leaf->mn_flags & F_SUBDATA) || sub_root) { /* Adjust other cursors pointing to mp */ MDB_cursor *m2; MDB_xcursor *mx = mc->mc_xcursor; unsigned i = mc->mc_top; MDB_page *mp = mc->mc_pg[i]; for (m2 = mc->mc_txn->mt_cursors[mc->mc_dbi]; m2; m2=m2->mc_next) { if (m2 == mc || m2->mc_snum < mc->mc_snum) continue; if (!(m2->mc_flags & C_INITIALIZED)) continue; if (m2->mc_pg[i] == mp) { if (m2->mc_ki[i] == mc->mc_ki[i]) { mdb_xcursor_init2(m2, mx, new_dupdata); } else if (!insert_key) { XCURSOR_REFRESH(m2, i, mp); } } } } ecount = mc->mc_xcursor->mx_db.md_entries; if (flags & MDB_APPENDDUP) xflags |= MDB_APPEND; rc = mdb_cursor_put(&mc->mc_xcursor->mx_cursor, data, &xdata, xflags); if (flags & F_SUBDATA) { void *db = NODEDATA(leaf); memcpy(db, &mc->mc_xcursor->mx_db, sizeof(MDB_db)); } insert_data = mc->mc_xcursor->mx_db.md_entries - ecount; } /* Increment count unless we just replaced an existing item. */ if (insert_data) mc->mc_db->md_entries++; if (insert_key) { /* Invalidate txn if we created an empty sub-DB */ if (rc) goto bad_sub; /* If we succeeded and the key didn't exist before, * make sure the cursor is marked valid. */ mc->mc_flags |= C_INITIALIZED; } if (flags & MDB_MULTIPLE) { if (!rc) { mcount++; /* let caller know how many succeeded, if any */ data[1].mv_size = mcount; if (mcount < dcount) { data[0].mv_data = (char *)data[0].mv_data + data[0].mv_size; insert_key = insert_data = 0; goto more; } } } return rc; bad_sub: if (rc == MDB_KEYEXIST) /* should not happen, we deleted that item */ rc = MDB_PROBLEM; } mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_cursor_del(MDB_cursor *mc, unsigned int flags) { MDB_node *leaf; MDB_page *mp; int rc; if (mc->mc_txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (mc->mc_txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; if (!(mc->mc_flags & C_INITIALIZED)) return EINVAL; if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mc->mc_pg[mc->mc_top])) return MDB_NOTFOUND; if (!(flags & MDB_NOSPILL) && (rc = mdb_page_spill(mc, NULL, NULL))) return rc; rc = mdb_cursor_touch(mc); if (rc) return rc; mp = mc->mc_pg[mc->mc_top]; if (IS_LEAF2(mp)) goto del_key; leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (flags & MDB_NODUPDATA) { /* mdb_cursor_del0() will subtract the final entry */ mc->mc_db->md_entries -= mc->mc_xcursor->mx_db.md_entries - 1; mc->mc_xcursor->mx_cursor.mc_flags &= ~C_INITIALIZED; } else { if (!F_ISSET(leaf->mn_flags, F_SUBDATA)) { mc->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(leaf); } rc = mdb_cursor_del(&mc->mc_xcursor->mx_cursor, MDB_NOSPILL); if (rc) return rc; /* If sub-DB still has entries, we're done */ if (mc->mc_xcursor->mx_db.md_entries) { if (leaf->mn_flags & F_SUBDATA) { /* update subDB info */ void *db = NODEDATA(leaf); memcpy(db, &mc->mc_xcursor->mx_db, sizeof(MDB_db)); } else { MDB_cursor *m2; /* shrink fake page */ mdb_node_shrink(mp, mc->mc_ki[mc->mc_top]); leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); mc->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(leaf); /* fix other sub-DB cursors pointed at fake pages on this page */ for (m2 = mc->mc_txn->mt_cursors[mc->mc_dbi]; m2; m2=m2->mc_next) { if (m2 == mc || m2->mc_snum < mc->mc_snum) continue; if (!(m2->mc_flags & C_INITIALIZED)) continue; if (m2->mc_pg[mc->mc_top] == mp) { XCURSOR_REFRESH(m2, mc->mc_top, mp); } } } mc->mc_db->md_entries--; return rc; } else { mc->mc_xcursor->mx_cursor.mc_flags &= ~C_INITIALIZED; } /* otherwise fall thru and delete the sub-DB */ } if (leaf->mn_flags & F_SUBDATA) { /* add all the child DB's pages to the free list */ rc = mdb_drop0(&mc->mc_xcursor->mx_cursor, 0); if (rc) goto fail; } } /* LMDB passes F_SUBDATA in 'flags' to delete a DB record */ else if ((leaf->mn_flags ^ flags) & F_SUBDATA) { rc = MDB_INCOMPATIBLE; goto fail; } /* add overflow pages to free list */ if (F_ISSET(leaf->mn_flags, F_BIGDATA)) { MDB_page *omp; pgno_t pg; memcpy(&pg, NODEDATA(leaf), sizeof(pg)); if ((rc = mdb_page_get(mc, pg, &omp, NULL)) || (rc = mdb_ovpage_free(mc, omp))) goto fail; } del_key: return mdb_cursor_del0(mc); fail: mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } /** Allocate and initialize new pages for a database. * Set #MDB_TXN_ERROR on failure. * @param[in] mc a cursor on the database being added to. * @param[in] flags flags defining what type of page is being allocated. * @param[in] num the number of pages to allocate. This is usually 1, * unless allocating overflow pages for a large record. * @param[out] mp Address of a page, or NULL on failure. * @return 0 on success, non-zero on failure. */ static int mdb_page_new(MDB_cursor *mc, uint32_t flags, int num, MDB_page **mp) { MDB_page *np; int rc; if ((rc = mdb_page_alloc(mc, num, &np))) return rc; DPRINTF(("allocated new mpage %"Yu", page size %u", np->mp_pgno, mc->mc_txn->mt_env->me_psize)); np->mp_flags = flags | P_DIRTY; np->mp_lower = (PAGEHDRSZ-PAGEBASE); np->mp_upper = mc->mc_txn->mt_env->me_psize - PAGEBASE; if (IS_BRANCH(np)) mc->mc_db->md_branch_pages++; else if (IS_LEAF(np)) mc->mc_db->md_leaf_pages++; else if (IS_OVERFLOW(np)) { mc->mc_db->md_overflow_pages += num; np->mp_pages = num; } *mp = np; return 0; } /** Calculate the size of a leaf node. * The size depends on the environment's page size; if a data item * is too large it will be put onto an overflow page and the node * size will only include the key and not the data. Sizes are always * rounded up to an even number of bytes, to guarantee 2-byte alignment * of the #MDB_node headers. * @param[in] env The environment handle. * @param[in] key The key for the node. * @param[in] data The data for the node. * @return The number of bytes needed to store the node. */ static size_t mdb_leaf_size(MDB_env *env, MDB_val *key, MDB_val *data) { size_t sz; sz = LEAFSIZE(key, data); if (sz > env->me_nodemax) { /* put on overflow page */ sz -= data->mv_size - sizeof(pgno_t); } return EVEN(sz + sizeof(indx_t)); } /** Calculate the size of a branch node. * The size should depend on the environment's page size but since * we currently don't support spilling large keys onto overflow * pages, it's simply the size of the #MDB_node header plus the * size of the key. Sizes are always rounded up to an even number * of bytes, to guarantee 2-byte alignment of the #MDB_node headers. * @param[in] env The environment handle. * @param[in] key The key for the node. * @return The number of bytes needed to store the node. */ static size_t mdb_branch_size(MDB_env *env, MDB_val *key) { size_t sz; sz = INDXSIZE(key); if (sz > env->me_nodemax) { /* put on overflow page */ /* not implemented */ /* sz -= key->size - sizeof(pgno_t); */ } return sz + sizeof(indx_t); } /** Add a node to the page pointed to by the cursor. * Set #MDB_TXN_ERROR on failure. * @param[in] mc The cursor for this operation. * @param[in] indx The index on the page where the new node should be added. * @param[in] key The key for the new node. * @param[in] data The data for the new node, if any. * @param[in] pgno The page number, if adding a branch node. * @param[in] flags Flags for the node. * @return 0 on success, non-zero on failure. Possible errors are: *
    *
  • ENOMEM - failed to allocate overflow pages for the node. *
  • MDB_PAGE_FULL - there is insufficient room in the page. This error * should never happen since all callers already calculate the * page's free space before calling this function. *
*/ static int mdb_node_add(MDB_cursor *mc, indx_t indx, MDB_val *key, MDB_val *data, pgno_t pgno, unsigned int flags) { unsigned int i; size_t node_size = NODESIZE; ssize_t room; indx_t ofs; MDB_node *node; MDB_page *mp = mc->mc_pg[mc->mc_top]; MDB_page *ofp = NULL; /* overflow page */ void *ndata; DKBUF; mdb_cassert(mc, mp->mp_upper >= mp->mp_lower); DPRINTF(("add to %s %spage %"Yu" index %i, data size %"Z"u key size %"Z"u [%s]", IS_LEAF(mp) ? "leaf" : "branch", IS_SUBP(mp) ? "sub-" : "", mdb_dbg_pgno(mp), indx, data ? data->mv_size : 0, key ? key->mv_size : 0, key ? DKEY(key) : "null")); if (IS_LEAF2(mp)) { /* Move higher keys up one slot. */ int ksize = mc->mc_db->md_pad, dif; char *ptr = LEAF2KEY(mp, indx, ksize); dif = NUMKEYS(mp) - indx; if (dif > 0) memmove(ptr+ksize, ptr, dif*ksize); /* insert new key */ memcpy(ptr, key->mv_data, ksize); /* Just using these for counting */ mp->mp_lower += sizeof(indx_t); mp->mp_upper -= ksize - sizeof(indx_t); return MDB_SUCCESS; } room = (ssize_t)SIZELEFT(mp) - (ssize_t)sizeof(indx_t); if (key != NULL) node_size += key->mv_size; if (IS_LEAF(mp)) { mdb_cassert(mc, key && data); if (F_ISSET(flags, F_BIGDATA)) { /* Data already on overflow page. */ node_size += sizeof(pgno_t); } else if (node_size + data->mv_size > mc->mc_txn->mt_env->me_nodemax) { int ovpages = OVPAGES(data->mv_size, mc->mc_txn->mt_env->me_psize); int rc; /* Put data on overflow page. */ DPRINTF(("data size is %"Z"u, node would be %"Z"u, put data on overflow page", data->mv_size, node_size+data->mv_size)); node_size = EVEN(node_size + sizeof(pgno_t)); if ((ssize_t)node_size > room) goto full; if ((rc = mdb_page_new(mc, P_OVERFLOW, ovpages, &ofp))) return rc; DPRINTF(("allocated overflow page %"Yu, ofp->mp_pgno)); flags |= F_BIGDATA; goto update; } else { node_size += data->mv_size; } } node_size = EVEN(node_size); if ((ssize_t)node_size > room) goto full; update: /* Move higher pointers up one slot. */ for (i = NUMKEYS(mp); i > indx; i--) mp->mp_ptrs[i] = mp->mp_ptrs[i - 1]; /* Adjust free space offsets. */ ofs = mp->mp_upper - node_size; mdb_cassert(mc, ofs >= mp->mp_lower + sizeof(indx_t)); mp->mp_ptrs[indx] = ofs; mp->mp_upper = ofs; mp->mp_lower += sizeof(indx_t); /* Write the node data. */ node = NODEPTR(mp, indx); node->mn_ksize = (key == NULL) ? 0 : key->mv_size; node->mn_flags = flags; if (IS_LEAF(mp)) SETDSZ(node,data->mv_size); else SETPGNO(node,pgno); if (key) memcpy(NODEKEY(node), key->mv_data, key->mv_size); if (IS_LEAF(mp)) { ndata = NODEDATA(node); if (ofp == NULL) { if (F_ISSET(flags, F_BIGDATA)) memcpy(ndata, data->mv_data, sizeof(pgno_t)); else if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = ndata; else memcpy(ndata, data->mv_data, data->mv_size); } else { memcpy(ndata, &ofp->mp_pgno, sizeof(pgno_t)); ndata = METADATA(ofp); if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = ndata; else memcpy(ndata, data->mv_data, data->mv_size); } } return MDB_SUCCESS; full: DPRINTF(("not enough room in page %"Yu", got %u ptrs", mdb_dbg_pgno(mp), NUMKEYS(mp))); DPRINTF(("upper-lower = %u - %u = %"Z"d", mp->mp_upper,mp->mp_lower,room)); DPRINTF(("node size = %"Z"u", node_size)); mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return MDB_PAGE_FULL; } /** Delete the specified node from a page. * @param[in] mc Cursor pointing to the node to delete. * @param[in] ksize The size of a node. Only used if the page is * part of a #MDB_DUPFIXED database. */ static void mdb_node_del(MDB_cursor *mc, int ksize) { MDB_page *mp = mc->mc_pg[mc->mc_top]; indx_t indx = mc->mc_ki[mc->mc_top]; unsigned int sz; indx_t i, j, numkeys, ptr; MDB_node *node; char *base; DPRINTF(("delete node %u on %s page %"Yu, indx, IS_LEAF(mp) ? "leaf" : "branch", mdb_dbg_pgno(mp))); numkeys = NUMKEYS(mp); mdb_cassert(mc, indx < numkeys); if (IS_LEAF2(mp)) { int x = numkeys - 1 - indx; base = LEAF2KEY(mp, indx, ksize); if (x) memmove(base, base + ksize, x * ksize); mp->mp_lower -= sizeof(indx_t); mp->mp_upper += ksize - sizeof(indx_t); return; } node = NODEPTR(mp, indx); sz = NODESIZE + node->mn_ksize; if (IS_LEAF(mp)) { if (F_ISSET(node->mn_flags, F_BIGDATA)) sz += sizeof(pgno_t); else sz += NODEDSZ(node); } sz = EVEN(sz); ptr = mp->mp_ptrs[indx]; for (i = j = 0; i < numkeys; i++) { if (i != indx) { mp->mp_ptrs[j] = mp->mp_ptrs[i]; if (mp->mp_ptrs[i] < ptr) mp->mp_ptrs[j] += sz; j++; } } base = (char *)mp + mp->mp_upper + PAGEBASE; memmove(base + sz, base, ptr - mp->mp_upper); mp->mp_lower -= sizeof(indx_t); mp->mp_upper += sz; } /** Compact the main page after deleting a node on a subpage. * @param[in] mp The main page to operate on. * @param[in] indx The index of the subpage on the main page. */ static void mdb_node_shrink(MDB_page *mp, indx_t indx) { MDB_node *node; MDB_page *sp, *xp; char *base; indx_t delta, nsize, len, ptr; int i; node = NODEPTR(mp, indx); sp = (MDB_page *)NODEDATA(node); delta = SIZELEFT(sp); nsize = NODEDSZ(node) - delta; /* Prepare to shift upward, set len = length(subpage part to shift) */ if (IS_LEAF2(sp)) { len = nsize; if (nsize & 1) return; /* do not make the node uneven-sized */ } else { xp = (MDB_page *)((char *)sp + delta); /* destination subpage */ for (i = NUMKEYS(sp); --i >= 0; ) xp->mp_ptrs[i] = sp->mp_ptrs[i] - delta; len = PAGEHDRSZ; } sp->mp_upper = sp->mp_lower; COPY_PGNO(sp->mp_pgno, mp->mp_pgno); SETDSZ(node, (uint32_t)nsize); /* Shift upward */ base = (char *)mp + mp->mp_upper + PAGEBASE; memmove(base + delta, base, (char *)sp + len - base); ptr = mp->mp_ptrs[indx]; for (i = NUMKEYS(mp); --i >= 0; ) { if (mp->mp_ptrs[i] <= ptr) mp->mp_ptrs[i] += delta; } mp->mp_upper += delta; } /** Initial setup of a sorted-dups cursor. * Sorted duplicates are implemented as a sub-database for the given key. * The duplicate data items are actually keys of the sub-database. * Operations on the duplicate data items are performed using a sub-cursor * initialized when the sub-database is first accessed. This function does * the preliminary setup of the sub-cursor, filling in the fields that * depend only on the parent DB. * @param[in] mc The main cursor whose sorted-dups cursor is to be initialized. */ static void mdb_xcursor_init0(MDB_cursor *mc) { MDB_xcursor *mx = mc->mc_xcursor; mx->mx_cursor.mc_xcursor = NULL; mx->mx_cursor.mc_txn = mc->mc_txn; mx->mx_cursor.mc_db = &mx->mx_db; mx->mx_cursor.mc_dbx = &mx->mx_dbx; mx->mx_cursor.mc_dbi = mc->mc_dbi; mx->mx_cursor.mc_dbflag = &mx->mx_dbflag; mx->mx_cursor.mc_snum = 0; mx->mx_cursor.mc_top = 0; MC_SET_OVPG(&mx->mx_cursor, NULL); mx->mx_cursor.mc_flags = C_SUB | (mc->mc_flags & (C_ORIG_RDONLY|C_WRITEMAP)); mx->mx_dbx.md_name.mv_size = 0; mx->mx_dbx.md_name.mv_data = NULL; mx->mx_dbx.md_cmp = mc->mc_dbx->md_dcmp; mx->mx_dbx.md_dcmp = NULL; mx->mx_dbx.md_rel = mc->mc_dbx->md_rel; } /** Final setup of a sorted-dups cursor. * Sets up the fields that depend on the data from the main cursor. * @param[in] mc The main cursor whose sorted-dups cursor is to be initialized. * @param[in] node The data containing the #MDB_db record for the * sorted-dup database. */ static void mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node) { MDB_xcursor *mx = mc->mc_xcursor; mx->mx_cursor.mc_flags &= C_SUB|C_ORIG_RDONLY|C_WRITEMAP; if (node->mn_flags & F_SUBDATA) { memcpy(&mx->mx_db, NODEDATA(node), sizeof(MDB_db)); mx->mx_cursor.mc_pg[0] = 0; mx->mx_cursor.mc_snum = 0; mx->mx_cursor.mc_top = 0; } else { MDB_page *fp = NODEDATA(node); mx->mx_db.md_pad = 0; mx->mx_db.md_flags = 0; mx->mx_db.md_depth = 1; mx->mx_db.md_branch_pages = 0; mx->mx_db.md_leaf_pages = 1; mx->mx_db.md_overflow_pages = 0; mx->mx_db.md_entries = NUMKEYS(fp); COPY_PGNO(mx->mx_db.md_root, fp->mp_pgno); mx->mx_cursor.mc_snum = 1; mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags |= C_INITIALIZED; mx->mx_cursor.mc_pg[0] = fp; mx->mx_cursor.mc_ki[0] = 0; if (mc->mc_db->md_flags & MDB_DUPFIXED) { mx->mx_db.md_flags = MDB_DUPFIXED; mx->mx_db.md_pad = fp->mp_pad; if (mc->mc_db->md_flags & MDB_INTEGERDUP) mx->mx_db.md_flags |= MDB_INTEGERKEY; } } DPRINTF(("Sub-db -%u root page %"Yu, mx->mx_cursor.mc_dbi, mx->mx_db.md_root)); mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA; if (NEED_CMP_CLONG(mx->mx_dbx.md_cmp, mx->mx_db.md_pad)) mx->mx_dbx.md_cmp = mdb_cmp_clong; } /** Fixup a sorted-dups cursor due to underlying update. * Sets up some fields that depend on the data from the main cursor. * Almost the same as init1, but skips initialization steps if the * xcursor had already been used. * @param[in] mc The main cursor whose sorted-dups cursor is to be fixed up. * @param[in] src_mx The xcursor of an up-to-date cursor. * @param[in] new_dupdata True if converting from a non-#F_DUPDATA item. */ static void mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int new_dupdata) { MDB_xcursor *mx = mc->mc_xcursor; if (new_dupdata) { mx->mx_cursor.mc_snum = 1; mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags |= C_INITIALIZED; mx->mx_cursor.mc_ki[0] = 0; mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA; #if UINT_MAX < MDB_SIZE_MAX /* matches mdb_xcursor_init1:NEED_CMP_CLONG() */ mx->mx_dbx.md_cmp = src_mx->mx_dbx.md_cmp; #endif } else if (!(mx->mx_cursor.mc_flags & C_INITIALIZED)) { return; } mx->mx_db = src_mx->mx_db; mx->mx_cursor.mc_pg[0] = src_mx->mx_cursor.mc_pg[0]; DPRINTF(("Sub-db -%u root page %"Yu, mx->mx_cursor.mc_dbi, mx->mx_db.md_root)); } /** Initialize a cursor for a given transaction and database. */ static void mdb_cursor_init(MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx) { mc->mc_next = NULL; mc->mc_backup = NULL; mc->mc_dbi = dbi; mc->mc_txn = txn; mc->mc_db = &txn->mt_dbs[dbi]; mc->mc_dbx = &txn->mt_dbxs[dbi]; mc->mc_dbflag = &txn->mt_dbflags[dbi]; mc->mc_snum = 0; mc->mc_top = 0; mc->mc_pg[0] = 0; mc->mc_ki[0] = 0; MC_SET_OVPG(mc, NULL); mc->mc_flags = txn->mt_flags & (C_ORIG_RDONLY|C_WRITEMAP); if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) { mdb_tassert(txn, mx != NULL); mc->mc_xcursor = mx; mdb_xcursor_init0(mc); } else { mc->mc_xcursor = NULL; } if (*mc->mc_dbflag & DB_STALE) { mdb_page_search(mc, NULL, MDB_PS_ROOTONLY); } } int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **ret) { MDB_cursor *mc; size_t size = sizeof(MDB_cursor); if (!ret || !TXN_DBI_EXIST(txn, dbi, DB_VALID)) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; if (dbi == FREE_DBI && !F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) return EINVAL; if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) size += sizeof(MDB_xcursor); if ((mc = malloc(size)) != NULL) { mdb_cursor_init(mc, txn, dbi, (MDB_xcursor *)(mc + 1)); if (txn->mt_cursors) { mc->mc_next = txn->mt_cursors[dbi]; txn->mt_cursors[dbi] = mc; mc->mc_flags |= C_UNTRACK; } } else { return ENOMEM; } *ret = mc; return MDB_SUCCESS; } int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *mc) { if (!mc || !TXN_DBI_EXIST(txn, mc->mc_dbi, DB_VALID)) return EINVAL; if ((mc->mc_flags & C_UNTRACK) || txn->mt_cursors) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; mdb_cursor_init(mc, txn, mc->mc_dbi, mc->mc_xcursor); return MDB_SUCCESS; } /* Return the count of duplicate data items for the current key */ int mdb_cursor_count(MDB_cursor *mc, mdb_size_t *countp) { MDB_node *leaf; if (mc == NULL || countp == NULL) return EINVAL; if (mc->mc_xcursor == NULL) return MDB_INCOMPATIBLE; if (mc->mc_txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; if (!(mc->mc_flags & C_INITIALIZED)) return EINVAL; if (!mc->mc_snum) return MDB_NOTFOUND; if (mc->mc_flags & C_EOF) { if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mc->mc_pg[mc->mc_top])) return MDB_NOTFOUND; mc->mc_flags ^= C_EOF; } leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { *countp = 1; } else { if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) return EINVAL; *countp = mc->mc_xcursor->mx_db.md_entries; } return MDB_SUCCESS; } void mdb_cursor_close(MDB_cursor *mc) { if (mc) { MDB_CURSOR_UNREF(mc, 0); } if (mc && !mc->mc_backup) { /* Remove from txn, if tracked. * A read-only txn (!C_UNTRACK) may have been freed already, * so do not peek inside it. Only write txns track cursors. */ if ((mc->mc_flags & C_UNTRACK) && mc->mc_txn->mt_cursors) { MDB_cursor **prev = &mc->mc_txn->mt_cursors[mc->mc_dbi]; while (*prev && *prev != mc) prev = &(*prev)->mc_next; if (*prev == mc) *prev = mc->mc_next; } free(mc); } } MDB_txn * mdb_cursor_txn(MDB_cursor *mc) { if (!mc) return NULL; return mc->mc_txn; } MDB_dbi mdb_cursor_dbi(MDB_cursor *mc) { return mc->mc_dbi; } /** Replace the key for a branch node with a new key. * Set #MDB_TXN_ERROR on failure. * @param[in] mc Cursor pointing to the node to operate on. * @param[in] key The new key to use. * @return 0 on success, non-zero on failure. */ static int mdb_update_key(MDB_cursor *mc, MDB_val *key) { MDB_page *mp; MDB_node *node; char *base; size_t len; int delta, ksize, oksize; indx_t ptr, i, numkeys, indx; DKBUF; indx = mc->mc_ki[mc->mc_top]; mp = mc->mc_pg[mc->mc_top]; node = NODEPTR(mp, indx); ptr = mp->mp_ptrs[indx]; #if MDB_DEBUG { MDB_val k2; char kbuf2[DKBUF_MAXKEYSIZE*2+1]; k2.mv_data = NODEKEY(node); k2.mv_size = node->mn_ksize; DPRINTF(("update key %u (ofs %u) [%s] to [%s] on page %"Yu, indx, ptr, mdb_dkey(&k2, kbuf2), DKEY(key), mp->mp_pgno)); } #endif /* Sizes must be 2-byte aligned. */ ksize = EVEN(key->mv_size); oksize = EVEN(node->mn_ksize); delta = ksize - oksize; /* Shift node contents if EVEN(key length) changed. */ if (delta) { if (delta > 0 && SIZELEFT(mp) < delta) { pgno_t pgno; /* not enough space left, do a delete and split */ DPRINTF(("Not enough room, delta = %d, splitting...", delta)); pgno = NODEPGNO(node); mdb_node_del(mc, 0); return mdb_page_split(mc, key, NULL, pgno, MDB_SPLIT_REPLACE); } numkeys = NUMKEYS(mp); for (i = 0; i < numkeys; i++) { if (mp->mp_ptrs[i] <= ptr) mp->mp_ptrs[i] -= delta; } base = (char *)mp + mp->mp_upper + PAGEBASE; len = ptr - mp->mp_upper + NODESIZE; memmove(base - delta, base, len); mp->mp_upper -= delta; node = NODEPTR(mp, indx); } /* But even if no shift was needed, update ksize */ if (node->mn_ksize != key->mv_size) node->mn_ksize = key->mv_size; if (key->mv_size) memcpy(NODEKEY(node), key->mv_data, key->mv_size); return MDB_SUCCESS; } static void mdb_cursor_copy(const MDB_cursor *csrc, MDB_cursor *cdst); /** Perform \b act while tracking temporary cursor \b mn */ #define WITH_CURSOR_TRACKING(mn, act) do { \ MDB_cursor dummy, *tracked, **tp = &(mn).mc_txn->mt_cursors[mn.mc_dbi]; \ if ((mn).mc_flags & C_SUB) { \ dummy.mc_flags = C_INITIALIZED; \ dummy.mc_xcursor = (MDB_xcursor *)&(mn); \ tracked = &dummy; \ } else { \ tracked = &(mn); \ } \ tracked->mc_next = *tp; \ *tp = tracked; \ { act; } \ *tp = tracked->mc_next; \ } while (0) /** Move a node from csrc to cdst. */ static int mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft) { MDB_node *srcnode; MDB_val key, data; pgno_t srcpg; MDB_cursor mn; int rc; unsigned short flags; DKBUF; /* Mark src and dst as dirty. */ if ((rc = mdb_page_touch(csrc)) || (rc = mdb_page_touch(cdst))) return rc; if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_size = csrc->mc_db->md_pad; key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], csrc->mc_ki[csrc->mc_top], key.mv_size); data.mv_size = 0; data.mv_data = NULL; srcpg = 0; flags = 0; } else { srcnode = NODEPTR(csrc->mc_pg[csrc->mc_top], csrc->mc_ki[csrc->mc_top]); mdb_cassert(csrc, !((size_t)srcnode & 1)); srcpg = NODEPGNO(srcnode); flags = srcnode->mn_flags; if (csrc->mc_ki[csrc->mc_top] == 0 && IS_BRANCH(csrc->mc_pg[csrc->mc_top])) { unsigned int snum = csrc->mc_snum; MDB_node *s2; /* must find the lowest key below src */ rc = mdb_page_search_lowest(csrc); if (rc) return rc; if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_size = csrc->mc_db->md_pad; key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], 0, key.mv_size); } else { s2 = NODEPTR(csrc->mc_pg[csrc->mc_top], 0); key.mv_size = NODEKSZ(s2); key.mv_data = NODEKEY(s2); } csrc->mc_snum = snum--; csrc->mc_top = snum; } else { key.mv_size = NODEKSZ(srcnode); key.mv_data = NODEKEY(srcnode); } data.mv_size = NODEDSZ(srcnode); data.mv_data = NODEDATA(srcnode); } mn.mc_xcursor = NULL; if (IS_BRANCH(cdst->mc_pg[cdst->mc_top]) && cdst->mc_ki[cdst->mc_top] == 0) { unsigned int snum = cdst->mc_snum; MDB_node *s2; MDB_val bkey; /* must find the lowest key below dst */ mdb_cursor_copy(cdst, &mn); rc = mdb_page_search_lowest(&mn); if (rc) return rc; if (IS_LEAF2(mn.mc_pg[mn.mc_top])) { bkey.mv_size = mn.mc_db->md_pad; bkey.mv_data = LEAF2KEY(mn.mc_pg[mn.mc_top], 0, bkey.mv_size); } else { s2 = NODEPTR(mn.mc_pg[mn.mc_top], 0); bkey.mv_size = NODEKSZ(s2); bkey.mv_data = NODEKEY(s2); } mn.mc_snum = snum--; mn.mc_top = snum; mn.mc_ki[snum] = 0; rc = mdb_update_key(&mn, &bkey); if (rc) return rc; } DPRINTF(("moving %s node %u [%s] on page %"Yu" to node %u on page %"Yu, IS_LEAF(csrc->mc_pg[csrc->mc_top]) ? "leaf" : "branch", csrc->mc_ki[csrc->mc_top], DKEY(&key), csrc->mc_pg[csrc->mc_top]->mp_pgno, cdst->mc_ki[cdst->mc_top], cdst->mc_pg[cdst->mc_top]->mp_pgno)); /* Add the node to the destination page. */ rc = mdb_node_add(cdst, cdst->mc_ki[cdst->mc_top], &key, &data, srcpg, flags); if (rc != MDB_SUCCESS) return rc; /* Delete the node from the source page. */ mdb_node_del(csrc, key.mv_size); { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = csrc->mc_dbi; MDB_page *mpd, *mps; mps = csrc->mc_pg[csrc->mc_top]; /* If we're adding on the left, bump others up */ if (fromleft) { mpd = cdst->mc_pg[csrc->mc_top]; for (m2 = csrc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (csrc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (!(m3->mc_flags & C_INITIALIZED) || m3->mc_top < csrc->mc_top) continue; if (m3 != cdst && m3->mc_pg[csrc->mc_top] == mpd && m3->mc_ki[csrc->mc_top] >= cdst->mc_ki[csrc->mc_top]) { m3->mc_ki[csrc->mc_top]++; } if (m3 !=csrc && m3->mc_pg[csrc->mc_top] == mps && m3->mc_ki[csrc->mc_top] == csrc->mc_ki[csrc->mc_top]) { m3->mc_pg[csrc->mc_top] = cdst->mc_pg[cdst->mc_top]; m3->mc_ki[csrc->mc_top] = cdst->mc_ki[cdst->mc_top]; m3->mc_ki[csrc->mc_top-1]++; } if (IS_LEAF(mps)) XCURSOR_REFRESH(m3, csrc->mc_top, m3->mc_pg[csrc->mc_top]); } } else /* Adding on the right, bump others down */ { for (m2 = csrc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (csrc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == csrc) continue; if (!(m3->mc_flags & C_INITIALIZED) || m3->mc_top < csrc->mc_top) continue; if (m3->mc_pg[csrc->mc_top] == mps) { if (!m3->mc_ki[csrc->mc_top]) { m3->mc_pg[csrc->mc_top] = cdst->mc_pg[cdst->mc_top]; m3->mc_ki[csrc->mc_top] = cdst->mc_ki[cdst->mc_top]; m3->mc_ki[csrc->mc_top-1]--; } else { m3->mc_ki[csrc->mc_top]--; } if (IS_LEAF(mps)) XCURSOR_REFRESH(m3, csrc->mc_top, m3->mc_pg[csrc->mc_top]); } } } } /* Update the parent separators. */ if (csrc->mc_ki[csrc->mc_top] == 0) { if (csrc->mc_ki[csrc->mc_top-1] != 0) { if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], 0, key.mv_size); } else { srcnode = NODEPTR(csrc->mc_pg[csrc->mc_top], 0); key.mv_size = NODEKSZ(srcnode); key.mv_data = NODEKEY(srcnode); } DPRINTF(("update separator for source page %"Yu" to [%s]", csrc->mc_pg[csrc->mc_top]->mp_pgno, DKEY(&key))); mdb_cursor_copy(csrc, &mn); mn.mc_snum--; mn.mc_top--; /* We want mdb_rebalance to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_update_key(&mn, &key)); if (rc) return rc; } if (IS_BRANCH(csrc->mc_pg[csrc->mc_top])) { MDB_val nullkey; indx_t ix = csrc->mc_ki[csrc->mc_top]; nullkey.mv_size = 0; csrc->mc_ki[csrc->mc_top] = 0; rc = mdb_update_key(csrc, &nullkey); csrc->mc_ki[csrc->mc_top] = ix; mdb_cassert(csrc, rc == MDB_SUCCESS); } } if (cdst->mc_ki[cdst->mc_top] == 0) { if (cdst->mc_ki[cdst->mc_top-1] != 0) { if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_data = LEAF2KEY(cdst->mc_pg[cdst->mc_top], 0, key.mv_size); } else { srcnode = NODEPTR(cdst->mc_pg[cdst->mc_top], 0); key.mv_size = NODEKSZ(srcnode); key.mv_data = NODEKEY(srcnode); } DPRINTF(("update separator for destination page %"Yu" to [%s]", cdst->mc_pg[cdst->mc_top]->mp_pgno, DKEY(&key))); mdb_cursor_copy(cdst, &mn); mn.mc_snum--; mn.mc_top--; /* We want mdb_rebalance to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_update_key(&mn, &key)); if (rc) return rc; } if (IS_BRANCH(cdst->mc_pg[cdst->mc_top])) { MDB_val nullkey; indx_t ix = cdst->mc_ki[cdst->mc_top]; nullkey.mv_size = 0; cdst->mc_ki[cdst->mc_top] = 0; rc = mdb_update_key(cdst, &nullkey); cdst->mc_ki[cdst->mc_top] = ix; mdb_cassert(cdst, rc == MDB_SUCCESS); } } return MDB_SUCCESS; } /** Merge one page into another. * The nodes from the page pointed to by \b csrc will * be copied to the page pointed to by \b cdst and then * the \b csrc page will be freed. * @param[in] csrc Cursor pointing to the source page. * @param[in] cdst Cursor pointing to the destination page. * @return 0 on success, non-zero on failure. */ static int mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst) { MDB_page *psrc, *pdst; MDB_node *srcnode; MDB_val key, data; unsigned nkeys; int rc; indx_t i, j; psrc = csrc->mc_pg[csrc->mc_top]; pdst = cdst->mc_pg[cdst->mc_top]; DPRINTF(("merging page %"Yu" into %"Yu, psrc->mp_pgno, pdst->mp_pgno)); mdb_cassert(csrc, csrc->mc_snum > 1); /* can't merge root page */ mdb_cassert(csrc, cdst->mc_snum > 1); /* Mark dst as dirty. */ if ((rc = mdb_page_touch(cdst))) return rc; /* get dst page again now that we've touched it. */ pdst = cdst->mc_pg[cdst->mc_top]; /* Move all nodes from src to dst. */ j = nkeys = NUMKEYS(pdst); if (IS_LEAF2(psrc)) { key.mv_size = csrc->mc_db->md_pad; key.mv_data = METADATA(psrc); for (i = 0; i < NUMKEYS(psrc); i++, j++) { rc = mdb_node_add(cdst, j, &key, NULL, 0, 0); if (rc != MDB_SUCCESS) return rc; key.mv_data = (char *)key.mv_data + key.mv_size; } } else { for (i = 0; i < NUMKEYS(psrc); i++, j++) { srcnode = NODEPTR(psrc, i); if (i == 0 && IS_BRANCH(psrc)) { MDB_cursor mn; MDB_node *s2; mdb_cursor_copy(csrc, &mn); mn.mc_xcursor = NULL; /* must find the lowest key below src */ rc = mdb_page_search_lowest(&mn); if (rc) return rc; if (IS_LEAF2(mn.mc_pg[mn.mc_top])) { key.mv_size = mn.mc_db->md_pad; key.mv_data = LEAF2KEY(mn.mc_pg[mn.mc_top], 0, key.mv_size); } else { s2 = NODEPTR(mn.mc_pg[mn.mc_top], 0); key.mv_size = NODEKSZ(s2); key.mv_data = NODEKEY(s2); } } else { key.mv_size = srcnode->mn_ksize; key.mv_data = NODEKEY(srcnode); } data.mv_size = NODEDSZ(srcnode); data.mv_data = NODEDATA(srcnode); rc = mdb_node_add(cdst, j, &key, &data, NODEPGNO(srcnode), srcnode->mn_flags); if (rc != MDB_SUCCESS) return rc; } } DPRINTF(("dst page %"Yu" now has %u keys (%.1f%% filled)", pdst->mp_pgno, NUMKEYS(pdst), (float)PAGEFILL(cdst->mc_txn->mt_env, pdst) / 10)); /* Unlink the src page from parent and add to free list. */ csrc->mc_top--; mdb_node_del(csrc, 0); if (csrc->mc_ki[csrc->mc_top] == 0) { key.mv_size = 0; rc = mdb_update_key(csrc, &key); if (rc) { csrc->mc_top++; return rc; } } csrc->mc_top++; psrc = csrc->mc_pg[csrc->mc_top]; /* If not operating on FreeDB, allow this page to be reused * in this txn. Otherwise just add to free list. */ rc = mdb_page_loose(csrc, psrc); if (rc) return rc; if (IS_LEAF(psrc)) csrc->mc_db->md_leaf_pages--; else csrc->mc_db->md_branch_pages--; { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = csrc->mc_dbi; unsigned int top = csrc->mc_top; for (m2 = csrc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (csrc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == csrc) continue; if (m3->mc_snum < csrc->mc_snum) continue; if (m3->mc_pg[top] == psrc) { m3->mc_pg[top] = pdst; m3->mc_ki[top] += nkeys; m3->mc_ki[top-1] = cdst->mc_ki[top-1]; } else if (m3->mc_pg[top-1] == csrc->mc_pg[top-1] && m3->mc_ki[top-1] > csrc->mc_ki[top-1]) { m3->mc_ki[top-1]--; } if (IS_LEAF(psrc)) XCURSOR_REFRESH(m3, top, m3->mc_pg[top]); } } { unsigned int snum = cdst->mc_snum; uint16_t depth = cdst->mc_db->md_depth; mdb_cursor_pop(cdst); rc = mdb_rebalance(cdst); /* Did the tree height change? */ if (depth != cdst->mc_db->md_depth) snum += cdst->mc_db->md_depth - depth; cdst->mc_snum = snum; cdst->mc_top = snum-1; } return rc; } /** Copy the contents of a cursor. * @param[in] csrc The cursor to copy from. * @param[out] cdst The cursor to copy to. */ static void mdb_cursor_copy(const MDB_cursor *csrc, MDB_cursor *cdst) { unsigned int i; cdst->mc_txn = csrc->mc_txn; cdst->mc_dbi = csrc->mc_dbi; cdst->mc_db = csrc->mc_db; cdst->mc_dbx = csrc->mc_dbx; cdst->mc_snum = csrc->mc_snum; cdst->mc_top = csrc->mc_top; cdst->mc_flags = csrc->mc_flags; MC_SET_OVPG(cdst, MC_OVPG(csrc)); for (i=0; imc_snum; i++) { cdst->mc_pg[i] = csrc->mc_pg[i]; cdst->mc_ki[i] = csrc->mc_ki[i]; } } /** Rebalance the tree after a delete operation. * @param[in] mc Cursor pointing to the page where rebalancing * should begin. * @return 0 on success, non-zero on failure. */ static int mdb_rebalance(MDB_cursor *mc) { MDB_node *node; int rc, fromleft; unsigned int ptop, minkeys, thresh; MDB_cursor mn; indx_t oldki; if (IS_BRANCH(mc->mc_pg[mc->mc_top])) { minkeys = 2; thresh = 1; } else { minkeys = 1; thresh = FILL_THRESHOLD; } DPRINTF(("rebalancing %s page %"Yu" (has %u keys, %.1f%% full)", IS_LEAF(mc->mc_pg[mc->mc_top]) ? "leaf" : "branch", mdb_dbg_pgno(mc->mc_pg[mc->mc_top]), NUMKEYS(mc->mc_pg[mc->mc_top]), (float)PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) / 10)); if (PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) >= thresh && NUMKEYS(mc->mc_pg[mc->mc_top]) >= minkeys) { DPRINTF(("no need to rebalance page %"Yu", above fill threshold", mdb_dbg_pgno(mc->mc_pg[mc->mc_top]))); return MDB_SUCCESS; } if (mc->mc_snum < 2) { MDB_page *mp = mc->mc_pg[0]; if (IS_SUBP(mp)) { DPUTS("Can't rebalance a subpage, ignoring"); return MDB_SUCCESS; } if (NUMKEYS(mp) == 0) { DPUTS("tree is completely empty"); mc->mc_db->md_root = P_INVALID; mc->mc_db->md_depth = 0; mc->mc_db->md_leaf_pages = 0; rc = mdb_midl_append(&mc->mc_txn->mt_free_pgs, mp->mp_pgno); if (rc) return rc; /* Adjust cursors pointing to mp */ mc->mc_snum = 0; mc->mc_top = 0; mc->mc_flags &= ~C_INITIALIZED; { MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (!(m3->mc_flags & C_INITIALIZED) || (m3->mc_snum < mc->mc_snum)) continue; if (m3->mc_pg[0] == mp) { m3->mc_snum = 0; m3->mc_top = 0; m3->mc_flags &= ~C_INITIALIZED; } } } } else if (IS_BRANCH(mp) && NUMKEYS(mp) == 1) { int i; DPUTS("collapsing root page!"); rc = mdb_midl_append(&mc->mc_txn->mt_free_pgs, mp->mp_pgno); if (rc) return rc; mc->mc_db->md_root = NODEPGNO(NODEPTR(mp, 0)); rc = mdb_page_get(mc, mc->mc_db->md_root, &mc->mc_pg[0], NULL); if (rc) return rc; mc->mc_db->md_depth--; mc->mc_db->md_branch_pages--; mc->mc_ki[0] = mc->mc_ki[1]; for (i = 1; imc_db->md_depth; i++) { mc->mc_pg[i] = mc->mc_pg[i+1]; mc->mc_ki[i] = mc->mc_ki[i+1]; } { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == mc) continue; if (!(m3->mc_flags & C_INITIALIZED)) continue; if (m3->mc_pg[0] == mp) { for (i=0; imc_db->md_depth; i++) { m3->mc_pg[i] = m3->mc_pg[i+1]; m3->mc_ki[i] = m3->mc_ki[i+1]; } m3->mc_snum--; m3->mc_top--; } } } } else DPUTS("root page doesn't need rebalancing"); return MDB_SUCCESS; } /* The parent (branch page) must have at least 2 pointers, * otherwise the tree is invalid. */ ptop = mc->mc_top-1; mdb_cassert(mc, NUMKEYS(mc->mc_pg[ptop]) > 1); /* Leaf page fill factor is below the threshold. * Try to move keys from left or right neighbor, or * merge with a neighbor page. */ /* Find neighbors. */ mdb_cursor_copy(mc, &mn); mn.mc_xcursor = NULL; oldki = mc->mc_ki[mc->mc_top]; if (mc->mc_ki[ptop] == 0) { /* We're the leftmost leaf in our parent. */ DPUTS("reading right neighbor"); mn.mc_ki[ptop]++; node = NODEPTR(mc->mc_pg[ptop], mn.mc_ki[ptop]); rc = mdb_page_get(mc, NODEPGNO(node), &mn.mc_pg[mn.mc_top], NULL); if (rc) return rc; mn.mc_ki[mn.mc_top] = 0; mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]); fromleft = 0; } else { /* There is at least one neighbor to the left. */ DPUTS("reading left neighbor"); mn.mc_ki[ptop]--; node = NODEPTR(mc->mc_pg[ptop], mn.mc_ki[ptop]); rc = mdb_page_get(mc, NODEPGNO(node), &mn.mc_pg[mn.mc_top], NULL); if (rc) return rc; mn.mc_ki[mn.mc_top] = NUMKEYS(mn.mc_pg[mn.mc_top]) - 1; mc->mc_ki[mc->mc_top] = 0; fromleft = 1; } DPRINTF(("found neighbor page %"Yu" (%u keys, %.1f%% full)", mn.mc_pg[mn.mc_top]->mp_pgno, NUMKEYS(mn.mc_pg[mn.mc_top]), (float)PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) / 10)); /* If the neighbor page is above threshold and has enough keys, * move one key from it. Otherwise we should try to merge them. * (A branch page must never have less than 2 keys.) */ if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= thresh && NUMKEYS(mn.mc_pg[mn.mc_top]) > minkeys) { rc = mdb_node_move(&mn, mc, fromleft); if (fromleft) { /* if we inserted on left, bump position up */ oldki++; } } else { if (!fromleft) { rc = mdb_page_merge(&mn, mc); } else { oldki += NUMKEYS(mn.mc_pg[mn.mc_top]); mn.mc_ki[mn.mc_top] += mc->mc_ki[mn.mc_top] + 1; /* We want mdb_rebalance to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_page_merge(mc, &mn)); mdb_cursor_copy(&mn, mc); } mc->mc_flags &= ~C_EOF; } mc->mc_ki[mc->mc_top] = oldki; return rc; } /** Complete a delete operation started by #mdb_cursor_del(). */ static int mdb_cursor_del0(MDB_cursor *mc) { int rc; MDB_page *mp; indx_t ki; unsigned int nkeys; MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; ki = mc->mc_ki[mc->mc_top]; mp = mc->mc_pg[mc->mc_top]; mdb_node_del(mc, mc->mc_db->md_pad); mc->mc_db->md_entries--; { /* Adjust other cursors pointing to mp */ for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { m3 = (mc->mc_flags & C_SUB) ? &m2->mc_xcursor->mx_cursor : m2; if (! (m2->mc_flags & m3->mc_flags & C_INITIALIZED)) continue; if (m3 == mc || m3->mc_snum < mc->mc_snum) continue; if (m3->mc_pg[mc->mc_top] == mp) { if (m3->mc_ki[mc->mc_top] == ki) { m3->mc_flags |= C_DEL; if (mc->mc_db->md_flags & MDB_DUPSORT) { /* Sub-cursor referred into dataset which is gone */ m3->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); } continue; } else if (m3->mc_ki[mc->mc_top] > ki) { m3->mc_ki[mc->mc_top]--; } XCURSOR_REFRESH(m3, mc->mc_top, mp); } } } rc = mdb_rebalance(mc); if (rc == MDB_SUCCESS) { /* DB is totally empty now, just bail out. * Other cursors adjustments were already done * by mdb_rebalance and aren't needed here. */ if (!mc->mc_snum) return rc; mp = mc->mc_pg[mc->mc_top]; nkeys = NUMKEYS(mp); /* Adjust other cursors pointing to mp */ for (m2 = mc->mc_txn->mt_cursors[dbi]; !rc && m2; m2=m2->mc_next) { m3 = (mc->mc_flags & C_SUB) ? &m2->mc_xcursor->mx_cursor : m2; if (! (m2->mc_flags & m3->mc_flags & C_INITIALIZED)) continue; if (m3->mc_snum < mc->mc_snum) continue; if (m3->mc_pg[mc->mc_top] == mp) { /* if m3 points past last node in page, find next sibling */ if (m3->mc_ki[mc->mc_top] >= mc->mc_ki[mc->mc_top]) { if (m3->mc_ki[mc->mc_top] >= nkeys) { rc = mdb_cursor_sibling(m3, 1); if (rc == MDB_NOTFOUND) { m3->mc_flags |= C_EOF; rc = MDB_SUCCESS; continue; } } if (mc->mc_db->md_flags & MDB_DUPSORT) { MDB_node *node = NODEPTR(m3->mc_pg[m3->mc_top], m3->mc_ki[m3->mc_top]); /* If this node has dupdata, it may need to be reinited * because its data has moved. * If the xcursor was not initd it must be reinited. * Else if node points to a subDB, nothing is needed. * Else (xcursor was initd, not a subDB) needs mc_pg[0] reset. */ if (node->mn_flags & F_DUPDATA) { if (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) { if (!(node->mn_flags & F_SUBDATA)) m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); } else { mdb_xcursor_init1(m3, node); m3->mc_xcursor->mx_cursor.mc_flags |= C_DEL; } } } } } } mc->mc_flags |= C_DEL; } if (rc) mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data) { if (!key || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; if (!F_ISSET(txn->mt_dbs[dbi].md_flags, MDB_DUPSORT)) { /* must ignore any data */ data = NULL; } return mdb_del0(txn, dbi, key, data, 0); } static int mdb_del0(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned flags) { MDB_cursor mc; MDB_xcursor mx; MDB_cursor_op op; MDB_val rdata, *xdata; int rc, exact = 0; DKBUF; DPRINTF(("====> delete db %u key [%s]", dbi, DKEY(key))); mdb_cursor_init(&mc, txn, dbi, &mx); if (data) { op = MDB_GET_BOTH; rdata = *data; xdata = &rdata; } else { op = MDB_SET; xdata = NULL; flags |= MDB_NODUPDATA; } rc = mdb_cursor_set(&mc, key, xdata, op, &exact); if (rc == 0) { /* let mdb_page_split know about this cursor if needed: * delete will trigger a rebalance; if it needs to move * a node from one page to another, it will have to * update the parent's separator key(s). If the new sepkey * is larger than the current one, the parent page may * run out of space, triggering a split. We need this * cursor to be consistent until the end of the rebalance. */ mc.mc_next = txn->mt_cursors[dbi]; txn->mt_cursors[dbi] = &mc; rc = mdb_cursor_del(&mc, flags); txn->mt_cursors[dbi] = mc.mc_next; } return rc; } /** Split a page and insert a new node. * Set #MDB_TXN_ERROR on failure. * @param[in,out] mc Cursor pointing to the page and desired insertion index. * The cursor will be updated to point to the actual page and index where * the node got inserted after the split. * @param[in] newkey The key for the newly inserted node. * @param[in] newdata The data for the newly inserted node. * @param[in] newpgno The page number, if the new node is a branch node. * @param[in] nflags The #NODE_ADD_FLAGS for the new node. * @return 0 on success, non-zero on failure. */ static int mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno, unsigned int nflags) { unsigned int flags; int rc = MDB_SUCCESS, new_root = 0, did_split = 0; indx_t newindx; pgno_t pgno = 0; int i, j, split_indx, nkeys, pmax; MDB_env *env = mc->mc_txn->mt_env; MDB_node *node; MDB_val sepkey, rkey, xdata, *rdata = &xdata; MDB_page *copy = NULL; MDB_page *mp, *rp, *pp; int ptop; MDB_cursor mn; DKBUF; mp = mc->mc_pg[mc->mc_top]; newindx = mc->mc_ki[mc->mc_top]; nkeys = NUMKEYS(mp); DPRINTF(("-----> splitting %s page %"Yu" and adding [%s] at index %i/%i", IS_LEAF(mp) ? "leaf" : "branch", mp->mp_pgno, DKEY(newkey), mc->mc_ki[mc->mc_top], nkeys)); /* Create a right sibling. */ if ((rc = mdb_page_new(mc, mp->mp_flags, 1, &rp))) return rc; rp->mp_pad = mp->mp_pad; DPRINTF(("new right sibling: page %"Yu, rp->mp_pgno)); /* Usually when splitting the root page, the cursor * height is 1. But when called from mdb_update_key, * the cursor height may be greater because it walks * up the stack while finding the branch slot to update. */ if (mc->mc_top < 1) { if ((rc = mdb_page_new(mc, P_BRANCH, 1, &pp))) goto done; /* shift current top to make room for new parent */ for (i=mc->mc_snum; i>0; i--) { mc->mc_pg[i] = mc->mc_pg[i-1]; mc->mc_ki[i] = mc->mc_ki[i-1]; } mc->mc_pg[0] = pp; mc->mc_ki[0] = 0; mc->mc_db->md_root = pp->mp_pgno; DPRINTF(("root split! new root = %"Yu, pp->mp_pgno)); new_root = mc->mc_db->md_depth++; /* Add left (implicit) pointer. */ if ((rc = mdb_node_add(mc, 0, NULL, NULL, mp->mp_pgno, 0)) != MDB_SUCCESS) { /* undo the pre-push */ mc->mc_pg[0] = mc->mc_pg[1]; mc->mc_ki[0] = mc->mc_ki[1]; mc->mc_db->md_root = mp->mp_pgno; mc->mc_db->md_depth--; goto done; } mc->mc_snum++; mc->mc_top++; ptop = 0; } else { ptop = mc->mc_top-1; DPRINTF(("parent branch page is %"Yu, mc->mc_pg[ptop]->mp_pgno)); } mdb_cursor_copy(mc, &mn); mn.mc_xcursor = NULL; mn.mc_pg[mn.mc_top] = rp; mn.mc_ki[ptop] = mc->mc_ki[ptop]+1; if (nflags & MDB_APPEND) { mn.mc_ki[mn.mc_top] = 0; sepkey = *newkey; split_indx = newindx; nkeys = 0; } else { split_indx = (nkeys+1) / 2; if (IS_LEAF2(rp)) { char *split, *ins; int x; unsigned int lsize, rsize, ksize; /* Move half of the keys to the right sibling */ x = mc->mc_ki[mc->mc_top] - split_indx; ksize = mc->mc_db->md_pad; split = LEAF2KEY(mp, split_indx, ksize); rsize = (nkeys - split_indx) * ksize; lsize = (nkeys - split_indx) * sizeof(indx_t); mp->mp_lower -= lsize; rp->mp_lower += lsize; mp->mp_upper += rsize - lsize; rp->mp_upper -= rsize - lsize; sepkey.mv_size = ksize; if (newindx == split_indx) { sepkey.mv_data = newkey->mv_data; } else { sepkey.mv_data = split; } if (x<0) { ins = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], ksize); memcpy(rp->mp_ptrs, split, rsize); sepkey.mv_data = rp->mp_ptrs; memmove(ins+ksize, ins, (split_indx - mc->mc_ki[mc->mc_top]) * ksize); memcpy(ins, newkey->mv_data, ksize); mp->mp_lower += sizeof(indx_t); mp->mp_upper -= ksize - sizeof(indx_t); } else { if (x) memcpy(rp->mp_ptrs, split, x * ksize); ins = LEAF2KEY(rp, x, ksize); memcpy(ins, newkey->mv_data, ksize); memcpy(ins+ksize, split + x * ksize, rsize - x * ksize); rp->mp_lower += sizeof(indx_t); rp->mp_upper -= ksize - sizeof(indx_t); mc->mc_ki[mc->mc_top] = x; } } else { int psize, nsize, k; /* Maximum free space in an empty page */ pmax = env->me_psize - PAGEHDRSZ; if (IS_LEAF(mp)) nsize = mdb_leaf_size(env, newkey, newdata); else nsize = mdb_branch_size(env, newkey); nsize = EVEN(nsize); /* grab a page to hold a temporary copy */ copy = mdb_page_malloc(mc->mc_txn, 1); if (copy == NULL) { rc = ENOMEM; goto done; } copy->mp_pgno = mp->mp_pgno; copy->mp_flags = mp->mp_flags; copy->mp_lower = (PAGEHDRSZ-PAGEBASE); copy->mp_upper = env->me_psize - PAGEBASE; /* prepare to insert */ for (i=0, j=0; imp_ptrs[j++] = 0; } copy->mp_ptrs[j++] = mp->mp_ptrs[i]; } /* When items are relatively large the split point needs * to be checked, because being off-by-one will make the * difference between success or failure in mdb_node_add. * * It's also relevant if a page happens to be laid out * such that one half of its nodes are all "small" and * the other half of its nodes are "large." If the new * item is also "large" and falls on the half with * "large" nodes, it also may not fit. * * As a final tweak, if the new item goes on the last * spot on the page (and thus, onto the new page), bias * the split so the new page is emptier than the old page. * This yields better packing during sequential inserts. */ if (nkeys < 32 || nsize > pmax/16 || newindx >= nkeys) { /* Find split point */ psize = 0; if (newindx <= split_indx || newindx >= nkeys) { i = 0; j = 1; k = newindx >= nkeys ? nkeys : split_indx+1+IS_LEAF(mp); } else { i = nkeys; j = -1; k = split_indx-1; } for (; i!=k; i+=j) { if (i == newindx) { psize += nsize; node = NULL; } else { node = (MDB_node *)((char *)mp + copy->mp_ptrs[i] + PAGEBASE); psize += NODESIZE + NODEKSZ(node) + sizeof(indx_t); if (IS_LEAF(mp)) { if (F_ISSET(node->mn_flags, F_BIGDATA)) psize += sizeof(pgno_t); else psize += NODEDSZ(node); } psize = EVEN(psize); } if (psize > pmax || i == k-j) { split_indx = i + (j<0); break; } } } if (split_indx == newindx) { sepkey.mv_size = newkey->mv_size; sepkey.mv_data = newkey->mv_data; } else { node = (MDB_node *)((char *)mp + copy->mp_ptrs[split_indx] + PAGEBASE); sepkey.mv_size = node->mn_ksize; sepkey.mv_data = NODEKEY(node); } } } DPRINTF(("separator is %d [%s]", split_indx, DKEY(&sepkey))); /* Copy separator key to the parent. */ if (SIZELEFT(mn.mc_pg[ptop]) < mdb_branch_size(env, &sepkey)) { int snum = mc->mc_snum; mn.mc_snum--; mn.mc_top--; did_split = 1; /* We want other splits to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_page_split(&mn, &sepkey, NULL, rp->mp_pgno, 0)); if (rc) goto done; /* root split? */ if (mc->mc_snum > snum) { ptop++; } /* Right page might now have changed parent. * Check if left page also changed parent. */ if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { for (i=0; imc_pg[i] = mn.mc_pg[i]; mc->mc_ki[i] = mn.mc_ki[i]; } mc->mc_pg[ptop] = mn.mc_pg[ptop]; if (mn.mc_ki[ptop]) { mc->mc_ki[ptop] = mn.mc_ki[ptop] - 1; } else { /* find right page's left sibling */ mc->mc_ki[ptop] = mn.mc_ki[ptop]; rc = mdb_cursor_sibling(mc, 0); } } } else { mn.mc_top--; rc = mdb_node_add(&mn, mn.mc_ki[ptop], &sepkey, NULL, rp->mp_pgno, 0); mn.mc_top++; } if (rc != MDB_SUCCESS) { if (rc == MDB_NOTFOUND) /* improper mdb_cursor_sibling() result */ rc = MDB_PROBLEM; goto done; } if (nflags & MDB_APPEND) { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[mc->mc_top] = 0; rc = mdb_node_add(mc, 0, newkey, newdata, newpgno, nflags); if (rc) goto done; for (i=0; imc_top; i++) mc->mc_ki[i] = mn.mc_ki[i]; } else if (!IS_LEAF2(mp)) { /* Move nodes */ mc->mc_pg[mc->mc_top] = rp; i = split_indx; j = 0; do { if (i == newindx) { rkey.mv_data = newkey->mv_data; rkey.mv_size = newkey->mv_size; if (IS_LEAF(mp)) { rdata = newdata; } else pgno = newpgno; flags = nflags; /* Update index for the new key. */ mc->mc_ki[mc->mc_top] = j; } else { node = (MDB_node *)((char *)mp + copy->mp_ptrs[i] + PAGEBASE); rkey.mv_data = NODEKEY(node); rkey.mv_size = node->mn_ksize; if (IS_LEAF(mp)) { xdata.mv_data = NODEDATA(node); xdata.mv_size = NODEDSZ(node); rdata = &xdata; } else pgno = NODEPGNO(node); flags = node->mn_flags; } if (!IS_LEAF(mp) && j == 0) { /* First branch index doesn't need key data. */ rkey.mv_size = 0; } rc = mdb_node_add(mc, j, &rkey, rdata, pgno, flags); if (rc) goto done; if (i == nkeys) { i = 0; j = 0; mc->mc_pg[mc->mc_top] = copy; } else { i++; j++; } } while (i != split_indx); nkeys = NUMKEYS(copy); for (i=0; imp_ptrs[i] = copy->mp_ptrs[i]; mp->mp_lower = copy->mp_lower; mp->mp_upper = copy->mp_upper; memcpy(NODEPTR(mp, nkeys-1), NODEPTR(copy, nkeys-1), env->me_psize - copy->mp_upper - PAGEBASE); /* reset back to original page */ if (newindx < split_indx) { mc->mc_pg[mc->mc_top] = mp; } else { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[ptop]++; /* Make sure mc_ki is still valid. */ if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { for (i=0; i<=ptop; i++) { mc->mc_pg[i] = mn.mc_pg[i]; mc->mc_ki[i] = mn.mc_ki[i]; } } } if (nflags & MDB_RESERVE) { node = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!(node->mn_flags & F_BIGDATA)) newdata->mv_data = NODEDATA(node); } } else { if (newindx >= split_indx) { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[ptop]++; /* Make sure mc_ki is still valid. */ if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { for (i=0; i<=ptop; i++) { mc->mc_pg[i] = mn.mc_pg[i]; mc->mc_ki[i] = mn.mc_ki[i]; } } } } { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; nkeys = NUMKEYS(mp); for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == mc) continue; if (!(m2->mc_flags & m3->mc_flags & C_INITIALIZED)) continue; if (new_root) { int k; /* sub cursors may be on different DB */ if (m3->mc_pg[0] != mp) continue; /* root split */ for (k=new_root; k>=0; k--) { m3->mc_ki[k+1] = m3->mc_ki[k]; m3->mc_pg[k+1] = m3->mc_pg[k]; } if (m3->mc_ki[0] >= nkeys) { m3->mc_ki[0] = 1; } else { m3->mc_ki[0] = 0; } m3->mc_pg[0] = mc->mc_pg[0]; m3->mc_snum++; m3->mc_top++; } if (m3->mc_top >= mc->mc_top && m3->mc_pg[mc->mc_top] == mp) { if (m3->mc_ki[mc->mc_top] >= newindx && !(nflags & MDB_SPLIT_REPLACE)) m3->mc_ki[mc->mc_top]++; if (m3->mc_ki[mc->mc_top] >= nkeys) { m3->mc_pg[mc->mc_top] = rp; m3->mc_ki[mc->mc_top] -= nkeys; for (i=0; imc_top; i++) { m3->mc_ki[i] = mn.mc_ki[i]; m3->mc_pg[i] = mn.mc_pg[i]; } } } else if (!did_split && m3->mc_top >= ptop && m3->mc_pg[ptop] == mc->mc_pg[ptop] && m3->mc_ki[ptop] >= mc->mc_ki[ptop]) { m3->mc_ki[ptop]++; } if (IS_LEAF(mp)) XCURSOR_REFRESH(m3, mc->mc_top, m3->mc_pg[mc->mc_top]); } } DPRINTF(("mp left: %d, rp left: %d", SIZELEFT(mp), SIZELEFT(rp))); done: if (copy) /* tmp page */ mdb_page_free(env, copy); if (rc) mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned int flags) { MDB_cursor mc; MDB_xcursor mx; int rc; if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (flags & ~(MDB_NOOVERWRITE|MDB_NODUPDATA|MDB_RESERVE|MDB_APPEND|MDB_APPENDDUP)) return EINVAL; if (txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; mdb_cursor_init(&mc, txn, dbi, &mx); mc.mc_next = txn->mt_cursors[dbi]; txn->mt_cursors[dbi] = &mc; rc = mdb_cursor_put(&mc, key, data, flags); txn->mt_cursors[dbi] = mc.mc_next; return rc; } #ifndef MDB_WBUF #define MDB_WBUF (1024*1024) #endif #define MDB_EOF 0x10 /**< #mdb_env_copyfd1() is done reading */ /** State needed for a double-buffering compacting copy. */ typedef struct mdb_copy { MDB_env *mc_env; MDB_txn *mc_txn; pthread_mutex_t mc_mutex; pthread_cond_t mc_cond; /**< Condition variable for #mc_new */ char *mc_wbuf[2]; char *mc_over[2]; int mc_wlen[2]; int mc_olen[2]; pgno_t mc_next_pgno; HANDLE mc_fd; int mc_toggle; /**< Buffer number in provider */ int mc_new; /**< (0-2 buffers to write) | (#MDB_EOF at end) */ /** Error code. Never cleared if set. Both threads can set nonzero * to fail the copy. Not mutex-protected, LMDB expects atomic int. */ volatile int mc_error; } mdb_copy; /** Dedicated writer thread for compacting copy. */ static THREAD_RET ESECT CALL_CONV mdb_env_copythr(void *arg) { mdb_copy *my = arg; char *ptr; int toggle = 0, wsize, rc; #ifdef _WIN32 DWORD len; #define DO_WRITE(rc, fd, ptr, w2, len) rc = WriteFile(fd, ptr, w2, &len, NULL) #else int len; #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) #ifdef SIGPIPE sigset_t set; sigemptyset(&set); sigaddset(&set, SIGPIPE); if ((rc = pthread_sigmask(SIG_BLOCK, &set, NULL)) != 0) my->mc_error = rc; #endif #endif pthread_mutex_lock(&my->mc_mutex); for(;;) { while (!my->mc_new) pthread_cond_wait(&my->mc_cond, &my->mc_mutex); if (my->mc_new == 0 + MDB_EOF) /* 0 buffers, just EOF */ break; wsize = my->mc_wlen[toggle]; ptr = my->mc_wbuf[toggle]; again: rc = MDB_SUCCESS; while (wsize > 0 && !my->mc_error) { DO_WRITE(rc, my->mc_fd, ptr, wsize, len); if (!rc) { rc = ErrCode(); #if defined(SIGPIPE) && !defined(_WIN32) if (rc == EPIPE) { /* Collect the pending SIGPIPE, otherwise at least OS X * gives it to the process on thread-exit (ITS#8504). */ int tmp; sigwait(&set, &tmp); } #endif break; } else if (len > 0) { rc = MDB_SUCCESS; ptr += len; wsize -= len; continue; } else { rc = EIO; break; } } if (rc) { my->mc_error = rc; } /* If there's an overflow page tail, write it too */ if (my->mc_olen[toggle]) { wsize = my->mc_olen[toggle]; ptr = my->mc_over[toggle]; my->mc_olen[toggle] = 0; goto again; } my->mc_wlen[toggle] = 0; toggle ^= 1; /* Return the empty buffer to provider */ my->mc_new--; pthread_cond_signal(&my->mc_cond); } pthread_mutex_unlock(&my->mc_mutex); return (THREAD_RET)0; #undef DO_WRITE } /** Give buffer and/or #MDB_EOF to writer thread, await unused buffer. * * @param[in] my control structure. * @param[in] adjust (1 to hand off 1 buffer) | (MDB_EOF when ending). */ static int ESECT mdb_env_cthr_toggle(mdb_copy *my, int adjust) { pthread_mutex_lock(&my->mc_mutex); my->mc_new += adjust; pthread_cond_signal(&my->mc_cond); while (my->mc_new & 2) /* both buffers in use */ pthread_cond_wait(&my->mc_cond, &my->mc_mutex); pthread_mutex_unlock(&my->mc_mutex); my->mc_toggle ^= (adjust & 1); /* Both threads reset mc_wlen, to be safe from threading errors */ my->mc_wlen[my->mc_toggle] = 0; return my->mc_error; } /** Depth-first tree traversal for compacting copy. * @param[in] my control structure. * @param[in,out] pg database root. * @param[in] flags includes #F_DUPDATA if it is a sorted-duplicate sub-DB. */ static int ESECT mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) { MDB_cursor mc = {0}; MDB_node *ni; MDB_page *mo, *mp, *leaf; char *buf, *ptr; int rc, toggle; unsigned int i; /* Empty DB, nothing to do */ if (*pg == P_INVALID) return MDB_SUCCESS; mc.mc_snum = 1; mc.mc_txn = my->mc_txn; mc.mc_flags = my->mc_txn->mt_flags & (C_ORIG_RDONLY|C_WRITEMAP); rc = mdb_page_get(&mc, *pg, &mc.mc_pg[0], NULL); if (rc) return rc; rc = mdb_page_search_root(&mc, NULL, MDB_PS_FIRST); if (rc) return rc; /* Make cursor pages writable */ buf = ptr = malloc(my->mc_env->me_psize * mc.mc_snum); if (buf == NULL) return ENOMEM; for (i=0; imc_env->me_psize); mc.mc_pg[i] = (MDB_page *)ptr; ptr += my->mc_env->me_psize; } /* This is writable space for a leaf page. Usually not needed. */ leaf = (MDB_page *)ptr; toggle = my->mc_toggle; while (mc.mc_snum > 0) { unsigned n; mp = mc.mc_pg[mc.mc_top]; n = NUMKEYS(mp); if (IS_LEAF(mp)) { if (!IS_LEAF2(mp) && !(flags & F_DUPDATA)) { for (i=0; imn_flags & F_BIGDATA) { MDB_page *omp; pgno_t pg; /* Need writable leaf */ if (mp != leaf) { mc.mc_pg[mc.mc_top] = leaf; mdb_page_copy(leaf, mp, my->mc_env->me_psize); mp = leaf; ni = NODEPTR(mp, i); } memcpy(&pg, NODEDATA(ni), sizeof(pg)); memcpy(NODEDATA(ni), &my->mc_next_pgno, sizeof(pgno_t)); rc = mdb_page_get(&mc, pg, &omp, NULL); if (rc) goto done; if (my->mc_wlen[toggle] >= MDB_WBUF) { rc = mdb_env_cthr_toggle(my, 1); if (rc) goto done; toggle = my->mc_toggle; } mo = (MDB_page *)(my->mc_wbuf[toggle] + my->mc_wlen[toggle]); memcpy(mo, omp, my->mc_env->me_psize); mo->mp_pgno = my->mc_next_pgno; my->mc_next_pgno += omp->mp_pages; my->mc_wlen[toggle] += my->mc_env->me_psize; if (omp->mp_pages > 1) { my->mc_olen[toggle] = my->mc_env->me_psize * (omp->mp_pages - 1); my->mc_over[toggle] = (char *)omp + my->mc_env->me_psize; rc = mdb_env_cthr_toggle(my, 1); if (rc) goto done; toggle = my->mc_toggle; } } else if (ni->mn_flags & F_SUBDATA) { MDB_db db; /* Need writable leaf */ if (mp != leaf) { mc.mc_pg[mc.mc_top] = leaf; mdb_page_copy(leaf, mp, my->mc_env->me_psize); mp = leaf; ni = NODEPTR(mp, i); } memcpy(&db, NODEDATA(ni), sizeof(db)); my->mc_toggle = toggle; rc = mdb_env_cwalk(my, &db.md_root, ni->mn_flags & F_DUPDATA); if (rc) goto done; toggle = my->mc_toggle; memcpy(NODEDATA(ni), &db, sizeof(db)); } } } } else { mc.mc_ki[mc.mc_top]++; if (mc.mc_ki[mc.mc_top] < n) { pgno_t pg; again: ni = NODEPTR(mp, mc.mc_ki[mc.mc_top]); pg = NODEPGNO(ni); rc = mdb_page_get(&mc, pg, &mp, NULL); if (rc) goto done; mc.mc_top++; mc.mc_snum++; mc.mc_ki[mc.mc_top] = 0; if (IS_BRANCH(mp)) { /* Whenever we advance to a sibling branch page, * we must proceed all the way down to its first leaf. */ mdb_page_copy(mc.mc_pg[mc.mc_top], mp, my->mc_env->me_psize); goto again; } else mc.mc_pg[mc.mc_top] = mp; continue; } } if (my->mc_wlen[toggle] >= MDB_WBUF) { rc = mdb_env_cthr_toggle(my, 1); if (rc) goto done; toggle = my->mc_toggle; } mo = (MDB_page *)(my->mc_wbuf[toggle] + my->mc_wlen[toggle]); mdb_page_copy(mo, mp, my->mc_env->me_psize); mo->mp_pgno = my->mc_next_pgno++; my->mc_wlen[toggle] += my->mc_env->me_psize; if (mc.mc_top) { /* Update parent if there is one */ ni = NODEPTR(mc.mc_pg[mc.mc_top-1], mc.mc_ki[mc.mc_top-1]); SETPGNO(ni, mo->mp_pgno); mdb_cursor_pop(&mc); } else { /* Otherwise we're done */ *pg = mo->mp_pgno; break; } } done: free(buf); return rc; } /** Copy environment with compaction. */ static int ESECT mdb_env_copyfd1(MDB_env *env, HANDLE fd) { MDB_meta *mm; MDB_page *mp; mdb_copy my = {0}; MDB_txn *txn = NULL; pthread_t thr; pgno_t root, new_root; int rc = MDB_SUCCESS; #ifdef _WIN32 if (!(my.mc_mutex = CreateMutex(NULL, FALSE, NULL)) || !(my.mc_cond = CreateEvent(NULL, FALSE, FALSE, NULL))) { rc = ErrCode(); goto done; } my.mc_wbuf[0] = _aligned_malloc(MDB_WBUF*2, env->me_os_psize); if (my.mc_wbuf[0] == NULL) { /* _aligned_malloc() sets errno, but we use Windows error codes */ rc = ERROR_NOT_ENOUGH_MEMORY; goto done; } #else if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) != 0) return rc; if ((rc = pthread_cond_init(&my.mc_cond, NULL)) != 0) goto done2; #ifdef HAVE_MEMALIGN my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2); if (my.mc_wbuf[0] == NULL) { rc = errno; goto done; } #else { void *p; if ((rc = posix_memalign(&p, env->me_os_psize, MDB_WBUF*2)) != 0) goto done; my.mc_wbuf[0] = p; } #endif #endif memset(my.mc_wbuf[0], 0, MDB_WBUF*2); my.mc_wbuf[1] = my.mc_wbuf[0] + MDB_WBUF; my.mc_next_pgno = NUM_METAS; my.mc_env = env; my.mc_fd = fd; rc = THREAD_CREATE(thr, mdb_env_copythr, &my); if (rc) goto done; rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) goto finish; mp = (MDB_page *)my.mc_wbuf[0]; memset(mp, 0, NUM_METAS * env->me_psize); mp->mp_pgno = 0; mp->mp_flags = P_META; mm = (MDB_meta *)METADATA(mp); mdb_env_init_meta0(env, mm); mm->mm_address = env->me_metas[0]->mm_address; mp = (MDB_page *)(my.mc_wbuf[0] + env->me_psize); mp->mp_pgno = 1; mp->mp_flags = P_META; *(MDB_meta *)METADATA(mp) = *mm; mm = (MDB_meta *)METADATA(mp); /* Set metapage 1 with current main DB */ root = new_root = txn->mt_dbs[MAIN_DBI].md_root; if (root != P_INVALID) { /* Count free pages + freeDB pages. Subtract from last_pg * to find the new last_pg, which also becomes the new root. */ MDB_ID freecount = 0; MDB_cursor mc; MDB_val key, data; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); while ((rc = mdb_cursor_get(&mc, &key, &data, MDB_NEXT)) == 0) freecount += *(MDB_ID *)data.mv_data; if (rc != MDB_NOTFOUND) goto finish; freecount += txn->mt_dbs[FREE_DBI].md_branch_pages + txn->mt_dbs[FREE_DBI].md_leaf_pages + txn->mt_dbs[FREE_DBI].md_overflow_pages; new_root = txn->mt_next_pgno - 1 - freecount; mm->mm_last_pg = new_root; mm->mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; mm->mm_dbs[MAIN_DBI].md_root = new_root; } else { /* When the DB is empty, handle it specially to * fix any breakage like page leaks from ITS#8174. */ mm->mm_dbs[MAIN_DBI].md_flags = txn->mt_dbs[MAIN_DBI].md_flags; } if (root != P_INVALID || mm->mm_dbs[MAIN_DBI].md_flags) { mm->mm_txnid = 1; /* use metapage 1 */ } my.mc_wlen[0] = env->me_psize * NUM_METAS; my.mc_txn = txn; rc = mdb_env_cwalk(&my, &root, 0); if (rc == MDB_SUCCESS && root != new_root) { rc = MDB_INCOMPATIBLE; /* page leak or corrupt DB */ } finish: if (rc) my.mc_error = rc; mdb_env_cthr_toggle(&my, 1 | MDB_EOF); rc = THREAD_FINISH(thr); mdb_txn_abort(txn); done: #ifdef _WIN32 if (my.mc_wbuf[0]) _aligned_free(my.mc_wbuf[0]); if (my.mc_cond) CloseHandle(my.mc_cond); if (my.mc_mutex) CloseHandle(my.mc_mutex); #else free(my.mc_wbuf[0]); pthread_cond_destroy(&my.mc_cond); done2: pthread_mutex_destroy(&my.mc_mutex); #endif return rc ? rc : my.mc_error; } /** Copy environment as-is. */ static int ESECT mdb_env_copyfd0(MDB_env *env, HANDLE fd) { MDB_txn *txn = NULL; mdb_mutexref_t wmutex = NULL; int rc; mdb_size_t wsize, w3; char *ptr; #ifdef _WIN32 DWORD len, w2; #define DO_WRITE(rc, fd, ptr, w2, len) rc = WriteFile(fd, ptr, w2, &len, NULL) #else ssize_t len; size_t w2; #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) #endif /* Do the lock/unlock of the reader mutex before starting the * write txn. Otherwise other read txns could block writers. */ rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) return rc; if (env->me_txns) { /* We must start the actual read txn after blocking writers */ mdb_txn_end(txn, MDB_END_RESET_TMP); /* Temporarily block writers until we snapshot the meta pages */ wmutex = env->me_wmutex; if (LOCK_MUTEX(rc, env, wmutex)) goto leave; rc = mdb_txn_renew0(txn); if (rc) { UNLOCK_MUTEX(wmutex); goto leave; } } wsize = env->me_psize * NUM_METAS; ptr = env->me_map; w2 = wsize; while (w2 > 0) { DO_WRITE(rc, fd, ptr, w2, len); if (!rc) { rc = ErrCode(); break; } else if (len > 0) { rc = MDB_SUCCESS; ptr += len; w2 -= len; continue; } else { /* Non-blocking or async handles are not supported */ rc = EIO; break; } } if (wmutex) UNLOCK_MUTEX(wmutex); if (rc) goto leave; w3 = txn->mt_next_pgno * env->me_psize; { mdb_size_t fsize = 0; if ((rc = mdb_fsize(env->me_fd, &fsize))) goto leave; if (w3 > fsize) w3 = fsize; } wsize = w3 - wsize; while (wsize > 0) { if (wsize > MAX_WRITE) w2 = MAX_WRITE; else w2 = wsize; DO_WRITE(rc, fd, ptr, w2, len); if (!rc) { rc = ErrCode(); break; } else if (len > 0) { rc = MDB_SUCCESS; ptr += len; wsize -= len; continue; } else { rc = EIO; break; } } leave: mdb_txn_abort(txn); return rc; } int ESECT mdb_env_copyfd2(MDB_env *env, HANDLE fd, unsigned int flags) { if (flags & MDB_CP_COMPACT) return mdb_env_copyfd1(env, fd); else return mdb_env_copyfd0(env, fd); } int ESECT mdb_env_copyfd(MDB_env *env, HANDLE fd) { return mdb_env_copyfd2(env, fd, 0); } int ESECT mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags) { int rc; MDB_name fname; HANDLE newfd = INVALID_HANDLE_VALUE; rc = mdb_fname_init(path, env->me_flags | MDB_NOLOCK, &fname); if (rc == MDB_SUCCESS) { rc = mdb_fopen(env, &fname, MDB_O_COPY, 0666, &newfd); mdb_fname_destroy(fname); } if (rc == MDB_SUCCESS) { rc = mdb_env_copyfd2(env, newfd, flags); if (close(newfd) < 0 && rc == MDB_SUCCESS) rc = ErrCode(); } return rc; } int ESECT mdb_env_copy(MDB_env *env, const char *path) { return mdb_env_copy2(env, path, 0); } int ESECT mdb_env_set_flags(MDB_env *env, unsigned int flag, int onoff) { if (flag & ~CHANGEABLE) return EINVAL; if (onoff) env->me_flags |= flag; else env->me_flags &= ~flag; return MDB_SUCCESS; } int ESECT mdb_env_get_flags(MDB_env *env, unsigned int *arg) { if (!env || !arg) return EINVAL; *arg = env->me_flags & (CHANGEABLE|CHANGELESS); return MDB_SUCCESS; } int ESECT mdb_env_set_userctx(MDB_env *env, void *ctx) { if (!env) return EINVAL; env->me_userctx = ctx; return MDB_SUCCESS; } void * ESECT mdb_env_get_userctx(MDB_env *env) { return env ? env->me_userctx : NULL; } int ESECT mdb_env_set_assert(MDB_env *env, MDB_assert_func *func) { if (!env) return EINVAL; #ifndef NDEBUG env->me_assert_func = func; #endif return MDB_SUCCESS; } int ESECT mdb_env_get_path(MDB_env *env, const char **arg) { if (!env || !arg) return EINVAL; *arg = env->me_path; return MDB_SUCCESS; } int ESECT mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *arg) { if (!env || !arg) return EINVAL; *arg = env->me_fd; return MDB_SUCCESS; } /** Common code for #mdb_stat() and #mdb_env_stat(). * @param[in] env the environment to operate in. * @param[in] db the #MDB_db record containing the stats to return. * @param[out] arg the address of an #MDB_stat structure to receive the stats. * @return 0, this function always succeeds. */ static int ESECT mdb_stat0(MDB_env *env, MDB_db *db, MDB_stat *arg) { arg->ms_psize = env->me_psize; arg->ms_depth = db->md_depth; arg->ms_branch_pages = db->md_branch_pages; arg->ms_leaf_pages = db->md_leaf_pages; arg->ms_overflow_pages = db->md_overflow_pages; arg->ms_entries = db->md_entries; return MDB_SUCCESS; } int ESECT mdb_env_stat(MDB_env *env, MDB_stat *arg) { MDB_meta *meta; if (env == NULL || arg == NULL) return EINVAL; meta = mdb_env_pick_meta(env); return mdb_stat0(env, &meta->mm_dbs[MAIN_DBI], arg); } int ESECT mdb_env_info(MDB_env *env, MDB_envinfo *arg) { MDB_meta *meta; if (env == NULL || arg == NULL) return EINVAL; meta = mdb_env_pick_meta(env); arg->me_mapaddr = meta->mm_address; arg->me_last_pgno = meta->mm_last_pg; arg->me_last_txnid = meta->mm_txnid; arg->me_mapsize = env->me_mapsize; arg->me_maxreaders = env->me_maxreaders; arg->me_numreaders = env->me_txns ? env->me_txns->mti_numreaders : 0; return MDB_SUCCESS; } /** Set the default comparison functions for a database. * Called immediately after a database is opened to set the defaults. * The user can then override them with #mdb_set_compare() or * #mdb_set_dupsort(). * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() */ static void mdb_default_cmp(MDB_txn *txn, MDB_dbi dbi) { uint16_t f = txn->mt_dbs[dbi].md_flags; txn->mt_dbxs[dbi].md_cmp = (f & MDB_REVERSEKEY) ? mdb_cmp_memnr : (f & MDB_INTEGERKEY) ? mdb_cmp_cint : mdb_cmp_memn; txn->mt_dbxs[dbi].md_dcmp = !(f & MDB_DUPSORT) ? 0 : ((f & MDB_INTEGERDUP) ? ((f & MDB_DUPFIXED) ? mdb_cmp_int : mdb_cmp_cint) : ((f & MDB_REVERSEDUP) ? mdb_cmp_memnr : mdb_cmp_memn)); } int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi) { MDB_val key, data; MDB_dbi i; MDB_cursor mc; MDB_db dummy; int rc, dbflag, exact; unsigned int unused = 0, seq; char *namedup; size_t len; if (flags & ~VALID_FLAGS) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; /* main DB? */ if (!name) { *dbi = MAIN_DBI; if (flags & PERSISTENT_FLAGS) { uint16_t f2 = flags & PERSISTENT_FLAGS; /* make sure flag changes get committed */ if ((txn->mt_dbs[MAIN_DBI].md_flags | f2) != txn->mt_dbs[MAIN_DBI].md_flags) { txn->mt_dbs[MAIN_DBI].md_flags |= f2; txn->mt_flags |= MDB_TXN_DIRTY; } } mdb_default_cmp(txn, MAIN_DBI); return MDB_SUCCESS; } if (txn->mt_dbxs[MAIN_DBI].md_cmp == NULL) { mdb_default_cmp(txn, MAIN_DBI); } /* Is the DB already open? */ len = strlen(name); for (i=CORE_DBS; imt_numdbs; i++) { if (!txn->mt_dbxs[i].md_name.mv_size) { /* Remember this free slot */ if (!unused) unused = i; continue; } if (len == txn->mt_dbxs[i].md_name.mv_size && !strncmp(name, txn->mt_dbxs[i].md_name.mv_data, len)) { *dbi = i; return MDB_SUCCESS; } } /* If no free slot and max hit, fail */ if (!unused && txn->mt_numdbs >= txn->mt_env->me_maxdbs) return MDB_DBS_FULL; /* Cannot mix named databases with some mainDB flags */ if (txn->mt_dbs[MAIN_DBI].md_flags & (MDB_DUPSORT|MDB_INTEGERKEY)) return (flags & MDB_CREATE) ? MDB_INCOMPATIBLE : MDB_NOTFOUND; /* Find the DB info */ dbflag = DB_NEW|DB_VALID|DB_USRVALID; exact = 0; key.mv_size = len; key.mv_data = (void *)name; mdb_cursor_init(&mc, txn, MAIN_DBI, NULL); rc = mdb_cursor_set(&mc, &key, &data, MDB_SET, &exact); if (rc == MDB_SUCCESS) { /* make sure this is actually a DB */ MDB_node *node = NODEPTR(mc.mc_pg[mc.mc_top], mc.mc_ki[mc.mc_top]); if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) != F_SUBDATA) return MDB_INCOMPATIBLE; } else { if (rc != MDB_NOTFOUND || !(flags & MDB_CREATE)) return rc; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) return EACCES; } /* Done here so we cannot fail after creating a new DB */ if ((namedup = strdup(name)) == NULL) return ENOMEM; if (rc) { /* MDB_NOTFOUND and MDB_CREATE: Create new DB */ data.mv_size = sizeof(MDB_db); data.mv_data = &dummy; memset(&dummy, 0, sizeof(dummy)); dummy.md_root = P_INVALID; dummy.md_flags = flags & PERSISTENT_FLAGS; WITH_CURSOR_TRACKING(mc, rc = mdb_cursor_put(&mc, &key, &data, F_SUBDATA)); dbflag |= DB_DIRTY; } if (rc) { free(namedup); } else { /* Got info, register DBI in this txn */ unsigned int slot = unused ? unused : txn->mt_numdbs; txn->mt_dbxs[slot].md_name.mv_data = namedup; txn->mt_dbxs[slot].md_name.mv_size = len; txn->mt_dbxs[slot].md_rel = NULL; txn->mt_dbflags[slot] = dbflag; /* txn-> and env-> are the same in read txns, use * tmp variable to avoid undefined assignment */ seq = ++txn->mt_env->me_dbiseqs[slot]; txn->mt_dbiseqs[slot] = seq; memcpy(&txn->mt_dbs[slot], data.mv_data, sizeof(MDB_db)); *dbi = slot; mdb_default_cmp(txn, slot); if (!unused) { txn->mt_numdbs++; } } return rc; } int ESECT mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *arg) { if (!arg || !TXN_DBI_EXIST(txn, dbi, DB_VALID)) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; if (txn->mt_dbflags[dbi] & DB_STALE) { MDB_cursor mc; MDB_xcursor mx; /* Stale, must read the DB's root. cursor_init does it for us. */ mdb_cursor_init(&mc, txn, dbi, &mx); } return mdb_stat0(txn->mt_env, &txn->mt_dbs[dbi], arg); } void mdb_dbi_close(MDB_env *env, MDB_dbi dbi) { char *ptr; if (dbi < CORE_DBS || dbi >= env->me_maxdbs) return; ptr = env->me_dbxs[dbi].md_name.mv_data; /* If there was no name, this was already closed */ if (ptr) { env->me_dbxs[dbi].md_name.mv_data = NULL; env->me_dbxs[dbi].md_name.mv_size = 0; env->me_dbflags[dbi] = 0; env->me_dbiseqs[dbi]++; free(ptr); } } int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags) { /* We could return the flags for the FREE_DBI too but what's the point? */ if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; *flags = txn->mt_dbs[dbi].md_flags & PERSISTENT_FLAGS; return MDB_SUCCESS; } /** Add all the DB's pages to the free list. * @param[in] mc Cursor on the DB to free. * @param[in] subs non-Zero to check for sub-DBs in this DB. * @return 0 on success, non-zero on failure. */ static int mdb_drop0(MDB_cursor *mc, int subs) { int rc; rc = mdb_page_search(mc, NULL, MDB_PS_FIRST); if (rc == MDB_SUCCESS) { MDB_txn *txn = mc->mc_txn; MDB_node *ni; MDB_cursor mx; unsigned int i; /* DUPSORT sub-DBs have no ovpages/DBs. Omit scanning leaves. * This also avoids any P_LEAF2 pages, which have no nodes. * Also if the DB doesn't have sub-DBs and has no overflow * pages, omit scanning leaves. */ if ((mc->mc_flags & C_SUB) || (!subs && !mc->mc_db->md_overflow_pages)) mdb_cursor_pop(mc); mdb_cursor_copy(mc, &mx); #ifdef MDB_VL32 /* bump refcount for mx's pages */ for (i=0; imc_snum; i++) mdb_page_get(&mx, mc->mc_pg[i]->mp_pgno, &mx.mc_pg[i], NULL); #endif while (mc->mc_snum > 0) { MDB_page *mp = mc->mc_pg[mc->mc_top]; unsigned n = NUMKEYS(mp); if (IS_LEAF(mp)) { for (i=0; imn_flags & F_BIGDATA) { MDB_page *omp; pgno_t pg; memcpy(&pg, NODEDATA(ni), sizeof(pg)); rc = mdb_page_get(mc, pg, &omp, NULL); if (rc != 0) goto done; mdb_cassert(mc, IS_OVERFLOW(omp)); rc = mdb_midl_append_range(&txn->mt_free_pgs, pg, omp->mp_pages); if (rc) goto done; mc->mc_db->md_overflow_pages -= omp->mp_pages; if (!mc->mc_db->md_overflow_pages && !subs) break; } else if (subs && (ni->mn_flags & F_SUBDATA)) { mdb_xcursor_init1(mc, ni); rc = mdb_drop0(&mc->mc_xcursor->mx_cursor, 0); if (rc) goto done; } } if (!subs && !mc->mc_db->md_overflow_pages) goto pop; } else { if ((rc = mdb_midl_need(&txn->mt_free_pgs, n)) != 0) goto done; for (i=0; imt_free_pgs, pg); } } if (!mc->mc_top) break; mc->mc_ki[mc->mc_top] = i; rc = mdb_cursor_sibling(mc, 1); if (rc) { if (rc != MDB_NOTFOUND) goto done; /* no more siblings, go back to beginning * of previous level. */ pop: mdb_cursor_pop(mc); mc->mc_ki[0] = 0; for (i=1; imc_snum; i++) { mc->mc_ki[i] = 0; mc->mc_pg[i] = mx.mc_pg[i]; } } } /* free it */ rc = mdb_midl_append(&txn->mt_free_pgs, mc->mc_db->md_root); done: if (rc) txn->mt_flags |= MDB_TXN_ERROR; /* drop refcount for mx's pages */ MDB_CURSOR_UNREF(&mx, 0); } else if (rc == MDB_NOTFOUND) { rc = MDB_SUCCESS; } mc->mc_flags &= ~C_INITIALIZED; return rc; } int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del) { MDB_cursor *mc, *m2; int rc; if ((unsigned)del > 1 || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) return EACCES; if (TXN_DBI_CHANGED(txn, dbi)) return MDB_BAD_DBI; rc = mdb_cursor_open(txn, dbi, &mc); if (rc) return rc; rc = mdb_drop0(mc, mc->mc_db->md_flags & MDB_DUPSORT); /* Invalidate the dropped DB's cursors */ for (m2 = txn->mt_cursors[dbi]; m2; m2 = m2->mc_next) m2->mc_flags &= ~(C_INITIALIZED|C_EOF); if (rc) goto leave; /* Can't delete the main DB */ if (del && dbi >= CORE_DBS) { rc = mdb_del0(txn, MAIN_DBI, &mc->mc_dbx->md_name, NULL, F_SUBDATA); if (!rc) { txn->mt_dbflags[dbi] = DB_STALE; mdb_dbi_close(txn->mt_env, dbi); } else { txn->mt_flags |= MDB_TXN_ERROR; } } else { /* reset the DB record, mark it dirty */ txn->mt_dbflags[dbi] |= DB_DIRTY; txn->mt_dbs[dbi].md_depth = 0; txn->mt_dbs[dbi].md_branch_pages = 0; txn->mt_dbs[dbi].md_leaf_pages = 0; txn->mt_dbs[dbi].md_overflow_pages = 0; txn->mt_dbs[dbi].md_entries = 0; txn->mt_dbs[dbi].md_root = P_INVALID; txn->mt_flags |= MDB_TXN_DIRTY; } leave: mdb_cursor_close(mc); return rc; } int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_cmp = cmp; return MDB_SUCCESS; } int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_dcmp = cmp; return MDB_SUCCESS; } int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_rel = rel; return MDB_SUCCESS; } int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_relctx = ctx; return MDB_SUCCESS; } int ESECT mdb_env_get_maxkeysize(MDB_env *env) { return ENV_MAXKEY(env); } int ESECT mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx) { unsigned int i, rdrs; MDB_reader *mr; char buf[64]; int rc = 0, first = 1; if (!env || !func) return -1; if (!env->me_txns) { return func("(no reader locks)\n", ctx); } rdrs = env->me_txns->mti_numreaders; mr = env->me_txns->mti_readers; for (i=0; i> 1; cursor = base + pivot + 1; val = pid - ids[cursor]; if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { /* found, so it's a duplicate */ return -1; } } if( val > 0 ) { ++cursor; } ids[0]++; for (n = ids[0]; n > cursor; n--) ids[n] = ids[n-1]; ids[n] = pid; return 0; } int ESECT mdb_reader_check(MDB_env *env, int *dead) { if (!env) return EINVAL; if (dead) *dead = 0; return env->me_txns ? mdb_reader_check0(env, 0, dead) : MDB_SUCCESS; } /** As #mdb_reader_check(). \b rlocked is set if caller locked #me_rmutex. */ static int ESECT mdb_reader_check0(MDB_env *env, int rlocked, int *dead) { mdb_mutexref_t rmutex = rlocked ? NULL : env->me_rmutex; unsigned int i, j, rdrs; MDB_reader *mr; MDB_PID_T *pids, pid; int rc = MDB_SUCCESS, count = 0; rdrs = env->me_txns->mti_numreaders; pids = malloc((rdrs+1) * sizeof(MDB_PID_T)); if (!pids) return ENOMEM; pids[0] = 0; mr = env->me_txns->mti_readers; for (i=0; ime_pid) { if (mdb_pid_insert(pids, pid) == 0) { if (!mdb_reader_pid(env, Pidcheck, pid)) { /* Stale reader found */ j = i; if (rmutex) { if ((rc = LOCK_MUTEX0(rmutex)) != 0) { if ((rc = mdb_mutex_failed(env, rmutex, rc))) break; rdrs = 0; /* the above checked all readers */ } else { /* Recheck, a new process may have reused pid */ if (mdb_reader_pid(env, Pidcheck, pid)) j = rdrs; } } for (; jme_rmutex); if (!rlocked) { /* Keep mti_txnid updated, otherwise next writer can * overwrite data which latest meta page refers to. */ meta = mdb_env_pick_meta(env); env->me_txns->mti_txnid = meta->mm_txnid; /* env is hosed if the dead thread was ours */ if (env->me_txn) { env->me_flags |= MDB_FATAL_ERROR; env->me_txn = NULL; rc = MDB_PANIC; } } DPRINTF(("%cmutex owner died, %s", (rlocked ? 'r' : 'w'), (rc ? "this process' env is hosed" : "recovering"))); rc2 = mdb_reader_check0(env, rlocked, NULL); if (rc2 == 0) rc2 = mdb_mutex_consistent(mutex); if (rc || (rc = rc2)) { DPRINTF(("LOCK_MUTEX recovery failed, %s", mdb_strerror(rc))); UNLOCK_MUTEX(mutex); } } else { #ifdef _WIN32 rc = ErrCode(); #endif DPRINTF(("LOCK_MUTEX failed, %s", mdb_strerror(rc))); } return rc; } #endif /* MDB_ROBUST_SUPPORTED */ #if defined(_WIN32) /** Convert \b src to new wchar_t[] string with room for \b xtra extra chars */ static int ESECT utf8_to_utf16(const char *src, MDB_name *dst, int xtra) { int rc, need = 0; wchar_t *result = NULL; for (;;) { /* malloc result, then fill it in */ need = MultiByteToWideChar(CP_UTF8, 0, src, -1, result, need); if (!need) { rc = ErrCode(); free(result); return rc; } if (!result) { result = malloc(sizeof(wchar_t) * (need + xtra)); if (!result) return ENOMEM; continue; } dst->mn_alloced = 1; dst->mn_len = need - 1; dst->mn_val = result; return MDB_SUCCESS; } } #endif /* defined(_WIN32) */ /** @} */ ================================================ FILE: ThirdParty/liblmdb/mdb_copy.1 ================================================ .TH MDB_COPY 1 "2017/07/31" "LMDB 0.9.70" .\" Copyright 2012-2019 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .SH NAME mdb_copy \- LMDB environment copy tool .SH SYNOPSIS .B mdb_copy [\c .BR \-V ] [\c .BR \-c ] [\c .BR \-n ] [\c .BR \-v ] .B srcpath [\c .BR dstpath ] .SH DESCRIPTION The .B mdb_copy utility copies an LMDB environment. The environment can be copied regardless of whether it is currently in use. No lockfile is created, since it gets recreated at need. If .I dstpath is specified it must be the path of an empty directory for storing the backup. Otherwise, the backup will be written to stdout. .SH OPTIONS .TP .BR \-V Write the library version number to the standard output, and exit. .TP .BR \-c Compact while copying. Only current data pages will be copied; freed or unused pages will be omitted from the copy. This option will slow down the backup process as it is more CPU-intensive. Currently it fails if the environment has suffered a page leak. .TP .BR \-n Open LDMB environment(s) which do not use subdirectories. .TP .BR \-v Use the previous environment state instead of the latest state. This may be useful if the latest state has been corrupted. .SH DIAGNOSTICS Exit status is zero if no errors occur. Errors result in a non-zero exit status and a diagnostic message being written to standard error. .SH CAVEATS This utility can trigger significant file size growth if run in parallel with write transactions, because pages which they free during copying cannot be reused until the copy is done. .SH "SEE ALSO" .BR mdb_stat (1) .SH AUTHOR Howard Chu of Symas Corporation ================================================ FILE: ThirdParty/liblmdb/mdb_copy.c ================================================ /* mdb_copy.c - memory-mapped database backup tool */ /* * Copyright 2012-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #ifdef _WIN32 #include #define MDB_STDOUT GetStdHandle(STD_OUTPUT_HANDLE) #else #define MDB_STDOUT 1 #endif #include #include #include #include "lmdb.h" static void sighandle(int sig) { } int main(int argc,char * argv[]) { int rc; MDB_env *env; const char *progname = argv[0], *act; unsigned flags = MDB_RDONLY; unsigned cpflags = 0; for (; argc > 1 && argv[1][0] == '-'; argc--, argv++) { if (argv[1][1] == 'n' && argv[1][2] == '\0') flags |= MDB_NOSUBDIR; else if (argv[1][1] == 'v' && argv[1][2] == '\0') flags |= MDB_PREVSNAPSHOT; else if (argv[1][1] == 'c' && argv[1][2] == '\0') cpflags |= MDB_CP_COMPACT; else if (argv[1][1] == 'V' && argv[1][2] == '\0') { printf("%s\n", MDB_VERSION_STRING); exit(0); } else argc = 0; } if (argc<2 || argc>3) { fprintf(stderr, "usage: %s [-V] [-c] [-n] [-v] srcpath [dstpath]\n", progname); exit(EXIT_FAILURE); } #ifdef SIGPIPE signal(SIGPIPE, sighandle); #endif #ifdef SIGHUP signal(SIGHUP, sighandle); #endif signal(SIGINT, sighandle); signal(SIGTERM, sighandle); act = "opening environment"; rc = mdb_env_create(&env); if (rc == MDB_SUCCESS) { rc = mdb_env_open(env, argv[1], flags, 0600); } if (rc == MDB_SUCCESS) { act = "copying"; if (argc == 2) rc = mdb_env_copyfd2(env, MDB_STDOUT, cpflags); else rc = mdb_env_copy2(env, argv[2], cpflags); } if (rc) fprintf(stderr, "%s: %s failed, error %d (%s)\n", progname, act, rc, mdb_strerror(rc)); mdb_env_close(env); return rc ? EXIT_FAILURE : EXIT_SUCCESS; } ================================================ FILE: ThirdParty/liblmdb/mdb_drop.1 ================================================ .TH MDB_DROP 1 "2017/11/19" "LMDB 0.9.70" .\" Copyright 2014-2018 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .SH NAME mdb_drop \- LMDB database delete tool .SH SYNOPSIS .B mdb_drop [\c .BR \-V ] [\c .BR \-n ] [\c .BR \-d ] [\c .BI \-s \ subdb\fR] .BR \ envpath .SH DESCRIPTION The .B mdb_drop utility empties or deletes a database in the specified environment. .SH OPTIONS .TP .BR \-V Write the library version number to the standard output, and exit. .TP .BR \-n Operate on an LMDB database which does not use subdirectories. .TP .BR \-d Delete the specified database, don't just empty it. .TP .BR \-s \ subdb Operate on a specific subdatabase. If no database is specified, only the main database is dropped. .SH DIAGNOSTICS Exit status is zero if no errors occur. Errors result in a non-zero exit status and a diagnostic message being written to standard error. .SH AUTHOR Howard Chu of Symas Corporation ================================================ FILE: ThirdParty/liblmdb/mdb_drop.c ================================================ /* mdb_drop.c - memory-mapped database delete tool */ /* * Copyright 2016-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include #include #include #include #include #include "lmdb.h" static volatile sig_atomic_t gotsig; static void dumpsig( int sig ) { gotsig=1; } static void usage(char *prog) { fprintf(stderr, "usage: %s [-V] [-n] [-d] [-s subdb] dbpath\n", prog); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int i, rc; MDB_env *env; MDB_txn *txn; MDB_dbi dbi; char *prog = argv[0]; char *envname; char *subname = NULL; int envflags = 0, delete = 0; if (argc < 2) { usage(prog); } /* -d: delete the db, don't just empty it * -s: drop the named subDB * -n: use NOSUBDIR flag on env_open * -V: print version and exit * (default) empty the main DB */ while ((i = getopt(argc, argv, "dns:V")) != EOF) { switch(i) { case 'V': printf("%s\n", MDB_VERSION_STRING); exit(0); break; case 'd': delete = 1; break; case 'n': envflags |= MDB_NOSUBDIR; break; case 's': subname = optarg; break; default: usage(prog); } } if (optind != argc - 1) usage(prog); #ifdef SIGPIPE signal(SIGPIPE, dumpsig); #endif #ifdef SIGHUP signal(SIGHUP, dumpsig); #endif signal(SIGINT, dumpsig); signal(SIGTERM, dumpsig); envname = argv[optind]; rc = mdb_env_create(&env); if (rc) { fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc)); return EXIT_FAILURE; } mdb_env_set_maxdbs(env, 2); rc = mdb_env_open(env, envname, envflags, 0664); if (rc) { fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } rc = mdb_txn_begin(env, NULL, 0, &txn); if (rc) { fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } rc = mdb_open(txn, subname, 0, &dbi); if (rc) { fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } rc = mdb_drop(txn, dbi, delete); if (rc) { fprintf(stderr, "mdb_drop failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } rc = mdb_txn_commit(txn); if (rc) { fprintf(stderr, "mdb_txn_commit failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } txn = NULL; txn_abort: if (txn) mdb_txn_abort(txn); env_close: mdb_env_close(env); return rc ? EXIT_FAILURE : EXIT_SUCCESS; } ================================================ FILE: ThirdParty/liblmdb/mdb_dump.1 ================================================ .TH MDB_DUMP 1 "2017/07/31" "LMDB 0.9.70" .\" Copyright 2014-2017 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .SH NAME mdb_dump \- LMDB environment export tool .SH SYNOPSIS .B mdb_dump [\c .BR \-V ] [\c .BI \-f \ file\fR] [\c .BR \-l ] [\c .BR \-n ] [\c .BR \-v ] [\c .BR \-p ] [\c .BR \-a \ | .BI \-s \ subdb\fR] .BR \ envpath .SH DESCRIPTION The .B mdb_dump utility reads a database and writes its contents to the standard output using a portable flat-text format understood by the .BR mdb_load (1) utility. .SH OPTIONS .TP .BR \-V Write the library version number to the standard output, and exit. .TP .BR \-f \ file Write to the specified file instead of to the standard output. .TP .BR \-l List the databases stored in the environment. Just the names will be listed, no data will be output. .TP .BR \-n Dump an LMDB database which does not use subdirectories. .TP .BR \-v Use the previous environment state instead of the latest state. This may be useful if the latest state has been corrupted. .TP .BR \-p If characters in either the key or data items are printing characters (as defined by isprint(3)), output them directly. This option permits users to use standard text editors and tools to modify the contents of databases. Note: different systems may have different notions about what characters are considered printing characters, and databases dumped in this manner may be less portable to external systems. .TP .BR \-a Dump all of the subdatabases in the environment. .TP .BR \-s \ subdb Dump a specific subdatabase. If no database is specified, only the main database is dumped. .SH DIAGNOSTICS Exit status is zero if no errors occur. Errors result in a non-zero exit status and a diagnostic message being written to standard error. Dumping and reloading databases that use user-defined comparison functions will result in new databases that use the default comparison functions. \fBIn this case it is quite likely that the reloaded database will be damaged beyond repair permitting neither record storage nor retrieval.\fP The only available workaround is to modify the source for the .BR mdb_load (1) utility to load the database using the correct comparison functions. .SH "SEE ALSO" .BR mdb_load (1) .SH AUTHOR Howard Chu of Symas Corporation ================================================ FILE: ThirdParty/liblmdb/mdb_dump.c ================================================ /* mdb_dump.c - memory-mapped database dump tool */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include #include #include #include #include #include "lmdb.h" #define Yu MDB_PRIy(u) #define PRINT 1 static int mode; typedef struct flagbit { int bit; char *name; } flagbit; flagbit dbflags[] = { { MDB_REVERSEKEY, "reversekey" }, { MDB_DUPSORT, "dupsort" }, { MDB_INTEGERKEY, "integerkey" }, { MDB_DUPFIXED, "dupfixed" }, { MDB_INTEGERDUP, "integerdup" }, { MDB_REVERSEDUP, "reversedup" }, { 0, NULL } }; static volatile sig_atomic_t gotsig; static void dumpsig( int sig ) { gotsig=1; } static const char hexc[] = "0123456789abcdef"; static void hex(unsigned char c) { putchar(hexc[c >> 4]); putchar(hexc[c & 0xf]); } static void text(MDB_val *v) { unsigned char *c, *end; putchar(' '); c = v->mv_data; end = c + v->mv_size; while (c < end) { if (isprint(*c)) { putchar(*c); } else { putchar('\\'); hex(*c); } c++; } putchar('\n'); } static void byte(MDB_val *v) { unsigned char *c, *end; putchar(' '); c = v->mv_data; end = c + v->mv_size; while (c < end) { hex(*c++); } putchar('\n'); } /* Dump in BDB-compatible format */ static int dumpit(MDB_txn *txn, MDB_dbi dbi, char *name) { MDB_cursor *mc; MDB_stat ms; MDB_val key, data; MDB_envinfo info; unsigned int flags; int rc, i; rc = mdb_dbi_flags(txn, dbi, &flags); if (rc) return rc; rc = mdb_stat(txn, dbi, &ms); if (rc) return rc; rc = mdb_env_info(mdb_txn_env(txn), &info); if (rc) return rc; printf("VERSION=3\n"); printf("format=%s\n", mode & PRINT ? "print" : "bytevalue"); if (name) printf("database=%s\n", name); printf("type=btree\n"); printf("mapsize=%"Yu"\n", info.me_mapsize); if (info.me_mapaddr) printf("mapaddr=%p\n", info.me_mapaddr); printf("maxreaders=%u\n", info.me_maxreaders); if (flags & MDB_DUPSORT) printf("duplicates=1\n"); for (i=0; dbflags[i].bit; i++) if (flags & dbflags[i].bit) printf("%s=1\n", dbflags[i].name); printf("db_pagesize=%d\n", ms.ms_psize); printf("HEADER=END\n"); rc = mdb_cursor_open(txn, dbi, &mc); if (rc) return rc; while ((rc = mdb_cursor_get(mc, &key, &data, MDB_NEXT) == MDB_SUCCESS)) { if (gotsig) { rc = EINTR; break; } if (mode & PRINT) { text(&key); text(&data); } else { byte(&key); byte(&data); } } printf("DATA=END\n"); if (rc == MDB_NOTFOUND) rc = MDB_SUCCESS; return rc; } static void usage(char *prog) { fprintf(stderr, "usage: %s [-V] [-f output] [-l] [-n] [-p] [-v] [-a|-s subdb] dbpath\n", prog); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int i, rc; MDB_env *env; MDB_txn *txn; MDB_dbi dbi; char *prog = argv[0]; char *envname; char *subname = NULL; int alldbs = 0, envflags = 0, list = 0; if (argc < 2) { usage(prog); } /* -a: dump main DB and all subDBs * -s: dump only the named subDB * -n: use NOSUBDIR flag on env_open * -p: use printable characters * -f: write to file instead of stdout * -v: use previous snapshot * -V: print version and exit * (default) dump only the main DB */ while ((i = getopt(argc, argv, "af:lnps:V")) != EOF) { switch(i) { case 'V': printf("%s\n", MDB_VERSION_STRING); exit(0); break; case 'l': list = 1; /*FALLTHROUGH*/; case 'a': if (subname) usage(prog); alldbs++; break; case 'f': if (freopen(optarg, "w", stdout) == NULL) { fprintf(stderr, "%s: %s: reopen: %s\n", prog, optarg, strerror(errno)); exit(EXIT_FAILURE); } break; case 'n': envflags |= MDB_NOSUBDIR; break; case 'v': envflags |= MDB_PREVSNAPSHOT; break; case 'p': mode |= PRINT; break; case 's': if (alldbs) usage(prog); subname = optarg; break; default: usage(prog); } } if (optind != argc - 1) usage(prog); #ifdef SIGPIPE signal(SIGPIPE, dumpsig); #endif #ifdef SIGHUP signal(SIGHUP, dumpsig); #endif signal(SIGINT, dumpsig); signal(SIGTERM, dumpsig); envname = argv[optind]; rc = mdb_env_create(&env); if (rc) { fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc)); return EXIT_FAILURE; } if (alldbs || subname) { mdb_env_set_maxdbs(env, 2); } rc = mdb_env_open(env, envname, envflags | MDB_RDONLY, 0664); if (rc) { fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) { fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } rc = mdb_open(txn, subname, 0, &dbi); if (rc) { fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } if (alldbs) { MDB_cursor *cursor; MDB_val key; int count = 0; rc = mdb_cursor_open(txn, dbi, &cursor); if (rc) { fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } while ((rc = mdb_cursor_get(cursor, &key, NULL, MDB_NEXT_NODUP)) == 0) { char *str; MDB_dbi db2; if (memchr(key.mv_data, '\0', key.mv_size)) continue; count++; str = malloc(key.mv_size+1); memcpy(str, key.mv_data, key.mv_size); str[key.mv_size] = '\0'; rc = mdb_open(txn, str, 0, &db2); if (rc == MDB_SUCCESS) { if (list) { printf("%s\n", str); list++; } else { rc = dumpit(txn, db2, str); if (rc) break; } mdb_close(env, db2); } free(str); if (rc) continue; } mdb_cursor_close(cursor); if (!count) { fprintf(stderr, "%s: %s does not contain multiple databases\n", prog, envname); rc = MDB_NOTFOUND; } else if (rc == MDB_NOTFOUND) { rc = MDB_SUCCESS; } } else { rc = dumpit(txn, dbi, subname); } if (rc && rc != MDB_NOTFOUND) fprintf(stderr, "%s: %s: %s\n", prog, envname, mdb_strerror(rc)); mdb_close(env, dbi); txn_abort: mdb_txn_abort(txn); env_close: mdb_env_close(env); return rc ? EXIT_FAILURE : EXIT_SUCCESS; } ================================================ FILE: ThirdParty/liblmdb/mdb_load.1 ================================================ .TH MDB_LOAD 1 "2015/09/30" "LMDB 0.9.17" .\" Copyright 2014-2018 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .SH NAME mdb_load \- LMDB environment import tool .SH SYNOPSIS .B mdb_load [\c .BR \-V ] [\c .BI \-f \ file\fR] [\c .BR \-n ] [\c .BI \-s \ subdb\fR] [\c .BR \-N ] [\c .BR \-T ] .BR \ envpath .SH DESCRIPTION The .B mdb_load utility reads from the standard input and loads it into the LMDB environment .BR envpath . The input to .B mdb_load must be in the output format specified by the .BR mdb_dump (1) utility or as specified by the .B -T option below. .SH OPTIONS .TP .BR \-V Write the library version number to the standard output, and exit. .TP .BR \-a Append all records in the order they appear in the input. The input is assumed to already be in correctly sorted order and no sorting or checking for redundant values will be performed. This option must be used to reload data that was produced by running .B mdb_dump on a database that uses custom compare functions. .TP .BR \-f \ file Read from the specified file instead of from the standard input. .TP .BR \-n Load an LMDB database which does not use subdirectories. .TP .BR \-s \ subdb Load a specific subdatabase. If no database is specified, data is loaded into the main database. .TP .BR \-N Don't overwrite existing records when loading into an already existing database; just skip them. .TP .BR \-T Load data from simple text files. The input must be paired lines of text, where the first line of the pair is the key item, and the second line of the pair is its corresponding data item. A simple escape mechanism, where newline and backslash (\\) characters are special, is applied to the text input. Newline characters are interpreted as record separators. Backslash characters in the text will be interpreted in one of two ways: If the backslash character precedes another backslash character, the pair will be interpreted as a literal backslash. If the backslash character precedes any other character, the two characters following the backslash will be interpreted as a hexadecimal specification of a single character; for example, \\0a is a newline character in the ASCII character set. For this reason, any backslash or newline characters that naturally occur in the text input must be escaped to avoid misinterpretation by .BR mdb_load . .SH DIAGNOSTICS Exit status is zero if no errors occur. Errors result in a non-zero exit status and a diagnostic message being written to standard error. .SH "SEE ALSO" .BR mdb_dump (1) .SH AUTHOR Howard Chu of Symas Corporation ================================================ FILE: ThirdParty/liblmdb/mdb_load.c ================================================ /* mdb_load.c - memory-mapped database load tool */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include #include #include #include #include "lmdb.h" #define PRINT 1 #define NOHDR 2 static int mode; static char *subname = NULL; static mdb_size_t lineno; static int version; static int flags; static char *prog; static int Eof; static MDB_envinfo info; static MDB_val kbuf, dbuf; static MDB_val k0buf; #define Yu MDB_PRIy(u) #define STRLENOF(s) (sizeof(s)-1) typedef struct flagbit { int bit; char *name; int len; } flagbit; #define S(s) s, STRLENOF(s) flagbit dbflags[] = { { MDB_REVERSEKEY, S("reversekey") }, { MDB_DUPSORT, S("dupsort") }, { MDB_INTEGERKEY, S("integerkey") }, { MDB_DUPFIXED, S("dupfixed") }, { MDB_INTEGERDUP, S("integerdup") }, { MDB_REVERSEDUP, S("reversedup") }, { 0, NULL, 0 } }; static void readhdr(void) { char *ptr; flags = 0; while (fgets(dbuf.mv_data, dbuf.mv_size, stdin) != NULL) { lineno++; if (!strncmp(dbuf.mv_data, "VERSION=", STRLENOF("VERSION="))) { version=atoi((char *)dbuf.mv_data+STRLENOF("VERSION=")); if (version > 3) { fprintf(stderr, "%s: line %"Yu": unsupported VERSION %d\n", prog, lineno, version); exit(EXIT_FAILURE); } } else if (!strncmp(dbuf.mv_data, "HEADER=END", STRLENOF("HEADER=END"))) { break; } else if (!strncmp(dbuf.mv_data, "format=", STRLENOF("format="))) { if (!strncmp((char *)dbuf.mv_data+STRLENOF("FORMAT="), "print", STRLENOF("print"))) mode |= PRINT; else if (strncmp((char *)dbuf.mv_data+STRLENOF("FORMAT="), "bytevalue", STRLENOF("bytevalue"))) { fprintf(stderr, "%s: line %"Yu": unsupported FORMAT %s\n", prog, lineno, (char *)dbuf.mv_data+STRLENOF("FORMAT=")); exit(EXIT_FAILURE); } } else if (!strncmp(dbuf.mv_data, "database=", STRLENOF("database="))) { ptr = memchr(dbuf.mv_data, '\n', dbuf.mv_size); if (ptr) *ptr = '\0'; if (subname) free(subname); subname = strdup((char *)dbuf.mv_data+STRLENOF("database=")); } else if (!strncmp(dbuf.mv_data, "type=", STRLENOF("type="))) { if (strncmp((char *)dbuf.mv_data+STRLENOF("type="), "btree", STRLENOF("btree"))) { fprintf(stderr, "%s: line %"Yu": unsupported type %s\n", prog, lineno, (char *)dbuf.mv_data+STRLENOF("type=")); exit(EXIT_FAILURE); } } else if (!strncmp(dbuf.mv_data, "mapaddr=", STRLENOF("mapaddr="))) { int i; ptr = memchr(dbuf.mv_data, '\n', dbuf.mv_size); if (ptr) *ptr = '\0'; i = sscanf((char *)dbuf.mv_data+STRLENOF("mapaddr="), "%p", &info.me_mapaddr); if (i != 1) { fprintf(stderr, "%s: line %"Yu": invalid mapaddr %s\n", prog, lineno, (char *)dbuf.mv_data+STRLENOF("mapaddr=")); exit(EXIT_FAILURE); } } else if (!strncmp(dbuf.mv_data, "mapsize=", STRLENOF("mapsize="))) { int i; ptr = memchr(dbuf.mv_data, '\n', dbuf.mv_size); if (ptr) *ptr = '\0'; i = sscanf((char *)dbuf.mv_data+STRLENOF("mapsize="), "%" MDB_SCNy(u), &info.me_mapsize); if (i != 1) { fprintf(stderr, "%s: line %"Yu": invalid mapsize %s\n", prog, lineno, (char *)dbuf.mv_data+STRLENOF("mapsize=")); exit(EXIT_FAILURE); } } else if (!strncmp(dbuf.mv_data, "maxreaders=", STRLENOF("maxreaders="))) { int i; ptr = memchr(dbuf.mv_data, '\n', dbuf.mv_size); if (ptr) *ptr = '\0'; i = sscanf((char *)dbuf.mv_data+STRLENOF("maxreaders="), "%u", &info.me_maxreaders); if (i != 1) { fprintf(stderr, "%s: line %"Yu": invalid maxreaders %s\n", prog, lineno, (char *)dbuf.mv_data+STRLENOF("maxreaders=")); exit(EXIT_FAILURE); } } else { int i; for (i=0; dbflags[i].bit; i++) { if (!strncmp(dbuf.mv_data, dbflags[i].name, dbflags[i].len) && ((char *)dbuf.mv_data)[dbflags[i].len] == '=') { flags |= dbflags[i].bit; break; } } if (!dbflags[i].bit) { ptr = memchr(dbuf.mv_data, '=', dbuf.mv_size); if (!ptr) { fprintf(stderr, "%s: line %"Yu": unexpected format\n", prog, lineno); exit(EXIT_FAILURE); } else { *ptr = '\0'; fprintf(stderr, "%s: line %"Yu": unrecognized keyword ignored: %s\n", prog, lineno, (char *)dbuf.mv_data); } } } } } static void badend(void) { fprintf(stderr, "%s: line %"Yu": unexpected end of input\n", prog, lineno); } static int unhex(unsigned char *c2) { int x, c; x = *c2++ & 0x4f; if (x & 0x40) x -= 55; c = x << 4; x = *c2 & 0x4f; if (x & 0x40) x -= 55; c |= x; return c; } static int readline(MDB_val *out, MDB_val *buf) { unsigned char *c1, *c2, *end; size_t len, l2; int c; if (!(mode & NOHDR)) { c = fgetc(stdin); if (c == EOF) { Eof = 1; return EOF; } if (c != ' ') { lineno++; if (fgets(buf->mv_data, buf->mv_size, stdin) == NULL) { badend: Eof = 1; badend(); return EOF; } if (c == 'D' && !strncmp(buf->mv_data, "ATA=END", STRLENOF("ATA=END"))) return EOF; goto badend; } } if (fgets(buf->mv_data, buf->mv_size, stdin) == NULL) { Eof = 1; return EOF; } lineno++; c1 = buf->mv_data; len = strlen((char *)c1); l2 = len; /* Is buffer too short? */ while (c1[len-1] != '\n') { buf->mv_data = realloc(buf->mv_data, buf->mv_size*2); if (!buf->mv_data) { Eof = 1; fprintf(stderr, "%s: line %"Yu": out of memory, line too long\n", prog, lineno); return EOF; } c1 = buf->mv_data; c1 += l2; if (fgets((char *)c1, buf->mv_size+1, stdin) == NULL) { Eof = 1; badend(); return EOF; } buf->mv_size *= 2; len = strlen((char *)c1); l2 += len; } c1 = c2 = buf->mv_data; len = l2; c1[--len] = '\0'; end = c1 + len; if (mode & PRINT) { while (c2 < end) { if (*c2 == '\\') { if (c2[1] == '\\') { c1++; c2 += 2; } else { if (c2+3 > end || !isxdigit(c2[1]) || !isxdigit(c2[2])) { Eof = 1; badend(); return EOF; } *c1++ = unhex(++c2); c2 += 2; } } else { /* copies are redundant when no escapes were used */ *c1++ = *c2++; } } } else { /* odd length not allowed */ if (len & 1) { Eof = 1; badend(); return EOF; } while (c2 < end) { if (!isxdigit(*c2) || !isxdigit(c2[1])) { Eof = 1; badend(); return EOF; } *c1++ = unhex(c2); c2 += 2; } } c2 = out->mv_data = buf->mv_data; out->mv_size = c1 - c2; return 0; } static void usage(void) { fprintf(stderr, "usage: %s [-V] [-a] [-f input] [-n] [-s name] [-N] [-T] dbpath\n", prog); exit(EXIT_FAILURE); } static int greater(const MDB_val *a, const MDB_val *b) { return 1; } int main(int argc, char *argv[]) { int i, rc; MDB_env *env; MDB_txn *txn; MDB_cursor *mc; MDB_dbi dbi; char *envname; int envflags = MDB_NOSYNC, putflags = 0; int dohdr = 0, append = 0; MDB_val prevk; prog = argv[0]; if (argc < 2) { usage(); } /* -a: append records in input order * -f: load file instead of stdin * -n: use NOSUBDIR flag on env_open * -s: load into named subDB * -N: use NOOVERWRITE on puts * -T: read plaintext * -V: print version and exit */ while ((i = getopt(argc, argv, "af:ns:NTV")) != EOF) { switch(i) { case 'V': printf("%s\n", MDB_VERSION_STRING); exit(0); break; case 'a': append = 1; break; case 'f': if (freopen(optarg, "r", stdin) == NULL) { fprintf(stderr, "%s: %s: reopen: %s\n", prog, optarg, strerror(errno)); exit(EXIT_FAILURE); } break; case 'n': envflags |= MDB_NOSUBDIR; break; case 's': subname = strdup(optarg); break; case 'N': putflags = MDB_NOOVERWRITE|MDB_NODUPDATA; break; case 'T': mode |= NOHDR | PRINT; break; default: usage(); } } if (optind != argc - 1) usage(); dbuf.mv_size = 4096; dbuf.mv_data = malloc(dbuf.mv_size); if (!(mode & NOHDR)) readhdr(); envname = argv[optind]; rc = mdb_env_create(&env); if (rc) { fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc)); return EXIT_FAILURE; } mdb_env_set_maxdbs(env, 2); if (info.me_maxreaders) mdb_env_set_maxreaders(env, info.me_maxreaders); if (info.me_mapsize) mdb_env_set_mapsize(env, info.me_mapsize); if (info.me_mapaddr) envflags |= MDB_FIXEDMAP; rc = mdb_env_open(env, envname, envflags, 0664); if (rc) { fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } kbuf.mv_size = mdb_env_get_maxkeysize(env) * 2 + 2; kbuf.mv_data = malloc(kbuf.mv_size * 2); k0buf.mv_size = kbuf.mv_size; k0buf.mv_data = (char *)kbuf.mv_data + kbuf.mv_size; prevk.mv_data = k0buf.mv_data; while(!Eof) { MDB_val key, data; int batch = 0; int appflag; if (!dohdr) { dohdr = 1; } else if (!(mode & NOHDR)) readhdr(); rc = mdb_txn_begin(env, NULL, 0, &txn); if (rc) { fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } rc = mdb_open(txn, subname, flags|MDB_CREATE, &dbi); if (rc) { fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } prevk.mv_size = 0; if (append) { mdb_set_compare(txn, dbi, greater); if (flags & MDB_DUPSORT) mdb_set_dupsort(txn, dbi, greater); } rc = mdb_cursor_open(txn, dbi, &mc); if (rc) { fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } while(1) { rc = readline(&key, &kbuf); if (rc) /* rc == EOF */ break; rc = readline(&data, &dbuf); if (rc) { fprintf(stderr, "%s: line %"Yu": failed to read key value\n", prog, lineno); goto txn_abort; } if (append) { appflag = MDB_APPEND; if (flags & MDB_DUPSORT) { if (prevk.mv_size == key.mv_size && !memcmp(prevk.mv_data, key.mv_data, key.mv_size)) appflag = MDB_CURRENT|MDB_APPENDDUP; else { memcpy(prevk.mv_data, key.mv_data, key.mv_size); prevk.mv_size = key.mv_size; } } } else { appflag = 0; } rc = mdb_cursor_put(mc, &key, &data, putflags|appflag); if (rc == MDB_KEYEXIST && putflags) continue; if (rc) { fprintf(stderr, "mdb_cursor_put failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } batch++; if (batch == 100) { rc = mdb_txn_commit(txn); if (rc) { fprintf(stderr, "%s: line %"Yu": txn_commit: %s\n", prog, lineno, mdb_strerror(rc)); goto env_close; } rc = mdb_txn_begin(env, NULL, 0, &txn); if (rc) { fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } rc = mdb_cursor_open(txn, dbi, &mc); if (rc) { fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } if (appflag & MDB_APPENDDUP) { MDB_val k, d; mdb_cursor_get(mc, &k, &d, MDB_LAST); } batch = 0; } } rc = mdb_txn_commit(txn); txn = NULL; if (rc) { fprintf(stderr, "%s: line %"Yu": txn_commit: %s\n", prog, lineno, mdb_strerror(rc)); goto env_close; } mdb_dbi_close(env, dbi); } txn_abort: mdb_txn_abort(txn); env_close: mdb_env_close(env); return rc ? EXIT_FAILURE : EXIT_SUCCESS; } ================================================ FILE: ThirdParty/liblmdb/mdb_stat.1 ================================================ .TH MDB_STAT 1 "2017/07/31" "LMDB 0.9.70" .\" Copyright 2012-2019 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .SH NAME mdb_stat \- LMDB environment status tool .SH SYNOPSIS .B mdb_stat [\c .BR \-V ] [\c .BR \-e ] [\c .BR \-f [ f [ f ]]] [\c .BR \-n ] [\c .BR \-v ] [\c .BR \-r [ r ]] [\c .BR \-a \ | .BI \-s \ subdb\fR] .BR \ envpath .SH DESCRIPTION The .B mdb_stat utility displays the status of an LMDB environment. .SH OPTIONS .TP .BR \-V Write the library version number to the standard output, and exit. .TP .BR \-e Display information about the database environment. .TP .BR \-f Display information about the environment freelist. If \fB\-ff\fP is given, summarize each freelist entry. If \fB\-fff\fP is given, display the full list of page IDs in the freelist. .TP .BR \-n Display the status of an LMDB database which does not use subdirectories. .TP .BR \-v Use the previous environment state instead of the latest state. This may be useful if the latest state has been corrupted. .TP .BR \-r Display information about the environment reader table. Shows the process ID, thread ID, and transaction ID for each active reader slot. The process ID and transaction ID are in decimal, the thread ID is in hexadecimal. The transaction ID is displayed as "-" if the reader does not currently have a read transaction open. If \fB\-rr\fP is given, check for stale entries in the reader table and clear them. The reader table will be printed again after the check is performed. .TP .BR \-a Display the status of all of the subdatabases in the environment. .TP .BR \-s \ subdb Display the status of a specific subdatabase. .SH DIAGNOSTICS Exit status is zero if no errors occur. Errors result in a non-zero exit status and a diagnostic message being written to standard error. .SH "SEE ALSO" .BR mdb_copy (1) .SH AUTHOR Howard Chu of Symas Corporation ================================================ FILE: ThirdParty/liblmdb/mdb_stat.c ================================================ /* mdb_stat.c - memory-mapped database status tool */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include #include #include "lmdb.h" #define Z MDB_FMT_Z #define Yu MDB_PRIy(u) static void prstat(MDB_stat *ms) { #if 0 printf(" Page size: %u\n", ms->ms_psize); #endif printf(" Tree depth: %u\n", ms->ms_depth); printf(" Branch pages: %"Yu"\n", ms->ms_branch_pages); printf(" Leaf pages: %"Yu"\n", ms->ms_leaf_pages); printf(" Overflow pages: %"Yu"\n", ms->ms_overflow_pages); printf(" Entries: %"Yu"\n", ms->ms_entries); } static void usage(char *prog) { fprintf(stderr, "usage: %s [-V] [-n] [-e] [-r[r]] [-f[f[f]]] [-v] [-a|-s subdb] dbpath\n", prog); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int i, rc; MDB_env *env; MDB_txn *txn; MDB_dbi dbi; MDB_stat mst; MDB_envinfo mei; char *prog = argv[0]; char *envname; char *subname = NULL; int alldbs = 0, envinfo = 0, envflags = 0, freinfo = 0, rdrinfo = 0; if (argc < 2) { usage(prog); } /* -a: print stat of main DB and all subDBs * -s: print stat of only the named subDB * -e: print env info * -f: print freelist info * -r: print reader info * -n: use NOSUBDIR flag on env_open * -v: use previous snapshot * -V: print version and exit * (default) print stat of only the main DB */ while ((i = getopt(argc, argv, "Vaefnrs:")) != EOF) { switch(i) { case 'V': printf("%s\n", MDB_VERSION_STRING); exit(0); break; case 'a': if (subname) usage(prog); alldbs++; break; case 'e': envinfo++; break; case 'f': freinfo++; break; case 'n': envflags |= MDB_NOSUBDIR; break; case 'v': envflags |= MDB_PREVSNAPSHOT; break; case 'r': rdrinfo++; break; case 's': if (alldbs) usage(prog); subname = optarg; break; default: usage(prog); } } if (optind != argc - 1) usage(prog); envname = argv[optind]; rc = mdb_env_create(&env); if (rc) { fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc)); return EXIT_FAILURE; } if (alldbs || subname) { mdb_env_set_maxdbs(env, 4); } rc = mdb_env_open(env, envname, envflags | MDB_RDONLY, 0664); if (rc) { fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } if (envinfo) { (void)mdb_env_stat(env, &mst); (void)mdb_env_info(env, &mei); printf("Environment Info\n"); printf(" Map address: %p\n", mei.me_mapaddr); printf(" Map size: %"Yu"\n", mei.me_mapsize); printf(" Page size: %u\n", mst.ms_psize); printf(" Max pages: %"Yu"\n", mei.me_mapsize / mst.ms_psize); printf(" Number of pages used: %"Yu"\n", mei.me_last_pgno+1); printf(" Last transaction ID: %"Yu"\n", mei.me_last_txnid); printf(" Max readers: %u\n", mei.me_maxreaders); printf(" Number of readers used: %u\n", mei.me_numreaders); } if (rdrinfo) { printf("Reader Table Status\n"); rc = mdb_reader_list(env, (MDB_msg_func *)fputs, stdout); if (rdrinfo > 1) { int dead; mdb_reader_check(env, &dead); printf(" %d stale readers cleared.\n", dead); rc = mdb_reader_list(env, (MDB_msg_func *)fputs, stdout); } if (!(subname || alldbs || freinfo)) goto env_close; } rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) { fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc)); goto env_close; } if (freinfo) { MDB_cursor *cursor; MDB_val key, data; mdb_size_t pages = 0, *iptr; printf("Freelist Status\n"); dbi = 0; rc = mdb_cursor_open(txn, dbi, &cursor); if (rc) { fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } rc = mdb_stat(txn, dbi, &mst); if (rc) { fprintf(stderr, "mdb_stat failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } prstat(&mst); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { iptr = data.mv_data; pages += *iptr; if (freinfo > 1) { char *bad = ""; mdb_size_t pg, prev; ssize_t i, j, span = 0; j = *iptr++; for (i = j, prev = 1; --i >= 0; ) { pg = iptr[i]; if (pg <= prev) bad = " [bad sequence]"; prev = pg; pg += span; for (; i >= span && iptr[i-span] == pg; span++, pg++) ; } printf(" Transaction %"Yu", %"Z"d pages, maxspan %"Z"d%s\n", *(mdb_size_t *)key.mv_data, j, span, bad); if (freinfo > 2) { for (--j; j >= 0; ) { pg = iptr[j]; for (span=1; --j >= 0 && iptr[j] == pg+span; span++) ; printf(span>1 ? " %9"Yu"[%"Z"d]\n" : " %9"Yu"\n", pg, span); } } } } mdb_cursor_close(cursor); printf(" Free pages: %"Yu"\n", pages); } rc = mdb_open(txn, subname, 0, &dbi); if (rc) { fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } rc = mdb_stat(txn, dbi, &mst); if (rc) { fprintf(stderr, "mdb_stat failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } printf("Status of %s\n", subname ? subname : "Main DB"); prstat(&mst); if (alldbs) { MDB_cursor *cursor; MDB_val key; rc = mdb_cursor_open(txn, dbi, &cursor); if (rc) { fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } while ((rc = mdb_cursor_get(cursor, &key, NULL, MDB_NEXT_NODUP)) == 0) { char *str; MDB_dbi db2; if (memchr(key.mv_data, '\0', key.mv_size)) continue; str = malloc(key.mv_size+1); memcpy(str, key.mv_data, key.mv_size); str[key.mv_size] = '\0'; rc = mdb_open(txn, str, 0, &db2); if (rc == MDB_SUCCESS) printf("Status of %s\n", str); free(str); if (rc) continue; rc = mdb_stat(txn, db2, &mst); if (rc) { fprintf(stderr, "mdb_stat failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } prstat(&mst); mdb_close(env, db2); } mdb_cursor_close(cursor); } if (rc == MDB_NOTFOUND) rc = MDB_SUCCESS; mdb_close(env, dbi); txn_abort: mdb_txn_abort(txn); env_close: mdb_env_close(env); return rc ? EXIT_FAILURE : EXIT_SUCCESS; } ================================================ FILE: ThirdParty/liblmdb/midl.c ================================================ /** @file midl.c * @brief ldap bdb back-end ID List functions */ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * * Copyright 2000-2019 The OpenLDAP Foundation. * Portions Copyright 2001-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include #include #include #include "midl.h" /** @defgroup internal LMDB Internals * @{ */ /** @defgroup idls ID List Management * @{ */ #define CMP(x,y) ( (x) < (y) ? -1 : (x) > (y) ) unsigned mdb_midl_search( MDB_IDL ids, MDB_ID id ) { /* * binary search of id in ids * if found, returns position of id * if not found, returns first position greater than id */ unsigned base = 0; unsigned cursor = 1; int val = 0; unsigned n = ids[0]; while( 0 < n ) { unsigned pivot = n >> 1; cursor = base + pivot + 1; val = CMP( ids[cursor], id ); if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { return cursor; } } if( val > 0 ) { ++cursor; } return cursor; } #if 0 /* superseded by append/sort */ int mdb_midl_insert( MDB_IDL ids, MDB_ID id ) { unsigned x, i; x = mdb_midl_search( ids, id ); assert( x > 0 ); if( x < 1 ) { /* internal error */ return -2; } if ( x <= ids[0] && ids[x] == id ) { /* duplicate */ assert(0); return -1; } if ( ++ids[0] >= MDB_IDL_DB_MAX ) { /* no room */ --ids[0]; return -2; } else { /* insert id */ for (i=ids[0]; i>x; i--) ids[i] = ids[i-1]; ids[x] = id; } return 0; } #endif MDB_IDL mdb_midl_alloc(int num) { MDB_IDL ids = malloc((num+2) * sizeof(MDB_ID)); if (ids) { *ids++ = num; *ids = 0; } return ids; } void mdb_midl_free(MDB_IDL ids) { if (ids) free(ids-1); } void mdb_midl_shrink( MDB_IDL *idp ) { MDB_IDL ids = *idp; if (*(--ids) > MDB_IDL_UM_MAX && (ids = realloc(ids, (MDB_IDL_UM_MAX+2) * sizeof(MDB_ID)))) { *ids++ = MDB_IDL_UM_MAX; *idp = ids; } } static int mdb_midl_grow( MDB_IDL *idp, int num ) { MDB_IDL idn = *idp-1; /* grow it */ idn = realloc(idn, (*idn + num + 2) * sizeof(MDB_ID)); if (!idn) return ENOMEM; *idn++ += num; *idp = idn; return 0; } int mdb_midl_need( MDB_IDL *idp, unsigned num ) { MDB_IDL ids = *idp; num += ids[0]; if (num > ids[-1]) { num = (num + num/4 + (256 + 2)) & -256; if (!(ids = realloc(ids-1, num * sizeof(MDB_ID)))) return ENOMEM; *ids++ = num - 2; *idp = ids; } return 0; } int mdb_midl_append( MDB_IDL *idp, MDB_ID id ) { MDB_IDL ids = *idp; /* Too big? */ if (ids[0] >= ids[-1]) { if (mdb_midl_grow(idp, MDB_IDL_UM_MAX)) return ENOMEM; ids = *idp; } ids[0]++; ids[ids[0]] = id; return 0; } int mdb_midl_append_list( MDB_IDL *idp, MDB_IDL app ) { MDB_IDL ids = *idp; /* Too big? */ if (ids[0] + app[0] >= ids[-1]) { if (mdb_midl_grow(idp, app[0])) return ENOMEM; ids = *idp; } memcpy(&ids[ids[0]+1], &app[1], app[0] * sizeof(MDB_ID)); ids[0] += app[0]; return 0; } int mdb_midl_append_range( MDB_IDL *idp, MDB_ID id, unsigned n ) { MDB_ID *ids = *idp, len = ids[0]; /* Too big? */ if (len + n > ids[-1]) { if (mdb_midl_grow(idp, n | MDB_IDL_UM_MAX)) return ENOMEM; ids = *idp; } ids[0] = len + n; ids += len; while (n) ids[n--] = id++; return 0; } void mdb_midl_xmerge( MDB_IDL idl, MDB_IDL merge ) { MDB_ID old_id, merge_id, i = merge[0], j = idl[0], k = i+j, total = k; idl[0] = (MDB_ID)-1; /* delimiter for idl scan below */ old_id = idl[j]; while (i) { merge_id = merge[i--]; for (; old_id < merge_id; old_id = idl[--j]) idl[k--] = old_id; idl[k--] = merge_id; } idl[0] = total; } /* Quicksort + Insertion sort for small arrays */ #define SMALL 8 #define MIDL_SWAP(a,b) { itmp=(a); (a)=(b); (b)=itmp; } void mdb_midl_sort( MDB_IDL ids ) { /* Max possible depth of int-indexed tree * 2 items/level */ int istack[sizeof(int)*CHAR_BIT * 2]; int i,j,k,l,ir,jstack; MDB_ID a, itmp; ir = (int)ids[0]; l = 1; jstack = 0; for(;;) { if (ir - l < SMALL) { /* Insertion sort */ for (j=l+1;j<=ir;j++) { a = ids[j]; for (i=j-1;i>=1;i--) { if (ids[i] >= a) break; ids[i+1] = ids[i]; } ids[i+1] = a; } if (jstack == 0) break; ir = istack[jstack--]; l = istack[jstack--]; } else { k = (l + ir) >> 1; /* Choose median of left, center, right */ MIDL_SWAP(ids[k], ids[l+1]); if (ids[l] < ids[ir]) { MIDL_SWAP(ids[l], ids[ir]); } if (ids[l+1] < ids[ir]) { MIDL_SWAP(ids[l+1], ids[ir]); } if (ids[l] < ids[l+1]) { MIDL_SWAP(ids[l], ids[l+1]); } i = l+1; j = ir; a = ids[l+1]; for(;;) { do i++; while(ids[i] > a); do j--; while(ids[j] < a); if (j < i) break; MIDL_SWAP(ids[i],ids[j]); } ids[l+1] = ids[j]; ids[j] = a; jstack += 2; if (ir-i+1 >= j-l) { istack[jstack] = ir; istack[jstack-1] = i; ir = j-1; } else { istack[jstack] = j-1; istack[jstack-1] = l; l = i; } } } } unsigned mdb_mid2l_search( MDB_ID2L ids, MDB_ID id ) { /* * binary search of id in ids * if found, returns position of id * if not found, returns first position greater than id */ unsigned base = 0; unsigned cursor = 1; int val = 0; unsigned n = (unsigned)ids[0].mid; while( 0 < n ) { unsigned pivot = n >> 1; cursor = base + pivot + 1; val = CMP( id, ids[cursor].mid ); if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { return cursor; } } if( val > 0 ) { ++cursor; } return cursor; } int mdb_mid2l_insert( MDB_ID2L ids, MDB_ID2 *id ) { unsigned x, i; x = mdb_mid2l_search( ids, id->mid ); if( x < 1 ) { /* internal error */ return -2; } if ( x <= ids[0].mid && ids[x].mid == id->mid ) { /* duplicate */ return -1; } if ( ids[0].mid >= MDB_IDL_UM_MAX ) { /* too big */ return -2; } else { /* insert id */ ids[0].mid++; for (i=(unsigned)ids[0].mid; i>x; i--) ids[i] = ids[i-1]; ids[x] = *id; } return 0; } int mdb_mid2l_append( MDB_ID2L ids, MDB_ID2 *id ) { /* Too big? */ if (ids[0].mid >= MDB_IDL_UM_MAX) { return -2; } ids[0].mid++; ids[ids[0].mid] = *id; return 0; } #ifdef MDB_VL32 unsigned mdb_mid3l_search( MDB_ID3L ids, MDB_ID id ) { /* * binary search of id in ids * if found, returns position of id * if not found, returns first position greater than id */ unsigned base = 0; unsigned cursor = 1; int val = 0; unsigned n = (unsigned)ids[0].mid; while( 0 < n ) { unsigned pivot = n >> 1; cursor = base + pivot + 1; val = CMP( id, ids[cursor].mid ); if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { return cursor; } } if( val > 0 ) { ++cursor; } return cursor; } int mdb_mid3l_insert( MDB_ID3L ids, MDB_ID3 *id ) { unsigned x, i; x = mdb_mid3l_search( ids, id->mid ); if( x < 1 ) { /* internal error */ return -2; } if ( x <= ids[0].mid && ids[x].mid == id->mid ) { /* duplicate */ return -1; } /* insert id */ ids[0].mid++; for (i=(unsigned)ids[0].mid; i>x; i--) ids[i] = ids[i-1]; ids[x] = *id; return 0; } #endif /* MDB_VL32 */ /** @} */ /** @} */ ================================================ FILE: ThirdParty/liblmdb/midl.h ================================================ /** @file midl.h * @brief LMDB ID List header file. * * This file was originally part of back-bdb but has been * modified for use in libmdb. Most of the macros defined * in this file are unused, just left over from the original. * * This file is only used internally in libmdb and its definitions * are not exposed publicly. */ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * * Copyright 2000-2019 The OpenLDAP Foundation. * Portions Copyright 2001-2019 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #ifndef _MDB_MIDL_H_ #define _MDB_MIDL_H_ #include "lmdb.h" #ifdef __cplusplus extern "C" { #endif /** @defgroup internal LMDB Internals * @{ */ /** @defgroup idls ID List Management * @{ */ /** A generic unsigned ID number. These were entryIDs in back-bdb. * Preferably it should have the same size as a pointer. */ typedef mdb_size_t MDB_ID; /** An IDL is an ID List, a sorted array of IDs. The first * element of the array is a counter for how many actual * IDs are in the list. In the original back-bdb code, IDLs are * sorted in ascending order. For libmdb IDLs are sorted in * descending order. */ typedef MDB_ID *MDB_IDL; /* IDL sizes - likely should be even bigger * limiting factors: sizeof(ID), thread stack size */ #define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */ #define MDB_IDL_DB_SIZE (1<. */ #include #include #include #include "lmdb.h" #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr) #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0)) #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort())) int main(int argc,char * argv[]) { int i = 0, j = 0, rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data; MDB_txn *txn; MDB_stat mst; MDB_cursor *cursor, *cur2; MDB_cursor_op op; int count; int *values; char sval[32] = ""; srand(time(NULL)); count = (rand()%384) + 64; values = (int *)malloc(count*sizeof(int)); for(i = 0;i in each iteration, since MDB_NOOVERWRITE may modify it */ data.mv_size = sizeof(sval); data.mv_data = sval; if (RES(MDB_KEYEXIST, mdb_put(txn, dbi, &key, &data, MDB_NOOVERWRITE))) { j++; data.mv_size = sizeof(sval); data.mv_data = sval; } } if (j) printf("%d duplicates skipped\n", j); E(mdb_txn_commit(txn)); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %p %.*s, data: %p %.*s\n", key.mv_data, (int) key.mv_size, (char *) key.mv_data, data.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_abort(txn); j=0; key.mv_data = sval; for (i= count - 1; i > -1; i-= (rand()%5)) { j++; txn=NULL; E(mdb_txn_begin(env, NULL, 0, &txn)); sprintf(sval, "%03x ", values[i]); if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, NULL))) { j--; mdb_txn_abort(txn); } else { E(mdb_txn_commit(txn)); } } free(values); printf("Deleted %d values\n", j); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); printf("Cursor next\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor last\n"); E(mdb_cursor_get(cursor, &key, &data, MDB_LAST)); printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); printf("Cursor prev\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor last/prev\n"); E(mdb_cursor_get(cursor, &key, &data, MDB_LAST)); printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); E(mdb_cursor_get(cursor, &key, &data, MDB_PREV)); printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); mdb_cursor_close(cursor); mdb_txn_abort(txn); printf("Deleting with cursor\n"); E(mdb_txn_begin(env, NULL, 0, &txn)); E(mdb_cursor_open(txn, dbi, &cur2)); for (i=0; i<50; i++) { if (RES(MDB_NOTFOUND, mdb_cursor_get(cur2, &key, &data, MDB_NEXT))) break; printf("key: %p %.*s, data: %p %.*s\n", key.mv_data, (int) key.mv_size, (char *) key.mv_data, data.mv_data, (int) data.mv_size, (char *) data.mv_data); E(mdb_del(txn, dbi, &key, NULL)); } printf("Restarting cursor in txn\n"); for (op=MDB_FIRST, i=0; i<=32; op=MDB_NEXT, i++) { if (RES(MDB_NOTFOUND, mdb_cursor_get(cur2, &key, &data, op))) break; printf("key: %p %.*s, data: %p %.*s\n", key.mv_data, (int) key.mv_size, (char *) key.mv_data, data.mv_data, (int) data.mv_size, (char *) data.mv_data); } mdb_cursor_close(cur2); E(mdb_txn_commit(txn)); printf("Restarting cursor outside txn\n"); E(mdb_txn_begin(env, NULL, 0, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); for (op=MDB_FIRST, i=0; i<=32; op=MDB_NEXT, i++) { if (RES(MDB_NOTFOUND, mdb_cursor_get(cursor, &key, &data, op))) break; printf("key: %p %.*s, data: %p %.*s\n", key.mv_data, (int) key.mv_size, (char *) key.mv_data, data.mv_data, (int) data.mv_size, (char *) data.mv_data); } mdb_cursor_close(cursor); mdb_txn_abort(txn); mdb_dbi_close(env, dbi); mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/mtest2.c ================================================ /* mtest2.c - memory-mapped database tester/toy */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ /* Just like mtest.c, but using a subDB instead of the main DB */ #include #include #include #include "lmdb.h" #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr) #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0)) #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort())) int main(int argc,char * argv[]) { int i = 0, j = 0, rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data; MDB_txn *txn; MDB_stat mst; MDB_cursor *cursor; int count; int *values; char sval[32] = ""; srand(time(NULL)); count = (rand()%384) + 64; values = (int *)malloc(count*sizeof(int)); for(i = 0;i -1; i-= (rand()%5)) { j++; txn=NULL; E(mdb_txn_begin(env, NULL, 0, &txn)); sprintf(sval, "%03x ", values[i]); if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, NULL))) { j--; mdb_txn_abort(txn); } else { E(mdb_txn_commit(txn)); } } free(values); printf("Deleted %d values\n", j); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); printf("Cursor next\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor prev\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_abort(txn); mdb_dbi_close(env, dbi); mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/mtest3.c ================================================ /* mtest3.c - memory-mapped database tester/toy */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ /* Tests for sorted duplicate DBs */ #include #include #include #include #include "lmdb.h" #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr) #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0)) #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort())) int main(int argc,char * argv[]) { int i = 0, j = 0, rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data; MDB_txn *txn; MDB_stat mst; MDB_cursor *cursor; int count; int *values; char sval[32]; char kval[sizeof(int)]; srand(time(NULL)); memset(sval, 0, sizeof(sval)); count = (rand()%384) + 64; values = (int *)malloc(count*sizeof(int)); for(i = 0;i -1; i-= (rand()%5)) { j++; txn=NULL; E(mdb_txn_begin(env, NULL, 0, &txn)); sprintf(kval, "%03x", values[i & ~0x0f]); sprintf(sval, "%03x %d foo bar", values[i], values[i]); key.mv_size = sizeof(int); key.mv_data = kval; data.mv_size = sizeof(sval); data.mv_data = sval; if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) { j--; mdb_txn_abort(txn); } else { E(mdb_txn_commit(txn)); } } free(values); printf("Deleted %d values\n", j); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); printf("Cursor next\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor prev\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_abort(txn); mdb_dbi_close(env, dbi); mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/mtest4.c ================================================ /* mtest4.c - memory-mapped database tester/toy */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ /* Tests for sorted duplicate DBs with fixed-size keys */ #include #include #include #include #include "lmdb.h" #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr) #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0)) #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort())) int main(int argc,char * argv[]) { int i = 0, j = 0, rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data; MDB_txn *txn; MDB_stat mst; MDB_cursor *cursor; int count; int *values; char sval[8]; char kval[sizeof(int)]; memset(sval, 0, sizeof(sval)); count = 510; values = (int *)malloc(count*sizeof(int)); for(i = 0;i -1; i-= (rand()%3)) { j++; txn=NULL; E(mdb_txn_begin(env, NULL, 0, &txn)); sprintf(sval, "%07x", values[i]); key.mv_size = sizeof(int); key.mv_data = kval; data.mv_size = sizeof(sval); data.mv_data = sval; if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) { j--; mdb_txn_abort(txn); } else { E(mdb_txn_commit(txn)); } } free(values); printf("Deleted %d values\n", j); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); printf("Cursor next\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor prev\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_abort(txn); mdb_dbi_close(env, dbi); mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/mtest5.c ================================================ /* mtest5.c - memory-mapped database tester/toy */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ /* Tests for sorted duplicate DBs using cursor_put */ #include #include #include #include #include "lmdb.h" #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr) #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0)) #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort())) int main(int argc,char * argv[]) { int i = 0, j = 0, rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data; MDB_txn *txn; MDB_stat mst; MDB_cursor *cursor; int count; int *values; char sval[32]; char kval[sizeof(int)]; srand(time(NULL)); memset(sval, 0, sizeof(sval)); count = (rand()%384) + 64; values = (int *)malloc(count*sizeof(int)); for(i = 0;i -1; i-= (rand()%5)) { j++; txn=NULL; E(mdb_txn_begin(env, NULL, 0, &txn)); sprintf(kval, "%03x", values[i & ~0x0f]); sprintf(sval, "%03x %d foo bar", values[i], values[i]); key.mv_size = sizeof(int); key.mv_data = kval; data.mv_size = sizeof(sval); data.mv_data = sval; if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) { j--; mdb_txn_abort(txn); } else { E(mdb_txn_commit(txn)); } } free(values); printf("Deleted %d values\n", j); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); printf("Cursor next\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor prev\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_abort(txn); mdb_dbi_close(env, dbi); mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/mtest6.c ================================================ /* mtest6.c - memory-mapped database tester/toy */ /* * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ /* Tests for DB splits and merges */ #include #include #include #include #include "lmdb.h" #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr) #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0)) #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort())) char dkbuf[1024]; int main(int argc,char * argv[]) { int i = 0, j = 0, rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data, sdata; MDB_txn *txn; MDB_stat mst; MDB_cursor *cursor; int count; int *values; long kval; char *sval; srand(time(NULL)); E(mdb_env_create(&env)); E(mdb_env_set_mapsize(env, 10485760)); E(mdb_env_set_maxdbs(env, 4)); E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664)); E(mdb_txn_begin(env, NULL, 0, &txn)); E(mdb_dbi_open(txn, "id6", MDB_CREATE|MDB_INTEGERKEY, &dbi)); E(mdb_cursor_open(txn, dbi, &cursor)); E(mdb_stat(txn, dbi, &mst)); sval = calloc(1, mst.ms_psize / 4); key.mv_size = sizeof(long); key.mv_data = &kval; sdata.mv_size = mst.ms_psize / 4 - 30; sdata.mv_data = sval; printf("Adding 12 values, should yield 3 splits\n"); for (i=0;i<12;i++) { kval = i*5; sprintf(sval, "%08x", kval); data = sdata; (void)RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NOOVERWRITE)); } printf("Adding 12 more values, should yield 3 splits\n"); for (i=0;i<12;i++) { kval = i*5+4; sprintf(sval, "%08x", kval); data = sdata; (void)RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NOOVERWRITE)); } printf("Adding 12 more values, should yield 3 splits\n"); for (i=0;i<12;i++) { kval = i*5+1; sprintf(sval, "%08x", kval); data = sdata; (void)RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NOOVERWRITE)); } E(mdb_cursor_get(cursor, &key, &data, MDB_FIRST)); do { printf("key: %p %s, data: %p %.*s\n", key.mv_data, mdb_dkey(&key, dkbuf), data.mv_data, (int) data.mv_size, (char *) data.mv_data); } while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0); CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_commit(txn); #if 0 j=0; for (i= count - 1; i > -1; i-= (rand()%5)) { j++; txn=NULL; E(mdb_txn_begin(env, NULL, 0, &txn)); sprintf(kval, "%03x", values[i & ~0x0f]); sprintf(sval, "%03x %d foo bar", values[i], values[i]); key.mv_size = sizeof(int); key.mv_data = kval; data.mv_size = sizeof(sval); data.mv_data = sval; if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) { j--; mdb_txn_abort(txn); } else { E(mdb_txn_commit(txn)); } } free(values); printf("Deleted %d values\n", j); E(mdb_env_stat(env, &mst)); E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn)); E(mdb_cursor_open(txn, dbi, &cursor)); printf("Cursor next\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); printf("Cursor prev\n"); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) { printf("key: %.*s, data: %.*s\n", (int) key.mv_size, (char *) key.mv_data, (int) data.mv_size, (char *) data.mv_data); } CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get"); mdb_cursor_close(cursor); mdb_txn_abort(txn); mdb_dbi_close(env, dbi); #endif mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/sample-bdb.txt ================================================ /* sample-bdb.txt - BerkeleyDB toy/sample * * Do a line-by-line comparison of this and sample-mdb.txt */ /* * Copyright 2012-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include int main(int argc,char * argv[]) { int rc; DB_ENV *env; DB *dbi; DBT key, data; DB_TXN *txn; DBC *cursor; char sval[32], kval[32]; /* Note: Most error checking omitted for simplicity */ #define FLAGS (DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_INIT_MPOOL|DB_CREATE|DB_THREAD) rc = db_env_create(&env, 0); rc = env->open(env, "./testdb", FLAGS, 0664); rc = db_create(&dbi, env, 0); rc = env->txn_begin(env, NULL, &txn, 0); rc = dbi->open(dbi, txn, "test.bdb", NULL, DB_BTREE, DB_CREATE, 0664); memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); key.size = sizeof(int); key.data = sval; data.size = sizeof(sval); data.data = sval; sprintf(sval, "%03x %d foo bar", 32, 3141592); rc = dbi->put(dbi, txn, &key, &data, 0); rc = txn->commit(txn, 0); if (rc) { fprintf(stderr, "txn->commit: (%d) %s\n", rc, db_strerror(rc)); goto leave; } rc = env->txn_begin(env, NULL, &txn, 0); rc = dbi->cursor(dbi, txn, &cursor, 0); key.flags = DB_DBT_USERMEM; key.data = kval; key.ulen = sizeof(kval); data.flags = DB_DBT_USERMEM; data.data = sval; data.ulen = sizeof(sval); while ((rc = cursor->c_get(cursor, &key, &data, DB_NEXT)) == 0) { printf("key: %p %.*s, data: %p %.*s\n", key.data, (int) key.size, (char *) key.data, data.data, (int) data.size, (char *) data.data); } rc = cursor->c_close(cursor); rc = txn->abort(txn); leave: rc = dbi->close(dbi, 0); rc = env->close(env, 0); return rc; } ================================================ FILE: ThirdParty/liblmdb/sample-mdb.txt ================================================ /* sample-mdb.txt - MDB toy/sample * * Do a line-by-line comparison of this and sample-bdb.txt */ /* * Copyright 2012-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include "lmdb.h" int main(int argc,char * argv[]) { int rc; MDB_env *env; MDB_dbi dbi; MDB_val key, data; MDB_txn *txn; MDB_cursor *cursor; char sval[32]; /* Note: Most error checking omitted for simplicity */ rc = mdb_env_create(&env); rc = mdb_env_open(env, "./testdb", 0, 0664); rc = mdb_txn_begin(env, NULL, 0, &txn); rc = mdb_dbi_open(txn, NULL, 0, &dbi); key.mv_size = sizeof(int); key.mv_data = sval; data.mv_size = sizeof(sval); data.mv_data = sval; sprintf(sval, "%03x %d foo bar", 32, 3141592); rc = mdb_put(txn, dbi, &key, &data, 0); rc = mdb_txn_commit(txn); if (rc) { fprintf(stderr, "mdb_txn_commit: (%d) %s\n", rc, mdb_strerror(rc)); goto leave; } rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); rc = mdb_cursor_open(txn, dbi, &cursor); while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { printf("key: %p %.*s, data: %p %.*s\n", key.mv_data, (int) key.mv_size, (char *) key.mv_data, data.mv_data, (int) data.mv_size, (char *) data.mv_data); } mdb_cursor_close(cursor); mdb_txn_abort(txn); leave: mdb_dbi_close(env, dbi); mdb_env_close(env); return 0; } ================================================ FILE: ThirdParty/liblmdb/tooltag ================================================ mdb_copy_1 mdb_copy - environment copy tool mdb_copy.1 mdb_drop_1 mdb_drop - database delete tool mdb_drop.1 mdb_dump_1 mdb_dump - environment export tool mdb_dump.1 mdb_load_1 mdb_load - environment import tool mdb_load.1 mdb_stat_1 mdb_stat - environment status tool mdb_stat.1 ================================================ FILE: ThirdParty/libunwind/.arcconfig ================================================ { "repository.callsign" : "UNW", "conduit_uri" : "https://reviews.llvm.org/" } ================================================ FILE: ThirdParty/libunwind/.clang-format ================================================ BasedOnStyle: LLVM ================================================ FILE: ThirdParty/libunwind/CMakeLists.txt ================================================ set(Sources src/AddressSpace.hpp src/assembly.h src/CompactUnwinder.hpp src/config.h src/dwarf2.h src/DwarfInstructions.hpp src/DwarfParser.hpp src/EHHeaderParser.hpp src/FrameHeaderCache.hpp src/libunwind_ext.h src/libunwind.cpp src/Registers.hpp src/RWMutex.hpp src/shadow_stack_unwind.h src/Unwind-sjlj.c src/UnwindCursor.hpp src/UnwindLevel1-gcc-ext.c src/UnwindLevel1.c src/UnwindRegistersRestore.S src/UnwindRegistersSave.S ) set(AppleSources src/Unwind-EHABI.cpp src/Unwind-EHABI.h ) set(PublicHeaders include/__libunwind_config.h include/libunwind.h include/unwind.h include/unwind_arm_ehabi.h include/unwind_itanium.h include/mach-o/compact_unwind_encoding.h ) if(MSVC) add_custom_target(WAVMUnwind SOURCES ${Sources} ${AppleSources} ${PublicHeaders}) else() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(Sources ${Sources} ${AppleSources}) endif() WAVM_ADD_THIRD_PARTY_LIBRARY(WAVMUnwind SOURCES ${Sources} ${PublicHeaders} PRIVATE_INCLUDE_DIRECTORIES include PRIVATE_DEFINITIONS _LIBUNWIND_IS_NATIVE_ONLY ) endif() ================================================ FILE: ThirdParty/libunwind/LICENSE.TXT ================================================ ============================================================================== The LLVM Project is under the Apache License v2.0 with LLVM Exceptions: ============================================================================== Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ---- LLVM Exceptions to the Apache 2.0 License ---- As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into an Object form of such source code, you may redistribute such embedded portions in such Object form without complying with the conditions of Sections 4(a), 4(b) and 4(d) of the License. In addition, if you combine or link compiled forms of this Software with software that is licensed under the GPLv2 ("Combined Software") and if a court of competent jurisdiction determines that the patent provision (Section 3), the indemnity provision (Section 9) or other Section of the License conflicts with the conditions of the GPLv2, you may retroactively and prospectively choose to deem waived or otherwise exclude such Section(s) of the License, but only in their entirety and only with respect to the Combined Software. ============================================================================== Software from third parties included in the LLVM Project: ============================================================================== The LLVM Project contains third party software which is under different license terms. All such code will be identified clearly using at least one of two mechanisms: 1) It will be in a separate directory tree with its own `LICENSE.txt` or `LICENSE` file at the top containing the specific license and restrictions which apply to that software, or 2) It will contain specific license and restriction terms at the top of every file. ============================================================================== Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy): ============================================================================== The libunwind library is dual licensed under both the University of Illinois "BSD-Like" license and the MIT license. As a user of this code you may choose to use it under either license. As a contributor, you agree to allow your code to be used under both. Full text of the relevant licenses is included below. ============================================================================== University of Illinois/NCSA Open Source License Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT All rights reserved. Developed by: LLVM Team University of Illinois at Urbana-Champaign http://llvm.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal with the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimers in the documentation and/or other materials provided with the distribution. * Neither the names of the LLVM Team, University of Illinois at Urbana-Champaign, nor the names of its contributors may be used to endorse or promote products derived from this Software without specific prior written permission. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. ============================================================================== Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: ThirdParty/libunwind/PROVENANCE.txt ================================================ This is a fork of libunwind from the LLVM project. Upstream: https://github.com/llvm/llvm-project Branch: release/21.x Commit: 2078da43e25a4623cab2d0d60decddf709aaea28 ================================================ FILE: ThirdParty/libunwind/cmake/Modules/HandleLibunwindFlags.cmake ================================================ # HandleLibcxxFlags - A set of macros used to setup the flags used to compile # and link libc++abi. These macros add flags to the following CMake variables. # - LIBUNWIND_COMPILE_FLAGS: flags used to compile libunwind # - LIBUNWIND_LINK_FLAGS: flags used to link libunwind # - LIBUNWIND_LIBRARIES: libraries to link libunwind to. include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(HandleFlags) unset(add_flag_if_supported) # Add a list of flags to 'LIBUNWIND_COMPILE_FLAGS'. macro(add_compile_flags) foreach(f ${ARGN}) list(APPEND LIBUNWIND_COMPILE_FLAGS ${f}) endforeach() endmacro() # If 'condition' is true then add the specified list of flags to # 'LIBUNWIND_COMPILE_FLAGS' macro(add_compile_flags_if condition) if (${condition}) add_compile_flags(${ARGN}) endif() endmacro() # For each specified flag, add that flag to 'LIBUNWIND_COMPILE_FLAGS' if the # flag is supported by the C++ compiler. macro(add_compile_flags_if_supported) foreach(flag ${ARGN}) mangle_name("${flag}" flagname) check_cxx_compiler_flag("${flag}" "CXX_SUPPORTS_${flagname}_FLAG") add_compile_flags_if(CXX_SUPPORTS_${flagname}_FLAG ${flag}) endforeach() endmacro() # Add a list of flags to 'LIBUNWIND_C_FLAGS'. macro(add_c_flags) foreach(f ${ARGN}) list(APPEND LIBUNWIND_C_FLAGS ${f}) endforeach() endmacro() # If 'condition' is true then add the specified list of flags to # 'LIBUNWIND_C_FLAGS' macro(add_c_flags_if condition) if (${condition}) add_c_flags(${ARGN}) endif() endmacro() # Add a list of flags to 'LIBUNWIND_CXX_FLAGS'. macro(add_cxx_flags) foreach(f ${ARGN}) list(APPEND LIBUNWIND_CXX_FLAGS ${f}) endforeach() endmacro() # If 'condition' is true then add the specified list of flags to # 'LIBUNWIND_CXX_FLAGS' macro(add_cxx_flags_if condition) if (${condition}) add_cxx_flags(${ARGN}) endif() endmacro() # For each specified flag, add that flag to 'LIBUNWIND_CXX_FLAGS' if the # flag is supported by the C compiler. macro(add_cxx_compile_flags_if_supported) foreach(flag ${ARGN}) mangle_name("${flag}" flagname) check_cxx_compiler_flag("${flag}" "CXX_SUPPORTS_${flagname}_FLAG") add_cxx_flags_if(CXX_SUPPORTS_${flagname}_FLAG ${flag}) endforeach() endmacro() # Add a list of flags to 'LIBUNWIND_LINK_FLAGS'. macro(add_link_flags) foreach(f ${ARGN}) list(APPEND LIBUNWIND_LINK_FLAGS ${f}) endforeach() endmacro() # If 'condition' is true then add the specified list of flags to # 'LIBUNWIND_LINK_FLAGS' macro(add_link_flags_if condition) if (${condition}) add_link_flags(${ARGN}) endif() endmacro() # For each specified flag, add that flag to 'LIBUNWIND_LINK_FLAGS' if the # flag is supported by the C++ compiler. macro(add_link_flags_if_supported) foreach(flag ${ARGN}) mangle_name("${flag}" flagname) check_cxx_compiler_flag("${flag}" "CXX_SUPPORTS_${flagname}_FLAG") add_link_flags_if(CXX_SUPPORTS_${flagname}_FLAG ${flag}) endforeach() endmacro() # Add a list of libraries or link flags to 'LIBUNWIND_LIBRARIES'. macro(add_library_flags) foreach(lib ${ARGN}) list(APPEND LIBUNWIND_LIBRARIES ${lib}) endforeach() endmacro() # if 'condition' is true then add the specified list of libraries and flags # to 'LIBUNWIND_LIBRARIES'. macro(add_library_flags_if condition) if(${condition}) add_library_flags(${ARGN}) endif() endmacro() ================================================ FILE: ThirdParty/libunwind/cmake/config-ix.cmake ================================================ include(CMakePushCheckState) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(CheckLibraryExists) include(LLVMCheckCompilerLinkerFlag) include(CheckSymbolExists) include(CheckCSourceCompiles) # The compiler driver may be implicitly trying to link against libunwind, which # might not work if libunwind doesn't exist yet. Try to check if # --unwindlib=none is supported, and use that if possible. llvm_check_compiler_linker_flag(C "--unwindlib=none" CXX_SUPPORTS_UNWINDLIB_EQ_NONE_FLAG) if (HAIKU) check_library_exists(root fopen "" LIBUNWIND_HAS_ROOT_LIB) else() check_library_exists(c fopen "" LIBUNWIND_HAS_C_LIB) endif() if (NOT LIBUNWIND_USE_COMPILER_RT) if (ANDROID) check_library_exists(gcc __gcc_personality_v0 "" LIBUNWIND_HAS_GCC_LIB) else () check_library_exists(gcc_s __gcc_personality_v0 "" LIBUNWIND_HAS_GCC_S_LIB) check_library_exists(gcc __absvdi2 "" LIBUNWIND_HAS_GCC_LIB) endif () endif() if (CXX_SUPPORTS_NOSTDLIBXX_FLAG OR C_SUPPORTS_NODEFAULTLIBS_FLAG) if (CMAKE_C_FLAGS MATCHES -fsanitize OR CMAKE_CXX_FLAGS MATCHES -fsanitize) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize=all") endif () if (CMAKE_C_FLAGS MATCHES -fsanitize-coverage OR CMAKE_CXX_FLAGS MATCHES -fsanitize-coverage) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fsanitize-coverage=0") endif () endif () # Check compiler pragmas if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") cmake_push_check_state() set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=unknown-pragmas") check_c_source_compiles(" #pragma comment(lib, \"c\") int main(void) { return 0; } " C_SUPPORTS_COMMENT_LIB_PRAGMA) cmake_pop_check_state() endif() # Check compiler flags check_cxx_compiler_flag(-nostdinc++ CXX_SUPPORTS_NOSTDINCXX_FLAG) # Check symbols check_symbol_exists(__arm__ "" LIBUNWIND_TARGET_ARM) check_symbol_exists(__USING_SJLJ_EXCEPTIONS__ "" LIBUNWIND_USES_SJLJ_EXCEPTIONS) check_symbol_exists(__ARM_DWARF_EH__ "" LIBUNWIND_USES_DWARF_EH) if(LIBUNWIND_TARGET_ARM AND NOT LIBUNWIND_USES_SJLJ_EXCEPTIONS AND NOT LIBUNWIND_USES_DWARF_EH) # This condition is copied from __libunwind_config.h set(LIBUNWIND_USES_ARM_EHABI ON) endif() # Check libraries if(FUCHSIA) set(LIBUNWIND_HAS_DL_LIB NO) set(LIBUNWIND_HAS_PTHREAD_LIB NO) else() check_library_exists(dl dladdr "" LIBUNWIND_HAS_DL_LIB) check_library_exists(pthread pthread_once "" LIBUNWIND_HAS_PTHREAD_LIB) endif() if(HAIKU) check_library_exists(bsd dl_iterate_phdr "" LIBUNWIND_HAS_BSD_LIB) endif() ================================================ FILE: ThirdParty/libunwind/docs/BuildingLibunwind.rst ================================================ .. _BuildingLibunwind: ================== Building libunwind ================== .. contents:: :local: .. _build instructions: Getting Started =============== On Mac OS, the easiest way to get this library is to link with -lSystem. However if you want to build tip-of-trunk from here (getting the bleeding edge), read on. The basic steps needed to build libunwind are: #. Checkout LLVM, libunwind, and related projects: * ``cd where-you-want-llvm-to-live`` * ``git clone https://github.com/llvm/llvm-project.git`` #. Configure and build libunwind: CMake is the only supported configuration system. Clang is the preferred compiler when building and using libunwind. * ``cd where you want to build llvm`` * ``mkdir build`` * ``cd build`` * ``cmake -G -DLLVM_ENABLE_RUNTIMES=libunwind [options] /runtimes`` For more information about configuring libunwind see :ref:`CMake Options`. * ``make unwind`` --- will build libunwind. * ``make check-unwind`` --- will run the test suite. Shared and static libraries for libunwind should now be present in llvm/build/lib. #. **Optional**: Install libunwind If your system already provides an unwinder, it is important to be careful not to replace it. Remember Use the CMake option ``CMAKE_INSTALL_PREFIX`` to select a safe place to install libunwind. * ``make install-unwind`` --- Will install the libraries and the headers .. _CMake Options: CMake Options ============= Here are some of the CMake variables that are used often, along with a brief explanation and LLVM-specific notes. For full documentation, check the CMake docs or execute ``cmake --help-variable VARIABLE_NAME``. **CMAKE_BUILD_TYPE**:STRING Sets the build type for ``make`` based generators. Possible values are Release, Debug, RelWithDebInfo and MinSizeRel. On systems like Visual Studio the user sets the build type with the IDE settings. **CMAKE_INSTALL_PREFIX**:PATH Path where LLVM will be installed if "make install" is invoked or the "INSTALL" target is built. **CMAKE_CXX_COMPILER**:STRING The C++ compiler to use when building and testing libunwind. .. _libunwind-specific options: libunwind specific options -------------------------- .. option:: LIBUNWIND_ENABLE_ASSERTIONS:BOOL **Default**: ``ON`` Toggle assertions independent of the build mode. .. option:: LIBUNWIND_ENABLE_PEDANTIC:BOOL **Default**: ``ON`` Compile with -Wpedantic. .. option:: LIBUNWIND_ENABLE_WERROR:BOOL **Default**: ``OFF`` Compile with -Werror .. option:: LIBUNWIND_ENABLE_SHARED:BOOL **Default**: ``ON`` Build libunwind as a shared library. .. option:: LIBUNWIND_ENABLE_STATIC:BOOL **Default**: ``ON`` Build libunwind as a static archive. .. option:: LIBUNWIND_ENABLE_CROSS_UNWINDING:BOOL **Default**: ``OFF`` Enable cross-platform unwinding support. .. option:: LIBUNWIND_ENABLE_ARM_WMMX:BOOL **Default**: ``OFF`` Enable unwinding support for ARM WMMX registers. .. option:: LIBUNWIND_ENABLE_THREADS:BOOL **Default**: ``ON`` Build libunwind with threading support. .. option:: LIBUNWIND_INSTALL_LIBRARY_DIR:PATH **Default**: ``lib${LIBUNWIND_LIBDIR_SUFFIX}`` Path where built libunwind libraries should be installed. If a relative path, relative to ``CMAKE_INSTALL_PREFIX``. ================================================ FILE: ThirdParty/libunwind/docs/CMakeLists.txt ================================================ include(FindSphinx) if (SPHINX_FOUND AND LLVM_ENABLE_SPHINX) include(AddSphinxTarget) if (${SPHINX_OUTPUT_HTML}) add_sphinx_target(html libunwind) endif() endif() ================================================ FILE: ThirdParty/libunwind/docs/README.txt ================================================ libunwind Documentation ==================== The libunwind documentation is written using the Sphinx documentation generator. It is currently tested with Sphinx 1.1.3. To build the documents into html configure libunwind with the following cmake options: * -DLLVM_ENABLE_SPHINX=ON * -DLIBUNWIND_INCLUDE_DOCS=ON After configuring libunwind with these options the make rule `docs-libunwind-html` should be available. ================================================ FILE: ThirdParty/libunwind/docs/conf.py ================================================ # -*- coding: utf-8 -*- # # libunwind documentation build configuration file. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os from datetime import date # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ["sphinx.ext.intersphinx", "sphinx.ext.todo"] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix of source filenames. source_suffix = ".rst" # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = "index" # General information about the project. project = "libunwind" copyright = "2011-%d, LLVM Project" % date.today().year # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = "17.0" # The full version, including alpha/beta/rc tags. release = "17.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = "%Y-%m-%d" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ["_build"] # The reST default role (used for this markup: `text`) to use for all documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. show_authors = True # The name of the Pygments (syntax highlighting) style to use. pygments_style = "friendly" # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = "haiku" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. # html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = "libunwinddoc" # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ("contents", "libunwind.tex", "libunwind Documentation", "LLVM project", "manual"), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [("contents", "libunwind", "libunwind Documentation", ["LLVM project"], 1)] # If true, show URL addresses after external links. # man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( "contents", "libunwind", "libunwind Documentation", "LLVM project", "libunwind", "LLVM Unwinder", "Miscellaneous", ), ] # Documents to append as an appendix to all manuals. # texinfo_appendices = [] # If false, no module index is generated. # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' # FIXME: Define intersphinx configuration. intersphinx_mapping = {} # -- Options for extensions ---------------------------------------------------- # Enable this if you want TODOs to show up in the generated documentation. todo_include_todos = True ================================================ FILE: ThirdParty/libunwind/docs/index.rst ================================================ .. _index: ======================= libunwind LLVM Unwinder ======================= Overview ======== libunwind is an implementation of the interface defined by the HP libunwind project. It was contributed by Apple as a way to enable clang++ to port to platforms that do not have a system unwinder. It is intended to be a small and fast implementation of the ABI, leaving off some features of HP's libunwind that never materialized (e.g. remote unwinding). The unwinder has two levels of API. The high level APIs are the `_Unwind_*` functions which implement functionality required by `__cxa_*` exception functions. The low level APIs are the `unw_*` functions which are an interface defined by the old HP libunwind project. Getting Started with libunwind ------------------------------ .. toctree:: :maxdepth: 2 BuildingLibunwind Current Status -------------- libunwind is a production-quality unwinder, with platform support for DWARF unwind info, SjLj, and ARM EHABI. The low level libunwind API was designed to work either in-process (aka local) or to operate on another process (aka remote), but only the local path has been implemented. Remote unwinding remains as future work. Platform and Compiler Support ----------------------------- libunwind is known to work on the following platforms: ============ ======================== ============ ======================== OS Arch Compilers Unwind Info ============ ======================== ============ ======================== Any i386, x86_64, ARM Clang SjLj Bare Metal ARM Clang, GCC EHABI FreeBSD i386, x86_64, ARM64 Clang DWARF CFI iOS ARM Clang SjLj Linux ARM Clang, GCC EHABI Linux i386, x86_64, ARM64 Clang, GCC DWARF CFI macOS i386, x86_64 Clang, GCC DWARF CFI NetBSD x86_64 Clang, GCC DWARF CFI Windows i386, x86_64, ARM, ARM64 Clang DWARF CFI ============ ======================== ============ ======================== The following minimum compiler versions are strongly recommended. * Clang 3.5 and above * GCC 4.7 and above. Anything older *may* work. Notes and Known Issues ---------------------- * TODO Getting Involved ================ First please review our `Developer's Policy `__ and `Getting started with LLVM `__. **Bug Reports** If you think you've found a bug in libunwind, please report it using the `LLVM bug tracker`_. If you're not sure, you can ask for support on the `Runtimes forum`_ or on Discord. Please use the tag "libunwind" for new threads. **Patches** If you want to contribute a patch to libunwind, please start by reading the LLVM `documentation about contributing `__. **Discussion and Questions** Send discussions and questions to the `Runtimes forum`_. Please add the tag "libunwind" to your post. Quick Links =========== * `LLVM Homepage `_ * `LLVM Bug Tracker `_ * `Clang Discourse Forums `_ * `cfe-commits Mailing List `_ * `Runtimes Forum `_ * `Browse libunwind Sources `_ ================================================ FILE: ThirdParty/libunwind/include/CMakeLists.txt ================================================ set(files __libunwind_config.h libunwind.h libunwind.modulemap mach-o/compact_unwind_encoding.h unwind_arm_ehabi.h unwind_itanium.h unwind.h ) add_library(unwind-headers INTERFACE) target_include_directories(unwind-headers INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) if(LIBUNWIND_INSTALL_HEADERS) foreach(file ${files}) get_filename_component(dir ${file} DIRECTORY) install(FILES ${file} DESTINATION "${LIBUNWIND_INSTALL_INCLUDE_DIR}/${dir}" COMPONENT unwind-headers PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) endforeach() if(NOT CMAKE_CONFIGURATION_TYPES) add_custom_target(install-unwind-headers DEPENDS unwind-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=unwind-headers -P "${LIBUNWIND_BINARY_DIR}/cmake_install.cmake") add_custom_target(install-unwind-headers-stripped DEPENDS install-unwind-headers) endif() endif() ================================================ FILE: ThirdParty/libunwind/include/__libunwind_config.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef ____LIBUNWIND_CONFIG_H__ #define ____LIBUNWIND_CONFIG_H__ #define _LIBUNWIND_VERSION 15000 #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ !defined(__ARM_DWARF_EH__) && !defined(__SEH__) #define _LIBUNWIND_ARM_EHABI #endif #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 8 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 32 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC 112 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 116 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 95 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 287 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K 32 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS 65 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC 31 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64 31 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON 34 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV 64 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE 143 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X 83 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH 64 #if defined(_LIBUNWIND_IS_NATIVE_ONLY) # if defined(__linux__) # define _LIBUNWIND_TARGET_LINUX 1 # endif # if defined(__HAIKU__) # define _LIBUNWIND_TARGET_HAIKU 1 # endif # if defined(__i386__) # define _LIBUNWIND_TARGET_I386 # define _LIBUNWIND_CONTEXT_SIZE 8 # define _LIBUNWIND_CURSOR_SIZE 15 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 # elif defined(__x86_64__) # define _LIBUNWIND_TARGET_X86_64 1 # if defined(_WIN64) # define _LIBUNWIND_CONTEXT_SIZE 54 # ifdef __SEH__ # define _LIBUNWIND_CURSOR_SIZE 204 # else # define _LIBUNWIND_CURSOR_SIZE 66 # endif # elif defined(__ILP32__) # define _LIBUNWIND_CONTEXT_SIZE 21 # define _LIBUNWIND_CURSOR_SIZE 28 # else # define _LIBUNWIND_CONTEXT_SIZE 21 # define _LIBUNWIND_CURSOR_SIZE 33 # endif # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 # elif defined(__powerpc64__) # define _LIBUNWIND_TARGET_PPC64 1 # define _LIBUNWIND_CONTEXT_SIZE 167 # define _LIBUNWIND_CURSOR_SIZE 179 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 # elif defined(__powerpc__) # define _LIBUNWIND_TARGET_PPC 1 # define _LIBUNWIND_CONTEXT_SIZE 117 # define _LIBUNWIND_CURSOR_SIZE 124 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC # elif defined(__aarch64__) # define _LIBUNWIND_TARGET_AARCH64 1 # define _LIBUNWIND_CONTEXT_SIZE 66 # if defined(__SEH__) # define _LIBUNWIND_CURSOR_SIZE 164 # else # define _LIBUNWIND_CURSOR_SIZE 78 # endif # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 # elif defined(__arm__) # define _LIBUNWIND_TARGET_ARM 1 # if defined(__SEH__) # define _LIBUNWIND_CONTEXT_SIZE 42 # define _LIBUNWIND_CURSOR_SIZE 80 # elif defined(__ARM_WMMX) # define _LIBUNWIND_CONTEXT_SIZE 61 # define _LIBUNWIND_CURSOR_SIZE 68 # else # define _LIBUNWIND_CONTEXT_SIZE 42 # define _LIBUNWIND_CURSOR_SIZE 49 # endif # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM # elif defined(__or1k__) # define _LIBUNWIND_TARGET_OR1K 1 # define _LIBUNWIND_CONTEXT_SIZE 16 # define _LIBUNWIND_CURSOR_SIZE 24 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K # elif defined(__hexagon__) # define _LIBUNWIND_TARGET_HEXAGON 1 // Values here change when : Registers.hpp - hexagon_thread_state_t change # define _LIBUNWIND_CONTEXT_SIZE 18 # define _LIBUNWIND_CURSOR_SIZE 24 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON # elif defined(__mips__) # if defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define _LIBUNWIND_TARGET_MIPS_O32 1 # if defined(__mips_hard_float) # define _LIBUNWIND_CONTEXT_SIZE 50 # define _LIBUNWIND_CURSOR_SIZE 57 # else # define _LIBUNWIND_CONTEXT_SIZE 18 # define _LIBUNWIND_CURSOR_SIZE 24 # endif # elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 # if defined(__mips_hard_float) # define _LIBUNWIND_CONTEXT_SIZE 67 # define _LIBUNWIND_CURSOR_SIZE 74 # else # define _LIBUNWIND_CONTEXT_SIZE 35 # define _LIBUNWIND_CURSOR_SIZE 42 # endif # elif defined(_ABI64) && _MIPS_SIM == _ABI64 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 # if defined(__mips_hard_float) # define _LIBUNWIND_CONTEXT_SIZE 67 # define _LIBUNWIND_CURSOR_SIZE 79 # else # define _LIBUNWIND_CONTEXT_SIZE 35 # define _LIBUNWIND_CURSOR_SIZE 47 # endif # else # error "Unsupported MIPS ABI and/or environment" # endif # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS #elif defined(__sparc__) && defined(__arch64__) #define _LIBUNWIND_TARGET_SPARC64 1 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER \ _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64 #define _LIBUNWIND_CONTEXT_SIZE 33 #define _LIBUNWIND_CURSOR_SIZE 45 # elif defined(__sparc__) #define _LIBUNWIND_TARGET_SPARC 1 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC #define _LIBUNWIND_CONTEXT_SIZE 16 #define _LIBUNWIND_CURSOR_SIZE 23 # elif defined(__riscv) # define _LIBUNWIND_TARGET_RISCV 1 # if defined(__riscv_flen) # define RISCV_FLEN __riscv_flen # else # define RISCV_FLEN 0 # endif # define _LIBUNWIND_CONTEXT_SIZE (32 * (__riscv_xlen + RISCV_FLEN) / 64) # if __riscv_xlen == 32 # define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 7) # elif __riscv_xlen == 64 # define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 12) # else # error "Unsupported RISC-V ABI" # endif # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV # elif defined(__ve__) # define _LIBUNWIND_TARGET_VE 1 # define _LIBUNWIND_CONTEXT_SIZE 67 # define _LIBUNWIND_CURSOR_SIZE 79 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE # elif defined(__s390x__) # define _LIBUNWIND_TARGET_S390X 1 # define _LIBUNWIND_CONTEXT_SIZE 34 # define _LIBUNWIND_CURSOR_SIZE 46 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X #elif defined(__loongarch__) #define _LIBUNWIND_TARGET_LOONGARCH 1 #if __loongarch_grlen == 64 #define _LIBUNWIND_CONTEXT_SIZE 65 #define _LIBUNWIND_CURSOR_SIZE 77 #else #error "Unsupported LoongArch ABI" #endif #define _LIBUNWIND_HIGHEST_DWARF_REGISTER \ _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH #elif defined(__wasm__) // Unused #define _LIBUNWIND_CONTEXT_SIZE 0 #define _LIBUNWIND_CURSOR_SIZE 0 # else # error "Unsupported architecture." # endif #else // !_LIBUNWIND_IS_NATIVE_ONLY # define _LIBUNWIND_TARGET_I386 # define _LIBUNWIND_TARGET_X86_64 1 # define _LIBUNWIND_TARGET_PPC 1 # define _LIBUNWIND_TARGET_PPC64 1 # define _LIBUNWIND_TARGET_AARCH64 1 # define _LIBUNWIND_TARGET_ARM 1 # define _LIBUNWIND_TARGET_OR1K 1 # define _LIBUNWIND_TARGET_MIPS_O32 1 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 # define _LIBUNWIND_TARGET_SPARC 1 # define _LIBUNWIND_TARGET_SPARC64 1 # define _LIBUNWIND_TARGET_HEXAGON 1 # define _LIBUNWIND_TARGET_RISCV 1 # define _LIBUNWIND_TARGET_VE 1 # define _LIBUNWIND_TARGET_S390X 1 # define _LIBUNWIND_TARGET_LOONGARCH 1 # define _LIBUNWIND_CONTEXT_SIZE 167 # define _LIBUNWIND_CURSOR_SIZE 204 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287 #endif // _LIBUNWIND_IS_NATIVE_ONLY #endif // ____LIBUNWIND_CONFIG_H__ ================================================ FILE: ThirdParty/libunwind/include/libunwind.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Compatible with libunwind API documented at: // http://www.nongnu.org/libunwind/man/libunwind(3).html // //===----------------------------------------------------------------------===// #ifndef __LIBUNWIND__ #define __LIBUNWIND__ #include <__libunwind_config.h> #include #include #ifdef __APPLE__ #if __clang__ #if __has_include() #include #endif #elif __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 #include #endif #ifdef __arm__ #define LIBUNWIND_AVAIL __attribute__((unavailable)) #elif defined(__OSX_AVAILABLE_STARTING) #define LIBUNWIND_AVAIL __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0) #else #include #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER #define LIBUNWIND_AVAIL AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER #else #define LIBUNWIND_AVAIL __attribute__((unavailable)) #endif #endif #else #define LIBUNWIND_AVAIL #endif #if defined(_WIN32) && defined(__SEH__) #define LIBUNWIND_CURSOR_ALIGNMENT_ATTR __attribute__((__aligned__(16))) #else #define LIBUNWIND_CURSOR_ALIGNMENT_ATTR #endif /* error codes */ enum { UNW_ESUCCESS = 0, /* no error */ UNW_EUNSPEC = -6540, /* unspecified (general) error */ UNW_ENOMEM = -6541, /* out of memory */ UNW_EBADREG = -6542, /* bad register number */ UNW_EREADONLYREG = -6543, /* attempt to write read-only register */ UNW_ESTOPUNWIND = -6544, /* stop unwinding */ UNW_EINVALIDIP = -6545, /* invalid IP */ UNW_EBADFRAME = -6546, /* bad frame */ UNW_EINVAL = -6547, /* unsupported operation or bad value */ UNW_EBADVERSION = -6548, /* unwind info has unsupported version */ UNW_ENOINFO = -6549 /* no unwind info found */ #if defined(_LIBUNWIND_TARGET_AARCH64) && !defined(_LIBUNWIND_IS_NATIVE_ONLY) , UNW_ECROSSRASIGNING = -6550 /* cross unwind with return address signing */ #endif }; struct unw_context_t { uint64_t data[_LIBUNWIND_CONTEXT_SIZE]; }; typedef struct unw_context_t unw_context_t; struct unw_cursor_t { uint64_t data[_LIBUNWIND_CURSOR_SIZE]; } LIBUNWIND_CURSOR_ALIGNMENT_ATTR; typedef struct unw_cursor_t unw_cursor_t; typedef struct unw_addr_space *unw_addr_space_t; typedef int unw_regnum_t; typedef uintptr_t unw_word_t; #if defined(__arm__) && !defined(__ARM_DWARF_EH__) && !defined(__SEH__) typedef uint64_t unw_fpreg_t; #else typedef double unw_fpreg_t; #endif struct unw_proc_info_t { unw_word_t start_ip; /* start address of function */ unw_word_t end_ip; /* address after end of function */ unw_word_t lsda; /* address of language specific data area, */ /* or zero if not used */ unw_word_t handler; /* personality routine, or zero if not used */ unw_word_t gp; /* not used */ unw_word_t flags; /* not used */ uint32_t format; /* compact unwind encoding, or zero if none */ uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */ unw_word_t unwind_info; /* address of DWARF unwind info, or zero */ unw_word_t extra; /* mach_header of mach-o image containing func */ }; typedef struct unw_proc_info_t unw_proc_info_t; #ifdef __cplusplus extern "C" { #endif extern int unw_getcontext(unw_context_t *) LIBUNWIND_AVAIL; extern int unw_init_local(unw_cursor_t *, unw_context_t *) LIBUNWIND_AVAIL; extern int unw_step(unw_cursor_t *) LIBUNWIND_AVAIL; extern int unw_get_reg(unw_cursor_t *, unw_regnum_t, unw_word_t *) LIBUNWIND_AVAIL; extern int unw_get_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t *) LIBUNWIND_AVAIL; extern int unw_set_reg(unw_cursor_t *, unw_regnum_t, unw_word_t) LIBUNWIND_AVAIL; extern int unw_set_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t) LIBUNWIND_AVAIL; extern int unw_resume(unw_cursor_t *) LIBUNWIND_AVAIL; #ifdef __arm__ /* Save VFP registers in FSTMX format (instead of FSTMD). */ extern void unw_save_vfp_as_X(unw_cursor_t *) LIBUNWIND_AVAIL; #endif #ifdef _AIX extern uintptr_t unw_get_data_rel_base(unw_cursor_t *) LIBUNWIND_AVAIL; #endif extern const char *unw_regname(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL; extern int unw_get_proc_info(unw_cursor_t *, unw_proc_info_t *) LIBUNWIND_AVAIL; extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL; extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL; extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL; //extern int unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*); extern unw_addr_space_t unw_local_addr_space; #ifdef __cplusplus } #endif // architecture independent register numbers enum { UNW_REG_IP = -1, // instruction pointer UNW_REG_SP = -2, // stack pointer }; // 32-bit x86 registers enum { UNW_X86_EAX = 0, UNW_X86_ECX = 1, UNW_X86_EDX = 2, UNW_X86_EBX = 3, UNW_X86_EBP = 4, UNW_X86_ESP = 5, UNW_X86_ESI = 6, UNW_X86_EDI = 7 }; // 64-bit x86_64 registers enum { UNW_X86_64_RAX = 0, UNW_X86_64_RDX = 1, UNW_X86_64_RCX = 2, UNW_X86_64_RBX = 3, UNW_X86_64_RSI = 4, UNW_X86_64_RDI = 5, UNW_X86_64_RBP = 6, UNW_X86_64_RSP = 7, UNW_X86_64_R8 = 8, UNW_X86_64_R9 = 9, UNW_X86_64_R10 = 10, UNW_X86_64_R11 = 11, UNW_X86_64_R12 = 12, UNW_X86_64_R13 = 13, UNW_X86_64_R14 = 14, UNW_X86_64_R15 = 15, UNW_X86_64_RIP = 16, UNW_X86_64_XMM0 = 17, UNW_X86_64_XMM1 = 18, UNW_X86_64_XMM2 = 19, UNW_X86_64_XMM3 = 20, UNW_X86_64_XMM4 = 21, UNW_X86_64_XMM5 = 22, UNW_X86_64_XMM6 = 23, UNW_X86_64_XMM7 = 24, UNW_X86_64_XMM8 = 25, UNW_X86_64_XMM9 = 26, UNW_X86_64_XMM10 = 27, UNW_X86_64_XMM11 = 28, UNW_X86_64_XMM12 = 29, UNW_X86_64_XMM13 = 30, UNW_X86_64_XMM14 = 31, UNW_X86_64_XMM15 = 32, }; // 32-bit ppc register numbers enum { UNW_PPC_R0 = 0, UNW_PPC_R1 = 1, UNW_PPC_R2 = 2, UNW_PPC_R3 = 3, UNW_PPC_R4 = 4, UNW_PPC_R5 = 5, UNW_PPC_R6 = 6, UNW_PPC_R7 = 7, UNW_PPC_R8 = 8, UNW_PPC_R9 = 9, UNW_PPC_R10 = 10, UNW_PPC_R11 = 11, UNW_PPC_R12 = 12, UNW_PPC_R13 = 13, UNW_PPC_R14 = 14, UNW_PPC_R15 = 15, UNW_PPC_R16 = 16, UNW_PPC_R17 = 17, UNW_PPC_R18 = 18, UNW_PPC_R19 = 19, UNW_PPC_R20 = 20, UNW_PPC_R21 = 21, UNW_PPC_R22 = 22, UNW_PPC_R23 = 23, UNW_PPC_R24 = 24, UNW_PPC_R25 = 25, UNW_PPC_R26 = 26, UNW_PPC_R27 = 27, UNW_PPC_R28 = 28, UNW_PPC_R29 = 29, UNW_PPC_R30 = 30, UNW_PPC_R31 = 31, UNW_PPC_F0 = 32, UNW_PPC_F1 = 33, UNW_PPC_F2 = 34, UNW_PPC_F3 = 35, UNW_PPC_F4 = 36, UNW_PPC_F5 = 37, UNW_PPC_F6 = 38, UNW_PPC_F7 = 39, UNW_PPC_F8 = 40, UNW_PPC_F9 = 41, UNW_PPC_F10 = 42, UNW_PPC_F11 = 43, UNW_PPC_F12 = 44, UNW_PPC_F13 = 45, UNW_PPC_F14 = 46, UNW_PPC_F15 = 47, UNW_PPC_F16 = 48, UNW_PPC_F17 = 49, UNW_PPC_F18 = 50, UNW_PPC_F19 = 51, UNW_PPC_F20 = 52, UNW_PPC_F21 = 53, UNW_PPC_F22 = 54, UNW_PPC_F23 = 55, UNW_PPC_F24 = 56, UNW_PPC_F25 = 57, UNW_PPC_F26 = 58, UNW_PPC_F27 = 59, UNW_PPC_F28 = 60, UNW_PPC_F29 = 61, UNW_PPC_F30 = 62, UNW_PPC_F31 = 63, UNW_PPC_MQ = 64, UNW_PPC_LR = 65, UNW_PPC_CTR = 66, UNW_PPC_AP = 67, UNW_PPC_CR0 = 68, UNW_PPC_CR1 = 69, UNW_PPC_CR2 = 70, UNW_PPC_CR3 = 71, UNW_PPC_CR4 = 72, UNW_PPC_CR5 = 73, UNW_PPC_CR6 = 74, UNW_PPC_CR7 = 75, UNW_PPC_XER = 76, UNW_PPC_V0 = 77, UNW_PPC_V1 = 78, UNW_PPC_V2 = 79, UNW_PPC_V3 = 80, UNW_PPC_V4 = 81, UNW_PPC_V5 = 82, UNW_PPC_V6 = 83, UNW_PPC_V7 = 84, UNW_PPC_V8 = 85, UNW_PPC_V9 = 86, UNW_PPC_V10 = 87, UNW_PPC_V11 = 88, UNW_PPC_V12 = 89, UNW_PPC_V13 = 90, UNW_PPC_V14 = 91, UNW_PPC_V15 = 92, UNW_PPC_V16 = 93, UNW_PPC_V17 = 94, UNW_PPC_V18 = 95, UNW_PPC_V19 = 96, UNW_PPC_V20 = 97, UNW_PPC_V21 = 98, UNW_PPC_V22 = 99, UNW_PPC_V23 = 100, UNW_PPC_V24 = 101, UNW_PPC_V25 = 102, UNW_PPC_V26 = 103, UNW_PPC_V27 = 104, UNW_PPC_V28 = 105, UNW_PPC_V29 = 106, UNW_PPC_V30 = 107, UNW_PPC_V31 = 108, UNW_PPC_VRSAVE = 109, UNW_PPC_VSCR = 110, UNW_PPC_SPE_ACC = 111, UNW_PPC_SPEFSCR = 112 }; // 64-bit ppc register numbers enum { UNW_PPC64_R0 = 0, UNW_PPC64_R1 = 1, UNW_PPC64_R2 = 2, UNW_PPC64_R3 = 3, UNW_PPC64_R4 = 4, UNW_PPC64_R5 = 5, UNW_PPC64_R6 = 6, UNW_PPC64_R7 = 7, UNW_PPC64_R8 = 8, UNW_PPC64_R9 = 9, UNW_PPC64_R10 = 10, UNW_PPC64_R11 = 11, UNW_PPC64_R12 = 12, UNW_PPC64_R13 = 13, UNW_PPC64_R14 = 14, UNW_PPC64_R15 = 15, UNW_PPC64_R16 = 16, UNW_PPC64_R17 = 17, UNW_PPC64_R18 = 18, UNW_PPC64_R19 = 19, UNW_PPC64_R20 = 20, UNW_PPC64_R21 = 21, UNW_PPC64_R22 = 22, UNW_PPC64_R23 = 23, UNW_PPC64_R24 = 24, UNW_PPC64_R25 = 25, UNW_PPC64_R26 = 26, UNW_PPC64_R27 = 27, UNW_PPC64_R28 = 28, UNW_PPC64_R29 = 29, UNW_PPC64_R30 = 30, UNW_PPC64_R31 = 31, UNW_PPC64_F0 = 32, UNW_PPC64_F1 = 33, UNW_PPC64_F2 = 34, UNW_PPC64_F3 = 35, UNW_PPC64_F4 = 36, UNW_PPC64_F5 = 37, UNW_PPC64_F6 = 38, UNW_PPC64_F7 = 39, UNW_PPC64_F8 = 40, UNW_PPC64_F9 = 41, UNW_PPC64_F10 = 42, UNW_PPC64_F11 = 43, UNW_PPC64_F12 = 44, UNW_PPC64_F13 = 45, UNW_PPC64_F14 = 46, UNW_PPC64_F15 = 47, UNW_PPC64_F16 = 48, UNW_PPC64_F17 = 49, UNW_PPC64_F18 = 50, UNW_PPC64_F19 = 51, UNW_PPC64_F20 = 52, UNW_PPC64_F21 = 53, UNW_PPC64_F22 = 54, UNW_PPC64_F23 = 55, UNW_PPC64_F24 = 56, UNW_PPC64_F25 = 57, UNW_PPC64_F26 = 58, UNW_PPC64_F27 = 59, UNW_PPC64_F28 = 60, UNW_PPC64_F29 = 61, UNW_PPC64_F30 = 62, UNW_PPC64_F31 = 63, // 64: reserved UNW_PPC64_LR = 65, UNW_PPC64_CTR = 66, // 67: reserved UNW_PPC64_CR0 = 68, UNW_PPC64_CR1 = 69, UNW_PPC64_CR2 = 70, UNW_PPC64_CR3 = 71, UNW_PPC64_CR4 = 72, UNW_PPC64_CR5 = 73, UNW_PPC64_CR6 = 74, UNW_PPC64_CR7 = 75, UNW_PPC64_XER = 76, UNW_PPC64_V0 = 77, UNW_PPC64_V1 = 78, UNW_PPC64_V2 = 79, UNW_PPC64_V3 = 80, UNW_PPC64_V4 = 81, UNW_PPC64_V5 = 82, UNW_PPC64_V6 = 83, UNW_PPC64_V7 = 84, UNW_PPC64_V8 = 85, UNW_PPC64_V9 = 86, UNW_PPC64_V10 = 87, UNW_PPC64_V11 = 88, UNW_PPC64_V12 = 89, UNW_PPC64_V13 = 90, UNW_PPC64_V14 = 91, UNW_PPC64_V15 = 92, UNW_PPC64_V16 = 93, UNW_PPC64_V17 = 94, UNW_PPC64_V18 = 95, UNW_PPC64_V19 = 96, UNW_PPC64_V20 = 97, UNW_PPC64_V21 = 98, UNW_PPC64_V22 = 99, UNW_PPC64_V23 = 100, UNW_PPC64_V24 = 101, UNW_PPC64_V25 = 102, UNW_PPC64_V26 = 103, UNW_PPC64_V27 = 104, UNW_PPC64_V28 = 105, UNW_PPC64_V29 = 106, UNW_PPC64_V30 = 107, UNW_PPC64_V31 = 108, // 109, 111-113: OpenPOWER ELF V2 ABI: reserved // Borrowing VRSAVE number from PPC32. UNW_PPC64_VRSAVE = 109, UNW_PPC64_VSCR = 110, UNW_PPC64_TFHAR = 114, UNW_PPC64_TFIAR = 115, UNW_PPC64_TEXASR = 116, UNW_PPC64_VS0 = UNW_PPC64_F0, UNW_PPC64_VS1 = UNW_PPC64_F1, UNW_PPC64_VS2 = UNW_PPC64_F2, UNW_PPC64_VS3 = UNW_PPC64_F3, UNW_PPC64_VS4 = UNW_PPC64_F4, UNW_PPC64_VS5 = UNW_PPC64_F5, UNW_PPC64_VS6 = UNW_PPC64_F6, UNW_PPC64_VS7 = UNW_PPC64_F7, UNW_PPC64_VS8 = UNW_PPC64_F8, UNW_PPC64_VS9 = UNW_PPC64_F9, UNW_PPC64_VS10 = UNW_PPC64_F10, UNW_PPC64_VS11 = UNW_PPC64_F11, UNW_PPC64_VS12 = UNW_PPC64_F12, UNW_PPC64_VS13 = UNW_PPC64_F13, UNW_PPC64_VS14 = UNW_PPC64_F14, UNW_PPC64_VS15 = UNW_PPC64_F15, UNW_PPC64_VS16 = UNW_PPC64_F16, UNW_PPC64_VS17 = UNW_PPC64_F17, UNW_PPC64_VS18 = UNW_PPC64_F18, UNW_PPC64_VS19 = UNW_PPC64_F19, UNW_PPC64_VS20 = UNW_PPC64_F20, UNW_PPC64_VS21 = UNW_PPC64_F21, UNW_PPC64_VS22 = UNW_PPC64_F22, UNW_PPC64_VS23 = UNW_PPC64_F23, UNW_PPC64_VS24 = UNW_PPC64_F24, UNW_PPC64_VS25 = UNW_PPC64_F25, UNW_PPC64_VS26 = UNW_PPC64_F26, UNW_PPC64_VS27 = UNW_PPC64_F27, UNW_PPC64_VS28 = UNW_PPC64_F28, UNW_PPC64_VS29 = UNW_PPC64_F29, UNW_PPC64_VS30 = UNW_PPC64_F30, UNW_PPC64_VS31 = UNW_PPC64_F31, UNW_PPC64_VS32 = UNW_PPC64_V0, UNW_PPC64_VS33 = UNW_PPC64_V1, UNW_PPC64_VS34 = UNW_PPC64_V2, UNW_PPC64_VS35 = UNW_PPC64_V3, UNW_PPC64_VS36 = UNW_PPC64_V4, UNW_PPC64_VS37 = UNW_PPC64_V5, UNW_PPC64_VS38 = UNW_PPC64_V6, UNW_PPC64_VS39 = UNW_PPC64_V7, UNW_PPC64_VS40 = UNW_PPC64_V8, UNW_PPC64_VS41 = UNW_PPC64_V9, UNW_PPC64_VS42 = UNW_PPC64_V10, UNW_PPC64_VS43 = UNW_PPC64_V11, UNW_PPC64_VS44 = UNW_PPC64_V12, UNW_PPC64_VS45 = UNW_PPC64_V13, UNW_PPC64_VS46 = UNW_PPC64_V14, UNW_PPC64_VS47 = UNW_PPC64_V15, UNW_PPC64_VS48 = UNW_PPC64_V16, UNW_PPC64_VS49 = UNW_PPC64_V17, UNW_PPC64_VS50 = UNW_PPC64_V18, UNW_PPC64_VS51 = UNW_PPC64_V19, UNW_PPC64_VS52 = UNW_PPC64_V20, UNW_PPC64_VS53 = UNW_PPC64_V21, UNW_PPC64_VS54 = UNW_PPC64_V22, UNW_PPC64_VS55 = UNW_PPC64_V23, UNW_PPC64_VS56 = UNW_PPC64_V24, UNW_PPC64_VS57 = UNW_PPC64_V25, UNW_PPC64_VS58 = UNW_PPC64_V26, UNW_PPC64_VS59 = UNW_PPC64_V27, UNW_PPC64_VS60 = UNW_PPC64_V28, UNW_PPC64_VS61 = UNW_PPC64_V29, UNW_PPC64_VS62 = UNW_PPC64_V30, UNW_PPC64_VS63 = UNW_PPC64_V31 }; // 64-bit ARM64 registers enum { UNW_AARCH64_X0 = 0, UNW_AARCH64_X1 = 1, UNW_AARCH64_X2 = 2, UNW_AARCH64_X3 = 3, UNW_AARCH64_X4 = 4, UNW_AARCH64_X5 = 5, UNW_AARCH64_X6 = 6, UNW_AARCH64_X7 = 7, UNW_AARCH64_X8 = 8, UNW_AARCH64_X9 = 9, UNW_AARCH64_X10 = 10, UNW_AARCH64_X11 = 11, UNW_AARCH64_X12 = 12, UNW_AARCH64_X13 = 13, UNW_AARCH64_X14 = 14, UNW_AARCH64_X15 = 15, UNW_AARCH64_X16 = 16, UNW_AARCH64_X17 = 17, UNW_AARCH64_X18 = 18, UNW_AARCH64_X19 = 19, UNW_AARCH64_X20 = 20, UNW_AARCH64_X21 = 21, UNW_AARCH64_X22 = 22, UNW_AARCH64_X23 = 23, UNW_AARCH64_X24 = 24, UNW_AARCH64_X25 = 25, UNW_AARCH64_X26 = 26, UNW_AARCH64_X27 = 27, UNW_AARCH64_X28 = 28, UNW_AARCH64_X29 = 29, UNW_AARCH64_FP = 29, UNW_AARCH64_X30 = 30, UNW_AARCH64_LR = 30, UNW_AARCH64_X31 = 31, UNW_AARCH64_SP = 31, UNW_AARCH64_PC = 32, // reserved block UNW_AARCH64_RA_SIGN_STATE = 34, // FP/vector registers UNW_AARCH64_V0 = 64, UNW_AARCH64_V1 = 65, UNW_AARCH64_V2 = 66, UNW_AARCH64_V3 = 67, UNW_AARCH64_V4 = 68, UNW_AARCH64_V5 = 69, UNW_AARCH64_V6 = 70, UNW_AARCH64_V7 = 71, UNW_AARCH64_V8 = 72, UNW_AARCH64_V9 = 73, UNW_AARCH64_V10 = 74, UNW_AARCH64_V11 = 75, UNW_AARCH64_V12 = 76, UNW_AARCH64_V13 = 77, UNW_AARCH64_V14 = 78, UNW_AARCH64_V15 = 79, UNW_AARCH64_V16 = 80, UNW_AARCH64_V17 = 81, UNW_AARCH64_V18 = 82, UNW_AARCH64_V19 = 83, UNW_AARCH64_V20 = 84, UNW_AARCH64_V21 = 85, UNW_AARCH64_V22 = 86, UNW_AARCH64_V23 = 87, UNW_AARCH64_V24 = 88, UNW_AARCH64_V25 = 89, UNW_AARCH64_V26 = 90, UNW_AARCH64_V27 = 91, UNW_AARCH64_V28 = 92, UNW_AARCH64_V29 = 93, UNW_AARCH64_V30 = 94, UNW_AARCH64_V31 = 95, // Compatibility aliases UNW_ARM64_X0 = UNW_AARCH64_X0, UNW_ARM64_X1 = UNW_AARCH64_X1, UNW_ARM64_X2 = UNW_AARCH64_X2, UNW_ARM64_X3 = UNW_AARCH64_X3, UNW_ARM64_X4 = UNW_AARCH64_X4, UNW_ARM64_X5 = UNW_AARCH64_X5, UNW_ARM64_X6 = UNW_AARCH64_X6, UNW_ARM64_X7 = UNW_AARCH64_X7, UNW_ARM64_X8 = UNW_AARCH64_X8, UNW_ARM64_X9 = UNW_AARCH64_X9, UNW_ARM64_X10 = UNW_AARCH64_X10, UNW_ARM64_X11 = UNW_AARCH64_X11, UNW_ARM64_X12 = UNW_AARCH64_X12, UNW_ARM64_X13 = UNW_AARCH64_X13, UNW_ARM64_X14 = UNW_AARCH64_X14, UNW_ARM64_X15 = UNW_AARCH64_X15, UNW_ARM64_X16 = UNW_AARCH64_X16, UNW_ARM64_X17 = UNW_AARCH64_X17, UNW_ARM64_X18 = UNW_AARCH64_X18, UNW_ARM64_X19 = UNW_AARCH64_X19, UNW_ARM64_X20 = UNW_AARCH64_X20, UNW_ARM64_X21 = UNW_AARCH64_X21, UNW_ARM64_X22 = UNW_AARCH64_X22, UNW_ARM64_X23 = UNW_AARCH64_X23, UNW_ARM64_X24 = UNW_AARCH64_X24, UNW_ARM64_X25 = UNW_AARCH64_X25, UNW_ARM64_X26 = UNW_AARCH64_X26, UNW_ARM64_X27 = UNW_AARCH64_X27, UNW_ARM64_X28 = UNW_AARCH64_X28, UNW_ARM64_X29 = UNW_AARCH64_X29, UNW_ARM64_FP = UNW_AARCH64_FP, UNW_ARM64_X30 = UNW_AARCH64_X30, UNW_ARM64_LR = UNW_AARCH64_LR, UNW_ARM64_X31 = UNW_AARCH64_X31, UNW_ARM64_SP = UNW_AARCH64_SP, UNW_ARM64_PC = UNW_AARCH64_PC, UNW_ARM64_RA_SIGN_STATE = UNW_AARCH64_RA_SIGN_STATE, UNW_ARM64_D0 = UNW_AARCH64_V0, UNW_ARM64_D1 = UNW_AARCH64_V1, UNW_ARM64_D2 = UNW_AARCH64_V2, UNW_ARM64_D3 = UNW_AARCH64_V3, UNW_ARM64_D4 = UNW_AARCH64_V4, UNW_ARM64_D5 = UNW_AARCH64_V5, UNW_ARM64_D6 = UNW_AARCH64_V6, UNW_ARM64_D7 = UNW_AARCH64_V7, UNW_ARM64_D8 = UNW_AARCH64_V8, UNW_ARM64_D9 = UNW_AARCH64_V9, UNW_ARM64_D10 = UNW_AARCH64_V10, UNW_ARM64_D11 = UNW_AARCH64_V11, UNW_ARM64_D12 = UNW_AARCH64_V12, UNW_ARM64_D13 = UNW_AARCH64_V13, UNW_ARM64_D14 = UNW_AARCH64_V14, UNW_ARM64_D15 = UNW_AARCH64_V15, UNW_ARM64_D16 = UNW_AARCH64_V16, UNW_ARM64_D17 = UNW_AARCH64_V17, UNW_ARM64_D18 = UNW_AARCH64_V18, UNW_ARM64_D19 = UNW_AARCH64_V19, UNW_ARM64_D20 = UNW_AARCH64_V20, UNW_ARM64_D21 = UNW_AARCH64_V21, UNW_ARM64_D22 = UNW_AARCH64_V22, UNW_ARM64_D23 = UNW_AARCH64_V23, UNW_ARM64_D24 = UNW_AARCH64_V24, UNW_ARM64_D25 = UNW_AARCH64_V25, UNW_ARM64_D26 = UNW_AARCH64_V26, UNW_ARM64_D27 = UNW_AARCH64_V27, UNW_ARM64_D28 = UNW_AARCH64_V28, UNW_ARM64_D29 = UNW_AARCH64_V29, UNW_ARM64_D30 = UNW_AARCH64_V30, UNW_ARM64_D31 = UNW_AARCH64_V31, }; // 32-bit ARM registers. Numbers match DWARF for ARM spec #3.1 Table 1. // Naming scheme uses recommendations given in Note 4 for VFP-v2 and VFP-v3. // In this scheme, even though the 64-bit floating point registers D0-D31 // overlap physically with the 32-bit floating pointer registers S0-S31, // they are given a non-overlapping range of register numbers. // // Commented out ranges are not preserved during unwinding. enum { UNW_ARM_R0 = 0, UNW_ARM_R1 = 1, UNW_ARM_R2 = 2, UNW_ARM_R3 = 3, UNW_ARM_R4 = 4, UNW_ARM_R5 = 5, UNW_ARM_R6 = 6, UNW_ARM_R7 = 7, UNW_ARM_R8 = 8, UNW_ARM_R9 = 9, UNW_ARM_R10 = 10, UNW_ARM_R11 = 11, UNW_ARM_R12 = 12, UNW_ARM_SP = 13, // Logical alias for UNW_REG_SP UNW_ARM_R13 = 13, UNW_ARM_LR = 14, UNW_ARM_R14 = 14, UNW_ARM_IP = 15, // Logical alias for UNW_REG_IP UNW_ARM_R15 = 15, // 16-63 -- OBSOLETE. Used in VFP1 to represent both S0-S31 and D0-D31. UNW_ARM_S0 = 64, UNW_ARM_S1 = 65, UNW_ARM_S2 = 66, UNW_ARM_S3 = 67, UNW_ARM_S4 = 68, UNW_ARM_S5 = 69, UNW_ARM_S6 = 70, UNW_ARM_S7 = 71, UNW_ARM_S8 = 72, UNW_ARM_S9 = 73, UNW_ARM_S10 = 74, UNW_ARM_S11 = 75, UNW_ARM_S12 = 76, UNW_ARM_S13 = 77, UNW_ARM_S14 = 78, UNW_ARM_S15 = 79, UNW_ARM_S16 = 80, UNW_ARM_S17 = 81, UNW_ARM_S18 = 82, UNW_ARM_S19 = 83, UNW_ARM_S20 = 84, UNW_ARM_S21 = 85, UNW_ARM_S22 = 86, UNW_ARM_S23 = 87, UNW_ARM_S24 = 88, UNW_ARM_S25 = 89, UNW_ARM_S26 = 90, UNW_ARM_S27 = 91, UNW_ARM_S28 = 92, UNW_ARM_S29 = 93, UNW_ARM_S30 = 94, UNW_ARM_S31 = 95, // 96-103 -- OBSOLETE. F0-F7. Used by the FPA system. Superseded by VFP. // 104-111 -- wCGR0-wCGR7, ACC0-ACC7 (Intel wireless MMX) UNW_ARM_WR0 = 112, UNW_ARM_WR1 = 113, UNW_ARM_WR2 = 114, UNW_ARM_WR3 = 115, UNW_ARM_WR4 = 116, UNW_ARM_WR5 = 117, UNW_ARM_WR6 = 118, UNW_ARM_WR7 = 119, UNW_ARM_WR8 = 120, UNW_ARM_WR9 = 121, UNW_ARM_WR10 = 122, UNW_ARM_WR11 = 123, UNW_ARM_WR12 = 124, UNW_ARM_WR13 = 125, UNW_ARM_WR14 = 126, UNW_ARM_WR15 = 127, // 128-133 -- SPSR, SPSR_{FIQ|IRQ|ABT|UND|SVC} // 134-142 -- Reserved UNW_ARM_RA_AUTH_CODE = 143, // 144-150 -- R8_USR-R14_USR // 151-157 -- R8_FIQ-R14_FIQ // 158-159 -- R13_IRQ-R14_IRQ // 160-161 -- R13_ABT-R14_ABT // 162-163 -- R13_UND-R14_UND // 164-165 -- R13_SVC-R14_SVC // 166-191 -- Reserved UNW_ARM_WC0 = 192, UNW_ARM_WC1 = 193, UNW_ARM_WC2 = 194, UNW_ARM_WC3 = 195, // 196-199 -- wC4-wC7 (Intel wireless MMX control) // 200-255 -- Reserved UNW_ARM_D0 = 256, UNW_ARM_D1 = 257, UNW_ARM_D2 = 258, UNW_ARM_D3 = 259, UNW_ARM_D4 = 260, UNW_ARM_D5 = 261, UNW_ARM_D6 = 262, UNW_ARM_D7 = 263, UNW_ARM_D8 = 264, UNW_ARM_D9 = 265, UNW_ARM_D10 = 266, UNW_ARM_D11 = 267, UNW_ARM_D12 = 268, UNW_ARM_D13 = 269, UNW_ARM_D14 = 270, UNW_ARM_D15 = 271, UNW_ARM_D16 = 272, UNW_ARM_D17 = 273, UNW_ARM_D18 = 274, UNW_ARM_D19 = 275, UNW_ARM_D20 = 276, UNW_ARM_D21 = 277, UNW_ARM_D22 = 278, UNW_ARM_D23 = 279, UNW_ARM_D24 = 280, UNW_ARM_D25 = 281, UNW_ARM_D26 = 282, UNW_ARM_D27 = 283, UNW_ARM_D28 = 284, UNW_ARM_D29 = 285, UNW_ARM_D30 = 286, UNW_ARM_D31 = 287, // 288-319 -- Reserved for VFP/Neon // 320-8191 -- Reserved // 8192-16383 -- Unspecified vendor co-processor register. }; // OpenRISC1000 register numbers enum { UNW_OR1K_R0 = 0, UNW_OR1K_R1 = 1, UNW_OR1K_R2 = 2, UNW_OR1K_R3 = 3, UNW_OR1K_R4 = 4, UNW_OR1K_R5 = 5, UNW_OR1K_R6 = 6, UNW_OR1K_R7 = 7, UNW_OR1K_R8 = 8, UNW_OR1K_R9 = 9, UNW_OR1K_R10 = 10, UNW_OR1K_R11 = 11, UNW_OR1K_R12 = 12, UNW_OR1K_R13 = 13, UNW_OR1K_R14 = 14, UNW_OR1K_R15 = 15, UNW_OR1K_R16 = 16, UNW_OR1K_R17 = 17, UNW_OR1K_R18 = 18, UNW_OR1K_R19 = 19, UNW_OR1K_R20 = 20, UNW_OR1K_R21 = 21, UNW_OR1K_R22 = 22, UNW_OR1K_R23 = 23, UNW_OR1K_R24 = 24, UNW_OR1K_R25 = 25, UNW_OR1K_R26 = 26, UNW_OR1K_R27 = 27, UNW_OR1K_R28 = 28, UNW_OR1K_R29 = 29, UNW_OR1K_R30 = 30, UNW_OR1K_R31 = 31, UNW_OR1K_EPCR = 32, }; // MIPS registers enum { UNW_MIPS_R0 = 0, UNW_MIPS_R1 = 1, UNW_MIPS_R2 = 2, UNW_MIPS_R3 = 3, UNW_MIPS_R4 = 4, UNW_MIPS_R5 = 5, UNW_MIPS_R6 = 6, UNW_MIPS_R7 = 7, UNW_MIPS_R8 = 8, UNW_MIPS_R9 = 9, UNW_MIPS_R10 = 10, UNW_MIPS_R11 = 11, UNW_MIPS_R12 = 12, UNW_MIPS_R13 = 13, UNW_MIPS_R14 = 14, UNW_MIPS_R15 = 15, UNW_MIPS_R16 = 16, UNW_MIPS_R17 = 17, UNW_MIPS_R18 = 18, UNW_MIPS_R19 = 19, UNW_MIPS_R20 = 20, UNW_MIPS_R21 = 21, UNW_MIPS_R22 = 22, UNW_MIPS_R23 = 23, UNW_MIPS_R24 = 24, UNW_MIPS_R25 = 25, UNW_MIPS_R26 = 26, UNW_MIPS_R27 = 27, UNW_MIPS_R28 = 28, UNW_MIPS_R29 = 29, UNW_MIPS_R30 = 30, UNW_MIPS_R31 = 31, UNW_MIPS_F0 = 32, UNW_MIPS_F1 = 33, UNW_MIPS_F2 = 34, UNW_MIPS_F3 = 35, UNW_MIPS_F4 = 36, UNW_MIPS_F5 = 37, UNW_MIPS_F6 = 38, UNW_MIPS_F7 = 39, UNW_MIPS_F8 = 40, UNW_MIPS_F9 = 41, UNW_MIPS_F10 = 42, UNW_MIPS_F11 = 43, UNW_MIPS_F12 = 44, UNW_MIPS_F13 = 45, UNW_MIPS_F14 = 46, UNW_MIPS_F15 = 47, UNW_MIPS_F16 = 48, UNW_MIPS_F17 = 49, UNW_MIPS_F18 = 50, UNW_MIPS_F19 = 51, UNW_MIPS_F20 = 52, UNW_MIPS_F21 = 53, UNW_MIPS_F22 = 54, UNW_MIPS_F23 = 55, UNW_MIPS_F24 = 56, UNW_MIPS_F25 = 57, UNW_MIPS_F26 = 58, UNW_MIPS_F27 = 59, UNW_MIPS_F28 = 60, UNW_MIPS_F29 = 61, UNW_MIPS_F30 = 62, UNW_MIPS_F31 = 63, // HI,LO have been dropped since r6, we keep them here. // So, when we add DSP/MSA etc, we can use the same register indexes // for r6 and pre-r6. UNW_MIPS_HI = 64, UNW_MIPS_LO = 65, }; // SPARC registers enum { UNW_SPARC_G0 = 0, UNW_SPARC_G1 = 1, UNW_SPARC_G2 = 2, UNW_SPARC_G3 = 3, UNW_SPARC_G4 = 4, UNW_SPARC_G5 = 5, UNW_SPARC_G6 = 6, UNW_SPARC_G7 = 7, UNW_SPARC_O0 = 8, UNW_SPARC_O1 = 9, UNW_SPARC_O2 = 10, UNW_SPARC_O3 = 11, UNW_SPARC_O4 = 12, UNW_SPARC_O5 = 13, UNW_SPARC_O6 = 14, UNW_SPARC_O7 = 15, UNW_SPARC_L0 = 16, UNW_SPARC_L1 = 17, UNW_SPARC_L2 = 18, UNW_SPARC_L3 = 19, UNW_SPARC_L4 = 20, UNW_SPARC_L5 = 21, UNW_SPARC_L6 = 22, UNW_SPARC_L7 = 23, UNW_SPARC_I0 = 24, UNW_SPARC_I1 = 25, UNW_SPARC_I2 = 26, UNW_SPARC_I3 = 27, UNW_SPARC_I4 = 28, UNW_SPARC_I5 = 29, UNW_SPARC_I6 = 30, UNW_SPARC_I7 = 31, }; // Hexagon register numbers enum { UNW_HEXAGON_R0, UNW_HEXAGON_R1, UNW_HEXAGON_R2, UNW_HEXAGON_R3, UNW_HEXAGON_R4, UNW_HEXAGON_R5, UNW_HEXAGON_R6, UNW_HEXAGON_R7, UNW_HEXAGON_R8, UNW_HEXAGON_R9, UNW_HEXAGON_R10, UNW_HEXAGON_R11, UNW_HEXAGON_R12, UNW_HEXAGON_R13, UNW_HEXAGON_R14, UNW_HEXAGON_R15, UNW_HEXAGON_R16, UNW_HEXAGON_R17, UNW_HEXAGON_R18, UNW_HEXAGON_R19, UNW_HEXAGON_R20, UNW_HEXAGON_R21, UNW_HEXAGON_R22, UNW_HEXAGON_R23, UNW_HEXAGON_R24, UNW_HEXAGON_R25, UNW_HEXAGON_R26, UNW_HEXAGON_R27, UNW_HEXAGON_R28, UNW_HEXAGON_R29, UNW_HEXAGON_R30, UNW_HEXAGON_R31, UNW_HEXAGON_P3_0, UNW_HEXAGON_PC, }; // RISC-V registers. These match the DWARF register numbers defined by section // 4 of the RISC-V ELF psABI specification, which can be found at: // // https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md enum { UNW_RISCV_X0 = 0, UNW_RISCV_X1 = 1, UNW_RISCV_X2 = 2, UNW_RISCV_X3 = 3, UNW_RISCV_X4 = 4, UNW_RISCV_X5 = 5, UNW_RISCV_X6 = 6, UNW_RISCV_X7 = 7, UNW_RISCV_X8 = 8, UNW_RISCV_X9 = 9, UNW_RISCV_X10 = 10, UNW_RISCV_X11 = 11, UNW_RISCV_X12 = 12, UNW_RISCV_X13 = 13, UNW_RISCV_X14 = 14, UNW_RISCV_X15 = 15, UNW_RISCV_X16 = 16, UNW_RISCV_X17 = 17, UNW_RISCV_X18 = 18, UNW_RISCV_X19 = 19, UNW_RISCV_X20 = 20, UNW_RISCV_X21 = 21, UNW_RISCV_X22 = 22, UNW_RISCV_X23 = 23, UNW_RISCV_X24 = 24, UNW_RISCV_X25 = 25, UNW_RISCV_X26 = 26, UNW_RISCV_X27 = 27, UNW_RISCV_X28 = 28, UNW_RISCV_X29 = 29, UNW_RISCV_X30 = 30, UNW_RISCV_X31 = 31, UNW_RISCV_F0 = 32, UNW_RISCV_F1 = 33, UNW_RISCV_F2 = 34, UNW_RISCV_F3 = 35, UNW_RISCV_F4 = 36, UNW_RISCV_F5 = 37, UNW_RISCV_F6 = 38, UNW_RISCV_F7 = 39, UNW_RISCV_F8 = 40, UNW_RISCV_F9 = 41, UNW_RISCV_F10 = 42, UNW_RISCV_F11 = 43, UNW_RISCV_F12 = 44, UNW_RISCV_F13 = 45, UNW_RISCV_F14 = 46, UNW_RISCV_F15 = 47, UNW_RISCV_F16 = 48, UNW_RISCV_F17 = 49, UNW_RISCV_F18 = 50, UNW_RISCV_F19 = 51, UNW_RISCV_F20 = 52, UNW_RISCV_F21 = 53, UNW_RISCV_F22 = 54, UNW_RISCV_F23 = 55, UNW_RISCV_F24 = 56, UNW_RISCV_F25 = 57, UNW_RISCV_F26 = 58, UNW_RISCV_F27 = 59, UNW_RISCV_F28 = 60, UNW_RISCV_F29 = 61, UNW_RISCV_F30 = 62, UNW_RISCV_F31 = 63, // 65-95 -- Reserved for future standard extensions // 96-127 -- v0-v31 (Vector registers) // 128-3071 -- Reserved for future standard extensions // 3072-4095 -- Reserved for custom extensions // 4096-8191 -- CSRs // // VLENB CSR number: 0xC22 -- defined by section 3 of v-spec: // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#3-vector-extension-programmers-model // VLENB DWARF number: 0x1000 + 0xC22 UNW_RISCV_VLENB = 0x1C22, }; // VE register numbers enum { UNW_VE_S0 = 0, UNW_VE_S1 = 1, UNW_VE_S2 = 2, UNW_VE_S3 = 3, UNW_VE_S4 = 4, UNW_VE_S5 = 5, UNW_VE_S6 = 6, UNW_VE_S7 = 7, UNW_VE_S8 = 8, UNW_VE_S9 = 9, UNW_VE_S10 = 10, UNW_VE_S11 = 11, UNW_VE_S12 = 12, UNW_VE_S13 = 13, UNW_VE_S14 = 14, UNW_VE_S15 = 15, UNW_VE_S16 = 16, UNW_VE_S17 = 17, UNW_VE_S18 = 18, UNW_VE_S19 = 19, UNW_VE_S20 = 20, UNW_VE_S21 = 21, UNW_VE_S22 = 22, UNW_VE_S23 = 23, UNW_VE_S24 = 24, UNW_VE_S25 = 25, UNW_VE_S26 = 26, UNW_VE_S27 = 27, UNW_VE_S28 = 28, UNW_VE_S29 = 29, UNW_VE_S30 = 30, UNW_VE_S31 = 31, UNW_VE_S32 = 32, UNW_VE_S33 = 33, UNW_VE_S34 = 34, UNW_VE_S35 = 35, UNW_VE_S36 = 36, UNW_VE_S37 = 37, UNW_VE_S38 = 38, UNW_VE_S39 = 39, UNW_VE_S40 = 40, UNW_VE_S41 = 41, UNW_VE_S42 = 42, UNW_VE_S43 = 43, UNW_VE_S44 = 44, UNW_VE_S45 = 45, UNW_VE_S46 = 46, UNW_VE_S47 = 47, UNW_VE_S48 = 48, UNW_VE_S49 = 49, UNW_VE_S50 = 50, UNW_VE_S51 = 51, UNW_VE_S52 = 52, UNW_VE_S53 = 53, UNW_VE_S54 = 54, UNW_VE_S55 = 55, UNW_VE_S56 = 56, UNW_VE_S57 = 57, UNW_VE_S58 = 58, UNW_VE_S59 = 59, UNW_VE_S60 = 60, UNW_VE_S61 = 61, UNW_VE_S62 = 62, UNW_VE_S63 = 63, UNW_VE_V0 = 64 + 0, UNW_VE_V1 = 64 + 1, UNW_VE_V2 = 64 + 2, UNW_VE_V3 = 64 + 3, UNW_VE_V4 = 64 + 4, UNW_VE_V5 = 64 + 5, UNW_VE_V6 = 64 + 6, UNW_VE_V7 = 64 + 7, UNW_VE_V8 = 64 + 8, UNW_VE_V9 = 64 + 9, UNW_VE_V10 = 64 + 10, UNW_VE_V11 = 64 + 11, UNW_VE_V12 = 64 + 12, UNW_VE_V13 = 64 + 13, UNW_VE_V14 = 64 + 14, UNW_VE_V15 = 64 + 15, UNW_VE_V16 = 64 + 16, UNW_VE_V17 = 64 + 17, UNW_VE_V18 = 64 + 18, UNW_VE_V19 = 64 + 19, UNW_VE_V20 = 64 + 20, UNW_VE_V21 = 64 + 21, UNW_VE_V22 = 64 + 22, UNW_VE_V23 = 64 + 23, UNW_VE_V24 = 64 + 24, UNW_VE_V25 = 64 + 25, UNW_VE_V26 = 64 + 26, UNW_VE_V27 = 64 + 27, UNW_VE_V28 = 64 + 28, UNW_VE_V29 = 64 + 29, UNW_VE_V30 = 64 + 30, UNW_VE_V31 = 64 + 31, UNW_VE_V32 = 64 + 32, UNW_VE_V33 = 64 + 33, UNW_VE_V34 = 64 + 34, UNW_VE_V35 = 64 + 35, UNW_VE_V36 = 64 + 36, UNW_VE_V37 = 64 + 37, UNW_VE_V38 = 64 + 38, UNW_VE_V39 = 64 + 39, UNW_VE_V40 = 64 + 40, UNW_VE_V41 = 64 + 41, UNW_VE_V42 = 64 + 42, UNW_VE_V43 = 64 + 43, UNW_VE_V44 = 64 + 44, UNW_VE_V45 = 64 + 45, UNW_VE_V46 = 64 + 46, UNW_VE_V47 = 64 + 47, UNW_VE_V48 = 64 + 48, UNW_VE_V49 = 64 + 49, UNW_VE_V50 = 64 + 50, UNW_VE_V51 = 64 + 51, UNW_VE_V52 = 64 + 52, UNW_VE_V53 = 64 + 53, UNW_VE_V54 = 64 + 54, UNW_VE_V55 = 64 + 55, UNW_VE_V56 = 64 + 56, UNW_VE_V57 = 64 + 57, UNW_VE_V58 = 64 + 58, UNW_VE_V59 = 64 + 59, UNW_VE_V60 = 64 + 60, UNW_VE_V61 = 64 + 61, UNW_VE_V62 = 64 + 62, UNW_VE_V63 = 64 + 63, UNW_VE_VM0 = 128 + 0, UNW_VE_VM1 = 128 + 1, UNW_VE_VM2 = 128 + 2, UNW_VE_VM3 = 128 + 3, UNW_VE_VM4 = 128 + 4, UNW_VE_VM5 = 128 + 5, UNW_VE_VM6 = 128 + 6, UNW_VE_VM7 = 128 + 7, UNW_VE_VM8 = 128 + 8, UNW_VE_VM9 = 128 + 9, UNW_VE_VM10 = 128 + 10, UNW_VE_VM11 = 128 + 11, UNW_VE_VM12 = 128 + 12, UNW_VE_VM13 = 128 + 13, UNW_VE_VM14 = 128 + 14, UNW_VE_VM15 = 128 + 15, // = 143 // Following registers don't have DWARF register numbers. UNW_VE_VIXR = 144, UNW_VE_VL = 145, }; // s390x register numbers enum { UNW_S390X_R0 = 0, UNW_S390X_R1 = 1, UNW_S390X_R2 = 2, UNW_S390X_R3 = 3, UNW_S390X_R4 = 4, UNW_S390X_R5 = 5, UNW_S390X_R6 = 6, UNW_S390X_R7 = 7, UNW_S390X_R8 = 8, UNW_S390X_R9 = 9, UNW_S390X_R10 = 10, UNW_S390X_R11 = 11, UNW_S390X_R12 = 12, UNW_S390X_R13 = 13, UNW_S390X_R14 = 14, UNW_S390X_R15 = 15, UNW_S390X_F0 = 16, UNW_S390X_F2 = 17, UNW_S390X_F4 = 18, UNW_S390X_F6 = 19, UNW_S390X_F1 = 20, UNW_S390X_F3 = 21, UNW_S390X_F5 = 22, UNW_S390X_F7 = 23, UNW_S390X_F8 = 24, UNW_S390X_F10 = 25, UNW_S390X_F12 = 26, UNW_S390X_F14 = 27, UNW_S390X_F9 = 28, UNW_S390X_F11 = 29, UNW_S390X_F13 = 30, UNW_S390X_F15 = 31, // 32-47 Control Registers // 48-63 Access Registers UNW_S390X_PSWM = 64, UNW_S390X_PSWA = 65, // 66-67 Reserved // 68-83 Vector Registers %v16-%v31 }; // LoongArch registers. enum { UNW_LOONGARCH_R0 = 0, UNW_LOONGARCH_R1 = 1, UNW_LOONGARCH_R2 = 2, UNW_LOONGARCH_R3 = 3, UNW_LOONGARCH_R4 = 4, UNW_LOONGARCH_R5 = 5, UNW_LOONGARCH_R6 = 6, UNW_LOONGARCH_R7 = 7, UNW_LOONGARCH_R8 = 8, UNW_LOONGARCH_R9 = 9, UNW_LOONGARCH_R10 = 10, UNW_LOONGARCH_R11 = 11, UNW_LOONGARCH_R12 = 12, UNW_LOONGARCH_R13 = 13, UNW_LOONGARCH_R14 = 14, UNW_LOONGARCH_R15 = 15, UNW_LOONGARCH_R16 = 16, UNW_LOONGARCH_R17 = 17, UNW_LOONGARCH_R18 = 18, UNW_LOONGARCH_R19 = 19, UNW_LOONGARCH_R20 = 20, UNW_LOONGARCH_R21 = 21, UNW_LOONGARCH_R22 = 22, UNW_LOONGARCH_R23 = 23, UNW_LOONGARCH_R24 = 24, UNW_LOONGARCH_R25 = 25, UNW_LOONGARCH_R26 = 26, UNW_LOONGARCH_R27 = 27, UNW_LOONGARCH_R28 = 28, UNW_LOONGARCH_R29 = 29, UNW_LOONGARCH_R30 = 30, UNW_LOONGARCH_R31 = 31, UNW_LOONGARCH_F0 = 32, UNW_LOONGARCH_F1 = 33, UNW_LOONGARCH_F2 = 34, UNW_LOONGARCH_F3 = 35, UNW_LOONGARCH_F4 = 36, UNW_LOONGARCH_F5 = 37, UNW_LOONGARCH_F6 = 38, UNW_LOONGARCH_F7 = 39, UNW_LOONGARCH_F8 = 40, UNW_LOONGARCH_F9 = 41, UNW_LOONGARCH_F10 = 42, UNW_LOONGARCH_F11 = 43, UNW_LOONGARCH_F12 = 44, UNW_LOONGARCH_F13 = 45, UNW_LOONGARCH_F14 = 46, UNW_LOONGARCH_F15 = 47, UNW_LOONGARCH_F16 = 48, UNW_LOONGARCH_F17 = 49, UNW_LOONGARCH_F18 = 50, UNW_LOONGARCH_F19 = 51, UNW_LOONGARCH_F20 = 52, UNW_LOONGARCH_F21 = 53, UNW_LOONGARCH_F22 = 54, UNW_LOONGARCH_F23 = 55, UNW_LOONGARCH_F24 = 56, UNW_LOONGARCH_F25 = 57, UNW_LOONGARCH_F26 = 58, UNW_LOONGARCH_F27 = 59, UNW_LOONGARCH_F28 = 60, UNW_LOONGARCH_F29 = 61, UNW_LOONGARCH_F30 = 62, UNW_LOONGARCH_F31 = 63, }; #endif ================================================ FILE: ThirdParty/libunwind/include/libunwind.modulemap ================================================ module libunwind [system] { header "libunwind.h" export * } module unwind [system] { header "__libunwind_config.h" header "unwind.h" private textual header "unwind_arm_ehabi.h" private textual header "unwind_itanium.h" export * } ================================================ FILE: ThirdParty/libunwind/include/mach-o/compact_unwind_encoding.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Darwin's alternative to DWARF based unwind encodings. // //===----------------------------------------------------------------------===// #ifndef __COMPACT_UNWIND_ENCODING__ #define __COMPACT_UNWIND_ENCODING__ #include // // Compilers can emit standard DWARF FDEs in the __TEXT,__eh_frame section // of object files. Or compilers can emit compact unwind information in // the __LD,__compact_unwind section. // // When the linker creates a final linked image, it will create a // __TEXT,__unwind_info section. This section is a small and fast way for the // runtime to access unwind info for any given function. If the compiler // emitted compact unwind info for the function, that compact unwind info will // be encoded in the __TEXT,__unwind_info section. If the compiler emitted // DWARF unwind info, the __TEXT,__unwind_info section will contain the offset // of the FDE in the __TEXT,__eh_frame section in the final linked image. // // Note: Previously, the linker would transform some DWARF unwind infos into // compact unwind info. But that is fragile and no longer done. // // The compact unwind encoding is a 32-bit value which encoded in an // architecture specific way, which registers to restore from where, and how // to unwind out of the function. // typedef uint32_t compact_unwind_encoding_t; // architecture independent bits enum { UNWIND_IS_NOT_FUNCTION_START = 0x80000000, UNWIND_HAS_LSDA = 0x40000000, UNWIND_PERSONALITY_MASK = 0x30000000, }; // // x86 // // 1-bit: start // 1-bit: has lsda // 2-bit: personality index // // 4-bits: 0=old, 1=ebp based, 2=stack-imm, 3=stack-ind, 4=DWARF // ebp based: // 15-bits (5*3-bits per reg) register permutation // 8-bits for stack offset // frameless: // 8-bits stack size // 3-bits stack adjust // 3-bits register count // 10-bits register permutation // enum { UNWIND_X86_MODE_MASK = 0x0F000000, UNWIND_X86_MODE_EBP_FRAME = 0x01000000, UNWIND_X86_MODE_STACK_IMMD = 0x02000000, UNWIND_X86_MODE_STACK_IND = 0x03000000, UNWIND_X86_MODE_DWARF = 0x04000000, UNWIND_X86_EBP_FRAME_REGISTERS = 0x00007FFF, UNWIND_X86_EBP_FRAME_OFFSET = 0x00FF0000, UNWIND_X86_FRAMELESS_STACK_SIZE = 0x00FF0000, UNWIND_X86_FRAMELESS_STACK_ADJUST = 0x0000E000, UNWIND_X86_FRAMELESS_STACK_REG_COUNT = 0x00001C00, UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION = 0x000003FF, UNWIND_X86_DWARF_SECTION_OFFSET = 0x00FFFFFF, }; enum { UNWIND_X86_REG_NONE = 0, UNWIND_X86_REG_EBX = 1, UNWIND_X86_REG_ECX = 2, UNWIND_X86_REG_EDX = 3, UNWIND_X86_REG_EDI = 4, UNWIND_X86_REG_ESI = 5, UNWIND_X86_REG_EBP = 6, }; // // For x86 there are four modes for the compact unwind encoding: // UNWIND_X86_MODE_EBP_FRAME: // EBP based frame where EBP is push on stack immediately after return address, // then ESP is moved to EBP. Thus, to unwind ESP is restored with the current // EPB value, then EBP is restored by popping off the stack, and the return // is done by popping the stack once more into the pc. // All non-volatile registers that need to be restored must have been saved // in a small range in the stack that starts EBP-4 to EBP-1020. The offset/4 // is encoded in the UNWIND_X86_EBP_FRAME_OFFSET bits. The registers saved // are encoded in the UNWIND_X86_EBP_FRAME_REGISTERS bits as five 3-bit entries. // Each entry contains which register to restore. // UNWIND_X86_MODE_STACK_IMMD: // A "frameless" (EBP not used as frame pointer) function with a small // constant stack size. To return, a constant (encoded in the compact // unwind encoding) is added to the ESP. Then the return is done by // popping the stack into the pc. // All non-volatile registers that need to be restored must have been saved // on the stack immediately after the return address. The stack_size/4 is // encoded in the UNWIND_X86_FRAMELESS_STACK_SIZE (max stack size is 1024). // The number of registers saved is encoded in UNWIND_X86_FRAMELESS_STACK_REG_COUNT. // UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION contains which registers were // saved and their order. // UNWIND_X86_MODE_STACK_IND: // A "frameless" (EBP not used as frame pointer) function large constant // stack size. This case is like the previous, except the stack size is too // large to encode in the compact unwind encoding. Instead it requires that // the function contains "subl $nnnnnnnn,ESP" in its prolog. The compact // encoding contains the offset to the nnnnnnnn value in the function in // UNWIND_X86_FRAMELESS_STACK_SIZE. // UNWIND_X86_MODE_DWARF: // No compact unwind encoding is available. Instead the low 24-bits of the // compact encoding is the offset of the DWARF FDE in the __eh_frame section. // This mode is never used in object files. It is only generated by the // linker in final linked images which have only DWARF unwind info for a // function. // // The permutation encoding is a Lehmer code sequence encoded into a // single variable-base number so we can encode the ordering of up to // six registers in a 10-bit space. // // The following is the algorithm used to create the permutation encoding used // with frameless stacks. It is passed the number of registers to be saved and // an array of the register numbers saved. // //uint32_t permute_encode(uint32_t registerCount, const uint32_t registers[6]) //{ // uint32_t renumregs[6]; // for (int i=6-registerCount; i < 6; ++i) { // int countless = 0; // for (int j=6-registerCount; j < i; ++j) { // if ( registers[j] < registers[i] ) // ++countless; // } // renumregs[i] = registers[i] - countless -1; // } // uint32_t permutationEncoding = 0; // switch ( registerCount ) { // case 6: // permutationEncoding |= (120*renumregs[0] + 24*renumregs[1] // + 6*renumregs[2] + 2*renumregs[3] // + renumregs[4]); // break; // case 5: // permutationEncoding |= (120*renumregs[1] + 24*renumregs[2] // + 6*renumregs[3] + 2*renumregs[4] // + renumregs[5]); // break; // case 4: // permutationEncoding |= (60*renumregs[2] + 12*renumregs[3] // + 3*renumregs[4] + renumregs[5]); // break; // case 3: // permutationEncoding |= (20*renumregs[3] + 4*renumregs[4] // + renumregs[5]); // break; // case 2: // permutationEncoding |= (5*renumregs[4] + renumregs[5]); // break; // case 1: // permutationEncoding |= (renumregs[5]); // break; // } // return permutationEncoding; //} // // // x86_64 // // 1-bit: start // 1-bit: has lsda // 2-bit: personality index // // 4-bits: 0=old, 1=rbp based, 2=stack-imm, 3=stack-ind, 4=DWARF // rbp based: // 15-bits (5*3-bits per reg) register permutation // 8-bits for stack offset // frameless: // 8-bits stack size // 3-bits stack adjust // 3-bits register count // 10-bits register permutation // enum { UNWIND_X86_64_MODE_MASK = 0x0F000000, UNWIND_X86_64_MODE_RBP_FRAME = 0x01000000, UNWIND_X86_64_MODE_STACK_IMMD = 0x02000000, UNWIND_X86_64_MODE_STACK_IND = 0x03000000, UNWIND_X86_64_MODE_DWARF = 0x04000000, UNWIND_X86_64_RBP_FRAME_REGISTERS = 0x00007FFF, UNWIND_X86_64_RBP_FRAME_OFFSET = 0x00FF0000, UNWIND_X86_64_FRAMELESS_STACK_SIZE = 0x00FF0000, UNWIND_X86_64_FRAMELESS_STACK_ADJUST = 0x0000E000, UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT = 0x00001C00, UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION = 0x000003FF, UNWIND_X86_64_DWARF_SECTION_OFFSET = 0x00FFFFFF, }; enum { UNWIND_X86_64_REG_NONE = 0, UNWIND_X86_64_REG_RBX = 1, UNWIND_X86_64_REG_R12 = 2, UNWIND_X86_64_REG_R13 = 3, UNWIND_X86_64_REG_R14 = 4, UNWIND_X86_64_REG_R15 = 5, UNWIND_X86_64_REG_RBP = 6, }; // // For x86_64 there are four modes for the compact unwind encoding: // UNWIND_X86_64_MODE_RBP_FRAME: // RBP based frame where RBP is push on stack immediately after return address, // then RSP is moved to RBP. Thus, to unwind RSP is restored with the current // EPB value, then RBP is restored by popping off the stack, and the return // is done by popping the stack once more into the pc. // All non-volatile registers that need to be restored must have been saved // in a small range in the stack that starts RBP-8 to RBP-2040. The offset/8 // is encoded in the UNWIND_X86_64_RBP_FRAME_OFFSET bits. The registers saved // are encoded in the UNWIND_X86_64_RBP_FRAME_REGISTERS bits as five 3-bit entries. // Each entry contains which register to restore. // UNWIND_X86_64_MODE_STACK_IMMD: // A "frameless" (RBP not used as frame pointer) function with a small // constant stack size. To return, a constant (encoded in the compact // unwind encoding) is added to the RSP. Then the return is done by // popping the stack into the pc. // All non-volatile registers that need to be restored must have been saved // on the stack immediately after the return address. The stack_size/8 is // encoded in the UNWIND_X86_64_FRAMELESS_STACK_SIZE (max stack size is 2048). // The number of registers saved is encoded in UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT. // UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION contains which registers were // saved and their order. // UNWIND_X86_64_MODE_STACK_IND: // A "frameless" (RBP not used as frame pointer) function large constant // stack size. This case is like the previous, except the stack size is too // large to encode in the compact unwind encoding. Instead it requires that // the function contains "subq $nnnnnnnn,RSP" in its prolog. The compact // encoding contains the offset to the nnnnnnnn value in the function in // UNWIND_X86_64_FRAMELESS_STACK_SIZE. // UNWIND_X86_64_MODE_DWARF: // No compact unwind encoding is available. Instead the low 24-bits of the // compact encoding is the offset of the DWARF FDE in the __eh_frame section. // This mode is never used in object files. It is only generated by the // linker in final linked images which have only DWARF unwind info for a // function. // // ARM64 // // 1-bit: start // 1-bit: has lsda // 2-bit: personality index // // 4-bits: 4=frame-based, 3=DWARF, 2=frameless // frameless: // 12-bits of stack size // frame-based: // 4-bits D reg pairs saved // 5-bits X reg pairs saved // DWARF: // 24-bits offset of DWARF FDE in __eh_frame section // enum { UNWIND_ARM64_MODE_MASK = 0x0F000000, UNWIND_ARM64_MODE_FRAMELESS = 0x02000000, UNWIND_ARM64_MODE_DWARF = 0x03000000, UNWIND_ARM64_MODE_FRAME = 0x04000000, UNWIND_ARM64_FRAME_X19_X20_PAIR = 0x00000001, UNWIND_ARM64_FRAME_X21_X22_PAIR = 0x00000002, UNWIND_ARM64_FRAME_X23_X24_PAIR = 0x00000004, UNWIND_ARM64_FRAME_X25_X26_PAIR = 0x00000008, UNWIND_ARM64_FRAME_X27_X28_PAIR = 0x00000010, UNWIND_ARM64_FRAME_D8_D9_PAIR = 0x00000100, UNWIND_ARM64_FRAME_D10_D11_PAIR = 0x00000200, UNWIND_ARM64_FRAME_D12_D13_PAIR = 0x00000400, UNWIND_ARM64_FRAME_D14_D15_PAIR = 0x00000800, UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK = 0x00FFF000, UNWIND_ARM64_DWARF_SECTION_OFFSET = 0x00FFFFFF, }; // For arm64 there are three modes for the compact unwind encoding: // UNWIND_ARM64_MODE_FRAME: // This is a standard arm64 prolog where FP/LR are immediately pushed on the // stack, then SP is copied to FP. If there are any non-volatile registers // saved, then are copied into the stack frame in pairs in a contiguous // range right below the saved FP/LR pair. Any subset of the five X pairs // and four D pairs can be saved, but the memory layout must be in register // number order. // UNWIND_ARM64_MODE_FRAMELESS: // A "frameless" leaf function, where FP/LR are not saved. The return address // remains in LR throughout the function. If any non-volatile registers // are saved, they must be pushed onto the stack before any stack space is // allocated for local variables. The stack sized (including any saved // non-volatile registers) divided by 16 is encoded in the bits // UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK. // UNWIND_ARM64_MODE_DWARF: // No compact unwind encoding is available. Instead the low 24-bits of the // compact encoding is the offset of the DWARF FDE in the __eh_frame section. // This mode is never used in object files. It is only generated by the // linker in final linked images which have only DWARF unwind info for a // function. // //////////////////////////////////////////////////////////////////////////////// // // Relocatable Object Files: __LD,__compact_unwind // //////////////////////////////////////////////////////////////////////////////// // // A compiler can generated compact unwind information for a function by adding // a "row" to the __LD,__compact_unwind section. This section has the // S_ATTR_DEBUG bit set, so the section will be ignored by older linkers. // It is removed by the new linker, so never ends up in final executables. // This section is a table, initially with one row per function (that needs // unwind info). The table columns and some conceptual entries are: // // range-start pointer to start of function/range // range-length // compact-unwind-encoding 32-bit encoding // personality-function or zero if no personality function // lsda or zero if no LSDA data // // The length and encoding fields are 32-bits. The other are all pointer sized. // // In x86_64 assembly, these entry would look like: // // .section __LD,__compact_unwind,regular,debug // // #compact unwind for _foo // .quad _foo // .set L1,LfooEnd-_foo // .long L1 // .long 0x01010001 // .quad 0 // .quad 0 // // #compact unwind for _bar // .quad _bar // .set L2,LbarEnd-_bar // .long L2 // .long 0x01020011 // .quad __gxx_personality // .quad except_tab1 // // // Notes: There is no need for any labels in the __compact_unwind section. // The use of the .set directive is to force the evaluation of the // range-length at assembly time, instead of generating relocations. // // To support future compiler optimizations where which non-volatile registers // are saved changes within a function (e.g. delay saving non-volatiles until // necessary), there can by multiple lines in the __compact_unwind table for one // function, each with a different (non-overlapping) range and each with // different compact unwind encodings that correspond to the non-volatiles // saved at that range of the function. // // If a particular function is so wacky that there is no compact unwind way // to encode it, then the compiler can emit traditional DWARF unwind info. // The runtime will use which ever is available. // // Runtime support for compact unwind encodings are only available on 10.6 // and later. So, the compiler should not generate it when targeting pre-10.6. //////////////////////////////////////////////////////////////////////////////// // // Final Linked Images: __TEXT,__unwind_info // //////////////////////////////////////////////////////////////////////////////// // // The __TEXT,__unwind_info section is laid out for an efficient two level lookup. // The header of the section contains a coarse index that maps function address // to the page (4096 byte block) containing the unwind info for that function. // #define UNWIND_SECTION_VERSION 1 struct unwind_info_section_header { uint32_t version; // UNWIND_SECTION_VERSION uint32_t commonEncodingsArraySectionOffset; uint32_t commonEncodingsArrayCount; uint32_t personalityArraySectionOffset; uint32_t personalityArrayCount; uint32_t indexSectionOffset; uint32_t indexCount; // compact_unwind_encoding_t[] // uint32_t personalities[] // unwind_info_section_header_index_entry[] // unwind_info_section_header_lsda_index_entry[] }; struct unwind_info_section_header_index_entry { uint32_t functionOffset; uint32_t secondLevelPagesSectionOffset; // section offset to start of regular or compress page uint32_t lsdaIndexArraySectionOffset; // section offset to start of lsda_index array for this range }; struct unwind_info_section_header_lsda_index_entry { uint32_t functionOffset; uint32_t lsdaOffset; }; // // There are two kinds of second level index pages: regular and compressed. // A compressed page can hold up to 1021 entries, but it cannot be used // if too many different encoding types are used. The regular page holds // 511 entries. // struct unwind_info_regular_second_level_entry { uint32_t functionOffset; compact_unwind_encoding_t encoding; }; #define UNWIND_SECOND_LEVEL_REGULAR 2 struct unwind_info_regular_second_level_page_header { uint32_t kind; // UNWIND_SECOND_LEVEL_REGULAR uint16_t entryPageOffset; uint16_t entryCount; // entry array }; #define UNWIND_SECOND_LEVEL_COMPRESSED 3 struct unwind_info_compressed_second_level_page_header { uint32_t kind; // UNWIND_SECOND_LEVEL_COMPRESSED uint16_t entryPageOffset; uint16_t entryCount; uint16_t encodingsPageOffset; uint16_t encodingsCount; // 32-bit entry array // encodings array }; #define UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry) (entry & 0x00FFFFFF) #define UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry) ((entry >> 24) & 0xFF) #endif ================================================ FILE: ThirdParty/libunwind/include/unwind.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // C++ ABI Level 1 ABI documented at: // https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html // //===----------------------------------------------------------------------===// #ifndef __UNWIND_H__ #define __UNWIND_H__ #include <__libunwind_config.h> #include #include #if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) && defined(_WIN32) #include #include #endif #if defined(__APPLE__) #define LIBUNWIND_UNAVAIL __attribute__ (( unavailable )) #else #define LIBUNWIND_UNAVAIL #endif typedef enum { _URC_NO_REASON = 0, _URC_OK = 0, _URC_FOREIGN_EXCEPTION_CAUGHT = 1, _URC_FATAL_PHASE2_ERROR = 2, _URC_FATAL_PHASE1_ERROR = 3, _URC_NORMAL_STOP = 4, _URC_END_OF_STACK = 5, _URC_HANDLER_FOUND = 6, _URC_INSTALL_CONTEXT = 7, _URC_CONTINUE_UNWIND = 8, #if defined(_LIBUNWIND_ARM_EHABI) _URC_FAILURE = 9 #endif } _Unwind_Reason_Code; typedef enum { _UA_SEARCH_PHASE = 1, _UA_CLEANUP_PHASE = 2, _UA_HANDLER_FRAME = 4, _UA_FORCE_UNWIND = 8, _UA_END_OF_STACK = 16 // gcc extension to C++ ABI } _Unwind_Action; typedef struct _Unwind_Context _Unwind_Context; // opaque #if defined(_LIBUNWIND_ARM_EHABI) #include #else #include #endif typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) (int version, _Unwind_Action actions, _Unwind_Exception_Class exceptionClass, _Unwind_Exception* exceptionObject, struct _Unwind_Context* context, void* stop_parameter); #ifdef __cplusplus extern "C" { #endif extern uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context); extern uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context); #ifdef __USING_SJLJ_EXCEPTIONS__ extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind(_Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter); #else extern _Unwind_Reason_Code _Unwind_ForcedUnwind(_Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter); #endif #ifdef __USING_SJLJ_EXCEPTIONS__ typedef struct _Unwind_FunctionContext *_Unwind_FunctionContext_t; extern void _Unwind_SjLj_Register(_Unwind_FunctionContext_t fc); extern void _Unwind_SjLj_Unregister(_Unwind_FunctionContext_t fc); #endif // // The following are semi-supported extensions to the C++ ABI // // // called by __cxa_rethrow(). // #ifdef __USING_SJLJ_EXCEPTIONS__ extern _Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow(_Unwind_Exception *exception_object); #else extern _Unwind_Reason_Code _Unwind_Resume_or_Rethrow(_Unwind_Exception *exception_object); #endif // _Unwind_Backtrace() is a gcc extension that walks the stack and calls the // _Unwind_Trace_Fn once per frame until it reaches the bottom of the stack // or the _Unwind_Trace_Fn function returns something other than _URC_NO_REASON. typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *, void *); extern _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *); // _Unwind_GetCFA is a gcc extension that can be called from within a // personality handler to get the CFA (stack pointer before call) of // current frame. extern uintptr_t _Unwind_GetCFA(struct _Unwind_Context *); // _Unwind_GetIPInfo is a gcc extension that can be called from within a // personality handler. Similar to _Unwind_GetIP() but also returns in // *ipBefore a non-zero value if the instruction pointer is at or before the // instruction causing the unwind. Normally, in a function call, the IP returned // is the return address which is after the call instruction and may be past the // end of the function containing the call instruction. extern uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context, int *ipBefore); // __register_frame() is used with dynamically generated code to register the // FDE for a generated (JIT) code. The FDE must use pc-rel addressing to point // to its function and optional LSDA. // __register_frame() has existed in all versions of Mac OS X, but in 10.4 and // 10.5 it was buggy and did not actually register the FDE with the unwinder. // In 10.6 and later it does register properly. extern void __register_frame(const void *fde); extern void __deregister_frame(const void *fde); // _Unwind_Find_FDE() will locate the FDE if the pc is in some function that has // an associated FDE. Note, Mac OS X 10.6 and later, introduces "compact unwind // info" which the runtime uses in preference to DWARF unwind info. This // function will only work if the target function has an FDE but no compact // unwind info. struct dwarf_eh_bases { uintptr_t tbase; uintptr_t dbase; uintptr_t func; }; extern const void *_Unwind_Find_FDE(const void *pc, struct dwarf_eh_bases *); // This function attempts to find the start (address of first instruction) of // a function given an address inside the function. It only works if the // function has an FDE (DWARF unwind info). // This function is unimplemented on Mac OS X 10.6 and later. Instead, use // _Unwind_Find_FDE() and look at the dwarf_eh_bases.func result. extern void *_Unwind_FindEnclosingFunction(void *pc); // Mac OS X does not support text-rel and data-rel addressing so these functions // are unimplemented. extern uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *context) LIBUNWIND_UNAVAIL; extern uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *context) LIBUNWIND_UNAVAIL; // Mac OS X 10.4 and 10.5 had implementations of these functions in // libgcc_s.dylib, but they never worked. /// These functions are no longer available on Mac OS X. extern void __register_frame_info_bases(const void *fde, void *ob, void *tb, void *db) LIBUNWIND_UNAVAIL; extern void __register_frame_info(const void *fde, void *ob) LIBUNWIND_UNAVAIL; extern void __register_frame_info_table_bases(const void *fde, void *ob, void *tb, void *db) LIBUNWIND_UNAVAIL; extern void __register_frame_info_table(const void *fde, void *ob) LIBUNWIND_UNAVAIL; extern void __register_frame_table(const void *fde) LIBUNWIND_UNAVAIL; extern void *__deregister_frame_info(const void *fde) LIBUNWIND_UNAVAIL; extern void *__deregister_frame_info_bases(const void *fde) LIBUNWIND_UNAVAIL; #if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) #ifndef _WIN32 typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD; typedef struct _CONTEXT CONTEXT; typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT; #elif !defined(__MINGW32__) && VER_PRODUCTBUILD < 8000 typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT; #endif // This is the common wrapper for GCC-style personality functions with SEH. extern EXCEPTION_DISPOSITION _GCC_specific_handler(EXCEPTION_RECORD *exc, void *frame, CONTEXT *ctx, DISPATCHER_CONTEXT *disp, _Unwind_Personality_Fn pers); #endif #ifdef __cplusplus } #endif #endif // __UNWIND_H__ ================================================ FILE: ThirdParty/libunwind/include/unwind_arm_ehabi.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // C++ ABI Level 1 ABI documented at: // https://github.com/ARM-software/abi-aa/blob/main/ehabi32/ehabi32.rst // //===----------------------------------------------------------------------===// #ifndef __ARM_EHABI_UNWIND_H__ #define __ARM_EHABI_UNWIND_H__ typedef uint32_t _Unwind_State; static const _Unwind_State _US_VIRTUAL_UNWIND_FRAME = 0; static const _Unwind_State _US_UNWIND_FRAME_STARTING = 1; static const _Unwind_State _US_UNWIND_FRAME_RESUME = 2; static const _Unwind_State _US_ACTION_MASK = 3; /* Undocumented flag for force unwinding. */ static const _Unwind_State _US_FORCE_UNWIND = 8; typedef uint32_t _Unwind_EHT_Header; struct _Unwind_Control_Block; typedef struct _Unwind_Control_Block _Unwind_Control_Block; #define _Unwind_Exception _Unwind_Control_Block /* Alias */ typedef uint8_t _Unwind_Exception_Class[8]; struct _Unwind_Control_Block { _Unwind_Exception_Class exception_class; void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block*); /* Unwinder cache, private fields for the unwinder's use */ struct { uint32_t reserved1; /* init reserved1 to 0, then don't touch */ uint32_t reserved2; uint32_t reserved3; uint32_t reserved4; uint32_t reserved5; } unwinder_cache; /* Propagation barrier cache (valid after phase 1): */ struct { uint32_t sp; uint32_t bitpattern[5]; } barrier_cache; /* Cleanup cache (preserved over cleanup): */ struct { uint32_t bitpattern[4]; } cleanup_cache; /* Pr cache (for pr's benefit): */ struct { uint32_t fnstart; /* function start address */ _Unwind_EHT_Header* ehtp; /* pointer to EHT entry header word */ uint32_t additional; uint32_t reserved1; } pr_cache; long long int :0; /* Enforce the 8-byte alignment */ } __attribute__((__aligned__(8))); typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)( _Unwind_State state, _Unwind_Exception *exceptionObject, struct _Unwind_Context *context); #ifdef __cplusplus extern "C" { #endif // // The following are the base functions documented by the C++ ABI // #ifdef __USING_SJLJ_EXCEPTIONS__ extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException(_Unwind_Exception *exception_object); extern void _Unwind_SjLj_Resume(_Unwind_Exception *exception_object); #else extern _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *exception_object); extern void _Unwind_Resume(_Unwind_Exception *exception_object); #endif extern void _Unwind_DeleteException(_Unwind_Exception *exception_object); typedef enum { _UVRSC_CORE = 0, /* integer register */ _UVRSC_VFP = 1, /* vfp */ _UVRSC_WMMXD = 3, /* Intel WMMX data register */ _UVRSC_WMMXC = 4, /* Intel WMMX control register */ _UVRSC_PSEUDO = 5 /* Special purpose pseudo register */ } _Unwind_VRS_RegClass; typedef enum { _UVRSD_UINT32 = 0, _UVRSD_VFPX = 1, _UVRSD_UINT64 = 3, _UVRSD_FLOAT = 4, _UVRSD_DOUBLE = 5 } _Unwind_VRS_DataRepresentation; typedef enum { _UVRSR_OK = 0, _UVRSR_NOT_IMPLEMENTED = 1, _UVRSR_FAILED = 2 } _Unwind_VRS_Result; extern void _Unwind_Complete(_Unwind_Exception* exception_object); extern _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t regno, _Unwind_VRS_DataRepresentation representation, void *valuep); extern _Unwind_VRS_Result _Unwind_VRS_Set(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t regno, _Unwind_VRS_DataRepresentation representation, void *valuep); extern _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t discriminator, _Unwind_VRS_DataRepresentation representation); #if defined(_LIBUNWIND_UNWIND_LEVEL1_EXTERNAL_LINKAGE) #define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern #else #define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 static __inline__ #endif // These are de facto helper functions for ARM, which delegate the function // calls to _Unwind_VRS_Get/Set(). These are not a part of ARM EHABI // specification, thus these function MUST be inlined. Please don't replace // these with the "extern" function declaration; otherwise, the program // including this header won't be ABI compatible and will result in // link error when we are linking the program with libgcc. _LIBUNWIND_EXPORT_UNWIND_LEVEL1 uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index) { uintptr_t value = 0; _Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value); return value; } _LIBUNWIND_EXPORT_UNWIND_LEVEL1 void _Unwind_SetGR(struct _Unwind_Context *context, int index, uintptr_t value) { _Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value); } _LIBUNWIND_EXPORT_UNWIND_LEVEL1 uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) { // remove the thumb-bit before returning return _Unwind_GetGR(context, 15) & (~(uintptr_t)0x1); } _LIBUNWIND_EXPORT_UNWIND_LEVEL1 void _Unwind_SetIP(struct _Unwind_Context *context, uintptr_t value) { uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1); _Unwind_SetGR(context, 15, value | thumb_bit); } #ifdef __cplusplus } #endif #endif // __ARM_EHABI_UNWIND_H__ ================================================ FILE: ThirdParty/libunwind/include/unwind_itanium.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // C++ ABI Level 1 ABI documented at: // https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html // //===----------------------------------------------------------------------===// #ifndef __ITANIUM_UNWIND_H__ #define __ITANIUM_UNWIND_H__ struct _Unwind_Context; // opaque struct _Unwind_Exception; // forward declaration typedef struct _Unwind_Exception _Unwind_Exception; typedef uint64_t _Unwind_Exception_Class; struct _Unwind_Exception { _Unwind_Exception_Class exception_class; void (*exception_cleanup)(_Unwind_Reason_Code reason, _Unwind_Exception *exc); #if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) uintptr_t private_[6]; #else uintptr_t private_1; // non-zero means forced unwind uintptr_t private_2; // holds sp that phase1 found for phase2 to use #endif #if __SIZEOF_POINTER__ == 4 // The implementation of _Unwind_Exception uses an attribute mode on the // above fields which has the side effect of causing this whole struct to // round up to 32 bytes in size (48 with SEH). To be more explicit, we add // pad fields added for binary compatibility. uint32_t reserved[3]; #endif // The Itanium ABI requires that _Unwind_Exception objects are "double-word // aligned". GCC has interpreted this to mean "use the maximum useful // alignment for the target"; so do we. } __attribute__((__aligned__)); typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)( int version, _Unwind_Action actions, uint64_t exceptionClass, _Unwind_Exception *exceptionObject, struct _Unwind_Context *context); #ifdef __cplusplus extern "C" { #endif // // The following are the base functions documented by the C++ ABI // #ifdef __USING_SJLJ_EXCEPTIONS__ extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException(_Unwind_Exception *exception_object); extern void _Unwind_SjLj_Resume(_Unwind_Exception *exception_object); #else extern _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *exception_object); extern void _Unwind_Resume(_Unwind_Exception *exception_object); #endif extern void _Unwind_DeleteException(_Unwind_Exception *exception_object); extern uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index); extern void _Unwind_SetGR(struct _Unwind_Context *context, int index, uintptr_t new_value); extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *context); extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value); #ifdef __cplusplus } #endif #endif // __ITANIUM_UNWIND_H__ ================================================ FILE: ThirdParty/libunwind/src/AddressSpace.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Abstracts accessing local vs remote address spaces. // //===----------------------------------------------------------------------===// #ifndef __ADDRESSSPACE_HPP__ #define __ADDRESSSPACE_HPP__ #include #include #include #include #include "libunwind.h" #include "config.h" #include "dwarf2.h" #include "EHHeaderParser.hpp" #include "Registers.hpp" #ifndef _LIBUNWIND_USE_DLADDR #if !(defined(_LIBUNWIND_IS_BAREMETAL) || defined(_WIN32) || defined(_AIX)) #define _LIBUNWIND_USE_DLADDR 1 #else #define _LIBUNWIND_USE_DLADDR 0 #endif #endif #if _LIBUNWIND_USE_DLADDR #include #if defined(__ELF__) && defined(_LIBUNWIND_LINK_DL_LIB) #pragma comment(lib, "dl") #endif #endif #if defined(_LIBUNWIND_ARM_EHABI) struct EHABIIndexEntry { uint32_t functionOffset; uint32_t data; }; #endif #if defined(_AIX) namespace libunwind { char *getFuncNameFromTBTable(uintptr_t pc, uint16_t &NameLen, unw_word_t *offset); } #endif #ifdef __APPLE__ struct dyld_unwind_sections { const struct mach_header* mh; const void* dwarf_section; uintptr_t dwarf_section_length; const void* compact_unwind_section; uintptr_t compact_unwind_section_length; }; // In 10.7.0 or later, libSystem.dylib implements this function. extern "C" bool _dyld_find_unwind_sections(void *, dyld_unwind_sections *); namespace libunwind { bool findDynamicUnwindSections(void *, unw_dynamic_unwind_sections *); } #elif defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) && defined(_LIBUNWIND_IS_BAREMETAL) // When statically linked on bare-metal, the symbols for the EH table are looked // up without going through the dynamic loader. // The following linker script may be used to produce the necessary sections and symbols. // Unless the --eh-frame-hdr linker option is provided, the section is not generated // and does not take space in the output file. // // .eh_frame : // { // __eh_frame_start = .; // KEEP(*(.eh_frame)) // __eh_frame_end = .; // } // // .eh_frame_hdr : // { // KEEP(*(.eh_frame_hdr)) // } // // __eh_frame_hdr_start = SIZEOF(.eh_frame_hdr) > 0 ? ADDR(.eh_frame_hdr) : 0; // __eh_frame_hdr_end = SIZEOF(.eh_frame_hdr) > 0 ? . : 0; extern char __eh_frame_start; extern char __eh_frame_end; #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) extern char __eh_frame_hdr_start; extern char __eh_frame_hdr_end; #endif #elif defined(_LIBUNWIND_ARM_EHABI) && defined(_LIBUNWIND_IS_BAREMETAL) // When statically linked on bare-metal, the symbols for the EH table are looked // up without going through the dynamic loader. extern char __exidx_start; extern char __exidx_end; #elif defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) && defined(_WIN32) #include #include #elif defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) || \ defined(_LIBUNWIND_USE_DL_UNWIND_FIND_EXIDX) #include #endif namespace libunwind { /// Used by findUnwindSections() to return info about needed sections. struct UnwindInfoSections { #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) || \ defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) || \ defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) // No dso_base for SEH. uintptr_t dso_base; #endif #if defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) size_t text_segment_length; #endif #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) uintptr_t dwarf_section; size_t dwarf_section_length; #endif #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) uintptr_t dwarf_index_section; size_t dwarf_index_section_length; #endif #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) uintptr_t compact_unwind_section; size_t compact_unwind_section_length; #endif #if defined(_LIBUNWIND_ARM_EHABI) uintptr_t arm_section; size_t arm_section_length; #endif }; /// LocalAddressSpace is used as a template parameter to UnwindCursor when /// unwinding a thread in the same process. The wrappers compile away, /// making local unwinds fast. class _LIBUNWIND_HIDDEN LocalAddressSpace { public: typedef uintptr_t pint_t; typedef intptr_t sint_t; uint8_t get8(pint_t addr) { uint8_t val; memcpy(&val, (void *)addr, sizeof(val)); return val; } uint16_t get16(pint_t addr) { uint16_t val; memcpy(&val, (void *)addr, sizeof(val)); return val; } uint32_t get32(pint_t addr) { uint32_t val; memcpy(&val, (void *)addr, sizeof(val)); return val; } uint64_t get64(pint_t addr) { uint64_t val; memcpy(&val, (void *)addr, sizeof(val)); return val; } double getDouble(pint_t addr) { double val; memcpy(&val, (void *)addr, sizeof(val)); return val; } v128 getVector(pint_t addr) { v128 val; memcpy(&val, (void *)addr, sizeof(val)); return val; } uintptr_t getP(pint_t addr); uint64_t getRegister(pint_t addr); static uint64_t getULEB128(pint_t &addr, pint_t end); static int64_t getSLEB128(pint_t &addr, pint_t end); pint_t getEncodedP(pint_t &addr, pint_t end, uint8_t encoding, pint_t datarelBase = 0); bool findFunctionName(pint_t addr, char *buf, size_t bufLen, unw_word_t *offset); bool findUnwindSections(pint_t targetAddr, UnwindInfoSections &info); bool findOtherFDE(pint_t targetAddr, pint_t &fde); static LocalAddressSpace sThisAddressSpace; }; inline uintptr_t LocalAddressSpace::getP(pint_t addr) { #if __SIZEOF_POINTER__ == 8 return get64(addr); #else return get32(addr); #endif } inline uint64_t LocalAddressSpace::getRegister(pint_t addr) { #if __SIZEOF_POINTER__ == 8 || defined(__mips64) return get64(addr); #else return get32(addr); #endif } /// Read a ULEB128 into a 64-bit word. inline uint64_t LocalAddressSpace::getULEB128(pint_t &addr, pint_t end) { const uint8_t *p = (uint8_t *)addr; const uint8_t *pend = (uint8_t *)end; uint64_t result = 0; int bit = 0; do { uint64_t b; if (p == pend) _LIBUNWIND_ABORT("truncated uleb128 expression"); b = *p & 0x7f; if (bit >= 64 || b << bit >> bit != b) { _LIBUNWIND_ABORT("malformed uleb128 expression"); } else { result |= b << bit; bit += 7; } } while (*p++ >= 0x80); addr = (pint_t) p; return result; } /// Read a SLEB128 into a 64-bit word. inline int64_t LocalAddressSpace::getSLEB128(pint_t &addr, pint_t end) { const uint8_t *p = (uint8_t *)addr; const uint8_t *pend = (uint8_t *)end; uint64_t result = 0; int bit = 0; uint8_t byte; do { if (p == pend) _LIBUNWIND_ABORT("truncated sleb128 expression"); byte = *p++; result |= (uint64_t)(byte & 0x7f) << bit; bit += 7; } while (byte & 0x80); // sign extend negative numbers if ((byte & 0x40) != 0 && bit < 64) result |= (-1ULL) << bit; addr = (pint_t) p; return (int64_t)result; } inline LocalAddressSpace::pint_t LocalAddressSpace::getEncodedP(pint_t &addr, pint_t end, uint8_t encoding, pint_t datarelBase) { pint_t startAddr = addr; const uint8_t *p = (uint8_t *)addr; pint_t result; // first get value switch (encoding & 0x0F) { case DW_EH_PE_ptr: result = getP(addr); p += sizeof(pint_t); addr = (pint_t) p; break; case DW_EH_PE_uleb128: result = (pint_t)getULEB128(addr, end); break; case DW_EH_PE_udata2: result = get16(addr); p += 2; addr = (pint_t) p; break; case DW_EH_PE_udata4: result = get32(addr); p += 4; addr = (pint_t) p; break; case DW_EH_PE_udata8: result = (pint_t)get64(addr); p += 8; addr = (pint_t) p; break; case DW_EH_PE_sleb128: result = (pint_t)getSLEB128(addr, end); break; case DW_EH_PE_sdata2: // Sign extend from signed 16-bit value. result = (pint_t)(int16_t)get16(addr); p += 2; addr = (pint_t) p; break; case DW_EH_PE_sdata4: // Sign extend from signed 32-bit value. result = (pint_t)(int32_t)get32(addr); p += 4; addr = (pint_t) p; break; case DW_EH_PE_sdata8: result = (pint_t)get64(addr); p += 8; addr = (pint_t) p; break; default: _LIBUNWIND_ABORT("unknown pointer encoding"); } // then add relative offset switch (encoding & 0x70) { case DW_EH_PE_absptr: // do nothing break; case DW_EH_PE_pcrel: result += startAddr; break; case DW_EH_PE_textrel: _LIBUNWIND_ABORT("DW_EH_PE_textrel pointer encoding not supported"); break; case DW_EH_PE_datarel: // DW_EH_PE_datarel is only valid in a few places, so the parameter has a // default value of 0, and we abort in the event that someone calls this // function with a datarelBase of 0 and DW_EH_PE_datarel encoding. if (datarelBase == 0) _LIBUNWIND_ABORT("DW_EH_PE_datarel is invalid with a datarelBase of 0"); result += datarelBase; break; case DW_EH_PE_funcrel: _LIBUNWIND_ABORT("DW_EH_PE_funcrel pointer encoding not supported"); break; case DW_EH_PE_aligned: _LIBUNWIND_ABORT("DW_EH_PE_aligned pointer encoding not supported"); break; default: _LIBUNWIND_ABORT("unknown pointer encoding"); break; } if (encoding & DW_EH_PE_indirect) result = getP(result); return result; } #if defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) // The ElfW() macro for pointer-size independent ELF header traversal is not // provided by on some systems (e.g., FreeBSD). On these systems the // data structures are just called Elf_XXX. Define ElfW() locally. #if !defined(ElfW) #define ElfW(type) Elf_##type #endif #if !defined(Elf_Half) typedef ElfW(Half) Elf_Half; #endif #if !defined(Elf_Phdr) typedef ElfW(Phdr) Elf_Phdr; #endif #if !defined(Elf_Addr) typedef ElfW(Addr) Elf_Addr; #endif struct _LIBUNWIND_HIDDEN dl_iterate_cb_data { LocalAddressSpace *addressSpace; UnwindInfoSections *sects; uintptr_t targetAddr; }; #if defined(_LIBUNWIND_USE_FRAME_HEADER_CACHE) #include "FrameHeaderCache.hpp" // Typically there is one cache per process, but when libunwind is built as a // hermetic static library, then each shared object may have its own cache. static FrameHeaderCache TheFrameHeaderCache; #endif static bool checkAddrInSegment(const Elf_Phdr *phdr, size_t image_base, dl_iterate_cb_data *cbdata) { if (phdr->p_type == PT_LOAD) { uintptr_t begin = image_base + phdr->p_vaddr; uintptr_t end = begin + phdr->p_memsz; if (cbdata->targetAddr >= begin && cbdata->targetAddr < end) { cbdata->sects->dso_base = begin; cbdata->sects->text_segment_length = phdr->p_memsz; return true; } } return false; } static bool checkForUnwindInfoSegment(const Elf_Phdr *phdr, size_t image_base, dl_iterate_cb_data *cbdata) { #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) if (phdr->p_type == PT_GNU_EH_FRAME) { EHHeaderParser::EHHeaderInfo hdrInfo; uintptr_t eh_frame_hdr_start = image_base + phdr->p_vaddr; cbdata->sects->dwarf_index_section = eh_frame_hdr_start; cbdata->sects->dwarf_index_section_length = phdr->p_memsz; if (EHHeaderParser::decodeEHHdr( *cbdata->addressSpace, eh_frame_hdr_start, eh_frame_hdr_start + phdr->p_memsz, hdrInfo)) { // .eh_frame_hdr records the start of .eh_frame, but not its size. // Rely on a zero terminator to find the end of the section. cbdata->sects->dwarf_section = hdrInfo.eh_frame_ptr; cbdata->sects->dwarf_section_length = SIZE_MAX; return true; } } return false; #elif defined(_LIBUNWIND_ARM_EHABI) if (phdr->p_type == PT_ARM_EXIDX) { uintptr_t exidx_start = image_base + phdr->p_vaddr; cbdata->sects->arm_section = exidx_start; cbdata->sects->arm_section_length = phdr->p_memsz; return true; } return false; #else #error Need one of _LIBUNWIND_SUPPORT_DWARF_INDEX or _LIBUNWIND_ARM_EHABI #endif } static int findUnwindSectionsByPhdr(struct dl_phdr_info *pinfo, size_t pinfo_size, void *data) { auto cbdata = static_cast(data); if (pinfo->dlpi_phnum == 0 || cbdata->targetAddr < pinfo->dlpi_addr) return 0; #if defined(_LIBUNWIND_USE_FRAME_HEADER_CACHE) if (TheFrameHeaderCache.find(pinfo, pinfo_size, data)) return 1; #else // Avoid warning about unused variable. (void)pinfo_size; #endif Elf_Addr image_base = pinfo->dlpi_addr; // Most shared objects seen in this callback function likely don't contain the // target address, so optimize for that. Scan for a matching PT_LOAD segment // first and bail when it isn't found. bool found_text = false; for (Elf_Half i = 0; i < pinfo->dlpi_phnum; ++i) { if (checkAddrInSegment(&pinfo->dlpi_phdr[i], image_base, cbdata)) { found_text = true; break; } } if (!found_text) return 0; // PT_GNU_EH_FRAME and PT_ARM_EXIDX are usually near the end. Iterate // backward. bool found_unwind = false; for (Elf_Half i = pinfo->dlpi_phnum; i > 0; i--) { const Elf_Phdr *phdr = &pinfo->dlpi_phdr[i - 1]; if (checkForUnwindInfoSegment(phdr, image_base, cbdata)) { found_unwind = true; break; } } if (!found_unwind) return 0; #if defined(_LIBUNWIND_USE_FRAME_HEADER_CACHE) TheFrameHeaderCache.add(cbdata->sects); #endif return 1; } #endif // defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr, UnwindInfoSections &info) { #ifdef __APPLE__ dyld_unwind_sections dyldInfo; if (_dyld_find_unwind_sections((void *)targetAddr, &dyldInfo)) { info.dso_base = (uintptr_t)dyldInfo.mh; #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) info.dwarf_section = (uintptr_t)dyldInfo.dwarf_section; info.dwarf_section_length = (size_t)dyldInfo.dwarf_section_length; #endif info.compact_unwind_section = (uintptr_t)dyldInfo.compact_unwind_section; info.compact_unwind_section_length = (size_t)dyldInfo.compact_unwind_section_length; return true; } unw_dynamic_unwind_sections dynamicUnwindSectionInfo; if (findDynamicUnwindSections((void *)targetAddr, &dynamicUnwindSectionInfo)) { info.dso_base = dynamicUnwindSectionInfo.dso_base; #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) info.dwarf_section = (uintptr_t)dynamicUnwindSectionInfo.dwarf_section; info.dwarf_section_length = dynamicUnwindSectionInfo.dwarf_section_length; #endif info.compact_unwind_section = (uintptr_t)dynamicUnwindSectionInfo.compact_unwind_section; info.compact_unwind_section_length = dynamicUnwindSectionInfo.compact_unwind_section_length; return true; } #elif defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) && defined(_LIBUNWIND_IS_BAREMETAL) info.dso_base = 0; // Bare metal is statically linked, so no need to ask the dynamic loader info.dwarf_section_length = (size_t)(&__eh_frame_end - &__eh_frame_start); info.dwarf_section = (uintptr_t)(&__eh_frame_start); _LIBUNWIND_TRACE_UNWINDING("findUnwindSections: section %p length %p", (void *)info.dwarf_section, (void *)info.dwarf_section_length); #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) info.dwarf_index_section = (uintptr_t)(&__eh_frame_hdr_start); info.dwarf_index_section_length = (size_t)(&__eh_frame_hdr_end - &__eh_frame_hdr_start); _LIBUNWIND_TRACE_UNWINDING("findUnwindSections: index section %p length %p", (void *)info.dwarf_index_section, (void *)info.dwarf_index_section_length); #endif if (info.dwarf_section_length) return true; #elif defined(_LIBUNWIND_ARM_EHABI) && defined(_LIBUNWIND_IS_BAREMETAL) // Bare metal is statically linked, so no need to ask the dynamic loader info.arm_section = (uintptr_t)(&__exidx_start); info.arm_section_length = (size_t)(&__exidx_end - &__exidx_start); _LIBUNWIND_TRACE_UNWINDING("findUnwindSections: section %p length %p", (void *)info.arm_section, (void *)info.arm_section_length); if (info.arm_section && info.arm_section_length) return true; #elif defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) && defined(_WIN32) HMODULE mods[1024]; HANDLE process = GetCurrentProcess(); DWORD needed; if (!EnumProcessModules(process, mods, sizeof(mods), &needed)) { DWORD err = GetLastError(); _LIBUNWIND_TRACE_UNWINDING("findUnwindSections: EnumProcessModules failed, " "returned error %d", (int)err); (void)err; return false; } for (unsigned i = 0; i < (needed / sizeof(HMODULE)); i++) { PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)mods[i]; PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)((BYTE *)pidh + pidh->e_lfanew); PIMAGE_FILE_HEADER pifh = (PIMAGE_FILE_HEADER)&pinh->FileHeader; PIMAGE_SECTION_HEADER pish = IMAGE_FIRST_SECTION(pinh); bool found_obj = false; bool found_hdr = false; info.dso_base = (uintptr_t)mods[i]; for (unsigned j = 0; j < pifh->NumberOfSections; j++, pish++) { uintptr_t begin = pish->VirtualAddress + (uintptr_t)mods[i]; uintptr_t end = begin + pish->Misc.VirtualSize; if (!strncmp((const char *)pish->Name, ".text", IMAGE_SIZEOF_SHORT_NAME)) { if (targetAddr >= begin && targetAddr < end) found_obj = true; } else if (!strncmp((const char *)pish->Name, ".eh_frame", IMAGE_SIZEOF_SHORT_NAME)) { info.dwarf_section = begin; info.dwarf_section_length = pish->Misc.VirtualSize; found_hdr = true; } if (found_obj && found_hdr) return true; } } return false; #elif defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) && defined(_WIN32) // Don't even bother, since Windows has functions that do all this stuff // for us. (void)targetAddr; (void)info; return true; #elif defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) // The traceback table is used for unwinding. (void)targetAddr; (void)info; return true; #elif defined(_LIBUNWIND_USE_DL_UNWIND_FIND_EXIDX) int length = 0; info.arm_section = (uintptr_t)dl_unwind_find_exidx((_Unwind_Ptr)targetAddr, &length); info.arm_section_length = (size_t)length * sizeof(EHABIIndexEntry); if (info.arm_section && info.arm_section_length) return true; #elif defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) // Use DLFO_STRUCT_HAS_EH_DBASE to determine the existence of // `_dl_find_object`. Use _LIBUNWIND_SUPPORT_DWARF_INDEX, because libunwind // support for _dl_find_object on other unwind formats is not implemented, // yet. #if defined(DLFO_STRUCT_HAS_EH_DBASE) & defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) // We expect `_dl_find_object` to return PT_GNU_EH_FRAME. #if DLFO_EH_SEGMENT_TYPE != PT_GNU_EH_FRAME #error _dl_find_object retrieves an unexpected section type #endif // We look-up `dl_find_object` dynamically at runtime to ensure backwards // compatibility with earlier version of glibc not yet providing it. On older // systems, we gracefully fallback to `dl_iterate_phdr`. Cache the pointer // so we only look it up once. Do manual lock to avoid _cxa_guard_acquire. static decltype(_dl_find_object) *dlFindObject; static bool dlFindObjectChecked = false; if (!dlFindObjectChecked) { dlFindObject = reinterpret_cast( dlsym(RTLD_DEFAULT, "_dl_find_object")); dlFindObjectChecked = true; } // Try to find the unwind info using `dl_find_object` dl_find_object findResult; if (dlFindObject && dlFindObject((void *)targetAddr, &findResult) == 0) { if (findResult.dlfo_eh_frame == nullptr) { // Found an entry for `targetAddr`, but there is no unwind info. return false; } info.dso_base = reinterpret_cast(findResult.dlfo_map_start); info.text_segment_length = static_cast( (char *)findResult.dlfo_map_end - (char *)findResult.dlfo_map_start); // Record the start of PT_GNU_EH_FRAME. info.dwarf_index_section = reinterpret_cast(findResult.dlfo_eh_frame); // `_dl_find_object` does not give us the size of PT_GNU_EH_FRAME. // Setting length to `SIZE_MAX` effectively disables all range checks. info.dwarf_index_section_length = SIZE_MAX; EHHeaderParser::EHHeaderInfo hdrInfo; if (!EHHeaderParser::decodeEHHdr( *this, info.dwarf_index_section, info.dwarf_index_section + info.dwarf_index_section_length, hdrInfo)) { return false; } // Record the start of the FDE and use SIZE_MAX to indicate that we do // not know the end address. info.dwarf_section = hdrInfo.eh_frame_ptr; info.dwarf_section_length = SIZE_MAX; return true; } #endif dl_iterate_cb_data cb_data = {this, &info, targetAddr}; int found = dl_iterate_phdr(findUnwindSectionsByPhdr, &cb_data); return static_cast(found); #endif return false; } inline bool LocalAddressSpace::findOtherFDE(pint_t targetAddr, pint_t &fde) { // TO DO: if OS has way to dynamically register FDEs, check that. (void)targetAddr; (void)fde; return false; } inline bool LocalAddressSpace::findFunctionName(pint_t addr, char *buf, size_t bufLen, unw_word_t *offset) { #if _LIBUNWIND_USE_DLADDR Dl_info dyldInfo; if (dladdr((void *)addr, &dyldInfo)) { if (dyldInfo.dli_sname != NULL) { snprintf(buf, bufLen, "%s", dyldInfo.dli_sname); *offset = (addr - (pint_t) dyldInfo.dli_saddr); return true; } } #elif defined(_AIX) uint16_t nameLen; char *funcName = getFuncNameFromTBTable(addr, nameLen, offset); if (funcName != NULL) { snprintf(buf, bufLen, "%.*s", nameLen, funcName); return true; } #else (void)addr; (void)buf; (void)bufLen; (void)offset; #endif return false; } } // namespace libunwind #endif // __ADDRESSSPACE_HPP__ ================================================ FILE: ThirdParty/libunwind/src/CMakeLists.txt ================================================ # Get sources set(LIBUNWIND_CXX_SOURCES libunwind.cpp Unwind-EHABI.cpp Unwind-seh.cpp ) if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") list(APPEND LIBUNWIND_CXX_SOURCES Unwind_AIXExtras.cpp ) endif() set(LIBUNWIND_C_SOURCES UnwindLevel1.c UnwindLevel1-gcc-ext.c Unwind-sjlj.c Unwind-wasm.c ) set_source_files_properties(${LIBUNWIND_C_SOURCES} PROPERTIES # We need to set `-fexceptions` here so that key # unwinding functions, like # _UNWIND_RaiseException, are not marked as # `nounwind`, which breaks LTO builds of # libunwind. See #56825 and #120657 for context. COMPILE_FLAGS "-std=c99 -fexceptions") set(LIBUNWIND_ASM_SOURCES UnwindRegistersRestore.S UnwindRegistersSave.S ) set(LIBUNWIND_HEADERS AddressSpace.hpp assembly.h CompactUnwinder.hpp config.h dwarf2.h DwarfInstructions.hpp DwarfParser.hpp EHHeaderParser.hpp FrameHeaderCache.hpp libunwind_ext.h Registers.hpp RWMutex.hpp shadow_stack_unwind.h Unwind-EHABI.h UnwindCursor.hpp ../include/libunwind.h ../include/unwind.h ../include/unwind_itanium.h ../include/unwind_arm_ehabi.h ) if(APPLE) list(APPEND LIBUNWIND_HEADERS ../include/mach-o/compact_unwind_encoding.h ) endif() if (MSVC_IDE) # Force them all into the headers dir on MSVC, otherwise they end up at # project scope because they don't have extensions. source_group("Header Files" FILES ${LIBUNWIND_HEADERS}) endif() set(LIBUNWIND_SOURCES ${LIBUNWIND_CXX_SOURCES} ${LIBUNWIND_C_SOURCES} ${LIBUNWIND_ASM_SOURCES}) # Generate library list. if (NOT APPLE) add_library_flags_if(LIBUNWIND_HAS_DL_LIB dl) endif() if (LIBUNWIND_ENABLE_THREADS AND NOT APPLE) add_library_flags_if(LIBUNWIND_HAS_PTHREAD_LIB pthread) endif() if (LIBUNWIND_ENABLE_THREADS) add_compile_flags_if(LIBUNWIND_WEAK_PTHREAD_LIB -DLIBUNWIND_USE_WEAK_PTHREAD=1) endif() # Setup flags. add_link_flags_if(CXX_SUPPORTS_UNWINDLIB_EQ_NONE_FLAG --unwindlib=none) # MINGW_LIBRARIES is defined in config-ix.cmake add_library_flags_if(MINGW "${MINGW_LIBRARIES}") if (LIBUNWIND_ENABLE_SHARED AND NOT (CXX_SUPPORTS_FNO_EXCEPTIONS_FLAG AND CXX_SUPPORTS_FUNWIND_TABLES_FLAG)) message(FATAL_ERROR "Compiler doesn't support generation of unwind tables if exception " "support is disabled. Building libunwind DSO with runtime dependency " "on C++ ABI library is not supported.") endif() if (HAIKU) add_library_flags_if(LIBUNWIND_HAS_ROOT_LIB root) add_library_flags_if(LIBUNWIND_HAS_BSD_LIB bsd) add_compile_flags_if(LIBUNWIND_HAS_BSD_LIB -D_LIBUNWIND_USE_HAIKU_BSD_LIB=1) add_compile_flags("-D_DEFAULT_SOURCE") add_compile_flags("-DPT_GNU_EH_FRAME=PT_EH_FRAME") endif () string(REPLACE ";" " " LIBUNWIND_COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}") string(REPLACE ";" " " LIBUNWIND_CXX_FLAGS "${LIBUNWIND_CXX_FLAGS}") string(REPLACE ";" " " LIBUNWIND_C_FLAGS "${LIBUNWIND_C_FLAGS}") string(REPLACE ";" " " LIBUNWIND_LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}") set_property(SOURCE ${LIBUNWIND_CXX_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " ${LIBUNWIND_CXX_FLAGS}") set_property(SOURCE ${LIBUNWIND_C_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " ${LIBUNWIND_C_FLAGS}") # NOTE: avoid implicit dependencies on C++ runtimes. libunwind uses C++ for # ease, but does not rely on C++ at runtime. set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") include(WarningFlags) # Build the shared library. add_library(unwind_shared_objects OBJECT EXCLUDE_FROM_ALL ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS}) cxx_add_warning_flags(unwind_shared_objects ${LIBUNWIND_ENABLE_WERROR} ${LIBUNWIND_ENABLE_PEDANTIC}) if(CMAKE_C_COMPILER_ID STREQUAL MSVC) target_compile_options(unwind_shared_objects PRIVATE /GR-) else() target_compile_options(unwind_shared_objects PRIVATE -fno-rtti) endif() target_compile_options(unwind_shared_objects PUBLIC "${LIBUNWIND_ADDITIONAL_COMPILE_FLAGS}") target_link_libraries(unwind_shared_objects PUBLIC "${LIBUNWIND_ADDITIONAL_LIBRARIES}" PRIVATE unwind-headers runtimes-libc-headers ${LIBUNWIND_LIBRARIES}) set_target_properties(unwind_shared_objects PROPERTIES CXX_EXTENSIONS OFF CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}" ) if (CMAKE_POSITION_INDEPENDENT_CODE OR NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) set_target_properties(unwind_shared_objects PROPERTIES POSITION_INDEPENDENT_CODE ON) # must set manually because it's an object library endif() add_library(unwind_shared SHARED) target_link_libraries(unwind_shared PUBLIC unwind_shared_objects runtimes-libc-shared) set_target_properties(unwind_shared PROPERTIES EXCLUDE_FROM_ALL "$,FALSE,TRUE>" LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}" LINKER_LANGUAGE C OUTPUT_NAME "${LIBUNWIND_SHARED_OUTPUT_NAME}" VERSION "${LIBUNWIND_LIBRARY_VERSION}" SOVERSION "1" ) if (LIBUNWIND_ENABLE_SHARED) list(APPEND LIBUNWIND_BUILD_TARGETS "unwind_shared") endif() if (LIBUNWIND_INSTALL_SHARED_LIBRARY) list(APPEND LIBUNWIND_INSTALL_TARGETS "unwind_shared") endif() # Build the static library. add_library(unwind_static_objects OBJECT EXCLUDE_FROM_ALL ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS}) cxx_add_warning_flags(unwind_static_objects ${LIBUNWIND_ENABLE_WERROR} ${LIBUNWIND_ENABLE_PEDANTIC}) if(CMAKE_C_COMPILER_ID STREQUAL MSVC) target_compile_options(unwind_static_objects PRIVATE /GR-) else() target_compile_options(unwind_static_objects PRIVATE -fno-rtti) endif() target_compile_options(unwind_static_objects PUBLIC "${LIBUNWIND_ADDITIONAL_COMPILE_FLAGS}") target_link_libraries(unwind_static_objects PUBLIC "${LIBUNWIND_ADDITIONAL_LIBRARIES}" PRIVATE unwind-headers runtimes-libc-headers ${LIBUNWIND_LIBRARIES}) set_target_properties(unwind_static_objects PROPERTIES CXX_EXTENSIONS OFF CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}" ) if(LIBUNWIND_HIDE_SYMBOLS) target_add_compile_flags_if_supported(unwind_static_objects PRIVATE -fvisibility=hidden) target_add_compile_flags_if_supported(unwind_static_objects PRIVATE -fvisibility-global-new-delete=force-hidden) if (NOT CXX_SUPPORTS_FVISIBILITY_GLOBAL_NEW_DELETE_EQ_FORCE_HIDDEN_FLAG) target_add_compile_flags_if_supported(unwind_static_objects PRIVATE -fvisibility-global-new-delete-hidden) endif() target_compile_definitions(unwind_static_objects PRIVATE _LIBUNWIND_HIDE_SYMBOLS) endif() add_library(unwind_static STATIC) target_link_libraries(unwind_static PUBLIC unwind_static_objects runtimes-libc-static) set_target_properties(unwind_static PROPERTIES EXCLUDE_FROM_ALL "$,FALSE,TRUE>" LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}" LINKER_LANGUAGE C OUTPUT_NAME "${LIBUNWIND_STATIC_OUTPUT_NAME}" ) if (LIBUNWIND_ENABLE_STATIC) list(APPEND LIBUNWIND_BUILD_TARGETS "unwind_static") endif() if (LIBUNWIND_INSTALL_STATIC_LIBRARY) list(APPEND LIBUNWIND_INSTALL_TARGETS "unwind_static") endif() # Add a meta-target for both libraries. add_custom_target(unwind DEPENDS ${LIBUNWIND_BUILD_TARGETS}) if (LIBUNWIND_INSTALL_LIBRARY) install(TARGETS ${LIBUNWIND_INSTALL_TARGETS} LIBRARY DESTINATION ${LIBUNWIND_INSTALL_LIBRARY_DIR} COMPONENT unwind ARCHIVE DESTINATION ${LIBUNWIND_INSTALL_LIBRARY_DIR} COMPONENT unwind RUNTIME DESTINATION ${LIBUNWIND_INSTALL_RUNTIME_DIR} COMPONENT unwind) endif() if (NOT CMAKE_CONFIGURATION_TYPES AND LIBUNWIND_INSTALL_LIBRARY) add_custom_target(install-unwind DEPENDS unwind COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=unwind -P "${LIBUNWIND_BINARY_DIR}/cmake_install.cmake") add_custom_target(install-unwind-stripped DEPENDS unwind COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=unwind -DCMAKE_INSTALL_DO_STRIP=1 -P "${LIBUNWIND_BINARY_DIR}/cmake_install.cmake") if(LIBUNWIND_INSTALL_HEADERS) add_dependencies(install-unwind install-unwind-headers) add_dependencies(install-unwind-stripped install-unwind-headers-stripped) endif() endif() ================================================ FILE: ThirdParty/libunwind/src/CompactUnwinder.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Does runtime stack unwinding using compact unwind encodings. // //===----------------------------------------------------------------------===// #ifndef __COMPACT_UNWINDER_HPP__ #define __COMPACT_UNWINDER_HPP__ #include #include #include #include #include "Registers.hpp" #include "libunwind_ext.h" #define EXTRACT_BITS(value, mask) \ ((value >> __builtin_ctz(mask)) & (((1 << __builtin_popcount(mask))) - 1)) namespace libunwind { #if defined(_LIBUNWIND_TARGET_I386) /// CompactUnwinder_x86 uses a compact unwind info to virtually "step" (aka /// unwind) by modifying a Registers_x86 register set template class CompactUnwinder_x86 { public: static int stepWithCompactEncoding(compact_unwind_encoding_t info, uint32_t functionStart, A &addressSpace, Registers_x86 ®isters); private: typename A::pint_t pint_t; static void frameUnwind(A &addressSpace, Registers_x86 ®isters); static void framelessUnwind(A &addressSpace, typename A::pint_t returnAddressLocation, Registers_x86 ®isters); static int stepWithCompactEncodingEBPFrame(compact_unwind_encoding_t compactEncoding, uint32_t functionStart, A &addressSpace, Registers_x86 ®isters); static int stepWithCompactEncodingFrameless( compact_unwind_encoding_t compactEncoding, uint32_t functionStart, A &addressSpace, Registers_x86 ®isters, bool indirectStackSize); }; template int CompactUnwinder_x86::stepWithCompactEncoding( compact_unwind_encoding_t compactEncoding, uint32_t functionStart, A &addressSpace, Registers_x86 ®isters) { switch (compactEncoding & UNWIND_X86_MODE_MASK) { case UNWIND_X86_MODE_EBP_FRAME: return stepWithCompactEncodingEBPFrame(compactEncoding, functionStart, addressSpace, registers); case UNWIND_X86_MODE_STACK_IMMD: return stepWithCompactEncodingFrameless(compactEncoding, functionStart, addressSpace, registers, false); case UNWIND_X86_MODE_STACK_IND: return stepWithCompactEncodingFrameless(compactEncoding, functionStart, addressSpace, registers, true); } _LIBUNWIND_ABORT("invalid compact unwind encoding"); } template int CompactUnwinder_x86::stepWithCompactEncodingEBPFrame( compact_unwind_encoding_t compactEncoding, uint32_t functionStart, A &addressSpace, Registers_x86 ®isters) { uint32_t savedRegistersOffset = EXTRACT_BITS(compactEncoding, UNWIND_X86_EBP_FRAME_OFFSET); uint32_t savedRegistersLocations = EXTRACT_BITS(compactEncoding, UNWIND_X86_EBP_FRAME_REGISTERS); uint32_t savedRegisters = registers.getEBP() - 4 * savedRegistersOffset; for (int i = 0; i < 5; ++i) { switch (savedRegistersLocations & 0x7) { case UNWIND_X86_REG_NONE: // no register saved in this slot break; case UNWIND_X86_REG_EBX: registers.setEBX(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_ECX: registers.setECX(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_EDX: registers.setEDX(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_EDI: registers.setEDI(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_ESI: registers.setESI(addressSpace.get32(savedRegisters)); break; default: (void)functionStart; _LIBUNWIND_DEBUG_LOG("bad register for EBP frame, encoding=%08X for " "function starting at 0x%X", compactEncoding, functionStart); _LIBUNWIND_ABORT("invalid compact unwind encoding"); } savedRegisters += 4; savedRegistersLocations = (savedRegistersLocations >> 3); } frameUnwind(addressSpace, registers); return UNW_STEP_SUCCESS; } template int CompactUnwinder_x86::stepWithCompactEncodingFrameless( compact_unwind_encoding_t encoding, uint32_t functionStart, A &addressSpace, Registers_x86 ®isters, bool indirectStackSize) { uint32_t stackSizeEncoded = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_SIZE); uint32_t stackAdjust = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_ADJUST); uint32_t regCount = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_REG_COUNT); uint32_t permutation = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION); uint32_t stackSize = stackSizeEncoded * 4; if (indirectStackSize) { // stack size is encoded in subl $xxx,%esp instruction uint32_t subl = addressSpace.get32(functionStart + stackSizeEncoded); stackSize = subl + 4 * stackAdjust; } // decompress permutation uint32_t permunreg[6]; switch (regCount) { case 6: permunreg[0] = permutation / 120; permutation -= (permunreg[0] * 120); permunreg[1] = permutation / 24; permutation -= (permunreg[1] * 24); permunreg[2] = permutation / 6; permutation -= (permunreg[2] * 6); permunreg[3] = permutation / 2; permutation -= (permunreg[3] * 2); permunreg[4] = permutation; permunreg[5] = 0; break; case 5: permunreg[0] = permutation / 120; permutation -= (permunreg[0] * 120); permunreg[1] = permutation / 24; permutation -= (permunreg[1] * 24); permunreg[2] = permutation / 6; permutation -= (permunreg[2] * 6); permunreg[3] = permutation / 2; permutation -= (permunreg[3] * 2); permunreg[4] = permutation; break; case 4: permunreg[0] = permutation / 60; permutation -= (permunreg[0] * 60); permunreg[1] = permutation / 12; permutation -= (permunreg[1] * 12); permunreg[2] = permutation / 3; permutation -= (permunreg[2] * 3); permunreg[3] = permutation; break; case 3: permunreg[0] = permutation / 20; permutation -= (permunreg[0] * 20); permunreg[1] = permutation / 4; permutation -= (permunreg[1] * 4); permunreg[2] = permutation; break; case 2: permunreg[0] = permutation / 5; permutation -= (permunreg[0] * 5); permunreg[1] = permutation; break; case 1: permunreg[0] = permutation; break; } // re-number registers back to standard numbers int registersSaved[6]; bool used[7] = { false, false, false, false, false, false, false }; for (uint32_t i = 0; i < regCount; ++i) { uint32_t renum = 0; for (int u = 1; u < 7; ++u) { if (!used[u]) { if (renum == permunreg[i]) { registersSaved[i] = u; used[u] = true; break; } ++renum; } } } uint32_t savedRegisters = registers.getSP() + stackSize - 4 - 4 * regCount; for (uint32_t i = 0; i < regCount; ++i) { switch (registersSaved[i]) { case UNWIND_X86_REG_EBX: registers.setEBX(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_ECX: registers.setECX(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_EDX: registers.setEDX(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_EDI: registers.setEDI(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_ESI: registers.setESI(addressSpace.get32(savedRegisters)); break; case UNWIND_X86_REG_EBP: registers.setEBP(addressSpace.get32(savedRegisters)); break; default: _LIBUNWIND_DEBUG_LOG("bad register for frameless, encoding=%08X for " "function starting at 0x%X", encoding, functionStart); _LIBUNWIND_ABORT("invalid compact unwind encoding"); } savedRegisters += 4; } framelessUnwind(addressSpace, savedRegisters, registers); return UNW_STEP_SUCCESS; } template void CompactUnwinder_x86::frameUnwind(A &addressSpace, Registers_x86 ®isters) { typename A::pint_t bp = registers.getEBP(); // ebp points to old ebp registers.setEBP(addressSpace.get32(bp)); // old esp is ebp less saved ebp and return address registers.setSP((uint32_t)bp + 8); // pop return address into eip registers.setIP(addressSpace.get32(bp + 4)); } template void CompactUnwinder_x86::framelessUnwind( A &addressSpace, typename A::pint_t returnAddressLocation, Registers_x86 ®isters) { // return address is on stack after last saved register registers.setIP(addressSpace.get32(returnAddressLocation)); // old esp is before return address registers.setSP((uint32_t)returnAddressLocation + 4); } #endif // _LIBUNWIND_TARGET_I386 #if defined(_LIBUNWIND_TARGET_X86_64) /// CompactUnwinder_x86_64 uses a compact unwind info to virtually "step" (aka /// unwind) by modifying a Registers_x86_64 register set template class CompactUnwinder_x86_64 { public: static int stepWithCompactEncoding(compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_x86_64 ®isters); private: typename A::pint_t pint_t; static void frameUnwind(A &addressSpace, Registers_x86_64 ®isters); static void framelessUnwind(A &addressSpace, uint64_t returnAddressLocation, Registers_x86_64 ®isters); static int stepWithCompactEncodingRBPFrame(compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_x86_64 ®isters); static int stepWithCompactEncodingFrameless( compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_x86_64 ®isters, bool indirectStackSize); }; template int CompactUnwinder_x86_64::stepWithCompactEncoding( compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_x86_64 ®isters) { switch (compactEncoding & UNWIND_X86_64_MODE_MASK) { case UNWIND_X86_64_MODE_RBP_FRAME: return stepWithCompactEncodingRBPFrame(compactEncoding, functionStart, addressSpace, registers); case UNWIND_X86_64_MODE_STACK_IMMD: return stepWithCompactEncodingFrameless(compactEncoding, functionStart, addressSpace, registers, false); case UNWIND_X86_64_MODE_STACK_IND: return stepWithCompactEncodingFrameless(compactEncoding, functionStart, addressSpace, registers, true); } _LIBUNWIND_ABORT("invalid compact unwind encoding"); } template int CompactUnwinder_x86_64::stepWithCompactEncodingRBPFrame( compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_x86_64 ®isters) { uint32_t savedRegistersOffset = EXTRACT_BITS(compactEncoding, UNWIND_X86_64_RBP_FRAME_OFFSET); uint32_t savedRegistersLocations = EXTRACT_BITS(compactEncoding, UNWIND_X86_64_RBP_FRAME_REGISTERS); uint64_t savedRegisters = registers.getRBP() - 8 * savedRegistersOffset; for (int i = 0; i < 5; ++i) { switch (savedRegistersLocations & 0x7) { case UNWIND_X86_64_REG_NONE: // no register saved in this slot break; case UNWIND_X86_64_REG_RBX: registers.setRBX(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R12: registers.setR12(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R13: registers.setR13(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R14: registers.setR14(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R15: registers.setR15(addressSpace.get64(savedRegisters)); break; default: (void)functionStart; _LIBUNWIND_DEBUG_LOG("bad register for RBP frame, encoding=%08X for " "function starting at 0x%llX", compactEncoding, functionStart); _LIBUNWIND_ABORT("invalid compact unwind encoding"); } savedRegisters += 8; savedRegistersLocations = (savedRegistersLocations >> 3); } frameUnwind(addressSpace, registers); return UNW_STEP_SUCCESS; } template int CompactUnwinder_x86_64::stepWithCompactEncodingFrameless( compact_unwind_encoding_t encoding, uint64_t functionStart, A &addressSpace, Registers_x86_64 ®isters, bool indirectStackSize) { uint32_t stackSizeEncoded = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_SIZE); uint32_t stackAdjust = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_ADJUST); uint32_t regCount = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT); uint32_t permutation = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION); uint32_t stackSize = stackSizeEncoded * 8; if (indirectStackSize) { // stack size is encoded in subl $xxx,%esp instruction uint32_t subl = addressSpace.get32(functionStart + stackSizeEncoded); stackSize = subl + 8 * stackAdjust; } // decompress permutation uint32_t permunreg[6]; switch (regCount) { case 6: permunreg[0] = permutation / 120; permutation -= (permunreg[0] * 120); permunreg[1] = permutation / 24; permutation -= (permunreg[1] * 24); permunreg[2] = permutation / 6; permutation -= (permunreg[2] * 6); permunreg[3] = permutation / 2; permutation -= (permunreg[3] * 2); permunreg[4] = permutation; permunreg[5] = 0; break; case 5: permunreg[0] = permutation / 120; permutation -= (permunreg[0] * 120); permunreg[1] = permutation / 24; permutation -= (permunreg[1] * 24); permunreg[2] = permutation / 6; permutation -= (permunreg[2] * 6); permunreg[3] = permutation / 2; permutation -= (permunreg[3] * 2); permunreg[4] = permutation; break; case 4: permunreg[0] = permutation / 60; permutation -= (permunreg[0] * 60); permunreg[1] = permutation / 12; permutation -= (permunreg[1] * 12); permunreg[2] = permutation / 3; permutation -= (permunreg[2] * 3); permunreg[3] = permutation; break; case 3: permunreg[0] = permutation / 20; permutation -= (permunreg[0] * 20); permunreg[1] = permutation / 4; permutation -= (permunreg[1] * 4); permunreg[2] = permutation; break; case 2: permunreg[0] = permutation / 5; permutation -= (permunreg[0] * 5); permunreg[1] = permutation; break; case 1: permunreg[0] = permutation; break; } // re-number registers back to standard numbers int registersSaved[6]; bool used[7] = { false, false, false, false, false, false, false }; for (uint32_t i = 0; i < regCount; ++i) { uint32_t renum = 0; for (int u = 1; u < 7; ++u) { if (!used[u]) { if (renum == permunreg[i]) { registersSaved[i] = u; used[u] = true; break; } ++renum; } } } uint64_t savedRegisters = registers.getSP() + stackSize - 8 - 8 * regCount; for (uint32_t i = 0; i < regCount; ++i) { switch (registersSaved[i]) { case UNWIND_X86_64_REG_RBX: registers.setRBX(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R12: registers.setR12(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R13: registers.setR13(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R14: registers.setR14(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_R15: registers.setR15(addressSpace.get64(savedRegisters)); break; case UNWIND_X86_64_REG_RBP: registers.setRBP(addressSpace.get64(savedRegisters)); break; default: _LIBUNWIND_DEBUG_LOG("bad register for frameless, encoding=%08X for " "function starting at 0x%llX", encoding, functionStart); _LIBUNWIND_ABORT("invalid compact unwind encoding"); } savedRegisters += 8; } framelessUnwind(addressSpace, savedRegisters, registers); return UNW_STEP_SUCCESS; } template void CompactUnwinder_x86_64::frameUnwind(A &addressSpace, Registers_x86_64 ®isters) { uint64_t rbp = registers.getRBP(); // ebp points to old ebp registers.setRBP(addressSpace.get64(rbp)); // old esp is ebp less saved ebp and return address registers.setSP(rbp + 16); // pop return address into eip registers.setIP(addressSpace.get64(rbp + 8)); } template void CompactUnwinder_x86_64::framelessUnwind(A &addressSpace, uint64_t returnAddressLocation, Registers_x86_64 ®isters) { // return address is on stack after last saved register registers.setIP(addressSpace.get64(returnAddressLocation)); // old esp is before return address registers.setSP(returnAddressLocation + 8); } #endif // _LIBUNWIND_TARGET_X86_64 #if defined(_LIBUNWIND_TARGET_AARCH64) /// CompactUnwinder_arm64 uses a compact unwind info to virtually "step" (aka /// unwind) by modifying a Registers_arm64 register set template class CompactUnwinder_arm64 { public: static int stepWithCompactEncoding(compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_arm64 ®isters); private: typename A::pint_t pint_t; static int stepWithCompactEncodingFrame(compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_arm64 ®isters); static int stepWithCompactEncodingFrameless( compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_arm64 ®isters); }; template int CompactUnwinder_arm64::stepWithCompactEncoding( compact_unwind_encoding_t compactEncoding, uint64_t functionStart, A &addressSpace, Registers_arm64 ®isters) { switch (compactEncoding & UNWIND_ARM64_MODE_MASK) { case UNWIND_ARM64_MODE_FRAME: return stepWithCompactEncodingFrame(compactEncoding, functionStart, addressSpace, registers); case UNWIND_ARM64_MODE_FRAMELESS: return stepWithCompactEncodingFrameless(compactEncoding, functionStart, addressSpace, registers); } _LIBUNWIND_ABORT("invalid compact unwind encoding"); } template int CompactUnwinder_arm64::stepWithCompactEncodingFrameless( compact_unwind_encoding_t encoding, uint64_t, A &addressSpace, Registers_arm64 ®isters) { uint32_t stackSize = 16 * EXTRACT_BITS(encoding, UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK); uint64_t savedRegisterLoc = registers.getSP() + stackSize; if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) { registers.setRegister(UNW_AARCH64_X19, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X20, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X21_X22_PAIR) { registers.setRegister(UNW_AARCH64_X21, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X22, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X23_X24_PAIR) { registers.setRegister(UNW_AARCH64_X23, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X24, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X25_X26_PAIR) { registers.setRegister(UNW_AARCH64_X25, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X26, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X27_X28_PAIR) { registers.setRegister(UNW_AARCH64_X27, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X28, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D8_D9_PAIR) { registers.setFloatRegister(UNW_AARCH64_V8, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V9, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D10_D11_PAIR) { registers.setFloatRegister(UNW_AARCH64_V10, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V11, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D12_D13_PAIR) { registers.setFloatRegister(UNW_AARCH64_V12, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V13, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D14_D15_PAIR) { registers.setFloatRegister(UNW_AARCH64_V14, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V15, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } // subtract stack size off of sp registers.setSP(savedRegisterLoc); // set pc to be value in lr registers.setIP(registers.getRegister(UNW_AARCH64_LR)); return UNW_STEP_SUCCESS; } template int CompactUnwinder_arm64::stepWithCompactEncodingFrame( compact_unwind_encoding_t encoding, uint64_t, A &addressSpace, Registers_arm64 ®isters) { uint64_t savedRegisterLoc = registers.getFP() - 8; if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) { registers.setRegister(UNW_AARCH64_X19, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X20, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X21_X22_PAIR) { registers.setRegister(UNW_AARCH64_X21, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X22, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X23_X24_PAIR) { registers.setRegister(UNW_AARCH64_X23, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X24, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X25_X26_PAIR) { registers.setRegister(UNW_AARCH64_X25, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X26, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_X27_X28_PAIR) { registers.setRegister(UNW_AARCH64_X27, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setRegister(UNW_AARCH64_X28, addressSpace.get64(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D8_D9_PAIR) { registers.setFloatRegister(UNW_AARCH64_V8, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V9, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D10_D11_PAIR) { registers.setFloatRegister(UNW_AARCH64_V10, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V11, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D12_D13_PAIR) { registers.setFloatRegister(UNW_AARCH64_V12, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V13, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } if (encoding & UNWIND_ARM64_FRAME_D14_D15_PAIR) { registers.setFloatRegister(UNW_AARCH64_V14, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; registers.setFloatRegister(UNW_AARCH64_V15, addressSpace.getDouble(savedRegisterLoc)); savedRegisterLoc -= 8; } uint64_t fp = registers.getFP(); // fp points to old fp registers.setFP(addressSpace.get64(fp)); // old sp is fp less saved fp and lr registers.setSP(fp + 16); // pop return address into pc registers.setIP(addressSpace.get64(fp + 8)); return UNW_STEP_SUCCESS; } #endif // _LIBUNWIND_TARGET_AARCH64 } // namespace libunwind #endif // __COMPACT_UNWINDER_HPP__ ================================================ FILE: ThirdParty/libunwind/src/DwarfInstructions.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Processor specific interpretation of DWARF unwind info. // //===----------------------------------------------------------------------===// #ifndef __DWARF_INSTRUCTIONS_HPP__ #define __DWARF_INSTRUCTIONS_HPP__ #include #include #include #include "DwarfParser.hpp" #include "Registers.hpp" #include "config.h" #include "dwarf2.h" #include "libunwind_ext.h" namespace libunwind { /// DwarfInstructions maps abstract DWARF unwind instructions to a particular /// architecture template class DwarfInstructions { public: typedef typename A::pint_t pint_t; typedef typename A::sint_t sint_t; static int stepWithDwarf(A &addressSpace, pint_t pc, pint_t fdeStart, R ®isters, bool &isSignalFrame, bool stage2); private: enum { DW_X86_64_RET_ADDR = 16 }; enum { DW_X86_RET_ADDR = 8 }; typedef typename CFI_Parser::RegisterLocation RegisterLocation; typedef typename CFI_Parser::PrologInfo PrologInfo; typedef typename CFI_Parser::FDE_Info FDE_Info; typedef typename CFI_Parser::CIE_Info CIE_Info; static pint_t evaluateExpression(pint_t expression, A &addressSpace, const R ®isters, pint_t initialStackValue); static pint_t getSavedRegister(A &addressSpace, const R ®isters, pint_t cfa, const RegisterLocation &savedReg); static double getSavedFloatRegister(A &addressSpace, const R ®isters, pint_t cfa, const RegisterLocation &savedReg); static v128 getSavedVectorRegister(A &addressSpace, const R ®isters, pint_t cfa, const RegisterLocation &savedReg); static pint_t getCFA(A &addressSpace, const PrologInfo &prolog, const R ®isters) { if (prolog.cfaRegister != 0) return (pint_t)((sint_t)registers.getRegister((int)prolog.cfaRegister) + prolog.cfaRegisterOffset); if (prolog.cfaExpression != 0) return evaluateExpression((pint_t)prolog.cfaExpression, addressSpace, registers, 0); assert(0 && "getCFA(): unknown location"); __builtin_unreachable(); } #if defined(_LIBUNWIND_TARGET_AARCH64) static bool isReturnAddressSigned(A &addressSpace, R registers, pint_t cfa, PrologInfo &prolog); static bool isReturnAddressSignedWithPC(A &addressSpace, R registers, pint_t cfa, PrologInfo &prolog); #endif }; template auto getSparcWCookie(const R &r, int) -> decltype(r.getWCookie()) { return r.getWCookie(); } template uint64_t getSparcWCookie(const R &, long) { return 0; } template typename A::pint_t DwarfInstructions::getSavedRegister( A &addressSpace, const R ®isters, pint_t cfa, const RegisterLocation &savedReg) { switch (savedReg.location) { case CFI_Parser::kRegisterInCFA: return (pint_t)addressSpace.getRegister(cfa + (pint_t)savedReg.value); case CFI_Parser::kRegisterInCFADecrypt: // sparc64 specific return (pint_t)(addressSpace.getP(cfa + (pint_t)savedReg.value) ^ getSparcWCookie(registers, 0)); case CFI_Parser::kRegisterAtExpression: return (pint_t)addressSpace.getRegister(evaluateExpression( (pint_t)savedReg.value, addressSpace, registers, cfa)); case CFI_Parser::kRegisterIsExpression: return evaluateExpression((pint_t)savedReg.value, addressSpace, registers, cfa); case CFI_Parser::kRegisterInRegister: return registers.getRegister((int)savedReg.value); case CFI_Parser::kRegisterUndefined: return 0; case CFI_Parser::kRegisterUnused: case CFI_Parser::kRegisterOffsetFromCFA: // FIX ME break; } _LIBUNWIND_ABORT("unsupported restore location for register"); } template double DwarfInstructions::getSavedFloatRegister( A &addressSpace, const R ®isters, pint_t cfa, const RegisterLocation &savedReg) { switch (savedReg.location) { case CFI_Parser::kRegisterInCFA: return addressSpace.getDouble(cfa + (pint_t)savedReg.value); case CFI_Parser::kRegisterAtExpression: return addressSpace.getDouble( evaluateExpression((pint_t)savedReg.value, addressSpace, registers, cfa)); case CFI_Parser::kRegisterUndefined: return 0.0; case CFI_Parser::kRegisterInRegister: #ifndef _LIBUNWIND_TARGET_ARM return registers.getFloatRegister((int)savedReg.value); #endif case CFI_Parser::kRegisterIsExpression: case CFI_Parser::kRegisterUnused: case CFI_Parser::kRegisterOffsetFromCFA: case CFI_Parser::kRegisterInCFADecrypt: // FIX ME break; } _LIBUNWIND_ABORT("unsupported restore location for float register"); } template v128 DwarfInstructions::getSavedVectorRegister( A &addressSpace, const R ®isters, pint_t cfa, const RegisterLocation &savedReg) { switch (savedReg.location) { case CFI_Parser::kRegisterInCFA: return addressSpace.getVector(cfa + (pint_t)savedReg.value); case CFI_Parser::kRegisterAtExpression: return addressSpace.getVector( evaluateExpression((pint_t)savedReg.value, addressSpace, registers, cfa)); case CFI_Parser::kRegisterIsExpression: case CFI_Parser::kRegisterUnused: case CFI_Parser::kRegisterUndefined: case CFI_Parser::kRegisterOffsetFromCFA: case CFI_Parser::kRegisterInRegister: case CFI_Parser::kRegisterInCFADecrypt: // FIX ME break; } _LIBUNWIND_ABORT("unsupported restore location for vector register"); } #if defined(_LIBUNWIND_TARGET_AARCH64) template bool DwarfInstructions::isReturnAddressSigned(A &addressSpace, R registers, pint_t cfa, PrologInfo &prolog) { pint_t raSignState; auto regloc = prolog.savedRegisters[UNW_AARCH64_RA_SIGN_STATE]; if (regloc.location == CFI_Parser::kRegisterUnused) raSignState = static_cast(regloc.value); else raSignState = getSavedRegister(addressSpace, registers, cfa, regloc); // Only bit[0] is meaningful. return raSignState & 0x01; } template bool DwarfInstructions::isReturnAddressSignedWithPC(A &addressSpace, R registers, pint_t cfa, PrologInfo &prolog) { pint_t raSignState; auto regloc = prolog.savedRegisters[UNW_AARCH64_RA_SIGN_STATE]; if (regloc.location == CFI_Parser::kRegisterUnused) raSignState = static_cast(regloc.value); else raSignState = getSavedRegister(addressSpace, registers, cfa, regloc); // Only bit[1] is meaningful. return raSignState & 0x02; } #endif template int DwarfInstructions::stepWithDwarf(A &addressSpace, pint_t pc, pint_t fdeStart, R ®isters, bool &isSignalFrame, bool stage2) { FDE_Info fdeInfo; CIE_Info cieInfo; if (CFI_Parser::decodeFDE(addressSpace, fdeStart, &fdeInfo, &cieInfo) == NULL) { PrologInfo prolog; if (CFI_Parser::parseFDEInstructions(addressSpace, fdeInfo, cieInfo, pc, R::getArch(), &prolog)) { // get pointer to cfa (architecture specific) pint_t cfa = getCFA(addressSpace, prolog, registers); (void)stage2; // __unw_step_stage2 is not used for cross unwinding, so we use // __aarch64__ rather than LIBUNWIND_TARGET_AARCH64 to make sure we are // building for AArch64 natively. #if defined(__aarch64__) if (stage2 && cieInfo.mteTaggedFrame) { pint_t sp = registers.getSP(); pint_t p = sp; // AArch64 doesn't require the value of SP to be 16-byte aligned at // all times, only at memory accesses and public interfaces [1]. Thus, // a signal could arrive at a point where SP is not aligned properly. // In that case, the kernel fixes up [2] the signal frame, but we // still have a misaligned SP in the previous frame. If that signal // handler caused stack unwinding, we would have an unaligned SP. // We do not need to fix up the CFA, as that is the SP at a "public // interface". // [1]: // https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#622the-stack // [2]: // https://github.com/torvalds/linux/blob/1930a6e739c4b4a654a69164dbe39e554d228915/arch/arm64/kernel/signal.c#L718 p &= ~0xfULL; // CFA is the bottom of the current stack frame. for (; p < cfa; p += 16) { __asm__ __volatile__(".arch armv8.5-a\n" ".arch_extension memtag\n" "stg %[Ptr], [%[Ptr]]\n" : : [Ptr] "r"(p) : "memory"); } } #endif // restore registers that DWARF says were saved R newRegisters = registers; // Typically, the CFA is the stack pointer at the call site in // the previous frame. However, there are scenarios in which this is not // true. For example, if we switched to a new stack. In that case, the // value of the previous SP might be indicated by a CFI directive. // // We set the SP here to the CFA, allowing for it to be overridden // by a CFI directive later on. newRegisters.setSP(cfa); pint_t returnAddress = 0; constexpr int lastReg = R::lastDwarfRegNum(); static_assert(static_cast(CFI_Parser::kMaxRegisterNumber) >= lastReg, "register range too large"); assert(lastReg >= (int)cieInfo.returnAddressRegister && "register range does not contain return address register"); for (int i = 0; i <= lastReg; ++i) { if (prolog.savedRegisters[i].location != CFI_Parser::kRegisterUnused) { if (registers.validFloatRegister(i)) newRegisters.setFloatRegister( i, getSavedFloatRegister(addressSpace, registers, cfa, prolog.savedRegisters[i])); else if (registers.validVectorRegister(i)) newRegisters.setVectorRegister( i, getSavedVectorRegister(addressSpace, registers, cfa, prolog.savedRegisters[i])); else if (i == (int)cieInfo.returnAddressRegister) returnAddress = getSavedRegister(addressSpace, registers, cfa, prolog.savedRegisters[i]); else if (registers.validRegister(i)) newRegisters.setRegister( i, getSavedRegister(addressSpace, registers, cfa, prolog.savedRegisters[i])); else return UNW_EBADREG; } else if (i == (int)cieInfo.returnAddressRegister) { // Leaf function keeps the return address in register and there is no // explicit instructions how to restore it. returnAddress = registers.getRegister(cieInfo.returnAddressRegister); } } isSignalFrame = cieInfo.isSignalFrame; #if defined(_LIBUNWIND_TARGET_AARCH64) // If the target is aarch64 then the return address may have been signed // using the v8.3 pointer authentication extensions. The original // return address needs to be authenticated before the return address is // restored. autia1716 is used instead of autia as autia1716 assembles // to a NOP on pre-v8.3a architectures. if ((R::getArch() == REGISTERS_ARM64) && isReturnAddressSigned(addressSpace, registers, cfa, prolog) && returnAddress != 0) { #if !defined(_LIBUNWIND_IS_NATIVE_ONLY) return UNW_ECROSSRASIGNING; #else register unsigned long long x17 __asm("x17") = returnAddress; register unsigned long long x16 __asm("x16") = cfa; // We use the hint versions of the authentication instructions below to // ensure they're assembled by the compiler even for targets with no // FEAT_PAuth/FEAT_PAuth_LR support. if (isReturnAddressSignedWithPC(addressSpace, registers, cfa, prolog)) { register unsigned long long x15 __asm("x15") = prolog.ptrAuthDiversifier; if (cieInfo.addressesSignedWithBKey) { asm("hint 0x27\n\t" // pacm "hint 0xe" : "+r"(x17) : "r"(x16), "r"(x15)); // autib1716 } else { asm("hint 0x27\n\t" // pacm "hint 0xc" : "+r"(x17) : "r"(x16), "r"(x15)); // autia1716 } } else { if (cieInfo.addressesSignedWithBKey) asm("hint 0xe" : "+r"(x17) : "r"(x16)); // autib1716 else asm("hint 0xc" : "+r"(x17) : "r"(x16)); // autia1716 } returnAddress = x17; #endif } #endif #if defined(_LIBUNWIND_IS_NATIVE_ONLY) && defined(_LIBUNWIND_TARGET_ARM) && \ defined(__ARM_FEATURE_PAUTH) if ((R::getArch() == REGISTERS_ARM) && prolog.savedRegisters[UNW_ARM_RA_AUTH_CODE].value) { pint_t pac = getSavedRegister(addressSpace, registers, cfa, prolog.savedRegisters[UNW_ARM_RA_AUTH_CODE]); __asm__ __volatile__("autg %0, %1, %2" : : "r"(pac), "r"(returnAddress), "r"(cfa) :); } #endif #if defined(_LIBUNWIND_TARGET_SPARC) if (R::getArch() == REGISTERS_SPARC) { // Skip call site instruction and delay slot returnAddress += 8; // Skip unimp instruction if function returns a struct if ((addressSpace.get32(returnAddress) & 0xC1C00000) == 0) returnAddress += 4; } #endif #if defined(_LIBUNWIND_TARGET_SPARC64) // Skip call site instruction and delay slot. if (R::getArch() == REGISTERS_SPARC64) returnAddress += 8; #endif #if defined(_LIBUNWIND_TARGET_PPC64) #define PPC64_ELFV1_R2_LOAD_INST_ENCODING 0xe8410028u // ld r2,40(r1) #define PPC64_ELFV1_R2_OFFSET 40 #define PPC64_ELFV2_R2_LOAD_INST_ENCODING 0xe8410018u // ld r2,24(r1) #define PPC64_ELFV2_R2_OFFSET 24 // If the instruction at return address is a TOC (r2) restore, // then r2 was saved and needs to be restored. // ELFv2 ABI specifies that the TOC Pointer must be saved at SP + 24, // while in ELFv1 ABI it is saved at SP + 40. if (R::getArch() == REGISTERS_PPC64 && returnAddress != 0) { pint_t sp = newRegisters.getRegister(UNW_REG_SP); pint_t r2 = 0; switch (addressSpace.get32(returnAddress)) { case PPC64_ELFV1_R2_LOAD_INST_ENCODING: r2 = addressSpace.get64(sp + PPC64_ELFV1_R2_OFFSET); break; case PPC64_ELFV2_R2_LOAD_INST_ENCODING: r2 = addressSpace.get64(sp + PPC64_ELFV2_R2_OFFSET); break; } if (r2) newRegisters.setRegister(UNW_PPC64_R2, r2); } #endif // Return address is address after call site instruction, so setting IP to // that does simulates a return. newRegisters.setIP(returnAddress); // Simulate the step by replacing the register set with the new ones. registers = newRegisters; return UNW_STEP_SUCCESS; } } return UNW_EBADFRAME; } template typename A::pint_t DwarfInstructions::evaluateExpression(pint_t expression, A &addressSpace, const R ®isters, pint_t initialStackValue) { const bool log = false; pint_t p = expression; pint_t expressionEnd = expression + 20; // temp, until len read pint_t length = (pint_t)addressSpace.getULEB128(p, expressionEnd); expressionEnd = p + length; if (log) fprintf(stderr, "evaluateExpression(): length=%" PRIu64 "\n", (uint64_t)length); pint_t stack[100]; pint_t *sp = stack; *(++sp) = initialStackValue; while (p < expressionEnd) { if (log) { for (pint_t *t = sp; t > stack; --t) { fprintf(stderr, "sp[] = 0x%" PRIx64 "\n", (uint64_t)(*t)); } } uint8_t opcode = addressSpace.get8(p++); sint_t svalue, svalue2; pint_t value; uint32_t reg; switch (opcode) { case DW_OP_addr: // push immediate address sized value value = addressSpace.getP(p); p += sizeof(pint_t); *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_deref: // pop stack, dereference, push result value = *sp--; *(++sp) = addressSpace.getP(value); if (log) fprintf(stderr, "dereference 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_const1u: // push immediate 1 byte value value = addressSpace.get8(p); p += 1; *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_const1s: // push immediate 1 byte signed value svalue = (int8_t) addressSpace.get8(p); p += 1; *(++sp) = (pint_t)svalue; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)svalue); break; case DW_OP_const2u: // push immediate 2 byte value value = addressSpace.get16(p); p += 2; *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_const2s: // push immediate 2 byte signed value svalue = (int16_t) addressSpace.get16(p); p += 2; *(++sp) = (pint_t)svalue; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)svalue); break; case DW_OP_const4u: // push immediate 4 byte value value = addressSpace.get32(p); p += 4; *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_const4s: // push immediate 4 byte signed value svalue = (int32_t)addressSpace.get32(p); p += 4; *(++sp) = (pint_t)svalue; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)svalue); break; case DW_OP_const8u: // push immediate 8 byte value value = (pint_t)addressSpace.get64(p); p += 8; *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_const8s: // push immediate 8 byte signed value value = (pint_t)addressSpace.get64(p); p += 8; *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_constu: // push immediate ULEB128 value value = (pint_t)addressSpace.getULEB128(p, expressionEnd); *(++sp) = value; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_consts: // push immediate SLEB128 value svalue = (sint_t)addressSpace.getSLEB128(p, expressionEnd); *(++sp) = (pint_t)svalue; if (log) fprintf(stderr, "push 0x%" PRIx64 "\n", (uint64_t)svalue); break; case DW_OP_dup: // push top of stack value = *sp; *(++sp) = value; if (log) fprintf(stderr, "duplicate top of stack\n"); break; case DW_OP_drop: // pop --sp; if (log) fprintf(stderr, "pop top of stack\n"); break; case DW_OP_over: // dup second value = sp[-1]; *(++sp) = value; if (log) fprintf(stderr, "duplicate second in stack\n"); break; case DW_OP_pick: // pick from reg = addressSpace.get8(p); p += 1; value = sp[-(int)reg]; *(++sp) = value; if (log) fprintf(stderr, "duplicate %d in stack\n", reg); break; case DW_OP_swap: // swap top two value = sp[0]; sp[0] = sp[-1]; sp[-1] = value; if (log) fprintf(stderr, "swap top of stack\n"); break; case DW_OP_rot: // rotate top three value = sp[0]; sp[0] = sp[-1]; sp[-1] = sp[-2]; sp[-2] = value; if (log) fprintf(stderr, "rotate top three of stack\n"); break; case DW_OP_xderef: // pop stack, dereference, push result value = *sp--; *sp = *((pint_t*)value); if (log) fprintf(stderr, "x-dereference 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_abs: svalue = (sint_t)*sp; if (svalue < 0) *sp = (pint_t)(-svalue); if (log) fprintf(stderr, "abs\n"); break; case DW_OP_and: value = *sp--; *sp &= value; if (log) fprintf(stderr, "and\n"); break; case DW_OP_div: svalue = (sint_t)(*sp--); svalue2 = (sint_t)*sp; *sp = (pint_t)(svalue2 / svalue); if (log) fprintf(stderr, "div\n"); break; case DW_OP_minus: value = *sp--; *sp = *sp - value; if (log) fprintf(stderr, "minus\n"); break; case DW_OP_mod: svalue = (sint_t)(*sp--); svalue2 = (sint_t)*sp; *sp = (pint_t)(svalue2 % svalue); if (log) fprintf(stderr, "module\n"); break; case DW_OP_mul: svalue = (sint_t)(*sp--); svalue2 = (sint_t)*sp; *sp = (pint_t)(svalue2 * svalue); if (log) fprintf(stderr, "mul\n"); break; case DW_OP_neg: *sp = 0 - *sp; if (log) fprintf(stderr, "neg\n"); break; case DW_OP_not: svalue = (sint_t)(*sp); *sp = (pint_t)(~svalue); if (log) fprintf(stderr, "not\n"); break; case DW_OP_or: value = *sp--; *sp |= value; if (log) fprintf(stderr, "or\n"); break; case DW_OP_plus: value = *sp--; *sp += value; if (log) fprintf(stderr, "plus\n"); break; case DW_OP_plus_uconst: // pop stack, add uelb128 constant, push result *sp += static_cast(addressSpace.getULEB128(p, expressionEnd)); if (log) fprintf(stderr, "add constant\n"); break; case DW_OP_shl: value = *sp--; *sp = *sp << value; if (log) fprintf(stderr, "shift left\n"); break; case DW_OP_shr: value = *sp--; *sp = *sp >> value; if (log) fprintf(stderr, "shift left\n"); break; case DW_OP_shra: value = *sp--; svalue = (sint_t)*sp; *sp = (pint_t)(svalue >> value); if (log) fprintf(stderr, "shift left arithmetic\n"); break; case DW_OP_xor: value = *sp--; *sp ^= value; if (log) fprintf(stderr, "xor\n"); break; case DW_OP_skip: svalue = (int16_t) addressSpace.get16(p); p += 2; p = (pint_t)((sint_t)p + svalue); if (log) fprintf(stderr, "skip %" PRIu64 "\n", (uint64_t)svalue); break; case DW_OP_bra: svalue = (int16_t) addressSpace.get16(p); p += 2; if (*sp--) p = (pint_t)((sint_t)p + svalue); if (log) fprintf(stderr, "bra %" PRIu64 "\n", (uint64_t)svalue); break; case DW_OP_eq: value = *sp--; *sp = (*sp == value); if (log) fprintf(stderr, "eq\n"); break; case DW_OP_ge: value = *sp--; *sp = (*sp >= value); if (log) fprintf(stderr, "ge\n"); break; case DW_OP_gt: value = *sp--; *sp = (*sp > value); if (log) fprintf(stderr, "gt\n"); break; case DW_OP_le: value = *sp--; *sp = (*sp <= value); if (log) fprintf(stderr, "le\n"); break; case DW_OP_lt: value = *sp--; *sp = (*sp < value); if (log) fprintf(stderr, "lt\n"); break; case DW_OP_ne: value = *sp--; *sp = (*sp != value); if (log) fprintf(stderr, "ne\n"); break; case DW_OP_lit0: case DW_OP_lit1: case DW_OP_lit2: case DW_OP_lit3: case DW_OP_lit4: case DW_OP_lit5: case DW_OP_lit6: case DW_OP_lit7: case DW_OP_lit8: case DW_OP_lit9: case DW_OP_lit10: case DW_OP_lit11: case DW_OP_lit12: case DW_OP_lit13: case DW_OP_lit14: case DW_OP_lit15: case DW_OP_lit16: case DW_OP_lit17: case DW_OP_lit18: case DW_OP_lit19: case DW_OP_lit20: case DW_OP_lit21: case DW_OP_lit22: case DW_OP_lit23: case DW_OP_lit24: case DW_OP_lit25: case DW_OP_lit26: case DW_OP_lit27: case DW_OP_lit28: case DW_OP_lit29: case DW_OP_lit30: case DW_OP_lit31: value = static_cast(opcode - DW_OP_lit0); *(++sp) = value; if (log) fprintf(stderr, "push literal 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_reg0: case DW_OP_reg1: case DW_OP_reg2: case DW_OP_reg3: case DW_OP_reg4: case DW_OP_reg5: case DW_OP_reg6: case DW_OP_reg7: case DW_OP_reg8: case DW_OP_reg9: case DW_OP_reg10: case DW_OP_reg11: case DW_OP_reg12: case DW_OP_reg13: case DW_OP_reg14: case DW_OP_reg15: case DW_OP_reg16: case DW_OP_reg17: case DW_OP_reg18: case DW_OP_reg19: case DW_OP_reg20: case DW_OP_reg21: case DW_OP_reg22: case DW_OP_reg23: case DW_OP_reg24: case DW_OP_reg25: case DW_OP_reg26: case DW_OP_reg27: case DW_OP_reg28: case DW_OP_reg29: case DW_OP_reg30: case DW_OP_reg31: reg = static_cast(opcode - DW_OP_reg0); *(++sp) = registers.getRegister((int)reg); if (log) fprintf(stderr, "push reg %d\n", reg); break; case DW_OP_regx: reg = static_cast(addressSpace.getULEB128(p, expressionEnd)); *(++sp) = registers.getRegister((int)reg); if (log) fprintf(stderr, "push reg %d + 0x%" PRIx64 "\n", reg, (uint64_t)svalue); break; case DW_OP_breg0: case DW_OP_breg1: case DW_OP_breg2: case DW_OP_breg3: case DW_OP_breg4: case DW_OP_breg5: case DW_OP_breg6: case DW_OP_breg7: case DW_OP_breg8: case DW_OP_breg9: case DW_OP_breg10: case DW_OP_breg11: case DW_OP_breg12: case DW_OP_breg13: case DW_OP_breg14: case DW_OP_breg15: case DW_OP_breg16: case DW_OP_breg17: case DW_OP_breg18: case DW_OP_breg19: case DW_OP_breg20: case DW_OP_breg21: case DW_OP_breg22: case DW_OP_breg23: case DW_OP_breg24: case DW_OP_breg25: case DW_OP_breg26: case DW_OP_breg27: case DW_OP_breg28: case DW_OP_breg29: case DW_OP_breg30: case DW_OP_breg31: reg = static_cast(opcode - DW_OP_breg0); svalue = (sint_t)addressSpace.getSLEB128(p, expressionEnd); svalue += static_cast(registers.getRegister((int)reg)); *(++sp) = (pint_t)(svalue); if (log) fprintf(stderr, "push reg %d + 0x%" PRIx64 "\n", reg, (uint64_t)svalue); break; case DW_OP_bregx: reg = static_cast(addressSpace.getULEB128(p, expressionEnd)); svalue = (sint_t)addressSpace.getSLEB128(p, expressionEnd); svalue += static_cast(registers.getRegister((int)reg)); *(++sp) = (pint_t)(svalue); if (log) fprintf(stderr, "push reg %d + 0x%" PRIx64 "\n", reg, (uint64_t)svalue); break; case DW_OP_fbreg: _LIBUNWIND_ABORT("DW_OP_fbreg not implemented"); break; case DW_OP_piece: _LIBUNWIND_ABORT("DW_OP_piece not implemented"); break; case DW_OP_deref_size: // pop stack, dereference, push result value = *sp--; switch (addressSpace.get8(p++)) { case 1: value = addressSpace.get8(value); break; case 2: value = addressSpace.get16(value); break; case 4: value = addressSpace.get32(value); break; case 8: value = (pint_t)addressSpace.get64(value); break; default: _LIBUNWIND_ABORT("DW_OP_deref_size with bad size"); } *(++sp) = value; if (log) fprintf(stderr, "sized dereference 0x%" PRIx64 "\n", (uint64_t)value); break; case DW_OP_xderef_size: case DW_OP_nop: case DW_OP_push_object_addres: case DW_OP_call2: case DW_OP_call4: case DW_OP_call_ref: default: _LIBUNWIND_ABORT("DWARF opcode not implemented"); } } if (log) fprintf(stderr, "expression evaluates to 0x%" PRIx64 "\n", (uint64_t)*sp); return *sp; } } // namespace libunwind #endif // __DWARF_INSTRUCTIONS_HPP__ ================================================ FILE: ThirdParty/libunwind/src/DwarfParser.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Parses DWARF CFIs (FDEs and CIEs). // //===----------------------------------------------------------------------===// #ifndef __DWARF_PARSER_HPP__ #define __DWARF_PARSER_HPP__ #include #include #include #include #include "libunwind.h" #include "dwarf2.h" #include "Registers.hpp" #include "config.h" namespace libunwind { /// CFI_Parser does basic parsing of a CFI (Call Frame Information) records. /// See DWARF Spec for details: /// http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html /// template class CFI_Parser { public: typedef typename A::pint_t pint_t; /// Information encoded in a CIE (Common Information Entry) struct CIE_Info { pint_t cieStart; pint_t cieLength; pint_t cieInstructions; uint8_t pointerEncoding; uint8_t lsdaEncoding; uint8_t personalityEncoding; uint8_t personalityOffsetInCIE; pint_t personality; uint32_t codeAlignFactor; int dataAlignFactor; bool isSignalFrame; bool fdesHaveAugmentationData; uint8_t returnAddressRegister; #if defined(_LIBUNWIND_TARGET_AARCH64) bool addressesSignedWithBKey; bool mteTaggedFrame; #endif }; /// Information about an FDE (Frame Description Entry) struct FDE_Info { pint_t fdeStart; pint_t fdeLength; pint_t fdeInstructions; pint_t pcStart; pint_t pcEnd; pint_t lsda; }; enum { kMaxRegisterNumber = _LIBUNWIND_HIGHEST_DWARF_REGISTER }; enum RegisterSavedWhere { kRegisterUnused, kRegisterUndefined, kRegisterInCFA, kRegisterInCFADecrypt, // sparc64 specific kRegisterOffsetFromCFA, kRegisterInRegister, kRegisterAtExpression, kRegisterIsExpression }; struct RegisterLocation { RegisterSavedWhere location; bool initialStateSaved; int64_t value; }; /// Information about a frame layout and registers saved determined /// by "running" the DWARF FDE "instructions" struct PrologInfo { uint32_t cfaRegister; int32_t cfaRegisterOffset; // CFA = (cfaRegister)+cfaRegisterOffset int64_t cfaExpression; // CFA = expression uint32_t spExtraArgSize; RegisterLocation savedRegisters[kMaxRegisterNumber + 1]; #if defined(_LIBUNWIND_TARGET_AARCH64) pint_t ptrAuthDiversifier; #endif enum class InitializeTime { kLazy, kNormal }; // When saving registers, this data structure is lazily initialized. PrologInfo(InitializeTime IT = InitializeTime::kNormal) { if (IT == InitializeTime::kNormal) memset(this, 0, sizeof(*this)); } void checkSaveRegister(uint64_t reg, PrologInfo &initialState) { if (!savedRegisters[reg].initialStateSaved) { initialState.savedRegisters[reg] = savedRegisters[reg]; savedRegisters[reg].initialStateSaved = true; } } void setRegister(uint64_t reg, RegisterSavedWhere newLocation, int64_t newValue, PrologInfo &initialState) { checkSaveRegister(reg, initialState); savedRegisters[reg].location = newLocation; savedRegisters[reg].value = newValue; } void setRegisterLocation(uint64_t reg, RegisterSavedWhere newLocation, PrologInfo &initialState) { checkSaveRegister(reg, initialState); savedRegisters[reg].location = newLocation; } void setRegisterValue(uint64_t reg, int64_t newValue, PrologInfo &initialState) { checkSaveRegister(reg, initialState); savedRegisters[reg].value = newValue; } void restoreRegisterToInitialState(uint64_t reg, PrologInfo &initialState) { if (savedRegisters[reg].initialStateSaved) savedRegisters[reg] = initialState.savedRegisters[reg]; // else the register still holds its initial state } }; struct PrologInfoStackEntry { PrologInfoStackEntry(PrologInfoStackEntry *n, const PrologInfo &i) : next(n), info(i) {} PrologInfoStackEntry *next; PrologInfo info; }; struct RememberStack { PrologInfoStackEntry *entry; RememberStack() : entry(nullptr) {} ~RememberStack() { #if defined(_LIBUNWIND_REMEMBER_CLEANUP_NEEDED) // Clean up rememberStack. Even in the case where every // DW_CFA_remember_state is paired with a DW_CFA_restore_state, // parseInstructions can skip restore opcodes if it reaches the target PC // and stops interpreting, so we have to make sure we don't leak memory. while (entry) { PrologInfoStackEntry *next = entry->next; _LIBUNWIND_REMEMBER_FREE(entry); entry = next; } #endif } }; static bool findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart, size_t sectionLength, pint_t fdeHint, FDE_Info *fdeInfo, CIE_Info *cieInfo); static const char *decodeFDE(A &addressSpace, pint_t fdeStart, FDE_Info *fdeInfo, CIE_Info *cieInfo, bool useCIEInfo = false); static bool parseFDEInstructions(A &addressSpace, const FDE_Info &fdeInfo, const CIE_Info &cieInfo, pint_t upToPC, int arch, PrologInfo *results); static const char *parseCIE(A &addressSpace, pint_t cie, CIE_Info *cieInfo); }; /// Parse a FDE into a CIE_Info and an FDE_Info. If useCIEInfo is /// true, treat cieInfo as already-parsed CIE_Info (whose start offset /// must match the one specified by the FDE) rather than parsing the /// one indicated within the FDE. template const char *CFI_Parser::decodeFDE(A &addressSpace, pint_t fdeStart, FDE_Info *fdeInfo, CIE_Info *cieInfo, bool useCIEInfo) { pint_t p = fdeStart; pint_t cfiLength = (pint_t)addressSpace.get32(p); p += 4; if (cfiLength == 0xffffffff) { // 0xffffffff means length is really next 8 bytes cfiLength = (pint_t)addressSpace.get64(p); p += 8; } if (cfiLength == 0) return "FDE has zero length"; // zero terminator uint32_t ciePointer = addressSpace.get32(p); if (ciePointer == 0) return "FDE is really a CIE"; // this is a CIE not an FDE pint_t nextCFI = p + cfiLength; pint_t cieStart = p - ciePointer; if (useCIEInfo) { if (cieInfo->cieStart != cieStart) return "CIE start does not match"; } else { const char *err = parseCIE(addressSpace, cieStart, cieInfo); if (err != NULL) return err; } p += 4; // Parse pc begin and range. pint_t pcStart = addressSpace.getEncodedP(p, nextCFI, cieInfo->pointerEncoding); pint_t pcRange = addressSpace.getEncodedP(p, nextCFI, cieInfo->pointerEncoding & 0x0F); // Parse rest of info. fdeInfo->lsda = 0; // Check for augmentation length. if (cieInfo->fdesHaveAugmentationData) { pint_t augLen = (pint_t)addressSpace.getULEB128(p, nextCFI); pint_t endOfAug = p + augLen; if (cieInfo->lsdaEncoding != DW_EH_PE_omit) { // Peek at value (without indirection). Zero means no LSDA. pint_t lsdaStart = p; if (addressSpace.getEncodedP(p, nextCFI, cieInfo->lsdaEncoding & 0x0F) != 0) { // Reset pointer and re-parse LSDA address. p = lsdaStart; fdeInfo->lsda = addressSpace.getEncodedP(p, nextCFI, cieInfo->lsdaEncoding); } } p = endOfAug; } fdeInfo->fdeStart = fdeStart; fdeInfo->fdeLength = nextCFI - fdeStart; fdeInfo->fdeInstructions = p; fdeInfo->pcStart = pcStart; fdeInfo->pcEnd = pcStart + pcRange; return NULL; // success } /// Scan an eh_frame section to find an FDE for a pc template bool CFI_Parser::findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart, size_t sectionLength, pint_t fdeHint, FDE_Info *fdeInfo, CIE_Info *cieInfo) { //fprintf(stderr, "findFDE(0x%llX)\n", (long long)pc); pint_t p = (fdeHint != 0) ? fdeHint : ehSectionStart; const pint_t ehSectionEnd = (sectionLength == SIZE_MAX) ? static_cast(-1) : (ehSectionStart + sectionLength); while (p < ehSectionEnd) { pint_t currentCFI = p; //fprintf(stderr, "findFDE() CFI at 0x%llX\n", (long long)p); pint_t cfiLength = addressSpace.get32(p); p += 4; if (cfiLength == 0xffffffff) { // 0xffffffff means length is really next 8 bytes cfiLength = (pint_t)addressSpace.get64(p); p += 8; } if (cfiLength == 0) return false; // zero terminator uint32_t id = addressSpace.get32(p); if (id == 0) { // Skip over CIEs. p += cfiLength; } else { // Process FDE to see if it covers pc. pint_t nextCFI = p + cfiLength; uint32_t ciePointer = addressSpace.get32(p); pint_t cieStart = p - ciePointer; // Validate pointer to CIE is within section. if ((ehSectionStart <= cieStart) && (cieStart < ehSectionEnd)) { if (parseCIE(addressSpace, cieStart, cieInfo) == NULL) { p += 4; // Parse pc begin and range. pint_t pcStart = addressSpace.getEncodedP(p, nextCFI, cieInfo->pointerEncoding); pint_t pcRange = addressSpace.getEncodedP( p, nextCFI, cieInfo->pointerEncoding & 0x0F); // Test if pc is within the function this FDE covers. if ((pcStart < pc) && (pc <= pcStart + pcRange)) { // parse rest of info fdeInfo->lsda = 0; // check for augmentation length if (cieInfo->fdesHaveAugmentationData) { pint_t augLen = (pint_t)addressSpace.getULEB128(p, nextCFI); pint_t endOfAug = p + augLen; if (cieInfo->lsdaEncoding != DW_EH_PE_omit) { // Peek at value (without indirection). Zero means no LSDA. pint_t lsdaStart = p; if (addressSpace.getEncodedP( p, nextCFI, cieInfo->lsdaEncoding & 0x0F) != 0) { // Reset pointer and re-parse LSDA address. p = lsdaStart; fdeInfo->lsda = addressSpace .getEncodedP(p, nextCFI, cieInfo->lsdaEncoding); } } p = endOfAug; } fdeInfo->fdeStart = currentCFI; fdeInfo->fdeLength = nextCFI - currentCFI; fdeInfo->fdeInstructions = p; fdeInfo->pcStart = pcStart; fdeInfo->pcEnd = pcStart + pcRange; return true; } else { // pc is not in begin/range, skip this FDE } } else { // Malformed CIE, now augmentation describing pc range encoding. } } else { // malformed FDE. CIE is bad } p = nextCFI; } } return false; } /// Extract info from a CIE template const char *CFI_Parser::parseCIE(A &addressSpace, pint_t cie, CIE_Info *cieInfo) { cieInfo->pointerEncoding = 0; cieInfo->lsdaEncoding = DW_EH_PE_omit; cieInfo->personalityEncoding = 0; cieInfo->personalityOffsetInCIE = 0; cieInfo->personality = 0; cieInfo->codeAlignFactor = 0; cieInfo->dataAlignFactor = 0; cieInfo->isSignalFrame = false; cieInfo->fdesHaveAugmentationData = false; #if defined(_LIBUNWIND_TARGET_AARCH64) cieInfo->addressesSignedWithBKey = false; cieInfo->mteTaggedFrame = false; #endif cieInfo->cieStart = cie; pint_t p = cie; pint_t cieLength = (pint_t)addressSpace.get32(p); p += 4; pint_t cieContentEnd = p + cieLength; if (cieLength == 0xffffffff) { // 0xffffffff means length is really next 8 bytes cieLength = (pint_t)addressSpace.get64(p); p += 8; cieContentEnd = p + cieLength; } if (cieLength == 0) return NULL; // CIE ID is always 0 if (addressSpace.get32(p) != 0) return "CIE ID is not zero"; p += 4; // Version is always 1 or 3 uint8_t version = addressSpace.get8(p); if ((version != 1) && (version != 3)) return "CIE version is not 1 or 3"; ++p; // save start of augmentation string and find end pint_t strStart = p; while (addressSpace.get8(p) != 0) ++p; ++p; // parse code alignment factor cieInfo->codeAlignFactor = (uint32_t)addressSpace.getULEB128(p, cieContentEnd); // parse data alignment factor cieInfo->dataAlignFactor = (int)addressSpace.getSLEB128(p, cieContentEnd); // parse return address register uint64_t raReg = (version == 1) ? addressSpace.get8(p++) : addressSpace.getULEB128(p, cieContentEnd); assert(raReg < 255 && "return address register too large"); cieInfo->returnAddressRegister = (uint8_t)raReg; // parse augmentation data based on augmentation string const char *result = NULL; if (addressSpace.get8(strStart) == 'z') { // parse augmentation data length addressSpace.getULEB128(p, cieContentEnd); for (pint_t s = strStart; addressSpace.get8(s) != '\0'; ++s) { switch (addressSpace.get8(s)) { case 'z': cieInfo->fdesHaveAugmentationData = true; break; case 'P': cieInfo->personalityEncoding = addressSpace.get8(p); ++p; cieInfo->personalityOffsetInCIE = (uint8_t)(p - cie); cieInfo->personality = addressSpace .getEncodedP(p, cieContentEnd, cieInfo->personalityEncoding); break; case 'L': cieInfo->lsdaEncoding = addressSpace.get8(p); ++p; break; case 'R': cieInfo->pointerEncoding = addressSpace.get8(p); ++p; break; case 'S': cieInfo->isSignalFrame = true; break; #if defined(_LIBUNWIND_TARGET_AARCH64) case 'B': cieInfo->addressesSignedWithBKey = true; break; case 'G': cieInfo->mteTaggedFrame = true; break; #endif default: // ignore unknown letters break; } } } cieInfo->cieLength = cieContentEnd - cieInfo->cieStart; cieInfo->cieInstructions = p; return result; } /// "run" the DWARF instructions and create the abstract PrologInfo for an FDE template bool CFI_Parser::parseFDEInstructions(A &addressSpace, const FDE_Info &fdeInfo, const CIE_Info &cieInfo, pint_t upToPC, int arch, PrologInfo *results) { // Alloca is used for the allocation of the rememberStack entries. It removes // the dependency on new/malloc but the below for loop can not be refactored // into functions. Entry could be saved during the processing of a CIE and // restored by an FDE. RememberStack rememberStack; struct ParseInfo { pint_t instructions; pint_t instructionsEnd; pint_t pcoffset; }; ParseInfo parseInfoArray[] = { {cieInfo.cieInstructions, cieInfo.cieStart + cieInfo.cieLength, (pint_t)(-1)}, {fdeInfo.fdeInstructions, fdeInfo.fdeStart + fdeInfo.fdeLength, upToPC - fdeInfo.pcStart}}; for (const auto &info : parseInfoArray) { pint_t p = info.instructions; pint_t instructionsEnd = info.instructionsEnd; pint_t pcoffset = info.pcoffset; pint_t codeOffset = 0; // initialState initialized as registers in results are modified. Use // PrologInfo accessor functions to avoid reading uninitialized data. PrologInfo initialState(PrologInfo::InitializeTime::kLazy); _LIBUNWIND_TRACE_DWARF("parseFDEInstructions(instructions=0x%0" PRIx64 ")\n", static_cast(instructionsEnd)); // see DWARF Spec, section 6.4.2 for details on unwind opcodes while ((p < instructionsEnd) && (codeOffset <= pcoffset)) { uint64_t reg; uint64_t reg2; int64_t offset; uint64_t length; uint8_t opcode = addressSpace.get8(p); uint8_t operand; ++p; switch (opcode) { case DW_CFA_nop: _LIBUNWIND_TRACE_DWARF("DW_CFA_nop\n"); break; case DW_CFA_set_loc: codeOffset = addressSpace.getEncodedP(p, instructionsEnd, cieInfo.pointerEncoding); _LIBUNWIND_TRACE_DWARF("DW_CFA_set_loc\n"); break; case DW_CFA_advance_loc1: codeOffset += (addressSpace.get8(p) * cieInfo.codeAlignFactor); p += 1; _LIBUNWIND_TRACE_DWARF("DW_CFA_advance_loc1: new offset=%" PRIu64 "\n", static_cast(codeOffset)); break; case DW_CFA_advance_loc2: codeOffset += (addressSpace.get16(p) * cieInfo.codeAlignFactor); p += 2; _LIBUNWIND_TRACE_DWARF("DW_CFA_advance_loc2: new offset=%" PRIu64 "\n", static_cast(codeOffset)); break; case DW_CFA_advance_loc4: codeOffset += (addressSpace.get32(p) * cieInfo.codeAlignFactor); p += 4; _LIBUNWIND_TRACE_DWARF("DW_CFA_advance_loc4: new offset=%" PRIu64 "\n", static_cast(codeOffset)); break; case DW_CFA_offset_extended: reg = addressSpace.getULEB128(p, instructionsEnd); offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_offset_extended DWARF unwind, reg too big"); return false; } results->setRegister(reg, kRegisterInCFA, offset, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_offset_extended(reg=%" PRIu64 ", " "offset=%" PRId64 ")\n", reg, offset); break; case DW_CFA_restore_extended: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_restore_extended DWARF unwind, reg too big"); return false; } results->restoreRegisterToInitialState(reg, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_restore_extended(reg=%" PRIu64 ")\n", reg); break; case DW_CFA_undefined: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_undefined DWARF unwind, reg too big"); return false; } results->setRegisterLocation(reg, kRegisterUndefined, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_undefined(reg=%" PRIu64 ")\n", reg); break; case DW_CFA_same_value: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_same_value DWARF unwind, reg too big"); return false; } // DW_CFA_same_value unsupported // "same value" means register was stored in frame, but its current // value has not changed, so no need to restore from frame. // We model this as if the register was never saved. results->setRegisterLocation(reg, kRegisterUnused, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_same_value(reg=%" PRIu64 ")\n", reg); break; case DW_CFA_register: reg = addressSpace.getULEB128(p, instructionsEnd); reg2 = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_register DWARF unwind, reg too big"); return false; } if (reg2 > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_register DWARF unwind, reg2 too big"); return false; } results->setRegister(reg, kRegisterInRegister, (int64_t)reg2, initialState); _LIBUNWIND_TRACE_DWARF( "DW_CFA_register(reg=%" PRIu64 ", reg2=%" PRIu64 ")\n", reg, reg2); break; case DW_CFA_remember_state: { // Avoid operator new because that would be an upward dependency. // Avoid malloc because it needs heap allocation. PrologInfoStackEntry *entry = (PrologInfoStackEntry *)_LIBUNWIND_REMEMBER_ALLOC( sizeof(PrologInfoStackEntry)); if (entry != NULL) { entry->next = rememberStack.entry; entry->info = *results; rememberStack.entry = entry; } else { return false; } _LIBUNWIND_TRACE_DWARF("DW_CFA_remember_state\n"); break; } case DW_CFA_restore_state: if (rememberStack.entry != NULL) { PrologInfoStackEntry *top = rememberStack.entry; *results = top->info; rememberStack.entry = top->next; _LIBUNWIND_REMEMBER_FREE(top); } else { return false; } _LIBUNWIND_TRACE_DWARF("DW_CFA_restore_state\n"); break; case DW_CFA_def_cfa: reg = addressSpace.getULEB128(p, instructionsEnd); offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0("malformed DW_CFA_def_cfa DWARF unwind, reg too big"); return false; } results->cfaRegister = (uint32_t)reg; results->cfaRegisterOffset = (int32_t)offset; _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa(reg=%" PRIu64 ", offset=%" PRIu64 ")\n", reg, offset); break; case DW_CFA_def_cfa_register: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_def_cfa_register DWARF unwind, reg too big"); return false; } results->cfaRegister = (uint32_t)reg; _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa_register(%" PRIu64 ")\n", reg); break; case DW_CFA_def_cfa_offset: results->cfaRegisterOffset = (int32_t)addressSpace.getULEB128(p, instructionsEnd); _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa_offset(%d)\n", results->cfaRegisterOffset); break; case DW_CFA_def_cfa_expression: results->cfaRegister = 0; results->cfaExpression = (int64_t)p; length = addressSpace.getULEB128(p, instructionsEnd); assert(length < static_cast(~0) && "pointer overflow"); p += static_cast(length); _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa_expression(expression=0x%" PRIx64 ", length=%" PRIu64 ")\n", results->cfaExpression, length); break; case DW_CFA_expression: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_expression DWARF unwind, reg too big"); return false; } results->setRegister(reg, kRegisterAtExpression, (int64_t)p, initialState); length = addressSpace.getULEB128(p, instructionsEnd); assert(length < static_cast(~0) && "pointer overflow"); p += static_cast(length); _LIBUNWIND_TRACE_DWARF("DW_CFA_expression(reg=%" PRIu64 ", " "expression=0x%" PRIx64 ", " "length=%" PRIu64 ")\n", reg, results->savedRegisters[reg].value, length); break; case DW_CFA_offset_extended_sf: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_offset_extended_sf DWARF unwind, reg too big"); return false; } offset = addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; results->setRegister(reg, kRegisterInCFA, offset, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_offset_extended_sf(reg=%" PRIu64 ", " "offset=%" PRId64 ")\n", reg, offset); break; case DW_CFA_def_cfa_sf: reg = addressSpace.getULEB128(p, instructionsEnd); offset = addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_def_cfa_sf DWARF unwind, reg too big"); return false; } results->cfaRegister = (uint32_t)reg; results->cfaRegisterOffset = (int32_t)offset; _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa_sf(reg=%" PRIu64 ", " "offset=%" PRId64 ")\n", reg, offset); break; case DW_CFA_def_cfa_offset_sf: results->cfaRegisterOffset = (int32_t)(addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor); _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa_offset_sf(%d)\n", results->cfaRegisterOffset); break; case DW_CFA_val_offset: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG( "malformed DW_CFA_val_offset DWARF unwind, reg (%" PRIu64 ") out of range\n", reg); return false; } offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; results->setRegister(reg, kRegisterOffsetFromCFA, offset, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_val_offset(reg=%" PRIu64 ", " "offset=%" PRId64 "\n", reg, offset); break; case DW_CFA_val_offset_sf: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_val_offset_sf DWARF unwind, reg too big"); return false; } offset = addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; results->setRegister(reg, kRegisterOffsetFromCFA, offset, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_val_offset_sf(reg=%" PRIu64 ", " "offset=%" PRId64 "\n", reg, offset); break; case DW_CFA_val_expression: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0( "malformed DW_CFA_val_expression DWARF unwind, reg too big"); return false; } results->setRegister(reg, kRegisterIsExpression, (int64_t)p, initialState); length = addressSpace.getULEB128(p, instructionsEnd); assert(length < static_cast(~0) && "pointer overflow"); p += static_cast(length); _LIBUNWIND_TRACE_DWARF("DW_CFA_val_expression(reg=%" PRIu64 ", " "expression=0x%" PRIx64 ", length=%" PRIu64 ")\n", reg, results->savedRegisters[reg].value, length); break; case DW_CFA_GNU_args_size: length = addressSpace.getULEB128(p, instructionsEnd); results->spExtraArgSize = (uint32_t)length; _LIBUNWIND_TRACE_DWARF("DW_CFA_GNU_args_size(%" PRIu64 ")\n", length); break; case DW_CFA_GNU_negative_offset_extended: reg = addressSpace.getULEB128(p, instructionsEnd); if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG0("malformed DW_CFA_GNU_negative_offset_extended DWARF " "unwind, reg too big"); return false; } offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; results->setRegister(reg, kRegisterInCFA, -offset, initialState); _LIBUNWIND_TRACE_DWARF( "DW_CFA_GNU_negative_offset_extended(%" PRId64 ")\n", offset); break; #if defined(_LIBUNWIND_TARGET_AARCH64) || defined(_LIBUNWIND_TARGET_SPARC) || \ defined(_LIBUNWIND_TARGET_SPARC64) // The same constant is used to represent different instructions on // AArch64 (negate_ra_state) and SPARC (window_save). static_assert(DW_CFA_AARCH64_negate_ra_state == DW_CFA_GNU_window_save, "uses the same constant"); case DW_CFA_AARCH64_negate_ra_state: switch (arch) { #if defined(_LIBUNWIND_TARGET_AARCH64) case REGISTERS_ARM64: { int64_t value = results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x1; results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_AARCH64_negate_ra_state\n"); } break; #endif #if defined(_LIBUNWIND_TARGET_SPARC) // case DW_CFA_GNU_window_save: case REGISTERS_SPARC: _LIBUNWIND_TRACE_DWARF("DW_CFA_GNU_window_save()\n"); for (reg = UNW_SPARC_O0; reg <= UNW_SPARC_O7; reg++) { results->setRegister(reg, kRegisterInRegister, ((int64_t)reg - UNW_SPARC_O0) + UNW_SPARC_I0, initialState); } for (reg = UNW_SPARC_L0; reg <= UNW_SPARC_I7; reg++) { results->setRegister(reg, kRegisterInCFA, ((int64_t)reg - UNW_SPARC_L0) * 4, initialState); } break; #endif #if defined(_LIBUNWIND_TARGET_SPARC64) // case DW_CFA_GNU_window_save: case REGISTERS_SPARC64: // Don't save %o0-%o7 on sparc64. // https://reviews.llvm.org/D32450#736405 for (reg = UNW_SPARC_L0; reg <= UNW_SPARC_I7; reg++) { if (reg == UNW_SPARC_I7) results->setRegister( reg, kRegisterInCFADecrypt, static_cast((reg - UNW_SPARC_L0) * sizeof(pint_t)), initialState); else results->setRegister( reg, kRegisterInCFA, static_cast((reg - UNW_SPARC_L0) * sizeof(pint_t)), initialState); } _LIBUNWIND_TRACE_DWARF("DW_CFA_GNU_window_save\n"); break; #endif } break; #if defined(_LIBUNWIND_TARGET_AARCH64) case DW_CFA_AARCH64_negate_ra_state_with_pc: { int64_t value = results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x3; results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value, initialState); // When calculating the value of the PC, it is assumed that the CFI // instruction is placed before the signing instruction, however it is // placed after. Because of this, we need to take into account the CFI // instruction is one instruction call later than expected, and reduce // the PC value by 4 bytes to compensate. results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset - 0x4; _LIBUNWIND_TRACE_DWARF( "DW_CFA_AARCH64_negate_ra_state_with_pc(pc=0x%" PRIx64 ")\n", static_cast(results->ptrAuthDiversifier)); } break; #endif #else (void)arch; #endif default: operand = opcode & 0x3F; switch (opcode & 0xC0) { case DW_CFA_offset: reg = operand; if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG("malformed DW_CFA_offset DWARF unwind, reg (%" PRIu64 ") out of range", reg); return false; } offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd) * cieInfo.dataAlignFactor; results->setRegister(reg, kRegisterInCFA, offset, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_offset(reg=%d, offset=%" PRId64 ")\n", operand, offset); break; case DW_CFA_advance_loc: codeOffset += operand * cieInfo.codeAlignFactor; _LIBUNWIND_TRACE_DWARF("DW_CFA_advance_loc: new offset=%" PRIu64 "\n", static_cast(codeOffset)); break; case DW_CFA_restore: reg = operand; if (reg > kMaxRegisterNumber) { _LIBUNWIND_LOG( "malformed DW_CFA_restore DWARF unwind, reg (%" PRIu64 ") out of range", reg); return false; } results->restoreRegisterToInitialState(reg, initialState); _LIBUNWIND_TRACE_DWARF("DW_CFA_restore(reg=%" PRIu64 ")\n", static_cast(operand)); break; default: _LIBUNWIND_TRACE_DWARF("unknown CFA opcode 0x%02X\n", opcode); return false; } } } } return true; } } // namespace libunwind #endif // __DWARF_PARSER_HPP__ ================================================ FILE: ThirdParty/libunwind/src/EHHeaderParser.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Parses ELF .eh_frame_hdr sections. // //===----------------------------------------------------------------------===// #ifndef __EHHEADERPARSER_HPP__ #define __EHHEADERPARSER_HPP__ #include "libunwind.h" #include "DwarfParser.hpp" namespace libunwind { /// \brief EHHeaderParser does basic parsing of an ELF .eh_frame_hdr section. /// /// See DWARF spec for details: /// http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html /// template class EHHeaderParser { public: typedef typename A::pint_t pint_t; /// Information encoded in the EH frame header. struct EHHeaderInfo { pint_t eh_frame_ptr; size_t fde_count; pint_t table; uint8_t table_enc; }; static bool decodeEHHdr(A &addressSpace, pint_t ehHdrStart, pint_t ehHdrEnd, EHHeaderInfo &ehHdrInfo); static bool findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart, uint32_t sectionLength, typename CFI_Parser::FDE_Info *fdeInfo, typename CFI_Parser::CIE_Info *cieInfo); private: static bool decodeTableEntry(A &addressSpace, pint_t &tableEntry, pint_t ehHdrStart, pint_t ehHdrEnd, uint8_t tableEnc, typename CFI_Parser::FDE_Info *fdeInfo, typename CFI_Parser::CIE_Info *cieInfo); static size_t getTableEntrySize(uint8_t tableEnc); }; template bool EHHeaderParser::decodeEHHdr(A &addressSpace, pint_t ehHdrStart, pint_t ehHdrEnd, EHHeaderInfo &ehHdrInfo) { pint_t p = ehHdrStart; // Ensure that we don't read data beyond the end of .eh_frame_hdr if (ehHdrEnd - ehHdrStart < 4) { // Don't print a message for an empty .eh_frame_hdr (this can happen if // the linker script defines symbols for it even in the empty case). if (ehHdrEnd == ehHdrStart) return false; _LIBUNWIND_LOG("unsupported .eh_frame_hdr at %" PRIx64 ": need at least 4 bytes of data but only got %zd", static_cast(ehHdrStart), static_cast(ehHdrEnd - ehHdrStart)); return false; } uint8_t version = addressSpace.get8(p++); if (version != 1) { _LIBUNWIND_LOG("unsupported .eh_frame_hdr version: %" PRIu8 " at %" PRIx64, version, static_cast(ehHdrStart)); return false; } uint8_t eh_frame_ptr_enc = addressSpace.get8(p++); uint8_t fde_count_enc = addressSpace.get8(p++); ehHdrInfo.table_enc = addressSpace.get8(p++); ehHdrInfo.eh_frame_ptr = addressSpace.getEncodedP(p, ehHdrEnd, eh_frame_ptr_enc, ehHdrStart); ehHdrInfo.fde_count = fde_count_enc == DW_EH_PE_omit ? 0 : addressSpace.getEncodedP(p, ehHdrEnd, fde_count_enc, ehHdrStart); ehHdrInfo.table = p; return true; } template bool EHHeaderParser::decodeTableEntry( A &addressSpace, pint_t &tableEntry, pint_t ehHdrStart, pint_t ehHdrEnd, uint8_t tableEnc, typename CFI_Parser::FDE_Info *fdeInfo, typename CFI_Parser::CIE_Info *cieInfo) { // Have to decode the whole FDE for the PC range anyway, so just throw away // the PC start. addressSpace.getEncodedP(tableEntry, ehHdrEnd, tableEnc, ehHdrStart); pint_t fde = addressSpace.getEncodedP(tableEntry, ehHdrEnd, tableEnc, ehHdrStart); const char *message = CFI_Parser::decodeFDE(addressSpace, fde, fdeInfo, cieInfo); if (message != NULL) { _LIBUNWIND_DEBUG_LOG("EHHeaderParser::decodeTableEntry: bad fde: %s", message); return false; } return true; } template bool EHHeaderParser::findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart, uint32_t sectionLength, typename CFI_Parser::FDE_Info *fdeInfo, typename CFI_Parser::CIE_Info *cieInfo) { pint_t ehHdrEnd = ehHdrStart + sectionLength; EHHeaderParser::EHHeaderInfo hdrInfo; if (!EHHeaderParser::decodeEHHdr(addressSpace, ehHdrStart, ehHdrEnd, hdrInfo)) return false; if (hdrInfo.fde_count == 0) return false; size_t tableEntrySize = getTableEntrySize(hdrInfo.table_enc); pint_t tableEntry; size_t low = 0; for (size_t len = hdrInfo.fde_count; len > 1;) { size_t mid = low + (len / 2); tableEntry = hdrInfo.table + mid * tableEntrySize; pint_t start = addressSpace.getEncodedP(tableEntry, ehHdrEnd, hdrInfo.table_enc, ehHdrStart); if (start == pc) { low = mid; break; } else if (start < pc) { low = mid; len -= (len / 2); } else { len /= 2; } } tableEntry = hdrInfo.table + low * tableEntrySize; if (decodeTableEntry(addressSpace, tableEntry, ehHdrStart, ehHdrEnd, hdrInfo.table_enc, fdeInfo, cieInfo)) { if (pc >= fdeInfo->pcStart && pc < fdeInfo->pcEnd) return true; } return false; } template size_t EHHeaderParser::getTableEntrySize(uint8_t tableEnc) { switch (tableEnc & 0x0f) { case DW_EH_PE_sdata2: case DW_EH_PE_udata2: return 4; case DW_EH_PE_sdata4: case DW_EH_PE_udata4: return 8; case DW_EH_PE_sdata8: case DW_EH_PE_udata8: return 16; case DW_EH_PE_sleb128: case DW_EH_PE_uleb128: _LIBUNWIND_ABORT("Can't binary search on variable length encoded data."); case DW_EH_PE_omit: return 0; default: _LIBUNWIND_ABORT("Unknown DWARF encoding for search table."); } } } #endif ================================================ FILE: ThirdParty/libunwind/src/FrameHeaderCache.hpp ================================================ //===-FrameHeaderCache.hpp ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // Cache the elf program headers necessary to unwind the stack more efficiently // in the presence of many dsos. // //===----------------------------------------------------------------------===// #ifndef __FRAMEHEADER_CACHE_HPP__ #define __FRAMEHEADER_CACHE_HPP__ #include "config.h" #include #ifdef _LIBUNWIND_DEBUG_FRAMEHEADER_CACHE #define _LIBUNWIND_FRAMEHEADERCACHE_TRACE0(x) _LIBUNWIND_LOG0(x) #define _LIBUNWIND_FRAMEHEADERCACHE_TRACE(msg, ...) \ _LIBUNWIND_LOG(msg, __VA_ARGS__) #else #define _LIBUNWIND_FRAMEHEADERCACHE_TRACE0(x) #define _LIBUNWIND_FRAMEHEADERCACHE_TRACE(msg, ...) #endif // This cache should only be be used from within a dl_iterate_phdr callback. // dl_iterate_phdr does the necessary synchronization to prevent problems // with concurrent access via the libc load lock. Adding synchronization // for other uses is possible, but not currently done. class _LIBUNWIND_HIDDEN FrameHeaderCache { struct CacheEntry { uintptr_t LowPC() { return Info.dso_base; } uintptr_t HighPC() { return Info.dso_base + Info.text_segment_length; } UnwindInfoSections Info; CacheEntry *Next; }; static const size_t kCacheEntryCount = 8; // Can't depend on the C++ standard library in libunwind, so use an array to // allocate the entries, and two linked lists for ordering unused and recently // used entries. FIXME: Would the extra memory for a doubly-linked list // be better than the runtime cost of traversing a very short singly-linked // list on a cache miss? The entries themselves are all small and consecutive, // so unlikely to cause page faults when following the pointers. The memory // spent on additional pointers could also be spent on more entries. CacheEntry Entries[kCacheEntryCount]; CacheEntry *MostRecentlyUsed; CacheEntry *Unused; void resetCache() { _LIBUNWIND_FRAMEHEADERCACHE_TRACE0("FrameHeaderCache reset"); MostRecentlyUsed = nullptr; Unused = &Entries[0]; for (size_t i = 0; i < kCacheEntryCount - 1; i++) { Entries[i].Next = &Entries[i + 1]; } Entries[kCacheEntryCount - 1].Next = nullptr; } bool cacheNeedsReset(dl_phdr_info *PInfo) { // C libraries increment dl_phdr_info.adds and dl_phdr_info.subs when // loading and unloading shared libraries. If these values change between // iterations of dl_iterate_phdr, then invalidate the cache. // These are static to avoid needing an initializer, and unsigned long long // because that is their type within the extended dl_phdr_info. Initialize // these to something extremely unlikely to be found upon the first call to // dl_iterate_phdr. static unsigned long long LastAdds = ULLONG_MAX; static unsigned long long LastSubs = ULLONG_MAX; if (PInfo->dlpi_adds != LastAdds || PInfo->dlpi_subs != LastSubs) { // Resetting the entire cache is a big hammer, but this path is rare-- // usually just on the very first call, when the cache is empty anyway--so // added complexity doesn't buy much. LastAdds = PInfo->dlpi_adds; LastSubs = PInfo->dlpi_subs; resetCache(); return true; } return false; } public: bool find(dl_phdr_info *PInfo, size_t, void *data) { if (cacheNeedsReset(PInfo) || MostRecentlyUsed == nullptr) return false; auto *CBData = static_cast(data); CacheEntry *Current = MostRecentlyUsed; CacheEntry *Previous = nullptr; while (Current != nullptr) { _LIBUNWIND_FRAMEHEADERCACHE_TRACE( "FrameHeaderCache check %lx in [%lx - %lx)", CBData->targetAddr, Current->LowPC(), Current->HighPC()); if (Current->LowPC() <= CBData->targetAddr && CBData->targetAddr < Current->HighPC()) { _LIBUNWIND_FRAMEHEADERCACHE_TRACE( "FrameHeaderCache hit %lx in [%lx - %lx)", CBData->targetAddr, Current->LowPC(), Current->HighPC()); if (Previous) { // If there is no Previous, then Current is already the // MostRecentlyUsed, and no need to move it up. Previous->Next = Current->Next; Current->Next = MostRecentlyUsed; MostRecentlyUsed = Current; } *CBData->sects = Current->Info; return true; } Previous = Current; Current = Current->Next; } _LIBUNWIND_FRAMEHEADERCACHE_TRACE("FrameHeaderCache miss for address %lx", CBData->targetAddr); return false; } void add(const UnwindInfoSections *UIS) { CacheEntry *Current = nullptr; if (Unused != nullptr) { Current = Unused; Unused = Unused->Next; } else { Current = MostRecentlyUsed; CacheEntry *Previous = nullptr; while (Current->Next != nullptr) { Previous = Current; Current = Current->Next; } Previous->Next = nullptr; _LIBUNWIND_FRAMEHEADERCACHE_TRACE("FrameHeaderCache evict [%lx - %lx)", Current->LowPC(), Current->HighPC()); } Current->Info = *UIS; Current->Next = MostRecentlyUsed; MostRecentlyUsed = Current; _LIBUNWIND_FRAMEHEADERCACHE_TRACE("FrameHeaderCache add [%lx - %lx)", MostRecentlyUsed->LowPC(), MostRecentlyUsed->HighPC()); } }; #endif // __FRAMEHEADER_CACHE_HPP__ ================================================ FILE: ThirdParty/libunwind/src/RWMutex.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Abstract interface to shared reader/writer log, hiding platform and // configuration differences. // //===----------------------------------------------------------------------===// #ifndef __RWMUTEX_HPP__ #define __RWMUTEX_HPP__ #if defined(_WIN32) #include #elif !defined(_LIBUNWIND_HAS_NO_THREADS) #include #if defined(__ELF__) && defined(_LIBUNWIND_LINK_PTHREAD_LIB) #pragma comment(lib, "pthread") #endif #endif namespace libunwind { #if defined(_LIBUNWIND_HAS_NO_THREADS) class _LIBUNWIND_HIDDEN RWMutex { public: bool lock_shared() { return true; } bool unlock_shared() { return true; } bool lock() { return true; } bool unlock() { return true; } }; #elif defined(_WIN32) class _LIBUNWIND_HIDDEN RWMutex { public: bool lock_shared() { AcquireSRWLockShared(&_lock); return true; } bool unlock_shared() { ReleaseSRWLockShared(&_lock); return true; } bool lock() { AcquireSRWLockExclusive(&_lock); return true; } bool unlock() { ReleaseSRWLockExclusive(&_lock); return true; } private: SRWLOCK _lock = SRWLOCK_INIT; }; #elif !defined(LIBUNWIND_USE_WEAK_PTHREAD) class _LIBUNWIND_HIDDEN RWMutex { public: bool lock_shared() { return pthread_rwlock_rdlock(&_lock) == 0; } bool unlock_shared() { return pthread_rwlock_unlock(&_lock) == 0; } bool lock() { return pthread_rwlock_wrlock(&_lock) == 0; } bool unlock() { return pthread_rwlock_unlock(&_lock) == 0; } private: pthread_rwlock_t _lock = PTHREAD_RWLOCK_INITIALIZER; }; #else extern "C" int __attribute__((weak)) pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); extern "C" int __attribute__((weak)) pthread_rwlock_rdlock(pthread_rwlock_t *lock); extern "C" int __attribute__((weak)) pthread_rwlock_wrlock(pthread_rwlock_t *lock); extern "C" int __attribute__((weak)) pthread_rwlock_unlock(pthread_rwlock_t *lock); // Calls to the locking functions are gated on pthread_create, and not the // functions themselves, because the data structure should only be locked if // another thread has been created. This is what similar libraries do. class _LIBUNWIND_HIDDEN RWMutex { public: bool lock_shared() { return !pthread_create || (pthread_rwlock_rdlock(&_lock) == 0); } bool unlock_shared() { return !pthread_create || (pthread_rwlock_unlock(&_lock) == 0); } bool lock() { return !pthread_create || (pthread_rwlock_wrlock(&_lock) == 0); } bool unlock() { return !pthread_create || (pthread_rwlock_unlock(&_lock) == 0); } private: pthread_rwlock_t _lock = PTHREAD_RWLOCK_INITIALIZER; }; #endif } // namespace libunwind #endif // __RWMUTEX_HPP__ ================================================ FILE: ThirdParty/libunwind/src/Registers.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Models register sets for supported processors. // //===----------------------------------------------------------------------===// #ifndef __REGISTERS_HPP__ #define __REGISTERS_HPP__ #include #include #include "config.h" #include "libunwind.h" #include "shadow_stack_unwind.h" namespace libunwind { // For emulating 128-bit registers struct v128 { uint32_t vec[4]; }; enum { REGISTERS_X86, REGISTERS_X86_64, REGISTERS_PPC, REGISTERS_PPC64, REGISTERS_ARM64, REGISTERS_ARM, REGISTERS_OR1K, REGISTERS_MIPS_O32, REGISTERS_MIPS_NEWABI, REGISTERS_SPARC, REGISTERS_SPARC64, REGISTERS_HEXAGON, REGISTERS_RISCV, REGISTERS_VE, REGISTERS_S390X, REGISTERS_LOONGARCH, }; #if defined(_LIBUNWIND_TARGET_I386) class _LIBUNWIND_HIDDEN Registers_x86; extern "C" void __libunwind_Registers_x86_jumpto(Registers_x86 *); #if defined(_LIBUNWIND_USE_CET) extern "C" void *__libunwind_shstk_get_jump_target() { return reinterpret_cast(&__libunwind_Registers_x86_jumpto); } #endif /// Registers_x86 holds the register state of a thread in a 32-bit intel /// process. class _LIBUNWIND_HIDDEN Registers_x86 { public: Registers_x86(); Registers_x86(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int) const { return false; } double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int) const { return false; } v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto() { __libunwind_Registers_x86_jumpto(this); } static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86; } static int getArch() { return REGISTERS_X86; } uint32_t getSP() const { return _registers.__esp; } void setSP(uint32_t value) { _registers.__esp = value; } uint32_t getIP() const { return _registers.__eip; } void setIP(uint32_t value) { _registers.__eip = value; } uint32_t getEBP() const { return _registers.__ebp; } void setEBP(uint32_t value) { _registers.__ebp = value; } uint32_t getEBX() const { return _registers.__ebx; } void setEBX(uint32_t value) { _registers.__ebx = value; } uint32_t getECX() const { return _registers.__ecx; } void setECX(uint32_t value) { _registers.__ecx = value; } uint32_t getEDX() const { return _registers.__edx; } void setEDX(uint32_t value) { _registers.__edx = value; } uint32_t getESI() const { return _registers.__esi; } void setESI(uint32_t value) { _registers.__esi = value; } uint32_t getEDI() const { return _registers.__edi; } void setEDI(uint32_t value) { _registers.__edi = value; } private: struct GPRs { unsigned int __eax; unsigned int __ebx; unsigned int __ecx; unsigned int __edx; unsigned int __edi; unsigned int __esi; unsigned int __ebp; unsigned int __esp; unsigned int __ss; unsigned int __eflags; unsigned int __eip; unsigned int __cs; unsigned int __ds; unsigned int __es; unsigned int __fs; unsigned int __gs; }; GPRs _registers; }; inline Registers_x86::Registers_x86(const void *registers) { static_assert((check_fit::does_fit), "x86 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); } inline Registers_x86::Registers_x86() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_x86::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum > 7) return false; return true; } inline uint32_t Registers_x86::getRegister(int regNum) const { switch (regNum) { case UNW_REG_IP: return _registers.__eip; case UNW_REG_SP: return _registers.__esp; case UNW_X86_EAX: return _registers.__eax; case UNW_X86_ECX: return _registers.__ecx; case UNW_X86_EDX: return _registers.__edx; case UNW_X86_EBX: return _registers.__ebx; #if !defined(__APPLE__) case UNW_X86_ESP: #else case UNW_X86_EBP: #endif return _registers.__ebp; #if !defined(__APPLE__) case UNW_X86_EBP: #else case UNW_X86_ESP: #endif return _registers.__esp; case UNW_X86_ESI: return _registers.__esi; case UNW_X86_EDI: return _registers.__edi; } _LIBUNWIND_ABORT("unsupported x86 register"); } inline void Registers_x86::setRegister(int regNum, uint32_t value) { switch (regNum) { case UNW_REG_IP: _registers.__eip = value; return; case UNW_REG_SP: _registers.__esp = value; return; case UNW_X86_EAX: _registers.__eax = value; return; case UNW_X86_ECX: _registers.__ecx = value; return; case UNW_X86_EDX: _registers.__edx = value; return; case UNW_X86_EBX: _registers.__ebx = value; return; #if !defined(__APPLE__) case UNW_X86_ESP: #else case UNW_X86_EBP: #endif _registers.__ebp = value; return; #if !defined(__APPLE__) case UNW_X86_EBP: #else case UNW_X86_ESP: #endif _registers.__esp = value; return; case UNW_X86_ESI: _registers.__esi = value; return; case UNW_X86_EDI: _registers.__edi = value; return; } _LIBUNWIND_ABORT("unsupported x86 register"); } inline const char *Registers_x86::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "ip"; case UNW_REG_SP: return "esp"; case UNW_X86_EAX: return "eax"; case UNW_X86_ECX: return "ecx"; case UNW_X86_EDX: return "edx"; case UNW_X86_EBX: return "ebx"; case UNW_X86_EBP: return "ebp"; case UNW_X86_ESP: return "esp"; case UNW_X86_ESI: return "esi"; case UNW_X86_EDI: return "edi"; default: return "unknown register"; } } inline double Registers_x86::getFloatRegister(int) const { _LIBUNWIND_ABORT("no x86 float registers"); } inline void Registers_x86::setFloatRegister(int, double) { _LIBUNWIND_ABORT("no x86 float registers"); } inline v128 Registers_x86::getVectorRegister(int) const { _LIBUNWIND_ABORT("no x86 vector registers"); } inline void Registers_x86::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("no x86 vector registers"); } #endif // _LIBUNWIND_TARGET_I386 #if defined(_LIBUNWIND_TARGET_X86_64) /// Registers_x86_64 holds the register state of a thread in a 64-bit intel /// process. class _LIBUNWIND_HIDDEN Registers_x86_64; extern "C" void __libunwind_Registers_x86_64_jumpto(Registers_x86_64 *); #if defined(_LIBUNWIND_USE_CET) extern "C" void *__libunwind_shstk_get_jump_target() { return reinterpret_cast(&__libunwind_Registers_x86_64_jumpto); } #endif class _LIBUNWIND_HIDDEN Registers_x86_64 { public: Registers_x86_64(); Registers_x86_64(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int) const { return false; } double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto() { __libunwind_Registers_x86_64_jumpto(this); } static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64; } static int getArch() { return REGISTERS_X86_64; } uint64_t getSP() const { return _registers.__rsp; } void setSP(uint64_t value) { _registers.__rsp = value; } uint64_t getIP() const { return _registers.__rip; } void setIP(uint64_t value) { _registers.__rip = value; } uint64_t getRBP() const { return _registers.__rbp; } void setRBP(uint64_t value) { _registers.__rbp = value; } uint64_t getRBX() const { return _registers.__rbx; } void setRBX(uint64_t value) { _registers.__rbx = value; } uint64_t getR12() const { return _registers.__r12; } void setR12(uint64_t value) { _registers.__r12 = value; } uint64_t getR13() const { return _registers.__r13; } void setR13(uint64_t value) { _registers.__r13 = value; } uint64_t getR14() const { return _registers.__r14; } void setR14(uint64_t value) { _registers.__r14 = value; } uint64_t getR15() const { return _registers.__r15; } void setR15(uint64_t value) { _registers.__r15 = value; } private: struct GPRs { uint64_t __rax; uint64_t __rbx; uint64_t __rcx; uint64_t __rdx; uint64_t __rdi; uint64_t __rsi; uint64_t __rbp; uint64_t __rsp; uint64_t __r8; uint64_t __r9; uint64_t __r10; uint64_t __r11; uint64_t __r12; uint64_t __r13; uint64_t __r14; uint64_t __r15; uint64_t __rip; uint64_t __rflags; uint64_t __cs; uint64_t __fs; uint64_t __gs; #if defined(_WIN64) uint64_t __padding; // 16-byte align #endif }; GPRs _registers; #if defined(_WIN64) v128 _xmm[16]; #endif }; inline Registers_x86_64::Registers_x86_64(const void *registers) { static_assert((check_fit::does_fit), "x86_64 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); } inline Registers_x86_64::Registers_x86_64() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_x86_64::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum > 16) return false; return true; } inline uint64_t Registers_x86_64::getRegister(int regNum) const { switch (regNum) { case UNW_REG_IP: case UNW_X86_64_RIP: return _registers.__rip; case UNW_REG_SP: return _registers.__rsp; case UNW_X86_64_RAX: return _registers.__rax; case UNW_X86_64_RDX: return _registers.__rdx; case UNW_X86_64_RCX: return _registers.__rcx; case UNW_X86_64_RBX: return _registers.__rbx; case UNW_X86_64_RSI: return _registers.__rsi; case UNW_X86_64_RDI: return _registers.__rdi; case UNW_X86_64_RBP: return _registers.__rbp; case UNW_X86_64_RSP: return _registers.__rsp; case UNW_X86_64_R8: return _registers.__r8; case UNW_X86_64_R9: return _registers.__r9; case UNW_X86_64_R10: return _registers.__r10; case UNW_X86_64_R11: return _registers.__r11; case UNW_X86_64_R12: return _registers.__r12; case UNW_X86_64_R13: return _registers.__r13; case UNW_X86_64_R14: return _registers.__r14; case UNW_X86_64_R15: return _registers.__r15; } _LIBUNWIND_ABORT("unsupported x86_64 register"); } inline void Registers_x86_64::setRegister(int regNum, uint64_t value) { switch (regNum) { case UNW_REG_IP: case UNW_X86_64_RIP: _registers.__rip = value; return; case UNW_REG_SP: _registers.__rsp = value; return; case UNW_X86_64_RAX: _registers.__rax = value; return; case UNW_X86_64_RDX: _registers.__rdx = value; return; case UNW_X86_64_RCX: _registers.__rcx = value; return; case UNW_X86_64_RBX: _registers.__rbx = value; return; case UNW_X86_64_RSI: _registers.__rsi = value; return; case UNW_X86_64_RDI: _registers.__rdi = value; return; case UNW_X86_64_RBP: _registers.__rbp = value; return; case UNW_X86_64_RSP: _registers.__rsp = value; return; case UNW_X86_64_R8: _registers.__r8 = value; return; case UNW_X86_64_R9: _registers.__r9 = value; return; case UNW_X86_64_R10: _registers.__r10 = value; return; case UNW_X86_64_R11: _registers.__r11 = value; return; case UNW_X86_64_R12: _registers.__r12 = value; return; case UNW_X86_64_R13: _registers.__r13 = value; return; case UNW_X86_64_R14: _registers.__r14 = value; return; case UNW_X86_64_R15: _registers.__r15 = value; return; } _LIBUNWIND_ABORT("unsupported x86_64 register"); } inline const char *Registers_x86_64::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: case UNW_X86_64_RIP: return "rip"; case UNW_REG_SP: return "rsp"; case UNW_X86_64_RAX: return "rax"; case UNW_X86_64_RDX: return "rdx"; case UNW_X86_64_RCX: return "rcx"; case UNW_X86_64_RBX: return "rbx"; case UNW_X86_64_RSI: return "rsi"; case UNW_X86_64_RDI: return "rdi"; case UNW_X86_64_RBP: return "rbp"; case UNW_X86_64_RSP: return "rsp"; case UNW_X86_64_R8: return "r8"; case UNW_X86_64_R9: return "r9"; case UNW_X86_64_R10: return "r10"; case UNW_X86_64_R11: return "r11"; case UNW_X86_64_R12: return "r12"; case UNW_X86_64_R13: return "r13"; case UNW_X86_64_R14: return "r14"; case UNW_X86_64_R15: return "r15"; case UNW_X86_64_XMM0: return "xmm0"; case UNW_X86_64_XMM1: return "xmm1"; case UNW_X86_64_XMM2: return "xmm2"; case UNW_X86_64_XMM3: return "xmm3"; case UNW_X86_64_XMM4: return "xmm4"; case UNW_X86_64_XMM5: return "xmm5"; case UNW_X86_64_XMM6: return "xmm6"; case UNW_X86_64_XMM7: return "xmm7"; case UNW_X86_64_XMM8: return "xmm8"; case UNW_X86_64_XMM9: return "xmm9"; case UNW_X86_64_XMM10: return "xmm10"; case UNW_X86_64_XMM11: return "xmm11"; case UNW_X86_64_XMM12: return "xmm12"; case UNW_X86_64_XMM13: return "xmm13"; case UNW_X86_64_XMM14: return "xmm14"; case UNW_X86_64_XMM15: return "xmm15"; default: return "unknown register"; } } inline double Registers_x86_64::getFloatRegister(int) const { _LIBUNWIND_ABORT("no x86_64 float registers"); } inline void Registers_x86_64::setFloatRegister(int, double) { _LIBUNWIND_ABORT("no x86_64 float registers"); } inline bool Registers_x86_64::validVectorRegister(int regNum) const { #if defined(_WIN64) if (regNum < UNW_X86_64_XMM0) return false; if (regNum > UNW_X86_64_XMM15) return false; return true; #else (void)regNum; // suppress unused parameter warning return false; #endif } inline v128 Registers_x86_64::getVectorRegister(int regNum) const { #if defined(_WIN64) assert(validVectorRegister(regNum)); return _xmm[regNum - UNW_X86_64_XMM0]; #else (void)regNum; // suppress unused parameter warning _LIBUNWIND_ABORT("no x86_64 vector registers"); #endif } inline void Registers_x86_64::setVectorRegister(int regNum, v128 value) { #if defined(_WIN64) assert(validVectorRegister(regNum)); _xmm[regNum - UNW_X86_64_XMM0] = value; #else (void)regNum; (void)value; // suppress unused parameter warnings _LIBUNWIND_ABORT("no x86_64 vector registers"); #endif } #endif // _LIBUNWIND_TARGET_X86_64 #if defined(_LIBUNWIND_TARGET_PPC) /// Registers_ppc holds the register state of a thread in a 32-bit PowerPC /// process. class _LIBUNWIND_HIDDEN Registers_ppc { public: Registers_ppc(); Registers_ppc(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC; } static int getArch() { return REGISTERS_PPC; } uint64_t getSP() const { return _registers.__r1; } void setSP(uint32_t value) { _registers.__r1 = value; } uint64_t getIP() const { return _registers.__srr0; } void setIP(uint32_t value) { _registers.__srr0 = value; } uint64_t getCR() const { return _registers.__cr; } void setCR(uint32_t value) { _registers.__cr = value; } uint64_t getLR() const { return _registers.__lr; } void setLR(uint32_t value) { _registers.__lr = value; } private: struct ppc_thread_state_t { unsigned int __srr0; /* Instruction address register (PC) */ unsigned int __srr1; /* Machine state register (supervisor) */ unsigned int __r0; unsigned int __r1; unsigned int __r2; unsigned int __r3; unsigned int __r4; unsigned int __r5; unsigned int __r6; unsigned int __r7; unsigned int __r8; unsigned int __r9; unsigned int __r10; unsigned int __r11; unsigned int __r12; unsigned int __r13; unsigned int __r14; unsigned int __r15; unsigned int __r16; unsigned int __r17; unsigned int __r18; unsigned int __r19; unsigned int __r20; unsigned int __r21; unsigned int __r22; unsigned int __r23; unsigned int __r24; unsigned int __r25; unsigned int __r26; unsigned int __r27; unsigned int __r28; unsigned int __r29; unsigned int __r30; unsigned int __r31; unsigned int __cr; /* Condition register */ unsigned int __xer; /* User's integer exception register */ unsigned int __lr; /* Link register */ unsigned int __ctr; /* Count register */ unsigned int __mq; /* MQ register (601 only) */ unsigned int __vrsave; /* Vector Save Register */ }; struct ppc_float_state_t { double __fpregs[32]; unsigned int __fpscr_pad; /* fpscr is 64 bits, 32 bits of rubbish */ unsigned int __fpscr; /* floating point status register */ }; ppc_thread_state_t _registers; ppc_float_state_t _floatRegisters; v128 _vectorRegisters[32]; // offset 424 }; inline Registers_ppc::Registers_ppc(const void *registers) { static_assert((check_fit::does_fit), "ppc registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); static_assert(sizeof(ppc_thread_state_t) == 160, "expected float register offset to be 160"); memcpy(&_floatRegisters, static_cast(registers) + sizeof(ppc_thread_state_t), sizeof(_floatRegisters)); static_assert(sizeof(ppc_thread_state_t) + sizeof(ppc_float_state_t) == 424, "expected vector register offset to be 424 bytes"); memcpy(_vectorRegisters, static_cast(registers) + sizeof(ppc_thread_state_t) + sizeof(ppc_float_state_t), sizeof(_vectorRegisters)); } inline Registers_ppc::Registers_ppc() { memset(&_registers, 0, sizeof(_registers)); memset(&_floatRegisters, 0, sizeof(_floatRegisters)); memset(&_vectorRegisters, 0, sizeof(_vectorRegisters)); } inline bool Registers_ppc::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum == UNW_PPC_VRSAVE) return true; if (regNum < 0) return false; if (regNum <= UNW_PPC_R31) return true; if (regNum == UNW_PPC_MQ) return true; if (regNum == UNW_PPC_LR) return true; if (regNum == UNW_PPC_CTR) return true; if ((UNW_PPC_CR0 <= regNum) && (regNum <= UNW_PPC_CR7)) return true; return false; } inline uint32_t Registers_ppc::getRegister(int regNum) const { switch (regNum) { case UNW_REG_IP: return _registers.__srr0; case UNW_REG_SP: return _registers.__r1; case UNW_PPC_R0: return _registers.__r0; case UNW_PPC_R1: return _registers.__r1; case UNW_PPC_R2: return _registers.__r2; case UNW_PPC_R3: return _registers.__r3; case UNW_PPC_R4: return _registers.__r4; case UNW_PPC_R5: return _registers.__r5; case UNW_PPC_R6: return _registers.__r6; case UNW_PPC_R7: return _registers.__r7; case UNW_PPC_R8: return _registers.__r8; case UNW_PPC_R9: return _registers.__r9; case UNW_PPC_R10: return _registers.__r10; case UNW_PPC_R11: return _registers.__r11; case UNW_PPC_R12: return _registers.__r12; case UNW_PPC_R13: return _registers.__r13; case UNW_PPC_R14: return _registers.__r14; case UNW_PPC_R15: return _registers.__r15; case UNW_PPC_R16: return _registers.__r16; case UNW_PPC_R17: return _registers.__r17; case UNW_PPC_R18: return _registers.__r18; case UNW_PPC_R19: return _registers.__r19; case UNW_PPC_R20: return _registers.__r20; case UNW_PPC_R21: return _registers.__r21; case UNW_PPC_R22: return _registers.__r22; case UNW_PPC_R23: return _registers.__r23; case UNW_PPC_R24: return _registers.__r24; case UNW_PPC_R25: return _registers.__r25; case UNW_PPC_R26: return _registers.__r26; case UNW_PPC_R27: return _registers.__r27; case UNW_PPC_R28: return _registers.__r28; case UNW_PPC_R29: return _registers.__r29; case UNW_PPC_R30: return _registers.__r30; case UNW_PPC_R31: return _registers.__r31; case UNW_PPC_LR: return _registers.__lr; case UNW_PPC_CR0: return (_registers.__cr & 0xF0000000); case UNW_PPC_CR1: return (_registers.__cr & 0x0F000000); case UNW_PPC_CR2: return (_registers.__cr & 0x00F00000); case UNW_PPC_CR3: return (_registers.__cr & 0x000F0000); case UNW_PPC_CR4: return (_registers.__cr & 0x0000F000); case UNW_PPC_CR5: return (_registers.__cr & 0x00000F00); case UNW_PPC_CR6: return (_registers.__cr & 0x000000F0); case UNW_PPC_CR7: return (_registers.__cr & 0x0000000F); case UNW_PPC_VRSAVE: return _registers.__vrsave; } _LIBUNWIND_ABORT("unsupported ppc register"); } inline void Registers_ppc::setRegister(int regNum, uint32_t value) { //fprintf(stderr, "Registers_ppc::setRegister(%d, 0x%08X)\n", regNum, value); switch (regNum) { case UNW_REG_IP: _registers.__srr0 = value; return; case UNW_REG_SP: _registers.__r1 = value; return; case UNW_PPC_R0: _registers.__r0 = value; return; case UNW_PPC_R1: _registers.__r1 = value; return; case UNW_PPC_R2: _registers.__r2 = value; return; case UNW_PPC_R3: _registers.__r3 = value; return; case UNW_PPC_R4: _registers.__r4 = value; return; case UNW_PPC_R5: _registers.__r5 = value; return; case UNW_PPC_R6: _registers.__r6 = value; return; case UNW_PPC_R7: _registers.__r7 = value; return; case UNW_PPC_R8: _registers.__r8 = value; return; case UNW_PPC_R9: _registers.__r9 = value; return; case UNW_PPC_R10: _registers.__r10 = value; return; case UNW_PPC_R11: _registers.__r11 = value; return; case UNW_PPC_R12: _registers.__r12 = value; return; case UNW_PPC_R13: _registers.__r13 = value; return; case UNW_PPC_R14: _registers.__r14 = value; return; case UNW_PPC_R15: _registers.__r15 = value; return; case UNW_PPC_R16: _registers.__r16 = value; return; case UNW_PPC_R17: _registers.__r17 = value; return; case UNW_PPC_R18: _registers.__r18 = value; return; case UNW_PPC_R19: _registers.__r19 = value; return; case UNW_PPC_R20: _registers.__r20 = value; return; case UNW_PPC_R21: _registers.__r21 = value; return; case UNW_PPC_R22: _registers.__r22 = value; return; case UNW_PPC_R23: _registers.__r23 = value; return; case UNW_PPC_R24: _registers.__r24 = value; return; case UNW_PPC_R25: _registers.__r25 = value; return; case UNW_PPC_R26: _registers.__r26 = value; return; case UNW_PPC_R27: _registers.__r27 = value; return; case UNW_PPC_R28: _registers.__r28 = value; return; case UNW_PPC_R29: _registers.__r29 = value; return; case UNW_PPC_R30: _registers.__r30 = value; return; case UNW_PPC_R31: _registers.__r31 = value; return; case UNW_PPC_MQ: _registers.__mq = value; return; case UNW_PPC_LR: _registers.__lr = value; return; case UNW_PPC_CTR: _registers.__ctr = value; return; case UNW_PPC_CR0: _registers.__cr &= 0x0FFFFFFF; _registers.__cr |= (value & 0xF0000000); return; case UNW_PPC_CR1: _registers.__cr &= 0xF0FFFFFF; _registers.__cr |= (value & 0x0F000000); return; case UNW_PPC_CR2: _registers.__cr &= 0xFF0FFFFF; _registers.__cr |= (value & 0x00F00000); return; case UNW_PPC_CR3: _registers.__cr &= 0xFFF0FFFF; _registers.__cr |= (value & 0x000F0000); return; case UNW_PPC_CR4: _registers.__cr &= 0xFFFF0FFF; _registers.__cr |= (value & 0x0000F000); return; case UNW_PPC_CR5: _registers.__cr &= 0xFFFFF0FF; _registers.__cr |= (value & 0x00000F00); return; case UNW_PPC_CR6: _registers.__cr &= 0xFFFFFF0F; _registers.__cr |= (value & 0x000000F0); return; case UNW_PPC_CR7: _registers.__cr &= 0xFFFFFFF0; _registers.__cr |= (value & 0x0000000F); return; case UNW_PPC_VRSAVE: _registers.__vrsave = value; return; // not saved return; case UNW_PPC_XER: _registers.__xer = value; return; case UNW_PPC_AP: case UNW_PPC_VSCR: case UNW_PPC_SPEFSCR: // not saved return; } _LIBUNWIND_ABORT("unsupported ppc register"); } inline bool Registers_ppc::validFloatRegister(int regNum) const { if (regNum < UNW_PPC_F0) return false; if (regNum > UNW_PPC_F31) return false; return true; } inline double Registers_ppc::getFloatRegister(int regNum) const { assert(validFloatRegister(regNum)); return _floatRegisters.__fpregs[regNum - UNW_PPC_F0]; } inline void Registers_ppc::setFloatRegister(int regNum, double value) { assert(validFloatRegister(regNum)); _floatRegisters.__fpregs[regNum - UNW_PPC_F0] = value; } inline bool Registers_ppc::validVectorRegister(int regNum) const { if (regNum < UNW_PPC_V0) return false; if (regNum > UNW_PPC_V31) return false; return true; } inline v128 Registers_ppc::getVectorRegister(int regNum) const { assert(validVectorRegister(regNum)); v128 result = _vectorRegisters[regNum - UNW_PPC_V0]; return result; } inline void Registers_ppc::setVectorRegister(int regNum, v128 value) { assert(validVectorRegister(regNum)); _vectorRegisters[regNum - UNW_PPC_V0] = value; } inline const char *Registers_ppc::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "ip"; case UNW_REG_SP: return "sp"; case UNW_PPC_R0: return "r0"; case UNW_PPC_R1: return "r1"; case UNW_PPC_R2: return "r2"; case UNW_PPC_R3: return "r3"; case UNW_PPC_R4: return "r4"; case UNW_PPC_R5: return "r5"; case UNW_PPC_R6: return "r6"; case UNW_PPC_R7: return "r7"; case UNW_PPC_R8: return "r8"; case UNW_PPC_R9: return "r9"; case UNW_PPC_R10: return "r10"; case UNW_PPC_R11: return "r11"; case UNW_PPC_R12: return "r12"; case UNW_PPC_R13: return "r13"; case UNW_PPC_R14: return "r14"; case UNW_PPC_R15: return "r15"; case UNW_PPC_R16: return "r16"; case UNW_PPC_R17: return "r17"; case UNW_PPC_R18: return "r18"; case UNW_PPC_R19: return "r19"; case UNW_PPC_R20: return "r20"; case UNW_PPC_R21: return "r21"; case UNW_PPC_R22: return "r22"; case UNW_PPC_R23: return "r23"; case UNW_PPC_R24: return "r24"; case UNW_PPC_R25: return "r25"; case UNW_PPC_R26: return "r26"; case UNW_PPC_R27: return "r27"; case UNW_PPC_R28: return "r28"; case UNW_PPC_R29: return "r29"; case UNW_PPC_R30: return "r30"; case UNW_PPC_R31: return "r31"; case UNW_PPC_F0: return "fp0"; case UNW_PPC_F1: return "fp1"; case UNW_PPC_F2: return "fp2"; case UNW_PPC_F3: return "fp3"; case UNW_PPC_F4: return "fp4"; case UNW_PPC_F5: return "fp5"; case UNW_PPC_F6: return "fp6"; case UNW_PPC_F7: return "fp7"; case UNW_PPC_F8: return "fp8"; case UNW_PPC_F9: return "fp9"; case UNW_PPC_F10: return "fp10"; case UNW_PPC_F11: return "fp11"; case UNW_PPC_F12: return "fp12"; case UNW_PPC_F13: return "fp13"; case UNW_PPC_F14: return "fp14"; case UNW_PPC_F15: return "fp15"; case UNW_PPC_F16: return "fp16"; case UNW_PPC_F17: return "fp17"; case UNW_PPC_F18: return "fp18"; case UNW_PPC_F19: return "fp19"; case UNW_PPC_F20: return "fp20"; case UNW_PPC_F21: return "fp21"; case UNW_PPC_F22: return "fp22"; case UNW_PPC_F23: return "fp23"; case UNW_PPC_F24: return "fp24"; case UNW_PPC_F25: return "fp25"; case UNW_PPC_F26: return "fp26"; case UNW_PPC_F27: return "fp27"; case UNW_PPC_F28: return "fp28"; case UNW_PPC_F29: return "fp29"; case UNW_PPC_F30: return "fp30"; case UNW_PPC_F31: return "fp31"; case UNW_PPC_LR: return "lr"; default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_PPC #if defined(_LIBUNWIND_TARGET_PPC64) /// Registers_ppc64 holds the register state of a thread in a 64-bit PowerPC /// process. class _LIBUNWIND_HIDDEN Registers_ppc64 { public: Registers_ppc64(); Registers_ppc64(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64; } static int getArch() { return REGISTERS_PPC64; } uint64_t getSP() const { return _registers.__r1; } void setSP(uint64_t value) { _registers.__r1 = value; } uint64_t getIP() const { return _registers.__srr0; } void setIP(uint64_t value) { _registers.__srr0 = value; } uint64_t getCR() const { return _registers.__cr; } void setCR(uint64_t value) { _registers.__cr = value; } uint64_t getLR() const { return _registers.__lr; } void setLR(uint64_t value) { _registers.__lr = value; } private: struct ppc64_thread_state_t { uint64_t __srr0; // Instruction address register (PC) uint64_t __srr1; // Machine state register (supervisor) uint64_t __r0; uint64_t __r1; uint64_t __r2; uint64_t __r3; uint64_t __r4; uint64_t __r5; uint64_t __r6; uint64_t __r7; uint64_t __r8; uint64_t __r9; uint64_t __r10; uint64_t __r11; uint64_t __r12; uint64_t __r13; uint64_t __r14; uint64_t __r15; uint64_t __r16; uint64_t __r17; uint64_t __r18; uint64_t __r19; uint64_t __r20; uint64_t __r21; uint64_t __r22; uint64_t __r23; uint64_t __r24; uint64_t __r25; uint64_t __r26; uint64_t __r27; uint64_t __r28; uint64_t __r29; uint64_t __r30; uint64_t __r31; uint64_t __cr; // Condition register uint64_t __xer; // User's integer exception register uint64_t __lr; // Link register uint64_t __ctr; // Count register uint64_t __vrsave; // Vector Save Register }; union ppc64_vsr_t { struct asfloat_s { double f; uint64_t v2; } asfloat; v128 v; }; ppc64_thread_state_t _registers; ppc64_vsr_t _vectorScalarRegisters[64]; static int getVectorRegNum(int num); }; inline Registers_ppc64::Registers_ppc64(const void *registers) { static_assert((check_fit::does_fit), "ppc64 registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); static_assert(sizeof(_registers) == 312, "expected vector scalar register offset to be 312"); memcpy(&_vectorScalarRegisters, static_cast(registers) + sizeof(_registers), sizeof(_vectorScalarRegisters)); static_assert(sizeof(_registers) + sizeof(_vectorScalarRegisters) == 1336, "expected vector register offset to be 1336 bytes"); } inline Registers_ppc64::Registers_ppc64() { memset(&_registers, 0, sizeof(_registers)); memset(&_vectorScalarRegisters, 0, sizeof(_vectorScalarRegisters)); } inline bool Registers_ppc64::validRegister(int regNum) const { switch (regNum) { case UNW_REG_IP: case UNW_REG_SP: case UNW_PPC64_XER: case UNW_PPC64_LR: case UNW_PPC64_CTR: case UNW_PPC64_VRSAVE: return true; } if (regNum >= UNW_PPC64_R0 && regNum <= UNW_PPC64_R31) return true; if (regNum >= UNW_PPC64_CR0 && regNum <= UNW_PPC64_CR7) return true; return false; } inline uint64_t Registers_ppc64::getRegister(int regNum) const { switch (regNum) { case UNW_REG_IP: return _registers.__srr0; case UNW_PPC64_R0: return _registers.__r0; case UNW_PPC64_R1: case UNW_REG_SP: return _registers.__r1; case UNW_PPC64_R2: return _registers.__r2; case UNW_PPC64_R3: return _registers.__r3; case UNW_PPC64_R4: return _registers.__r4; case UNW_PPC64_R5: return _registers.__r5; case UNW_PPC64_R6: return _registers.__r6; case UNW_PPC64_R7: return _registers.__r7; case UNW_PPC64_R8: return _registers.__r8; case UNW_PPC64_R9: return _registers.__r9; case UNW_PPC64_R10: return _registers.__r10; case UNW_PPC64_R11: return _registers.__r11; case UNW_PPC64_R12: return _registers.__r12; case UNW_PPC64_R13: return _registers.__r13; case UNW_PPC64_R14: return _registers.__r14; case UNW_PPC64_R15: return _registers.__r15; case UNW_PPC64_R16: return _registers.__r16; case UNW_PPC64_R17: return _registers.__r17; case UNW_PPC64_R18: return _registers.__r18; case UNW_PPC64_R19: return _registers.__r19; case UNW_PPC64_R20: return _registers.__r20; case UNW_PPC64_R21: return _registers.__r21; case UNW_PPC64_R22: return _registers.__r22; case UNW_PPC64_R23: return _registers.__r23; case UNW_PPC64_R24: return _registers.__r24; case UNW_PPC64_R25: return _registers.__r25; case UNW_PPC64_R26: return _registers.__r26; case UNW_PPC64_R27: return _registers.__r27; case UNW_PPC64_R28: return _registers.__r28; case UNW_PPC64_R29: return _registers.__r29; case UNW_PPC64_R30: return _registers.__r30; case UNW_PPC64_R31: return _registers.__r31; case UNW_PPC64_CR0: return (_registers.__cr & 0xF0000000); case UNW_PPC64_CR1: return (_registers.__cr & 0x0F000000); case UNW_PPC64_CR2: return (_registers.__cr & 0x00F00000); case UNW_PPC64_CR3: return (_registers.__cr & 0x000F0000); case UNW_PPC64_CR4: return (_registers.__cr & 0x0000F000); case UNW_PPC64_CR5: return (_registers.__cr & 0x00000F00); case UNW_PPC64_CR6: return (_registers.__cr & 0x000000F0); case UNW_PPC64_CR7: return (_registers.__cr & 0x0000000F); case UNW_PPC64_XER: return _registers.__xer; case UNW_PPC64_LR: return _registers.__lr; case UNW_PPC64_CTR: return _registers.__ctr; case UNW_PPC64_VRSAVE: return _registers.__vrsave; } _LIBUNWIND_ABORT("unsupported ppc64 register"); } inline void Registers_ppc64::setRegister(int regNum, uint64_t value) { switch (regNum) { case UNW_REG_IP: _registers.__srr0 = value; return; case UNW_PPC64_R0: _registers.__r0 = value; return; case UNW_PPC64_R1: case UNW_REG_SP: _registers.__r1 = value; return; case UNW_PPC64_R2: _registers.__r2 = value; return; case UNW_PPC64_R3: _registers.__r3 = value; return; case UNW_PPC64_R4: _registers.__r4 = value; return; case UNW_PPC64_R5: _registers.__r5 = value; return; case UNW_PPC64_R6: _registers.__r6 = value; return; case UNW_PPC64_R7: _registers.__r7 = value; return; case UNW_PPC64_R8: _registers.__r8 = value; return; case UNW_PPC64_R9: _registers.__r9 = value; return; case UNW_PPC64_R10: _registers.__r10 = value; return; case UNW_PPC64_R11: _registers.__r11 = value; return; case UNW_PPC64_R12: _registers.__r12 = value; return; case UNW_PPC64_R13: _registers.__r13 = value; return; case UNW_PPC64_R14: _registers.__r14 = value; return; case UNW_PPC64_R15: _registers.__r15 = value; return; case UNW_PPC64_R16: _registers.__r16 = value; return; case UNW_PPC64_R17: _registers.__r17 = value; return; case UNW_PPC64_R18: _registers.__r18 = value; return; case UNW_PPC64_R19: _registers.__r19 = value; return; case UNW_PPC64_R20: _registers.__r20 = value; return; case UNW_PPC64_R21: _registers.__r21 = value; return; case UNW_PPC64_R22: _registers.__r22 = value; return; case UNW_PPC64_R23: _registers.__r23 = value; return; case UNW_PPC64_R24: _registers.__r24 = value; return; case UNW_PPC64_R25: _registers.__r25 = value; return; case UNW_PPC64_R26: _registers.__r26 = value; return; case UNW_PPC64_R27: _registers.__r27 = value; return; case UNW_PPC64_R28: _registers.__r28 = value; return; case UNW_PPC64_R29: _registers.__r29 = value; return; case UNW_PPC64_R30: _registers.__r30 = value; return; case UNW_PPC64_R31: _registers.__r31 = value; return; case UNW_PPC64_CR0: _registers.__cr &= 0x0FFFFFFF; _registers.__cr |= (value & 0xF0000000); return; case UNW_PPC64_CR1: _registers.__cr &= 0xF0FFFFFF; _registers.__cr |= (value & 0x0F000000); return; case UNW_PPC64_CR2: _registers.__cr &= 0xFF0FFFFF; _registers.__cr |= (value & 0x00F00000); return; case UNW_PPC64_CR3: _registers.__cr &= 0xFFF0FFFF; _registers.__cr |= (value & 0x000F0000); return; case UNW_PPC64_CR4: _registers.__cr &= 0xFFFF0FFF; _registers.__cr |= (value & 0x0000F000); return; case UNW_PPC64_CR5: _registers.__cr &= 0xFFFFF0FF; _registers.__cr |= (value & 0x00000F00); return; case UNW_PPC64_CR6: _registers.__cr &= 0xFFFFFF0F; _registers.__cr |= (value & 0x000000F0); return; case UNW_PPC64_CR7: _registers.__cr &= 0xFFFFFFF0; _registers.__cr |= (value & 0x0000000F); return; case UNW_PPC64_XER: _registers.__xer = value; return; case UNW_PPC64_LR: _registers.__lr = value; return; case UNW_PPC64_CTR: _registers.__ctr = value; return; case UNW_PPC64_VRSAVE: _registers.__vrsave = value; return; } _LIBUNWIND_ABORT("unsupported ppc64 register"); } inline bool Registers_ppc64::validFloatRegister(int regNum) const { return regNum >= UNW_PPC64_F0 && regNum <= UNW_PPC64_F31; } inline double Registers_ppc64::getFloatRegister(int regNum) const { assert(validFloatRegister(regNum)); return _vectorScalarRegisters[regNum - UNW_PPC64_F0].asfloat.f; } inline void Registers_ppc64::setFloatRegister(int regNum, double value) { assert(validFloatRegister(regNum)); _vectorScalarRegisters[regNum - UNW_PPC64_F0].asfloat.f = value; } inline bool Registers_ppc64::validVectorRegister(int regNum) const { #if defined(__VSX__) if (regNum >= UNW_PPC64_VS0 && regNum <= UNW_PPC64_VS31) return true; if (regNum >= UNW_PPC64_VS32 && regNum <= UNW_PPC64_VS63) return true; #elif defined(__ALTIVEC__) if (regNum >= UNW_PPC64_V0 && regNum <= UNW_PPC64_V31) return true; #endif return false; } inline int Registers_ppc64::getVectorRegNum(int num) { if (num >= UNW_PPC64_VS0 && num <= UNW_PPC64_VS31) return num - UNW_PPC64_VS0; else return num - UNW_PPC64_VS32 + 32; } inline v128 Registers_ppc64::getVectorRegister(int regNum) const { assert(validVectorRegister(regNum)); return _vectorScalarRegisters[getVectorRegNum(regNum)].v; } inline void Registers_ppc64::setVectorRegister(int regNum, v128 value) { assert(validVectorRegister(regNum)); _vectorScalarRegisters[getVectorRegNum(regNum)].v = value; } inline const char *Registers_ppc64::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "ip"; case UNW_REG_SP: return "sp"; case UNW_PPC64_R0: return "r0"; case UNW_PPC64_R1: return "r1"; case UNW_PPC64_R2: return "r2"; case UNW_PPC64_R3: return "r3"; case UNW_PPC64_R4: return "r4"; case UNW_PPC64_R5: return "r5"; case UNW_PPC64_R6: return "r6"; case UNW_PPC64_R7: return "r7"; case UNW_PPC64_R8: return "r8"; case UNW_PPC64_R9: return "r9"; case UNW_PPC64_R10: return "r10"; case UNW_PPC64_R11: return "r11"; case UNW_PPC64_R12: return "r12"; case UNW_PPC64_R13: return "r13"; case UNW_PPC64_R14: return "r14"; case UNW_PPC64_R15: return "r15"; case UNW_PPC64_R16: return "r16"; case UNW_PPC64_R17: return "r17"; case UNW_PPC64_R18: return "r18"; case UNW_PPC64_R19: return "r19"; case UNW_PPC64_R20: return "r20"; case UNW_PPC64_R21: return "r21"; case UNW_PPC64_R22: return "r22"; case UNW_PPC64_R23: return "r23"; case UNW_PPC64_R24: return "r24"; case UNW_PPC64_R25: return "r25"; case UNW_PPC64_R26: return "r26"; case UNW_PPC64_R27: return "r27"; case UNW_PPC64_R28: return "r28"; case UNW_PPC64_R29: return "r29"; case UNW_PPC64_R30: return "r30"; case UNW_PPC64_R31: return "r31"; case UNW_PPC64_CR0: return "cr0"; case UNW_PPC64_CR1: return "cr1"; case UNW_PPC64_CR2: return "cr2"; case UNW_PPC64_CR3: return "cr3"; case UNW_PPC64_CR4: return "cr4"; case UNW_PPC64_CR5: return "cr5"; case UNW_PPC64_CR6: return "cr6"; case UNW_PPC64_CR7: return "cr7"; case UNW_PPC64_XER: return "xer"; case UNW_PPC64_LR: return "lr"; case UNW_PPC64_CTR: return "ctr"; case UNW_PPC64_VRSAVE: return "vrsave"; case UNW_PPC64_F0: return "fp0"; case UNW_PPC64_F1: return "fp1"; case UNW_PPC64_F2: return "fp2"; case UNW_PPC64_F3: return "fp3"; case UNW_PPC64_F4: return "fp4"; case UNW_PPC64_F5: return "fp5"; case UNW_PPC64_F6: return "fp6"; case UNW_PPC64_F7: return "fp7"; case UNW_PPC64_F8: return "fp8"; case UNW_PPC64_F9: return "fp9"; case UNW_PPC64_F10: return "fp10"; case UNW_PPC64_F11: return "fp11"; case UNW_PPC64_F12: return "fp12"; case UNW_PPC64_F13: return "fp13"; case UNW_PPC64_F14: return "fp14"; case UNW_PPC64_F15: return "fp15"; case UNW_PPC64_F16: return "fp16"; case UNW_PPC64_F17: return "fp17"; case UNW_PPC64_F18: return "fp18"; case UNW_PPC64_F19: return "fp19"; case UNW_PPC64_F20: return "fp20"; case UNW_PPC64_F21: return "fp21"; case UNW_PPC64_F22: return "fp22"; case UNW_PPC64_F23: return "fp23"; case UNW_PPC64_F24: return "fp24"; case UNW_PPC64_F25: return "fp25"; case UNW_PPC64_F26: return "fp26"; case UNW_PPC64_F27: return "fp27"; case UNW_PPC64_F28: return "fp28"; case UNW_PPC64_F29: return "fp29"; case UNW_PPC64_F30: return "fp30"; case UNW_PPC64_F31: return "fp31"; case UNW_PPC64_V0: return "v0"; case UNW_PPC64_V1: return "v1"; case UNW_PPC64_V2: return "v2"; case UNW_PPC64_V3: return "v3"; case UNW_PPC64_V4: return "v4"; case UNW_PPC64_V5: return "v5"; case UNW_PPC64_V6: return "v6"; case UNW_PPC64_V7: return "v7"; case UNW_PPC64_V8: return "v8"; case UNW_PPC64_V9: return "v9"; case UNW_PPC64_V10: return "v10"; case UNW_PPC64_V11: return "v11"; case UNW_PPC64_V12: return "v12"; case UNW_PPC64_V13: return "v13"; case UNW_PPC64_V14: return "v14"; case UNW_PPC64_V15: return "v15"; case UNW_PPC64_V16: return "v16"; case UNW_PPC64_V17: return "v17"; case UNW_PPC64_V18: return "v18"; case UNW_PPC64_V19: return "v19"; case UNW_PPC64_V20: return "v20"; case UNW_PPC64_V21: return "v21"; case UNW_PPC64_V22: return "v22"; case UNW_PPC64_V23: return "v23"; case UNW_PPC64_V24: return "v24"; case UNW_PPC64_V25: return "v25"; case UNW_PPC64_V26: return "v26"; case UNW_PPC64_V27: return "v27"; case UNW_PPC64_V28: return "v28"; case UNW_PPC64_V29: return "v29"; case UNW_PPC64_V30: return "v30"; case UNW_PPC64_V31: return "v31"; } return "unknown register"; } #endif // _LIBUNWIND_TARGET_PPC64 #if defined(_LIBUNWIND_TARGET_AARCH64) /// Registers_arm64 holds the register state of a thread in a 64-bit arm /// process. class _LIBUNWIND_HIDDEN Registers_arm64; extern "C" void __libunwind_Registers_arm64_jumpto(Registers_arm64 *); #if defined(_LIBUNWIND_USE_GCS) extern "C" void *__libunwind_shstk_get_jump_target() { return reinterpret_cast(&__libunwind_Registers_arm64_jumpto); } #endif class _LIBUNWIND_HIDDEN Registers_arm64 { public: Registers_arm64(); Registers_arm64(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto() { __libunwind_Registers_arm64_jumpto(this); } static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64; } static int getArch() { return REGISTERS_ARM64; } uint64_t getSP() const { return _registers.__sp; } void setSP(uint64_t value) { _registers.__sp = value; } uint64_t getIP() const { return _registers.__pc; } void setIP(uint64_t value) { _registers.__pc = value; } uint64_t getFP() const { return _registers.__fp; } void setFP(uint64_t value) { _registers.__fp = value; } private: struct GPRs { uint64_t __x[29]; // x0-x28 uint64_t __fp; // Frame pointer x29 uint64_t __lr; // Link register x30 uint64_t __sp; // Stack pointer x31 uint64_t __pc; // Program counter uint64_t __ra_sign_state; // RA sign state register }; GPRs _registers; double _vectorHalfRegisters[32]; // Currently only the lower double in 128-bit vectore registers // is perserved during unwinding. We could define new register // numbers (> 96) which mean whole vector registers, then this // struct would need to change to contain whole vector registers. }; inline Registers_arm64::Registers_arm64(const void *registers) { static_assert((check_fit::does_fit), "arm64 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); static_assert(sizeof(GPRs) == 0x110, "expected VFP registers to be at offset 272"); memcpy(_vectorHalfRegisters, static_cast(registers) + sizeof(GPRs), sizeof(_vectorHalfRegisters)); } inline Registers_arm64::Registers_arm64() { memset(&_registers, 0, sizeof(_registers)); memset(&_vectorHalfRegisters, 0, sizeof(_vectorHalfRegisters)); } inline bool Registers_arm64::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum > 95) return false; if (regNum == UNW_AARCH64_RA_SIGN_STATE) return true; if ((regNum > 32) && (regNum < 64)) return false; return true; } inline uint64_t Registers_arm64::getRegister(int regNum) const { if (regNum == UNW_REG_IP || regNum == UNW_AARCH64_PC) return _registers.__pc; if (regNum == UNW_REG_SP || regNum == UNW_AARCH64_SP) return _registers.__sp; if (regNum == UNW_AARCH64_RA_SIGN_STATE) return _registers.__ra_sign_state; if (regNum == UNW_AARCH64_FP) return _registers.__fp; if (regNum == UNW_AARCH64_LR) return _registers.__lr; if ((regNum >= 0) && (regNum < 29)) return _registers.__x[regNum]; _LIBUNWIND_ABORT("unsupported arm64 register"); } inline void Registers_arm64::setRegister(int regNum, uint64_t value) { if (regNum == UNW_REG_IP || regNum == UNW_AARCH64_PC) _registers.__pc = value; else if (regNum == UNW_REG_SP || regNum == UNW_AARCH64_SP) _registers.__sp = value; else if (regNum == UNW_AARCH64_RA_SIGN_STATE) _registers.__ra_sign_state = value; else if (regNum == UNW_AARCH64_FP) _registers.__fp = value; else if (regNum == UNW_AARCH64_LR) _registers.__lr = value; else if ((regNum >= 0) && (regNum < 29)) _registers.__x[regNum] = value; else _LIBUNWIND_ABORT("unsupported arm64 register"); } inline const char *Registers_arm64::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "pc"; case UNW_REG_SP: return "sp"; case UNW_AARCH64_X0: return "x0"; case UNW_AARCH64_X1: return "x1"; case UNW_AARCH64_X2: return "x2"; case UNW_AARCH64_X3: return "x3"; case UNW_AARCH64_X4: return "x4"; case UNW_AARCH64_X5: return "x5"; case UNW_AARCH64_X6: return "x6"; case UNW_AARCH64_X7: return "x7"; case UNW_AARCH64_X8: return "x8"; case UNW_AARCH64_X9: return "x9"; case UNW_AARCH64_X10: return "x10"; case UNW_AARCH64_X11: return "x11"; case UNW_AARCH64_X12: return "x12"; case UNW_AARCH64_X13: return "x13"; case UNW_AARCH64_X14: return "x14"; case UNW_AARCH64_X15: return "x15"; case UNW_AARCH64_X16: return "x16"; case UNW_AARCH64_X17: return "x17"; case UNW_AARCH64_X18: return "x18"; case UNW_AARCH64_X19: return "x19"; case UNW_AARCH64_X20: return "x20"; case UNW_AARCH64_X21: return "x21"; case UNW_AARCH64_X22: return "x22"; case UNW_AARCH64_X23: return "x23"; case UNW_AARCH64_X24: return "x24"; case UNW_AARCH64_X25: return "x25"; case UNW_AARCH64_X26: return "x26"; case UNW_AARCH64_X27: return "x27"; case UNW_AARCH64_X28: return "x28"; case UNW_AARCH64_FP: return "fp"; case UNW_AARCH64_LR: return "lr"; case UNW_AARCH64_SP: return "sp"; case UNW_AARCH64_PC: return "pc"; case UNW_AARCH64_V0: return "d0"; case UNW_AARCH64_V1: return "d1"; case UNW_AARCH64_V2: return "d2"; case UNW_AARCH64_V3: return "d3"; case UNW_AARCH64_V4: return "d4"; case UNW_AARCH64_V5: return "d5"; case UNW_AARCH64_V6: return "d6"; case UNW_AARCH64_V7: return "d7"; case UNW_AARCH64_V8: return "d8"; case UNW_AARCH64_V9: return "d9"; case UNW_AARCH64_V10: return "d10"; case UNW_AARCH64_V11: return "d11"; case UNW_AARCH64_V12: return "d12"; case UNW_AARCH64_V13: return "d13"; case UNW_AARCH64_V14: return "d14"; case UNW_AARCH64_V15: return "d15"; case UNW_AARCH64_V16: return "d16"; case UNW_AARCH64_V17: return "d17"; case UNW_AARCH64_V18: return "d18"; case UNW_AARCH64_V19: return "d19"; case UNW_AARCH64_V20: return "d20"; case UNW_AARCH64_V21: return "d21"; case UNW_AARCH64_V22: return "d22"; case UNW_AARCH64_V23: return "d23"; case UNW_AARCH64_V24: return "d24"; case UNW_AARCH64_V25: return "d25"; case UNW_AARCH64_V26: return "d26"; case UNW_AARCH64_V27: return "d27"; case UNW_AARCH64_V28: return "d28"; case UNW_AARCH64_V29: return "d29"; case UNW_AARCH64_V30: return "d30"; case UNW_AARCH64_V31: return "d31"; default: return "unknown register"; } } inline bool Registers_arm64::validFloatRegister(int regNum) const { if (regNum < UNW_AARCH64_V0) return false; if (regNum > UNW_AARCH64_V31) return false; return true; } inline double Registers_arm64::getFloatRegister(int regNum) const { assert(validFloatRegister(regNum)); return _vectorHalfRegisters[regNum - UNW_AARCH64_V0]; } inline void Registers_arm64::setFloatRegister(int regNum, double value) { assert(validFloatRegister(regNum)); _vectorHalfRegisters[regNum - UNW_AARCH64_V0] = value; } inline bool Registers_arm64::validVectorRegister(int) const { return false; } inline v128 Registers_arm64::getVectorRegister(int) const { _LIBUNWIND_ABORT("no arm64 vector register support yet"); } inline void Registers_arm64::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("no arm64 vector register support yet"); } #endif // _LIBUNWIND_TARGET_AARCH64 #if defined(_LIBUNWIND_TARGET_ARM) /// Registers_arm holds the register state of a thread in a 32-bit arm /// process. /// /// NOTE: Assumes VFPv3. On ARM processors without a floating point unit, /// this uses more memory than required. class _LIBUNWIND_HIDDEN Registers_arm { public: Registers_arm(); Registers_arm(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int num) const; unw_fpreg_t getFloatRegister(int num); void setFloatRegister(int num, unw_fpreg_t value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto() { restoreSavedFloatRegisters(); restoreCoreAndJumpTo(); } static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM; } static int getArch() { return REGISTERS_ARM; } uint32_t getSP() const { return _registers.__sp; } void setSP(uint32_t value) { _registers.__sp = value; } uint32_t getIP() const { return _registers.__pc; } void setIP(uint32_t value) { _registers.__pc = value; } void saveVFPAsX() { assert(_use_X_for_vfp_save || !_saved_vfp_d0_d15); _use_X_for_vfp_save = true; } void restoreSavedFloatRegisters() { if (_saved_vfp_d0_d15) { if (_use_X_for_vfp_save) restoreVFPWithFLDMX(_vfp_d0_d15_pad); else restoreVFPWithFLDMD(_vfp_d0_d15_pad); } if (_saved_vfp_d16_d31) restoreVFPv3(_vfp_d16_d31); #if defined(__ARM_WMMX) if (_saved_iwmmx) restoreiWMMX(_iwmmx); if (_saved_iwmmx_control) restoreiWMMXControl(_iwmmx_control); #endif } private: struct GPRs { uint32_t __r[13]; // r0-r12 uint32_t __sp; // Stack pointer r13 uint32_t __lr; // Link register r14 uint32_t __pc; // Program counter r15 }; struct PseudoRegisters { uint32_t __pac; // Return Authentication Code (PAC) }; static void saveVFPWithFSTMD(void*); static void saveVFPWithFSTMX(void*); static void saveVFPv3(void*); static void restoreVFPWithFLDMD(void*); static void restoreVFPWithFLDMX(void*); static void restoreVFPv3(void*); #if defined(__ARM_WMMX) static void saveiWMMX(void*); static void saveiWMMXControl(uint32_t*); static void restoreiWMMX(void*); static void restoreiWMMXControl(uint32_t*); #endif void restoreCoreAndJumpTo(); // ARM registers GPRs _registers; PseudoRegisters _pseudo_registers; // We save floating point registers lazily because we can't know ahead of // time which ones are used. See EHABI #4.7. // Whether D0-D15 are saved in the FTSMX instead of FSTMD format. // // See EHABI #7.5 that explains how matching instruction sequences for load // and store need to be used to correctly restore the exact register bits. bool _use_X_for_vfp_save; // Whether VFP D0-D15 are saved. bool _saved_vfp_d0_d15; // Whether VFPv3 D16-D31 are saved. bool _saved_vfp_d16_d31; // VFP registers D0-D15, + padding if saved using FSTMX unw_fpreg_t _vfp_d0_d15_pad[17]; // VFPv3 registers D16-D31, always saved using FSTMD unw_fpreg_t _vfp_d16_d31[16]; #if defined(__ARM_WMMX) // Whether iWMMX data registers are saved. bool _saved_iwmmx; // Whether iWMMX control registers are saved. mutable bool _saved_iwmmx_control; // iWMMX registers unw_fpreg_t _iwmmx[16]; // iWMMX control registers mutable uint32_t _iwmmx_control[4]; #endif }; inline Registers_arm::Registers_arm(const void *registers) : _use_X_for_vfp_save(false), _saved_vfp_d0_d15(false), _saved_vfp_d16_d31(false) { static_assert((check_fit::does_fit), "arm registers do not fit into unw_context_t"); // See __unw_getcontext() note about data. memcpy(&_registers, registers, sizeof(_registers)); memset(&_pseudo_registers, 0, sizeof(_pseudo_registers)); memset(&_vfp_d0_d15_pad, 0, sizeof(_vfp_d0_d15_pad)); memset(&_vfp_d16_d31, 0, sizeof(_vfp_d16_d31)); #if defined(__ARM_WMMX) _saved_iwmmx = false; _saved_iwmmx_control = false; memset(&_iwmmx, 0, sizeof(_iwmmx)); memset(&_iwmmx_control, 0, sizeof(_iwmmx_control)); #endif } inline Registers_arm::Registers_arm() : _use_X_for_vfp_save(false), _saved_vfp_d0_d15(false), _saved_vfp_d16_d31(false) { memset(&_registers, 0, sizeof(_registers)); memset(&_pseudo_registers, 0, sizeof(_pseudo_registers)); memset(&_vfp_d0_d15_pad, 0, sizeof(_vfp_d0_d15_pad)); memset(&_vfp_d16_d31, 0, sizeof(_vfp_d16_d31)); #if defined(__ARM_WMMX) _saved_iwmmx = false; _saved_iwmmx_control = false; memset(&_iwmmx, 0, sizeof(_iwmmx)); memset(&_iwmmx_control, 0, sizeof(_iwmmx_control)); #endif } inline bool Registers_arm::validRegister(int regNum) const { // Returns true for all non-VFP registers supported by the EHABI // virtual register set (VRS). if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R15) return true; #if defined(__ARM_WMMX) if (regNum >= UNW_ARM_WC0 && regNum <= UNW_ARM_WC3) return true; #endif #ifdef __ARM_FEATURE_PAUTH if (regNum == UNW_ARM_RA_AUTH_CODE) return true; #endif return false; } inline uint32_t Registers_arm::getRegister(int regNum) const { if (regNum == UNW_REG_SP || regNum == UNW_ARM_SP) return _registers.__sp; if (regNum == UNW_ARM_LR) return _registers.__lr; if (regNum == UNW_REG_IP || regNum == UNW_ARM_IP) return _registers.__pc; if (regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R12) return _registers.__r[regNum]; #if defined(__ARM_WMMX) if (regNum >= UNW_ARM_WC0 && regNum <= UNW_ARM_WC3) { if (!_saved_iwmmx_control) { _saved_iwmmx_control = true; saveiWMMXControl(_iwmmx_control); } return _iwmmx_control[regNum - UNW_ARM_WC0]; } #endif #ifdef __ARM_FEATURE_PAUTH if (regNum == UNW_ARM_RA_AUTH_CODE) return _pseudo_registers.__pac; #endif _LIBUNWIND_ABORT("unsupported arm register"); } inline void Registers_arm::setRegister(int regNum, uint32_t value) { if (regNum == UNW_REG_SP || regNum == UNW_ARM_SP) { _registers.__sp = value; return; } if (regNum == UNW_ARM_LR) { _registers.__lr = value; return; } if (regNum == UNW_REG_IP || regNum == UNW_ARM_IP) { _registers.__pc = value; return; } if (regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R12) { _registers.__r[regNum] = value; return; } #if defined(__ARM_WMMX) if (regNum >= UNW_ARM_WC0 && regNum <= UNW_ARM_WC3) { if (!_saved_iwmmx_control) { _saved_iwmmx_control = true; saveiWMMXControl(_iwmmx_control); } _iwmmx_control[regNum - UNW_ARM_WC0] = value; return; } #endif if (regNum == UNW_ARM_RA_AUTH_CODE) { _pseudo_registers.__pac = value; return; } _LIBUNWIND_ABORT("unsupported arm register"); } inline const char *Registers_arm::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: case UNW_ARM_IP: // UNW_ARM_R15 is alias return "pc"; case UNW_ARM_LR: // UNW_ARM_R14 is alias return "lr"; case UNW_REG_SP: case UNW_ARM_SP: // UNW_ARM_R13 is alias return "sp"; case UNW_ARM_R0: return "r0"; case UNW_ARM_R1: return "r1"; case UNW_ARM_R2: return "r2"; case UNW_ARM_R3: return "r3"; case UNW_ARM_R4: return "r4"; case UNW_ARM_R5: return "r5"; case UNW_ARM_R6: return "r6"; case UNW_ARM_R7: return "r7"; case UNW_ARM_R8: return "r8"; case UNW_ARM_R9: return "r9"; case UNW_ARM_R10: return "r10"; case UNW_ARM_R11: return "r11"; case UNW_ARM_R12: return "r12"; case UNW_ARM_S0: return "s0"; case UNW_ARM_S1: return "s1"; case UNW_ARM_S2: return "s2"; case UNW_ARM_S3: return "s3"; case UNW_ARM_S4: return "s4"; case UNW_ARM_S5: return "s5"; case UNW_ARM_S6: return "s6"; case UNW_ARM_S7: return "s7"; case UNW_ARM_S8: return "s8"; case UNW_ARM_S9: return "s9"; case UNW_ARM_S10: return "s10"; case UNW_ARM_S11: return "s11"; case UNW_ARM_S12: return "s12"; case UNW_ARM_S13: return "s13"; case UNW_ARM_S14: return "s14"; case UNW_ARM_S15: return "s15"; case UNW_ARM_S16: return "s16"; case UNW_ARM_S17: return "s17"; case UNW_ARM_S18: return "s18"; case UNW_ARM_S19: return "s19"; case UNW_ARM_S20: return "s20"; case UNW_ARM_S21: return "s21"; case UNW_ARM_S22: return "s22"; case UNW_ARM_S23: return "s23"; case UNW_ARM_S24: return "s24"; case UNW_ARM_S25: return "s25"; case UNW_ARM_S26: return "s26"; case UNW_ARM_S27: return "s27"; case UNW_ARM_S28: return "s28"; case UNW_ARM_S29: return "s29"; case UNW_ARM_S30: return "s30"; case UNW_ARM_S31: return "s31"; case UNW_ARM_D0: return "d0"; case UNW_ARM_D1: return "d1"; case UNW_ARM_D2: return "d2"; case UNW_ARM_D3: return "d3"; case UNW_ARM_D4: return "d4"; case UNW_ARM_D5: return "d5"; case UNW_ARM_D6: return "d6"; case UNW_ARM_D7: return "d7"; case UNW_ARM_D8: return "d8"; case UNW_ARM_D9: return "d9"; case UNW_ARM_D10: return "d10"; case UNW_ARM_D11: return "d11"; case UNW_ARM_D12: return "d12"; case UNW_ARM_D13: return "d13"; case UNW_ARM_D14: return "d14"; case UNW_ARM_D15: return "d15"; case UNW_ARM_D16: return "d16"; case UNW_ARM_D17: return "d17"; case UNW_ARM_D18: return "d18"; case UNW_ARM_D19: return "d19"; case UNW_ARM_D20: return "d20"; case UNW_ARM_D21: return "d21"; case UNW_ARM_D22: return "d22"; case UNW_ARM_D23: return "d23"; case UNW_ARM_D24: return "d24"; case UNW_ARM_D25: return "d25"; case UNW_ARM_D26: return "d26"; case UNW_ARM_D27: return "d27"; case UNW_ARM_D28: return "d28"; case UNW_ARM_D29: return "d29"; case UNW_ARM_D30: return "d30"; case UNW_ARM_D31: return "d31"; default: return "unknown register"; } } inline bool Registers_arm::validFloatRegister(int regNum) const { // NOTE: Consider the intel MMX registers floating points so the // __unw_get_fpreg can be used to transmit the 64-bit data back. return ((regNum >= UNW_ARM_D0) && (regNum <= UNW_ARM_D31)) #if defined(__ARM_WMMX) || ((regNum >= UNW_ARM_WR0) && (regNum <= UNW_ARM_WR15)) #endif ; } inline unw_fpreg_t Registers_arm::getFloatRegister(int regNum) { if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D15) { if (!_saved_vfp_d0_d15) { _saved_vfp_d0_d15 = true; if (_use_X_for_vfp_save) saveVFPWithFSTMX(_vfp_d0_d15_pad); else saveVFPWithFSTMD(_vfp_d0_d15_pad); } return _vfp_d0_d15_pad[regNum - UNW_ARM_D0]; } if (regNum >= UNW_ARM_D16 && regNum <= UNW_ARM_D31) { if (!_saved_vfp_d16_d31) { _saved_vfp_d16_d31 = true; saveVFPv3(_vfp_d16_d31); } return _vfp_d16_d31[regNum - UNW_ARM_D16]; } #if defined(__ARM_WMMX) if (regNum >= UNW_ARM_WR0 && regNum <= UNW_ARM_WR15) { if (!_saved_iwmmx) { _saved_iwmmx = true; saveiWMMX(_iwmmx); } return _iwmmx[regNum - UNW_ARM_WR0]; } #endif _LIBUNWIND_ABORT("Unknown ARM float register"); } inline void Registers_arm::setFloatRegister(int regNum, unw_fpreg_t value) { if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D15) { if (!_saved_vfp_d0_d15) { _saved_vfp_d0_d15 = true; if (_use_X_for_vfp_save) saveVFPWithFSTMX(_vfp_d0_d15_pad); else saveVFPWithFSTMD(_vfp_d0_d15_pad); } _vfp_d0_d15_pad[regNum - UNW_ARM_D0] = value; return; } if (regNum >= UNW_ARM_D16 && regNum <= UNW_ARM_D31) { if (!_saved_vfp_d16_d31) { _saved_vfp_d16_d31 = true; saveVFPv3(_vfp_d16_d31); } _vfp_d16_d31[regNum - UNW_ARM_D16] = value; return; } #if defined(__ARM_WMMX) if (regNum >= UNW_ARM_WR0 && regNum <= UNW_ARM_WR15) { if (!_saved_iwmmx) { _saved_iwmmx = true; saveiWMMX(_iwmmx); } _iwmmx[regNum - UNW_ARM_WR0] = value; return; } #endif _LIBUNWIND_ABORT("Unknown ARM float register"); } inline bool Registers_arm::validVectorRegister(int) const { return false; } inline v128 Registers_arm::getVectorRegister(int) const { _LIBUNWIND_ABORT("ARM vector support not implemented"); } inline void Registers_arm::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("ARM vector support not implemented"); } #endif // _LIBUNWIND_TARGET_ARM #if defined(_LIBUNWIND_TARGET_OR1K) /// Registers_or1k holds the register state of a thread in an OpenRISC1000 /// process. class _LIBUNWIND_HIDDEN Registers_or1k { public: Registers_or1k(); Registers_or1k(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K; } static int getArch() { return REGISTERS_OR1K; } uint64_t getSP() const { return _registers.__r[1]; } void setSP(uint32_t value) { _registers.__r[1] = value; } uint64_t getIP() const { return _registers.__pc; } void setIP(uint32_t value) { _registers.__pc = value; } private: struct or1k_thread_state_t { unsigned int __r[32]; // r0-r31 unsigned int __pc; // Program counter unsigned int __epcr; // Program counter at exception }; or1k_thread_state_t _registers; }; inline Registers_or1k::Registers_or1k(const void *registers) { static_assert((check_fit::does_fit), "or1k registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); } inline Registers_or1k::Registers_or1k() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_or1k::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum <= UNW_OR1K_R31) return true; if (regNum == UNW_OR1K_EPCR) return true; return false; } inline uint32_t Registers_or1k::getRegister(int regNum) const { if (regNum >= UNW_OR1K_R0 && regNum <= UNW_OR1K_R31) return _registers.__r[regNum - UNW_OR1K_R0]; switch (regNum) { case UNW_REG_IP: return _registers.__pc; case UNW_REG_SP: return _registers.__r[1]; case UNW_OR1K_EPCR: return _registers.__epcr; } _LIBUNWIND_ABORT("unsupported or1k register"); } inline void Registers_or1k::setRegister(int regNum, uint32_t value) { if (regNum >= UNW_OR1K_R0 && regNum <= UNW_OR1K_R31) { _registers.__r[regNum - UNW_OR1K_R0] = value; return; } switch (regNum) { case UNW_REG_IP: _registers.__pc = value; return; case UNW_REG_SP: _registers.__r[1] = value; return; case UNW_OR1K_EPCR: _registers.__epcr = value; return; } _LIBUNWIND_ABORT("unsupported or1k register"); } inline bool Registers_or1k::validFloatRegister(int /* regNum */) const { return false; } inline double Registers_or1k::getFloatRegister(int /* regNum */) const { _LIBUNWIND_ABORT("or1k float support not implemented"); } inline void Registers_or1k::setFloatRegister(int /* regNum */, double /* value */) { _LIBUNWIND_ABORT("or1k float support not implemented"); } inline bool Registers_or1k::validVectorRegister(int /* regNum */) const { return false; } inline v128 Registers_or1k::getVectorRegister(int /* regNum */) const { _LIBUNWIND_ABORT("or1k vector support not implemented"); } inline void Registers_or1k::setVectorRegister(int /* regNum */, v128 /* value */) { _LIBUNWIND_ABORT("or1k vector support not implemented"); } inline const char *Registers_or1k::getRegisterName(int regNum) { switch (regNum) { case UNW_OR1K_R0: return "r0"; case UNW_OR1K_R1: return "r1"; case UNW_OR1K_R2: return "r2"; case UNW_OR1K_R3: return "r3"; case UNW_OR1K_R4: return "r4"; case UNW_OR1K_R5: return "r5"; case UNW_OR1K_R6: return "r6"; case UNW_OR1K_R7: return "r7"; case UNW_OR1K_R8: return "r8"; case UNW_OR1K_R9: return "r9"; case UNW_OR1K_R10: return "r10"; case UNW_OR1K_R11: return "r11"; case UNW_OR1K_R12: return "r12"; case UNW_OR1K_R13: return "r13"; case UNW_OR1K_R14: return "r14"; case UNW_OR1K_R15: return "r15"; case UNW_OR1K_R16: return "r16"; case UNW_OR1K_R17: return "r17"; case UNW_OR1K_R18: return "r18"; case UNW_OR1K_R19: return "r19"; case UNW_OR1K_R20: return "r20"; case UNW_OR1K_R21: return "r21"; case UNW_OR1K_R22: return "r22"; case UNW_OR1K_R23: return "r23"; case UNW_OR1K_R24: return "r24"; case UNW_OR1K_R25: return "r25"; case UNW_OR1K_R26: return "r26"; case UNW_OR1K_R27: return "r27"; case UNW_OR1K_R28: return "r28"; case UNW_OR1K_R29: return "r29"; case UNW_OR1K_R30: return "r30"; case UNW_OR1K_R31: return "r31"; case UNW_OR1K_EPCR: return "EPCR"; default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_OR1K #if defined(_LIBUNWIND_TARGET_MIPS_O32) /// Registers_mips_o32 holds the register state of a thread in a 32-bit MIPS /// process. class _LIBUNWIND_HIDDEN Registers_mips_o32 { public: Registers_mips_o32(); Registers_mips_o32(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS; } static int getArch() { return REGISTERS_MIPS_O32; } uint32_t getSP() const { return _registers.__r[29]; } void setSP(uint32_t value) { _registers.__r[29] = value; } uint32_t getIP() const { return _registers.__pc; } void setIP(uint32_t value) { _registers.__pc = value; } private: struct mips_o32_thread_state_t { uint32_t __r[32]; uint32_t __pc; uint32_t __hi; uint32_t __lo; }; mips_o32_thread_state_t _registers; #ifdef __mips_hard_float /// O32 with 32-bit floating point registers only uses half of this /// space. However, using the same layout for 32-bit vs 64-bit /// floating point registers results in a single context size for /// O32 with hard float. uint32_t _padding; double _floats[32]; #endif }; inline Registers_mips_o32::Registers_mips_o32(const void *registers) { static_assert((check_fit::does_fit), "mips_o32 registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); } inline Registers_mips_o32::Registers_mips_o32() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_mips_o32::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum <= UNW_MIPS_R31) return true; #if __mips_isa_rev < 6 if (regNum == UNW_MIPS_HI) return true; if (regNum == UNW_MIPS_LO) return true; #endif #if defined(__mips_hard_float) && __mips_fpr == 32 if (regNum >= UNW_MIPS_F0 && regNum <= UNW_MIPS_F31) return true; #endif // FIXME: DSP accumulator registers, MSA registers return false; } inline uint32_t Registers_mips_o32::getRegister(int regNum) const { if (regNum >= UNW_MIPS_R0 && regNum <= UNW_MIPS_R31) return _registers.__r[regNum - UNW_MIPS_R0]; #if defined(__mips_hard_float) && __mips_fpr == 32 if (regNum >= UNW_MIPS_F0 && regNum <= UNW_MIPS_F31) { uint32_t *p; if (regNum % 2 == 0) p = (uint32_t *)&_floats[regNum - UNW_MIPS_F0]; else p = (uint32_t *)&_floats[(regNum - 1) - UNW_MIPS_F0] + 1; return *p; } #endif switch (regNum) { case UNW_REG_IP: return _registers.__pc; case UNW_REG_SP: return _registers.__r[29]; #if __mips_isa_rev < 6 case UNW_MIPS_HI: return _registers.__hi; case UNW_MIPS_LO: return _registers.__lo; #endif } _LIBUNWIND_ABORT("unsupported mips_o32 register"); } inline void Registers_mips_o32::setRegister(int regNum, uint32_t value) { if (regNum >= UNW_MIPS_R0 && regNum <= UNW_MIPS_R31) { _registers.__r[regNum - UNW_MIPS_R0] = value; return; } #if defined(__mips_hard_float) && __mips_fpr == 32 if (regNum >= UNW_MIPS_F0 && regNum <= UNW_MIPS_F31) { uint32_t *p; if (regNum % 2 == 0) p = (uint32_t *)&_floats[regNum - UNW_MIPS_F0]; else p = (uint32_t *)&_floats[(regNum - 1) - UNW_MIPS_F0] + 1; *p = value; return; } #endif switch (regNum) { case UNW_REG_IP: _registers.__pc = value; return; case UNW_REG_SP: _registers.__r[29] = value; return; #if __mips_isa_rev < 6 case UNW_MIPS_HI: _registers.__hi = value; return; case UNW_MIPS_LO: _registers.__lo = value; #endif return; } _LIBUNWIND_ABORT("unsupported mips_o32 register"); } inline bool Registers_mips_o32::validFloatRegister(int regNum) const { #if defined(__mips_hard_float) && __mips_fpr == 64 if (regNum >= UNW_MIPS_F0 && regNum <= UNW_MIPS_F31) return true; #else (void)regNum; #endif return false; } inline double Registers_mips_o32::getFloatRegister(int regNum) const { #if defined(__mips_hard_float) && __mips_fpr == 64 assert(validFloatRegister(regNum)); return _floats[regNum - UNW_MIPS_F0]; #else (void)regNum; _LIBUNWIND_ABORT("mips_o32 float support not implemented"); #endif } inline void Registers_mips_o32::setFloatRegister(int regNum, double value) { #if defined(__mips_hard_float) && __mips_fpr == 64 assert(validFloatRegister(regNum)); _floats[regNum - UNW_MIPS_F0] = value; #else (void)regNum; (void)value; _LIBUNWIND_ABORT("mips_o32 float support not implemented"); #endif } inline bool Registers_mips_o32::validVectorRegister(int /* regNum */) const { return false; } inline v128 Registers_mips_o32::getVectorRegister(int /* regNum */) const { _LIBUNWIND_ABORT("mips_o32 vector support not implemented"); } inline void Registers_mips_o32::setVectorRegister(int /* regNum */, v128 /* value */) { _LIBUNWIND_ABORT("mips_o32 vector support not implemented"); } inline const char *Registers_mips_o32::getRegisterName(int regNum) { switch (regNum) { case UNW_MIPS_R0: return "$0"; case UNW_MIPS_R1: return "$1"; case UNW_MIPS_R2: return "$2"; case UNW_MIPS_R3: return "$3"; case UNW_MIPS_R4: return "$4"; case UNW_MIPS_R5: return "$5"; case UNW_MIPS_R6: return "$6"; case UNW_MIPS_R7: return "$7"; case UNW_MIPS_R8: return "$8"; case UNW_MIPS_R9: return "$9"; case UNW_MIPS_R10: return "$10"; case UNW_MIPS_R11: return "$11"; case UNW_MIPS_R12: return "$12"; case UNW_MIPS_R13: return "$13"; case UNW_MIPS_R14: return "$14"; case UNW_MIPS_R15: return "$15"; case UNW_MIPS_R16: return "$16"; case UNW_MIPS_R17: return "$17"; case UNW_MIPS_R18: return "$18"; case UNW_MIPS_R19: return "$19"; case UNW_MIPS_R20: return "$20"; case UNW_MIPS_R21: return "$21"; case UNW_MIPS_R22: return "$22"; case UNW_MIPS_R23: return "$23"; case UNW_MIPS_R24: return "$24"; case UNW_MIPS_R25: return "$25"; case UNW_MIPS_R26: return "$26"; case UNW_MIPS_R27: return "$27"; case UNW_MIPS_R28: return "$28"; case UNW_MIPS_R29: return "$29"; case UNW_MIPS_R30: return "$30"; case UNW_MIPS_R31: return "$31"; case UNW_MIPS_F0: return "$f0"; case UNW_MIPS_F1: return "$f1"; case UNW_MIPS_F2: return "$f2"; case UNW_MIPS_F3: return "$f3"; case UNW_MIPS_F4: return "$f4"; case UNW_MIPS_F5: return "$f5"; case UNW_MIPS_F6: return "$f6"; case UNW_MIPS_F7: return "$f7"; case UNW_MIPS_F8: return "$f8"; case UNW_MIPS_F9: return "$f9"; case UNW_MIPS_F10: return "$f10"; case UNW_MIPS_F11: return "$f11"; case UNW_MIPS_F12: return "$f12"; case UNW_MIPS_F13: return "$f13"; case UNW_MIPS_F14: return "$f14"; case UNW_MIPS_F15: return "$f15"; case UNW_MIPS_F16: return "$f16"; case UNW_MIPS_F17: return "$f17"; case UNW_MIPS_F18: return "$f18"; case UNW_MIPS_F19: return "$f19"; case UNW_MIPS_F20: return "$f20"; case UNW_MIPS_F21: return "$f21"; case UNW_MIPS_F22: return "$f22"; case UNW_MIPS_F23: return "$f23"; case UNW_MIPS_F24: return "$f24"; case UNW_MIPS_F25: return "$f25"; case UNW_MIPS_F26: return "$f26"; case UNW_MIPS_F27: return "$f27"; case UNW_MIPS_F28: return "$f28"; case UNW_MIPS_F29: return "$f29"; case UNW_MIPS_F30: return "$f30"; case UNW_MIPS_F31: return "$f31"; #if __mips_isa_rev < 6 case UNW_MIPS_HI: return "$hi"; case UNW_MIPS_LO: return "$lo"; #endif default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_MIPS_O32 #if defined(_LIBUNWIND_TARGET_MIPS_NEWABI) /// Registers_mips_newabi holds the register state of a thread in a /// MIPS process using NEWABI (the N32 or N64 ABIs). class _LIBUNWIND_HIDDEN Registers_mips_newabi { public: Registers_mips_newabi(); Registers_mips_newabi(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS; } static int getArch() { return REGISTERS_MIPS_NEWABI; } uint64_t getSP() const { return _registers.__r[29]; } void setSP(uint64_t value) { _registers.__r[29] = value; } uint64_t getIP() const { return _registers.__pc; } void setIP(uint64_t value) { _registers.__pc = value; } private: struct mips_newabi_thread_state_t { uint64_t __r[32]; uint64_t __pc; uint64_t __hi; uint64_t __lo; }; mips_newabi_thread_state_t _registers; #ifdef __mips_hard_float double _floats[32]; #endif }; inline Registers_mips_newabi::Registers_mips_newabi(const void *registers) { static_assert((check_fit::does_fit), "mips_newabi registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); } inline Registers_mips_newabi::Registers_mips_newabi() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_mips_newabi::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum <= UNW_MIPS_R31) return true; #if __mips_isa_rev < 6 if (regNum == UNW_MIPS_HI) return true; if (regNum == UNW_MIPS_LO) return true; #endif // FIXME: Hard float, DSP accumulator registers, MSA registers return false; } inline uint64_t Registers_mips_newabi::getRegister(int regNum) const { if (regNum >= UNW_MIPS_R0 && regNum <= UNW_MIPS_R31) return _registers.__r[regNum - UNW_MIPS_R0]; switch (regNum) { case UNW_REG_IP: return _registers.__pc; case UNW_REG_SP: return _registers.__r[29]; #if __mips_isa_rev < 6 case UNW_MIPS_HI: return _registers.__hi; case UNW_MIPS_LO: return _registers.__lo; #endif } _LIBUNWIND_ABORT("unsupported mips_newabi register"); } inline void Registers_mips_newabi::setRegister(int regNum, uint64_t value) { if (regNum >= UNW_MIPS_R0 && regNum <= UNW_MIPS_R31) { _registers.__r[regNum - UNW_MIPS_R0] = value; return; } switch (regNum) { case UNW_REG_IP: _registers.__pc = value; return; case UNW_REG_SP: _registers.__r[29] = value; return; #if __mips_isa_rev < 6 case UNW_MIPS_HI: _registers.__hi = value; return; case UNW_MIPS_LO: _registers.__lo = value; return; #endif } _LIBUNWIND_ABORT("unsupported mips_newabi register"); } inline bool Registers_mips_newabi::validFloatRegister(int regNum) const { #ifdef __mips_hard_float if (regNum >= UNW_MIPS_F0 && regNum <= UNW_MIPS_F31) return true; #else (void)regNum; #endif return false; } inline double Registers_mips_newabi::getFloatRegister(int regNum) const { #ifdef __mips_hard_float assert(validFloatRegister(regNum)); return _floats[regNum - UNW_MIPS_F0]; #else (void)regNum; _LIBUNWIND_ABORT("mips_newabi float support not implemented"); #endif } inline void Registers_mips_newabi::setFloatRegister(int regNum, double value) { #ifdef __mips_hard_float assert(validFloatRegister(regNum)); _floats[regNum - UNW_MIPS_F0] = value; #else (void)regNum; (void)value; _LIBUNWIND_ABORT("mips_newabi float support not implemented"); #endif } inline bool Registers_mips_newabi::validVectorRegister(int /* regNum */) const { return false; } inline v128 Registers_mips_newabi::getVectorRegister(int /* regNum */) const { _LIBUNWIND_ABORT("mips_newabi vector support not implemented"); } inline void Registers_mips_newabi::setVectorRegister(int /* regNum */, v128 /* value */) { _LIBUNWIND_ABORT("mips_newabi vector support not implemented"); } inline const char *Registers_mips_newabi::getRegisterName(int regNum) { switch (regNum) { case UNW_MIPS_R0: return "$0"; case UNW_MIPS_R1: return "$1"; case UNW_MIPS_R2: return "$2"; case UNW_MIPS_R3: return "$3"; case UNW_MIPS_R4: return "$4"; case UNW_MIPS_R5: return "$5"; case UNW_MIPS_R6: return "$6"; case UNW_MIPS_R7: return "$7"; case UNW_MIPS_R8: return "$8"; case UNW_MIPS_R9: return "$9"; case UNW_MIPS_R10: return "$10"; case UNW_MIPS_R11: return "$11"; case UNW_MIPS_R12: return "$12"; case UNW_MIPS_R13: return "$13"; case UNW_MIPS_R14: return "$14"; case UNW_MIPS_R15: return "$15"; case UNW_MIPS_R16: return "$16"; case UNW_MIPS_R17: return "$17"; case UNW_MIPS_R18: return "$18"; case UNW_MIPS_R19: return "$19"; case UNW_MIPS_R20: return "$20"; case UNW_MIPS_R21: return "$21"; case UNW_MIPS_R22: return "$22"; case UNW_MIPS_R23: return "$23"; case UNW_MIPS_R24: return "$24"; case UNW_MIPS_R25: return "$25"; case UNW_MIPS_R26: return "$26"; case UNW_MIPS_R27: return "$27"; case UNW_MIPS_R28: return "$28"; case UNW_MIPS_R29: return "$29"; case UNW_MIPS_R30: return "$30"; case UNW_MIPS_R31: return "$31"; case UNW_MIPS_F0: return "$f0"; case UNW_MIPS_F1: return "$f1"; case UNW_MIPS_F2: return "$f2"; case UNW_MIPS_F3: return "$f3"; case UNW_MIPS_F4: return "$f4"; case UNW_MIPS_F5: return "$f5"; case UNW_MIPS_F6: return "$f6"; case UNW_MIPS_F7: return "$f7"; case UNW_MIPS_F8: return "$f8"; case UNW_MIPS_F9: return "$f9"; case UNW_MIPS_F10: return "$f10"; case UNW_MIPS_F11: return "$f11"; case UNW_MIPS_F12: return "$f12"; case UNW_MIPS_F13: return "$f13"; case UNW_MIPS_F14: return "$f14"; case UNW_MIPS_F15: return "$f15"; case UNW_MIPS_F16: return "$f16"; case UNW_MIPS_F17: return "$f17"; case UNW_MIPS_F18: return "$f18"; case UNW_MIPS_F19: return "$f19"; case UNW_MIPS_F20: return "$f20"; case UNW_MIPS_F21: return "$f21"; case UNW_MIPS_F22: return "$f22"; case UNW_MIPS_F23: return "$f23"; case UNW_MIPS_F24: return "$f24"; case UNW_MIPS_F25: return "$f25"; case UNW_MIPS_F26: return "$f26"; case UNW_MIPS_F27: return "$f27"; case UNW_MIPS_F28: return "$f28"; case UNW_MIPS_F29: return "$f29"; case UNW_MIPS_F30: return "$f30"; case UNW_MIPS_F31: return "$f31"; #if __mips_isa_rev < 6 case UNW_MIPS_HI: return "$hi"; case UNW_MIPS_LO: return "$lo"; #endif default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_MIPS_NEWABI #if defined(_LIBUNWIND_TARGET_SPARC) /// Registers_sparc holds the register state of a thread in a 32-bit Sparc /// process. class _LIBUNWIND_HIDDEN Registers_sparc { public: Registers_sparc(); Registers_sparc(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC; } static int getArch() { return REGISTERS_SPARC; } uint64_t getSP() const { return _registers.__regs[UNW_SPARC_O6]; } void setSP(uint32_t value) { _registers.__regs[UNW_SPARC_O6] = value; } uint64_t getIP() const { return _registers.__regs[UNW_SPARC_O7]; } void setIP(uint32_t value) { _registers.__regs[UNW_SPARC_O7] = value; } private: struct sparc_thread_state_t { unsigned int __regs[32]; }; sparc_thread_state_t _registers; }; inline Registers_sparc::Registers_sparc(const void *registers) { static_assert((check_fit::does_fit), "sparc registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); } inline Registers_sparc::Registers_sparc() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_sparc::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum <= UNW_SPARC_I7) return true; return false; } inline uint32_t Registers_sparc::getRegister(int regNum) const { if ((UNW_SPARC_G0 <= regNum) && (regNum <= UNW_SPARC_I7)) { return _registers.__regs[regNum]; } switch (regNum) { case UNW_REG_IP: return _registers.__regs[UNW_SPARC_O7]; case UNW_REG_SP: return _registers.__regs[UNW_SPARC_O6]; } _LIBUNWIND_ABORT("unsupported sparc register"); } inline void Registers_sparc::setRegister(int regNum, uint32_t value) { if ((UNW_SPARC_G0 <= regNum) && (regNum <= UNW_SPARC_I7)) { _registers.__regs[regNum] = value; return; } switch (regNum) { case UNW_REG_IP: _registers.__regs[UNW_SPARC_O7] = value; return; case UNW_REG_SP: _registers.__regs[UNW_SPARC_O6] = value; return; } _LIBUNWIND_ABORT("unsupported sparc register"); } inline bool Registers_sparc::validFloatRegister(int) const { return false; } inline double Registers_sparc::getFloatRegister(int) const { _LIBUNWIND_ABORT("no Sparc float registers"); } inline void Registers_sparc::setFloatRegister(int, double) { _LIBUNWIND_ABORT("no Sparc float registers"); } inline bool Registers_sparc::validVectorRegister(int) const { return false; } inline v128 Registers_sparc::getVectorRegister(int) const { _LIBUNWIND_ABORT("no Sparc vector registers"); } inline void Registers_sparc::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("no Sparc vector registers"); } inline const char *Registers_sparc::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "pc"; case UNW_SPARC_G0: return "g0"; case UNW_SPARC_G1: return "g1"; case UNW_SPARC_G2: return "g2"; case UNW_SPARC_G3: return "g3"; case UNW_SPARC_G4: return "g4"; case UNW_SPARC_G5: return "g5"; case UNW_SPARC_G6: return "g6"; case UNW_SPARC_G7: return "g7"; case UNW_SPARC_O0: return "o0"; case UNW_SPARC_O1: return "o1"; case UNW_SPARC_O2: return "o2"; case UNW_SPARC_O3: return "o3"; case UNW_SPARC_O4: return "o4"; case UNW_SPARC_O5: return "o5"; case UNW_REG_SP: case UNW_SPARC_O6: return "sp"; case UNW_SPARC_O7: return "o7"; case UNW_SPARC_L0: return "l0"; case UNW_SPARC_L1: return "l1"; case UNW_SPARC_L2: return "l2"; case UNW_SPARC_L3: return "l3"; case UNW_SPARC_L4: return "l4"; case UNW_SPARC_L5: return "l5"; case UNW_SPARC_L6: return "l6"; case UNW_SPARC_L7: return "l7"; case UNW_SPARC_I0: return "i0"; case UNW_SPARC_I1: return "i1"; case UNW_SPARC_I2: return "i2"; case UNW_SPARC_I3: return "i3"; case UNW_SPARC_I4: return "i4"; case UNW_SPARC_I5: return "i5"; case UNW_SPARC_I6: return "fp"; case UNW_SPARC_I7: return "i7"; default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_SPARC #if defined(_LIBUNWIND_TARGET_SPARC64) /// Registers_sparc64 holds the register state of a thread in a 64-bit /// sparc process. class _LIBUNWIND_HIDDEN Registers_sparc64 { public: Registers_sparc64() = default; Registers_sparc64(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64; } static int getArch() { return REGISTERS_SPARC64; } uint64_t getSP() const { return _registers.__regs[UNW_SPARC_O6] + 2047; } void setSP(uint64_t value) { _registers.__regs[UNW_SPARC_O6] = value - 2047; } uint64_t getIP() const { return _registers.__regs[UNW_SPARC_O7]; } void setIP(uint64_t value) { _registers.__regs[UNW_SPARC_O7] = value; } uint64_t getWCookie() const { return _wcookie; } private: struct sparc64_thread_state_t { uint64_t __regs[32]; }; sparc64_thread_state_t _registers{}; uint64_t _wcookie = 0; }; inline Registers_sparc64::Registers_sparc64(const void *registers) { static_assert((check_fit::does_fit), "sparc64 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); memcpy(&_wcookie, static_cast(registers) + sizeof(_registers), sizeof(_wcookie)); } inline bool Registers_sparc64::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum <= UNW_SPARC_I7) return true; return false; } inline uint64_t Registers_sparc64::getRegister(int regNum) const { if (regNum >= UNW_SPARC_G0 && regNum <= UNW_SPARC_I7) return _registers.__regs[regNum]; switch (regNum) { case UNW_REG_IP: return _registers.__regs[UNW_SPARC_O7]; case UNW_REG_SP: return _registers.__regs[UNW_SPARC_O6] + 2047; } _LIBUNWIND_ABORT("unsupported sparc64 register"); } inline void Registers_sparc64::setRegister(int regNum, uint64_t value) { if (regNum >= UNW_SPARC_G0 && regNum <= UNW_SPARC_I7) { _registers.__regs[regNum] = value; return; } switch (regNum) { case UNW_REG_IP: _registers.__regs[UNW_SPARC_O7] = value; return; case UNW_REG_SP: _registers.__regs[UNW_SPARC_O6] = value - 2047; return; } _LIBUNWIND_ABORT("unsupported sparc64 register"); } inline bool Registers_sparc64::validFloatRegister(int) const { return false; } inline double Registers_sparc64::getFloatRegister(int) const { _LIBUNWIND_ABORT("no sparc64 float registers"); } inline void Registers_sparc64::setFloatRegister(int, double) { _LIBUNWIND_ABORT("no sparc64 float registers"); } inline bool Registers_sparc64::validVectorRegister(int) const { return false; } inline v128 Registers_sparc64::getVectorRegister(int) const { _LIBUNWIND_ABORT("no sparc64 vector registers"); } inline void Registers_sparc64::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("no sparc64 vector registers"); } inline const char *Registers_sparc64::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "pc"; case UNW_SPARC_G0: return "g0"; case UNW_SPARC_G1: return "g1"; case UNW_SPARC_G2: return "g2"; case UNW_SPARC_G3: return "g3"; case UNW_SPARC_G4: return "g4"; case UNW_SPARC_G5: return "g5"; case UNW_SPARC_G6: return "g6"; case UNW_SPARC_G7: return "g7"; case UNW_SPARC_O0: return "o0"; case UNW_SPARC_O1: return "o1"; case UNW_SPARC_O2: return "o2"; case UNW_SPARC_O3: return "o3"; case UNW_SPARC_O4: return "o4"; case UNW_SPARC_O5: return "o5"; case UNW_REG_SP: case UNW_SPARC_O6: return "o6"; case UNW_SPARC_O7: return "o7"; case UNW_SPARC_L0: return "l0"; case UNW_SPARC_L1: return "l1"; case UNW_SPARC_L2: return "l2"; case UNW_SPARC_L3: return "l3"; case UNW_SPARC_L4: return "l4"; case UNW_SPARC_L5: return "l5"; case UNW_SPARC_L6: return "l6"; case UNW_SPARC_L7: return "l7"; case UNW_SPARC_I0: return "i0"; case UNW_SPARC_I1: return "i1"; case UNW_SPARC_I2: return "i2"; case UNW_SPARC_I3: return "i3"; case UNW_SPARC_I4: return "i4"; case UNW_SPARC_I5: return "i5"; case UNW_SPARC_I6: return "i6"; case UNW_SPARC_I7: return "i7"; default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_SPARC64 #if defined(_LIBUNWIND_TARGET_HEXAGON) /// Registers_hexagon holds the register state of a thread in a Hexagon QDSP6 /// process. class _LIBUNWIND_HIDDEN Registers_hexagon { public: Registers_hexagon(); Registers_hexagon(const void *registers); bool validRegister(int num) const; uint32_t getRegister(int num) const; void setRegister(int num, uint32_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON; } static int getArch() { return REGISTERS_HEXAGON; } uint32_t getSP() const { return _registers.__r[UNW_HEXAGON_R29]; } void setSP(uint32_t value) { _registers.__r[UNW_HEXAGON_R29] = value; } uint32_t getIP() const { return _registers.__r[UNW_HEXAGON_PC]; } void setIP(uint32_t value) { _registers.__r[UNW_HEXAGON_PC] = value; } private: struct hexagon_thread_state_t { unsigned int __r[35]; }; hexagon_thread_state_t _registers; }; inline Registers_hexagon::Registers_hexagon(const void *registers) { static_assert((check_fit::does_fit), "hexagon registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); } inline Registers_hexagon::Registers_hexagon() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_hexagon::validRegister(int regNum) const { if (regNum <= UNW_HEXAGON_R31) return true; return false; } inline uint32_t Registers_hexagon::getRegister(int regNum) const { if (regNum >= UNW_HEXAGON_R0 && regNum <= UNW_HEXAGON_R31) return _registers.__r[regNum - UNW_HEXAGON_R0]; switch (regNum) { case UNW_REG_IP: return _registers.__r[UNW_HEXAGON_PC]; case UNW_REG_SP: return _registers.__r[UNW_HEXAGON_R29]; } _LIBUNWIND_ABORT("unsupported hexagon register"); } inline void Registers_hexagon::setRegister(int regNum, uint32_t value) { if (regNum >= UNW_HEXAGON_R0 && regNum <= UNW_HEXAGON_R31) { _registers.__r[regNum - UNW_HEXAGON_R0] = value; return; } switch (regNum) { case UNW_REG_IP: _registers.__r[UNW_HEXAGON_PC] = value; return; case UNW_REG_SP: _registers.__r[UNW_HEXAGON_R29] = value; return; } _LIBUNWIND_ABORT("unsupported hexagon register"); } inline bool Registers_hexagon::validFloatRegister(int /* regNum */) const { return false; } inline double Registers_hexagon::getFloatRegister(int /* regNum */) const { _LIBUNWIND_ABORT("hexagon float support not implemented"); } inline void Registers_hexagon::setFloatRegister(int /* regNum */, double /* value */) { _LIBUNWIND_ABORT("hexagon float support not implemented"); } inline bool Registers_hexagon::validVectorRegister(int /* regNum */) const { return false; } inline v128 Registers_hexagon::getVectorRegister(int /* regNum */) const { _LIBUNWIND_ABORT("hexagon vector support not implemented"); } inline void Registers_hexagon::setVectorRegister(int /* regNum */, v128 /* value */) { _LIBUNWIND_ABORT("hexagon vector support not implemented"); } inline const char *Registers_hexagon::getRegisterName(int regNum) { switch (regNum) { case UNW_HEXAGON_R0: return "r0"; case UNW_HEXAGON_R1: return "r1"; case UNW_HEXAGON_R2: return "r2"; case UNW_HEXAGON_R3: return "r3"; case UNW_HEXAGON_R4: return "r4"; case UNW_HEXAGON_R5: return "r5"; case UNW_HEXAGON_R6: return "r6"; case UNW_HEXAGON_R7: return "r7"; case UNW_HEXAGON_R8: return "r8"; case UNW_HEXAGON_R9: return "r9"; case UNW_HEXAGON_R10: return "r10"; case UNW_HEXAGON_R11: return "r11"; case UNW_HEXAGON_R12: return "r12"; case UNW_HEXAGON_R13: return "r13"; case UNW_HEXAGON_R14: return "r14"; case UNW_HEXAGON_R15: return "r15"; case UNW_HEXAGON_R16: return "r16"; case UNW_HEXAGON_R17: return "r17"; case UNW_HEXAGON_R18: return "r18"; case UNW_HEXAGON_R19: return "r19"; case UNW_HEXAGON_R20: return "r20"; case UNW_HEXAGON_R21: return "r21"; case UNW_HEXAGON_R22: return "r22"; case UNW_HEXAGON_R23: return "r23"; case UNW_HEXAGON_R24: return "r24"; case UNW_HEXAGON_R25: return "r25"; case UNW_HEXAGON_R26: return "r26"; case UNW_HEXAGON_R27: return "r27"; case UNW_HEXAGON_R28: return "r28"; case UNW_HEXAGON_R29: return "r29"; case UNW_HEXAGON_R30: return "r30"; case UNW_HEXAGON_R31: return "r31"; default: return "unknown register"; } } #endif // _LIBUNWIND_TARGET_HEXAGON #if defined(_LIBUNWIND_TARGET_RISCV) /// Registers_riscv holds the register state of a thread in a RISC-V /// process. // This check makes it safe when LIBUNWIND_ENABLE_CROSS_UNWINDING enabled. # ifdef __riscv # if __riscv_xlen == 32 typedef uint32_t reg_t; # elif __riscv_xlen == 64 typedef uint64_t reg_t; # else # error "Unsupported __riscv_xlen" # endif # if defined(__riscv_flen) # if __riscv_flen == 64 typedef double fp_t; # elif __riscv_flen == 32 typedef float fp_t; # else # error "Unsupported __riscv_flen" # endif # else // This is just for suppressing undeclared error of fp_t. typedef double fp_t; # endif # else // Use Max possible width when cross unwinding typedef uint64_t reg_t; typedef double fp_t; # define __riscv_xlen 64 # define __riscv_flen 64 #endif /// Registers_riscv holds the register state of a thread. class _LIBUNWIND_HIDDEN Registers_riscv { public: Registers_riscv(); Registers_riscv(const void *registers); bool validRegister(int num) const; reg_t getRegister(int num) const; void setRegister(int num, reg_t value); bool validFloatRegister(int num) const; fp_t getFloatRegister(int num) const; void setFloatRegister(int num, fp_t value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV; } static int getArch() { return REGISTERS_RISCV; } reg_t getSP() const { return _registers[2]; } void setSP(reg_t value) { _registers[2] = value; } reg_t getIP() const { return _registers[0]; } void setIP(reg_t value) { _registers[0] = value; } private: // _registers[0] holds the pc reg_t _registers[32]; # if defined(__riscv_flen) fp_t _floats[32]; # endif }; inline Registers_riscv::Registers_riscv(const void *registers) { static_assert((check_fit::does_fit), "riscv registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); # if __riscv_xlen == 32 static_assert(sizeof(_registers) == 0x80, "expected float registers to be at offset 128"); # elif __riscv_xlen == 64 static_assert(sizeof(_registers) == 0x100, "expected float registers to be at offset 256"); # else # error "Unexpected float registers." # endif # if defined(__riscv_flen) memcpy(_floats, static_cast(registers) + sizeof(_registers), sizeof(_floats)); # endif } inline Registers_riscv::Registers_riscv() { memset(&_registers, 0, sizeof(_registers)); # if defined(__riscv_flen) memset(&_floats, 0, sizeof(_floats)); # endif } inline bool Registers_riscv::validRegister(int regNum) const { if (regNum == UNW_REG_IP) return true; if (regNum == UNW_REG_SP) return true; if (regNum < 0) return false; if (regNum == UNW_RISCV_VLENB) return true; if (regNum > UNW_RISCV_F31) return false; return true; } inline reg_t Registers_riscv::getRegister(int regNum) const { if (regNum == UNW_REG_IP) return _registers[0]; if (regNum == UNW_REG_SP) return _registers[2]; if (regNum == UNW_RISCV_X0) return 0; if ((regNum > 0) && (regNum < 32)) return _registers[regNum]; if (regNum == UNW_RISCV_VLENB) { reg_t vlenb; __asm__ volatile("csrr %0, 0xC22" : "=r"(vlenb)); return vlenb; } _LIBUNWIND_ABORT("unsupported riscv register"); } inline void Registers_riscv::setRegister(int regNum, reg_t value) { if (regNum == UNW_REG_IP) _registers[0] = value; else if (regNum == UNW_REG_SP) _registers[2] = value; else if (regNum == UNW_RISCV_X0) /* x0 is hardwired to zero */ return; else if ((regNum > 0) && (regNum < 32)) _registers[regNum] = value; else _LIBUNWIND_ABORT("unsupported riscv register"); } inline const char *Registers_riscv::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "pc"; case UNW_REG_SP: return "sp"; case UNW_RISCV_X0: return "zero"; case UNW_RISCV_X1: return "ra"; case UNW_RISCV_X2: return "sp"; case UNW_RISCV_X3: return "gp"; case UNW_RISCV_X4: return "tp"; case UNW_RISCV_X5: return "t0"; case UNW_RISCV_X6: return "t1"; case UNW_RISCV_X7: return "t2"; case UNW_RISCV_X8: return "s0"; case UNW_RISCV_X9: return "s1"; case UNW_RISCV_X10: return "a0"; case UNW_RISCV_X11: return "a1"; case UNW_RISCV_X12: return "a2"; case UNW_RISCV_X13: return "a3"; case UNW_RISCV_X14: return "a4"; case UNW_RISCV_X15: return "a5"; case UNW_RISCV_X16: return "a6"; case UNW_RISCV_X17: return "a7"; case UNW_RISCV_X18: return "s2"; case UNW_RISCV_X19: return "s3"; case UNW_RISCV_X20: return "s4"; case UNW_RISCV_X21: return "s5"; case UNW_RISCV_X22: return "s6"; case UNW_RISCV_X23: return "s7"; case UNW_RISCV_X24: return "s8"; case UNW_RISCV_X25: return "s9"; case UNW_RISCV_X26: return "s10"; case UNW_RISCV_X27: return "s11"; case UNW_RISCV_X28: return "t3"; case UNW_RISCV_X29: return "t4"; case UNW_RISCV_X30: return "t5"; case UNW_RISCV_X31: return "t6"; case UNW_RISCV_F0: return "ft0"; case UNW_RISCV_F1: return "ft1"; case UNW_RISCV_F2: return "ft2"; case UNW_RISCV_F3: return "ft3"; case UNW_RISCV_F4: return "ft4"; case UNW_RISCV_F5: return "ft5"; case UNW_RISCV_F6: return "ft6"; case UNW_RISCV_F7: return "ft7"; case UNW_RISCV_F8: return "fs0"; case UNW_RISCV_F9: return "fs1"; case UNW_RISCV_F10: return "fa0"; case UNW_RISCV_F11: return "fa1"; case UNW_RISCV_F12: return "fa2"; case UNW_RISCV_F13: return "fa3"; case UNW_RISCV_F14: return "fa4"; case UNW_RISCV_F15: return "fa5"; case UNW_RISCV_F16: return "fa6"; case UNW_RISCV_F17: return "fa7"; case UNW_RISCV_F18: return "fs2"; case UNW_RISCV_F19: return "fs3"; case UNW_RISCV_F20: return "fs4"; case UNW_RISCV_F21: return "fs5"; case UNW_RISCV_F22: return "fs6"; case UNW_RISCV_F23: return "fs7"; case UNW_RISCV_F24: return "fs8"; case UNW_RISCV_F25: return "fs9"; case UNW_RISCV_F26: return "fs10"; case UNW_RISCV_F27: return "fs11"; case UNW_RISCV_F28: return "ft8"; case UNW_RISCV_F29: return "ft9"; case UNW_RISCV_F30: return "ft10"; case UNW_RISCV_F31: return "ft11"; case UNW_RISCV_VLENB: return "vlenb"; default: return "unknown register"; } } inline bool Registers_riscv::validFloatRegister(int regNum) const { # if defined(__riscv_flen) if (regNum < UNW_RISCV_F0) return false; if (regNum > UNW_RISCV_F31) return false; return true; # else (void)regNum; return false; # endif } inline fp_t Registers_riscv::getFloatRegister(int regNum) const { # if defined(__riscv_flen) assert(validFloatRegister(regNum)); return _floats[regNum - UNW_RISCV_F0]; # else (void)regNum; _LIBUNWIND_ABORT("libunwind not built with float support"); # endif } inline void Registers_riscv::setFloatRegister(int regNum, fp_t value) { # if defined(__riscv_flen) assert(validFloatRegister(regNum)); _floats[regNum - UNW_RISCV_F0] = value; # else (void)regNum; (void)value; _LIBUNWIND_ABORT("libunwind not built with float support"); # endif } inline bool Registers_riscv::validVectorRegister(int) const { return false; } inline v128 Registers_riscv::getVectorRegister(int) const { _LIBUNWIND_ABORT("no riscv vector register support yet"); } inline void Registers_riscv::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("no riscv vector register support yet"); } #endif // _LIBUNWIND_TARGET_RISCV #if defined(_LIBUNWIND_TARGET_VE) /// Registers_ve holds the register state of a thread in a VE process. class _LIBUNWIND_HIDDEN Registers_ve { public: Registers_ve(); Registers_ve(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE; } static int getArch() { return REGISTERS_VE; } uint64_t getSP() const { return _registers.__s[11]; } void setSP(uint64_t value) { _registers.__s[11] = value; } uint64_t getIP() const { return _registers.__ic; } void setIP(uint64_t value) { _registers.__ic = value; } private: // FIXME: Need to store not only scalar registers but also vector and vector // mask registers. VEOS uses mcontext_t defined in ucontext.h. It takes // 524288 bytes (65536*8 bytes), though. Currently, we use libunwind for // SjLj exception support only, so Registers_ve is not implemented completely. struct ve_thread_state_t { uint64_t __s[64]; // s0-s64 uint64_t __ic; // Instruction counter (IC) uint64_t __vixr; // Vector Index Register uint64_t __vl; // Vector Length Register }; ve_thread_state_t _registers; // total 67 registers // Currently no vector register is preserved. }; inline Registers_ve::Registers_ve(const void *registers) { static_assert((check_fit::does_fit), "ve registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); static_assert(sizeof(_registers) == 536, "expected vector register offset to be 536"); } inline Registers_ve::Registers_ve() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_ve::validRegister(int regNum) const { if (regNum >= UNW_VE_S0 && regNum <= UNW_VE_S63) return true; switch (regNum) { case UNW_REG_IP: case UNW_REG_SP: case UNW_VE_VIXR: case UNW_VE_VL: return true; default: return false; } } inline uint64_t Registers_ve::getRegister(int regNum) const { if (regNum >= UNW_VE_S0 && regNum <= UNW_VE_S63) return _registers.__s[regNum - UNW_VE_S0]; switch (regNum) { case UNW_REG_IP: return _registers.__ic; case UNW_REG_SP: return _registers.__s[11]; case UNW_VE_VIXR: return _registers.__vixr; case UNW_VE_VL: return _registers.__vl; } _LIBUNWIND_ABORT("unsupported ve register"); } inline void Registers_ve::setRegister(int regNum, uint64_t value) { if (regNum >= UNW_VE_S0 && regNum <= UNW_VE_S63) { _registers.__s[regNum - UNW_VE_S0] = value; return; } switch (regNum) { case UNW_REG_IP: _registers.__ic = value; return; case UNW_REG_SP: _registers.__s[11] = value; return; case UNW_VE_VIXR: _registers.__vixr = value; return; case UNW_VE_VL: _registers.__vl = value; return; } _LIBUNWIND_ABORT("unsupported ve register"); } inline bool Registers_ve::validFloatRegister(int /* regNum */) const { return false; } inline double Registers_ve::getFloatRegister(int /* regNum */) const { _LIBUNWIND_ABORT("VE doesn't have float registers"); } inline void Registers_ve::setFloatRegister(int /* regNum */, double /* value */) { _LIBUNWIND_ABORT("VE doesn't have float registers"); } inline bool Registers_ve::validVectorRegister(int /* regNum */) const { return false; } inline v128 Registers_ve::getVectorRegister(int /* regNum */) const { _LIBUNWIND_ABORT("VE vector support not implemented"); } inline void Registers_ve::setVectorRegister(int /* regNum */, v128 /* value */) { _LIBUNWIND_ABORT("VE vector support not implemented"); } inline const char *Registers_ve::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "ip"; case UNW_REG_SP: return "sp"; case UNW_VE_VIXR: return "vixr"; case UNW_VE_VL: return "vl"; case UNW_VE_S0: return "s0"; case UNW_VE_S1: return "s1"; case UNW_VE_S2: return "s2"; case UNW_VE_S3: return "s3"; case UNW_VE_S4: return "s4"; case UNW_VE_S5: return "s5"; case UNW_VE_S6: return "s6"; case UNW_VE_S7: return "s7"; case UNW_VE_S8: return "s8"; case UNW_VE_S9: return "s9"; case UNW_VE_S10: return "s10"; case UNW_VE_S11: return "s11"; case UNW_VE_S12: return "s12"; case UNW_VE_S13: return "s13"; case UNW_VE_S14: return "s14"; case UNW_VE_S15: return "s15"; case UNW_VE_S16: return "s16"; case UNW_VE_S17: return "s17"; case UNW_VE_S18: return "s18"; case UNW_VE_S19: return "s19"; case UNW_VE_S20: return "s20"; case UNW_VE_S21: return "s21"; case UNW_VE_S22: return "s22"; case UNW_VE_S23: return "s23"; case UNW_VE_S24: return "s24"; case UNW_VE_S25: return "s25"; case UNW_VE_S26: return "s26"; case UNW_VE_S27: return "s27"; case UNW_VE_S28: return "s28"; case UNW_VE_S29: return "s29"; case UNW_VE_S30: return "s30"; case UNW_VE_S31: return "s31"; case UNW_VE_S32: return "s32"; case UNW_VE_S33: return "s33"; case UNW_VE_S34: return "s34"; case UNW_VE_S35: return "s35"; case UNW_VE_S36: return "s36"; case UNW_VE_S37: return "s37"; case UNW_VE_S38: return "s38"; case UNW_VE_S39: return "s39"; case UNW_VE_S40: return "s40"; case UNW_VE_S41: return "s41"; case UNW_VE_S42: return "s42"; case UNW_VE_S43: return "s43"; case UNW_VE_S44: return "s44"; case UNW_VE_S45: return "s45"; case UNW_VE_S46: return "s46"; case UNW_VE_S47: return "s47"; case UNW_VE_S48: return "s48"; case UNW_VE_S49: return "s49"; case UNW_VE_S50: return "s50"; case UNW_VE_S51: return "s51"; case UNW_VE_S52: return "s52"; case UNW_VE_S53: return "s53"; case UNW_VE_S54: return "s54"; case UNW_VE_S55: return "s55"; case UNW_VE_S56: return "s56"; case UNW_VE_S57: return "s57"; case UNW_VE_S58: return "s58"; case UNW_VE_S59: return "s59"; case UNW_VE_S60: return "s60"; case UNW_VE_S61: return "s61"; case UNW_VE_S62: return "s62"; case UNW_VE_S63: return "s63"; case UNW_VE_V0: return "v0"; case UNW_VE_V1: return "v1"; case UNW_VE_V2: return "v2"; case UNW_VE_V3: return "v3"; case UNW_VE_V4: return "v4"; case UNW_VE_V5: return "v5"; case UNW_VE_V6: return "v6"; case UNW_VE_V7: return "v7"; case UNW_VE_V8: return "v8"; case UNW_VE_V9: return "v9"; case UNW_VE_V10: return "v10"; case UNW_VE_V11: return "v11"; case UNW_VE_V12: return "v12"; case UNW_VE_V13: return "v13"; case UNW_VE_V14: return "v14"; case UNW_VE_V15: return "v15"; case UNW_VE_V16: return "v16"; case UNW_VE_V17: return "v17"; case UNW_VE_V18: return "v18"; case UNW_VE_V19: return "v19"; case UNW_VE_V20: return "v20"; case UNW_VE_V21: return "v21"; case UNW_VE_V22: return "v22"; case UNW_VE_V23: return "v23"; case UNW_VE_V24: return "v24"; case UNW_VE_V25: return "v25"; case UNW_VE_V26: return "v26"; case UNW_VE_V27: return "v27"; case UNW_VE_V28: return "v28"; case UNW_VE_V29: return "v29"; case UNW_VE_V30: return "v30"; case UNW_VE_V31: return "v31"; case UNW_VE_V32: return "v32"; case UNW_VE_V33: return "v33"; case UNW_VE_V34: return "v34"; case UNW_VE_V35: return "v35"; case UNW_VE_V36: return "v36"; case UNW_VE_V37: return "v37"; case UNW_VE_V38: return "v38"; case UNW_VE_V39: return "v39"; case UNW_VE_V40: return "v40"; case UNW_VE_V41: return "v41"; case UNW_VE_V42: return "v42"; case UNW_VE_V43: return "v43"; case UNW_VE_V44: return "v44"; case UNW_VE_V45: return "v45"; case UNW_VE_V46: return "v46"; case UNW_VE_V47: return "v47"; case UNW_VE_V48: return "v48"; case UNW_VE_V49: return "v49"; case UNW_VE_V50: return "v50"; case UNW_VE_V51: return "v51"; case UNW_VE_V52: return "v52"; case UNW_VE_V53: return "v53"; case UNW_VE_V54: return "v54"; case UNW_VE_V55: return "v55"; case UNW_VE_V56: return "v56"; case UNW_VE_V57: return "v57"; case UNW_VE_V58: return "v58"; case UNW_VE_V59: return "v59"; case UNW_VE_V60: return "v60"; case UNW_VE_V61: return "v61"; case UNW_VE_V62: return "v62"; case UNW_VE_V63: return "v63"; case UNW_VE_VM0: return "vm0"; case UNW_VE_VM1: return "vm1"; case UNW_VE_VM2: return "vm2"; case UNW_VE_VM3: return "vm3"; case UNW_VE_VM4: return "vm4"; case UNW_VE_VM5: return "vm5"; case UNW_VE_VM6: return "vm6"; case UNW_VE_VM7: return "vm7"; case UNW_VE_VM8: return "vm8"; case UNW_VE_VM9: return "vm9"; case UNW_VE_VM10: return "vm10"; case UNW_VE_VM11: return "vm11"; case UNW_VE_VM12: return "vm12"; case UNW_VE_VM13: return "vm13"; case UNW_VE_VM14: return "vm14"; case UNW_VE_VM15: return "vm15"; } return "unknown register"; } #endif // _LIBUNWIND_TARGET_VE #if defined(_LIBUNWIND_TARGET_S390X) /// Registers_s390x holds the register state of a thread in a /// 64-bit Linux on IBM zSystems process. class _LIBUNWIND_HIDDEN Registers_s390x { public: Registers_s390x(); Registers_s390x(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X; } static int getArch() { return REGISTERS_S390X; } uint64_t getSP() const { return _registers.__gpr[15]; } void setSP(uint64_t value) { _registers.__gpr[15] = value; } uint64_t getIP() const { return _registers.__pswa; } void setIP(uint64_t value) { _registers.__pswa = value; } private: struct s390x_thread_state_t { uint64_t __pswm; // Problem Status Word: Mask uint64_t __pswa; // Problem Status Word: Address (PC) uint64_t __gpr[16]; // General Purpose Registers double __fpr[16]; // Floating-Point Registers }; s390x_thread_state_t _registers; }; inline Registers_s390x::Registers_s390x(const void *registers) { static_assert((check_fit::does_fit), "s390x registers do not fit into unw_context_t"); memcpy(&_registers, static_cast(registers), sizeof(_registers)); } inline Registers_s390x::Registers_s390x() { memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_s390x::validRegister(int regNum) const { switch (regNum) { case UNW_S390X_PSWM: case UNW_S390X_PSWA: case UNW_REG_IP: case UNW_REG_SP: return true; } if (regNum >= UNW_S390X_R0 && regNum <= UNW_S390X_R15) return true; return false; } inline uint64_t Registers_s390x::getRegister(int regNum) const { if (regNum >= UNW_S390X_R0 && regNum <= UNW_S390X_R15) return _registers.__gpr[regNum - UNW_S390X_R0]; switch (regNum) { case UNW_S390X_PSWM: return _registers.__pswm; case UNW_S390X_PSWA: case UNW_REG_IP: return _registers.__pswa; case UNW_REG_SP: return _registers.__gpr[15]; } _LIBUNWIND_ABORT("unsupported s390x register"); } inline void Registers_s390x::setRegister(int regNum, uint64_t value) { if (regNum >= UNW_S390X_R0 && regNum <= UNW_S390X_R15) { _registers.__gpr[regNum - UNW_S390X_R0] = value; return; } switch (regNum) { case UNW_S390X_PSWM: _registers.__pswm = value; return; case UNW_S390X_PSWA: case UNW_REG_IP: _registers.__pswa = value; return; case UNW_REG_SP: _registers.__gpr[15] = value; return; } _LIBUNWIND_ABORT("unsupported s390x register"); } inline bool Registers_s390x::validFloatRegister(int regNum) const { return regNum >= UNW_S390X_F0 && regNum <= UNW_S390X_F15; } inline double Registers_s390x::getFloatRegister(int regNum) const { // NOTE: FPR DWARF register numbers are not consecutive. switch (regNum) { case UNW_S390X_F0: return _registers.__fpr[0]; case UNW_S390X_F1: return _registers.__fpr[1]; case UNW_S390X_F2: return _registers.__fpr[2]; case UNW_S390X_F3: return _registers.__fpr[3]; case UNW_S390X_F4: return _registers.__fpr[4]; case UNW_S390X_F5: return _registers.__fpr[5]; case UNW_S390X_F6: return _registers.__fpr[6]; case UNW_S390X_F7: return _registers.__fpr[7]; case UNW_S390X_F8: return _registers.__fpr[8]; case UNW_S390X_F9: return _registers.__fpr[9]; case UNW_S390X_F10: return _registers.__fpr[10]; case UNW_S390X_F11: return _registers.__fpr[11]; case UNW_S390X_F12: return _registers.__fpr[12]; case UNW_S390X_F13: return _registers.__fpr[13]; case UNW_S390X_F14: return _registers.__fpr[14]; case UNW_S390X_F15: return _registers.__fpr[15]; } _LIBUNWIND_ABORT("unsupported s390x register"); } inline void Registers_s390x::setFloatRegister(int regNum, double value) { // NOTE: FPR DWARF register numbers are not consecutive. switch (regNum) { case UNW_S390X_F0: _registers.__fpr[0] = value; return; case UNW_S390X_F1: _registers.__fpr[1] = value; return; case UNW_S390X_F2: _registers.__fpr[2] = value; return; case UNW_S390X_F3: _registers.__fpr[3] = value; return; case UNW_S390X_F4: _registers.__fpr[4] = value; return; case UNW_S390X_F5: _registers.__fpr[5] = value; return; case UNW_S390X_F6: _registers.__fpr[6] = value; return; case UNW_S390X_F7: _registers.__fpr[7] = value; return; case UNW_S390X_F8: _registers.__fpr[8] = value; return; case UNW_S390X_F9: _registers.__fpr[9] = value; return; case UNW_S390X_F10: _registers.__fpr[10] = value; return; case UNW_S390X_F11: _registers.__fpr[11] = value; return; case UNW_S390X_F12: _registers.__fpr[12] = value; return; case UNW_S390X_F13: _registers.__fpr[13] = value; return; case UNW_S390X_F14: _registers.__fpr[14] = value; return; case UNW_S390X_F15: _registers.__fpr[15] = value; return; } _LIBUNWIND_ABORT("unsupported s390x register"); } inline bool Registers_s390x::validVectorRegister(int /*regNum*/) const { return false; } inline v128 Registers_s390x::getVectorRegister(int /*regNum*/) const { _LIBUNWIND_ABORT("s390x vector support not implemented"); } inline void Registers_s390x::setVectorRegister(int /*regNum*/, v128 /*value*/) { _LIBUNWIND_ABORT("s390x vector support not implemented"); } inline const char *Registers_s390x::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "ip"; case UNW_REG_SP: return "sp"; case UNW_S390X_R0: return "r0"; case UNW_S390X_R1: return "r1"; case UNW_S390X_R2: return "r2"; case UNW_S390X_R3: return "r3"; case UNW_S390X_R4: return "r4"; case UNW_S390X_R5: return "r5"; case UNW_S390X_R6: return "r6"; case UNW_S390X_R7: return "r7"; case UNW_S390X_R8: return "r8"; case UNW_S390X_R9: return "r9"; case UNW_S390X_R10: return "r10"; case UNW_S390X_R11: return "r11"; case UNW_S390X_R12: return "r12"; case UNW_S390X_R13: return "r13"; case UNW_S390X_R14: return "r14"; case UNW_S390X_R15: return "r15"; case UNW_S390X_F0: return "f0"; case UNW_S390X_F1: return "f1"; case UNW_S390X_F2: return "f2"; case UNW_S390X_F3: return "f3"; case UNW_S390X_F4: return "f4"; case UNW_S390X_F5: return "f5"; case UNW_S390X_F6: return "f6"; case UNW_S390X_F7: return "f7"; case UNW_S390X_F8: return "f8"; case UNW_S390X_F9: return "f9"; case UNW_S390X_F10: return "f10"; case UNW_S390X_F11: return "f11"; case UNW_S390X_F12: return "f12"; case UNW_S390X_F13: return "f13"; case UNW_S390X_F14: return "f14"; case UNW_S390X_F15: return "f15"; } return "unknown register"; } #endif // _LIBUNWIND_TARGET_S390X #if defined(_LIBUNWIND_TARGET_LOONGARCH) /// Registers_loongarch holds the register state of a thread in a 64-bit /// LoongArch process. class _LIBUNWIND_HIDDEN Registers_loongarch { public: Registers_loongarch(); Registers_loongarch(const void *registers); bool validRegister(int num) const; uint64_t getRegister(int num) const; void setRegister(int num, uint64_t value); bool validFloatRegister(int num) const; double getFloatRegister(int num) const; void setFloatRegister(int num, double value); bool validVectorRegister(int num) const; v128 getVectorRegister(int num) const; void setVectorRegister(int num, v128 value); static const char *getRegisterName(int num); void jumpto(); static constexpr int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH; } static int getArch() { return REGISTERS_LOONGARCH; } uint64_t getSP() const { return _registers.__r[3]; } void setSP(uint64_t value) { _registers.__r[3] = value; } uint64_t getIP() const { return _registers.__pc; } void setIP(uint64_t value) { _registers.__pc = value; } private: struct loongarch_thread_state_t { uint64_t __r[32]; uint64_t __pc; }; loongarch_thread_state_t _registers; #if __loongarch_frlen == 64 double _floats[32]; #endif }; inline Registers_loongarch::Registers_loongarch(const void *registers) { static_assert((check_fit::does_fit), "loongarch registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); static_assert(sizeof(_registers) == 0x108, "expected float registers to be at offset 264"); #if __loongarch_frlen == 64 memcpy(_floats, static_cast(registers) + sizeof(_registers), sizeof(_floats)); #endif } inline Registers_loongarch::Registers_loongarch() { memset(&_registers, 0, sizeof(_registers)); #if __loongarch_frlen == 64 memset(&_floats, 0, sizeof(_floats)); #endif } inline bool Registers_loongarch::validRegister(int regNum) const { if (regNum == UNW_REG_IP || regNum == UNW_REG_SP) return true; if (regNum < 0 || regNum > UNW_LOONGARCH_F31) return false; return true; } inline uint64_t Registers_loongarch::getRegister(int regNum) const { if (regNum >= UNW_LOONGARCH_R0 && regNum <= UNW_LOONGARCH_R31) return _registers.__r[regNum - UNW_LOONGARCH_R0]; if (regNum == UNW_REG_IP) return _registers.__pc; if (regNum == UNW_REG_SP) return _registers.__r[3]; _LIBUNWIND_ABORT("unsupported loongarch register"); } inline void Registers_loongarch::setRegister(int regNum, uint64_t value) { if (regNum >= UNW_LOONGARCH_R0 && regNum <= UNW_LOONGARCH_R31) _registers.__r[regNum - UNW_LOONGARCH_R0] = value; else if (regNum == UNW_REG_IP) _registers.__pc = value; else if (regNum == UNW_REG_SP) _registers.__r[3] = value; else _LIBUNWIND_ABORT("unsupported loongarch register"); } inline const char *Registers_loongarch::getRegisterName(int regNum) { switch (regNum) { case UNW_REG_IP: return "$pc"; case UNW_REG_SP: return "$sp"; case UNW_LOONGARCH_R0: return "$r0"; case UNW_LOONGARCH_R1: return "$r1"; case UNW_LOONGARCH_R2: return "$r2"; case UNW_LOONGARCH_R3: return "$r3"; case UNW_LOONGARCH_R4: return "$r4"; case UNW_LOONGARCH_R5: return "$r5"; case UNW_LOONGARCH_R6: return "$r6"; case UNW_LOONGARCH_R7: return "$r7"; case UNW_LOONGARCH_R8: return "$r8"; case UNW_LOONGARCH_R9: return "$r9"; case UNW_LOONGARCH_R10: return "$r10"; case UNW_LOONGARCH_R11: return "$r11"; case UNW_LOONGARCH_R12: return "$r12"; case UNW_LOONGARCH_R13: return "$r13"; case UNW_LOONGARCH_R14: return "$r14"; case UNW_LOONGARCH_R15: return "$r15"; case UNW_LOONGARCH_R16: return "$r16"; case UNW_LOONGARCH_R17: return "$r17"; case UNW_LOONGARCH_R18: return "$r18"; case UNW_LOONGARCH_R19: return "$r19"; case UNW_LOONGARCH_R20: return "$r20"; case UNW_LOONGARCH_R21: return "$r21"; case UNW_LOONGARCH_R22: return "$r22"; case UNW_LOONGARCH_R23: return "$r23"; case UNW_LOONGARCH_R24: return "$r24"; case UNW_LOONGARCH_R25: return "$r25"; case UNW_LOONGARCH_R26: return "$r26"; case UNW_LOONGARCH_R27: return "$r27"; case UNW_LOONGARCH_R28: return "$r28"; case UNW_LOONGARCH_R29: return "$r29"; case UNW_LOONGARCH_R30: return "$r30"; case UNW_LOONGARCH_R31: return "$r31"; case UNW_LOONGARCH_F0: return "$f0"; case UNW_LOONGARCH_F1: return "$f1"; case UNW_LOONGARCH_F2: return "$f2"; case UNW_LOONGARCH_F3: return "$f3"; case UNW_LOONGARCH_F4: return "$f4"; case UNW_LOONGARCH_F5: return "$f5"; case UNW_LOONGARCH_F6: return "$f6"; case UNW_LOONGARCH_F7: return "$f7"; case UNW_LOONGARCH_F8: return "$f8"; case UNW_LOONGARCH_F9: return "$f9"; case UNW_LOONGARCH_F10: return "$f10"; case UNW_LOONGARCH_F11: return "$f11"; case UNW_LOONGARCH_F12: return "$f12"; case UNW_LOONGARCH_F13: return "$f13"; case UNW_LOONGARCH_F14: return "$f14"; case UNW_LOONGARCH_F15: return "$f15"; case UNW_LOONGARCH_F16: return "$f16"; case UNW_LOONGARCH_F17: return "$f17"; case UNW_LOONGARCH_F18: return "$f18"; case UNW_LOONGARCH_F19: return "$f19"; case UNW_LOONGARCH_F20: return "$f20"; case UNW_LOONGARCH_F21: return "$f21"; case UNW_LOONGARCH_F22: return "$f22"; case UNW_LOONGARCH_F23: return "$f23"; case UNW_LOONGARCH_F24: return "$f24"; case UNW_LOONGARCH_F25: return "$f25"; case UNW_LOONGARCH_F26: return "$f26"; case UNW_LOONGARCH_F27: return "$f27"; case UNW_LOONGARCH_F28: return "$f28"; case UNW_LOONGARCH_F29: return "$f29"; case UNW_LOONGARCH_F30: return "$f30"; case UNW_LOONGARCH_F31: return "$f31"; default: return "unknown register"; } } inline bool Registers_loongarch::validFloatRegister(int regNum) const { if (regNum < UNW_LOONGARCH_F0 || regNum > UNW_LOONGARCH_F31) return false; return true; } inline double Registers_loongarch::getFloatRegister(int regNum) const { #if __loongarch_frlen == 64 assert(validFloatRegister(regNum)); return _floats[regNum - UNW_LOONGARCH_F0]; #else _LIBUNWIND_ABORT("libunwind not built with float support"); #endif } inline void Registers_loongarch::setFloatRegister(int regNum, double value) { #if __loongarch_frlen == 64 assert(validFloatRegister(regNum)); _floats[regNum - UNW_LOONGARCH_F0] = value; #else _LIBUNWIND_ABORT("libunwind not built with float support"); #endif } inline bool Registers_loongarch::validVectorRegister(int) const { return false; } inline v128 Registers_loongarch::getVectorRegister(int) const { _LIBUNWIND_ABORT("loongarch vector support not implemented"); } inline void Registers_loongarch::setVectorRegister(int, v128) { _LIBUNWIND_ABORT("loongarch vector support not implemented"); } #endif //_LIBUNWIND_TARGET_LOONGARCH } // namespace libunwind #endif // __REGISTERS_HPP__ ================================================ FILE: ThirdParty/libunwind/src/Unwind-EHABI.cpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Implements ARM zero-cost C++ exceptions // //===----------------------------------------------------------------------===// #include "Unwind-EHABI.h" #if defined(_LIBUNWIND_ARM_EHABI) #include #include #include #include #include #include #include "config.h" #include "libunwind.h" #include "libunwind_ext.h" #include "unwind.h" namespace { // Strange order: take words in order, but inside word, take from most to least // signinficant byte. uint8_t getByte(const uint32_t* data, size_t offset) { const uint8_t* byteData = reinterpret_cast(data); #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ return byteData[(offset & ~(size_t)0x03) + (3 - (offset & (size_t)0x03))]; #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ return byteData[offset]; #else #error "Unable to determine endianess" #endif } const char* getNextWord(const char* data, uint32_t* out) { *out = *reinterpret_cast(data); return data + 4; } const char* getNextNibble(const char* data, uint32_t* out) { *out = *reinterpret_cast(data); return data + 2; } struct Descriptor { // See # 9.2 typedef enum { SU16 = 0, // Short descriptor, 16-bit entries LU16 = 1, // Long descriptor, 16-bit entries LU32 = 3, // Long descriptor, 32-bit entries RESERVED0 = 4, RESERVED1 = 5, RESERVED2 = 6, RESERVED3 = 7, RESERVED4 = 8, RESERVED5 = 9, RESERVED6 = 10, RESERVED7 = 11, RESERVED8 = 12, RESERVED9 = 13, RESERVED10 = 14, RESERVED11 = 15 } Format; // See # 9.2 typedef enum { CLEANUP = 0x0, FUNC = 0x1, CATCH = 0x2, INVALID = 0x4 } Kind; }; _Unwind_Reason_Code ProcessDescriptors( _Unwind_State state, _Unwind_Control_Block* ucbp, struct _Unwind_Context* context, Descriptor::Format format, const char* descriptorStart, uint32_t flags) { // EHT is inlined in the index using compact form. No descriptors. #5 if (flags & 0x1) return _URC_CONTINUE_UNWIND; // TODO: We should check the state here, and determine whether we need to // perform phase1 or phase2 unwinding. (void)state; const char* descriptor = descriptorStart; uint32_t descriptorWord; getNextWord(descriptor, &descriptorWord); while (descriptorWord) { // Read descriptor based on # 9.2. uint32_t length; uint32_t offset; switch (format) { case Descriptor::LU32: descriptor = getNextWord(descriptor, &length); descriptor = getNextWord(descriptor, &offset); break; case Descriptor::LU16: descriptor = getNextNibble(descriptor, &length); descriptor = getNextNibble(descriptor, &offset); break; default: assert(false); return _URC_FAILURE; } // See # 9.2 table for decoding the kind of descriptor. It's a 2-bit value. Descriptor::Kind kind = static_cast((length & 0x1) | ((offset & 0x1) << 1)); // Clear off flag from last bit. length &= ~1u; offset &= ~1u; uintptr_t scopeStart = ucbp->pr_cache.fnstart + offset; uintptr_t scopeEnd = scopeStart + length; uintptr_t pc = _Unwind_GetIP(context); bool isInScope = (scopeStart <= pc) && (pc < scopeEnd); switch (kind) { case Descriptor::CLEANUP: { // TODO(ajwong): Handle cleanup descriptors. break; } case Descriptor::FUNC: { // TODO(ajwong): Handle function descriptors. break; } case Descriptor::CATCH: { // Catch descriptors require gobbling one more word. uint32_t landing_pad; descriptor = getNextWord(descriptor, &landing_pad); if (isInScope) { // TODO(ajwong): This is only phase1 compatible logic. Implement // phase2. landing_pad = signExtendPrel31(landing_pad & ~0x80000000); if (landing_pad == 0xffffffff) { return _URC_HANDLER_FOUND; } else if (landing_pad == 0xfffffffe) { return _URC_FAILURE; } else { /* bool is_reference_type = landing_pad & 0x80000000; void* matched_object; if (__cxxabiv1::__cxa_type_match( ucbp, reinterpret_cast(landing_pad), is_reference_type, &matched_object) != __cxxabiv1::ctm_failed) return _URC_HANDLER_FOUND; */ _LIBUNWIND_ABORT("Type matching not implemented"); } } break; } default: _LIBUNWIND_ABORT("Invalid descriptor kind found."); } getNextWord(descriptor, &descriptorWord); } return _URC_CONTINUE_UNWIND; } static _Unwind_Reason_Code unwindOneFrame(_Unwind_State state, _Unwind_Control_Block* ucbp, struct _Unwind_Context* context) { // Read the compact model EHT entry's header # 6.3 const uint32_t* unwindingData = ucbp->pr_cache.ehtp; assert((*unwindingData & 0xf0000000) == 0x80000000 && "Must be a compact entry"); Descriptor::Format format = static_cast((*unwindingData & 0x0f000000) >> 24); const char *lsda = reinterpret_cast(_Unwind_GetLanguageSpecificData(context)); // Handle descriptors before unwinding so they are processed in the context // of the correct stack frame. _Unwind_Reason_Code result = ProcessDescriptors(state, ucbp, context, format, lsda, ucbp->pr_cache.additional); if (result != _URC_CONTINUE_UNWIND) return result; switch (__unw_step(reinterpret_cast(context))) { case UNW_STEP_SUCCESS: return _URC_CONTINUE_UNWIND; case UNW_STEP_END: return _URC_END_OF_STACK; default: return _URC_FAILURE; } } // Generates mask discriminator for _Unwind_VRS_Pop, e.g. for _UVRSC_CORE / // _UVRSD_UINT32. uint32_t RegisterMask(uint8_t start, uint8_t count_minus_one) { return ((1U << (count_minus_one + 1)) - 1) << start; } // Generates mask discriminator for _Unwind_VRS_Pop, e.g. for _UVRSC_VFP / // _UVRSD_DOUBLE. uint32_t RegisterRange(uint8_t start, uint8_t count_minus_one) { return ((uint32_t)start << 16) | ((uint32_t)count_minus_one + 1); } } // end anonymous namespace /** * Decodes an EHT entry. * * @param data Pointer to EHT. * @param[out] off Offset from return value (in bytes) to begin interpretation. * @param[out] len Number of bytes in unwind code. * @return Pointer to beginning of unwind code. */ extern "C" const uint32_t* decode_eht_entry(const uint32_t* data, size_t* off, size_t* len) { if ((*data & 0x80000000) == 0) { // 6.2: Generic Model // // EHT entry is a prel31 pointing to the PR, followed by data understood // only by the personality routine. Fortunately, all existing assembler // implementations, including GNU assembler, LLVM integrated assembler, // and ARM assembler, assume that the unwind opcodes come after the // personality rountine address. *off = 1; // First byte is size data. *len = (((data[1] >> 24) & 0xff) + 1) * 4; data++; // Skip the first word, which is the prel31 offset. } else { // 6.3: ARM Compact Model // // EHT entries here correspond to the __aeabi_unwind_cpp_pr[012] PRs indeed // by format: Descriptor::Format format = static_cast((*data & 0x0f000000) >> 24); switch (format) { case Descriptor::SU16: *len = 4; *off = 1; break; case Descriptor::LU16: case Descriptor::LU32: *len = 4 + 4 * ((*data & 0x00ff0000) >> 16); *off = 2; break; default: return nullptr; } } return data; } _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_VRS_Interpret(_Unwind_Context *context, const uint32_t *data, size_t offset, size_t len) { bool wrotePC = false; bool finish = false; bool hasReturnAddrAuthCode = false; while (offset < len && !finish) { uint8_t byte = getByte(data, offset++); if ((byte & 0x80) == 0) { uint32_t sp; _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); if (byte & 0x40) sp -= (((uint32_t)byte & 0x3f) << 2) + 4; else sp += ((uint32_t)byte << 2) + 4; _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); } else { switch (byte & 0xf0) { case 0x80: { if (offset >= len) return _URC_FAILURE; uint32_t registers = (((uint32_t)byte & 0x0f) << 12) | (((uint32_t)getByte(data, offset++)) << 4); if (!registers) return _URC_FAILURE; if (registers & (1 << 15)) wrotePC = true; _Unwind_VRS_Pop(context, _UVRSC_CORE, registers, _UVRSD_UINT32); break; } case 0x90: { uint8_t reg = byte & 0x0f; if (reg == 13 || reg == 15) return _URC_FAILURE; uint32_t sp; _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_R0 + reg, _UVRSD_UINT32, &sp); _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); break; } case 0xa0: { uint32_t registers = RegisterMask(4, byte & 0x07); if (byte & 0x08) registers |= 1 << 14; _Unwind_VRS_Pop(context, _UVRSC_CORE, registers, _UVRSD_UINT32); break; } case 0xb0: { switch (byte) { case 0xb0: finish = true; break; case 0xb1: { if (offset >= len) return _URC_FAILURE; uint8_t registers = getByte(data, offset++); if (registers & 0xf0 || !registers) return _URC_FAILURE; _Unwind_VRS_Pop(context, _UVRSC_CORE, registers, _UVRSD_UINT32); break; } case 0xb2: { uint32_t addend = 0; uint32_t shift = 0; // This decodes a uleb128 value. while (true) { if (offset >= len) return _URC_FAILURE; uint32_t v = getByte(data, offset++); addend |= (v & 0x7f) << shift; if ((v & 0x80) == 0) break; shift += 7; } uint32_t sp; _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); sp += 0x204 + (addend << 2); _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); break; } case 0xb3: { uint8_t v = getByte(data, offset++); _Unwind_VRS_Pop(context, _UVRSC_VFP, RegisterRange(static_cast(v >> 4), v & 0x0f), _UVRSD_VFPX); break; } case 0xb4: hasReturnAddrAuthCode = true; _Unwind_VRS_Pop(context, _UVRSC_PSEUDO, 0 /* Return Address Auth Code */, _UVRSD_UINT32); break; case 0xb5: case 0xb6: case 0xb7: return _URC_FAILURE; default: _Unwind_VRS_Pop(context, _UVRSC_VFP, RegisterRange(8, byte & 0x07), _UVRSD_VFPX); break; } break; } case 0xc0: { switch (byte) { #if defined(__ARM_WMMX) case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: _Unwind_VRS_Pop(context, _UVRSC_WMMXD, RegisterRange(10, byte & 0x7), _UVRSD_DOUBLE); break; case 0xc6: { uint8_t v = getByte(data, offset++); uint8_t start = static_cast(v >> 4); uint8_t count_minus_one = v & 0xf; if (start + count_minus_one >= 16) return _URC_FAILURE; _Unwind_VRS_Pop(context, _UVRSC_WMMXD, RegisterRange(start, count_minus_one), _UVRSD_DOUBLE); break; } case 0xc7: { uint8_t v = getByte(data, offset++); if (!v || v & 0xf0) return _URC_FAILURE; _Unwind_VRS_Pop(context, _UVRSC_WMMXC, v, _UVRSD_DOUBLE); break; } #endif case 0xc8: case 0xc9: { uint8_t v = getByte(data, offset++); uint8_t start = static_cast(((byte == 0xc8) ? 16 : 0) + (v >> 4)); uint8_t count_minus_one = v & 0xf; if (start + count_minus_one >= 32) return _URC_FAILURE; _Unwind_VRS_Pop(context, _UVRSC_VFP, RegisterRange(start, count_minus_one), _UVRSD_DOUBLE); break; } default: return _URC_FAILURE; } break; } case 0xd0: { if (byte & 0x08) return _URC_FAILURE; _Unwind_VRS_Pop(context, _UVRSC_VFP, RegisterRange(8, byte & 0x7), _UVRSD_DOUBLE); break; } default: return _URC_FAILURE; } } } if (!wrotePC) { uint32_t lr; _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_LR, _UVRSD_UINT32, &lr); #ifdef __ARM_FEATURE_PAUTH if (hasReturnAddrAuthCode) { uint32_t sp; uint32_t pac; _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); _Unwind_VRS_Get(context, _UVRSC_PSEUDO, 0, _UVRSD_UINT32, &pac); __asm__ __volatile__("autg %0, %1, %2" : : "r"(pac), "r"(lr), "r"(sp) :); } #else (void)hasReturnAddrAuthCode; #endif _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_IP, _UVRSD_UINT32, &lr); } return _URC_CONTINUE_UNWIND; } extern "C" _LIBUNWIND_EXPORT _Unwind_Reason_Code __aeabi_unwind_cpp_pr0(_Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context) { return unwindOneFrame(state, ucbp, context); } extern "C" _LIBUNWIND_EXPORT _Unwind_Reason_Code __aeabi_unwind_cpp_pr1(_Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context) { return unwindOneFrame(state, ucbp, context); } extern "C" _LIBUNWIND_EXPORT _Unwind_Reason_Code __aeabi_unwind_cpp_pr2(_Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context) { return unwindOneFrame(state, ucbp, context); } static _Unwind_Reason_Code unwind_phase1(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { // EHABI #7.3 discusses preserving the VRS in a "temporary VRS" during // phase 1 and then restoring it to the "primary VRS" for phase 2. The // effect is phase 2 doesn't see any of the VRS manipulations from phase 1. // In this implementation, the phases don't share the VRS backing store. // Instead, they are passed the original |uc| and they create a new VRS // from scratch thus achieving the same effect. __unw_init_local(cursor, uc); // Walk each frame looking for a place to stop. for (bool handlerNotFound = true; handlerNotFound;) { // See if frame has code to run (has personality routine). unw_proc_info_t frameInfo; if (__unw_get_proc_info(cursor, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): __unw_get_proc_info " "failed => _URC_FATAL_PHASE1_ERROR", static_cast(exception_object)); return _URC_FATAL_PHASE1_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(cursor, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; unw_word_t pc; __unw_get_reg(cursor, UNW_REG_IP, &pc); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): pc=0x%" PRIxPTR ", start_ip=0x%" PRIxPTR ", func=%s, " "lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR, static_cast(exception_object), pc, frameInfo.start_ip, functionName, frameInfo.lsda, frameInfo.handler); } #endif // If there is a personality routine, ask it if it will want to stop at // this frame. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(long)(frameInfo.handler); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): calling personality function %p", static_cast(exception_object), reinterpret_cast(reinterpret_cast(p))); struct _Unwind_Context *context = (struct _Unwind_Context *)(cursor); exception_object->pr_cache.fnstart = frameInfo.start_ip; exception_object->pr_cache.ehtp = (_Unwind_EHT_Header *)frameInfo.unwind_info; exception_object->pr_cache.additional = frameInfo.flags; _Unwind_Reason_Code personalityResult = (*p)(_US_VIRTUAL_UNWIND_FRAME, exception_object, context); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): personality result %d start_ip %x ehtp %p " "additional %x", static_cast(exception_object), personalityResult, exception_object->pr_cache.fnstart, static_cast(exception_object->pr_cache.ehtp), exception_object->pr_cache.additional); switch (personalityResult) { case _URC_HANDLER_FOUND: // found a catch clause or locals that need destructing in this frame // stop search and remember stack pointer at the frame handlerNotFound = false; // p should have initialized barrier_cache. EHABI #7.3.5 _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): _URC_HANDLER_FOUND", static_cast(exception_object)); return _URC_NO_REASON; case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): _URC_CONTINUE_UNWIND", static_cast(exception_object)); // continue unwinding break; // EHABI #7.3.3 case _URC_FAILURE: return _URC_FAILURE; default: // something went wrong _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): _URC_FATAL_PHASE1_ERROR", static_cast(exception_object)); return _URC_FATAL_PHASE1_ERROR; } } } return _URC_NO_REASON; } static _Unwind_Reason_Code unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object, bool resume) { // See comment at the start of unwind_phase1 regarding VRS integrity. __unw_init_local(cursor, uc); _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_ojb=%p)", static_cast(exception_object)); int frame_count = 0; // Walk each frame until we reach where search phase said to stop. while (true) { // Ask libunwind to get next frame (skip over first which is // _Unwind_RaiseException or _Unwind_Resume). // // Resume only ever makes sense for 1 frame. _Unwind_State state = resume ? _US_UNWIND_FRAME_RESUME : _US_UNWIND_FRAME_STARTING; if (resume && frame_count == 1) { // On a resume, first unwind the _Unwind_Resume() frame. The next frame // is now the landing pad for the cleanup from a previous execution of // phase2. To continue unwindingly correctly, replace VRS[15] with the // IP of the frame that the previous run of phase2 installed the context // for. After this, continue unwinding as if normal. // // See #7.4.6 for details. __unw_set_reg(cursor, UNW_REG_IP, exception_object->unwinder_cache.reserved2); resume = false; } // Get info about this frame. unw_word_t sp; unw_proc_info_t frameInfo; __unw_get_reg(cursor, UNW_REG_SP, &sp); if (__unw_get_proc_info(cursor, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): __unw_get_proc_info " "failed => _URC_FATAL_PHASE2_ERROR", static_cast(exception_object)); return _URC_FATAL_PHASE2_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(cursor, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): start_ip=0x%" PRIxPTR ", func=%s, sp=0x%" PRIxPTR ", " "lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR "", static_cast(exception_object), frameInfo.start_ip, functionName, sp, frameInfo.lsda, frameInfo.handler); } #endif // If there is a personality routine, tell it we are unwinding. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(intptr_t)(frameInfo.handler); struct _Unwind_Context *context = (struct _Unwind_Context *)(cursor); // EHABI #7.2 exception_object->pr_cache.fnstart = frameInfo.start_ip; exception_object->pr_cache.ehtp = (_Unwind_EHT_Header *)frameInfo.unwind_info; exception_object->pr_cache.additional = frameInfo.flags; _Unwind_Reason_Code personalityResult = (*p)(state, exception_object, context); switch (personalityResult) { case _URC_CONTINUE_UNWIND: // Continue unwinding _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): _URC_CONTINUE_UNWIND", static_cast(exception_object)); // EHABI #7.2 if (sp == exception_object->barrier_cache.sp) { // Phase 1 said we would stop at this frame, but we did not... _LIBUNWIND_ABORT("during phase1 personality function said it would " "stop here, but now in phase2 it did not stop here"); } break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): _URC_INSTALL_CONTEXT", static_cast(exception_object)); // Personality routine says to transfer control to landing pad. // We may get control back if landing pad calls _Unwind_Resume(). if (_LIBUNWIND_TRACING_UNWINDING) { unw_word_t pc; __unw_get_reg(cursor, UNW_REG_IP, &pc); __unw_get_reg(cursor, UNW_REG_SP, &sp); _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_ojb=%p): re-entering " "user code with ip=0x%" PRIxPTR ", sp=0x%" PRIxPTR, static_cast(exception_object), pc, sp); } { // EHABI #7.4.1 says we need to preserve pc for when _Unwind_Resume // is called back, to find this same frame. unw_word_t pc; __unw_get_reg(cursor, UNW_REG_IP, &pc); exception_object->unwinder_cache.reserved2 = (uint32_t)pc; } __unw_resume(cursor); // __unw_resume() only returns if there was an error. return _URC_FATAL_PHASE2_ERROR; // # EHABI #7.4.3 case _URC_FAILURE: abort(); default: // Personality routine returned an unknown result code. _LIBUNWIND_DEBUG_LOG("personality function returned unknown result %d", personalityResult); return _URC_FATAL_PHASE2_ERROR; } } frame_count++; } // Clean up phase did not resume at the frame that the search phase // said it would... return _URC_FATAL_PHASE2_ERROR; } static _Unwind_Reason_Code unwind_phase2_forced(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { bool endOfStack = false; // See comment at the start of unwind_phase1 regarding VRS integrity. __unw_init_local(cursor, uc); _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_force(ex_ojb=%p)", static_cast(exception_object)); // Walk each frame until we reach where search phase said to stop while (!endOfStack) { // Update info about this frame. unw_proc_info_t frameInfo; if (__unw_get_proc_info(cursor, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): __unw_get_proc_info " "failed => _URC_END_OF_STACK", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(cursor, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): start_ip=0x%" PRIxPTR ", func=%s, lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR, (void *)exception_object, frameInfo.start_ip, functionName, frameInfo.lsda, frameInfo.handler); } #endif // Call stop function at each frame. _Unwind_Action action = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE); _Unwind_Reason_Code stopResult = (*stop)(1, action, exception_object->exception_class, exception_object, (_Unwind_Context *)(cursor), stop_parameter); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): stop function returned %d", (void *)exception_object, stopResult); if (stopResult != _URC_NO_REASON) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): stopped by stop function", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } // If there is a personality routine, tell it we are unwinding. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(uintptr_t)(frameInfo.handler); struct _Unwind_Context *context = (struct _Unwind_Context *)(cursor); // EHABI #7.2 exception_object->pr_cache.fnstart = frameInfo.start_ip; exception_object->pr_cache.ehtp = (_Unwind_EHT_Header *)frameInfo.unwind_info; exception_object->pr_cache.additional = frameInfo.flags; _Unwind_Reason_Code personalityResult = (*p)(_US_FORCE_UNWIND | _US_UNWIND_FRAME_STARTING, exception_object, context); switch (personalityResult) { case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned " "_URC_CONTINUE_UNWIND", (void *)exception_object); // Destructors called, continue unwinding break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned " "_URC_INSTALL_CONTEXT", (void *)exception_object); // We may get control back if landing pad calls _Unwind_Resume(). __unw_resume(cursor); break; case _URC_END_OF_STACK: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned " "_URC_END_OF_STACK", (void *)exception_object); // Personalty routine did the step and it can't step forward. endOfStack = true; break; default: // Personality routine returned an unknown result code. _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned %d, " "_URC_FATAL_PHASE2_ERROR", (void *)exception_object, personalityResult); return _URC_FATAL_PHASE2_ERROR; } } } // Call stop function one last time and tell it we've reached the end // of the stack. _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): calling stop " "function with _UA_END_OF_STACK", (void *)exception_object); _Unwind_Action lastAction = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK); (*stop)(1, lastAction, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(cursor), stop_parameter); // Clean up phase did not resume at the frame that the search phase said it // would. return _URC_FATAL_PHASE2_ERROR; } /// Called by __cxa_throw. Only returns if there is a fatal error. _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_RaiseException(ex_obj=%p)", static_cast(exception_object)); unw_context_t uc; unw_cursor_t cursor; __unw_getcontext(&uc); // This field for is for compatibility with GCC to say this isn't a forced // unwind. EHABI #7.2 exception_object->unwinder_cache.reserved1 = 0; // phase 1: the search phase _Unwind_Reason_Code phase1 = unwind_phase1(&uc, &cursor, exception_object); if (phase1 != _URC_NO_REASON) return phase1; // phase 2: the clean up phase return unwind_phase2(&uc, &cursor, exception_object, false); } _LIBUNWIND_EXPORT void _Unwind_Complete(_Unwind_Exception* exception_object) { // This is to be called when exception handling completes to give us a chance // to perform any housekeeping. EHABI #7.2. But we have nothing to do here. (void)exception_object; } /// When _Unwind_RaiseException() is in phase2, it hands control /// to the personality function at each frame. The personality /// may force a jump to a landing pad in that function, the landing /// pad code may then call _Unwind_Resume() to continue with the /// unwinding. Note: the call to _Unwind_Resume() is from compiler /// generated user code. All other _Unwind_* routines are called /// by the C++ runtime __cxa_* routines. /// /// Note: re-throwing an exception (as opposed to continuing the unwind) /// is implemented by having the code call __cxa_rethrow() which /// in turn calls _Unwind_Resume_or_Rethrow(). _LIBUNWIND_EXPORT void _Unwind_Resume(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_Resume(ex_obj=%p)", static_cast(exception_object)); unw_context_t uc; unw_cursor_t cursor; __unw_getcontext(&uc); if (exception_object->unwinder_cache.reserved1) unwind_phase2_forced( &uc, &cursor, exception_object, (_Unwind_Stop_Fn)exception_object->unwinder_cache.reserved1, (void *)exception_object->unwinder_cache.reserved3); else unwind_phase2(&uc, &cursor, exception_object, true); // Clients assume _Unwind_Resume() does not return, so all we can do is abort. _LIBUNWIND_ABORT("_Unwind_Resume() can't return"); } /// Called by personality handler during phase 2 to get LSDA for current frame. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_proc_info_t frameInfo; uintptr_t result = 0; if (__unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS) result = (uintptr_t)frameInfo.lsda; _LIBUNWIND_TRACE_API( "_Unwind_GetLanguageSpecificData(context=%p) => 0x%llx", static_cast(context), (long long)result); return result; } // Only used in _LIBUNWIND_TRACE_API, which is a no-op when assertions are // disabled. [[gnu::unused]] static uint64_t ValueAsBitPattern(_Unwind_VRS_DataRepresentation representation, const void *valuep) { uint64_t value = 0; switch (representation) { case _UVRSD_UINT32: case _UVRSD_FLOAT: memcpy(&value, valuep, sizeof(uint32_t)); break; case _UVRSD_VFPX: case _UVRSD_UINT64: case _UVRSD_DOUBLE: memcpy(&value, valuep, sizeof(uint64_t)); break; } return value; } _LIBUNWIND_EXPORT _Unwind_VRS_Result _Unwind_VRS_Set(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t regno, _Unwind_VRS_DataRepresentation representation, void *valuep) { _LIBUNWIND_TRACE_API("_Unwind_VRS_Set(context=%p, regclass=%d, reg=%d, " "rep=%d, value=0x%llX)", static_cast(context), regclass, regno, representation, ValueAsBitPattern(representation, valuep)); unw_cursor_t *cursor = (unw_cursor_t *)context; switch (regclass) { case _UVRSC_CORE: if (representation != _UVRSD_UINT32 || regno > 15) return _UVRSR_FAILED; return __unw_set_reg(cursor, (unw_regnum_t)(UNW_ARM_R0 + regno), *(unw_word_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; case _UVRSC_VFP: if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE) return _UVRSR_FAILED; if (representation == _UVRSD_VFPX) { // Can only touch d0-15 with FSTMFDX. if (regno > 15) return _UVRSR_FAILED; __unw_save_vfp_as_X(cursor); } else { if (regno > 31) return _UVRSR_FAILED; } return __unw_set_fpreg(cursor, (unw_regnum_t)(UNW_ARM_D0 + regno), *(unw_fpreg_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; #if defined(__ARM_WMMX) case _UVRSC_WMMXC: if (representation != _UVRSD_UINT32 || regno > 3) return _UVRSR_FAILED; return __unw_set_reg(cursor, (unw_regnum_t)(UNW_ARM_WC0 + regno), *(unw_word_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; case _UVRSC_WMMXD: if (representation != _UVRSD_DOUBLE || regno > 31) return _UVRSR_FAILED; return __unw_set_fpreg(cursor, (unw_regnum_t)(UNW_ARM_WR0 + regno), *(unw_fpreg_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; #else case _UVRSC_WMMXC: case _UVRSC_WMMXD: break; #endif case _UVRSC_PSEUDO: // There's only one pseudo-register, PAC, with regno == 0. if (representation != _UVRSD_UINT32 || regno != 0) return _UVRSR_FAILED; return __unw_set_reg(cursor, (unw_regnum_t)(UNW_ARM_RA_AUTH_CODE), *(unw_word_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; break; } _LIBUNWIND_ABORT("unsupported register class"); } static _Unwind_VRS_Result _Unwind_VRS_Get_Internal(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t regno, _Unwind_VRS_DataRepresentation representation, void *valuep) { unw_cursor_t *cursor = (unw_cursor_t *)context; switch (regclass) { case _UVRSC_CORE: if (representation != _UVRSD_UINT32 || regno > 15) return _UVRSR_FAILED; return __unw_get_reg(cursor, (unw_regnum_t)(UNW_ARM_R0 + regno), (unw_word_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; case _UVRSC_VFP: if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE) return _UVRSR_FAILED; if (representation == _UVRSD_VFPX) { // Can only touch d0-15 with FSTMFDX. if (regno > 15) return _UVRSR_FAILED; __unw_save_vfp_as_X(cursor); } else { if (regno > 31) return _UVRSR_FAILED; } return __unw_get_fpreg(cursor, (unw_regnum_t)(UNW_ARM_D0 + regno), (unw_fpreg_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; #if defined(__ARM_WMMX) case _UVRSC_WMMXC: if (representation != _UVRSD_UINT32 || regno > 3) return _UVRSR_FAILED; return __unw_get_reg(cursor, (unw_regnum_t)(UNW_ARM_WC0 + regno), (unw_word_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; case _UVRSC_WMMXD: if (representation != _UVRSD_DOUBLE || regno > 31) return _UVRSR_FAILED; return __unw_get_fpreg(cursor, (unw_regnum_t)(UNW_ARM_WR0 + regno), (unw_fpreg_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; #else case _UVRSC_WMMXC: case _UVRSC_WMMXD: break; #endif case _UVRSC_PSEUDO: // There's only one pseudo-register, PAC, with regno == 0. if (representation != _UVRSD_UINT32 || regno != 0) return _UVRSR_FAILED; return __unw_get_reg(cursor, (unw_regnum_t)(UNW_ARM_RA_AUTH_CODE), (unw_word_t *)valuep) == UNW_ESUCCESS ? _UVRSR_OK : _UVRSR_FAILED; break; } _LIBUNWIND_ABORT("unsupported register class"); } _LIBUNWIND_EXPORT _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t regno, _Unwind_VRS_DataRepresentation representation, void *valuep) { _Unwind_VRS_Result result = _Unwind_VRS_Get_Internal(context, regclass, regno, representation, valuep); _LIBUNWIND_TRACE_API("_Unwind_VRS_Get(context=%p, regclass=%d, reg=%d, " "rep=%d, value=0x%llX, result = %d)", static_cast(context), regclass, regno, representation, ValueAsBitPattern(representation, valuep), result); return result; } _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass, uint32_t discriminator, _Unwind_VRS_DataRepresentation representation) { _LIBUNWIND_TRACE_API("_Unwind_VRS_Pop(context=%p, regclass=%d, " "discriminator=%d, representation=%d)", static_cast(context), regclass, discriminator, representation); switch (regclass) { case _UVRSC_WMMXC: #if !defined(__ARM_WMMX) break; #endif case _UVRSC_CORE: { if (representation != _UVRSD_UINT32) return _UVRSR_FAILED; // When popping SP from the stack, we don't want to override it from the // computed new stack location. See EHABI #7.5.4 table 3. bool poppedSP = false; uint32_t* sp; if (_Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp) != _UVRSR_OK) { return _UVRSR_FAILED; } for (uint32_t i = 0; i < 16; ++i) { if (!(discriminator & static_cast(1 << i))) continue; uint32_t value = *sp++; if (regclass == _UVRSC_CORE && i == 13) poppedSP = true; if (_Unwind_VRS_Set(context, regclass, i, _UVRSD_UINT32, &value) != _UVRSR_OK) { return _UVRSR_FAILED; } } if (!poppedSP) { return _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); } return _UVRSR_OK; } case _UVRSC_WMMXD: #if !defined(__ARM_WMMX) break; #endif case _UVRSC_VFP: { if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE) return _UVRSR_FAILED; uint32_t first = discriminator >> 16; uint32_t count = discriminator & 0xffff; uint32_t end = first+count; uint32_t* sp; if (_Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp) != _UVRSR_OK) { return _UVRSR_FAILED; } // For _UVRSD_VFPX, we're assuming the data is stored in FSTMX "standard // format 1", which is equivalent to FSTMD + a padding word. for (uint32_t i = first; i < end; ++i) { // SP is only 32-bit aligned so don't copy 64-bit at a time. uint64_t w0 = *sp++; uint64_t w1 = *sp++; #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ uint64_t value = (w1 << 32) | w0; #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ uint64_t value = (w0 << 32) | w1; #else #error "Unable to determine endianess" #endif if (_Unwind_VRS_Set(context, regclass, i, representation, &value) != _UVRSR_OK) return _UVRSR_FAILED; } if (representation == _UVRSD_VFPX) ++sp; return _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); } case _UVRSC_PSEUDO: { if (representation != _UVRSD_UINT32 || discriminator != 0) return _UVRSR_FAILED; // Return Address Authentication code (PAC) - discriminator 0 uint32_t *sp; if (_Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp) != _UVRSR_OK) { return _UVRSR_FAILED; } uint32_t pac = *sp++; _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp); return _Unwind_VRS_Set(context, _UVRSC_PSEUDO, 0, _UVRSD_UINT32, &pac); } } _LIBUNWIND_ABORT("unsupported register class"); } /// Not used by C++. /// Unwinds stack, calling "stop" function at each frame. /// Could be used to implement longjmp(). _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_ForcedUnwind(_Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { _LIBUNWIND_TRACE_API("_Unwind_ForcedUnwind(ex_obj=%p, stop=%p)", (void *)exception_object, (void *)(uintptr_t)stop); unw_context_t uc; unw_cursor_t cursor; __unw_getcontext(&uc); // Mark that this is a forced unwind, so _Unwind_Resume() can do // the right thing. exception_object->unwinder_cache.reserved1 = (uintptr_t)stop; exception_object->unwinder_cache.reserved3 = (uintptr_t)stop_parameter; return unwind_phase2_forced(&uc, &cursor, exception_object, stop, stop_parameter); } /// Called by personality handler during phase 2 to find the start of the /// function. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_proc_info_t frameInfo; uintptr_t result = 0; if (__unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS) result = (uintptr_t)frameInfo.start_ip; _LIBUNWIND_TRACE_API("_Unwind_GetRegionStart(context=%p) => 0x%llX", static_cast(context), (long long)result); return result; } /// Called by personality handler during phase 2 if a foreign exception // is caught. _LIBUNWIND_EXPORT void _Unwind_DeleteException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_DeleteException(ex_obj=%p)", static_cast(exception_object)); if (exception_object->exception_cleanup != NULL) (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT, exception_object); } extern "C" _LIBUNWIND_EXPORT _Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception *exception_object, struct _Unwind_Context *context) { (void)exception_object; unw_cursor_t *cursor = (unw_cursor_t *)context; switch (__unw_step(cursor)) { case UNW_STEP_SUCCESS: return _URC_OK; case UNW_STEP_END: return _URC_END_OF_STACK; default: return _URC_FAILURE; } } #endif // defined(_LIBUNWIND_ARM_EHABI) ================================================ FILE: ThirdParty/libunwind/src/Unwind-EHABI.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // //===----------------------------------------------------------------------===// #ifndef __UNWIND_EHABI_H__ #define __UNWIND_EHABI_H__ #include <__libunwind_config.h> #if defined(_LIBUNWIND_ARM_EHABI) #include #include // Unable to unwind in the ARM index table (section 5 EHABI). #define UNW_EXIDX_CANTUNWIND 0x1 static inline uint32_t signExtendPrel31(uint32_t data) { return data | ((data & 0x40000000u) << 1); } static inline uint32_t readPrel31(const uint32_t *data) { return (((uint32_t)(uintptr_t)data) + signExtendPrel31(*data)); } #if defined(__cplusplus) extern "C" { #endif extern _Unwind_Reason_Code __aeabi_unwind_cpp_pr0( _Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context); extern _Unwind_Reason_Code __aeabi_unwind_cpp_pr1( _Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context); extern _Unwind_Reason_Code __aeabi_unwind_cpp_pr2( _Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context); #if defined(__cplusplus) } // extern "C" #endif #endif // defined(_LIBUNWIND_ARM_EHABI) #endif // __UNWIND_EHABI_H__ ================================================ FILE: ThirdParty/libunwind/src/Unwind-seh.cpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Implements SEH-based Itanium C++ exceptions. // //===----------------------------------------------------------------------===// #include "config.h" #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) #include #include #include #include #include #include #include #include #include "libunwind_ext.h" #include "UnwindCursor.hpp" using namespace libunwind; #define STATUS_USER_DEFINED (1u << 29) #define STATUS_GCC_MAGIC (('G' << 16) | ('C' << 8) | 'C') #define MAKE_CUSTOM_STATUS(s, c) \ ((NTSTATUS)(((s) << 30) | STATUS_USER_DEFINED | (c))) #define MAKE_GCC_EXCEPTION(c) \ MAKE_CUSTOM_STATUS(STATUS_SEVERITY_SUCCESS, STATUS_GCC_MAGIC | ((c) << 24)) /// SEH exception raised by libunwind when the program calls /// \c _Unwind_RaiseException. #define STATUS_GCC_THROW MAKE_GCC_EXCEPTION(0) // 0x20474343 /// SEH exception raised by libunwind to initiate phase 2 of exception /// handling. #define STATUS_GCC_UNWIND MAKE_GCC_EXCEPTION(1) // 0x21474343 static int __unw_init_seh(unw_cursor_t *cursor, CONTEXT *ctx); static DISPATCHER_CONTEXT *__unw_seh_get_disp_ctx(unw_cursor_t *cursor); static void __unw_seh_set_disp_ctx(unw_cursor_t *cursor, DISPATCHER_CONTEXT *disp); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" // Local redefinition of this type; mingw-w64 headers lack the // DISPATCHER_CONTEXT_NONVOLREG_ARM64 type as of May 2025, so locally redefine // it and use that definition, to avoid needing to test/guess whether the real // type is available of not. union LOCAL_DISPATCHER_CONTEXT_NONVOLREG_ARM64 { BYTE Buffer[11 * sizeof(DWORD64) + 8 * sizeof(double)]; struct { DWORD64 GpNvRegs[11]; double FpNvRegs[8]; }; }; // Custom data type definition; this type is not defined in WinSDK. union LOCAL_DISPATCHER_CONTEXT_NONVOLREG_ARM { BYTE Buffer[8 * sizeof(DWORD) + 8 * sizeof(double)]; struct { DWORD GpNvRegs[8]; double FpNvRegs[8]; }; }; #pragma clang diagnostic pop /// Common implementation of SEH-style handler functions used by Itanium- /// style frames. Depending on how and why it was called, it may do one of: /// a) Delegate to the given Itanium-style personality function; or /// b) Initiate a collided unwind to halt unwinding. _LIBUNWIND_EXPORT EXCEPTION_DISPOSITION _GCC_specific_handler(PEXCEPTION_RECORD ms_exc, PVOID frame, PCONTEXT ms_ctx, DISPATCHER_CONTEXT *disp, _Unwind_Personality_Fn pers) { unw_cursor_t cursor; _Unwind_Exception *exc; _Unwind_Action action; struct _Unwind_Context *ctx = nullptr; _Unwind_Reason_Code urc; uintptr_t retval, target; bool ours = false; _LIBUNWIND_TRACE_UNWINDING("_GCC_specific_handler(%#010lx(%lx), %p)", ms_exc->ExceptionCode, ms_exc->ExceptionFlags, (void *)frame); if (ms_exc->ExceptionCode == STATUS_GCC_UNWIND) { if (IS_TARGET_UNWIND(ms_exc->ExceptionFlags)) { // Set up the upper return value (the lower one and the target PC // were set in the call to RtlUnwindEx()) for the landing pad. #ifdef __x86_64__ disp->ContextRecord->Rdx = ms_exc->ExceptionInformation[3]; #elif defined(__arm__) disp->ContextRecord->R1 = ms_exc->ExceptionInformation[3]; #elif defined(__aarch64__) disp->ContextRecord->X1 = ms_exc->ExceptionInformation[3]; #endif } // This is the collided unwind to the landing pad. Nothing to do. return ExceptionContinueSearch; } if (ms_exc->ExceptionCode == STATUS_GCC_THROW) { // This is (probably) a libunwind-controlled exception/unwind. Recover the // parameters which we set below, and pass them to the personality function. ours = true; exc = (_Unwind_Exception *)ms_exc->ExceptionInformation[0]; if (!IS_UNWINDING(ms_exc->ExceptionFlags) && ms_exc->NumberParameters > 1) { ctx = (struct _Unwind_Context *)ms_exc->ExceptionInformation[1]; action = (_Unwind_Action)ms_exc->ExceptionInformation[2]; } } else { // Foreign exception. // We can't interact with them (we don't know the original target frame // that we should pass on to RtlUnwindEx in _Unwind_Resume), so just // pass without calling our destructors here. return ExceptionContinueSearch; } if (!ctx) { __unw_init_seh(&cursor, disp->ContextRecord); __unw_seh_set_disp_ctx(&cursor, disp); __unw_set_reg(&cursor, UNW_REG_IP, disp->ControlPc); ctx = (struct _Unwind_Context *)&cursor; if (!IS_UNWINDING(ms_exc->ExceptionFlags)) { if (ours && ms_exc->NumberParameters > 1) action = (_Unwind_Action)(_UA_CLEANUP_PHASE | _UA_FORCE_UNWIND); else action = _UA_SEARCH_PHASE; } else { if (ours && ms_exc->ExceptionInformation[1] == (ULONG_PTR)frame) action = (_Unwind_Action)(_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME); else action = _UA_CLEANUP_PHASE; } } _LIBUNWIND_TRACE_UNWINDING("_GCC_specific_handler() calling personality " "function %p(1, %d, %llx, %p, %p)", (void *)pers, action, exc->exception_class, (void *)exc, (void *)ctx); urc = pers(1, action, exc->exception_class, exc, ctx); _LIBUNWIND_TRACE_UNWINDING("_GCC_specific_handler() personality returned %d", urc); switch (urc) { case _URC_CONTINUE_UNWIND: // If we're in phase 2, and the personality routine said to continue // at the target frame, we're in real trouble. if (action & _UA_HANDLER_FRAME) _LIBUNWIND_ABORT("Personality continued unwind at the target frame!"); return ExceptionContinueSearch; case _URC_HANDLER_FOUND: // If we were called by __libunwind_seh_personality(), indicate that // a handler was found; otherwise, initiate phase 2 by unwinding. if (ours && ms_exc->NumberParameters > 1) return 4 /* ExceptionExecuteHandler in mingw */; // This should never happen in phase 2. if (IS_UNWINDING(ms_exc->ExceptionFlags)) _LIBUNWIND_ABORT("Personality indicated exception handler in phase 2!"); exc->private_[1] = (ULONG_PTR)frame; if (ours) { ms_exc->NumberParameters = 4; ms_exc->ExceptionInformation[1] = (ULONG_PTR)frame; } // FIXME: Indicate target frame in foreign case! // phase 2: the clean up phase RtlUnwindEx(frame, (PVOID)disp->ControlPc, ms_exc, exc, disp->ContextRecord, disp->HistoryTable); _LIBUNWIND_ABORT("RtlUnwindEx() failed"); case _URC_INSTALL_CONTEXT: { // If we were called by __libunwind_seh_personality(), indicate that // a handler was found; otherwise, it's time to initiate a collided // unwind to the target. if (ours && !IS_UNWINDING(ms_exc->ExceptionFlags) && ms_exc->NumberParameters > 1) return 4 /* ExceptionExecuteHandler in mingw */; // This should never happen in phase 1. if (!IS_UNWINDING(ms_exc->ExceptionFlags)) _LIBUNWIND_ABORT("Personality installed context during phase 1!"); #ifdef __x86_64__ exc->private_[2] = disp->TargetIp; __unw_get_reg(&cursor, UNW_X86_64_RAX, &retval); __unw_get_reg(&cursor, UNW_X86_64_RDX, &exc->private_[3]); #elif defined(__arm__) exc->private_[2] = disp->TargetPc; __unw_get_reg(&cursor, UNW_ARM_R0, &retval); __unw_get_reg(&cursor, UNW_ARM_R1, &exc->private_[3]); #elif defined(__aarch64__) exc->private_[2] = disp->TargetPc; __unw_get_reg(&cursor, UNW_AARCH64_X0, &retval); __unw_get_reg(&cursor, UNW_AARCH64_X1, &exc->private_[3]); #endif __unw_get_reg(&cursor, UNW_REG_IP, &target); ms_exc->ExceptionCode = STATUS_GCC_UNWIND; #ifdef __x86_64__ ms_exc->ExceptionInformation[2] = disp->TargetIp; #elif defined(__arm__) || defined(__aarch64__) ms_exc->ExceptionInformation[2] = disp->TargetPc; #endif ms_exc->ExceptionInformation[3] = exc->private_[3]; // Give NTRTL some scratch space to keep track of the collided unwind. // Don't use the one that was passed in; we don't want to overwrite the // context in the DISPATCHER_CONTEXT. CONTEXT new_ctx; RtlUnwindEx(frame, (PVOID)target, ms_exc, (PVOID)retval, &new_ctx, disp->HistoryTable); _LIBUNWIND_ABORT("RtlUnwindEx() failed"); } // Anything else indicates a serious problem. default: return ExceptionContinueExecution; } } /// Personality function returned by \c __unw_get_proc_info() in SEH contexts. /// This is a wrapper that calls the real SEH handler function, which in /// turn (at least, for Itanium-style frames) calls the real Itanium /// personality function (see \c _GCC_specific_handler()). extern "C" _Unwind_Reason_Code __libunwind_seh_personality(int version, _Unwind_Action state, uint64_t klass, _Unwind_Exception *exc, struct _Unwind_Context *context) { (void)version; (void)klass; EXCEPTION_RECORD ms_exc; bool phase2 = (state & (_UA_SEARCH_PHASE|_UA_CLEANUP_PHASE)) == _UA_CLEANUP_PHASE; ms_exc.ExceptionCode = STATUS_GCC_THROW; ms_exc.ExceptionFlags = 0; ms_exc.NumberParameters = 3; ms_exc.ExceptionInformation[0] = (ULONG_PTR)exc; ms_exc.ExceptionInformation[1] = (ULONG_PTR)context; ms_exc.ExceptionInformation[2] = state; DISPATCHER_CONTEXT *disp_ctx = __unw_seh_get_disp_ctx((unw_cursor_t *)context); #if defined(__aarch64__) LOCAL_DISPATCHER_CONTEXT_NONVOLREG_ARM64 nonvol; memcpy(&nonvol.GpNvRegs, &disp_ctx->ContextRecord->X19, sizeof(nonvol.GpNvRegs)); for (int i = 0; i < 8; i++) nonvol.FpNvRegs[i] = disp_ctx->ContextRecord->V[i + 8].D[0]; disp_ctx->NonVolatileRegisters = nonvol.Buffer; #elif defined(__arm__) LOCAL_DISPATCHER_CONTEXT_NONVOLREG_ARM nonvol; memcpy(&nonvol.GpNvRegs, &disp_ctx->ContextRecord->R4, sizeof(nonvol.GpNvRegs)); memcpy(&nonvol.FpNvRegs, &disp_ctx->ContextRecord->D[8], sizeof(nonvol.FpNvRegs)); disp_ctx->NonVolatileRegisters = nonvol.Buffer; #endif _LIBUNWIND_TRACE_UNWINDING("__libunwind_seh_personality() calling " "LanguageHandler %p(%p, %p, %p, %p)", (void *)disp_ctx->LanguageHandler, (void *)&ms_exc, (void *)disp_ctx->EstablisherFrame, (void *)disp_ctx->ContextRecord, (void *)disp_ctx); EXCEPTION_DISPOSITION ms_act = disp_ctx->LanguageHandler(&ms_exc, (PVOID)disp_ctx->EstablisherFrame, disp_ctx->ContextRecord, disp_ctx); _LIBUNWIND_TRACE_UNWINDING("__libunwind_seh_personality() LanguageHandler " "returned %d", (int)ms_act); switch (ms_act) { case ExceptionContinueExecution: return _URC_END_OF_STACK; case ExceptionContinueSearch: return _URC_CONTINUE_UNWIND; case 4 /*ExceptionExecuteHandler*/: return phase2 ? _URC_INSTALL_CONTEXT : _URC_HANDLER_FOUND; default: return phase2 ? _URC_FATAL_PHASE2_ERROR : _URC_FATAL_PHASE1_ERROR; } } static _Unwind_Reason_Code unwind_phase2_forced(unw_context_t *uc, _Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { unw_cursor_t cursor2; __unw_init_local(&cursor2, uc); // Walk each frame until we reach where search phase said to stop while (__unw_step(&cursor2) > 0) { // Update info about this frame. unw_proc_info_t frameInfo; if (__unw_get_proc_info(&cursor2, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): __unw_get_proc_info " "failed => _URC_END_OF_STACK", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(&cursor2, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): start_ip=0x%" PRIxPTR ", func=%s, lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR, (void *)exception_object, frameInfo.start_ip, functionName, frameInfo.lsda, frameInfo.handler); } #endif // Call stop function at each frame. _Unwind_Action action = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE); _Unwind_Reason_Code stopResult = (*stop)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(&cursor2), stop_parameter); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): stop function returned %d", (void *)exception_object, stopResult); if (stopResult != _URC_NO_REASON) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): stopped by stop function", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } // If there is a personality routine, tell it we are unwinding. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(intptr_t)(frameInfo.handler); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_ojb=%p): calling personality function %p", (void *)exception_object, (void *)(uintptr_t)p); _Unwind_Reason_Code personalityResult = (*p)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(&cursor2)); switch (personalityResult) { case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned " "_URC_CONTINUE_UNWIND", (void *)exception_object); // Destructors called, continue unwinding break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned " "_URC_INSTALL_CONTEXT", (void *)exception_object); // We may get control back if landing pad calls _Unwind_Resume(). __unw_resume(&cursor2); break; case _URC_END_OF_STACK: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned " "_URC_END_OF_STACK", (void *)exception_object); break; default: // Personality routine returned an unknown result code. _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned %d, " "_URC_FATAL_PHASE2_ERROR", (void *)exception_object, personalityResult); return _URC_FATAL_PHASE2_ERROR; } if (personalityResult == _URC_END_OF_STACK) break; } } // Call stop function one last time and tell it we've reached the end // of the stack. _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): calling stop " "function with _UA_END_OF_STACK", (void *)exception_object); _Unwind_Action lastAction = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK); (*stop)(1, lastAction, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(&cursor2), stop_parameter); // Clean up phase did not resume at the frame that the search phase said it // would. return _URC_FATAL_PHASE2_ERROR; } /// Called by \c __cxa_throw(). Only returns if there is a fatal error. _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_RaiseException(ex_obj=%p)", (void *)exception_object); // Mark that this is a non-forced unwind, so _Unwind_Resume() // can do the right thing. memset(exception_object->private_, 0, sizeof(exception_object->private_)); // phase 1: the search phase // We'll let the system do that for us. RaiseException(STATUS_GCC_THROW, 0, 1, (ULONG_PTR *)&exception_object); // If we get here, either something went horribly wrong or we reached the // top of the stack. Either way, let libc++abi call std::terminate(). return _URC_END_OF_STACK; } /// When \c _Unwind_RaiseException() is in phase2, it hands control /// to the personality function at each frame. The personality /// may force a jump to a landing pad in that function; the landing /// pad code may then call \c _Unwind_Resume() to continue with the /// unwinding. Note: the call to \c _Unwind_Resume() is from compiler /// generated user code. All other \c _Unwind_* routines are called /// by the C++ runtime \c __cxa_* routines. /// /// Note: re-throwing an exception (as opposed to continuing the unwind) /// is implemented by having the code call \c __cxa_rethrow() which /// in turn calls \c _Unwind_Resume_or_Rethrow(). _LIBUNWIND_EXPORT void _Unwind_Resume(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_Resume(ex_obj=%p)", (void *)exception_object); if (exception_object->private_[0] != 0) { unw_context_t uc; __unw_getcontext(&uc); unwind_phase2_forced(&uc, exception_object, (_Unwind_Stop_Fn) exception_object->private_[0], (void *)exception_object->private_[4]); } else { // Recover the parameters for the unwind from the exception object // so we can start unwinding again. EXCEPTION_RECORD ms_exc; CONTEXT ms_ctx; UNWIND_HISTORY_TABLE hist; memset(&ms_exc, 0, sizeof(ms_exc)); memset(&hist, 0, sizeof(hist)); ms_exc.ExceptionCode = STATUS_GCC_THROW; ms_exc.ExceptionFlags = EXCEPTION_NONCONTINUABLE; ms_exc.NumberParameters = 4; ms_exc.ExceptionInformation[0] = (ULONG_PTR)exception_object; ms_exc.ExceptionInformation[1] = exception_object->private_[1]; ms_exc.ExceptionInformation[2] = exception_object->private_[2]; ms_exc.ExceptionInformation[3] = exception_object->private_[3]; RtlUnwindEx((PVOID)exception_object->private_[1], (PVOID)exception_object->private_[2], &ms_exc, exception_object, &ms_ctx, &hist); } // Clients assume _Unwind_Resume() does not return, so all we can do is abort. _LIBUNWIND_ABORT("_Unwind_Resume() can't return"); } /// Not used by C++. /// Unwinds stack, calling "stop" function at each frame. /// Could be used to implement \c longjmp(). _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_ForcedUnwind(_Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { _LIBUNWIND_TRACE_API("_Unwind_ForcedUnwind(ex_obj=%p, stop=%p)", (void *)exception_object, (void *)(uintptr_t)stop); unw_context_t uc; __unw_getcontext(&uc); // Mark that this is a forced unwind, so _Unwind_Resume() can do // the right thing. exception_object->private_[0] = (uintptr_t) stop; exception_object->private_[4] = (uintptr_t) stop_parameter; // do it return unwind_phase2_forced(&uc, exception_object, stop, stop_parameter); } /// Called by personality handler during phase 2 to get LSDA for current frame. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) { uintptr_t result = (uintptr_t)__unw_seh_get_disp_ctx((unw_cursor_t *)context)->HandlerData; _LIBUNWIND_TRACE_API( "_Unwind_GetLanguageSpecificData(context=%p) => 0x%" PRIxPTR, (void *)context, result); return result; } /// Called by personality handler during phase 2 to find the start of the /// function. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context) { DISPATCHER_CONTEXT *disp = __unw_seh_get_disp_ctx((unw_cursor_t *)context); uintptr_t result = (uintptr_t)disp->FunctionEntry->BeginAddress + disp->ImageBase; _LIBUNWIND_TRACE_API("_Unwind_GetRegionStart(context=%p) => 0x%" PRIxPTR, (void *)context, result); return result; } static int __unw_init_seh(unw_cursor_t *cursor, CONTEXT *context) { #ifdef _LIBUNWIND_TARGET_X86_64 new (reinterpret_cast *>(cursor)) UnwindCursor( context, LocalAddressSpace::sThisAddressSpace); auto *co = reinterpret_cast(cursor); co->setInfoBasedOnIPRegister(); return UNW_ESUCCESS; #elif defined(_LIBUNWIND_TARGET_ARM) new (reinterpret_cast *>(cursor)) UnwindCursor( context, LocalAddressSpace::sThisAddressSpace); auto *co = reinterpret_cast(cursor); co->setInfoBasedOnIPRegister(); return UNW_ESUCCESS; #elif defined(_LIBUNWIND_TARGET_AARCH64) new (reinterpret_cast *>(cursor)) UnwindCursor( context, LocalAddressSpace::sThisAddressSpace); auto *co = reinterpret_cast(cursor); co->setInfoBasedOnIPRegister(); return UNW_ESUCCESS; #else return UNW_EINVAL; #endif } static DISPATCHER_CONTEXT *__unw_seh_get_disp_ctx(unw_cursor_t *cursor) { #ifdef _LIBUNWIND_TARGET_X86_64 return reinterpret_cast *>(cursor)->getDispatcherContext(); #elif defined(_LIBUNWIND_TARGET_ARM) return reinterpret_cast *>(cursor)->getDispatcherContext(); #elif defined(_LIBUNWIND_TARGET_AARCH64) return reinterpret_cast *>(cursor)->getDispatcherContext(); #else return nullptr; #endif } static void __unw_seh_set_disp_ctx(unw_cursor_t *cursor, DISPATCHER_CONTEXT *disp) { #ifdef _LIBUNWIND_TARGET_X86_64 reinterpret_cast *>(cursor)->setDispatcherContext(disp); #elif defined(_LIBUNWIND_TARGET_ARM) reinterpret_cast *>(cursor)->setDispatcherContext(disp); #elif defined(_LIBUNWIND_TARGET_AARCH64) reinterpret_cast *>(cursor)->setDispatcherContext(disp); #endif } #endif // defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) ================================================ FILE: ThirdParty/libunwind/src/Unwind-sjlj.c ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Implements setjump-longjump based C++ exceptions // //===----------------------------------------------------------------------===// #include #include #include #include #include #include "config.h" /// With SJLJ based exceptions, any function that has a catch clause or needs to /// do any clean up when an exception propagates through it, needs to call /// \c _Unwind_SjLj_Register at the start of the function and /// \c _Unwind_SjLj_Unregister at the end. The register function is called with /// the address of a block of memory in the function's stack frame. The runtime /// keeps a linked list (stack) of these blocks - one per thread. The calling /// function also sets the personality and lsda fields of the block. #if defined(_LIBUNWIND_BUILD_SJLJ_APIS) struct _Unwind_FunctionContext { // next function in stack of handlers struct _Unwind_FunctionContext *prev; #if defined(__ve__) // VE requires to store 64 bit pointers in the buffer for SjLj exception. // We expand the size of values defined here. This size must be matched // to the size returned by TargetMachine::getSjLjDataSize(). // set by calling function before registering to be the landing pad uint64_t resumeLocation; // set by personality handler to be parameters passed to landing pad function uint64_t resumeParameters[4]; #else // set by calling function before registering to be the landing pad uint32_t resumeLocation; // set by personality handler to be parameters passed to landing pad function uint32_t resumeParameters[4]; #endif // set by calling function before registering _Unwind_Personality_Fn personality; // arm offset=24 uintptr_t lsda; // arm offset=28 // variable length array, contains registers to restore // 0 = r7, 1 = pc, 2 = sp void *jbuf[]; }; #if defined(_LIBUNWIND_HAS_NO_THREADS) # define _LIBUNWIND_THREAD_LOCAL #else # if __STDC_VERSION__ >= 201112L # define _LIBUNWIND_THREAD_LOCAL _Thread_local # elif defined(_MSC_VER) # define _LIBUNWIND_THREAD_LOCAL __declspec(thread) # elif defined(__GNUC__) || defined(__clang__) # define _LIBUNWIND_THREAD_LOCAL __thread # else # error Unable to create thread local storage # endif #endif #if !defined(FOR_DYLD) #if defined(__APPLE__) #include #else static _LIBUNWIND_THREAD_LOCAL struct _Unwind_FunctionContext *stack = NULL; #endif static struct _Unwind_FunctionContext * __Unwind_SjLj_GetTopOfFunctionStack(void) { #if defined(__APPLE__) return _pthread_getspecific_direct(__PTK_LIBC_DYLD_Unwind_SjLj_Key); #else return stack; #endif } static void __Unwind_SjLj_SetTopOfFunctionStack(struct _Unwind_FunctionContext *fc) { #if defined(__APPLE__) _pthread_setspecific_direct(__PTK_LIBC_DYLD_Unwind_SjLj_Key, fc); #else stack = fc; #endif } #endif /// Called at start of each function that catches exceptions _LIBUNWIND_EXPORT void _Unwind_SjLj_Register(struct _Unwind_FunctionContext *fc) { fc->prev = __Unwind_SjLj_GetTopOfFunctionStack(); __Unwind_SjLj_SetTopOfFunctionStack(fc); } /// Called at end of each function that catches exceptions _LIBUNWIND_EXPORT void _Unwind_SjLj_Unregister(struct _Unwind_FunctionContext *fc) { __Unwind_SjLj_SetTopOfFunctionStack(fc->prev); } static _Unwind_Reason_Code unwind_phase1(struct _Unwind_Exception *exception_object) { _Unwind_FunctionContext_t c = __Unwind_SjLj_GetTopOfFunctionStack(); _LIBUNWIND_TRACE_UNWINDING("unwind_phase1: initial function-context=%p", (void *)c); // walk each frame looking for a place to stop for (bool handlerNotFound = true; handlerNotFound; c = c->prev) { // check for no more frames if (c == NULL) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase1(ex_ojb=%p): reached " "bottom => _URC_END_OF_STACK", (void *)exception_object); return _URC_END_OF_STACK; } _LIBUNWIND_TRACE_UNWINDING("unwind_phase1: function-context=%p", (void *)c); // if there is a personality routine, ask it if it will want to stop at this // frame if (c->personality != NULL) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase1(ex_ojb=%p): calling " "personality function %p", (void *)exception_object, (void *)c->personality); _Unwind_Reason_Code personalityResult = (*c->personality)( 1, _UA_SEARCH_PHASE, exception_object->exception_class, exception_object, (struct _Unwind_Context *)c); switch (personalityResult) { case _URC_HANDLER_FOUND: // found a catch clause or locals that need destructing in this frame // stop search and remember function context handlerNotFound = false; exception_object->private_2 = (uintptr_t) c; _LIBUNWIND_TRACE_UNWINDING("unwind_phase1(ex_ojb=%p): " "_URC_HANDLER_FOUND", (void *)exception_object); return _URC_NO_REASON; case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING("unwind_phase1(ex_ojb=%p): " "_URC_CONTINUE_UNWIND", (void *)exception_object); // continue unwinding break; default: // something went wrong _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_ojb=%p): _URC_FATAL_PHASE1_ERROR", (void *)exception_object); return _URC_FATAL_PHASE1_ERROR; } } } return _URC_NO_REASON; } static _Unwind_Reason_Code unwind_phase2(struct _Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_ojb=%p)", (void *)exception_object); // walk each frame until we reach where search phase said to stop _Unwind_FunctionContext_t c = __Unwind_SjLj_GetTopOfFunctionStack(); while (true) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase2s(ex_ojb=%p): context=%p", (void *)exception_object, (void *)c); // check for no more frames if (c == NULL) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): __unw_step() reached " "bottom => _URC_END_OF_STACK", (void *)exception_object); return _URC_END_OF_STACK; } // if there is a personality routine, tell it we are unwinding if (c->personality != NULL) { _Unwind_Action action = _UA_CLEANUP_PHASE; if ((uintptr_t) c == exception_object->private_2) action = (_Unwind_Action)( _UA_CLEANUP_PHASE | _UA_HANDLER_FRAME); // tell personality this was the frame it marked // in phase 1 _Unwind_Reason_Code personalityResult = (*c->personality)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)c); switch (personalityResult) { case _URC_CONTINUE_UNWIND: // continue unwinding _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): _URC_CONTINUE_UNWIND", (void *)exception_object); if ((uintptr_t) c == exception_object->private_2) { // phase 1 said we would stop at this frame, but we did not... _LIBUNWIND_ABORT("during phase1 personality function said it would " "stop here, but now if phase2 it did not stop here"); } break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_ojb=%p): " "_URC_INSTALL_CONTEXT, will resume at " "landing pad %p", (void *)exception_object, c->jbuf[1]); // personality routine says to transfer control to landing pad // we may get control back if landing pad calls _Unwind_Resume() __Unwind_SjLj_SetTopOfFunctionStack(c); __builtin_longjmp(c->jbuf, 1); // __unw_resume() only returns if there was an error return _URC_FATAL_PHASE2_ERROR; default: // something went wrong _LIBUNWIND_DEBUG_LOG("personality function returned unknown result %d", personalityResult); return _URC_FATAL_PHASE2_ERROR; } } c = c->prev; } // clean up phase did not resume at the frame that the search phase said it // would return _URC_FATAL_PHASE2_ERROR; } static _Unwind_Reason_Code unwind_phase2_forced(struct _Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { // walk each frame until we reach where search phase said to stop _Unwind_FunctionContext_t c = __Unwind_SjLj_GetTopOfFunctionStack(); while (true) { // get next frame (skip over first which is _Unwind_RaiseException) if (c == NULL) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_ojb=%p): __unw_step() reached " "bottom => _URC_END_OF_STACK", (void *)exception_object); return _URC_END_OF_STACK; } // call stop function at each frame _Unwind_Action action = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE); _Unwind_Reason_Code stopResult = (*stop)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)c, stop_parameter); _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "stop function returned %d", (void *)exception_object, stopResult); if (stopResult != _URC_NO_REASON) { _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "stopped by stop function", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } // if there is a personality routine, tell it we are unwinding if (c->personality != NULL) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)c->personality; _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "calling personality function %p", (void *)exception_object, (void *)p); _Unwind_Reason_Code personalityResult = (*p)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)c); switch (personalityResult) { case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned _URC_CONTINUE_UNWIND", (void *)exception_object); // destructors called, continue unwinding break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned _URC_INSTALL_CONTEXT", (void *)exception_object); // we may get control back if landing pad calls _Unwind_Resume() __Unwind_SjLj_SetTopOfFunctionStack(c); __builtin_longjmp(c->jbuf, 1); break; default: // something went wrong _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): " "personality returned %d, " "_URC_FATAL_PHASE2_ERROR", (void *)exception_object, personalityResult); return _URC_FATAL_PHASE2_ERROR; } } c = c->prev; } // call stop function one last time and tell it we've reached the end of the // stack _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_ojb=%p): calling stop " "function with _UA_END_OF_STACK", (void *)exception_object); _Unwind_Action lastAction = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK); (*stop)(1, lastAction, exception_object->exception_class, exception_object, (struct _Unwind_Context *)c, stop_parameter); // clean up phase did not resume at the frame that the search phase said it // would return _URC_FATAL_PHASE2_ERROR; } /// Called by __cxa_throw. Only returns if there is a fatal error _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_SjLj_RaiseException(struct _Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_SjLj_RaiseException(ex_obj=%p)", (void *)exception_object); // mark that this is a non-forced unwind, so _Unwind_Resume() can do the right // thing exception_object->private_1 = 0; exception_object->private_2 = 0; // phase 1: the search phase _Unwind_Reason_Code phase1 = unwind_phase1(exception_object); if (phase1 != _URC_NO_REASON) return phase1; // phase 2: the clean up phase return unwind_phase2(exception_object); } /// When _Unwind_RaiseException() is in phase2, it hands control /// to the personality function at each frame. The personality /// may force a jump to a landing pad in that function, the landing /// pad code may then call _Unwind_Resume() to continue with the /// unwinding. Note: the call to _Unwind_Resume() is from compiler /// generated user code. All other _Unwind_* routines are called /// by the C++ runtime __cxa_* routines. /// /// Re-throwing an exception is implemented by having the code call /// __cxa_rethrow() which in turn calls _Unwind_Resume_or_Rethrow() _LIBUNWIND_EXPORT void _Unwind_SjLj_Resume(struct _Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_SjLj_Resume(ex_obj=%p)", (void *)exception_object); if (exception_object->private_1 != 0) unwind_phase2_forced(exception_object, (_Unwind_Stop_Fn) exception_object->private_1, (void *)exception_object->private_2); else unwind_phase2(exception_object); // clients assume _Unwind_Resume() does not return, so all we can do is abort. _LIBUNWIND_ABORT("_Unwind_SjLj_Resume() can't return"); } /// Called by __cxa_rethrow(). _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow(struct _Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("__Unwind_SjLj_Resume_or_Rethrow(ex_obj=%p), " "private_1=%" PRIuPTR, (void *)exception_object, exception_object->private_1); // If this is non-forced and a stopping place was found, then this is a // re-throw. // Call _Unwind_RaiseException() as if this was a new exception. if (exception_object->private_1 == 0) { return _Unwind_SjLj_RaiseException(exception_object); // should return if there is no catch clause, so that __cxa_rethrow can call // std::terminate() } // Call through to _Unwind_Resume() which distinguishes between forced and // regular exceptions. _Unwind_SjLj_Resume(exception_object); _LIBUNWIND_ABORT("__Unwind_SjLj_Resume_or_Rethrow() called " "_Unwind_SjLj_Resume() which unexpectedly returned"); } /// Called by personality handler during phase 2 to get LSDA for current frame. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) { _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; _LIBUNWIND_TRACE_API("_Unwind_GetLanguageSpecificData(context=%p) " "=> 0x%" PRIxPTR, (void *)context, ufc->lsda); return ufc->lsda; } /// Called by personality handler during phase 2 to get register values. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index) { _LIBUNWIND_TRACE_API("_Unwind_GetGR(context=%p, reg=%d)", (void *)context, index); _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; return ufc->resumeParameters[index]; } /// Called by personality handler during phase 2 to alter register values. _LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index, uintptr_t new_value) { _LIBUNWIND_TRACE_API("_Unwind_SetGR(context=%p, reg=%d, value=0x%" PRIxPTR ")", (void *)context, index, new_value); _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; ufc->resumeParameters[index] = new_value; } /// Called by personality handler during phase 2 to get instruction pointer. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) { _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; _LIBUNWIND_TRACE_API("_Unwind_GetIP(context=%p) => 0x%" PRIxPTR, (void *)context, ufc->resumeLocation + 1); return ufc->resumeLocation + 1; } /// Called by personality handler during phase 2 to get instruction pointer. /// ipBefore is a boolean that says if IP is already adjusted to be the call /// site address. Normally IP is the return address. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context, int *ipBefore) { _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; *ipBefore = 0; _LIBUNWIND_TRACE_API("_Unwind_GetIPInfo(context=%p, %p) => 0x%" PRIxPTR, (void *)context, (void *)ipBefore, ufc->resumeLocation + 1); return ufc->resumeLocation + 1; } /// Called by personality handler during phase 2 to alter instruction pointer. _LIBUNWIND_EXPORT void _Unwind_SetIP(struct _Unwind_Context *context, uintptr_t new_value) { _LIBUNWIND_TRACE_API("_Unwind_SetIP(context=%p, value=0x%" PRIxPTR ")", (void *)context, new_value); _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; ufc->resumeLocation = new_value - 1; } /// Called by personality handler during phase 2 to find the start of the /// function. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context) { // Not supported or needed for sjlj based unwinding (void)context; _LIBUNWIND_TRACE_API("_Unwind_GetRegionStart(context=%p)", (void *)context); return 0; } /// Called by personality handler during phase 2 if a foreign exception /// is caught. _LIBUNWIND_EXPORT void _Unwind_DeleteException(struct _Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_DeleteException(ex_obj=%p)", (void *)exception_object); if (exception_object->exception_cleanup != NULL) (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT, exception_object); } /// Called by personality handler during phase 2 to get base address for data /// relative encodings. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *context) { // Not supported or needed for sjlj based unwinding (void)context; _LIBUNWIND_TRACE_API("_Unwind_GetDataRelBase(context=%p)", (void *)context); _LIBUNWIND_ABORT("_Unwind_GetDataRelBase() not implemented"); } /// Called by personality handler during phase 2 to get base address for text /// relative encodings. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *context) { // Not supported or needed for sjlj based unwinding (void)context; _LIBUNWIND_TRACE_API("_Unwind_GetTextRelBase(context=%p)", (void *)context); _LIBUNWIND_ABORT("_Unwind_GetTextRelBase() not implemented"); } /// Called by personality handler to get "Call Frame Area" for current frame. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetCFA(struct _Unwind_Context *context) { _LIBUNWIND_TRACE_API("_Unwind_GetCFA(context=%p)", (void *)context); if (context != NULL) { _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context; // Setjmp/longjmp based exceptions don't have a true CFA. // Instead, the SP in the jmpbuf is the closest approximation. return (uintptr_t) ufc->jbuf[2]; } return 0; } #endif // defined(_LIBUNWIND_BUILD_SJLJ_APIS) ================================================ FILE: ThirdParty/libunwind/src/Unwind-wasm.c ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Implements Wasm exception handling proposal // (https://github.com/WebAssembly/exception-handling) based C++ exceptions // //===----------------------------------------------------------------------===// #include #include "config.h" #ifdef __WASM_EXCEPTIONS__ #include "unwind.h" #include _Unwind_Reason_Code __gxx_personality_wasm0(int version, _Unwind_Action actions, uint64_t exceptionClass, _Unwind_Exception *unwind_exception, _Unwind_Context *context); struct _Unwind_LandingPadContext { // Input information to personality function uintptr_t lpad_index; // landing pad index uintptr_t lsda; // LSDA address // Output information computed by personality function uintptr_t selector; // selector value }; // Communication channel between compiler-generated user code and personality // function thread_local struct _Unwind_LandingPadContext __wasm_lpad_context; /// Calls to this function is in landing pads in compiler-generated user code. /// In other EH schemes, stack unwinding is done by libunwind library, which /// calls the personality function for each each frame it lands. On the other /// hand, WebAssembly stack unwinding process is performed by a VM, and the /// personality function cannot be called from there. So the compiler inserts /// a call to this function in landing pads in the user code, which in turn /// calls the personality function. _Unwind_Reason_Code _Unwind_CallPersonality(void *exception_ptr) { struct _Unwind_Exception *exception_object = (struct _Unwind_Exception *)exception_ptr; _LIBUNWIND_TRACE_API("_Unwind_CallPersonality(exception_object=%p)", (void *)exception_object); // Reset the selector. __wasm_lpad_context.selector = 0; // Call personality function. Wasm does not have two-phase unwinding, so we // only do the cleanup phase. return __gxx_personality_wasm0( 1, _UA_SEARCH_PHASE, exception_object->exception_class, exception_object, (struct _Unwind_Context *)&__wasm_lpad_context); } /// Called by __cxa_throw. _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_RaiseException(exception_object=%p)", (void *)exception_object); // Use Wasm EH's 'throw' instruction. __builtin_wasm_throw(0, exception_object); } /// Called by __cxa_end_catch. _LIBUNWIND_EXPORT void _Unwind_DeleteException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_DeleteException(ex_obj=%p)", (void *)(exception_object)); if (exception_object->exception_cleanup != NULL) (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT, exception_object); } /// Called by personality handler to alter register values. _LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index, uintptr_t value) { _LIBUNWIND_TRACE_API("_Unwind_SetGR(context=%p, index=%d, value=%lu)", (void *)context, index, value); // We only use this function to set __wasm_lpad_context.selector field, which // is index 1 in the personality function. if (index == 1) ((struct _Unwind_LandingPadContext *)context)->selector = value; } /// Called by personality handler to get instruction pointer. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) { // The result will be used as an 1-based index after decrementing 1, so we // increment 2 here uintptr_t result = ((struct _Unwind_LandingPadContext *)context)->lpad_index + 2; _LIBUNWIND_TRACE_API("_Unwind_GetIP(context=%p) => %lu", (void *)context, result); return result; } /// Not used in Wasm. _LIBUNWIND_EXPORT void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t) {} /// Called by personality handler to get LSDA for current frame. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) { uintptr_t result = ((struct _Unwind_LandingPadContext *)context)->lsda; _LIBUNWIND_TRACE_API("_Unwind_GetLanguageSpecificData(context=%p) => 0x%lx", (void *)context, result); return result; } /// Not used in Wasm. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *) { return 0; } #endif // defined(__WASM_EXCEPTIONS__) ================================================ FILE: ThirdParty/libunwind/src/UnwindCursor.hpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // C++ interface to lower levels of libunwind //===----------------------------------------------------------------------===// #ifndef __UNWINDCURSOR_HPP__ #define __UNWINDCURSOR_HPP__ #include "shadow_stack_unwind.h" #include #include #include #include #ifdef _WIN32 #include #include #endif #ifdef __APPLE__ #include #endif #ifdef _AIX #include #include #include #endif #if defined(_LIBUNWIND_TARGET_LINUX) && \ (defined(_LIBUNWIND_TARGET_AARCH64) || \ defined(_LIBUNWIND_TARGET_LOONGARCH) || \ defined(_LIBUNWIND_TARGET_RISCV) || defined(_LIBUNWIND_TARGET_S390X)) #include #include #include #include #define _LIBUNWIND_CHECK_LINUX_SIGRETURN 1 #endif #if defined(_LIBUNWIND_TARGET_HAIKU) && defined(_LIBUNWIND_TARGET_X86_64) #include #include #define _LIBUNWIND_CHECK_HAIKU_SIGRETURN 1 #endif #include "AddressSpace.hpp" #include "CompactUnwinder.hpp" #include "config.h" #include "DwarfInstructions.hpp" #include "EHHeaderParser.hpp" #include "libunwind.h" #include "libunwind_ext.h" #include "Registers.hpp" #include "RWMutex.hpp" #include "Unwind-EHABI.h" #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) // Provide a definition for the DISPATCHER_CONTEXT struct for old (Win7 and // earlier) SDKs. // MinGW-w64 has always provided this struct. #if defined(_WIN32) && defined(_LIBUNWIND_TARGET_X86_64) && \ !defined(__MINGW32__) && VER_PRODUCTBUILD < 8000 struct _DISPATCHER_CONTEXT { ULONG64 ControlPc; ULONG64 ImageBase; PRUNTIME_FUNCTION FunctionEntry; ULONG64 EstablisherFrame; ULONG64 TargetIp; PCONTEXT ContextRecord; PEXCEPTION_ROUTINE LanguageHandler; PVOID HandlerData; PUNWIND_HISTORY_TABLE HistoryTable; ULONG ScopeIndex; ULONG Fill0; }; #endif struct UNWIND_INFO { uint8_t Version : 3; uint8_t Flags : 5; uint8_t SizeOfProlog; uint8_t CountOfCodes; uint8_t FrameRegister : 4; uint8_t FrameOffset : 4; uint16_t UnwindCodes[2]; }; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" union UNWIND_INFO_ARM { DWORD HeaderData; struct { DWORD FunctionLength : 18; DWORD Version : 2; DWORD ExceptionDataPresent : 1; DWORD EpilogInHeader : 1; DWORD FunctionFragment : 1; DWORD EpilogCount : 5; DWORD CodeWords : 4; }; }; #pragma clang diagnostic pop extern "C" _Unwind_Reason_Code __libunwind_seh_personality( int, _Unwind_Action, uint64_t, _Unwind_Exception *, struct _Unwind_Context *); #endif namespace libunwind { #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) /// Cache of recently found FDEs. template class _LIBUNWIND_HIDDEN DwarfFDECache { typedef typename A::pint_t pint_t; public: static constexpr pint_t kSearchAll = static_cast(-1); static pint_t findFDE(pint_t mh, pint_t pc); static void add(pint_t mh, pint_t ip_start, pint_t ip_end, pint_t fde, bool isMallocAllowed = false); static void removeAllIn(pint_t mh); static void iterateCacheEntries(void (*func)(unw_word_t ip_start, unw_word_t ip_end, unw_word_t fde, unw_word_t mh)); private: struct entry { pint_t mh; pint_t ip_start; pint_t ip_end; pint_t fde; }; // These fields are all static to avoid needing an initializer. // There is only one instance of this class per process. static RWMutex _lock; #ifdef __APPLE__ static void dyldUnloadHook(const struct mach_header *mh, intptr_t slide); static bool _registeredForDyldUnloads; #endif static entry *_buffer; static entry *_bufferUsed; static entry *_bufferEnd; static entry _initialBuffer[64]; }; template typename DwarfFDECache::entry * DwarfFDECache::_buffer = _initialBuffer; template typename DwarfFDECache::entry * DwarfFDECache::_bufferUsed = _initialBuffer; template typename DwarfFDECache::entry * DwarfFDECache::_bufferEnd = &_initialBuffer[64]; template typename DwarfFDECache::entry DwarfFDECache::_initialBuffer[64]; template RWMutex DwarfFDECache::_lock; #ifdef __APPLE__ template bool DwarfFDECache::_registeredForDyldUnloads = false; #endif template typename DwarfFDECache::pint_t DwarfFDECache::findFDE(pint_t mh, pint_t pc) { pint_t result = 0; _LIBUNWIND_LOG_IF_FALSE(_lock.lock_shared()); for (entry *p = _buffer; p < _bufferUsed; ++p) { if ((mh == p->mh) || (mh == kSearchAll)) { if ((p->ip_start <= pc) && (pc < p->ip_end)) { result = p->fde; break; } } } _LIBUNWIND_LOG_IF_FALSE(_lock.unlock_shared()); return result; } template void DwarfFDECache::add(pint_t mh, pint_t ip_start, pint_t ip_end, pint_t fde, bool isMallocAllowed) { #if !defined(_LIBUNWIND_NO_HEAP) _LIBUNWIND_LOG_IF_FALSE(_lock.lock()); if (_bufferUsed >= _bufferEnd) { if (!isMallocAllowed) { // If malloc is not allowed (e.g., in signal handler), skip caching // rather than risk deadlock. _LIBUNWIND_LOG_IF_FALSE(_lock.unlock()); return; } size_t oldSize = (size_t)(_bufferEnd - _buffer); size_t newSize = oldSize * 4; // Can't use operator new (we are below it). entry *newBuffer = (entry *)malloc(newSize * sizeof(entry)); memcpy(newBuffer, _buffer, oldSize * sizeof(entry)); if (_buffer != _initialBuffer) free(_buffer); _buffer = newBuffer; _bufferUsed = &newBuffer[oldSize]; _bufferEnd = &newBuffer[newSize]; } _bufferUsed->mh = mh; _bufferUsed->ip_start = ip_start; _bufferUsed->ip_end = ip_end; _bufferUsed->fde = fde; ++_bufferUsed; #ifdef __APPLE__ if (!_registeredForDyldUnloads) { _dyld_register_func_for_remove_image(&dyldUnloadHook); _registeredForDyldUnloads = true; } #endif _LIBUNWIND_LOG_IF_FALSE(_lock.unlock()); #endif } template void DwarfFDECache::removeAllIn(pint_t mh) { _LIBUNWIND_LOG_IF_FALSE(_lock.lock()); entry *d = _buffer; for (const entry *s = _buffer; s < _bufferUsed; ++s) { if (s->mh != mh) { if (d != s) *d = *s; ++d; } } _bufferUsed = d; _LIBUNWIND_LOG_IF_FALSE(_lock.unlock()); } #ifdef __APPLE__ template void DwarfFDECache::dyldUnloadHook(const struct mach_header *mh, intptr_t ) { removeAllIn((pint_t) mh); } #endif template void DwarfFDECache::iterateCacheEntries(void (*func)( unw_word_t ip_start, unw_word_t ip_end, unw_word_t fde, unw_word_t mh)) { _LIBUNWIND_LOG_IF_FALSE(_lock.lock()); for (entry *p = _buffer; p < _bufferUsed; ++p) { (*func)(p->ip_start, p->ip_end, p->fde, p->mh); } _LIBUNWIND_LOG_IF_FALSE(_lock.unlock()); } #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) #define arrayoffsetof(type, index, field) \ (sizeof(type) * (index) + offsetof(type, field)) #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) template class UnwindSectionHeader { public: UnwindSectionHeader(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t version() const { return _addressSpace.get32(_addr + offsetof(unwind_info_section_header, version)); } uint32_t commonEncodingsArraySectionOffset() const { return _addressSpace.get32(_addr + offsetof(unwind_info_section_header, commonEncodingsArraySectionOffset)); } uint32_t commonEncodingsArrayCount() const { return _addressSpace.get32(_addr + offsetof(unwind_info_section_header, commonEncodingsArrayCount)); } uint32_t personalityArraySectionOffset() const { return _addressSpace.get32(_addr + offsetof(unwind_info_section_header, personalityArraySectionOffset)); } uint32_t personalityArrayCount() const { return _addressSpace.get32( _addr + offsetof(unwind_info_section_header, personalityArrayCount)); } uint32_t indexSectionOffset() const { return _addressSpace.get32( _addr + offsetof(unwind_info_section_header, indexSectionOffset)); } uint32_t indexCount() const { return _addressSpace.get32( _addr + offsetof(unwind_info_section_header, indexCount)); } private: A &_addressSpace; typename A::pint_t _addr; }; template class UnwindSectionIndexArray { public: UnwindSectionIndexArray(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t functionOffset(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_section_header_index_entry, index, functionOffset)); } uint32_t secondLevelPagesSectionOffset(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_section_header_index_entry, index, secondLevelPagesSectionOffset)); } uint32_t lsdaIndexArraySectionOffset(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_section_header_index_entry, index, lsdaIndexArraySectionOffset)); } private: A &_addressSpace; typename A::pint_t _addr; }; template class UnwindSectionRegularPageHeader { public: UnwindSectionRegularPageHeader(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t kind() const { return _addressSpace.get32( _addr + offsetof(unwind_info_regular_second_level_page_header, kind)); } uint16_t entryPageOffset() const { return _addressSpace.get16( _addr + offsetof(unwind_info_regular_second_level_page_header, entryPageOffset)); } uint16_t entryCount() const { return _addressSpace.get16( _addr + offsetof(unwind_info_regular_second_level_page_header, entryCount)); } private: A &_addressSpace; typename A::pint_t _addr; }; template class UnwindSectionRegularArray { public: UnwindSectionRegularArray(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t functionOffset(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_regular_second_level_entry, index, functionOffset)); } uint32_t encoding(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_regular_second_level_entry, index, encoding)); } private: A &_addressSpace; typename A::pint_t _addr; }; template class UnwindSectionCompressedPageHeader { public: UnwindSectionCompressedPageHeader(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t kind() const { return _addressSpace.get32( _addr + offsetof(unwind_info_compressed_second_level_page_header, kind)); } uint16_t entryPageOffset() const { return _addressSpace.get16( _addr + offsetof(unwind_info_compressed_second_level_page_header, entryPageOffset)); } uint16_t entryCount() const { return _addressSpace.get16( _addr + offsetof(unwind_info_compressed_second_level_page_header, entryCount)); } uint16_t encodingsPageOffset() const { return _addressSpace.get16( _addr + offsetof(unwind_info_compressed_second_level_page_header, encodingsPageOffset)); } uint16_t encodingsCount() const { return _addressSpace.get16( _addr + offsetof(unwind_info_compressed_second_level_page_header, encodingsCount)); } private: A &_addressSpace; typename A::pint_t _addr; }; template class UnwindSectionCompressedArray { public: UnwindSectionCompressedArray(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t functionOffset(uint32_t index) const { return UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET( _addressSpace.get32(_addr + index * sizeof(uint32_t))); } uint16_t encodingIndex(uint32_t index) const { return UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX( _addressSpace.get32(_addr + index * sizeof(uint32_t))); } private: A &_addressSpace; typename A::pint_t _addr; }; template class UnwindSectionLsdaArray { public: UnwindSectionLsdaArray(A &addressSpace, typename A::pint_t addr) : _addressSpace(addressSpace), _addr(addr) {} uint32_t functionOffset(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_section_header_lsda_index_entry, index, functionOffset)); } uint32_t lsdaOffset(uint32_t index) const { return _addressSpace.get32( _addr + arrayoffsetof(unwind_info_section_header_lsda_index_entry, index, lsdaOffset)); } private: A &_addressSpace; typename A::pint_t _addr; }; #endif // defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) class _LIBUNWIND_HIDDEN AbstractUnwindCursor { public: // NOTE: provide a class specific placement deallocation function (S5.3.4 p20) // This avoids an unnecessary dependency to libc++abi. void operator delete(void *, size_t) {} virtual ~AbstractUnwindCursor() {} virtual bool validReg(int) { _LIBUNWIND_ABORT("validReg not implemented"); } virtual unw_word_t getReg(int) { _LIBUNWIND_ABORT("getReg not implemented"); } virtual void setReg(int, unw_word_t) { _LIBUNWIND_ABORT("setReg not implemented"); } virtual bool validFloatReg(int) { _LIBUNWIND_ABORT("validFloatReg not implemented"); } virtual unw_fpreg_t getFloatReg(int) { _LIBUNWIND_ABORT("getFloatReg not implemented"); } virtual void setFloatReg(int, unw_fpreg_t) { _LIBUNWIND_ABORT("setFloatReg not implemented"); } virtual int step(bool = false) { _LIBUNWIND_ABORT("step not implemented"); } virtual void getInfo(unw_proc_info_t *) { _LIBUNWIND_ABORT("getInfo not implemented"); } virtual void jumpto() { _LIBUNWIND_ABORT("jumpto not implemented"); } virtual bool isSignalFrame() { _LIBUNWIND_ABORT("isSignalFrame not implemented"); } virtual bool getFunctionName(char *, size_t, unw_word_t *) { _LIBUNWIND_ABORT("getFunctionName not implemented"); } virtual void setInfoBasedOnIPRegister(bool = false) { _LIBUNWIND_ABORT("setInfoBasedOnIPRegister not implemented"); } virtual const char *getRegisterName(int) { _LIBUNWIND_ABORT("getRegisterName not implemented"); } #ifdef __arm__ virtual void saveVFPAsX() { _LIBUNWIND_ABORT("saveVFPAsX not implemented"); } #endif #ifdef _AIX virtual uintptr_t getDataRelBase() { _LIBUNWIND_ABORT("getDataRelBase not implemented"); } #endif #if defined(_LIBUNWIND_USE_CET) || defined(_LIBUNWIND_USE_GCS) virtual void *get_registers() { _LIBUNWIND_ABORT("get_registers not implemented"); } #endif }; #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) && defined(_WIN32) /// \c UnwindCursor contains all state (including all register values) during /// an unwind. This is normally stack-allocated inside a unw_cursor_t. template class UnwindCursor : public AbstractUnwindCursor { typedef typename A::pint_t pint_t; public: UnwindCursor(unw_context_t *context, A &as); UnwindCursor(CONTEXT *context, A &as); UnwindCursor(A &as, void *threadArg); virtual ~UnwindCursor() {} virtual bool validReg(int); virtual unw_word_t getReg(int); virtual void setReg(int, unw_word_t); virtual bool validFloatReg(int); virtual unw_fpreg_t getFloatReg(int); virtual void setFloatReg(int, unw_fpreg_t); virtual int step(bool = false); virtual void getInfo(unw_proc_info_t *); virtual void jumpto(); virtual bool isSignalFrame(); virtual bool getFunctionName(char *buf, size_t len, unw_word_t *off); virtual void setInfoBasedOnIPRegister(bool isReturnAddress = false); virtual const char *getRegisterName(int num); #ifdef __arm__ virtual void saveVFPAsX(); #endif DISPATCHER_CONTEXT *getDispatcherContext() { return &_dispContext; } void setDispatcherContext(DISPATCHER_CONTEXT *disp) { _dispContext = *disp; _info.lsda = reinterpret_cast(_dispContext.HandlerData); if (_dispContext.LanguageHandler) { _info.handler = reinterpret_cast(__libunwind_seh_personality); } else _info.handler = 0; } // libunwind does not and should not depend on C++ library which means that we // need our own definition of inline placement new. static void *operator new(size_t, UnwindCursor *p) { return p; } private: pint_t getLastPC() const { return _dispContext.ControlPc; } void setLastPC(pint_t pc) { _dispContext.ControlPc = pc; } RUNTIME_FUNCTION *lookUpSEHUnwindInfo(pint_t pc, pint_t *base) { #ifdef __arm__ // Remove the thumb bit; FunctionEntry ranges don't include the thumb bit. pc &= ~1U; #endif // If pc points exactly at the end of the range, we might resolve the // next function instead. Decrement pc by 1 to fit inside the current // function. pc -= 1; _dispContext.FunctionEntry = RtlLookupFunctionEntry(pc, &_dispContext.ImageBase, _dispContext.HistoryTable); *base = _dispContext.ImageBase; return _dispContext.FunctionEntry; } bool getInfoFromSEH(pint_t pc); int stepWithSEHData() { _dispContext.LanguageHandler = RtlVirtualUnwind(UNW_FLAG_UHANDLER, _dispContext.ImageBase, _dispContext.ControlPc, _dispContext.FunctionEntry, _dispContext.ContextRecord, &_dispContext.HandlerData, &_dispContext.EstablisherFrame, NULL); // Update some fields of the unwind info now, since we have them. _info.lsda = reinterpret_cast(_dispContext.HandlerData); if (_dispContext.LanguageHandler) { _info.handler = reinterpret_cast(__libunwind_seh_personality); } else _info.handler = 0; return UNW_STEP_SUCCESS; } A &_addressSpace; unw_proc_info_t _info; DISPATCHER_CONTEXT _dispContext; CONTEXT _msContext; UNWIND_HISTORY_TABLE _histTable; bool _unwindInfoMissing; }; template UnwindCursor::UnwindCursor(unw_context_t *context, A &as) : _addressSpace(as), _unwindInfoMissing(false) { static_assert((check_fit, unw_cursor_t>::does_fit), "UnwindCursor<> does not fit in unw_cursor_t"); static_assert((alignof(UnwindCursor) <= alignof(unw_cursor_t)), "UnwindCursor<> requires more alignment than unw_cursor_t"); memset(&_info, 0, sizeof(_info)); memset(&_histTable, 0, sizeof(_histTable)); memset(&_dispContext, 0, sizeof(_dispContext)); _dispContext.ContextRecord = &_msContext; _dispContext.HistoryTable = &_histTable; // Initialize MS context from ours. R r(context); RtlCaptureContext(&_msContext); _msContext.ContextFlags = CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_FLOATING_POINT; #if defined(_LIBUNWIND_TARGET_X86_64) _msContext.Rax = r.getRegister(UNW_X86_64_RAX); _msContext.Rcx = r.getRegister(UNW_X86_64_RCX); _msContext.Rdx = r.getRegister(UNW_X86_64_RDX); _msContext.Rbx = r.getRegister(UNW_X86_64_RBX); _msContext.Rsp = r.getRegister(UNW_X86_64_RSP); _msContext.Rbp = r.getRegister(UNW_X86_64_RBP); _msContext.Rsi = r.getRegister(UNW_X86_64_RSI); _msContext.Rdi = r.getRegister(UNW_X86_64_RDI); _msContext.R8 = r.getRegister(UNW_X86_64_R8); _msContext.R9 = r.getRegister(UNW_X86_64_R9); _msContext.R10 = r.getRegister(UNW_X86_64_R10); _msContext.R11 = r.getRegister(UNW_X86_64_R11); _msContext.R12 = r.getRegister(UNW_X86_64_R12); _msContext.R13 = r.getRegister(UNW_X86_64_R13); _msContext.R14 = r.getRegister(UNW_X86_64_R14); _msContext.R15 = r.getRegister(UNW_X86_64_R15); _msContext.Rip = r.getRegister(UNW_REG_IP); union { v128 v; M128A m; } t; t.v = r.getVectorRegister(UNW_X86_64_XMM0); _msContext.Xmm0 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM1); _msContext.Xmm1 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM2); _msContext.Xmm2 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM3); _msContext.Xmm3 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM4); _msContext.Xmm4 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM5); _msContext.Xmm5 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM6); _msContext.Xmm6 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM7); _msContext.Xmm7 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM8); _msContext.Xmm8 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM9); _msContext.Xmm9 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM10); _msContext.Xmm10 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM11); _msContext.Xmm11 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM12); _msContext.Xmm12 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM13); _msContext.Xmm13 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM14); _msContext.Xmm14 = t.m; t.v = r.getVectorRegister(UNW_X86_64_XMM15); _msContext.Xmm15 = t.m; #elif defined(_LIBUNWIND_TARGET_ARM) _msContext.R0 = r.getRegister(UNW_ARM_R0); _msContext.R1 = r.getRegister(UNW_ARM_R1); _msContext.R2 = r.getRegister(UNW_ARM_R2); _msContext.R3 = r.getRegister(UNW_ARM_R3); _msContext.R4 = r.getRegister(UNW_ARM_R4); _msContext.R5 = r.getRegister(UNW_ARM_R5); _msContext.R6 = r.getRegister(UNW_ARM_R6); _msContext.R7 = r.getRegister(UNW_ARM_R7); _msContext.R8 = r.getRegister(UNW_ARM_R8); _msContext.R9 = r.getRegister(UNW_ARM_R9); _msContext.R10 = r.getRegister(UNW_ARM_R10); _msContext.R11 = r.getRegister(UNW_ARM_R11); _msContext.R12 = r.getRegister(UNW_ARM_R12); _msContext.Sp = r.getRegister(UNW_ARM_SP); _msContext.Lr = r.getRegister(UNW_ARM_LR); _msContext.Pc = r.getRegister(UNW_ARM_IP); for (int i = UNW_ARM_D0; i <= UNW_ARM_D31; ++i) { union { uint64_t w; double d; } d; d.d = r.getFloatRegister(i); _msContext.D[i - UNW_ARM_D0] = d.w; } #elif defined(_LIBUNWIND_TARGET_AARCH64) for (int i = UNW_AARCH64_X0; i <= UNW_ARM64_X30; ++i) _msContext.X[i - UNW_AARCH64_X0] = r.getRegister(i); _msContext.Sp = r.getRegister(UNW_REG_SP); _msContext.Pc = r.getRegister(UNW_REG_IP); for (int i = UNW_AARCH64_V0; i <= UNW_ARM64_D31; ++i) _msContext.V[i - UNW_AARCH64_V0].D[0] = r.getFloatRegister(i); #endif } template UnwindCursor::UnwindCursor(CONTEXT *context, A &as) : _addressSpace(as), _unwindInfoMissing(false) { static_assert((check_fit, unw_cursor_t>::does_fit), "UnwindCursor<> does not fit in unw_cursor_t"); memset(&_info, 0, sizeof(_info)); memset(&_histTable, 0, sizeof(_histTable)); memset(&_dispContext, 0, sizeof(_dispContext)); _dispContext.ContextRecord = &_msContext; _dispContext.HistoryTable = &_histTable; _msContext = *context; } template bool UnwindCursor::validReg(int regNum) { if (regNum == UNW_REG_IP || regNum == UNW_REG_SP) return true; #if defined(_LIBUNWIND_TARGET_X86_64) if (regNum >= UNW_X86_64_RAX && regNum <= UNW_X86_64_RIP) return true; #elif defined(_LIBUNWIND_TARGET_ARM) if ((regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R15) || regNum == UNW_ARM_RA_AUTH_CODE) return true; #elif defined(_LIBUNWIND_TARGET_AARCH64) if (regNum >= UNW_AARCH64_X0 && regNum <= UNW_ARM64_X30) return true; #endif return false; } template unw_word_t UnwindCursor::getReg(int regNum) { switch (regNum) { #if defined(_LIBUNWIND_TARGET_X86_64) case UNW_X86_64_RIP: case UNW_REG_IP: return _msContext.Rip; case UNW_X86_64_RAX: return _msContext.Rax; case UNW_X86_64_RDX: return _msContext.Rdx; case UNW_X86_64_RCX: return _msContext.Rcx; case UNW_X86_64_RBX: return _msContext.Rbx; case UNW_REG_SP: case UNW_X86_64_RSP: return _msContext.Rsp; case UNW_X86_64_RBP: return _msContext.Rbp; case UNW_X86_64_RSI: return _msContext.Rsi; case UNW_X86_64_RDI: return _msContext.Rdi; case UNW_X86_64_R8: return _msContext.R8; case UNW_X86_64_R9: return _msContext.R9; case UNW_X86_64_R10: return _msContext.R10; case UNW_X86_64_R11: return _msContext.R11; case UNW_X86_64_R12: return _msContext.R12; case UNW_X86_64_R13: return _msContext.R13; case UNW_X86_64_R14: return _msContext.R14; case UNW_X86_64_R15: return _msContext.R15; #elif defined(_LIBUNWIND_TARGET_ARM) case UNW_ARM_R0: return _msContext.R0; case UNW_ARM_R1: return _msContext.R1; case UNW_ARM_R2: return _msContext.R2; case UNW_ARM_R3: return _msContext.R3; case UNW_ARM_R4: return _msContext.R4; case UNW_ARM_R5: return _msContext.R5; case UNW_ARM_R6: return _msContext.R6; case UNW_ARM_R7: return _msContext.R7; case UNW_ARM_R8: return _msContext.R8; case UNW_ARM_R9: return _msContext.R9; case UNW_ARM_R10: return _msContext.R10; case UNW_ARM_R11: return _msContext.R11; case UNW_ARM_R12: return _msContext.R12; case UNW_REG_SP: case UNW_ARM_SP: return _msContext.Sp; case UNW_ARM_LR: return _msContext.Lr; case UNW_REG_IP: case UNW_ARM_IP: return _msContext.Pc; #elif defined(_LIBUNWIND_TARGET_AARCH64) case UNW_REG_SP: return _msContext.Sp; case UNW_REG_IP: return _msContext.Pc; default: return _msContext.X[regNum - UNW_AARCH64_X0]; #endif } _LIBUNWIND_ABORT("unsupported register"); } template void UnwindCursor::setReg(int regNum, unw_word_t value) { switch (regNum) { #if defined(_LIBUNWIND_TARGET_X86_64) case UNW_X86_64_RIP: case UNW_REG_IP: _msContext.Rip = value; break; case UNW_X86_64_RAX: _msContext.Rax = value; break; case UNW_X86_64_RDX: _msContext.Rdx = value; break; case UNW_X86_64_RCX: _msContext.Rcx = value; break; case UNW_X86_64_RBX: _msContext.Rbx = value; break; case UNW_REG_SP: case UNW_X86_64_RSP: _msContext.Rsp = value; break; case UNW_X86_64_RBP: _msContext.Rbp = value; break; case UNW_X86_64_RSI: _msContext.Rsi = value; break; case UNW_X86_64_RDI: _msContext.Rdi = value; break; case UNW_X86_64_R8: _msContext.R8 = value; break; case UNW_X86_64_R9: _msContext.R9 = value; break; case UNW_X86_64_R10: _msContext.R10 = value; break; case UNW_X86_64_R11: _msContext.R11 = value; break; case UNW_X86_64_R12: _msContext.R12 = value; break; case UNW_X86_64_R13: _msContext.R13 = value; break; case UNW_X86_64_R14: _msContext.R14 = value; break; case UNW_X86_64_R15: _msContext.R15 = value; break; #elif defined(_LIBUNWIND_TARGET_ARM) case UNW_ARM_R0: _msContext.R0 = value; break; case UNW_ARM_R1: _msContext.R1 = value; break; case UNW_ARM_R2: _msContext.R2 = value; break; case UNW_ARM_R3: _msContext.R3 = value; break; case UNW_ARM_R4: _msContext.R4 = value; break; case UNW_ARM_R5: _msContext.R5 = value; break; case UNW_ARM_R6: _msContext.R6 = value; break; case UNW_ARM_R7: _msContext.R7 = value; break; case UNW_ARM_R8: _msContext.R8 = value; break; case UNW_ARM_R9: _msContext.R9 = value; break; case UNW_ARM_R10: _msContext.R10 = value; break; case UNW_ARM_R11: _msContext.R11 = value; break; case UNW_ARM_R12: _msContext.R12 = value; break; case UNW_REG_SP: case UNW_ARM_SP: _msContext.Sp = value; break; case UNW_ARM_LR: _msContext.Lr = value; break; case UNW_REG_IP: case UNW_ARM_IP: _msContext.Pc = value; break; #elif defined(_LIBUNWIND_TARGET_AARCH64) case UNW_REG_SP: _msContext.Sp = value; break; case UNW_REG_IP: _msContext.Pc = value; break; case UNW_AARCH64_X0: case UNW_AARCH64_X1: case UNW_AARCH64_X2: case UNW_AARCH64_X3: case UNW_AARCH64_X4: case UNW_AARCH64_X5: case UNW_AARCH64_X6: case UNW_AARCH64_X7: case UNW_AARCH64_X8: case UNW_AARCH64_X9: case UNW_AARCH64_X10: case UNW_AARCH64_X11: case UNW_AARCH64_X12: case UNW_AARCH64_X13: case UNW_AARCH64_X14: case UNW_AARCH64_X15: case UNW_AARCH64_X16: case UNW_AARCH64_X17: case UNW_AARCH64_X18: case UNW_AARCH64_X19: case UNW_AARCH64_X20: case UNW_AARCH64_X21: case UNW_AARCH64_X22: case UNW_AARCH64_X23: case UNW_AARCH64_X24: case UNW_AARCH64_X25: case UNW_AARCH64_X26: case UNW_AARCH64_X27: case UNW_AARCH64_X28: case UNW_AARCH64_FP: case UNW_AARCH64_LR: _msContext.X[regNum - UNW_ARM64_X0] = value; break; #endif default: _LIBUNWIND_ABORT("unsupported register"); } } template bool UnwindCursor::validFloatReg(int regNum) { #if defined(_LIBUNWIND_TARGET_ARM) if (regNum >= UNW_ARM_S0 && regNum <= UNW_ARM_S31) return true; if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D31) return true; #elif defined(_LIBUNWIND_TARGET_AARCH64) if (regNum >= UNW_AARCH64_V0 && regNum <= UNW_ARM64_D31) return true; #else (void)regNum; #endif return false; } template unw_fpreg_t UnwindCursor::getFloatReg(int regNum) { #if defined(_LIBUNWIND_TARGET_ARM) if (regNum >= UNW_ARM_S0 && regNum <= UNW_ARM_S31) { union { uint32_t w; float f; } d; d.w = _msContext.S[regNum - UNW_ARM_S0]; return d.f; } if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D31) { union { uint64_t w; double d; } d; d.w = _msContext.D[regNum - UNW_ARM_D0]; return d.d; } _LIBUNWIND_ABORT("unsupported float register"); #elif defined(_LIBUNWIND_TARGET_AARCH64) return _msContext.V[regNum - UNW_AARCH64_V0].D[0]; #else (void)regNum; _LIBUNWIND_ABORT("float registers unimplemented"); #endif } template void UnwindCursor::setFloatReg(int regNum, unw_fpreg_t value) { #if defined(_LIBUNWIND_TARGET_ARM) if (regNum >= UNW_ARM_S0 && regNum <= UNW_ARM_S31) { union { uint32_t w; float f; } d; d.f = (float)value; _msContext.S[regNum - UNW_ARM_S0] = d.w; } if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D31) { union { uint64_t w; double d; } d; d.d = value; _msContext.D[regNum - UNW_ARM_D0] = d.w; } _LIBUNWIND_ABORT("unsupported float register"); #elif defined(_LIBUNWIND_TARGET_AARCH64) _msContext.V[regNum - UNW_AARCH64_V0].D[0] = value; #else (void)regNum; (void)value; _LIBUNWIND_ABORT("float registers unimplemented"); #endif } template void UnwindCursor::jumpto() { RtlRestoreContext(&_msContext, nullptr); } #ifdef __arm__ template void UnwindCursor::saveVFPAsX() {} #endif template const char *UnwindCursor::getRegisterName(int regNum) { return R::getRegisterName(regNum); } template bool UnwindCursor::isSignalFrame() { return false; } #else // !defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) || !defined(_WIN32) /// UnwindCursor contains all state (including all register values) during /// an unwind. This is normally stack allocated inside a unw_cursor_t. template class UnwindCursor : public AbstractUnwindCursor{ typedef typename A::pint_t pint_t; public: UnwindCursor(unw_context_t *context, A &as); UnwindCursor(A &as, void *threadArg); virtual ~UnwindCursor() {} virtual bool validReg(int); virtual unw_word_t getReg(int); virtual void setReg(int, unw_word_t); virtual bool validFloatReg(int); virtual unw_fpreg_t getFloatReg(int); virtual void setFloatReg(int, unw_fpreg_t); virtual int step(bool stage2 = false); virtual void getInfo(unw_proc_info_t *); virtual void jumpto(); virtual bool isSignalFrame(); virtual bool getFunctionName(char *buf, size_t len, unw_word_t *off); virtual void setInfoBasedOnIPRegister(bool isReturnAddress = false); virtual const char *getRegisterName(int num); #ifdef __arm__ virtual void saveVFPAsX(); #endif #ifdef _AIX virtual uintptr_t getDataRelBase(); #endif #if defined(_LIBUNWIND_USE_CET) || defined(_LIBUNWIND_USE_GCS) virtual void *get_registers() { return &_registers; } #endif // libunwind does not and should not depend on C++ library which means that we // need our own definition of inline placement new. static void *operator new(size_t, UnwindCursor *p) { return p; } private: #if defined(_LIBUNWIND_ARM_EHABI) bool getInfoFromEHABISection(pint_t pc, const UnwindInfoSections §s); int stepWithEHABI() { size_t len = 0; size_t off = 0; // FIXME: Calling decode_eht_entry() here is violating the libunwind // abstraction layer. const uint32_t *ehtp = decode_eht_entry(reinterpret_cast(_info.unwind_info), &off, &len); if (_Unwind_VRS_Interpret((_Unwind_Context *)this, ehtp, off, len) != _URC_CONTINUE_UNWIND) return UNW_STEP_END; return UNW_STEP_SUCCESS; } #endif #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) bool setInfoForSigReturn() { R dummy; return setInfoForSigReturn(dummy); } int stepThroughSigReturn() { R dummy; return stepThroughSigReturn(dummy); } bool isReadableAddr(const pint_t addr) const; #if defined(_LIBUNWIND_TARGET_AARCH64) bool setInfoForSigReturn(Registers_arm64 &); int stepThroughSigReturn(Registers_arm64 &); #endif #if defined(_LIBUNWIND_TARGET_LOONGARCH) bool setInfoForSigReturn(Registers_loongarch &); int stepThroughSigReturn(Registers_loongarch &); #endif #if defined(_LIBUNWIND_TARGET_RISCV) bool setInfoForSigReturn(Registers_riscv &); int stepThroughSigReturn(Registers_riscv &); #endif #if defined(_LIBUNWIND_TARGET_S390X) bool setInfoForSigReturn(Registers_s390x &); int stepThroughSigReturn(Registers_s390x &); #endif template bool setInfoForSigReturn(Registers &) { return false; } template int stepThroughSigReturn(Registers &) { return UNW_STEP_END; } #elif defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN) bool setInfoForSigReturn(); int stepThroughSigReturn(); #endif #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) bool getInfoFromFdeCie(const typename CFI_Parser::FDE_Info &fdeInfo, const typename CFI_Parser::CIE_Info &cieInfo, pint_t pc, uintptr_t dso_base); bool getInfoFromDwarfSection(pint_t pc, const UnwindInfoSections §s, uint32_t fdeSectionOffsetHint=0); int stepWithDwarfFDE(bool stage2) { return DwarfInstructions::stepWithDwarf( _addressSpace, (pint_t)this->getReg(UNW_REG_IP), (pint_t)_info.unwind_info, _registers, _isSignalFrame, stage2); } #endif #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) bool getInfoFromCompactEncodingSection(pint_t pc, const UnwindInfoSections §s); int stepWithCompactEncoding(bool stage2 = false) { #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) if ( compactSaysUseDwarf() ) return stepWithDwarfFDE(stage2); #endif R dummy; return stepWithCompactEncoding(dummy); } #if defined(_LIBUNWIND_TARGET_X86_64) int stepWithCompactEncoding(Registers_x86_64 &) { return CompactUnwinder_x86_64::stepWithCompactEncoding( _info.format, _info.start_ip, _addressSpace, _registers); } #endif #if defined(_LIBUNWIND_TARGET_I386) int stepWithCompactEncoding(Registers_x86 &) { return CompactUnwinder_x86::stepWithCompactEncoding( _info.format, (uint32_t)_info.start_ip, _addressSpace, _registers); } #endif #if defined(_LIBUNWIND_TARGET_PPC) int stepWithCompactEncoding(Registers_ppc &) { return UNW_EINVAL; } #endif #if defined(_LIBUNWIND_TARGET_PPC64) int stepWithCompactEncoding(Registers_ppc64 &) { return UNW_EINVAL; } #endif #if defined(_LIBUNWIND_TARGET_AARCH64) int stepWithCompactEncoding(Registers_arm64 &) { return CompactUnwinder_arm64::stepWithCompactEncoding( _info.format, _info.start_ip, _addressSpace, _registers); } #endif #if defined(_LIBUNWIND_TARGET_MIPS_O32) int stepWithCompactEncoding(Registers_mips_o32 &) { return UNW_EINVAL; } #endif #if defined(_LIBUNWIND_TARGET_MIPS_NEWABI) int stepWithCompactEncoding(Registers_mips_newabi &) { return UNW_EINVAL; } #endif #if defined(_LIBUNWIND_TARGET_LOONGARCH) int stepWithCompactEncoding(Registers_loongarch &) { return UNW_EINVAL; } #endif #if defined(_LIBUNWIND_TARGET_SPARC) int stepWithCompactEncoding(Registers_sparc &) { return UNW_EINVAL; } #endif #if defined(_LIBUNWIND_TARGET_SPARC64) int stepWithCompactEncoding(Registers_sparc64 &) { return UNW_EINVAL; } #endif #if defined (_LIBUNWIND_TARGET_RISCV) int stepWithCompactEncoding(Registers_riscv &) { return UNW_EINVAL; } #endif bool compactSaysUseDwarf(uint32_t *offset=NULL) const { R dummy; return compactSaysUseDwarf(dummy, offset); } #if defined(_LIBUNWIND_TARGET_X86_64) bool compactSaysUseDwarf(Registers_x86_64 &, uint32_t *offset) const { if ((_info.format & UNWIND_X86_64_MODE_MASK) == UNWIND_X86_64_MODE_DWARF) { if (offset) *offset = (_info.format & UNWIND_X86_64_DWARF_SECTION_OFFSET); return true; } return false; } #endif #if defined(_LIBUNWIND_TARGET_I386) bool compactSaysUseDwarf(Registers_x86 &, uint32_t *offset) const { if ((_info.format & UNWIND_X86_MODE_MASK) == UNWIND_X86_MODE_DWARF) { if (offset) *offset = (_info.format & UNWIND_X86_DWARF_SECTION_OFFSET); return true; } return false; } #endif #if defined(_LIBUNWIND_TARGET_PPC) bool compactSaysUseDwarf(Registers_ppc &, uint32_t *) const { return true; } #endif #if defined(_LIBUNWIND_TARGET_PPC64) bool compactSaysUseDwarf(Registers_ppc64 &, uint32_t *) const { return true; } #endif #if defined(_LIBUNWIND_TARGET_AARCH64) bool compactSaysUseDwarf(Registers_arm64 &, uint32_t *offset) const { if ((_info.format & UNWIND_ARM64_MODE_MASK) == UNWIND_ARM64_MODE_DWARF) { if (offset) *offset = (_info.format & UNWIND_ARM64_DWARF_SECTION_OFFSET); return true; } return false; } #endif #if defined(_LIBUNWIND_TARGET_MIPS_O32) bool compactSaysUseDwarf(Registers_mips_o32 &, uint32_t *) const { return true; } #endif #if defined(_LIBUNWIND_TARGET_MIPS_NEWABI) bool compactSaysUseDwarf(Registers_mips_newabi &, uint32_t *) const { return true; } #endif #if defined(_LIBUNWIND_TARGET_LOONGARCH) bool compactSaysUseDwarf(Registers_loongarch &, uint32_t *) const { return true; } #endif #if defined(_LIBUNWIND_TARGET_SPARC) bool compactSaysUseDwarf(Registers_sparc &, uint32_t *) const { return true; } #endif #if defined(_LIBUNWIND_TARGET_SPARC64) bool compactSaysUseDwarf(Registers_sparc64 &, uint32_t *) const { return true; } #endif #if defined (_LIBUNWIND_TARGET_RISCV) bool compactSaysUseDwarf(Registers_riscv &, uint32_t *) const { return true; } #endif #endif // defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) compact_unwind_encoding_t dwarfEncoding() const { R dummy; return dwarfEncoding(dummy); } #if defined(_LIBUNWIND_TARGET_X86_64) compact_unwind_encoding_t dwarfEncoding(Registers_x86_64 &) const { return UNWIND_X86_64_MODE_DWARF; } #endif #if defined(_LIBUNWIND_TARGET_I386) compact_unwind_encoding_t dwarfEncoding(Registers_x86 &) const { return UNWIND_X86_MODE_DWARF; } #endif #if defined(_LIBUNWIND_TARGET_PPC) compact_unwind_encoding_t dwarfEncoding(Registers_ppc &) const { return 0; } #endif #if defined(_LIBUNWIND_TARGET_PPC64) compact_unwind_encoding_t dwarfEncoding(Registers_ppc64 &) const { return 0; } #endif #if defined(_LIBUNWIND_TARGET_AARCH64) compact_unwind_encoding_t dwarfEncoding(Registers_arm64 &) const { return UNWIND_ARM64_MODE_DWARF; } #endif #if defined(_LIBUNWIND_TARGET_ARM) compact_unwind_encoding_t dwarfEncoding(Registers_arm &) const { return 0; } #endif #if defined (_LIBUNWIND_TARGET_OR1K) compact_unwind_encoding_t dwarfEncoding(Registers_or1k &) const { return 0; } #endif #if defined (_LIBUNWIND_TARGET_HEXAGON) compact_unwind_encoding_t dwarfEncoding(Registers_hexagon &) const { return 0; } #endif #if defined (_LIBUNWIND_TARGET_MIPS_O32) compact_unwind_encoding_t dwarfEncoding(Registers_mips_o32 &) const { return 0; } #endif #if defined (_LIBUNWIND_TARGET_MIPS_NEWABI) compact_unwind_encoding_t dwarfEncoding(Registers_mips_newabi &) const { return 0; } #endif #if defined(_LIBUNWIND_TARGET_LOONGARCH) compact_unwind_encoding_t dwarfEncoding(Registers_loongarch &) const { return 0; } #endif #if defined(_LIBUNWIND_TARGET_SPARC) compact_unwind_encoding_t dwarfEncoding(Registers_sparc &) const { return 0; } #endif #if defined(_LIBUNWIND_TARGET_SPARC64) compact_unwind_encoding_t dwarfEncoding(Registers_sparc64 &) const { return 0; } #endif #if defined (_LIBUNWIND_TARGET_RISCV) compact_unwind_encoding_t dwarfEncoding(Registers_riscv &) const { return 0; } #endif #if defined (_LIBUNWIND_TARGET_S390X) compact_unwind_encoding_t dwarfEncoding(Registers_s390x &) const { return 0; } #endif #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) // For runtime environments using SEH unwind data without Windows runtime // support. pint_t getLastPC() const { /* FIXME: Implement */ return 0; } void setLastPC(pint_t pc) { /* FIXME: Implement */ } RUNTIME_FUNCTION *lookUpSEHUnwindInfo(pint_t pc, pint_t *base) { /* FIXME: Implement */ *base = 0; return nullptr; } bool getInfoFromSEH(pint_t pc); int stepWithSEHData() { /* FIXME: Implement */ return 0; } #endif // defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) #if defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) bool getInfoFromTBTable(pint_t pc, R ®isters); int stepWithTBTable(pint_t pc, tbtable *TBTable, R ®isters, bool &isSignalFrame); int stepWithTBTableData() { return stepWithTBTable(reinterpret_cast(this->getReg(UNW_REG_IP)), reinterpret_cast(_info.unwind_info), _registers, _isSignalFrame); } #endif // defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) A &_addressSpace; R _registers; unw_proc_info_t _info; bool _unwindInfoMissing; bool _isSignalFrame; #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) || \ defined(_LIBUNWIND_TARGET_HAIKU) bool _isSigReturn = false; #endif }; template UnwindCursor::UnwindCursor(unw_context_t *context, A &as) : _addressSpace(as), _registers(context), _unwindInfoMissing(false), _isSignalFrame(false) { static_assert((check_fit, unw_cursor_t>::does_fit), "UnwindCursor<> does not fit in unw_cursor_t"); static_assert((alignof(UnwindCursor) <= alignof(unw_cursor_t)), "UnwindCursor<> requires more alignment than unw_cursor_t"); memset(&_info, 0, sizeof(_info)); } template UnwindCursor::UnwindCursor(A &as, void *) : _addressSpace(as), _unwindInfoMissing(false), _isSignalFrame(false) { memset(&_info, 0, sizeof(_info)); // FIXME // fill in _registers from thread arg } template bool UnwindCursor::validReg(int regNum) { return _registers.validRegister(regNum); } template unw_word_t UnwindCursor::getReg(int regNum) { return _registers.getRegister(regNum); } template void UnwindCursor::setReg(int regNum, unw_word_t value) { _registers.setRegister(regNum, (typename A::pint_t)value); } template bool UnwindCursor::validFloatReg(int regNum) { return _registers.validFloatRegister(regNum); } template unw_fpreg_t UnwindCursor::getFloatReg(int regNum) { return _registers.getFloatRegister(regNum); } template void UnwindCursor::setFloatReg(int regNum, unw_fpreg_t value) { _registers.setFloatRegister(regNum, value); } template void UnwindCursor::jumpto() { _registers.jumpto(); } #ifdef __arm__ template void UnwindCursor::saveVFPAsX() { _registers.saveVFPAsX(); } #endif #ifdef _AIX template uintptr_t UnwindCursor::getDataRelBase() { return reinterpret_cast(_info.extra); } #endif template const char *UnwindCursor::getRegisterName(int regNum) { return _registers.getRegisterName(regNum); } template bool UnwindCursor::isSignalFrame() { return _isSignalFrame; } #endif // defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) #if defined(_LIBUNWIND_ARM_EHABI) template struct EHABISectionIterator { typedef EHABISectionIterator _Self; typedef typename A::pint_t value_type; typedef typename A::pint_t* pointer; typedef typename A::pint_t& reference; typedef size_t size_type; typedef size_t difference_type; static _Self begin(A& addressSpace, const UnwindInfoSections& sects) { return _Self(addressSpace, sects, 0); } static _Self end(A& addressSpace, const UnwindInfoSections& sects) { return _Self(addressSpace, sects, sects.arm_section_length / sizeof(EHABIIndexEntry)); } EHABISectionIterator(A& addressSpace, const UnwindInfoSections& sects, size_t i) : _i(i), _addressSpace(&addressSpace), _sects(§s) {} _Self& operator++() { ++_i; return *this; } _Self& operator+=(size_t a) { _i += a; return *this; } _Self& operator--() { assert(_i > 0); --_i; return *this; } _Self& operator-=(size_t a) { assert(_i >= a); _i -= a; return *this; } _Self operator+(size_t a) { _Self out = *this; out._i += a; return out; } _Self operator-(size_t a) { assert(_i >= a); _Self out = *this; out._i -= a; return out; } size_t operator-(const _Self& other) const { return _i - other._i; } bool operator==(const _Self& other) const { assert(_addressSpace == other._addressSpace); assert(_sects == other._sects); return _i == other._i; } bool operator!=(const _Self& other) const { assert(_addressSpace == other._addressSpace); assert(_sects == other._sects); return _i != other._i; } typename A::pint_t operator*() const { return functionAddress(); } typename A::pint_t functionAddress() const { typename A::pint_t indexAddr = _sects->arm_section + arrayoffsetof( EHABIIndexEntry, _i, functionOffset); return indexAddr + signExtendPrel31(_addressSpace->get32(indexAddr)); } typename A::pint_t dataAddress() { typename A::pint_t indexAddr = _sects->arm_section + arrayoffsetof( EHABIIndexEntry, _i, data); return indexAddr; } private: size_t _i; A* _addressSpace; const UnwindInfoSections* _sects; }; namespace { template EHABISectionIterator EHABISectionUpperBound( EHABISectionIterator first, EHABISectionIterator last, typename A::pint_t value) { size_t len = last - first; while (len > 0) { size_t l2 = len / 2; EHABISectionIterator m = first + l2; if (value < *m) { len = l2; } else { first = ++m; len -= l2 + 1; } } return first; } } template bool UnwindCursor::getInfoFromEHABISection( pint_t pc, const UnwindInfoSections §s) { EHABISectionIterator begin = EHABISectionIterator::begin(_addressSpace, sects); EHABISectionIterator end = EHABISectionIterator::end(_addressSpace, sects); if (begin == end) return false; EHABISectionIterator itNextPC = EHABISectionUpperBound(begin, end, pc); if (itNextPC == begin) return false; EHABISectionIterator itThisPC = itNextPC - 1; pint_t thisPC = itThisPC.functionAddress(); // If an exception is thrown from a function, corresponding to the last entry // in the table, we don't really know the function extent and have to choose a // value for nextPC. Choosing max() will allow the range check during trace to // succeed. pint_t nextPC = (itNextPC == end) ? UINTPTR_MAX : itNextPC.functionAddress(); pint_t indexDataAddr = itThisPC.dataAddress(); if (indexDataAddr == 0) return false; uint32_t indexData = _addressSpace.get32(indexDataAddr); if (indexData == UNW_EXIDX_CANTUNWIND) return false; // If the high bit is set, the exception handling table entry is inline inside // the index table entry on the second word (aka |indexDataAddr|). Otherwise, // the table points at an offset in the exception handling table (section 5 // EHABI). pint_t exceptionTableAddr; uint32_t exceptionTableData; bool isSingleWordEHT; if (indexData & 0x80000000) { exceptionTableAddr = indexDataAddr; // TODO(ajwong): Should this data be 0? exceptionTableData = indexData; isSingleWordEHT = true; } else { exceptionTableAddr = indexDataAddr + signExtendPrel31(indexData); exceptionTableData = _addressSpace.get32(exceptionTableAddr); isSingleWordEHT = false; } // Now we know the 3 things: // exceptionTableAddr -- exception handler table entry. // exceptionTableData -- the data inside the first word of the eht entry. // isSingleWordEHT -- whether the entry is in the index. unw_word_t personalityRoutine = 0xbadf00d; bool scope32 = false; uintptr_t lsda; // If the high bit in the exception handling table entry is set, the entry is // in compact form (section 6.3 EHABI). if (exceptionTableData & 0x80000000) { // Grab the index of the personality routine from the compact form. uint32_t choice = (exceptionTableData & 0x0f000000) >> 24; uint32_t extraWords = 0; switch (choice) { case 0: personalityRoutine = (unw_word_t) &__aeabi_unwind_cpp_pr0; extraWords = 0; scope32 = false; lsda = isSingleWordEHT ? 0 : (exceptionTableAddr + 4); break; case 1: personalityRoutine = (unw_word_t) &__aeabi_unwind_cpp_pr1; extraWords = (exceptionTableData & 0x00ff0000) >> 16; scope32 = false; lsda = exceptionTableAddr + (extraWords + 1) * 4; break; case 2: personalityRoutine = (unw_word_t) &__aeabi_unwind_cpp_pr2; extraWords = (exceptionTableData & 0x00ff0000) >> 16; scope32 = true; lsda = exceptionTableAddr + (extraWords + 1) * 4; break; default: _LIBUNWIND_ABORT("unknown personality routine"); return false; } if (isSingleWordEHT) { if (extraWords != 0) { _LIBUNWIND_ABORT("index inlined table detected but pr function " "requires extra words"); return false; } } } else { pint_t personalityAddr = exceptionTableAddr + signExtendPrel31(exceptionTableData); personalityRoutine = personalityAddr; // ARM EHABI # 6.2, # 9.2 // // +---- ehtp // v // +--------------------------------------+ // | +--------+--------+--------+-------+ | // | |0| prel31 to personalityRoutine | | // | +--------+--------+--------+-------+ | // | | N | unwind opcodes | | <-- UnwindData // | +--------+--------+--------+-------+ | // | | Word 2 unwind opcodes | | // | +--------+--------+--------+-------+ | // | ... | // | +--------+--------+--------+-------+ | // | | Word N unwind opcodes | | // | +--------+--------+--------+-------+ | // | | LSDA | | <-- lsda // | | ... | | // | +--------+--------+--------+-------+ | // +--------------------------------------+ uint32_t *UnwindData = reinterpret_cast(exceptionTableAddr) + 1; uint32_t FirstDataWord = *UnwindData; size_t N = ((FirstDataWord >> 24) & 0xff); size_t NDataWords = N + 1; lsda = reinterpret_cast(UnwindData + NDataWords); } _info.start_ip = thisPC; _info.end_ip = nextPC; _info.handler = personalityRoutine; _info.unwind_info = exceptionTableAddr; _info.lsda = lsda; // flags is pr_cache.additional. See EHABI #7.2 for definition of bit 0. _info.flags = (isSingleWordEHT ? 1 : 0) | (scope32 ? 0x2 : 0); // Use enum? return true; } #endif #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) template bool UnwindCursor::getInfoFromFdeCie( const typename CFI_Parser::FDE_Info &fdeInfo, const typename CFI_Parser::CIE_Info &cieInfo, pint_t pc, uintptr_t dso_base) { typename CFI_Parser::PrologInfo prolog; if (CFI_Parser::parseFDEInstructions(_addressSpace, fdeInfo, cieInfo, pc, R::getArch(), &prolog)) { // Save off parsed FDE info _info.start_ip = fdeInfo.pcStart; _info.end_ip = fdeInfo.pcEnd; _info.lsda = fdeInfo.lsda; _info.handler = cieInfo.personality; // Some frameless functions need SP altered when resuming in function, so // propagate spExtraArgSize. _info.gp = prolog.spExtraArgSize; _info.flags = 0; _info.format = dwarfEncoding(); _info.unwind_info = fdeInfo.fdeStart; _info.unwind_info_size = static_cast(fdeInfo.fdeLength); _info.extra = static_cast(dso_base); return true; } return false; } template bool UnwindCursor::getInfoFromDwarfSection(pint_t pc, const UnwindInfoSections §s, uint32_t fdeSectionOffsetHint) { typename CFI_Parser::FDE_Info fdeInfo; typename CFI_Parser::CIE_Info cieInfo; bool foundFDE = false; bool foundInCache = false; // If compact encoding table gave offset into dwarf section, go directly there if (fdeSectionOffsetHint != 0) { foundFDE = CFI_Parser::findFDE(_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length, sects.dwarf_section + fdeSectionOffsetHint, &fdeInfo, &cieInfo); } #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) if (!foundFDE && (sects.dwarf_index_section != 0)) { foundFDE = EHHeaderParser::findFDE( _addressSpace, pc, sects.dwarf_index_section, (uint32_t)sects.dwarf_index_section_length, &fdeInfo, &cieInfo); } #endif if (!foundFDE) { // otherwise, search cache of previously found FDEs. pint_t cachedFDE = DwarfFDECache::findFDE(sects.dso_base, pc); if (cachedFDE != 0) { foundFDE = CFI_Parser::findFDE(_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length, cachedFDE, &fdeInfo, &cieInfo); foundInCache = foundFDE; } } if (!foundFDE) { // Still not found, do full scan of __eh_frame section. foundFDE = CFI_Parser::findFDE(_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length, 0, &fdeInfo, &cieInfo); } if (foundFDE) { if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, sects.dso_base)) { // Add to cache (to make next lookup faster) if we had no hint // and there was no index. if (!foundInCache && (fdeSectionOffsetHint == 0)) { #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) if (sects.dwarf_index_section == 0) #endif DwarfFDECache::add(sects.dso_base, fdeInfo.pcStart, fdeInfo.pcEnd, fdeInfo.fdeStart); } return true; } } //_LIBUNWIND_DEBUG_LOG("can't find/use FDE for pc=0x%llX", (uint64_t)pc); return false; } #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) template bool UnwindCursor::getInfoFromCompactEncodingSection(pint_t pc, const UnwindInfoSections §s) { const bool log = false; if (log) fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX, mh=0x%llX)\n", (uint64_t)pc, (uint64_t)sects.dso_base); const UnwindSectionHeader sectionHeader(_addressSpace, sects.compact_unwind_section); if (sectionHeader.version() != UNWIND_SECTION_VERSION) return false; // do a binary search of top level index to find page with unwind info pint_t targetFunctionOffset = pc - sects.dso_base; const UnwindSectionIndexArray topIndex(_addressSpace, sects.compact_unwind_section + sectionHeader.indexSectionOffset()); uint32_t low = 0; uint32_t high = sectionHeader.indexCount(); uint32_t last = high - 1; while (low < high) { uint32_t mid = (low + high) / 2; //if ( log ) fprintf(stderr, "\tmid=%d, low=%d, high=%d, *mid=0x%08X\n", //mid, low, high, topIndex.functionOffset(mid)); if (topIndex.functionOffset(mid) <= targetFunctionOffset) { if ((mid == last) || (topIndex.functionOffset(mid + 1) > targetFunctionOffset)) { low = mid; break; } else { low = mid + 1; } } else { high = mid; } } const uint32_t firstLevelFunctionOffset = topIndex.functionOffset(low); const uint32_t firstLevelNextPageFunctionOffset = topIndex.functionOffset(low + 1); const pint_t secondLevelAddr = sects.compact_unwind_section + topIndex.secondLevelPagesSectionOffset(low); const pint_t lsdaArrayStartAddr = sects.compact_unwind_section + topIndex.lsdaIndexArraySectionOffset(low); const pint_t lsdaArrayEndAddr = sects.compact_unwind_section + topIndex.lsdaIndexArraySectionOffset(low+1); if (log) fprintf(stderr, "\tfirst level search for result index=%d " "to secondLevelAddr=0x%llX\n", low, (uint64_t) secondLevelAddr); // do a binary search of second level page index uint32_t encoding = 0; pint_t funcStart = 0; pint_t funcEnd = 0; pint_t lsda = 0; pint_t personality = 0; uint32_t pageKind = _addressSpace.get32(secondLevelAddr); if (pageKind == UNWIND_SECOND_LEVEL_REGULAR) { // regular page UnwindSectionRegularPageHeader pageHeader(_addressSpace, secondLevelAddr); UnwindSectionRegularArray pageIndex( _addressSpace, secondLevelAddr + pageHeader.entryPageOffset()); // binary search looks for entry with e where index[e].offset <= pc < // index[e+1].offset if (log) fprintf(stderr, "\tbinary search for targetFunctionOffset=0x%08llX in " "regular page starting at secondLevelAddr=0x%llX\n", (uint64_t) targetFunctionOffset, (uint64_t) secondLevelAddr); low = 0; high = pageHeader.entryCount(); while (low < high) { uint32_t mid = (low + high) / 2; if (pageIndex.functionOffset(mid) <= targetFunctionOffset) { if (mid == (uint32_t)(pageHeader.entryCount() - 1)) { // at end of table low = mid; funcEnd = firstLevelNextPageFunctionOffset + sects.dso_base; break; } else if (pageIndex.functionOffset(mid + 1) > targetFunctionOffset) { // next is too big, so we found it low = mid; funcEnd = pageIndex.functionOffset(low + 1) + sects.dso_base; break; } else { low = mid + 1; } } else { high = mid; } } encoding = pageIndex.encoding(low); funcStart = pageIndex.functionOffset(low) + sects.dso_base; if (pc < funcStart) { if (log) fprintf( stderr, "\tpc not in table, pc=0x%llX, funcStart=0x%llX, funcEnd=0x%llX\n", (uint64_t) pc, (uint64_t) funcStart, (uint64_t) funcEnd); return false; } if (pc > funcEnd) { if (log) fprintf( stderr, "\tpc not in table, pc=0x%llX, funcStart=0x%llX, funcEnd=0x%llX\n", (uint64_t) pc, (uint64_t) funcStart, (uint64_t) funcEnd); return false; } } else if (pageKind == UNWIND_SECOND_LEVEL_COMPRESSED) { // compressed page UnwindSectionCompressedPageHeader pageHeader(_addressSpace, secondLevelAddr); UnwindSectionCompressedArray pageIndex( _addressSpace, secondLevelAddr + pageHeader.entryPageOffset()); const uint32_t targetFunctionPageOffset = (uint32_t)(targetFunctionOffset - firstLevelFunctionOffset); // binary search looks for entry with e where index[e].offset <= pc < // index[e+1].offset if (log) fprintf(stderr, "\tbinary search of compressed page starting at " "secondLevelAddr=0x%llX\n", (uint64_t) secondLevelAddr); low = 0; last = pageHeader.entryCount() - 1; high = pageHeader.entryCount(); while (low < high) { uint32_t mid = (low + high) / 2; if (pageIndex.functionOffset(mid) <= targetFunctionPageOffset) { if ((mid == last) || (pageIndex.functionOffset(mid + 1) > targetFunctionPageOffset)) { low = mid; break; } else { low = mid + 1; } } else { high = mid; } } funcStart = pageIndex.functionOffset(low) + firstLevelFunctionOffset + sects.dso_base; if (low < last) funcEnd = pageIndex.functionOffset(low + 1) + firstLevelFunctionOffset + sects.dso_base; else funcEnd = firstLevelNextPageFunctionOffset + sects.dso_base; if (pc < funcStart) { _LIBUNWIND_DEBUG_LOG("malformed __unwind_info, pc=0x%llX " "not in second level compressed unwind table. " "funcStart=0x%llX", (uint64_t) pc, (uint64_t) funcStart); return false; } if (pc > funcEnd) { _LIBUNWIND_DEBUG_LOG("malformed __unwind_info, pc=0x%llX " "not in second level compressed unwind table. " "funcEnd=0x%llX", (uint64_t) pc, (uint64_t) funcEnd); return false; } uint16_t encodingIndex = pageIndex.encodingIndex(low); if (encodingIndex < sectionHeader.commonEncodingsArrayCount()) { // encoding is in common table in section header encoding = _addressSpace.get32( sects.compact_unwind_section + sectionHeader.commonEncodingsArraySectionOffset() + encodingIndex * sizeof(uint32_t)); } else { // encoding is in page specific table uint16_t pageEncodingIndex = encodingIndex - (uint16_t)sectionHeader.commonEncodingsArrayCount(); encoding = _addressSpace.get32(secondLevelAddr + pageHeader.encodingsPageOffset() + pageEncodingIndex * sizeof(uint32_t)); } } else { _LIBUNWIND_DEBUG_LOG( "malformed __unwind_info at 0x%0llX bad second level page", (uint64_t)sects.compact_unwind_section); return false; } // look up LSDA, if encoding says function has one if (encoding & UNWIND_HAS_LSDA) { UnwindSectionLsdaArray lsdaIndex(_addressSpace, lsdaArrayStartAddr); uint32_t funcStartOffset = (uint32_t)(funcStart - sects.dso_base); low = 0; high = (uint32_t)(lsdaArrayEndAddr - lsdaArrayStartAddr) / sizeof(unwind_info_section_header_lsda_index_entry); // binary search looks for entry with exact match for functionOffset if (log) fprintf(stderr, "\tbinary search of lsda table for targetFunctionOffset=0x%08X\n", funcStartOffset); while (low < high) { uint32_t mid = (low + high) / 2; if (lsdaIndex.functionOffset(mid) == funcStartOffset) { lsda = lsdaIndex.lsdaOffset(mid) + sects.dso_base; break; } else if (lsdaIndex.functionOffset(mid) < funcStartOffset) { low = mid + 1; } else { high = mid; } } if (lsda == 0) { _LIBUNWIND_DEBUG_LOG("found encoding 0x%08X with HAS_LSDA bit set for " "pc=0x%0llX, but lsda table has no entry", encoding, (uint64_t) pc); return false; } } // extract personality routine, if encoding says function has one uint32_t personalityIndex = (encoding & UNWIND_PERSONALITY_MASK) >> (__builtin_ctz(UNWIND_PERSONALITY_MASK)); if (personalityIndex != 0) { --personalityIndex; // change 1-based to zero-based index if (personalityIndex >= sectionHeader.personalityArrayCount()) { _LIBUNWIND_DEBUG_LOG("found encoding 0x%08X with personality index %d, " "but personality table has only %d entries", encoding, personalityIndex, sectionHeader.personalityArrayCount()); return false; } int32_t personalityDelta = (int32_t)_addressSpace.get32( sects.compact_unwind_section + sectionHeader.personalityArraySectionOffset() + personalityIndex * sizeof(uint32_t)); pint_t personalityPointer = sects.dso_base + (pint_t)personalityDelta; personality = _addressSpace.getP(personalityPointer); if (log) fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX), " "personalityDelta=0x%08X, personality=0x%08llX\n", (uint64_t) pc, personalityDelta, (uint64_t) personality); } if (log) fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX), " "encoding=0x%08X, lsda=0x%08llX for funcStart=0x%llX\n", (uint64_t) pc, encoding, (uint64_t) lsda, (uint64_t) funcStart); _info.start_ip = funcStart; _info.end_ip = funcEnd; _info.lsda = lsda; _info.handler = personality; _info.gp = 0; _info.flags = 0; _info.format = encoding; _info.unwind_info = 0; _info.unwind_info_size = 0; _info.extra = sects.dso_base; return true; } #endif // defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) template bool UnwindCursor::getInfoFromSEH(pint_t pc) { pint_t base; RUNTIME_FUNCTION *unwindEntry = lookUpSEHUnwindInfo(pc, &base); if (!unwindEntry) { _LIBUNWIND_DEBUG_LOG("\tpc not in table, pc=0x%llX", (uint64_t) pc); return false; } _info.gp = 0; _info.flags = 0; _info.format = 0; _info.unwind_info_size = sizeof(RUNTIME_FUNCTION); _info.unwind_info = reinterpret_cast(unwindEntry); _info.extra = base; _info.start_ip = base + unwindEntry->BeginAddress; #ifdef _LIBUNWIND_TARGET_X86_64 _info.end_ip = base + unwindEntry->EndAddress; // Only fill in the handler and LSDA if they're stale. if (pc != getLastPC()) { UNWIND_INFO *xdata = reinterpret_cast(base + unwindEntry->UnwindData); if (xdata->Flags & (UNW_FLAG_EHANDLER|UNW_FLAG_UHANDLER)) { // The personality is given in the UNWIND_INFO itself. The LSDA immediately // follows the UNWIND_INFO. (This follows how both Clang and MSVC emit // these structures.) // N.B. UNWIND_INFO structs are DWORD-aligned. uint32_t lastcode = (xdata->CountOfCodes + 1) & ~1; const uint32_t *handler = reinterpret_cast(&xdata->UnwindCodes[lastcode]); _info.lsda = reinterpret_cast(handler+1); _dispContext.HandlerData = reinterpret_cast(_info.lsda); _dispContext.LanguageHandler = reinterpret_cast(base + *handler); if (*handler) { _info.handler = reinterpret_cast(__libunwind_seh_personality); } else _info.handler = 0; } else { _info.lsda = 0; _info.handler = 0; } } #elif defined(_LIBUNWIND_TARGET_AARCH64) || defined(_LIBUNWIND_TARGET_ARM) #if defined(_LIBUNWIND_TARGET_AARCH64) #define FUNC_LENGTH_UNIT 4 #define XDATA_TYPE IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA #else #define FUNC_LENGTH_UNIT 2 #define XDATA_TYPE UNWIND_INFO_ARM #endif if (unwindEntry->Flag != 0) { // Packed unwind info _info.end_ip = _info.start_ip + unwindEntry->FunctionLength * FUNC_LENGTH_UNIT; // Only fill in the handler and LSDA if they're stale. if (pc != getLastPC()) { // Packed unwind info doesn't have an exception handler. _info.lsda = 0; _info.handler = 0; } } else { XDATA_TYPE *xdata = reinterpret_cast(base + unwindEntry->UnwindData); _info.end_ip = _info.start_ip + xdata->FunctionLength * FUNC_LENGTH_UNIT; // Only fill in the handler and LSDA if they're stale. if (pc != getLastPC()) { if (xdata->ExceptionDataPresent) { uint32_t offset = 1; // The main xdata uint32_t codeWords = xdata->CodeWords; uint32_t epilogScopes = xdata->EpilogCount; if (xdata->EpilogCount == 0 && xdata->CodeWords == 0) { // The extension word has got the same layout for both ARM and ARM64 uint32_t extensionWord = reinterpret_cast(xdata)[1]; codeWords = (extensionWord >> 16) & 0xff; epilogScopes = extensionWord & 0xffff; offset++; } if (!xdata->EpilogInHeader) offset += epilogScopes; offset += codeWords; uint32_t *exceptionHandlerInfo = reinterpret_cast(xdata) + offset; _dispContext.HandlerData = &exceptionHandlerInfo[1]; _dispContext.LanguageHandler = reinterpret_cast( base + exceptionHandlerInfo[0]); _info.lsda = reinterpret_cast(_dispContext.HandlerData); if (exceptionHandlerInfo[0]) _info.handler = reinterpret_cast(__libunwind_seh_personality); else _info.handler = 0; } else { _info.lsda = 0; _info.handler = 0; } } } #endif setLastPC(pc); return true; } #endif #if defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) // Masks for traceback table field xtbtable. enum xTBTableMask : uint8_t { reservedBit = 0x02, // The traceback table was incorrectly generated if set // (see comments in function getInfoFromTBTable(). ehInfoBit = 0x08 // Exception handling info is present if set }; enum frameType : unw_word_t { frameWithXLEHStateTable = 0, frameWithEHInfo = 1 }; extern "C" { typedef _Unwind_Reason_Code __xlcxx_personality_v0_t(int, _Unwind_Action, uint64_t, _Unwind_Exception *, struct _Unwind_Context *); } static __xlcxx_personality_v0_t *xlcPersonalityV0; static RWMutex xlcPersonalityV0InitLock; template bool UnwindCursor::getInfoFromTBTable(pint_t pc, R ®isters) { uint32_t *p = reinterpret_cast(pc); // Keep looking forward until a word of 0 is found. The traceback // table starts at the following word. while (*p) ++p; tbtable *TBTable = reinterpret_cast(p + 1); if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if (!getFunctionName(functionBuf, sizeof(functionBuf), &offset)) { functionName = ".anonymous."; } _LIBUNWIND_TRACE_UNWINDING("%s: Look up traceback table of func=%s at %p", __func__, functionName, reinterpret_cast(TBTable)); } // If the traceback table does not contain necessary info, bypass this frame. if (!TBTable->tb.has_tboff) return false; // Structure tbtable_ext contains important data we are looking for. p = reinterpret_cast(&TBTable->tb_ext); // Skip field parminfo if it exists. if (TBTable->tb.fixedparms || TBTable->tb.floatparms) ++p; // p now points to tb_offset, the offset from start of function to TB table. unw_word_t start_ip = reinterpret_cast(TBTable) - *p - sizeof(uint32_t); unw_word_t end_ip = reinterpret_cast(TBTable); ++p; _LIBUNWIND_TRACE_UNWINDING("start_ip=%p, end_ip=%p\n", reinterpret_cast(start_ip), reinterpret_cast(end_ip)); // Skip field hand_mask if it exists. if (TBTable->tb.int_hndl) ++p; unw_word_t lsda = 0; unw_word_t handler = 0; unw_word_t flags = frameType::frameWithXLEHStateTable; if (TBTable->tb.lang == TB_CPLUSPLUS && TBTable->tb.has_ctl) { // State table info is available. The ctl_info field indicates the // number of CTL anchors. There should be only one entry for the C++ // state table. assert(*p == 1 && "libunwind: there must be only one ctl_info entry"); ++p; // p points to the offset of the state table into the stack. pint_t stateTableOffset = *p++; int framePointerReg; // Skip fields name_len and name if exist. if (TBTable->tb.name_present) { const uint16_t name_len = *(reinterpret_cast(p)); p = reinterpret_cast(reinterpret_cast(p) + name_len + sizeof(uint16_t)); } if (TBTable->tb.uses_alloca) framePointerReg = *(reinterpret_cast(p)); else framePointerReg = 1; // default frame pointer == SP _LIBUNWIND_TRACE_UNWINDING( "framePointerReg=%d, framePointer=%p, " "stateTableOffset=%#lx\n", framePointerReg, reinterpret_cast(_registers.getRegister(framePointerReg)), stateTableOffset); lsda = _registers.getRegister(framePointerReg) + stateTableOffset; // Since the traceback table generated by the legacy XLC++ does not // provide the location of the personality for the state table, // function __xlcxx_personality_v0(), which is the personality for the state // table and is exported from libc++abi, is directly assigned as the // handler here. When a legacy XLC++ frame is encountered, the symbol // is resolved dynamically using dlopen() to avoid a hard dependency of // libunwind on libc++abi in cases such as non-C++ applications. // Resolve the function pointer to the state table personality if it has // not already been done. if (xlcPersonalityV0 == NULL) { xlcPersonalityV0InitLock.lock(); if (xlcPersonalityV0 == NULL) { // Resolve __xlcxx_personality_v0 using dlopen(). const char *libcxxabi = "libc++abi.a(libc++abi.so.1)"; void *libHandle; // The AIX dlopen() sets errno to 0 when it is successful, which // clobbers the value of errno from the user code. This is an AIX // bug because according to POSIX it should not set errno to 0. To // workaround before AIX fixes the bug, errno is saved and restored. int saveErrno = errno; libHandle = dlopen(libcxxabi, RTLD_MEMBER | RTLD_NOW); if (libHandle == NULL) { _LIBUNWIND_TRACE_UNWINDING("dlopen() failed with errno=%d\n", errno); assert(0 && "dlopen() failed"); } xlcPersonalityV0 = reinterpret_cast<__xlcxx_personality_v0_t *>( dlsym(libHandle, "__xlcxx_personality_v0")); if (xlcPersonalityV0 == NULL) { _LIBUNWIND_TRACE_UNWINDING("dlsym() failed with errno=%d\n", errno); dlclose(libHandle); assert(0 && "dlsym() failed"); } errno = saveErrno; } xlcPersonalityV0InitLock.unlock(); } handler = reinterpret_cast(xlcPersonalityV0); _LIBUNWIND_TRACE_UNWINDING("State table: LSDA=%p, Personality=%p\n", reinterpret_cast(lsda), reinterpret_cast(handler)); } else if (TBTable->tb.longtbtable) { // This frame has the traceback table extension. Possible cases are // 1) a C++ frame that has the 'eh_info' structure; 2) a C++ frame that // is not EH aware; or, 3) a frame of other languages. We need to figure out // if the traceback table extension contains the 'eh_info' structure. // // We also need to deal with the complexity arising from some XL compiler // versions use the wrong ordering of 'longtbtable' and 'has_vec' bits // where the 'longtbtable' bit is meant to be the 'has_vec' bit and vice // versa. For frames of code generated by those compilers, the 'longtbtable' // bit may be set but there isn't really a traceback table extension. // // In , there is the following definition of // 'struct tbtable_ext'. It is not really a structure but a dummy to // collect the description of optional parts of the traceback table. // // struct tbtable_ext { // ... // char alloca_reg; /* Register for alloca automatic storage */ // struct vec_ext vec_ext; /* Vector extension (if has_vec is set) */ // unsigned char xtbtable; /* More tbtable fields, if longtbtable is set*/ // }; // // Depending on how the 'has_vec'/'longtbtable' bit is interpreted, the data // following 'alloca_reg' can be treated either as 'struct vec_ext' or // 'unsigned char xtbtable'. 'xtbtable' bits are defined in // as flags. The 7th bit '0x02' is currently // unused and should not be set. 'struct vec_ext' is defined in // as follows: // // struct vec_ext { // unsigned vr_saved:6; /* Number of non-volatile vector regs saved // */ // /* first register saved is assumed to be */ // /* 32 - vr_saved */ // unsigned saves_vrsave:1; /* Set if vrsave is saved on the stack */ // unsigned has_varargs:1; // ... // }; // // Here, the 7th bit is used as 'saves_vrsave'. To determine whether it // is 'struct vec_ext' or 'xtbtable' that follows 'alloca_reg', // we checks if the 7th bit is set or not because 'xtbtable' should // never have the 7th bit set. The 7th bit of 'xtbtable' will be reserved // in the future to make sure the mitigation works. This mitigation // is not 100% bullet proof because 'struct vec_ext' may not always have // 'saves_vrsave' bit set. // // 'reservedBit' is defined in enum 'xTBTableMask' above as the mask for // checking the 7th bit. // p points to field name len. uint8_t *charPtr = reinterpret_cast(p); // Skip fields name_len and name if they exist. if (TBTable->tb.name_present) { const uint16_t name_len = *(reinterpret_cast(charPtr)); charPtr = charPtr + name_len + sizeof(uint16_t); } // Skip field alloc_reg if it exists. if (TBTable->tb.uses_alloca) ++charPtr; // Check traceback table bit has_vec. Skip struct vec_ext if it exists. if (TBTable->tb.has_vec) // Note struct vec_ext does exist at this point because whether the // ordering of longtbtable and has_vec bits is correct or not, both // are set. charPtr += sizeof(struct vec_ext); // charPtr points to field 'xtbtable'. Check if the EH info is available. // Also check if the reserved bit of the extended traceback table field // 'xtbtable' is set. If it is, the traceback table was incorrectly // generated by an XL compiler that uses the wrong ordering of 'longtbtable' // and 'has_vec' bits and this is in fact 'struct vec_ext'. So skip the // frame. if ((*charPtr & xTBTableMask::ehInfoBit) && !(*charPtr & xTBTableMask::reservedBit)) { // Mark this frame has the new EH info. flags = frameType::frameWithEHInfo; // eh_info is available. charPtr++; // The pointer is 4-byte aligned. if (reinterpret_cast(charPtr) % 4) charPtr += 4 - reinterpret_cast(charPtr) % 4; uintptr_t *ehInfo = reinterpret_cast(*(reinterpret_cast( registers.getRegister(2) + *(reinterpret_cast(charPtr))))); // ehInfo points to structure en_info. The first member is version. // Only version 0 is currently supported. assert(*(reinterpret_cast(ehInfo)) == 0 && "libunwind: ehInfo version other than 0 is not supported"); // Increment ehInfo to point to member lsda. ++ehInfo; lsda = *ehInfo++; // enInfo now points to member personality. handler = *ehInfo; _LIBUNWIND_TRACE_UNWINDING("Range table: LSDA=%#lx, Personality=%#lx\n", lsda, handler); } } _info.start_ip = start_ip; _info.end_ip = end_ip; _info.lsda = lsda; _info.handler = handler; _info.gp = 0; _info.flags = flags; _info.format = 0; _info.unwind_info = reinterpret_cast(TBTable); _info.unwind_info_size = 0; _info.extra = registers.getRegister(2); return true; } // Step back up the stack following the frame back link. template int UnwindCursor::stepWithTBTable(pint_t pc, tbtable *TBTable, R ®isters, bool &isSignalFrame) { if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if (!getFunctionName(functionBuf, sizeof(functionBuf), &offset)) { functionName = ".anonymous."; } _LIBUNWIND_TRACE_UNWINDING( "%s: Look up traceback table of func=%s at %p, pc=%p, " "SP=%p, saves_lr=%d, stores_bc=%d", __func__, functionName, reinterpret_cast(TBTable), reinterpret_cast(pc), reinterpret_cast(registers.getSP()), TBTable->tb.saves_lr, TBTable->tb.stores_bc); } #if defined(__powerpc64__) // Instruction to reload TOC register "ld r2,40(r1)" const uint32_t loadTOCRegInst = 0xe8410028; const int32_t unwPPCF0Index = UNW_PPC64_F0; const int32_t unwPPCV0Index = UNW_PPC64_V0; #else // Instruction to reload TOC register "lwz r2,20(r1)" const uint32_t loadTOCRegInst = 0x80410014; const int32_t unwPPCF0Index = UNW_PPC_F0; const int32_t unwPPCV0Index = UNW_PPC_V0; #endif // lastStack points to the stack frame of the next routine up. pint_t curStack = static_cast(registers.getSP()); pint_t lastStack = *reinterpret_cast(curStack); if (lastStack == 0) return UNW_STEP_END; R newRegisters = registers; // If backchain is not stored, use the current stack frame. if (!TBTable->tb.stores_bc) lastStack = curStack; // Return address is the address after call site instruction. pint_t returnAddress; if (isSignalFrame) { _LIBUNWIND_TRACE_UNWINDING("Possible signal handler frame: lastStack=%p", reinterpret_cast(lastStack)); sigcontext *sigContext = reinterpret_cast( reinterpret_cast(lastStack) + STKMINALIGN); returnAddress = sigContext->sc_jmpbuf.jmp_context.iar; bool useSTKMIN = false; if (returnAddress < 0x10000000) { // Try again using STKMIN. sigContext = reinterpret_cast( reinterpret_cast(lastStack) + STKMIN); returnAddress = sigContext->sc_jmpbuf.jmp_context.iar; if (returnAddress < 0x10000000) { _LIBUNWIND_TRACE_UNWINDING("Bad returnAddress=%p from sigcontext=%p", reinterpret_cast(returnAddress), reinterpret_cast(sigContext)); return UNW_EBADFRAME; } useSTKMIN = true; } _LIBUNWIND_TRACE_UNWINDING("Returning from a signal handler %s: " "sigContext=%p, returnAddress=%p. " "Seems to be a valid address", useSTKMIN ? "STKMIN" : "STKMINALIGN", reinterpret_cast(sigContext), reinterpret_cast(returnAddress)); // Restore the condition register from sigcontext. newRegisters.setCR(sigContext->sc_jmpbuf.jmp_context.cr); // Save the LR in sigcontext for stepping up when the function that // raised the signal is a leaf function. This LR has the return address // to the caller of the leaf function. newRegisters.setLR(sigContext->sc_jmpbuf.jmp_context.lr); _LIBUNWIND_TRACE_UNWINDING( "Save LR=%p from sigcontext", reinterpret_cast(sigContext->sc_jmpbuf.jmp_context.lr)); // Restore GPRs from sigcontext. for (int i = 0; i < 32; ++i) newRegisters.setRegister(i, sigContext->sc_jmpbuf.jmp_context.gpr[i]); // Restore FPRs from sigcontext. for (int i = 0; i < 32; ++i) newRegisters.setFloatRegister(i + unwPPCF0Index, sigContext->sc_jmpbuf.jmp_context.fpr[i]); // Restore vector registers if there is an associated extended context // structure. if (sigContext->sc_jmpbuf.jmp_context.msr & __EXTCTX) { ucontext_t *uContext = reinterpret_cast(sigContext); if (uContext->__extctx->__extctx_magic == __EXTCTX_MAGIC) { for (int i = 0; i < 32; ++i) newRegisters.setVectorRegister( i + unwPPCV0Index, *(reinterpret_cast( &(uContext->__extctx->__vmx.__vr[i])))); } } } else { // Step up a normal frame. if (!TBTable->tb.saves_lr && registers.getLR()) { // This case should only occur if we were called from a signal handler // and the signal occurred in a function that doesn't save the LR. returnAddress = static_cast(registers.getLR()); _LIBUNWIND_TRACE_UNWINDING("Use saved LR=%p", reinterpret_cast(returnAddress)); } else { // Otherwise, use the LR value in the stack link area. returnAddress = reinterpret_cast(lastStack)[2]; } // Reset LR in the current context. newRegisters.setLR(static_cast(NULL)); _LIBUNWIND_TRACE_UNWINDING( "Extract info from lastStack=%p, returnAddress=%p", reinterpret_cast(lastStack), reinterpret_cast(returnAddress)); _LIBUNWIND_TRACE_UNWINDING("fpr_regs=%d, gpr_regs=%d, saves_cr=%d", TBTable->tb.fpr_saved, TBTable->tb.gpr_saved, TBTable->tb.saves_cr); // Restore FP registers. char *ptrToRegs = reinterpret_cast(lastStack); double *FPRegs = reinterpret_cast( ptrToRegs - (TBTable->tb.fpr_saved * sizeof(double))); for (int i = 0; i < TBTable->tb.fpr_saved; ++i) newRegisters.setFloatRegister( 32 - TBTable->tb.fpr_saved + i + unwPPCF0Index, FPRegs[i]); // Restore GP registers. ptrToRegs = reinterpret_cast(FPRegs); uintptr_t *GPRegs = reinterpret_cast( ptrToRegs - (TBTable->tb.gpr_saved * sizeof(uintptr_t))); for (int i = 0; i < TBTable->tb.gpr_saved; ++i) newRegisters.setRegister(32 - TBTable->tb.gpr_saved + i, GPRegs[i]); // Restore Vector registers. ptrToRegs = reinterpret_cast(GPRegs); // Restore vector registers only if this is a Clang frame. Also // check if traceback table bit has_vec is set. If it is, structure // vec_ext is available. if (_info.flags == frameType::frameWithEHInfo && TBTable->tb.has_vec) { // Get to the vec_ext structure to check if vector registers are saved. uint32_t *p = reinterpret_cast(&TBTable->tb_ext); // Skip field parminfo if exists. if (TBTable->tb.fixedparms || TBTable->tb.floatparms) ++p; // Skip field tb_offset if exists. if (TBTable->tb.has_tboff) ++p; // Skip field hand_mask if exists. if (TBTable->tb.int_hndl) ++p; // Skip fields ctl_info and ctl_info_disp if exist. if (TBTable->tb.has_ctl) { // Skip field ctl_info. ++p; // Skip field ctl_info_disp. ++p; } // Skip fields name_len and name if exist. // p is supposed to point to field name_len now. uint8_t *charPtr = reinterpret_cast(p); if (TBTable->tb.name_present) { const uint16_t name_len = *(reinterpret_cast(charPtr)); charPtr = charPtr + name_len + sizeof(uint16_t); } // Skip field alloc_reg if it exists. if (TBTable->tb.uses_alloca) ++charPtr; struct vec_ext *vec_ext = reinterpret_cast(charPtr); _LIBUNWIND_TRACE_UNWINDING("vr_saved=%d", vec_ext->vr_saved); // Restore vector register(s) if saved on the stack. if (vec_ext->vr_saved) { // Saved vector registers are 16-byte aligned. if (reinterpret_cast(ptrToRegs) % 16) ptrToRegs -= reinterpret_cast(ptrToRegs) % 16; v128 *VecRegs = reinterpret_cast(ptrToRegs - vec_ext->vr_saved * sizeof(v128)); for (int i = 0; i < vec_ext->vr_saved; ++i) { newRegisters.setVectorRegister( 32 - vec_ext->vr_saved + i + unwPPCV0Index, VecRegs[i]); } } } if (TBTable->tb.saves_cr) { // Get the saved condition register. The condition register is only // a single word. newRegisters.setCR( *(reinterpret_cast(lastStack + sizeof(uintptr_t)))); } // Restore the SP. newRegisters.setSP(lastStack); // The first instruction after return. uint32_t firstInstruction = *(reinterpret_cast(returnAddress)); // Do we need to set the TOC register? _LIBUNWIND_TRACE_UNWINDING( "Current gpr2=%p", reinterpret_cast(newRegisters.getRegister(2))); if (firstInstruction == loadTOCRegInst) { _LIBUNWIND_TRACE_UNWINDING( "Set gpr2=%p from frame", reinterpret_cast(reinterpret_cast(lastStack)[5])); newRegisters.setRegister(2, reinterpret_cast(lastStack)[5]); } } _LIBUNWIND_TRACE_UNWINDING("lastStack=%p, returnAddress=%p, pc=%p\n", reinterpret_cast(lastStack), reinterpret_cast(returnAddress), reinterpret_cast(pc)); // The return address is the address after call site instruction, so // setting IP to that simulates a return. newRegisters.setIP(reinterpret_cast(returnAddress)); // Simulate the step by replacing the register set with the new ones. registers = newRegisters; // Check if the next frame is a signal frame. pint_t nextStack = *(reinterpret_cast(registers.getSP())); // Return address is the address after call site instruction. pint_t nextReturnAddress = reinterpret_cast(nextStack)[2]; if (nextReturnAddress > 0x01 && nextReturnAddress < 0x10000) { _LIBUNWIND_TRACE_UNWINDING("The next is a signal handler frame: " "nextStack=%p, next return address=%p\n", reinterpret_cast(nextStack), reinterpret_cast(nextReturnAddress)); isSignalFrame = true; } else { isSignalFrame = false; } return UNW_STEP_SUCCESS; } #endif // defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) template void UnwindCursor::setInfoBasedOnIPRegister(bool isReturnAddress) { #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) || \ defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN) _isSigReturn = false; #endif pint_t pc = static_cast(this->getReg(UNW_REG_IP)); #if defined(_LIBUNWIND_ARM_EHABI) // Remove the thumb bit so the IP represents the actual instruction address. // This matches the behaviour of _Unwind_GetIP on arm. pc &= (pint_t)~0x1; #endif // Exit early if at the top of the stack. if (pc == 0) { _unwindInfoMissing = true; return; } // If the last line of a function is a "throw" the compiler sometimes // emits no instructions after the call to __cxa_throw. This means // the return address is actually the start of the next function. // To disambiguate this, back up the pc when we know it is a return // address. if (isReturnAddress) #if defined(_AIX) // PC needs to be a 4-byte aligned address to be able to look for a // word of 0 that indicates the start of the traceback table at the end // of a function on AIX. pc -= 4; #else --pc; #endif #if !(defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) && defined(_WIN32)) && \ !defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) // In case of this is frame of signal handler, the IP saved in the signal // handler points to first non-executed instruction, while FDE/CIE expects IP // to be after the first non-executed instruction. if (_isSignalFrame) ++pc; #endif // Ask address space object to find unwind sections for this pc. UnwindInfoSections sects; if (_addressSpace.findUnwindSections(pc, sects)) { #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) // If there is a compact unwind encoding table, look there first. if (sects.compact_unwind_section != 0) { if (this->getInfoFromCompactEncodingSection(pc, sects)) { #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) // Found info in table, done unless encoding says to use dwarf. uint32_t dwarfOffset; if ((sects.dwarf_section != 0) && compactSaysUseDwarf(&dwarfOffset)) { if (this->getInfoFromDwarfSection(pc, sects, dwarfOffset)) { // found info in dwarf, done return; } } #endif // If unwind table has entry, but entry says there is no unwind info, // record that we have no unwind info. if (_info.format == 0) _unwindInfoMissing = true; return; } } #endif // defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) // If there is SEH unwind info, look there next. if (this->getInfoFromSEH(pc)) return; #endif #if defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) // If there is unwind info in the traceback table, look there next. if (this->getInfoFromTBTable(pc, _registers)) return; #endif #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) // If there is dwarf unwind info, look there next. if (sects.dwarf_section != 0) { if (this->getInfoFromDwarfSection(pc, sects)) { // found info in dwarf, done return; } } #endif #if defined(_LIBUNWIND_ARM_EHABI) // If there is ARM EHABI unwind info, look there next. if (sects.arm_section != 0 && this->getInfoFromEHABISection(pc, sects)) return; #endif } #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) // There is no static unwind info for this pc. Look to see if an FDE was // dynamically registered for it. pint_t cachedFDE = DwarfFDECache::findFDE(DwarfFDECache::kSearchAll, pc); if (cachedFDE != 0) { typename CFI_Parser::FDE_Info fdeInfo; typename CFI_Parser::CIE_Info cieInfo; if (!CFI_Parser::decodeFDE(_addressSpace, cachedFDE, &fdeInfo, &cieInfo)) if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, 0)) return; } // Lastly, ask AddressSpace object about platform specific ways to locate // other FDEs. pint_t fde; if (_addressSpace.findOtherFDE(pc, fde)) { typename CFI_Parser::FDE_Info fdeInfo; typename CFI_Parser::CIE_Info cieInfo; if (!CFI_Parser::decodeFDE(_addressSpace, fde, &fdeInfo, &cieInfo)) { // Double check this FDE is for a function that includes the pc. if ((fdeInfo.pcStart <= pc) && (pc < fdeInfo.pcEnd)) if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, 0)) return; } } #endif // #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) || \ defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN) if (setInfoForSigReturn()) return; #endif // no unwind info, flag that we can't reliably unwind _unwindInfoMissing = true; } #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && \ defined(_LIBUNWIND_TARGET_AARCH64) template bool UnwindCursor::setInfoForSigReturn(Registers_arm64 &) { // Look for the sigreturn trampoline. The trampoline's body is two // specific instructions (see below). Typically the trampoline comes from the // vDSO[1] (i.e. the __kernel_rt_sigreturn function). A libc might provide its // own restorer function, though, or user-mode QEMU might write a trampoline // onto the stack. // // This special code path is a fallback that is only used if the trampoline // lacks proper (e.g. DWARF) unwind info. On AArch64, a new DWARF register // constant for the PC needs to be defined before DWARF can handle a signal // trampoline. This code may segfault if the target PC is unreadable, e.g.: // - The PC points at a function compiled without unwind info, and which is // part of an execute-only mapping (e.g. using -Wl,--execute-only). // - The PC is invalid and happens to point to unreadable or unmapped memory. // // [1] https://github.com/torvalds/linux/blob/master/arch/arm64/kernel/vdso/sigreturn.S const pint_t pc = static_cast(this->getReg(UNW_REG_IP)); // The PC might contain an invalid address if the unwind info is bad, so // directly accessing it could cause a SIGSEGV. if (!isReadableAddr(pc)) return false; auto *instructions = reinterpret_cast(pc); // Look for instructions: mov x8, #0x8b; svc #0x0 if (instructions[0] != 0xd2801168 || instructions[1] != 0xd4000001) return false; _info = {}; _info.start_ip = pc; _info.end_ip = pc + 4; _isSigReturn = true; return true; } template int UnwindCursor::stepThroughSigReturn(Registers_arm64 &) { // In the signal trampoline frame, sp points to an rt_sigframe[1], which is: // - 128-byte siginfo struct // - ucontext struct: // - 8-byte long (uc_flags) // - 8-byte pointer (uc_link) // - 24-byte stack_t // - 128-byte signal set // - 8 bytes of padding because sigcontext has 16-byte alignment // - sigcontext/mcontext_t // [1] https://github.com/torvalds/linux/blob/master/arch/arm64/kernel/signal.c const pint_t kOffsetSpToSigcontext = (128 + 8 + 8 + 24 + 128 + 8); // 304 // Offsets from sigcontext to each register. const pint_t kOffsetGprs = 8; // offset to "__u64 regs[31]" field const pint_t kOffsetSp = 256; // offset to "__u64 sp" field const pint_t kOffsetPc = 264; // offset to "__u64 pc" field pint_t sigctx = _registers.getSP() + kOffsetSpToSigcontext; for (int i = 0; i <= 30; ++i) { uint64_t value = _addressSpace.get64(sigctx + kOffsetGprs + static_cast(i * 8)); _registers.setRegister(UNW_AARCH64_X0 + i, value); } _registers.setSP(_addressSpace.get64(sigctx + kOffsetSp)); _registers.setIP(_addressSpace.get64(sigctx + kOffsetPc)); _isSignalFrame = true; return UNW_STEP_SUCCESS; } #endif // defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && // defined(_LIBUNWIND_TARGET_AARCH64) #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && \ defined(_LIBUNWIND_TARGET_LOONGARCH) template bool UnwindCursor::setInfoForSigReturn(Registers_loongarch &) { const pint_t pc = static_cast(getReg(UNW_REG_IP)); // The PC might contain an invalid address if the unwind info is bad, so // directly accessing it could cause a SIGSEGV. if (!isReadableAddr(pc)) return false; const auto *instructions = reinterpret_cast(pc); // Look for the two instructions used in the sigreturn trampoline // __vdso_rt_sigreturn: // // 0x03822c0b li a7,0x8b // 0x002b0000 syscall 0 if (instructions[0] != 0x03822c0b || instructions[1] != 0x002b0000) return false; _info = {}; _info.start_ip = pc; _info.end_ip = pc + 4; _isSigReturn = true; return true; } template int UnwindCursor::stepThroughSigReturn(Registers_loongarch &) { // In the signal trampoline frame, sp points to an rt_sigframe[1], which is: // - 128-byte siginfo struct // - ucontext_t struct: // - 8-byte long (__uc_flags) // - 8-byte pointer (*uc_link) // - 24-byte uc_stack // - 8-byte uc_sigmask // - 120-byte of padding to allow sigset_t to be expanded in the future // - 8 bytes of padding because sigcontext has 16-byte alignment // - struct sigcontext uc_mcontext // [1] // https://github.com/torvalds/linux/blob/master/arch/loongarch/kernel/signal.c const pint_t kOffsetSpToSigcontext = 128 + 8 + 8 + 24 + 8 + 128; const pint_t sigctx = _registers.getSP() + kOffsetSpToSigcontext; _registers.setIP(_addressSpace.get64(sigctx)); for (int i = UNW_LOONGARCH_R1; i <= UNW_LOONGARCH_R31; ++i) { // skip R0 uint64_t value = _addressSpace.get64(sigctx + static_cast((i + 1) * 8)); _registers.setRegister(i, value); } _isSignalFrame = true; return UNW_STEP_SUCCESS; } #endif // defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && // defined(_LIBUNWIND_TARGET_LOONGARCH) #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && \ defined(_LIBUNWIND_TARGET_RISCV) template bool UnwindCursor::setInfoForSigReturn(Registers_riscv &) { const pint_t pc = static_cast(getReg(UNW_REG_IP)); // The PC might contain an invalid address if the unwind info is bad, so // directly accessing it could cause a SIGSEGV. if (!isReadableAddr(pc)) return false; const auto *instructions = reinterpret_cast(pc); // Look for the two instructions used in the sigreturn trampoline // __vdso_rt_sigreturn: // // 0x08b00893 li a7,0x8b // 0x00000073 ecall if (instructions[0] != 0x08b00893 || instructions[1] != 0x00000073) return false; _info = {}; _info.start_ip = pc; _info.end_ip = pc + 4; _isSigReturn = true; return true; } template int UnwindCursor::stepThroughSigReturn(Registers_riscv &) { // In the signal trampoline frame, sp points to an rt_sigframe[1], which is: // - 128-byte siginfo struct // - ucontext_t struct: // - 8-byte long (__uc_flags) // - 8-byte pointer (*uc_link) // - 24-byte uc_stack // - 8-byte uc_sigmask // - 120-byte of padding to allow sigset_t to be expanded in the future // - 8 bytes of padding because sigcontext has 16-byte alignment // - struct sigcontext uc_mcontext // [1] // https://github.com/torvalds/linux/blob/master/arch/riscv/kernel/signal.c const pint_t kOffsetSpToSigcontext = 128 + 8 + 8 + 24 + 8 + 128; const pint_t sigctx = _registers.getSP() + kOffsetSpToSigcontext; _registers.setIP(_addressSpace.get64(sigctx)); for (int i = UNW_RISCV_X1; i <= UNW_RISCV_X31; ++i) { uint64_t value = _addressSpace.get64(sigctx + static_cast(i * 8)); _registers.setRegister(i, value); } _isSignalFrame = true; return UNW_STEP_SUCCESS; } #endif // defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && // defined(_LIBUNWIND_TARGET_RISCV) #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && \ defined(_LIBUNWIND_TARGET_S390X) template bool UnwindCursor::setInfoForSigReturn(Registers_s390x &) { // Look for the sigreturn trampoline. The trampoline's body is a // specific instruction (see below). Typically the trampoline comes from the // vDSO (i.e. the __kernel_[rt_]sigreturn function). A libc might provide its // own restorer function, though, or user-mode QEMU might write a trampoline // onto the stack. const pint_t pc = static_cast(this->getReg(UNW_REG_IP)); // The PC might contain an invalid address if the unwind info is bad, so // directly accessing it could cause a SIGSEGV. if (!isReadableAddr(pc)) return false; const auto inst = *reinterpret_cast(pc); if (inst == 0x0a77 || inst == 0x0aad) { _info = {}; _info.start_ip = pc; _info.end_ip = pc + 2; _isSigReturn = true; return true; } return false; } template int UnwindCursor::stepThroughSigReturn(Registers_s390x &) { // Determine current SP. const pint_t sp = static_cast(this->getReg(UNW_REG_SP)); // According to the s390x ABI, the CFA is at (incoming) SP + 160. const pint_t cfa = sp + 160; // Determine current PC and instruction there (this must be either // a "svc __NR_sigreturn" or "svc __NR_rt_sigreturn"). const pint_t pc = static_cast(this->getReg(UNW_REG_IP)); const uint16_t inst = _addressSpace.get16(pc); // Find the addresses of the signo and sigcontext in the frame. pint_t pSigctx = 0; pint_t pSigno = 0; // "svc __NR_sigreturn" uses a non-RT signal trampoline frame. if (inst == 0x0a77) { // Layout of a non-RT signal trampoline frame, starting at the CFA: // - 8-byte signal mask // - 8-byte pointer to sigcontext, followed by signo // - 4-byte signo pSigctx = _addressSpace.get64(cfa + 8); pSigno = pSigctx + 344; } // "svc __NR_rt_sigreturn" uses a RT signal trampoline frame. if (inst == 0x0aad) { // Layout of a RT signal trampoline frame, starting at the CFA: // - 8-byte retcode (+ alignment) // - 128-byte siginfo struct (starts with signo) // - ucontext struct: // - 8-byte long (uc_flags) // - 8-byte pointer (uc_link) // - 24-byte stack_t // - 8 bytes of padding because sigcontext has 16-byte alignment // - sigcontext/mcontext_t pSigctx = cfa + 8 + 128 + 8 + 8 + 24 + 8; pSigno = cfa + 8; } assert(pSigctx != 0); assert(pSigno != 0); // Offsets from sigcontext to each register. const pint_t kOffsetPc = 8; const pint_t kOffsetGprs = 16; const pint_t kOffsetFprs = 216; // Restore all registers. for (int i = 0; i < 16; ++i) { uint64_t value = _addressSpace.get64(pSigctx + kOffsetGprs + static_cast(i * 8)); _registers.setRegister(UNW_S390X_R0 + i, value); } for (int i = 0; i < 16; ++i) { static const int fpr[16] = { UNW_S390X_F0, UNW_S390X_F1, UNW_S390X_F2, UNW_S390X_F3, UNW_S390X_F4, UNW_S390X_F5, UNW_S390X_F6, UNW_S390X_F7, UNW_S390X_F8, UNW_S390X_F9, UNW_S390X_F10, UNW_S390X_F11, UNW_S390X_F12, UNW_S390X_F13, UNW_S390X_F14, UNW_S390X_F15 }; double value = _addressSpace.getDouble(pSigctx + kOffsetFprs + static_cast(i * 8)); _registers.setFloatRegister(fpr[i], value); } _registers.setIP(_addressSpace.get64(pSigctx + kOffsetPc)); // SIGILL, SIGFPE and SIGTRAP are delivered with psw_addr // after the faulting instruction rather than before it. // Do not set _isSignalFrame in that case. uint32_t signo = _addressSpace.get32(pSigno); _isSignalFrame = (signo != 4 && signo != 5 && signo != 8); return UNW_STEP_SUCCESS; } #endif // defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && // defined(_LIBUNWIND_TARGET_S390X) #if defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN) template bool UnwindCursor::setInfoForSigReturn() { Dl_info dlinfo; const auto isSignalHandler = [&](pint_t addr) { if (!dladdr(reinterpret_cast(addr), &dlinfo)) return false; if (strcmp(dlinfo.dli_fname, "commpage")) return false; if (dlinfo.dli_sname == NULL || strcmp(dlinfo.dli_sname, "commpage_signal_handler")) return false; return true; }; pint_t pc = static_cast(this->getReg(UNW_REG_IP)); if (!isSignalHandler(pc)) return false; pint_t start = reinterpret_cast(dlinfo.dli_saddr); static size_t signalHandlerSize = 0; if (signalHandlerSize == 0) { size_t boundLow = 0; size_t boundHigh = static_cast(-1); area_info areaInfo; if (get_area_info(area_for(dlinfo.dli_saddr), &areaInfo) == B_OK) boundHigh = areaInfo.size; while (boundLow < boundHigh) { size_t boundMid = boundLow + ((boundHigh - boundLow) / 2); pint_t test = start + boundMid; if (test >= start && isSignalHandler(test)) boundLow = boundMid + 1; else boundHigh = boundMid; } signalHandlerSize = boundHigh; } _info = {}; _info.start_ip = start; _info.end_ip = start + signalHandlerSize; _isSigReturn = true; return true; } template int UnwindCursor::stepThroughSigReturn() { _isSignalFrame = true; #if defined(_LIBUNWIND_TARGET_X86_64) // Layout of the stack before function call: // - signal_frame_data // + siginfo_t (public struct, fairly stable) // + ucontext_t (public struct, fairly stable) // - mcontext_t -> Offset 0x70, this is what we want. // - frame->ip (8 bytes) // - frame->bp (8 bytes). Not written by the kernel, // but the signal handler has a "push %rbp" instruction. pint_t bp = this->getReg(UNW_X86_64_RBP); vregs *regs = (vregs *)(bp + 0x70); _registers.setRegister(UNW_REG_IP, regs->rip); _registers.setRegister(UNW_REG_SP, regs->rsp); _registers.setRegister(UNW_X86_64_RAX, regs->rax); _registers.setRegister(UNW_X86_64_RDX, regs->rdx); _registers.setRegister(UNW_X86_64_RCX, regs->rcx); _registers.setRegister(UNW_X86_64_RBX, regs->rbx); _registers.setRegister(UNW_X86_64_RSI, regs->rsi); _registers.setRegister(UNW_X86_64_RDI, regs->rdi); _registers.setRegister(UNW_X86_64_RBP, regs->rbp); _registers.setRegister(UNW_X86_64_R8, regs->r8); _registers.setRegister(UNW_X86_64_R9, regs->r9); _registers.setRegister(UNW_X86_64_R10, regs->r10); _registers.setRegister(UNW_X86_64_R11, regs->r11); _registers.setRegister(UNW_X86_64_R12, regs->r12); _registers.setRegister(UNW_X86_64_R13, regs->r13); _registers.setRegister(UNW_X86_64_R14, regs->r14); _registers.setRegister(UNW_X86_64_R15, regs->r15); // TODO: XMM #endif // defined(_LIBUNWIND_TARGET_X86_64) return UNW_STEP_SUCCESS; } #endif // defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN) template int UnwindCursor::step(bool stage2) { (void)stage2; // Bottom of stack is defined is when unwind info cannot be found. if (_unwindInfoMissing) return UNW_STEP_END; // Use unwinding info to modify register set as if function returned. int result; #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) || \ defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN) if (_isSigReturn) { result = this->stepThroughSigReturn(); } else #endif { #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) result = this->stepWithCompactEncoding(stage2); #elif defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) result = this->stepWithSEHData(); #elif defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) result = this->stepWithTBTableData(); #elif defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) result = this->stepWithDwarfFDE(stage2); #elif defined(_LIBUNWIND_ARM_EHABI) result = this->stepWithEHABI(); #else #error Need _LIBUNWIND_SUPPORT_COMPACT_UNWIND or \ _LIBUNWIND_SUPPORT_SEH_UNWIND or \ _LIBUNWIND_SUPPORT_DWARF_UNWIND or \ _LIBUNWIND_ARM_EHABI #endif } // update info based on new PC if (result == UNW_STEP_SUCCESS) { this->setInfoBasedOnIPRegister(true); if (_unwindInfoMissing) return UNW_STEP_END; } return result; } template void UnwindCursor::getInfo(unw_proc_info_t *info) { if (_unwindInfoMissing) memset(info, 0, sizeof(*info)); else *info = _info; } template bool UnwindCursor::getFunctionName(char *buf, size_t bufLen, unw_word_t *offset) { return _addressSpace.findFunctionName((pint_t)this->getReg(UNW_REG_IP), buf, bufLen, offset); } #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) template bool UnwindCursor::isReadableAddr(const pint_t addr) const { // We use SYS_rt_sigprocmask, inspired by Abseil's AddressIsReadable. const auto sigsetAddr = reinterpret_cast(addr); // We have to check that addr is nullptr because sigprocmask allows that // as an argument without failure. if (!sigsetAddr) return false; const auto saveErrno = errno; // We MUST use a raw syscall here, as wrappers may try to access // sigsetAddr which may cause a SIGSEGV. A raw syscall however is // safe. Additionally, we need to pass the kernel_sigset_size, which is // different from libc sizeof(sigset_t). For the majority of architectures, // it's 64 bits (_NSIG), and libc NSIG is _NSIG + 1. const auto kernelSigsetSize = NSIG / 8; [[maybe_unused]] const int Result = syscall( SYS_rt_sigprocmask, /*how=*/~0, sigsetAddr, nullptr, kernelSigsetSize); // Because our "how" is invalid, this syscall should always fail, and our // errno should always be EINVAL or an EFAULT. This relies on the Linux // kernel to check copy_from_user before checking if the "how" argument is // invalid. assert(Result == -1); assert(errno == EFAULT || errno == EINVAL); const auto readable = errno != EFAULT; errno = saveErrno; return readable; } #endif #if defined(_LIBUNWIND_USE_CET) || defined(_LIBUNWIND_USE_GCS) extern "C" void *__libunwind_shstk_get_registers(unw_cursor_t *cursor) { AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->get_registers(); } #endif } // namespace libunwind #endif // __UNWINDCURSOR_HPP__ ================================================ FILE: ThirdParty/libunwind/src/UnwindLevel1-gcc-ext.c ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Implements gcc extensions to the C++ ABI Exception Handling Level 1. // //===----------------------------------------------------------------------===// #include #include #include #include #include #include #include "config.h" #include "libunwind_ext.h" #include "libunwind.h" #include "Unwind-EHABI.h" #include "unwind.h" #if defined(_AIX) #include #endif #if defined(_LIBUNWIND_BUILD_ZERO_COST_APIS) #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) #define PRIVATE_1 private_[0] #elif defined(_LIBUNWIND_ARM_EHABI) #define PRIVATE_1 unwinder_cache.reserved1 #else #define PRIVATE_1 private_1 #endif /// Called by __cxa_rethrow(). _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_Resume_or_Rethrow(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API( "_Unwind_Resume_or_Rethrow(ex_obj=%p), private_1=%" PRIdPTR, (void *)exception_object, (intptr_t)exception_object->PRIVATE_1); // If this is non-forced and a stopping place was found, then this is a // re-throw. // Call _Unwind_RaiseException() as if this was a new exception if (exception_object->PRIVATE_1 == 0) { return _Unwind_RaiseException(exception_object); // Will return if there is no catch clause, so that __cxa_rethrow can call // std::terminate(). } // Call through to _Unwind_Resume() which distinguishes between forced and // regular exceptions. _Unwind_Resume(exception_object); _LIBUNWIND_ABORT("_Unwind_Resume_or_Rethrow() called _Unwind_RaiseException()" " which unexpectedly returned"); } /// Called by personality handler during phase 2 to get base address for data /// relative encodings. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *context) { _LIBUNWIND_TRACE_API("_Unwind_GetDataRelBase(context=%p)", (void *)context); #if defined(_AIX) return unw_get_data_rel_base((unw_cursor_t *)context); #else (void)context; _LIBUNWIND_ABORT("_Unwind_GetDataRelBase() not implemented"); #endif } /// Called by personality handler during phase 2 to get base address for text /// relative encodings. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *context) { (void)context; _LIBUNWIND_TRACE_API("_Unwind_GetTextRelBase(context=%p)", (void *)context); _LIBUNWIND_ABORT("_Unwind_GetTextRelBase() not implemented"); } /// Scans unwind information to find the function that contains the /// specified code address "pc". _LIBUNWIND_EXPORT void *_Unwind_FindEnclosingFunction(void *pc) { _LIBUNWIND_TRACE_API("_Unwind_FindEnclosingFunction(pc=%p)", pc); #if defined(_AIX) if (pc == NULL) return NULL; // Get the start address of the enclosing function from the function's // traceback table. uint32_t *p = (uint32_t *)pc; // Keep looking forward until a word of 0 is found. The traceback // table starts at the following word. while (*p) ++p; struct tbtable *TBTable = (struct tbtable *)(p + 1); // Get the address of the traceback table extension. p = (uint32_t *)&TBTable->tb_ext; // Skip field parminfo if it exists. if (TBTable->tb.fixedparms || TBTable->tb.floatparms) ++p; if (TBTable->tb.has_tboff) // *p contains the offset from the function start to traceback table. return (void *)((uintptr_t)TBTable - *p - sizeof(uint32_t)); return NULL; #else // This is slow, but works. // We create an unwind cursor then alter the IP to be pc unw_cursor_t cursor; unw_context_t uc; unw_proc_info_t info; __unw_getcontext(&uc); __unw_init_local(&cursor, &uc); __unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)(intptr_t)pc); if (__unw_get_proc_info(&cursor, &info) == UNW_ESUCCESS) return (void *)(intptr_t) info.start_ip; else return NULL; #endif } /// Walk every frame and call trace function at each one. If trace function /// returns anything other than _URC_NO_REASON, then walk is terminated. _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn callback, void *ref) { unw_cursor_t cursor; unw_context_t uc; __unw_getcontext(&uc); __unw_init_local(&cursor, &uc); _LIBUNWIND_TRACE_API("_Unwind_Backtrace(callback=%p)", (void *)(uintptr_t)callback); #if defined(_LIBUNWIND_ARM_EHABI) // Create a mock exception object for force unwinding. _Unwind_Exception ex; memset(&ex, '\0', sizeof(ex)); memcpy(&ex.exception_class, "CLNGUNW", sizeof(ex.exception_class)); #endif // walk each frame while (true) { _Unwind_Reason_Code result; #if !defined(_LIBUNWIND_ARM_EHABI) // ask libunwind to get next frame (skip over first frame which is // _Unwind_Backtrace()) if (__unw_step(&cursor) <= 0) { _LIBUNWIND_TRACE_UNWINDING(" _backtrace: ended because cursor reached " "bottom of stack, returning %d", _URC_END_OF_STACK); return _URC_END_OF_STACK; } #else // Get the information for this frame. unw_proc_info_t frameInfo; if (__unw_get_proc_info(&cursor, &frameInfo) != UNW_ESUCCESS) { return _URC_END_OF_STACK; } // Update the pr_cache in the mock exception object. uint32_t *unwindInfo = (uint32_t *)frameInfo.unwind_info; ex.pr_cache.fnstart = frameInfo.start_ip; ex.pr_cache.ehtp = (_Unwind_EHT_Header *) unwindInfo; ex.pr_cache.additional= frameInfo.flags; struct _Unwind_Context *context = (struct _Unwind_Context *)&cursor; // Get and call the personality function to unwind the frame. _Unwind_Personality_Fn handler = (_Unwind_Personality_Fn)frameInfo.handler; if (handler == NULL) { return _URC_END_OF_STACK; } if (handler(_US_VIRTUAL_UNWIND_FRAME | _US_FORCE_UNWIND, &ex, context) != _URC_CONTINUE_UNWIND) { return _URC_END_OF_STACK; } #endif // defined(_LIBUNWIND_ARM_EHABI) // debugging if (_LIBUNWIND_TRACING_UNWINDING) { char functionName[512]; unw_proc_info_t frame; unw_word_t offset; __unw_get_proc_name(&cursor, functionName, 512, &offset); __unw_get_proc_info(&cursor, &frame); _LIBUNWIND_TRACE_UNWINDING( " _backtrace: start_ip=0x%" PRIxPTR ", func=%s, lsda=0x%" PRIxPTR ", context=%p", frame.start_ip, functionName, frame.lsda, (void *)&cursor); } // call trace function with this frame result = (*callback)((struct _Unwind_Context *)(&cursor), ref); if (result != _URC_NO_REASON) { _LIBUNWIND_TRACE_UNWINDING( " _backtrace: ended because callback returned %d", result); return result; } } } /// Find DWARF unwind info for an address 'pc' in some function. _LIBUNWIND_EXPORT const void *_Unwind_Find_FDE(const void *pc, struct dwarf_eh_bases *bases) { // This is slow, but works. // We create an unwind cursor then alter the IP to be pc unw_cursor_t cursor; unw_context_t uc; unw_proc_info_t info; __unw_getcontext(&uc); __unw_init_local(&cursor, &uc); __unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)(intptr_t)pc); __unw_get_proc_info(&cursor, &info); bases->tbase = (uintptr_t)info.extra; bases->dbase = 0; // dbase not used on Mac OS X bases->func = (uintptr_t)info.start_ip; _LIBUNWIND_TRACE_API("_Unwind_Find_FDE(pc=%p) => %p", pc, (void *)(intptr_t) info.unwind_info); return (void *)(intptr_t) info.unwind_info; } /// Returns the CFA (call frame area, or stack pointer at start of function) /// for the current context. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetCFA(struct _Unwind_Context *context) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_word_t result; __unw_get_reg(cursor, UNW_REG_SP, &result); _LIBUNWIND_TRACE_API("_Unwind_GetCFA(context=%p) => 0x%" PRIxPTR, (void *)context, result); return (uintptr_t)result; } /// Called by personality handler during phase 2 to get instruction pointer. /// ipBefore is a boolean that says if IP is already adjusted to be the call /// site address. Normally IP is the return address. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context, int *ipBefore) { _LIBUNWIND_TRACE_API("_Unwind_GetIPInfo(context=%p)", (void *)context); int isSignalFrame = __unw_is_signal_frame((unw_cursor_t *)context); // Negative means some kind of error (probably UNW_ENOINFO), but we have no // good way to report that, and this maintains backward compatibility with the // implementation that hard-coded zero in every case, even signal frames. if (isSignalFrame <= 0) *ipBefore = 0; else *ipBefore = 1; return _Unwind_GetIP(context); } #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) /// Called by programs with dynamic code generators that want /// to register a dynamically generated FDE. /// This function has existed on Mac OS X since 10.4, but /// was broken until 10.6. _LIBUNWIND_EXPORT void __register_frame(const void *fde) { _LIBUNWIND_TRACE_API("__register_frame(%p)", fde); __unw_add_dynamic_fde((unw_word_t)(uintptr_t)fde); } /// Called by programs with dynamic code generators that want /// to unregister a dynamically generated FDE. /// This function has existed on Mac OS X since 10.4, but /// was broken until 10.6. _LIBUNWIND_EXPORT void __deregister_frame(const void *fde) { _LIBUNWIND_TRACE_API("__deregister_frame(%p)", fde); __unw_remove_dynamic_fde((unw_word_t)(uintptr_t)fde); } // The following register/deregister functions are gcc extensions. // They have existed on Mac OS X, but have never worked because Mac OS X // before 10.6 used keymgr to track known FDEs, but these functions // never got updated to use keymgr. // For now, we implement these as do-nothing functions to keep any existing // applications working. We also add the not in 10.6 symbol so that nwe // application won't be able to use them. #if defined(_LIBUNWIND_SUPPORT_FRAME_APIS) _LIBUNWIND_EXPORT void __register_frame_info_bases(const void *fde, void *ob, void *tb, void *db) { (void)fde; (void)ob; (void)tb; (void)db; _LIBUNWIND_TRACE_API("__register_frame_info_bases(%p,%p, %p, %p)", fde, ob, tb, db); // do nothing, this function never worked in Mac OS X } _LIBUNWIND_EXPORT void __register_frame_info(const void *fde, void *ob) { (void)fde; (void)ob; _LIBUNWIND_TRACE_API("__register_frame_info(%p, %p)", fde, ob); // do nothing, this function never worked in Mac OS X } _LIBUNWIND_EXPORT void __register_frame_info_table_bases(const void *fde, void *ob, void *tb, void *db) { (void)fde; (void)ob; (void)tb; (void)db; _LIBUNWIND_TRACE_API("__register_frame_info_table_bases" "(%p,%p, %p, %p)", fde, ob, tb, db); // do nothing, this function never worked in Mac OS X } _LIBUNWIND_EXPORT void __register_frame_info_table(const void *fde, void *ob) { (void)fde; (void)ob; _LIBUNWIND_TRACE_API("__register_frame_info_table(%p, %p)", fde, ob); // do nothing, this function never worked in Mac OS X } _LIBUNWIND_EXPORT void __register_frame_table(const void *fde) { (void)fde; _LIBUNWIND_TRACE_API("__register_frame_table(%p)", fde); // do nothing, this function never worked in Mac OS X } _LIBUNWIND_EXPORT void *__deregister_frame_info(const void *fde) { (void)fde; _LIBUNWIND_TRACE_API("__deregister_frame_info(%p)", fde); // do nothing, this function never worked in Mac OS X return NULL; } _LIBUNWIND_EXPORT void *__deregister_frame_info_bases(const void *fde) { (void)fde; _LIBUNWIND_TRACE_API("__deregister_frame_info_bases(%p)", fde); // do nothing, this function never worked in Mac OS X return NULL; } #endif // defined(_LIBUNWIND_SUPPORT_FRAME_APIS) #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) #endif // defined(_LIBUNWIND_BUILD_ZERO_COST_APIS) ================================================ FILE: ThirdParty/libunwind/src/UnwindLevel1.c ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Implements C++ ABI Exception Handling Level 1 as documented at: // https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html // using libunwind // //===----------------------------------------------------------------------===// // ARM EHABI does not specify _Unwind_{Get,Set}{GR,IP}(). Thus, we are // defining inline functions to delegate the function calls to // _Unwind_VRS_{Get,Set}(). However, some applications might declare the // function protetype directly (instead of including ), thus we need // to export these functions from libunwind.so as well. #define _LIBUNWIND_UNWIND_LEVEL1_EXTERNAL_LINKAGE 1 #include #include #include #include #include #include #include "config.h" #include "libunwind.h" #include "libunwind_ext.h" #include "shadow_stack_unwind.h" #include "unwind.h" #if !defined(_LIBUNWIND_ARM_EHABI) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ !defined(__wasm__) #ifndef _LIBUNWIND_SUPPORT_SEH_UNWIND // When shadow stack is enabled, a separate stack containing only return // addresses would be maintained. On function return, the return address would // be compared to the popped address from shadow stack to ensure the return // target is not tempered with. When unwinding, we're skipping the normal return // procedure for multiple frames and thus need to pop the return addresses of // the skipped frames from shadow stack to avoid triggering an exception (using // `_LIBUNWIND_POP_SHSTK_SSP()`). Also, some architectures, like the x86-family // CET, push the return adddresses onto shadow stack with common call // instructions, so for these architectures, normal function calls should be // avoided when invoking the `jumpto()` function. To do this, we use inline // assemblies to "goto" the `jumpto()` for these architectures. #if !defined(_LIBUNWIND_USE_CET) && !defined(_LIBUNWIND_USE_GCS) #define __unw_phase2_resume(cursor, fn) \ do { \ (void)fn; \ __unw_resume((cursor)); \ } while (0) #elif defined(_LIBUNWIND_TARGET_I386) #define __shstk_step_size (4) #define __unw_phase2_resume(cursor, fn) \ do { \ _LIBUNWIND_POP_SHSTK_SSP((fn)); \ void *shstkRegContext = __libunwind_shstk_get_registers((cursor)); \ void *shstkJumpAddress = __libunwind_shstk_get_jump_target(); \ __asm__ volatile("push %%edi\n\t" \ "sub $4, %%esp\n\t" \ "jmp *%%edx\n\t" ::"D"(shstkRegContext), \ "d"(shstkJumpAddress)); \ } while (0) #elif defined(_LIBUNWIND_TARGET_X86_64) #define __shstk_step_size (8) #define __unw_phase2_resume(cursor, fn) \ do { \ _LIBUNWIND_POP_SHSTK_SSP((fn)); \ void *shstkRegContext = __libunwind_shstk_get_registers((cursor)); \ void *shstkJumpAddress = __libunwind_shstk_get_jump_target(); \ __asm__ volatile("jmpq *%%rdx\n\t" ::"D"(shstkRegContext), \ "d"(shstkJumpAddress)); \ } while (0) #elif defined(_LIBUNWIND_TARGET_AARCH64) #define __shstk_step_size (8) #define __unw_phase2_resume(cursor, fn) \ do { \ _LIBUNWIND_POP_SHSTK_SSP((fn)); \ void *shstkRegContext = __libunwind_shstk_get_registers((cursor)); \ void *shstkJumpAddress = __libunwind_shstk_get_jump_target(); \ __asm__ volatile("mov x0, %0\n\t" \ "br %1\n\t" \ : \ : "r"(shstkRegContext), "r"(shstkJumpAddress) \ : "x0"); \ } while (0) #endif static _Unwind_Reason_Code unwind_phase1(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { __unw_init_local(cursor, uc); // Walk each frame looking for a place to stop. while (true) { // Ask libunwind to get next frame (skip over first which is // _Unwind_RaiseException). int stepResult = __unw_step(cursor); if (stepResult == 0) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): __unw_step() reached " "bottom => _URC_END_OF_STACK", (void *)exception_object); return _URC_END_OF_STACK; } else if (stepResult < 0) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): __unw_step failed => " "_URC_FATAL_PHASE1_ERROR", (void *)exception_object); return _URC_FATAL_PHASE1_ERROR; } // See if frame has code to run (has personality routine). unw_proc_info_t frameInfo; unw_word_t sp; if (__unw_get_proc_info(cursor, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): __unw_get_proc_info " "failed => _URC_FATAL_PHASE1_ERROR", (void *)exception_object); return _URC_FATAL_PHASE1_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(cursor, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; unw_word_t pc; __unw_get_reg(cursor, UNW_REG_IP, &pc); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): pc=0x%" PRIxPTR ", start_ip=0x%" PRIxPTR ", func=%s, lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR "", (void *)exception_object, pc, frameInfo.start_ip, functionName, frameInfo.lsda, frameInfo.handler); } #endif // If there is a personality routine, ask it if it will want to stop at // this frame. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(uintptr_t)(frameInfo.handler); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): calling personality function %p", (void *)exception_object, (void *)(uintptr_t)p); _Unwind_Reason_Code personalityResult = (*p)(1, _UA_SEARCH_PHASE, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(cursor)); switch (personalityResult) { case _URC_HANDLER_FOUND: // found a catch clause or locals that need destructing in this frame // stop search and remember stack pointer at the frame __unw_get_reg(cursor, UNW_REG_SP, &sp); exception_object->private_2 = (uintptr_t)sp; _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): _URC_HANDLER_FOUND", (void *)exception_object); return _URC_NO_REASON; case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): _URC_CONTINUE_UNWIND", (void *)exception_object); // continue unwinding break; default: // something went wrong _LIBUNWIND_TRACE_UNWINDING( "unwind_phase1(ex_obj=%p): _URC_FATAL_PHASE1_ERROR", (void *)exception_object); return _URC_FATAL_PHASE1_ERROR; } } } return _URC_NO_REASON; } extern int __unw_step_stage2(unw_cursor_t *); #if defined(_LIBUNWIND_USE_GCS) // Enable the GCS target feature to permit gcspop instructions to be used. __attribute__((target("+gcs"))) #endif static _Unwind_Reason_Code unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { __unw_init_local(cursor, uc); _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_obj=%p)", (void *)exception_object); // uc is initialized by __unw_getcontext in the parent frame. The first stack // frame walked is unwind_phase2. unsigned framesWalked = 1; #if defined(_LIBUNWIND_USE_CET) unsigned long shadowStackTop = _get_ssp(); #elif defined(_LIBUNWIND_USE_GCS) unsigned long shadowStackTop = 0; if (__chkfeat(_CHKFEAT_GCS)) shadowStackTop = (unsigned long)__gcspr(); #endif // Walk each frame until we reach where search phase said to stop. while (true) { // Ask libunwind to get next frame (skip over first which is // _Unwind_RaiseException). int stepResult = __unw_step_stage2(cursor); if (stepResult == 0) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_obj=%p): __unw_step_stage2() reached " "bottom => _URC_END_OF_STACK", (void *)exception_object); return _URC_END_OF_STACK; } else if (stepResult < 0) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_obj=%p): __unw_step_stage2 failed => " "_URC_FATAL_PHASE1_ERROR", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } // Get info about this frame. unw_word_t sp; unw_proc_info_t frameInfo; __unw_get_reg(cursor, UNW_REG_SP, &sp); if (__unw_get_proc_info(cursor, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_obj=%p): __unw_get_proc_info " "failed => _URC_FATAL_PHASE1_ERROR", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(cursor, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_obj=%p): start_ip=0x%" PRIxPTR ", func=%s, sp=0x%" PRIxPTR ", lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR, (void *)exception_object, frameInfo.start_ip, functionName, sp, frameInfo.lsda, frameInfo.handler); } #endif // In shadow stack enabled environment, we check return address stored in normal // stack against return address stored in shadow stack, if the 2 addresses don't // match, it means return address in normal stack has been corrupted, we return // _URC_FATAL_PHASE2_ERROR. #if defined(_LIBUNWIND_USE_CET) || defined(_LIBUNWIND_USE_GCS) if (shadowStackTop != 0) { unw_word_t retInNormalStack; __unw_get_reg(cursor, UNW_REG_IP, &retInNormalStack); unsigned long retInShadowStack = *(unsigned long *)(shadowStackTop + __shstk_step_size * framesWalked); if (retInNormalStack != retInShadowStack) return _URC_FATAL_PHASE2_ERROR; } #endif ++framesWalked; // If there is a personality routine, tell it we are unwinding. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(uintptr_t)(frameInfo.handler); _Unwind_Action action = _UA_CLEANUP_PHASE; if (sp == exception_object->private_2) { // Tell personality this was the frame it marked in phase 1. action = (_Unwind_Action)(_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME); } _Unwind_Reason_Code personalityResult = (*p)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(cursor)); switch (personalityResult) { case _URC_CONTINUE_UNWIND: // Continue unwinding _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_obj=%p): _URC_CONTINUE_UNWIND", (void *)exception_object); if (sp == exception_object->private_2) { // Phase 1 said we would stop at this frame, but we did not... _LIBUNWIND_ABORT("during phase1 personality function said it would " "stop here, but now in phase2 it did not stop here"); } break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2(ex_obj=%p): _URC_INSTALL_CONTEXT", (void *)exception_object); // Personality routine says to transfer control to landing pad. // We may get control back if landing pad calls _Unwind_Resume(). if (_LIBUNWIND_TRACING_UNWINDING) { unw_word_t pc; __unw_get_reg(cursor, UNW_REG_IP, &pc); __unw_get_reg(cursor, UNW_REG_SP, &sp); _LIBUNWIND_TRACE_UNWINDING("unwind_phase2(ex_obj=%p): re-entering " "user code with ip=0x%" PRIxPTR ", sp=0x%" PRIxPTR, (void *)exception_object, pc, sp); } __unw_phase2_resume(cursor, framesWalked); // __unw_phase2_resume() only returns if there was an error. return _URC_FATAL_PHASE2_ERROR; default: // Personality routine returned an unknown result code. _LIBUNWIND_DEBUG_LOG("personality function returned unknown result %d", personalityResult); return _URC_FATAL_PHASE2_ERROR; } } } // Clean up phase did not resume at the frame that the search phase // said it would... return _URC_FATAL_PHASE2_ERROR; } #if defined(_LIBUNWIND_USE_GCS) // Enable the GCS target feature to permit gcspop instructions to be used. __attribute__((target("+gcs"))) #endif static _Unwind_Reason_Code unwind_phase2_forced(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { __unw_init_local(cursor, uc); // uc is initialized by __unw_getcontext in the parent frame. The first stack // frame walked is unwind_phase2_forced. unsigned framesWalked = 1; // Walk each frame until we reach where search phase said to stop while (__unw_step_stage2(cursor) > 0) { // Update info about this frame. unw_proc_info_t frameInfo; if (__unw_get_proc_info(cursor, &frameInfo) != UNW_ESUCCESS) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_obj=%p): __unw_get_proc_info " "failed => _URC_END_OF_STACK", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } #ifndef NDEBUG // When tracing, print state information. if (_LIBUNWIND_TRACING_UNWINDING) { char functionBuf[512]; const char *functionName = functionBuf; unw_word_t offset; if ((__unw_get_proc_name(cursor, functionBuf, sizeof(functionBuf), &offset) != UNW_ESUCCESS) || (frameInfo.start_ip + offset > frameInfo.end_ip)) functionName = ".anonymous."; _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_obj=%p): start_ip=0x%" PRIxPTR ", func=%s, lsda=0x%" PRIxPTR ", personality=0x%" PRIxPTR, (void *)exception_object, frameInfo.start_ip, functionName, frameInfo.lsda, frameInfo.handler); } #endif // Call stop function at each frame. _Unwind_Action action = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE); _Unwind_Reason_Code stopResult = (*stop)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(cursor), stop_parameter); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_obj=%p): stop function returned %d", (void *)exception_object, stopResult); if (stopResult != _URC_NO_REASON) { _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_obj=%p): stopped by stop function", (void *)exception_object); return _URC_FATAL_PHASE2_ERROR; } ++framesWalked; // If there is a personality routine, tell it we are unwinding. if (frameInfo.handler != 0) { _Unwind_Personality_Fn p = (_Unwind_Personality_Fn)(intptr_t)(frameInfo.handler); _LIBUNWIND_TRACE_UNWINDING( "unwind_phase2_forced(ex_obj=%p): calling personality function %p", (void *)exception_object, (void *)(uintptr_t)p); _Unwind_Reason_Code personalityResult = (*p)(1, action, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(cursor)); switch (personalityResult) { case _URC_CONTINUE_UNWIND: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_obj=%p): " "personality returned " "_URC_CONTINUE_UNWIND", (void *)exception_object); // Destructors called, continue unwinding break; case _URC_INSTALL_CONTEXT: _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_obj=%p): " "personality returned " "_URC_INSTALL_CONTEXT", (void *)exception_object); // We may get control back if landing pad calls _Unwind_Resume(). __unw_phase2_resume(cursor, framesWalked); break; default: // Personality routine returned an unknown result code. _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_obj=%p): " "personality returned %d, " "_URC_FATAL_PHASE2_ERROR", (void *)exception_object, personalityResult); return _URC_FATAL_PHASE2_ERROR; } } } // Call stop function one last time and tell it we've reached the end // of the stack. _LIBUNWIND_TRACE_UNWINDING("unwind_phase2_forced(ex_obj=%p): calling stop " "function with _UA_END_OF_STACK", (void *)exception_object); _Unwind_Action lastAction = (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK); (*stop)(1, lastAction, exception_object->exception_class, exception_object, (struct _Unwind_Context *)(cursor), stop_parameter); // Clean up phase did not resume at the frame that the search phase said it // would. return _URC_FATAL_PHASE2_ERROR; } /// Called by __cxa_throw. Only returns if there is a fatal error. _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_RaiseException(ex_obj=%p)", (void *)exception_object); unw_context_t uc; unw_cursor_t cursor; __unw_getcontext(&uc); // Mark that this is a non-forced unwind, so _Unwind_Resume() // can do the right thing. exception_object->private_1 = 0; exception_object->private_2 = 0; // phase 1: the search phase _Unwind_Reason_Code phase1 = unwind_phase1(&uc, &cursor, exception_object); if (phase1 != _URC_NO_REASON) return phase1; // phase 2: the clean up phase return unwind_phase2(&uc, &cursor, exception_object); } /// When _Unwind_RaiseException() is in phase2, it hands control /// to the personality function at each frame. The personality /// may force a jump to a landing pad in that function, the landing /// pad code may then call _Unwind_Resume() to continue with the /// unwinding. Note: the call to _Unwind_Resume() is from compiler /// generated user code. All other _Unwind_* routines are called /// by the C++ runtime __cxa_* routines. /// /// Note: re-throwing an exception (as opposed to continuing the unwind) /// is implemented by having the code call __cxa_rethrow() which /// in turn calls _Unwind_Resume_or_Rethrow(). _LIBUNWIND_EXPORT void _Unwind_Resume(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_Resume(ex_obj=%p)", (void *)exception_object); unw_context_t uc; unw_cursor_t cursor; __unw_getcontext(&uc); if (exception_object->private_1 != 0) unwind_phase2_forced(&uc, &cursor, exception_object, (_Unwind_Stop_Fn) exception_object->private_1, (void *)exception_object->private_2); else unwind_phase2(&uc, &cursor, exception_object); // Clients assume _Unwind_Resume() does not return, so all we can do is abort. _LIBUNWIND_ABORT("_Unwind_Resume() can't return"); } /// Not used by C++. /// Unwinds stack, calling "stop" function at each frame. /// Could be used to implement longjmp(). _LIBUNWIND_EXPORT _Unwind_Reason_Code _Unwind_ForcedUnwind(_Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter) { _LIBUNWIND_TRACE_API("_Unwind_ForcedUnwind(ex_obj=%p, stop=%p)", (void *)exception_object, (void *)(uintptr_t)stop); unw_context_t uc; unw_cursor_t cursor; __unw_getcontext(&uc); // Mark that this is a forced unwind, so _Unwind_Resume() can do // the right thing. exception_object->private_1 = (uintptr_t) stop; exception_object->private_2 = (uintptr_t) stop_parameter; // do it return unwind_phase2_forced(&uc, &cursor, exception_object, stop, stop_parameter); } /// Called by personality handler during phase 2 to get LSDA for current frame. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_proc_info_t frameInfo; uintptr_t result = 0; if (__unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS) result = (uintptr_t)frameInfo.lsda; _LIBUNWIND_TRACE_API( "_Unwind_GetLanguageSpecificData(context=%p) => 0x%" PRIxPTR, (void *)context, result); #if !defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND) if (result != 0) { if (*((uint8_t *)result) != 0xFF) _LIBUNWIND_DEBUG_LOG("lsda at 0x%" PRIxPTR " does not start with 0xFF", result); } #endif return result; } /// Called by personality handler during phase 2 to find the start of the /// function. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_proc_info_t frameInfo; uintptr_t result = 0; if (__unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS) result = (uintptr_t)frameInfo.start_ip; _LIBUNWIND_TRACE_API("_Unwind_GetRegionStart(context=%p) => 0x%" PRIxPTR, (void *)context, result); return result; } #endif // !_LIBUNWIND_SUPPORT_SEH_UNWIND /// Called by personality handler during phase 2 if a foreign exception // is caught. _LIBUNWIND_EXPORT void _Unwind_DeleteException(_Unwind_Exception *exception_object) { _LIBUNWIND_TRACE_API("_Unwind_DeleteException(ex_obj=%p)", (void *)exception_object); if (exception_object->exception_cleanup != NULL) (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT, exception_object); } /// Called by personality handler during phase 2 to get register values. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_word_t result; __unw_get_reg(cursor, index, &result); _LIBUNWIND_TRACE_API("_Unwind_GetGR(context=%p, reg=%d) => 0x%" PRIxPTR, (void *)context, index, result); return (uintptr_t)result; } /// Called by personality handler during phase 2 to alter register values. _LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index, uintptr_t value) { _LIBUNWIND_TRACE_API("_Unwind_SetGR(context=%p, reg=%d, value=0x%0" PRIxPTR ")", (void *)context, index, value); unw_cursor_t *cursor = (unw_cursor_t *)context; __unw_set_reg(cursor, index, value); } /// Called by personality handler during phase 2 to get instruction pointer. _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) { unw_cursor_t *cursor = (unw_cursor_t *)context; unw_word_t result; __unw_get_reg(cursor, UNW_REG_IP, &result); _LIBUNWIND_TRACE_API("_Unwind_GetIP(context=%p) => 0x%" PRIxPTR, (void *)context, result); return (uintptr_t)result; } /// Called by personality handler during phase 2 to alter instruction pointer, /// such as setting where the landing pad is, so _Unwind_Resume() will /// start executing in the landing pad. _LIBUNWIND_EXPORT void _Unwind_SetIP(struct _Unwind_Context *context, uintptr_t value) { _LIBUNWIND_TRACE_API("_Unwind_SetIP(context=%p, value=0x%0" PRIxPTR ")", (void *)context, value); unw_cursor_t *cursor = (unw_cursor_t *)context; __unw_set_reg(cursor, UNW_REG_IP, value); } #endif // !defined(_LIBUNWIND_ARM_EHABI) && !defined(__USING_SJLJ_EXCEPTIONS__) ================================================ FILE: ThirdParty/libunwind/src/UnwindRegistersRestore.S ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "assembly.h" #define FROM_0_TO_15 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 #define FROM_16_TO_31 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 #define FROM_0_TO_31 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 #define FROM_32_TO_63 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 #if defined(_AIX) .toc #else .text #endif #if !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__wasm__) #if defined(__i386__) DEFINE_LIBUNWIND_FUNCTION(__libunwind_Registers_x86_jumpto) # # extern "C" void __libunwind_Registers_x86_jumpto(Registers_x86 *); # # On entry: # + + # +-----------------------+ # + thread_state pointer + # +-----------------------+ # + return address + # +-----------------------+ <-- SP # + + _LIBUNWIND_CET_ENDBR movl 4(%esp), %eax # set up eax and ret on new stack location movl 28(%eax), %edx # edx holds new stack pointer subl $8,%edx movl %edx, 28(%eax) movl 0(%eax), %ebx movl %ebx, 0(%edx) movl 40(%eax), %ebx movl %ebx, 4(%edx) # we now have ret and eax pushed onto where new stack will be # restore all registers movl 4(%eax), %ebx movl 8(%eax), %ecx movl 12(%eax), %edx movl 16(%eax), %edi movl 20(%eax), %esi movl 24(%eax), %ebp movl 28(%eax), %esp # skip ss # skip eflags pop %eax # eax was already pushed on new stack pop %ecx jmp *%ecx # skip cs # skip ds # skip es # skip fs # skip gs #elif defined(__x86_64__) && !defined(__arm64ec__) DEFINE_LIBUNWIND_FUNCTION(__libunwind_Registers_x86_64_jumpto) # # extern "C" void __libunwind_Registers_x86_64_jumpto(Registers_x86_64 *); # #if defined(_WIN64) # On entry, thread_state pointer is in rcx; move it into rdi # to share restore code below. Since this routine restores and # overwrites all registers, we can use the same registers for # pointers and temporaries as on unix even though win64 normally # mustn't clobber some of them. movq %rcx, %rdi #else # On entry, thread_state pointer is in rdi #endif _LIBUNWIND_CET_ENDBR movq 56(%rdi), %rax # rax holds new stack pointer subq $16, %rax movq %rax, 56(%rdi) movq 32(%rdi), %rbx # store new rdi on new stack movq %rbx, 0(%rax) movq 128(%rdi), %rbx # store new rip on new stack movq %rbx, 8(%rax) # restore all registers movq 0(%rdi), %rax movq 8(%rdi), %rbx movq 16(%rdi), %rcx movq 24(%rdi), %rdx # restore rdi later movq 40(%rdi), %rsi movq 48(%rdi), %rbp # restore rsp later movq 64(%rdi), %r8 movq 72(%rdi), %r9 movq 80(%rdi), %r10 movq 88(%rdi), %r11 movq 96(%rdi), %r12 movq 104(%rdi), %r13 movq 112(%rdi), %r14 movq 120(%rdi), %r15 # skip rflags # skip cs # skip fs # skip gs #if defined(_WIN64) movdqu 176(%rdi),%xmm0 movdqu 192(%rdi),%xmm1 movdqu 208(%rdi),%xmm2 movdqu 224(%rdi),%xmm3 movdqu 240(%rdi),%xmm4 movdqu 256(%rdi),%xmm5 movdqu 272(%rdi),%xmm6 movdqu 288(%rdi),%xmm7 movdqu 304(%rdi),%xmm8 movdqu 320(%rdi),%xmm9 movdqu 336(%rdi),%xmm10 movdqu 352(%rdi),%xmm11 movdqu 368(%rdi),%xmm12 movdqu 384(%rdi),%xmm13 movdqu 400(%rdi),%xmm14 movdqu 416(%rdi),%xmm15 #endif movq 56(%rdi), %rsp # cut back rsp to new location pop %rdi # rdi was saved here earlier pop %rcx jmpq *%rcx #elif defined(__powerpc64__) DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind15Registers_ppc646jumptoEv) // // void libunwind::Registers_ppc64::jumpto() // // On entry: // thread_state pointer is in r3 // // load register (GPR) #define PPC64_LR(n) \ ld n, (8 * (n + 2))(3) // restore integral registers // skip r0 for now // skip r1 for now PPC64_LR(2) // skip r3 for now // skip r4 for now // skip r5 for now PPC64_LR(6) PPC64_LR(7) PPC64_LR(8) PPC64_LR(9) PPC64_LR(10) PPC64_LR(11) PPC64_LR(12) PPC64_LR(13) PPC64_LR(14) PPC64_LR(15) PPC64_LR(16) PPC64_LR(17) PPC64_LR(18) PPC64_LR(19) PPC64_LR(20) PPC64_LR(21) PPC64_LR(22) PPC64_LR(23) PPC64_LR(24) PPC64_LR(25) PPC64_LR(26) PPC64_LR(27) PPC64_LR(28) PPC64_LR(29) PPC64_LR(30) PPC64_LR(31) #if defined(__VSX__) // restore VS registers // (note that this also restores floating point registers and V registers, // because part of VS is mapped to these registers) addi 4, 3, PPC64_OFFS_FP // load VS register #ifdef __LITTLE_ENDIAN__ // For little-endian targets, we need a swap since lxvd2x will load the register // in the incorrect doubleword order. // FIXME: when supporting targets older than Power9 on LE is no longer required, // this can be changed to simply `lxv n, (16 * n)(4)`. #define PPC64_LVS(n) \ lxvd2x n, 0, 4 ;\ xxswapd n, n ;\ addi 4, 4, 16 #else #define PPC64_LVS(n) \ lxvd2x n, 0, 4 ;\ addi 4, 4, 16 #endif // restore the first 32 VS regs (and also all floating point regs) PPC64_LVS(0) PPC64_LVS(1) PPC64_LVS(2) PPC64_LVS(3) PPC64_LVS(4) PPC64_LVS(5) PPC64_LVS(6) PPC64_LVS(7) PPC64_LVS(8) PPC64_LVS(9) PPC64_LVS(10) PPC64_LVS(11) PPC64_LVS(12) PPC64_LVS(13) PPC64_LVS(14) PPC64_LVS(15) PPC64_LVS(16) PPC64_LVS(17) PPC64_LVS(18) PPC64_LVS(19) PPC64_LVS(20) PPC64_LVS(21) PPC64_LVS(22) PPC64_LVS(23) PPC64_LVS(24) PPC64_LVS(25) PPC64_LVS(26) PPC64_LVS(27) PPC64_LVS(28) PPC64_LVS(29) PPC64_LVS(30) PPC64_LVS(31) #ifdef __LITTLE_ENDIAN__ #define PPC64_CLVS_RESTORE(n) \ addi 4, 3, PPC64_OFFS_FP + n * 16 ;\ lxvd2x n, 0, 4 ;\ xxswapd n, n #else #define PPC64_CLVS_RESTORE(n) \ addi 4, 3, PPC64_OFFS_FP + n * 16 ;\ lxvd2x n, 0, 4 #endif #if !defined(_AIX) // use VRSAVE to conditionally restore the remaining VS regs, that are // where the V regs are mapped. In the AIX ABI, VRSAVE is not used. ld 5, PPC64_OFFS_VRSAVE(3) // test VRsave cmpwi 5, 0 beq Lnovec // conditionally load VS #define PPC64_CLVSl(n) \ andis. 0, 5, (1 PPC_LEFT_SHIFT(47-n)) ;\ beq Ldone##n ;\ PPC64_CLVS_RESTORE(n) ;\ Ldone##n: #define PPC64_CLVSh(n) \ andi. 0, 5, (1 PPC_LEFT_SHIFT(63-n)) ;\ beq Ldone##n ;\ PPC64_CLVS_RESTORE(n) ;\ Ldone##n: #else #define PPC64_CLVSl(n) PPC64_CLVS_RESTORE(n) #define PPC64_CLVSh(n) PPC64_CLVS_RESTORE(n) #endif // !defined(_AIX) PPC64_CLVSl(32) PPC64_CLVSl(33) PPC64_CLVSl(34) PPC64_CLVSl(35) PPC64_CLVSl(36) PPC64_CLVSl(37) PPC64_CLVSl(38) PPC64_CLVSl(39) PPC64_CLVSl(40) PPC64_CLVSl(41) PPC64_CLVSl(42) PPC64_CLVSl(43) PPC64_CLVSl(44) PPC64_CLVSl(45) PPC64_CLVSl(46) PPC64_CLVSl(47) PPC64_CLVSh(48) PPC64_CLVSh(49) PPC64_CLVSh(50) PPC64_CLVSh(51) PPC64_CLVSh(52) PPC64_CLVSh(53) PPC64_CLVSh(54) PPC64_CLVSh(55) PPC64_CLVSh(56) PPC64_CLVSh(57) PPC64_CLVSh(58) PPC64_CLVSh(59) PPC64_CLVSh(60) PPC64_CLVSh(61) PPC64_CLVSh(62) PPC64_CLVSh(63) #else // load FP register #define PPC64_LF(n) \ lfd n, (PPC64_OFFS_FP + n * 16)(3) // restore float registers PPC64_LF(0) PPC64_LF(1) PPC64_LF(2) PPC64_LF(3) PPC64_LF(4) PPC64_LF(5) PPC64_LF(6) PPC64_LF(7) PPC64_LF(8) PPC64_LF(9) PPC64_LF(10) PPC64_LF(11) PPC64_LF(12) PPC64_LF(13) PPC64_LF(14) PPC64_LF(15) PPC64_LF(16) PPC64_LF(17) PPC64_LF(18) PPC64_LF(19) PPC64_LF(20) PPC64_LF(21) PPC64_LF(22) PPC64_LF(23) PPC64_LF(24) PPC64_LF(25) PPC64_LF(26) PPC64_LF(27) PPC64_LF(28) PPC64_LF(29) PPC64_LF(30) PPC64_LF(31) #if defined(__ALTIVEC__) #define PPC64_CLV_UNALIGNED_RESTORE(n) \ ld 0, (PPC64_OFFS_V + n * 16)(3) ;\ std 0, 0(4) ;\ ld 0, (PPC64_OFFS_V + n * 16 + 8)(3) ;\ std 0, 8(4) ;\ lvx n, 0, 4 #if !defined(_AIX) // restore vector registers if any are in use. In the AIX ABI, VRSAVE is // not used. ld 5, PPC64_OFFS_VRSAVE(3) // test VRsave cmpwi 5, 0 beq Lnovec #define PPC64_CLV_UNALIGNEDl(n) \ andis. 0, 5, (1 PPC_LEFT_SHIFT(15-n)) ;\ beq Ldone##n ;\ PPC64_CLV_UNALIGNED_RESTORE(n) ;\ Ldone ## n: #define PPC64_CLV_UNALIGNEDh(n) \ andi. 0, 5, (1 PPC_LEFT_SHIFT(31-n)) ;\ beq Ldone##n ;\ PPC64_CLV_UNALIGNED_RESTORE(n) ;\ Ldone ## n: #else #define PPC64_CLV_UNALIGNEDl(n) PPC64_CLV_UNALIGNED_RESTORE(n) #define PPC64_CLV_UNALIGNEDh(n) PPC64_CLV_UNALIGNED_RESTORE(n) #endif // !defined(_AIX) subi 4, 1, 16 // r4 is now a 16-byte aligned pointer into the red zone // the _vectorScalarRegisters may not be 16-byte aligned // so copy via red zone temp buffer PPC64_CLV_UNALIGNEDl(0) PPC64_CLV_UNALIGNEDl(1) PPC64_CLV_UNALIGNEDl(2) PPC64_CLV_UNALIGNEDl(3) PPC64_CLV_UNALIGNEDl(4) PPC64_CLV_UNALIGNEDl(5) PPC64_CLV_UNALIGNEDl(6) PPC64_CLV_UNALIGNEDl(7) PPC64_CLV_UNALIGNEDl(8) PPC64_CLV_UNALIGNEDl(9) PPC64_CLV_UNALIGNEDl(10) PPC64_CLV_UNALIGNEDl(11) PPC64_CLV_UNALIGNEDl(12) PPC64_CLV_UNALIGNEDl(13) PPC64_CLV_UNALIGNEDl(14) PPC64_CLV_UNALIGNEDl(15) PPC64_CLV_UNALIGNEDh(16) PPC64_CLV_UNALIGNEDh(17) PPC64_CLV_UNALIGNEDh(18) PPC64_CLV_UNALIGNEDh(19) PPC64_CLV_UNALIGNEDh(20) PPC64_CLV_UNALIGNEDh(21) PPC64_CLV_UNALIGNEDh(22) PPC64_CLV_UNALIGNEDh(23) PPC64_CLV_UNALIGNEDh(24) PPC64_CLV_UNALIGNEDh(25) PPC64_CLV_UNALIGNEDh(26) PPC64_CLV_UNALIGNEDh(27) PPC64_CLV_UNALIGNEDh(28) PPC64_CLV_UNALIGNEDh(29) PPC64_CLV_UNALIGNEDh(30) PPC64_CLV_UNALIGNEDh(31) #endif #endif Lnovec: ld 0, PPC64_OFFS_CR(3) mtcr 0 ld 0, PPC64_OFFS_SRR0(3) mtctr 0 #if defined(_AIX) // After setting GPR1 to a higher address, AIX wipes out the original // stack space below that address invalidated by the new GPR1 value. Use // GPR0 to save the value of GPR3 in the context before it is wiped out. // This compromises the content of GPR0 which is a volatile register. ld 0, (8 * (3 + 2))(3) #else PPC64_LR(0) #endif PPC64_LR(5) PPC64_LR(4) PPC64_LR(1) #if defined(_AIX) mr 3, 0 #else PPC64_LR(3) #endif bctr #elif defined(__powerpc__) DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv) // // void libunwind::Registers_ppc::jumpto() // // On entry: // thread_state pointer is in r3 // // restore integral registers // skip r0 for now // skip r1 for now lwz 2, 16(3) // skip r3 for now // skip r4 for now // skip r5 for now lwz 6, 32(3) lwz 7, 36(3) lwz 8, 40(3) lwz 9, 44(3) lwz 10, 48(3) lwz 11, 52(3) lwz 12, 56(3) lwz 13, 60(3) lwz 14, 64(3) lwz 15, 68(3) lwz 16, 72(3) lwz 17, 76(3) lwz 18, 80(3) lwz 19, 84(3) lwz 20, 88(3) lwz 21, 92(3) lwz 22, 96(3) lwz 23,100(3) lwz 24,104(3) lwz 25,108(3) lwz 26,112(3) lwz 27,116(3) lwz 28,120(3) lwz 29,124(3) lwz 30,128(3) lwz 31,132(3) #ifndef __NO_FPRS__ // restore float registers lfd 0, 160(3) lfd 1, 168(3) lfd 2, 176(3) lfd 3, 184(3) lfd 4, 192(3) lfd 5, 200(3) lfd 6, 208(3) lfd 7, 216(3) lfd 8, 224(3) lfd 9, 232(3) lfd 10,240(3) lfd 11,248(3) lfd 12,256(3) lfd 13,264(3) lfd 14,272(3) lfd 15,280(3) lfd 16,288(3) lfd 17,296(3) lfd 18,304(3) lfd 19,312(3) lfd 20,320(3) lfd 21,328(3) lfd 22,336(3) lfd 23,344(3) lfd 24,352(3) lfd 25,360(3) lfd 26,368(3) lfd 27,376(3) lfd 28,384(3) lfd 29,392(3) lfd 30,400(3) lfd 31,408(3) #endif #if defined(__ALTIVEC__) #define LOAD_VECTOR_RESTORE(_index) \ lwz 0, 424+_index*16(3) SEPARATOR \ stw 0, 0(4) SEPARATOR \ lwz 0, 424+_index*16+4(3) SEPARATOR \ stw 0, 4(4) SEPARATOR \ lwz 0, 424+_index*16+8(3) SEPARATOR \ stw 0, 8(4) SEPARATOR \ lwz 0, 424+_index*16+12(3) SEPARATOR \ stw 0, 12(4) SEPARATOR \ lvx _index, 0, 4 #if !defined(_AIX) // restore vector registers if any are in use. In the AIX ABI, VRSAVE // is not used. lwz 5, 156(3) // test VRsave cmpwi 5, 0 beq Lnovec #define LOAD_VECTOR_UNALIGNEDl(_index) \ andis. 0, 5, (1 PPC_LEFT_SHIFT(15-_index)) SEPARATOR \ beq Ldone ## _index SEPARATOR \ LOAD_VECTOR_RESTORE(_index) SEPARATOR \ Ldone ## _index: #define LOAD_VECTOR_UNALIGNEDh(_index) \ andi. 0, 5, (1 PPC_LEFT_SHIFT(31-_index)) SEPARATOR \ beq Ldone ## _index SEPARATOR \ LOAD_VECTOR_RESTORE(_index) SEPARATOR \ Ldone ## _index: #else #define LOAD_VECTOR_UNALIGNEDl(_index) LOAD_VECTOR_RESTORE(_index) #define LOAD_VECTOR_UNALIGNEDh(_index) LOAD_VECTOR_RESTORE(_index) #endif // !defined(_AIX) subi 4, 1, 16 rlwinm 4, 4, 0, 0, 27 // mask low 4-bits // r4 is now a 16-byte aligned pointer into the red zone // the _vectorRegisters may not be 16-byte aligned so copy via red zone temp buffer LOAD_VECTOR_UNALIGNEDl(0) LOAD_VECTOR_UNALIGNEDl(1) LOAD_VECTOR_UNALIGNEDl(2) LOAD_VECTOR_UNALIGNEDl(3) LOAD_VECTOR_UNALIGNEDl(4) LOAD_VECTOR_UNALIGNEDl(5) LOAD_VECTOR_UNALIGNEDl(6) LOAD_VECTOR_UNALIGNEDl(7) LOAD_VECTOR_UNALIGNEDl(8) LOAD_VECTOR_UNALIGNEDl(9) LOAD_VECTOR_UNALIGNEDl(10) LOAD_VECTOR_UNALIGNEDl(11) LOAD_VECTOR_UNALIGNEDl(12) LOAD_VECTOR_UNALIGNEDl(13) LOAD_VECTOR_UNALIGNEDl(14) LOAD_VECTOR_UNALIGNEDl(15) LOAD_VECTOR_UNALIGNEDh(16) LOAD_VECTOR_UNALIGNEDh(17) LOAD_VECTOR_UNALIGNEDh(18) LOAD_VECTOR_UNALIGNEDh(19) LOAD_VECTOR_UNALIGNEDh(20) LOAD_VECTOR_UNALIGNEDh(21) LOAD_VECTOR_UNALIGNEDh(22) LOAD_VECTOR_UNALIGNEDh(23) LOAD_VECTOR_UNALIGNEDh(24) LOAD_VECTOR_UNALIGNEDh(25) LOAD_VECTOR_UNALIGNEDh(26) LOAD_VECTOR_UNALIGNEDh(27) LOAD_VECTOR_UNALIGNEDh(28) LOAD_VECTOR_UNALIGNEDh(29) LOAD_VECTOR_UNALIGNEDh(30) LOAD_VECTOR_UNALIGNEDh(31) #endif Lnovec: lwz 0, 136(3) // __cr mtcr 0 lwz 0, 148(3) // __ctr mtctr 0 lwz 0, 0(3) // __ssr0 mtctr 0 lwz 0, 8(3) // do r0 now lwz 5, 28(3) // do r5 now lwz 4, 24(3) // do r4 now lwz 1, 12(3) // do sp now lwz 3, 20(3) // do r3 last bctr #elif defined(__aarch64__) #if defined(__ARM_FEATURE_GCS_DEFAULT) .arch_extension gcs #endif // // extern "C" void __libunwind_Registers_arm64_jumpto(Registers_arm64 *); // // On entry: // thread_state pointer is in x0 // .p2align 2 DEFINE_LIBUNWIND_FUNCTION(__libunwind_Registers_arm64_jumpto) // skip restore of x0,x1 for now ldp x2, x3, [x0, #0x010] ldp x4, x5, [x0, #0x020] ldp x6, x7, [x0, #0x030] ldp x8, x9, [x0, #0x040] ldp x10,x11, [x0, #0x050] ldp x12,x13, [x0, #0x060] ldp x14,x15, [x0, #0x070] // x16 and x17 were clobbered by the call into the unwinder, so no point in // restoring them. ldp x18,x19, [x0, #0x090] ldp x20,x21, [x0, #0x0A0] ldp x22,x23, [x0, #0x0B0] ldp x24,x25, [x0, #0x0C0] ldp x26,x27, [x0, #0x0D0] ldp x28,x29, [x0, #0x0E0] ldr x30, [x0, #0x100] // restore pc into lr #if defined(__ARM_FP) && __ARM_FP != 0 ldp d0, d1, [x0, #0x110] ldp d2, d3, [x0, #0x120] ldp d4, d5, [x0, #0x130] ldp d6, d7, [x0, #0x140] ldp d8, d9, [x0, #0x150] ldp d10,d11, [x0, #0x160] ldp d12,d13, [x0, #0x170] ldp d14,d15, [x0, #0x180] ldp d16,d17, [x0, #0x190] ldp d18,d19, [x0, #0x1A0] ldp d20,d21, [x0, #0x1B0] ldp d22,d23, [x0, #0x1C0] ldp d24,d25, [x0, #0x1D0] ldp d26,d27, [x0, #0x1E0] ldp d28,d29, [x0, #0x1F0] ldr d30, [x0, #0x200] ldr d31, [x0, #0x208] #endif // Finally, restore sp. This must be done after the last read from the // context struct, because it is allocated on the stack, and an exception // could clobber the de-allocated portion of the stack after sp has been // restored. ldr x16, [x0, #0x0F8] ldp x0, x1, [x0, #0x000] // restore x0,x1 mov sp,x16 // restore sp #if defined(__ARM_FEATURE_GCS_DEFAULT) // If GCS is enabled we need to push the address we're returning to onto the // GCS stack. We can't just return using br, as there won't be a BTI landing // pad instruction at the destination. mov x16, #1 chkfeat x16 cbnz x16, Lnogcs gcspushm x30 Lnogcs: #endif ret x30 // jump to pc #elif defined(__arm__) && !defined(__APPLE__) #if !defined(__ARM_ARCH_ISA_ARM) #if (__ARM_ARCH_ISA_THUMB == 2) .syntax unified #endif .thumb #endif @ @ void libunwind::Registers_arm::restoreCoreAndJumpTo() @ @ On entry: @ thread_state pointer is in r0 @ .p2align 2 DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm20restoreCoreAndJumpToEv) #if !defined(__ARM_ARCH_ISA_ARM) && __ARM_ARCH_ISA_THUMB == 1 @ r8-r11: ldm into r1-r4, then mov to r8-r11 adds r0, #0x20 ldm r0!, {r1-r4} subs r0, #0x30 mov r8, r1 mov r9, r2 mov r10, r3 mov r11, r4 @ r12 does not need loading, it it the intra-procedure-call scratch register ldr r2, [r0, #0x34] ldr r3, [r0, #0x3c] mov sp, r2 mov lr, r3 @ restore pc into lr ldm r0, {r0-r7} #else @ Use lr as base so that r0 can be restored. mov lr, r0 @ 32bit thumb-2 restrictions for ldm: @ . the sp (r13) cannot be in the list @ . the pc (r15) and lr (r14) cannot both be in the list in an LDM instruction ldm lr, {r0-r12} ldr sp, [lr, #52] ldr lr, [lr, #60] @ restore pc into lr #endif #if defined(__ARM_FEATURE_BTI_DEFAULT) && !defined(__ARM_ARCH_ISA_ARM) // 'bx' is not BTI setting when used with lr, therefore r12 is used instead mov r12, lr JMP(r12) #else JMP(lr) #endif @ @ static void libunwind::Registers_arm::restoreVFPWithFLDMD(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .fpu vfpv3-d16 #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm19restoreVFPWithFLDMDEPv) @ VFP and iwMMX instructions are only available when compiling with the flags @ that enable them. We do not want to do that in the library (because we do not @ want the compiler to generate instructions that access those) but this is @ only accessed if the personality routine needs these registers. Use of @ these registers implies they are, actually, available on the target, so @ it's ok to execute. @ So, generate the instruction using the corresponding coprocessor mnemonic. vldmia r0, {d0-d15} JMP(lr) @ @ static void libunwind::Registers_arm::restoreVFPWithFLDMX(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .fpu vfpv3-d16 #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm19restoreVFPWithFLDMXEPv) vldmia r0, {d0-d15} @ fldmiax is deprecated in ARMv7+ and now behaves like vldmia JMP(lr) @ @ static void libunwind::Registers_arm::restoreVFPv3(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .fpu vfpv3 #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm12restoreVFPv3EPv) vldmia r0, {d16-d31} JMP(lr) #if defined(__ARM_WMMX) @ @ static void libunwind::Registers_arm::restoreiWMMX(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .arch armv5te #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm12restoreiWMMXEPv) ldcl p1, cr0, [r0], #8 @ wldrd wR0, [r0], #8 ldcl p1, cr1, [r0], #8 @ wldrd wR1, [r0], #8 ldcl p1, cr2, [r0], #8 @ wldrd wR2, [r0], #8 ldcl p1, cr3, [r0], #8 @ wldrd wR3, [r0], #8 ldcl p1, cr4, [r0], #8 @ wldrd wR4, [r0], #8 ldcl p1, cr5, [r0], #8 @ wldrd wR5, [r0], #8 ldcl p1, cr6, [r0], #8 @ wldrd wR6, [r0], #8 ldcl p1, cr7, [r0], #8 @ wldrd wR7, [r0], #8 ldcl p1, cr8, [r0], #8 @ wldrd wR8, [r0], #8 ldcl p1, cr9, [r0], #8 @ wldrd wR9, [r0], #8 ldcl p1, cr10, [r0], #8 @ wldrd wR10, [r0], #8 ldcl p1, cr11, [r0], #8 @ wldrd wR11, [r0], #8 ldcl p1, cr12, [r0], #8 @ wldrd wR12, [r0], #8 ldcl p1, cr13, [r0], #8 @ wldrd wR13, [r0], #8 ldcl p1, cr14, [r0], #8 @ wldrd wR14, [r0], #8 ldcl p1, cr15, [r0], #8 @ wldrd wR15, [r0], #8 JMP(lr) @ @ static void libunwind::Registers_arm::restoreiWMMXControl(unw_uint32_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .arch armv5te #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm19restoreiWMMXControlEPj) ldc2 p1, cr8, [r0], #4 @ wldrw wCGR0, [r0], #4 ldc2 p1, cr9, [r0], #4 @ wldrw wCGR1, [r0], #4 ldc2 p1, cr10, [r0], #4 @ wldrw wCGR2, [r0], #4 ldc2 p1, cr11, [r0], #4 @ wldrw wCGR3, [r0], #4 JMP(lr) #endif #elif defined(__or1k__) DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind14Registers_or1k6jumptoEv) # # void libunwind::Registers_or1k::jumpto() # # On entry: # thread_state pointer is in r3 # # restore integral registers l.lwz r0, 0(r3) l.lwz r1, 4(r3) l.lwz r2, 8(r3) # skip r3 for now l.lwz r4, 16(r3) l.lwz r5, 20(r3) l.lwz r6, 24(r3) l.lwz r7, 28(r3) l.lwz r8, 32(r3) # skip r9 l.lwz r10, 40(r3) l.lwz r11, 44(r3) l.lwz r12, 48(r3) l.lwz r13, 52(r3) l.lwz r14, 56(r3) l.lwz r15, 60(r3) l.lwz r16, 64(r3) l.lwz r17, 68(r3) l.lwz r18, 72(r3) l.lwz r19, 76(r3) l.lwz r20, 80(r3) l.lwz r21, 84(r3) l.lwz r22, 88(r3) l.lwz r23, 92(r3) l.lwz r24, 96(r3) l.lwz r25,100(r3) l.lwz r26,104(r3) l.lwz r27,108(r3) l.lwz r28,112(r3) l.lwz r29,116(r3) l.lwz r30,120(r3) l.lwz r31,124(r3) # load new pc into ra l.lwz r9, 128(r3) # at last, restore r3 l.lwz r3, 12(r3) # jump to pc l.jr r9 l.nop #elif defined(__hexagon__) # On entry: # thread_state pointer is in r2 DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind17Registers_hexagon6jumptoEv) # # void libunwind::Registers_hexagon::jumpto() # r8 = memw(r0+#32) r9 = memw(r0+#36) r10 = memw(r0+#40) r11 = memw(r0+#44) r12 = memw(r0+#48) r13 = memw(r0+#52) r14 = memw(r0+#56) r15 = memw(r0+#60) r16 = memw(r0+#64) r17 = memw(r0+#68) r18 = memw(r0+#72) r19 = memw(r0+#76) r20 = memw(r0+#80) r21 = memw(r0+#84) r22 = memw(r0+#88) r23 = memw(r0+#92) r24 = memw(r0+#96) r25 = memw(r0+#100) r26 = memw(r0+#104) r27 = memw(r0+#108) r28 = memw(r0+#112) r29 = memw(r0+#116) r30 = memw(r0+#120) r31 = memw(r0+#132) r1 = memw(r0+#128) c4 = r1 // Predicate register r1 = memw(r0+#4) r0 = memw(r0) jumpr r31 #elif defined(__mips__) && defined(_ABIO32) && _MIPS_SIM == _ABIO32 // // void libunwind::Registers_mips_o32::jumpto() // // On entry: // thread state pointer is in a0 ($4) // DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind18Registers_mips_o326jumptoEv) .set push .set noat .set noreorder .set nomacro #ifdef __mips_hard_float #if __mips_fpr != 64 ldc1 $f0, (4 * 36 + 8 * 0)($4) ldc1 $f2, (4 * 36 + 8 * 2)($4) ldc1 $f4, (4 * 36 + 8 * 4)($4) ldc1 $f6, (4 * 36 + 8 * 6)($4) ldc1 $f8, (4 * 36 + 8 * 8)($4) ldc1 $f10, (4 * 36 + 8 * 10)($4) ldc1 $f12, (4 * 36 + 8 * 12)($4) ldc1 $f14, (4 * 36 + 8 * 14)($4) ldc1 $f16, (4 * 36 + 8 * 16)($4) ldc1 $f18, (4 * 36 + 8 * 18)($4) ldc1 $f20, (4 * 36 + 8 * 20)($4) ldc1 $f22, (4 * 36 + 8 * 22)($4) ldc1 $f24, (4 * 36 + 8 * 24)($4) ldc1 $f26, (4 * 36 + 8 * 26)($4) ldc1 $f28, (4 * 36 + 8 * 28)($4) ldc1 $f30, (4 * 36 + 8 * 30)($4) #else ldc1 $f0, (4 * 36 + 8 * 0)($4) ldc1 $f1, (4 * 36 + 8 * 1)($4) ldc1 $f2, (4 * 36 + 8 * 2)($4) ldc1 $f3, (4 * 36 + 8 * 3)($4) ldc1 $f4, (4 * 36 + 8 * 4)($4) ldc1 $f5, (4 * 36 + 8 * 5)($4) ldc1 $f6, (4 * 36 + 8 * 6)($4) ldc1 $f7, (4 * 36 + 8 * 7)($4) ldc1 $f8, (4 * 36 + 8 * 8)($4) ldc1 $f9, (4 * 36 + 8 * 9)($4) ldc1 $f10, (4 * 36 + 8 * 10)($4) ldc1 $f11, (4 * 36 + 8 * 11)($4) ldc1 $f12, (4 * 36 + 8 * 12)($4) ldc1 $f13, (4 * 36 + 8 * 13)($4) ldc1 $f14, (4 * 36 + 8 * 14)($4) ldc1 $f15, (4 * 36 + 8 * 15)($4) ldc1 $f16, (4 * 36 + 8 * 16)($4) ldc1 $f17, (4 * 36 + 8 * 17)($4) ldc1 $f18, (4 * 36 + 8 * 18)($4) ldc1 $f19, (4 * 36 + 8 * 19)($4) ldc1 $f20, (4 * 36 + 8 * 20)($4) ldc1 $f21, (4 * 36 + 8 * 21)($4) ldc1 $f22, (4 * 36 + 8 * 22)($4) ldc1 $f23, (4 * 36 + 8 * 23)($4) ldc1 $f24, (4 * 36 + 8 * 24)($4) ldc1 $f25, (4 * 36 + 8 * 25)($4) ldc1 $f26, (4 * 36 + 8 * 26)($4) ldc1 $f27, (4 * 36 + 8 * 27)($4) ldc1 $f28, (4 * 36 + 8 * 28)($4) ldc1 $f29, (4 * 36 + 8 * 29)($4) ldc1 $f30, (4 * 36 + 8 * 30)($4) ldc1 $f31, (4 * 36 + 8 * 31)($4) #endif #endif #if __mips_isa_rev < 6 // restore hi and lo lw $8, (4 * 33)($4) mthi $8 lw $8, (4 * 34)($4) mtlo $8 #endif // r0 is zero lw $1, (4 * 1)($4) lw $2, (4 * 2)($4) lw $3, (4 * 3)($4) // skip a0 for now lw $5, (4 * 5)($4) lw $6, (4 * 6)($4) lw $7, (4 * 7)($4) lw $8, (4 * 8)($4) lw $9, (4 * 9)($4) lw $10, (4 * 10)($4) lw $11, (4 * 11)($4) lw $12, (4 * 12)($4) lw $13, (4 * 13)($4) lw $14, (4 * 14)($4) lw $15, (4 * 15)($4) lw $16, (4 * 16)($4) lw $17, (4 * 17)($4) lw $18, (4 * 18)($4) lw $19, (4 * 19)($4) lw $20, (4 * 20)($4) lw $21, (4 * 21)($4) lw $22, (4 * 22)($4) lw $23, (4 * 23)($4) lw $24, (4 * 24)($4) lw $25, (4 * 25)($4) lw $26, (4 * 26)($4) lw $27, (4 * 27)($4) lw $28, (4 * 28)($4) lw $29, (4 * 29)($4) // load new pc into ra lw $31, (4 * 32)($4) // MIPS 1 has load delay slot. Ensure lw $31 and jr are separated by an instruction. lw $30, (4 * 30)($4) // jump to ra, load a0 in the delay slot jr $31 lw $4, (4 * 4)($4) .set pop #elif defined(__mips64) // // void libunwind::Registers_mips_newabi::jumpto() // // On entry: // thread state pointer is in a0 ($4) // DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind21Registers_mips_newabi6jumptoEv) .set push .set noat .set noreorder .set nomacro #ifdef __mips_hard_float .irp i,FROM_0_TO_31 ldc1 $f\i, (280+8*\i)($4) .endr #endif #if __mips_isa_rev < 6 // restore hi and lo ld $8, (8 * 33)($4) mthi $8 ld $8, (8 * 34)($4) mtlo $8 #endif // r0 is zero ld $1, (8 * 1)($4) ld $2, (8 * 2)($4) ld $3, (8 * 3)($4) // skip a0 for now .irp i,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ld $\i, (8 * \i)($4) .endr // load new pc into ra ld $31, (8 * 32)($4) // MIPS 1 has load delay slot. Ensure lw $31 and jr are separated by an instruction. ld $30, (8 * 30)($4) // jump to ra, load a0 in the delay slot jr $31 ld $4, (8 * 4)($4) .set pop #elif defined(__sparc__) && defined(__arch64__) DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind17Registers_sparc646jumptoEv) // // void libunwind::Registers_sparc64::jumpto() // // On entry: // thread_state pointer is in %o0 // .register %g2, #scratch .register %g3, #scratch .register %g6, #scratch .register %g7, #scratch flushw ldx [%o0 + 0x08], %g1 ldx [%o0 + 0x10], %g2 ldx [%o0 + 0x18], %g3 ldx [%o0 + 0x20], %g4 ldx [%o0 + 0x28], %g5 ldx [%o0 + 0x30], %g6 ldx [%o0 + 0x38], %g7 ldx [%o0 + 0x48], %o1 ldx [%o0 + 0x50], %o2 ldx [%o0 + 0x58], %o3 ldx [%o0 + 0x60], %o4 ldx [%o0 + 0x68], %o5 ldx [%o0 + 0x70], %o6 ldx [%o0 + 0x78], %o7 ldx [%o0 + 0x80], %l0 ldx [%o0 + 0x88], %l1 ldx [%o0 + 0x90], %l2 ldx [%o0 + 0x98], %l3 ldx [%o0 + 0xa0], %l4 ldx [%o0 + 0xa8], %l5 ldx [%o0 + 0xb0], %l6 ldx [%o0 + 0xb8], %l7 ldx [%o0 + 0xc0], %i0 ldx [%o0 + 0xc8], %i1 ldx [%o0 + 0xd0], %i2 ldx [%o0 + 0xd8], %i3 ldx [%o0 + 0xe0], %i4 ldx [%o0 + 0xe8], %i5 ldx [%o0 + 0xf0], %i6 ldx [%o0 + 0xf8], %i7 jmp %o7 ldx [%o0 + 0x40], %o0 #elif defined(__sparc__) // // void libunwind::Registers_sparc_o32::jumpto() // // On entry: // thread_state pointer is in o0 // DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind15Registers_sparc6jumptoEv) ta 3 ldd [%o0 + 64], %l0 ldd [%o0 + 72], %l2 ldd [%o0 + 80], %l4 ldd [%o0 + 88], %l6 ldd [%o0 + 96], %i0 ldd [%o0 + 104], %i2 ldd [%o0 + 112], %i4 ldd [%o0 + 120], %i6 ld [%o0 + 60], %o7 jmp %o7 nop #elif defined(__riscv) // // void libunwind::Registers_riscv::jumpto() // // On entry: // thread_state pointer is in a0 // .p2align 2 DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind15Registers_riscv6jumptoEv) # if defined(__riscv_flen) .irp i,FROM_0_TO_31 FLOAD f\i, (RISCV_FOFFSET + RISCV_FSIZE * \i)(a0) .endr # endif // x0 is zero ILOAD x1, (RISCV_ISIZE * 0)(a0) // restore pc into ra .irp i,2,3,4,5,6,7,8,9 ILOAD x\i, (RISCV_ISIZE * \i)(a0) .endr // skip a0 for now #if defined(__riscv_32e) .irp i,11,12,13,14,15 #else .irp i,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 #endif ILOAD x\i, (RISCV_ISIZE * \i)(a0) .endr ILOAD x10, (RISCV_ISIZE * 10)(a0) // restore a0 ret // jump to ra #elif defined(__s390x__) DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind15Registers_s390x6jumptoEv) // // void libunwind::Registers_s390x::jumpto() // // On entry: // thread_state pointer is in r2 // // Skip PSWM, but load PSWA into r1 lg %r1, 8(%r2) // Restore FPRs .irp i,FROM_0_TO_15 ld %f\i, (144+8*\i)(%r2) .endr // Restore GPRs - skipping %r0 and %r1 lmg %r2, %r15, 32(%r2) // Return to PSWA (was loaded into %r1 above) br %r1 #elif defined(__loongarch__) && __loongarch_grlen == 64 // // void libunwind::Registers_loongarch::jumpto() // // On entry: // thread_state pointer is in $a0($r4) // .p2align 2 DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind19Registers_loongarch6jumptoEv) # if __loongarch_frlen == 64 .irp i,FROM_0_TO_31 fld.d $f\i, $a0, (8 * 33 + 8 * \i) .endr # endif // $r0 is zero .irp i,1,2,3 ld.d $r\i, $a0, (8 * \i) .endr // skip $a0 for now .irp i,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 ld.d $r\i, $a0, (8 * \i) .endr ld.d $ra, $a0, (8 * 32) // load new pc into $ra ld.d $a0, $a0, (8 * 4) // restore $a0 last jr $ra #endif #endif /* !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__wasm__) */ NO_EXEC_STACK_DIRECTIVE ================================================ FILE: ThirdParty/libunwind/src/UnwindRegistersSave.S ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "assembly.h" #define FROM_0_TO_15 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 #define FROM_16_TO_31 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 #define FROM_0_TO_31 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 #define FROM_32_TO_63 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 #if defined(_AIX) .toc #else .text #endif #if !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__wasm__) #if defined(__i386__) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # + + # +-----------------------+ # + thread_state pointer + # +-----------------------+ # + return address + # +-----------------------+ <-- SP # + + # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) _LIBUNWIND_CET_ENDBR push %eax movl 8(%esp), %eax movl %ebx, 4(%eax) movl %ecx, 8(%eax) movl %edx, 12(%eax) movl %edi, 16(%eax) movl %esi, 20(%eax) movl %ebp, 24(%eax) movl %esp, %edx addl $8, %edx movl %edx, 28(%eax) # store what sp was at call site as esp # skip ss # skip eflags movl 4(%esp), %edx movl %edx, 40(%eax) # store return address as eip # skip cs # skip ds # skip es # skip fs # skip gs movl (%esp), %edx movl %edx, (%eax) # store original eax popl %eax xorl %eax, %eax # return UNW_ESUCCESS ret #elif defined(__arm64ec__) // // extern int __unw_getcontext(unw_context_t* thread_state) // // On entry: // thread_state pointer is in x0 // .section .text,"xr",discard,"#__unw_getcontext" .p2align 2 DEFINE_LIBUNWIND_FUNCTION("#__unw_getcontext") stp x8, x27, [x0, #0x000] // rax, rbx stp x0, x1, [x0, #0x010] // rcx, rdx stp x26,x25, [x0, #0x020] // rdi, rsi mov x1, sp stp fp, x1, [x0, #0x030] // rbp, rsp stp x2, x3, [x0, #0x040] // r8, r9 stp x4, x5, [x0, #0x050] // r10, r11 stp x19,x20, [x0, #0x060] // r12, r13 stp x21,x22, [x0, #0x070] // r14, r15 str x30, [x0, #0x080] // store return address as pc stp q0, q1, [x0, #0x0b0] // xmm0, xmm1 stp q2, q3, [x0, #0x0d0] // xmm2, xmm3 stp q4, q5, [x0, #0x0f0] // xmm4, xmm5 stp q6, q7, [x0, #0x110] // xmm6, xmm7 stp q8, q9, [x0, #0x130] // xmm8, xmm9 stp q10,q11, [x0, #0x150] // xmm10,xmm11 stp q12,q13, [x0, #0x170] // xmm12,xmm13 stp q14,q15, [x0, #0x190] // xmm14,xmm15 mov x0, #0 // return UNW_ESUCCESS ret .weak_anti_dep __unw_getcontext .set __unw_getcontext, "#__unw_getcontext" .section .hybmp$x,"yi" .symidx "#__unw_getcontext" .symidx $ientry_thunk$cdecl$i8$i8 .word 1 .text #elif defined(__x86_64__) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in rdi # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) #if defined(_WIN64) #define PTR %rcx #define TMP %rdx #else #define PTR %rdi #define TMP %rsi #endif _LIBUNWIND_CET_ENDBR movq %rax, (PTR) movq %rbx, 8(PTR) movq %rcx, 16(PTR) movq %rdx, 24(PTR) movq %rdi, 32(PTR) movq %rsi, 40(PTR) movq %rbp, 48(PTR) movq %rsp, 56(PTR) addq $8, 56(PTR) movq %r8, 64(PTR) movq %r9, 72(PTR) movq %r10, 80(PTR) movq %r11, 88(PTR) movq %r12, 96(PTR) movq %r13,104(PTR) movq %r14,112(PTR) movq %r15,120(PTR) movq (%rsp),TMP movq TMP,128(PTR) # store return address as rip # skip rflags # skip cs # skip fs # skip gs #if defined(_WIN64) movdqu %xmm0,176(PTR) movdqu %xmm1,192(PTR) movdqu %xmm2,208(PTR) movdqu %xmm3,224(PTR) movdqu %xmm4,240(PTR) movdqu %xmm5,256(PTR) movdqu %xmm6,272(PTR) movdqu %xmm7,288(PTR) movdqu %xmm8,304(PTR) movdqu %xmm9,320(PTR) movdqu %xmm10,336(PTR) movdqu %xmm11,352(PTR) movdqu %xmm12,368(PTR) movdqu %xmm13,384(PTR) movdqu %xmm14,400(PTR) movdqu %xmm15,416(PTR) #endif xorl %eax, %eax # return UNW_ESUCCESS ret #elif defined(__mips__) && defined(_ABIO32) && _MIPS_SIM == _ABIO32 # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in a0 ($4) # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) .set push .set noat .set noreorder .set nomacro sw $1, (4 * 1)($4) sw $2, (4 * 2)($4) sw $3, (4 * 3)($4) sw $4, (4 * 4)($4) sw $5, (4 * 5)($4) sw $6, (4 * 6)($4) sw $7, (4 * 7)($4) sw $8, (4 * 8)($4) sw $9, (4 * 9)($4) sw $10, (4 * 10)($4) sw $11, (4 * 11)($4) sw $12, (4 * 12)($4) sw $13, (4 * 13)($4) sw $14, (4 * 14)($4) sw $15, (4 * 15)($4) sw $16, (4 * 16)($4) sw $17, (4 * 17)($4) sw $18, (4 * 18)($4) sw $19, (4 * 19)($4) sw $20, (4 * 20)($4) sw $21, (4 * 21)($4) sw $22, (4 * 22)($4) sw $23, (4 * 23)($4) sw $24, (4 * 24)($4) sw $25, (4 * 25)($4) sw $26, (4 * 26)($4) sw $27, (4 * 27)($4) sw $28, (4 * 28)($4) sw $29, (4 * 29)($4) sw $30, (4 * 30)($4) sw $31, (4 * 31)($4) # Store return address to pc sw $31, (4 * 32)($4) #if __mips_isa_rev < 6 # hi and lo mfhi $8 sw $8, (4 * 33)($4) mflo $8 sw $8, (4 * 34)($4) #endif #ifdef __mips_hard_float #if __mips_fpr != 64 sdc1 $f0, (4 * 36 + 8 * 0)($4) sdc1 $f2, (4 * 36 + 8 * 2)($4) sdc1 $f4, (4 * 36 + 8 * 4)($4) sdc1 $f6, (4 * 36 + 8 * 6)($4) sdc1 $f8, (4 * 36 + 8 * 8)($4) sdc1 $f10, (4 * 36 + 8 * 10)($4) sdc1 $f12, (4 * 36 + 8 * 12)($4) sdc1 $f14, (4 * 36 + 8 * 14)($4) sdc1 $f16, (4 * 36 + 8 * 16)($4) sdc1 $f18, (4 * 36 + 8 * 18)($4) sdc1 $f20, (4 * 36 + 8 * 20)($4) sdc1 $f22, (4 * 36 + 8 * 22)($4) sdc1 $f24, (4 * 36 + 8 * 24)($4) sdc1 $f26, (4 * 36 + 8 * 26)($4) sdc1 $f28, (4 * 36 + 8 * 28)($4) sdc1 $f30, (4 * 36 + 8 * 30)($4) #else sdc1 $f0, (4 * 36 + 8 * 0)($4) sdc1 $f1, (4 * 36 + 8 * 1)($4) sdc1 $f2, (4 * 36 + 8 * 2)($4) sdc1 $f3, (4 * 36 + 8 * 3)($4) sdc1 $f4, (4 * 36 + 8 * 4)($4) sdc1 $f5, (4 * 36 + 8 * 5)($4) sdc1 $f6, (4 * 36 + 8 * 6)($4) sdc1 $f7, (4 * 36 + 8 * 7)($4) sdc1 $f8, (4 * 36 + 8 * 8)($4) sdc1 $f9, (4 * 36 + 8 * 9)($4) sdc1 $f10, (4 * 36 + 8 * 10)($4) sdc1 $f11, (4 * 36 + 8 * 11)($4) sdc1 $f12, (4 * 36 + 8 * 12)($4) sdc1 $f13, (4 * 36 + 8 * 13)($4) sdc1 $f14, (4 * 36 + 8 * 14)($4) sdc1 $f15, (4 * 36 + 8 * 15)($4) sdc1 $f16, (4 * 36 + 8 * 16)($4) sdc1 $f17, (4 * 36 + 8 * 17)($4) sdc1 $f18, (4 * 36 + 8 * 18)($4) sdc1 $f19, (4 * 36 + 8 * 19)($4) sdc1 $f20, (4 * 36 + 8 * 20)($4) sdc1 $f21, (4 * 36 + 8 * 21)($4) sdc1 $f22, (4 * 36 + 8 * 22)($4) sdc1 $f23, (4 * 36 + 8 * 23)($4) sdc1 $f24, (4 * 36 + 8 * 24)($4) sdc1 $f25, (4 * 36 + 8 * 25)($4) sdc1 $f26, (4 * 36 + 8 * 26)($4) sdc1 $f27, (4 * 36 + 8 * 27)($4) sdc1 $f28, (4 * 36 + 8 * 28)($4) sdc1 $f29, (4 * 36 + 8 * 29)($4) sdc1 $f30, (4 * 36 + 8 * 30)($4) sdc1 $f31, (4 * 36 + 8 * 31)($4) #endif #endif jr $31 # return UNW_ESUCCESS or $2, $0, $0 .set pop #elif defined(__mips64) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in a0 ($4) # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) .set push .set noat .set noreorder .set nomacro .irp i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 sd $\i, (8 * \i)($4) .endr # Store return address to pc sd $31, (8 * 32)($4) #if __mips_isa_rev < 6 # hi and lo mfhi $8 sd $8, (8 * 33)($4) mflo $8 sd $8, (8 * 34)($4) #endif #ifdef __mips_hard_float .irp i,FROM_0_TO_31 sdc1 $f\i, (280+8*\i)($4) .endr #endif jr $31 # return UNW_ESUCCESS or $2, $0, $0 .set pop # elif defined(__mips__) # # extern int __unw_getcontext(unw_context_t* thread_state) # # Just trap for the time being. DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) teq $0, $0 #elif defined(__powerpc64__) // // extern int __unw_getcontext(unw_context_t* thread_state) // // On entry: // thread_state pointer is in r3 // #if defined(_AIX) DEFINE_LIBUNWIND_FUNCTION_AND_WEAK_ALIAS(__unw_getcontext, unw_getcontext) #else DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) #endif // store register (GPR) #define PPC64_STR(n) \ std n, (8 * (n + 2))(3) // save GPRs PPC64_STR(0) mflr 0 std 0, PPC64_OFFS_SRR0(3) // store lr as ssr0 PPC64_STR(1) PPC64_STR(4) // Save r4 first since it will be used for fixing r2. #if defined(_AIX) // The TOC register (r2) was changed by the glue code if unw_getcontext // is called from a different module. Save the original TOC register // in the context if this is the case. mflr 4 lwz 4, 0(4) // Get the first instruction at the return address. xoris 0, 4, 0xe841 // Is it reloading the TOC register "ld 2,40(1)"? cmplwi 0, 0x28 bne 0, LnoR2Fix // No need to fix up r2 if it is not. ld 2, 40(1) // Use the saved TOC register in the stack. LnoR2Fix: #endif PPC64_STR(2) PPC64_STR(3) PPC64_STR(5) PPC64_STR(6) PPC64_STR(7) PPC64_STR(8) PPC64_STR(9) PPC64_STR(10) PPC64_STR(11) PPC64_STR(12) PPC64_STR(13) PPC64_STR(14) PPC64_STR(15) PPC64_STR(16) PPC64_STR(17) PPC64_STR(18) PPC64_STR(19) PPC64_STR(20) PPC64_STR(21) PPC64_STR(22) PPC64_STR(23) PPC64_STR(24) PPC64_STR(25) PPC64_STR(26) PPC64_STR(27) PPC64_STR(28) PPC64_STR(29) PPC64_STR(30) PPC64_STR(31) mfcr 0 std 0, PPC64_OFFS_CR(3) mfxer 0 std 0, PPC64_OFFS_XER(3) #if defined(_AIX) // LR value saved from the register is not used, initialize it to 0. li 0, 0 #else mflr 0 #endif std 0, PPC64_OFFS_LR(3) mfctr 0 std 0, PPC64_OFFS_CTR(3) mfvrsave 0 std 0, PPC64_OFFS_VRSAVE(3) #if defined(__VSX__) // save VS registers // (note that this also saves floating point registers and V registers, // because part of VS is mapped to these registers) addi 4, 3, PPC64_OFFS_FP // store VS register #ifdef __LITTLE_ENDIAN__ // For little-endian targets, we need a swap since stxvd2x will store the // register in the incorrect doubleword order. // FIXME: when supporting targets older than Power9 on LE is no longer required // this can be changed to simply `stxv n, 16 * n(4)`. #define PPC64_STVS(n) \ xxswapd n, n ;\ stxvd2x n, 0, 4 ;\ addi 4, 4, 16 #else #define PPC64_STVS(n) \ stxvd2x n, 0, 4 ;\ addi 4, 4, 16 #endif PPC64_STVS(0) PPC64_STVS(1) PPC64_STVS(2) PPC64_STVS(3) PPC64_STVS(4) PPC64_STVS(5) PPC64_STVS(6) PPC64_STVS(7) PPC64_STVS(8) PPC64_STVS(9) PPC64_STVS(10) PPC64_STVS(11) PPC64_STVS(12) PPC64_STVS(13) PPC64_STVS(14) PPC64_STVS(15) PPC64_STVS(16) PPC64_STVS(17) PPC64_STVS(18) PPC64_STVS(19) PPC64_STVS(20) PPC64_STVS(21) PPC64_STVS(22) PPC64_STVS(23) PPC64_STVS(24) PPC64_STVS(25) PPC64_STVS(26) PPC64_STVS(27) PPC64_STVS(28) PPC64_STVS(29) PPC64_STVS(30) PPC64_STVS(31) PPC64_STVS(32) PPC64_STVS(33) PPC64_STVS(34) PPC64_STVS(35) PPC64_STVS(36) PPC64_STVS(37) PPC64_STVS(38) PPC64_STVS(39) PPC64_STVS(40) PPC64_STVS(41) PPC64_STVS(42) PPC64_STVS(43) PPC64_STVS(44) PPC64_STVS(45) PPC64_STVS(46) PPC64_STVS(47) PPC64_STVS(48) PPC64_STVS(49) PPC64_STVS(50) PPC64_STVS(51) PPC64_STVS(52) PPC64_STVS(53) PPC64_STVS(54) PPC64_STVS(55) PPC64_STVS(56) PPC64_STVS(57) PPC64_STVS(58) PPC64_STVS(59) PPC64_STVS(60) PPC64_STVS(61) PPC64_STVS(62) PPC64_STVS(63) #else // store FP register #define PPC64_STF(n) \ stfd n, (PPC64_OFFS_FP + n * 16)(3) // save float registers PPC64_STF(0) PPC64_STF(1) PPC64_STF(2) PPC64_STF(3) PPC64_STF(4) PPC64_STF(5) PPC64_STF(6) PPC64_STF(7) PPC64_STF(8) PPC64_STF(9) PPC64_STF(10) PPC64_STF(11) PPC64_STF(12) PPC64_STF(13) PPC64_STF(14) PPC64_STF(15) PPC64_STF(16) PPC64_STF(17) PPC64_STF(18) PPC64_STF(19) PPC64_STF(20) PPC64_STF(21) PPC64_STF(22) PPC64_STF(23) PPC64_STF(24) PPC64_STF(25) PPC64_STF(26) PPC64_STF(27) PPC64_STF(28) PPC64_STF(29) PPC64_STF(30) PPC64_STF(31) #if defined(__ALTIVEC__) // save vector registers // Use 16-bytes below the stack pointer as an // aligned buffer to save each vector register. // Note that the stack pointer is always 16-byte aligned. subi 4, 1, 16 #define PPC64_STV_UNALIGNED(n) \ stvx n, 0, 4 ;\ ld 5, 0(4) ;\ std 5, (PPC64_OFFS_V + n * 16)(3) ;\ ld 5, 8(4) ;\ std 5, (PPC64_OFFS_V + n * 16 + 8)(3) PPC64_STV_UNALIGNED(0) PPC64_STV_UNALIGNED(1) PPC64_STV_UNALIGNED(2) PPC64_STV_UNALIGNED(3) PPC64_STV_UNALIGNED(4) PPC64_STV_UNALIGNED(5) PPC64_STV_UNALIGNED(6) PPC64_STV_UNALIGNED(7) PPC64_STV_UNALIGNED(8) PPC64_STV_UNALIGNED(9) PPC64_STV_UNALIGNED(10) PPC64_STV_UNALIGNED(11) PPC64_STV_UNALIGNED(12) PPC64_STV_UNALIGNED(13) PPC64_STV_UNALIGNED(14) PPC64_STV_UNALIGNED(15) PPC64_STV_UNALIGNED(16) PPC64_STV_UNALIGNED(17) PPC64_STV_UNALIGNED(18) PPC64_STV_UNALIGNED(19) PPC64_STV_UNALIGNED(20) PPC64_STV_UNALIGNED(21) PPC64_STV_UNALIGNED(22) PPC64_STV_UNALIGNED(23) PPC64_STV_UNALIGNED(24) PPC64_STV_UNALIGNED(25) PPC64_STV_UNALIGNED(26) PPC64_STV_UNALIGNED(27) PPC64_STV_UNALIGNED(28) PPC64_STV_UNALIGNED(29) PPC64_STV_UNALIGNED(30) PPC64_STV_UNALIGNED(31) #endif #endif li 3, 0 // return UNW_ESUCCESS blr #elif defined(__powerpc__) // // extern int unw_getcontext(unw_context_t* thread_state) // // On entry: // thread_state pointer is in r3 // #if defined(_AIX) DEFINE_LIBUNWIND_FUNCTION_AND_WEAK_ALIAS(__unw_getcontext, unw_getcontext) #else DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) #endif stw 0, 8(3) mflr 0 stw 0, 0(3) // store lr as ssr0 stw 1, 12(3) stw 4, 24(3) // Save r4 first since it will be used for fixing r2. #if defined(_AIX) // The TOC register (r2) was changed by the glue code if unw_getcontext // is called from a different module. Save the original TOC register // in the context if this is the case. mflr 4 lwz 4, 0(4) // Get the instruction at the return address. xoris 0, 4, 0x8041 // Is it reloading the TOC register "lwz 2,20(1)"? cmplwi 0, 0x14 bne 0, LnoR2Fix // No need to fix up r2 if it is not. lwz 2, 20(1) // Use the saved TOC register in the stack. LnoR2Fix: #endif stw 2, 16(3) stw 3, 20(3) stw 5, 28(3) stw 6, 32(3) stw 7, 36(3) stw 8, 40(3) stw 9, 44(3) stw 10, 48(3) stw 11, 52(3) stw 12, 56(3) stw 13, 60(3) stw 14, 64(3) stw 15, 68(3) stw 16, 72(3) stw 17, 76(3) stw 18, 80(3) stw 19, 84(3) stw 20, 88(3) stw 21, 92(3) stw 22, 96(3) stw 23,100(3) stw 24,104(3) stw 25,108(3) stw 26,112(3) stw 27,116(3) stw 28,120(3) stw 29,124(3) stw 30,128(3) stw 31,132(3) #if defined(__ALTIVEC__) // save VRSave register mfspr 0, 256 stw 0, 156(3) #endif // save CR registers mfcr 0 stw 0, 136(3) #if defined(_AIX) // LR value from the register is not used, initialize it to 0. li 0, 0 stw 0, 144(3) #endif // save CTR register mfctr 0 stw 0, 148(3) #if !defined(__NO_FPRS__) // save float registers stfd 0, 160(3) stfd 1, 168(3) stfd 2, 176(3) stfd 3, 184(3) stfd 4, 192(3) stfd 5, 200(3) stfd 6, 208(3) stfd 7, 216(3) stfd 8, 224(3) stfd 9, 232(3) stfd 10,240(3) stfd 11,248(3) stfd 12,256(3) stfd 13,264(3) stfd 14,272(3) stfd 15,280(3) stfd 16,288(3) stfd 17,296(3) stfd 18,304(3) stfd 19,312(3) stfd 20,320(3) stfd 21,328(3) stfd 22,336(3) stfd 23,344(3) stfd 24,352(3) stfd 25,360(3) stfd 26,368(3) stfd 27,376(3) stfd 28,384(3) stfd 29,392(3) stfd 30,400(3) stfd 31,408(3) #endif #if defined(__ALTIVEC__) // save vector registers subi 4, 1, 16 rlwinm 4, 4, 0, 0, 27 // mask low 4-bits // r4 is now a 16-byte aligned pointer into the red zone #define SAVE_VECTOR_UNALIGNED(_vec, _offset) \ stvx _vec, 0, 4 SEPARATOR \ lwz 5, 0(4) SEPARATOR \ stw 5, _offset(3) SEPARATOR \ lwz 5, 4(4) SEPARATOR \ stw 5, _offset+4(3) SEPARATOR \ lwz 5, 8(4) SEPARATOR \ stw 5, _offset+8(3) SEPARATOR \ lwz 5, 12(4) SEPARATOR \ stw 5, _offset+12(3) SAVE_VECTOR_UNALIGNED( 0, 424+0x000) SAVE_VECTOR_UNALIGNED( 1, 424+0x010) SAVE_VECTOR_UNALIGNED( 2, 424+0x020) SAVE_VECTOR_UNALIGNED( 3, 424+0x030) SAVE_VECTOR_UNALIGNED( 4, 424+0x040) SAVE_VECTOR_UNALIGNED( 5, 424+0x050) SAVE_VECTOR_UNALIGNED( 6, 424+0x060) SAVE_VECTOR_UNALIGNED( 7, 424+0x070) SAVE_VECTOR_UNALIGNED( 8, 424+0x080) SAVE_VECTOR_UNALIGNED( 9, 424+0x090) SAVE_VECTOR_UNALIGNED(10, 424+0x0A0) SAVE_VECTOR_UNALIGNED(11, 424+0x0B0) SAVE_VECTOR_UNALIGNED(12, 424+0x0C0) SAVE_VECTOR_UNALIGNED(13, 424+0x0D0) SAVE_VECTOR_UNALIGNED(14, 424+0x0E0) SAVE_VECTOR_UNALIGNED(15, 424+0x0F0) SAVE_VECTOR_UNALIGNED(16, 424+0x100) SAVE_VECTOR_UNALIGNED(17, 424+0x110) SAVE_VECTOR_UNALIGNED(18, 424+0x120) SAVE_VECTOR_UNALIGNED(19, 424+0x130) SAVE_VECTOR_UNALIGNED(20, 424+0x140) SAVE_VECTOR_UNALIGNED(21, 424+0x150) SAVE_VECTOR_UNALIGNED(22, 424+0x160) SAVE_VECTOR_UNALIGNED(23, 424+0x170) SAVE_VECTOR_UNALIGNED(24, 424+0x180) SAVE_VECTOR_UNALIGNED(25, 424+0x190) SAVE_VECTOR_UNALIGNED(26, 424+0x1A0) SAVE_VECTOR_UNALIGNED(27, 424+0x1B0) SAVE_VECTOR_UNALIGNED(28, 424+0x1C0) SAVE_VECTOR_UNALIGNED(29, 424+0x1D0) SAVE_VECTOR_UNALIGNED(30, 424+0x1E0) SAVE_VECTOR_UNALIGNED(31, 424+0x1F0) #endif li 3, 0 // return UNW_ESUCCESS blr #elif defined(__aarch64__) // // extern int __unw_getcontext(unw_context_t* thread_state) // // On entry: // thread_state pointer is in x0 // .p2align 2 DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) stp x0, x1, [x0, #0x000] stp x2, x3, [x0, #0x010] stp x4, x5, [x0, #0x020] stp x6, x7, [x0, #0x030] stp x8, x9, [x0, #0x040] stp x10,x11, [x0, #0x050] stp x12,x13, [x0, #0x060] stp x14,x15, [x0, #0x070] stp x16,x17, [x0, #0x080] stp x18,x19, [x0, #0x090] stp x20,x21, [x0, #0x0A0] stp x22,x23, [x0, #0x0B0] stp x24,x25, [x0, #0x0C0] stp x26,x27, [x0, #0x0D0] stp x28,x29, [x0, #0x0E0] str x30, [x0, #0x0F0] mov x1,sp str x1, [x0, #0x0F8] str x30, [x0, #0x100] // store return address as pc // skip cpsr #if defined(__ARM_FP) && __ARM_FP != 0 stp d0, d1, [x0, #0x110] stp d2, d3, [x0, #0x120] stp d4, d5, [x0, #0x130] stp d6, d7, [x0, #0x140] stp d8, d9, [x0, #0x150] stp d10,d11, [x0, #0x160] stp d12,d13, [x0, #0x170] stp d14,d15, [x0, #0x180] stp d16,d17, [x0, #0x190] stp d18,d19, [x0, #0x1A0] stp d20,d21, [x0, #0x1B0] stp d22,d23, [x0, #0x1C0] stp d24,d25, [x0, #0x1D0] stp d26,d27, [x0, #0x1E0] stp d28,d29, [x0, #0x1F0] str d30, [x0, #0x200] str d31, [x0, #0x208] #endif mov x0, #0 // return UNW_ESUCCESS ret #elif defined(__arm__) && !defined(__APPLE__) #if !defined(__ARM_ARCH_ISA_ARM) #if (__ARM_ARCH_ISA_THUMB == 2) .syntax unified #endif .thumb #endif @ @ extern int __unw_getcontext(unw_context_t* thread_state) @ @ On entry: @ thread_state pointer is in r0 @ @ Per EHABI #4.7 this only saves the core integer registers. @ EHABI #7.4.5 notes that in general all VRS registers should be restored @ however this is very hard to do for VFP registers because it is unknown @ to the library how many registers are implemented by the architecture. @ Instead, VFP registers are demand saved by logic external to __unw_getcontext. @ .p2align 2 DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) #if !defined(__ARM_ARCH_ISA_ARM) && __ARM_ARCH_ISA_THUMB == 1 stm r0!, {r0-r7} mov r1, r8 mov r2, r9 mov r3, r10 stm r0!, {r1-r3} mov r1, r11 mov r2, sp mov r3, lr str r1, [r0, #0] @ r11 @ r12 does not need storing, it it the intra-procedure-call scratch register str r2, [r0, #8] @ sp str r3, [r0, #12] @ lr str r3, [r0, #16] @ store return address as pc @ T1 does not have a non-cpsr-clobbering register-zeroing instruction. @ It is safe to use here though because we are about to return, and cpsr is @ not expected to be preserved. movs r0, #0 @ return UNW_ESUCCESS #else @ 32bit thumb-2 restrictions for stm: @ . the sp (r13) cannot be in the list @ . the pc (r15) cannot be in the list in an STM instruction stm r0, {r0-r12} str sp, [r0, #52] str lr, [r0, #56] str lr, [r0, #60] @ store return address as pc mov r0, #0 @ return UNW_ESUCCESS #endif JMP(lr) @ @ static void libunwind::Registers_arm::saveVFPWithFSTMD(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .fpu vfpv3-d16 #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm16saveVFPWithFSTMDEPv) vstmia r0, {d0-d15} JMP(lr) @ @ static void libunwind::Registers_arm::saveVFPWithFSTMX(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .fpu vfpv3-d16 #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm16saveVFPWithFSTMXEPv) vstmia r0, {d0-d15} @ fstmiax is deprecated in ARMv7+ and now behaves like vstmia JMP(lr) @ @ static void libunwind::Registers_arm::saveVFPv3(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .fpu vfpv3 #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm9saveVFPv3EPv) @ VFP and iwMMX instructions are only available when compiling with the flags @ that enable them. We do not want to do that in the library (because we do not @ want the compiler to generate instructions that access those) but this is @ only accessed if the personality routine needs these registers. Use of @ these registers implies they are, actually, available on the target, so @ it's ok to execute. @ So, generate the instructions using the corresponding coprocessor mnemonic. vstmia r0, {d16-d31} JMP(lr) #if defined(_LIBUNWIND_ARM_WMMX) @ @ static void libunwind::Registers_arm::saveiWMMX(unw_fpreg_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .arch armv5te #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm9saveiWMMXEPv) stcl p1, cr0, [r0], #8 @ wstrd wR0, [r0], #8 stcl p1, cr1, [r0], #8 @ wstrd wR1, [r0], #8 stcl p1, cr2, [r0], #8 @ wstrd wR2, [r0], #8 stcl p1, cr3, [r0], #8 @ wstrd wR3, [r0], #8 stcl p1, cr4, [r0], #8 @ wstrd wR4, [r0], #8 stcl p1, cr5, [r0], #8 @ wstrd wR5, [r0], #8 stcl p1, cr6, [r0], #8 @ wstrd wR6, [r0], #8 stcl p1, cr7, [r0], #8 @ wstrd wR7, [r0], #8 stcl p1, cr8, [r0], #8 @ wstrd wR8, [r0], #8 stcl p1, cr9, [r0], #8 @ wstrd wR9, [r0], #8 stcl p1, cr10, [r0], #8 @ wstrd wR10, [r0], #8 stcl p1, cr11, [r0], #8 @ wstrd wR11, [r0], #8 stcl p1, cr12, [r0], #8 @ wstrd wR12, [r0], #8 stcl p1, cr13, [r0], #8 @ wstrd wR13, [r0], #8 stcl p1, cr14, [r0], #8 @ wstrd wR14, [r0], #8 stcl p1, cr15, [r0], #8 @ wstrd wR15, [r0], #8 JMP(lr) @ @ static void libunwind::Registers_arm::saveiWMMXControl(unw_uint32_t* values) @ @ On entry: @ values pointer is in r0 @ .p2align 2 #if defined(__ELF__) .arch armv5te #endif DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_arm16saveiWMMXControlEPj) stc2 p1, cr8, [r0], #4 @ wstrw wCGR0, [r0], #4 stc2 p1, cr9, [r0], #4 @ wstrw wCGR1, [r0], #4 stc2 p1, cr10, [r0], #4 @ wstrw wCGR2, [r0], #4 stc2 p1, cr11, [r0], #4 @ wstrw wCGR3, [r0], #4 JMP(lr) #endif #elif defined(__or1k__) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in r3 # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) l.sw 0(r3), r0 l.sw 4(r3), r1 l.sw 8(r3), r2 l.sw 12(r3), r3 l.sw 16(r3), r4 l.sw 20(r3), r5 l.sw 24(r3), r6 l.sw 28(r3), r7 l.sw 32(r3), r8 l.sw 36(r3), r9 l.sw 40(r3), r10 l.sw 44(r3), r11 l.sw 48(r3), r12 l.sw 52(r3), r13 l.sw 56(r3), r14 l.sw 60(r3), r15 l.sw 64(r3), r16 l.sw 68(r3), r17 l.sw 72(r3), r18 l.sw 76(r3), r19 l.sw 80(r3), r20 l.sw 84(r3), r21 l.sw 88(r3), r22 l.sw 92(r3), r23 l.sw 96(r3), r24 l.sw 100(r3), r25 l.sw 104(r3), r26 l.sw 108(r3), r27 l.sw 112(r3), r28 l.sw 116(r3), r29 l.sw 120(r3), r30 l.sw 124(r3), r31 # store ra to pc l.sw 128(r3), r9 # zero epcr l.sw 132(r3), r0 #elif defined(__hexagon__) # # extern int unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in r0 # #define OFFSET(offset) (offset/4) DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) memw(r0+#32) = r8 memw(r0+#36) = r9 memw(r0+#40) = r10 memw(r0+#44) = r11 memw(r0+#48) = r12 memw(r0+#52) = r13 memw(r0+#56) = r14 memw(r0+#60) = r15 memw(r0+#64) = r16 memw(r0+#68) = r17 memw(r0+#72) = r18 memw(r0+#76) = r19 memw(r0+#80) = r20 memw(r0+#84) = r21 memw(r0+#88) = r22 memw(r0+#92) = r23 memw(r0+#96) = r24 memw(r0+#100) = r25 memw(r0+#104) = r26 memw(r0+#108) = r27 memw(r0+#112) = r28 memw(r0+#116) = r29 memw(r0+#120) = r30 memw(r0+#124) = r31 r1 = c4 // Predicate register memw(r0+#128) = r1 r1 = memw(r30) // *FP == Saved FP r1 = r31 memw(r0+#132) = r1 jumpr r31 #elif defined(__sparc__) && defined(__arch64__) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in %o0 # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) .register %g2, #scratch .register %g3, #scratch .register %g6, #scratch .register %g7, #scratch stx %g1, [%o0 + 0x08] stx %g2, [%o0 + 0x10] stx %g3, [%o0 + 0x18] stx %g4, [%o0 + 0x20] stx %g5, [%o0 + 0x28] stx %g6, [%o0 + 0x30] stx %g7, [%o0 + 0x38] stx %o0, [%o0 + 0x40] stx %o1, [%o0 + 0x48] stx %o2, [%o0 + 0x50] stx %o3, [%o0 + 0x58] stx %o4, [%o0 + 0x60] stx %o5, [%o0 + 0x68] stx %o6, [%o0 + 0x70] stx %o7, [%o0 + 0x78] stx %l0, [%o0 + 0x80] stx %l1, [%o0 + 0x88] stx %l2, [%o0 + 0x90] stx %l3, [%o0 + 0x98] stx %l4, [%o0 + 0xa0] stx %l5, [%o0 + 0xa8] stx %l6, [%o0 + 0xb0] stx %l7, [%o0 + 0xb8] stx %i0, [%o0 + 0xc0] stx %i1, [%o0 + 0xc8] stx %i2, [%o0 + 0xd0] stx %i3, [%o0 + 0xd8] stx %i4, [%o0 + 0xe0] stx %i5, [%o0 + 0xe8] stx %i6, [%o0 + 0xf0] stx %i7, [%o0 + 0xf8] # save StackGhost cookie mov %i7, %g4 save %sp, -176, %sp # register window flush necessary even without StackGhost flushw restore ldx [%sp + 2047 + 0x78], %g5 xor %g4, %g5, %g4 stx %g4, [%o0 + 0x100] retl # return UNW_ESUCCESS clr %o0 #elif defined(__sparc__) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in o0 # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) ta 3 add %o7, 8, %o7 std %g0, [%o0 + 0] std %g2, [%o0 + 8] std %g4, [%o0 + 16] std %g6, [%o0 + 24] std %o0, [%o0 + 32] std %o2, [%o0 + 40] std %o4, [%o0 + 48] std %o6, [%o0 + 56] std %l0, [%o0 + 64] std %l2, [%o0 + 72] std %l4, [%o0 + 80] std %l6, [%o0 + 88] std %i0, [%o0 + 96] std %i2, [%o0 + 104] std %i4, [%o0 + 112] std %i6, [%o0 + 120] jmp %o7 clr %o0 // return UNW_ESUCCESS #elif defined(__riscv) # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in a0 # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) ISTORE x1, (RISCV_ISIZE * 0)(a0) // store ra as pc #if defined(__riscv_32e) .irp i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 #else .irp i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 #endif ISTORE x\i, (RISCV_ISIZE * \i)(a0) .endr # if defined(__riscv_flen) .irp i,FROM_0_TO_31 FSTORE f\i, (RISCV_FOFFSET + RISCV_FSIZE * \i)(a0) .endr # endif li a0, 0 // return UNW_ESUCCESS ret // jump to ra #elif defined(__s390x__) // // extern int __unw_getcontext(unw_context_t* thread_state) // // On entry: // thread_state pointer is in r2 // DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) // Save GPRs stmg %r0, %r15, 16(%r2) // Save PSWM epsw %r0, %r1 stm %r0, %r1, 0(%r2) // Store return address as PSWA stg %r14, 8(%r2) // Save FPRs .irp i,FROM_0_TO_15 std %f\i, (144+8*\i)(%r2) .endr // Return UNW_ESUCCESS lghi %r2, 0 br %r14 #elif defined(__loongarch__) && __loongarch_grlen == 64 # # extern int __unw_getcontext(unw_context_t* thread_state) # # On entry: # thread_state pointer is in $a0($r4) # DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext) .irp i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 st.d $r\i, $a0, (8*\i) .endr st.d $r1, $a0, (8 * 32) // store $ra to pc # if __loongarch_frlen == 64 .irp i,FROM_0_TO_31 fst.d $f\i, $a0, (8 * 33 + 8 * \i) .endr # endif move $a0, $zero // UNW_ESUCCESS jr $ra #endif #ifdef __arm64ec__ .globl "#unw_getcontext" .set "#unw_getcontext", "#__unw_getcontext" .weak_anti_dep unw_getcontext .set unw_getcontext, "#unw_getcontext" EXPORT_SYMBOL(unw_getcontext) #else WEAK_ALIAS(__unw_getcontext, unw_getcontext) #endif #endif /* !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__wasm__) */ NO_EXEC_STACK_DIRECTIVE ================================================ FILE: ThirdParty/libunwind/src/Unwind_AIXExtras.cpp ================================================ //===--------------------- Unwind_AIXExtras.cpp -------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // //===----------------------------------------------------------------------===// // This file is only used for AIX. #if defined(_AIX) #include "config.h" #include "libunwind_ext.h" #include namespace libunwind { // getFuncNameFromTBTable // Get the function name from its traceback table. char *getFuncNameFromTBTable(uintptr_t Pc, uint16_t &NameLen, unw_word_t *Offset) { uint32_t *p = reinterpret_cast(Pc); *Offset = 0; // Keep looking forward until a word of 0 is found. The traceback // table starts at the following word. while (*p) p++; tbtable *TBTable = reinterpret_cast(p + 1); if (!TBTable->tb.name_present) return NULL; // Get to the name of the function. p = reinterpret_cast(&TBTable->tb_ext); // Skip field parminfo if it exists. if (TBTable->tb.fixedparms || TBTable->tb.floatparms) p++; // If the tb_offset field exists, get the offset from the start of // the function to pc. Skip the field. if (TBTable->tb.has_tboff) { unw_word_t StartIp = reinterpret_cast(TBTable) - *p - sizeof(uint32_t); *Offset = Pc - StartIp; p++; } // Skip field hand_mask if it exists. if (TBTable->tb.int_hndl) p++; // Skip fields ctl_info and ctl_info_disp if they exist. if (TBTable->tb.has_ctl) { p += 1 + *p; } NameLen = *(reinterpret_cast(p)); return reinterpret_cast(p) + sizeof(uint16_t); } } // namespace libunwind #endif // defined(_AIX) ================================================ FILE: ThirdParty/libunwind/src/assembly.h ================================================ /* ===-- assembly.h - libUnwind assembler support macros -------------------=== * * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. * See https://llvm.org/LICENSE.txt for license information. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * * ===----------------------------------------------------------------------=== * * This file defines macros for use in libUnwind assembler source. * This file is not part of the interface of this library. * * ===----------------------------------------------------------------------=== */ #ifndef UNWIND_ASSEMBLY_H #define UNWIND_ASSEMBLY_H #if defined(__linux__) && defined(__CET__) #include #define _LIBUNWIND_CET_ENDBR _CET_ENDBR #else #define _LIBUNWIND_CET_ENDBR #endif #if defined(__powerpc64__) #define SEPARATOR ; #define PPC64_OFFS_SRR0 0 #define PPC64_OFFS_CR 272 #define PPC64_OFFS_XER 280 #define PPC64_OFFS_LR 288 #define PPC64_OFFS_CTR 296 #define PPC64_OFFS_VRSAVE 304 #define PPC64_OFFS_FP 312 #define PPC64_OFFS_V 824 #elif defined(__APPLE__) && defined(__aarch64__) #define SEPARATOR %% #elif defined(__riscv) # define RISCV_ISIZE (__riscv_xlen / 8) # define RISCV_FOFFSET (RISCV_ISIZE * 32) # if defined(__riscv_flen) # define RISCV_FSIZE (__riscv_flen / 8) # endif # if __riscv_xlen == 64 # define ILOAD ld # define ISTORE sd # elif __riscv_xlen == 32 # define ILOAD lw # define ISTORE sw # else # error "Unsupported __riscv_xlen" # endif # if defined(__riscv_flen) # if __riscv_flen == 64 # define FLOAD fld # define FSTORE fsd # elif __riscv_flen == 32 # define FLOAD flw # define FSTORE fsw # else # error "Unsupported __riscv_flen" # endif # endif # define SEPARATOR ; #else #define SEPARATOR ; #endif #if defined(__powerpc64__) && (!defined(_CALL_ELF) || _CALL_ELF == 1) && \ !defined(_AIX) #define PPC64_OPD1 .section .opd,"aw",@progbits SEPARATOR #define PPC64_OPD2 SEPARATOR \ .p2align 3 SEPARATOR \ .quad .Lfunc_begin0 SEPARATOR \ .quad .TOC.@tocbase SEPARATOR \ .quad 0 SEPARATOR \ .text SEPARATOR \ .Lfunc_begin0: #else #define PPC64_OPD1 #define PPC64_OPD2 #endif #if defined(__aarch64__) #if defined(__ARM_FEATURE_GCS_DEFAULT) && defined(__ARM_FEATURE_BTI_DEFAULT) // Set BTI, PAC, and GCS gnu property bits #define GNU_PROPERTY 7 // We indirectly branch to __libunwind_Registers_arm64_jumpto from // __unw_phase2_resume, so we need to use bti jc. #define AARCH64_BTI bti jc #elif defined(__ARM_FEATURE_GCS_DEFAULT) // Set GCS gnu property bit #define GNU_PROPERTY 4 #elif defined(__ARM_FEATURE_BTI_DEFAULT) // Set BTI and PAC gnu property bits #define GNU_PROPERTY 3 #define AARCH64_BTI bti c #endif #ifdef GNU_PROPERTY .pushsection ".note.gnu.property", "a" SEPARATOR \ .balign 8 SEPARATOR \ .long 4 SEPARATOR \ .long 0x10 SEPARATOR \ .long 0x5 SEPARATOR \ .asciz "GNU" SEPARATOR \ .long 0xc0000000 SEPARATOR /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ \ .long 4 SEPARATOR \ .long GNU_PROPERTY SEPARATOR \ .long 0 SEPARATOR \ .popsection SEPARATOR #endif #endif #if !defined(AARCH64_BTI) #define AARCH64_BTI #endif #if !defined(__aarch64__) #ifdef __ARM_FEATURE_PAC_DEFAULT .eabi_attribute Tag_PAC_extension, 2 .eabi_attribute Tag_PACRET_use, 1 #endif #ifdef __ARM_FEATURE_BTI_DEFAULT .eabi_attribute Tag_BTI_extension, 1 .eabi_attribute Tag_BTI_use, 1 #endif #endif #define GLUE2(a, b) a ## b #define GLUE(a, b) GLUE2(a, b) #define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name) #if defined(__APPLE__) #define SYMBOL_IS_FUNC(name) #define HIDDEN_SYMBOL(name) .private_extern name #if defined(_LIBUNWIND_HIDE_SYMBOLS) #define EXPORT_SYMBOL(name) HIDDEN_SYMBOL(name) #else #define EXPORT_SYMBOL(name) #endif #define WEAK_ALIAS(name, aliasname) \ .globl SYMBOL_NAME(aliasname) SEPARATOR \ EXPORT_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \ SYMBOL_NAME(aliasname) = SYMBOL_NAME(name) #define NO_EXEC_STACK_DIRECTIVE #elif defined(__ELF__) #if defined(__arm__) #define SYMBOL_IS_FUNC(name) .type name,%function #else #define SYMBOL_IS_FUNC(name) .type name,@function #endif #define HIDDEN_SYMBOL(name) .hidden name #if defined(_LIBUNWIND_HIDE_SYMBOLS) #define EXPORT_SYMBOL(name) HIDDEN_SYMBOL(name) #else #define EXPORT_SYMBOL(name) #endif #define WEAK_SYMBOL(name) .weak name #if defined(__hexagon__) #define WEAK_ALIAS(name, aliasname) \ EXPORT_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \ WEAK_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \ .equiv SYMBOL_NAME(aliasname), SYMBOL_NAME(name) #else #define WEAK_ALIAS(name, aliasname) \ EXPORT_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \ WEAK_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \ SYMBOL_NAME(aliasname) = SYMBOL_NAME(name) #endif #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ defined(__linux__) #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits #else #define NO_EXEC_STACK_DIRECTIVE #endif #elif defined(_WIN32) #define SYMBOL_IS_FUNC(name) \ .def name SEPARATOR \ .scl 2 SEPARATOR \ .type 32 SEPARATOR \ .endef #define EXPORT_SYMBOL2(name) \ .section .drectve,"yn" SEPARATOR \ .ascii "-export:", #name, "\0" SEPARATOR \ .text #if defined(_LIBUNWIND_HIDE_SYMBOLS) #define EXPORT_SYMBOL(name) #else #define EXPORT_SYMBOL(name) EXPORT_SYMBOL2(name) #endif #define HIDDEN_SYMBOL(name) #if defined(__MINGW32__) #define WEAK_ALIAS(name, aliasname) \ .globl SYMBOL_NAME(aliasname) SEPARATOR \ EXPORT_SYMBOL(aliasname) SEPARATOR \ SYMBOL_NAME(aliasname) = SYMBOL_NAME(name) #else #define WEAK_ALIAS3(name, aliasname) \ .section .drectve,"yn" SEPARATOR \ .ascii "-alternatename:", #aliasname, "=", #name, "\0" SEPARATOR \ .text #define WEAK_ALIAS2(name, aliasname) \ WEAK_ALIAS3(name, aliasname) #define WEAK_ALIAS(name, aliasname) \ EXPORT_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \ WEAK_ALIAS2(SYMBOL_NAME(name), SYMBOL_NAME(aliasname)) #endif #define NO_EXEC_STACK_DIRECTIVE #elif defined(__sparc__) #elif defined(_AIX) #if defined(__powerpc64__) #define VBYTE_LEN 8 #define CSECT_ALIGN 3 #else #define VBYTE_LEN 4 #define CSECT_ALIGN 2 #endif // clang-format off #define DEFINE_LIBUNWIND_FUNCTION_AND_WEAK_ALIAS(name, aliasname) \ .csect .text[PR], 2 SEPARATOR \ .csect .name[PR], 2 SEPARATOR \ .globl name[DS] SEPARATOR \ .globl .name[PR] SEPARATOR \ .align 4 SEPARATOR \ .csect name[DS], CSECT_ALIGN SEPARATOR \ aliasname: \ .vbyte VBYTE_LEN, .name[PR] SEPARATOR \ .vbyte VBYTE_LEN, TOC[TC0] SEPARATOR \ .vbyte VBYTE_LEN, 0 SEPARATOR \ .weak aliasname SEPARATOR \ .weak .aliasname SEPARATOR \ .csect .name[PR], 2 SEPARATOR \ .aliasname: \ #define WEAK_ALIAS(name, aliasname) #define NO_EXEC_STACK_DIRECTIVE // clang-format on #else #error Unsupported target #endif #if defined(_AIX) // clang-format off #define DEFINE_LIBUNWIND_FUNCTION(name) \ .globl name[DS] SEPARATOR \ .globl .name SEPARATOR \ .align 4 SEPARATOR \ .csect name[DS], CSECT_ALIGN SEPARATOR \ .vbyte VBYTE_LEN, .name SEPARATOR \ .vbyte VBYTE_LEN, TOC[TC0] SEPARATOR \ .vbyte VBYTE_LEN, 0 SEPARATOR \ .csect .text[PR], 2 SEPARATOR \ .name: // clang-format on #else #define DEFINE_LIBUNWIND_FUNCTION(name) \ .globl SYMBOL_NAME(name) SEPARATOR \ HIDDEN_SYMBOL(SYMBOL_NAME(name)) SEPARATOR \ SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \ PPC64_OPD1 \ SYMBOL_NAME(name): \ PPC64_OPD2 \ AARCH64_BTI #endif #if defined(__arm__) #if !defined(__ARM_ARCH) #define __ARM_ARCH 4 #endif #if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5 #define ARM_HAS_BX #endif #ifdef ARM_HAS_BX #define JMP(r) bx r #else #define JMP(r) mov pc, r #endif #endif /* __arm__ */ #if defined(__powerpc__) #define PPC_LEFT_SHIFT(index) << (index) #endif #endif /* UNWIND_ASSEMBLY_H */ ================================================ FILE: ThirdParty/libunwind/src/config.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Defines macros used within libunwind project. // //===----------------------------------------------------------------------===// #ifndef LIBUNWIND_CONFIG_H #define LIBUNWIND_CONFIG_H #include #include #include #include #include <__libunwind_config.h> // Platform specific configuration defines. #ifdef __APPLE__ #if defined(FOR_DYLD) #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1 #else #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1 #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 #endif #elif defined(_WIN32) #ifdef __SEH__ #define _LIBUNWIND_SUPPORT_SEH_UNWIND 1 #else #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 #endif #elif defined(_LIBUNWIND_IS_BAREMETAL) #if !defined(_LIBUNWIND_ARM_EHABI) #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 #define _LIBUNWIND_SUPPORT_DWARF_INDEX 1 #endif #elif defined(__BIONIC__) && defined(_LIBUNWIND_ARM_EHABI) // For ARM EHABI, Bionic didn't implement dl_iterate_phdr until API 21. After // API 21, dl_iterate_phdr exists, but dl_unwind_find_exidx is much faster. #define _LIBUNWIND_USE_DL_UNWIND_FIND_EXIDX 1 #elif defined(_AIX) // The traceback table at the end of each function is used for unwinding. #define _LIBUNWIND_SUPPORT_TBTAB_UNWIND 1 #elif defined(__HAIKU__) #if defined(_LIBUNWIND_USE_HAIKU_BSD_LIB) #define _LIBUNWIND_USE_DL_ITERATE_PHDR 1 #endif #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 #define _LIBUNWIND_SUPPORT_DWARF_INDEX 1 #else // Assume an ELF system with a dl_iterate_phdr function. #define _LIBUNWIND_USE_DL_ITERATE_PHDR 1 #if !defined(_LIBUNWIND_ARM_EHABI) #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 #define _LIBUNWIND_SUPPORT_DWARF_INDEX 1 #endif #endif #if defined(_LIBUNWIND_HIDE_SYMBOLS) // The CMake file passes -fvisibility=hidden to control ELF/Mach-O visibility. #define _LIBUNWIND_EXPORT #define _LIBUNWIND_HIDDEN #else #if !defined(__ELF__) && !defined(__MACH__) && !defined(_AIX) #define _LIBUNWIND_EXPORT __declspec(dllexport) #define _LIBUNWIND_HIDDEN #else #define _LIBUNWIND_EXPORT __attribute__((visibility("default"))) #define _LIBUNWIND_HIDDEN __attribute__((visibility("hidden"))) #endif #endif #define STR(a) #a #define XSTR(a) STR(a) #define SYMBOL_NAME(name) XSTR(__USER_LABEL_PREFIX__) #name #if defined(__APPLE__) #if defined(_LIBUNWIND_HIDE_SYMBOLS) #define _LIBUNWIND_ALIAS_VISIBILITY(name) __asm__(".private_extern " name); #else #define _LIBUNWIND_ALIAS_VISIBILITY(name) #endif #define _LIBUNWIND_WEAK_ALIAS(name, aliasname) \ __asm__(".globl " SYMBOL_NAME(aliasname)); \ __asm__(SYMBOL_NAME(aliasname) " = " SYMBOL_NAME(name)); \ _LIBUNWIND_ALIAS_VISIBILITY(SYMBOL_NAME(aliasname)) #elif defined(__ELF__) || defined(_AIX) || defined(__wasm__) #define _LIBUNWIND_WEAK_ALIAS(name, aliasname) \ extern "C" _LIBUNWIND_EXPORT __typeof(name) aliasname \ __attribute__((weak, alias(#name))); #elif defined(_WIN32) #if defined(__MINGW32__) #define _LIBUNWIND_WEAK_ALIAS(name, aliasname) \ extern "C" _LIBUNWIND_EXPORT __typeof(name) aliasname \ __attribute__((alias(#name))); #else #define _LIBUNWIND_WEAK_ALIAS(name, aliasname) \ __pragma(comment(linker, "/alternatename:" SYMBOL_NAME(aliasname) "=" \ SYMBOL_NAME(name))) \ extern "C" _LIBUNWIND_EXPORT __typeof(name) aliasname; #endif #else #error Unsupported target #endif // Apple/armv7k defaults to DWARF/Compact unwinding, but its libunwind also // needs to include the SJLJ APIs. #if (defined(__APPLE__) && defined(__arm__)) || defined(__USING_SJLJ_EXCEPTIONS__) #define _LIBUNWIND_BUILD_SJLJ_APIS #endif #if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || \ (!defined(__APPLE__) && defined(__arm__)) || defined(__aarch64__) || \ defined(__mips__) || defined(__riscv) || defined(__hexagon__) || \ defined(__sparc__) || defined(__s390x__) || defined(__loongarch__) #if !defined(_LIBUNWIND_BUILD_SJLJ_APIS) #define _LIBUNWIND_BUILD_ZERO_COST_APIS #endif #endif #ifndef _LIBUNWIND_REMEMBER_HEAP_ALLOC #if defined(_LIBUNWIND_REMEMBER_STACK_ALLOC) || defined(__APPLE__) || \ defined(__linux__) || defined(__ANDROID__) || defined(__MINGW32__) || \ defined(_LIBUNWIND_IS_BAREMETAL) #define _LIBUNWIND_REMEMBER_ALLOC(_size) __builtin_alloca(_size) #define _LIBUNWIND_REMEMBER_FREE(_ptr) \ do { \ } while (0) #elif defined(_WIN32) #define _LIBUNWIND_REMEMBER_ALLOC(_size) _malloca(_size) #define _LIBUNWIND_REMEMBER_FREE(_ptr) _freea(_ptr) #define _LIBUNWIND_REMEMBER_CLEANUP_NEEDED #else #define _LIBUNWIND_REMEMBER_ALLOC(_size) malloc(_size) #define _LIBUNWIND_REMEMBER_FREE(_ptr) free(_ptr) #define _LIBUNWIND_REMEMBER_CLEANUP_NEEDED #endif #else /* _LIBUNWIND_REMEMBER_HEAP_ALLOC */ #define _LIBUNWIND_REMEMBER_ALLOC(_size) malloc(_size) #define _LIBUNWIND_REMEMBER_FREE(_ptr) free(_ptr) #define _LIBUNWIND_REMEMBER_CLEANUP_NEEDED #endif #if defined(NDEBUG) && defined(_LIBUNWIND_IS_BAREMETAL) #define _LIBUNWIND_ABORT(msg) \ do { \ abort(); \ } while (0) #else #define _LIBUNWIND_ABORT(msg) \ do { \ fprintf(stderr, "libunwind: %s - %s\n", __func__, msg); \ fflush(stderr); \ abort(); \ } while (0) #endif #if defined(NDEBUG) && defined(_LIBUNWIND_IS_BAREMETAL) #define _LIBUNWIND_LOG0(msg) #define _LIBUNWIND_LOG(msg, ...) #else #define _LIBUNWIND_LOG0(msg) do { \ fprintf(stderr, "libunwind: " msg "\n"); \ fflush(stderr); \ } while (0) #define _LIBUNWIND_LOG(msg, ...) do { \ fprintf(stderr, "libunwind: " msg "\n", __VA_ARGS__); \ fflush(stderr); \ } while (0) #endif #if defined(NDEBUG) #define _LIBUNWIND_LOG_IF_FALSE(x) x #else #define _LIBUNWIND_LOG_IF_FALSE(x) \ do { \ bool _ret = x; \ if (!_ret) \ _LIBUNWIND_LOG("" #x " failed in %s", __FUNCTION__); \ } while (0) #endif // Macros that define away in non-Debug builds #ifdef NDEBUG #define _LIBUNWIND_DEBUG_LOG(msg, ...) #define _LIBUNWIND_TRACE_API(msg, ...) #define _LIBUNWIND_TRACING_UNWINDING (0) #define _LIBUNWIND_TRACING_DWARF (0) #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) #define _LIBUNWIND_TRACE_DWARF(...) #else #ifdef __cplusplus extern "C" { #endif extern bool logAPIs(void); extern bool logUnwinding(void); extern bool logDWARF(void); #ifdef __cplusplus } #endif #define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__) #define _LIBUNWIND_TRACE_API(msg, ...) \ do { \ if (logAPIs()) \ _LIBUNWIND_LOG(msg, __VA_ARGS__); \ } while (0) #define _LIBUNWIND_TRACING_UNWINDING logUnwinding() #define _LIBUNWIND_TRACING_DWARF logDWARF() #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \ do { \ if (logUnwinding()) \ _LIBUNWIND_LOG(msg, __VA_ARGS__); \ } while (0) #define _LIBUNWIND_TRACE_DWARF(...) \ do { \ if (logDWARF()) \ fprintf(stderr, __VA_ARGS__); \ } while (0) #endif #ifdef __cplusplus // Used to fit UnwindCursor and Registers_xxx types against unw_context_t / // unw_cursor_t sized memory blocks. #if defined(_LIBUNWIND_IS_NATIVE_ONLY) # define COMP_OP == #else # define COMP_OP <= #endif template struct check_fit { template struct blk_count { static const size_t count = (sizeof(T) + sizeof(uint64_t) - 1) / sizeof(uint64_t); }; static const bool does_fit = (blk_count<_Type>::count COMP_OP blk_count<_Mem>::count); }; #undef COMP_OP #endif // __cplusplus #endif // LIBUNWIND_CONFIG_H ================================================ FILE: ThirdParty/libunwind/src/dwarf2.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /* These constants were taken from version 3 of the DWARF standard, which is Copyright (c) 2005 Free Standards Group, and Copyright (c) 1992, 1993 UNIX International, Inc. */ #ifndef __DWARF2__ #define __DWARF2__ // DWARF unwind instructions enum { DW_CFA_nop = 0x0, DW_CFA_set_loc = 0x1, DW_CFA_advance_loc1 = 0x2, DW_CFA_advance_loc2 = 0x3, DW_CFA_advance_loc4 = 0x4, DW_CFA_offset_extended = 0x5, DW_CFA_restore_extended = 0x6, DW_CFA_undefined = 0x7, DW_CFA_same_value = 0x8, DW_CFA_register = 0x9, DW_CFA_remember_state = 0xA, DW_CFA_restore_state = 0xB, DW_CFA_def_cfa = 0xC, DW_CFA_def_cfa_register = 0xD, DW_CFA_def_cfa_offset = 0xE, DW_CFA_def_cfa_expression = 0xF, DW_CFA_expression = 0x10, DW_CFA_offset_extended_sf = 0x11, DW_CFA_def_cfa_sf = 0x12, DW_CFA_def_cfa_offset_sf = 0x13, DW_CFA_val_offset = 0x14, DW_CFA_val_offset_sf = 0x15, DW_CFA_val_expression = 0x16, DW_CFA_advance_loc = 0x40, // high 2 bits are 0x1, lower 6 bits are delta DW_CFA_offset = 0x80, // high 2 bits are 0x2, lower 6 bits are register DW_CFA_restore = 0xC0, // high 2 bits are 0x3, lower 6 bits are register // GNU extensions DW_CFA_GNU_window_save = 0x2D, DW_CFA_GNU_args_size = 0x2E, DW_CFA_GNU_negative_offset_extended = 0x2F, // AARCH64 extensions DW_CFA_AARCH64_negate_ra_state_with_pc = 0x2C, DW_CFA_AARCH64_negate_ra_state = 0x2D }; // FSF exception handling Pointer-Encoding constants // Used in CFI augmentation by GCC enum { DW_EH_PE_ptr = 0x00, DW_EH_PE_uleb128 = 0x01, DW_EH_PE_udata2 = 0x02, DW_EH_PE_udata4 = 0x03, DW_EH_PE_udata8 = 0x04, DW_EH_PE_signed = 0x08, DW_EH_PE_sleb128 = 0x09, DW_EH_PE_sdata2 = 0x0A, DW_EH_PE_sdata4 = 0x0B, DW_EH_PE_sdata8 = 0x0C, DW_EH_PE_absptr = 0x00, DW_EH_PE_pcrel = 0x10, DW_EH_PE_textrel = 0x20, DW_EH_PE_datarel = 0x30, DW_EH_PE_funcrel = 0x40, DW_EH_PE_aligned = 0x50, DW_EH_PE_indirect = 0x80, DW_EH_PE_omit = 0xFF }; // DWARF expressions enum { DW_OP_addr = 0x03, // constant address (size target specific) DW_OP_deref = 0x06, DW_OP_const1u = 0x08, // 1-byte constant DW_OP_const1s = 0x09, // 1-byte constant DW_OP_const2u = 0x0A, // 2-byte constant DW_OP_const2s = 0x0B, // 2-byte constant DW_OP_const4u = 0x0C, // 4-byte constant DW_OP_const4s = 0x0D, // 4-byte constant DW_OP_const8u = 0x0E, // 8-byte constant DW_OP_const8s = 0x0F, // 8-byte constant DW_OP_constu = 0x10, // ULEB128 constant DW_OP_consts = 0x11, // SLEB128 constant DW_OP_dup = 0x12, DW_OP_drop = 0x13, DW_OP_over = 0x14, DW_OP_pick = 0x15, // 1-byte stack index DW_OP_swap = 0x16, DW_OP_rot = 0x17, DW_OP_xderef = 0x18, DW_OP_abs = 0x19, DW_OP_and = 0x1A, DW_OP_div = 0x1B, DW_OP_minus = 0x1C, DW_OP_mod = 0x1D, DW_OP_mul = 0x1E, DW_OP_neg = 0x1F, DW_OP_not = 0x20, DW_OP_or = 0x21, DW_OP_plus = 0x22, DW_OP_plus_uconst = 0x23, // ULEB128 addend DW_OP_shl = 0x24, DW_OP_shr = 0x25, DW_OP_shra = 0x26, DW_OP_xor = 0x27, DW_OP_skip = 0x2F, // signed 2-byte constant DW_OP_bra = 0x28, // signed 2-byte constant DW_OP_eq = 0x29, DW_OP_ge = 0x2A, DW_OP_gt = 0x2B, DW_OP_le = 0x2C, DW_OP_lt = 0x2D, DW_OP_ne = 0x2E, DW_OP_lit0 = 0x30, // Literal 0 DW_OP_lit1 = 0x31, // Literal 1 DW_OP_lit2 = 0x32, // Literal 2 DW_OP_lit3 = 0x33, // Literal 3 DW_OP_lit4 = 0x34, // Literal 4 DW_OP_lit5 = 0x35, // Literal 5 DW_OP_lit6 = 0x36, // Literal 6 DW_OP_lit7 = 0x37, // Literal 7 DW_OP_lit8 = 0x38, // Literal 8 DW_OP_lit9 = 0x39, // Literal 9 DW_OP_lit10 = 0x3A, // Literal 10 DW_OP_lit11 = 0x3B, // Literal 11 DW_OP_lit12 = 0x3C, // Literal 12 DW_OP_lit13 = 0x3D, // Literal 13 DW_OP_lit14 = 0x3E, // Literal 14 DW_OP_lit15 = 0x3F, // Literal 15 DW_OP_lit16 = 0x40, // Literal 16 DW_OP_lit17 = 0x41, // Literal 17 DW_OP_lit18 = 0x42, // Literal 18 DW_OP_lit19 = 0x43, // Literal 19 DW_OP_lit20 = 0x44, // Literal 20 DW_OP_lit21 = 0x45, // Literal 21 DW_OP_lit22 = 0x46, // Literal 22 DW_OP_lit23 = 0x47, // Literal 23 DW_OP_lit24 = 0x48, // Literal 24 DW_OP_lit25 = 0x49, // Literal 25 DW_OP_lit26 = 0x4A, // Literal 26 DW_OP_lit27 = 0x4B, // Literal 27 DW_OP_lit28 = 0x4C, // Literal 28 DW_OP_lit29 = 0x4D, // Literal 29 DW_OP_lit30 = 0x4E, // Literal 30 DW_OP_lit31 = 0x4F, // Literal 31 DW_OP_reg0 = 0x50, // Contents of reg0 DW_OP_reg1 = 0x51, // Contents of reg1 DW_OP_reg2 = 0x52, // Contents of reg2 DW_OP_reg3 = 0x53, // Contents of reg3 DW_OP_reg4 = 0x54, // Contents of reg4 DW_OP_reg5 = 0x55, // Contents of reg5 DW_OP_reg6 = 0x56, // Contents of reg6 DW_OP_reg7 = 0x57, // Contents of reg7 DW_OP_reg8 = 0x58, // Contents of reg8 DW_OP_reg9 = 0x59, // Contents of reg9 DW_OP_reg10 = 0x5A, // Contents of reg10 DW_OP_reg11 = 0x5B, // Contents of reg11 DW_OP_reg12 = 0x5C, // Contents of reg12 DW_OP_reg13 = 0x5D, // Contents of reg13 DW_OP_reg14 = 0x5E, // Contents of reg14 DW_OP_reg15 = 0x5F, // Contents of reg15 DW_OP_reg16 = 0x60, // Contents of reg16 DW_OP_reg17 = 0x61, // Contents of reg17 DW_OP_reg18 = 0x62, // Contents of reg18 DW_OP_reg19 = 0x63, // Contents of reg19 DW_OP_reg20 = 0x64, // Contents of reg20 DW_OP_reg21 = 0x65, // Contents of reg21 DW_OP_reg22 = 0x66, // Contents of reg22 DW_OP_reg23 = 0x67, // Contents of reg23 DW_OP_reg24 = 0x68, // Contents of reg24 DW_OP_reg25 = 0x69, // Contents of reg25 DW_OP_reg26 = 0x6A, // Contents of reg26 DW_OP_reg27 = 0x6B, // Contents of reg27 DW_OP_reg28 = 0x6C, // Contents of reg28 DW_OP_reg29 = 0x6D, // Contents of reg29 DW_OP_reg30 = 0x6E, // Contents of reg30 DW_OP_reg31 = 0x6F, // Contents of reg31 DW_OP_breg0 = 0x70, // base register 0 + SLEB128 offset DW_OP_breg1 = 0x71, // base register 1 + SLEB128 offset DW_OP_breg2 = 0x72, // base register 2 + SLEB128 offset DW_OP_breg3 = 0x73, // base register 3 + SLEB128 offset DW_OP_breg4 = 0x74, // base register 4 + SLEB128 offset DW_OP_breg5 = 0x75, // base register 5 + SLEB128 offset DW_OP_breg6 = 0x76, // base register 6 + SLEB128 offset DW_OP_breg7 = 0x77, // base register 7 + SLEB128 offset DW_OP_breg8 = 0x78, // base register 8 + SLEB128 offset DW_OP_breg9 = 0x79, // base register 9 + SLEB128 offset DW_OP_breg10 = 0x7A, // base register 10 + SLEB128 offset DW_OP_breg11 = 0x7B, // base register 11 + SLEB128 offset DW_OP_breg12 = 0x7C, // base register 12 + SLEB128 offset DW_OP_breg13 = 0x7D, // base register 13 + SLEB128 offset DW_OP_breg14 = 0x7E, // base register 14 + SLEB128 offset DW_OP_breg15 = 0x7F, // base register 15 + SLEB128 offset DW_OP_breg16 = 0x80, // base register 16 + SLEB128 offset DW_OP_breg17 = 0x81, // base register 17 + SLEB128 offset DW_OP_breg18 = 0x82, // base register 18 + SLEB128 offset DW_OP_breg19 = 0x83, // base register 19 + SLEB128 offset DW_OP_breg20 = 0x84, // base register 20 + SLEB128 offset DW_OP_breg21 = 0x85, // base register 21 + SLEB128 offset DW_OP_breg22 = 0x86, // base register 22 + SLEB128 offset DW_OP_breg23 = 0x87, // base register 23 + SLEB128 offset DW_OP_breg24 = 0x88, // base register 24 + SLEB128 offset DW_OP_breg25 = 0x89, // base register 25 + SLEB128 offset DW_OP_breg26 = 0x8A, // base register 26 + SLEB128 offset DW_OP_breg27 = 0x8B, // base register 27 + SLEB128 offset DW_OP_breg28 = 0x8C, // base register 28 + SLEB128 offset DW_OP_breg29 = 0x8D, // base register 29 + SLEB128 offset DW_OP_breg30 = 0x8E, // base register 30 + SLEB128 offset DW_OP_breg31 = 0x8F, // base register 31 + SLEB128 offset DW_OP_regx = 0x90, // ULEB128 register DW_OP_fbreg = 0x91, // SLEB128 offset DW_OP_bregx = 0x92, // ULEB128 register followed by SLEB128 offset DW_OP_piece = 0x93, // ULEB128 size of piece addressed DW_OP_deref_size = 0x94, // 1-byte size of data retrieved DW_OP_xderef_size = 0x95, // 1-byte size of data retrieved DW_OP_nop = 0x96, DW_OP_push_object_addres = 0x97, DW_OP_call2 = 0x98, // 2-byte offset of DIE DW_OP_call4 = 0x99, // 4-byte offset of DIE DW_OP_call_ref = 0x9A, // 4- or 8-byte offset of DIE DW_OP_lo_user = 0xE0, DW_OP_APPLE_uninit = 0xF0, DW_OP_hi_user = 0xFF }; #endif ================================================ FILE: ThirdParty/libunwind/src/libunwind.cpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Implements unw_* functions from // //===----------------------------------------------------------------------===// #include #include "config.h" #include "libunwind_ext.h" #include // Define the __has_feature extension for compilers that do not support it so // that we can later check for the presence of ASan in a compiler-neutral way. #if !defined(__has_feature) #define __has_feature(feature) 0 #endif #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) #include #endif #if !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__wasm__) #include "AddressSpace.hpp" #include "UnwindCursor.hpp" using namespace libunwind; /// internal object to represent this processes address space LocalAddressSpace LocalAddressSpace::sThisAddressSpace; _LIBUNWIND_EXPORT unw_addr_space_t unw_local_addr_space = (unw_addr_space_t)&LocalAddressSpace::sThisAddressSpace; /// Create a cursor of a thread in this process given 'context' recorded by /// __unw_getcontext(). _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor, unw_context_t *context) { _LIBUNWIND_TRACE_API("__unw_init_local(cursor=%p, context=%p)", static_cast(cursor), static_cast(context)); #if defined(__i386__) # define REGISTER_KIND Registers_x86 #elif defined(__x86_64__) # define REGISTER_KIND Registers_x86_64 #elif defined(__powerpc64__) # define REGISTER_KIND Registers_ppc64 #elif defined(__powerpc__) # define REGISTER_KIND Registers_ppc #elif defined(__aarch64__) # define REGISTER_KIND Registers_arm64 #elif defined(__arm__) # define REGISTER_KIND Registers_arm #elif defined(__or1k__) # define REGISTER_KIND Registers_or1k #elif defined(__hexagon__) # define REGISTER_KIND Registers_hexagon #elif defined(__mips__) && defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define REGISTER_KIND Registers_mips_o32 #elif defined(__mips64) # define REGISTER_KIND Registers_mips_newabi #elif defined(__mips__) # warning The MIPS architecture is not supported with this ABI and environment! #elif defined(__sparc__) && defined(__arch64__) #define REGISTER_KIND Registers_sparc64 #elif defined(__sparc__) # define REGISTER_KIND Registers_sparc #elif defined(__riscv) # define REGISTER_KIND Registers_riscv #elif defined(__ve__) # define REGISTER_KIND Registers_ve #elif defined(__s390x__) # define REGISTER_KIND Registers_s390x #elif defined(__loongarch__) && __loongarch_grlen == 64 #define REGISTER_KIND Registers_loongarch #else # error Architecture not supported #endif // Use "placement new" to allocate UnwindCursor in the cursor buffer. new (reinterpret_cast *>(cursor)) UnwindCursor( context, LocalAddressSpace::sThisAddressSpace); #undef REGISTER_KIND AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; co->setInfoBasedOnIPRegister(); return UNW_ESUCCESS; } _LIBUNWIND_WEAK_ALIAS(__unw_init_local, unw_init_local) /// Get value of specified register at cursor position in stack frame. _LIBUNWIND_HIDDEN int __unw_get_reg(unw_cursor_t *cursor, unw_regnum_t regNum, unw_word_t *value) { _LIBUNWIND_TRACE_API("__unw_get_reg(cursor=%p, regNum=%d, &value=%p)", static_cast(cursor), regNum, static_cast(value)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; if (co->validReg(regNum)) { *value = co->getReg(regNum); return UNW_ESUCCESS; } return UNW_EBADREG; } _LIBUNWIND_WEAK_ALIAS(__unw_get_reg, unw_get_reg) /// Set value of specified register at cursor position in stack frame. _LIBUNWIND_HIDDEN int __unw_set_reg(unw_cursor_t *cursor, unw_regnum_t regNum, unw_word_t value) { _LIBUNWIND_TRACE_API("__unw_set_reg(cursor=%p, regNum=%d, value=0x%" PRIxPTR ")", static_cast(cursor), regNum, value); typedef LocalAddressSpace::pint_t pint_t; AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; if (co->validReg(regNum)) { co->setReg(regNum, (pint_t)value); // special case altering IP to re-find info (being called by personality // function) if (regNum == UNW_REG_IP) { unw_proc_info_t info; // First, get the FDE for the old location and then update it. co->getInfo(&info); co->setInfoBasedOnIPRegister(false); // If the original call expects stack adjustment, perform this now. // Normal frame unwinding would have included the offset already in the // CFA computation. // Note: for PA-RISC and other platforms where the stack grows up, // this should actually be - info.gp. LLVM doesn't currently support // any such platforms and Clang doesn't export a macro for them. if (info.gp) co->setReg(UNW_REG_SP, co->getReg(UNW_REG_SP) + info.gp); } return UNW_ESUCCESS; } return UNW_EBADREG; } _LIBUNWIND_WEAK_ALIAS(__unw_set_reg, unw_set_reg) /// Get value of specified float register at cursor position in stack frame. _LIBUNWIND_HIDDEN int __unw_get_fpreg(unw_cursor_t *cursor, unw_regnum_t regNum, unw_fpreg_t *value) { _LIBUNWIND_TRACE_API("__unw_get_fpreg(cursor=%p, regNum=%d, &value=%p)", static_cast(cursor), regNum, static_cast(value)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; if (co->validFloatReg(regNum)) { *value = co->getFloatReg(regNum); return UNW_ESUCCESS; } return UNW_EBADREG; } _LIBUNWIND_WEAK_ALIAS(__unw_get_fpreg, unw_get_fpreg) /// Set value of specified float register at cursor position in stack frame. _LIBUNWIND_HIDDEN int __unw_set_fpreg(unw_cursor_t *cursor, unw_regnum_t regNum, unw_fpreg_t value) { #if defined(_LIBUNWIND_ARM_EHABI) _LIBUNWIND_TRACE_API("__unw_set_fpreg(cursor=%p, regNum=%d, value=%llX)", static_cast(cursor), regNum, value); #else _LIBUNWIND_TRACE_API("__unw_set_fpreg(cursor=%p, regNum=%d, value=%g)", static_cast(cursor), regNum, value); #endif AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; if (co->validFloatReg(regNum)) { co->setFloatReg(regNum, value); return UNW_ESUCCESS; } return UNW_EBADREG; } _LIBUNWIND_WEAK_ALIAS(__unw_set_fpreg, unw_set_fpreg) /// Move cursor to next frame. _LIBUNWIND_HIDDEN int __unw_step(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("__unw_step(cursor=%p)", static_cast(cursor)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->step(); } _LIBUNWIND_WEAK_ALIAS(__unw_step, unw_step) // Move cursor to next frame and for stage2 of unwinding. // This resets MTE tags of tagged frames to zero. extern "C" _LIBUNWIND_HIDDEN int __unw_step_stage2(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("__unw_step_stage2(cursor=%p)", static_cast(cursor)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->step(true); } /// Get unwind info at cursor position in stack frame. _LIBUNWIND_HIDDEN int __unw_get_proc_info(unw_cursor_t *cursor, unw_proc_info_t *info) { _LIBUNWIND_TRACE_API("__unw_get_proc_info(cursor=%p, &info=%p)", static_cast(cursor), static_cast(info)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; co->getInfo(info); if (info->end_ip == 0) return UNW_ENOINFO; return UNW_ESUCCESS; } _LIBUNWIND_WEAK_ALIAS(__unw_get_proc_info, unw_get_proc_info) /// Resume execution at cursor position (aka longjump). _LIBUNWIND_HIDDEN int __unw_resume(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("__unw_resume(cursor=%p)", static_cast(cursor)); #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) // Inform the ASan runtime that now might be a good time to clean stuff up. __asan_handle_no_return(); #endif AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; co->jumpto(); return UNW_EUNSPEC; } _LIBUNWIND_WEAK_ALIAS(__unw_resume, unw_resume) /// Get name of function at cursor position in stack frame. _LIBUNWIND_HIDDEN int __unw_get_proc_name(unw_cursor_t *cursor, char *buf, size_t bufLen, unw_word_t *offset) { _LIBUNWIND_TRACE_API("__unw_get_proc_name(cursor=%p, &buf=%p, bufLen=%lu)", static_cast(cursor), static_cast(buf), static_cast(bufLen)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; if (co->getFunctionName(buf, bufLen, offset)) return UNW_ESUCCESS; return UNW_EUNSPEC; } _LIBUNWIND_WEAK_ALIAS(__unw_get_proc_name, unw_get_proc_name) /// Checks if a register is a floating-point register. _LIBUNWIND_HIDDEN int __unw_is_fpreg(unw_cursor_t *cursor, unw_regnum_t regNum) { _LIBUNWIND_TRACE_API("__unw_is_fpreg(cursor=%p, regNum=%d)", static_cast(cursor), regNum); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->validFloatReg(regNum); } _LIBUNWIND_WEAK_ALIAS(__unw_is_fpreg, unw_is_fpreg) /// Checks if a register is a floating-point register. _LIBUNWIND_HIDDEN const char *__unw_regname(unw_cursor_t *cursor, unw_regnum_t regNum) { _LIBUNWIND_TRACE_API("__unw_regname(cursor=%p, regNum=%d)", static_cast(cursor), regNum); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->getRegisterName(regNum); } _LIBUNWIND_WEAK_ALIAS(__unw_regname, unw_regname) /// Checks if current frame is signal trampoline. _LIBUNWIND_HIDDEN int __unw_is_signal_frame(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("__unw_is_signal_frame(cursor=%p)", static_cast(cursor)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->isSignalFrame(); } _LIBUNWIND_WEAK_ALIAS(__unw_is_signal_frame, unw_is_signal_frame) #ifdef _AIX _LIBUNWIND_EXPORT uintptr_t __unw_get_data_rel_base(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("unw_get_data_rel_base(cursor=%p)", static_cast(cursor)); AbstractUnwindCursor *co = reinterpret_cast(cursor); return co->getDataRelBase(); } _LIBUNWIND_WEAK_ALIAS(__unw_get_data_rel_base, unw_get_data_rel_base) #endif #ifdef __arm__ // Save VFP registers d0-d15 using FSTMIADX instead of FSTMIADD _LIBUNWIND_HIDDEN void __unw_save_vfp_as_X(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("__unw_get_fpreg_save_vfp_as_X(cursor=%p)", static_cast(cursor)); AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; return co->saveVFPAsX(); } _LIBUNWIND_WEAK_ALIAS(__unw_save_vfp_as_X, unw_save_vfp_as_X) #endif #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) /// SPI: walks cached DWARF entries _LIBUNWIND_HIDDEN void __unw_iterate_dwarf_unwind_cache(void (*func)( unw_word_t ip_start, unw_word_t ip_end, unw_word_t fde, unw_word_t mh)) { _LIBUNWIND_TRACE_API("__unw_iterate_dwarf_unwind_cache(func=%p)", reinterpret_cast(func)); DwarfFDECache::iterateCacheEntries(func); } _LIBUNWIND_WEAK_ALIAS(__unw_iterate_dwarf_unwind_cache, unw_iterate_dwarf_unwind_cache) /// IPI: for __register_frame() void __unw_add_dynamic_fde(unw_word_t fde) { CFI_Parser::FDE_Info fdeInfo; CFI_Parser::CIE_Info cieInfo; const char *message = CFI_Parser::decodeFDE( LocalAddressSpace::sThisAddressSpace, (LocalAddressSpace::pint_t) fde, &fdeInfo, &cieInfo); if (message == NULL) { // dynamically registered FDEs don't have a mach_header group they are in. // Use fde as mh_group unw_word_t mh_group = fdeInfo.fdeStart; DwarfFDECache::add((LocalAddressSpace::pint_t)mh_group, fdeInfo.pcStart, fdeInfo.pcEnd, fdeInfo.fdeStart, true); } else { _LIBUNWIND_DEBUG_LOG("__unw_add_dynamic_fde: bad fde: %s", message); } } /// IPI: for __deregister_frame() void __unw_remove_dynamic_fde(unw_word_t fde) { // fde is own mh_group DwarfFDECache::removeAllIn((LocalAddressSpace::pint_t)fde); } void __unw_add_dynamic_eh_frame_section(unw_word_t eh_frame_start) { // The eh_frame section start serves as the mh_group unw_word_t mh_group = eh_frame_start; CFI_Parser::CIE_Info cieInfo; CFI_Parser::FDE_Info fdeInfo; auto p = (LocalAddressSpace::pint_t)eh_frame_start; while (LocalAddressSpace::sThisAddressSpace.get32(p)) { if (CFI_Parser::decodeFDE( LocalAddressSpace::sThisAddressSpace, p, &fdeInfo, &cieInfo, true) == NULL) { DwarfFDECache::add((LocalAddressSpace::pint_t)mh_group, fdeInfo.pcStart, fdeInfo.pcEnd, fdeInfo.fdeStart, true); p += fdeInfo.fdeLength; } else if (CFI_Parser::parseCIE( LocalAddressSpace::sThisAddressSpace, p, &cieInfo) == NULL) { p += cieInfo.cieLength; } else return; } } void __unw_remove_dynamic_eh_frame_section(unw_word_t eh_frame_start) { // The eh_frame section start serves as the mh_group DwarfFDECache::removeAllIn( (LocalAddressSpace::pint_t)eh_frame_start); } #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) #endif // !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__wasm__) #ifdef __APPLE__ namespace libunwind { static constexpr size_t MAX_DYNAMIC_UNWIND_SECTIONS_FINDERS = 8; static RWMutex findDynamicUnwindSectionsLock; static size_t numDynamicUnwindSectionsFinders = 0; static unw_find_dynamic_unwind_sections dynamicUnwindSectionsFinders[MAX_DYNAMIC_UNWIND_SECTIONS_FINDERS] = {0}; bool findDynamicUnwindSections(void *addr, unw_dynamic_unwind_sections *info) { bool found = false; findDynamicUnwindSectionsLock.lock_shared(); for (size_t i = 0; i != numDynamicUnwindSectionsFinders; ++i) { if (dynamicUnwindSectionsFinders[i]((unw_word_t)addr, info)) { found = true; break; } } findDynamicUnwindSectionsLock.unlock_shared(); return found; } } // namespace libunwind int __unw_add_find_dynamic_unwind_sections( unw_find_dynamic_unwind_sections find_dynamic_unwind_sections) { findDynamicUnwindSectionsLock.lock(); // Check that we have enough space... if (numDynamicUnwindSectionsFinders == MAX_DYNAMIC_UNWIND_SECTIONS_FINDERS) { findDynamicUnwindSectionsLock.unlock(); return UNW_ENOMEM; } // Check for value already present... for (size_t i = 0; i != numDynamicUnwindSectionsFinders; ++i) { if (dynamicUnwindSectionsFinders[i] == find_dynamic_unwind_sections) { findDynamicUnwindSectionsLock.unlock(); return UNW_EINVAL; } } // Success -- add callback entry. dynamicUnwindSectionsFinders[numDynamicUnwindSectionsFinders++] = find_dynamic_unwind_sections; findDynamicUnwindSectionsLock.unlock(); return UNW_ESUCCESS; } int __unw_remove_find_dynamic_unwind_sections( unw_find_dynamic_unwind_sections find_dynamic_unwind_sections) { findDynamicUnwindSectionsLock.lock(); // Find index to remove. size_t finderIdx = numDynamicUnwindSectionsFinders; for (size_t i = 0; i != numDynamicUnwindSectionsFinders; ++i) { if (dynamicUnwindSectionsFinders[i] == find_dynamic_unwind_sections) { finderIdx = i; break; } } // If no such registration is present then error out. if (finderIdx == numDynamicUnwindSectionsFinders) { findDynamicUnwindSectionsLock.unlock(); return UNW_EINVAL; } // Remove entry. for (size_t i = finderIdx; i != numDynamicUnwindSectionsFinders - 1; ++i) dynamicUnwindSectionsFinders[i] = dynamicUnwindSectionsFinders[i + 1]; dynamicUnwindSectionsFinders[--numDynamicUnwindSectionsFinders] = nullptr; findDynamicUnwindSectionsLock.unlock(); return UNW_ESUCCESS; } #endif // __APPLE__ // Add logging hooks in Debug builds only #ifndef NDEBUG #include _LIBUNWIND_HIDDEN bool logAPIs() { // do manual lock to avoid use of _cxa_guard_acquire or initializers static bool checked = false; static bool log = false; if (!checked) { log = (getenv("LIBUNWIND_PRINT_APIS") != NULL); checked = true; } return log; } _LIBUNWIND_HIDDEN bool logUnwinding() { // do manual lock to avoid use of _cxa_guard_acquire or initializers static bool checked = false; static bool log = false; if (!checked) { log = (getenv("LIBUNWIND_PRINT_UNWINDING") != NULL); checked = true; } return log; } _LIBUNWIND_HIDDEN bool logDWARF() { // do manual lock to avoid use of _cxa_guard_acquire or initializers static bool checked = false; static bool log = false; if (!checked) { log = (getenv("LIBUNWIND_PRINT_DWARF") != NULL); checked = true; } return log; } #endif // NDEBUG ================================================ FILE: ThirdParty/libunwind/src/libunwind_ext.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // // Extensions to libunwind API. // //===----------------------------------------------------------------------===// #ifndef __LIBUNWIND_EXT__ #define __LIBUNWIND_EXT__ #include "config.h" #include #include #define UNW_STEP_SUCCESS 1 #define UNW_STEP_END 0 #ifdef __cplusplus extern "C" { #endif extern int __unw_getcontext(unw_context_t *); extern int __unw_init_local(unw_cursor_t *, unw_context_t *); extern int __unw_step(unw_cursor_t *); extern int __unw_get_reg(unw_cursor_t *, unw_regnum_t, unw_word_t *); extern int __unw_get_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t *); extern int __unw_set_reg(unw_cursor_t *, unw_regnum_t, unw_word_t); extern int __unw_set_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t); extern int __unw_resume(unw_cursor_t *); #ifdef __arm__ /* Save VFP registers in FSTMX format (instead of FSTMD). */ extern void __unw_save_vfp_as_X(unw_cursor_t *); #endif extern const char *__unw_regname(unw_cursor_t *, unw_regnum_t); extern int __unw_get_proc_info(unw_cursor_t *, unw_proc_info_t *); extern int __unw_is_fpreg(unw_cursor_t *, unw_regnum_t); extern int __unw_is_signal_frame(unw_cursor_t *); extern int __unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *); #if defined(_AIX) extern uintptr_t __unw_get_data_rel_base(unw_cursor_t *); #endif // SPI extern void __unw_iterate_dwarf_unwind_cache(void (*func)( unw_word_t ip_start, unw_word_t ip_end, unw_word_t fde, unw_word_t mh)); // IPI extern void __unw_add_dynamic_fde(unw_word_t fde); extern void __unw_remove_dynamic_fde(unw_word_t fde); extern void __unw_add_dynamic_eh_frame_section(unw_word_t eh_frame_start); extern void __unw_remove_dynamic_eh_frame_section(unw_word_t eh_frame_start); #ifdef __APPLE__ // Holds a description of the object-format-header (if any) and unwind info // sections for a given address: // // * dso_base should point to a header for the JIT'd object containing the // given address. The header's type should match the format type that // libunwind was compiled for (so a mach_header or mach_header_64 on Darwin). // A value of zero indicates that no such header exists. // // * dwarf_section and dwarf_section_length hold the address range of a DWARF // eh-frame section associated with the given address, if any. If the // dwarf_section_length field is zero it indicates that no such section // exists (and in this case dwarf_section should also be set to zero). // // * compact_unwind_section and compact_unwind_section_length hold the address // range of a compact-unwind info section associated with the given address, // if any. If the compact_unwind_section_length field is zero it indicates // that no such section exists (and in this case compact_unwind_section // should also be set to zero). // // See the unw_find_dynamic_unwind_sections type below for more details. struct unw_dynamic_unwind_sections { unw_word_t dso_base; unw_word_t dwarf_section; size_t dwarf_section_length; unw_word_t compact_unwind_section; size_t compact_unwind_section_length; }; // Typedef for unwind-info lookup callbacks. Functions of this type can be // registered and deregistered using __unw_add_find_dynamic_unwind_sections // and __unw_remove_find_dynamic_unwind_sections respectively. // // An unwind-info lookup callback should return 1 to indicate that it found // unwind-info for the given address, or 0 to indicate that it did not find // unwind-info for the given address. If found, the callback should populate // some or all of the fields of the info argument (which is guaranteed to be // non-null with all fields zero-initialized): typedef int (*unw_find_dynamic_unwind_sections)( unw_word_t addr, struct unw_dynamic_unwind_sections *info); // Register a dynamic unwind-info lookup callback. If libunwind does not find // unwind info for a given frame in the executable program or normal dynamic // shared objects then it will call all registered dynamic lookup functions // in registration order until either one of them returns true, or the end // of the list is reached. This lookup will happen before libunwind searches // any eh-frames registered via __register_frame or // __unw_add_dynamic_eh_frame_section. // // Returns UNW_ESUCCESS for successful registrations. If the given callback // has already been registered then UNW_EINVAL will be returned. If all // available callback entries are in use then UNW_ENOMEM will be returned. extern int __unw_add_find_dynamic_unwind_sections( unw_find_dynamic_unwind_sections find_dynamic_unwind_sections); // Deregister a dynacim unwind-info lookup callback. // // Returns UNW_ESUCCESS for successful deregistrations. If the given callback // has already been registered then UNW_EINVAL will be returned. extern int __unw_remove_find_dynamic_unwind_sections( unw_find_dynamic_unwind_sections find_dynamic_unwind_sections); #endif #if defined(_LIBUNWIND_ARM_EHABI) extern const uint32_t* decode_eht_entry(const uint32_t*, size_t*, size_t*); extern _Unwind_Reason_Code _Unwind_VRS_Interpret(_Unwind_Context *context, const uint32_t *data, size_t offset, size_t len); #endif #ifdef __cplusplus } #endif #endif // __LIBUNWIND_EXT__ ================================================ FILE: ThirdParty/libunwind/src/shadow_stack_unwind.h ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // //===----------------------------------------------------------------------===// #ifndef LIBUNWIND_SHADOW_STACK_UNWIND_H #define LIBUNWIND_SHADOW_STACK_UNWIND_H #include "libunwind.h" // Currently, CET is implemented on Linux x86 platforms. #if defined(_LIBUNWIND_TARGET_LINUX) && defined(__CET__) && defined(__SHSTK__) #define _LIBUNWIND_USE_CET 1 #endif #if defined(_LIBUNWIND_USE_CET) #include #include #define _LIBUNWIND_POP_SHSTK_SSP(x) \ do { \ unsigned long ssp = _get_ssp(); \ if (ssp != 0) { \ unsigned int tmp = (x); \ while (tmp > 255) { \ _inc_ssp(255); \ tmp -= 255; \ } \ _inc_ssp(tmp); \ } \ } while (0) #endif // On AArch64 we use _LIBUNWIND_USE_GCS to indicate that GCS is supported. We // need to guard any use of GCS instructions with __chkfeat though, as GCS may // not be enabled. #if defined(_LIBUNWIND_TARGET_AARCH64) && defined(__ARM_FEATURE_GCS_DEFAULT) #include // We can only use GCS if arm_acle.h defines the GCS intrinsics. #ifdef _CHKFEAT_GCS #define _LIBUNWIND_USE_GCS 1 #endif #define _LIBUNWIND_POP_SHSTK_SSP(x) \ do { \ if (__chkfeat(_CHKFEAT_GCS)) { \ unsigned tmp = (x); \ while (tmp--) \ __gcspopm(); \ } \ } while (0) #endif extern void *__libunwind_shstk_get_registers(unw_cursor_t *); extern void *__libunwind_shstk_get_jump_target(void); #endif ================================================ FILE: ThirdParty/libunwind/test/CMakeLists.txt ================================================ include(AddLLVM) # for add_lit_testsuite include(HandleLitArguments) macro(pythonize_bool var) if (${var}) set(${var} True) else() set(${var} False) endif() endmacro() set(LIBUNWIND_TESTING_INSTALL_PREFIX "${LIBUNWIND_BINARY_DIR}/test-suite-install") add_custom_target(libunwind-install-unwind-for-testing DEPENDS unwind-headers unwind COMMAND ${CMAKE_COMMAND} -E make_directory "${LIBUNWIND_TESTING_INSTALL_PREFIX}" COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=unwind-headers -DCMAKE_INSTALL_PREFIX="${LIBUNWIND_TESTING_INSTALL_PREFIX}" -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=unwind -DCMAKE_INSTALL_PREFIX="${LIBUNWIND_TESTING_INSTALL_PREFIX}" -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") pythonize_bool(LIBUNWIND_ENABLE_CET) pythonize_bool(LIBUNWIND_ENABLE_GCS) pythonize_bool(LIBUNWIND_ENABLE_THREADS) pythonize_bool(LIBUNWIND_USES_ARM_EHABI) set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!") set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n") serialize_lit_string_param(SERIALIZED_LIT_PARAMS compiler "${CMAKE_CXX_COMPILER}") if (LIBUNWIND_EXECUTOR) message(DEPRECATION "LIBUNWIND_EXECUTOR is deprecated, please add executor=... to LIBUNWIND_TEST_PARAMS") serialize_lit_string_param(SERIALIZED_LIT_PARAMS executor "${LIBUNWIND_EXECUTOR}") endif() serialize_lit_param(SERIALIZED_LIT_PARAMS enable_experimental False) if (LLVM_USE_SANITIZER) serialize_lit_string_param(SERIALIZED_LIT_PARAMS use_sanitizer "${LLVM_USE_SANITIZER}") endif() if (CMAKE_CXX_COMPILER_TARGET) serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${CMAKE_CXX_COMPILER_TARGET}") else() serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${LLVM_DEFAULT_TARGET_TRIPLE}") endif() serialize_lit_params_list(SERIALIZED_LIT_PARAMS LIBUNWIND_TEST_PARAMS) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/cmake-bridge.cfg.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake-bridge.cfg" @ONLY) configure_lit_site_cfg( "${LIBUNWIND_TEST_CONFIG}" ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py") add_lit_testsuite(check-unwind "Running libunwind tests" ${CMAKE_CURRENT_BINARY_DIR} DEPENDS libunwind-install-unwind-for-testing) ================================================ FILE: ThirdParty/libunwind/test/aix_runtime_link.pass.cpp ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Test that libunwind loads successfully independently of libc++abi with // runtime linking on AIX. // REQUIRES: target={{.+}}-aix{{.*}} // ADDITIONAL_COMPILE_FLAGS: -Wl,-brtl #include extern "C" int printf(const char *, ...); int main(void) { void *fp = (void *)&_Unwind_Backtrace; printf("%p\n", fp); } ================================================ FILE: ThirdParty/libunwind/test/aix_signal_unwind.pass.sh.S ================================================ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Test that _Unwind_Backtrace() walks up from a signal handler and produces // a correct traceback when the function raising the signal does not save // the link register or does not store the stack back chain. // REQUIRES: target={{.+}}-aix{{.*}} // Test when the function raising the signal does not save the link register // RUN: %{cxx} -x c++ %s -o %t.exe -DCXX_CODE %{flags} %{compile_flags} // RUN: %{exec} %t.exe // Test when the function raising the signal does not store stack back chain. // RUN: %{cxx} -x c++ -c %s -o %t1.o -DCXX_CODE -DNOBACKCHAIN %{flags} \ // RUN: %{compile_flags} // RUN: %{cxx} -c %s -o %t2.o %{flags} %{compile_flags} // RUN: %{cxx} -o %t1.exe %t1.o %t2.o %{flags} %{link_flags} // RUN: %{exec} %t1.exe #ifdef CXX_CODE #undef NDEBUG #include #include #include #include #include #include #include #define NAME_ARRAY_SIZE 10 #define NAMES_EXPECTED 6 const char* namesExpected[] = {"handler", "abc", "bar", "foo", "main", "__start"}; char *namesObtained[NAME_ARRAY_SIZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int funcIndex = 0; // Get the function name from traceback table. char *getFuncName(uintptr_t pc, uint16_t *nameLen) { uint32_t *p = reinterpret_cast(pc); // Keep looking forward until a word of 0 is found. The traceback // table starts at the following word. while (*p) ++p; tbtable *TBTable = reinterpret_cast(p + 1); if (!TBTable->tb.name_present) return NULL; // Get to the optional portion of the traceback table. p = reinterpret_cast(&TBTable->tb_ext); // Skip field parminfo if it exists. if (TBTable->tb.fixedparms || TBTable->tb.floatparms) ++p; // Skip field tb_offset if it exists. if (TBTable->tb.has_tboff) ++p; // Skip field hand_mask if it exists. if (TBTable->tb.int_hndl) ++p; // Skip fields ctl_info and ctl_info_disp if they exist. if (TBTable->tb.has_ctl) p += 1 + *p; *nameLen = *reinterpret_cast(p); return reinterpret_cast(p) + sizeof(uint16_t); } _Unwind_Reason_Code callBack(struct _Unwind_Context *uc, void *arg) { (void)arg; uint16_t nameLen; uintptr_t ip = _Unwind_GetIP(uc); if (funcIndex < NAME_ARRAY_SIZE) namesObtained[funcIndex++] = strndup(getFuncName(ip, &nameLen), nameLen); return _URC_NO_REASON; } extern "C" void handler(int signum) { (void)signum; // Walk stack frames for traceback. _Unwind_Backtrace(callBack, NULL); // Verify the traceback. assert(funcIndex <= NAMES_EXPECTED && "Obtained names more than expected"); for (int i = 0; i < funcIndex; ++i) { assert(!strcmp(namesExpected[i], namesObtained[i]) && "Function names do not match"); free(namesObtained[i]); } exit(0); } #ifdef NOBACKCHAIN // abc() is in assembly. It raises signal SIGSEGV and does not store // the stack back chain. extern "C" void abc(); #else volatile int *null = 0; // abc() raises signal SIGSEGV and does not save the link register. extern "C" __attribute__((noinline)) void abc() { // Produce a SIGSEGV. *null = 0; } #endif extern "C" __attribute__((noinline)) void bar() { abc(); } extern "C" __attribute__((noinline)) void foo() { bar(); } int main() { // Set signal handler for SIGSEGV. signal(SIGSEGV, handler); foo(); } #else // Assembly code for abc(). // This assembly code is similar to the following C code but it saves the // link register. // // int *badp = 0; // void abc() { // *badp = 0; // } #ifdef __64BIT__ .csect [PR],5 .file "abc.c" .globl abc[DS] # -- Begin function abc .globl .abc .align 4 .csect abc[DS],3 .vbyte 8, .abc # @abc .vbyte 8, TOC[TC0] .vbyte 8, 0 .csect [PR],5 .abc: # %bb.0: # %entry mflr 0 std 0, 16(1) ld 3, L..C0(2) # @badp bl $+4 ld 4, 0(3) li 3, 0 stw 3, 0(4) ld 0, 16(1) mtlr 0 blr L..abc0: .vbyte 4, 0x00000000 # Traceback table begin .byte 0x00 # Version = 0 .byte 0x09 # Language = CPlusPlus .byte 0x20 # -IsGlobaLinkage, -IsOutOfLineEpilogOrPrologue # +HasTraceBackTableOffset, -IsInternalProcedure # -HasControlledStorage, -IsTOCless # -IsFloatingPointPresent # -IsFloatingPointOperationLogOrAbortEnabled .byte 0x61 # -IsInterruptHandler, +IsFunctionNamePresent, +IsAllocaUsed # OnConditionDirective = 0, -IsCRSaved, +IsLRSaved .byte 0x00 # -IsBackChainStored, -IsFixup, NumOfFPRsSaved = 0 .byte 0x01 # -HasExtensionTable, -HasVectorInfo, NumOfGPRsSaved = 1 .byte 0x00 # NumberOfFixedParms = 0 .byte 0x01 # NumberOfFPParms = 0, +HasParmsOnStack .vbyte 4, L..abc0-.abc # Function size .vbyte 2, 0x0003 # Function name len = 3 .byte "abc" # Function Name .byte 0x1f # AllocaUsed # -- End function .csect badp[RW],3 .globl badp[RW] # @badp .align 3 .vbyte 8, 0 .toc L..C0: .tc badp[TC],badp[RW] #else .csect [PR],5 .file "abc.c" .globl abc[DS] # -- Begin function abc .globl .abc .align 4 .csect abc[DS],2 .vbyte 4, .abc # @abc .vbyte 4, TOC[TC0] .vbyte 4, 0 .csect [PR],5 .abc: # %bb.0: # %entry mflr 0 stw 0, 8(1) lwz 3, L..C0(2) # @badp bl $+4 lwz 4, 0(3) li 3, 0 stw 3, 0(4) lwz 0, 8(1) mtlr 0 blr L..abc0: .vbyte 4, 0x00000000 # Traceback table begin .byte 0x00 # Version = 0 .byte 0x09 # Language = CPlusPlus .byte 0x20 # -IsGlobaLinkage, -IsOutOfLineEpilogOrPrologue # +HasTraceBackTableOffset, -IsInternalProcedure # -HasControlledStorage, -IsTOCless # -IsFloatingPointPresent # -IsFloatingPointOperationLogOrAbortEnabled .byte 0x61 # -IsInterruptHandler, +IsFunctionNamePresent, +IsAllocaUsed # OnConditionDirective = 0, -IsCRSaved, +IsLRSaved .byte 0x00 # -IsBackChainStored, -IsFixup, NumOfFPRsSaved = 0 .byte 0x01 # -HasExtensionTable, -HasVectorInfo, NumOfGPRsSaved = 1 .byte 0x00 # NumberOfFixedParms = 0 .byte 0x01 # NumberOfFPParms = 0, +HasParmsOnStack .vbyte 4, L..abc0-.abc # Function size .vbyte 2, 0x0003 # Function name len = 3 .byte "abc" # Function Name .byte 0x1f # AllocaUsed # -- End function .csect badp[RW],2 .globl badp[RW] # @badp .align 2 .vbyte 4, 0 .toc L..C0: .tc badp[TC],badp[RW] #endif // __64BIT__ #endif // CXX_CODE ================================================ FILE: ThirdParty/libunwind/test/alignment.compile.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // The Itanium ABI requires that _Unwind_Exception objects are "double-word // aligned". #include // EHABI : 8-byte aligned // itanium: largest supported alignment for the system #if defined(_LIBUNWIND_ARM_EHABI) static_assert(alignof(_Unwind_Control_Block) == 8, "_Unwind_Control_Block must be double-word aligned"); #else struct MaxAligned {} __attribute__((__aligned__)); static_assert(alignof(_Unwind_Exception) == alignof(MaxAligned), "_Unwind_Exception must be maximally aligned"); #endif ================================================ FILE: ThirdParty/libunwind/test/bad_unwind_info.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Ensure that libunwind doesn't crash on invalid info; the Linux aarch64 // sigreturn frame check would previously attempt to access invalid memory in // this scenario. // REQUIRES: target={{(aarch64|s390x|x86_64)-.+linux.*}} // GCC doesn't support __attribute__((naked)) on AArch64. // UNSUPPORTED: gcc // Inline assembly is incompatible with MSAN. // UNSUPPORTED: msan #undef NDEBUG #include #include #include __attribute__((naked)) void bad_unwind_info() { #if defined(__aarch64__) __asm__("// not using 0 because unwinder was already resilient to that\n" "mov x8, #4\n" "stp x30, x8, [sp, #-16]!\n" ".cfi_def_cfa_offset 16\n" "// purposely use incorrect offset for x30\n" ".cfi_offset x30, -8\n" "bl stepper\n" "ldr x30, [sp], #16\n" ".cfi_def_cfa_offset 0\n" ".cfi_restore x30\n" "ret\n"); #elif defined(__s390x__) __asm__("stmg %r14,%r15,112(%r15)\n" "mvghi 104(%r15),4\n" "# purposely use incorrect offset for %r14\n" ".cfi_offset 14, -56\n" ".cfi_offset 15, -40\n" "lay %r15,-160(%r15)\n" ".cfi_def_cfa_offset 320\n" "brasl %r14,stepper\n" "lmg %r14,%r15,272(%r15)\n" ".cfi_restore 15\n" ".cfi_restore 14\n" ".cfi_def_cfa_offset 160\n" "br %r14\n"); #elif defined(__x86_64__) __asm__("pushq %rbx\n" ".cfi_def_cfa_offset 16\n" "movq 8(%rsp), %rbx\n" "# purposely corrupt return value on stack\n" "movq $4, 8(%rsp)\n" "callq stepper\n" "movq %rbx, 8(%rsp)\n" "popq %rbx\n" ".cfi_def_cfa_offset 8\n" "ret\n"); #else #error This test is only supported on aarch64, s390x, or x86-64 #endif } extern "C" void stepper() { unw_cursor_t cursor; unw_context_t uc; unw_getcontext(&uc); unw_init_local(&cursor, &uc); // stepping to bad_unwind_info should succeed assert(unw_step(&cursor) > 0); // stepping past bad_unwind_info should fail but not crash assert(unw_step(&cursor) <= 0); } int main() { bad_unwind_info(); } ================================================ FILE: ThirdParty/libunwind/test/configs/apple-libunwind-system.cfg.in ================================================ # Testing configuration for back-deployment against the system-provided libunwind. # # Under this configuration, we compile and link all the test suite against the just-built # libunwind, but we run against the system libunwind. import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config, libcxx.test.dsl lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') config.substitutions.append(('%{flags}', '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else '' )) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{include}' )) config.substitutions.append(('%{link_flags}', '-nostdlib++ -L %{lib} -lc++ -lunwind' )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T -- ' )) config.stdlib = 'apple-libc++' config.using_system_stdlib = True # TODO: This is a giant hack, but we need to change the install_name of libunwind.dylib because the # upstream configuration can't currently produce a libunwind.dylib that is compatible with the # Apple system one. import subprocess subprocess.check_call(['install_name_tool', '-id', '/usr/lib/system/libunwind.dylib', '@LIBUNWIND_TESTING_INSTALL_PREFIX@/lib/libunwind.dylib']) import os, site import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/armv7m-picolibc-libunwind.cfg.in ================================================ lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') libc_linker_script = '@CMAKE_INSTALL_PREFIX@/lib/picolibcpp.ld' config.substitutions.append(('%{flags}', '--sysroot=@CMAKE_INSTALL_PREFIX@')) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{include}' )) config.substitutions.append(('%{link_flags}', '-nostdlib -nostdlib++ -L %{lib} -lunwind' ' -lc -lm -lclang_rt.builtins -lsemihost -lcrt0-semihost' + ' -T {}'.format(libc_linker_script) + ' -Wl,--defsym=__flash=0x0' ' -Wl,--defsym=__flash_size=0x400000' ' -Wl,--defsym=__ram=0x21000000' ' -Wl,--defsym=__ram_size=0x1000000' ' -Wl,--defsym=__stack_size=0x1000' )) config.executor = ( '@LIBUNWIND_LIBCXX_PATH@/utils/qemu_baremetal.py' ' --qemu @QEMU_SYSTEM_ARM@' ' --machine mps2-an385' ' --cpu cortex-m3') config.substitutions.append(('%{exec}', '%{executor}' ' --execdir %T' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/cmake-bridge.cfg.in ================================================ @AUTO_GEN_COMMENT@ @SERIALIZED_LIT_PARAMS@ # # This file performs the bridge between the CMake configuration and the Lit # configuration files by setting up the LitConfig object and various Lit # substitutions from CMake variables. # # Individual configuration files can take advantage of this bridge by # loading the file and then setting up the remaining Lit substitutions. # import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.format # Basic configuration of the test suite config.name = os.path.basename('@LIBUNWIND_TEST_CONFIG@') config.test_source_root = os.path.join('@LIBUNWIND_SOURCE_DIR@', 'test') config.test_format = libcxx.test.format.CxxStandardLibraryTest() config.recursiveExpansionLimit = 10 config.test_exec_root = os.path.join('@LIBUNWIND_BINARY_DIR@', 'test') # Add a few features that are common to all the configurations if @LIBUNWIND_USES_ARM_EHABI@: config.available_features.add('libunwind-arm-ehabi') if not @LIBUNWIND_ENABLE_THREADS@: config.available_features.add('libunwind-no-threads') # Add substitutions for bootstrapping the test suite configuration config.substitutions.append(('%{install-prefix}', '@LIBUNWIND_TESTING_INSTALL_PREFIX@')) config.substitutions.append(('%{include}', '@LIBUNWIND_TESTING_INSTALL_PREFIX@/include')) config.substitutions.append(('%{lib}', '@LIBUNWIND_TESTING_INSTALL_PREFIX@/@LIBUNWIND_INSTALL_LIBRARY_DIR@')) config.substitutions.append(('%{benchmark_flags}', '')) ================================================ FILE: ThirdParty/libunwind/test/configs/ibm-libunwind-shared.cfg.in ================================================ # Configuration file for running the libunwind tests on AIX. # lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') import lit.util if lit.util.isAIXTriple(config.target_triple): # Add the AIX version to the triple here because there currently isn't a good # way to retrieve the AIX version in the driver. config.target_triple = lit.util.addAIXVersion(config.target_triple) config.substitutions.append(('%{flags}', '')) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{include}' )) config.substitutions.append(('%{link_flags}', '-nostdlib++ -L %{lib} -lunwind -ldl -Wl,-bbigtoc' )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T --env LIBPATH=%{lib} -- ' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/llvm-libunwind-merged.cfg.in ================================================ # # Configuration file for running the libunwind tests against a libc++ shared library # into which the unwinder was merged. # lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') compile_flags = [] link_flags = [] if @LIBUNWIND_ENABLE_CET@: compile_flags.append('-fcf-protection=full') if @LIBUNWIND_ENABLE_GCS@: compile_flags.append('-mbranch-protection=standard') # On ELF platforms, link tests with -Wl,--export-dynamic if supported by the linker. if len('@CMAKE_EXE_EXPORTS_CXX_FLAG@'): link_flags.append('@CMAKE_EXE_EXPORTS_CXX_FLAG@') if '@CMAKE_DL_LIBS@': link_flags.append('-l@CMAKE_DL_LIBS@') # Stack unwinding tests need unwinding tables and these are not generated by default on all targets. compile_flags.append('-funwind-tables') local_sysroot = '@CMAKE_OSX_SYSROOT@' or '@CMAKE_SYSROOT@' config.substitutions.append(('%{flags}', '-isysroot {}'.format(local_sysroot) if local_sysroot else '' )) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{{include}} {}'.format(' '.join(compile_flags)) )) config.substitutions.append(('%{link_flags}', '-L %{{lib}} -Wl,-rpath,%{{lib}} -lc++ {}'.format(' '.join(link_flags)) )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T -- ' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/llvm-libunwind-shared-mingw.cfg.in ================================================ # This testing configuration handles running the test suite against LLVM's libunwind # using a DLL with MinGW/Clang on Windows. lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') config.substitutions.append(('%{flags}', '')) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{include} -funwind-tables' )) config.substitutions.append(('%{link_flags}', '-L %{lib} -lunwind' )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T --prepend_env PATH=%{install-prefix}/bin -- ' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/llvm-libunwind-shared.cfg.in ================================================ # # Configuration file for running the libunwind tests against the shared library. # lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') compile_flags = [] link_flags = [] if @LIBUNWIND_ENABLE_CET@: compile_flags.append('-fcf-protection=full') if @LIBUNWIND_ENABLE_GCS@: compile_flags.append('-mbranch-protection=standard') # On ELF platforms, link tests with -Wl,--export-dynamic if supported by the linker. if len('@CMAKE_EXE_EXPORTS_CXX_FLAG@'): link_flags.append('@CMAKE_EXE_EXPORTS_CXX_FLAG@') if '@CMAKE_DL_LIBS@': link_flags.append('-l@CMAKE_DL_LIBS@') # Stack unwinding tests need unwinding tables and these are not generated by default on all targets. compile_flags.append('-funwind-tables') local_sysroot = '@CMAKE_OSX_SYSROOT@' or '@CMAKE_SYSROOT@' config.substitutions.append(('%{flags}', '-isysroot {}'.format(local_sysroot) if local_sysroot else '' )) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{{include}} {}'.format(' '.join(compile_flags)) )) config.substitutions.append(('%{link_flags}', '-L %{{lib}} -Wl,-rpath,%{{lib}} -lunwind {}'.format(' '.join(link_flags)) )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T -- ' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/llvm-libunwind-static-mingw.cfg.in ================================================ # This testing configuration handles running the test suite against LLVM's libunwind # using a static library with MinGW/Clang on Windows. lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') config.substitutions.append(('%{flags}', '')) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{include} -funwind-tables' )) config.substitutions.append(('%{link_flags}', '-L %{lib} -lunwind' )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T --prepend_env PATH=%{lib} -- ' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/configs/llvm-libunwind-static.cfg.in ================================================ # # Configuration file for running the libunwind tests against the static library. # lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') compile_flags = [] link_flags = [] if @LIBUNWIND_ENABLE_THREADS@: link_flags.append('-lpthread') if @LIBUNWIND_ENABLE_CET@: compile_flags.append('-fcf-protection=full') if @LIBUNWIND_ENABLE_GCS@: compile_flags.append('-mbranch-protection=standard') # On ELF platforms, link tests with -Wl,--export-dynamic if supported by the linker. if len('@CMAKE_EXE_EXPORTS_CXX_FLAG@'): link_flags.append('@CMAKE_EXE_EXPORTS_CXX_FLAG@') if '@CMAKE_DL_LIBS@': link_flags.append('-l@CMAKE_DL_LIBS@') # Stack unwinding tests need unwinding tables and these are not generated by default on all targets. compile_flags.append('-funwind-tables') local_sysroot = '@CMAKE_OSX_SYSROOT@' or '@CMAKE_SYSROOT@' config.substitutions.append(('%{flags}', '-isysroot {}'.format(local_sysroot) if local_sysroot else '' )) config.substitutions.append(('%{compile_flags}', '-nostdinc++ -I %{{include}} {}'.format(' '.join(compile_flags)) )) config.substitutions.append(('%{link_flags}', '%{{lib}}/libunwind.a {}'.format(' '.join(link_flags)) )) config.substitutions.append(('%{exec}', '%{executor} --execdir %T -- ' )) import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.config libcxx.test.config.configure( libcxx.test.params.DEFAULT_PARAMETERS, libcxx.test.features.DEFAULT_FEATURES, config, lit_config ) ================================================ FILE: ThirdParty/libunwind/test/floatregister.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // REQUIRES: linux && target={{aarch64-.+}} // Basic test for float registers number are accepted. #include #include #include // Using __attribute__((section("main_func"))) is ELF specific, but then // this entire test is marked as requiring Linux, so we should be good. // // We don't use dladdr() because on musl it's a no-op when statically linked. extern char __start_main_func; extern char __stop_main_func; _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) { (void)arg; // Unwind until the main is reached, above frames depend on the platform and // architecture. uintptr_t ip = _Unwind_GetIP(ctx); if (ip >= (uintptr_t)&__start_main_func && ip < (uintptr_t)&__stop_main_func) { _Exit(0); } return _URC_NO_REASON; } __attribute__((noinline)) void foo() { // Provide some CFI directives that instructs the unwinder where given // float register is. #if defined(__aarch64__) // DWARF register number for V0-V31 registers are 64-95. // Previous value of V0 is saved at offset 0 from CFA. asm volatile(".cfi_offset 64, 0"); // From now on the previous value of register can't be restored anymore. asm volatile(".cfi_undefined 65"); asm volatile(".cfi_undefined 95"); // Previous value of V2 is in V30. asm volatile(".cfi_register 66, 94"); #endif _Unwind_Backtrace(frame_handler, NULL); } __attribute__((section("main_func"))) int main() { foo(); return -2; } ================================================ FILE: ThirdParty/libunwind/test/forceunwind.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // REQUIRES: linux // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan // Basic test for _Unwind_ForcedUnwind. // See libcxxabi/test/forced_unwind* tests too. #undef NDEBUG #include #include #include #include #include #include #include #include #include // Using __attribute__((section("main_func"))) is Linux specific, but then // this entire test is marked as requiring Linux, so we should be good. // // We don't use dladdr() because on musl it's a no-op when statically linked. extern char __start_main_func; extern char __stop_main_func; void foo(); _Unwind_Exception ex; _Unwind_Reason_Code stop(int version, _Unwind_Action actions, _Unwind_Exception_Class exceptionClass, _Unwind_Exception *exceptionObject, struct _Unwind_Context *context, void *stop_parameter) { assert(version == 1); assert((actions & _UA_FORCE_UNWIND) != 0); (void)exceptionClass; assert(exceptionObject == &ex); assert(stop_parameter == &foo); // Unwind until the main is reached, above frames depend on the platform and // architecture. uintptr_t ip = _Unwind_GetIP(context); if (ip >= (uintptr_t)&__start_main_func && ip < (uintptr_t)&__stop_main_func) { _Exit(0); } return _URC_NO_REASON; } __attribute__((noinline)) void foo() { // Arm EHABI defines struct _Unwind_Control_Block as exception // object. Ensure struct _Unwind_Exception* work there too, // because _Unwind_Exception in this case is just an alias. struct _Unwind_Exception *e = &ex; #if defined(_LIBUNWIND_ARM_EHABI) // Create a mock exception object. memset(e, '\0', sizeof(*e)); memcpy(&e->exception_class, "CLNGUNW", sizeof(e->exception_class)); #endif _Unwind_ForcedUnwind(e, stop, (void *)&foo); } __attribute__((section("main_func"))) int main() { foo(); return -2; } ================================================ FILE: ThirdParty/libunwind/test/frameheadercache_test.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // The other libunwind tests don't test internal interfaces, so the include path // is a little wonky. #include "../src/config.h" // Only run this test under supported configurations. #if defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) && \ defined(_LIBUNWIND_USE_FRAME_HEADER_CACHE) #include #include // This file defines several of the data structures needed here, // and includes FrameHeaderCache.hpp as well. #include "../src/AddressSpace.hpp" #define kBaseAddr 0xFFF000 #define kTextSegmentLength 0xFF using namespace libunwind; int main(int, char**) { FrameHeaderCache FHC; struct dl_phdr_info PInfo; memset(&PInfo, 0, sizeof(PInfo)); // The cache itself should only care about these two fields--they // tell the cache to invalidate or not; everything else is handled // by AddressSpace.hpp. PInfo.dlpi_adds = 6; PInfo.dlpi_subs = 7; UnwindInfoSections UIS; UIS.dso_base = kBaseAddr; UIS.text_segment_length = kTextSegmentLength; dl_iterate_cb_data CBData; // Unused by the cache. CBData.addressSpace = nullptr; CBData.sects = &UIS; CBData.targetAddr = kBaseAddr + 1; // Nothing present, shouldn't find. if (FHC.find(&PInfo, 0, &CBData)) abort(); FHC.add(&UIS); // Just added. Should find. if (!FHC.find(&PInfo, 0, &CBData)) abort(); // Cache is invalid. Shouldn't find. PInfo.dlpi_adds++; if (FHC.find(&PInfo, 0, &CBData)) abort(); FHC.add(&UIS); CBData.targetAddr = kBaseAddr - 1; // Shouldn't find something outside of the addresses. if (FHC.find(&PInfo, 0, &CBData)) abort(); // Add enough things to the cache that the entry is evicted. for (int i = 0; i < 9; i++) { UIS.dso_base = kBaseAddr + (kTextSegmentLength * i); FHC.add(&UIS); } CBData.targetAddr = kBaseAddr; // Should have been evicted. if (FHC.find(&PInfo, 0, &CBData)) abort(); return 0; } #else int main(int, char**) { return 0;} #endif ================================================ FILE: ThirdParty/libunwind/test/libunwind_01.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // TODO: Investigate this failure on x86_64 macOS back deployment // XFAIL: stdlib=system && target=x86_64-apple-macosx{{10.9|10.10|10.11|10.12|10.13|10.14|10.15|11.0|12.0}} // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan #include #include #include #include void backtrace(int lower_bound) { unw_context_t context; unw_getcontext(&context); unw_cursor_t cursor; unw_init_local(&cursor, &context); char buffer[1024]; unw_word_t offset = 0; int n = 0; do { n++; if (unw_get_proc_name(&cursor, buffer, sizeof(buffer), &offset) == 0) { fprintf(stderr, "Frame %d: %s+%p\n", n, buffer, (void*)offset); } else { fprintf(stderr, "Frame %d: Could not get name for cursor\n", n); } if (n > 100) { abort(); } } while (unw_step(&cursor) > 0); if (n < lower_bound) { abort(); } } __attribute__((noinline)) void test1(int i) { fprintf(stderr, "starting %s\n", __func__); backtrace(i); fprintf(stderr, "finished %s\n", __func__); // ensure return address is saved } __attribute__((noinline)) void test2(int i, int j) { fprintf(stderr, "starting %s\n", __func__); backtrace(i); test1(j); fprintf(stderr, "finished %s\n", __func__); // ensure return address is saved } __attribute__((noinline)) void test3(int i, int j, int k) { fprintf(stderr, "starting %s\n", __func__); backtrace(i); test2(j, k); fprintf(stderr, "finished %s\n", __func__); // ensure return address is saved } void test_no_info() { unw_context_t context; unw_getcontext(&context); unw_cursor_t cursor; unw_init_local(&cursor, &context); unw_proc_info_t info; int ret = unw_get_proc_info(&cursor, &info); if (ret != UNW_ESUCCESS) abort(); // Set the IP to an address clearly outside any function. unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)0); ret = unw_get_proc_info(&cursor, &info); if (ret != UNW_ENOINFO) abort(); } void test_reg_names() { unw_context_t context; unw_getcontext(&context); unw_cursor_t cursor; unw_init_local(&cursor, &context); int max_reg_num = -100; #if defined(__i386__) max_reg_num = 7; #elif defined(__x86_64__) max_reg_num = 32; #endif const char prefix[] = "unknown"; for (int i = -2; i < max_reg_num; ++i) { if (strncmp(prefix, unw_regname(&cursor, i), sizeof(prefix) - 1) == 0) abort(); } if (strncmp(prefix, unw_regname(&cursor, max_reg_num + 1), sizeof(prefix) - 1) != 0) abort(); } #if defined(__x86_64__) void test_reg_get_set() { unw_context_t context; unw_getcontext(&context); unw_cursor_t cursor; unw_init_local(&cursor, &context); for (int i = 0; i < 17; ++i) { const unw_word_t set_value = 7; if (unw_set_reg(&cursor, i, set_value) != UNW_ESUCCESS) abort(); unw_word_t get_value = 0; if (unw_get_reg(&cursor, i, &get_value) != UNW_ESUCCESS) abort(); if (set_value != get_value) abort(); } } void test_fpreg_get_set() { unw_context_t context; unw_getcontext(&context); unw_cursor_t cursor; unw_init_local(&cursor, &context); // get/set is not implemented for x86_64 fpregs. for (int i = 17; i < 33; ++i) { const unw_fpreg_t set_value = 7; if (unw_set_fpreg(&cursor, i, set_value) != UNW_EBADREG) abort(); unw_fpreg_t get_value = 0; if (unw_get_fpreg(&cursor, i, &get_value) != UNW_EBADREG) abort(); } } #else void test_reg_get_set() {} void test_fpreg_get_set() {} #endif int main(int, char**) { test1(3); test2(3, 4); test3(3, 4, 5); test_no_info(); test_reg_names(); test_reg_get_set(); test_fpreg_get_set(); return 0; } ================================================ FILE: ThirdParty/libunwind/test/libunwind_02.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan // This test fails on older llvm, when built with picolibc. // XFAIL: clang-16 && LIBCXX-PICOLIBC-FIXME #undef NDEBUG #include #include #include #define EXPECTED_NUM_FRAMES 50 #define NUM_FRAMES_UPPER_BOUND 100 __attribute__((noinline)) _Unwind_Reason_Code callback(_Unwind_Context *context, void *cnt) { (void)context; int *i = (int *)cnt; ++*i; if (*i > NUM_FRAMES_UPPER_BOUND) { abort(); } return _URC_NO_REASON; } __attribute__((noinline)) void test_backtrace() { int n = 0; _Unwind_Backtrace(&callback, &n); if (n < EXPECTED_NUM_FRAMES) { abort(); } } // These functions are effectively the same, but we have to be careful to avoid // unwanted optimizations that would mess with the number of frames we expect. // Surprisingly, slapping `noinline` is not sufficient -- we also have to avoid // writing the function in a way that the compiler can easily spot tail // recursion. __attribute__((noinline)) int test1(int i); __attribute__((noinline)) int test2(int i); __attribute__((noinline)) int test1(int i) { if (i == 0) { test_backtrace(); return 0; } else { return i + test2(i - 1); } } __attribute__((noinline)) int test2(int i) { if (i == 0) { test_backtrace(); return 0; } else { return i + test1(i - 1); } } int main(int, char**) { int total = test1(50); assert(total == 1275); return 0; } ================================================ FILE: ThirdParty/libunwind/test/lit.cfg.py ================================================ # All the Lit configuration is handled in the site configs -- this file is only # left as a canary to catch invocations of Lit that do not go through llvm-lit. # # Invocations that go through llvm-lit will automatically use the right Lit # site configuration inside the build directory. lit_config.fatal( "You seem to be running Lit directly -- you should be running Lit through " "/bin/llvm-lit, which will ensure that the right Lit configuration " "file is used. See https://libcxx.llvm.org/TestingLibcxx.html#usage for " "how to run the libunwind tests." ) ================================================ FILE: ThirdParty/libunwind/test/remember_state_leak.pass.sh.s ================================================ #===------------------------------------------------------------------------===# # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # #===------------------------------------------------------------------------===# # REQUIRES: target={{x86_64-.+-linux-gnu}} # Inline assembly isn't supported by Memory Sanitizer # UNSUPPORTED: msan # RUN: %{build} -no-pie # RUN: %{run} # The following assembly is a translation of this code: # # _Unwind_Reason_Code callback(int, _Unwind_Action, long unsigned int, # _Unwind_Exception*, _Unwind_Context*, void*) { # return _Unwind_Reason_Code(0); # } # # int main() { # asm(".cfi_remember_state\n\t"); # _Unwind_Exception exc; # _Unwind_ForcedUnwind(&exc, callback, 0); # asm(".cfi_restore_state\n\t"); # } # # When unwinding, the CFI parser will stop parsing opcodes after the current PC, # so in this case the DW_CFA_restore_state opcode will never be processed and, # if the library doesn't clean up properly, the store allocated by # DW_CFA_remember_state will be leaked. # # This test will fail when linked with an asan-enabled libunwind if the # remembered state is leaked. SIZEOF_UNWIND_EXCEPTION = 32 .text callback: xorl %eax, %eax retq .globl main # -- Begin function main .p2align 4, 0x90 .type main,@function main: # @main .cfi_startproc subq $8, %rsp # Adjust stack alignment subq $SIZEOF_UNWIND_EXCEPTION, %rsp .cfi_def_cfa_offset 48 .cfi_remember_state movq %rsp, %rdi movabsq $callback, %rsi xorl %edx, %edx callq _Unwind_ForcedUnwind .cfi_restore_state xorl %eax, %eax addq $SIZEOF_UNWIND_EXCEPTION, %rsp addq $8, %rsp # Undo stack alignment adjustment .cfi_def_cfa_offset 8 retq .Lfunc_end1: .size main, .Lfunc_end1-main .cfi_endproc # -- End function ================================================ FILE: ThirdParty/libunwind/test/signal_frame.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Ensure that functions marked as signal frames are reported as such. // TODO: Investigate this failure on Apple // XFAIL: target={{.+}}-apple-{{.+}} // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan // UNSUPPORTED: libunwind-arm-ehabi // The AIX assembler does not support CFI directives, which // are necessary to run this test. // UNSUPPORTED: target={{.*}}-aix{{.*}} // Windows doesn't generally use CFI directives. However, i686 // mingw targets do use DWARF (where CFI directives are supported). // UNSUPPORTED: target={{x86_64|arm.*|aarch64}}-{{.*}}-windows-{{.*}} #undef NDEBUG #include #include #include void test() { asm(".cfi_signal_frame"); unw_cursor_t cursor; unw_context_t uc; unw_getcontext(&uc); unw_init_local(&cursor, &uc); assert(unw_step(&cursor) > 0); assert(unw_is_signal_frame(&cursor)); } int main(int, char**) { test(); return 0; } ================================================ FILE: ThirdParty/libunwind/test/signal_unwind.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Ensure that the unwinder can cope with the signal handler. // REQUIRES: target={{(aarch64|loongarch64|riscv64|s390x|x86_64)-.+linux.*}} // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan // Note: this test fails on musl because: // // (a) musl disables emission of unwind information for its build, and // (b) musl's signal trampolines don't include unwind information // // XFAIL: target={{.*}}-musl #undef NDEBUG #include #include #include #include #include #include #include #include // Using __attribute__((section("main_func"))) is ELF specific, but then // this entire test is marked as requiring Linux, so we should be good. // // We don't use dladdr() because on musl it's a no-op when statically linked. extern char __start_main_func; extern char __stop_main_func; _Unwind_Reason_Code frame_handler(struct _Unwind_Context* ctx, void* arg) { (void)arg; // Unwind until the main is reached, above frames depend on the platform and // architecture. uintptr_t ip = _Unwind_GetIP(ctx); if (ip >= (uintptr_t)&__start_main_func && ip < (uintptr_t)&__stop_main_func) { _Exit(0); } return _URC_NO_REASON; } void signal_handler(int signum) { (void)signum; _Unwind_Backtrace(frame_handler, NULL); _Exit(-1); } __attribute__((section("main_func"))) int main(int, char **) { signal(SIGUSR1, signal_handler); kill(getpid(), SIGUSR1); return -2; } ================================================ FILE: ThirdParty/libunwind/test/unw_getcontext.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #undef NDEBUG #include #include int main(int, char**) { unw_context_t context; int ret = unw_getcontext(&context); assert(ret == UNW_ESUCCESS); return 0; } ================================================ FILE: ThirdParty/libunwind/test/unw_resume.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Ensure that unw_resume() resumes execution at the stack frame identified by // cursor. // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan #include __attribute__((noinline)) void test_unw_resume() { unw_context_t context; unw_cursor_t cursor; unw_getcontext(&context); unw_init_local(&cursor, &context); unw_step(&cursor); unw_resume(&cursor); } int main() { test_unw_resume(); return 0; } ================================================ FILE: ThirdParty/libunwind/test/unwind_leaffunction.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Ensure that leaf function can be unwund. // REQUIRES: target={{(aarch64|loongarch64|riscv64|s390x|x86_64)-.+linux.*}} // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan // Note: this test fails on musl because: // // (a) musl disables emission of unwind information for its build, and // (b) musl's signal trampolines don't include unwind information // // XFAIL: target={{.*}}-musl #undef NDEBUG #include #include #include #include #include #include #include #include // Using __attribute__((section("main_func"))) is ELF specific, but then // this entire test is marked as requiring Linux, so we should be good. // // We don't use dladdr() because on musl it's a no-op when statically linked. extern char __start_main_func; extern char __stop_main_func; _Unwind_Reason_Code frame_handler(struct _Unwind_Context* ctx, void* arg) { (void)arg; // Unwind until the main is reached, above frames depend on the platform and // architecture. uintptr_t ip = _Unwind_GetIP(ctx); if (ip >= (uintptr_t)&__start_main_func && ip < (uintptr_t)&__stop_main_func) { _Exit(0); } return _URC_NO_REASON; } void signal_handler(int signum) { (void)signum; _Unwind_Backtrace(frame_handler, NULL); _Exit(-1); } __attribute__((noinline)) void crashing_leaf_func(int do_trap) { // libunwind searches for the address before the return address which points // to the trap instruction. We make the trap conditional and prevent inlining // of the function to ensure that the compiler doesn't remove the `ret` // instruction altogether. // // It's also important that the trap instruction isn't the first instruction // in the function (which it isn't because of the branch) for other unwinders // that also decrement pc. if (do_trap) __builtin_trap(); } __attribute__((section("main_func"))) int main(int, char **) { signal(SIGTRAP, signal_handler); signal(SIGILL, signal_handler); crashing_leaf_func(1); return -2; } ================================================ FILE: ThirdParty/libunwind/test/unwind_scalable_vectors.pass.cpp ================================================ // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // REQUIRES: linux && target={{riscv64-.+}} #undef NDEBUG #include #include #ifdef __riscv_vector __attribute__((noinline)) extern "C" void stepper() { unw_cursor_t cursor; unw_context_t uc; unw_getcontext(&uc); unw_init_local(&cursor, &uc); // Stepping into foo() should succeed. assert(unw_step(&cursor) > 0); // Stepping past foo() should succeed, too. assert(unw_step(&cursor) > 0); } // Check correct unwinding of frame with VLENB-sized objects (vector registers). __attribute__((noinline)) static void foo() { __rvv_int32m1_t v; asm volatile("" : "=vr"(v)); // Dummy inline asm to def v. stepper(); // def-use of v has cross the function, so that // will triger spill/reload to/from the stack. asm volatile("" ::"vr"(v)); // Dummy inline asm to use v. } int main() { foo(); } #else int main() { return 0; } #endif ================================================ FILE: VERSION ================================================ 0.0.0-prerelease ================================================ FILE: WebAssembly.tmLanguage ================================================ comment fileTypes wast foldingStartMarker \( foldingStopMarker \) keyEquivalent ^~L name WebAssembly patterns captures 1 name punctuation.definition.comment.wasm match (;;).*$\n? name comment.line.semicolon.wasm captures 1 name punctuation.definition.comment.wasm match \(;.*;\) name comment.block.wasm match(?<=[\s=();])block(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])loop(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])if(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])then(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])else(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])end(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])try(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])catch(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])catch_all(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])unreachable(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])br(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])br_if(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])br_table(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])return(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])call_indirect(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])call(?=[\s=();])nameentity.name.function.wasm match(?<=[\s=();])drop(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])select(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])local\.get(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])local\.set(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])local\.tee(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])global\.get(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])global\.set(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])table\.get(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])table\.set(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])nop(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])memory\.size(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])memory\.grow(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.load8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.load8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.load16_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.load16_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load16_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load16_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.store8(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.store16(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.store8(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.store16(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.store32(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.const(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.const(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.const(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.const(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.eqz(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.lt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.lt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.gt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.gt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.le_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.le_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.ge_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.ge_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.eqz(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.lt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.lt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.gt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.gt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.le_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.le_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.ge_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.ge_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.lt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.gt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.le(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.ge(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.lt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.gt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.le(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.ge(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.clz(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.ctz(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.popcnt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.div_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.div_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.rem_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.rem_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.and(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.or(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.xor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.shl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.shr_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.shr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.rotl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.rotr(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.clz(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.ctz(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.popcnt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.div_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.div_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.rem_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.rem_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.and(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.or(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.xor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.shl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.shr_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.shr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.rotl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.rotr(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.abs(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.ceil(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.floor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.trunc(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.nearest(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.sqrt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.div(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.min(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.max(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.copysign(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.abs(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.ceil(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.floor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.trunc(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.nearest(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.sqrt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.div(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.min(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.max(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.copysign(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.wrap_i64(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend_i32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend_i32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.demote_f64(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.promote_f32(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.reinterpret_f32(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.reinterpret_f64(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.reinterpret_i32(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.reinterpret_i64(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.extend8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.extend16_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend16_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])ref\.null(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])ref\.is_null(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])ref\.func(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.const(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.extract_lane_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.extract_lane_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.extract_lane_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.extract_lane_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.extract_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.extract_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.extract_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.extract_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.replace_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.replace_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.replace_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.replace_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.replace_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.replace_lane(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.swizzle(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.shuffle(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load8_splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load16_splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load32_splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load64_splat(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.narrow_i16x8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.narrow_i16x8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.narrow_i32x4_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.narrow_i32x4_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.extend_low_i8x16_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.extend_high_i8x16_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.extend_low_i8x16_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.extend_high_i8x16_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.extend_low_i16x8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.extend_high_i16x8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.extend_low_i16x8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.extend_high_i16x8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.add_sat_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.add_sat_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.add_sat_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.add_sat_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.sub_sat_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.sub_sat_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.sub_sat_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.sub_sat_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.min_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.min_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.min_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.min_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.min_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.min_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.min_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.min_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.max_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.max_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.max_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.max_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.max_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.max_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.max_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.max_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.avgr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.avgr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.shl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.shl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.shl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.shl(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.shr_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.shr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.shr_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.shr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.shr_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.shr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.shr_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.shr_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.and(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.or(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.xor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.not(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.bitselect(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.any_true(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.all_true(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.all_true(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.all_true(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.all_true(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.eq(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.ne(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.lt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.lt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.lt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.lt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.lt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.lt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.lt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.lt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.le_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.le_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.le_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.le_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.le_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.le_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.le(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.le(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.gt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.gt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.gt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.gt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.gt_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.gt_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.gt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.gt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.ge_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.ge_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.ge_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.ge_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.ge_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.ge_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.ge(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.ge(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.neg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.abs(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.abs(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.min(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.min(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.max(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.max(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.div(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.div(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.mul(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.sqrt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.sqrt(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.convert_i32_sx4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.convert_i32_ux4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.convert_i64_sx2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.convert_i64_ux2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.trunc_sat_f32x4_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.trunc_sat_f32x4_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.trunc_sat_f64x2_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.trunc_sat_f64x2_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load8x8_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load8x8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load16x4_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load16x4_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load32x2_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.load32x2_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v128\.andnot(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v8x16\.load_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v8x16\.load_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v8x16\.load_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v16x8\.load_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v16x8\.load_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v16x8\.load_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v32x4\.load_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v32x4\.load_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v32x4\.load_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v64x2\.load_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v64x2\.load_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v64x2\.load_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v8x16\.store_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v8x16\.store_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v8x16\.store_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v16x8\.store_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v16x8\.store_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v16x8\.store_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v32x4\.store_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v32x4\.store_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v32x4\.store_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v64x2\.store_interleaved_2(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v64x2\.store_interleaved_3(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])v64x2\.store_interleaved_4(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i8x16\.ltz_mask(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i16x8\.ltz_mask(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.ltz_mask(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])atomic\.notify(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.wait(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.wait(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])atomic\.fence(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.load(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.load8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.load16_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.load8_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.load16_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.load32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.store(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.store8(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.store16(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.store8(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.store16(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.store32(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.add(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.add_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.add_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.add_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.add_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.add_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.sub(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.sub_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.sub_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.sub_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.sub_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.sub_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.and(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.and(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.and_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.and_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.and_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.and_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.and_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.or(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.or(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.or_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.or_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.or_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.or_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.or_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.xor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.xor(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.xor_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.xor_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.xor_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.xor_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.xor_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.xchg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.xchg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.xchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.xchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.xchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.xchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.xchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw\.cmpxchg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw\.cmpxchg(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw8\.cmpxchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.atomic\.rmw16\.cmpxchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw8\.cmpxchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw16\.cmpxchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.atomic\.rmw32\.cmpxchg_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])throw(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])rethrow(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])memory\.init(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])data\.drop(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])memory\.copy(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])memory\.fill(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])table\.init(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])elem\.drop(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])table\.copy(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])get_local(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])set_local(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])tee_local(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])get_global(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])set_global(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.convert_i32x4_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32x4\.convert_i32x4_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.convert_i64x2_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64x2\.convert_i64x2_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.trunc_sat_f32x4_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32x4\.trunc_sat_f32x4_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.trunc_sat_f64x2_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64x2\.trunc_sat_f64x2_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend_i32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.extend_i32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f32\.convert_i64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])f64\.convert_i64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i32\.trunc_sat_f64_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f32_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f32_u(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f64_s(?=[\s=();])namekeyword.operator.wasm match(?<=[\s=();])i64\.trunc_sat_f64_u(?=[\s=();])namekeyword.operator.wasm match (?<=[\s=();])(module|binary|quote|memory|table|data|elem|passive|type|import|export|global|exception_type|ref\.host|func|param|result|local|calling_conv)(?=[\s=();]) name entity.name.function.wasm match (?<=[\s=();])(assert_return|assert_return_arithmetic|assert_return_canonical_nan|assert_return_func|assert_trap|assert_throws|assert_invalid|assert_malformed|assert_unlinkable|invoke|get)(?=[\s=();]) name entity.name.function.wasm match (?<=[\s=();])((align|offset)=) name support.function.wasm match (?<=[\s=();])[+\-]?nan((\:0[xX][\da-fA-F]+(_[\da-fA-F]+)*)?(?=[\s=();])|canonical|arithmetic) name constant.numeric.wasm match (?<=[\s=();])([+\-]?inf)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])([+\-]?0[xX][\da-fA-F]+(_[\da-fA-F]+)*\.([\da-fA-F]+(_[\da-fA-F]+)*)*([pP][+\-]?\d+(_\d+)*)?)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])([+\-]?0[xX][\da-fA-F]+(_[\da-fA-F]+)*[pP][+\-]?\d+(_\d+)*)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])([+\-]?\d+(_\d+)*)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])([+\-]?\d+(_\d+)*\.(\d+(_\d+)*)*([eE][+\-]?\d+(_\d+)*)?)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])([+\-]?\d+(_\d+)*[eE][+\-]?\d+(_\d+)*)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])([+\-]?0[xX][\da-fA-F]+(_[\da-fA-F]+)*)(?=[\s=();]) name constant.numeric.wasm match (?<=[\s=();])\$[a-zA-Z0-9'_+*/~=<>!?@#$%&|:`.\-\^\\]+(?=[\s=();]) name variable.parameter.function.wasm match (?<=[\s=();])\$"([^" \\]*(\\.)*)*"(?=[\s=();]) name variable.parameter.function.wasm begin (?<=[\s=();])$" beginCaptures 0 name punctuation.definition.string.begin.wasm end "(?=[\s=();]) endCaptures 0 name punctuation.definition.string.end.wasm name variable.parameter.function.wasm patterns match \\([0-9a-fA-F]{2}|\"|\\) name constant.character.escape.wasm begin (?<=[\s=();])" beginCaptures 0 name punctuation.definition.string.begin.wasm end "(?=[\s=();]) endCaptures 0 name punctuation.definition.string.end.wasm name constant.character patterns match \\([0-9a-fA-F]{2}|\"|\\) name constant.character.escape.wasm match (?<=[\s=();])(i8x16|i16x8|i32x4|i64x2|f32x4|f64x2) name constant.language.wasm match (?<=[\s=();])(i32|i64|f32|f64|v128|mut|anyfunc|funcref|externref|extern|shared) name constant.language.wasm scopeName source.wasm uuid F01196A6-B58F-465B-A75D-4CF5D69A0019 ================================================ FILE: cmake/DetectSyncPrimitiveSizes.cmake ================================================ # Detect the size and alignment of the platform's synchronization primitive types. # This replaces the manually-maintained #ifdef blocks in Mutex.h, RWMutex.h, etc. if(MSVC) set(DETECT_SYNC_SIZES_SOURCE " #include #include int main() { printf(\"MUTEX_SIZE=%zu\\n\", sizeof(SRWLOCK)); printf(\"MUTEX_ALIGN=%zu\\n\", alignof(SRWLOCK)); printf(\"COND_SIZE=%zu\\n\", sizeof(CONDITION_VARIABLE)); printf(\"COND_ALIGN=%zu\\n\", alignof(CONDITION_VARIABLE)); printf(\"RWMUTEX_SIZE=%zu\\n\", sizeof(SRWLOCK)); printf(\"RWMUTEX_ALIGN=%zu\\n\", alignof(SRWLOCK)); return 0; } ") else() set(DETECT_SYNC_SIZES_SOURCE " #include #include int main() { printf(\"MUTEX_SIZE=%zu\\n\", sizeof(pthread_mutex_t)); printf(\"MUTEX_ALIGN=%zu\\n\", alignof(pthread_mutex_t)); printf(\"COND_SIZE=%zu\\n\", sizeof(pthread_cond_t)); printf(\"COND_ALIGN=%zu\\n\", alignof(pthread_cond_t)); printf(\"RWMUTEX_SIZE=%zu\\n\", sizeof(pthread_rwlock_t)); printf(\"RWMUTEX_ALIGN=%zu\\n\", alignof(pthread_rwlock_t)); return 0; } ") endif() # Write the detection source to a temporary file file(WRITE "${CMAKE_BINARY_DIR}/detect_sync_sizes.cpp" "${DETECT_SYNC_SIZES_SOURCE}") # Try to compile and run the detection program try_run( DETECT_SYNC_RUN_RESULT DETECT_SYNC_COMPILE_RESULT "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/detect_sync_sizes.cpp" RUN_OUTPUT_VARIABLE DETECT_SYNC_OUTPUT ) if(NOT DETECT_SYNC_COMPILE_RESULT) message(FATAL_ERROR "Failed to compile sync primitive size detection program") endif() if(NOT DETECT_SYNC_RUN_RESULT EQUAL 0) message(FATAL_ERROR "Failed to run sync primitive size detection program") endif() # Parse the output string(REGEX MATCH "MUTEX_SIZE=([0-9]+)" _ "${DETECT_SYNC_OUTPUT}") set(WAVM_PLATFORM_MUTEX_SIZE ${CMAKE_MATCH_1}) string(REGEX MATCH "MUTEX_ALIGN=([0-9]+)" _ "${DETECT_SYNC_OUTPUT}") set(WAVM_PLATFORM_MUTEX_ALIGN ${CMAKE_MATCH_1}) string(REGEX MATCH "COND_SIZE=([0-9]+)" _ "${DETECT_SYNC_OUTPUT}") set(WAVM_PLATFORM_COND_SIZE ${CMAKE_MATCH_1}) string(REGEX MATCH "COND_ALIGN=([0-9]+)" _ "${DETECT_SYNC_OUTPUT}") set(WAVM_PLATFORM_COND_ALIGN ${CMAKE_MATCH_1}) string(REGEX MATCH "RWMUTEX_SIZE=([0-9]+)" _ "${DETECT_SYNC_OUTPUT}") set(WAVM_PLATFORM_RWMUTEX_SIZE ${CMAKE_MATCH_1}) string(REGEX MATCH "RWMUTEX_ALIGN=([0-9]+)" _ "${DETECT_SYNC_OUTPUT}") set(WAVM_PLATFORM_RWMUTEX_ALIGN ${CMAKE_MATCH_1}) if(NOT WAVM_PLATFORM_MUTEX_SIZE OR NOT WAVM_PLATFORM_MUTEX_ALIGN) message(FATAL_ERROR "Failed to parse mutex sizes from: ${DETECT_SYNC_OUTPUT}") endif() if(NOT WAVM_PLATFORM_COND_SIZE OR NOT WAVM_PLATFORM_COND_ALIGN) message(FATAL_ERROR "Failed to parse condition variable sizes from: ${DETECT_SYNC_OUTPUT}") endif() if(NOT WAVM_PLATFORM_RWMUTEX_SIZE OR NOT WAVM_PLATFORM_RWMUTEX_ALIGN) message(FATAL_ERROR "Failed to parse rwmutex sizes from: ${DETECT_SYNC_OUTPUT}") endif() message(STATUS "Detected Mutex size: ${WAVM_PLATFORM_MUTEX_SIZE}, alignment: ${WAVM_PLATFORM_MUTEX_ALIGN}") message(STATUS "Detected ConditionVariable size: ${WAVM_PLATFORM_COND_SIZE}, alignment: ${WAVM_PLATFORM_COND_ALIGN}") message(STATUS "Detected RWMutex size: ${WAVM_PLATFORM_RWMUTEX_SIZE}, alignment: ${WAVM_PLATFORM_RWMUTEX_ALIGN}") ================================================ FILE: cmake/DetectUnwindStateSizes.cmake ================================================ # Detect the size and alignment of the platform's unwind state structures. # This is needed to create a platform-independent UnwindState struct that can # hold the platform-specific unwind context and cursor. if(MSVC) # On Windows, we use CONTEXT and related structures set(DETECT_UNWIND_SIZES_SOURCE " #include #include #include struct UnwindStateImpl { CONTEXT context; DWORD64 imageBase; void* runtimeFunction; // RUNTIME_FUNCTION* intptr_t ipAdjustment; bool valid; }; int main() { printf(\"STATE_SIZE=%zu\\n\", sizeof(UnwindStateImpl)); printf(\"STATE_ALIGN=%zu\\n\", alignof(UnwindStateImpl)); return 0; } ") else() # On POSIX, we use libunwind's unw_context_t and unw_cursor_t if(WAVM_BUILD_WAVMUNWIND) set(DETECT_UNWIND_INCLUDE_DIR "${WAVM_SOURCE_DIR}/ThirdParty/libunwind/include") else() set(DETECT_UNWIND_INCLUDE_DIR "") endif() set(DETECT_UNWIND_SIZES_SOURCE " #define UNW_LOCAL_ONLY #include #include #include struct UnwindStateImpl { unw_context_t context; unw_cursor_t cursor; intptr_t ipAdjustment; bool valid; }; int main() { printf(\"STATE_SIZE=%zu\\n\", sizeof(UnwindStateImpl)); printf(\"STATE_ALIGN=%zu\\n\", alignof(UnwindStateImpl)); return 0; } ") endif() # Write the detection source to a temporary file file(WRITE "${CMAKE_BINARY_DIR}/detect_unwind_sizes.cpp" "${DETECT_UNWIND_SIZES_SOURCE}") # Try to compile and run the detection program if(MSVC) try_run( DETECT_UNWIND_RUN_RESULT DETECT_UNWIND_COMPILE_RESULT "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/detect_unwind_sizes.cpp" RUN_OUTPUT_VARIABLE DETECT_UNWIND_OUTPUT ) else() if(DETECT_UNWIND_INCLUDE_DIR) try_run( DETECT_UNWIND_RUN_RESULT DETECT_UNWIND_COMPILE_RESULT "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/detect_unwind_sizes.cpp" CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${DETECT_UNWIND_INCLUDE_DIR}" RUN_OUTPUT_VARIABLE DETECT_UNWIND_OUTPUT ) else() try_run( DETECT_UNWIND_RUN_RESULT DETECT_UNWIND_COMPILE_RESULT "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/detect_unwind_sizes.cpp" RUN_OUTPUT_VARIABLE DETECT_UNWIND_OUTPUT ) endif() endif() if(NOT DETECT_UNWIND_COMPILE_RESULT) message(FATAL_ERROR "Failed to compile unwind state size detection program") endif() if(NOT DETECT_UNWIND_RUN_RESULT EQUAL 0) message(FATAL_ERROR "Failed to run unwind state size detection program") endif() # Parse the output string(REGEX MATCH "STATE_SIZE=([0-9]+)" _ "${DETECT_UNWIND_OUTPUT}") set(WAVM_PLATFORM_UNWIND_STATE_SIZE ${CMAKE_MATCH_1}) string(REGEX MATCH "STATE_ALIGN=([0-9]+)" _ "${DETECT_UNWIND_OUTPUT}") set(WAVM_PLATFORM_UNWIND_STATE_ALIGN ${CMAKE_MATCH_1}) if(NOT WAVM_PLATFORM_UNWIND_STATE_SIZE OR NOT WAVM_PLATFORM_UNWIND_STATE_ALIGN) message(FATAL_ERROR "Failed to parse unwind state sizes from: ${DETECT_UNWIND_OUTPUT}") endif() message(STATUS "Detected UnwindState size: ${WAVM_PLATFORM_UNWIND_STATE_SIZE}, alignment: ${WAVM_PLATFORM_UNWIND_STATE_ALIGN}") ================================================ FILE: vs-chromium-project.txt ================================================ [SourceExplorer.ignore] .git *.wasm [SearchableFiles.include] Dockerfile *.c *.cpp *.h *.inl *.md *.tmLanguage *.txt *.wast *.wat *.yml [SearchableFiles.ignore] .git